summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2022-02-08 17:38:00 -0600
committerGravatar GitHub <noreply@github.com> 2022-02-08 17:38:00 -0600
commit1abb9ed0800989f47351cc916f19fd8e0672e2c0 (patch)
treed67408ce66dce3d516c94b936339e76d1ff08829
parentcc436b4ce83402b19d163e0911bcef000cf9e7fb (diff)
downloadastro-1abb9ed0800989f47351cc916f19fd8e0672e2c0.tar.gz
astro-1abb9ed0800989f47351cc916f19fd8e0672e2c0.tar.zst
astro-1abb9ed0800989f47351cc916f19fd8e0672e2c0.zip
Upgrade Vite to latest (#2424)
* chore: unvendor vite * chore: upgrade vue and svelte * feat(renderer-solid): upgrade for vite@2.7.x * chore: update yarn.lock * fix(solid): upgrade solid renderer for vite@2.7.x * test: improve css test * chore: upgrade to vite@2.8.0-beta.3 * fix: replace hacky serialization with 'serialize-javascript' * fix: externalize serialize-javascript * fix: explicitly add execa@6.x.x to devDependencies * test(css): skip css?url test * chore: update vite-plugin-svelte * fix: ssr option * chore: update changeset * chore: remove changeset * chore: add changeset * chore: add back missing changeset * chore: update vite * chore: update to latest vite * test: update proload? * chore: update dependencies * fix: remove preact from nanostores example * fix: update static-build-pkg to use `.mjs` extension * fix: exclude './server.js' from custom-elements test * chore: remove unused file
-rw-r--r--.changeset/angry-apricots-invite.md5
-rw-r--r--.changeset/loud-seals-camp.md5
-rw-r--r--.changeset/many-berries-bake.md7
-rw-r--r--examples/with-nanostores/src/components/AdminsPreact.jsx30
-rw-r--r--examples/with-nanostores/src/pages/index.astro2
-rw-r--r--packages/astro/package.json16
-rw-r--r--packages/astro/src/@types/serialize-javascript.d.ts3
-rw-r--r--packages/astro/src/core/create-vite.ts7
-rw-r--r--packages/astro/src/core/vite.ts4
-rw-r--r--packages/astro/src/runtime/server/hydration.ts26
-rw-r--r--packages/astro/src/vite-plugin-astro/compile.ts20
-rw-r--r--packages/astro/src/vite-plugin-astro/index.ts13
-rw-r--r--packages/astro/src/vite-plugin-jsx/index.ts19
-rw-r--r--packages/astro/test/0-css.test.js7
-rw-r--r--packages/astro/test/fixtures/custom-elements/my-component-lib/index.js3
-rw-r--r--packages/astro/test/fixtures/static build/pkg/package.json8
-rw-r--r--packages/astro/test/fixtures/static build/pkg/pkg.mjs (renamed from packages/astro/test/fixtures/static build/pkg/pkg.js)0
-rw-r--r--packages/astro/vendor/vite/LICENSE.md2150
-rw-r--r--packages/astro/vendor/vite/client.d.ts204
-rwxr-xr-xpackages/astro/vendor/vite/dist/client/client.mjs565
-rwxr-xr-xpackages/astro/vendor/vite/dist/client/client.mjs.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/client/env.mjs30
-rwxr-xr-xpackages/astro/vendor/vite/dist/client/env.mjs.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-34d2edc0.js29182
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-34d2edc0.js.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-35df7f96.js92088
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-35df7f96.js.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-a5b4350d.js8734
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-a5b4350d.js.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-ac1b4bf9.js531
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-ac1b4bf9.js.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-dab866a6.js11404
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-dab866a6.js.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-e39b05d6.js746
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/chunks/dep-e39b05d6.js.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/cli.js803
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/cli.js.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/index.d.ts2580
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/index.js52
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/index.js.map1
-rwxr-xr-xpackages/astro/vendor/vite/dist/node/terser.js31356
-rw-r--r--packages/astro/vendor/vite/package.json139
-rw-r--r--packages/astro/vendor/vite/types/alias.d.ts59
-rw-r--r--packages/astro/vendor/vite/types/anymatch.d.ts5
-rw-r--r--packages/astro/vendor/vite/types/chokidar.d.ts218
-rw-r--r--packages/astro/vendor/vite/types/commonjs.d.ts162
-rw-r--r--packages/astro/vendor/vite/types/connect.d.ts111
-rw-r--r--packages/astro/vendor/vite/types/customEvent.d.ts5
-rw-r--r--packages/astro/vendor/vite/types/dynamicImportVars.d.ts17
-rw-r--r--packages/astro/vendor/vite/types/hmrPayload.d.ts57
-rw-r--r--packages/astro/vendor/vite/types/http-proxy.d.ts242
-rw-r--r--packages/astro/vendor/vite/types/importMeta.d.ts69
-rw-r--r--packages/astro/vendor/vite/types/package.json3
-rw-r--r--packages/astro/vendor/vite/types/shims.d.ts110
-rw-r--r--packages/astro/vendor/vite/types/terser.d.ts209
-rw-r--r--packages/astro/vendor/vite/types/ws.d.ts532
-rw-r--r--packages/renderers/renderer-solid/index.js16
-rw-r--r--packages/renderers/renderer-solid/package.json3
-rw-r--r--packages/renderers/renderer-solid/server.js2
-rw-r--r--packages/renderers/renderer-solid/static-html.js2
-rw-r--r--packages/renderers/renderer-svelte/package.json6
-rw-r--r--packages/renderers/renderer-vue/package.json4
-rw-r--r--yarn.lock1712
63 files changed, 364 insertions, 183929 deletions
diff --git a/.changeset/angry-apricots-invite.md b/.changeset/angry-apricots-invite.md
new file mode 100644
index 000000000..18db7ab25
--- /dev/null
+++ b/.changeset/angry-apricots-invite.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Fixes HMR of CSS that is imported from astro, when using the static build flag
diff --git a/.changeset/loud-seals-camp.md b/.changeset/loud-seals-camp.md
new file mode 100644
index 000000000..67dd8dff2
--- /dev/null
+++ b/.changeset/loud-seals-camp.md
@@ -0,0 +1,5 @@
+---
+'astro': minor
+---
+
+Upgrade `vite` to `2.8.x`, unvendoring `vite` and bringing Astro up-to-date with the ecosystem
diff --git a/.changeset/many-berries-bake.md b/.changeset/many-berries-bake.md
new file mode 100644
index 000000000..5c77ff973
--- /dev/null
+++ b/.changeset/many-berries-bake.md
@@ -0,0 +1,7 @@
+---
+'@astrojs/renderer-svelte': minor
+'@astrojs/renderer-vue': minor
+'@astrojs/renderer-solid': minor
+---
+
+Upgrade to vite@2.8.x
diff --git a/examples/with-nanostores/src/components/AdminsPreact.jsx b/examples/with-nanostores/src/components/AdminsPreact.jsx
deleted file mode 100644
index 2f93ed437..000000000
--- a/examples/with-nanostores/src/components/AdminsPreact.jsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { h, Fragment } from 'preact';
-import { useStore } from '@nanostores/preact';
-
-import { admins } from '../store/admins.js';
-import { counter, increaseCounter, decreaseCounter } from '../store/counter.js';
-
-const AdminsPreact = () => {
- const list = useStore(admins);
- const count = useStore(counter);
-
- return (
- <>
- <h1>Preact</h1>
- <ul>
- {list.map((admin) => (
- <li key={admin.id}>{JSON.stringify(admin, null, 2)}</li>
- ))}
- </ul>
- <div>
- <h3>Counter</h3>
- <p>{count.value}</p>
- <button onClick={decreaseCounter}>-1</button>
- <button onClick={increaseCounter}>+1</button>
- </div>
- <br />
- </>
- );
-};
-
-export default AdminsPreact;
diff --git a/examples/with-nanostores/src/pages/index.astro b/examples/with-nanostores/src/pages/index.astro
index 424384933..5aba10e8a 100644
--- a/examples/with-nanostores/src/pages/index.astro
+++ b/examples/with-nanostores/src/pages/index.astro
@@ -3,7 +3,6 @@
import AdminsReact from '../components/AdminsReact.jsx';
import AdminsSvelte from '../components/AdminsSvelte.svelte';
import AdminsVue from '../components/AdminsVue.vue';
-import AdminsPreact from '../components/AdminsPreact.jsx';
import AdminsSolid from '../components/AdminsSolid.jsx';
// Full Astro Component Syntax:
@@ -46,7 +45,6 @@ import AdminsSolid from '../components/AdminsSolid.jsx';
<AdminsReact client:load />
<AdminsSvelte client:load />
<AdminsVue client:load />
- <AdminsPreact client:load />
<AdminsSolid client:load />
</main>
</body>
diff --git a/packages/astro/package.json b/packages/astro/package.json
index 13907ed35..37af25283 100644
--- a/packages/astro/package.json
+++ b/packages/astro/package.json
@@ -66,18 +66,16 @@
"@astropub/webapi": "^0.10.1",
"@babel/core": "^7.15.8",
"@babel/traverse": "^7.15.4",
- "@proload/core": "^0.2.1",
+ "@proload/core": "^0.2.2",
"@proload/plugin-tsm": "^0.1.0",
"@types/babel__core": "^7.1.15",
"@types/debug": "^4.1.7",
"@web/parse5-utils": "^1.3.0",
- "astring": "^1.7.5",
"ci-info": "^3.2.0",
"common-ancestor-path": "^1.0.1",
"eol": "^0.9.1",
"es-module-lexer": "^0.9.3",
"esbuild": "0.13.7",
- "estree-util-value-to-estree": "^1.2.0",
"estree-walker": "^3.0.0",
"fast-glob": "^3.2.7",
"fast-xml-parser": "^4.0.0-beta.3",
@@ -93,10 +91,11 @@
"prismjs": "^1.25.0",
"rehype-slug": "^5.0.0",
"resolve": "^1.20.0",
- "rollup": "^2.57.0",
- "sass": "^1.43.4",
+ "rollup": "^2.64.0",
+ "sass": "^1.49.0",
"semver": "^7.3.5",
"send": "^0.17.1",
+ "serialize-javascript": "^6.0.0",
"shiki": "^0.10.0",
"shorthash": "^0.0.2",
"slash": "^4.0.0",
@@ -106,7 +105,7 @@
"strip-ansi": "^7.0.1",
"supports-esm": "^1.0.0",
"tsconfig-resolver": "^3.0.1",
- "vite": "~2.6.10",
+ "vite": "^2.8.0-beta.7",
"yargs-parser": "^21.0.0",
"zod": "^3.8.1"
},
@@ -125,9 +124,8 @@
"@types/yargs-parser": "^20.2.1",
"chai": "^4.3.4",
"cheerio": "^1.0.0-rc.10",
- "hast-util-select": "^5.0.1",
- "mocha": "^9.1.3",
- "vite": "~2.6.10"
+ "execa": "^6.0.0",
+ "mocha": "^9.1.3"
},
"engines": {
"node": "^14.15.0 || >=16.0.0",
diff --git a/packages/astro/src/@types/serialize-javascript.d.ts b/packages/astro/src/@types/serialize-javascript.d.ts
new file mode 100644
index 000000000..35ee081b2
--- /dev/null
+++ b/packages/astro/src/@types/serialize-javascript.d.ts
@@ -0,0 +1,3 @@
+declare module 'serialize-javascript' {
+ export default function serialize(value: any): string;
+}
diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts
index b458bea28..76f1c11b5 100644
--- a/packages/astro/src/core/create-vite.ts
+++ b/packages/astro/src/core/create-vite.ts
@@ -16,8 +16,8 @@ import { resolveDependency } from './util.js';
const ALWAYS_EXTERNAL = new Set([
...builtinModules.map((name) => `node:${name}`),
'@sveltejs/vite-plugin-svelte',
- 'estree-util-value-to-estree',
'micromark-util-events-to-acorn',
+ 'serialize-javascript',
'node-fetch',
'prismjs',
'shiki',
@@ -25,9 +25,6 @@ const ALWAYS_EXTERNAL = new Set([
'unified',
'whatwg-url',
]);
-const ALWAYS_NOEXTERNAL = new Set([
- 'astro', // This is only because Vite's native ESM doesn't resolve "exports" correctly.
-]);
// note: ssr is still an experimental API hence the type omission
export type ViteConfigWithSSR = vite.InlineConfig & { ssr?: { external?: string[]; noExternal?: string[] } };
@@ -72,7 +69,7 @@ export async function createVite(inlineConfig: ViteConfigWithSSR, { astroConfig,
// Note: SSR API is in beta (https://vitejs.dev/guide/ssr.html)
ssr: {
external: [...ALWAYS_EXTERNAL],
- noExternal: [...ALWAYS_NOEXTERNAL],
+ noExternal: [],
},
};
diff --git a/packages/astro/src/core/vite.ts b/packages/astro/src/core/vite.ts
index 7ceb4d8a0..dee46a368 100644
--- a/packages/astro/src/core/vite.ts
+++ b/packages/astro/src/core/vite.ts
@@ -1,2 +1,2 @@
-export * from '../../vendor/vite/dist/node/index.js';
-export { default } from '../../vendor/vite/dist/node/index.js';
+export * from 'vite';
+export { default } from 'vite';
diff --git a/packages/astro/src/runtime/server/hydration.ts b/packages/astro/src/runtime/server/hydration.ts
index cd786999d..b339b934f 100644
--- a/packages/astro/src/runtime/server/hydration.ts
+++ b/packages/astro/src/runtime/server/hydration.ts
@@ -1,34 +1,12 @@
import type { AstroComponentMetadata } from '../../@types/astro';
import type { SSRElement, SSRResult } from '../../@types/astro';
-import { valueToEstree } from 'estree-util-value-to-estree';
-import * as astring from 'astring';
import { hydrationSpecifier, serializeListValue } from './util.js';
-
-const { generate, GENERATOR } = astring;
-
-// INVESTIGATE: What features are we getting from this that we need?
-// JSON.stringify has a "replacer" argument.
-// A more robust version alternative to `JSON.stringify` that can handle most values
-// see https://github.com/remcohaszing/estree-util-value-to-estree#readme
-const customGenerator: astring.Generator = {
- ...GENERATOR,
- Literal(node, state) {
- if (node.raw != null) {
- // escape closing script tags in strings so browsers wouldn't interpret them as
- // closing the actual end tag in HTML
- state.write(node.raw.replace('</script>', '<\\/script>'));
- } else {
- GENERATOR.Literal(node, state);
- }
- },
-};
+import serializeJavaScript from 'serialize-javascript';
// Serializes props passed into a component so that they can be reused during hydration.
// The value is any
export function serializeProps(value: any) {
- return generate(valueToEstree(value), {
- generator: customGenerator,
- });
+ return serializeJavaScript(value);
}
const HydrationDirectives = ['load', 'idle', 'media', 'visible', 'only'];
diff --git a/packages/astro/src/vite-plugin-astro/compile.ts b/packages/astro/src/vite-plugin-astro/compile.ts
index d52a8be17..7eb0eddc4 100644
--- a/packages/astro/src/vite-plugin-astro/compile.ts
+++ b/packages/astro/src/vite-plugin-astro/compile.ts
@@ -12,23 +12,9 @@ type CompilationCache = Map<string, CompileResult>;
const configCache = new WeakMap<AstroConfig, CompilationCache>();
-// https://github.com/vitejs/vite/discussions/5109#discussioncomment-1450726
-function isSSR(options: undefined | boolean | { ssr: boolean }): boolean {
- if (options === undefined) {
- return false;
- }
- if (typeof options === 'boolean') {
- return options;
- }
- if (typeof options == 'object') {
- return !!options.ssr;
- }
- return false;
-}
-
type CompileResult = TransformResult & { rawCSSDeps: Set<string> };
-async function compile(config: AstroConfig, filename: string, source: string, viteTransform: TransformHook, opts: boolean | undefined): Promise<CompileResult> {
+async function compile(config: AstroConfig, filename: string, source: string, viteTransform: TransformHook, opts: { ssr: boolean }): Promise<CompileResult> {
// pages and layouts should be transformed as full documents (implicit <head> <body> etc)
// everything else is treated as a fragment
const filenameURL = new URL(`file://${filename}`);
@@ -69,7 +55,7 @@ async function compile(config: AstroConfig, filename: string, source: string, vi
lang,
id: normalizedID,
transformHook: viteTransform,
- ssr: isSSR(opts),
+ ssr: opts.ssr,
});
let map: SourceMapInput | undefined;
@@ -119,7 +105,7 @@ export async function cachedCompilation(
filename: string,
source: string | null,
viteTransform: TransformHook,
- opts: boolean | undefined
+ opts: { ssr: boolean }
): Promise<CompileResult> {
let cache: CompilationCache;
if (!configCache.has(config)) {
diff --git a/packages/astro/src/vite-plugin-astro/index.ts b/packages/astro/src/vite-plugin-astro/index.ts
index 198680388..5f6138b04 100644
--- a/packages/astro/src/vite-plugin-astro/index.ts
+++ b/packages/astro/src/vite-plugin-astro/index.ts
@@ -64,15 +64,20 @@ export default function astro({ config, logging }: AstroPluginOptions): vite.Plu
let { filename, query } = parseAstroRequest(id);
if (query.astro) {
if (query.type === 'style') {
+ if (filename.startsWith('/@fs')) {
+ filename = filename.slice('/@fs'.length);
+ } else if (filename.startsWith('/') && !ancestor(filename, config.projectRoot.pathname)) {
+ filename = new URL('.' + filename, config.projectRoot).pathname;
+ }
+
if (typeof query.index === 'undefined') {
throw new Error(`Requests for Astro CSS must include an index.`);
}
- const transformResult = await cachedCompilation(config, normalizeFilename(filename), null, viteTransform, opts);
+ const transformResult = await cachedCompilation(config, normalizeFilename(filename), null, viteTransform, { ssr: Boolean(opts?.ssr) });
// Track any CSS dependencies so that HMR is triggered when they change.
await trackCSSDependencies.call(this, { viteDevServer, id, filename, deps: transformResult.rawCSSDeps });
-
const csses = transformResult.css;
const code = csses[query.index];
@@ -84,7 +89,7 @@ export default function astro({ config, logging }: AstroPluginOptions): vite.Plu
throw new Error(`Requests for hoisted scripts must include an index`);
}
- const transformResult = await cachedCompilation(config, normalizeFilename(filename), null, viteTransform, opts);
+ const transformResult = await cachedCompilation(config, normalizeFilename(filename), null, viteTransform, { ssr: Boolean(opts?.ssr) });
const scripts = transformResult.scripts;
const hoistedScript = scripts[query.index];
@@ -106,7 +111,7 @@ export default function astro({ config, logging }: AstroPluginOptions): vite.Plu
}
try {
- const transformResult = await cachedCompilation(config, id, source, viteTransform, opts);
+ const transformResult = await cachedCompilation(config, id, source, viteTransform, { ssr: Boolean(opts?.ssr) });
// Compile all TypeScript to JavaScript.
// Also, catches invalid JS/TS in the compiled output before returning.
diff --git a/packages/astro/src/vite-plugin-jsx/index.ts b/packages/astro/src/vite-plugin-jsx/index.ts
index 642aa865d..46d92fef9 100644
--- a/packages/astro/src/vite-plugin-jsx/index.ts
+++ b/packages/astro/src/vite-plugin-jsx/index.ts
@@ -24,21 +24,6 @@ const IMPORT_STATEMENTS: Record<string, string> = {
// be careful about esbuild not treating h, React, Fragment, etc. as unused.
const PREVENT_UNUSED_IMPORTS = ';;(React,Fragment,h);';
-// This check on a flexible "options" object is needed because Vite uses this flexible argument for ssr.
-// More context: https://github.com/vitejs/vite/discussions/5109#discussioncomment-1450726
-function isSSR(options: undefined | boolean | { ssr: boolean }): boolean {
- if (options === undefined) {
- return false;
- }
- if (typeof options === 'boolean') {
- return options;
- }
- if (typeof options == 'object') {
- return !!options.ssr;
- }
- return false;
-}
-
function getEsbuildLoader(fileExt: string): string {
return fileExt.substr(1);
}
@@ -103,8 +88,8 @@ export default function jsx({ config, logging }: AstroPluginJSXOptions): Plugin
configResolved(resolvedConfig) {
viteConfig = resolvedConfig;
},
- async transform(code, id, ssrOrOptions) {
- const ssr = isSSR(ssrOrOptions);
+ async transform(code, id, opts) {
+ const ssr = Boolean(opts?.ssr);
if (!JSX_EXTENSIONS.has(path.extname(id))) {
return null;
}
diff --git a/packages/astro/test/0-css.test.js b/packages/astro/test/0-css.test.js
index 6c55a360d..1ca8acf2e 100644
--- a/packages/astro/test/0-css.test.js
+++ b/packages/astro/test/0-css.test.js
@@ -277,8 +277,13 @@ describe('CSS', function () {
expect((await fixture.fetch(href)).status).to.equal(200);
});
- it('resolved imported CSS with ?url', async () => {
+ // Skipped until upstream fix lands
+ // Our fix: https://github.com/withastro/astro/pull/2106
+ // OG Vite PR: https://github.com/vitejs/vite/pull/5940
+ // Next Vite PR: https://github.com/vitejs/vite/pull/5796
+ it.skip('resolved imported CSS with ?url', async () => {
const href = $('link[href$="imported-url.css"]').attr('href');
+ expect(href).to.be.ok;
expect((await fixture.fetch(href)).status).to.equal(200);
});
diff --git a/packages/astro/test/fixtures/custom-elements/my-component-lib/index.js b/packages/astro/test/fixtures/custom-elements/my-component-lib/index.js
index 7054d0219..79ebae558 100644
--- a/packages/astro/test/fixtures/custom-elements/my-component-lib/index.js
+++ b/packages/astro/test/fixtures/custom-elements/my-component-lib/index.js
@@ -10,7 +10,8 @@ export default {
viteConfig() {
return {
optimizeDeps: {
- include: ['@astrojs/test-custom-element-renderer/polyfill.js', '@astrojs/test-custom-element-renderer/hydration-polyfill.js']
+ include: ['@astrojs/test-custom-element-renderer/polyfill.js', '@astrojs/test-custom-element-renderer/hydration-polyfill.js'],
+ exclude: ['@astrojs/test-custom-element-renderer/server.js']
}
}
}
diff --git a/packages/astro/test/fixtures/static build/pkg/package.json b/packages/astro/test/fixtures/static build/pkg/package.json
index 8d84a91a1..5d202516f 100644
--- a/packages/astro/test/fixtures/static build/pkg/package.json
+++ b/packages/astro/test/fixtures/static build/pkg/package.json
@@ -1,11 +1,11 @@
{
"name": "@astrojs/test-static-build-pkg",
- "main": "./oops.js",
- "version": "0.0.2",
+ "main": "./oops.cjs",
+ "version": "0.0.3",
"exports": {
".": {
- "import": "./pkg.js",
- "require": "./oops.js"
+ "import": "./pkg.mjs",
+ "require": "./oops.cjs"
}
}
}
diff --git a/packages/astro/test/fixtures/static build/pkg/pkg.js b/packages/astro/test/fixtures/static build/pkg/pkg.mjs
index b013a3b42..b013a3b42 100644
--- a/packages/astro/test/fixtures/static build/pkg/pkg.js
+++ b/packages/astro/test/fixtures/static build/pkg/pkg.mjs
diff --git a/packages/astro/vendor/vite/LICENSE.md b/packages/astro/vendor/vite/LICENSE.md
deleted file mode 100644
index 73e3dcd0a..000000000
--- a/packages/astro/vendor/vite/LICENSE.md
+++ /dev/null
@@ -1,2150 +0,0 @@
-# Vite core license
-Vite is released under the MIT license:
-
-MIT License
-
-Copyright (c) 2019-present, Yuxi (Evan) You and Vite contributors
-
-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.
-
-# Licenses of bundled dependencies
-The published Vite artifact additionally contains code with the following licenses:
-Apache-2.0, BSD-2-Clause, BSD-3-Clause, CC0-1.0, ISC, MIT, (BSD-3-Clause OR GPL-2.0)
-
-# Bundled dependencies:
-## @ampproject/remapping
-License: Apache-2.0
-By: Justin Ridgewell
-Repository: git+https://github.com/ampproject/remapping.git
-
-> Apache License
-> Version 2.0, January 2004
-> http://www.apache.org/licenses/
->
-> TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
->
-> 1. Definitions.
->
-> "License" shall mean the terms and conditions for use, reproduction,
-> and distribution as defined by Sections 1 through 9 of this document.
->
-> "Licensor" shall mean the copyright owner or entity authorized by
-> the copyright owner that is granting the License.
->
-> "Legal Entity" shall mean the union of the acting entity and all
-> other entities that control, are controlled by, or are under common
-> control with that entity. For the purposes of this definition,
-> "control" means (i) the power, direct or indirect, to cause the
-> direction or management of such entity, whether by contract or
-> otherwise, or (ii) ownership of fifty percent (50%) or more of the
-> outstanding shares, or (iii) beneficial ownership of such entity.
->
-> "You" (or "Your") shall mean an individual or Legal Entity
-> exercising permissions granted by this License.
->
-> "Source" form shall mean the preferred form for making modifications,
-> including but not limited to software source code, documentation
-> source, and configuration files.
->
-> "Object" form shall mean any form resulting from mechanical
-> transformation or translation of a Source form, including but
-> not limited to compiled object code, generated documentation,
-> and conversions to other media types.
->
-> "Work" shall mean the work of authorship, whether in Source or
-> Object form, made available under the License, as indicated by a
-> copyright notice that is included in or attached to the work
-> (an example is provided in the Appendix below).
->
-> "Derivative Works" shall mean any work, whether in Source or Object
-> form, that is based on (or derived from) the Work and for which the
-> editorial revisions, annotations, elaborations, or other modifications
-> represent, as a whole, an original work of authorship. For the purposes
-> of this License, Derivative Works shall not include works that remain
-> separable from, or merely link (or bind by name) to the interfaces of,
-> the Work and Derivative Works thereof.
->
-> "Contribution" shall mean any work of authorship, including
-> the original version of the Work and any modifications or additions
-> to that Work or Derivative Works thereof, that is intentionally
-> submitted to Licensor for inclusion in the Work by the copyright owner
-> or by an individual or Legal Entity authorized to submit on behalf of
-> the copyright owner. For the purposes of this definition, "submitted"
-> means any form of electronic, verbal, or written communication sent
-> to the Licensor or its representatives, including but not limited to
-> communication on electronic mailing lists, source code control systems,
-> and issue tracking systems that are managed by, or on behalf of, the
-> Licensor for the purpose of discussing and improving the Work, but
-> excluding communication that is conspicuously marked or otherwise
-> designated in writing by the copyright owner as "Not a Contribution."
->
-> "Contributor" shall mean Licensor and any individual or Legal Entity
-> on behalf of whom a Contribution has been received by Licensor and
-> subsequently incorporated within the Work.
->
-> 2. Grant of Copyright License. Subject to the terms and conditions of
-> this License, each Contributor hereby grants to You a perpetual,
-> worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-> copyright license to reproduce, prepare Derivative Works of,
-> publicly display, publicly perform, sublicense, and distribute the
-> Work and such Derivative Works in Source or Object form.
->
-> 3. Grant of Patent License. Subject to the terms and conditions of
-> this License, each Contributor hereby grants to You a perpetual,
-> worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-> (except as stated in this section) patent license to make, have made,
-> use, offer to sell, sell, import, and otherwise transfer the Work,
-> where such license applies only to those patent claims licensable
-> by such Contributor that are necessarily infringed by their
-> Contribution(s) alone or by combination of their Contribution(s)
-> with the Work to which such Contribution(s) was submitted. If You
-> institute patent litigation against any entity (including a
-> cross-claim or counterclaim in a lawsuit) alleging that the Work
-> or a Contribution incorporated within the Work constitutes direct
-> or contributory patent infringement, then any patent licenses
-> granted to You under this License for that Work shall terminate
-> as of the date such litigation is filed.
->
-> 4. Redistribution. You may reproduce and distribute copies of the
-> Work or Derivative Works thereof in any medium, with or without
-> modifications, and in Source or Object form, provided that You
-> meet the following conditions:
->
-> (a) You must give any other recipients of the Work or
-> Derivative Works a copy of this License; and
->
-> (b) You must cause any modified files to carry prominent notices
-> stating that You changed the files; and
->
-> (c) You must retain, in the Source form of any Derivative Works
-> that You distribute, all copyright, patent, trademark, and
-> attribution notices from the Source form of the Work,
-> excluding those notices that do not pertain to any part of
-> the Derivative Works; and
->
-> (d) If the Work includes a "NOTICE" text file as part of its
-> distribution, then any Derivative Works that You distribute must
-> include a readable copy of the attribution notices contained
-> within such NOTICE file, excluding those notices that do not
-> pertain to any part of the Derivative Works, in at least one
-> of the following places: within a NOTICE text file distributed
-> as part of the Derivative Works; within the Source form or
-> documentation, if provided along with the Derivative Works; or,
-> within a display generated by the Derivative Works, if and
-> wherever such third-party notices normally appear. The contents
-> of the NOTICE file are for informational purposes only and
-> do not modify the License. You may add Your own attribution
-> notices within Derivative Works that You distribute, alongside
-> or as an addendum to the NOTICE text from the Work, provided
-> that such additional attribution notices cannot be construed
-> as modifying the License.
->
-> You may add Your own copyright statement to Your modifications and
-> may provide additional or different license terms and conditions
-> for use, reproduction, or distribution of Your modifications, or
-> for any such Derivative Works as a whole, provided Your use,
-> reproduction, and distribution of the Work otherwise complies with
-> the conditions stated in this License.
->
-> 5. Submission of Contributions. Unless You explicitly state otherwise,
-> any Contribution intentionally submitted for inclusion in the Work
-> by You to the Licensor shall be under the terms and conditions of
-> this License, without any additional terms or conditions.
-> Notwithstanding the above, nothing herein shall supersede or modify
-> the terms of any separate license agreement you may have executed
-> with Licensor regarding such Contributions.
->
-> 6. Trademarks. This License does not grant permission to use the trade
-> names, trademarks, service marks, or product names of the Licensor,
-> except as required for reasonable and customary use in describing the
-> origin of the Work and reproducing the content of the NOTICE file.
->
-> 7. Disclaimer of Warranty. Unless required by applicable law or
-> agreed to in writing, Licensor provides the Work (and each
-> Contributor provides its Contributions) on an "AS IS" BASIS,
-> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-> implied, including, without limitation, any warranties or conditions
-> of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-> PARTICULAR PURPOSE. You are solely responsible for determining the
-> appropriateness of using or redistributing the Work and assume any
-> risks associated with Your exercise of permissions under this License.
->
-> 8. Limitation of Liability. In no event and under no legal theory,
-> whether in tort (including negligence), contract, or otherwise,
-> unless required by applicable law (such as deliberate and grossly
-> negligent acts) or agreed to in writing, shall any Contributor be
-> liable to You for damages, including any direct, indirect, special,
-> incidental, or consequential damages of any character arising as a
-> result of this License or out of the use or inability to use the
-> Work (including but not limited to damages for loss of goodwill,
-> work stoppage, computer failure or malfunction, or any and all
-> other commercial damages or losses), even if such Contributor
-> has been advised of the possibility of such damages.
->
-> 9. Accepting Warranty or Additional Liability. While redistributing
-> the Work or Derivative Works thereof, You may choose to offer,
-> and charge a fee for, acceptance of support, warranty, indemnity,
-> or other liability obligations and/or rights consistent with this
-> License. However, in accepting such obligations, You may act only
-> on Your own behalf and on Your sole responsibility, not on behalf
-> of any other Contributor, and only if You agree to indemnify,
-> defend, and hold each Contributor harmless for any liability
-> incurred by, or claims asserted against, such Contributor by reason
-> of your accepting any such warranty or additional liability.
->
-> END OF TERMS AND CONDITIONS
->
-> APPENDIX: How to apply the Apache License to your work.
->
-> To apply the Apache License to your work, attach the following
-> boilerplate notice, with the fields enclosed by brackets "[]"
-> replaced with your own identifying information. (Don't include
-> the brackets!) The text should be enclosed in the appropriate
-> comment syntax for the file format. We also recommend that a
-> file or class name and description of purpose be included on the
-> same "printed page" as the copyright notice for easier
-> identification within third-party archives.
->
-> Copyright 2019 Google LLC
->
-> Licensed under the Apache License, Version 2.0 (the "License");
-> you may not use this file except in compliance with the License.
-> You may obtain a copy of the License at
->
-> http://www.apache.org/licenses/LICENSE-2.0
->
-> Unless required by applicable law or agreed to in writing, software
-> distributed under the License is distributed on an "AS IS" BASIS,
-> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-> See the License for the specific language governing permissions and
-> limitations under the License.
-
----------------------------------------
-
-## @nodelib/fs.scandir
-License: MIT
-Repository: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir
-
----------------------------------------
-
-## @nodelib/fs.stat
-License: MIT
-Repository: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat
-
----------------------------------------
-
-## @nodelib/fs.walk
-License: MIT
-Repository: https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk
-
----------------------------------------
-
-## @polka/url
-License: MIT
-By: Luke Edwards
-Repository: lukeed/polka
-
----------------------------------------
-
-## @rollup/plugin-alias
-License: MIT
-By: Johannes Stein
-Repository: rollup/plugins
-
----------------------------------------
-
-## @rollup/plugin-commonjs
-License: MIT
-By: Rich Harris
-Repository: rollup/plugins
-
-> The MIT License (MIT)
->
-> Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors)
->
-> 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.
-
----------------------------------------
-
-## @rollup/plugin-dynamic-import-vars
-License: MIT
-By: LarsDenBakker
-Repository: rollup/plugins
-
----------------------------------------
-
-## @rollup/pluginutils
-License: MIT
-By: Rich Harris
-Repository: rollup/plugins
-
----------------------------------------
-
-## @vue/compiler-core
-License: MIT
-By: Evan You
-Repository: git+https://github.com/vuejs/vue-next.git
-
----------------------------------------
-
-## @vue/compiler-dom
-License: MIT
-By: Evan You
-Repository: git+https://github.com/vuejs/vue-next.git
-
-> The MIT License (MIT)
->
-> Copyright (c) 2018-present, Yuxi (Evan) You
->
-> 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.
-
----------------------------------------
-
-## @vue/shared
-License: MIT
-By: Evan You
-Repository: git+https://github.com/vuejs/vue-next.git
-
----------------------------------------
-
-## accepts
-License: MIT
-By: Douglas Christopher Wilson, Jonathan Ong
-Repository: jshttp/accepts
-
----------------------------------------
-
-## acorn
-License: MIT
-By: Marijn Haverbeke, Ingvar Stepanyan, Adrian Heine
-Repository: https://github.com/acornjs/acorn.git
-
-> MIT License
->
-> Copyright (C) 2012-2020 by various contributors (see AUTHORS)
->
-> 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.
-
----------------------------------------
-
-## acorn-class-fields
-License: MIT
-By: Adrian Heine
-Repository: https://github.com/acornjs/acorn-class-fields
-
-> Copyright (C) 2017-2018 by Adrian Heine
->
-> 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.
-
----------------------------------------
-
-## acorn-private-class-elements
-License: MIT
-By: Adrian Heine
-Repository: https://github.com/acornjs/acorn-private-class-elements
-
----------------------------------------
-
-## acorn-static-class-features
-License: MIT
-By: Adrian Heine
-Repository: https://github.com/acornjs/acorn-static-class-features
-
-> Copyright (C) 2017-2018 by Adrian Heine
->
-> 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.
-
----------------------------------------
-
-## ansi-regex
-License: MIT
-By: Sindre Sorhus
-Repository: chalk/ansi-regex
-
----------------------------------------
-
-## ansi-styles
-License: MIT
-By: Sindre Sorhus
-Repository: chalk/ansi-styles
-
----------------------------------------
-
-## anymatch
-License: ISC
-By: Elan Shanker
-Repository: https://github.com/micromatch/anymatch
-
----------------------------------------
-
-## array-union
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/array-union
-
----------------------------------------
-
-## balanced-match
-License: MIT
-By: Julian Gruber
-Repository: git://github.com/juliangruber/balanced-match.git
-
----------------------------------------
-
-## big.js
-License: MIT
-By: Michael Mclaughlin
-Repository: https://github.com/MikeMcl/big.js.git
-
----------------------------------------
-
-## binary-extensions
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/binary-extensions
-
----------------------------------------
-
-## brace-expansion
-License: MIT
-By: Julian Gruber
-Repository: git://github.com/juliangruber/brace-expansion.git
-
----------------------------------------
-
-## braces
-License: MIT
-By: Jon Schlinkert, Brian Woodward, Elan Shanker, Eugene Sharygin, hemanth.hm
-Repository: micromatch/braces
-
----------------------------------------
-
-## builtin-modules
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/builtin-modules
-
-> MIT License
->
-> Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
->
-> 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.
-
----------------------------------------
-
-## bytes
-License: MIT
-By: TJ Holowaychuk, Jed Watson, Théo FIDRY
-Repository: visionmedia/bytes.js
-
----------------------------------------
-
-## cac
-License: MIT
-By: egoist
-Repository: egoist/cac
-
-> The MIT License (MIT)
->
-> Copyright (c) EGOIST <0x142857@gmail.com> (https://github.com/egoist)
->
-> 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.
-
----------------------------------------
-
-## chalk
-License: MIT
-Repository: chalk/chalk
-
-> MIT License
->
-> Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
->
-> 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.
-
----------------------------------------
-
-## chokidar
-License: MIT
-By: Paul Miller, Elan Shanker
-Repository: git+https://github.com/paulmillr/chokidar.git
-
-> The MIT License (MIT)
->
-> Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker
->
-> 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.
-
----------------------------------------
-
-## color-convert
-License: MIT
-By: Heather Arthur
-Repository: Qix-/color-convert
-
----------------------------------------
-
-## color-name
-License: MIT
-By: DY
-Repository: git@github.com:colorjs/color-name.git
-
----------------------------------------
-
-## commondir
-License: MIT
-By: James Halliday
-Repository: http://github.com/substack/node-commondir.git
-
----------------------------------------
-
-## compressible
-License: MIT
-By: Douglas Christopher Wilson, Jonathan Ong, Jeremiah Senkpiel
-Repository: jshttp/compressible
-
----------------------------------------
-
-## compression
-License: MIT
-By: Douglas Christopher Wilson, Jonathan Ong
-Repository: expressjs/compression
-
-> (The MIT License)
->
-> Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
-> Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
->
-> 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.
-
----------------------------------------
-
-## concat-map
-License: MIT
-By: James Halliday
-Repository: git://github.com/substack/node-concat-map.git
-
----------------------------------------
-
-## connect
-License: MIT
-By: TJ Holowaychuk, Douglas Christopher Wilson, Jonathan Ong, Tim Caswell
-Repository: senchalabs/connect
-
-> (The MIT License)
->
-> Copyright (c) 2010 Sencha Inc.
-> Copyright (c) 2011 LearnBoost
-> Copyright (c) 2011-2014 TJ Holowaychuk
-> Copyright (c) 2015 Douglas Christopher Wilson
->
-> 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.
-
----------------------------------------
-
-## connect-history-api-fallback
-License: MIT
-By: Ben Ripkens, Craig Myles
-Repository: http://github.com/bripkens/connect-history-api-fallback.git
-
-> The MIT License
->
-> Copyright (c) 2012 Ben Ripkens http://bripkens.de
->
-> 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.
-
----------------------------------------
-
-## convert-source-map
-License: MIT
-By: Thorsten Lorenz
-Repository: git://github.com/thlorenz/convert-source-map.git
-
-> Copyright 2013 Thorsten Lorenz.
-> All rights reserved.
->
-> 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.
-
----------------------------------------
-
-## cors
-License: MIT
-By: Troy Goode
-Repository: expressjs/cors
-
-> (The MIT License)
->
-> Copyright (c) 2013 Troy Goode <troygoode@gmail.com>
->
-> 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.
-
----------------------------------------
-
-## cross-spawn
-License: MIT
-By: André Cruz
-Repository: git@github.com:moxystudio/node-cross-spawn.git
-
----------------------------------------
-
-## cssesc
-License: MIT
-By: Mathias Bynens
-Repository: https://github.com/mathiasbynens/cssesc.git
-
----------------------------------------
-
-## debug
-License: MIT
-By: TJ Holowaychuk, Nathan Rajlich, Andrew Rhyne, Josh Junon
-Repository: git://github.com/visionmedia/debug.git
-
-> (The MIT License)
->
-> Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
->
-> 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.
-
----------------------------------------
-
-## define-lazy-prop
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/define-lazy-prop
-
----------------------------------------
-
-## dir-glob
-License: MIT
-By: Kevin Mårtensson
-Repository: kevva/dir-glob
-
----------------------------------------
-
-## dotenv
-License: BSD-2-Clause
-Repository: git://github.com/motdotla/dotenv.git
-
-> Copyright (c) 2015, Scott Motte
-> All rights reserved.
->
-> Redistribution and use in source and binary forms, with or without
-> modification, are permitted provided that the following conditions are met:
->
-> * Redistributions of source code must retain the above copyright notice, this
-> list of conditions and the following disclaimer.
->
-> * Redistributions in binary form must reproduce the above copyright notice,
-> this list of conditions and the following disclaimer in the documentation
-> and/or other materials provided with the distribution.
->
-> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
----------------------------------------
-
-## dotenv-expand
-License: BSD-2-Clause
-By: motdotla
-
-> Copyright (c) 2016, Scott Motte
-> All rights reserved.
->
-> Redistribution and use in source and binary forms, with or without
-> modification, are permitted provided that the following conditions are met:
->
-> * Redistributions of source code must retain the above copyright notice, this
-> list of conditions and the following disclaimer.
->
-> * Redistributions in binary form must reproduce the above copyright notice,
-> this list of conditions and the following disclaimer in the documentation
-> and/or other materials provided with the distribution.
->
-> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
----------------------------------------
-
-## ee-first
-License: MIT
-By: Jonathan Ong, Douglas Christopher Wilson
-Repository: jonathanong/ee-first
-
----------------------------------------
-
-## emojis-list
-License: MIT
-By: Kiko Beats
-Repository: git+https://github.com/kikobeats/emojis-list.git
-
----------------------------------------
-
-## encodeurl
-License: MIT
-By: Douglas Christopher Wilson
-Repository: pillarjs/encodeurl
-
----------------------------------------
-
-## es-module-lexer
-License: MIT
-By: Guy Bedford
-Repository: git+https://github.com/guybedford/es-module-lexer.git
-
-> MIT License
-> -----------
->
-> Copyright (C) 2018-2021 Guy Bedford
->
-> 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.
-
----------------------------------------
-
-## escape-html
-License: MIT
-Repository: component/escape-html
-
----------------------------------------
-
-## escape-string-regexp
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/escape-string-regexp
-
----------------------------------------
-
-## estree-walker
-License: MIT
-By: Rich Harris
-Repository: https://github.com/Rich-Harris/estree-walker
-
-> Copyright (c) 2015-20 [these people](https://github.com/Rich-Harris/estree-walker/graphs/contributors)
->
-> 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.
-
----------------------------------------
-
-## etag
-License: MIT
-By: Douglas Christopher Wilson, David Björklund
-Repository: jshttp/etag
-
-> (The MIT License)
->
-> Copyright (c) 2014-2016 Douglas Christopher Wilson
->
-> 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.
-
----------------------------------------
-
-## eventemitter3
-License: MIT
-By: Arnout Kazemier
-Repository: git://github.com/primus/eventemitter3.git
-
----------------------------------------
-
-## execa
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/execa
-
-> MIT License
->
-> Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
->
-> 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.
-
----------------------------------------
-
-## fast-glob
-License: MIT
-By: Denis Malinochkin
-Repository: mrmlnc/fast-glob
-
-> The MIT License (MIT)
->
-> Copyright (c) Denis Malinochkin
->
-> 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.
-
----------------------------------------
-
-## fastq
-License: ISC
-By: Matteo Collina
-Repository: git+https://github.com/mcollina/fastq.git
-
----------------------------------------
-
-## fill-range
-License: MIT
-By: Jon Schlinkert, Edo Rivai, Paul Miller, Rouven Weßling
-Repository: jonschlinkert/fill-range
-
----------------------------------------
-
-## finalhandler
-License: MIT
-By: Douglas Christopher Wilson
-Repository: pillarjs/finalhandler
-
----------------------------------------
-
-## follow-redirects
-License: MIT
-By: Ruben Verborgh, Olivier Lalonde, James Talmage
-Repository: git@github.com:follow-redirects/follow-redirects.git
-
----------------------------------------
-
-## fs.realpath
-License: ISC
-By: Isaac Z. Schlueter
-Repository: git+https://github.com/isaacs/fs.realpath.git
-
----------------------------------------
-
-## generic-names
-License: MIT
-By: Alexey Litvinov
-Repository: git+https://github.com/css-modules/generic-names.git
-
----------------------------------------
-
-## get-stream
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/get-stream
-
----------------------------------------
-
-## glob
-License: ISC
-By: Isaac Z. Schlueter
-Repository: git://github.com/isaacs/node-glob.git
-
----------------------------------------
-
-## glob-parent
-License: ISC
-By: Gulp Team, Elan Shanker, Blaine Bublitz
-Repository: gulpjs/glob-parent
-
----------------------------------------
-
-## globby
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/globby
-
----------------------------------------
-
-## has-flag
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/has-flag
-
----------------------------------------
-
-## http-proxy
-License: MIT
-By: Charlie Robbins
-Repository: https://github.com/http-party/node-http-proxy.git
-
-> node-http-proxy
->
-> Copyright (c) 2010-2016 Charlie Robbins, Jarrett Cruger & the Contributors.
->
-> 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.
-
----------------------------------------
-
-## human-signals
-License: Apache-2.0
-By: ehmicky
-Repository: ehmicky/human-signals
-
----------------------------------------
-
-## icss-replace-symbols
-License: ISC
-By: Glen Maddern
-Repository: git+https://github.com/css-modules/icss-replace-symbols.git
-
----------------------------------------
-
-## icss-utils
-License: ISC
-By: Glen Maddern
-Repository: git+https://github.com/css-modules/icss-utils.git
-
----------------------------------------
-
-## ignore
-License: MIT
-By: kael
-Repository: git@github.com:kaelzhang/node-ignore.git
-
----------------------------------------
-
-## import-cwd
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/import-cwd
-
----------------------------------------
-
-## import-from
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/import-from
-
----------------------------------------
-
-## inflight
-License: ISC
-By: Isaac Z. Schlueter
-Repository: https://github.com/npm/inflight.git
-
----------------------------------------
-
-## inherits
-License: ISC
-Repository: git://github.com/isaacs/inherits
-
----------------------------------------
-
-## is-binary-path
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/is-binary-path
-
----------------------------------------
-
-## is-docker
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/is-docker
-
----------------------------------------
-
-## is-extglob
-License: MIT
-By: Jon Schlinkert
-Repository: jonschlinkert/is-extglob
-
----------------------------------------
-
-## is-glob
-License: MIT
-By: Jon Schlinkert, Brian Woodward, Daniel Perez
-Repository: micromatch/is-glob
-
----------------------------------------
-
-## is-number
-License: MIT
-By: Jon Schlinkert, Olsten Larck, Rouven Weßling
-Repository: jonschlinkert/is-number
-
----------------------------------------
-
-## is-reference
-License: MIT
-By: Rich Harris
-Repository: git+https://github.com/Rich-Harris/is-reference.git
-
----------------------------------------
-
-## is-stream
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/is-stream
-
----------------------------------------
-
-## is-wsl
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/is-wsl
-
----------------------------------------
-
-## isexe
-License: ISC
-By: Isaac Z. Schlueter
-Repository: git+https://github.com/isaacs/isexe.git
-
----------------------------------------
-
-## json5
-License: MIT
-By: Aseem Kishore, Max Nanasy, Andrew Eisenberg, Jordan Tucker
-Repository: git+https://github.com/json5/json5.git
-
----------------------------------------
-
-## launch-editor
-License: MIT
-By: Evan You
-Repository: git+https://github.com/yyx990803/launch-editor.git
-
----------------------------------------
-
-## launch-editor-middleware
-License: MIT
-By: Evan You
-Repository: git+https://github.com/yyx990803/launch-editor.git
-
----------------------------------------
-
-## lilconfig
-License: MIT
-By: antonk52
-Repository: https://github.com/antonk52/lilconfig
-
----------------------------------------
-
-## loader-utils
-License: MIT
-By: Tobias Koppers @sokra
-Repository: https://github.com/webpack/loader-utils.git
-
----------------------------------------
-
-## lodash.camelcase
-License: MIT
-By: John-David Dalton, Blaine Bublitz, Mathias Bynens
-Repository: lodash/lodash
-
----------------------------------------
-
-## magic-string
-License: MIT
-By: Rich Harris
-Repository: https://github.com/rich-harris/magic-string
-
-> Copyright 2018 Rich Harris
->
-> 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.
-
----------------------------------------
-
-## merge-stream
-License: MIT
-By: Stephen Sugden
-Repository: grncdr/merge-stream
-
----------------------------------------
-
-## merge2
-License: MIT
-Repository: git@github.com:teambition/merge2.git
-
----------------------------------------
-
-## micromatch
-License: MIT
-By: Jon Schlinkert, Amila Welihinda, Bogdan Chadkin, Brian Woodward, Devon Govett, Elan Shanker, Fabrício Matté, Martin Kolárik, Olsten Larck, Paul Miller, Tom Byrer, Tyler Akins, Peter Bright, Kuba Juszczyk
-Repository: micromatch/micromatch
-
----------------------------------------
-
-## mime
-License: MIT
-By: Robert Kieffer
-Repository: https://github.com/broofa/mime
-
-> The MIT License (MIT)
->
-> Copyright (c) 2010 Benjamin Thomas, Robert Kieffer
->
-> 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.
-
----------------------------------------
-
-## mime-db
-License: MIT
-By: Douglas Christopher Wilson, Jonathan Ong, Robert Kieffer
-Repository: jshttp/mime-db
-
----------------------------------------
-
-## mime-types
-License: MIT
-By: Douglas Christopher Wilson, Jeremiah Senkpiel, Jonathan Ong
-Repository: jshttp/mime-types
-
-> (The MIT License)
->
-> Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
-> Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
->
-> 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.
-
----------------------------------------
-
-## mimic-fn
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/mimic-fn
-
----------------------------------------
-
-## minimatch
-License: ISC
-By: Isaac Z. Schlueter
-Repository: git://github.com/isaacs/minimatch.git
-
-> The ISC License
->
-> Copyright (c) Isaac Z. Schlueter and Contributors
->
-> Permission to use, copy, modify, and/or distribute this software for any
-> purpose with or without fee is hereby granted, provided that the above
-> copyright notice and this permission notice appear in all copies.
->
-> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
----------------------------------------
-
-## ms
-License: MIT
-Repository: zeit/ms
-
----------------------------------------
-
-## negotiator
-License: MIT
-By: Douglas Christopher Wilson, Federico Romero, Isaac Z. Schlueter
-Repository: jshttp/negotiator
-
----------------------------------------
-
-## node-forge
-License: (BSD-3-Clause OR GPL-2.0)
-By: Digital Bazaar, Inc., Dave Longley, David I. Lehn, Stefan Siegl, Christoph Dorn
-Repository: https://github.com/digitalbazaar/forge
-
----------------------------------------
-
-## normalize-path
-License: MIT
-By: Jon Schlinkert, Blaine Bublitz
-Repository: jonschlinkert/normalize-path
-
----------------------------------------
-
-## npm-run-path
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/npm-run-path
-
----------------------------------------
-
-## object-assign
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/object-assign
-
----------------------------------------
-
-## okie
-License: MIT
-By: Evan You
-Repository: git+https://github.com/yyx990803/okie.git
-
-> MIT License
->
-> Copyright (c) 2020-present, Yuxi (Evan) You
->
-> 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.
-
----------------------------------------
-
-## on-finished
-License: MIT
-By: Douglas Christopher Wilson, Jonathan Ong
-Repository: jshttp/on-finished
-
----------------------------------------
-
-## on-headers
-License: MIT
-By: Douglas Christopher Wilson
-Repository: jshttp/on-headers
-
----------------------------------------
-
-## once
-License: ISC
-By: Isaac Z. Schlueter
-Repository: git://github.com/isaacs/once
-
----------------------------------------
-
-## onetime
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/onetime
-
----------------------------------------
-
-## open
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/open
-
-> MIT License
->
-> Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
->
-> 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.
-
----------------------------------------
-
-## parseurl
-License: MIT
-By: Douglas Christopher Wilson, Jonathan Ong
-Repository: pillarjs/parseurl
-
----------------------------------------
-
-## path-is-absolute
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/path-is-absolute
-
----------------------------------------
-
-## path-key
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/path-key
-
----------------------------------------
-
-## path-type
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/path-type
-
----------------------------------------
-
-## periscopic
-License: MIT
-Repository: Rich-Harris/periscopic
-
-> Copyright (c) 2019 Rich Harris
->
-> 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.
-
----------------------------------------
-
-## picomatch
-License: MIT
-By: Jon Schlinkert
-Repository: micromatch/picomatch
-
----------------------------------------
-
-## pify
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/pify
-
----------------------------------------
-
-## postcss-import
-License: MIT
-By: Maxime Thirouin
-Repository: https://github.com/postcss/postcss-import.git
-
-> The MIT License (MIT)
->
-> Copyright (c) 2014 Maxime Thirouin, Jason Campbell & Kevin Mårtensson
->
-> 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.
-
----------------------------------------
-
-## postcss-load-config
-License: MIT
-By: Michael Ciniawky, Ryan Dunckel, Mateusz Derks, Dalton Santos, Patrick Gilday
-Repository: postcss/postcss-load-config
-
-> The MIT License (MIT)
->
-> Copyright Michael Ciniawsky <michael.ciniawsky@gmail.com>
->
-> 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.
-
----------------------------------------
-
-## postcss-modules
-License: MIT
-By: Alexander Madyankin
-Repository: https://github.com/css-modules/postcss-modules.git
-
-> The MIT License (MIT)
->
-> Copyright 2015-2016 Alexander Madyankin <alexander@madyankin.name>
->
-> 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.
-
----------------------------------------
-
-## postcss-modules-extract-imports
-License: ISC
-By: Glen Maddern
-Repository: https://github.com/css-modules/postcss-modules-extract-imports.git
-
----------------------------------------
-
-## postcss-modules-local-by-default
-License: MIT
-By: Mark Dalgleish
-Repository: https://github.com/css-modules/postcss-modules-local-by-default.git
-
----------------------------------------
-
-## postcss-modules-scope
-License: ISC
-By: Glen Maddern
-Repository: https://github.com/css-modules/postcss-modules-scope.git
-
----------------------------------------
-
-## postcss-modules-values
-License: ISC
-By: Glen Maddern
-Repository: git+https://github.com/css-modules/postcss-modules-values.git
-
----------------------------------------
-
-## postcss-selector-parser
-License: MIT
-By: Ben Briggs, Chris Eppstein
-Repository: postcss/postcss-selector-parser
-
----------------------------------------
-
-## postcss-value-parser
-License: MIT
-By: Bogdan Chadkin
-Repository: https://github.com/TrySound/postcss-value-parser.git
-
----------------------------------------
-
-## queue-microtask
-License: MIT
-By: Feross Aboukhadijeh
-Repository: git://github.com/feross/queue-microtask.git
-
----------------------------------------
-
-## read-cache
-License: MIT
-By: Bogdan Chadkin
-Repository: git+https://github.com/TrySound/read-cache.git
-
----------------------------------------
-
-## readdirp
-License: MIT
-By: Thorsten Lorenz, Paul Miller
-Repository: git://github.com/paulmillr/readdirp.git
-
----------------------------------------
-
-## requires-port
-License: MIT
-By: Arnout Kazemier
-Repository: https://github.com/unshiftio/requires-port
-
----------------------------------------
-
-## resolve-from
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/resolve-from
-
----------------------------------------
-
-## resolve.exports
-License: MIT
-By: Luke Edwards
-Repository: lukeed/resolve.exports
-
-> The MIT License (MIT)
->
-> Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
->
-> 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.
-
----------------------------------------
-
-## reusify
-License: MIT
-By: Matteo Collina
-Repository: git+https://github.com/mcollina/reusify.git
-
----------------------------------------
-
-## run-parallel
-License: MIT
-By: Feross Aboukhadijeh
-Repository: git://github.com/feross/run-parallel.git
-
----------------------------------------
-
-## safe-buffer
-License: MIT
-By: Feross Aboukhadijeh
-Repository: git://github.com/feross/safe-buffer.git
-
----------------------------------------
-
-## selfsigned
-License: MIT
-By: José F. Romaniello, Paolo Fragomeni, Charles Bushong
-Repository: git://github.com/jfromaniello/selfsigned.git
-
-> MIT License
->
-> Copyright (c) 2013 José F. Romaniello
->
-> 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.
-
----------------------------------------
-
-## shebang-command
-License: MIT
-By: Kevin Mårtensson
-Repository: kevva/shebang-command
-
----------------------------------------
-
-## shebang-regex
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/shebang-regex
-
----------------------------------------
-
-## shell-quote
-License: MIT
-By: James Halliday
-Repository: http://github.com/substack/node-shell-quote.git
-
----------------------------------------
-
-## signal-exit
-License: ISC
-By: Ben Coe
-Repository: https://github.com/tapjs/signal-exit.git
-
----------------------------------------
-
-## sirv
-License: MIT
-By: Luke Edwards
-Repository: lukeed/sirv
-
----------------------------------------
-
-## slash
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/slash
-
----------------------------------------
-
-## source-map
-License: BSD-3-Clause
-By: Nick Fitzgerald, Tobias Koppers, Duncan Beevers, Stephen Crane, Ryan Seddon, Miles Elam, Mihai Bazon, Michael Ficarra, Todd Wolfson, Alexander Solovyov, Felix Gnass, Conrad Irwin, usrbincc, David Glasser, Chase Douglas, Evan Wallace, Heather Arthur, Hugh Kennedy, Simon Lydell, Jmeas Smith, Michael Z Goddard, azu, John Gozde, Adam Kirkton, Chris Montgomery, J. Ryan Stinnett, Jack Herrington, Chris Truter, Daniel Espeset, Jamie Wong, Eddy Bruël, Hawken Rives, Gilad Peleg, djchie, Gary Ye, Nicolas Lalevée
-Repository: http://github.com/mozilla/source-map.git
-
-> Copyright (c) 2009-2011, Mozilla Foundation and contributors
-> All rights reserved.
->
-> Redistribution and use in source and binary forms, with or without
-> modification, are permitted provided that the following conditions are met:
->
-> * Redistributions of source code must retain the above copyright notice, this
-> list of conditions and the following disclaimer.
->
-> * Redistributions in binary form must reproduce the above copyright notice,
-> this list of conditions and the following disclaimer in the documentation
-> and/or other materials provided with the distribution.
->
-> * Neither the names of the Mozilla Foundation nor the names of project
-> contributors may be used to endorse or promote products derived from this
-> software without specific prior written permission.
->
-> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-> ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
----------------------------------------
-
-## sourcemap-codec
-License: MIT
-By: Rich Harris
-Repository: https://github.com/Rich-Harris/sourcemap-codec
-
----------------------------------------
-
-## statuses
-License: MIT
-By: Douglas Christopher Wilson, Jonathan Ong
-Repository: jshttp/statuses
-
----------------------------------------
-
-## string-hash
-License: CC0-1.0
-By: The Dark Sky Company
-Repository: git://github.com/darkskyapp/string-hash.git
-
----------------------------------------
-
-## strip-ansi
-License: MIT
-By: Sindre Sorhus
-Repository: chalk/strip-ansi
-
-> MIT License
->
-> Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
->
-> 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.
-
----------------------------------------
-
-## strip-final-newline
-License: MIT
-By: Sindre Sorhus
-Repository: sindresorhus/strip-final-newline
-
----------------------------------------
-
-## supports-color
-License: MIT
-By: Sindre Sorhus
-Repository: chalk/supports-color
-
----------------------------------------
-
-## to-regex-range
-License: MIT
-By: Jon Schlinkert, Rouven Weßling
-Repository: micromatch/to-regex-range
-
----------------------------------------
-
-## totalist
-License: MIT
-By: Luke Edwards
-Repository: lukeed/totalist
-
----------------------------------------
-
-## tsconfck
-License: MIT
-By: dominikg
-Repository: git+https://github.com/dominikg/tsconfck.git
-
-> MIT License
->
-> Copyright (c) 2021-present dominikg and [contributors](https://github.com/dominikg/tsconfck/graphs/contributors)
->
-> 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.
->
-> -- Licenses for 3rd-party code included in tsconfck --
->
-> # strip-bom and strip-json-comments
-> MIT License
->
-> Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
->
-> 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.
-
----------------------------------------
-
-## unpipe
-License: MIT
-By: Douglas Christopher Wilson
-Repository: stream-utils/unpipe
-
----------------------------------------
-
-## util-deprecate
-License: MIT
-By: Nathan Rajlich
-Repository: git://github.com/TooTallNate/util-deprecate.git
-
----------------------------------------
-
-## utils-merge
-License: MIT
-By: Jared Hanson
-Repository: git://github.com/jaredhanson/utils-merge.git
-
----------------------------------------
-
-## vary
-License: MIT
-By: Douglas Christopher Wilson
-Repository: jshttp/vary
-
----------------------------------------
-
-## which
-License: ISC
-By: Isaac Z. Schlueter
-Repository: git://github.com/isaacs/node-which.git
-
----------------------------------------
-
-## wrappy
-License: ISC
-By: Isaac Z. Schlueter
-Repository: https://github.com/npm/wrappy
-
----------------------------------------
-
-## ws
-License: MIT
-By: Einar Otto Stangvik
-Repository: websockets/ws
-
-> The MIT License (MIT)
->
-> Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
->
-> 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.
-
----------------------------------------
-
-## yaml
-License: ISC
-By: Eemeli Aro
-Repository: github:eemeli/yaml
diff --git a/packages/astro/vendor/vite/client.d.ts b/packages/astro/vendor/vite/client.d.ts
deleted file mode 100644
index 2586f0781..000000000
--- a/packages/astro/vendor/vite/client.d.ts
+++ /dev/null
@@ -1,204 +0,0 @@
-/// <reference lib="dom" />
-/// <reference path="./types/importMeta.d.ts" />
-
-// CSS modules
-type CSSModuleClasses = { readonly [key: string]: string }
-
-declare module '*.module.css' {
- const classes: CSSModuleClasses
- export default classes
-}
-declare module '*.module.scss' {
- const classes: CSSModuleClasses
- export default classes
-}
-declare module '*.module.sass' {
- const classes: CSSModuleClasses
- export default classes
-}
-declare module '*.module.less' {
- const classes: CSSModuleClasses
- export default classes
-}
-declare module '*.module.styl' {
- const classes: CSSModuleClasses
- export default classes
-}
-declare module '*.module.stylus' {
- const classes: CSSModuleClasses
- export default classes
-}
-declare module '*.module.pcss' {
- const classes: CSSModuleClasses
- export default classes
-}
-
-// CSS
-declare module '*.css' {
- const css: string
- export default css
-}
-declare module '*.scss' {
- const css: string
- export default css
-}
-declare module '*.sass' {
- const css: string
- export default css
-}
-declare module '*.less' {
- const css: string
- export default css
-}
-declare module '*.styl' {
- const css: string
- export default css
-}
-declare module '*.stylus' {
- const css: string
- export default css
-}
-declare module '*.pcss' {
- const css: string
- export default css
-}
-
-// Built-in asset types
-// see `src/constants.ts`
-
-// images
-declare module '*.jpg' {
- const src: string
- export default src
-}
-declare module '*.jpeg' {
- const src: string
- export default src
-}
-declare module '*.png' {
- const src: string
- export default src
-}
-declare module '*.gif' {
- const src: string
- export default src
-}
-declare module '*.svg' {
- const src: string
- export default src
-}
-declare module '*.ico' {
- const src: string
- export default src
-}
-declare module '*.webp' {
- const src: string
- export default src
-}
-declare module '*.avif' {
- const src: string
- export default src
-}
-
-// media
-declare module '*.mp4' {
- const src: string
- export default src
-}
-declare module '*.webm' {
- const src: string
- export default src
-}
-declare module '*.ogg' {
- const src: string
- export default src
-}
-declare module '*.mp3' {
- const src: string
- export default src
-}
-declare module '*.wav' {
- const src: string
- export default src
-}
-declare module '*.flac' {
- const src: string
- export default src
-}
-declare module '*.aac' {
- const src: string
- export default src
-}
-
-// fonts
-declare module '*.woff' {
- const src: string
- export default src
-}
-declare module '*.woff2' {
- const src: string
- export default src
-}
-declare module '*.eot' {
- const src: string
- export default src
-}
-declare module '*.ttf' {
- const src: string
- export default src
-}
-declare module '*.otf' {
- const src: string
- export default src
-}
-
-// other
-declare module '*.wasm' {
- const initWasm: (options: WebAssembly.Imports) => Promise<WebAssembly.Exports>
- export default initWasm
-}
-declare module '*.webmanifest' {
- const src: string
- export default src
-}
-declare module '*.pdf' {
- const src: string
- export default src
-}
-
-// web worker
-declare module '*?worker' {
- const workerConstructor: {
- new (): Worker
- }
- export default workerConstructor
-}
-
-declare module '*?worker&inline' {
- const workerConstructor: {
- new (): Worker
- }
- export default workerConstructor
-}
-
-declare module '*?sharedworker' {
- const sharedWorkerConstructor: {
- new (): SharedWorker
- }
- export default sharedWorkerConstructor
-}
-
-declare module '*?raw' {
- const src: string
- export default src
-}
-
-declare module '*?url' {
- const src: string
- export default src
-}
-
-declare module '*?inline' {
- const src: string
- export default src
-}
diff --git a/packages/astro/vendor/vite/dist/client/client.mjs b/packages/astro/vendor/vite/dist/client/client.mjs
deleted file mode 100755
index 53609982f..000000000
--- a/packages/astro/vendor/vite/dist/client/client.mjs
+++ /dev/null
@@ -1,565 +0,0 @@
-import '@vite/env';
-
-const template = /*html*/ `
-<style>
-:host {
- position: fixed;
- z-index: 99999;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- overflow-y: scroll;
- margin: 0;
- background: rgba(0, 0, 0, 0.66);
- --monospace: 'SFMono-Regular', Consolas,
- 'Liberation Mono', Menlo, Courier, monospace;
- --red: #ff5555;
- --yellow: #e2aa53;
- --purple: #cfa4ff;
- --cyan: #2dd9da;
- --dim: #c9c9c9;
-}
-
-.window {
- font-family: var(--monospace);
- line-height: 1.5;
- width: 800px;
- color: #d8d8d8;
- margin: 30px auto;
- padding: 25px 40px;
- position: relative;
- background: #181818;
- border-radius: 6px 6px 8px 8px;
- box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22);
- overflow: hidden;
- border-top: 8px solid var(--red);
- direction: ltr;
- text-align: left;
-}
-
-pre {
- font-family: var(--monospace);
- font-size: 16px;
- margin-top: 0;
- margin-bottom: 1em;
- overflow-x: scroll;
- scrollbar-width: none;
-}
-
-pre::-webkit-scrollbar {
- display: none;
-}
-
-.message {
- line-height: 1.3;
- font-weight: 600;
- white-space: pre-wrap;
-}
-
-.message-body {
- color: var(--red);
-}
-
-.plugin {
- color: var(--purple);
-}
-
-.file {
- color: var(--cyan);
- margin-bottom: 0;
- white-space: pre-wrap;
- word-break: break-all;
-}
-
-.frame {
- color: var(--yellow);
-}
-
-.stack {
- font-size: 13px;
- color: var(--dim);
-}
-
-.tip {
- font-size: 13px;
- color: #999;
- border-top: 1px dotted #999;
- padding-top: 13px;
-}
-
-code {
- font-size: 13px;
- font-family: var(--monospace);
- color: var(--yellow);
-}
-
-.file-link {
- text-decoration: underline;
- cursor: pointer;
-}
-</style>
-<div class="window">
- <pre class="message"><span class="plugin"></span><span class="message-body"></span></pre>
- <pre class="file"></pre>
- <pre class="frame"></pre>
- <pre class="stack"></pre>
- <div class="tip">
- Click outside or fix the code to dismiss.<br>
- You can also disable this overlay by setting
- <code>server.hmr.overlay</code> to <code>false</code> in <code>vite.config.js.</code>
- </div>
-</div>
-`;
-const fileRE = /(?:[a-zA-Z]:\\|\/).*?:\d+:\d+/g;
-const codeframeRE = /^(?:>?\s+\d+\s+\|.*|\s+\|\s*\^.*)\r?\n/gm;
-class ErrorOverlay extends HTMLElement {
- constructor(err) {
- var _a;
- super();
- this.root = this.attachShadow({ mode: 'open' });
- this.root.innerHTML = template;
- codeframeRE.lastIndex = 0;
- const hasFrame = err.frame && codeframeRE.test(err.frame);
- const message = hasFrame
- ? err.message.replace(codeframeRE, '')
- : err.message;
- if (err.plugin) {
- this.text('.plugin', `[plugin:${err.plugin}] `);
- }
- this.text('.message-body', message.trim());
- const [file] = (((_a = err.loc) === null || _a === void 0 ? void 0 : _a.file) || err.id || 'unknown file').split(`?`);
- if (err.loc) {
- this.text('.file', `${file}:${err.loc.line}:${err.loc.column}`, true);
- }
- else if (err.id) {
- this.text('.file', file);
- }
- if (hasFrame) {
- this.text('.frame', err.frame.trim());
- }
- this.text('.stack', err.stack, true);
- this.root.querySelector('.window').addEventListener('click', (e) => {
- e.stopPropagation();
- });
- this.addEventListener('click', () => {
- this.close();
- });
- }
- text(selector, text, linkFiles = false) {
- const el = this.root.querySelector(selector);
- if (!linkFiles) {
- el.textContent = text;
- }
- else {
- let curIndex = 0;
- let match;
- while ((match = fileRE.exec(text))) {
- const { 0: file, index } = match;
- if (index != null) {
- const frag = text.slice(curIndex, index);
- el.appendChild(document.createTextNode(frag));
- const link = document.createElement('a');
- link.textContent = file;
- link.className = 'file-link';
- link.onclick = () => {
- fetch('/__open-in-editor?file=' + encodeURIComponent(file));
- };
- el.appendChild(link);
- curIndex += frag.length + file.length;
- }
- }
- }
- }
- close() {
- var _a;
- (_a = this.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(this);
- }
-}
-const overlayId = 'vite-error-overlay';
-if (customElements && !customElements.get(overlayId)) {
- customElements.define(overlayId, ErrorOverlay);
-}
-
-console.log('[vite] connecting...');
-// use server configuration, then fallback to inference
-const socketProtocol = __HMR_PROTOCOL__ || (location.protocol === 'https:' ? 'wss' : 'ws');
-const socketHost = `${__HMR_HOSTNAME__ || location.hostname}:${__HMR_PORT__}`;
-const socket = new WebSocket(`${socketProtocol}://${socketHost}`, 'vite-hmr');
-const base = __BASE__ || '/';
-function warnFailedFetch(err, path) {
- if (!err.message.match('fetch')) {
- console.error(err);
- }
- console.error(`[hmr] Failed to reload ${path}. ` +
- `This could be due to syntax errors or importing non-existent ` +
- `modules. (see errors above)`);
-}
-// Listen for messages
-socket.addEventListener('message', async ({ data }) => {
- handleMessage(JSON.parse(data));
-});
-
-/**
- * This cleans up the query params and removes the `direct` param which is internal.
- * Other query params are preserved.
- */
-function cleanUrl(pathname) {
- let url = new URL(pathname, location);
- url.searchParams.delete('direct');
- return url.pathname + url.search;
-}
-let isFirstUpdate = true;
-async function handleMessage(payload) {
- switch (payload.type) {
- case 'connected':
- console.log(`[vite] connected.`);
- // proxy(nginx, docker) hmr ws maybe caused timeout,
- // so send ping package let ws keep alive.
- setInterval(() => socket.send('ping'), __HMR_TIMEOUT__);
- break;
- case 'update':
- notifyListeners('vite:beforeUpdate', payload);
- // if this is the first update and there's already an error overlay, it
- // means the page opened with existing server compile error and the whole
- // module script failed to load (since one of the nested imports is 500).
- // in this case a normal update won't work and a full reload is needed.
- if (isFirstUpdate && hasErrorOverlay()) {
- window.location.reload();
- return;
- }
- else {
- clearErrorOverlay();
- isFirstUpdate = false;
- }
- payload.updates.forEach((update) => {
- if (update.type === 'js-update') {
- queueUpdate(fetchUpdate(update));
- }
- else {
- // css-update
- // this is only sent when a css file referenced with <link> is updated
- let { path, timestamp } = update;
- let searchUrl = cleanUrl(path);
- // can't use querySelector with `[href*=]` here since the link may be
- // using relative paths so we need to use link.href to grab the full
- // URL for the include check.
- const el = [].slice.call(document.querySelectorAll(`link`)).find((e) => {
- return cleanUrl(e.href).includes(searchUrl)
- });
- if (el) {
- const newPath = `${base}${path.slice(1)}${path.includes('?') ? '&' : '?'}t=${timestamp}`;
- el.href = new URL(newPath, el.href).href;
- }
- console.log(`[vite] css hot updated: ${path}`);
- }
- });
- break;
- case 'custom': {
- notifyListeners(payload.event, payload.data);
- break;
- }
- case 'full-reload':
- notifyListeners('vite:beforeFullReload', payload);
- if (payload.path && payload.path.endsWith('.html')) {
- // if html file is edited, only reload the page if the browser is
- // currently on that page.
- const pagePath = location.pathname;
- const payloadPath = base + payload.path.slice(1);
- if (pagePath === payloadPath ||
- (pagePath.endsWith('/') && pagePath + 'index.html' === payloadPath)) {
- location.reload();
- }
- return;
- }
- else {
- location.reload();
- }
- break;
- case 'prune':
- notifyListeners('vite:beforePrune', payload);
- // After an HMR update, some modules are no longer imported on the page
- // but they may have left behind side effects that need to be cleaned up
- // (.e.g style injections)
- // TODO Trigger their dispose callbacks.
- payload.paths.forEach((path) => {
- const fn = pruneMap.get(path);
- if (fn) {
- fn(dataMap.get(path));
- }
- });
- break;
- case 'error': {
- notifyListeners('vite:error', payload);
- const err = payload.err;
- if (enableOverlay) {
- createErrorOverlay(err);
- }
- else {
- console.error(`[vite] Internal Server Error\n${err.message}\n${err.stack}`);
- }
- break;
- }
- default: {
- const check = payload;
- return check;
- }
- }
-}
-function notifyListeners(event, data) {
- const cbs = customListenersMap.get(event);
- if (cbs) {
- cbs.forEach((cb) => cb(data));
- }
-}
-const enableOverlay = __HMR_ENABLE_OVERLAY__;
-function createErrorOverlay(err) {
- if (!enableOverlay)
- return;
- clearErrorOverlay();
- document.body.appendChild(new ErrorOverlay(err));
-}
-function clearErrorOverlay() {
- document
- .querySelectorAll(overlayId)
- .forEach((n) => n.close());
-}
-function hasErrorOverlay() {
- return document.querySelectorAll(overlayId).length;
-}
-let pending = false;
-let queued = [];
-/**
- * buffer multiple hot updates triggered by the same src change
- * so that they are invoked in the same order they were sent.
- * (otherwise the order may be inconsistent because of the http request round trip)
- */
-async function queueUpdate(p) {
- queued.push(p);
- if (!pending) {
- pending = true;
- await Promise.resolve();
- pending = false;
- const loading = [...queued];
- queued = [];
- (await Promise.all(loading)).forEach((fn) => fn && fn());
- }
-}
-async function waitForSuccessfulPing(ms = 1000) {
- // eslint-disable-next-line no-constant-condition
- while (true) {
- try {
- await fetch(`${base}__vite_ping`);
- break;
- }
- catch (e) {
- await new Promise((resolve) => setTimeout(resolve, ms));
- }
- }
-}
-// ping server
-socket.addEventListener('close', async ({ wasClean }) => {
- if (wasClean)
- return;
- console.log(`[vite] server connection lost. polling for restart...`);
- await waitForSuccessfulPing();
- location.reload();
-});
-const sheetsMap = new Map();
-function updateStyle(id, content) {
- let style = sheetsMap.get(id);
- {
- if (style && !(style instanceof HTMLStyleElement)) {
- removeStyle(id);
- style = undefined;
- }
- if (!style) {
- style = document.createElement('style');
- style.setAttribute('type', 'text/css');
- style.innerHTML = content;
- document.head.appendChild(style);
- }
- else {
- style.innerHTML = content;
- }
- }
- sheetsMap.set(id, style);
-}
-function removeStyle(id) {
- const style = sheetsMap.get(id);
- if (style) {
- if (style instanceof CSSStyleSheet) {
- // @ts-ignore
- document.adoptedStyleSheets.indexOf(style);
- // @ts-ignore
- document.adoptedStyleSheets = document.adoptedStyleSheets.filter((s) => s !== style);
- }
- else {
- document.head.removeChild(style);
- }
- sheetsMap.delete(id);
- }
-}
-async function fetchUpdate({ path, acceptedPath, timestamp }) {
- const mod = hotModulesMap.get(path);
- if (!mod) {
- // In a code-splitting project,
- // it is common that the hot-updating module is not loaded yet.
- // https://github.com/vitejs/vite/issues/721
- return;
- }
- const moduleMap = new Map();
- const isSelfUpdate = path === acceptedPath;
- // make sure we only import each dep once
- const modulesToUpdate = new Set();
- if (isSelfUpdate) {
- // self update - only update self
- modulesToUpdate.add(path);
- }
- else {
- // dep update
- for (const { deps } of mod.callbacks) {
- deps.forEach((dep) => {
- if (acceptedPath === dep) {
- modulesToUpdate.add(dep);
- }
- });
- }
- }
- // determine the qualified callbacks before we re-import the modules
- const qualifiedCallbacks = mod.callbacks.filter(({ deps }) => {
- return deps.some((dep) => modulesToUpdate.has(dep));
- });
- await Promise.all(Array.from(modulesToUpdate).map(async (dep) => {
- const disposer = disposeMap.get(dep);
- if (disposer)
- await disposer(dataMap.get(dep));
- const [path, query] = dep.split(`?`);
- try {
- const newMod = await import(
- /* @vite-ignore */
- base +
- path.slice(1) +
- `?import&t=${timestamp}${query ? `&${query}` : ''}`);
- moduleMap.set(dep, newMod);
- }
- catch (e) {
- warnFailedFetch(e, dep);
- }
- }));
- return () => {
- for (const { deps, fn } of qualifiedCallbacks) {
- fn(deps.map((dep) => moduleMap.get(dep)));
- }
- const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;
- console.log(`[vite] hot updated: ${loggedPath}`);
- };
-}
-const hotModulesMap = new Map();
-const disposeMap = new Map();
-const pruneMap = new Map();
-const dataMap = new Map();
-const customListenersMap = new Map();
-const ctxToListenersMap = new Map();
-// Just infer the return type for now
-// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
-const createHotContext = (ownerPath) => {
- if (!dataMap.has(ownerPath)) {
- dataMap.set(ownerPath, {});
- }
- // when a file is hot updated, a new context is created
- // clear its stale callbacks
- const mod = hotModulesMap.get(ownerPath);
- if (mod) {
- mod.callbacks = [];
- }
- // clear stale custom event listeners
- const staleListeners = ctxToListenersMap.get(ownerPath);
- if (staleListeners) {
- for (const [event, staleFns] of staleListeners) {
- const listeners = customListenersMap.get(event);
- if (listeners) {
- customListenersMap.set(event, listeners.filter((l) => !staleFns.includes(l)));
- }
- }
- }
- const newListeners = new Map();
- ctxToListenersMap.set(ownerPath, newListeners);
- function acceptDeps(deps, callback = () => { }) {
- const mod = hotModulesMap.get(ownerPath) || {
- id: ownerPath,
- callbacks: []
- };
- mod.callbacks.push({
- deps,
- fn: callback
- });
- hotModulesMap.set(ownerPath, mod);
- }
- const hot = {
- get data() {
- return dataMap.get(ownerPath);
- },
- accept(deps, callback) {
- if (typeof deps === 'function' || !deps) {
- // self-accept: hot.accept(() => {})
- acceptDeps([ownerPath], ([mod]) => deps && deps(mod));
- }
- else if (typeof deps === 'string') {
- // explicit deps
- acceptDeps([deps], ([mod]) => callback && callback(mod));
- }
- else if (Array.isArray(deps)) {
- acceptDeps(deps, callback);
- }
- else {
- throw new Error(`invalid hot.accept() usage.`);
- }
- },
- acceptDeps() {
- throw new Error(`hot.acceptDeps() is deprecated. ` +
- `Use hot.accept() with the same signature instead.`);
- },
- dispose(cb) {
- disposeMap.set(ownerPath, cb);
- },
- prune(cb) {
- pruneMap.set(ownerPath, cb);
- },
- // TODO
- // eslint-disable-next-line @typescript-eslint/no-empty-function
- decline() { },
- invalidate() {
- // TODO should tell the server to re-perform hmr propagation
- // from this module as root
- location.reload();
- },
- // custom events
- on: (event, cb) => {
- const addToMap = (map) => {
- const existing = map.get(event) || [];
- existing.push(cb);
- map.set(event, existing);
- };
- addToMap(customListenersMap);
- addToMap(newListeners);
- }
- };
- return hot;
-};
-/**
- * urls here are dynamic import() urls that couldn't be statically analyzed
- */
-function injectQuery(url, queryToInject) {
- // skip urls that won't be handled by vite
- if (!url.startsWith('.') && !url.startsWith('/')) {
- return url;
- }
- // can't use pathname from URL since it may be relative like ../
- const pathname = url.replace(/#.*$/, '').replace(/\?.*$/, '');
- const { search, hash } = new URL(url, 'http://vitejs.dev');
- return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ''}${hash || ''}`;
-}
-
-export { createHotContext, injectQuery, removeStyle, updateStyle };
-//# sourceMappingURL=client.mjs.map
diff --git a/packages/astro/vendor/vite/dist/client/client.mjs.map b/packages/astro/vendor/vite/dist/client/client.mjs.map
deleted file mode 100755
index 483469f1d..000000000
--- a/packages/astro/vendor/vite/dist/client/client.mjs.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"client.mjs","sources":["../../src/client/overlay.ts","../../src/client/client.ts"],"sourcesContent":["import { ErrorPayload } from 'types/hmrPayload'\n\nconst template = /*html*/ `\n<style>\n:host {\n position: fixed;\n z-index: 99999;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow-y: scroll;\n margin: 0;\n background: rgba(0, 0, 0, 0.66);\n --monospace: 'SFMono-Regular', Consolas,\n 'Liberation Mono', Menlo, Courier, monospace;\n --red: #ff5555;\n --yellow: #e2aa53;\n --purple: #cfa4ff;\n --cyan: #2dd9da;\n --dim: #c9c9c9;\n}\n\n.window {\n font-family: var(--monospace);\n line-height: 1.5;\n width: 800px;\n color: #d8d8d8;\n margin: 30px auto;\n padding: 25px 40px;\n position: relative;\n background: #181818;\n border-radius: 6px 6px 8px 8px;\n box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22);\n overflow: hidden;\n border-top: 8px solid var(--red);\n direction: ltr;\n text-align: left;\n}\n\npre {\n font-family: var(--monospace);\n font-size: 16px;\n margin-top: 0;\n margin-bottom: 1em;\n overflow-x: scroll;\n scrollbar-width: none;\n}\n\npre::-webkit-scrollbar {\n display: none;\n}\n\n.message {\n line-height: 1.3;\n font-weight: 600;\n white-space: pre-wrap;\n}\n\n.message-body {\n color: var(--red);\n}\n\n.plugin {\n color: var(--purple);\n}\n\n.file {\n color: var(--cyan);\n margin-bottom: 0;\n white-space: pre-wrap;\n word-break: break-all;\n}\n\n.frame {\n color: var(--yellow);\n}\n\n.stack {\n font-size: 13px;\n color: var(--dim);\n}\n\n.tip {\n font-size: 13px;\n color: #999;\n border-top: 1px dotted #999;\n padding-top: 13px;\n}\n\ncode {\n font-size: 13px;\n font-family: var(--monospace);\n color: var(--yellow);\n}\n\n.file-link {\n text-decoration: underline;\n cursor: pointer;\n}\n</style>\n<div class=\"window\">\n <pre class=\"message\"><span class=\"plugin\"></span><span class=\"message-body\"></span></pre>\n <pre class=\"file\"></pre>\n <pre class=\"frame\"></pre>\n <pre class=\"stack\"></pre>\n <div class=\"tip\">\n Click outside or fix the code to dismiss.<br>\n You can also disable this overlay by setting\n <code>server.hmr.overlay</code> to <code>false</code> in <code>vite.config.js.</code>\n </div>\n</div>\n`\n\nconst fileRE = /(?:[a-zA-Z]:\\\\|\\/).*?:\\d+:\\d+/g\nconst codeframeRE = /^(?:>?\\s+\\d+\\s+\\|.*|\\s+\\|\\s*\\^.*)\\r?\\n/gm\n\nexport class ErrorOverlay extends HTMLElement {\n root: ShadowRoot\n\n constructor(err: ErrorPayload['err']) {\n super()\n this.root = this.attachShadow({ mode: 'open' })\n this.root.innerHTML = template\n\n codeframeRE.lastIndex = 0\n const hasFrame = err.frame && codeframeRE.test(err.frame)\n const message = hasFrame\n ? err.message.replace(codeframeRE, '')\n : err.message\n if (err.plugin) {\n this.text('.plugin', `[plugin:${err.plugin}] `)\n }\n this.text('.message-body', message.trim())\n\n const [file] = (err.loc?.file || err.id || 'unknown file').split(`?`)\n if (err.loc) {\n this.text('.file', `${file}:${err.loc.line}:${err.loc.column}`, true)\n } else if (err.id) {\n this.text('.file', file)\n }\n\n if (hasFrame) {\n this.text('.frame', err.frame!.trim())\n }\n this.text('.stack', err.stack, true)\n\n this.root.querySelector('.window')!.addEventListener('click', (e) => {\n e.stopPropagation()\n })\n this.addEventListener('click', () => {\n this.close()\n })\n }\n\n text(selector: string, text: string, linkFiles = false): void {\n const el = this.root.querySelector(selector)!\n if (!linkFiles) {\n el.textContent = text\n } else {\n let curIndex = 0\n let match: RegExpExecArray | null\n while ((match = fileRE.exec(text))) {\n const { 0: file, index } = match\n if (index != null) {\n const frag = text.slice(curIndex, index)\n el.appendChild(document.createTextNode(frag))\n const link = document.createElement('a')\n link.textContent = file\n link.className = 'file-link'\n link.onclick = () => {\n fetch('/__open-in-editor?file=' + encodeURIComponent(file))\n }\n el.appendChild(link)\n curIndex += frag.length + file.length\n }\n }\n }\n }\n\n close(): void {\n this.parentNode?.removeChild(this)\n }\n}\n\nexport const overlayId = 'vite-error-overlay'\nif (customElements && !customElements.get(overlayId)) {\n customElements.define(overlayId, ErrorOverlay)\n}\n","import {\n ErrorPayload,\n FullReloadPayload,\n HMRPayload,\n PrunePayload,\n Update,\n UpdatePayload\n} from 'types/hmrPayload'\nimport { CustomEventName } from 'types/customEvent'\nimport { ErrorOverlay, overlayId } from './overlay'\n// eslint-disable-next-line node/no-missing-import\nimport '@vite/env'\n\n// injected by the hmr plugin when served\ndeclare const __BASE__: string\ndeclare const __HMR_PROTOCOL__: string\ndeclare const __HMR_HOSTNAME__: string\ndeclare const __HMR_PORT__: string\ndeclare const __HMR_TIMEOUT__: number\ndeclare const __HMR_ENABLE_OVERLAY__: boolean\n\nconsole.log('[vite] connecting...')\n\n// use server configuration, then fallback to inference\nconst socketProtocol =\n __HMR_PROTOCOL__ || (location.protocol === 'https:' ? 'wss' : 'ws')\nconst socketHost = `${__HMR_HOSTNAME__ || location.hostname}:${__HMR_PORT__}`\nconst socket = new WebSocket(`${socketProtocol}://${socketHost}`, 'vite-hmr')\nconst base = __BASE__ || '/'\n\nfunction warnFailedFetch(err: Error, path: string | string[]) {\n if (!err.message.match('fetch')) {\n console.error(err)\n }\n console.error(\n `[hmr] Failed to reload ${path}. ` +\n `This could be due to syntax errors or importing non-existent ` +\n `modules. (see errors above)`\n )\n}\n\n// Listen for messages\nsocket.addEventListener('message', async ({ data }) => {\n handleMessage(JSON.parse(data))\n})\n\nlet isFirstUpdate = true\n\nasync function handleMessage(payload: HMRPayload) {\n switch (payload.type) {\n case 'connected':\n console.log(`[vite] connected.`)\n // proxy(nginx, docker) hmr ws maybe caused timeout,\n // so send ping package let ws keep alive.\n setInterval(() => socket.send('ping'), __HMR_TIMEOUT__)\n break\n case 'update':\n notifyListeners('vite:beforeUpdate', payload)\n // if this is the first update and there's already an error overlay, it\n // means the page opened with existing server compile error and the whole\n // module script failed to load (since one of the nested imports is 500).\n // in this case a normal update won't work and a full reload is needed.\n if (isFirstUpdate && hasErrorOverlay()) {\n window.location.reload()\n return\n } else {\n clearErrorOverlay()\n isFirstUpdate = false\n }\n payload.updates.forEach((update) => {\n if (update.type === 'js-update') {\n queueUpdate(fetchUpdate(update))\n } else {\n // css-update\n // this is only sent when a css file referenced with <link> is updated\n let { path, timestamp } = update\n path = path.replace(/\\?.*/, '')\n // can't use querySelector with `[href*=]` here since the link may be\n // using relative paths so we need to use link.href to grab the full\n // URL for the include check.\n const el = (\n [].slice.call(\n document.querySelectorAll(`link`)\n ) as HTMLLinkElement[]\n ).find((e) => e.href.includes(path))\n if (el) {\n const newPath = `${base}${path.slice(1)}${\n path.includes('?') ? '&' : '?'\n }t=${timestamp}`\n el.href = new URL(newPath, el.href).href\n }\n console.log(`[vite] css hot updated: ${path}`)\n }\n })\n break\n case 'custom': {\n notifyListeners(payload.event as CustomEventName<any>, payload.data)\n break\n }\n case 'full-reload':\n notifyListeners('vite:beforeFullReload', payload)\n if (payload.path && payload.path.endsWith('.html')) {\n // if html file is edited, only reload the page if the browser is\n // currently on that page.\n const pagePath = location.pathname\n const payloadPath = base + payload.path.slice(1)\n if (\n pagePath === payloadPath ||\n (pagePath.endsWith('/') && pagePath + 'index.html' === payloadPath)\n ) {\n location.reload()\n }\n return\n } else {\n location.reload()\n }\n break\n case 'prune':\n notifyListeners('vite:beforePrune', payload)\n // After an HMR update, some modules are no longer imported on the page\n // but they may have left behind side effects that need to be cleaned up\n // (.e.g style injections)\n // TODO Trigger their dispose callbacks.\n payload.paths.forEach((path) => {\n const fn = pruneMap.get(path)\n if (fn) {\n fn(dataMap.get(path))\n }\n })\n break\n case 'error': {\n notifyListeners('vite:error', payload)\n const err = payload.err\n if (enableOverlay) {\n createErrorOverlay(err)\n } else {\n console.error(\n `[vite] Internal Server Error\\n${err.message}\\n${err.stack}`\n )\n }\n break\n }\n default: {\n const check: never = payload\n return check\n }\n }\n}\n\nfunction notifyListeners(\n event: 'vite:beforeUpdate',\n payload: UpdatePayload\n): void\nfunction notifyListeners(event: 'vite:beforePrune', payload: PrunePayload): void\nfunction notifyListeners(\n event: 'vite:beforeFullReload',\n payload: FullReloadPayload\n): void\nfunction notifyListeners(event: 'vite:error', payload: ErrorPayload): void\nfunction notifyListeners<T extends string>(\n event: CustomEventName<T>,\n data: any\n): void\nfunction notifyListeners(event: string, data: any): void {\n const cbs = customListenersMap.get(event)\n if (cbs) {\n cbs.forEach((cb) => cb(data))\n }\n}\n\nconst enableOverlay = __HMR_ENABLE_OVERLAY__\n\nfunction createErrorOverlay(err: ErrorPayload['err']) {\n if (!enableOverlay) return\n clearErrorOverlay()\n document.body.appendChild(new ErrorOverlay(err))\n}\n\nfunction clearErrorOverlay() {\n document\n .querySelectorAll(overlayId)\n .forEach((n) => (n as ErrorOverlay).close())\n}\n\nfunction hasErrorOverlay() {\n return document.querySelectorAll(overlayId).length\n}\n\nlet pending = false\nlet queued: Promise<(() => void) | undefined>[] = []\n\n/**\n * buffer multiple hot updates triggered by the same src change\n * so that they are invoked in the same order they were sent.\n * (otherwise the order may be inconsistent because of the http request round trip)\n */\nasync function queueUpdate(p: Promise<(() => void) | undefined>) {\n queued.push(p)\n if (!pending) {\n pending = true\n await Promise.resolve()\n pending = false\n const loading = [...queued]\n queued = []\n ;(await Promise.all(loading)).forEach((fn) => fn && fn())\n }\n}\n\nasync function waitForSuccessfulPing(ms = 1000) {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n await fetch(`${base}__vite_ping`)\n break\n } catch (e) {\n await new Promise((resolve) => setTimeout(resolve, ms))\n }\n }\n}\n\n// ping server\nsocket.addEventListener('close', async ({ wasClean }) => {\n if (wasClean) return\n console.log(`[vite] server connection lost. polling for restart...`)\n await waitForSuccessfulPing()\n location.reload()\n})\n\n// https://wicg.github.io/construct-stylesheets\nconst supportsConstructedSheet = (() => {\n try {\n // new CSSStyleSheet()\n // return true\n } catch (e) {}\n return false\n})()\n\nconst sheetsMap = new Map()\n\nexport function updateStyle(id: string, content: string): void {\n let style = sheetsMap.get(id)\n if (supportsConstructedSheet && !content.includes('@import')) {\n if (style && !(style instanceof CSSStyleSheet)) {\n removeStyle(id)\n style = undefined\n }\n\n if (!style) {\n style = new CSSStyleSheet()\n style.replaceSync(content)\n // @ts-ignore\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, style]\n } else {\n style.replaceSync(content)\n }\n } else {\n if (style && !(style instanceof HTMLStyleElement)) {\n removeStyle(id)\n style = undefined\n }\n\n if (!style) {\n style = document.createElement('style')\n style.setAttribute('type', 'text/css')\n style.innerHTML = content\n document.head.appendChild(style)\n } else {\n style.innerHTML = content\n }\n }\n sheetsMap.set(id, style)\n}\n\nexport function removeStyle(id: string): void {\n const style = sheetsMap.get(id)\n if (style) {\n if (style instanceof CSSStyleSheet) {\n // @ts-ignore\n const index = document.adoptedStyleSheets.indexOf(style)\n // @ts-ignore\n document.adoptedStyleSheets = document.adoptedStyleSheets.filter(\n (s: CSSStyleSheet) => s !== style\n )\n } else {\n document.head.removeChild(style)\n }\n sheetsMap.delete(id)\n }\n}\n\nasync function fetchUpdate({ path, acceptedPath, timestamp }: Update) {\n const mod = hotModulesMap.get(path)\n if (!mod) {\n // In a code-splitting project,\n // it is common that the hot-updating module is not loaded yet.\n // https://github.com/vitejs/vite/issues/721\n return\n }\n\n const moduleMap = new Map()\n const isSelfUpdate = path === acceptedPath\n\n // make sure we only import each dep once\n const modulesToUpdate = new Set<string>()\n if (isSelfUpdate) {\n // self update - only update self\n modulesToUpdate.add(path)\n } else {\n // dep update\n for (const { deps } of mod.callbacks) {\n deps.forEach((dep) => {\n if (acceptedPath === dep) {\n modulesToUpdate.add(dep)\n }\n })\n }\n }\n\n // determine the qualified callbacks before we re-import the modules\n const qualifiedCallbacks = mod.callbacks.filter(({ deps }) => {\n return deps.some((dep) => modulesToUpdate.has(dep))\n })\n\n await Promise.all(\n Array.from(modulesToUpdate).map(async (dep) => {\n const disposer = disposeMap.get(dep)\n if (disposer) await disposer(dataMap.get(dep))\n const [path, query] = dep.split(`?`)\n try {\n const newMod = await import(\n /* @vite-ignore */\n base +\n path.slice(1) +\n `?import&t=${timestamp}${query ? `&${query}` : ''}`\n )\n moduleMap.set(dep, newMod)\n } catch (e) {\n warnFailedFetch(e, dep)\n }\n })\n )\n\n return () => {\n for (const { deps, fn } of qualifiedCallbacks) {\n fn(deps.map((dep) => moduleMap.get(dep)))\n }\n const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`\n console.log(`[vite] hot updated: ${loggedPath}`)\n }\n}\n\ninterface HotModule {\n id: string\n callbacks: HotCallback[]\n}\n\ninterface HotCallback {\n // the dependencies must be fetchable paths\n deps: string[]\n fn: (modules: object[]) => void\n}\n\nconst hotModulesMap = new Map<string, HotModule>()\nconst disposeMap = new Map<string, (data: any) => void | Promise<void>>()\nconst pruneMap = new Map<string, (data: any) => void | Promise<void>>()\nconst dataMap = new Map<string, any>()\nconst customListenersMap = new Map<string, ((data: any) => void)[]>()\nconst ctxToListenersMap = new Map<\n string,\n Map<string, ((data: any) => void)[]>\n>()\n\n// Just infer the return type for now\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const createHotContext = (ownerPath: string) => {\n if (!dataMap.has(ownerPath)) {\n dataMap.set(ownerPath, {})\n }\n\n // when a file is hot updated, a new context is created\n // clear its stale callbacks\n const mod = hotModulesMap.get(ownerPath)\n if (mod) {\n mod.callbacks = []\n }\n\n // clear stale custom event listeners\n const staleListeners = ctxToListenersMap.get(ownerPath)\n if (staleListeners) {\n for (const [event, staleFns] of staleListeners) {\n const listeners = customListenersMap.get(event)\n if (listeners) {\n customListenersMap.set(\n event,\n listeners.filter((l) => !staleFns.includes(l))\n )\n }\n }\n }\n\n const newListeners = new Map()\n ctxToListenersMap.set(ownerPath, newListeners)\n\n function acceptDeps(deps: string[], callback: HotCallback['fn'] = () => {}) {\n const mod: HotModule = hotModulesMap.get(ownerPath) || {\n id: ownerPath,\n callbacks: []\n }\n mod.callbacks.push({\n deps,\n fn: callback\n })\n hotModulesMap.set(ownerPath, mod)\n }\n\n const hot = {\n get data() {\n return dataMap.get(ownerPath)\n },\n\n accept(deps: any, callback?: any) {\n if (typeof deps === 'function' || !deps) {\n // self-accept: hot.accept(() => {})\n acceptDeps([ownerPath], ([mod]) => deps && deps(mod))\n } else if (typeof deps === 'string') {\n // explicit deps\n acceptDeps([deps], ([mod]) => callback && callback(mod))\n } else if (Array.isArray(deps)) {\n acceptDeps(deps, callback)\n } else {\n throw new Error(`invalid hot.accept() usage.`)\n }\n },\n\n acceptDeps() {\n throw new Error(\n `hot.acceptDeps() is deprecated. ` +\n `Use hot.accept() with the same signature instead.`\n )\n },\n\n dispose(cb: (data: any) => void) {\n disposeMap.set(ownerPath, cb)\n },\n\n prune(cb: (data: any) => void) {\n pruneMap.set(ownerPath, cb)\n },\n\n // TODO\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n decline() {},\n\n invalidate() {\n // TODO should tell the server to re-perform hmr propagation\n // from this module as root\n location.reload()\n },\n\n // custom events\n on: (event: string, cb: (data: any) => void) => {\n const addToMap = (map: Map<string, any[]>) => {\n const existing = map.get(event) || []\n existing.push(cb)\n map.set(event, existing)\n }\n addToMap(customListenersMap)\n addToMap(newListeners)\n }\n }\n\n return hot\n}\n\n/**\n * urls here are dynamic import() urls that couldn't be statically analyzed\n */\nexport function injectQuery(url: string, queryToInject: string): string {\n // skip urls that won't be handled by vite\n if (!url.startsWith('.') && !url.startsWith('/')) {\n return url\n }\n\n // can't use pathname from URL since it may be relative like ../\n const pathname = url.replace(/#.*$/, '').replace(/\\?.*$/, '')\n const { search, hash } = new URL(url, 'http://vitejs.dev')\n\n return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ''}${\n hash || ''\n }`\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/client/env.mjs b/packages/astro/vendor/vite/dist/client/env.mjs
deleted file mode 100755
index 1b3a7d26e..000000000
--- a/packages/astro/vendor/vite/dist/client/env.mjs
+++ /dev/null
@@ -1,30 +0,0 @@
-const context = (() => {
- if (typeof globalThis !== 'undefined') {
- return globalThis;
- }
- else if (typeof self !== 'undefined') {
- return self;
- }
- else if (typeof window !== 'undefined') {
- return window;
- }
- else {
- return Function('return this')();
- }
-})();
-// assign defines
-const defines = __DEFINES__;
-Object.keys(defines).forEach((key) => {
- const segments = key.split('.');
- let target = context;
- for (let i = 0; i < segments.length; i++) {
- const segment = segments[i];
- if (i === segments.length - 1) {
- target[segment] = defines[key];
- }
- else {
- target = target[segment] || (target[segment] = {});
- }
- }
-});
-//# sourceMappingURL=env.mjs.map
diff --git a/packages/astro/vendor/vite/dist/client/env.mjs.map b/packages/astro/vendor/vite/dist/client/env.mjs.map
deleted file mode 100755
index 592b5231c..000000000
--- a/packages/astro/vendor/vite/dist/client/env.mjs.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"env.mjs","sources":["../../src/client/env.ts"],"sourcesContent":["declare const __MODE__: string\ndeclare const __DEFINES__: Record<string, any>\n\nconst context = (() => {\n if (typeof globalThis !== 'undefined') {\n return globalThis\n } else if (typeof self !== 'undefined') {\n return self\n } else if (typeof window !== 'undefined') {\n return window\n } else {\n return Function('return this')()\n }\n})()\n\n// assign defines\nconst defines = __DEFINES__\nObject.keys(defines).forEach((key) => {\n const segments = key.split('.')\n let target = context\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n if (i === segments.length - 1) {\n target[segment] = defines[key]\n } else {\n target = target[segment] || (target[segment] = {})\n }\n }\n})\n"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG,CAAC;IACf,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;QACrC,OAAO,UAAU,CAAA;KAClB;SAAM,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QACtC,OAAO,IAAI,CAAA;KACZ;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACxC,OAAO,MAAM,CAAA;KACd;SAAM;QACL,OAAO,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAA;KACjC;AACH,CAAC,GAAG,CAAA;AAEJ;AACA,MAAM,OAAO,GAAG,WAAW,CAAA;AAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG;IAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,MAAM,GAAG,OAAO,CAAA;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;SAC/B;aAAM;YACL,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;SACnD;KACF;AACH,CAAC,CAAC"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-34d2edc0.js b/packages/astro/vendor/vite/dist/node/chunks/dep-34d2edc0.js
deleted file mode 100755
index ffbcca583..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-34d2edc0.js
+++ /dev/null
@@ -1,29182 +0,0 @@
-'use strict';
-
-var build = require('./dep-35df7f96.js');
-var require$$1 = require('crypto');
-
-function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
-
-function _mergeNamespaces(n, m) {
- for (var i = 0; i < m.length; i++) {
- var e = m[i];
- for (var k in e) {
- if (k !== 'default' && !(k in n)) {
- n[k] = e[k];
- }
- }
- }
- return n;
-}
-
-var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);
-
-var selfsigned = {};
-
-/**
- * Node.js module for Forge.
- *
- * @author Dave Longley
- *
- * Copyright 2011-2016 Digital Bazaar, Inc.
- */
-
-var forge$F = {
- // default options
- options: {
- usePureJavaScript: false
- }
-};
-
-/**
- * Base-N/Base-X encoding/decoding functions.
- *
- * Original implementation from base-x:
- * https://github.com/cryptocoinjs/base-x
- *
- * Which is MIT licensed:
- *
- * The MIT License (MIT)
- *
- * Copyright base-x contributors (c) 2016
- *
- * 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.
- */
-
-var api = {};
-var baseN$1 = api;
-
-// baseN alphabet indexes
-var _reverseAlphabets = {};
-
-/**
- * BaseN-encodes a Uint8Array using the given alphabet.
- *
- * @param input the Uint8Array to encode.
- * @param maxline the maximum number of encoded characters per line to use,
- * defaults to none.
- *
- * @return the baseN-encoded output string.
- */
-api.encode = function(input, alphabet, maxline) {
- if(typeof alphabet !== 'string') {
- throw new TypeError('"alphabet" must be a string.');
- }
- if(maxline !== undefined && typeof maxline !== 'number') {
- throw new TypeError('"maxline" must be a number.');
- }
-
- var output = '';
-
- if(!(input instanceof Uint8Array)) {
- // assume forge byte buffer
- output = _encodeWithByteBuffer(input, alphabet);
- } else {
- var i = 0;
- var base = alphabet.length;
- var first = alphabet.charAt(0);
- var digits = [0];
- for(i = 0; i < input.length; ++i) {
- for(var j = 0, carry = input[i]; j < digits.length; ++j) {
- carry += digits[j] << 8;
- digits[j] = carry % base;
- carry = (carry / base) | 0;
- }
-
- while(carry > 0) {
- digits.push(carry % base);
- carry = (carry / base) | 0;
- }
- }
-
- // deal with leading zeros
- for(i = 0; input[i] === 0 && i < input.length - 1; ++i) {
- output += first;
- }
- // convert digits to a string
- for(i = digits.length - 1; i >= 0; --i) {
- output += alphabet[digits[i]];
- }
- }
-
- if(maxline) {
- var regex = new RegExp('.{1,' + maxline + '}', 'g');
- output = output.match(regex).join('\r\n');
- }
-
- return output;
-};
-
-/**
- * Decodes a baseN-encoded (using the given alphabet) string to a
- * Uint8Array.
- *
- * @param input the baseN-encoded input string.
- *
- * @return the Uint8Array.
- */
-api.decode = function(input, alphabet) {
- if(typeof input !== 'string') {
- throw new TypeError('"input" must be a string.');
- }
- if(typeof alphabet !== 'string') {
- throw new TypeError('"alphabet" must be a string.');
- }
-
- var table = _reverseAlphabets[alphabet];
- if(!table) {
- // compute reverse alphabet
- table = _reverseAlphabets[alphabet] = [];
- for(var i = 0; i < alphabet.length; ++i) {
- table[alphabet.charCodeAt(i)] = i;
- }
- }
-
- // remove whitespace characters
- input = input.replace(/\s/g, '');
-
- var base = alphabet.length;
- var first = alphabet.charAt(0);
- var bytes = [0];
- for(var i = 0; i < input.length; i++) {
- var value = table[input.charCodeAt(i)];
- if(value === undefined) {
- return;
- }
-
- for(var j = 0, carry = value; j < bytes.length; ++j) {
- carry += bytes[j] * base;
- bytes[j] = carry & 0xff;
- carry >>= 8;
- }
-
- while(carry > 0) {
- bytes.push(carry & 0xff);
- carry >>= 8;
- }
- }
-
- // deal with leading zeros
- for(var k = 0; input[k] === first && k < input.length - 1; ++k) {
- bytes.push(0);
- }
-
- if(typeof Buffer !== 'undefined') {
- return Buffer.from(bytes.reverse());
- }
-
- return new Uint8Array(bytes.reverse());
-};
-
-function _encodeWithByteBuffer(input, alphabet) {
- var i = 0;
- var base = alphabet.length;
- var first = alphabet.charAt(0);
- var digits = [0];
- for(i = 0; i < input.length(); ++i) {
- for(var j = 0, carry = input.at(i); j < digits.length; ++j) {
- carry += digits[j] << 8;
- digits[j] = carry % base;
- carry = (carry / base) | 0;
- }
-
- while(carry > 0) {
- digits.push(carry % base);
- carry = (carry / base) | 0;
- }
- }
-
- var output = '';
-
- // deal with leading zeros
- for(i = 0; input.at(i) === 0 && i < input.length() - 1; ++i) {
- output += first;
- }
- // convert digits to a string
- for(i = digits.length - 1; i >= 0; --i) {
- output += alphabet[digits[i]];
- }
-
- return output;
-}
-
-/**
- * Utility functions for web applications.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2018 Digital Bazaar, Inc.
- */
-
-var forge$E = forge$F;
-var baseN = baseN$1;
-
-/* Utilities API */
-var util$1 = forge$E.util = forge$E.util || {};
-
-// define setImmediate and nextTick
-(function() {
- // use native nextTick (unless we're in webpack)
- // webpack (or better node-libs-browser polyfill) sets process.browser.
- // this way we can detect webpack properly
- if(typeof process !== 'undefined' && process.nextTick && !process.browser) {
- util$1.nextTick = process.nextTick;
- if(typeof setImmediate === 'function') {
- util$1.setImmediate = setImmediate;
- } else {
- // polyfill setImmediate with nextTick, older versions of node
- // (those w/o setImmediate) won't totally starve IO
- util$1.setImmediate = util$1.nextTick;
- }
- return;
- }
-
- // polyfill nextTick with native setImmediate
- if(typeof setImmediate === 'function') {
- util$1.setImmediate = function() { return setImmediate.apply(undefined, arguments); };
- util$1.nextTick = function(callback) {
- return setImmediate(callback);
- };
- return;
- }
-
- /* Note: A polyfill upgrade pattern is used here to allow combining
- polyfills. For example, MutationObserver is fast, but blocks UI updates,
- so it needs to allow UI updates periodically, so it falls back on
- postMessage or setTimeout. */
-
- // polyfill with setTimeout
- util$1.setImmediate = function(callback) {
- setTimeout(callback, 0);
- };
-
- // upgrade polyfill to use postMessage
- if(typeof window !== 'undefined' &&
- typeof window.postMessage === 'function') {
- var msg = 'forge.setImmediate';
- var callbacks = [];
- util$1.setImmediate = function(callback) {
- callbacks.push(callback);
- // only send message when one hasn't been sent in
- // the current turn of the event loop
- if(callbacks.length === 1) {
- window.postMessage(msg, '*');
- }
- };
- function handler(event) {
- if(event.source === window && event.data === msg) {
- event.stopPropagation();
- var copy = callbacks.slice();
- callbacks.length = 0;
- copy.forEach(function(callback) {
- callback();
- });
- }
- }
- window.addEventListener('message', handler, true);
- }
-
- // upgrade polyfill to use MutationObserver
- if(typeof MutationObserver !== 'undefined') {
- // polyfill with MutationObserver
- var now = Date.now();
- var attr = true;
- var div = document.createElement('div');
- var callbacks = [];
- new MutationObserver(function() {
- var copy = callbacks.slice();
- callbacks.length = 0;
- copy.forEach(function(callback) {
- callback();
- });
- }).observe(div, {attributes: true});
- var oldSetImmediate = util$1.setImmediate;
- util$1.setImmediate = function(callback) {
- if(Date.now() - now > 15) {
- now = Date.now();
- oldSetImmediate(callback);
- } else {
- callbacks.push(callback);
- // only trigger observer when it hasn't been triggered in
- // the current turn of the event loop
- if(callbacks.length === 1) {
- div.setAttribute('a', attr = !attr);
- }
- }
- };
- }
-
- util$1.nextTick = util$1.setImmediate;
-})();
-
-// check if running under Node.js
-util$1.isNodejs =
- typeof process !== 'undefined' && process.versions && process.versions.node;
-
-
-// 'self' will also work in Web Workers (instance of WorkerGlobalScope) while
-// it will point to `window` in the main thread.
-// To remain compatible with older browsers, we fall back to 'window' if 'self'
-// is not available.
-util$1.globalScope = (function() {
- if(util$1.isNodejs) {
- return build.commonjsGlobal;
- }
-
- return typeof self === 'undefined' ? window : self;
-})();
-
-// define isArray
-util$1.isArray = Array.isArray || function(x) {
- return Object.prototype.toString.call(x) === '[object Array]';
-};
-
-// define isArrayBuffer
-util$1.isArrayBuffer = function(x) {
- return typeof ArrayBuffer !== 'undefined' && x instanceof ArrayBuffer;
-};
-
-// define isArrayBufferView
-util$1.isArrayBufferView = function(x) {
- return x && util$1.isArrayBuffer(x.buffer) && x.byteLength !== undefined;
-};
-
-/**
- * Ensure a bits param is 8, 16, 24, or 32. Used to validate input for
- * algorithms where bit manipulation, JavaScript limitations, and/or algorithm
- * design only allow for byte operations of a limited size.
- *
- * @param n number of bits.
- *
- * Throw Error if n invalid.
- */
-function _checkBitsParam(n) {
- if(!(n === 8 || n === 16 || n === 24 || n === 32)) {
- throw new Error('Only 8, 16, 24, or 32 bits supported: ' + n);
- }
-}
-
-// TODO: set ByteBuffer to best available backing
-util$1.ByteBuffer = ByteStringBuffer;
-
-/** Buffer w/BinaryString backing */
-
-/**
- * Constructor for a binary string backed byte buffer.
- *
- * @param [b] the bytes to wrap (either encoded as string, one byte per
- * character, or as an ArrayBuffer or Typed Array).
- */
-function ByteStringBuffer(b) {
- // TODO: update to match DataBuffer API
-
- // the data in this buffer
- this.data = '';
- // the pointer for reading from this buffer
- this.read = 0;
-
- if(typeof b === 'string') {
- this.data = b;
- } else if(util$1.isArrayBuffer(b) || util$1.isArrayBufferView(b)) {
- if(typeof Buffer !== 'undefined' && b instanceof Buffer) {
- this.data = b.toString('binary');
- } else {
- // convert native buffer to forge buffer
- // FIXME: support native buffers internally instead
- var arr = new Uint8Array(b);
- try {
- this.data = String.fromCharCode.apply(null, arr);
- } catch(e) {
- for(var i = 0; i < arr.length; ++i) {
- this.putByte(arr[i]);
- }
- }
- }
- } else if(b instanceof ByteStringBuffer ||
- (typeof b === 'object' && typeof b.data === 'string' &&
- typeof b.read === 'number')) {
- // copy existing buffer
- this.data = b.data;
- this.read = b.read;
- }
-
- // used for v8 optimization
- this._constructedStringLength = 0;
-}
-util$1.ByteStringBuffer = ByteStringBuffer;
-
-/* Note: This is an optimization for V8-based browsers. When V8 concatenates
- a string, the strings are only joined logically using a "cons string" or
- "constructed/concatenated string". These containers keep references to one
- another and can result in very large memory usage. For example, if a 2MB
- string is constructed by concatenating 4 bytes together at a time, the
- memory usage will be ~44MB; so ~22x increase. The strings are only joined
- together when an operation requiring their joining takes place, such as
- substr(). This function is called when adding data to this buffer to ensure
- these types of strings are periodically joined to reduce the memory
- footprint. */
-var _MAX_CONSTRUCTED_STRING_LENGTH = 4096;
-util$1.ByteStringBuffer.prototype._optimizeConstructedString = function(x) {
- this._constructedStringLength += x;
- if(this._constructedStringLength > _MAX_CONSTRUCTED_STRING_LENGTH) {
- // this substr() should cause the constructed string to join
- this.data.substr(0, 1);
- this._constructedStringLength = 0;
- }
-};
-
-/**
- * Gets the number of bytes in this buffer.
- *
- * @return the number of bytes in this buffer.
- */
-util$1.ByteStringBuffer.prototype.length = function() {
- return this.data.length - this.read;
-};
-
-/**
- * Gets whether or not this buffer is empty.
- *
- * @return true if this buffer is empty, false if not.
- */
-util$1.ByteStringBuffer.prototype.isEmpty = function() {
- return this.length() <= 0;
-};
-
-/**
- * Puts a byte in this buffer.
- *
- * @param b the byte to put.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putByte = function(b) {
- return this.putBytes(String.fromCharCode(b));
-};
-
-/**
- * Puts a byte in this buffer N times.
- *
- * @param b the byte to put.
- * @param n the number of bytes of value b to put.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.fillWithByte = function(b, n) {
- b = String.fromCharCode(b);
- var d = this.data;
- while(n > 0) {
- if(n & 1) {
- d += b;
- }
- n >>>= 1;
- if(n > 0) {
- b += b;
- }
- }
- this.data = d;
- this._optimizeConstructedString(n);
- return this;
-};
-
-/**
- * Puts bytes in this buffer.
- *
- * @param bytes the bytes (as a binary encoded string) to put.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putBytes = function(bytes) {
- this.data += bytes;
- this._optimizeConstructedString(bytes.length);
- return this;
-};
-
-/**
- * Puts a UTF-16 encoded string into this buffer.
- *
- * @param str the string to put.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putString = function(str) {
- return this.putBytes(util$1.encodeUtf8(str));
-};
-
-/**
- * Puts a 16-bit integer in this buffer in big-endian order.
- *
- * @param i the 16-bit integer.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putInt16 = function(i) {
- return this.putBytes(
- String.fromCharCode(i >> 8 & 0xFF) +
- String.fromCharCode(i & 0xFF));
-};
-
-/**
- * Puts a 24-bit integer in this buffer in big-endian order.
- *
- * @param i the 24-bit integer.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putInt24 = function(i) {
- return this.putBytes(
- String.fromCharCode(i >> 16 & 0xFF) +
- String.fromCharCode(i >> 8 & 0xFF) +
- String.fromCharCode(i & 0xFF));
-};
-
-/**
- * Puts a 32-bit integer in this buffer in big-endian order.
- *
- * @param i the 32-bit integer.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putInt32 = function(i) {
- return this.putBytes(
- String.fromCharCode(i >> 24 & 0xFF) +
- String.fromCharCode(i >> 16 & 0xFF) +
- String.fromCharCode(i >> 8 & 0xFF) +
- String.fromCharCode(i & 0xFF));
-};
-
-/**
- * Puts a 16-bit integer in this buffer in little-endian order.
- *
- * @param i the 16-bit integer.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putInt16Le = function(i) {
- return this.putBytes(
- String.fromCharCode(i & 0xFF) +
- String.fromCharCode(i >> 8 & 0xFF));
-};
-
-/**
- * Puts a 24-bit integer in this buffer in little-endian order.
- *
- * @param i the 24-bit integer.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putInt24Le = function(i) {
- return this.putBytes(
- String.fromCharCode(i & 0xFF) +
- String.fromCharCode(i >> 8 & 0xFF) +
- String.fromCharCode(i >> 16 & 0xFF));
-};
-
-/**
- * Puts a 32-bit integer in this buffer in little-endian order.
- *
- * @param i the 32-bit integer.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putInt32Le = function(i) {
- return this.putBytes(
- String.fromCharCode(i & 0xFF) +
- String.fromCharCode(i >> 8 & 0xFF) +
- String.fromCharCode(i >> 16 & 0xFF) +
- String.fromCharCode(i >> 24 & 0xFF));
-};
-
-/**
- * Puts an n-bit integer in this buffer in big-endian order.
- *
- * @param i the n-bit integer.
- * @param n the number of bits in the integer (8, 16, 24, or 32).
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putInt = function(i, n) {
- _checkBitsParam(n);
- var bytes = '';
- do {
- n -= 8;
- bytes += String.fromCharCode((i >> n) & 0xFF);
- } while(n > 0);
- return this.putBytes(bytes);
-};
-
-/**
- * Puts a signed n-bit integer in this buffer in big-endian order. Two's
- * complement representation is used.
- *
- * @param i the n-bit integer.
- * @param n the number of bits in the integer (8, 16, 24, or 32).
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putSignedInt = function(i, n) {
- // putInt checks n
- if(i < 0) {
- i += 2 << (n - 1);
- }
- return this.putInt(i, n);
-};
-
-/**
- * Puts the given buffer into this buffer.
- *
- * @param buffer the buffer to put into this one.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.putBuffer = function(buffer) {
- return this.putBytes(buffer.getBytes());
-};
-
-/**
- * Gets a byte from this buffer and advances the read pointer by 1.
- *
- * @return the byte.
- */
-util$1.ByteStringBuffer.prototype.getByte = function() {
- return this.data.charCodeAt(this.read++);
-};
-
-/**
- * Gets a uint16 from this buffer in big-endian order and advances the read
- * pointer by 2.
- *
- * @return the uint16.
- */
-util$1.ByteStringBuffer.prototype.getInt16 = function() {
- var rval = (
- this.data.charCodeAt(this.read) << 8 ^
- this.data.charCodeAt(this.read + 1));
- this.read += 2;
- return rval;
-};
-
-/**
- * Gets a uint24 from this buffer in big-endian order and advances the read
- * pointer by 3.
- *
- * @return the uint24.
- */
-util$1.ByteStringBuffer.prototype.getInt24 = function() {
- var rval = (
- this.data.charCodeAt(this.read) << 16 ^
- this.data.charCodeAt(this.read + 1) << 8 ^
- this.data.charCodeAt(this.read + 2));
- this.read += 3;
- return rval;
-};
-
-/**
- * Gets a uint32 from this buffer in big-endian order and advances the read
- * pointer by 4.
- *
- * @return the word.
- */
-util$1.ByteStringBuffer.prototype.getInt32 = function() {
- var rval = (
- this.data.charCodeAt(this.read) << 24 ^
- this.data.charCodeAt(this.read + 1) << 16 ^
- this.data.charCodeAt(this.read + 2) << 8 ^
- this.data.charCodeAt(this.read + 3));
- this.read += 4;
- return rval;
-};
-
-/**
- * Gets a uint16 from this buffer in little-endian order and advances the read
- * pointer by 2.
- *
- * @return the uint16.
- */
-util$1.ByteStringBuffer.prototype.getInt16Le = function() {
- var rval = (
- this.data.charCodeAt(this.read) ^
- this.data.charCodeAt(this.read + 1) << 8);
- this.read += 2;
- return rval;
-};
-
-/**
- * Gets a uint24 from this buffer in little-endian order and advances the read
- * pointer by 3.
- *
- * @return the uint24.
- */
-util$1.ByteStringBuffer.prototype.getInt24Le = function() {
- var rval = (
- this.data.charCodeAt(this.read) ^
- this.data.charCodeAt(this.read + 1) << 8 ^
- this.data.charCodeAt(this.read + 2) << 16);
- this.read += 3;
- return rval;
-};
-
-/**
- * Gets a uint32 from this buffer in little-endian order and advances the read
- * pointer by 4.
- *
- * @return the word.
- */
-util$1.ByteStringBuffer.prototype.getInt32Le = function() {
- var rval = (
- this.data.charCodeAt(this.read) ^
- this.data.charCodeAt(this.read + 1) << 8 ^
- this.data.charCodeAt(this.read + 2) << 16 ^
- this.data.charCodeAt(this.read + 3) << 24);
- this.read += 4;
- return rval;
-};
-
-/**
- * Gets an n-bit integer from this buffer in big-endian order and advances the
- * read pointer by ceil(n/8).
- *
- * @param n the number of bits in the integer (8, 16, 24, or 32).
- *
- * @return the integer.
- */
-util$1.ByteStringBuffer.prototype.getInt = function(n) {
- _checkBitsParam(n);
- var rval = 0;
- do {
- // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits.
- rval = (rval << 8) + this.data.charCodeAt(this.read++);
- n -= 8;
- } while(n > 0);
- return rval;
-};
-
-/**
- * Gets a signed n-bit integer from this buffer in big-endian order, using
- * two's complement, and advances the read pointer by n/8.
- *
- * @param n the number of bits in the integer (8, 16, 24, or 32).
- *
- * @return the integer.
- */
-util$1.ByteStringBuffer.prototype.getSignedInt = function(n) {
- // getInt checks n
- var x = this.getInt(n);
- var max = 2 << (n - 2);
- if(x >= max) {
- x -= max << 1;
- }
- return x;
-};
-
-/**
- * Reads bytes out as a binary encoded string and clears them from the
- * buffer. Note that the resulting string is binary encoded (in node.js this
- * encoding is referred to as `binary`, it is *not* `utf8`).
- *
- * @param count the number of bytes to read, undefined or null for all.
- *
- * @return a binary encoded string of bytes.
- */
-util$1.ByteStringBuffer.prototype.getBytes = function(count) {
- var rval;
- if(count) {
- // read count bytes
- count = Math.min(this.length(), count);
- rval = this.data.slice(this.read, this.read + count);
- this.read += count;
- } else if(count === 0) {
- rval = '';
- } else {
- // read all bytes, optimize to only copy when needed
- rval = (this.read === 0) ? this.data : this.data.slice(this.read);
- this.clear();
- }
- return rval;
-};
-
-/**
- * Gets a binary encoded string of the bytes from this buffer without
- * modifying the read pointer.
- *
- * @param count the number of bytes to get, omit to get all.
- *
- * @return a string full of binary encoded characters.
- */
-util$1.ByteStringBuffer.prototype.bytes = function(count) {
- return (typeof(count) === 'undefined' ?
- this.data.slice(this.read) :
- this.data.slice(this.read, this.read + count));
-};
-
-/**
- * Gets a byte at the given index without modifying the read pointer.
- *
- * @param i the byte index.
- *
- * @return the byte.
- */
-util$1.ByteStringBuffer.prototype.at = function(i) {
- return this.data.charCodeAt(this.read + i);
-};
-
-/**
- * Puts a byte at the given index without modifying the read pointer.
- *
- * @param i the byte index.
- * @param b the byte to put.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.setAt = function(i, b) {
- this.data = this.data.substr(0, this.read + i) +
- String.fromCharCode(b) +
- this.data.substr(this.read + i + 1);
- return this;
-};
-
-/**
- * Gets the last byte without modifying the read pointer.
- *
- * @return the last byte.
- */
-util$1.ByteStringBuffer.prototype.last = function() {
- return this.data.charCodeAt(this.data.length - 1);
-};
-
-/**
- * Creates a copy of this buffer.
- *
- * @return the copy.
- */
-util$1.ByteStringBuffer.prototype.copy = function() {
- var c = util$1.createBuffer(this.data);
- c.read = this.read;
- return c;
-};
-
-/**
- * Compacts this buffer.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.compact = function() {
- if(this.read > 0) {
- this.data = this.data.slice(this.read);
- this.read = 0;
- }
- return this;
-};
-
-/**
- * Clears this buffer.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.clear = function() {
- this.data = '';
- this.read = 0;
- return this;
-};
-
-/**
- * Shortens this buffer by triming bytes off of the end of this buffer.
- *
- * @param count the number of bytes to trim off.
- *
- * @return this buffer.
- */
-util$1.ByteStringBuffer.prototype.truncate = function(count) {
- var len = Math.max(0, this.length() - count);
- this.data = this.data.substr(this.read, len);
- this.read = 0;
- return this;
-};
-
-/**
- * Converts this buffer to a hexadecimal string.
- *
- * @return a hexadecimal string.
- */
-util$1.ByteStringBuffer.prototype.toHex = function() {
- var rval = '';
- for(var i = this.read; i < this.data.length; ++i) {
- var b = this.data.charCodeAt(i);
- if(b < 16) {
- rval += '0';
- }
- rval += b.toString(16);
- }
- return rval;
-};
-
-/**
- * Converts this buffer to a UTF-16 string (standard JavaScript string).
- *
- * @return a UTF-16 string.
- */
-util$1.ByteStringBuffer.prototype.toString = function() {
- return util$1.decodeUtf8(this.bytes());
-};
-
-/** End Buffer w/BinaryString backing */
-
-/** Buffer w/UInt8Array backing */
-
-/**
- * FIXME: Experimental. Do not use yet.
- *
- * Constructor for an ArrayBuffer-backed byte buffer.
- *
- * The buffer may be constructed from a string, an ArrayBuffer, DataView, or a
- * TypedArray.
- *
- * If a string is given, its encoding should be provided as an option,
- * otherwise it will default to 'binary'. A 'binary' string is encoded such
- * that each character is one byte in length and size.
- *
- * If an ArrayBuffer, DataView, or TypedArray is given, it will be used
- * *directly* without any copying. Note that, if a write to the buffer requires
- * more space, the buffer will allocate a new backing ArrayBuffer to
- * accommodate. The starting read and write offsets for the buffer may be
- * given as options.
- *
- * @param [b] the initial bytes for this buffer.
- * @param options the options to use:
- * [readOffset] the starting read offset to use (default: 0).
- * [writeOffset] the starting write offset to use (default: the
- * length of the first parameter).
- * [growSize] the minimum amount, in bytes, to grow the buffer by to
- * accommodate writes (default: 1024).
- * [encoding] the encoding ('binary', 'utf8', 'utf16', 'hex') for the
- * first parameter, if it is a string (default: 'binary').
- */
-function DataBuffer(b, options) {
- // default options
- options = options || {};
-
- // pointers for read from/write to buffer
- this.read = options.readOffset || 0;
- this.growSize = options.growSize || 1024;
-
- var isArrayBuffer = util$1.isArrayBuffer(b);
- var isArrayBufferView = util$1.isArrayBufferView(b);
- if(isArrayBuffer || isArrayBufferView) {
- // use ArrayBuffer directly
- if(isArrayBuffer) {
- this.data = new DataView(b);
- } else {
- // TODO: adjust read/write offset based on the type of view
- // or specify that this must be done in the options ... that the
- // offsets are byte-based
- this.data = new DataView(b.buffer, b.byteOffset, b.byteLength);
- }
- this.write = ('writeOffset' in options ?
- options.writeOffset : this.data.byteLength);
- return;
- }
-
- // initialize to empty array buffer and add any given bytes using putBytes
- this.data = new DataView(new ArrayBuffer(0));
- this.write = 0;
-
- if(b !== null && b !== undefined) {
- this.putBytes(b);
- }
-
- if('writeOffset' in options) {
- this.write = options.writeOffset;
- }
-}
-util$1.DataBuffer = DataBuffer;
-
-/**
- * Gets the number of bytes in this buffer.
- *
- * @return the number of bytes in this buffer.
- */
-util$1.DataBuffer.prototype.length = function() {
- return this.write - this.read;
-};
-
-/**
- * Gets whether or not this buffer is empty.
- *
- * @return true if this buffer is empty, false if not.
- */
-util$1.DataBuffer.prototype.isEmpty = function() {
- return this.length() <= 0;
-};
-
-/**
- * Ensures this buffer has enough empty space to accommodate the given number
- * of bytes. An optional parameter may be given that indicates a minimum
- * amount to grow the buffer if necessary. If the parameter is not given,
- * the buffer will be grown by some previously-specified default amount
- * or heuristic.
- *
- * @param amount the number of bytes to accommodate.
- * @param [growSize] the minimum amount, in bytes, to grow the buffer by if
- * necessary.
- */
-util$1.DataBuffer.prototype.accommodate = function(amount, growSize) {
- if(this.length() >= amount) {
- return this;
- }
- growSize = Math.max(growSize || this.growSize, amount);
-
- // grow buffer
- var src = new Uint8Array(
- this.data.buffer, this.data.byteOffset, this.data.byteLength);
- var dst = new Uint8Array(this.length() + growSize);
- dst.set(src);
- this.data = new DataView(dst.buffer);
-
- return this;
-};
-
-/**
- * Puts a byte in this buffer.
- *
- * @param b the byte to put.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putByte = function(b) {
- this.accommodate(1);
- this.data.setUint8(this.write++, b);
- return this;
-};
-
-/**
- * Puts a byte in this buffer N times.
- *
- * @param b the byte to put.
- * @param n the number of bytes of value b to put.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.fillWithByte = function(b, n) {
- this.accommodate(n);
- for(var i = 0; i < n; ++i) {
- this.data.setUint8(b);
- }
- return this;
-};
-
-/**
- * Puts bytes in this buffer. The bytes may be given as a string, an
- * ArrayBuffer, a DataView, or a TypedArray.
- *
- * @param bytes the bytes to put.
- * @param [encoding] the encoding for the first parameter ('binary', 'utf8',
- * 'utf16', 'hex'), if it is a string (default: 'binary').
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putBytes = function(bytes, encoding) {
- if(util$1.isArrayBufferView(bytes)) {
- var src = new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength);
- var len = src.byteLength - src.byteOffset;
- this.accommodate(len);
- var dst = new Uint8Array(this.data.buffer, this.write);
- dst.set(src);
- this.write += len;
- return this;
- }
-
- if(util$1.isArrayBuffer(bytes)) {
- var src = new Uint8Array(bytes);
- this.accommodate(src.byteLength);
- var dst = new Uint8Array(this.data.buffer);
- dst.set(src, this.write);
- this.write += src.byteLength;
- return this;
- }
-
- // bytes is a util.DataBuffer or equivalent
- if(bytes instanceof util$1.DataBuffer ||
- (typeof bytes === 'object' &&
- typeof bytes.read === 'number' && typeof bytes.write === 'number' &&
- util$1.isArrayBufferView(bytes.data))) {
- var src = new Uint8Array(bytes.data.byteLength, bytes.read, bytes.length());
- this.accommodate(src.byteLength);
- var dst = new Uint8Array(bytes.data.byteLength, this.write);
- dst.set(src);
- this.write += src.byteLength;
- return this;
- }
-
- if(bytes instanceof util$1.ByteStringBuffer) {
- // copy binary string and process as the same as a string parameter below
- bytes = bytes.data;
- encoding = 'binary';
- }
-
- // string conversion
- encoding = encoding || 'binary';
- if(typeof bytes === 'string') {
- var view;
-
- // decode from string
- if(encoding === 'hex') {
- this.accommodate(Math.ceil(bytes.length / 2));
- view = new Uint8Array(this.data.buffer, this.write);
- this.write += util$1.binary.hex.decode(bytes, view, this.write);
- return this;
- }
- if(encoding === 'base64') {
- this.accommodate(Math.ceil(bytes.length / 4) * 3);
- view = new Uint8Array(this.data.buffer, this.write);
- this.write += util$1.binary.base64.decode(bytes, view, this.write);
- return this;
- }
-
- // encode text as UTF-8 bytes
- if(encoding === 'utf8') {
- // encode as UTF-8 then decode string as raw binary
- bytes = util$1.encodeUtf8(bytes);
- encoding = 'binary';
- }
-
- // decode string as raw binary
- if(encoding === 'binary' || encoding === 'raw') {
- // one byte per character
- this.accommodate(bytes.length);
- view = new Uint8Array(this.data.buffer, this.write);
- this.write += util$1.binary.raw.decode(view);
- return this;
- }
-
- // encode text as UTF-16 bytes
- if(encoding === 'utf16') {
- // two bytes per character
- this.accommodate(bytes.length * 2);
- view = new Uint16Array(this.data.buffer, this.write);
- this.write += util$1.text.utf16.encode(view);
- return this;
- }
-
- throw new Error('Invalid encoding: ' + encoding);
- }
-
- throw Error('Invalid parameter: ' + bytes);
-};
-
-/**
- * Puts the given buffer into this buffer.
- *
- * @param buffer the buffer to put into this one.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putBuffer = function(buffer) {
- this.putBytes(buffer);
- buffer.clear();
- return this;
-};
-
-/**
- * Puts a string into this buffer.
- *
- * @param str the string to put.
- * @param [encoding] the encoding for the string (default: 'utf16').
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putString = function(str) {
- return this.putBytes(str, 'utf16');
-};
-
-/**
- * Puts a 16-bit integer in this buffer in big-endian order.
- *
- * @param i the 16-bit integer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putInt16 = function(i) {
- this.accommodate(2);
- this.data.setInt16(this.write, i);
- this.write += 2;
- return this;
-};
-
-/**
- * Puts a 24-bit integer in this buffer in big-endian order.
- *
- * @param i the 24-bit integer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putInt24 = function(i) {
- this.accommodate(3);
- this.data.setInt16(this.write, i >> 8 & 0xFFFF);
- this.data.setInt8(this.write, i >> 16 & 0xFF);
- this.write += 3;
- return this;
-};
-
-/**
- * Puts a 32-bit integer in this buffer in big-endian order.
- *
- * @param i the 32-bit integer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putInt32 = function(i) {
- this.accommodate(4);
- this.data.setInt32(this.write, i);
- this.write += 4;
- return this;
-};
-
-/**
- * Puts a 16-bit integer in this buffer in little-endian order.
- *
- * @param i the 16-bit integer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putInt16Le = function(i) {
- this.accommodate(2);
- this.data.setInt16(this.write, i, true);
- this.write += 2;
- return this;
-};
-
-/**
- * Puts a 24-bit integer in this buffer in little-endian order.
- *
- * @param i the 24-bit integer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putInt24Le = function(i) {
- this.accommodate(3);
- this.data.setInt8(this.write, i >> 16 & 0xFF);
- this.data.setInt16(this.write, i >> 8 & 0xFFFF, true);
- this.write += 3;
- return this;
-};
-
-/**
- * Puts a 32-bit integer in this buffer in little-endian order.
- *
- * @param i the 32-bit integer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putInt32Le = function(i) {
- this.accommodate(4);
- this.data.setInt32(this.write, i, true);
- this.write += 4;
- return this;
-};
-
-/**
- * Puts an n-bit integer in this buffer in big-endian order.
- *
- * @param i the n-bit integer.
- * @param n the number of bits in the integer (8, 16, 24, or 32).
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putInt = function(i, n) {
- _checkBitsParam(n);
- this.accommodate(n / 8);
- do {
- n -= 8;
- this.data.setInt8(this.write++, (i >> n) & 0xFF);
- } while(n > 0);
- return this;
-};
-
-/**
- * Puts a signed n-bit integer in this buffer in big-endian order. Two's
- * complement representation is used.
- *
- * @param i the n-bit integer.
- * @param n the number of bits in the integer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.putSignedInt = function(i, n) {
- _checkBitsParam(n);
- this.accommodate(n / 8);
- if(i < 0) {
- i += 2 << (n - 1);
- }
- return this.putInt(i, n);
-};
-
-/**
- * Gets a byte from this buffer and advances the read pointer by 1.
- *
- * @return the byte.
- */
-util$1.DataBuffer.prototype.getByte = function() {
- return this.data.getInt8(this.read++);
-};
-
-/**
- * Gets a uint16 from this buffer in big-endian order and advances the read
- * pointer by 2.
- *
- * @return the uint16.
- */
-util$1.DataBuffer.prototype.getInt16 = function() {
- var rval = this.data.getInt16(this.read);
- this.read += 2;
- return rval;
-};
-
-/**
- * Gets a uint24 from this buffer in big-endian order and advances the read
- * pointer by 3.
- *
- * @return the uint24.
- */
-util$1.DataBuffer.prototype.getInt24 = function() {
- var rval = (
- this.data.getInt16(this.read) << 8 ^
- this.data.getInt8(this.read + 2));
- this.read += 3;
- return rval;
-};
-
-/**
- * Gets a uint32 from this buffer in big-endian order and advances the read
- * pointer by 4.
- *
- * @return the word.
- */
-util$1.DataBuffer.prototype.getInt32 = function() {
- var rval = this.data.getInt32(this.read);
- this.read += 4;
- return rval;
-};
-
-/**
- * Gets a uint16 from this buffer in little-endian order and advances the read
- * pointer by 2.
- *
- * @return the uint16.
- */
-util$1.DataBuffer.prototype.getInt16Le = function() {
- var rval = this.data.getInt16(this.read, true);
- this.read += 2;
- return rval;
-};
-
-/**
- * Gets a uint24 from this buffer in little-endian order and advances the read
- * pointer by 3.
- *
- * @return the uint24.
- */
-util$1.DataBuffer.prototype.getInt24Le = function() {
- var rval = (
- this.data.getInt8(this.read) ^
- this.data.getInt16(this.read + 1, true) << 8);
- this.read += 3;
- return rval;
-};
-
-/**
- * Gets a uint32 from this buffer in little-endian order and advances the read
- * pointer by 4.
- *
- * @return the word.
- */
-util$1.DataBuffer.prototype.getInt32Le = function() {
- var rval = this.data.getInt32(this.read, true);
- this.read += 4;
- return rval;
-};
-
-/**
- * Gets an n-bit integer from this buffer in big-endian order and advances the
- * read pointer by n/8.
- *
- * @param n the number of bits in the integer (8, 16, 24, or 32).
- *
- * @return the integer.
- */
-util$1.DataBuffer.prototype.getInt = function(n) {
- _checkBitsParam(n);
- var rval = 0;
- do {
- // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits.
- rval = (rval << 8) + this.data.getInt8(this.read++);
- n -= 8;
- } while(n > 0);
- return rval;
-};
-
-/**
- * Gets a signed n-bit integer from this buffer in big-endian order, using
- * two's complement, and advances the read pointer by n/8.
- *
- * @param n the number of bits in the integer (8, 16, 24, or 32).
- *
- * @return the integer.
- */
-util$1.DataBuffer.prototype.getSignedInt = function(n) {
- // getInt checks n
- var x = this.getInt(n);
- var max = 2 << (n - 2);
- if(x >= max) {
- x -= max << 1;
- }
- return x;
-};
-
-/**
- * Reads bytes out as a binary encoded string and clears them from the
- * buffer.
- *
- * @param count the number of bytes to read, undefined or null for all.
- *
- * @return a binary encoded string of bytes.
- */
-util$1.DataBuffer.prototype.getBytes = function(count) {
- // TODO: deprecate this method, it is poorly named and
- // this.toString('binary') replaces it
- // add a toTypedArray()/toArrayBuffer() function
- var rval;
- if(count) {
- // read count bytes
- count = Math.min(this.length(), count);
- rval = this.data.slice(this.read, this.read + count);
- this.read += count;
- } else if(count === 0) {
- rval = '';
- } else {
- // read all bytes, optimize to only copy when needed
- rval = (this.read === 0) ? this.data : this.data.slice(this.read);
- this.clear();
- }
- return rval;
-};
-
-/**
- * Gets a binary encoded string of the bytes from this buffer without
- * modifying the read pointer.
- *
- * @param count the number of bytes to get, omit to get all.
- *
- * @return a string full of binary encoded characters.
- */
-util$1.DataBuffer.prototype.bytes = function(count) {
- // TODO: deprecate this method, it is poorly named, add "getString()"
- return (typeof(count) === 'undefined' ?
- this.data.slice(this.read) :
- this.data.slice(this.read, this.read + count));
-};
-
-/**
- * Gets a byte at the given index without modifying the read pointer.
- *
- * @param i the byte index.
- *
- * @return the byte.
- */
-util$1.DataBuffer.prototype.at = function(i) {
- return this.data.getUint8(this.read + i);
-};
-
-/**
- * Puts a byte at the given index without modifying the read pointer.
- *
- * @param i the byte index.
- * @param b the byte to put.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.setAt = function(i, b) {
- this.data.setUint8(i, b);
- return this;
-};
-
-/**
- * Gets the last byte without modifying the read pointer.
- *
- * @return the last byte.
- */
-util$1.DataBuffer.prototype.last = function() {
- return this.data.getUint8(this.write - 1);
-};
-
-/**
- * Creates a copy of this buffer.
- *
- * @return the copy.
- */
-util$1.DataBuffer.prototype.copy = function() {
- return new util$1.DataBuffer(this);
-};
-
-/**
- * Compacts this buffer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.compact = function() {
- if(this.read > 0) {
- var src = new Uint8Array(this.data.buffer, this.read);
- var dst = new Uint8Array(src.byteLength);
- dst.set(src);
- this.data = new DataView(dst);
- this.write -= this.read;
- this.read = 0;
- }
- return this;
-};
-
-/**
- * Clears this buffer.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.clear = function() {
- this.data = new DataView(new ArrayBuffer(0));
- this.read = this.write = 0;
- return this;
-};
-
-/**
- * Shortens this buffer by triming bytes off of the end of this buffer.
- *
- * @param count the number of bytes to trim off.
- *
- * @return this buffer.
- */
-util$1.DataBuffer.prototype.truncate = function(count) {
- this.write = Math.max(0, this.length() - count);
- this.read = Math.min(this.read, this.write);
- return this;
-};
-
-/**
- * Converts this buffer to a hexadecimal string.
- *
- * @return a hexadecimal string.
- */
-util$1.DataBuffer.prototype.toHex = function() {
- var rval = '';
- for(var i = this.read; i < this.data.byteLength; ++i) {
- var b = this.data.getUint8(i);
- if(b < 16) {
- rval += '0';
- }
- rval += b.toString(16);
- }
- return rval;
-};
-
-/**
- * Converts this buffer to a string, using the given encoding. If no
- * encoding is given, 'utf8' (UTF-8) is used.
- *
- * @param [encoding] the encoding to use: 'binary', 'utf8', 'utf16', 'hex',
- * 'base64' (default: 'utf8').
- *
- * @return a string representation of the bytes in this buffer.
- */
-util$1.DataBuffer.prototype.toString = function(encoding) {
- var view = new Uint8Array(this.data, this.read, this.length());
- encoding = encoding || 'utf8';
-
- // encode to string
- if(encoding === 'binary' || encoding === 'raw') {
- return util$1.binary.raw.encode(view);
- }
- if(encoding === 'hex') {
- return util$1.binary.hex.encode(view);
- }
- if(encoding === 'base64') {
- return util$1.binary.base64.encode(view);
- }
-
- // decode to text
- if(encoding === 'utf8') {
- return util$1.text.utf8.decode(view);
- }
- if(encoding === 'utf16') {
- return util$1.text.utf16.decode(view);
- }
-
- throw new Error('Invalid encoding: ' + encoding);
-};
-
-/** End Buffer w/UInt8Array backing */
-
-/**
- * Creates a buffer that stores bytes. A value may be given to populate the
- * buffer with data. This value can either be string of encoded bytes or a
- * regular string of characters. When passing a string of binary encoded
- * bytes, the encoding `raw` should be given. This is also the default. When
- * passing a string of characters, the encoding `utf8` should be given.
- *
- * @param [input] a string with encoded bytes to store in the buffer.
- * @param [encoding] (default: 'raw', other: 'utf8').
- */
-util$1.createBuffer = function(input, encoding) {
- // TODO: deprecate, use new ByteBuffer() instead
- encoding = encoding || 'raw';
- if(input !== undefined && encoding === 'utf8') {
- input = util$1.encodeUtf8(input);
- }
- return new util$1.ByteBuffer(input);
-};
-
-/**
- * Fills a string with a particular value. If you want the string to be a byte
- * string, pass in String.fromCharCode(theByte).
- *
- * @param c the character to fill the string with, use String.fromCharCode
- * to fill the string with a byte value.
- * @param n the number of characters of value c to fill with.
- *
- * @return the filled string.
- */
-util$1.fillString = function(c, n) {
- var s = '';
- while(n > 0) {
- if(n & 1) {
- s += c;
- }
- n >>>= 1;
- if(n > 0) {
- c += c;
- }
- }
- return s;
-};
-
-/**
- * Performs a per byte XOR between two byte strings and returns the result as a
- * string of bytes.
- *
- * @param s1 first string of bytes.
- * @param s2 second string of bytes.
- * @param n the number of bytes to XOR.
- *
- * @return the XOR'd result.
- */
-util$1.xorBytes = function(s1, s2, n) {
- var s3 = '';
- var b = '';
- var t = '';
- var i = 0;
- var c = 0;
- for(; n > 0; --n, ++i) {
- b = s1.charCodeAt(i) ^ s2.charCodeAt(i);
- if(c >= 10) {
- s3 += t;
- t = '';
- c = 0;
- }
- t += String.fromCharCode(b);
- ++c;
- }
- s3 += t;
- return s3;
-};
-
-/**
- * Converts a hex string into a 'binary' encoded string of bytes.
- *
- * @param hex the hexadecimal string to convert.
- *
- * @return the binary-encoded string of bytes.
- */
-util$1.hexToBytes = function(hex) {
- // TODO: deprecate: "Deprecated. Use util.binary.hex.decode instead."
- var rval = '';
- var i = 0;
- if(hex.length & 1 == 1) {
- // odd number of characters, convert first character alone
- i = 1;
- rval += String.fromCharCode(parseInt(hex[0], 16));
- }
- // convert 2 characters (1 byte) at a time
- for(; i < hex.length; i += 2) {
- rval += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
- }
- return rval;
-};
-
-/**
- * Converts a 'binary' encoded string of bytes to hex.
- *
- * @param bytes the byte string to convert.
- *
- * @return the string of hexadecimal characters.
- */
-util$1.bytesToHex = function(bytes) {
- // TODO: deprecate: "Deprecated. Use util.binary.hex.encode instead."
- return util$1.createBuffer(bytes).toHex();
-};
-
-/**
- * Converts an 32-bit integer to 4-big-endian byte string.
- *
- * @param i the integer.
- *
- * @return the byte string.
- */
-util$1.int32ToBytes = function(i) {
- return (
- String.fromCharCode(i >> 24 & 0xFF) +
- String.fromCharCode(i >> 16 & 0xFF) +
- String.fromCharCode(i >> 8 & 0xFF) +
- String.fromCharCode(i & 0xFF));
-};
-
-// base64 characters, reverse mapping
-var _base64 =
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
-var _base64Idx = [
-/*43 -43 = 0*/
-/*'+', 1, 2, 3,'/' */
- 62, -1, -1, -1, 63,
-
-/*'0','1','2','3','4','5','6','7','8','9' */
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
-
-/*15, 16, 17,'=', 19, 20, 21 */
- -1, -1, -1, 64, -1, -1, -1,
-
-/*65 - 43 = 22*/
-/*'A','B','C','D','E','F','G','H','I','J','K','L','M', */
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-
-/*'N','O','P','Q','R','S','T','U','V','W','X','Y','Z' */
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-
-/*91 - 43 = 48 */
-/*48, 49, 50, 51, 52, 53 */
- -1, -1, -1, -1, -1, -1,
-
-/*97 - 43 = 54*/
-/*'a','b','c','d','e','f','g','h','i','j','k','l','m' */
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
-
-/*'n','o','p','q','r','s','t','u','v','w','x','y','z' */
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51
-];
-
-// base58 characters (Bitcoin alphabet)
-var _base58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
-
-/**
- * Base64 encodes a 'binary' encoded string of bytes.
- *
- * @param input the binary encoded string of bytes to base64-encode.
- * @param maxline the maximum number of encoded characters per line to use,
- * defaults to none.
- *
- * @return the base64-encoded output.
- */
-util$1.encode64 = function(input, maxline) {
- // TODO: deprecate: "Deprecated. Use util.binary.base64.encode instead."
- var line = '';
- var output = '';
- var chr1, chr2, chr3;
- var i = 0;
- while(i < input.length) {
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
-
- // encode 4 character group
- line += _base64.charAt(chr1 >> 2);
- line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4));
- if(isNaN(chr2)) {
- line += '==';
- } else {
- line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6));
- line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63);
- }
-
- if(maxline && line.length > maxline) {
- output += line.substr(0, maxline) + '\r\n';
- line = line.substr(maxline);
- }
- }
- output += line;
- return output;
-};
-
-/**
- * Base64 decodes a string into a 'binary' encoded string of bytes.
- *
- * @param input the base64-encoded input.
- *
- * @return the binary encoded string.
- */
-util$1.decode64 = function(input) {
- // TODO: deprecate: "Deprecated. Use util.binary.base64.decode instead."
-
- // remove all non-base64 characters
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
-
- var output = '';
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- while(i < input.length) {
- enc1 = _base64Idx[input.charCodeAt(i++) - 43];
- enc2 = _base64Idx[input.charCodeAt(i++) - 43];
- enc3 = _base64Idx[input.charCodeAt(i++) - 43];
- enc4 = _base64Idx[input.charCodeAt(i++) - 43];
-
- output += String.fromCharCode((enc1 << 2) | (enc2 >> 4));
- if(enc3 !== 64) {
- // decoded at least 2 bytes
- output += String.fromCharCode(((enc2 & 15) << 4) | (enc3 >> 2));
- if(enc4 !== 64) {
- // decoded 3 bytes
- output += String.fromCharCode(((enc3 & 3) << 6) | enc4);
- }
- }
- }
-
- return output;
-};
-
-/**
- * Encodes the given string of characters (a standard JavaScript
- * string) as a binary encoded string where the bytes represent
- * a UTF-8 encoded string of characters. Non-ASCII characters will be
- * encoded as multiple bytes according to UTF-8.
- *
- * @param str a standard string of characters to encode.
- *
- * @return the binary encoded string.
- */
-util$1.encodeUtf8 = function(str) {
- return unescape(encodeURIComponent(str));
-};
-
-/**
- * Decodes a binary encoded string that contains bytes that
- * represent a UTF-8 encoded string of characters -- into a
- * string of characters (a standard JavaScript string).
- *
- * @param str the binary encoded string to decode.
- *
- * @return the resulting standard string of characters.
- */
-util$1.decodeUtf8 = function(str) {
- return decodeURIComponent(escape(str));
-};
-
-// binary encoding/decoding tools
-// FIXME: Experimental. Do not use yet.
-util$1.binary = {
- raw: {},
- hex: {},
- base64: {},
- base58: {},
- baseN : {
- encode: baseN.encode,
- decode: baseN.decode
- }
-};
-
-/**
- * Encodes a Uint8Array as a binary-encoded string. This encoding uses
- * a value between 0 and 255 for each character.
- *
- * @param bytes the Uint8Array to encode.
- *
- * @return the binary-encoded string.
- */
-util$1.binary.raw.encode = function(bytes) {
- return String.fromCharCode.apply(null, bytes);
-};
-
-/**
- * Decodes a binary-encoded string to a Uint8Array. This encoding uses
- * a value between 0 and 255 for each character.
- *
- * @param str the binary-encoded string to decode.
- * @param [output] an optional Uint8Array to write the output to; if it
- * is too small, an exception will be thrown.
- * @param [offset] the start offset for writing to the output (default: 0).
- *
- * @return the Uint8Array or the number of bytes written if output was given.
- */
-util$1.binary.raw.decode = function(str, output, offset) {
- var out = output;
- if(!out) {
- out = new Uint8Array(str.length);
- }
- offset = offset || 0;
- var j = offset;
- for(var i = 0; i < str.length; ++i) {
- out[j++] = str.charCodeAt(i);
- }
- return output ? (j - offset) : out;
-};
-
-/**
- * Encodes a 'binary' string, ArrayBuffer, DataView, TypedArray, or
- * ByteBuffer as a string of hexadecimal characters.
- *
- * @param bytes the bytes to convert.
- *
- * @return the string of hexadecimal characters.
- */
-util$1.binary.hex.encode = util$1.bytesToHex;
-
-/**
- * Decodes a hex-encoded string to a Uint8Array.
- *
- * @param hex the hexadecimal string to convert.
- * @param [output] an optional Uint8Array to write the output to; if it
- * is too small, an exception will be thrown.
- * @param [offset] the start offset for writing to the output (default: 0).
- *
- * @return the Uint8Array or the number of bytes written if output was given.
- */
-util$1.binary.hex.decode = function(hex, output, offset) {
- var out = output;
- if(!out) {
- out = new Uint8Array(Math.ceil(hex.length / 2));
- }
- offset = offset || 0;
- var i = 0, j = offset;
- if(hex.length & 1) {
- // odd number of characters, convert first character alone
- i = 1;
- out[j++] = parseInt(hex[0], 16);
- }
- // convert 2 characters (1 byte) at a time
- for(; i < hex.length; i += 2) {
- out[j++] = parseInt(hex.substr(i, 2), 16);
- }
- return output ? (j - offset) : out;
-};
-
-/**
- * Base64-encodes a Uint8Array.
- *
- * @param input the Uint8Array to encode.
- * @param maxline the maximum number of encoded characters per line to use,
- * defaults to none.
- *
- * @return the base64-encoded output string.
- */
-util$1.binary.base64.encode = function(input, maxline) {
- var line = '';
- var output = '';
- var chr1, chr2, chr3;
- var i = 0;
- while(i < input.byteLength) {
- chr1 = input[i++];
- chr2 = input[i++];
- chr3 = input[i++];
-
- // encode 4 character group
- line += _base64.charAt(chr1 >> 2);
- line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4));
- if(isNaN(chr2)) {
- line += '==';
- } else {
- line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6));
- line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63);
- }
-
- if(maxline && line.length > maxline) {
- output += line.substr(0, maxline) + '\r\n';
- line = line.substr(maxline);
- }
- }
- output += line;
- return output;
-};
-
-/**
- * Decodes a base64-encoded string to a Uint8Array.
- *
- * @param input the base64-encoded input string.
- * @param [output] an optional Uint8Array to write the output to; if it
- * is too small, an exception will be thrown.
- * @param [offset] the start offset for writing to the output (default: 0).
- *
- * @return the Uint8Array or the number of bytes written if output was given.
- */
-util$1.binary.base64.decode = function(input, output, offset) {
- var out = output;
- if(!out) {
- out = new Uint8Array(Math.ceil(input.length / 4) * 3);
- }
-
- // remove all non-base64 characters
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
-
- offset = offset || 0;
- var enc1, enc2, enc3, enc4;
- var i = 0, j = offset;
-
- while(i < input.length) {
- enc1 = _base64Idx[input.charCodeAt(i++) - 43];
- enc2 = _base64Idx[input.charCodeAt(i++) - 43];
- enc3 = _base64Idx[input.charCodeAt(i++) - 43];
- enc4 = _base64Idx[input.charCodeAt(i++) - 43];
-
- out[j++] = (enc1 << 2) | (enc2 >> 4);
- if(enc3 !== 64) {
- // decoded at least 2 bytes
- out[j++] = ((enc2 & 15) << 4) | (enc3 >> 2);
- if(enc4 !== 64) {
- // decoded 3 bytes
- out[j++] = ((enc3 & 3) << 6) | enc4;
- }
- }
- }
-
- // make sure result is the exact decoded length
- return output ? (j - offset) : out.subarray(0, j);
-};
-
-// add support for base58 encoding/decoding with Bitcoin alphabet
-util$1.binary.base58.encode = function(input, maxline) {
- return util$1.binary.baseN.encode(input, _base58, maxline);
-};
-util$1.binary.base58.decode = function(input, maxline) {
- return util$1.binary.baseN.decode(input, _base58, maxline);
-};
-
-// text encoding/decoding tools
-// FIXME: Experimental. Do not use yet.
-util$1.text = {
- utf8: {},
- utf16: {}
-};
-
-/**
- * Encodes the given string as UTF-8 in a Uint8Array.
- *
- * @param str the string to encode.
- * @param [output] an optional Uint8Array to write the output to; if it
- * is too small, an exception will be thrown.
- * @param [offset] the start offset for writing to the output (default: 0).
- *
- * @return the Uint8Array or the number of bytes written if output was given.
- */
-util$1.text.utf8.encode = function(str, output, offset) {
- str = util$1.encodeUtf8(str);
- var out = output;
- if(!out) {
- out = new Uint8Array(str.length);
- }
- offset = offset || 0;
- var j = offset;
- for(var i = 0; i < str.length; ++i) {
- out[j++] = str.charCodeAt(i);
- }
- return output ? (j - offset) : out;
-};
-
-/**
- * Decodes the UTF-8 contents from a Uint8Array.
- *
- * @param bytes the Uint8Array to decode.
- *
- * @return the resulting string.
- */
-util$1.text.utf8.decode = function(bytes) {
- return util$1.decodeUtf8(String.fromCharCode.apply(null, bytes));
-};
-
-/**
- * Encodes the given string as UTF-16 in a Uint8Array.
- *
- * @param str the string to encode.
- * @param [output] an optional Uint8Array to write the output to; if it
- * is too small, an exception will be thrown.
- * @param [offset] the start offset for writing to the output (default: 0).
- *
- * @return the Uint8Array or the number of bytes written if output was given.
- */
-util$1.text.utf16.encode = function(str, output, offset) {
- var out = output;
- if(!out) {
- out = new Uint8Array(str.length * 2);
- }
- var view = new Uint16Array(out.buffer);
- offset = offset || 0;
- var j = offset;
- var k = offset;
- for(var i = 0; i < str.length; ++i) {
- view[k++] = str.charCodeAt(i);
- j += 2;
- }
- return output ? (j - offset) : out;
-};
-
-/**
- * Decodes the UTF-16 contents from a Uint8Array.
- *
- * @param bytes the Uint8Array to decode.
- *
- * @return the resulting string.
- */
-util$1.text.utf16.decode = function(bytes) {
- return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer));
-};
-
-/**
- * Deflates the given data using a flash interface.
- *
- * @param api the flash interface.
- * @param bytes the data.
- * @param raw true to return only raw deflate data, false to include zlib
- * header and trailer.
- *
- * @return the deflated data as a string.
- */
-util$1.deflate = function(api, bytes, raw) {
- bytes = util$1.decode64(api.deflate(util$1.encode64(bytes)).rval);
-
- // strip zlib header and trailer if necessary
- if(raw) {
- // zlib header is 2 bytes (CMF,FLG) where FLG indicates that
- // there is a 4-byte DICT (alder-32) block before the data if
- // its 5th bit is set
- var start = 2;
- var flg = bytes.charCodeAt(1);
- if(flg & 0x20) {
- start = 6;
- }
- // zlib trailer is 4 bytes of adler-32
- bytes = bytes.substring(start, bytes.length - 4);
- }
-
- return bytes;
-};
-
-/**
- * Inflates the given data using a flash interface.
- *
- * @param api the flash interface.
- * @param bytes the data.
- * @param raw true if the incoming data has no zlib header or trailer and is
- * raw DEFLATE data.
- *
- * @return the inflated data as a string, null on error.
- */
-util$1.inflate = function(api, bytes, raw) {
- // TODO: add zlib header and trailer if necessary/possible
- var rval = api.inflate(util$1.encode64(bytes)).rval;
- return (rval === null) ? null : util$1.decode64(rval);
-};
-
-/**
- * Sets a storage object.
- *
- * @param api the storage interface.
- * @param id the storage ID to use.
- * @param obj the storage object, null to remove.
- */
-var _setStorageObject = function(api, id, obj) {
- if(!api) {
- throw new Error('WebStorage not available.');
- }
-
- var rval;
- if(obj === null) {
- rval = api.removeItem(id);
- } else {
- // json-encode and base64-encode object
- obj = util$1.encode64(JSON.stringify(obj));
- rval = api.setItem(id, obj);
- }
-
- // handle potential flash error
- if(typeof(rval) !== 'undefined' && rval.rval !== true) {
- var error = new Error(rval.error.message);
- error.id = rval.error.id;
- error.name = rval.error.name;
- throw error;
- }
-};
-
-/**
- * Gets a storage object.
- *
- * @param api the storage interface.
- * @param id the storage ID to use.
- *
- * @return the storage object entry or null if none exists.
- */
-var _getStorageObject = function(api, id) {
- if(!api) {
- throw new Error('WebStorage not available.');
- }
-
- // get the existing entry
- var rval = api.getItem(id);
-
- /* Note: We check api.init because we can't do (api == localStorage)
- on IE because of "Class doesn't support Automation" exception. Only
- the flash api has an init method so this works too, but we need a
- better solution in the future. */
-
- // flash returns item wrapped in an object, handle special case
- if(api.init) {
- if(rval.rval === null) {
- if(rval.error) {
- var error = new Error(rval.error.message);
- error.id = rval.error.id;
- error.name = rval.error.name;
- throw error;
- }
- // no error, but also no item
- rval = null;
- } else {
- rval = rval.rval;
- }
- }
-
- // handle decoding
- if(rval !== null) {
- // base64-decode and json-decode data
- rval = JSON.parse(util$1.decode64(rval));
- }
-
- return rval;
-};
-
-/**
- * Stores an item in local storage.
- *
- * @param api the storage interface.
- * @param id the storage ID to use.
- * @param key the key for the item.
- * @param data the data for the item (any javascript object/primitive).
- */
-var _setItem = function(api, id, key, data) {
- // get storage object
- var obj = _getStorageObject(api, id);
- if(obj === null) {
- // create a new storage object
- obj = {};
- }
- // update key
- obj[key] = data;
-
- // set storage object
- _setStorageObject(api, id, obj);
-};
-
-/**
- * Gets an item from local storage.
- *
- * @param api the storage interface.
- * @param id the storage ID to use.
- * @param key the key for the item.
- *
- * @return the item.
- */
-var _getItem = function(api, id, key) {
- // get storage object
- var rval = _getStorageObject(api, id);
- if(rval !== null) {
- // return data at key
- rval = (key in rval) ? rval[key] : null;
- }
-
- return rval;
-};
-
-/**
- * Removes an item from local storage.
- *
- * @param api the storage interface.
- * @param id the storage ID to use.
- * @param key the key for the item.
- */
-var _removeItem = function(api, id, key) {
- // get storage object
- var obj = _getStorageObject(api, id);
- if(obj !== null && key in obj) {
- // remove key
- delete obj[key];
-
- // see if entry has no keys remaining
- var empty = true;
- for(var prop in obj) {
- empty = false;
- break;
- }
- if(empty) {
- // remove entry entirely if no keys are left
- obj = null;
- }
-
- // set storage object
- _setStorageObject(api, id, obj);
- }
-};
-
-/**
- * Clears the local disk storage identified by the given ID.
- *
- * @param api the storage interface.
- * @param id the storage ID to use.
- */
-var _clearItems = function(api, id) {
- _setStorageObject(api, id, null);
-};
-
-/**
- * Calls a storage function.
- *
- * @param func the function to call.
- * @param args the arguments for the function.
- * @param location the location argument.
- *
- * @return the return value from the function.
- */
-var _callStorageFunction = function(func, args, location) {
- var rval = null;
-
- // default storage types
- if(typeof(location) === 'undefined') {
- location = ['web', 'flash'];
- }
-
- // apply storage types in order of preference
- var type;
- var done = false;
- var exception = null;
- for(var idx in location) {
- type = location[idx];
- try {
- if(type === 'flash' || type === 'both') {
- if(args[0] === null) {
- throw new Error('Flash local storage not available.');
- }
- rval = func.apply(this, args);
- done = (type === 'flash');
- }
- if(type === 'web' || type === 'both') {
- args[0] = localStorage;
- rval = func.apply(this, args);
- done = true;
- }
- } catch(ex) {
- exception = ex;
- }
- if(done) {
- break;
- }
- }
-
- if(!done) {
- throw exception;
- }
-
- return rval;
-};
-
-/**
- * Stores an item on local disk.
- *
- * The available types of local storage include 'flash', 'web', and 'both'.
- *
- * The type 'flash' refers to flash local storage (SharedObject). In order
- * to use flash local storage, the 'api' parameter must be valid. The type
- * 'web' refers to WebStorage, if supported by the browser. The type 'both'
- * refers to storing using both 'flash' and 'web', not just one or the
- * other.
- *
- * The location array should list the storage types to use in order of
- * preference:
- *
- * ['flash']: flash only storage
- * ['web']: web only storage
- * ['both']: try to store in both
- * ['flash','web']: store in flash first, but if not available, 'web'
- * ['web','flash']: store in web first, but if not available, 'flash'
- *
- * The location array defaults to: ['web', 'flash']
- *
- * @param api the flash interface, null to use only WebStorage.
- * @param id the storage ID to use.
- * @param key the key for the item.
- * @param data the data for the item (any javascript object/primitive).
- * @param location an array with the preferred types of storage to use.
- */
-util$1.setItem = function(api, id, key, data, location) {
- _callStorageFunction(_setItem, arguments, location);
-};
-
-/**
- * Gets an item on local disk.
- *
- * Set setItem() for details on storage types.
- *
- * @param api the flash interface, null to use only WebStorage.
- * @param id the storage ID to use.
- * @param key the key for the item.
- * @param location an array with the preferred types of storage to use.
- *
- * @return the item.
- */
-util$1.getItem = function(api, id, key, location) {
- return _callStorageFunction(_getItem, arguments, location);
-};
-
-/**
- * Removes an item on local disk.
- *
- * Set setItem() for details on storage types.
- *
- * @param api the flash interface.
- * @param id the storage ID to use.
- * @param key the key for the item.
- * @param location an array with the preferred types of storage to use.
- */
-util$1.removeItem = function(api, id, key, location) {
- _callStorageFunction(_removeItem, arguments, location);
-};
-
-/**
- * Clears the local disk storage identified by the given ID.
- *
- * Set setItem() for details on storage types.
- *
- * @param api the flash interface if flash is available.
- * @param id the storage ID to use.
- * @param location an array with the preferred types of storage to use.
- */
-util$1.clearItems = function(api, id, location) {
- _callStorageFunction(_clearItems, arguments, location);
-};
-
-/**
- * Parses the scheme, host, and port from an http(s) url.
- *
- * @param str the url string.
- *
- * @return the parsed url object or null if the url is invalid.
- */
-util$1.parseUrl = function(str) {
- // FIXME: this regex looks a bit broken
- var regex = /^(https?):\/\/([^:&^\/]*):?(\d*)(.*)$/g;
- regex.lastIndex = 0;
- var m = regex.exec(str);
- var url = (m === null) ? null : {
- full: str,
- scheme: m[1],
- host: m[2],
- port: m[3],
- path: m[4]
- };
- if(url) {
- url.fullHost = url.host;
- if(url.port) {
- if(url.port !== 80 && url.scheme === 'http') {
- url.fullHost += ':' + url.port;
- } else if(url.port !== 443 && url.scheme === 'https') {
- url.fullHost += ':' + url.port;
- }
- } else if(url.scheme === 'http') {
- url.port = 80;
- } else if(url.scheme === 'https') {
- url.port = 443;
- }
- url.full = url.scheme + '://' + url.fullHost;
- }
- return url;
-};
-
-/* Storage for query variables */
-var _queryVariables = null;
-
-/**
- * Returns the window location query variables. Query is parsed on the first
- * call and the same object is returned on subsequent calls. The mapping
- * is from keys to an array of values. Parameters without values will have
- * an object key set but no value added to the value array. Values are
- * unescaped.
- *
- * ...?k1=v1&k2=v2:
- * {
- * "k1": ["v1"],
- * "k2": ["v2"]
- * }
- *
- * ...?k1=v1&k1=v2:
- * {
- * "k1": ["v1", "v2"]
- * }
- *
- * ...?k1=v1&k2:
- * {
- * "k1": ["v1"],
- * "k2": []
- * }
- *
- * ...?k1=v1&k1:
- * {
- * "k1": ["v1"]
- * }
- *
- * ...?k1&k1:
- * {
- * "k1": []
- * }
- *
- * @param query the query string to parse (optional, default to cached
- * results from parsing window location search query).
- *
- * @return object mapping keys to variables.
- */
-util$1.getQueryVariables = function(query) {
- var parse = function(q) {
- var rval = {};
- var kvpairs = q.split('&');
- for(var i = 0; i < kvpairs.length; i++) {
- var pos = kvpairs[i].indexOf('=');
- var key;
- var val;
- if(pos > 0) {
- key = kvpairs[i].substring(0, pos);
- val = kvpairs[i].substring(pos + 1);
- } else {
- key = kvpairs[i];
- val = null;
- }
- if(!(key in rval)) {
- rval[key] = [];
- }
- // disallow overriding object prototype keys
- if(!(key in Object.prototype) && val !== null) {
- rval[key].push(unescape(val));
- }
- }
- return rval;
- };
-
- var rval;
- if(typeof(query) === 'undefined') {
- // set cached variables if needed
- if(_queryVariables === null) {
- if(typeof(window) !== 'undefined' && window.location && window.location.search) {
- // parse window search query
- _queryVariables = parse(window.location.search.substring(1));
- } else {
- // no query variables available
- _queryVariables = {};
- }
- }
- rval = _queryVariables;
- } else {
- // parse given query
- rval = parse(query);
- }
- return rval;
-};
-
-/**
- * Parses a fragment into a path and query. This method will take a URI
- * fragment and break it up as if it were the main URI. For example:
- * /bar/baz?a=1&b=2
- * results in:
- * {
- * path: ["bar", "baz"],
- * query: {"k1": ["v1"], "k2": ["v2"]}
- * }
- *
- * @return object with a path array and query object.
- */
-util$1.parseFragment = function(fragment) {
- // default to whole fragment
- var fp = fragment;
- var fq = '';
- // split into path and query if possible at the first '?'
- var pos = fragment.indexOf('?');
- if(pos > 0) {
- fp = fragment.substring(0, pos);
- fq = fragment.substring(pos + 1);
- }
- // split path based on '/' and ignore first element if empty
- var path = fp.split('/');
- if(path.length > 0 && path[0] === '') {
- path.shift();
- }
- // convert query into object
- var query = (fq === '') ? {} : util$1.getQueryVariables(fq);
-
- return {
- pathString: fp,
- queryString: fq,
- path: path,
- query: query
- };
-};
-
-/**
- * Makes a request out of a URI-like request string. This is intended to
- * be used where a fragment id (after a URI '#') is parsed as a URI with
- * path and query parts. The string should have a path beginning and
- * delimited by '/' and optional query parameters following a '?'. The
- * query should be a standard URL set of key value pairs delimited by
- * '&'. For backwards compatibility the initial '/' on the path is not
- * required. The request object has the following API, (fully described
- * in the method code):
- * {
- * path: <the path string part>.
- * query: <the query string part>,
- * getPath(i): get part or all of the split path array,
- * getQuery(k, i): get part or all of a query key array,
- * getQueryLast(k, _default): get last element of a query key array.
- * }
- *
- * @return object with request parameters.
- */
-util$1.makeRequest = function(reqString) {
- var frag = util$1.parseFragment(reqString);
- var req = {
- // full path string
- path: frag.pathString,
- // full query string
- query: frag.queryString,
- /**
- * Get path or element in path.
- *
- * @param i optional path index.
- *
- * @return path or part of path if i provided.
- */
- getPath: function(i) {
- return (typeof(i) === 'undefined') ? frag.path : frag.path[i];
- },
- /**
- * Get query, values for a key, or value for a key index.
- *
- * @param k optional query key.
- * @param i optional query key index.
- *
- * @return query, values for a key, or value for a key index.
- */
- getQuery: function(k, i) {
- var rval;
- if(typeof(k) === 'undefined') {
- rval = frag.query;
- } else {
- rval = frag.query[k];
- if(rval && typeof(i) !== 'undefined') {
- rval = rval[i];
- }
- }
- return rval;
- },
- getQueryLast: function(k, _default) {
- var rval;
- var vals = req.getQuery(k);
- if(vals) {
- rval = vals[vals.length - 1];
- } else {
- rval = _default;
- }
- return rval;
- }
- };
- return req;
-};
-
-/**
- * Makes a URI out of a path, an object with query parameters, and a
- * fragment. Uses jQuery.param() internally for query string creation.
- * If the path is an array, it will be joined with '/'.
- *
- * @param path string path or array of strings.
- * @param query object with query parameters. (optional)
- * @param fragment fragment string. (optional)
- *
- * @return string object with request parameters.
- */
-util$1.makeLink = function(path, query, fragment) {
- // join path parts if needed
- path = jQuery.isArray(path) ? path.join('/') : path;
-
- var qstr = jQuery.param(query || {});
- fragment = fragment || '';
- return path +
- ((qstr.length > 0) ? ('?' + qstr) : '') +
- ((fragment.length > 0) ? ('#' + fragment) : '');
-};
-
-/**
- * Check if an object is empty.
- *
- * Taken from:
- * http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json/679937#679937
- *
- * @param object the object to check.
- */
-util$1.isEmpty = function(obj) {
- for(var prop in obj) {
- if(obj.hasOwnProperty(prop)) {
- return false;
- }
- }
- return true;
-};
-
-/**
- * Format with simple printf-style interpolation.
- *
- * %%: literal '%'
- * %s,%o: convert next argument into a string.
- *
- * @param format the string to format.
- * @param ... arguments to interpolate into the format string.
- */
-util$1.format = function(format) {
- var re = /%./g;
- // current match
- var match;
- // current part
- var part;
- // current arg index
- var argi = 0;
- // collected parts to recombine later
- var parts = [];
- // last index found
- var last = 0;
- // loop while matches remain
- while((match = re.exec(format))) {
- part = format.substring(last, re.lastIndex - 2);
- // don't add empty strings (ie, parts between %s%s)
- if(part.length > 0) {
- parts.push(part);
- }
- last = re.lastIndex;
- // switch on % code
- var code = match[0][1];
- switch(code) {
- case 's':
- case 'o':
- // check if enough arguments were given
- if(argi < arguments.length) {
- parts.push(arguments[argi++ + 1]);
- } else {
- parts.push('<?>');
- }
- break;
- // FIXME: do proper formating for numbers, etc
- //case 'f':
- //case 'd':
- case '%':
- parts.push('%');
- break;
- default:
- parts.push('<%' + code + '?>');
- }
- }
- // add trailing part of format string
- parts.push(format.substring(last));
- return parts.join('');
-};
-
-/**
- * Formats a number.
- *
- * http://snipplr.com/view/5945/javascript-numberformat--ported-from-php/
- */
-util$1.formatNumber = function(number, decimals, dec_point, thousands_sep) {
- // http://kevin.vanzonneveld.net
- // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
- // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // + bugfix by: Michael White (http://crestidg.com)
- // + bugfix by: Benjamin Lupton
- // + bugfix by: Allan Jensen (http://www.winternet.no)
- // + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
- // * example 1: number_format(1234.5678, 2, '.', '');
- // * returns 1: 1234.57
-
- var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
- var d = dec_point === undefined ? ',' : dec_point;
- var t = thousands_sep === undefined ?
- '.' : thousands_sep, s = n < 0 ? '-' : '';
- var i = parseInt((n = Math.abs(+n || 0).toFixed(c)), 10) + '';
- var j = (i.length > 3) ? i.length % 3 : 0;
- return s + (j ? i.substr(0, j) + t : '') +
- i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + t) +
- (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');
-};
-
-/**
- * Formats a byte size.
- *
- * http://snipplr.com/view/5949/format-humanize-file-byte-size-presentation-in-javascript/
- */
-util$1.formatSize = function(size) {
- if(size >= 1073741824) {
- size = util$1.formatNumber(size / 1073741824, 2, '.', '') + ' GiB';
- } else if(size >= 1048576) {
- size = util$1.formatNumber(size / 1048576, 2, '.', '') + ' MiB';
- } else if(size >= 1024) {
- size = util$1.formatNumber(size / 1024, 0) + ' KiB';
- } else {
- size = util$1.formatNumber(size, 0) + ' bytes';
- }
- return size;
-};
-
-/**
- * Converts an IPv4 or IPv6 string representation into bytes (in network order).
- *
- * @param ip the IPv4 or IPv6 address to convert.
- *
- * @return the 4-byte IPv6 or 16-byte IPv6 address or null if the address can't
- * be parsed.
- */
-util$1.bytesFromIP = function(ip) {
- if(ip.indexOf('.') !== -1) {
- return util$1.bytesFromIPv4(ip);
- }
- if(ip.indexOf(':') !== -1) {
- return util$1.bytesFromIPv6(ip);
- }
- return null;
-};
-
-/**
- * Converts an IPv4 string representation into bytes (in network order).
- *
- * @param ip the IPv4 address to convert.
- *
- * @return the 4-byte address or null if the address can't be parsed.
- */
-util$1.bytesFromIPv4 = function(ip) {
- ip = ip.split('.');
- if(ip.length !== 4) {
- return null;
- }
- var b = util$1.createBuffer();
- for(var i = 0; i < ip.length; ++i) {
- var num = parseInt(ip[i], 10);
- if(isNaN(num)) {
- return null;
- }
- b.putByte(num);
- }
- return b.getBytes();
-};
-
-/**
- * Converts an IPv6 string representation into bytes (in network order).
- *
- * @param ip the IPv6 address to convert.
- *
- * @return the 16-byte address or null if the address can't be parsed.
- */
-util$1.bytesFromIPv6 = function(ip) {
- var blanks = 0;
- ip = ip.split(':').filter(function(e) {
- if(e.length === 0) ++blanks;
- return true;
- });
- var zeros = (8 - ip.length + blanks) * 2;
- var b = util$1.createBuffer();
- for(var i = 0; i < 8; ++i) {
- if(!ip[i] || ip[i].length === 0) {
- b.fillWithByte(0, zeros);
- zeros = 0;
- continue;
- }
- var bytes = util$1.hexToBytes(ip[i]);
- if(bytes.length < 2) {
- b.putByte(0);
- }
- b.putBytes(bytes);
- }
- return b.getBytes();
-};
-
-/**
- * Converts 4-bytes into an IPv4 string representation or 16-bytes into
- * an IPv6 string representation. The bytes must be in network order.
- *
- * @param bytes the bytes to convert.
- *
- * @return the IPv4 or IPv6 string representation if 4 or 16 bytes,
- * respectively, are given, otherwise null.
- */
-util$1.bytesToIP = function(bytes) {
- if(bytes.length === 4) {
- return util$1.bytesToIPv4(bytes);
- }
- if(bytes.length === 16) {
- return util$1.bytesToIPv6(bytes);
- }
- return null;
-};
-
-/**
- * Converts 4-bytes into an IPv4 string representation. The bytes must be
- * in network order.
- *
- * @param bytes the bytes to convert.
- *
- * @return the IPv4 string representation or null for an invalid # of bytes.
- */
-util$1.bytesToIPv4 = function(bytes) {
- if(bytes.length !== 4) {
- return null;
- }
- var ip = [];
- for(var i = 0; i < bytes.length; ++i) {
- ip.push(bytes.charCodeAt(i));
- }
- return ip.join('.');
-};
-
-/**
- * Converts 16-bytes into an IPv16 string representation. The bytes must be
- * in network order.
- *
- * @param bytes the bytes to convert.
- *
- * @return the IPv16 string representation or null for an invalid # of bytes.
- */
-util$1.bytesToIPv6 = function(bytes) {
- if(bytes.length !== 16) {
- return null;
- }
- var ip = [];
- var zeroGroups = [];
- var zeroMaxGroup = 0;
- for(var i = 0; i < bytes.length; i += 2) {
- var hex = util$1.bytesToHex(bytes[i] + bytes[i + 1]);
- // canonicalize zero representation
- while(hex[0] === '0' && hex !== '0') {
- hex = hex.substr(1);
- }
- if(hex === '0') {
- var last = zeroGroups[zeroGroups.length - 1];
- var idx = ip.length;
- if(!last || idx !== last.end + 1) {
- zeroGroups.push({start: idx, end: idx});
- } else {
- last.end = idx;
- if((last.end - last.start) >
- (zeroGroups[zeroMaxGroup].end - zeroGroups[zeroMaxGroup].start)) {
- zeroMaxGroup = zeroGroups.length - 1;
- }
- }
- }
- ip.push(hex);
- }
- if(zeroGroups.length > 0) {
- var group = zeroGroups[zeroMaxGroup];
- // only shorten group of length > 0
- if(group.end - group.start > 0) {
- ip.splice(group.start, group.end - group.start + 1, '');
- if(group.start === 0) {
- ip.unshift('');
- }
- if(group.end === 7) {
- ip.push('');
- }
- }
- }
- return ip.join(':');
-};
-
-/**
- * Estimates the number of processes that can be run concurrently. If
- * creating Web Workers, keep in mind that the main JavaScript process needs
- * its own core.
- *
- * @param options the options to use:
- * update true to force an update (not use the cached value).
- * @param callback(err, max) called once the operation completes.
- */
-util$1.estimateCores = function(options, callback) {
- if(typeof options === 'function') {
- callback = options;
- options = {};
- }
- options = options || {};
- if('cores' in util$1 && !options.update) {
- return callback(null, util$1.cores);
- }
- if(typeof navigator !== 'undefined' &&
- 'hardwareConcurrency' in navigator &&
- navigator.hardwareConcurrency > 0) {
- util$1.cores = navigator.hardwareConcurrency;
- return callback(null, util$1.cores);
- }
- if(typeof Worker === 'undefined') {
- // workers not available
- util$1.cores = 1;
- return callback(null, util$1.cores);
- }
- if(typeof Blob === 'undefined') {
- // can't estimate, default to 2
- util$1.cores = 2;
- return callback(null, util$1.cores);
- }
-
- // create worker concurrency estimation code as blob
- var blobUrl = URL.createObjectURL(new Blob(['(',
- function() {
- self.addEventListener('message', function(e) {
- // run worker for 4 ms
- var st = Date.now();
- var et = st + 4;
- self.postMessage({st: st, et: et});
- });
- }.toString(),
- ')()'], {type: 'application/javascript'}));
-
- // take 5 samples using 16 workers
- sample([], 5, 16);
-
- function sample(max, samples, numWorkers) {
- if(samples === 0) {
- // get overlap average
- var avg = Math.floor(max.reduce(function(avg, x) {
- return avg + x;
- }, 0) / max.length);
- util$1.cores = Math.max(1, avg);
- URL.revokeObjectURL(blobUrl);
- return callback(null, util$1.cores);
- }
- map(numWorkers, function(err, results) {
- max.push(reduce(numWorkers, results));
- sample(max, samples - 1, numWorkers);
- });
- }
-
- function map(numWorkers, callback) {
- var workers = [];
- var results = [];
- for(var i = 0; i < numWorkers; ++i) {
- var worker = new Worker(blobUrl);
- worker.addEventListener('message', function(e) {
- results.push(e.data);
- if(results.length === numWorkers) {
- for(var i = 0; i < numWorkers; ++i) {
- workers[i].terminate();
- }
- callback(null, results);
- }
- });
- workers.push(worker);
- }
- for(var i = 0; i < numWorkers; ++i) {
- workers[i].postMessage(i);
- }
- }
-
- function reduce(numWorkers, results) {
- // find overlapping time windows
- var overlaps = [];
- for(var n = 0; n < numWorkers; ++n) {
- var r1 = results[n];
- var overlap = overlaps[n] = [];
- for(var i = 0; i < numWorkers; ++i) {
- if(n === i) {
- continue;
- }
- var r2 = results[i];
- if((r1.st > r2.st && r1.st < r2.et) ||
- (r2.st > r1.st && r2.st < r1.et)) {
- overlap.push(i);
- }
- }
- }
- // get maximum overlaps ... don't include overlapping worker itself
- // as the main JS process was also being scheduled during the work and
- // would have to be subtracted from the estimate anyway
- return overlaps.reduce(function(max, overlap) {
- return Math.max(max, overlap.length);
- }, 0);
- }
-};
-
-/**
- * Cipher base API.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- */
-
-var forge$D = forge$F;
-
-
-forge$D.cipher = forge$D.cipher || {};
-
-// registered algorithms
-forge$D.cipher.algorithms = forge$D.cipher.algorithms || {};
-
-/**
- * Creates a cipher object that can be used to encrypt data using the given
- * algorithm and key. The algorithm may be provided as a string value for a
- * previously registered algorithm or it may be given as a cipher algorithm
- * API object.
- *
- * @param algorithm the algorithm to use, either a string or an algorithm API
- * object.
- * @param key the key to use, as a binary-encoded string of bytes or a
- * byte buffer.
- *
- * @return the cipher.
- */
-forge$D.cipher.createCipher = function(algorithm, key) {
- var api = algorithm;
- if(typeof api === 'string') {
- api = forge$D.cipher.getAlgorithm(api);
- if(api) {
- api = api();
- }
- }
- if(!api) {
- throw new Error('Unsupported algorithm: ' + algorithm);
- }
-
- // assume block cipher
- return new forge$D.cipher.BlockCipher({
- algorithm: api,
- key: key,
- decrypt: false
- });
-};
-
-/**
- * Creates a decipher object that can be used to decrypt data using the given
- * algorithm and key. The algorithm may be provided as a string value for a
- * previously registered algorithm or it may be given as a cipher algorithm
- * API object.
- *
- * @param algorithm the algorithm to use, either a string or an algorithm API
- * object.
- * @param key the key to use, as a binary-encoded string of bytes or a
- * byte buffer.
- *
- * @return the cipher.
- */
-forge$D.cipher.createDecipher = function(algorithm, key) {
- var api = algorithm;
- if(typeof api === 'string') {
- api = forge$D.cipher.getAlgorithm(api);
- if(api) {
- api = api();
- }
- }
- if(!api) {
- throw new Error('Unsupported algorithm: ' + algorithm);
- }
-
- // assume block cipher
- return new forge$D.cipher.BlockCipher({
- algorithm: api,
- key: key,
- decrypt: true
- });
-};
-
-/**
- * Registers an algorithm by name. If the name was already registered, the
- * algorithm API object will be overwritten.
- *
- * @param name the name of the algorithm.
- * @param algorithm the algorithm API object.
- */
-forge$D.cipher.registerAlgorithm = function(name, algorithm) {
- name = name.toUpperCase();
- forge$D.cipher.algorithms[name] = algorithm;
-};
-
-/**
- * Gets a registered algorithm by name.
- *
- * @param name the name of the algorithm.
- *
- * @return the algorithm, if found, null if not.
- */
-forge$D.cipher.getAlgorithm = function(name) {
- name = name.toUpperCase();
- if(name in forge$D.cipher.algorithms) {
- return forge$D.cipher.algorithms[name];
- }
- return null;
-};
-
-var BlockCipher = forge$D.cipher.BlockCipher = function(options) {
- this.algorithm = options.algorithm;
- this.mode = this.algorithm.mode;
- this.blockSize = this.mode.blockSize;
- this._finish = false;
- this._input = null;
- this.output = null;
- this._op = options.decrypt ? this.mode.decrypt : this.mode.encrypt;
- this._decrypt = options.decrypt;
- this.algorithm.initialize(options);
-};
-
-/**
- * Starts or restarts the encryption or decryption process, whichever
- * was previously configured.
- *
- * For non-GCM mode, the IV may be a binary-encoded string of bytes, an array
- * of bytes, a byte buffer, or an array of 32-bit integers. If the IV is in
- * bytes, then it must be Nb (16) bytes in length. If the IV is given in as
- * 32-bit integers, then it must be 4 integers long.
- *
- * Note: an IV is not required or used in ECB mode.
- *
- * For GCM-mode, the IV must be given as a binary-encoded string of bytes or
- * a byte buffer. The number of bytes should be 12 (96 bits) as recommended
- * by NIST SP-800-38D but another length may be given.
- *
- * @param options the options to use:
- * iv the initialization vector to use as a binary-encoded string of
- * bytes, null to reuse the last ciphered block from a previous
- * update() (this "residue" method is for legacy support only).
- * additionalData additional authentication data as a binary-encoded
- * string of bytes, for 'GCM' mode, (default: none).
- * tagLength desired length of authentication tag, in bits, for
- * 'GCM' mode (0-128, default: 128).
- * tag the authentication tag to check if decrypting, as a
- * binary-encoded string of bytes.
- * output the output the buffer to write to, null to create one.
- */
-BlockCipher.prototype.start = function(options) {
- options = options || {};
- var opts = {};
- for(var key in options) {
- opts[key] = options[key];
- }
- opts.decrypt = this._decrypt;
- this._finish = false;
- this._input = forge$D.util.createBuffer();
- this.output = options.output || forge$D.util.createBuffer();
- this.mode.start(opts);
-};
-
-/**
- * Updates the next block according to the cipher mode.
- *
- * @param input the buffer to read from.
- */
-BlockCipher.prototype.update = function(input) {
- if(input) {
- // input given, so empty it into the input buffer
- this._input.putBuffer(input);
- }
-
- // do cipher operation until it needs more input and not finished
- while(!this._op.call(this.mode, this._input, this.output, this._finish) &&
- !this._finish) {}
-
- // free consumed memory from input buffer
- this._input.compact();
-};
-
-/**
- * Finishes encrypting or decrypting.
- *
- * @param pad a padding function to use in CBC mode, null for default,
- * signature(blockSize, buffer, decrypt).
- *
- * @return true if successful, false on error.
- */
-BlockCipher.prototype.finish = function(pad) {
- // backwards-compatibility w/deprecated padding API
- // Note: will overwrite padding functions even after another start() call
- if(pad && (this.mode.name === 'ECB' || this.mode.name === 'CBC')) {
- this.mode.pad = function(input) {
- return pad(this.blockSize, input, false);
- };
- this.mode.unpad = function(output) {
- return pad(this.blockSize, output, true);
- };
- }
-
- // build options for padding and afterFinish functions
- var options = {};
- options.decrypt = this._decrypt;
-
- // get # of bytes that won't fill a block
- options.overflow = this._input.length() % this.blockSize;
-
- if(!this._decrypt && this.mode.pad) {
- if(!this.mode.pad(this._input, options)) {
- return false;
- }
- }
-
- // do final update
- this._finish = true;
- this.update();
-
- if(this._decrypt && this.mode.unpad) {
- if(!this.mode.unpad(this.output, options)) {
- return false;
- }
- }
-
- if(this.mode.afterFinish) {
- if(!this.mode.afterFinish(this.output, options)) {
- return false;
- }
- }
-
- return true;
-};
-
-/**
- * Supported cipher modes.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- */
-
-var forge$C = forge$F;
-
-
-forge$C.cipher = forge$C.cipher || {};
-
-// supported cipher modes
-var modes = forge$C.cipher.modes = forge$C.cipher.modes || {};
-
-/** Electronic codebook (ECB) (Don't use this; it's not secure) **/
-
-modes.ecb = function(options) {
- options = options || {};
- this.name = 'ECB';
- this.cipher = options.cipher;
- this.blockSize = options.blockSize || 16;
- this._ints = this.blockSize / 4;
- this._inBlock = new Array(this._ints);
- this._outBlock = new Array(this._ints);
-};
-
-modes.ecb.prototype.start = function(options) {};
-
-modes.ecb.prototype.encrypt = function(input, output, finish) {
- // not enough input to encrypt
- if(input.length() < this.blockSize && !(finish && input.length() > 0)) {
- return true;
- }
-
- // get next block
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = input.getInt32();
- }
-
- // encrypt block
- this.cipher.encrypt(this._inBlock, this._outBlock);
-
- // write output
- for(var i = 0; i < this._ints; ++i) {
- output.putInt32(this._outBlock[i]);
- }
-};
-
-modes.ecb.prototype.decrypt = function(input, output, finish) {
- // not enough input to decrypt
- if(input.length() < this.blockSize && !(finish && input.length() > 0)) {
- return true;
- }
-
- // get next block
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = input.getInt32();
- }
-
- // decrypt block
- this.cipher.decrypt(this._inBlock, this._outBlock);
-
- // write output
- for(var i = 0; i < this._ints; ++i) {
- output.putInt32(this._outBlock[i]);
- }
-};
-
-modes.ecb.prototype.pad = function(input, options) {
- // add PKCS#7 padding to block (each pad byte is the
- // value of the number of pad bytes)
- var padding = (input.length() === this.blockSize ?
- this.blockSize : (this.blockSize - input.length()));
- input.fillWithByte(padding, padding);
- return true;
-};
-
-modes.ecb.prototype.unpad = function(output, options) {
- // check for error: input data not a multiple of blockSize
- if(options.overflow > 0) {
- return false;
- }
-
- // ensure padding byte count is valid
- var len = output.length();
- var count = output.at(len - 1);
- if(count > (this.blockSize << 2)) {
- return false;
- }
-
- // trim off padding bytes
- output.truncate(count);
- return true;
-};
-
-/** Cipher-block Chaining (CBC) **/
-
-modes.cbc = function(options) {
- options = options || {};
- this.name = 'CBC';
- this.cipher = options.cipher;
- this.blockSize = options.blockSize || 16;
- this._ints = this.blockSize / 4;
- this._inBlock = new Array(this._ints);
- this._outBlock = new Array(this._ints);
-};
-
-modes.cbc.prototype.start = function(options) {
- // Note: legacy support for using IV residue (has security flaws)
- // if IV is null, reuse block from previous processing
- if(options.iv === null) {
- // must have a previous block
- if(!this._prev) {
- throw new Error('Invalid IV parameter.');
- }
- this._iv = this._prev.slice(0);
- } else if(!('iv' in options)) {
- throw new Error('Invalid IV parameter.');
- } else {
- // save IV as "previous" block
- this._iv = transformIV(options.iv, this.blockSize);
- this._prev = this._iv.slice(0);
- }
-};
-
-modes.cbc.prototype.encrypt = function(input, output, finish) {
- // not enough input to encrypt
- if(input.length() < this.blockSize && !(finish && input.length() > 0)) {
- return true;
- }
-
- // get next block
- // CBC XOR's IV (or previous block) with plaintext
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = this._prev[i] ^ input.getInt32();
- }
-
- // encrypt block
- this.cipher.encrypt(this._inBlock, this._outBlock);
-
- // write output, save previous block
- for(var i = 0; i < this._ints; ++i) {
- output.putInt32(this._outBlock[i]);
- }
- this._prev = this._outBlock;
-};
-
-modes.cbc.prototype.decrypt = function(input, output, finish) {
- // not enough input to decrypt
- if(input.length() < this.blockSize && !(finish && input.length() > 0)) {
- return true;
- }
-
- // get next block
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = input.getInt32();
- }
-
- // decrypt block
- this.cipher.decrypt(this._inBlock, this._outBlock);
-
- // write output, save previous ciphered block
- // CBC XOR's IV (or previous block) with ciphertext
- for(var i = 0; i < this._ints; ++i) {
- output.putInt32(this._prev[i] ^ this._outBlock[i]);
- }
- this._prev = this._inBlock.slice(0);
-};
-
-modes.cbc.prototype.pad = function(input, options) {
- // add PKCS#7 padding to block (each pad byte is the
- // value of the number of pad bytes)
- var padding = (input.length() === this.blockSize ?
- this.blockSize : (this.blockSize - input.length()));
- input.fillWithByte(padding, padding);
- return true;
-};
-
-modes.cbc.prototype.unpad = function(output, options) {
- // check for error: input data not a multiple of blockSize
- if(options.overflow > 0) {
- return false;
- }
-
- // ensure padding byte count is valid
- var len = output.length();
- var count = output.at(len - 1);
- if(count > (this.blockSize << 2)) {
- return false;
- }
-
- // trim off padding bytes
- output.truncate(count);
- return true;
-};
-
-/** Cipher feedback (CFB) **/
-
-modes.cfb = function(options) {
- options = options || {};
- this.name = 'CFB';
- this.cipher = options.cipher;
- this.blockSize = options.blockSize || 16;
- this._ints = this.blockSize / 4;
- this._inBlock = null;
- this._outBlock = new Array(this._ints);
- this._partialBlock = new Array(this._ints);
- this._partialOutput = forge$C.util.createBuffer();
- this._partialBytes = 0;
-};
-
-modes.cfb.prototype.start = function(options) {
- if(!('iv' in options)) {
- throw new Error('Invalid IV parameter.');
- }
- // use IV as first input
- this._iv = transformIV(options.iv, this.blockSize);
- this._inBlock = this._iv.slice(0);
- this._partialBytes = 0;
-};
-
-modes.cfb.prototype.encrypt = function(input, output, finish) {
- // not enough input to encrypt
- var inputLength = input.length();
- if(inputLength === 0) {
- return true;
- }
-
- // encrypt block
- this.cipher.encrypt(this._inBlock, this._outBlock);
-
- // handle full block
- if(this._partialBytes === 0 && inputLength >= this.blockSize) {
- // XOR input with output, write input as output
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = input.getInt32() ^ this._outBlock[i];
- output.putInt32(this._inBlock[i]);
- }
- return;
- }
-
- // handle partial block
- var partialBytes = (this.blockSize - inputLength) % this.blockSize;
- if(partialBytes > 0) {
- partialBytes = this.blockSize - partialBytes;
- }
-
- // XOR input with output, write input as partial output
- this._partialOutput.clear();
- for(var i = 0; i < this._ints; ++i) {
- this._partialBlock[i] = input.getInt32() ^ this._outBlock[i];
- this._partialOutput.putInt32(this._partialBlock[i]);
- }
-
- if(partialBytes > 0) {
- // block still incomplete, restore input buffer
- input.read -= this.blockSize;
- } else {
- // block complete, update input block
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = this._partialBlock[i];
- }
- }
-
- // skip any previous partial bytes
- if(this._partialBytes > 0) {
- this._partialOutput.getBytes(this._partialBytes);
- }
-
- if(partialBytes > 0 && !finish) {
- output.putBytes(this._partialOutput.getBytes(
- partialBytes - this._partialBytes));
- this._partialBytes = partialBytes;
- return true;
- }
-
- output.putBytes(this._partialOutput.getBytes(
- inputLength - this._partialBytes));
- this._partialBytes = 0;
-};
-
-modes.cfb.prototype.decrypt = function(input, output, finish) {
- // not enough input to decrypt
- var inputLength = input.length();
- if(inputLength === 0) {
- return true;
- }
-
- // encrypt block (CFB always uses encryption mode)
- this.cipher.encrypt(this._inBlock, this._outBlock);
-
- // handle full block
- if(this._partialBytes === 0 && inputLength >= this.blockSize) {
- // XOR input with output, write input as output
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = input.getInt32();
- output.putInt32(this._inBlock[i] ^ this._outBlock[i]);
- }
- return;
- }
-
- // handle partial block
- var partialBytes = (this.blockSize - inputLength) % this.blockSize;
- if(partialBytes > 0) {
- partialBytes = this.blockSize - partialBytes;
- }
-
- // XOR input with output, write input as partial output
- this._partialOutput.clear();
- for(var i = 0; i < this._ints; ++i) {
- this._partialBlock[i] = input.getInt32();
- this._partialOutput.putInt32(this._partialBlock[i] ^ this._outBlock[i]);
- }
-
- if(partialBytes > 0) {
- // block still incomplete, restore input buffer
- input.read -= this.blockSize;
- } else {
- // block complete, update input block
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = this._partialBlock[i];
- }
- }
-
- // skip any previous partial bytes
- if(this._partialBytes > 0) {
- this._partialOutput.getBytes(this._partialBytes);
- }
-
- if(partialBytes > 0 && !finish) {
- output.putBytes(this._partialOutput.getBytes(
- partialBytes - this._partialBytes));
- this._partialBytes = partialBytes;
- return true;
- }
-
- output.putBytes(this._partialOutput.getBytes(
- inputLength - this._partialBytes));
- this._partialBytes = 0;
-};
-
-/** Output feedback (OFB) **/
-
-modes.ofb = function(options) {
- options = options || {};
- this.name = 'OFB';
- this.cipher = options.cipher;
- this.blockSize = options.blockSize || 16;
- this._ints = this.blockSize / 4;
- this._inBlock = null;
- this._outBlock = new Array(this._ints);
- this._partialOutput = forge$C.util.createBuffer();
- this._partialBytes = 0;
-};
-
-modes.ofb.prototype.start = function(options) {
- if(!('iv' in options)) {
- throw new Error('Invalid IV parameter.');
- }
- // use IV as first input
- this._iv = transformIV(options.iv, this.blockSize);
- this._inBlock = this._iv.slice(0);
- this._partialBytes = 0;
-};
-
-modes.ofb.prototype.encrypt = function(input, output, finish) {
- // not enough input to encrypt
- var inputLength = input.length();
- if(input.length() === 0) {
- return true;
- }
-
- // encrypt block (OFB always uses encryption mode)
- this.cipher.encrypt(this._inBlock, this._outBlock);
-
- // handle full block
- if(this._partialBytes === 0 && inputLength >= this.blockSize) {
- // XOR input with output and update next input
- for(var i = 0; i < this._ints; ++i) {
- output.putInt32(input.getInt32() ^ this._outBlock[i]);
- this._inBlock[i] = this._outBlock[i];
- }
- return;
- }
-
- // handle partial block
- var partialBytes = (this.blockSize - inputLength) % this.blockSize;
- if(partialBytes > 0) {
- partialBytes = this.blockSize - partialBytes;
- }
-
- // XOR input with output
- this._partialOutput.clear();
- for(var i = 0; i < this._ints; ++i) {
- this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);
- }
-
- if(partialBytes > 0) {
- // block still incomplete, restore input buffer
- input.read -= this.blockSize;
- } else {
- // block complete, update input block
- for(var i = 0; i < this._ints; ++i) {
- this._inBlock[i] = this._outBlock[i];
- }
- }
-
- // skip any previous partial bytes
- if(this._partialBytes > 0) {
- this._partialOutput.getBytes(this._partialBytes);
- }
-
- if(partialBytes > 0 && !finish) {
- output.putBytes(this._partialOutput.getBytes(
- partialBytes - this._partialBytes));
- this._partialBytes = partialBytes;
- return true;
- }
-
- output.putBytes(this._partialOutput.getBytes(
- inputLength - this._partialBytes));
- this._partialBytes = 0;
-};
-
-modes.ofb.prototype.decrypt = modes.ofb.prototype.encrypt;
-
-/** Counter (CTR) **/
-
-modes.ctr = function(options) {
- options = options || {};
- this.name = 'CTR';
- this.cipher = options.cipher;
- this.blockSize = options.blockSize || 16;
- this._ints = this.blockSize / 4;
- this._inBlock = null;
- this._outBlock = new Array(this._ints);
- this._partialOutput = forge$C.util.createBuffer();
- this._partialBytes = 0;
-};
-
-modes.ctr.prototype.start = function(options) {
- if(!('iv' in options)) {
- throw new Error('Invalid IV parameter.');
- }
- // use IV as first input
- this._iv = transformIV(options.iv, this.blockSize);
- this._inBlock = this._iv.slice(0);
- this._partialBytes = 0;
-};
-
-modes.ctr.prototype.encrypt = function(input, output, finish) {
- // not enough input to encrypt
- var inputLength = input.length();
- if(inputLength === 0) {
- return true;
- }
-
- // encrypt block (CTR always uses encryption mode)
- this.cipher.encrypt(this._inBlock, this._outBlock);
-
- // handle full block
- if(this._partialBytes === 0 && inputLength >= this.blockSize) {
- // XOR input with output
- for(var i = 0; i < this._ints; ++i) {
- output.putInt32(input.getInt32() ^ this._outBlock[i]);
- }
- } else {
- // handle partial block
- var partialBytes = (this.blockSize - inputLength) % this.blockSize;
- if(partialBytes > 0) {
- partialBytes = this.blockSize - partialBytes;
- }
-
- // XOR input with output
- this._partialOutput.clear();
- for(var i = 0; i < this._ints; ++i) {
- this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);
- }
-
- if(partialBytes > 0) {
- // block still incomplete, restore input buffer
- input.read -= this.blockSize;
- }
-
- // skip any previous partial bytes
- if(this._partialBytes > 0) {
- this._partialOutput.getBytes(this._partialBytes);
- }
-
- if(partialBytes > 0 && !finish) {
- output.putBytes(this._partialOutput.getBytes(
- partialBytes - this._partialBytes));
- this._partialBytes = partialBytes;
- return true;
- }
-
- output.putBytes(this._partialOutput.getBytes(
- inputLength - this._partialBytes));
- this._partialBytes = 0;
- }
-
- // block complete, increment counter (input block)
- inc32(this._inBlock);
-};
-
-modes.ctr.prototype.decrypt = modes.ctr.prototype.encrypt;
-
-/** Galois/Counter Mode (GCM) **/
-
-modes.gcm = function(options) {
- options = options || {};
- this.name = 'GCM';
- this.cipher = options.cipher;
- this.blockSize = options.blockSize || 16;
- this._ints = this.blockSize / 4;
- this._inBlock = new Array(this._ints);
- this._outBlock = new Array(this._ints);
- this._partialOutput = forge$C.util.createBuffer();
- this._partialBytes = 0;
-
- // R is actually this value concatenated with 120 more zero bits, but
- // we only XOR against R so the other zeros have no effect -- we just
- // apply this value to the first integer in a block
- this._R = 0xE1000000;
-};
-
-modes.gcm.prototype.start = function(options) {
- if(!('iv' in options)) {
- throw new Error('Invalid IV parameter.');
- }
- // ensure IV is a byte buffer
- var iv = forge$C.util.createBuffer(options.iv);
-
- // no ciphered data processed yet
- this._cipherLength = 0;
-
- // default additional data is none
- var additionalData;
- if('additionalData' in options) {
- additionalData = forge$C.util.createBuffer(options.additionalData);
- } else {
- additionalData = forge$C.util.createBuffer();
- }
-
- // default tag length is 128 bits
- if('tagLength' in options) {
- this._tagLength = options.tagLength;
- } else {
- this._tagLength = 128;
- }
-
- // if tag is given, ensure tag matches tag length
- this._tag = null;
- if(options.decrypt) {
- // save tag to check later
- this._tag = forge$C.util.createBuffer(options.tag).getBytes();
- if(this._tag.length !== (this._tagLength / 8)) {
- throw new Error('Authentication tag does not match tag length.');
- }
- }
-
- // create tmp storage for hash calculation
- this._hashBlock = new Array(this._ints);
-
- // no tag generated yet
- this.tag = null;
-
- // generate hash subkey
- // (apply block cipher to "zero" block)
- this._hashSubkey = new Array(this._ints);
- this.cipher.encrypt([0, 0, 0, 0], this._hashSubkey);
-
- // generate table M
- // use 4-bit tables (32 component decomposition of a 16 byte value)
- // 8-bit tables take more space and are known to have security
- // vulnerabilities (in native implementations)
- this.componentBits = 4;
- this._m = this.generateHashTable(this._hashSubkey, this.componentBits);
-
- // Note: support IV length different from 96 bits? (only supporting
- // 96 bits is recommended by NIST SP-800-38D)
- // generate J_0
- var ivLength = iv.length();
- if(ivLength === 12) {
- // 96-bit IV
- this._j0 = [iv.getInt32(), iv.getInt32(), iv.getInt32(), 1];
- } else {
- // IV is NOT 96-bits
- this._j0 = [0, 0, 0, 0];
- while(iv.length() > 0) {
- this._j0 = this.ghash(
- this._hashSubkey, this._j0,
- [iv.getInt32(), iv.getInt32(), iv.getInt32(), iv.getInt32()]);
- }
- this._j0 = this.ghash(
- this._hashSubkey, this._j0, [0, 0].concat(from64To32(ivLength * 8)));
- }
-
- // generate ICB (initial counter block)
- this._inBlock = this._j0.slice(0);
- inc32(this._inBlock);
- this._partialBytes = 0;
-
- // consume authentication data
- additionalData = forge$C.util.createBuffer(additionalData);
- // save additional data length as a BE 64-bit number
- this._aDataLength = from64To32(additionalData.length() * 8);
- // pad additional data to 128 bit (16 byte) block size
- var overflow = additionalData.length() % this.blockSize;
- if(overflow) {
- additionalData.fillWithByte(0, this.blockSize - overflow);
- }
- this._s = [0, 0, 0, 0];
- while(additionalData.length() > 0) {
- this._s = this.ghash(this._hashSubkey, this._s, [
- additionalData.getInt32(),
- additionalData.getInt32(),
- additionalData.getInt32(),
- additionalData.getInt32()
- ]);
- }
-};
-
-modes.gcm.prototype.encrypt = function(input, output, finish) {
- // not enough input to encrypt
- var inputLength = input.length();
- if(inputLength === 0) {
- return true;
- }
-
- // encrypt block
- this.cipher.encrypt(this._inBlock, this._outBlock);
-
- // handle full block
- if(this._partialBytes === 0 && inputLength >= this.blockSize) {
- // XOR input with output
- for(var i = 0; i < this._ints; ++i) {
- output.putInt32(this._outBlock[i] ^= input.getInt32());
- }
- this._cipherLength += this.blockSize;
- } else {
- // handle partial block
- var partialBytes = (this.blockSize - inputLength) % this.blockSize;
- if(partialBytes > 0) {
- partialBytes = this.blockSize - partialBytes;
- }
-
- // XOR input with output
- this._partialOutput.clear();
- for(var i = 0; i < this._ints; ++i) {
- this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);
- }
-
- if(partialBytes <= 0 || finish) {
- // handle overflow prior to hashing
- if(finish) {
- // get block overflow
- var overflow = inputLength % this.blockSize;
- this._cipherLength += overflow;
- // truncate for hash function
- this._partialOutput.truncate(this.blockSize - overflow);
- } else {
- this._cipherLength += this.blockSize;
- }
-
- // get output block for hashing
- for(var i = 0; i < this._ints; ++i) {
- this._outBlock[i] = this._partialOutput.getInt32();
- }
- this._partialOutput.read -= this.blockSize;
- }
-
- // skip any previous partial bytes
- if(this._partialBytes > 0) {
- this._partialOutput.getBytes(this._partialBytes);
- }
-
- if(partialBytes > 0 && !finish) {
- // block still incomplete, restore input buffer, get partial output,
- // and return early
- input.read -= this.blockSize;
- output.putBytes(this._partialOutput.getBytes(
- partialBytes - this._partialBytes));
- this._partialBytes = partialBytes;
- return true;
- }
-
- output.putBytes(this._partialOutput.getBytes(
- inputLength - this._partialBytes));
- this._partialBytes = 0;
- }
-
- // update hash block S
- this._s = this.ghash(this._hashSubkey, this._s, this._outBlock);
-
- // increment counter (input block)
- inc32(this._inBlock);
-};
-
-modes.gcm.prototype.decrypt = function(input, output, finish) {
- // not enough input to decrypt
- var inputLength = input.length();
- if(inputLength < this.blockSize && !(finish && inputLength > 0)) {
- return true;
- }
-
- // encrypt block (GCM always uses encryption mode)
- this.cipher.encrypt(this._inBlock, this._outBlock);
-
- // increment counter (input block)
- inc32(this._inBlock);
-
- // update hash block S
- this._hashBlock[0] = input.getInt32();
- this._hashBlock[1] = input.getInt32();
- this._hashBlock[2] = input.getInt32();
- this._hashBlock[3] = input.getInt32();
- this._s = this.ghash(this._hashSubkey, this._s, this._hashBlock);
-
- // XOR hash input with output
- for(var i = 0; i < this._ints; ++i) {
- output.putInt32(this._outBlock[i] ^ this._hashBlock[i]);
- }
-
- // increment cipher data length
- if(inputLength < this.blockSize) {
- this._cipherLength += inputLength % this.blockSize;
- } else {
- this._cipherLength += this.blockSize;
- }
-};
-
-modes.gcm.prototype.afterFinish = function(output, options) {
- var rval = true;
-
- // handle overflow
- if(options.decrypt && options.overflow) {
- output.truncate(this.blockSize - options.overflow);
- }
-
- // handle authentication tag
- this.tag = forge$C.util.createBuffer();
-
- // concatenate additional data length with cipher length
- var lengths = this._aDataLength.concat(from64To32(this._cipherLength * 8));
-
- // include lengths in hash
- this._s = this.ghash(this._hashSubkey, this._s, lengths);
-
- // do GCTR(J_0, S)
- var tag = [];
- this.cipher.encrypt(this._j0, tag);
- for(var i = 0; i < this._ints; ++i) {
- this.tag.putInt32(this._s[i] ^ tag[i]);
- }
-
- // trim tag to length
- this.tag.truncate(this.tag.length() % (this._tagLength / 8));
-
- // check authentication tag
- if(options.decrypt && this.tag.bytes() !== this._tag) {
- rval = false;
- }
-
- return rval;
-};
-
-/**
- * See NIST SP-800-38D 6.3 (Algorithm 1). This function performs Galois
- * field multiplication. The field, GF(2^128), is defined by the polynomial:
- *
- * x^128 + x^7 + x^2 + x + 1
- *
- * Which is represented in little-endian binary form as: 11100001 (0xe1). When
- * the value of a coefficient is 1, a bit is set. The value R, is the
- * concatenation of this value and 120 zero bits, yielding a 128-bit value
- * which matches the block size.
- *
- * This function will multiply two elements (vectors of bytes), X and Y, in
- * the field GF(2^128). The result is initialized to zero. For each bit of
- * X (out of 128), x_i, if x_i is set, then the result is multiplied (XOR'd)
- * by the current value of Y. For each bit, the value of Y will be raised by
- * a power of x (multiplied by the polynomial x). This can be achieved by
- * shifting Y once to the right. If the current value of Y, prior to being
- * multiplied by x, has 0 as its LSB, then it is a 127th degree polynomial.
- * Otherwise, we must divide by R after shifting to find the remainder.
- *
- * @param x the first block to multiply by the second.
- * @param y the second block to multiply by the first.
- *
- * @return the block result of the multiplication.
- */
-modes.gcm.prototype.multiply = function(x, y) {
- var z_i = [0, 0, 0, 0];
- var v_i = y.slice(0);
-
- // calculate Z_128 (block has 128 bits)
- for(var i = 0; i < 128; ++i) {
- // if x_i is 0, Z_{i+1} = Z_i (unchanged)
- // else Z_{i+1} = Z_i ^ V_i
- // get x_i by finding 32-bit int position, then left shift 1 by remainder
- var x_i = x[(i / 32) | 0] & (1 << (31 - i % 32));
- if(x_i) {
- z_i[0] ^= v_i[0];
- z_i[1] ^= v_i[1];
- z_i[2] ^= v_i[2];
- z_i[3] ^= v_i[3];
- }
-
- // if LSB(V_i) is 1, V_i = V_i >> 1
- // else V_i = (V_i >> 1) ^ R
- this.pow(v_i, v_i);
- }
-
- return z_i;
-};
-
-modes.gcm.prototype.pow = function(x, out) {
- // if LSB(x) is 1, x = x >>> 1
- // else x = (x >>> 1) ^ R
- var lsb = x[3] & 1;
-
- // always do x >>> 1:
- // starting with the rightmost integer, shift each integer to the right
- // one bit, pulling in the bit from the integer to the left as its top
- // most bit (do this for the last 3 integers)
- for(var i = 3; i > 0; --i) {
- out[i] = (x[i] >>> 1) | ((x[i - 1] & 1) << 31);
- }
- // shift the first integer normally
- out[0] = x[0] >>> 1;
-
- // if lsb was not set, then polynomial had a degree of 127 and doesn't
- // need to divided; otherwise, XOR with R to find the remainder; we only
- // need to XOR the first integer since R technically ends w/120 zero bits
- if(lsb) {
- out[0] ^= this._R;
- }
-};
-
-modes.gcm.prototype.tableMultiply = function(x) {
- // assumes 4-bit tables are used
- var z = [0, 0, 0, 0];
- for(var i = 0; i < 32; ++i) {
- var idx = (i / 8) | 0;
- var x_i = (x[idx] >>> ((7 - (i % 8)) * 4)) & 0xF;
- var ah = this._m[i][x_i];
- z[0] ^= ah[0];
- z[1] ^= ah[1];
- z[2] ^= ah[2];
- z[3] ^= ah[3];
- }
- return z;
-};
-
-/**
- * A continuing version of the GHASH algorithm that operates on a single
- * block. The hash block, last hash value (Ym) and the new block to hash
- * are given.
- *
- * @param h the hash block.
- * @param y the previous value for Ym, use [0, 0, 0, 0] for a new hash.
- * @param x the block to hash.
- *
- * @return the hashed value (Ym).
- */
-modes.gcm.prototype.ghash = function(h, y, x) {
- y[0] ^= x[0];
- y[1] ^= x[1];
- y[2] ^= x[2];
- y[3] ^= x[3];
- return this.tableMultiply(y);
- //return this.multiply(y, h);
-};
-
-/**
- * Precomputes a table for multiplying against the hash subkey. This
- * mechanism provides a substantial speed increase over multiplication
- * performed without a table. The table-based multiplication this table is
- * for solves X * H by multiplying each component of X by H and then
- * composing the results together using XOR.
- *
- * This function can be used to generate tables with different bit sizes
- * for the components, however, this implementation assumes there are
- * 32 components of X (which is a 16 byte vector), therefore each component
- * takes 4-bits (so the table is constructed with bits=4).
- *
- * @param h the hash subkey.
- * @param bits the bit size for a component.
- */
-modes.gcm.prototype.generateHashTable = function(h, bits) {
- // TODO: There are further optimizations that would use only the
- // first table M_0 (or some variant) along with a remainder table;
- // this can be explored in the future
- var multiplier = 8 / bits;
- var perInt = 4 * multiplier;
- var size = 16 * multiplier;
- var m = new Array(size);
- for(var i = 0; i < size; ++i) {
- var tmp = [0, 0, 0, 0];
- var idx = (i / perInt) | 0;
- var shft = ((perInt - 1 - (i % perInt)) * bits);
- tmp[idx] = (1 << (bits - 1)) << shft;
- m[i] = this.generateSubHashTable(this.multiply(tmp, h), bits);
- }
- return m;
-};
-
-/**
- * Generates a table for multiplying against the hash subkey for one
- * particular component (out of all possible component values).
- *
- * @param mid the pre-multiplied value for the middle key of the table.
- * @param bits the bit size for a component.
- */
-modes.gcm.prototype.generateSubHashTable = function(mid, bits) {
- // compute the table quickly by minimizing the number of
- // POW operations -- they only need to be performed for powers of 2,
- // all other entries can be composed from those powers using XOR
- var size = 1 << bits;
- var half = size >>> 1;
- var m = new Array(size);
- m[half] = mid.slice(0);
- var i = half >>> 1;
- while(i > 0) {
- // raise m0[2 * i] and store in m0[i]
- this.pow(m[2 * i], m[i] = []);
- i >>= 1;
- }
- i = 2;
- while(i < half) {
- for(var j = 1; j < i; ++j) {
- var m_i = m[i];
- var m_j = m[j];
- m[i + j] = [
- m_i[0] ^ m_j[0],
- m_i[1] ^ m_j[1],
- m_i[2] ^ m_j[2],
- m_i[3] ^ m_j[3]
- ];
- }
- i *= 2;
- }
- m[0] = [0, 0, 0, 0];
- /* Note: We could avoid storing these by doing composition during multiply
- calculate top half using composition by speed is preferred. */
- for(i = half + 1; i < size; ++i) {
- var c = m[i ^ half];
- m[i] = [mid[0] ^ c[0], mid[1] ^ c[1], mid[2] ^ c[2], mid[3] ^ c[3]];
- }
- return m;
-};
-
-/** Utility functions */
-
-function transformIV(iv, blockSize) {
- if(typeof iv === 'string') {
- // convert iv string into byte buffer
- iv = forge$C.util.createBuffer(iv);
- }
-
- if(forge$C.util.isArray(iv) && iv.length > 4) {
- // convert iv byte array into byte buffer
- var tmp = iv;
- iv = forge$C.util.createBuffer();
- for(var i = 0; i < tmp.length; ++i) {
- iv.putByte(tmp[i]);
- }
- }
-
- if(iv.length() < blockSize) {
- throw new Error(
- 'Invalid IV length; got ' + iv.length() +
- ' bytes and expected ' + blockSize + ' bytes.');
- }
-
- if(!forge$C.util.isArray(iv)) {
- // convert iv byte buffer into 32-bit integer array
- var ints = [];
- var blocks = blockSize / 4;
- for(var i = 0; i < blocks; ++i) {
- ints.push(iv.getInt32());
- }
- iv = ints;
- }
-
- return iv;
-}
-
-function inc32(block) {
- // increment last 32 bits of block only
- block[block.length - 1] = (block[block.length - 1] + 1) & 0xFFFFFFFF;
-}
-
-function from64To32(num) {
- // convert 64-bit number to two BE Int32s
- return [(num / 0x100000000) | 0, num & 0xFFFFFFFF];
-}
-
-/**
- * Advanced Encryption Standard (AES) implementation.
- *
- * This implementation is based on the public domain library 'jscrypto' which
- * was written by:
- *
- * Emily Stark (estark@stanford.edu)
- * Mike Hamburg (mhamburg@stanford.edu)
- * Dan Boneh (dabo@cs.stanford.edu)
- *
- * Parts of this code are based on the OpenSSL implementation of AES:
- * http://www.openssl.org
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- */
-
-var forge$B = forge$F;
-
-
-
-
-/* AES API */
-forge$B.aes = forge$B.aes || {};
-
-/**
- * Deprecated. Instead, use:
- *
- * var cipher = forge.cipher.createCipher('AES-<mode>', key);
- * cipher.start({iv: iv});
- *
- * Creates an AES cipher object to encrypt data using the given symmetric key.
- * The output will be stored in the 'output' member of the returned cipher.
- *
- * The key and iv may be given as a string of bytes, an array of bytes,
- * a byte buffer, or an array of 32-bit words.
- *
- * @param key the symmetric key to use.
- * @param iv the initialization vector to use.
- * @param output the buffer to write to, null to create one.
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge$B.aes.startEncrypting = function(key, iv, output, mode) {
- var cipher = _createCipher$1({
- key: key,
- output: output,
- decrypt: false,
- mode: mode
- });
- cipher.start(iv);
- return cipher;
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var cipher = forge.cipher.createCipher('AES-<mode>', key);
- *
- * Creates an AES cipher object to encrypt data using the given symmetric key.
- *
- * The key may be given as a string of bytes, an array of bytes, a
- * byte buffer, or an array of 32-bit words.
- *
- * @param key the symmetric key to use.
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge$B.aes.createEncryptionCipher = function(key, mode) {
- return _createCipher$1({
- key: key,
- output: null,
- decrypt: false,
- mode: mode
- });
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var decipher = forge.cipher.createDecipher('AES-<mode>', key);
- * decipher.start({iv: iv});
- *
- * Creates an AES cipher object to decrypt data using the given symmetric key.
- * The output will be stored in the 'output' member of the returned cipher.
- *
- * The key and iv may be given as a string of bytes, an array of bytes,
- * a byte buffer, or an array of 32-bit words.
- *
- * @param key the symmetric key to use.
- * @param iv the initialization vector to use.
- * @param output the buffer to write to, null to create one.
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge$B.aes.startDecrypting = function(key, iv, output, mode) {
- var cipher = _createCipher$1({
- key: key,
- output: output,
- decrypt: true,
- mode: mode
- });
- cipher.start(iv);
- return cipher;
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var decipher = forge.cipher.createDecipher('AES-<mode>', key);
- *
- * Creates an AES cipher object to decrypt data using the given symmetric key.
- *
- * The key may be given as a string of bytes, an array of bytes, a
- * byte buffer, or an array of 32-bit words.
- *
- * @param key the symmetric key to use.
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge$B.aes.createDecryptionCipher = function(key, mode) {
- return _createCipher$1({
- key: key,
- output: null,
- decrypt: true,
- mode: mode
- });
-};
-
-/**
- * Creates a new AES cipher algorithm object.
- *
- * @param name the name of the algorithm.
- * @param mode the mode factory function.
- *
- * @return the AES algorithm object.
- */
-forge$B.aes.Algorithm = function(name, mode) {
- if(!init) {
- initialize();
- }
- var self = this;
- self.name = name;
- self.mode = new mode({
- blockSize: 16,
- cipher: {
- encrypt: function(inBlock, outBlock) {
- return _updateBlock$1(self._w, inBlock, outBlock, false);
- },
- decrypt: function(inBlock, outBlock) {
- return _updateBlock$1(self._w, inBlock, outBlock, true);
- }
- }
- });
- self._init = false;
-};
-
-/**
- * Initializes this AES algorithm by expanding its key.
- *
- * @param options the options to use.
- * key the key to use with this algorithm.
- * decrypt true if the algorithm should be initialized for decryption,
- * false for encryption.
- */
-forge$B.aes.Algorithm.prototype.initialize = function(options) {
- if(this._init) {
- return;
- }
-
- var key = options.key;
- var tmp;
-
- /* Note: The key may be a string of bytes, an array of bytes, a byte
- buffer, or an array of 32-bit integers. If the key is in bytes, then
- it must be 16, 24, or 32 bytes in length. If it is in 32-bit
- integers, it must be 4, 6, or 8 integers long. */
-
- if(typeof key === 'string' &&
- (key.length === 16 || key.length === 24 || key.length === 32)) {
- // convert key string into byte buffer
- key = forge$B.util.createBuffer(key);
- } else if(forge$B.util.isArray(key) &&
- (key.length === 16 || key.length === 24 || key.length === 32)) {
- // convert key integer array into byte buffer
- tmp = key;
- key = forge$B.util.createBuffer();
- for(var i = 0; i < tmp.length; ++i) {
- key.putByte(tmp[i]);
- }
- }
-
- // convert key byte buffer into 32-bit integer array
- if(!forge$B.util.isArray(key)) {
- tmp = key;
- key = [];
-
- // key lengths of 16, 24, 32 bytes allowed
- var len = tmp.length();
- if(len === 16 || len === 24 || len === 32) {
- len = len >>> 2;
- for(var i = 0; i < len; ++i) {
- key.push(tmp.getInt32());
- }
- }
- }
-
- // key must be an array of 32-bit integers by now
- if(!forge$B.util.isArray(key) ||
- !(key.length === 4 || key.length === 6 || key.length === 8)) {
- throw new Error('Invalid key parameter.');
- }
-
- // encryption operation is always used for these modes
- var mode = this.mode.name;
- var encryptOp = (['CFB', 'OFB', 'CTR', 'GCM'].indexOf(mode) !== -1);
-
- // do key expansion
- this._w = _expandKey(key, options.decrypt && !encryptOp);
- this._init = true;
-};
-
-/**
- * Expands a key. Typically only used for testing.
- *
- * @param key the symmetric key to expand, as an array of 32-bit words.
- * @param decrypt true to expand for decryption, false for encryption.
- *
- * @return the expanded key.
- */
-forge$B.aes._expandKey = function(key, decrypt) {
- if(!init) {
- initialize();
- }
- return _expandKey(key, decrypt);
-};
-
-/**
- * Updates a single block. Typically only used for testing.
- *
- * @param w the expanded key to use.
- * @param input an array of block-size 32-bit words.
- * @param output an array of block-size 32-bit words.
- * @param decrypt true to decrypt, false to encrypt.
- */
-forge$B.aes._updateBlock = _updateBlock$1;
-
-/** Register AES algorithms **/
-
-registerAlgorithm$1('AES-ECB', forge$B.cipher.modes.ecb);
-registerAlgorithm$1('AES-CBC', forge$B.cipher.modes.cbc);
-registerAlgorithm$1('AES-CFB', forge$B.cipher.modes.cfb);
-registerAlgorithm$1('AES-OFB', forge$B.cipher.modes.ofb);
-registerAlgorithm$1('AES-CTR', forge$B.cipher.modes.ctr);
-registerAlgorithm$1('AES-GCM', forge$B.cipher.modes.gcm);
-
-function registerAlgorithm$1(name, mode) {
- var factory = function() {
- return new forge$B.aes.Algorithm(name, mode);
- };
- forge$B.cipher.registerAlgorithm(name, factory);
-}
-
-/** AES implementation **/
-
-var init = false; // not yet initialized
-var Nb = 4; // number of words comprising the state (AES = 4)
-var sbox; // non-linear substitution table used in key expansion
-var isbox; // inversion of sbox
-var rcon; // round constant word array
-var mix; // mix-columns table
-var imix; // inverse mix-columns table
-
-/**
- * Performs initialization, ie: precomputes tables to optimize for speed.
- *
- * One way to understand how AES works is to imagine that 'addition' and
- * 'multiplication' are interfaces that require certain mathematical
- * properties to hold true (ie: they are associative) but they might have
- * different implementations and produce different kinds of results ...
- * provided that their mathematical properties remain true. AES defines
- * its own methods of addition and multiplication but keeps some important
- * properties the same, ie: associativity and distributivity. The
- * explanation below tries to shed some light on how AES defines addition
- * and multiplication of bytes and 32-bit words in order to perform its
- * encryption and decryption algorithms.
- *
- * The basics:
- *
- * The AES algorithm views bytes as binary representations of polynomials
- * that have either 1 or 0 as the coefficients. It defines the addition
- * or subtraction of two bytes as the XOR operation. It also defines the
- * multiplication of two bytes as a finite field referred to as GF(2^8)
- * (Note: 'GF' means "Galois Field" which is a field that contains a finite
- * number of elements so GF(2^8) has 256 elements).
- *
- * This means that any two bytes can be represented as binary polynomials;
- * when they multiplied together and modularly reduced by an irreducible
- * polynomial of the 8th degree, the results are the field GF(2^8). The
- * specific irreducible polynomial that AES uses in hexadecimal is 0x11b.
- * This multiplication is associative with 0x01 as the identity:
- *
- * (b * 0x01 = GF(b, 0x01) = b).
- *
- * The operation GF(b, 0x02) can be performed at the byte level by left
- * shifting b once and then XOR'ing it (to perform the modular reduction)
- * with 0x11b if b is >= 128. Repeated application of the multiplication
- * of 0x02 can be used to implement the multiplication of any two bytes.
- *
- * For instance, multiplying 0x57 and 0x13, denoted as GF(0x57, 0x13), can
- * be performed by factoring 0x13 into 0x01, 0x02, and 0x10. Then these
- * factors can each be multiplied by 0x57 and then added together. To do
- * the multiplication, values for 0x57 multiplied by each of these 3 factors
- * can be precomputed and stored in a table. To add them, the values from
- * the table are XOR'd together.
- *
- * AES also defines addition and multiplication of words, that is 4-byte
- * numbers represented as polynomials of 3 degrees where the coefficients
- * are the values of the bytes.
- *
- * The word [a0, a1, a2, a3] is a polynomial a3x^3 + a2x^2 + a1x + a0.
- *
- * Addition is performed by XOR'ing like powers of x. Multiplication
- * is performed in two steps, the first is an algebriac expansion as
- * you would do normally (where addition is XOR). But the result is
- * a polynomial larger than 3 degrees and thus it cannot fit in a word. So
- * next the result is modularly reduced by an AES-specific polynomial of
- * degree 4 which will always produce a polynomial of less than 4 degrees
- * such that it will fit in a word. In AES, this polynomial is x^4 + 1.
- *
- * The modular product of two polynomials 'a' and 'b' is thus:
- *
- * d(x) = d3x^3 + d2x^2 + d1x + d0
- * with
- * d0 = GF(a0, b0) ^ GF(a3, b1) ^ GF(a2, b2) ^ GF(a1, b3)
- * d1 = GF(a1, b0) ^ GF(a0, b1) ^ GF(a3, b2) ^ GF(a2, b3)
- * d2 = GF(a2, b0) ^ GF(a1, b1) ^ GF(a0, b2) ^ GF(a3, b3)
- * d3 = GF(a3, b0) ^ GF(a2, b1) ^ GF(a1, b2) ^ GF(a0, b3)
- *
- * As a matrix:
- *
- * [d0] = [a0 a3 a2 a1][b0]
- * [d1] [a1 a0 a3 a2][b1]
- * [d2] [a2 a1 a0 a3][b2]
- * [d3] [a3 a2 a1 a0][b3]
- *
- * Special polynomials defined by AES (0x02 == {02}):
- * a(x) = {03}x^3 + {01}x^2 + {01}x + {02}
- * a^-1(x) = {0b}x^3 + {0d}x^2 + {09}x + {0e}.
- *
- * These polynomials are used in the MixColumns() and InverseMixColumns()
- * operations, respectively, to cause each element in the state to affect
- * the output (referred to as diffusing).
- *
- * RotWord() uses: a0 = a1 = a2 = {00} and a3 = {01}, which is the
- * polynomial x3.
- *
- * The ShiftRows() method modifies the last 3 rows in the state (where
- * the state is 4 words with 4 bytes per word) by shifting bytes cyclically.
- * The 1st byte in the second row is moved to the end of the row. The 1st
- * and 2nd bytes in the third row are moved to the end of the row. The 1st,
- * 2nd, and 3rd bytes are moved in the fourth row.
- *
- * More details on how AES arithmetic works:
- *
- * In the polynomial representation of binary numbers, XOR performs addition
- * and subtraction and multiplication in GF(2^8) denoted as GF(a, b)
- * corresponds with the multiplication of polynomials modulo an irreducible
- * polynomial of degree 8. In other words, for AES, GF(a, b) will multiply
- * polynomial 'a' with polynomial 'b' and then do a modular reduction by
- * an AES-specific irreducible polynomial of degree 8.
- *
- * A polynomial is irreducible if its only divisors are one and itself. For
- * the AES algorithm, this irreducible polynomial is:
- *
- * m(x) = x^8 + x^4 + x^3 + x + 1,
- *
- * or {01}{1b} in hexadecimal notation, where each coefficient is a bit:
- * 100011011 = 283 = 0x11b.
- *
- * For example, GF(0x57, 0x83) = 0xc1 because
- *
- * 0x57 = 87 = 01010111 = x^6 + x^4 + x^2 + x + 1
- * 0x85 = 131 = 10000101 = x^7 + x + 1
- *
- * (x^6 + x^4 + x^2 + x + 1) * (x^7 + x + 1)
- * = x^13 + x^11 + x^9 + x^8 + x^7 +
- * x^7 + x^5 + x^3 + x^2 + x +
- * x^6 + x^4 + x^2 + x + 1
- * = x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 = y
- * y modulo (x^8 + x^4 + x^3 + x + 1)
- * = x^7 + x^6 + 1.
- *
- * The modular reduction by m(x) guarantees the result will be a binary
- * polynomial of less than degree 8, so that it can fit in a byte.
- *
- * The operation to multiply a binary polynomial b with x (the polynomial
- * x in binary representation is 00000010) is:
- *
- * b_7x^8 + b_6x^7 + b_5x^6 + b_4x^5 + b_3x^4 + b_2x^3 + b_1x^2 + b_0x^1
- *
- * To get GF(b, x) we must reduce that by m(x). If b_7 is 0 (that is the
- * most significant bit is 0 in b) then the result is already reduced. If
- * it is 1, then we can reduce it by subtracting m(x) via an XOR.
- *
- * It follows that multiplication by x (00000010 or 0x02) can be implemented
- * by performing a left shift followed by a conditional bitwise XOR with
- * 0x1b. This operation on bytes is denoted by xtime(). Multiplication by
- * higher powers of x can be implemented by repeated application of xtime().
- *
- * By adding intermediate results, multiplication by any constant can be
- * implemented. For instance:
- *
- * GF(0x57, 0x13) = 0xfe because:
- *
- * xtime(b) = (b & 128) ? (b << 1 ^ 0x11b) : (b << 1)
- *
- * Note: We XOR with 0x11b instead of 0x1b because in javascript our
- * datatype for b can be larger than 1 byte, so a left shift will not
- * automatically eliminate bits that overflow a byte ... by XOR'ing the
- * overflow bit with 1 (the extra one from 0x11b) we zero it out.
- *
- * GF(0x57, 0x02) = xtime(0x57) = 0xae
- * GF(0x57, 0x04) = xtime(0xae) = 0x47
- * GF(0x57, 0x08) = xtime(0x47) = 0x8e
- * GF(0x57, 0x10) = xtime(0x8e) = 0x07
- *
- * GF(0x57, 0x13) = GF(0x57, (0x01 ^ 0x02 ^ 0x10))
- *
- * And by the distributive property (since XOR is addition and GF() is
- * multiplication):
- *
- * = GF(0x57, 0x01) ^ GF(0x57, 0x02) ^ GF(0x57, 0x10)
- * = 0x57 ^ 0xae ^ 0x07
- * = 0xfe.
- */
-function initialize() {
- init = true;
-
- /* Populate the Rcon table. These are the values given by
- [x^(i-1),{00},{00},{00}] where x^(i-1) are powers of x (and x = 0x02)
- in the field of GF(2^8), where i starts at 1.
-
- rcon[0] = [0x00, 0x00, 0x00, 0x00]
- rcon[1] = [0x01, 0x00, 0x00, 0x00] 2^(1-1) = 2^0 = 1
- rcon[2] = [0x02, 0x00, 0x00, 0x00] 2^(2-1) = 2^1 = 2
- ...
- rcon[9] = [0x1B, 0x00, 0x00, 0x00] 2^(9-1) = 2^8 = 0x1B
- rcon[10] = [0x36, 0x00, 0x00, 0x00] 2^(10-1) = 2^9 = 0x36
-
- We only store the first byte because it is the only one used.
- */
- rcon = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36];
-
- // compute xtime table which maps i onto GF(i, 0x02)
- var xtime = new Array(256);
- for(var i = 0; i < 128; ++i) {
- xtime[i] = i << 1;
- xtime[i + 128] = (i + 128) << 1 ^ 0x11B;
- }
-
- // compute all other tables
- sbox = new Array(256);
- isbox = new Array(256);
- mix = new Array(4);
- imix = new Array(4);
- for(var i = 0; i < 4; ++i) {
- mix[i] = new Array(256);
- imix[i] = new Array(256);
- }
- var e = 0, ei = 0, e2, e4, e8, sx, sx2, me, ime;
- for(var i = 0; i < 256; ++i) {
- /* We need to generate the SubBytes() sbox and isbox tables so that
- we can perform byte substitutions. This requires us to traverse
- all of the elements in GF, find their multiplicative inverses,
- and apply to each the following affine transformation:
-
- bi' = bi ^ b(i + 4) mod 8 ^ b(i + 5) mod 8 ^ b(i + 6) mod 8 ^
- b(i + 7) mod 8 ^ ci
- for 0 <= i < 8, where bi is the ith bit of the byte, and ci is the
- ith bit of a byte c with the value {63} or {01100011}.
-
- It is possible to traverse every possible value in a Galois field
- using what is referred to as a 'generator'. There are many
- generators (128 out of 256): 3,5,6,9,11,82 to name a few. To fully
- traverse GF we iterate 255 times, multiplying by our generator
- each time.
-
- On each iteration we can determine the multiplicative inverse for
- the current element.
-
- Suppose there is an element in GF 'e'. For a given generator 'g',
- e = g^x. The multiplicative inverse of e is g^(255 - x). It turns
- out that if use the inverse of a generator as another generator
- it will produce all of the corresponding multiplicative inverses
- at the same time. For this reason, we choose 5 as our inverse
- generator because it only requires 2 multiplies and 1 add and its
- inverse, 82, requires relatively few operations as well.
-
- In order to apply the affine transformation, the multiplicative
- inverse 'ei' of 'e' can be repeatedly XOR'd (4 times) with a
- bit-cycling of 'ei'. To do this 'ei' is first stored in 's' and
- 'x'. Then 's' is left shifted and the high bit of 's' is made the
- low bit. The resulting value is stored in 's'. Then 'x' is XOR'd
- with 's' and stored in 'x'. On each subsequent iteration the same
- operation is performed. When 4 iterations are complete, 'x' is
- XOR'd with 'c' (0x63) and the transformed value is stored in 'x'.
- For example:
-
- s = 01000001
- x = 01000001
-
- iteration 1: s = 10000010, x ^= s
- iteration 2: s = 00000101, x ^= s
- iteration 3: s = 00001010, x ^= s
- iteration 4: s = 00010100, x ^= s
- x ^= 0x63
-
- This can be done with a loop where s = (s << 1) | (s >> 7). However,
- it can also be done by using a single 16-bit (in this case 32-bit)
- number 'sx'. Since XOR is an associative operation, we can set 'sx'
- to 'ei' and then XOR it with 'sx' left-shifted 1,2,3, and 4 times.
- The most significant bits will flow into the high 8 bit positions
- and be correctly XOR'd with one another. All that remains will be
- to cycle the high 8 bits by XOR'ing them all with the lower 8 bits
- afterwards.
-
- At the same time we're populating sbox and isbox we can precompute
- the multiplication we'll need to do to do MixColumns() later.
- */
-
- // apply affine transformation
- sx = ei ^ (ei << 1) ^ (ei << 2) ^ (ei << 3) ^ (ei << 4);
- sx = (sx >> 8) ^ (sx & 255) ^ 0x63;
-
- // update tables
- sbox[e] = sx;
- isbox[sx] = e;
-
- /* Mixing columns is done using matrix multiplication. The columns
- that are to be mixed are each a single word in the current state.
- The state has Nb columns (4 columns). Therefore each column is a
- 4 byte word. So to mix the columns in a single column 'c' where
- its rows are r0, r1, r2, and r3, we use the following matrix
- multiplication:
-
- [2 3 1 1]*[r0,c]=[r'0,c]
- [1 2 3 1] [r1,c] [r'1,c]
- [1 1 2 3] [r2,c] [r'2,c]
- [3 1 1 2] [r3,c] [r'3,c]
-
- r0, r1, r2, and r3 are each 1 byte of one of the words in the
- state (a column). To do matrix multiplication for each mixed
- column c' we multiply the corresponding row from the left matrix
- with the corresponding column from the right matrix. In total, we
- get 4 equations:
-
- r0,c' = 2*r0,c + 3*r1,c + 1*r2,c + 1*r3,c
- r1,c' = 1*r0,c + 2*r1,c + 3*r2,c + 1*r3,c
- r2,c' = 1*r0,c + 1*r1,c + 2*r2,c + 3*r3,c
- r3,c' = 3*r0,c + 1*r1,c + 1*r2,c + 2*r3,c
-
- As usual, the multiplication is as previously defined and the
- addition is XOR. In order to optimize mixing columns we can store
- the multiplication results in tables. If you think of the whole
- column as a word (it might help to visualize by mentally rotating
- the equations above by counterclockwise 90 degrees) then you can
- see that it would be useful to map the multiplications performed on
- each byte (r0, r1, r2, r3) onto a word as well. For instance, we
- could map 2*r0,1*r0,1*r0,3*r0 onto a word by storing 2*r0 in the
- highest 8 bits and 3*r0 in the lowest 8 bits (with the other two
- respectively in the middle). This means that a table can be
- constructed that uses r0 as an index to the word. We can do the
- same with r1, r2, and r3, creating a total of 4 tables.
-
- To construct a full c', we can just look up each byte of c in
- their respective tables and XOR the results together.
-
- Also, to build each table we only have to calculate the word
- for 2,1,1,3 for every byte ... which we can do on each iteration
- of this loop since we will iterate over every byte. After we have
- calculated 2,1,1,3 we can get the results for the other tables
- by cycling the byte at the end to the beginning. For instance
- we can take the result of table 2,1,1,3 and produce table 3,2,1,1
- by moving the right most byte to the left most position just like
- how you can imagine the 3 moved out of 2,1,1,3 and to the front
- to produce 3,2,1,1.
-
- There is another optimization in that the same multiples of
- the current element we need in order to advance our generator
- to the next iteration can be reused in performing the 2,1,1,3
- calculation. We also calculate the inverse mix column tables,
- with e,9,d,b being the inverse of 2,1,1,3.
-
- When we're done, and we need to actually mix columns, the first
- byte of each state word should be put through mix[0] (2,1,1,3),
- the second through mix[1] (3,2,1,1) and so forth. Then they should
- be XOR'd together to produce the fully mixed column.
- */
-
- // calculate mix and imix table values
- sx2 = xtime[sx];
- e2 = xtime[e];
- e4 = xtime[e2];
- e8 = xtime[e4];
- me =
- (sx2 << 24) ^ // 2
- (sx << 16) ^ // 1
- (sx << 8) ^ // 1
- (sx ^ sx2); // 3
- ime =
- (e2 ^ e4 ^ e8) << 24 ^ // E (14)
- (e ^ e8) << 16 ^ // 9
- (e ^ e4 ^ e8) << 8 ^ // D (13)
- (e ^ e2 ^ e8); // B (11)
- // produce each of the mix tables by rotating the 2,1,1,3 value
- for(var n = 0; n < 4; ++n) {
- mix[n][e] = me;
- imix[n][sx] = ime;
- // cycle the right most byte to the left most position
- // ie: 2,1,1,3 becomes 3,2,1,1
- me = me << 24 | me >>> 8;
- ime = ime << 24 | ime >>> 8;
- }
-
- // get next element and inverse
- if(e === 0) {
- // 1 is the inverse of 1
- e = ei = 1;
- } else {
- // e = 2e + 2*2*2*(10e)) = multiply e by 82 (chosen generator)
- // ei = ei + 2*2*ei = multiply ei by 5 (inverse generator)
- e = e2 ^ xtime[xtime[xtime[e2 ^ e8]]];
- ei ^= xtime[xtime[ei]];
- }
- }
-}
-
-/**
- * Generates a key schedule using the AES key expansion algorithm.
- *
- * The AES algorithm takes the Cipher Key, K, and performs a Key Expansion
- * routine to generate a key schedule. The Key Expansion generates a total
- * of Nb*(Nr + 1) words: the algorithm requires an initial set of Nb words,
- * and each of the Nr rounds requires Nb words of key data. The resulting
- * key schedule consists of a linear array of 4-byte words, denoted [wi ],
- * with i in the range 0 <= i < Nb(Nr + 1).
- *
- * KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)
- * AES-128 (Nb=4, Nk=4, Nr=10)
- * AES-192 (Nb=4, Nk=6, Nr=12)
- * AES-256 (Nb=4, Nk=8, Nr=14)
- * Note: Nr=Nk+6.
- *
- * Nb is the number of columns (32-bit words) comprising the State (or
- * number of bytes in a block). For AES, Nb=4.
- *
- * @param key the key to schedule (as an array of 32-bit words).
- * @param decrypt true to modify the key schedule to decrypt, false not to.
- *
- * @return the generated key schedule.
- */
-function _expandKey(key, decrypt) {
- // copy the key's words to initialize the key schedule
- var w = key.slice(0);
-
- /* RotWord() will rotate a word, moving the first byte to the last
- byte's position (shifting the other bytes left).
-
- We will be getting the value of Rcon at i / Nk. 'i' will iterate
- from Nk to (Nb * Nr+1). Nk = 4 (4 byte key), Nb = 4 (4 words in
- a block), Nr = Nk + 6 (10). Therefore 'i' will iterate from
- 4 to 44 (exclusive). Each time we iterate 4 times, i / Nk will
- increase by 1. We use a counter iNk to keep track of this.
- */
-
- // go through the rounds expanding the key
- var temp, iNk = 1;
- var Nk = w.length;
- var Nr1 = Nk + 6 + 1;
- var end = Nb * Nr1;
- for(var i = Nk; i < end; ++i) {
- temp = w[i - 1];
- if(i % Nk === 0) {
- // temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk]
- temp =
- sbox[temp >>> 16 & 255] << 24 ^
- sbox[temp >>> 8 & 255] << 16 ^
- sbox[temp & 255] << 8 ^
- sbox[temp >>> 24] ^ (rcon[iNk] << 24);
- iNk++;
- } else if(Nk > 6 && (i % Nk === 4)) {
- // temp = SubWord(temp)
- temp =
- sbox[temp >>> 24] << 24 ^
- sbox[temp >>> 16 & 255] << 16 ^
- sbox[temp >>> 8 & 255] << 8 ^
- sbox[temp & 255];
- }
- w[i] = w[i - Nk] ^ temp;
- }
-
- /* When we are updating a cipher block we always use the code path for
- encryption whether we are decrypting or not (to shorten code and
- simplify the generation of look up tables). However, because there
- are differences in the decryption algorithm, other than just swapping
- in different look up tables, we must transform our key schedule to
- account for these changes:
-
- 1. The decryption algorithm gets its key rounds in reverse order.
- 2. The decryption algorithm adds the round key before mixing columns
- instead of afterwards.
-
- We don't need to modify our key schedule to handle the first case,
- we can just traverse the key schedule in reverse order when decrypting.
-
- The second case requires a little work.
-
- The tables we built for performing rounds will take an input and then
- perform SubBytes() and MixColumns() or, for the decrypt version,
- InvSubBytes() and InvMixColumns(). But the decrypt algorithm requires
- us to AddRoundKey() before InvMixColumns(). This means we'll need to
- apply some transformations to the round key to inverse-mix its columns
- so they'll be correct for moving AddRoundKey() to after the state has
- had its columns inverse-mixed.
-
- To inverse-mix the columns of the state when we're decrypting we use a
- lookup table that will apply InvSubBytes() and InvMixColumns() at the
- same time. However, the round key's bytes are not inverse-substituted
- in the decryption algorithm. To get around this problem, we can first
- substitute the bytes in the round key so that when we apply the
- transformation via the InvSubBytes()+InvMixColumns() table, it will
- undo our substitution leaving us with the original value that we
- want -- and then inverse-mix that value.
-
- This change will correctly alter our key schedule so that we can XOR
- each round key with our already transformed decryption state. This
- allows us to use the same code path as the encryption algorithm.
-
- We make one more change to the decryption key. Since the decryption
- algorithm runs in reverse from the encryption algorithm, we reverse
- the order of the round keys to avoid having to iterate over the key
- schedule backwards when running the encryption algorithm later in
- decryption mode. In addition to reversing the order of the round keys,
- we also swap each round key's 2nd and 4th rows. See the comments
- section where rounds are performed for more details about why this is
- done. These changes are done inline with the other substitution
- described above.
- */
- if(decrypt) {
- var tmp;
- var m0 = imix[0];
- var m1 = imix[1];
- var m2 = imix[2];
- var m3 = imix[3];
- var wnew = w.slice(0);
- end = w.length;
- for(var i = 0, wi = end - Nb; i < end; i += Nb, wi -= Nb) {
- // do not sub the first or last round key (round keys are Nb
- // words) as no column mixing is performed before they are added,
- // but do change the key order
- if(i === 0 || i === (end - Nb)) {
- wnew[i] = w[wi];
- wnew[i + 1] = w[wi + 3];
- wnew[i + 2] = w[wi + 2];
- wnew[i + 3] = w[wi + 1];
- } else {
- // substitute each round key byte because the inverse-mix
- // table will inverse-substitute it (effectively cancel the
- // substitution because round key bytes aren't sub'd in
- // decryption mode) and swap indexes 3 and 1
- for(var n = 0; n < Nb; ++n) {
- tmp = w[wi + n];
- wnew[i + (3&-n)] =
- m0[sbox[tmp >>> 24]] ^
- m1[sbox[tmp >>> 16 & 255]] ^
- m2[sbox[tmp >>> 8 & 255]] ^
- m3[sbox[tmp & 255]];
- }
- }
- }
- w = wnew;
- }
-
- return w;
-}
-
-/**
- * Updates a single block (16 bytes) using AES. The update will either
- * encrypt or decrypt the block.
- *
- * @param w the key schedule.
- * @param input the input block (an array of 32-bit words).
- * @param output the updated output block.
- * @param decrypt true to decrypt the block, false to encrypt it.
- */
-function _updateBlock$1(w, input, output, decrypt) {
- /*
- Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
- begin
- byte state[4,Nb]
- state = in
- AddRoundKey(state, w[0, Nb-1])
- for round = 1 step 1 to Nr-1
- SubBytes(state)
- ShiftRows(state)
- MixColumns(state)
- AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
- end for
- SubBytes(state)
- ShiftRows(state)
- AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
- out = state
- end
-
- InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
- begin
- byte state[4,Nb]
- state = in
- AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
- for round = Nr-1 step -1 downto 1
- InvShiftRows(state)
- InvSubBytes(state)
- AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
- InvMixColumns(state)
- end for
- InvShiftRows(state)
- InvSubBytes(state)
- AddRoundKey(state, w[0, Nb-1])
- out = state
- end
- */
-
- // Encrypt: AddRoundKey(state, w[0, Nb-1])
- // Decrypt: AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
- var Nr = w.length / 4 - 1;
- var m0, m1, m2, m3, sub;
- if(decrypt) {
- m0 = imix[0];
- m1 = imix[1];
- m2 = imix[2];
- m3 = imix[3];
- sub = isbox;
- } else {
- m0 = mix[0];
- m1 = mix[1];
- m2 = mix[2];
- m3 = mix[3];
- sub = sbox;
- }
- var a, b, c, d, a2, b2, c2;
- a = input[0] ^ w[0];
- b = input[decrypt ? 3 : 1] ^ w[1];
- c = input[2] ^ w[2];
- d = input[decrypt ? 1 : 3] ^ w[3];
- var i = 3;
-
- /* In order to share code we follow the encryption algorithm when both
- encrypting and decrypting. To account for the changes required in the
- decryption algorithm, we use different lookup tables when decrypting
- and use a modified key schedule to account for the difference in the
- order of transformations applied when performing rounds. We also get
- key rounds in reverse order (relative to encryption). */
- for(var round = 1; round < Nr; ++round) {
- /* As described above, we'll be using table lookups to perform the
- column mixing. Each column is stored as a word in the state (the
- array 'input' has one column as a word at each index). In order to
- mix a column, we perform these transformations on each row in c,
- which is 1 byte in each word. The new column for c0 is c'0:
-
- m0 m1 m2 m3
- r0,c'0 = 2*r0,c0 + 3*r1,c0 + 1*r2,c0 + 1*r3,c0
- r1,c'0 = 1*r0,c0 + 2*r1,c0 + 3*r2,c0 + 1*r3,c0
- r2,c'0 = 1*r0,c0 + 1*r1,c0 + 2*r2,c0 + 3*r3,c0
- r3,c'0 = 3*r0,c0 + 1*r1,c0 + 1*r2,c0 + 2*r3,c0
-
- So using mix tables where c0 is a word with r0 being its upper
- 8 bits and r3 being its lower 8 bits:
-
- m0[c0 >> 24] will yield this word: [2*r0,1*r0,1*r0,3*r0]
- ...
- m3[c0 & 255] will yield this word: [1*r3,1*r3,3*r3,2*r3]
-
- Therefore to mix the columns in each word in the state we
- do the following (& 255 omitted for brevity):
- c'0,r0 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]
- c'0,r1 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]
- c'0,r2 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]
- c'0,r3 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]
-
- However, before mixing, the algorithm requires us to perform
- ShiftRows(). The ShiftRows() transformation cyclically shifts the
- last 3 rows of the state over different offsets. The first row
- (r = 0) is not shifted.
-
- s'_r,c = s_r,(c + shift(r, Nb) mod Nb
- for 0 < r < 4 and 0 <= c < Nb and
- shift(1, 4) = 1
- shift(2, 4) = 2
- shift(3, 4) = 3.
-
- This causes the first byte in r = 1 to be moved to the end of
- the row, the first 2 bytes in r = 2 to be moved to the end of
- the row, the first 3 bytes in r = 3 to be moved to the end of
- the row:
-
- r1: [c0 c1 c2 c3] => [c1 c2 c3 c0]
- r2: [c0 c1 c2 c3] [c2 c3 c0 c1]
- r3: [c0 c1 c2 c3] [c3 c0 c1 c2]
-
- We can make these substitutions inline with our column mixing to
- generate an updated set of equations to produce each word in the
- state (note the columns have changed positions):
-
- c0 c1 c2 c3 => c0 c1 c2 c3
- c0 c1 c2 c3 c1 c2 c3 c0 (cycled 1 byte)
- c0 c1 c2 c3 c2 c3 c0 c1 (cycled 2 bytes)
- c0 c1 c2 c3 c3 c0 c1 c2 (cycled 3 bytes)
-
- Therefore:
-
- c'0 = 2*r0,c0 + 3*r1,c1 + 1*r2,c2 + 1*r3,c3
- c'0 = 1*r0,c0 + 2*r1,c1 + 3*r2,c2 + 1*r3,c3
- c'0 = 1*r0,c0 + 1*r1,c1 + 2*r2,c2 + 3*r3,c3
- c'0 = 3*r0,c0 + 1*r1,c1 + 1*r2,c2 + 2*r3,c3
-
- c'1 = 2*r0,c1 + 3*r1,c2 + 1*r2,c3 + 1*r3,c0
- c'1 = 1*r0,c1 + 2*r1,c2 + 3*r2,c3 + 1*r3,c0
- c'1 = 1*r0,c1 + 1*r1,c2 + 2*r2,c3 + 3*r3,c0
- c'1 = 3*r0,c1 + 1*r1,c2 + 1*r2,c3 + 2*r3,c0
-
- ... and so forth for c'2 and c'3. The important distinction is
- that the columns are cycling, with c0 being used with the m0
- map when calculating c0, but c1 being used with the m0 map when
- calculating c1 ... and so forth.
-
- When performing the inverse we transform the mirror image and
- skip the bottom row, instead of the top one, and move upwards:
-
- c3 c2 c1 c0 => c0 c3 c2 c1 (cycled 3 bytes) *same as encryption
- c3 c2 c1 c0 c1 c0 c3 c2 (cycled 2 bytes)
- c3 c2 c1 c0 c2 c1 c0 c3 (cycled 1 byte) *same as encryption
- c3 c2 c1 c0 c3 c2 c1 c0
-
- If you compare the resulting matrices for ShiftRows()+MixColumns()
- and for InvShiftRows()+InvMixColumns() the 2nd and 4th columns are
- different (in encrypt mode vs. decrypt mode). So in order to use
- the same code to handle both encryption and decryption, we will
- need to do some mapping.
-
- If in encryption mode we let a=c0, b=c1, c=c2, d=c3, and r<N> be
- a row number in the state, then the resulting matrix in encryption
- mode for applying the above transformations would be:
-
- r1: a b c d
- r2: b c d a
- r3: c d a b
- r4: d a b c
-
- If we did the same in decryption mode we would get:
-
- r1: a d c b
- r2: b a d c
- r3: c b a d
- r4: d c b a
-
- If instead we swap d and b (set b=c3 and d=c1), then we get:
-
- r1: a b c d
- r2: d a b c
- r3: c d a b
- r4: b c d a
-
- Now the 1st and 3rd rows are the same as the encryption matrix. All
- we need to do then to make the mapping exactly the same is to swap
- the 2nd and 4th rows when in decryption mode. To do this without
- having to do it on each iteration, we swapped the 2nd and 4th rows
- in the decryption key schedule. We also have to do the swap above
- when we first pull in the input and when we set the final output. */
- a2 =
- m0[a >>> 24] ^
- m1[b >>> 16 & 255] ^
- m2[c >>> 8 & 255] ^
- m3[d & 255] ^ w[++i];
- b2 =
- m0[b >>> 24] ^
- m1[c >>> 16 & 255] ^
- m2[d >>> 8 & 255] ^
- m3[a & 255] ^ w[++i];
- c2 =
- m0[c >>> 24] ^
- m1[d >>> 16 & 255] ^
- m2[a >>> 8 & 255] ^
- m3[b & 255] ^ w[++i];
- d =
- m0[d >>> 24] ^
- m1[a >>> 16 & 255] ^
- m2[b >>> 8 & 255] ^
- m3[c & 255] ^ w[++i];
- a = a2;
- b = b2;
- c = c2;
- }
-
- /*
- Encrypt:
- SubBytes(state)
- ShiftRows(state)
- AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
-
- Decrypt:
- InvShiftRows(state)
- InvSubBytes(state)
- AddRoundKey(state, w[0, Nb-1])
- */
- // Note: rows are shifted inline
- output[0] =
- (sub[a >>> 24] << 24) ^
- (sub[b >>> 16 & 255] << 16) ^
- (sub[c >>> 8 & 255] << 8) ^
- (sub[d & 255]) ^ w[++i];
- output[decrypt ? 3 : 1] =
- (sub[b >>> 24] << 24) ^
- (sub[c >>> 16 & 255] << 16) ^
- (sub[d >>> 8 & 255] << 8) ^
- (sub[a & 255]) ^ w[++i];
- output[2] =
- (sub[c >>> 24] << 24) ^
- (sub[d >>> 16 & 255] << 16) ^
- (sub[a >>> 8 & 255] << 8) ^
- (sub[b & 255]) ^ w[++i];
- output[decrypt ? 1 : 3] =
- (sub[d >>> 24] << 24) ^
- (sub[a >>> 16 & 255] << 16) ^
- (sub[b >>> 8 & 255] << 8) ^
- (sub[c & 255]) ^ w[++i];
-}
-
-/**
- * Deprecated. Instead, use:
- *
- * forge.cipher.createCipher('AES-<mode>', key);
- * forge.cipher.createDecipher('AES-<mode>', key);
- *
- * Creates a deprecated AES cipher object. This object's mode will default to
- * CBC (cipher-block-chaining).
- *
- * The key and iv may be given as a string of bytes, an array of bytes, a
- * byte buffer, or an array of 32-bit words.
- *
- * @param options the options to use.
- * key the symmetric key to use.
- * output the buffer to write to.
- * decrypt true for decryption, false for encryption.
- * mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-function _createCipher$1(options) {
- options = options || {};
- var mode = (options.mode || 'CBC').toUpperCase();
- var algorithm = 'AES-' + mode;
-
- var cipher;
- if(options.decrypt) {
- cipher = forge$B.cipher.createDecipher(algorithm, options.key);
- } else {
- cipher = forge$B.cipher.createCipher(algorithm, options.key);
- }
-
- // backwards compatible start API
- var start = cipher.start;
- cipher.start = function(iv, options) {
- // backwards compatibility: support second arg as output buffer
- var output = null;
- if(options instanceof forge$B.util.ByteBuffer) {
- output = options;
- options = {};
- }
- options = options || {};
- options.output = output;
- options.iv = iv;
- start.call(cipher, options);
- };
-
- return cipher;
-}
-
-/**
- * Object IDs for ASN.1.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2013 Digital Bazaar, Inc.
- */
-
-var forge$A = forge$F;
-
-forge$A.pki = forge$A.pki || {};
-var oids$2 = forge$A.pki.oids = forge$A.oids = forge$A.oids || {};
-
-// set id to name mapping and name to id mapping
-function _IN(id, name) {
- oids$2[id] = name;
- oids$2[name] = id;
-}
-// set id to name mapping only
-function _I_(id, name) {
- oids$2[id] = name;
-}
-
-// algorithm OIDs
-_IN('1.2.840.113549.1.1.1', 'rsaEncryption');
-// Note: md2 & md4 not implemented
-//_IN('1.2.840.113549.1.1.2', 'md2WithRSAEncryption');
-//_IN('1.2.840.113549.1.1.3', 'md4WithRSAEncryption');
-_IN('1.2.840.113549.1.1.4', 'md5WithRSAEncryption');
-_IN('1.2.840.113549.1.1.5', 'sha1WithRSAEncryption');
-_IN('1.2.840.113549.1.1.7', 'RSAES-OAEP');
-_IN('1.2.840.113549.1.1.8', 'mgf1');
-_IN('1.2.840.113549.1.1.9', 'pSpecified');
-_IN('1.2.840.113549.1.1.10', 'RSASSA-PSS');
-_IN('1.2.840.113549.1.1.11', 'sha256WithRSAEncryption');
-_IN('1.2.840.113549.1.1.12', 'sha384WithRSAEncryption');
-_IN('1.2.840.113549.1.1.13', 'sha512WithRSAEncryption');
-// Edwards-curve Digital Signature Algorithm (EdDSA) Ed25519
-_IN('1.3.101.112', 'EdDSA25519');
-
-_IN('1.2.840.10040.4.3', 'dsa-with-sha1');
-
-_IN('1.3.14.3.2.7', 'desCBC');
-
-_IN('1.3.14.3.2.26', 'sha1');
-_IN('2.16.840.1.101.3.4.2.1', 'sha256');
-_IN('2.16.840.1.101.3.4.2.2', 'sha384');
-_IN('2.16.840.1.101.3.4.2.3', 'sha512');
-_IN('1.2.840.113549.2.5', 'md5');
-
-// pkcs#7 content types
-_IN('1.2.840.113549.1.7.1', 'data');
-_IN('1.2.840.113549.1.7.2', 'signedData');
-_IN('1.2.840.113549.1.7.3', 'envelopedData');
-_IN('1.2.840.113549.1.7.4', 'signedAndEnvelopedData');
-_IN('1.2.840.113549.1.7.5', 'digestedData');
-_IN('1.2.840.113549.1.7.6', 'encryptedData');
-
-// pkcs#9 oids
-_IN('1.2.840.113549.1.9.1', 'emailAddress');
-_IN('1.2.840.113549.1.9.2', 'unstructuredName');
-_IN('1.2.840.113549.1.9.3', 'contentType');
-_IN('1.2.840.113549.1.9.4', 'messageDigest');
-_IN('1.2.840.113549.1.9.5', 'signingTime');
-_IN('1.2.840.113549.1.9.6', 'counterSignature');
-_IN('1.2.840.113549.1.9.7', 'challengePassword');
-_IN('1.2.840.113549.1.9.8', 'unstructuredAddress');
-_IN('1.2.840.113549.1.9.14', 'extensionRequest');
-
-_IN('1.2.840.113549.1.9.20', 'friendlyName');
-_IN('1.2.840.113549.1.9.21', 'localKeyId');
-_IN('1.2.840.113549.1.9.22.1', 'x509Certificate');
-
-// pkcs#12 safe bags
-_IN('1.2.840.113549.1.12.10.1.1', 'keyBag');
-_IN('1.2.840.113549.1.12.10.1.2', 'pkcs8ShroudedKeyBag');
-_IN('1.2.840.113549.1.12.10.1.3', 'certBag');
-_IN('1.2.840.113549.1.12.10.1.4', 'crlBag');
-_IN('1.2.840.113549.1.12.10.1.5', 'secretBag');
-_IN('1.2.840.113549.1.12.10.1.6', 'safeContentsBag');
-
-// password-based-encryption for pkcs#12
-_IN('1.2.840.113549.1.5.13', 'pkcs5PBES2');
-_IN('1.2.840.113549.1.5.12', 'pkcs5PBKDF2');
-
-_IN('1.2.840.113549.1.12.1.1', 'pbeWithSHAAnd128BitRC4');
-_IN('1.2.840.113549.1.12.1.2', 'pbeWithSHAAnd40BitRC4');
-_IN('1.2.840.113549.1.12.1.3', 'pbeWithSHAAnd3-KeyTripleDES-CBC');
-_IN('1.2.840.113549.1.12.1.4', 'pbeWithSHAAnd2-KeyTripleDES-CBC');
-_IN('1.2.840.113549.1.12.1.5', 'pbeWithSHAAnd128BitRC2-CBC');
-_IN('1.2.840.113549.1.12.1.6', 'pbewithSHAAnd40BitRC2-CBC');
-
-// hmac OIDs
-_IN('1.2.840.113549.2.7', 'hmacWithSHA1');
-_IN('1.2.840.113549.2.8', 'hmacWithSHA224');
-_IN('1.2.840.113549.2.9', 'hmacWithSHA256');
-_IN('1.2.840.113549.2.10', 'hmacWithSHA384');
-_IN('1.2.840.113549.2.11', 'hmacWithSHA512');
-
-// symmetric key algorithm oids
-_IN('1.2.840.113549.3.7', 'des-EDE3-CBC');
-_IN('2.16.840.1.101.3.4.1.2', 'aes128-CBC');
-_IN('2.16.840.1.101.3.4.1.22', 'aes192-CBC');
-_IN('2.16.840.1.101.3.4.1.42', 'aes256-CBC');
-
-// certificate issuer/subject OIDs
-_IN('2.5.4.3', 'commonName');
-_IN('2.5.4.5', 'serialName');
-_IN('2.5.4.6', 'countryName');
-_IN('2.5.4.7', 'localityName');
-_IN('2.5.4.8', 'stateOrProvinceName');
-_IN('2.5.4.9', 'streetAddress');
-_IN('2.5.4.10', 'organizationName');
-_IN('2.5.4.11', 'organizationalUnitName');
-_IN('2.5.4.13', 'description');
-_IN('2.5.4.15', 'businessCategory');
-_IN('2.5.4.17', 'postalCode');
-_IN('1.3.6.1.4.1.311.60.2.1.2', 'jurisdictionOfIncorporationStateOrProvinceName');
-_IN('1.3.6.1.4.1.311.60.2.1.3', 'jurisdictionOfIncorporationCountryName');
-
-// X.509 extension OIDs
-_IN('2.16.840.1.113730.1.1', 'nsCertType');
-_IN('2.16.840.1.113730.1.13', 'nsComment'); // deprecated in theory; still widely used
-_I_('2.5.29.1', 'authorityKeyIdentifier'); // deprecated, use .35
-_I_('2.5.29.2', 'keyAttributes'); // obsolete use .37 or .15
-_I_('2.5.29.3', 'certificatePolicies'); // deprecated, use .32
-_I_('2.5.29.4', 'keyUsageRestriction'); // obsolete use .37 or .15
-_I_('2.5.29.5', 'policyMapping'); // deprecated use .33
-_I_('2.5.29.6', 'subtreesConstraint'); // obsolete use .30
-_I_('2.5.29.7', 'subjectAltName'); // deprecated use .17
-_I_('2.5.29.8', 'issuerAltName'); // deprecated use .18
-_I_('2.5.29.9', 'subjectDirectoryAttributes');
-_I_('2.5.29.10', 'basicConstraints'); // deprecated use .19
-_I_('2.5.29.11', 'nameConstraints'); // deprecated use .30
-_I_('2.5.29.12', 'policyConstraints'); // deprecated use .36
-_I_('2.5.29.13', 'basicConstraints'); // deprecated use .19
-_IN('2.5.29.14', 'subjectKeyIdentifier');
-_IN('2.5.29.15', 'keyUsage');
-_I_('2.5.29.16', 'privateKeyUsagePeriod');
-_IN('2.5.29.17', 'subjectAltName');
-_IN('2.5.29.18', 'issuerAltName');
-_IN('2.5.29.19', 'basicConstraints');
-_I_('2.5.29.20', 'cRLNumber');
-_I_('2.5.29.21', 'cRLReason');
-_I_('2.5.29.22', 'expirationDate');
-_I_('2.5.29.23', 'instructionCode');
-_I_('2.5.29.24', 'invalidityDate');
-_I_('2.5.29.25', 'cRLDistributionPoints'); // deprecated use .31
-_I_('2.5.29.26', 'issuingDistributionPoint'); // deprecated use .28
-_I_('2.5.29.27', 'deltaCRLIndicator');
-_I_('2.5.29.28', 'issuingDistributionPoint');
-_I_('2.5.29.29', 'certificateIssuer');
-_I_('2.5.29.30', 'nameConstraints');
-_IN('2.5.29.31', 'cRLDistributionPoints');
-_IN('2.5.29.32', 'certificatePolicies');
-_I_('2.5.29.33', 'policyMappings');
-_I_('2.5.29.34', 'policyConstraints'); // deprecated use .36
-_IN('2.5.29.35', 'authorityKeyIdentifier');
-_I_('2.5.29.36', 'policyConstraints');
-_IN('2.5.29.37', 'extKeyUsage');
-_I_('2.5.29.46', 'freshestCRL');
-_I_('2.5.29.54', 'inhibitAnyPolicy');
-
-// extKeyUsage purposes
-_IN('1.3.6.1.4.1.11129.2.4.2', 'timestampList');
-_IN('1.3.6.1.5.5.7.1.1', 'authorityInfoAccess');
-_IN('1.3.6.1.5.5.7.3.1', 'serverAuth');
-_IN('1.3.6.1.5.5.7.3.2', 'clientAuth');
-_IN('1.3.6.1.5.5.7.3.3', 'codeSigning');
-_IN('1.3.6.1.5.5.7.3.4', 'emailProtection');
-_IN('1.3.6.1.5.5.7.3.8', 'timeStamping');
-
-/**
- * Javascript implementation of Abstract Syntax Notation Number One.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2015 Digital Bazaar, Inc.
- *
- * An API for storing data using the Abstract Syntax Notation Number One
- * format using DER (Distinguished Encoding Rules) encoding. This encoding is
- * commonly used to store data for PKI, i.e. X.509 Certificates, and this
- * implementation exists for that purpose.
- *
- * Abstract Syntax Notation Number One (ASN.1) is used to define the abstract
- * syntax of information without restricting the way the information is encoded
- * for transmission. It provides a standard that allows for open systems
- * communication. ASN.1 defines the syntax of information data and a number of
- * simple data types as well as a notation for describing them and specifying
- * values for them.
- *
- * The RSA algorithm creates public and private keys that are often stored in
- * X.509 or PKCS#X formats -- which use ASN.1 (encoded in DER format). This
- * class provides the most basic functionality required to store and load DSA
- * keys that are encoded according to ASN.1.
- *
- * The most common binary encodings for ASN.1 are BER (Basic Encoding Rules)
- * and DER (Distinguished Encoding Rules). DER is just a subset of BER that
- * has stricter requirements for how data must be encoded.
- *
- * Each ASN.1 structure has a tag (a byte identifying the ASN.1 structure type)
- * and a byte array for the value of this ASN1 structure which may be data or a
- * list of ASN.1 structures.
- *
- * Each ASN.1 structure using BER is (Tag-Length-Value):
- *
- * | byte 0 | bytes X | bytes Y |
- * |--------|---------|----------
- * | tag | length | value |
- *
- * ASN.1 allows for tags to be of "High-tag-number form" which allows a tag to
- * be two or more octets, but that is not supported by this class. A tag is
- * only 1 byte. Bits 1-5 give the tag number (ie the data type within a
- * particular 'class'), 6 indicates whether or not the ASN.1 value is
- * constructed from other ASN.1 values, and bits 7 and 8 give the 'class'. If
- * bits 7 and 8 are both zero, the class is UNIVERSAL. If only bit 7 is set,
- * then the class is APPLICATION. If only bit 8 is set, then the class is
- * CONTEXT_SPECIFIC. If both bits 7 and 8 are set, then the class is PRIVATE.
- * The tag numbers for the data types for the class UNIVERSAL are listed below:
- *
- * UNIVERSAL 0 Reserved for use by the encoding rules
- * UNIVERSAL 1 Boolean type
- * UNIVERSAL 2 Integer type
- * UNIVERSAL 3 Bitstring type
- * UNIVERSAL 4 Octetstring type
- * UNIVERSAL 5 Null type
- * UNIVERSAL 6 Object identifier type
- * UNIVERSAL 7 Object descriptor type
- * UNIVERSAL 8 External type and Instance-of type
- * UNIVERSAL 9 Real type
- * UNIVERSAL 10 Enumerated type
- * UNIVERSAL 11 Embedded-pdv type
- * UNIVERSAL 12 UTF8String type
- * UNIVERSAL 13 Relative object identifier type
- * UNIVERSAL 14-15 Reserved for future editions
- * UNIVERSAL 16 Sequence and Sequence-of types
- * UNIVERSAL 17 Set and Set-of types
- * UNIVERSAL 18-22, 25-30 Character string types
- * UNIVERSAL 23-24 Time types
- *
- * The length of an ASN.1 structure is specified after the tag identifier.
- * There is a definite form and an indefinite form. The indefinite form may
- * be used if the encoding is constructed and not all immediately available.
- * The indefinite form is encoded using a length byte with only the 8th bit
- * set. The end of the constructed object is marked using end-of-contents
- * octets (two zero bytes).
- *
- * The definite form looks like this:
- *
- * The length may take up 1 or more bytes, it depends on the length of the
- * value of the ASN.1 structure. DER encoding requires that if the ASN.1
- * structure has a value that has a length greater than 127, more than 1 byte
- * will be used to store its length, otherwise just one byte will be used.
- * This is strict.
- *
- * In the case that the length of the ASN.1 value is less than 127, 1 octet
- * (byte) is used to store the "short form" length. The 8th bit has a value of
- * 0 indicating the length is "short form" and not "long form" and bits 7-1
- * give the length of the data. (The 8th bit is the left-most, most significant
- * bit: also known as big endian or network format).
- *
- * In the case that the length of the ASN.1 value is greater than 127, 2 to
- * 127 octets (bytes) are used to store the "long form" length. The first
- * byte's 8th bit is set to 1 to indicate the length is "long form." Bits 7-1
- * give the number of additional octets. All following octets are in base 256
- * with the most significant digit first (typical big-endian binary unsigned
- * integer storage). So, for instance, if the length of a value was 257, the
- * first byte would be set to:
- *
- * 10000010 = 130 = 0x82.
- *
- * This indicates there are 2 octets (base 256) for the length. The second and
- * third bytes (the octets just mentioned) would store the length in base 256:
- *
- * octet 2: 00000001 = 1 * 256^1 = 256
- * octet 3: 00000001 = 1 * 256^0 = 1
- * total = 257
- *
- * The algorithm for converting a js integer value of 257 to base-256 is:
- *
- * var value = 257;
- * var bytes = [];
- * bytes[0] = (value >>> 8) & 0xFF; // most significant byte first
- * bytes[1] = value & 0xFF; // least significant byte last
- *
- * On the ASN.1 UNIVERSAL Object Identifier (OID) type:
- *
- * An OID can be written like: "value1.value2.value3...valueN"
- *
- * The DER encoding rules:
- *
- * The first byte has the value 40 * value1 + value2.
- * The following bytes, if any, encode the remaining values. Each value is
- * encoded in base 128, most significant digit first (big endian), with as
- * few digits as possible, and the most significant bit of each byte set
- * to 1 except the last in each value's encoding. For example: Given the
- * OID "1.2.840.113549", its DER encoding is (remember each byte except the
- * last one in each encoding is OR'd with 0x80):
- *
- * byte 1: 40 * 1 + 2 = 42 = 0x2A.
- * bytes 2-3: 128 * 6 + 72 = 840 = 6 72 = 6 72 = 0x0648 = 0x8648
- * bytes 4-6: 16384 * 6 + 128 * 119 + 13 = 6 119 13 = 0x06770D = 0x86F70D
- *
- * The final value is: 0x2A864886F70D.
- * The full OID (including ASN.1 tag and length of 6 bytes) is:
- * 0x06062A864886F70D
- */
-
-var forge$z = forge$F;
-
-
-
-/* ASN.1 API */
-var asn1$8 = forge$z.asn1 = forge$z.asn1 || {};
-
-/**
- * ASN.1 classes.
- */
-asn1$8.Class = {
- UNIVERSAL: 0x00,
- APPLICATION: 0x40,
- CONTEXT_SPECIFIC: 0x80,
- PRIVATE: 0xC0
-};
-
-/**
- * ASN.1 types. Not all types are supported by this implementation, only
- * those necessary to implement a simple PKI are implemented.
- */
-asn1$8.Type = {
- NONE: 0,
- BOOLEAN: 1,
- INTEGER: 2,
- BITSTRING: 3,
- OCTETSTRING: 4,
- NULL: 5,
- OID: 6,
- ODESC: 7,
- EXTERNAL: 8,
- REAL: 9,
- ENUMERATED: 10,
- EMBEDDED: 11,
- UTF8: 12,
- ROID: 13,
- SEQUENCE: 16,
- SET: 17,
- PRINTABLESTRING: 19,
- IA5STRING: 22,
- UTCTIME: 23,
- GENERALIZEDTIME: 24,
- BMPSTRING: 30
-};
-
-/**
- * Creates a new asn1 object.
- *
- * @param tagClass the tag class for the object.
- * @param type the data type (tag number) for the object.
- * @param constructed true if the asn1 object is in constructed form.
- * @param value the value for the object, if it is not constructed.
- * @param [options] the options to use:
- * [bitStringContents] the plain BIT STRING content including padding
- * byte.
- *
- * @return the asn1 object.
- */
-asn1$8.create = function(tagClass, type, constructed, value, options) {
- /* An asn1 object has a tagClass, a type, a constructed flag, and a
- value. The value's type depends on the constructed flag. If
- constructed, it will contain a list of other asn1 objects. If not,
- it will contain the ASN.1 value as an array of bytes formatted
- according to the ASN.1 data type. */
-
- // remove undefined values
- if(forge$z.util.isArray(value)) {
- var tmp = [];
- for(var i = 0; i < value.length; ++i) {
- if(value[i] !== undefined) {
- tmp.push(value[i]);
- }
- }
- value = tmp;
- }
-
- var obj = {
- tagClass: tagClass,
- type: type,
- constructed: constructed,
- composed: constructed || forge$z.util.isArray(value),
- value: value
- };
- if(options && 'bitStringContents' in options) {
- // TODO: copy byte buffer if it's a buffer not a string
- obj.bitStringContents = options.bitStringContents;
- // TODO: add readonly flag to avoid this overhead
- // save copy to detect changes
- obj.original = asn1$8.copy(obj);
- }
- return obj;
-};
-
-/**
- * Copies an asn1 object.
- *
- * @param obj the asn1 object.
- * @param [options] copy options:
- * [excludeBitStringContents] true to not copy bitStringContents
- *
- * @return the a copy of the asn1 object.
- */
-asn1$8.copy = function(obj, options) {
- var copy;
-
- if(forge$z.util.isArray(obj)) {
- copy = [];
- for(var i = 0; i < obj.length; ++i) {
- copy.push(asn1$8.copy(obj[i], options));
- }
- return copy;
- }
-
- if(typeof obj === 'string') {
- // TODO: copy byte buffer if it's a buffer not a string
- return obj;
- }
-
- copy = {
- tagClass: obj.tagClass,
- type: obj.type,
- constructed: obj.constructed,
- composed: obj.composed,
- value: asn1$8.copy(obj.value, options)
- };
- if(options && !options.excludeBitStringContents) {
- // TODO: copy byte buffer if it's a buffer not a string
- copy.bitStringContents = obj.bitStringContents;
- }
- return copy;
-};
-
-/**
- * Compares asn1 objects for equality.
- *
- * Note this function does not run in constant time.
- *
- * @param obj1 the first asn1 object.
- * @param obj2 the second asn1 object.
- * @param [options] compare options:
- * [includeBitStringContents] true to compare bitStringContents
- *
- * @return true if the asn1 objects are equal.
- */
-asn1$8.equals = function(obj1, obj2, options) {
- if(forge$z.util.isArray(obj1)) {
- if(!forge$z.util.isArray(obj2)) {
- return false;
- }
- if(obj1.length !== obj2.length) {
- return false;
- }
- for(var i = 0; i < obj1.length; ++i) {
- if(!asn1$8.equals(obj1[i], obj2[i])) {
- return false;
- }
- }
- return true;
- }
-
- if(typeof obj1 !== typeof obj2) {
- return false;
- }
-
- if(typeof obj1 === 'string') {
- return obj1 === obj2;
- }
-
- var equal = obj1.tagClass === obj2.tagClass &&
- obj1.type === obj2.type &&
- obj1.constructed === obj2.constructed &&
- obj1.composed === obj2.composed &&
- asn1$8.equals(obj1.value, obj2.value);
- if(options && options.includeBitStringContents) {
- equal = equal && (obj1.bitStringContents === obj2.bitStringContents);
- }
-
- return equal;
-};
-
-/**
- * Gets the length of a BER-encoded ASN.1 value.
- *
- * In case the length is not specified, undefined is returned.
- *
- * @param b the BER-encoded ASN.1 byte buffer, starting with the first
- * length byte.
- *
- * @return the length of the BER-encoded ASN.1 value or undefined.
- */
-asn1$8.getBerValueLength = function(b) {
- // TODO: move this function and related DER/BER functions to a der.js
- // file; better abstract ASN.1 away from der/ber.
- var b2 = b.getByte();
- if(b2 === 0x80) {
- return undefined;
- }
-
- // see if the length is "short form" or "long form" (bit 8 set)
- var length;
- var longForm = b2 & 0x80;
- if(!longForm) {
- // length is just the first byte
- length = b2;
- } else {
- // the number of bytes the length is specified in bits 7 through 1
- // and each length byte is in big-endian base-256
- length = b.getInt((b2 & 0x7F) << 3);
- }
- return length;
-};
-
-/**
- * Check if the byte buffer has enough bytes. Throws an Error if not.
- *
- * @param bytes the byte buffer to parse from.
- * @param remaining the bytes remaining in the current parsing state.
- * @param n the number of bytes the buffer must have.
- */
-function _checkBufferLength(bytes, remaining, n) {
- if(n > remaining) {
- var error = new Error('Too few bytes to parse DER.');
- error.available = bytes.length();
- error.remaining = remaining;
- error.requested = n;
- throw error;
- }
-}
-
-/**
- * Gets the length of a BER-encoded ASN.1 value.
- *
- * In case the length is not specified, undefined is returned.
- *
- * @param bytes the byte buffer to parse from.
- * @param remaining the bytes remaining in the current parsing state.
- *
- * @return the length of the BER-encoded ASN.1 value or undefined.
- */
-var _getValueLength = function(bytes, remaining) {
- // TODO: move this function and related DER/BER functions to a der.js
- // file; better abstract ASN.1 away from der/ber.
- // fromDer already checked that this byte exists
- var b2 = bytes.getByte();
- remaining--;
- if(b2 === 0x80) {
- return undefined;
- }
-
- // see if the length is "short form" or "long form" (bit 8 set)
- var length;
- var longForm = b2 & 0x80;
- if(!longForm) {
- // length is just the first byte
- length = b2;
- } else {
- // the number of bytes the length is specified in bits 7 through 1
- // and each length byte is in big-endian base-256
- var longFormBytes = b2 & 0x7F;
- _checkBufferLength(bytes, remaining, longFormBytes);
- length = bytes.getInt(longFormBytes << 3);
- }
- // FIXME: this will only happen for 32 bit getInt with high bit set
- if(length < 0) {
- throw new Error('Negative length: ' + length);
- }
- return length;
-};
-
-/**
- * Parses an asn1 object from a byte buffer in DER format.
- *
- * @param bytes the byte buffer to parse from.
- * @param [strict] true to be strict when checking value lengths, false to
- * allow truncated values (default: true).
- * @param [options] object with options or boolean strict flag
- * [strict] true to be strict when checking value lengths, false to
- * allow truncated values (default: true).
- * [decodeBitStrings] true to attempt to decode the content of
- * BIT STRINGs (not OCTET STRINGs) using strict mode. Note that
- * without schema support to understand the data context this can
- * erroneously decode values that happen to be valid ASN.1. This
- * flag will be deprecated or removed as soon as schema support is
- * available. (default: true)
- *
- * @return the parsed asn1 object.
- */
-asn1$8.fromDer = function(bytes, options) {
- if(options === undefined) {
- options = {
- strict: true,
- decodeBitStrings: true
- };
- }
- if(typeof options === 'boolean') {
- options = {
- strict: options,
- decodeBitStrings: true
- };
- }
- if(!('strict' in options)) {
- options.strict = true;
- }
- if(!('decodeBitStrings' in options)) {
- options.decodeBitStrings = true;
- }
-
- // wrap in buffer if needed
- if(typeof bytes === 'string') {
- bytes = forge$z.util.createBuffer(bytes);
- }
-
- return _fromDer(bytes, bytes.length(), 0, options);
-};
-
-/**
- * Internal function to parse an asn1 object from a byte buffer in DER format.
- *
- * @param bytes the byte buffer to parse from.
- * @param remaining the number of bytes remaining for this chunk.
- * @param depth the current parsing depth.
- * @param options object with same options as fromDer().
- *
- * @return the parsed asn1 object.
- */
-function _fromDer(bytes, remaining, depth, options) {
- // temporary storage for consumption calculations
- var start;
-
- // minimum length for ASN.1 DER structure is 2
- _checkBufferLength(bytes, remaining, 2);
-
- // get the first byte
- var b1 = bytes.getByte();
- // consumed one byte
- remaining--;
-
- // get the tag class
- var tagClass = (b1 & 0xC0);
-
- // get the type (bits 1-5)
- var type = b1 & 0x1F;
-
- // get the variable value length and adjust remaining bytes
- start = bytes.length();
- var length = _getValueLength(bytes, remaining);
- remaining -= start - bytes.length();
-
- // ensure there are enough bytes to get the value
- if(length !== undefined && length > remaining) {
- if(options.strict) {
- var error = new Error('Too few bytes to read ASN.1 value.');
- error.available = bytes.length();
- error.remaining = remaining;
- error.requested = length;
- throw error;
- }
- // Note: be lenient with truncated values and use remaining state bytes
- length = remaining;
- }
-
- // value storage
- var value;
- // possible BIT STRING contents storage
- var bitStringContents;
-
- // constructed flag is bit 6 (32 = 0x20) of the first byte
- var constructed = ((b1 & 0x20) === 0x20);
- if(constructed) {
- // parse child asn1 objects from the value
- value = [];
- if(length === undefined) {
- // asn1 object of indefinite length, read until end tag
- for(;;) {
- _checkBufferLength(bytes, remaining, 2);
- if(bytes.bytes(2) === String.fromCharCode(0, 0)) {
- bytes.getBytes(2);
- remaining -= 2;
- break;
- }
- start = bytes.length();
- value.push(_fromDer(bytes, remaining, depth + 1, options));
- remaining -= start - bytes.length();
- }
- } else {
- // parsing asn1 object of definite length
- while(length > 0) {
- start = bytes.length();
- value.push(_fromDer(bytes, length, depth + 1, options));
- remaining -= start - bytes.length();
- length -= start - bytes.length();
- }
- }
- }
-
- // if a BIT STRING, save the contents including padding
- if(value === undefined && tagClass === asn1$8.Class.UNIVERSAL &&
- type === asn1$8.Type.BITSTRING) {
- bitStringContents = bytes.bytes(length);
- }
-
- // determine if a non-constructed value should be decoded as a composed
- // value that contains other ASN.1 objects. BIT STRINGs (and OCTET STRINGs)
- // can be used this way.
- if(value === undefined && options.decodeBitStrings &&
- tagClass === asn1$8.Class.UNIVERSAL &&
- // FIXME: OCTET STRINGs not yet supported here
- // .. other parts of forge expect to decode OCTET STRINGs manually
- (type === asn1$8.Type.BITSTRING /*|| type === asn1.Type.OCTETSTRING*/) &&
- length > 1) {
- // save read position
- var savedRead = bytes.read;
- var savedRemaining = remaining;
- var unused = 0;
- if(type === asn1$8.Type.BITSTRING) {
- /* The first octet gives the number of bits by which the length of the
- bit string is less than the next multiple of eight (this is called
- the "number of unused bits").
-
- The second and following octets give the value of the bit string
- converted to an octet string. */
- _checkBufferLength(bytes, remaining, 1);
- unused = bytes.getByte();
- remaining--;
- }
- // if all bits are used, maybe the BIT/OCTET STRING holds ASN.1 objs
- if(unused === 0) {
- try {
- // attempt to parse child asn1 object from the value
- // (stored in array to signal composed value)
- start = bytes.length();
- var subOptions = {
- // enforce strict mode to avoid parsing ASN.1 from plain data
- verbose: options.verbose,
- strict: true,
- decodeBitStrings: true
- };
- var composed = _fromDer(bytes, remaining, depth + 1, subOptions);
- var used = start - bytes.length();
- remaining -= used;
- if(type == asn1$8.Type.BITSTRING) {
- used++;
- }
-
- // if the data all decoded and the class indicates UNIVERSAL or
- // CONTEXT_SPECIFIC then assume we've got an encapsulated ASN.1 object
- var tc = composed.tagClass;
- if(used === length &&
- (tc === asn1$8.Class.UNIVERSAL || tc === asn1$8.Class.CONTEXT_SPECIFIC)) {
- value = [composed];
- }
- } catch(ex) {
- }
- }
- if(value === undefined) {
- // restore read position
- bytes.read = savedRead;
- remaining = savedRemaining;
- }
- }
-
- if(value === undefined) {
- // asn1 not constructed or composed, get raw value
- // TODO: do DER to OID conversion and vice-versa in .toDer?
-
- if(length === undefined) {
- if(options.strict) {
- throw new Error('Non-constructed ASN.1 object of indefinite length.');
- }
- // be lenient and use remaining state bytes
- length = remaining;
- }
-
- if(type === asn1$8.Type.BMPSTRING) {
- value = '';
- for(; length > 0; length -= 2) {
- _checkBufferLength(bytes, remaining, 2);
- value += String.fromCharCode(bytes.getInt16());
- remaining -= 2;
- }
- } else {
- value = bytes.getBytes(length);
- }
- }
-
- // add BIT STRING contents if available
- var asn1Options = bitStringContents === undefined ? null : {
- bitStringContents: bitStringContents
- };
-
- // create and return asn1 object
- return asn1$8.create(tagClass, type, constructed, value, asn1Options);
-}
-
-/**
- * Converts the given asn1 object to a buffer of bytes in DER format.
- *
- * @param asn1 the asn1 object to convert to bytes.
- *
- * @return the buffer of bytes.
- */
-asn1$8.toDer = function(obj) {
- var bytes = forge$z.util.createBuffer();
-
- // build the first byte
- var b1 = obj.tagClass | obj.type;
-
- // for storing the ASN.1 value
- var value = forge$z.util.createBuffer();
-
- // use BIT STRING contents if available and data not changed
- var useBitStringContents = false;
- if('bitStringContents' in obj) {
- useBitStringContents = true;
- if(obj.original) {
- useBitStringContents = asn1$8.equals(obj, obj.original);
- }
- }
-
- if(useBitStringContents) {
- value.putBytes(obj.bitStringContents);
- } else if(obj.composed) {
- // if composed, use each child asn1 object's DER bytes as value
- // turn on 6th bit (0x20 = 32) to indicate asn1 is constructed
- // from other asn1 objects
- if(obj.constructed) {
- b1 |= 0x20;
- } else {
- // type is a bit string, add unused bits of 0x00
- value.putByte(0x00);
- }
-
- // add all of the child DER bytes together
- for(var i = 0; i < obj.value.length; ++i) {
- if(obj.value[i] !== undefined) {
- value.putBuffer(asn1$8.toDer(obj.value[i]));
- }
- }
- } else {
- // use asn1.value directly
- if(obj.type === asn1$8.Type.BMPSTRING) {
- for(var i = 0; i < obj.value.length; ++i) {
- value.putInt16(obj.value.charCodeAt(i));
- }
- } else {
- // ensure integer is minimally-encoded
- // TODO: should all leading bytes be stripped vs just one?
- // .. ex '00 00 01' => '01'?
- if(obj.type === asn1$8.Type.INTEGER &&
- obj.value.length > 1 &&
- // leading 0x00 for positive integer
- ((obj.value.charCodeAt(0) === 0 &&
- (obj.value.charCodeAt(1) & 0x80) === 0) ||
- // leading 0xFF for negative integer
- (obj.value.charCodeAt(0) === 0xFF &&
- (obj.value.charCodeAt(1) & 0x80) === 0x80))) {
- value.putBytes(obj.value.substr(1));
- } else {
- value.putBytes(obj.value);
- }
- }
- }
-
- // add tag byte
- bytes.putByte(b1);
-
- // use "short form" encoding
- if(value.length() <= 127) {
- // one byte describes the length
- // bit 8 = 0 and bits 7-1 = length
- bytes.putByte(value.length() & 0x7F);
- } else {
- // use "long form" encoding
- // 2 to 127 bytes describe the length
- // first byte: bit 8 = 1 and bits 7-1 = # of additional bytes
- // other bytes: length in base 256, big-endian
- var len = value.length();
- var lenBytes = '';
- do {
- lenBytes += String.fromCharCode(len & 0xFF);
- len = len >>> 8;
- } while(len > 0);
-
- // set first byte to # bytes used to store the length and turn on
- // bit 8 to indicate long-form length is used
- bytes.putByte(lenBytes.length | 0x80);
-
- // concatenate length bytes in reverse since they were generated
- // little endian and we need big endian
- for(var i = lenBytes.length - 1; i >= 0; --i) {
- bytes.putByte(lenBytes.charCodeAt(i));
- }
- }
-
- // concatenate value bytes
- bytes.putBuffer(value);
- return bytes;
-};
-
-/**
- * Converts an OID dot-separated string to a byte buffer. The byte buffer
- * contains only the DER-encoded value, not any tag or length bytes.
- *
- * @param oid the OID dot-separated string.
- *
- * @return the byte buffer.
- */
-asn1$8.oidToDer = function(oid) {
- // split OID into individual values
- var values = oid.split('.');
- var bytes = forge$z.util.createBuffer();
-
- // first byte is 40 * value1 + value2
- bytes.putByte(40 * parseInt(values[0], 10) + parseInt(values[1], 10));
- // other bytes are each value in base 128 with 8th bit set except for
- // the last byte for each value
- var last, valueBytes, value, b;
- for(var i = 2; i < values.length; ++i) {
- // produce value bytes in reverse because we don't know how many
- // bytes it will take to store the value
- last = true;
- valueBytes = [];
- value = parseInt(values[i], 10);
- do {
- b = value & 0x7F;
- value = value >>> 7;
- // if value is not last, then turn on 8th bit
- if(!last) {
- b |= 0x80;
- }
- valueBytes.push(b);
- last = false;
- } while(value > 0);
-
- // add value bytes in reverse (needs to be in big endian)
- for(var n = valueBytes.length - 1; n >= 0; --n) {
- bytes.putByte(valueBytes[n]);
- }
- }
-
- return bytes;
-};
-
-/**
- * Converts a DER-encoded byte buffer to an OID dot-separated string. The
- * byte buffer should contain only the DER-encoded value, not any tag or
- * length bytes.
- *
- * @param bytes the byte buffer.
- *
- * @return the OID dot-separated string.
- */
-asn1$8.derToOid = function(bytes) {
- var oid;
-
- // wrap in buffer if needed
- if(typeof bytes === 'string') {
- bytes = forge$z.util.createBuffer(bytes);
- }
-
- // first byte is 40 * value1 + value2
- var b = bytes.getByte();
- oid = Math.floor(b / 40) + '.' + (b % 40);
-
- // other bytes are each value in base 128 with 8th bit set except for
- // the last byte for each value
- var value = 0;
- while(bytes.length() > 0) {
- b = bytes.getByte();
- value = value << 7;
- // not the last byte for the value
- if(b & 0x80) {
- value += b & 0x7F;
- } else {
- // last byte
- oid += '.' + (value + b);
- value = 0;
- }
- }
-
- return oid;
-};
-
-/**
- * Converts a UTCTime value to a date.
- *
- * Note: GeneralizedTime has 4 digits for the year and is used for X.509
- * dates past 2049. Parsing that structure hasn't been implemented yet.
- *
- * @param utc the UTCTime value to convert.
- *
- * @return the date.
- */
-asn1$8.utcTimeToDate = function(utc) {
- /* The following formats can be used:
-
- YYMMDDhhmmZ
- YYMMDDhhmm+hh'mm'
- YYMMDDhhmm-hh'mm'
- YYMMDDhhmmssZ
- YYMMDDhhmmss+hh'mm'
- YYMMDDhhmmss-hh'mm'
-
- Where:
-
- YY is the least significant two digits of the year
- MM is the month (01 to 12)
- DD is the day (01 to 31)
- hh is the hour (00 to 23)
- mm are the minutes (00 to 59)
- ss are the seconds (00 to 59)
- Z indicates that local time is GMT, + indicates that local time is
- later than GMT, and - indicates that local time is earlier than GMT
- hh' is the absolute value of the offset from GMT in hours
- mm' is the absolute value of the offset from GMT in minutes */
- var date = new Date();
-
- // if YY >= 50 use 19xx, if YY < 50 use 20xx
- var year = parseInt(utc.substr(0, 2), 10);
- year = (year >= 50) ? 1900 + year : 2000 + year;
- var MM = parseInt(utc.substr(2, 2), 10) - 1; // use 0-11 for month
- var DD = parseInt(utc.substr(4, 2), 10);
- var hh = parseInt(utc.substr(6, 2), 10);
- var mm = parseInt(utc.substr(8, 2), 10);
- var ss = 0;
-
- // not just YYMMDDhhmmZ
- if(utc.length > 11) {
- // get character after minutes
- var c = utc.charAt(10);
- var end = 10;
-
- // see if seconds are present
- if(c !== '+' && c !== '-') {
- // get seconds
- ss = parseInt(utc.substr(10, 2), 10);
- end += 2;
- }
- }
-
- // update date
- date.setUTCFullYear(year, MM, DD);
- date.setUTCHours(hh, mm, ss, 0);
-
- if(end) {
- // get +/- after end of time
- c = utc.charAt(end);
- if(c === '+' || c === '-') {
- // get hours+minutes offset
- var hhoffset = parseInt(utc.substr(end + 1, 2), 10);
- var mmoffset = parseInt(utc.substr(end + 4, 2), 10);
-
- // calculate offset in milliseconds
- var offset = hhoffset * 60 + mmoffset;
- offset *= 60000;
-
- // apply offset
- if(c === '+') {
- date.setTime(+date - offset);
- } else {
- date.setTime(+date + offset);
- }
- }
- }
-
- return date;
-};
-
-/**
- * Converts a GeneralizedTime value to a date.
- *
- * @param gentime the GeneralizedTime value to convert.
- *
- * @return the date.
- */
-asn1$8.generalizedTimeToDate = function(gentime) {
- /* The following formats can be used:
-
- YYYYMMDDHHMMSS
- YYYYMMDDHHMMSS.fff
- YYYYMMDDHHMMSSZ
- YYYYMMDDHHMMSS.fffZ
- YYYYMMDDHHMMSS+hh'mm'
- YYYYMMDDHHMMSS.fff+hh'mm'
- YYYYMMDDHHMMSS-hh'mm'
- YYYYMMDDHHMMSS.fff-hh'mm'
-
- Where:
-
- YYYY is the year
- MM is the month (01 to 12)
- DD is the day (01 to 31)
- hh is the hour (00 to 23)
- mm are the minutes (00 to 59)
- ss are the seconds (00 to 59)
- .fff is the second fraction, accurate to three decimal places
- Z indicates that local time is GMT, + indicates that local time is
- later than GMT, and - indicates that local time is earlier than GMT
- hh' is the absolute value of the offset from GMT in hours
- mm' is the absolute value of the offset from GMT in minutes */
- var date = new Date();
-
- var YYYY = parseInt(gentime.substr(0, 4), 10);
- var MM = parseInt(gentime.substr(4, 2), 10) - 1; // use 0-11 for month
- var DD = parseInt(gentime.substr(6, 2), 10);
- var hh = parseInt(gentime.substr(8, 2), 10);
- var mm = parseInt(gentime.substr(10, 2), 10);
- var ss = parseInt(gentime.substr(12, 2), 10);
- var fff = 0;
- var offset = 0;
- var isUTC = false;
-
- if(gentime.charAt(gentime.length - 1) === 'Z') {
- isUTC = true;
- }
-
- var end = gentime.length - 5, c = gentime.charAt(end);
- if(c === '+' || c === '-') {
- // get hours+minutes offset
- var hhoffset = parseInt(gentime.substr(end + 1, 2), 10);
- var mmoffset = parseInt(gentime.substr(end + 4, 2), 10);
-
- // calculate offset in milliseconds
- offset = hhoffset * 60 + mmoffset;
- offset *= 60000;
-
- // apply offset
- if(c === '+') {
- offset *= -1;
- }
-
- isUTC = true;
- }
-
- // check for second fraction
- if(gentime.charAt(14) === '.') {
- fff = parseFloat(gentime.substr(14), 10) * 1000;
- }
-
- if(isUTC) {
- date.setUTCFullYear(YYYY, MM, DD);
- date.setUTCHours(hh, mm, ss, fff);
-
- // apply offset
- date.setTime(+date + offset);
- } else {
- date.setFullYear(YYYY, MM, DD);
- date.setHours(hh, mm, ss, fff);
- }
-
- return date;
-};
-
-/**
- * Converts a date to a UTCTime value.
- *
- * Note: GeneralizedTime has 4 digits for the year and is used for X.509
- * dates past 2049. Converting to a GeneralizedTime hasn't been
- * implemented yet.
- *
- * @param date the date to convert.
- *
- * @return the UTCTime value.
- */
-asn1$8.dateToUtcTime = function(date) {
- // TODO: validate; currently assumes proper format
- if(typeof date === 'string') {
- return date;
- }
-
- var rval = '';
-
- // create format YYMMDDhhmmssZ
- var format = [];
- format.push(('' + date.getUTCFullYear()).substr(2));
- format.push('' + (date.getUTCMonth() + 1));
- format.push('' + date.getUTCDate());
- format.push('' + date.getUTCHours());
- format.push('' + date.getUTCMinutes());
- format.push('' + date.getUTCSeconds());
-
- // ensure 2 digits are used for each format entry
- for(var i = 0; i < format.length; ++i) {
- if(format[i].length < 2) {
- rval += '0';
- }
- rval += format[i];
- }
- rval += 'Z';
-
- return rval;
-};
-
-/**
- * Converts a date to a GeneralizedTime value.
- *
- * @param date the date to convert.
- *
- * @return the GeneralizedTime value as a string.
- */
-asn1$8.dateToGeneralizedTime = function(date) {
- // TODO: validate; currently assumes proper format
- if(typeof date === 'string') {
- return date;
- }
-
- var rval = '';
-
- // create format YYYYMMDDHHMMSSZ
- var format = [];
- format.push('' + date.getUTCFullYear());
- format.push('' + (date.getUTCMonth() + 1));
- format.push('' + date.getUTCDate());
- format.push('' + date.getUTCHours());
- format.push('' + date.getUTCMinutes());
- format.push('' + date.getUTCSeconds());
-
- // ensure 2 digits are used for each format entry
- for(var i = 0; i < format.length; ++i) {
- if(format[i].length < 2) {
- rval += '0';
- }
- rval += format[i];
- }
- rval += 'Z';
-
- return rval;
-};
-
-/**
- * Converts a javascript integer to a DER-encoded byte buffer to be used
- * as the value for an INTEGER type.
- *
- * @param x the integer.
- *
- * @return the byte buffer.
- */
-asn1$8.integerToDer = function(x) {
- var rval = forge$z.util.createBuffer();
- if(x >= -0x80 && x < 0x80) {
- return rval.putSignedInt(x, 8);
- }
- if(x >= -0x8000 && x < 0x8000) {
- return rval.putSignedInt(x, 16);
- }
- if(x >= -0x800000 && x < 0x800000) {
- return rval.putSignedInt(x, 24);
- }
- if(x >= -0x80000000 && x < 0x80000000) {
- return rval.putSignedInt(x, 32);
- }
- var error = new Error('Integer too large; max is 32-bits.');
- error.integer = x;
- throw error;
-};
-
-/**
- * Converts a DER-encoded byte buffer to a javascript integer. This is
- * typically used to decode the value of an INTEGER type.
- *
- * @param bytes the byte buffer.
- *
- * @return the integer.
- */
-asn1$8.derToInteger = function(bytes) {
- // wrap in buffer if needed
- if(typeof bytes === 'string') {
- bytes = forge$z.util.createBuffer(bytes);
- }
-
- var n = bytes.length() * 8;
- if(n > 32) {
- throw new Error('Integer too large; max is 32-bits.');
- }
- return bytes.getSignedInt(n);
-};
-
-/**
- * Validates that the given ASN.1 object is at least a super set of the
- * given ASN.1 structure. Only tag classes and types are checked. An
- * optional map may also be provided to capture ASN.1 values while the
- * structure is checked.
- *
- * To capture an ASN.1 value, set an object in the validator's 'capture'
- * parameter to the key to use in the capture map. To capture the full
- * ASN.1 object, specify 'captureAsn1'. To capture BIT STRING bytes, including
- * the leading unused bits counter byte, specify 'captureBitStringContents'.
- * To capture BIT STRING bytes, without the leading unused bits counter byte,
- * specify 'captureBitStringValue'.
- *
- * Objects in the validator may set a field 'optional' to true to indicate
- * that it isn't necessary to pass validation.
- *
- * @param obj the ASN.1 object to validate.
- * @param v the ASN.1 structure validator.
- * @param capture an optional map to capture values in.
- * @param errors an optional array for storing validation errors.
- *
- * @return true on success, false on failure.
- */
-asn1$8.validate = function(obj, v, capture, errors) {
- var rval = false;
-
- // ensure tag class and type are the same if specified
- if((obj.tagClass === v.tagClass || typeof(v.tagClass) === 'undefined') &&
- (obj.type === v.type || typeof(v.type) === 'undefined')) {
- // ensure constructed flag is the same if specified
- if(obj.constructed === v.constructed ||
- typeof(v.constructed) === 'undefined') {
- rval = true;
-
- // handle sub values
- if(v.value && forge$z.util.isArray(v.value)) {
- var j = 0;
- for(var i = 0; rval && i < v.value.length; ++i) {
- rval = v.value[i].optional || false;
- if(obj.value[j]) {
- rval = asn1$8.validate(obj.value[j], v.value[i], capture, errors);
- if(rval) {
- ++j;
- } else if(v.value[i].optional) {
- rval = true;
- }
- }
- if(!rval && errors) {
- errors.push(
- '[' + v.name + '] ' +
- 'Tag class "' + v.tagClass + '", type "' +
- v.type + '" expected value length "' +
- v.value.length + '", got "' +
- obj.value.length + '"');
- }
- }
- }
-
- if(rval && capture) {
- if(v.capture) {
- capture[v.capture] = obj.value;
- }
- if(v.captureAsn1) {
- capture[v.captureAsn1] = obj;
- }
- if(v.captureBitStringContents && 'bitStringContents' in obj) {
- capture[v.captureBitStringContents] = obj.bitStringContents;
- }
- if(v.captureBitStringValue && 'bitStringContents' in obj) {
- if(obj.bitStringContents.length < 2) {
- capture[v.captureBitStringValue] = '';
- } else {
- // FIXME: support unused bits with data shifting
- var unused = obj.bitStringContents.charCodeAt(0);
- if(unused !== 0) {
- throw new Error(
- 'captureBitStringValue only supported for zero unused bits');
- }
- capture[v.captureBitStringValue] = obj.bitStringContents.slice(1);
- }
- }
- }
- } else if(errors) {
- errors.push(
- '[' + v.name + '] ' +
- 'Expected constructed "' + v.constructed + '", got "' +
- obj.constructed + '"');
- }
- } else if(errors) {
- if(obj.tagClass !== v.tagClass) {
- errors.push(
- '[' + v.name + '] ' +
- 'Expected tag class "' + v.tagClass + '", got "' +
- obj.tagClass + '"');
- }
- if(obj.type !== v.type) {
- errors.push(
- '[' + v.name + '] ' +
- 'Expected type "' + v.type + '", got "' + obj.type + '"');
- }
- }
- return rval;
-};
-
-// regex for testing for non-latin characters
-var _nonLatinRegex = /[^\\u0000-\\u00ff]/;
-
-/**
- * Pretty prints an ASN.1 object to a string.
- *
- * @param obj the object to write out.
- * @param level the level in the tree.
- * @param indentation the indentation to use.
- *
- * @return the string.
- */
-asn1$8.prettyPrint = function(obj, level, indentation) {
- var rval = '';
-
- // set default level and indentation
- level = level || 0;
- indentation = indentation || 2;
-
- // start new line for deep levels
- if(level > 0) {
- rval += '\n';
- }
-
- // create indent
- var indent = '';
- for(var i = 0; i < level * indentation; ++i) {
- indent += ' ';
- }
-
- // print class:type
- rval += indent + 'Tag: ';
- switch(obj.tagClass) {
- case asn1$8.Class.UNIVERSAL:
- rval += 'Universal:';
- break;
- case asn1$8.Class.APPLICATION:
- rval += 'Application:';
- break;
- case asn1$8.Class.CONTEXT_SPECIFIC:
- rval += 'Context-Specific:';
- break;
- case asn1$8.Class.PRIVATE:
- rval += 'Private:';
- break;
- }
-
- if(obj.tagClass === asn1$8.Class.UNIVERSAL) {
- rval += obj.type;
-
- // known types
- switch(obj.type) {
- case asn1$8.Type.NONE:
- rval += ' (None)';
- break;
- case asn1$8.Type.BOOLEAN:
- rval += ' (Boolean)';
- break;
- case asn1$8.Type.INTEGER:
- rval += ' (Integer)';
- break;
- case asn1$8.Type.BITSTRING:
- rval += ' (Bit string)';
- break;
- case asn1$8.Type.OCTETSTRING:
- rval += ' (Octet string)';
- break;
- case asn1$8.Type.NULL:
- rval += ' (Null)';
- break;
- case asn1$8.Type.OID:
- rval += ' (Object Identifier)';
- break;
- case asn1$8.Type.ODESC:
- rval += ' (Object Descriptor)';
- break;
- case asn1$8.Type.EXTERNAL:
- rval += ' (External or Instance of)';
- break;
- case asn1$8.Type.REAL:
- rval += ' (Real)';
- break;
- case asn1$8.Type.ENUMERATED:
- rval += ' (Enumerated)';
- break;
- case asn1$8.Type.EMBEDDED:
- rval += ' (Embedded PDV)';
- break;
- case asn1$8.Type.UTF8:
- rval += ' (UTF8)';
- break;
- case asn1$8.Type.ROID:
- rval += ' (Relative Object Identifier)';
- break;
- case asn1$8.Type.SEQUENCE:
- rval += ' (Sequence)';
- break;
- case asn1$8.Type.SET:
- rval += ' (Set)';
- break;
- case asn1$8.Type.PRINTABLESTRING:
- rval += ' (Printable String)';
- break;
- case asn1$8.Type.IA5String:
- rval += ' (IA5String (ASCII))';
- break;
- case asn1$8.Type.UTCTIME:
- rval += ' (UTC time)';
- break;
- case asn1$8.Type.GENERALIZEDTIME:
- rval += ' (Generalized time)';
- break;
- case asn1$8.Type.BMPSTRING:
- rval += ' (BMP String)';
- break;
- }
- } else {
- rval += obj.type;
- }
-
- rval += '\n';
- rval += indent + 'Constructed: ' + obj.constructed + '\n';
-
- if(obj.composed) {
- var subvalues = 0;
- var sub = '';
- for(var i = 0; i < obj.value.length; ++i) {
- if(obj.value[i] !== undefined) {
- subvalues += 1;
- sub += asn1$8.prettyPrint(obj.value[i], level + 1, indentation);
- if((i + 1) < obj.value.length) {
- sub += ',';
- }
- }
- }
- rval += indent + 'Sub values: ' + subvalues + sub;
- } else {
- rval += indent + 'Value: ';
- if(obj.type === asn1$8.Type.OID) {
- var oid = asn1$8.derToOid(obj.value);
- rval += oid;
- if(forge$z.pki && forge$z.pki.oids) {
- if(oid in forge$z.pki.oids) {
- rval += ' (' + forge$z.pki.oids[oid] + ') ';
- }
- }
- }
- if(obj.type === asn1$8.Type.INTEGER) {
- try {
- rval += asn1$8.derToInteger(obj.value);
- } catch(ex) {
- rval += '0x' + forge$z.util.bytesToHex(obj.value);
- }
- } else if(obj.type === asn1$8.Type.BITSTRING) {
- // TODO: shift bits as needed to display without padding
- if(obj.value.length > 1) {
- // remove unused bits field
- rval += '0x' + forge$z.util.bytesToHex(obj.value.slice(1));
- } else {
- rval += '(none)';
- }
- // show unused bit count
- if(obj.value.length > 0) {
- var unused = obj.value.charCodeAt(0);
- if(unused == 1) {
- rval += ' (1 unused bit shown)';
- } else if(unused > 1) {
- rval += ' (' + unused + ' unused bits shown)';
- }
- }
- } else if(obj.type === asn1$8.Type.OCTETSTRING) {
- if(!_nonLatinRegex.test(obj.value)) {
- rval += '(' + obj.value + ') ';
- }
- rval += '0x' + forge$z.util.bytesToHex(obj.value);
- } else if(obj.type === asn1$8.Type.UTF8) {
- rval += forge$z.util.decodeUtf8(obj.value);
- } else if(obj.type === asn1$8.Type.PRINTABLESTRING ||
- obj.type === asn1$8.Type.IA5String) {
- rval += obj.value;
- } else if(_nonLatinRegex.test(obj.value)) {
- rval += '0x' + forge$z.util.bytesToHex(obj.value);
- } else if(obj.value.length === 0) {
- rval += '[null]';
- } else {
- rval += obj.value;
- }
- }
-
- return rval;
-};
-
-/**
- * Node.js module for Forge message digests.
- *
- * @author Dave Longley
- *
- * Copyright 2011-2017 Digital Bazaar, Inc.
- */
-
-var forge$y = forge$F;
-
-forge$y.md = forge$y.md || {};
-forge$y.md.algorithms = forge$y.md.algorithms || {};
-
-/**
- * Hash-based Message Authentication Code implementation. Requires a message
- * digest object that can be obtained, for example, from forge.md.sha1 or
- * forge.md.md5.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2012 Digital Bazaar, Inc. All rights reserved.
- */
-
-var forge$x = forge$F;
-
-
-
-/* HMAC API */
-var hmac = forge$x.hmac = forge$x.hmac || {};
-
-/**
- * Creates an HMAC object that uses the given message digest object.
- *
- * @return an HMAC object.
- */
-hmac.create = function() {
- // the hmac key to use
- var _key = null;
-
- // the message digest to use
- var _md = null;
-
- // the inner padding
- var _ipadding = null;
-
- // the outer padding
- var _opadding = null;
-
- // hmac context
- var ctx = {};
-
- /**
- * Starts or restarts the HMAC with the given key and message digest.
- *
- * @param md the message digest to use, null to reuse the previous one,
- * a string to use builtin 'sha1', 'md5', 'sha256'.
- * @param key the key to use as a string, array of bytes, byte buffer,
- * or null to reuse the previous key.
- */
- ctx.start = function(md, key) {
- if(md !== null) {
- if(typeof md === 'string') {
- // create builtin message digest
- md = md.toLowerCase();
- if(md in forge$x.md.algorithms) {
- _md = forge$x.md.algorithms[md].create();
- } else {
- throw new Error('Unknown hash algorithm "' + md + '"');
- }
- } else {
- // store message digest
- _md = md;
- }
- }
-
- if(key === null) {
- // reuse previous key
- key = _key;
- } else {
- if(typeof key === 'string') {
- // convert string into byte buffer
- key = forge$x.util.createBuffer(key);
- } else if(forge$x.util.isArray(key)) {
- // convert byte array into byte buffer
- var tmp = key;
- key = forge$x.util.createBuffer();
- for(var i = 0; i < tmp.length; ++i) {
- key.putByte(tmp[i]);
- }
- }
-
- // if key is longer than blocksize, hash it
- var keylen = key.length();
- if(keylen > _md.blockLength) {
- _md.start();
- _md.update(key.bytes());
- key = _md.digest();
- }
-
- // mix key into inner and outer padding
- // ipadding = [0x36 * blocksize] ^ key
- // opadding = [0x5C * blocksize] ^ key
- _ipadding = forge$x.util.createBuffer();
- _opadding = forge$x.util.createBuffer();
- keylen = key.length();
- for(var i = 0; i < keylen; ++i) {
- var tmp = key.at(i);
- _ipadding.putByte(0x36 ^ tmp);
- _opadding.putByte(0x5C ^ tmp);
- }
-
- // if key is shorter than blocksize, add additional padding
- if(keylen < _md.blockLength) {
- var tmp = _md.blockLength - keylen;
- for(var i = 0; i < tmp; ++i) {
- _ipadding.putByte(0x36);
- _opadding.putByte(0x5C);
- }
- }
- _key = key;
- _ipadding = _ipadding.bytes();
- _opadding = _opadding.bytes();
- }
-
- // digest is done like so: hash(opadding | hash(ipadding | message))
-
- // prepare to do inner hash
- // hash(ipadding | message)
- _md.start();
- _md.update(_ipadding);
- };
-
- /**
- * Updates the HMAC with the given message bytes.
- *
- * @param bytes the bytes to update with.
- */
- ctx.update = function(bytes) {
- _md.update(bytes);
- };
-
- /**
- * Produces the Message Authentication Code (MAC).
- *
- * @return a byte buffer containing the digest value.
- */
- ctx.getMac = function() {
- // digest is done like so: hash(opadding | hash(ipadding | message))
- // here we do the outer hashing
- var inner = _md.digest().bytes();
- _md.start();
- _md.update(_opadding);
- _md.update(inner);
- return _md.digest();
- };
- // alias for getMac
- ctx.digest = ctx.getMac;
-
- return ctx;
-};
-
-/**
- * Message Digest Algorithm 5 with 128-bit digest (MD5) implementation.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- */
-
-var forge$w = forge$F;
-
-
-
-var md5 = forge$w.md5 = forge$w.md5 || {};
-forge$w.md.md5 = forge$w.md.algorithms.md5 = md5;
-
-/**
- * Creates an MD5 message digest object.
- *
- * @return a message digest object.
- */
-md5.create = function() {
- // do initialization as necessary
- if(!_initialized$3) {
- _init$3();
- }
-
- // MD5 state contains four 32-bit integers
- var _state = null;
-
- // input buffer
- var _input = forge$w.util.createBuffer();
-
- // used for word storage
- var _w = new Array(16);
-
- // message digest object
- var md = {
- algorithm: 'md5',
- blockLength: 64,
- digestLength: 16,
- // 56-bit length of message so far (does not including padding)
- messageLength: 0,
- // true message length
- fullMessageLength: null,
- // size of message length in bytes
- messageLengthSize: 8
- };
-
- /**
- * Starts the digest.
- *
- * @return this digest object.
- */
- md.start = function() {
- // up to 56-bit message length for convenience
- md.messageLength = 0;
-
- // full message length (set md.messageLength64 for backwards-compatibility)
- md.fullMessageLength = md.messageLength64 = [];
- var int32s = md.messageLengthSize / 4;
- for(var i = 0; i < int32s; ++i) {
- md.fullMessageLength.push(0);
- }
- _input = forge$w.util.createBuffer();
- _state = {
- h0: 0x67452301,
- h1: 0xEFCDAB89,
- h2: 0x98BADCFE,
- h3: 0x10325476
- };
- return md;
- };
- // start digest automatically for first time
- md.start();
-
- /**
- * Updates the digest with the given message input. The given input can
- * treated as raw input (no encoding will be applied) or an encoding of
- * 'utf8' maybe given to encode the input using UTF-8.
- *
- * @param msg the message input to update with.
- * @param encoding the encoding to use (default: 'raw', other: 'utf8').
- *
- * @return this digest object.
- */
- md.update = function(msg, encoding) {
- if(encoding === 'utf8') {
- msg = forge$w.util.encodeUtf8(msg);
- }
-
- // update message length
- var len = msg.length;
- md.messageLength += len;
- len = [(len / 0x100000000) >>> 0, len >>> 0];
- for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {
- md.fullMessageLength[i] += len[1];
- len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);
- md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;
- len[0] = (len[1] / 0x100000000) >>> 0;
- }
-
- // add bytes to input buffer
- _input.putBytes(msg);
-
- // process bytes
- _update$3(_state, _w, _input);
-
- // compact input buffer every 2K or if empty
- if(_input.read > 2048 || _input.length() === 0) {
- _input.compact();
- }
-
- return md;
- };
-
- /**
- * Produces the digest.
- *
- * @return a byte buffer containing the digest value.
- */
- md.digest = function() {
- /* Note: Here we copy the remaining bytes in the input buffer and
- add the appropriate MD5 padding. Then we do the final update
- on a copy of the state so that if the user wants to get
- intermediate digests they can do so. */
-
- /* Determine the number of bytes that must be added to the message
- to ensure its length is congruent to 448 mod 512. In other words,
- the data to be digested must be a multiple of 512 bits (or 128 bytes).
- This data includes the message, some padding, and the length of the
- message. Since the length of the message will be encoded as 8 bytes (64
- bits), that means that the last segment of the data must have 56 bytes
- (448 bits) of message and padding. Therefore, the length of the message
- plus the padding must be congruent to 448 mod 512 because
- 512 - 128 = 448.
-
- In order to fill up the message length it must be filled with
- padding that begins with 1 bit followed by all 0 bits. Padding
- must *always* be present, so if the message length is already
- congruent to 448 mod 512, then 512 padding bits must be added. */
-
- var finalBlock = forge$w.util.createBuffer();
- finalBlock.putBytes(_input.bytes());
-
- // compute remaining size to be digested (include message length size)
- var remaining = (
- md.fullMessageLength[md.fullMessageLength.length - 1] +
- md.messageLengthSize);
-
- // add padding for overflow blockSize - overflow
- // _padding starts with 1 byte with first bit is set (byte value 128), then
- // there may be up to (blockSize - 1) other pad bytes
- var overflow = remaining & (md.blockLength - 1);
- finalBlock.putBytes(_padding$3.substr(0, md.blockLength - overflow));
-
- // serialize message length in bits in little-endian order; since length
- // is stored in bytes we multiply by 8 and add carry
- var bits, carry = 0;
- for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {
- bits = md.fullMessageLength[i] * 8 + carry;
- carry = (bits / 0x100000000) >>> 0;
- finalBlock.putInt32Le(bits >>> 0);
- }
-
- var s2 = {
- h0: _state.h0,
- h1: _state.h1,
- h2: _state.h2,
- h3: _state.h3
- };
- _update$3(s2, _w, finalBlock);
- var rval = forge$w.util.createBuffer();
- rval.putInt32Le(s2.h0);
- rval.putInt32Le(s2.h1);
- rval.putInt32Le(s2.h2);
- rval.putInt32Le(s2.h3);
- return rval;
- };
-
- return md;
-};
-
-// padding, constant tables for calculating md5
-var _padding$3 = null;
-var _g = null;
-var _r = null;
-var _k$2 = null;
-var _initialized$3 = false;
-
-/**
- * Initializes the constant tables.
- */
-function _init$3() {
- // create padding
- _padding$3 = String.fromCharCode(128);
- _padding$3 += forge$w.util.fillString(String.fromCharCode(0x00), 64);
-
- // g values
- _g = [
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12,
- 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2,
- 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9];
-
- // rounds table
- _r = [
- 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
- 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
- 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
- 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21];
-
- // get the result of abs(sin(i + 1)) as a 32-bit integer
- _k$2 = new Array(64);
- for(var i = 0; i < 64; ++i) {
- _k$2[i] = Math.floor(Math.abs(Math.sin(i + 1)) * 0x100000000);
- }
-
- // now initialized
- _initialized$3 = true;
-}
-
-/**
- * Updates an MD5 state with the given byte buffer.
- *
- * @param s the MD5 state to update.
- * @param w the array to use to store words.
- * @param bytes the byte buffer to update with.
- */
-function _update$3(s, w, bytes) {
- // consume 512 bit (64 byte) chunks
- var t, a, b, c, d, f, r, i;
- var len = bytes.length();
- while(len >= 64) {
- // initialize hash value for this chunk
- a = s.h0;
- b = s.h1;
- c = s.h2;
- d = s.h3;
-
- // round 1
- for(i = 0; i < 16; ++i) {
- w[i] = bytes.getInt32Le();
- f = d ^ (b & (c ^ d));
- t = (a + f + _k$2[i] + w[i]);
- r = _r[i];
- a = d;
- d = c;
- c = b;
- b += (t << r) | (t >>> (32 - r));
- }
- // round 2
- for(; i < 32; ++i) {
- f = c ^ (d & (b ^ c));
- t = (a + f + _k$2[i] + w[_g[i]]);
- r = _r[i];
- a = d;
- d = c;
- c = b;
- b += (t << r) | (t >>> (32 - r));
- }
- // round 3
- for(; i < 48; ++i) {
- f = b ^ c ^ d;
- t = (a + f + _k$2[i] + w[_g[i]]);
- r = _r[i];
- a = d;
- d = c;
- c = b;
- b += (t << r) | (t >>> (32 - r));
- }
- // round 4
- for(; i < 64; ++i) {
- f = c ^ (b | ~d);
- t = (a + f + _k$2[i] + w[_g[i]]);
- r = _r[i];
- a = d;
- d = c;
- c = b;
- b += (t << r) | (t >>> (32 - r));
- }
-
- // update hash state
- s.h0 = (s.h0 + a) | 0;
- s.h1 = (s.h1 + b) | 0;
- s.h2 = (s.h2 + c) | 0;
- s.h3 = (s.h3 + d) | 0;
-
- len -= 64;
- }
-}
-
-/**
- * Javascript implementation of basic PEM (Privacy Enhanced Mail) algorithms.
- *
- * See: RFC 1421.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2013-2014 Digital Bazaar, Inc.
- *
- * A Forge PEM object has the following fields:
- *
- * type: identifies the type of message (eg: "RSA PRIVATE KEY").
- *
- * procType: identifies the type of processing performed on the message,
- * it has two subfields: version and type, eg: 4,ENCRYPTED.
- *
- * contentDomain: identifies the type of content in the message, typically
- * only uses the value: "RFC822".
- *
- * dekInfo: identifies the message encryption algorithm and mode and includes
- * any parameters for the algorithm, it has two subfields: algorithm and
- * parameters, eg: DES-CBC,F8143EDE5960C597.
- *
- * headers: contains all other PEM encapsulated headers -- where order is
- * significant (for pairing data like recipient ID + key info).
- *
- * body: the binary-encoded body.
- */
-
-var forge$v = forge$F;
-
-
-// shortcut for pem API
-var pem = forge$v.pem = forge$v.pem || {};
-
-/**
- * Encodes (serializes) the given PEM object.
- *
- * @param msg the PEM message object to encode.
- * @param options the options to use:
- * maxline the maximum characters per line for the body, (default: 64).
- *
- * @return the PEM-formatted string.
- */
-pem.encode = function(msg, options) {
- options = options || {};
- var rval = '-----BEGIN ' + msg.type + '-----\r\n';
-
- // encode special headers
- var header;
- if(msg.procType) {
- header = {
- name: 'Proc-Type',
- values: [String(msg.procType.version), msg.procType.type]
- };
- rval += foldHeader(header);
- }
- if(msg.contentDomain) {
- header = {name: 'Content-Domain', values: [msg.contentDomain]};
- rval += foldHeader(header);
- }
- if(msg.dekInfo) {
- header = {name: 'DEK-Info', values: [msg.dekInfo.algorithm]};
- if(msg.dekInfo.parameters) {
- header.values.push(msg.dekInfo.parameters);
- }
- rval += foldHeader(header);
- }
-
- if(msg.headers) {
- // encode all other headers
- for(var i = 0; i < msg.headers.length; ++i) {
- rval += foldHeader(msg.headers[i]);
- }
- }
-
- // terminate header
- if(msg.procType) {
- rval += '\r\n';
- }
-
- // add body
- rval += forge$v.util.encode64(msg.body, options.maxline || 64) + '\r\n';
-
- rval += '-----END ' + msg.type + '-----\r\n';
- return rval;
-};
-
-/**
- * Decodes (deserializes) all PEM messages found in the given string.
- *
- * @param str the PEM-formatted string to decode.
- *
- * @return the PEM message objects in an array.
- */
-pem.decode = function(str) {
- var rval = [];
-
- // split string into PEM messages (be lenient w/EOF on BEGIN line)
- var rMessage = /\s*-----BEGIN ([A-Z0-9- ]+)-----\r?\n?([\x21-\x7e\s]+?(?:\r?\n\r?\n))?([:A-Za-z0-9+\/=\s]+?)-----END \1-----/g;
- var rHeader = /([\x21-\x7e]+):\s*([\x21-\x7e\s^:]+)/;
- var rCRLF = /\r?\n/;
- var match;
- while(true) {
- match = rMessage.exec(str);
- if(!match) {
- break;
- }
-
- var msg = {
- type: match[1],
- procType: null,
- contentDomain: null,
- dekInfo: null,
- headers: [],
- body: forge$v.util.decode64(match[3])
- };
- rval.push(msg);
-
- // no headers
- if(!match[2]) {
- continue;
- }
-
- // parse headers
- var lines = match[2].split(rCRLF);
- var li = 0;
- while(match && li < lines.length) {
- // get line, trim any rhs whitespace
- var line = lines[li].replace(/\s+$/, '');
-
- // RFC2822 unfold any following folded lines
- for(var nl = li + 1; nl < lines.length; ++nl) {
- var next = lines[nl];
- if(!/\s/.test(next[0])) {
- break;
- }
- line += next;
- li = nl;
- }
-
- // parse header
- match = line.match(rHeader);
- if(match) {
- var header = {name: match[1], values: []};
- var values = match[2].split(',');
- for(var vi = 0; vi < values.length; ++vi) {
- header.values.push(ltrim(values[vi]));
- }
-
- // Proc-Type must be the first header
- if(!msg.procType) {
- if(header.name !== 'Proc-Type') {
- throw new Error('Invalid PEM formatted message. The first ' +
- 'encapsulated header must be "Proc-Type".');
- } else if(header.values.length !== 2) {
- throw new Error('Invalid PEM formatted message. The "Proc-Type" ' +
- 'header must have two subfields.');
- }
- msg.procType = {version: values[0], type: values[1]};
- } else if(!msg.contentDomain && header.name === 'Content-Domain') {
- // special-case Content-Domain
- msg.contentDomain = values[0] || '';
- } else if(!msg.dekInfo && header.name === 'DEK-Info') {
- // special-case DEK-Info
- if(header.values.length === 0) {
- throw new Error('Invalid PEM formatted message. The "DEK-Info" ' +
- 'header must have at least one subfield.');
- }
- msg.dekInfo = {algorithm: values[0], parameters: values[1] || null};
- } else {
- msg.headers.push(header);
- }
- }
-
- ++li;
- }
-
- if(msg.procType === 'ENCRYPTED' && !msg.dekInfo) {
- throw new Error('Invalid PEM formatted message. The "DEK-Info" ' +
- 'header must be present if "Proc-Type" is "ENCRYPTED".');
- }
- }
-
- if(rval.length === 0) {
- throw new Error('Invalid PEM formatted message.');
- }
-
- return rval;
-};
-
-function foldHeader(header) {
- var rval = header.name + ': ';
-
- // ensure values with CRLF are folded
- var values = [];
- var insertSpace = function(match, $1) {
- return ' ' + $1;
- };
- for(var i = 0; i < header.values.length; ++i) {
- values.push(header.values[i].replace(/^(\S+\r\n)/, insertSpace));
- }
- rval += values.join(',') + '\r\n';
-
- // do folding
- var length = 0;
- var candidate = -1;
- for(var i = 0; i < rval.length; ++i, ++length) {
- if(length > 65 && candidate !== -1) {
- var insert = rval[candidate];
- if(insert === ',') {
- ++candidate;
- rval = rval.substr(0, candidate) + '\r\n ' + rval.substr(candidate);
- } else {
- rval = rval.substr(0, candidate) +
- '\r\n' + insert + rval.substr(candidate + 1);
- }
- length = (i - candidate - 1);
- candidate = -1;
- ++i;
- } else if(rval[i] === ' ' || rval[i] === '\t' || rval[i] === ',') {
- candidate = i;
- }
- }
-
- return rval;
-}
-
-function ltrim(str) {
- return str.replace(/^\s+/, '');
-}
-
-/**
- * DES (Data Encryption Standard) implementation.
- *
- * This implementation supports DES as well as 3DES-EDE in ECB and CBC mode.
- * It is based on the BSD-licensed implementation by Paul Tero:
- *
- * Paul Tero, July 2001
- * http://www.tero.co.uk/des/
- *
- * Optimised for performance with large blocks by
- * Michael Hayworth, November 2001
- * http://www.netdealing.com
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @author Stefan Siegl
- * @author Dave Longley
- *
- * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
- * Copyright (c) 2012-2014 Digital Bazaar, Inc.
- */
-
-var forge$u = forge$F;
-
-
-
-
-/* DES API */
-forge$u.des = forge$u.des || {};
-
-/**
- * Deprecated. Instead, use:
- *
- * var cipher = forge.cipher.createCipher('DES-<mode>', key);
- * cipher.start({iv: iv});
- *
- * Creates an DES cipher object to encrypt data using the given symmetric key.
- * The output will be stored in the 'output' member of the returned cipher.
- *
- * The key and iv may be given as binary-encoded strings of bytes or
- * byte buffers.
- *
- * @param key the symmetric key to use (64 or 192 bits).
- * @param iv the initialization vector to use.
- * @param output the buffer to write to, null to create one.
- * @param mode the cipher mode to use (default: 'CBC' if IV is
- * given, 'ECB' if null).
- *
- * @return the cipher.
- */
-forge$u.des.startEncrypting = function(key, iv, output, mode) {
- var cipher = _createCipher({
- key: key,
- output: output,
- decrypt: false,
- mode: mode || (iv === null ? 'ECB' : 'CBC')
- });
- cipher.start(iv);
- return cipher;
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var cipher = forge.cipher.createCipher('DES-<mode>', key);
- *
- * Creates an DES cipher object to encrypt data using the given symmetric key.
- *
- * The key may be given as a binary-encoded string of bytes or a byte buffer.
- *
- * @param key the symmetric key to use (64 or 192 bits).
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge$u.des.createEncryptionCipher = function(key, mode) {
- return _createCipher({
- key: key,
- output: null,
- decrypt: false,
- mode: mode
- });
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var decipher = forge.cipher.createDecipher('DES-<mode>', key);
- * decipher.start({iv: iv});
- *
- * Creates an DES cipher object to decrypt data using the given symmetric key.
- * The output will be stored in the 'output' member of the returned cipher.
- *
- * The key and iv may be given as binary-encoded strings of bytes or
- * byte buffers.
- *
- * @param key the symmetric key to use (64 or 192 bits).
- * @param iv the initialization vector to use.
- * @param output the buffer to write to, null to create one.
- * @param mode the cipher mode to use (default: 'CBC' if IV is
- * given, 'ECB' if null).
- *
- * @return the cipher.
- */
-forge$u.des.startDecrypting = function(key, iv, output, mode) {
- var cipher = _createCipher({
- key: key,
- output: output,
- decrypt: true,
- mode: mode || (iv === null ? 'ECB' : 'CBC')
- });
- cipher.start(iv);
- return cipher;
-};
-
-/**
- * Deprecated. Instead, use:
- *
- * var decipher = forge.cipher.createDecipher('DES-<mode>', key);
- *
- * Creates an DES cipher object to decrypt data using the given symmetric key.
- *
- * The key may be given as a binary-encoded string of bytes or a byte buffer.
- *
- * @param key the symmetric key to use (64 or 192 bits).
- * @param mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-forge$u.des.createDecryptionCipher = function(key, mode) {
- return _createCipher({
- key: key,
- output: null,
- decrypt: true,
- mode: mode
- });
-};
-
-/**
- * Creates a new DES cipher algorithm object.
- *
- * @param name the name of the algorithm.
- * @param mode the mode factory function.
- *
- * @return the DES algorithm object.
- */
-forge$u.des.Algorithm = function(name, mode) {
- var self = this;
- self.name = name;
- self.mode = new mode({
- blockSize: 8,
- cipher: {
- encrypt: function(inBlock, outBlock) {
- return _updateBlock(self._keys, inBlock, outBlock, false);
- },
- decrypt: function(inBlock, outBlock) {
- return _updateBlock(self._keys, inBlock, outBlock, true);
- }
- }
- });
- self._init = false;
-};
-
-/**
- * Initializes this DES algorithm by expanding its key.
- *
- * @param options the options to use.
- * key the key to use with this algorithm.
- * decrypt true if the algorithm should be initialized for decryption,
- * false for encryption.
- */
-forge$u.des.Algorithm.prototype.initialize = function(options) {
- if(this._init) {
- return;
- }
-
- var key = forge$u.util.createBuffer(options.key);
- if(this.name.indexOf('3DES') === 0) {
- if(key.length() !== 24) {
- throw new Error('Invalid Triple-DES key size: ' + key.length() * 8);
- }
- }
-
- // do key expansion to 16 or 48 subkeys (single or triple DES)
- this._keys = _createKeys(key);
- this._init = true;
-};
-
-/** Register DES algorithms **/
-
-registerAlgorithm('DES-ECB', forge$u.cipher.modes.ecb);
-registerAlgorithm('DES-CBC', forge$u.cipher.modes.cbc);
-registerAlgorithm('DES-CFB', forge$u.cipher.modes.cfb);
-registerAlgorithm('DES-OFB', forge$u.cipher.modes.ofb);
-registerAlgorithm('DES-CTR', forge$u.cipher.modes.ctr);
-
-registerAlgorithm('3DES-ECB', forge$u.cipher.modes.ecb);
-registerAlgorithm('3DES-CBC', forge$u.cipher.modes.cbc);
-registerAlgorithm('3DES-CFB', forge$u.cipher.modes.cfb);
-registerAlgorithm('3DES-OFB', forge$u.cipher.modes.ofb);
-registerAlgorithm('3DES-CTR', forge$u.cipher.modes.ctr);
-
-function registerAlgorithm(name, mode) {
- var factory = function() {
- return new forge$u.des.Algorithm(name, mode);
- };
- forge$u.cipher.registerAlgorithm(name, factory);
-}
-
-/** DES implementation **/
-
-var spfunction1 = [0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004];
-var spfunction2 = [-0x7fef7fe0,-0x7fff8000,0x8000,0x108020,0x100000,0x20,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,0x100000,0x20,-0x7fefffe0,0x108000,0x100020,-0x7fff7fe0,0,-0x80000000,0x8000,0x108020,-0x7ff00000,0x100020,-0x7fffffe0,0,0x108000,0x8020,-0x7fef8000,-0x7ff00000,0x8020,0,0x108020,-0x7fefffe0,0x100000,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,0x8000,-0x7ff00000,-0x7fff8000,0x20,-0x7fef7fe0,0x108020,0x20,0x8000,-0x80000000,0x8020,-0x7fef8000,0x100000,-0x7fffffe0,0x100020,-0x7fff7fe0,-0x7fffffe0,0x100020,0x108000,0,-0x7fff8000,0x8020,-0x80000000,-0x7fefffe0,-0x7fef7fe0,0x108000];
-var spfunction3 = [0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200];
-var spfunction4 = [0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080];
-var spfunction5 = [0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100];
-var spfunction6 = [0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010];
-var spfunction7 = [0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002];
-var spfunction8 = [0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000];
-
-/**
- * Create necessary sub keys.
- *
- * @param key the 64-bit or 192-bit key.
- *
- * @return the expanded keys.
- */
-function _createKeys(key) {
- var pc2bytes0 = [0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204],
- pc2bytes1 = [0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101],
- pc2bytes2 = [0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808],
- pc2bytes3 = [0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000],
- pc2bytes4 = [0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010],
- pc2bytes5 = [0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420],
- pc2bytes6 = [0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002],
- pc2bytes7 = [0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800],
- pc2bytes8 = [0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002],
- pc2bytes9 = [0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408],
- pc2bytes10 = [0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020],
- pc2bytes11 = [0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200],
- pc2bytes12 = [0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010],
- pc2bytes13 = [0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105];
-
- // how many iterations (1 for des, 3 for triple des)
- // changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys
- var iterations = key.length() > 8 ? 3 : 1;
-
- // stores the return keys
- var keys = [];
-
- // now define the left shifts which need to be done
- var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];
-
- var n = 0, tmp;
- for(var j = 0; j < iterations; j++) {
- var left = key.getInt32();
- var right = key.getInt32();
-
- tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
- right ^= tmp;
- left ^= (tmp << 4);
-
- tmp = ((right >>> -16) ^ left) & 0x0000ffff;
- left ^= tmp;
- right ^= (tmp << -16);
-
- tmp = ((left >>> 2) ^ right) & 0x33333333;
- right ^= tmp;
- left ^= (tmp << 2);
-
- tmp = ((right >>> -16) ^ left) & 0x0000ffff;
- left ^= tmp;
- right ^= (tmp << -16);
-
- tmp = ((left >>> 1) ^ right) & 0x55555555;
- right ^= tmp;
- left ^= (tmp << 1);
-
- tmp = ((right >>> 8) ^ left) & 0x00ff00ff;
- left ^= tmp;
- right ^= (tmp << 8);
-
- tmp = ((left >>> 1) ^ right) & 0x55555555;
- right ^= tmp;
- left ^= (tmp << 1);
-
- // right needs to be shifted and OR'd with last four bits of left
- tmp = (left << 8) | ((right >>> 20) & 0x000000f0);
-
- // left needs to be put upside down
- left = ((right << 24) | ((right << 8) & 0xff0000) |
- ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0));
- right = tmp;
-
- // now go through and perform these shifts on the left and right keys
- for(var i = 0; i < shifts.length; ++i) {
- //shift the keys either one or two bits to the left
- if(shifts[i]) {
- left = (left << 2) | (left >>> 26);
- right = (right << 2) | (right >>> 26);
- } else {
- left = (left << 1) | (left >>> 27);
- right = (right << 1) | (right >>> 27);
- }
- left &= -0xf;
- right &= -0xf;
-
- // now apply PC-2, in such a way that E is easier when encrypting or
- // decrypting this conversion will look like PC-2 except only the last 6
- // bits of each byte are used rather than 48 consecutive bits and the
- // order of lines will be according to how the S selection functions will
- // be applied: S2, S4, S6, S8, S1, S3, S5, S7
- var lefttmp = (
- pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] |
- pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf] |
- pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] |
- pc2bytes6[(left >>> 4) & 0xf]);
- var righttmp = (
- pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] |
- pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf] |
- pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] |
- pc2bytes13[(right >>> 4) & 0xf]);
- tmp = ((righttmp >>> 16) ^ lefttmp) & 0x0000ffff;
- keys[n++] = lefttmp ^ tmp;
- keys[n++] = righttmp ^ (tmp << 16);
- }
- }
-
- return keys;
-}
-
-/**
- * Updates a single block (1 byte) using DES. The update will either
- * encrypt or decrypt the block.
- *
- * @param keys the expanded keys.
- * @param input the input block (an array of 32-bit words).
- * @param output the updated output block.
- * @param decrypt true to decrypt the block, false to encrypt it.
- */
-function _updateBlock(keys, input, output, decrypt) {
- // set up loops for single or triple DES
- var iterations = keys.length === 32 ? 3 : 9;
- var looping;
- if(iterations === 3) {
- looping = decrypt ? [30, -2, -2] : [0, 32, 2];
- } else {
- looping = (decrypt ?
- [94, 62, -2, 32, 64, 2, 30, -2, -2] :
- [0, 32, 2, 62, 30, -2, 64, 96, 2]);
- }
-
- var tmp;
-
- var left = input[0];
- var right = input[1];
-
- // first each 64 bit chunk of the message must be permuted according to IP
- tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
- right ^= tmp;
- left ^= (tmp << 4);
-
- tmp = ((left >>> 16) ^ right) & 0x0000ffff;
- right ^= tmp;
- left ^= (tmp << 16);
-
- tmp = ((right >>> 2) ^ left) & 0x33333333;
- left ^= tmp;
- right ^= (tmp << 2);
-
- tmp = ((right >>> 8) ^ left) & 0x00ff00ff;
- left ^= tmp;
- right ^= (tmp << 8);
-
- tmp = ((left >>> 1) ^ right) & 0x55555555;
- right ^= tmp;
- left ^= (tmp << 1);
-
- // rotate left 1 bit
- left = ((left << 1) | (left >>> 31));
- right = ((right << 1) | (right >>> 31));
-
- for(var j = 0; j < iterations; j += 3) {
- var endloop = looping[j + 1];
- var loopinc = looping[j + 2];
-
- // now go through and perform the encryption or decryption
- for(var i = looping[j]; i != endloop; i += loopinc) {
- var right1 = right ^ keys[i];
- var right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];
-
- // passing these bytes through the S selection functions
- tmp = left;
- left = right;
- right = tmp ^ (
- spfunction2[(right1 >>> 24) & 0x3f] |
- spfunction4[(right1 >>> 16) & 0x3f] |
- spfunction6[(right1 >>> 8) & 0x3f] |
- spfunction8[right1 & 0x3f] |
- spfunction1[(right2 >>> 24) & 0x3f] |
- spfunction3[(right2 >>> 16) & 0x3f] |
- spfunction5[(right2 >>> 8) & 0x3f] |
- spfunction7[right2 & 0x3f]);
- }
- // unreverse left and right
- tmp = left;
- left = right;
- right = tmp;
- }
-
- // rotate right 1 bit
- left = ((left >>> 1) | (left << 31));
- right = ((right >>> 1) | (right << 31));
-
- // now perform IP-1, which is IP in the opposite direction
- tmp = ((left >>> 1) ^ right) & 0x55555555;
- right ^= tmp;
- left ^= (tmp << 1);
-
- tmp = ((right >>> 8) ^ left) & 0x00ff00ff;
- left ^= tmp;
- right ^= (tmp << 8);
-
- tmp = ((right >>> 2) ^ left) & 0x33333333;
- left ^= tmp;
- right ^= (tmp << 2);
-
- tmp = ((left >>> 16) ^ right) & 0x0000ffff;
- right ^= tmp;
- left ^= (tmp << 16);
-
- tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;
- right ^= tmp;
- left ^= (tmp << 4);
-
- output[0] = left;
- output[1] = right;
-}
-
-/**
- * Deprecated. Instead, use:
- *
- * forge.cipher.createCipher('DES-<mode>', key);
- * forge.cipher.createDecipher('DES-<mode>', key);
- *
- * Creates a deprecated DES cipher object. This object's mode will default to
- * CBC (cipher-block-chaining).
- *
- * The key may be given as a binary-encoded string of bytes or a byte buffer.
- *
- * @param options the options to use.
- * key the symmetric key to use (64 or 192 bits).
- * output the buffer to write to.
- * decrypt true for decryption, false for encryption.
- * mode the cipher mode to use (default: 'CBC').
- *
- * @return the cipher.
- */
-function _createCipher(options) {
- options = options || {};
- var mode = (options.mode || 'CBC').toUpperCase();
- var algorithm = 'DES-' + mode;
-
- var cipher;
- if(options.decrypt) {
- cipher = forge$u.cipher.createDecipher(algorithm, options.key);
- } else {
- cipher = forge$u.cipher.createCipher(algorithm, options.key);
- }
-
- // backwards compatible start API
- var start = cipher.start;
- cipher.start = function(iv, options) {
- // backwards compatibility: support second arg as output buffer
- var output = null;
- if(options instanceof forge$u.util.ByteBuffer) {
- output = options;
- options = {};
- }
- options = options || {};
- options.output = output;
- options.iv = iv;
- start.call(cipher, options);
- };
-
- return cipher;
-}
-
-/**
- * Password-Based Key-Derivation Function #2 implementation.
- *
- * See RFC 2898 for details.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2013 Digital Bazaar, Inc.
- */
-
-var forge$t = forge$F;
-
-
-
-
-var pkcs5 = forge$t.pkcs5 = forge$t.pkcs5 || {};
-
-var crypto;
-if(forge$t.util.isNodejs && !forge$t.options.usePureJavaScript) {
- crypto = require$$1__default;
-}
-
-/**
- * Derives a key from a password.
- *
- * @param p the password as a binary-encoded string of bytes.
- * @param s the salt as a binary-encoded string of bytes.
- * @param c the iteration count, a positive integer.
- * @param dkLen the intended length, in bytes, of the derived key,
- * (max: 2^32 - 1) * hash length of the PRF.
- * @param [md] the message digest (or algorithm identifier as a string) to use
- * in the PRF, defaults to SHA-1.
- * @param [callback(err, key)] presence triggers asynchronous version, called
- * once the operation completes.
- *
- * @return the derived key, as a binary-encoded string of bytes, for the
- * synchronous version (if no callback is specified).
- */
-forge$t.pbkdf2 = pkcs5.pbkdf2 = function(
- p, s, c, dkLen, md, callback) {
- if(typeof md === 'function') {
- callback = md;
- md = null;
- }
-
- // use native implementation if possible and not disabled, note that
- // some node versions only support SHA-1, others allow digest to be changed
- if(forge$t.util.isNodejs && !forge$t.options.usePureJavaScript &&
- crypto.pbkdf2 && (md === null || typeof md !== 'object') &&
- (crypto.pbkdf2Sync.length > 4 || (!md || md === 'sha1'))) {
- if(typeof md !== 'string') {
- // default prf to SHA-1
- md = 'sha1';
- }
- p = Buffer.from(p, 'binary');
- s = Buffer.from(s, 'binary');
- if(!callback) {
- if(crypto.pbkdf2Sync.length === 4) {
- return crypto.pbkdf2Sync(p, s, c, dkLen).toString('binary');
- }
- return crypto.pbkdf2Sync(p, s, c, dkLen, md).toString('binary');
- }
- if(crypto.pbkdf2Sync.length === 4) {
- return crypto.pbkdf2(p, s, c, dkLen, function(err, key) {
- if(err) {
- return callback(err);
- }
- callback(null, key.toString('binary'));
- });
- }
- return crypto.pbkdf2(p, s, c, dkLen, md, function(err, key) {
- if(err) {
- return callback(err);
- }
- callback(null, key.toString('binary'));
- });
- }
-
- if(typeof md === 'undefined' || md === null) {
- // default prf to SHA-1
- md = 'sha1';
- }
- if(typeof md === 'string') {
- if(!(md in forge$t.md.algorithms)) {
- throw new Error('Unknown hash algorithm: ' + md);
- }
- md = forge$t.md[md].create();
- }
-
- var hLen = md.digestLength;
-
- /* 1. If dkLen > (2^32 - 1) * hLen, output "derived key too long" and
- stop. */
- if(dkLen > (0xFFFFFFFF * hLen)) {
- var err = new Error('Derived key is too long.');
- if(callback) {
- return callback(err);
- }
- throw err;
- }
-
- /* 2. Let len be the number of hLen-octet blocks in the derived key,
- rounding up, and let r be the number of octets in the last
- block:
-
- len = CEIL(dkLen / hLen),
- r = dkLen - (len - 1) * hLen. */
- var len = Math.ceil(dkLen / hLen);
- var r = dkLen - (len - 1) * hLen;
-
- /* 3. For each block of the derived key apply the function F defined
- below to the password P, the salt S, the iteration count c, and
- the block index to compute the block:
-
- T_1 = F(P, S, c, 1),
- T_2 = F(P, S, c, 2),
- ...
- T_len = F(P, S, c, len),
-
- where the function F is defined as the exclusive-or sum of the
- first c iterates of the underlying pseudorandom function PRF
- applied to the password P and the concatenation of the salt S
- and the block index i:
-
- F(P, S, c, i) = u_1 XOR u_2 XOR ... XOR u_c
-
- where
-
- u_1 = PRF(P, S || INT(i)),
- u_2 = PRF(P, u_1),
- ...
- u_c = PRF(P, u_{c-1}).
-
- Here, INT(i) is a four-octet encoding of the integer i, most
- significant octet first. */
- var prf = forge$t.hmac.create();
- prf.start(md, p);
- var dk = '';
- var xor, u_c, u_c1;
-
- // sync version
- if(!callback) {
- for(var i = 1; i <= len; ++i) {
- // PRF(P, S || INT(i)) (first iteration)
- prf.start(null, null);
- prf.update(s);
- prf.update(forge$t.util.int32ToBytes(i));
- xor = u_c1 = prf.digest().getBytes();
-
- // PRF(P, u_{c-1}) (other iterations)
- for(var j = 2; j <= c; ++j) {
- prf.start(null, null);
- prf.update(u_c1);
- u_c = prf.digest().getBytes();
- // F(p, s, c, i)
- xor = forge$t.util.xorBytes(xor, u_c, hLen);
- u_c1 = u_c;
- }
-
- /* 4. Concatenate the blocks and extract the first dkLen octets to
- produce a derived key DK:
-
- DK = T_1 || T_2 || ... || T_len<0..r-1> */
- dk += (i < len) ? xor : xor.substr(0, r);
- }
- /* 5. Output the derived key DK. */
- return dk;
- }
-
- // async version
- var i = 1, j;
- function outer() {
- if(i > len) {
- // done
- return callback(null, dk);
- }
-
- // PRF(P, S || INT(i)) (first iteration)
- prf.start(null, null);
- prf.update(s);
- prf.update(forge$t.util.int32ToBytes(i));
- xor = u_c1 = prf.digest().getBytes();
-
- // PRF(P, u_{c-1}) (other iterations)
- j = 2;
- inner();
- }
-
- function inner() {
- if(j <= c) {
- prf.start(null, null);
- prf.update(u_c1);
- u_c = prf.digest().getBytes();
- // F(p, s, c, i)
- xor = forge$t.util.xorBytes(xor, u_c, hLen);
- u_c1 = u_c;
- ++j;
- return forge$t.util.setImmediate(inner);
- }
-
- /* 4. Concatenate the blocks and extract the first dkLen octets to
- produce a derived key DK:
-
- DK = T_1 || T_2 || ... || T_len<0..r-1> */
- dk += (i < len) ? xor : xor.substr(0, r);
-
- ++i;
- outer();
- }
-
- outer();
-};
-
-/**
- * Secure Hash Algorithm with 256-bit digest (SHA-256) implementation.
- *
- * See FIPS 180-2 for details.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2015 Digital Bazaar, Inc.
- */
-
-var forge$s = forge$F;
-
-
-
-var sha256 = forge$s.sha256 = forge$s.sha256 || {};
-forge$s.md.sha256 = forge$s.md.algorithms.sha256 = sha256;
-
-/**
- * Creates a SHA-256 message digest object.
- *
- * @return a message digest object.
- */
-sha256.create = function() {
- // do initialization as necessary
- if(!_initialized$2) {
- _init$2();
- }
-
- // SHA-256 state contains eight 32-bit integers
- var _state = null;
-
- // input buffer
- var _input = forge$s.util.createBuffer();
-
- // used for word storage
- var _w = new Array(64);
-
- // message digest object
- var md = {
- algorithm: 'sha256',
- blockLength: 64,
- digestLength: 32,
- // 56-bit length of message so far (does not including padding)
- messageLength: 0,
- // true message length
- fullMessageLength: null,
- // size of message length in bytes
- messageLengthSize: 8
- };
-
- /**
- * Starts the digest.
- *
- * @return this digest object.
- */
- md.start = function() {
- // up to 56-bit message length for convenience
- md.messageLength = 0;
-
- // full message length (set md.messageLength64 for backwards-compatibility)
- md.fullMessageLength = md.messageLength64 = [];
- var int32s = md.messageLengthSize / 4;
- for(var i = 0; i < int32s; ++i) {
- md.fullMessageLength.push(0);
- }
- _input = forge$s.util.createBuffer();
- _state = {
- h0: 0x6A09E667,
- h1: 0xBB67AE85,
- h2: 0x3C6EF372,
- h3: 0xA54FF53A,
- h4: 0x510E527F,
- h5: 0x9B05688C,
- h6: 0x1F83D9AB,
- h7: 0x5BE0CD19
- };
- return md;
- };
- // start digest automatically for first time
- md.start();
-
- /**
- * Updates the digest with the given message input. The given input can
- * treated as raw input (no encoding will be applied) or an encoding of
- * 'utf8' maybe given to encode the input using UTF-8.
- *
- * @param msg the message input to update with.
- * @param encoding the encoding to use (default: 'raw', other: 'utf8').
- *
- * @return this digest object.
- */
- md.update = function(msg, encoding) {
- if(encoding === 'utf8') {
- msg = forge$s.util.encodeUtf8(msg);
- }
-
- // update message length
- var len = msg.length;
- md.messageLength += len;
- len = [(len / 0x100000000) >>> 0, len >>> 0];
- for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {
- md.fullMessageLength[i] += len[1];
- len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);
- md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;
- len[0] = ((len[1] / 0x100000000) >>> 0);
- }
-
- // add bytes to input buffer
- _input.putBytes(msg);
-
- // process bytes
- _update$2(_state, _w, _input);
-
- // compact input buffer every 2K or if empty
- if(_input.read > 2048 || _input.length() === 0) {
- _input.compact();
- }
-
- return md;
- };
-
- /**
- * Produces the digest.
- *
- * @return a byte buffer containing the digest value.
- */
- md.digest = function() {
- /* Note: Here we copy the remaining bytes in the input buffer and
- add the appropriate SHA-256 padding. Then we do the final update
- on a copy of the state so that if the user wants to get
- intermediate digests they can do so. */
-
- /* Determine the number of bytes that must be added to the message
- to ensure its length is congruent to 448 mod 512. In other words,
- the data to be digested must be a multiple of 512 bits (or 128 bytes).
- This data includes the message, some padding, and the length of the
- message. Since the length of the message will be encoded as 8 bytes (64
- bits), that means that the last segment of the data must have 56 bytes
- (448 bits) of message and padding. Therefore, the length of the message
- plus the padding must be congruent to 448 mod 512 because
- 512 - 128 = 448.
-
- In order to fill up the message length it must be filled with
- padding that begins with 1 bit followed by all 0 bits. Padding
- must *always* be present, so if the message length is already
- congruent to 448 mod 512, then 512 padding bits must be added. */
-
- var finalBlock = forge$s.util.createBuffer();
- finalBlock.putBytes(_input.bytes());
-
- // compute remaining size to be digested (include message length size)
- var remaining = (
- md.fullMessageLength[md.fullMessageLength.length - 1] +
- md.messageLengthSize);
-
- // add padding for overflow blockSize - overflow
- // _padding starts with 1 byte with first bit is set (byte value 128), then
- // there may be up to (blockSize - 1) other pad bytes
- var overflow = remaining & (md.blockLength - 1);
- finalBlock.putBytes(_padding$2.substr(0, md.blockLength - overflow));
-
- // serialize message length in bits in big-endian order; since length
- // is stored in bytes we multiply by 8 and add carry from next int
- var next, carry;
- var bits = md.fullMessageLength[0] * 8;
- for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {
- next = md.fullMessageLength[i + 1] * 8;
- carry = (next / 0x100000000) >>> 0;
- bits += carry;
- finalBlock.putInt32(bits >>> 0);
- bits = next >>> 0;
- }
- finalBlock.putInt32(bits);
-
- var s2 = {
- h0: _state.h0,
- h1: _state.h1,
- h2: _state.h2,
- h3: _state.h3,
- h4: _state.h4,
- h5: _state.h5,
- h6: _state.h6,
- h7: _state.h7
- };
- _update$2(s2, _w, finalBlock);
- var rval = forge$s.util.createBuffer();
- rval.putInt32(s2.h0);
- rval.putInt32(s2.h1);
- rval.putInt32(s2.h2);
- rval.putInt32(s2.h3);
- rval.putInt32(s2.h4);
- rval.putInt32(s2.h5);
- rval.putInt32(s2.h6);
- rval.putInt32(s2.h7);
- return rval;
- };
-
- return md;
-};
-
-// sha-256 padding bytes not initialized yet
-var _padding$2 = null;
-var _initialized$2 = false;
-
-// table of constants
-var _k$1 = null;
-
-/**
- * Initializes the constant tables.
- */
-function _init$2() {
- // create padding
- _padding$2 = String.fromCharCode(128);
- _padding$2 += forge$s.util.fillString(String.fromCharCode(0x00), 64);
-
- // create K table for SHA-256
- _k$1 = [
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
- 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
- 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
- 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
- 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
- 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
- 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
- 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
- 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
-
- // now initialized
- _initialized$2 = true;
-}
-
-/**
- * Updates a SHA-256 state with the given byte buffer.
- *
- * @param s the SHA-256 state to update.
- * @param w the array to use to store words.
- * @param bytes the byte buffer to update with.
- */
-function _update$2(s, w, bytes) {
- // consume 512 bit (64 byte) chunks
- var t1, t2, s0, s1, ch, maj, i, a, b, c, d, e, f, g, h;
- var len = bytes.length();
- while(len >= 64) {
- // the w array will be populated with sixteen 32-bit big-endian words
- // and then extended into 64 32-bit words according to SHA-256
- for(i = 0; i < 16; ++i) {
- w[i] = bytes.getInt32();
- }
- for(; i < 64; ++i) {
- // XOR word 2 words ago rot right 17, rot right 19, shft right 10
- t1 = w[i - 2];
- t1 =
- ((t1 >>> 17) | (t1 << 15)) ^
- ((t1 >>> 19) | (t1 << 13)) ^
- (t1 >>> 10);
- // XOR word 15 words ago rot right 7, rot right 18, shft right 3
- t2 = w[i - 15];
- t2 =
- ((t2 >>> 7) | (t2 << 25)) ^
- ((t2 >>> 18) | (t2 << 14)) ^
- (t2 >>> 3);
- // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^32
- w[i] = (t1 + w[i - 7] + t2 + w[i - 16]) | 0;
- }
-
- // initialize hash value for this chunk
- a = s.h0;
- b = s.h1;
- c = s.h2;
- d = s.h3;
- e = s.h4;
- f = s.h5;
- g = s.h6;
- h = s.h7;
-
- // round function
- for(i = 0; i < 64; ++i) {
- // Sum1(e)
- s1 =
- ((e >>> 6) | (e << 26)) ^
- ((e >>> 11) | (e << 21)) ^
- ((e >>> 25) | (e << 7));
- // Ch(e, f, g) (optimized the same way as SHA-1)
- ch = g ^ (e & (f ^ g));
- // Sum0(a)
- s0 =
- ((a >>> 2) | (a << 30)) ^
- ((a >>> 13) | (a << 19)) ^
- ((a >>> 22) | (a << 10));
- // Maj(a, b, c) (optimized the same way as SHA-1)
- maj = (a & b) | (c & (a ^ b));
-
- // main algorithm
- t1 = h + s1 + ch + _k$1[i] + w[i];
- t2 = s0 + maj;
- h = g;
- g = f;
- f = e;
- // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug
- // can't truncate with `| 0`
- e = (d + t1) >>> 0;
- d = c;
- c = b;
- b = a;
- // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug
- // can't truncate with `| 0`
- a = (t1 + t2) >>> 0;
- }
-
- // update hash state
- s.h0 = (s.h0 + a) | 0;
- s.h1 = (s.h1 + b) | 0;
- s.h2 = (s.h2 + c) | 0;
- s.h3 = (s.h3 + d) | 0;
- s.h4 = (s.h4 + e) | 0;
- s.h5 = (s.h5 + f) | 0;
- s.h6 = (s.h6 + g) | 0;
- s.h7 = (s.h7 + h) | 0;
- len -= 64;
- }
-}
-
-/**
- * A javascript implementation of a cryptographically-secure
- * Pseudo Random Number Generator (PRNG). The Fortuna algorithm is followed
- * here though the use of SHA-256 is not enforced; when generating an
- * a PRNG context, the hashing algorithm and block cipher used for
- * the generator are specified via a plugin.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- */
-
-var forge$r = forge$F;
-
-
-var _crypto$1 = null;
-if(forge$r.util.isNodejs && !forge$r.options.usePureJavaScript &&
- !process.versions['node-webkit']) {
- _crypto$1 = require$$1__default;
-}
-
-/* PRNG API */
-var prng = forge$r.prng = forge$r.prng || {};
-
-/**
- * Creates a new PRNG context.
- *
- * A PRNG plugin must be passed in that will provide:
- *
- * 1. A function that initializes the key and seed of a PRNG context. It
- * will be given a 16 byte key and a 16 byte seed. Any key expansion
- * or transformation of the seed from a byte string into an array of
- * integers (or similar) should be performed.
- * 2. The cryptographic function used by the generator. It takes a key and
- * a seed.
- * 3. A seed increment function. It takes the seed and returns seed + 1.
- * 4. An api to create a message digest.
- *
- * For an example, see random.js.
- *
- * @param plugin the PRNG plugin to use.
- */
-prng.create = function(plugin) {
- var ctx = {
- plugin: plugin,
- key: null,
- seed: null,
- time: null,
- // number of reseeds so far
- reseeds: 0,
- // amount of data generated so far
- generated: 0,
- // no initial key bytes
- keyBytes: ''
- };
-
- // create 32 entropy pools (each is a message digest)
- var md = plugin.md;
- var pools = new Array(32);
- for(var i = 0; i < 32; ++i) {
- pools[i] = md.create();
- }
- ctx.pools = pools;
-
- // entropy pools are written to cyclically, starting at index 0
- ctx.pool = 0;
-
- /**
- * Generates random bytes. The bytes may be generated synchronously or
- * asynchronously. Web workers must use the asynchronous interface or
- * else the behavior is undefined.
- *
- * @param count the number of random bytes to generate.
- * @param [callback(err, bytes)] called once the operation completes.
- *
- * @return count random bytes as a string.
- */
- ctx.generate = function(count, callback) {
- // do synchronously
- if(!callback) {
- return ctx.generateSync(count);
- }
-
- // simple generator using counter-based CBC
- var cipher = ctx.plugin.cipher;
- var increment = ctx.plugin.increment;
- var formatKey = ctx.plugin.formatKey;
- var formatSeed = ctx.plugin.formatSeed;
- var b = forge$r.util.createBuffer();
-
- // paranoid deviation from Fortuna:
- // reset key for every request to protect previously
- // generated random bytes should the key be discovered;
- // there is no 100ms based reseeding because of this
- // forced reseed for every `generate` call
- ctx.key = null;
-
- generate();
-
- function generate(err) {
- if(err) {
- return callback(err);
- }
-
- // sufficient bytes generated
- if(b.length() >= count) {
- return callback(null, b.getBytes(count));
- }
-
- // if amount of data generated is greater than 1 MiB, trigger reseed
- if(ctx.generated > 0xfffff) {
- ctx.key = null;
- }
-
- if(ctx.key === null) {
- // prevent stack overflow
- return forge$r.util.nextTick(function() {
- _reseed(generate);
- });
- }
-
- // generate the random bytes
- var bytes = cipher(ctx.key, ctx.seed);
- ctx.generated += bytes.length;
- b.putBytes(bytes);
-
- // generate bytes for a new key and seed
- ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));
- ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));
-
- forge$r.util.setImmediate(generate);
- }
- };
-
- /**
- * Generates random bytes synchronously.
- *
- * @param count the number of random bytes to generate.
- *
- * @return count random bytes as a string.
- */
- ctx.generateSync = function(count) {
- // simple generator using counter-based CBC
- var cipher = ctx.plugin.cipher;
- var increment = ctx.plugin.increment;
- var formatKey = ctx.plugin.formatKey;
- var formatSeed = ctx.plugin.formatSeed;
-
- // paranoid deviation from Fortuna:
- // reset key for every request to protect previously
- // generated random bytes should the key be discovered;
- // there is no 100ms based reseeding because of this
- // forced reseed for every `generateSync` call
- ctx.key = null;
-
- var b = forge$r.util.createBuffer();
- while(b.length() < count) {
- // if amount of data generated is greater than 1 MiB, trigger reseed
- if(ctx.generated > 0xfffff) {
- ctx.key = null;
- }
-
- if(ctx.key === null) {
- _reseedSync();
- }
-
- // generate the random bytes
- var bytes = cipher(ctx.key, ctx.seed);
- ctx.generated += bytes.length;
- b.putBytes(bytes);
-
- // generate bytes for a new key and seed
- ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));
- ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));
- }
-
- return b.getBytes(count);
- };
-
- /**
- * Private function that asynchronously reseeds a generator.
- *
- * @param callback(err) called once the operation completes.
- */
- function _reseed(callback) {
- if(ctx.pools[0].messageLength >= 32) {
- _seed();
- return callback();
- }
- // not enough seed data...
- var needed = (32 - ctx.pools[0].messageLength) << 5;
- ctx.seedFile(needed, function(err, bytes) {
- if(err) {
- return callback(err);
- }
- ctx.collect(bytes);
- _seed();
- callback();
- });
- }
-
- /**
- * Private function that synchronously reseeds a generator.
- */
- function _reseedSync() {
- if(ctx.pools[0].messageLength >= 32) {
- return _seed();
- }
- // not enough seed data...
- var needed = (32 - ctx.pools[0].messageLength) << 5;
- ctx.collect(ctx.seedFileSync(needed));
- _seed();
- }
-
- /**
- * Private function that seeds a generator once enough bytes are available.
- */
- function _seed() {
- // update reseed count
- ctx.reseeds = (ctx.reseeds === 0xffffffff) ? 0 : ctx.reseeds + 1;
-
- // goal is to update `key` via:
- // key = hash(key + s)
- // where 's' is all collected entropy from selected pools, then...
-
- // create a plugin-based message digest
- var md = ctx.plugin.md.create();
-
- // consume current key bytes
- md.update(ctx.keyBytes);
-
- // digest the entropy of pools whose index k meet the
- // condition 'n mod 2^k == 0' where n is the number of reseeds
- var _2powK = 1;
- for(var k = 0; k < 32; ++k) {
- if(ctx.reseeds % _2powK === 0) {
- md.update(ctx.pools[k].digest().getBytes());
- ctx.pools[k].start();
- }
- _2powK = _2powK << 1;
- }
-
- // get digest for key bytes
- ctx.keyBytes = md.digest().getBytes();
-
- // paranoid deviation from Fortuna:
- // update `seed` via `seed = hash(key)`
- // instead of initializing to zero once and only
- // ever incrementing it
- md.start();
- md.update(ctx.keyBytes);
- var seedBytes = md.digest().getBytes();
-
- // update state
- ctx.key = ctx.plugin.formatKey(ctx.keyBytes);
- ctx.seed = ctx.plugin.formatSeed(seedBytes);
- ctx.generated = 0;
- }
-
- /**
- * The built-in default seedFile. This seedFile is used when entropy
- * is needed immediately.
- *
- * @param needed the number of bytes that are needed.
- *
- * @return the random bytes.
- */
- function defaultSeedFile(needed) {
- // use window.crypto.getRandomValues strong source of entropy if available
- var getRandomValues = null;
- var globalScope = forge$r.util.globalScope;
- var _crypto = globalScope.crypto || globalScope.msCrypto;
- if(_crypto && _crypto.getRandomValues) {
- getRandomValues = function(arr) {
- return _crypto.getRandomValues(arr);
- };
- }
-
- var b = forge$r.util.createBuffer();
- if(getRandomValues) {
- while(b.length() < needed) {
- // max byte length is 65536 before QuotaExceededError is thrown
- // http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues
- var count = Math.max(1, Math.min(needed - b.length(), 65536) / 4);
- var entropy = new Uint32Array(Math.floor(count));
- try {
- getRandomValues(entropy);
- for(var i = 0; i < entropy.length; ++i) {
- b.putInt32(entropy[i]);
- }
- } catch(e) {
- /* only ignore QuotaExceededError */
- if(!(typeof QuotaExceededError !== 'undefined' &&
- e instanceof QuotaExceededError)) {
- throw e;
- }
- }
- }
- }
-
- // be sad and add some weak random data
- if(b.length() < needed) {
- /* Draws from Park-Miller "minimal standard" 31 bit PRNG,
- implemented with David G. Carta's optimization: with 32 bit math
- and without division (Public Domain). */
- var hi, lo, next;
- var seed = Math.floor(Math.random() * 0x010000);
- while(b.length() < needed) {
- lo = 16807 * (seed & 0xFFFF);
- hi = 16807 * (seed >> 16);
- lo += (hi & 0x7FFF) << 16;
- lo += hi >> 15;
- lo = (lo & 0x7FFFFFFF) + (lo >> 31);
- seed = lo & 0xFFFFFFFF;
-
- // consume lower 3 bytes of seed
- for(var i = 0; i < 3; ++i) {
- // throw in more pseudo random
- next = seed >>> (i << 3);
- next ^= Math.floor(Math.random() * 0x0100);
- b.putByte(String.fromCharCode(next & 0xFF));
- }
- }
- }
-
- return b.getBytes(needed);
- }
- // initialize seed file APIs
- if(_crypto$1) {
- // use nodejs async API
- ctx.seedFile = function(needed, callback) {
- _crypto$1.randomBytes(needed, function(err, bytes) {
- if(err) {
- return callback(err);
- }
- callback(null, bytes.toString());
- });
- };
- // use nodejs sync API
- ctx.seedFileSync = function(needed) {
- return _crypto$1.randomBytes(needed).toString();
- };
- } else {
- ctx.seedFile = function(needed, callback) {
- try {
- callback(null, defaultSeedFile(needed));
- } catch(e) {
- callback(e);
- }
- };
- ctx.seedFileSync = defaultSeedFile;
- }
-
- /**
- * Adds entropy to a prng ctx's accumulator.
- *
- * @param bytes the bytes of entropy as a string.
- */
- ctx.collect = function(bytes) {
- // iterate over pools distributing entropy cyclically
- var count = bytes.length;
- for(var i = 0; i < count; ++i) {
- ctx.pools[ctx.pool].update(bytes.substr(i, 1));
- ctx.pool = (ctx.pool === 31) ? 0 : ctx.pool + 1;
- }
- };
-
- /**
- * Collects an integer of n bits.
- *
- * @param i the integer entropy.
- * @param n the number of bits in the integer.
- */
- ctx.collectInt = function(i, n) {
- var bytes = '';
- for(var x = 0; x < n; x += 8) {
- bytes += String.fromCharCode((i >> x) & 0xFF);
- }
- ctx.collect(bytes);
- };
-
- /**
- * Registers a Web Worker to receive immediate entropy from the main thread.
- * This method is required until Web Workers can access the native crypto
- * API. This method should be called twice for each created worker, once in
- * the main thread, and once in the worker itself.
- *
- * @param worker the worker to register.
- */
- ctx.registerWorker = function(worker) {
- // worker receives random bytes
- if(worker === self) {
- ctx.seedFile = function(needed, callback) {
- function listener(e) {
- var data = e.data;
- if(data.forge && data.forge.prng) {
- self.removeEventListener('message', listener);
- callback(data.forge.prng.err, data.forge.prng.bytes);
- }
- }
- self.addEventListener('message', listener);
- self.postMessage({forge: {prng: {needed: needed}}});
- };
- } else {
- // main thread sends random bytes upon request
- var listener = function(e) {
- var data = e.data;
- if(data.forge && data.forge.prng) {
- ctx.seedFile(data.forge.prng.needed, function(err, bytes) {
- worker.postMessage({forge: {prng: {err: err, bytes: bytes}}});
- });
- }
- };
- // TODO: do we need to remove the event listener when the worker dies?
- worker.addEventListener('message', listener);
- }
- };
-
- return ctx;
-};
-
-/**
- * An API for getting cryptographically-secure random bytes. The bytes are
- * generated using the Fortuna algorithm devised by Bruce Schneier and
- * Niels Ferguson.
- *
- * Getting strong random bytes is not yet easy to do in javascript. The only
- * truish random entropy that can be collected is from the mouse, keyboard, or
- * from timing with respect to page loads, etc. This generator makes a poor
- * attempt at providing random bytes when those sources haven't yet provided
- * enough entropy to initially seed or to reseed the PRNG.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2009-2014 Digital Bazaar, Inc.
- */
-
-var forge$q = forge$F;
-
-
-
-
-
-(function() {
-
-// forge.random already defined
-if(forge$q.random && forge$q.random.getBytes) {
- return;
-}
-
-(function(jQuery) {
-
-// the default prng plugin, uses AES-128
-var prng_aes = {};
-var _prng_aes_output = new Array(4);
-var _prng_aes_buffer = forge$q.util.createBuffer();
-prng_aes.formatKey = function(key) {
- // convert the key into 32-bit integers
- var tmp = forge$q.util.createBuffer(key);
- key = new Array(4);
- key[0] = tmp.getInt32();
- key[1] = tmp.getInt32();
- key[2] = tmp.getInt32();
- key[3] = tmp.getInt32();
-
- // return the expanded key
- return forge$q.aes._expandKey(key, false);
-};
-prng_aes.formatSeed = function(seed) {
- // convert seed into 32-bit integers
- var tmp = forge$q.util.createBuffer(seed);
- seed = new Array(4);
- seed[0] = tmp.getInt32();
- seed[1] = tmp.getInt32();
- seed[2] = tmp.getInt32();
- seed[3] = tmp.getInt32();
- return seed;
-};
-prng_aes.cipher = function(key, seed) {
- forge$q.aes._updateBlock(key, seed, _prng_aes_output, false);
- _prng_aes_buffer.putInt32(_prng_aes_output[0]);
- _prng_aes_buffer.putInt32(_prng_aes_output[1]);
- _prng_aes_buffer.putInt32(_prng_aes_output[2]);
- _prng_aes_buffer.putInt32(_prng_aes_output[3]);
- return _prng_aes_buffer.getBytes();
-};
-prng_aes.increment = function(seed) {
- // FIXME: do we care about carry or signed issues?
- ++seed[3];
- return seed;
-};
-prng_aes.md = forge$q.md.sha256;
-
-/**
- * Creates a new PRNG.
- */
-function spawnPrng() {
- var ctx = forge$q.prng.create(prng_aes);
-
- /**
- * Gets random bytes. If a native secure crypto API is unavailable, this
- * method tries to make the bytes more unpredictable by drawing from data that
- * can be collected from the user of the browser, eg: mouse movement.
- *
- * If a callback is given, this method will be called asynchronously.
- *
- * @param count the number of random bytes to get.
- * @param [callback(err, bytes)] called once the operation completes.
- *
- * @return the random bytes in a string.
- */
- ctx.getBytes = function(count, callback) {
- return ctx.generate(count, callback);
- };
-
- /**
- * Gets random bytes asynchronously. If a native secure crypto API is
- * unavailable, this method tries to make the bytes more unpredictable by
- * drawing from data that can be collected from the user of the browser,
- * eg: mouse movement.
- *
- * @param count the number of random bytes to get.
- *
- * @return the random bytes in a string.
- */
- ctx.getBytesSync = function(count) {
- return ctx.generate(count);
- };
-
- return ctx;
-}
-
-// create default prng context
-var _ctx = spawnPrng();
-
-// add other sources of entropy only if window.crypto.getRandomValues is not
-// available -- otherwise this source will be automatically used by the prng
-var getRandomValues = null;
-var globalScope = forge$q.util.globalScope;
-var _crypto = globalScope.crypto || globalScope.msCrypto;
-if(_crypto && _crypto.getRandomValues) {
- getRandomValues = function(arr) {
- return _crypto.getRandomValues(arr);
- };
-}
-
-if((!forge$q.util.isNodejs && !getRandomValues)) {
-
- // get load time entropy
- _ctx.collectInt(+new Date(), 32);
-
- // add some entropy from navigator object
- if(typeof(navigator) !== 'undefined') {
- var _navBytes = '';
- for(var key in navigator) {
- try {
- if(typeof(navigator[key]) == 'string') {
- _navBytes += navigator[key];
- }
- } catch(e) {
- /* Some navigator keys might not be accessible, e.g. the geolocation
- attribute throws an exception if touched in Mozilla chrome://
- context.
-
- Silently ignore this and just don't use this as a source of
- entropy. */
- }
- }
- _ctx.collect(_navBytes);
- _navBytes = null;
- }
-
- // add mouse and keyboard collectors if jquery is available
- if(jQuery) {
- // set up mouse entropy capture
- jQuery().mousemove(function(e) {
- // add mouse coords
- _ctx.collectInt(e.clientX, 16);
- _ctx.collectInt(e.clientY, 16);
- });
-
- // set up keyboard entropy capture
- jQuery().keypress(function(e) {
- _ctx.collectInt(e.charCode, 8);
- });
- }
-}
-
-/* Random API */
-if(!forge$q.random) {
- forge$q.random = _ctx;
-} else {
- // extend forge.random with _ctx
- for(var key in _ctx) {
- forge$q.random[key] = _ctx[key];
- }
-}
-
-// expose spawn PRNG
-forge$q.random.createInstance = spawnPrng;
-
-})(typeof(jQuery) !== 'undefined' ? jQuery : null);
-
-})();
-
-/**
- * RC2 implementation.
- *
- * @author Stefan Siegl
- *
- * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
- *
- * Information on the RC2 cipher is available from RFC #2268,
- * http://www.ietf.org/rfc/rfc2268.txt
- */
-
-var forge$p = forge$F;
-
-
-var piTable = [
- 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d,
- 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2,
- 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32,
- 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82,
- 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc,
- 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26,
- 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03,
- 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7,
- 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a,
- 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec,
- 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39,
- 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31,
- 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9,
- 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9,
- 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e,
- 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad
-];
-
-var s = [1, 2, 3, 5];
-
-/**
- * Rotate a word left by given number of bits.
- *
- * Bits that are shifted out on the left are put back in on the right
- * hand side.
- *
- * @param word The word to shift left.
- * @param bits The number of bits to shift by.
- * @return The rotated word.
- */
-var rol = function(word, bits) {
- return ((word << bits) & 0xffff) | ((word & 0xffff) >> (16 - bits));
-};
-
-/**
- * Rotate a word right by given number of bits.
- *
- * Bits that are shifted out on the right are put back in on the left
- * hand side.
- *
- * @param word The word to shift right.
- * @param bits The number of bits to shift by.
- * @return The rotated word.
- */
-var ror = function(word, bits) {
- return ((word & 0xffff) >> bits) | ((word << (16 - bits)) & 0xffff);
-};
-
-/* RC2 API */
-forge$p.rc2 = forge$p.rc2 || {};
-
-/**
- * Perform RC2 key expansion as per RFC #2268, section 2.
- *
- * @param key variable-length user key (between 1 and 128 bytes)
- * @param effKeyBits number of effective key bits (default: 128)
- * @return the expanded RC2 key (ByteBuffer of 128 bytes)
- */
-forge$p.rc2.expandKey = function(key, effKeyBits) {
- if(typeof key === 'string') {
- key = forge$p.util.createBuffer(key);
- }
- effKeyBits = effKeyBits || 128;
-
- /* introduce variables that match the names used in RFC #2268 */
- var L = key;
- var T = key.length();
- var T1 = effKeyBits;
- var T8 = Math.ceil(T1 / 8);
- var TM = 0xff >> (T1 & 0x07);
- var i;
-
- for(i = T; i < 128; i++) {
- L.putByte(piTable[(L.at(i - 1) + L.at(i - T)) & 0xff]);
- }
-
- L.setAt(128 - T8, piTable[L.at(128 - T8) & TM]);
-
- for(i = 127 - T8; i >= 0; i--) {
- L.setAt(i, piTable[L.at(i + 1) ^ L.at(i + T8)]);
- }
-
- return L;
-};
-
-/**
- * Creates a RC2 cipher object.
- *
- * @param key the symmetric key to use (as base for key generation).
- * @param bits the number of effective key bits.
- * @param encrypt false for decryption, true for encryption.
- *
- * @return the cipher.
- */
-var createCipher = function(key, bits, encrypt) {
- var _finish = false, _input = null, _output = null, _iv = null;
- var mixRound, mashRound;
- var i, j, K = [];
-
- /* Expand key and fill into K[] Array */
- key = forge$p.rc2.expandKey(key, bits);
- for(i = 0; i < 64; i++) {
- K.push(key.getInt16Le());
- }
-
- if(encrypt) {
- /**
- * Perform one mixing round "in place".
- *
- * @param R Array of four words to perform mixing on.
- */
- mixRound = function(R) {
- for(i = 0; i < 4; i++) {
- R[i] += K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) +
- ((~R[(i + 3) % 4]) & R[(i + 1) % 4]);
- R[i] = rol(R[i], s[i]);
- j++;
- }
- };
-
- /**
- * Perform one mashing round "in place".
- *
- * @param R Array of four words to perform mashing on.
- */
- mashRound = function(R) {
- for(i = 0; i < 4; i++) {
- R[i] += K[R[(i + 3) % 4] & 63];
- }
- };
- } else {
- /**
- * Perform one r-mixing round "in place".
- *
- * @param R Array of four words to perform mixing on.
- */
- mixRound = function(R) {
- for(i = 3; i >= 0; i--) {
- R[i] = ror(R[i], s[i]);
- R[i] -= K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) +
- ((~R[(i + 3) % 4]) & R[(i + 1) % 4]);
- j--;
- }
- };
-
- /**
- * Perform one r-mashing round "in place".
- *
- * @param R Array of four words to perform mashing on.
- */
- mashRound = function(R) {
- for(i = 3; i >= 0; i--) {
- R[i] -= K[R[(i + 3) % 4] & 63];
- }
- };
- }
-
- /**
- * Run the specified cipher execution plan.
- *
- * This function takes four words from the input buffer, applies the IV on
- * it (if requested) and runs the provided execution plan.
- *
- * The plan must be put together in form of a array of arrays. Where the
- * outer one is simply a list of steps to perform and the inner one needs
- * to have two elements: the first one telling how many rounds to perform,
- * the second one telling what to do (i.e. the function to call).
- *
- * @param {Array} plan The plan to execute.
- */
- var runPlan = function(plan) {
- var R = [];
-
- /* Get data from input buffer and fill the four words into R */
- for(i = 0; i < 4; i++) {
- var val = _input.getInt16Le();
-
- if(_iv !== null) {
- if(encrypt) {
- /* We're encrypting, apply the IV first. */
- val ^= _iv.getInt16Le();
- } else {
- /* We're decryption, keep cipher text for next block. */
- _iv.putInt16Le(val);
- }
- }
-
- R.push(val & 0xffff);
- }
-
- /* Reset global "j" variable as per spec. */
- j = encrypt ? 0 : 63;
-
- /* Run execution plan. */
- for(var ptr = 0; ptr < plan.length; ptr++) {
- for(var ctr = 0; ctr < plan[ptr][0]; ctr++) {
- plan[ptr][1](R);
- }
- }
-
- /* Write back result to output buffer. */
- for(i = 0; i < 4; i++) {
- if(_iv !== null) {
- if(encrypt) {
- /* We're encrypting in CBC-mode, feed back encrypted bytes into
- IV buffer to carry it forward to next block. */
- _iv.putInt16Le(R[i]);
- } else {
- R[i] ^= _iv.getInt16Le();
- }
- }
-
- _output.putInt16Le(R[i]);
- }
- };
-
- /* Create cipher object */
- var cipher = null;
- cipher = {
- /**
- * Starts or restarts the encryption or decryption process, whichever
- * was previously configured.
- *
- * To use the cipher in CBC mode, iv may be given either as a string
- * of bytes, or as a byte buffer. For ECB mode, give null as iv.
- *
- * @param iv the initialization vector to use, null for ECB mode.
- * @param output the output the buffer to write to, null to create one.
- */
- start: function(iv, output) {
- if(iv) {
- /* CBC mode */
- if(typeof iv === 'string') {
- iv = forge$p.util.createBuffer(iv);
- }
- }
-
- _finish = false;
- _input = forge$p.util.createBuffer();
- _output = output || new forge$p.util.createBuffer();
- _iv = iv;
-
- cipher.output = _output;
- },
-
- /**
- * Updates the next block.
- *
- * @param input the buffer to read from.
- */
- update: function(input) {
- if(!_finish) {
- // not finishing, so fill the input buffer with more input
- _input.putBuffer(input);
- }
-
- while(_input.length() >= 8) {
- runPlan([
- [ 5, mixRound ],
- [ 1, mashRound ],
- [ 6, mixRound ],
- [ 1, mashRound ],
- [ 5, mixRound ]
- ]);
- }
- },
-
- /**
- * Finishes encrypting or decrypting.
- *
- * @param pad a padding function to use, null for PKCS#7 padding,
- * signature(blockSize, buffer, decrypt).
- *
- * @return true if successful, false on error.
- */
- finish: function(pad) {
- var rval = true;
-
- if(encrypt) {
- if(pad) {
- rval = pad(8, _input, !encrypt);
- } else {
- // add PKCS#7 padding to block (each pad byte is the
- // value of the number of pad bytes)
- var padding = (_input.length() === 8) ? 8 : (8 - _input.length());
- _input.fillWithByte(padding, padding);
- }
- }
-
- if(rval) {
- // do final update
- _finish = true;
- cipher.update();
- }
-
- if(!encrypt) {
- // check for error: input data not a multiple of block size
- rval = (_input.length() === 0);
- if(rval) {
- if(pad) {
- rval = pad(8, _output, !encrypt);
- } else {
- // ensure padding byte count is valid
- var len = _output.length();
- var count = _output.at(len - 1);
-
- if(count > len) {
- rval = false;
- } else {
- // trim off padding bytes
- _output.truncate(count);
- }
- }
- }
- }
-
- return rval;
- }
- };
-
- return cipher;
-};
-
-/**
- * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the
- * given symmetric key. The output will be stored in the 'output' member
- * of the returned cipher.
- *
- * The key and iv may be given as a string of bytes or a byte buffer.
- * The cipher is initialized to use 128 effective key bits.
- *
- * @param key the symmetric key to use.
- * @param iv the initialization vector to use.
- * @param output the buffer to write to, null to create one.
- *
- * @return the cipher.
- */
-forge$p.rc2.startEncrypting = function(key, iv, output) {
- var cipher = forge$p.rc2.createEncryptionCipher(key, 128);
- cipher.start(iv, output);
- return cipher;
-};
-
-/**
- * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the
- * given symmetric key.
- *
- * The key may be given as a string of bytes or a byte buffer.
- *
- * To start encrypting call start() on the cipher with an iv and optional
- * output buffer.
- *
- * @param key the symmetric key to use.
- *
- * @return the cipher.
- */
-forge$p.rc2.createEncryptionCipher = function(key, bits) {
- return createCipher(key, bits, true);
-};
-
-/**
- * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the
- * given symmetric key. The output will be stored in the 'output' member
- * of the returned cipher.
- *
- * The key and iv may be given as a string of bytes or a byte buffer.
- * The cipher is initialized to use 128 effective key bits.
- *
- * @param key the symmetric key to use.
- * @param iv the initialization vector to use.
- * @param output the buffer to write to, null to create one.
- *
- * @return the cipher.
- */
-forge$p.rc2.startDecrypting = function(key, iv, output) {
- var cipher = forge$p.rc2.createDecryptionCipher(key, 128);
- cipher.start(iv, output);
- return cipher;
-};
-
-/**
- * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the
- * given symmetric key.
- *
- * The key may be given as a string of bytes or a byte buffer.
- *
- * To start decrypting call start() on the cipher with an iv and optional
- * output buffer.
- *
- * @param key the symmetric key to use.
- *
- * @return the cipher.
- */
-forge$p.rc2.createDecryptionCipher = function(key, bits) {
- return createCipher(key, bits, false);
-};
-
-// Copyright (c) 2005 Tom Wu
-// All Rights Reserved.
-// See "LICENSE" for details.
-
-// Basic JavaScript BN library - subset useful for RSA encryption.
-
-/*
-Licensing (LICENSE)
--------------------
-
-This software is covered under the following copyright:
-*/
-/*
- * Copyright (c) 2003-2005 Tom Wu
- * All Rights Reserved.
- *
- * 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" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- *
- * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
- * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * In addition, the following condition applies:
- *
- * All redistributions must retain an intact copy of this copyright notice
- * and disclaimer.
- */
-/*
-Address all questions regarding this license to:
-
- Tom Wu
- tjw@cs.Stanford.EDU
-*/
-var forge$o = forge$F;
-
-forge$o.jsbn = forge$o.jsbn || {};
-
-// Bits per digit
-var dbits;
-
-// (public) Constructor
-function BigInteger$2(a,b,c) {
- this.data = [];
- if(a != null)
- if("number" == typeof a) this.fromNumber(a,b,c);
- else if(b == null && "string" != typeof a) this.fromString(a,256);
- else this.fromString(a,b);
-}
-forge$o.jsbn.BigInteger = BigInteger$2;
-
-// return new, unset BigInteger
-function nbi() { return new BigInteger$2(null); }
-
-// am: Compute w_j += (x*this_i), propagate carries,
-// c is initial carry, returns final carry.
-// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
-// We need to select the fastest one that works in this environment.
-
-// am1: use a single mult and divide to get the high bits,
-// max digit bits should be 26 because
-// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
-function am1(i,x,w,j,c,n) {
- while(--n >= 0) {
- var v = x*this.data[i++]+w.data[j]+c;
- c = Math.floor(v/0x4000000);
- w.data[j++] = v&0x3ffffff;
- }
- return c;
-}
-// am2 avoids a big mult-and-extract completely.
-// Max digit bits should be <= 30 because we do bitwise ops
-// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
-function am2(i,x,w,j,c,n) {
- var xl = x&0x7fff, xh = x>>15;
- while(--n >= 0) {
- var l = this.data[i]&0x7fff;
- var h = this.data[i++]>>15;
- var m = xh*l+h*xl;
- l = xl*l+((m&0x7fff)<<15)+w.data[j]+(c&0x3fffffff);
- c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
- w.data[j++] = l&0x3fffffff;
- }
- return c;
-}
-// Alternately, set max digit bits to 28 since some
-// browsers slow down when dealing with 32-bit numbers.
-function am3(i,x,w,j,c,n) {
- var xl = x&0x3fff, xh = x>>14;
- while(--n >= 0) {
- var l = this.data[i]&0x3fff;
- var h = this.data[i++]>>14;
- var m = xh*l+h*xl;
- l = xl*l+((m&0x3fff)<<14)+w.data[j]+c;
- c = (l>>28)+(m>>14)+xh*h;
- w.data[j++] = l&0xfffffff;
- }
- return c;
-}
-
-// node.js (no browser)
-if(typeof(navigator) === 'undefined')
-{
- BigInteger$2.prototype.am = am3;
- dbits = 28;
-} else if((navigator.appName == "Microsoft Internet Explorer")) {
- BigInteger$2.prototype.am = am2;
- dbits = 30;
-} else if((navigator.appName != "Netscape")) {
- BigInteger$2.prototype.am = am1;
- dbits = 26;
-} else { // Mozilla/Netscape seems to prefer am3
- BigInteger$2.prototype.am = am3;
- dbits = 28;
-}
-
-BigInteger$2.prototype.DB = dbits;
-BigInteger$2.prototype.DM = ((1<<dbits)-1);
-BigInteger$2.prototype.DV = (1<<dbits);
-
-var BI_FP = 52;
-BigInteger$2.prototype.FV = Math.pow(2,BI_FP);
-BigInteger$2.prototype.F1 = BI_FP-dbits;
-BigInteger$2.prototype.F2 = 2*dbits-BI_FP;
-
-// Digit conversions
-var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
-var BI_RC = new Array();
-var rr,vv;
-rr = "0".charCodeAt(0);
-for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
-rr = "a".charCodeAt(0);
-for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
-rr = "A".charCodeAt(0);
-for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
-
-function int2char(n) { return BI_RM.charAt(n); }
-function intAt(s,i) {
- var c = BI_RC[s.charCodeAt(i)];
- return (c==null)?-1:c;
-}
-
-// (protected) copy this to r
-function bnpCopyTo(r) {
- for(var i = this.t-1; i >= 0; --i) r.data[i] = this.data[i];
- r.t = this.t;
- r.s = this.s;
-}
-
-// (protected) set from integer value x, -DV <= x < DV
-function bnpFromInt(x) {
- this.t = 1;
- this.s = (x<0)?-1:0;
- if(x > 0) this.data[0] = x;
- else if(x < -1) this.data[0] = x+this.DV;
- else this.t = 0;
-}
-
-// return bigint initialized to value
-function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
-
-// (protected) set from string and radix
-function bnpFromString(s,b) {
- var k;
- if(b == 16) k = 4;
- else if(b == 8) k = 3;
- else if(b == 256) k = 8; // byte array
- else if(b == 2) k = 1;
- else if(b == 32) k = 5;
- else if(b == 4) k = 2;
- else { this.fromRadix(s,b); return; }
- this.t = 0;
- this.s = 0;
- var i = s.length, mi = false, sh = 0;
- while(--i >= 0) {
- var x = (k==8)?s[i]&0xff:intAt(s,i);
- if(x < 0) {
- if(s.charAt(i) == "-") mi = true;
- continue;
- }
- mi = false;
- if(sh == 0)
- this.data[this.t++] = x;
- else if(sh+k > this.DB) {
- this.data[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;
- this.data[this.t++] = (x>>(this.DB-sh));
- } else
- this.data[this.t-1] |= x<<sh;
- sh += k;
- if(sh >= this.DB) sh -= this.DB;
- }
- if(k == 8 && (s[0]&0x80) != 0) {
- this.s = -1;
- if(sh > 0) this.data[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;
- }
- this.clamp();
- if(mi) BigInteger$2.ZERO.subTo(this,this);
-}
-
-// (protected) clamp off excess high words
-function bnpClamp() {
- var c = this.s&this.DM;
- while(this.t > 0 && this.data[this.t-1] == c) --this.t;
-}
-
-// (public) return string representation in given radix
-function bnToString(b) {
- if(this.s < 0) return "-"+this.negate().toString(b);
- var k;
- if(b == 16) k = 4;
- else if(b == 8) k = 3;
- else if(b == 2) k = 1;
- else if(b == 32) k = 5;
- else if(b == 4) k = 2;
- else return this.toRadix(b);
- var km = (1<<k)-1, d, m = false, r = "", i = this.t;
- var p = this.DB-(i*this.DB)%k;
- if(i-- > 0) {
- if(p < this.DB && (d = this.data[i]>>p) > 0) { m = true; r = int2char(d); }
- while(i >= 0) {
- if(p < k) {
- d = (this.data[i]&((1<<p)-1))<<(k-p);
- d |= this.data[--i]>>(p+=this.DB-k);
- } else {
- d = (this.data[i]>>(p-=k))&km;
- if(p <= 0) { p += this.DB; --i; }
- }
- if(d > 0) m = true;
- if(m) r += int2char(d);
- }
- }
- return m?r:"0";
-}
-
-// (public) -this
-function bnNegate() { var r = nbi(); BigInteger$2.ZERO.subTo(this,r); return r; }
-
-// (public) |this|
-function bnAbs() { return (this.s<0)?this.negate():this; }
-
-// (public) return + if this > a, - if this < a, 0 if equal
-function bnCompareTo(a) {
- var r = this.s-a.s;
- if(r != 0) return r;
- var i = this.t;
- r = i-a.t;
- if(r != 0) return (this.s<0)?-r:r;
- while(--i >= 0) if((r=this.data[i]-a.data[i]) != 0) return r;
- return 0;
-}
-
-// returns bit length of the integer x
-function nbits(x) {
- var r = 1, t;
- if((t=x>>>16) != 0) { x = t; r += 16; }
- if((t=x>>8) != 0) { x = t; r += 8; }
- if((t=x>>4) != 0) { x = t; r += 4; }
- if((t=x>>2) != 0) { x = t; r += 2; }
- if((t=x>>1) != 0) { x = t; r += 1; }
- return r;
-}
-
-// (public) return the number of bits in "this"
-function bnBitLength() {
- if(this.t <= 0) return 0;
- return this.DB*(this.t-1)+nbits(this.data[this.t-1]^(this.s&this.DM));
-}
-
-// (protected) r = this << n*DB
-function bnpDLShiftTo(n,r) {
- var i;
- for(i = this.t-1; i >= 0; --i) r.data[i+n] = this.data[i];
- for(i = n-1; i >= 0; --i) r.data[i] = 0;
- r.t = this.t+n;
- r.s = this.s;
-}
-
-// (protected) r = this >> n*DB
-function bnpDRShiftTo(n,r) {
- for(var i = n; i < this.t; ++i) r.data[i-n] = this.data[i];
- r.t = Math.max(this.t-n,0);
- r.s = this.s;
-}
-
-// (protected) r = this << n
-function bnpLShiftTo(n,r) {
- var bs = n%this.DB;
- var cbs = this.DB-bs;
- var bm = (1<<cbs)-1;
- var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;
- for(i = this.t-1; i >= 0; --i) {
- r.data[i+ds+1] = (this.data[i]>>cbs)|c;
- c = (this.data[i]&bm)<<bs;
- }
- for(i = ds-1; i >= 0; --i) r.data[i] = 0;
- r.data[ds] = c;
- r.t = this.t+ds+1;
- r.s = this.s;
- r.clamp();
-}
-
-// (protected) r = this >> n
-function bnpRShiftTo(n,r) {
- r.s = this.s;
- var ds = Math.floor(n/this.DB);
- if(ds >= this.t) { r.t = 0; return; }
- var bs = n%this.DB;
- var cbs = this.DB-bs;
- var bm = (1<<bs)-1;
- r.data[0] = this.data[ds]>>bs;
- for(var i = ds+1; i < this.t; ++i) {
- r.data[i-ds-1] |= (this.data[i]&bm)<<cbs;
- r.data[i-ds] = this.data[i]>>bs;
- }
- if(bs > 0) r.data[this.t-ds-1] |= (this.s&bm)<<cbs;
- r.t = this.t-ds;
- r.clamp();
-}
-
-// (protected) r = this - a
-function bnpSubTo(a,r) {
- var i = 0, c = 0, m = Math.min(a.t,this.t);
- while(i < m) {
- c += this.data[i]-a.data[i];
- r.data[i++] = c&this.DM;
- c >>= this.DB;
- }
- if(a.t < this.t) {
- c -= a.s;
- while(i < this.t) {
- c += this.data[i];
- r.data[i++] = c&this.DM;
- c >>= this.DB;
- }
- c += this.s;
- } else {
- c += this.s;
- while(i < a.t) {
- c -= a.data[i];
- r.data[i++] = c&this.DM;
- c >>= this.DB;
- }
- c -= a.s;
- }
- r.s = (c<0)?-1:0;
- if(c < -1) r.data[i++] = this.DV+c;
- else if(c > 0) r.data[i++] = c;
- r.t = i;
- r.clamp();
-}
-
-// (protected) r = this * a, r != this,a (HAC 14.12)
-// "this" should be the larger one if appropriate.
-function bnpMultiplyTo(a,r) {
- var x = this.abs(), y = a.abs();
- var i = x.t;
- r.t = i+y.t;
- while(--i >= 0) r.data[i] = 0;
- for(i = 0; i < y.t; ++i) r.data[i+x.t] = x.am(0,y.data[i],r,i,0,x.t);
- r.s = 0;
- r.clamp();
- if(this.s != a.s) BigInteger$2.ZERO.subTo(r,r);
-}
-
-// (protected) r = this^2, r != this (HAC 14.16)
-function bnpSquareTo(r) {
- var x = this.abs();
- var i = r.t = 2*x.t;
- while(--i >= 0) r.data[i] = 0;
- for(i = 0; i < x.t-1; ++i) {
- var c = x.am(i,x.data[i],r,2*i,0,1);
- if((r.data[i+x.t]+=x.am(i+1,2*x.data[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {
- r.data[i+x.t] -= x.DV;
- r.data[i+x.t+1] = 1;
- }
- }
- if(r.t > 0) r.data[r.t-1] += x.am(i,x.data[i],r,2*i,0,1);
- r.s = 0;
- r.clamp();
-}
-
-// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
-// r != q, this != m. q or r may be null.
-function bnpDivRemTo(m,q,r) {
- var pm = m.abs();
- if(pm.t <= 0) return;
- var pt = this.abs();
- if(pt.t < pm.t) {
- if(q != null) q.fromInt(0);
- if(r != null) this.copyTo(r);
- return;
- }
- if(r == null) r = nbi();
- var y = nbi(), ts = this.s, ms = m.s;
- var nsh = this.DB-nbits(pm.data[pm.t-1]); // normalize modulus
- if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } else { pm.copyTo(y); pt.copyTo(r); }
- var ys = y.t;
- var y0 = y.data[ys-1];
- if(y0 == 0) return;
- var yt = y0*(1<<this.F1)+((ys>1)?y.data[ys-2]>>this.F2:0);
- var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;
- var i = r.t, j = i-ys, t = (q==null)?nbi():q;
- y.dlShiftTo(j,t);
- if(r.compareTo(t) >= 0) {
- r.data[r.t++] = 1;
- r.subTo(t,r);
- }
- BigInteger$2.ONE.dlShiftTo(ys,t);
- t.subTo(y,y); // "negative" y so we can replace sub with am later
- while(y.t < ys) y.data[y.t++] = 0;
- while(--j >= 0) {
- // Estimate quotient digit
- var qd = (r.data[--i]==y0)?this.DM:Math.floor(r.data[i]*d1+(r.data[i-1]+e)*d2);
- if((r.data[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
- y.dlShiftTo(j,t);
- r.subTo(t,r);
- while(r.data[i] < --qd) r.subTo(t,r);
- }
- }
- if(q != null) {
- r.drShiftTo(ys,q);
- if(ts != ms) BigInteger$2.ZERO.subTo(q,q);
- }
- r.t = ys;
- r.clamp();
- if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
- if(ts < 0) BigInteger$2.ZERO.subTo(r,r);
-}
-
-// (public) this mod a
-function bnMod(a) {
- var r = nbi();
- this.abs().divRemTo(a,null,r);
- if(this.s < 0 && r.compareTo(BigInteger$2.ZERO) > 0) a.subTo(r,r);
- return r;
-}
-
-// Modular reduction using "classic" algorithm
-function Classic(m) { this.m = m; }
-function cConvert(x) {
- if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
- else return x;
-}
-function cRevert(x) { return x; }
-function cReduce(x) { x.divRemTo(this.m,null,x); }
-function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
-function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
-
-Classic.prototype.convert = cConvert;
-Classic.prototype.revert = cRevert;
-Classic.prototype.reduce = cReduce;
-Classic.prototype.mulTo = cMulTo;
-Classic.prototype.sqrTo = cSqrTo;
-
-// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
-// justification:
-// xy == 1 (mod m)
-// xy = 1+km
-// xy(2-xy) = (1+km)(1-km)
-// x[y(2-xy)] = 1-k^2m^2
-// x[y(2-xy)] == 1 (mod m^2)
-// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
-// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
-// JS multiply "overflows" differently from C/C++, so care is needed here.
-function bnpInvDigit() {
- if(this.t < 1) return 0;
- var x = this.data[0];
- if((x&1) == 0) return 0;
- var y = x&3; // y == 1/x mod 2^2
- y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
- y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
- y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
- // last step - calculate inverse mod DV directly;
- // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
- y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits
- // we really want the negative inverse, and -DV < y < DV
- return (y>0)?this.DV-y:-y;
-}
-
-// Montgomery reduction
-function Montgomery(m) {
- this.m = m;
- this.mp = m.invDigit();
- this.mpl = this.mp&0x7fff;
- this.mph = this.mp>>15;
- this.um = (1<<(m.DB-15))-1;
- this.mt2 = 2*m.t;
-}
-
-// xR mod m
-function montConvert(x) {
- var r = nbi();
- x.abs().dlShiftTo(this.m.t,r);
- r.divRemTo(this.m,null,r);
- if(x.s < 0 && r.compareTo(BigInteger$2.ZERO) > 0) this.m.subTo(r,r);
- return r;
-}
-
-// x/R mod m
-function montRevert(x) {
- var r = nbi();
- x.copyTo(r);
- this.reduce(r);
- return r;
-}
-
-// x = x/R mod m (HAC 14.32)
-function montReduce(x) {
- while(x.t <= this.mt2) // pad x so am has enough room later
- x.data[x.t++] = 0;
- for(var i = 0; i < this.m.t; ++i) {
- // faster way of calculating u0 = x.data[i]*mp mod DV
- var j = x.data[i]&0x7fff;
- var u0 = (j*this.mpl+(((j*this.mph+(x.data[i]>>15)*this.mpl)&this.um)<<15))&x.DM;
- // use am to combine the multiply-shift-add into one call
- j = i+this.m.t;
- x.data[j] += this.m.am(0,u0,x,i,0,this.m.t);
- // propagate carry
- while(x.data[j] >= x.DV) { x.data[j] -= x.DV; x.data[++j]++; }
- }
- x.clamp();
- x.drShiftTo(this.m.t,x);
- if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
-}
-
-// r = "x^2/R mod m"; x != r
-function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
-
-// r = "xy/R mod m"; x,y != r
-function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
-
-Montgomery.prototype.convert = montConvert;
-Montgomery.prototype.revert = montRevert;
-Montgomery.prototype.reduce = montReduce;
-Montgomery.prototype.mulTo = montMulTo;
-Montgomery.prototype.sqrTo = montSqrTo;
-
-// (protected) true iff this is even
-function bnpIsEven() { return ((this.t>0)?(this.data[0]&1):this.s) == 0; }
-
-// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
-function bnpExp(e,z) {
- if(e > 0xffffffff || e < 1) return BigInteger$2.ONE;
- var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
- g.copyTo(r);
- while(--i >= 0) {
- z.sqrTo(r,r2);
- if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
- else { var t = r; r = r2; r2 = t; }
- }
- return z.revert(r);
-}
-
-// (public) this^e % m, 0 <= e < 2^32
-function bnModPowInt(e,m) {
- var z;
- if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
- return this.exp(e,z);
-}
-
-// protected
-BigInteger$2.prototype.copyTo = bnpCopyTo;
-BigInteger$2.prototype.fromInt = bnpFromInt;
-BigInteger$2.prototype.fromString = bnpFromString;
-BigInteger$2.prototype.clamp = bnpClamp;
-BigInteger$2.prototype.dlShiftTo = bnpDLShiftTo;
-BigInteger$2.prototype.drShiftTo = bnpDRShiftTo;
-BigInteger$2.prototype.lShiftTo = bnpLShiftTo;
-BigInteger$2.prototype.rShiftTo = bnpRShiftTo;
-BigInteger$2.prototype.subTo = bnpSubTo;
-BigInteger$2.prototype.multiplyTo = bnpMultiplyTo;
-BigInteger$2.prototype.squareTo = bnpSquareTo;
-BigInteger$2.prototype.divRemTo = bnpDivRemTo;
-BigInteger$2.prototype.invDigit = bnpInvDigit;
-BigInteger$2.prototype.isEven = bnpIsEven;
-BigInteger$2.prototype.exp = bnpExp;
-
-// public
-BigInteger$2.prototype.toString = bnToString;
-BigInteger$2.prototype.negate = bnNegate;
-BigInteger$2.prototype.abs = bnAbs;
-BigInteger$2.prototype.compareTo = bnCompareTo;
-BigInteger$2.prototype.bitLength = bnBitLength;
-BigInteger$2.prototype.mod = bnMod;
-BigInteger$2.prototype.modPowInt = bnModPowInt;
-
-// "constants"
-BigInteger$2.ZERO = nbv(0);
-BigInteger$2.ONE = nbv(1);
-
-// jsbn2 lib
-
-//Copyright (c) 2005-2009 Tom Wu
-//All Rights Reserved.
-//See "LICENSE" for details (See jsbn.js for LICENSE).
-
-//Extended JavaScript BN functions, required for RSA private ops.
-
-//Version 1.1: new BigInteger("0", 10) returns "proper" zero
-
-//(public)
-function bnClone() { var r = nbi(); this.copyTo(r); return r; }
-
-//(public) return value as integer
-function bnIntValue() {
-if(this.s < 0) {
- if(this.t == 1) return this.data[0]-this.DV;
- else if(this.t == 0) return -1;
-} else if(this.t == 1) return this.data[0];
-else if(this.t == 0) return 0;
-// assumes 16 < DB < 32
-return ((this.data[1]&((1<<(32-this.DB))-1))<<this.DB)|this.data[0];
-}
-
-//(public) return value as byte
-function bnByteValue() { return (this.t==0)?this.s:(this.data[0]<<24)>>24; }
-
-//(public) return value as short (assumes DB>=16)
-function bnShortValue() { return (this.t==0)?this.s:(this.data[0]<<16)>>16; }
-
-//(protected) return x s.t. r^x < DV
-function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }
-
-//(public) 0 if this == 0, 1 if this > 0
-function bnSigNum() {
-if(this.s < 0) return -1;
-else if(this.t <= 0 || (this.t == 1 && this.data[0] <= 0)) return 0;
-else return 1;
-}
-
-//(protected) convert to radix string
-function bnpToRadix(b) {
-if(b == null) b = 10;
-if(this.signum() == 0 || b < 2 || b > 36) return "0";
-var cs = this.chunkSize(b);
-var a = Math.pow(b,cs);
-var d = nbv(a), y = nbi(), z = nbi(), r = "";
-this.divRemTo(d,y,z);
-while(y.signum() > 0) {
- r = (a+z.intValue()).toString(b).substr(1) + r;
- y.divRemTo(d,y,z);
-}
-return z.intValue().toString(b) + r;
-}
-
-//(protected) convert from radix string
-function bnpFromRadix(s,b) {
-this.fromInt(0);
-if(b == null) b = 10;
-var cs = this.chunkSize(b);
-var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
-for(var i = 0; i < s.length; ++i) {
- var x = intAt(s,i);
- if(x < 0) {
- if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
- continue;
- }
- w = b*w+x;
- if(++j >= cs) {
- this.dMultiply(d);
- this.dAddOffset(w,0);
- j = 0;
- w = 0;
- }
-}
-if(j > 0) {
- this.dMultiply(Math.pow(b,j));
- this.dAddOffset(w,0);
-}
-if(mi) BigInteger$2.ZERO.subTo(this,this);
-}
-
-//(protected) alternate constructor
-function bnpFromNumber(a,b,c) {
-if("number" == typeof b) {
- // new BigInteger(int,int,RNG)
- if(a < 2) this.fromInt(1);
- else {
- this.fromNumber(a,c);
- if(!this.testBit(a-1)) // force MSB set
- this.bitwiseTo(BigInteger$2.ONE.shiftLeft(a-1),op_or,this);
- if(this.isEven()) this.dAddOffset(1,0); // force odd
- while(!this.isProbablePrime(b)) {
- this.dAddOffset(2,0);
- if(this.bitLength() > a) this.subTo(BigInteger$2.ONE.shiftLeft(a-1),this);
- }
- }
-} else {
- // new BigInteger(int,RNG)
- var x = new Array(), t = a&7;
- x.length = (a>>3)+1;
- b.nextBytes(x);
- if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;
- this.fromString(x,256);
-}
-}
-
-//(public) convert to bigendian byte array
-function bnToByteArray() {
-var i = this.t, r = new Array();
-r[0] = this.s;
-var p = this.DB-(i*this.DB)%8, d, k = 0;
-if(i-- > 0) {
- if(p < this.DB && (d = this.data[i]>>p) != (this.s&this.DM)>>p)
- r[k++] = d|(this.s<<(this.DB-p));
- while(i >= 0) {
- if(p < 8) {
- d = (this.data[i]&((1<<p)-1))<<(8-p);
- d |= this.data[--i]>>(p+=this.DB-8);
- } else {
- d = (this.data[i]>>(p-=8))&0xff;
- if(p <= 0) { p += this.DB; --i; }
- }
- if((d&0x80) != 0) d |= -256;
- if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
- if(k > 0 || d != this.s) r[k++] = d;
- }
-}
-return r;
-}
-
-function bnEquals(a) { return(this.compareTo(a)==0); }
-function bnMin(a) { return (this.compareTo(a)<0)?this:a; }
-function bnMax(a) { return (this.compareTo(a)>0)?this:a; }
-
-//(protected) r = this op a (bitwise)
-function bnpBitwiseTo(a,op,r) {
-var i, f, m = Math.min(a.t,this.t);
-for(i = 0; i < m; ++i) r.data[i] = op(this.data[i],a.data[i]);
-if(a.t < this.t) {
- f = a.s&this.DM;
- for(i = m; i < this.t; ++i) r.data[i] = op(this.data[i],f);
- r.t = this.t;
-} else {
- f = this.s&this.DM;
- for(i = m; i < a.t; ++i) r.data[i] = op(f,a.data[i]);
- r.t = a.t;
-}
-r.s = op(this.s,a.s);
-r.clamp();
-}
-
-//(public) this & a
-function op_and(x,y) { return x&y; }
-function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
-
-//(public) this | a
-function op_or(x,y) { return x|y; }
-function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
-
-//(public) this ^ a
-function op_xor(x,y) { return x^y; }
-function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
-
-//(public) this & ~a
-function op_andnot(x,y) { return x&~y; }
-function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
-
-//(public) ~this
-function bnNot() {
-var r = nbi();
-for(var i = 0; i < this.t; ++i) r.data[i] = this.DM&~this.data[i];
-r.t = this.t;
-r.s = ~this.s;
-return r;
-}
-
-//(public) this << n
-function bnShiftLeft(n) {
-var r = nbi();
-if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
-return r;
-}
-
-//(public) this >> n
-function bnShiftRight(n) {
-var r = nbi();
-if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
-return r;
-}
-
-//return index of lowest 1-bit in x, x < 2^31
-function lbit(x) {
-if(x == 0) return -1;
-var r = 0;
-if((x&0xffff) == 0) { x >>= 16; r += 16; }
-if((x&0xff) == 0) { x >>= 8; r += 8; }
-if((x&0xf) == 0) { x >>= 4; r += 4; }
-if((x&3) == 0) { x >>= 2; r += 2; }
-if((x&1) == 0) ++r;
-return r;
-}
-
-//(public) returns index of lowest 1-bit (or -1 if none)
-function bnGetLowestSetBit() {
-for(var i = 0; i < this.t; ++i)
- if(this.data[i] != 0) return i*this.DB+lbit(this.data[i]);
-if(this.s < 0) return this.t*this.DB;
-return -1;
-}
-
-//return number of 1 bits in x
-function cbit(x) {
-var r = 0;
-while(x != 0) { x &= x-1; ++r; }
-return r;
-}
-
-//(public) return number of set bits
-function bnBitCount() {
-var r = 0, x = this.s&this.DM;
-for(var i = 0; i < this.t; ++i) r += cbit(this.data[i]^x);
-return r;
-}
-
-//(public) true iff nth bit is set
-function bnTestBit(n) {
-var j = Math.floor(n/this.DB);
-if(j >= this.t) return(this.s!=0);
-return((this.data[j]&(1<<(n%this.DB)))!=0);
-}
-
-//(protected) this op (1<<n)
-function bnpChangeBit(n,op) {
-var r = BigInteger$2.ONE.shiftLeft(n);
-this.bitwiseTo(r,op,r);
-return r;
-}
-
-//(public) this | (1<<n)
-function bnSetBit(n) { return this.changeBit(n,op_or); }
-
-//(public) this & ~(1<<n)
-function bnClearBit(n) { return this.changeBit(n,op_andnot); }
-
-//(public) this ^ (1<<n)
-function bnFlipBit(n) { return this.changeBit(n,op_xor); }
-
-//(protected) r = this + a
-function bnpAddTo(a,r) {
-var i = 0, c = 0, m = Math.min(a.t,this.t);
-while(i < m) {
- c += this.data[i]+a.data[i];
- r.data[i++] = c&this.DM;
- c >>= this.DB;
-}
-if(a.t < this.t) {
- c += a.s;
- while(i < this.t) {
- c += this.data[i];
- r.data[i++] = c&this.DM;
- c >>= this.DB;
- }
- c += this.s;
-} else {
- c += this.s;
- while(i < a.t) {
- c += a.data[i];
- r.data[i++] = c&this.DM;
- c >>= this.DB;
- }
- c += a.s;
-}
-r.s = (c<0)?-1:0;
-if(c > 0) r.data[i++] = c;
-else if(c < -1) r.data[i++] = this.DV+c;
-r.t = i;
-r.clamp();
-}
-
-//(public) this + a
-function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
-
-//(public) this - a
-function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
-
-//(public) this * a
-function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
-
-//(public) this / a
-function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
-
-//(public) this % a
-function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
-
-//(public) [this/a,this%a]
-function bnDivideAndRemainder(a) {
-var q = nbi(), r = nbi();
-this.divRemTo(a,q,r);
-return new Array(q,r);
-}
-
-//(protected) this *= n, this >= 0, 1 < n < DV
-function bnpDMultiply(n) {
-this.data[this.t] = this.am(0,n-1,this,0,0,this.t);
-++this.t;
-this.clamp();
-}
-
-//(protected) this += n << w words, this >= 0
-function bnpDAddOffset(n,w) {
-if(n == 0) return;
-while(this.t <= w) this.data[this.t++] = 0;
-this.data[w] += n;
-while(this.data[w] >= this.DV) {
- this.data[w] -= this.DV;
- if(++w >= this.t) this.data[this.t++] = 0;
- ++this.data[w];
-}
-}
-
-//A "null" reducer
-function NullExp() {}
-function nNop(x) { return x; }
-function nMulTo(x,y,r) { x.multiplyTo(y,r); }
-function nSqrTo(x,r) { x.squareTo(r); }
-
-NullExp.prototype.convert = nNop;
-NullExp.prototype.revert = nNop;
-NullExp.prototype.mulTo = nMulTo;
-NullExp.prototype.sqrTo = nSqrTo;
-
-//(public) this^e
-function bnPow(e) { return this.exp(e,new NullExp()); }
-
-//(protected) r = lower n words of "this * a", a.t <= n
-//"this" should be the larger one if appropriate.
-function bnpMultiplyLowerTo(a,n,r) {
-var i = Math.min(this.t+a.t,n);
-r.s = 0; // assumes a,this >= 0
-r.t = i;
-while(i > 0) r.data[--i] = 0;
-var j;
-for(j = r.t-this.t; i < j; ++i) r.data[i+this.t] = this.am(0,a.data[i],r,i,0,this.t);
-for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a.data[i],r,i,0,n-i);
-r.clamp();
-}
-
-//(protected) r = "this * a" without lower n words, n > 0
-//"this" should be the larger one if appropriate.
-function bnpMultiplyUpperTo(a,n,r) {
---n;
-var i = r.t = this.t+a.t-n;
-r.s = 0; // assumes a,this >= 0
-while(--i >= 0) r.data[i] = 0;
-for(i = Math.max(n-this.t,0); i < a.t; ++i)
- r.data[this.t+i-n] = this.am(n-i,a.data[i],r,0,0,this.t+i-n);
-r.clamp();
-r.drShiftTo(1,r);
-}
-
-//Barrett modular reduction
-function Barrett(m) {
-// setup Barrett
-this.r2 = nbi();
-this.q3 = nbi();
-BigInteger$2.ONE.dlShiftTo(2*m.t,this.r2);
-this.mu = this.r2.divide(m);
-this.m = m;
-}
-
-function barrettConvert(x) {
-if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
-else if(x.compareTo(this.m) < 0) return x;
-else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
-}
-
-function barrettRevert(x) { return x; }
-
-//x = x mod m (HAC 14.42)
-function barrettReduce(x) {
-x.drShiftTo(this.m.t-1,this.r2);
-if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
-this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
-this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
-while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
-x.subTo(this.r2,x);
-while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
-}
-
-//r = x^2 mod m; x != r
-function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
-
-//r = x*y mod m; x,y != r
-function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
-
-Barrett.prototype.convert = barrettConvert;
-Barrett.prototype.revert = barrettRevert;
-Barrett.prototype.reduce = barrettReduce;
-Barrett.prototype.mulTo = barrettMulTo;
-Barrett.prototype.sqrTo = barrettSqrTo;
-
-//(public) this^e % m (HAC 14.85)
-function bnModPow(e,m) {
-var i = e.bitLength(), k, r = nbv(1), z;
-if(i <= 0) return r;
-else if(i < 18) k = 1;
-else if(i < 48) k = 3;
-else if(i < 144) k = 4;
-else if(i < 768) k = 5;
-else k = 6;
-if(i < 8)
- z = new Classic(m);
-else if(m.isEven())
- z = new Barrett(m);
-else
- z = new Montgomery(m);
-
-// precomputation
-var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;
-g[1] = z.convert(this);
-if(k > 1) {
- var g2 = nbi();
- z.sqrTo(g[1],g2);
- while(n <= km) {
- g[n] = nbi();
- z.mulTo(g2,g[n-2],g[n]);
- n += 2;
- }
-}
-
-var j = e.t-1, w, is1 = true, r2 = nbi(), t;
-i = nbits(e.data[j])-1;
-while(j >= 0) {
- if(i >= k1) w = (e.data[j]>>(i-k1))&km;
- else {
- w = (e.data[j]&((1<<(i+1))-1))<<(k1-i);
- if(j > 0) w |= e.data[j-1]>>(this.DB+i-k1);
- }
-
- n = k;
- while((w&1) == 0) { w >>= 1; --n; }
- if((i -= n) < 0) { i += this.DB; --j; }
- if(is1) { // ret == 1, don't bother squaring or multiplying it
- g[w].copyTo(r);
- is1 = false;
- } else {
- while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
- if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
- z.mulTo(r2,g[w],r);
- }
-
- while(j >= 0 && (e.data[j]&(1<<i)) == 0) {
- z.sqrTo(r,r2); t = r; r = r2; r2 = t;
- if(--i < 0) { i = this.DB-1; --j; }
- }
-}
-return z.revert(r);
-}
-
-//(public) gcd(this,a) (HAC 14.54)
-function bnGCD(a) {
-var x = (this.s<0)?this.negate():this.clone();
-var y = (a.s<0)?a.negate():a.clone();
-if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }
-var i = x.getLowestSetBit(), g = y.getLowestSetBit();
-if(g < 0) return x;
-if(i < g) g = i;
-if(g > 0) {
- x.rShiftTo(g,x);
- y.rShiftTo(g,y);
-}
-while(x.signum() > 0) {
- if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
- if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
- if(x.compareTo(y) >= 0) {
- x.subTo(y,x);
- x.rShiftTo(1,x);
- } else {
- y.subTo(x,y);
- y.rShiftTo(1,y);
- }
-}
-if(g > 0) y.lShiftTo(g,y);
-return y;
-}
-
-//(protected) this % n, n < 2^26
-function bnpModInt(n) {
-if(n <= 0) return 0;
-var d = this.DV%n, r = (this.s<0)?n-1:0;
-if(this.t > 0)
- if(d == 0) r = this.data[0]%n;
- else for(var i = this.t-1; i >= 0; --i) r = (d*r+this.data[i])%n;
-return r;
-}
-
-//(public) 1/this % m (HAC 14.61)
-function bnModInverse(m) {
-var ac = m.isEven();
-if((this.isEven() && ac) || m.signum() == 0) return BigInteger$2.ZERO;
-var u = m.clone(), v = this.clone();
-var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
-while(u.signum() != 0) {
- while(u.isEven()) {
- u.rShiftTo(1,u);
- if(ac) {
- if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
- a.rShiftTo(1,a);
- } else if(!b.isEven()) b.subTo(m,b);
- b.rShiftTo(1,b);
- }
- while(v.isEven()) {
- v.rShiftTo(1,v);
- if(ac) {
- if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
- c.rShiftTo(1,c);
- } else if(!d.isEven()) d.subTo(m,d);
- d.rShiftTo(1,d);
- }
- if(u.compareTo(v) >= 0) {
- u.subTo(v,u);
- if(ac) a.subTo(c,a);
- b.subTo(d,b);
- } else {
- v.subTo(u,v);
- if(ac) c.subTo(a,c);
- d.subTo(b,d);
- }
-}
-if(v.compareTo(BigInteger$2.ONE) != 0) return BigInteger$2.ZERO;
-if(d.compareTo(m) >= 0) return d.subtract(m);
-if(d.signum() < 0) d.addTo(m,d); else return d;
-if(d.signum() < 0) return d.add(m); else return d;
-}
-
-var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];
-var lplim = (1<<26)/lowprimes[lowprimes.length-1];
-
-//(public) test primality with certainty >= 1-.5^t
-function bnIsProbablePrime(t) {
-var i, x = this.abs();
-if(x.t == 1 && x.data[0] <= lowprimes[lowprimes.length-1]) {
- for(i = 0; i < lowprimes.length; ++i)
- if(x.data[0] == lowprimes[i]) return true;
- return false;
-}
-if(x.isEven()) return false;
-i = 1;
-while(i < lowprimes.length) {
- var m = lowprimes[i], j = i+1;
- while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];
- m = x.modInt(m);
- while(i < j) if(m%lowprimes[i++] == 0) return false;
-}
-return x.millerRabin(t);
-}
-
-//(protected) true if probably prime (HAC 4.24, Miller-Rabin)
-function bnpMillerRabin(t) {
-var n1 = this.subtract(BigInteger$2.ONE);
-var k = n1.getLowestSetBit();
-if(k <= 0) return false;
-var r = n1.shiftRight(k);
-var prng = bnGetPrng();
-var a;
-for(var i = 0; i < t; ++i) {
- // select witness 'a' at random from between 1 and n1
- do {
- a = new BigInteger$2(this.bitLength(), prng);
- }
- while(a.compareTo(BigInteger$2.ONE) <= 0 || a.compareTo(n1) >= 0);
- var y = a.modPow(r,this);
- if(y.compareTo(BigInteger$2.ONE) != 0 && y.compareTo(n1) != 0) {
- var j = 1;
- while(j++ < k && y.compareTo(n1) != 0) {
- y = y.modPowInt(2,this);
- if(y.compareTo(BigInteger$2.ONE) == 0) return false;
- }
- if(y.compareTo(n1) != 0) return false;
- }
-}
-return true;
-}
-
-// get pseudo random number generator
-function bnGetPrng() {
- // create prng with api that matches BigInteger secure random
- return {
- // x is an array to fill with bytes
- nextBytes: function(x) {
- for(var i = 0; i < x.length; ++i) {
- x[i] = Math.floor(Math.random() * 0x0100);
- }
- }
- };
-}
-
-//protected
-BigInteger$2.prototype.chunkSize = bnpChunkSize;
-BigInteger$2.prototype.toRadix = bnpToRadix;
-BigInteger$2.prototype.fromRadix = bnpFromRadix;
-BigInteger$2.prototype.fromNumber = bnpFromNumber;
-BigInteger$2.prototype.bitwiseTo = bnpBitwiseTo;
-BigInteger$2.prototype.changeBit = bnpChangeBit;
-BigInteger$2.prototype.addTo = bnpAddTo;
-BigInteger$2.prototype.dMultiply = bnpDMultiply;
-BigInteger$2.prototype.dAddOffset = bnpDAddOffset;
-BigInteger$2.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
-BigInteger$2.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
-BigInteger$2.prototype.modInt = bnpModInt;
-BigInteger$2.prototype.millerRabin = bnpMillerRabin;
-
-//public
-BigInteger$2.prototype.clone = bnClone;
-BigInteger$2.prototype.intValue = bnIntValue;
-BigInteger$2.prototype.byteValue = bnByteValue;
-BigInteger$2.prototype.shortValue = bnShortValue;
-BigInteger$2.prototype.signum = bnSigNum;
-BigInteger$2.prototype.toByteArray = bnToByteArray;
-BigInteger$2.prototype.equals = bnEquals;
-BigInteger$2.prototype.min = bnMin;
-BigInteger$2.prototype.max = bnMax;
-BigInteger$2.prototype.and = bnAnd;
-BigInteger$2.prototype.or = bnOr;
-BigInteger$2.prototype.xor = bnXor;
-BigInteger$2.prototype.andNot = bnAndNot;
-BigInteger$2.prototype.not = bnNot;
-BigInteger$2.prototype.shiftLeft = bnShiftLeft;
-BigInteger$2.prototype.shiftRight = bnShiftRight;
-BigInteger$2.prototype.getLowestSetBit = bnGetLowestSetBit;
-BigInteger$2.prototype.bitCount = bnBitCount;
-BigInteger$2.prototype.testBit = bnTestBit;
-BigInteger$2.prototype.setBit = bnSetBit;
-BigInteger$2.prototype.clearBit = bnClearBit;
-BigInteger$2.prototype.flipBit = bnFlipBit;
-BigInteger$2.prototype.add = bnAdd;
-BigInteger$2.prototype.subtract = bnSubtract;
-BigInteger$2.prototype.multiply = bnMultiply;
-BigInteger$2.prototype.divide = bnDivide;
-BigInteger$2.prototype.remainder = bnRemainder;
-BigInteger$2.prototype.divideAndRemainder = bnDivideAndRemainder;
-BigInteger$2.prototype.modPow = bnModPow;
-BigInteger$2.prototype.modInverse = bnModInverse;
-BigInteger$2.prototype.pow = bnPow;
-BigInteger$2.prototype.gcd = bnGCD;
-BigInteger$2.prototype.isProbablePrime = bnIsProbablePrime;
-
-/**
- * Secure Hash Algorithm with 160-bit digest (SHA-1) implementation.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2015 Digital Bazaar, Inc.
- */
-
-var forge$n = forge$F;
-
-
-
-var sha1 = forge$n.sha1 = forge$n.sha1 || {};
-forge$n.md.sha1 = forge$n.md.algorithms.sha1 = sha1;
-
-/**
- * Creates a SHA-1 message digest object.
- *
- * @return a message digest object.
- */
-sha1.create = function() {
- // do initialization as necessary
- if(!_initialized$1) {
- _init$1();
- }
-
- // SHA-1 state contains five 32-bit integers
- var _state = null;
-
- // input buffer
- var _input = forge$n.util.createBuffer();
-
- // used for word storage
- var _w = new Array(80);
-
- // message digest object
- var md = {
- algorithm: 'sha1',
- blockLength: 64,
- digestLength: 20,
- // 56-bit length of message so far (does not including padding)
- messageLength: 0,
- // true message length
- fullMessageLength: null,
- // size of message length in bytes
- messageLengthSize: 8
- };
-
- /**
- * Starts the digest.
- *
- * @return this digest object.
- */
- md.start = function() {
- // up to 56-bit message length for convenience
- md.messageLength = 0;
-
- // full message length (set md.messageLength64 for backwards-compatibility)
- md.fullMessageLength = md.messageLength64 = [];
- var int32s = md.messageLengthSize / 4;
- for(var i = 0; i < int32s; ++i) {
- md.fullMessageLength.push(0);
- }
- _input = forge$n.util.createBuffer();
- _state = {
- h0: 0x67452301,
- h1: 0xEFCDAB89,
- h2: 0x98BADCFE,
- h3: 0x10325476,
- h4: 0xC3D2E1F0
- };
- return md;
- };
- // start digest automatically for first time
- md.start();
-
- /**
- * Updates the digest with the given message input. The given input can
- * treated as raw input (no encoding will be applied) or an encoding of
- * 'utf8' maybe given to encode the input using UTF-8.
- *
- * @param msg the message input to update with.
- * @param encoding the encoding to use (default: 'raw', other: 'utf8').
- *
- * @return this digest object.
- */
- md.update = function(msg, encoding) {
- if(encoding === 'utf8') {
- msg = forge$n.util.encodeUtf8(msg);
- }
-
- // update message length
- var len = msg.length;
- md.messageLength += len;
- len = [(len / 0x100000000) >>> 0, len >>> 0];
- for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {
- md.fullMessageLength[i] += len[1];
- len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);
- md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;
- len[0] = ((len[1] / 0x100000000) >>> 0);
- }
-
- // add bytes to input buffer
- _input.putBytes(msg);
-
- // process bytes
- _update$1(_state, _w, _input);
-
- // compact input buffer every 2K or if empty
- if(_input.read > 2048 || _input.length() === 0) {
- _input.compact();
- }
-
- return md;
- };
-
- /**
- * Produces the digest.
- *
- * @return a byte buffer containing the digest value.
- */
- md.digest = function() {
- /* Note: Here we copy the remaining bytes in the input buffer and
- add the appropriate SHA-1 padding. Then we do the final update
- on a copy of the state so that if the user wants to get
- intermediate digests they can do so. */
-
- /* Determine the number of bytes that must be added to the message
- to ensure its length is congruent to 448 mod 512. In other words,
- the data to be digested must be a multiple of 512 bits (or 128 bytes).
- This data includes the message, some padding, and the length of the
- message. Since the length of the message will be encoded as 8 bytes (64
- bits), that means that the last segment of the data must have 56 bytes
- (448 bits) of message and padding. Therefore, the length of the message
- plus the padding must be congruent to 448 mod 512 because
- 512 - 128 = 448.
-
- In order to fill up the message length it must be filled with
- padding that begins with 1 bit followed by all 0 bits. Padding
- must *always* be present, so if the message length is already
- congruent to 448 mod 512, then 512 padding bits must be added. */
-
- var finalBlock = forge$n.util.createBuffer();
- finalBlock.putBytes(_input.bytes());
-
- // compute remaining size to be digested (include message length size)
- var remaining = (
- md.fullMessageLength[md.fullMessageLength.length - 1] +
- md.messageLengthSize);
-
- // add padding for overflow blockSize - overflow
- // _padding starts with 1 byte with first bit is set (byte value 128), then
- // there may be up to (blockSize - 1) other pad bytes
- var overflow = remaining & (md.blockLength - 1);
- finalBlock.putBytes(_padding$1.substr(0, md.blockLength - overflow));
-
- // serialize message length in bits in big-endian order; since length
- // is stored in bytes we multiply by 8 and add carry from next int
- var next, carry;
- var bits = md.fullMessageLength[0] * 8;
- for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {
- next = md.fullMessageLength[i + 1] * 8;
- carry = (next / 0x100000000) >>> 0;
- bits += carry;
- finalBlock.putInt32(bits >>> 0);
- bits = next >>> 0;
- }
- finalBlock.putInt32(bits);
-
- var s2 = {
- h0: _state.h0,
- h1: _state.h1,
- h2: _state.h2,
- h3: _state.h3,
- h4: _state.h4
- };
- _update$1(s2, _w, finalBlock);
- var rval = forge$n.util.createBuffer();
- rval.putInt32(s2.h0);
- rval.putInt32(s2.h1);
- rval.putInt32(s2.h2);
- rval.putInt32(s2.h3);
- rval.putInt32(s2.h4);
- return rval;
- };
-
- return md;
-};
-
-// sha-1 padding bytes not initialized yet
-var _padding$1 = null;
-var _initialized$1 = false;
-
-/**
- * Initializes the constant tables.
- */
-function _init$1() {
- // create padding
- _padding$1 = String.fromCharCode(128);
- _padding$1 += forge$n.util.fillString(String.fromCharCode(0x00), 64);
-
- // now initialized
- _initialized$1 = true;
-}
-
-/**
- * Updates a SHA-1 state with the given byte buffer.
- *
- * @param s the SHA-1 state to update.
- * @param w the array to use to store words.
- * @param bytes the byte buffer to update with.
- */
-function _update$1(s, w, bytes) {
- // consume 512 bit (64 byte) chunks
- var t, a, b, c, d, e, f, i;
- var len = bytes.length();
- while(len >= 64) {
- // the w array will be populated with sixteen 32-bit big-endian words
- // and then extended into 80 32-bit words according to SHA-1 algorithm
- // and for 32-79 using Max Locktyukhin's optimization
-
- // initialize hash value for this chunk
- a = s.h0;
- b = s.h1;
- c = s.h2;
- d = s.h3;
- e = s.h4;
-
- // round 1
- for(i = 0; i < 16; ++i) {
- t = bytes.getInt32();
- w[i] = t;
- f = d ^ (b & (c ^ d));
- t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;
- e = d;
- d = c;
- // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug
- c = ((b << 30) | (b >>> 2)) >>> 0;
- b = a;
- a = t;
- }
- for(; i < 20; ++i) {
- t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]);
- t = (t << 1) | (t >>> 31);
- w[i] = t;
- f = d ^ (b & (c ^ d));
- t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;
- e = d;
- d = c;
- // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug
- c = ((b << 30) | (b >>> 2)) >>> 0;
- b = a;
- a = t;
- }
- // round 2
- for(; i < 32; ++i) {
- t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]);
- t = (t << 1) | (t >>> 31);
- w[i] = t;
- f = b ^ c ^ d;
- t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;
- e = d;
- d = c;
- // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug
- c = ((b << 30) | (b >>> 2)) >>> 0;
- b = a;
- a = t;
- }
- for(; i < 40; ++i) {
- t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);
- t = (t << 2) | (t >>> 30);
- w[i] = t;
- f = b ^ c ^ d;
- t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;
- e = d;
- d = c;
- // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug
- c = ((b << 30) | (b >>> 2)) >>> 0;
- b = a;
- a = t;
- }
- // round 3
- for(; i < 60; ++i) {
- t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);
- t = (t << 2) | (t >>> 30);
- w[i] = t;
- f = (b & c) | (d & (b ^ c));
- t = ((a << 5) | (a >>> 27)) + f + e + 0x8F1BBCDC + t;
- e = d;
- d = c;
- // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug
- c = ((b << 30) | (b >>> 2)) >>> 0;
- b = a;
- a = t;
- }
- // round 4
- for(; i < 80; ++i) {
- t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);
- t = (t << 2) | (t >>> 30);
- w[i] = t;
- f = b ^ c ^ d;
- t = ((a << 5) | (a >>> 27)) + f + e + 0xCA62C1D6 + t;
- e = d;
- d = c;
- // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug
- c = ((b << 30) | (b >>> 2)) >>> 0;
- b = a;
- a = t;
- }
-
- // update hash state
- s.h0 = (s.h0 + a) | 0;
- s.h1 = (s.h1 + b) | 0;
- s.h2 = (s.h2 + c) | 0;
- s.h3 = (s.h3 + d) | 0;
- s.h4 = (s.h4 + e) | 0;
-
- len -= 64;
- }
-}
-
-/**
- * Partial implementation of PKCS#1 v2.2: RSA-OEAP
- *
- * Modified but based on the following MIT and BSD licensed code:
- *
- * https://github.com/kjur/jsjws/blob/master/rsa.js:
- *
- * The 'jsjws'(JSON Web Signature JavaScript Library) License
- *
- * Copyright (c) 2012 Kenji Urushima
- *
- * 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.
- *
- * http://webrsa.cvs.sourceforge.net/viewvc/webrsa/Client/RSAES-OAEP.js?content-type=text%2Fplain:
- *
- * RSAES-OAEP.js
- * $Id: RSAES-OAEP.js,v 1.1.1.1 2003/03/19 15:37:20 ellispritchard Exp $
- * JavaScript Implementation of PKCS #1 v2.1 RSA CRYPTOGRAPHY STANDARD (RSA Laboratories, June 14, 2002)
- * Copyright (C) Ellis Pritchard, Guardian Unlimited 2003.
- * Contact: ellis@nukinetics.com
- * Distributed under the BSD License.
- *
- * Official documentation: http://www.rsa.com/rsalabs/node.asp?id=2125
- *
- * @author Evan Jones (http://evanjones.ca/)
- * @author Dave Longley
- *
- * Copyright (c) 2013-2014 Digital Bazaar, Inc.
- */
-
-var forge$m = forge$F;
-
-
-
-
-// shortcut for PKCS#1 API
-var pkcs1 = forge$m.pkcs1 = forge$m.pkcs1 || {};
-
-/**
- * Encode the given RSAES-OAEP message (M) using key, with optional label (L)
- * and seed.
- *
- * This method does not perform RSA encryption, it only encodes the message
- * using RSAES-OAEP.
- *
- * @param key the RSA key to use.
- * @param message the message to encode.
- * @param options the options to use:
- * label an optional label to use.
- * seed the seed to use.
- * md the message digest object to use, undefined for SHA-1.
- * mgf1 optional mgf1 parameters:
- * md the message digest object to use for MGF1.
- *
- * @return the encoded message bytes.
- */
-pkcs1.encode_rsa_oaep = function(key, message, options) {
- // parse arguments
- var label;
- var seed;
- var md;
- var mgf1Md;
- // legacy args (label, seed, md)
- if(typeof options === 'string') {
- label = options;
- seed = arguments[3] || undefined;
- md = arguments[4] || undefined;
- } else if(options) {
- label = options.label || undefined;
- seed = options.seed || undefined;
- md = options.md || undefined;
- if(options.mgf1 && options.mgf1.md) {
- mgf1Md = options.mgf1.md;
- }
- }
-
- // default OAEP to SHA-1 message digest
- if(!md) {
- md = forge$m.md.sha1.create();
- } else {
- md.start();
- }
-
- // default MGF-1 to same as OAEP
- if(!mgf1Md) {
- mgf1Md = md;
- }
-
- // compute length in bytes and check output
- var keyLength = Math.ceil(key.n.bitLength() / 8);
- var maxLength = keyLength - 2 * md.digestLength - 2;
- if(message.length > maxLength) {
- var error = new Error('RSAES-OAEP input message length is too long.');
- error.length = message.length;
- error.maxLength = maxLength;
- throw error;
- }
-
- if(!label) {
- label = '';
- }
- md.update(label, 'raw');
- var lHash = md.digest();
-
- var PS = '';
- var PS_length = maxLength - message.length;
- for(var i = 0; i < PS_length; i++) {
- PS += '\x00';
- }
-
- var DB = lHash.getBytes() + PS + '\x01' + message;
-
- if(!seed) {
- seed = forge$m.random.getBytes(md.digestLength);
- } else if(seed.length !== md.digestLength) {
- var error = new Error('Invalid RSAES-OAEP seed. The seed length must ' +
- 'match the digest length.');
- error.seedLength = seed.length;
- error.digestLength = md.digestLength;
- throw error;
- }
-
- var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md);
- var maskedDB = forge$m.util.xorBytes(DB, dbMask, DB.length);
-
- var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md);
- var maskedSeed = forge$m.util.xorBytes(seed, seedMask, seed.length);
-
- // return encoded message
- return '\x00' + maskedSeed + maskedDB;
-};
-
-/**
- * Decode the given RSAES-OAEP encoded message (EM) using key, with optional
- * label (L).
- *
- * This method does not perform RSA decryption, it only decodes the message
- * using RSAES-OAEP.
- *
- * @param key the RSA key to use.
- * @param em the encoded message to decode.
- * @param options the options to use:
- * label an optional label to use.
- * md the message digest object to use for OAEP, undefined for SHA-1.
- * mgf1 optional mgf1 parameters:
- * md the message digest object to use for MGF1.
- *
- * @return the decoded message bytes.
- */
-pkcs1.decode_rsa_oaep = function(key, em, options) {
- // parse args
- var label;
- var md;
- var mgf1Md;
- // legacy args
- if(typeof options === 'string') {
- label = options;
- md = arguments[3] || undefined;
- } else if(options) {
- label = options.label || undefined;
- md = options.md || undefined;
- if(options.mgf1 && options.mgf1.md) {
- mgf1Md = options.mgf1.md;
- }
- }
-
- // compute length in bytes
- var keyLength = Math.ceil(key.n.bitLength() / 8);
-
- if(em.length !== keyLength) {
- var error = new Error('RSAES-OAEP encoded message length is invalid.');
- error.length = em.length;
- error.expectedLength = keyLength;
- throw error;
- }
-
- // default OAEP to SHA-1 message digest
- if(md === undefined) {
- md = forge$m.md.sha1.create();
- } else {
- md.start();
- }
-
- // default MGF-1 to same as OAEP
- if(!mgf1Md) {
- mgf1Md = md;
- }
-
- if(keyLength < 2 * md.digestLength + 2) {
- throw new Error('RSAES-OAEP key is too short for the hash function.');
- }
-
- if(!label) {
- label = '';
- }
- md.update(label, 'raw');
- var lHash = md.digest().getBytes();
-
- // split the message into its parts
- var y = em.charAt(0);
- var maskedSeed = em.substring(1, md.digestLength + 1);
- var maskedDB = em.substring(1 + md.digestLength);
-
- var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md);
- var seed = forge$m.util.xorBytes(maskedSeed, seedMask, maskedSeed.length);
-
- var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md);
- var db = forge$m.util.xorBytes(maskedDB, dbMask, maskedDB.length);
-
- var lHashPrime = db.substring(0, md.digestLength);
-
- // constant time check that all values match what is expected
- var error = (y !== '\x00');
-
- // constant time check lHash vs lHashPrime
- for(var i = 0; i < md.digestLength; ++i) {
- error |= (lHash.charAt(i) !== lHashPrime.charAt(i));
- }
-
- // "constant time" find the 0x1 byte separating the padding (zeros) from the
- // message
- // TODO: It must be possible to do this in a better/smarter way?
- var in_ps = 1;
- var index = md.digestLength;
- for(var j = md.digestLength; j < db.length; j++) {
- var code = db.charCodeAt(j);
-
- var is_0 = (code & 0x1) ^ 0x1;
-
- // non-zero if not 0 or 1 in the ps section
- var error_mask = in_ps ? 0xfffe : 0x0000;
- error |= (code & error_mask);
-
- // latch in_ps to zero after we find 0x1
- in_ps = in_ps & is_0;
- index += in_ps;
- }
-
- if(error || db.charCodeAt(index) !== 0x1) {
- throw new Error('Invalid RSAES-OAEP padding.');
- }
-
- return db.substring(index + 1);
-};
-
-function rsa_mgf1(seed, maskLength, hash) {
- // default to SHA-1 message digest
- if(!hash) {
- hash = forge$m.md.sha1.create();
- }
- var t = '';
- var count = Math.ceil(maskLength / hash.digestLength);
- for(var i = 0; i < count; ++i) {
- var c = String.fromCharCode(
- (i >> 24) & 0xFF, (i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF);
- hash.start();
- hash.update(seed + c);
- t += hash.digest().getBytes();
- }
- return t.substring(0, maskLength);
-}
-
-/**
- * Prime number generation API.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2014 Digital Bazaar, Inc.
- */
-
-var forge$l = forge$F;
-
-
-
-
-(function() {
-
-// forge.prime already defined
-if(forge$l.prime) {
- return;
-}
-
-/* PRIME API */
-var prime = forge$l.prime = forge$l.prime || {};
-
-var BigInteger = forge$l.jsbn.BigInteger;
-
-// primes are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29
-var GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];
-var THIRTY = new BigInteger(null);
-THIRTY.fromInt(30);
-var op_or = function(x, y) {return x|y;};
-
-/**
- * Generates a random probable prime with the given number of bits.
- *
- * Alternative algorithms can be specified by name as a string or as an
- * object with custom options like so:
- *
- * {
- * name: 'PRIMEINC',
- * options: {
- * maxBlockTime: <the maximum amount of time to block the main
- * thread before allowing I/O other JS to run>,
- * millerRabinTests: <the number of miller-rabin tests to run>,
- * workerScript: <the worker script URL>,
- * workers: <the number of web workers (if supported) to use,
- * -1 to use estimated cores minus one>.
- * workLoad: the size of the work load, ie: number of possible prime
- * numbers for each web worker to check per work assignment,
- * (default: 100).
- * }
- * }
- *
- * @param bits the number of bits for the prime number.
- * @param options the options to use.
- * [algorithm] the algorithm to use (default: 'PRIMEINC').
- * [prng] a custom crypto-secure pseudo-random number generator to use,
- * that must define "getBytesSync".
- *
- * @return callback(err, num) called once the operation completes.
- */
-prime.generateProbablePrime = function(bits, options, callback) {
- if(typeof options === 'function') {
- callback = options;
- options = {};
- }
- options = options || {};
-
- // default to PRIMEINC algorithm
- var algorithm = options.algorithm || 'PRIMEINC';
- if(typeof algorithm === 'string') {
- algorithm = {name: algorithm};
- }
- algorithm.options = algorithm.options || {};
-
- // create prng with api that matches BigInteger secure random
- var prng = options.prng || forge$l.random;
- var rng = {
- // x is an array to fill with bytes
- nextBytes: function(x) {
- var b = prng.getBytesSync(x.length);
- for(var i = 0; i < x.length; ++i) {
- x[i] = b.charCodeAt(i);
- }
- }
- };
-
- if(algorithm.name === 'PRIMEINC') {
- return primeincFindPrime(bits, rng, algorithm.options, callback);
- }
-
- throw new Error('Invalid prime generation algorithm: ' + algorithm.name);
-};
-
-function primeincFindPrime(bits, rng, options, callback) {
- if('workers' in options) {
- return primeincFindPrimeWithWorkers(bits, rng, options, callback);
- }
- return primeincFindPrimeWithoutWorkers(bits, rng, options, callback);
-}
-
-function primeincFindPrimeWithoutWorkers(bits, rng, options, callback) {
- // initialize random number
- var num = generateRandom(bits, rng);
-
- /* Note: All primes are of the form 30k+i for i < 30 and gcd(30, i)=1. The
- number we are given is always aligned at 30k + 1. Each time the number is
- determined not to be prime we add to get to the next 'i', eg: if the number
- was at 30k + 1 we add 6. */
- var deltaIdx = 0;
-
- // get required number of MR tests
- var mrTests = getMillerRabinTests(num.bitLength());
- if('millerRabinTests' in options) {
- mrTests = options.millerRabinTests;
- }
-
- // find prime nearest to 'num' for maxBlockTime ms
- // 10 ms gives 5ms of leeway for other calculations before dropping
- // below 60fps (1000/60 == 16.67), but in reality, the number will
- // likely be higher due to an 'atomic' big int modPow
- var maxBlockTime = 10;
- if('maxBlockTime' in options) {
- maxBlockTime = options.maxBlockTime;
- }
-
- _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);
-}
-
-function _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback) {
- var start = +new Date();
- do {
- // overflow, regenerate random number
- if(num.bitLength() > bits) {
- num = generateRandom(bits, rng);
- }
- // do primality test
- if(num.isProbablePrime(mrTests)) {
- return callback(null, num);
- }
- // get next potential prime
- num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);
- } while(maxBlockTime < 0 || (+new Date() - start < maxBlockTime));
-
- // keep trying later
- forge$l.util.setImmediate(function() {
- _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);
- });
-}
-
-// NOTE: This algorithm is indeterminate in nature because workers
-// run in parallel looking at different segments of numbers. Even if this
-// algorithm is run twice with the same input from a predictable RNG, it
-// may produce different outputs.
-function primeincFindPrimeWithWorkers(bits, rng, options, callback) {
- // web workers unavailable
- if(typeof Worker === 'undefined') {
- return primeincFindPrimeWithoutWorkers(bits, rng, options, callback);
- }
-
- // initialize random number
- var num = generateRandom(bits, rng);
-
- // use web workers to generate keys
- var numWorkers = options.workers;
- var workLoad = options.workLoad || 100;
- var range = workLoad * 30 / 8;
- var workerScript = options.workerScript || 'forge/prime.worker.js';
- if(numWorkers === -1) {
- return forge$l.util.estimateCores(function(err, cores) {
- if(err) {
- // default to 2
- cores = 2;
- }
- numWorkers = cores - 1;
- generate();
- });
- }
- generate();
-
- function generate() {
- // require at least 1 worker
- numWorkers = Math.max(1, numWorkers);
-
- // TODO: consider optimizing by starting workers outside getPrime() ...
- // note that in order to clean up they will have to be made internally
- // asynchronous which may actually be slower
-
- // start workers immediately
- var workers = [];
- for(var i = 0; i < numWorkers; ++i) {
- // FIXME: fix path or use blob URLs
- workers[i] = new Worker(workerScript);
- }
-
- // listen for requests from workers and assign ranges to find prime
- for(var i = 0; i < numWorkers; ++i) {
- workers[i].addEventListener('message', workerMessage);
- }
-
- /* Note: The distribution of random numbers is unknown. Therefore, each
- web worker is continuously allocated a range of numbers to check for a
- random number until one is found.
-
- Every 30 numbers will be checked just 8 times, because prime numbers
- have the form:
-
- 30k+i, for i < 30 and gcd(30, i)=1 (there are 8 values of i for this)
-
- Therefore, if we want a web worker to run N checks before asking for
- a new range of numbers, each range must contain N*30/8 numbers.
-
- For 100 checks (workLoad), this is a range of 375. */
-
- var found = false;
- function workerMessage(e) {
- // ignore message, prime already found
- if(found) {
- return;
- }
- var data = e.data;
- if(data.found) {
- // terminate all workers
- for(var i = 0; i < workers.length; ++i) {
- workers[i].terminate();
- }
- found = true;
- return callback(null, new BigInteger(data.prime, 16));
- }
-
- // overflow, regenerate random number
- if(num.bitLength() > bits) {
- num = generateRandom(bits, rng);
- }
-
- // assign new range to check
- var hex = num.toString(16);
-
- // start prime search
- e.target.postMessage({
- hex: hex,
- workLoad: workLoad
- });
-
- num.dAddOffset(range, 0);
- }
- }
-}
-
-/**
- * Generates a random number using the given number of bits and RNG.
- *
- * @param bits the number of bits for the number.
- * @param rng the random number generator to use.
- *
- * @return the random number.
- */
-function generateRandom(bits, rng) {
- var num = new BigInteger(bits, rng);
- // force MSB set
- var bits1 = bits - 1;
- if(!num.testBit(bits1)) {
- num.bitwiseTo(BigInteger.ONE.shiftLeft(bits1), op_or, num);
- }
- // align number on 30k+1 boundary
- num.dAddOffset(31 - num.mod(THIRTY).byteValue(), 0);
- return num;
-}
-
-/**
- * Returns the required number of Miller-Rabin tests to generate a
- * prime with an error probability of (1/2)^80.
- *
- * See Handbook of Applied Cryptography Chapter 4, Table 4.4.
- *
- * @param bits the bit size.
- *
- * @return the required number of iterations.
- */
-function getMillerRabinTests(bits) {
- if(bits <= 100) return 27;
- if(bits <= 150) return 18;
- if(bits <= 200) return 15;
- if(bits <= 250) return 12;
- if(bits <= 300) return 9;
- if(bits <= 350) return 8;
- if(bits <= 400) return 7;
- if(bits <= 500) return 6;
- if(bits <= 600) return 5;
- if(bits <= 800) return 4;
- if(bits <= 1250) return 3;
- return 2;
-}
-
-})();
-
-/**
- * Javascript implementation of basic RSA algorithms.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- *
- * The only algorithm currently supported for PKI is RSA.
- *
- * An RSA key is often stored in ASN.1 DER format. The SubjectPublicKeyInfo
- * ASN.1 structure is composed of an algorithm of type AlgorithmIdentifier
- * and a subjectPublicKey of type bit string.
- *
- * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters
- * for the algorithm, if any. In the case of RSA, there aren't any.
- *
- * SubjectPublicKeyInfo ::= SEQUENCE {
- * algorithm AlgorithmIdentifier,
- * subjectPublicKey BIT STRING
- * }
- *
- * AlgorithmIdentifer ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL
- * }
- *
- * For an RSA public key, the subjectPublicKey is:
- *
- * RSAPublicKey ::= SEQUENCE {
- * modulus INTEGER, -- n
- * publicExponent INTEGER -- e
- * }
- *
- * PrivateKeyInfo ::= SEQUENCE {
- * version Version,
- * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
- * privateKey PrivateKey,
- * attributes [0] IMPLICIT Attributes OPTIONAL
- * }
- *
- * Version ::= INTEGER
- * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
- * PrivateKey ::= OCTET STRING
- * Attributes ::= SET OF Attribute
- *
- * An RSA private key as the following structure:
- *
- * RSAPrivateKey ::= SEQUENCE {
- * version Version,
- * modulus INTEGER, -- n
- * publicExponent INTEGER, -- e
- * privateExponent INTEGER, -- d
- * prime1 INTEGER, -- p
- * prime2 INTEGER, -- q
- * exponent1 INTEGER, -- d mod (p-1)
- * exponent2 INTEGER, -- d mod (q-1)
- * coefficient INTEGER -- (inverse of q) mod p
- * }
- *
- * Version ::= INTEGER
- *
- * The OID for the RSA key algorithm is: 1.2.840.113549.1.1.1
- */
-
-var forge$k = forge$F;
-
-
-
-
-
-
-
-
-if(typeof BigInteger$1 === 'undefined') {
- var BigInteger$1 = forge$k.jsbn.BigInteger;
-}
-
-var _crypto = forge$k.util.isNodejs ? require$$1__default : null;
-
-// shortcut for asn.1 API
-var asn1$7 = forge$k.asn1;
-
-// shortcut for util API
-var util = forge$k.util;
-
-/*
- * RSA encryption and decryption, see RFC 2313.
- */
-forge$k.pki = forge$k.pki || {};
-forge$k.pki.rsa = forge$k.rsa = forge$k.rsa || {};
-var pki$4 = forge$k.pki;
-
-// for finding primes, which are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29
-var GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];
-
-// validator for a PrivateKeyInfo structure
-var privateKeyValidator$1 = {
- // PrivateKeyInfo
- name: 'PrivateKeyInfo',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.SEQUENCE,
- constructed: true,
- value: [{
- // Version (INTEGER)
- name: 'PrivateKeyInfo.version',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyVersion'
- }, {
- // privateKeyAlgorithm
- name: 'PrivateKeyInfo.privateKeyAlgorithm',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'AlgorithmIdentifier.algorithm',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.OID,
- constructed: false,
- capture: 'privateKeyOid'
- }]
- }, {
- // PrivateKey
- name: 'PrivateKeyInfo',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.OCTETSTRING,
- constructed: false,
- capture: 'privateKey'
- }]
-};
-
-// validator for an RSA private key
-var rsaPrivateKeyValidator = {
- // RSAPrivateKey
- name: 'RSAPrivateKey',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.SEQUENCE,
- constructed: true,
- value: [{
- // Version (INTEGER)
- name: 'RSAPrivateKey.version',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyVersion'
- }, {
- // modulus (n)
- name: 'RSAPrivateKey.modulus',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyModulus'
- }, {
- // publicExponent (e)
- name: 'RSAPrivateKey.publicExponent',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyPublicExponent'
- }, {
- // privateExponent (d)
- name: 'RSAPrivateKey.privateExponent',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyPrivateExponent'
- }, {
- // prime1 (p)
- name: 'RSAPrivateKey.prime1',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyPrime1'
- }, {
- // prime2 (q)
- name: 'RSAPrivateKey.prime2',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyPrime2'
- }, {
- // exponent1 (d mod (p-1))
- name: 'RSAPrivateKey.exponent1',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyExponent1'
- }, {
- // exponent2 (d mod (q-1))
- name: 'RSAPrivateKey.exponent2',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyExponent2'
- }, {
- // coefficient ((inverse of q) mod p)
- name: 'RSAPrivateKey.coefficient',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyCoefficient'
- }]
-};
-
-// validator for an RSA public key
-var rsaPublicKeyValidator = {
- // RSAPublicKey
- name: 'RSAPublicKey',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.SEQUENCE,
- constructed: true,
- value: [{
- // modulus (n)
- name: 'RSAPublicKey.modulus',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'publicKeyModulus'
- }, {
- // publicExponent (e)
- name: 'RSAPublicKey.exponent',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.INTEGER,
- constructed: false,
- capture: 'publicKeyExponent'
- }]
-};
-
-// validator for an SubjectPublicKeyInfo structure
-// Note: Currently only works with an RSA public key
-var publicKeyValidator$2 = forge$k.pki.rsa.publicKeyValidator = {
- name: 'SubjectPublicKeyInfo',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'subjectPublicKeyInfo',
- value: [{
- name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'AlgorithmIdentifier.algorithm',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.OID,
- constructed: false,
- capture: 'publicKeyOid'
- }]
- }, {
- // subjectPublicKey
- name: 'SubjectPublicKeyInfo.subjectPublicKey',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.BITSTRING,
- constructed: false,
- value: [{
- // RSAPublicKey
- name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',
- tagClass: asn1$7.Class.UNIVERSAL,
- type: asn1$7.Type.SEQUENCE,
- constructed: true,
- optional: true,
- captureAsn1: 'rsaPublicKey'
- }]
- }]
-};
-
-/**
- * Wrap digest in DigestInfo object.
- *
- * This function implements EMSA-PKCS1-v1_5-ENCODE as per RFC 3447.
- *
- * DigestInfo ::= SEQUENCE {
- * digestAlgorithm DigestAlgorithmIdentifier,
- * digest Digest
- * }
- *
- * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
- * Digest ::= OCTET STRING
- *
- * @param md the message digest object with the hash to sign.
- *
- * @return the encoded message (ready for RSA encrytion)
- */
-var emsaPkcs1v15encode = function(md) {
- // get the oid for the algorithm
- var oid;
- if(md.algorithm in pki$4.oids) {
- oid = pki$4.oids[md.algorithm];
- } else {
- var error = new Error('Unknown message digest algorithm.');
- error.algorithm = md.algorithm;
- throw error;
- }
- var oidBytes = asn1$7.oidToDer(oid).getBytes();
-
- // create the digest info
- var digestInfo = asn1$7.create(
- asn1$7.Class.UNIVERSAL, asn1$7.Type.SEQUENCE, true, []);
- var digestAlgorithm = asn1$7.create(
- asn1$7.Class.UNIVERSAL, asn1$7.Type.SEQUENCE, true, []);
- digestAlgorithm.value.push(asn1$7.create(
- asn1$7.Class.UNIVERSAL, asn1$7.Type.OID, false, oidBytes));
- digestAlgorithm.value.push(asn1$7.create(
- asn1$7.Class.UNIVERSAL, asn1$7.Type.NULL, false, ''));
- var digest = asn1$7.create(
- asn1$7.Class.UNIVERSAL, asn1$7.Type.OCTETSTRING,
- false, md.digest().getBytes());
- digestInfo.value.push(digestAlgorithm);
- digestInfo.value.push(digest);
-
- // encode digest info
- return asn1$7.toDer(digestInfo).getBytes();
-};
-
-/**
- * Performs x^c mod n (RSA encryption or decryption operation).
- *
- * @param x the number to raise and mod.
- * @param key the key to use.
- * @param pub true if the key is public, false if private.
- *
- * @return the result of x^c mod n.
- */
-var _modPow = function(x, key, pub) {
- if(pub) {
- return x.modPow(key.e, key.n);
- }
-
- if(!key.p || !key.q) {
- // allow calculation without CRT params (slow)
- return x.modPow(key.d, key.n);
- }
-
- // pre-compute dP, dQ, and qInv if necessary
- if(!key.dP) {
- key.dP = key.d.mod(key.p.subtract(BigInteger$1.ONE));
- }
- if(!key.dQ) {
- key.dQ = key.d.mod(key.q.subtract(BigInteger$1.ONE));
- }
- if(!key.qInv) {
- key.qInv = key.q.modInverse(key.p);
- }
-
- /* Chinese remainder theorem (CRT) states:
-
- Suppose n1, n2, ..., nk are positive integers which are pairwise
- coprime (n1 and n2 have no common factors other than 1). For any
- integers x1, x2, ..., xk there exists an integer x solving the
- system of simultaneous congruences (where ~= means modularly
- congruent so a ~= b mod n means a mod n = b mod n):
-
- x ~= x1 mod n1
- x ~= x2 mod n2
- ...
- x ~= xk mod nk
-
- This system of congruences has a single simultaneous solution x
- between 0 and n - 1. Furthermore, each xk solution and x itself
- is congruent modulo the product n = n1*n2*...*nk.
- So x1 mod n = x2 mod n = xk mod n = x mod n.
-
- The single simultaneous solution x can be solved with the following
- equation:
-
- x = sum(xi*ri*si) mod n where ri = n/ni and si = ri^-1 mod ni.
-
- Where x is less than n, xi = x mod ni.
-
- For RSA we are only concerned with k = 2. The modulus n = pq, where
- p and q are coprime. The RSA decryption algorithm is:
-
- y = x^d mod n
-
- Given the above:
-
- x1 = x^d mod p
- r1 = n/p = q
- s1 = q^-1 mod p
- x2 = x^d mod q
- r2 = n/q = p
- s2 = p^-1 mod q
-
- So y = (x1r1s1 + x2r2s2) mod n
- = ((x^d mod p)q(q^-1 mod p) + (x^d mod q)p(p^-1 mod q)) mod n
-
- According to Fermat's Little Theorem, if the modulus P is prime,
- for any integer A not evenly divisible by P, A^(P-1) ~= 1 mod P.
- Since A is not divisible by P it follows that if:
- N ~= M mod (P - 1), then A^N mod P = A^M mod P. Therefore:
-
- A^N mod P = A^(M mod (P - 1)) mod P. (The latter takes less effort
- to calculate). In order to calculate x^d mod p more quickly the
- exponent d mod (p - 1) is stored in the RSA private key (the same
- is done for x^d mod q). These values are referred to as dP and dQ
- respectively. Therefore we now have:
-
- y = ((x^dP mod p)q(q^-1 mod p) + (x^dQ mod q)p(p^-1 mod q)) mod n
-
- Since we'll be reducing x^dP by modulo p (same for q) we can also
- reduce x by p (and q respectively) before hand. Therefore, let
-
- xp = ((x mod p)^dP mod p), and
- xq = ((x mod q)^dQ mod q), yielding:
-
- y = (xp*q*(q^-1 mod p) + xq*p*(p^-1 mod q)) mod n
-
- This can be further reduced to a simple algorithm that only
- requires 1 inverse (the q inverse is used) to be used and stored.
- The algorithm is called Garner's algorithm. If qInv is the
- inverse of q, we simply calculate:
-
- y = (qInv*(xp - xq) mod p) * q + xq
-
- However, there are two further complications. First, we need to
- ensure that xp > xq to prevent signed BigIntegers from being used
- so we add p until this is true (since we will be mod'ing with
- p anyway). Then, there is a known timing attack on algorithms
- using the CRT. To mitigate this risk, "cryptographic blinding"
- should be used. This requires simply generating a random number r
- between 0 and n-1 and its inverse and multiplying x by r^e before
- calculating y and then multiplying y by r^-1 afterwards. Note that
- r must be coprime with n (gcd(r, n) === 1) in order to have an
- inverse.
- */
-
- // cryptographic blinding
- var r;
- do {
- r = new BigInteger$1(
- forge$k.util.bytesToHex(forge$k.random.getBytes(key.n.bitLength() / 8)),
- 16);
- } while(r.compareTo(key.n) >= 0 || !r.gcd(key.n).equals(BigInteger$1.ONE));
- x = x.multiply(r.modPow(key.e, key.n)).mod(key.n);
-
- // calculate xp and xq
- var xp = x.mod(key.p).modPow(key.dP, key.p);
- var xq = x.mod(key.q).modPow(key.dQ, key.q);
-
- // xp must be larger than xq to avoid signed bit usage
- while(xp.compareTo(xq) < 0) {
- xp = xp.add(key.p);
- }
-
- // do last step
- var y = xp.subtract(xq)
- .multiply(key.qInv).mod(key.p)
- .multiply(key.q).add(xq);
-
- // remove effect of random for cryptographic blinding
- y = y.multiply(r.modInverse(key.n)).mod(key.n);
-
- return y;
-};
-
-/**
- * NOTE: THIS METHOD IS DEPRECATED, use 'sign' on a private key object or
- * 'encrypt' on a public key object instead.
- *
- * Performs RSA encryption.
- *
- * The parameter bt controls whether to put padding bytes before the
- * message passed in. Set bt to either true or false to disable padding
- * completely (in order to handle e.g. EMSA-PSS encoding seperately before),
- * signaling whether the encryption operation is a public key operation
- * (i.e. encrypting data) or not, i.e. private key operation (data signing).
- *
- * For PKCS#1 v1.5 padding pass in the block type to use, i.e. either 0x01
- * (for signing) or 0x02 (for encryption). The key operation mode (private
- * or public) is derived from this flag in that case).
- *
- * @param m the message to encrypt as a byte string.
- * @param key the RSA key to use.
- * @param bt for PKCS#1 v1.5 padding, the block type to use
- * (0x01 for private key, 0x02 for public),
- * to disable padding: true = public key, false = private key.
- *
- * @return the encrypted bytes as a string.
- */
-pki$4.rsa.encrypt = function(m, key, bt) {
- var pub = bt;
- var eb;
-
- // get the length of the modulus in bytes
- var k = Math.ceil(key.n.bitLength() / 8);
-
- if(bt !== false && bt !== true) {
- // legacy, default to PKCS#1 v1.5 padding
- pub = (bt === 0x02);
- eb = _encodePkcs1_v1_5(m, key, bt);
- } else {
- eb = forge$k.util.createBuffer();
- eb.putBytes(m);
- }
-
- // load encryption block as big integer 'x'
- // FIXME: hex conversion inefficient, get BigInteger w/byte strings
- var x = new BigInteger$1(eb.toHex(), 16);
-
- // do RSA encryption
- var y = _modPow(x, key, pub);
-
- // convert y into the encrypted data byte string, if y is shorter in
- // bytes than k, then prepend zero bytes to fill up ed
- // FIXME: hex conversion inefficient, get BigInteger w/byte strings
- var yhex = y.toString(16);
- var ed = forge$k.util.createBuffer();
- var zeros = k - Math.ceil(yhex.length / 2);
- while(zeros > 0) {
- ed.putByte(0x00);
- --zeros;
- }
- ed.putBytes(forge$k.util.hexToBytes(yhex));
- return ed.getBytes();
-};
-
-/**
- * NOTE: THIS METHOD IS DEPRECATED, use 'decrypt' on a private key object or
- * 'verify' on a public key object instead.
- *
- * Performs RSA decryption.
- *
- * The parameter ml controls whether to apply PKCS#1 v1.5 padding
- * or not. Set ml = false to disable padding removal completely
- * (in order to handle e.g. EMSA-PSS later on) and simply pass back
- * the RSA encryption block.
- *
- * @param ed the encrypted data to decrypt in as a byte string.
- * @param key the RSA key to use.
- * @param pub true for a public key operation, false for private.
- * @param ml the message length, if known, false to disable padding.
- *
- * @return the decrypted message as a byte string.
- */
-pki$4.rsa.decrypt = function(ed, key, pub, ml) {
- // get the length of the modulus in bytes
- var k = Math.ceil(key.n.bitLength() / 8);
-
- // error if the length of the encrypted data ED is not k
- if(ed.length !== k) {
- var error = new Error('Encrypted message length is invalid.');
- error.length = ed.length;
- error.expected = k;
- throw error;
- }
-
- // convert encrypted data into a big integer
- // FIXME: hex conversion inefficient, get BigInteger w/byte strings
- var y = new BigInteger$1(forge$k.util.createBuffer(ed).toHex(), 16);
-
- // y must be less than the modulus or it wasn't the result of
- // a previous mod operation (encryption) using that modulus
- if(y.compareTo(key.n) >= 0) {
- throw new Error('Encrypted message is invalid.');
- }
-
- // do RSA decryption
- var x = _modPow(y, key, pub);
-
- // create the encryption block, if x is shorter in bytes than k, then
- // prepend zero bytes to fill up eb
- // FIXME: hex conversion inefficient, get BigInteger w/byte strings
- var xhex = x.toString(16);
- var eb = forge$k.util.createBuffer();
- var zeros = k - Math.ceil(xhex.length / 2);
- while(zeros > 0) {
- eb.putByte(0x00);
- --zeros;
- }
- eb.putBytes(forge$k.util.hexToBytes(xhex));
-
- if(ml !== false) {
- // legacy, default to PKCS#1 v1.5 padding
- return _decodePkcs1_v1_5(eb.getBytes(), key, pub);
- }
-
- // return message
- return eb.getBytes();
-};
-
-/**
- * Creates an RSA key-pair generation state object. It is used to allow
- * key-generation to be performed in steps. It also allows for a UI to
- * display progress updates.
- *
- * @param bits the size for the private key in bits, defaults to 2048.
- * @param e the public exponent to use, defaults to 65537 (0x10001).
- * @param [options] the options to use.
- * prng a custom crypto-secure pseudo-random number generator to use,
- * that must define "getBytesSync".
- * algorithm the algorithm to use (default: 'PRIMEINC').
- *
- * @return the state object to use to generate the key-pair.
- */
-pki$4.rsa.createKeyPairGenerationState = function(bits, e, options) {
- // TODO: migrate step-based prime generation code to forge.prime
-
- // set default bits
- if(typeof(bits) === 'string') {
- bits = parseInt(bits, 10);
- }
- bits = bits || 2048;
-
- // create prng with api that matches BigInteger secure random
- options = options || {};
- var prng = options.prng || forge$k.random;
- var rng = {
- // x is an array to fill with bytes
- nextBytes: function(x) {
- var b = prng.getBytesSync(x.length);
- for(var i = 0; i < x.length; ++i) {
- x[i] = b.charCodeAt(i);
- }
- }
- };
-
- var algorithm = options.algorithm || 'PRIMEINC';
-
- // create PRIMEINC algorithm state
- var rval;
- if(algorithm === 'PRIMEINC') {
- rval = {
- algorithm: algorithm,
- state: 0,
- bits: bits,
- rng: rng,
- eInt: e || 65537,
- e: new BigInteger$1(null),
- p: null,
- q: null,
- qBits: bits >> 1,
- pBits: bits - (bits >> 1),
- pqState: 0,
- num: null,
- keys: null
- };
- rval.e.fromInt(rval.eInt);
- } else {
- throw new Error('Invalid key generation algorithm: ' + algorithm);
- }
-
- return rval;
-};
-
-/**
- * Attempts to runs the key-generation algorithm for at most n seconds
- * (approximately) using the given state. When key-generation has completed,
- * the keys will be stored in state.keys.
- *
- * To use this function to update a UI while generating a key or to prevent
- * causing browser lockups/warnings, set "n" to a value other than 0. A
- * simple pattern for generating a key and showing a progress indicator is:
- *
- * var state = pki.rsa.createKeyPairGenerationState(2048);
- * var step = function() {
- * // step key-generation, run algorithm for 100 ms, repeat
- * if(!forge.pki.rsa.stepKeyPairGenerationState(state, 100)) {
- * setTimeout(step, 1);
- * } else {
- * // key-generation complete
- * // TODO: turn off progress indicator here
- * // TODO: use the generated key-pair in "state.keys"
- * }
- * };
- * // TODO: turn on progress indicator here
- * setTimeout(step, 0);
- *
- * @param state the state to use.
- * @param n the maximum number of milliseconds to run the algorithm for, 0
- * to run the algorithm to completion.
- *
- * @return true if the key-generation completed, false if not.
- */
-pki$4.rsa.stepKeyPairGenerationState = function(state, n) {
- // set default algorithm if not set
- if(!('algorithm' in state)) {
- state.algorithm = 'PRIMEINC';
- }
-
- // TODO: migrate step-based prime generation code to forge.prime
- // TODO: abstract as PRIMEINC algorithm
-
- // do key generation (based on Tom Wu's rsa.js, see jsbn.js license)
- // with some minor optimizations and designed to run in steps
-
- // local state vars
- var THIRTY = new BigInteger$1(null);
- THIRTY.fromInt(30);
- var deltaIdx = 0;
- var op_or = function(x, y) {return x | y;};
-
- // keep stepping until time limit is reached or done
- var t1 = +new Date();
- var t2;
- var total = 0;
- while(state.keys === null && (n <= 0 || total < n)) {
- // generate p or q
- if(state.state === 0) {
- /* Note: All primes are of the form:
-
- 30k+i, for i < 30 and gcd(30, i)=1, where there are 8 values for i
-
- When we generate a random number, we always align it at 30k + 1. Each
- time the number is determined not to be prime we add to get to the
- next 'i', eg: if the number was at 30k + 1 we add 6. */
- var bits = (state.p === null) ? state.pBits : state.qBits;
- var bits1 = bits - 1;
-
- // get a random number
- if(state.pqState === 0) {
- state.num = new BigInteger$1(bits, state.rng);
- // force MSB set
- if(!state.num.testBit(bits1)) {
- state.num.bitwiseTo(
- BigInteger$1.ONE.shiftLeft(bits1), op_or, state.num);
- }
- // align number on 30k+1 boundary
- state.num.dAddOffset(31 - state.num.mod(THIRTY).byteValue(), 0);
- deltaIdx = 0;
-
- ++state.pqState;
- } else if(state.pqState === 1) {
- // try to make the number a prime
- if(state.num.bitLength() > bits) {
- // overflow, try again
- state.pqState = 0;
- // do primality test
- } else if(state.num.isProbablePrime(
- _getMillerRabinTests(state.num.bitLength()))) {
- ++state.pqState;
- } else {
- // get next potential prime
- state.num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);
- }
- } else if(state.pqState === 2) {
- // ensure number is coprime with e
- state.pqState =
- (state.num.subtract(BigInteger$1.ONE).gcd(state.e)
- .compareTo(BigInteger$1.ONE) === 0) ? 3 : 0;
- } else if(state.pqState === 3) {
- // store p or q
- state.pqState = 0;
- if(state.p === null) {
- state.p = state.num;
- } else {
- state.q = state.num;
- }
-
- // advance state if both p and q are ready
- if(state.p !== null && state.q !== null) {
- ++state.state;
- }
- state.num = null;
- }
- } else if(state.state === 1) {
- // ensure p is larger than q (swap them if not)
- if(state.p.compareTo(state.q) < 0) {
- state.num = state.p;
- state.p = state.q;
- state.q = state.num;
- }
- ++state.state;
- } else if(state.state === 2) {
- // compute phi: (p - 1)(q - 1) (Euler's totient function)
- state.p1 = state.p.subtract(BigInteger$1.ONE);
- state.q1 = state.q.subtract(BigInteger$1.ONE);
- state.phi = state.p1.multiply(state.q1);
- ++state.state;
- } else if(state.state === 3) {
- // ensure e and phi are coprime
- if(state.phi.gcd(state.e).compareTo(BigInteger$1.ONE) === 0) {
- // phi and e are coprime, advance
- ++state.state;
- } else {
- // phi and e aren't coprime, so generate a new p and q
- state.p = null;
- state.q = null;
- state.state = 0;
- }
- } else if(state.state === 4) {
- // create n, ensure n is has the right number of bits
- state.n = state.p.multiply(state.q);
-
- // ensure n is right number of bits
- if(state.n.bitLength() === state.bits) {
- // success, advance
- ++state.state;
- } else {
- // failed, get new q
- state.q = null;
- state.state = 0;
- }
- } else if(state.state === 5) {
- // set keys
- var d = state.e.modInverse(state.phi);
- state.keys = {
- privateKey: pki$4.rsa.setPrivateKey(
- state.n, state.e, d, state.p, state.q,
- d.mod(state.p1), d.mod(state.q1),
- state.q.modInverse(state.p)),
- publicKey: pki$4.rsa.setPublicKey(state.n, state.e)
- };
- }
-
- // update timing
- t2 = +new Date();
- total += t2 - t1;
- t1 = t2;
- }
-
- return state.keys !== null;
-};
-
-/**
- * Generates an RSA public-private key pair in a single call.
- *
- * To generate a key-pair in steps (to allow for progress updates and to
- * prevent blocking or warnings in slow browsers) then use the key-pair
- * generation state functions.
- *
- * To generate a key-pair asynchronously (either through web-workers, if
- * available, or by breaking up the work on the main thread), pass a
- * callback function.
- *
- * @param [bits] the size for the private key in bits, defaults to 2048.
- * @param [e] the public exponent to use, defaults to 65537.
- * @param [options] options for key-pair generation, if given then 'bits'
- * and 'e' must *not* be given:
- * bits the size for the private key in bits, (default: 2048).
- * e the public exponent to use, (default: 65537 (0x10001)).
- * workerScript the worker script URL.
- * workers the number of web workers (if supported) to use,
- * (default: 2).
- * workLoad the size of the work load, ie: number of possible prime
- * numbers for each web worker to check per work assignment,
- * (default: 100).
- * prng a custom crypto-secure pseudo-random number generator to use,
- * that must define "getBytesSync". Disables use of native APIs.
- * algorithm the algorithm to use (default: 'PRIMEINC').
- * @param [callback(err, keypair)] called once the operation completes.
- *
- * @return an object with privateKey and publicKey properties.
- */
-pki$4.rsa.generateKeyPair = function(bits, e, options, callback) {
- // (bits), (options), (callback)
- if(arguments.length === 1) {
- if(typeof bits === 'object') {
- options = bits;
- bits = undefined;
- } else if(typeof bits === 'function') {
- callback = bits;
- bits = undefined;
- }
- } else if(arguments.length === 2) {
- // (bits, e), (bits, options), (bits, callback), (options, callback)
- if(typeof bits === 'number') {
- if(typeof e === 'function') {
- callback = e;
- e = undefined;
- } else if(typeof e !== 'number') {
- options = e;
- e = undefined;
- }
- } else {
- options = bits;
- callback = e;
- bits = undefined;
- e = undefined;
- }
- } else if(arguments.length === 3) {
- // (bits, e, options), (bits, e, callback), (bits, options, callback)
- if(typeof e === 'number') {
- if(typeof options === 'function') {
- callback = options;
- options = undefined;
- }
- } else {
- callback = options;
- options = e;
- e = undefined;
- }
- }
- options = options || {};
- if(bits === undefined) {
- bits = options.bits || 2048;
- }
- if(e === undefined) {
- e = options.e || 0x10001;
- }
-
- // use native code if permitted, available, and parameters are acceptable
- if(!options.prng &&
- bits >= 256 && bits <= 16384 && (e === 0x10001 || e === 3)) {
- if(callback) {
- // try native async
- if(_detectNodeCrypto('generateKeyPair')) {
- return _crypto.generateKeyPair('rsa', {
- modulusLength: bits,
- publicExponent: e,
- publicKeyEncoding: {
- type: 'spki',
- format: 'pem'
- },
- privateKeyEncoding: {
- type: 'pkcs8',
- format: 'pem'
- }
- }, function(err, pub, priv) {
- if(err) {
- return callback(err);
- }
- callback(null, {
- privateKey: pki$4.privateKeyFromPem(priv),
- publicKey: pki$4.publicKeyFromPem(pub)
- });
- });
- }
- if(_detectSubtleCrypto('generateKey') &&
- _detectSubtleCrypto('exportKey')) {
- // use standard native generateKey
- return util.globalScope.crypto.subtle.generateKey({
- name: 'RSASSA-PKCS1-v1_5',
- modulusLength: bits,
- publicExponent: _intToUint8Array(e),
- hash: {name: 'SHA-256'}
- }, true /* key can be exported*/, ['sign', 'verify'])
- .then(function(pair) {
- return util.globalScope.crypto.subtle.exportKey(
- 'pkcs8', pair.privateKey);
- // avoiding catch(function(err) {...}) to support IE <= 8
- }).then(undefined, function(err) {
- callback(err);
- }).then(function(pkcs8) {
- if(pkcs8) {
- var privateKey = pki$4.privateKeyFromAsn1(
- asn1$7.fromDer(forge$k.util.createBuffer(pkcs8)));
- callback(null, {
- privateKey: privateKey,
- publicKey: pki$4.setRsaPublicKey(privateKey.n, privateKey.e)
- });
- }
- });
- }
- if(_detectSubtleMsCrypto('generateKey') &&
- _detectSubtleMsCrypto('exportKey')) {
- var genOp = util.globalScope.msCrypto.subtle.generateKey({
- name: 'RSASSA-PKCS1-v1_5',
- modulusLength: bits,
- publicExponent: _intToUint8Array(e),
- hash: {name: 'SHA-256'}
- }, true /* key can be exported*/, ['sign', 'verify']);
- genOp.oncomplete = function(e) {
- var pair = e.target.result;
- var exportOp = util.globalScope.msCrypto.subtle.exportKey(
- 'pkcs8', pair.privateKey);
- exportOp.oncomplete = function(e) {
- var pkcs8 = e.target.result;
- var privateKey = pki$4.privateKeyFromAsn1(
- asn1$7.fromDer(forge$k.util.createBuffer(pkcs8)));
- callback(null, {
- privateKey: privateKey,
- publicKey: pki$4.setRsaPublicKey(privateKey.n, privateKey.e)
- });
- };
- exportOp.onerror = function(err) {
- callback(err);
- };
- };
- genOp.onerror = function(err) {
- callback(err);
- };
- return;
- }
- } else {
- // try native sync
- if(_detectNodeCrypto('generateKeyPairSync')) {
- var keypair = _crypto.generateKeyPairSync('rsa', {
- modulusLength: bits,
- publicExponent: e,
- publicKeyEncoding: {
- type: 'spki',
- format: 'pem'
- },
- privateKeyEncoding: {
- type: 'pkcs8',
- format: 'pem'
- }
- });
- return {
- privateKey: pki$4.privateKeyFromPem(keypair.privateKey),
- publicKey: pki$4.publicKeyFromPem(keypair.publicKey)
- };
- }
- }
- }
-
- // use JavaScript implementation
- var state = pki$4.rsa.createKeyPairGenerationState(bits, e, options);
- if(!callback) {
- pki$4.rsa.stepKeyPairGenerationState(state, 0);
- return state.keys;
- }
- _generateKeyPair(state, options, callback);
-};
-
-/**
- * Sets an RSA public key from BigIntegers modulus and exponent.
- *
- * @param n the modulus.
- * @param e the exponent.
- *
- * @return the public key.
- */
-pki$4.setRsaPublicKey = pki$4.rsa.setPublicKey = function(n, e) {
- var key = {
- n: n,
- e: e
- };
-
- /**
- * Encrypts the given data with this public key. Newer applications
- * should use the 'RSA-OAEP' decryption scheme, 'RSAES-PKCS1-V1_5' is for
- * legacy applications.
- *
- * @param data the byte string to encrypt.
- * @param scheme the encryption scheme to use:
- * 'RSAES-PKCS1-V1_5' (default),
- * 'RSA-OAEP',
- * 'RAW', 'NONE', or null to perform raw RSA encryption,
- * an object with an 'encode' property set to a function
- * with the signature 'function(data, key)' that returns
- * a binary-encoded string representing the encoded data.
- * @param schemeOptions any scheme-specific options.
- *
- * @return the encrypted byte string.
- */
- key.encrypt = function(data, scheme, schemeOptions) {
- if(typeof scheme === 'string') {
- scheme = scheme.toUpperCase();
- } else if(scheme === undefined) {
- scheme = 'RSAES-PKCS1-V1_5';
- }
-
- if(scheme === 'RSAES-PKCS1-V1_5') {
- scheme = {
- encode: function(m, key, pub) {
- return _encodePkcs1_v1_5(m, key, 0x02).getBytes();
- }
- };
- } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {
- scheme = {
- encode: function(m, key) {
- return forge$k.pkcs1.encode_rsa_oaep(key, m, schemeOptions);
- }
- };
- } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {
- scheme = {encode: function(e) {return e;}};
- } else if(typeof scheme === 'string') {
- throw new Error('Unsupported encryption scheme: "' + scheme + '".');
- }
-
- // do scheme-based encoding then rsa encryption
- var e = scheme.encode(data, key, true);
- return pki$4.rsa.encrypt(e, key, true);
- };
-
- /**
- * Verifies the given signature against the given digest.
- *
- * PKCS#1 supports multiple (currently two) signature schemes:
- * RSASSA-PKCS1-V1_5 and RSASSA-PSS.
- *
- * By default this implementation uses the "old scheme", i.e.
- * RSASSA-PKCS1-V1_5, in which case once RSA-decrypted, the
- * signature is an OCTET STRING that holds a DigestInfo.
- *
- * DigestInfo ::= SEQUENCE {
- * digestAlgorithm DigestAlgorithmIdentifier,
- * digest Digest
- * }
- * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
- * Digest ::= OCTET STRING
- *
- * To perform PSS signature verification, provide an instance
- * of Forge PSS object as the scheme parameter.
- *
- * @param digest the message digest hash to compare against the signature,
- * as a binary-encoded string.
- * @param signature the signature to verify, as a binary-encoded string.
- * @param scheme signature verification scheme to use:
- * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,
- * a Forge PSS object for RSASSA-PSS,
- * 'NONE' or null for none, DigestInfo will not be expected, but
- * PKCS#1 v1.5 padding will still be used.
- *
- * @return true if the signature was verified, false if not.
- */
- key.verify = function(digest, signature, scheme) {
- if(typeof scheme === 'string') {
- scheme = scheme.toUpperCase();
- } else if(scheme === undefined) {
- scheme = 'RSASSA-PKCS1-V1_5';
- }
-
- if(scheme === 'RSASSA-PKCS1-V1_5') {
- scheme = {
- verify: function(digest, d) {
- // remove padding
- d = _decodePkcs1_v1_5(d, key, true);
- // d is ASN.1 BER-encoded DigestInfo
- var obj = asn1$7.fromDer(d);
- // compare the given digest to the decrypted one
- return digest === obj.value[1].value;
- }
- };
- } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {
- scheme = {
- verify: function(digest, d) {
- // remove padding
- d = _decodePkcs1_v1_5(d, key, true);
- return digest === d;
- }
- };
- }
-
- // do rsa decryption w/o any decoding, then verify -- which does decoding
- var d = pki$4.rsa.decrypt(signature, key, true, false);
- return scheme.verify(digest, d, key.n.bitLength());
- };
-
- return key;
-};
-
-/**
- * Sets an RSA private key from BigIntegers modulus, exponent, primes,
- * prime exponents, and modular multiplicative inverse.
- *
- * @param n the modulus.
- * @param e the public exponent.
- * @param d the private exponent ((inverse of e) mod n).
- * @param p the first prime.
- * @param q the second prime.
- * @param dP exponent1 (d mod (p-1)).
- * @param dQ exponent2 (d mod (q-1)).
- * @param qInv ((inverse of q) mod p)
- *
- * @return the private key.
- */
-pki$4.setRsaPrivateKey = pki$4.rsa.setPrivateKey = function(
- n, e, d, p, q, dP, dQ, qInv) {
- var key = {
- n: n,
- e: e,
- d: d,
- p: p,
- q: q,
- dP: dP,
- dQ: dQ,
- qInv: qInv
- };
-
- /**
- * Decrypts the given data with this private key. The decryption scheme
- * must match the one used to encrypt the data.
- *
- * @param data the byte string to decrypt.
- * @param scheme the decryption scheme to use:
- * 'RSAES-PKCS1-V1_5' (default),
- * 'RSA-OAEP',
- * 'RAW', 'NONE', or null to perform raw RSA decryption.
- * @param schemeOptions any scheme-specific options.
- *
- * @return the decrypted byte string.
- */
- key.decrypt = function(data, scheme, schemeOptions) {
- if(typeof scheme === 'string') {
- scheme = scheme.toUpperCase();
- } else if(scheme === undefined) {
- scheme = 'RSAES-PKCS1-V1_5';
- }
-
- // do rsa decryption w/o any decoding
- var d = pki$4.rsa.decrypt(data, key, false, false);
-
- if(scheme === 'RSAES-PKCS1-V1_5') {
- scheme = {decode: _decodePkcs1_v1_5};
- } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {
- scheme = {
- decode: function(d, key) {
- return forge$k.pkcs1.decode_rsa_oaep(key, d, schemeOptions);
- }
- };
- } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {
- scheme = {decode: function(d) {return d;}};
- } else {
- throw new Error('Unsupported encryption scheme: "' + scheme + '".');
- }
-
- // decode according to scheme
- return scheme.decode(d, key, false);
- };
-
- /**
- * Signs the given digest, producing a signature.
- *
- * PKCS#1 supports multiple (currently two) signature schemes:
- * RSASSA-PKCS1-V1_5 and RSASSA-PSS.
- *
- * By default this implementation uses the "old scheme", i.e.
- * RSASSA-PKCS1-V1_5. In order to generate a PSS signature, provide
- * an instance of Forge PSS object as the scheme parameter.
- *
- * @param md the message digest object with the hash to sign.
- * @param scheme the signature scheme to use:
- * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,
- * a Forge PSS object for RSASSA-PSS,
- * 'NONE' or null for none, DigestInfo will not be used but
- * PKCS#1 v1.5 padding will still be used.
- *
- * @return the signature as a byte string.
- */
- key.sign = function(md, scheme) {
- /* Note: The internal implementation of RSA operations is being
- transitioned away from a PKCS#1 v1.5 hard-coded scheme. Some legacy
- code like the use of an encoding block identifier 'bt' will eventually
- be removed. */
-
- // private key operation
- var bt = false;
-
- if(typeof scheme === 'string') {
- scheme = scheme.toUpperCase();
- }
-
- if(scheme === undefined || scheme === 'RSASSA-PKCS1-V1_5') {
- scheme = {encode: emsaPkcs1v15encode};
- bt = 0x01;
- } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {
- scheme = {encode: function() {return md;}};
- bt = 0x01;
- }
-
- // encode and then encrypt
- var d = scheme.encode(md, key.n.bitLength());
- return pki$4.rsa.encrypt(d, key, bt);
- };
-
- return key;
-};
-
-/**
- * Wraps an RSAPrivateKey ASN.1 object in an ASN.1 PrivateKeyInfo object.
- *
- * @param rsaKey the ASN.1 RSAPrivateKey.
- *
- * @return the ASN.1 PrivateKeyInfo.
- */
-pki$4.wrapRsaPrivateKey = function(rsaKey) {
- // PrivateKeyInfo
- return asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.SEQUENCE, true, [
- // version (0)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- asn1$7.integerToDer(0).getBytes()),
- // privateKeyAlgorithm
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.SEQUENCE, true, [
- asn1$7.create(
- asn1$7.Class.UNIVERSAL, asn1$7.Type.OID, false,
- asn1$7.oidToDer(pki$4.oids.rsaEncryption).getBytes()),
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.NULL, false, '')
- ]),
- // PrivateKey
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.OCTETSTRING, false,
- asn1$7.toDer(rsaKey).getBytes())
- ]);
-};
-
-/**
- * Converts a private key from an ASN.1 object.
- *
- * @param obj the ASN.1 representation of a PrivateKeyInfo containing an
- * RSAPrivateKey or an RSAPrivateKey.
- *
- * @return the private key.
- */
-pki$4.privateKeyFromAsn1 = function(obj) {
- // get PrivateKeyInfo
- var capture = {};
- var errors = [];
- if(asn1$7.validate(obj, privateKeyValidator$1, capture, errors)) {
- obj = asn1$7.fromDer(forge$k.util.createBuffer(capture.privateKey));
- }
-
- // get RSAPrivateKey
- capture = {};
- errors = [];
- if(!asn1$7.validate(obj, rsaPrivateKeyValidator, capture, errors)) {
- var error = new Error('Cannot read private key. ' +
- 'ASN.1 object does not contain an RSAPrivateKey.');
- error.errors = errors;
- throw error;
- }
-
- // Note: Version is currently ignored.
- // capture.privateKeyVersion
- // FIXME: inefficient, get a BigInteger that uses byte strings
- var n, e, d, p, q, dP, dQ, qInv;
- n = forge$k.util.createBuffer(capture.privateKeyModulus).toHex();
- e = forge$k.util.createBuffer(capture.privateKeyPublicExponent).toHex();
- d = forge$k.util.createBuffer(capture.privateKeyPrivateExponent).toHex();
- p = forge$k.util.createBuffer(capture.privateKeyPrime1).toHex();
- q = forge$k.util.createBuffer(capture.privateKeyPrime2).toHex();
- dP = forge$k.util.createBuffer(capture.privateKeyExponent1).toHex();
- dQ = forge$k.util.createBuffer(capture.privateKeyExponent2).toHex();
- qInv = forge$k.util.createBuffer(capture.privateKeyCoefficient).toHex();
-
- // set private key
- return pki$4.setRsaPrivateKey(
- new BigInteger$1(n, 16),
- new BigInteger$1(e, 16),
- new BigInteger$1(d, 16),
- new BigInteger$1(p, 16),
- new BigInteger$1(q, 16),
- new BigInteger$1(dP, 16),
- new BigInteger$1(dQ, 16),
- new BigInteger$1(qInv, 16));
-};
-
-/**
- * Converts a private key to an ASN.1 RSAPrivateKey.
- *
- * @param key the private key.
- *
- * @return the ASN.1 representation of an RSAPrivateKey.
- */
-pki$4.privateKeyToAsn1 = pki$4.privateKeyToRSAPrivateKey = function(key) {
- // RSAPrivateKey
- return asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.SEQUENCE, true, [
- // version (0 = only 2 primes, 1 multiple primes)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- asn1$7.integerToDer(0).getBytes()),
- // modulus (n)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.n)),
- // publicExponent (e)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.e)),
- // privateExponent (d)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.d)),
- // privateKeyPrime1 (p)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.p)),
- // privateKeyPrime2 (q)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.q)),
- // privateKeyExponent1 (dP)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.dP)),
- // privateKeyExponent2 (dQ)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.dQ)),
- // coefficient (qInv)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.qInv))
- ]);
-};
-
-/**
- * Converts a public key from an ASN.1 SubjectPublicKeyInfo or RSAPublicKey.
- *
- * @param obj the asn1 representation of a SubjectPublicKeyInfo or RSAPublicKey.
- *
- * @return the public key.
- */
-pki$4.publicKeyFromAsn1 = function(obj) {
- // get SubjectPublicKeyInfo
- var capture = {};
- var errors = [];
- if(asn1$7.validate(obj, publicKeyValidator$2, capture, errors)) {
- // get oid
- var oid = asn1$7.derToOid(capture.publicKeyOid);
- if(oid !== pki$4.oids.rsaEncryption) {
- var error = new Error('Cannot read public key. Unknown OID.');
- error.oid = oid;
- throw error;
- }
- obj = capture.rsaPublicKey;
- }
-
- // get RSA params
- errors = [];
- if(!asn1$7.validate(obj, rsaPublicKeyValidator, capture, errors)) {
- var error = new Error('Cannot read public key. ' +
- 'ASN.1 object does not contain an RSAPublicKey.');
- error.errors = errors;
- throw error;
- }
-
- // FIXME: inefficient, get a BigInteger that uses byte strings
- var n = forge$k.util.createBuffer(capture.publicKeyModulus).toHex();
- var e = forge$k.util.createBuffer(capture.publicKeyExponent).toHex();
-
- // set public key
- return pki$4.setRsaPublicKey(
- new BigInteger$1(n, 16),
- new BigInteger$1(e, 16));
-};
-
-/**
- * Converts a public key to an ASN.1 SubjectPublicKeyInfo.
- *
- * @param key the public key.
- *
- * @return the asn1 representation of a SubjectPublicKeyInfo.
- */
-pki$4.publicKeyToAsn1 = pki$4.publicKeyToSubjectPublicKeyInfo = function(key) {
- // SubjectPublicKeyInfo
- return asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.SEQUENCE, true, [
- // AlgorithmIdentifier
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.SEQUENCE, true, [
- // algorithm
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.OID, false,
- asn1$7.oidToDer(pki$4.oids.rsaEncryption).getBytes()),
- // parameters (null)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.NULL, false, '')
- ]),
- // subjectPublicKey
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.BITSTRING, false, [
- pki$4.publicKeyToRSAPublicKey(key)
- ])
- ]);
-};
-
-/**
- * Converts a public key to an ASN.1 RSAPublicKey.
- *
- * @param key the public key.
- *
- * @return the asn1 representation of a RSAPublicKey.
- */
-pki$4.publicKeyToRSAPublicKey = function(key) {
- // RSAPublicKey
- return asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.SEQUENCE, true, [
- // modulus (n)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.n)),
- // publicExponent (e)
- asn1$7.create(asn1$7.Class.UNIVERSAL, asn1$7.Type.INTEGER, false,
- _bnToBytes(key.e))
- ]);
-};
-
-/**
- * Encodes a message using PKCS#1 v1.5 padding.
- *
- * @param m the message to encode.
- * @param key the RSA key to use.
- * @param bt the block type to use, i.e. either 0x01 (for signing) or 0x02
- * (for encryption).
- *
- * @return the padded byte buffer.
- */
-function _encodePkcs1_v1_5(m, key, bt) {
- var eb = forge$k.util.createBuffer();
-
- // get the length of the modulus in bytes
- var k = Math.ceil(key.n.bitLength() / 8);
-
- /* use PKCS#1 v1.5 padding */
- if(m.length > (k - 11)) {
- var error = new Error('Message is too long for PKCS#1 v1.5 padding.');
- error.length = m.length;
- error.max = k - 11;
- throw error;
- }
-
- /* A block type BT, a padding string PS, and the data D shall be
- formatted into an octet string EB, the encryption block:
-
- EB = 00 || BT || PS || 00 || D
-
- The block type BT shall be a single octet indicating the structure of
- the encryption block. For this version of the document it shall have
- value 00, 01, or 02. For a private-key operation, the block type
- shall be 00 or 01. For a public-key operation, it shall be 02.
-
- The padding string PS shall consist of k-3-||D|| octets. For block
- type 00, the octets shall have value 00; for block type 01, they
- shall have value FF; and for block type 02, they shall be
- pseudorandomly generated and nonzero. This makes the length of the
- encryption block EB equal to k. */
-
- // build the encryption block
- eb.putByte(0x00);
- eb.putByte(bt);
-
- // create the padding
- var padNum = k - 3 - m.length;
- var padByte;
- // private key op
- if(bt === 0x00 || bt === 0x01) {
- padByte = (bt === 0x00) ? 0x00 : 0xFF;
- for(var i = 0; i < padNum; ++i) {
- eb.putByte(padByte);
- }
- } else {
- // public key op
- // pad with random non-zero values
- while(padNum > 0) {
- var numZeros = 0;
- var padBytes = forge$k.random.getBytes(padNum);
- for(var i = 0; i < padNum; ++i) {
- padByte = padBytes.charCodeAt(i);
- if(padByte === 0) {
- ++numZeros;
- } else {
- eb.putByte(padByte);
- }
- }
- padNum = numZeros;
- }
- }
-
- // zero followed by message
- eb.putByte(0x00);
- eb.putBytes(m);
-
- return eb;
-}
-
-/**
- * Decodes a message using PKCS#1 v1.5 padding.
- *
- * @param em the message to decode.
- * @param key the RSA key to use.
- * @param pub true if the key is a public key, false if it is private.
- * @param ml the message length, if specified.
- *
- * @return the decoded bytes.
- */
-function _decodePkcs1_v1_5(em, key, pub, ml) {
- // get the length of the modulus in bytes
- var k = Math.ceil(key.n.bitLength() / 8);
-
- /* It is an error if any of the following conditions occurs:
-
- 1. The encryption block EB cannot be parsed unambiguously.
- 2. The padding string PS consists of fewer than eight octets
- or is inconsisent with the block type BT.
- 3. The decryption process is a public-key operation and the block
- type BT is not 00 or 01, or the decryption process is a
- private-key operation and the block type is not 02.
- */
-
- // parse the encryption block
- var eb = forge$k.util.createBuffer(em);
- var first = eb.getByte();
- var bt = eb.getByte();
- if(first !== 0x00 ||
- (pub && bt !== 0x00 && bt !== 0x01) ||
- (!pub && bt != 0x02) ||
- (pub && bt === 0x00 && typeof(ml) === 'undefined')) {
- throw new Error('Encryption block is invalid.');
- }
-
- var padNum = 0;
- if(bt === 0x00) {
- // check all padding bytes for 0x00
- padNum = k - 3 - ml;
- for(var i = 0; i < padNum; ++i) {
- if(eb.getByte() !== 0x00) {
- throw new Error('Encryption block is invalid.');
- }
- }
- } else if(bt === 0x01) {
- // find the first byte that isn't 0xFF, should be after all padding
- padNum = 0;
- while(eb.length() > 1) {
- if(eb.getByte() !== 0xFF) {
- --eb.read;
- break;
- }
- ++padNum;
- }
- } else if(bt === 0x02) {
- // look for 0x00 byte
- padNum = 0;
- while(eb.length() > 1) {
- if(eb.getByte() === 0x00) {
- --eb.read;
- break;
- }
- ++padNum;
- }
- }
-
- // zero must be 0x00 and padNum must be (k - 3 - message length)
- var zero = eb.getByte();
- if(zero !== 0x00 || padNum !== (k - 3 - eb.length())) {
- throw new Error('Encryption block is invalid.');
- }
-
- return eb.getBytes();
-}
-
-/**
- * Runs the key-generation algorithm asynchronously, either in the background
- * via Web Workers, or using the main thread and setImmediate.
- *
- * @param state the key-pair generation state.
- * @param [options] options for key-pair generation:
- * workerScript the worker script URL.
- * workers the number of web workers (if supported) to use,
- * (default: 2, -1 to use estimated cores minus one).
- * workLoad the size of the work load, ie: number of possible prime
- * numbers for each web worker to check per work assignment,
- * (default: 100).
- * @param callback(err, keypair) called once the operation completes.
- */
-function _generateKeyPair(state, options, callback) {
- if(typeof options === 'function') {
- callback = options;
- options = {};
- }
- options = options || {};
-
- var opts = {
- algorithm: {
- name: options.algorithm || 'PRIMEINC',
- options: {
- workers: options.workers || 2,
- workLoad: options.workLoad || 100,
- workerScript: options.workerScript
- }
- }
- };
- if('prng' in options) {
- opts.prng = options.prng;
- }
-
- generate();
-
- function generate() {
- // find p and then q (done in series to simplify)
- getPrime(state.pBits, function(err, num) {
- if(err) {
- return callback(err);
- }
- state.p = num;
- if(state.q !== null) {
- return finish(err, state.q);
- }
- getPrime(state.qBits, finish);
- });
- }
-
- function getPrime(bits, callback) {
- forge$k.prime.generateProbablePrime(bits, opts, callback);
- }
-
- function finish(err, num) {
- if(err) {
- return callback(err);
- }
-
- // set q
- state.q = num;
-
- // ensure p is larger than q (swap them if not)
- if(state.p.compareTo(state.q) < 0) {
- var tmp = state.p;
- state.p = state.q;
- state.q = tmp;
- }
-
- // ensure p is coprime with e
- if(state.p.subtract(BigInteger$1.ONE).gcd(state.e)
- .compareTo(BigInteger$1.ONE) !== 0) {
- state.p = null;
- generate();
- return;
- }
-
- // ensure q is coprime with e
- if(state.q.subtract(BigInteger$1.ONE).gcd(state.e)
- .compareTo(BigInteger$1.ONE) !== 0) {
- state.q = null;
- getPrime(state.qBits, finish);
- return;
- }
-
- // compute phi: (p - 1)(q - 1) (Euler's totient function)
- state.p1 = state.p.subtract(BigInteger$1.ONE);
- state.q1 = state.q.subtract(BigInteger$1.ONE);
- state.phi = state.p1.multiply(state.q1);
-
- // ensure e and phi are coprime
- if(state.phi.gcd(state.e).compareTo(BigInteger$1.ONE) !== 0) {
- // phi and e aren't coprime, so generate a new p and q
- state.p = state.q = null;
- generate();
- return;
- }
-
- // create n, ensure n is has the right number of bits
- state.n = state.p.multiply(state.q);
- if(state.n.bitLength() !== state.bits) {
- // failed, get new q
- state.q = null;
- getPrime(state.qBits, finish);
- return;
- }
-
- // set keys
- var d = state.e.modInverse(state.phi);
- state.keys = {
- privateKey: pki$4.rsa.setPrivateKey(
- state.n, state.e, d, state.p, state.q,
- d.mod(state.p1), d.mod(state.q1),
- state.q.modInverse(state.p)),
- publicKey: pki$4.rsa.setPublicKey(state.n, state.e)
- };
-
- callback(null, state.keys);
- }
-}
-
-/**
- * Converts a positive BigInteger into 2's-complement big-endian bytes.
- *
- * @param b the big integer to convert.
- *
- * @return the bytes.
- */
-function _bnToBytes(b) {
- // prepend 0x00 if first byte >= 0x80
- var hex = b.toString(16);
- if(hex[0] >= '8') {
- hex = '00' + hex;
- }
- var bytes = forge$k.util.hexToBytes(hex);
-
- // ensure integer is minimally-encoded
- if(bytes.length > 1 &&
- // leading 0x00 for positive integer
- ((bytes.charCodeAt(0) === 0 &&
- (bytes.charCodeAt(1) & 0x80) === 0) ||
- // leading 0xFF for negative integer
- (bytes.charCodeAt(0) === 0xFF &&
- (bytes.charCodeAt(1) & 0x80) === 0x80))) {
- return bytes.substr(1);
- }
- return bytes;
-}
-
-/**
- * Returns the required number of Miller-Rabin tests to generate a
- * prime with an error probability of (1/2)^80.
- *
- * See Handbook of Applied Cryptography Chapter 4, Table 4.4.
- *
- * @param bits the bit size.
- *
- * @return the required number of iterations.
- */
-function _getMillerRabinTests(bits) {
- if(bits <= 100) return 27;
- if(bits <= 150) return 18;
- if(bits <= 200) return 15;
- if(bits <= 250) return 12;
- if(bits <= 300) return 9;
- if(bits <= 350) return 8;
- if(bits <= 400) return 7;
- if(bits <= 500) return 6;
- if(bits <= 600) return 5;
- if(bits <= 800) return 4;
- if(bits <= 1250) return 3;
- return 2;
-}
-
-/**
- * Performs feature detection on the Node crypto interface.
- *
- * @param fn the feature (function) to detect.
- *
- * @return true if detected, false if not.
- */
-function _detectNodeCrypto(fn) {
- return forge$k.util.isNodejs && typeof _crypto[fn] === 'function';
-}
-
-/**
- * Performs feature detection on the SubtleCrypto interface.
- *
- * @param fn the feature (function) to detect.
- *
- * @return true if detected, false if not.
- */
-function _detectSubtleCrypto(fn) {
- return (typeof util.globalScope !== 'undefined' &&
- typeof util.globalScope.crypto === 'object' &&
- typeof util.globalScope.crypto.subtle === 'object' &&
- typeof util.globalScope.crypto.subtle[fn] === 'function');
-}
-
-/**
- * Performs feature detection on the deprecated Microsoft Internet Explorer
- * outdated SubtleCrypto interface. This function should only be used after
- * checking for the modern, standard SubtleCrypto interface.
- *
- * @param fn the feature (function) to detect.
- *
- * @return true if detected, false if not.
- */
-function _detectSubtleMsCrypto(fn) {
- return (typeof util.globalScope !== 'undefined' &&
- typeof util.globalScope.msCrypto === 'object' &&
- typeof util.globalScope.msCrypto.subtle === 'object' &&
- typeof util.globalScope.msCrypto.subtle[fn] === 'function');
-}
-
-function _intToUint8Array(x) {
- var bytes = forge$k.util.hexToBytes(x.toString(16));
- var buffer = new Uint8Array(bytes.length);
- for(var i = 0; i < bytes.length; ++i) {
- buffer[i] = bytes.charCodeAt(i);
- }
- return buffer;
-}
-
-/**
- * Password-based encryption functions.
- *
- * @author Dave Longley
- * @author Stefan Siegl <stesie@brokenpipe.de>
- *
- * Copyright (c) 2010-2013 Digital Bazaar, Inc.
- * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
- *
- * An EncryptedPrivateKeyInfo:
- *
- * EncryptedPrivateKeyInfo ::= SEQUENCE {
- * encryptionAlgorithm EncryptionAlgorithmIdentifier,
- * encryptedData EncryptedData }
- *
- * EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
- *
- * EncryptedData ::= OCTET STRING
- */
-
-var forge$j = forge$F;
-
-// shortcut for asn.1 API
-var asn1$6 = forge$j.asn1;
-
-/* Password-based encryption implementation. */
-var pki$3 = forge$j.pki = forge$j.pki || {};
-pki$3.pbe = forge$j.pbe = forge$j.pbe || {};
-var oids$1 = pki$3.oids;
-
-// validator for an EncryptedPrivateKeyInfo structure
-// Note: Currently only works w/algorithm params
-var encryptedPrivateKeyValidator = {
- name: 'EncryptedPrivateKeyInfo',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'EncryptedPrivateKeyInfo.encryptionAlgorithm',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'AlgorithmIdentifier.algorithm',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.OID,
- constructed: false,
- capture: 'encryptionOid'
- }, {
- name: 'AlgorithmIdentifier.parameters',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'encryptionParams'
- }]
- }, {
- // encryptedData
- name: 'EncryptedPrivateKeyInfo.encryptedData',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.OCTETSTRING,
- constructed: false,
- capture: 'encryptedData'
- }]
-};
-
-// validator for a PBES2Algorithms structure
-// Note: Currently only works w/PBKDF2 + AES encryption schemes
-var PBES2AlgorithmsValidator = {
- name: 'PBES2Algorithms',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'PBES2Algorithms.keyDerivationFunc',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'PBES2Algorithms.keyDerivationFunc.oid',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.OID,
- constructed: false,
- capture: 'kdfOid'
- }, {
- name: 'PBES2Algorithms.params',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'PBES2Algorithms.params.salt',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.OCTETSTRING,
- constructed: false,
- capture: 'kdfSalt'
- }, {
- name: 'PBES2Algorithms.params.iterationCount',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.INTEGER,
- constructed: false,
- capture: 'kdfIterationCount'
- }, {
- name: 'PBES2Algorithms.params.keyLength',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.INTEGER,
- constructed: false,
- optional: true,
- capture: 'keyLength'
- }, {
- // prf
- name: 'PBES2Algorithms.params.prf',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- optional: true,
- value: [{
- name: 'PBES2Algorithms.params.prf.algorithm',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.OID,
- constructed: false,
- capture: 'prfOid'
- }]
- }]
- }]
- }, {
- name: 'PBES2Algorithms.encryptionScheme',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'PBES2Algorithms.encryptionScheme.oid',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.OID,
- constructed: false,
- capture: 'encOid'
- }, {
- name: 'PBES2Algorithms.encryptionScheme.iv',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.OCTETSTRING,
- constructed: false,
- capture: 'encIv'
- }]
- }]
-};
-
-var pkcs12PbeParamsValidator = {
- name: 'pkcs-12PbeParams',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'pkcs-12PbeParams.salt',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.OCTETSTRING,
- constructed: false,
- capture: 'salt'
- }, {
- name: 'pkcs-12PbeParams.iterations',
- tagClass: asn1$6.Class.UNIVERSAL,
- type: asn1$6.Type.INTEGER,
- constructed: false,
- capture: 'iterations'
- }]
-};
-
-/**
- * Encrypts a ASN.1 PrivateKeyInfo object, producing an EncryptedPrivateKeyInfo.
- *
- * PBES2Algorithms ALGORITHM-IDENTIFIER ::=
- * { {PBES2-params IDENTIFIED BY id-PBES2}, ...}
- *
- * id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}
- *
- * PBES2-params ::= SEQUENCE {
- * keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},
- * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}
- * }
- *
- * PBES2-KDFs ALGORITHM-IDENTIFIER ::=
- * { {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }
- *
- * PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... }
- *
- * PBKDF2-params ::= SEQUENCE {
- * salt CHOICE {
- * specified OCTET STRING,
- * otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}
- * },
- * iterationCount INTEGER (1..MAX),
- * keyLength INTEGER (1..MAX) OPTIONAL,
- * prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1
- * }
- *
- * @param obj the ASN.1 PrivateKeyInfo object.
- * @param password the password to encrypt with.
- * @param options:
- * algorithm the encryption algorithm to use
- * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.
- * count the iteration count to use.
- * saltSize the salt size to use.
- * prfAlgorithm the PRF message digest algorithm to use
- * ('sha1', 'sha224', 'sha256', 'sha384', 'sha512')
- *
- * @return the ASN.1 EncryptedPrivateKeyInfo.
- */
-pki$3.encryptPrivateKeyInfo = function(obj, password, options) {
- // set default options
- options = options || {};
- options.saltSize = options.saltSize || 8;
- options.count = options.count || 2048;
- options.algorithm = options.algorithm || 'aes128';
- options.prfAlgorithm = options.prfAlgorithm || 'sha1';
-
- // generate PBE params
- var salt = forge$j.random.getBytesSync(options.saltSize);
- var count = options.count;
- var countBytes = asn1$6.integerToDer(count);
- var dkLen;
- var encryptionAlgorithm;
- var encryptedData;
- if(options.algorithm.indexOf('aes') === 0 || options.algorithm === 'des') {
- // do PBES2
- var ivLen, encOid, cipherFn;
- switch(options.algorithm) {
- case 'aes128':
- dkLen = 16;
- ivLen = 16;
- encOid = oids$1['aes128-CBC'];
- cipherFn = forge$j.aes.createEncryptionCipher;
- break;
- case 'aes192':
- dkLen = 24;
- ivLen = 16;
- encOid = oids$1['aes192-CBC'];
- cipherFn = forge$j.aes.createEncryptionCipher;
- break;
- case 'aes256':
- dkLen = 32;
- ivLen = 16;
- encOid = oids$1['aes256-CBC'];
- cipherFn = forge$j.aes.createEncryptionCipher;
- break;
- case 'des':
- dkLen = 8;
- ivLen = 8;
- encOid = oids$1['desCBC'];
- cipherFn = forge$j.des.createEncryptionCipher;
- break;
- default:
- var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');
- error.algorithm = options.algorithm;
- throw error;
- }
-
- // get PRF message digest
- var prfAlgorithm = 'hmacWith' + options.prfAlgorithm.toUpperCase();
- var md = prfAlgorithmToMessageDigest(prfAlgorithm);
-
- // encrypt private key using pbe SHA-1 and AES/DES
- var dk = forge$j.pkcs5.pbkdf2(password, salt, count, dkLen, md);
- var iv = forge$j.random.getBytesSync(ivLen);
- var cipher = cipherFn(dk);
- cipher.start(iv);
- cipher.update(asn1$6.toDer(obj));
- cipher.finish();
- encryptedData = cipher.output.getBytes();
-
- // get PBKDF2-params
- var params = createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm);
-
- encryptionAlgorithm = asn1$6.create(
- asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.OID, false,
- asn1$6.oidToDer(oids$1['pkcs5PBES2']).getBytes()),
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- // keyDerivationFunc
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.OID, false,
- asn1$6.oidToDer(oids$1['pkcs5PBKDF2']).getBytes()),
- // PBKDF2-params
- params
- ]),
- // encryptionScheme
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.OID, false,
- asn1$6.oidToDer(encOid).getBytes()),
- // iv
- asn1$6.create(
- asn1$6.Class.UNIVERSAL, asn1$6.Type.OCTETSTRING, false, iv)
- ])
- ])
- ]);
- } else if(options.algorithm === '3des') {
- // Do PKCS12 PBE
- dkLen = 24;
-
- var saltBytes = new forge$j.util.ByteBuffer(salt);
- var dk = pki$3.pbe.generatePkcs12Key(password, saltBytes, 1, count, dkLen);
- var iv = pki$3.pbe.generatePkcs12Key(password, saltBytes, 2, count, dkLen);
- var cipher = forge$j.des.createEncryptionCipher(dk);
- cipher.start(iv);
- cipher.update(asn1$6.toDer(obj));
- cipher.finish();
- encryptedData = cipher.output.getBytes();
-
- encryptionAlgorithm = asn1$6.create(
- asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.OID, false,
- asn1$6.oidToDer(oids$1['pbeWithSHAAnd3-KeyTripleDES-CBC']).getBytes()),
- // pkcs-12PbeParams
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- // salt
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.OCTETSTRING, false, salt),
- // iteration count
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.INTEGER, false,
- countBytes.getBytes())
- ])
- ]);
- } else {
- var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');
- error.algorithm = options.algorithm;
- throw error;
- }
-
- // EncryptedPrivateKeyInfo
- var rval = asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- // encryptionAlgorithm
- encryptionAlgorithm,
- // encryptedData
- asn1$6.create(
- asn1$6.Class.UNIVERSAL, asn1$6.Type.OCTETSTRING, false, encryptedData)
- ]);
- return rval;
-};
-
-/**
- * Decrypts a ASN.1 PrivateKeyInfo object.
- *
- * @param obj the ASN.1 EncryptedPrivateKeyInfo object.
- * @param password the password to decrypt with.
- *
- * @return the ASN.1 PrivateKeyInfo on success, null on failure.
- */
-pki$3.decryptPrivateKeyInfo = function(obj, password) {
- var rval = null;
-
- // get PBE params
- var capture = {};
- var errors = [];
- if(!asn1$6.validate(obj, encryptedPrivateKeyValidator, capture, errors)) {
- var error = new Error('Cannot read encrypted private key. ' +
- 'ASN.1 object is not a supported EncryptedPrivateKeyInfo.');
- error.errors = errors;
- throw error;
- }
-
- // get cipher
- var oid = asn1$6.derToOid(capture.encryptionOid);
- var cipher = pki$3.pbe.getCipher(oid, capture.encryptionParams, password);
-
- // get encrypted data
- var encrypted = forge$j.util.createBuffer(capture.encryptedData);
-
- cipher.update(encrypted);
- if(cipher.finish()) {
- rval = asn1$6.fromDer(cipher.output);
- }
-
- return rval;
-};
-
-/**
- * Converts a EncryptedPrivateKeyInfo to PEM format.
- *
- * @param epki the EncryptedPrivateKeyInfo.
- * @param maxline the maximum characters per line, defaults to 64.
- *
- * @return the PEM-formatted encrypted private key.
- */
-pki$3.encryptedPrivateKeyToPem = function(epki, maxline) {
- // convert to DER, then PEM-encode
- var msg = {
- type: 'ENCRYPTED PRIVATE KEY',
- body: asn1$6.toDer(epki).getBytes()
- };
- return forge$j.pem.encode(msg, {maxline: maxline});
-};
-
-/**
- * Converts a PEM-encoded EncryptedPrivateKeyInfo to ASN.1 format. Decryption
- * is not performed.
- *
- * @param pem the EncryptedPrivateKeyInfo in PEM-format.
- *
- * @return the ASN.1 EncryptedPrivateKeyInfo.
- */
-pki$3.encryptedPrivateKeyFromPem = function(pem) {
- var msg = forge$j.pem.decode(pem)[0];
-
- if(msg.type !== 'ENCRYPTED PRIVATE KEY') {
- var error = new Error('Could not convert encrypted private key from PEM; ' +
- 'PEM header type is "ENCRYPTED PRIVATE KEY".');
- error.headerType = msg.type;
- throw error;
- }
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- throw new Error('Could not convert encrypted private key from PEM; ' +
- 'PEM is encrypted.');
- }
-
- // convert DER to ASN.1 object
- return asn1$6.fromDer(msg.body);
-};
-
-/**
- * Encrypts an RSA private key. By default, the key will be wrapped in
- * a PrivateKeyInfo and encrypted to produce a PKCS#8 EncryptedPrivateKeyInfo.
- * This is the standard, preferred way to encrypt a private key.
- *
- * To produce a non-standard PEM-encrypted private key that uses encapsulated
- * headers to indicate the encryption algorithm (old-style non-PKCS#8 OpenSSL
- * private key encryption), set the 'legacy' option to true. Note: Using this
- * option will cause the iteration count to be forced to 1.
- *
- * Note: The 'des' algorithm is supported, but it is not considered to be
- * secure because it only uses a single 56-bit key. If possible, it is highly
- * recommended that a different algorithm be used.
- *
- * @param rsaKey the RSA key to encrypt.
- * @param password the password to use.
- * @param options:
- * algorithm: the encryption algorithm to use
- * ('aes128', 'aes192', 'aes256', '3des', 'des').
- * count: the iteration count to use.
- * saltSize: the salt size to use.
- * legacy: output an old non-PKCS#8 PEM-encrypted+encapsulated
- * headers (DEK-Info) private key.
- *
- * @return the PEM-encoded ASN.1 EncryptedPrivateKeyInfo.
- */
-pki$3.encryptRsaPrivateKey = function(rsaKey, password, options) {
- // standard PKCS#8
- options = options || {};
- if(!options.legacy) {
- // encrypt PrivateKeyInfo
- var rval = pki$3.wrapRsaPrivateKey(pki$3.privateKeyToAsn1(rsaKey));
- rval = pki$3.encryptPrivateKeyInfo(rval, password, options);
- return pki$3.encryptedPrivateKeyToPem(rval);
- }
-
- // legacy non-PKCS#8
- var algorithm;
- var iv;
- var dkLen;
- var cipherFn;
- switch(options.algorithm) {
- case 'aes128':
- algorithm = 'AES-128-CBC';
- dkLen = 16;
- iv = forge$j.random.getBytesSync(16);
- cipherFn = forge$j.aes.createEncryptionCipher;
- break;
- case 'aes192':
- algorithm = 'AES-192-CBC';
- dkLen = 24;
- iv = forge$j.random.getBytesSync(16);
- cipherFn = forge$j.aes.createEncryptionCipher;
- break;
- case 'aes256':
- algorithm = 'AES-256-CBC';
- dkLen = 32;
- iv = forge$j.random.getBytesSync(16);
- cipherFn = forge$j.aes.createEncryptionCipher;
- break;
- case '3des':
- algorithm = 'DES-EDE3-CBC';
- dkLen = 24;
- iv = forge$j.random.getBytesSync(8);
- cipherFn = forge$j.des.createEncryptionCipher;
- break;
- case 'des':
- algorithm = 'DES-CBC';
- dkLen = 8;
- iv = forge$j.random.getBytesSync(8);
- cipherFn = forge$j.des.createEncryptionCipher;
- break;
- default:
- var error = new Error('Could not encrypt RSA private key; unsupported ' +
- 'encryption algorithm "' + options.algorithm + '".');
- error.algorithm = options.algorithm;
- throw error;
- }
-
- // encrypt private key using OpenSSL legacy key derivation
- var dk = forge$j.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);
- var cipher = cipherFn(dk);
- cipher.start(iv);
- cipher.update(asn1$6.toDer(pki$3.privateKeyToAsn1(rsaKey)));
- cipher.finish();
-
- var msg = {
- type: 'RSA PRIVATE KEY',
- procType: {
- version: '4',
- type: 'ENCRYPTED'
- },
- dekInfo: {
- algorithm: algorithm,
- parameters: forge$j.util.bytesToHex(iv).toUpperCase()
- },
- body: cipher.output.getBytes()
- };
- return forge$j.pem.encode(msg);
-};
-
-/**
- * Decrypts an RSA private key.
- *
- * @param pem the PEM-formatted EncryptedPrivateKeyInfo to decrypt.
- * @param password the password to use.
- *
- * @return the RSA key on success, null on failure.
- */
-pki$3.decryptRsaPrivateKey = function(pem, password) {
- var rval = null;
-
- var msg = forge$j.pem.decode(pem)[0];
-
- if(msg.type !== 'ENCRYPTED PRIVATE KEY' &&
- msg.type !== 'PRIVATE KEY' &&
- msg.type !== 'RSA PRIVATE KEY') {
- var error = new Error('Could not convert private key from PEM; PEM header type ' +
- 'is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".');
- error.headerType = error;
- throw error;
- }
-
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- var dkLen;
- var cipherFn;
- switch(msg.dekInfo.algorithm) {
- case 'DES-CBC':
- dkLen = 8;
- cipherFn = forge$j.des.createDecryptionCipher;
- break;
- case 'DES-EDE3-CBC':
- dkLen = 24;
- cipherFn = forge$j.des.createDecryptionCipher;
- break;
- case 'AES-128-CBC':
- dkLen = 16;
- cipherFn = forge$j.aes.createDecryptionCipher;
- break;
- case 'AES-192-CBC':
- dkLen = 24;
- cipherFn = forge$j.aes.createDecryptionCipher;
- break;
- case 'AES-256-CBC':
- dkLen = 32;
- cipherFn = forge$j.aes.createDecryptionCipher;
- break;
- case 'RC2-40-CBC':
- dkLen = 5;
- cipherFn = function(key) {
- return forge$j.rc2.createDecryptionCipher(key, 40);
- };
- break;
- case 'RC2-64-CBC':
- dkLen = 8;
- cipherFn = function(key) {
- return forge$j.rc2.createDecryptionCipher(key, 64);
- };
- break;
- case 'RC2-128-CBC':
- dkLen = 16;
- cipherFn = function(key) {
- return forge$j.rc2.createDecryptionCipher(key, 128);
- };
- break;
- default:
- var error = new Error('Could not decrypt private key; unsupported ' +
- 'encryption algorithm "' + msg.dekInfo.algorithm + '".');
- error.algorithm = msg.dekInfo.algorithm;
- throw error;
- }
-
- // use OpenSSL legacy key derivation
- var iv = forge$j.util.hexToBytes(msg.dekInfo.parameters);
- var dk = forge$j.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);
- var cipher = cipherFn(dk);
- cipher.start(iv);
- cipher.update(forge$j.util.createBuffer(msg.body));
- if(cipher.finish()) {
- rval = cipher.output.getBytes();
- } else {
- return rval;
- }
- } else {
- rval = msg.body;
- }
-
- if(msg.type === 'ENCRYPTED PRIVATE KEY') {
- rval = pki$3.decryptPrivateKeyInfo(asn1$6.fromDer(rval), password);
- } else {
- // decryption already performed above
- rval = asn1$6.fromDer(rval);
- }
-
- if(rval !== null) {
- rval = pki$3.privateKeyFromAsn1(rval);
- }
-
- return rval;
-};
-
-/**
- * Derives a PKCS#12 key.
- *
- * @param password the password to derive the key material from, null or
- * undefined for none.
- * @param salt the salt, as a ByteBuffer, to use.
- * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).
- * @param iter the iteration count.
- * @param n the number of bytes to derive from the password.
- * @param md the message digest to use, defaults to SHA-1.
- *
- * @return a ByteBuffer with the bytes derived from the password.
- */
-pki$3.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {
- var j, l;
-
- if(typeof md === 'undefined' || md === null) {
- if(!('sha1' in forge$j.md)) {
- throw new Error('"sha1" hash algorithm unavailable.');
- }
- md = forge$j.md.sha1.create();
- }
-
- var u = md.digestLength;
- var v = md.blockLength;
- var result = new forge$j.util.ByteBuffer();
-
- /* Convert password to Unicode byte buffer + trailing 0-byte. */
- var passBuf = new forge$j.util.ByteBuffer();
- if(password !== null && password !== undefined) {
- for(l = 0; l < password.length; l++) {
- passBuf.putInt16(password.charCodeAt(l));
- }
- passBuf.putInt16(0);
- }
-
- /* Length of salt and password in BYTES. */
- var p = passBuf.length();
- var s = salt.length();
-
- /* 1. Construct a string, D (the "diversifier"), by concatenating
- v copies of ID. */
- var D = new forge$j.util.ByteBuffer();
- D.fillWithByte(id, v);
-
- /* 2. Concatenate copies of the salt together to create a string S of length
- v * ceil(s / v) bytes (the final copy of the salt may be trunacted
- to create S).
- Note that if the salt is the empty string, then so is S. */
- var Slen = v * Math.ceil(s / v);
- var S = new forge$j.util.ByteBuffer();
- for(l = 0; l < Slen; l++) {
- S.putByte(salt.at(l % s));
- }
-
- /* 3. Concatenate copies of the password together to create a string P of
- length v * ceil(p / v) bytes (the final copy of the password may be
- truncated to create P).
- Note that if the password is the empty string, then so is P. */
- var Plen = v * Math.ceil(p / v);
- var P = new forge$j.util.ByteBuffer();
- for(l = 0; l < Plen; l++) {
- P.putByte(passBuf.at(l % p));
- }
-
- /* 4. Set I=S||P to be the concatenation of S and P. */
- var I = S;
- I.putBuffer(P);
-
- /* 5. Set c=ceil(n / u). */
- var c = Math.ceil(n / u);
-
- /* 6. For i=1, 2, ..., c, do the following: */
- for(var i = 1; i <= c; i++) {
- /* a) Set Ai=H^r(D||I). (l.e. the rth hash of D||I, H(H(H(...H(D||I)))) */
- var buf = new forge$j.util.ByteBuffer();
- buf.putBytes(D.bytes());
- buf.putBytes(I.bytes());
- for(var round = 0; round < iter; round++) {
- md.start();
- md.update(buf.getBytes());
- buf = md.digest();
- }
-
- /* b) Concatenate copies of Ai to create a string B of length v bytes (the
- final copy of Ai may be truncated to create B). */
- var B = new forge$j.util.ByteBuffer();
- for(l = 0; l < v; l++) {
- B.putByte(buf.at(l % u));
- }
-
- /* c) Treating I as a concatenation I0, I1, ..., Ik-1 of v-byte blocks,
- where k=ceil(s / v) + ceil(p / v), modify I by setting
- Ij=(Ij+B+1) mod 2v for each j. */
- var k = Math.ceil(s / v) + Math.ceil(p / v);
- var Inew = new forge$j.util.ByteBuffer();
- for(j = 0; j < k; j++) {
- var chunk = new forge$j.util.ByteBuffer(I.getBytes(v));
- var x = 0x1ff;
- for(l = B.length() - 1; l >= 0; l--) {
- x = x >> 8;
- x += B.at(l) + chunk.at(l);
- chunk.setAt(l, x & 0xff);
- }
- Inew.putBuffer(chunk);
- }
- I = Inew;
-
- /* Add Ai to A. */
- result.putBuffer(buf);
- }
-
- result.truncate(result.length() - n);
- return result;
-};
-
-/**
- * Get new Forge cipher object instance.
- *
- * @param oid the OID (in string notation).
- * @param params the ASN.1 params object.
- * @param password the password to decrypt with.
- *
- * @return new cipher object instance.
- */
-pki$3.pbe.getCipher = function(oid, params, password) {
- switch(oid) {
- case pki$3.oids['pkcs5PBES2']:
- return pki$3.pbe.getCipherForPBES2(oid, params, password);
-
- case pki$3.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:
- case pki$3.oids['pbewithSHAAnd40BitRC2-CBC']:
- return pki$3.pbe.getCipherForPKCS12PBE(oid, params, password);
-
- default:
- var error = new Error('Cannot read encrypted PBE data block. Unsupported OID.');
- error.oid = oid;
- error.supportedOids = [
- 'pkcs5PBES2',
- 'pbeWithSHAAnd3-KeyTripleDES-CBC',
- 'pbewithSHAAnd40BitRC2-CBC'
- ];
- throw error;
- }
-};
-
-/**
- * Get new Forge cipher object instance according to PBES2 params block.
- *
- * The returned cipher instance is already started using the IV
- * from PBES2 parameter block.
- *
- * @param oid the PKCS#5 PBKDF2 OID (in string notation).
- * @param params the ASN.1 PBES2-params object.
- * @param password the password to decrypt with.
- *
- * @return new cipher object instance.
- */
-pki$3.pbe.getCipherForPBES2 = function(oid, params, password) {
- // get PBE params
- var capture = {};
- var errors = [];
- if(!asn1$6.validate(params, PBES2AlgorithmsValidator, capture, errors)) {
- var error = new Error('Cannot read password-based-encryption algorithm ' +
- 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');
- error.errors = errors;
- throw error;
- }
-
- // check oids
- oid = asn1$6.derToOid(capture.kdfOid);
- if(oid !== pki$3.oids['pkcs5PBKDF2']) {
- var error = new Error('Cannot read encrypted private key. ' +
- 'Unsupported key derivation function OID.');
- error.oid = oid;
- error.supportedOids = ['pkcs5PBKDF2'];
- throw error;
- }
- oid = asn1$6.derToOid(capture.encOid);
- if(oid !== pki$3.oids['aes128-CBC'] &&
- oid !== pki$3.oids['aes192-CBC'] &&
- oid !== pki$3.oids['aes256-CBC'] &&
- oid !== pki$3.oids['des-EDE3-CBC'] &&
- oid !== pki$3.oids['desCBC']) {
- var error = new Error('Cannot read encrypted private key. ' +
- 'Unsupported encryption scheme OID.');
- error.oid = oid;
- error.supportedOids = [
- 'aes128-CBC', 'aes192-CBC', 'aes256-CBC', 'des-EDE3-CBC', 'desCBC'];
- throw error;
- }
-
- // set PBE params
- var salt = capture.kdfSalt;
- var count = forge$j.util.createBuffer(capture.kdfIterationCount);
- count = count.getInt(count.length() << 3);
- var dkLen;
- var cipherFn;
- switch(pki$3.oids[oid]) {
- case 'aes128-CBC':
- dkLen = 16;
- cipherFn = forge$j.aes.createDecryptionCipher;
- break;
- case 'aes192-CBC':
- dkLen = 24;
- cipherFn = forge$j.aes.createDecryptionCipher;
- break;
- case 'aes256-CBC':
- dkLen = 32;
- cipherFn = forge$j.aes.createDecryptionCipher;
- break;
- case 'des-EDE3-CBC':
- dkLen = 24;
- cipherFn = forge$j.des.createDecryptionCipher;
- break;
- case 'desCBC':
- dkLen = 8;
- cipherFn = forge$j.des.createDecryptionCipher;
- break;
- }
-
- // get PRF message digest
- var md = prfOidToMessageDigest(capture.prfOid);
-
- // decrypt private key using pbe with chosen PRF and AES/DES
- var dk = forge$j.pkcs5.pbkdf2(password, salt, count, dkLen, md);
- var iv = capture.encIv;
- var cipher = cipherFn(dk);
- cipher.start(iv);
-
- return cipher;
-};
-
-/**
- * Get new Forge cipher object instance for PKCS#12 PBE.
- *
- * The returned cipher instance is already started using the key & IV
- * derived from the provided password and PKCS#12 PBE salt.
- *
- * @param oid The PKCS#12 PBE OID (in string notation).
- * @param params The ASN.1 PKCS#12 PBE-params object.
- * @param password The password to decrypt with.
- *
- * @return the new cipher object instance.
- */
-pki$3.pbe.getCipherForPKCS12PBE = function(oid, params, password) {
- // get PBE params
- var capture = {};
- var errors = [];
- if(!asn1$6.validate(params, pkcs12PbeParamsValidator, capture, errors)) {
- var error = new Error('Cannot read password-based-encryption algorithm ' +
- 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');
- error.errors = errors;
- throw error;
- }
-
- var salt = forge$j.util.createBuffer(capture.salt);
- var count = forge$j.util.createBuffer(capture.iterations);
- count = count.getInt(count.length() << 3);
-
- var dkLen, dIvLen, cipherFn;
- switch(oid) {
- case pki$3.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:
- dkLen = 24;
- dIvLen = 8;
- cipherFn = forge$j.des.startDecrypting;
- break;
-
- case pki$3.oids['pbewithSHAAnd40BitRC2-CBC']:
- dkLen = 5;
- dIvLen = 8;
- cipherFn = function(key, iv) {
- var cipher = forge$j.rc2.createDecryptionCipher(key, 40);
- cipher.start(iv, null);
- return cipher;
- };
- break;
-
- default:
- var error = new Error('Cannot read PKCS #12 PBE data block. Unsupported OID.');
- error.oid = oid;
- throw error;
- }
-
- // get PRF message digest
- var md = prfOidToMessageDigest(capture.prfOid);
- var key = pki$3.pbe.generatePkcs12Key(password, salt, 1, count, dkLen, md);
- md.start();
- var iv = pki$3.pbe.generatePkcs12Key(password, salt, 2, count, dIvLen, md);
-
- return cipherFn(key, iv);
-};
-
-/**
- * OpenSSL's legacy key derivation function.
- *
- * See: http://www.openssl.org/docs/crypto/EVP_BytesToKey.html
- *
- * @param password the password to derive the key from.
- * @param salt the salt to use, null for none.
- * @param dkLen the number of bytes needed for the derived key.
- * @param [options] the options to use:
- * [md] an optional message digest object to use.
- */
-pki$3.pbe.opensslDeriveBytes = function(password, salt, dkLen, md) {
- if(typeof md === 'undefined' || md === null) {
- if(!('md5' in forge$j.md)) {
- throw new Error('"md5" hash algorithm unavailable.');
- }
- md = forge$j.md.md5.create();
- }
- if(salt === null) {
- salt = '';
- }
- var digests = [hash(md, password + salt)];
- for(var length = 16, i = 1; length < dkLen; ++i, length += 16) {
- digests.push(hash(md, digests[i - 1] + password + salt));
- }
- return digests.join('').substr(0, dkLen);
-};
-
-function hash(md, bytes) {
- return md.start().update(bytes).digest().getBytes();
-}
-
-function prfOidToMessageDigest(prfOid) {
- // get PRF algorithm, default to SHA-1
- var prfAlgorithm;
- if(!prfOid) {
- prfAlgorithm = 'hmacWithSHA1';
- } else {
- prfAlgorithm = pki$3.oids[asn1$6.derToOid(prfOid)];
- if(!prfAlgorithm) {
- var error = new Error('Unsupported PRF OID.');
- error.oid = prfOid;
- error.supported = [
- 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',
- 'hmacWithSHA512'];
- throw error;
- }
- }
- return prfAlgorithmToMessageDigest(prfAlgorithm);
-}
-
-function prfAlgorithmToMessageDigest(prfAlgorithm) {
- var factory = forge$j.md;
- switch(prfAlgorithm) {
- case 'hmacWithSHA224':
- factory = forge$j.md.sha512;
- case 'hmacWithSHA1':
- case 'hmacWithSHA256':
- case 'hmacWithSHA384':
- case 'hmacWithSHA512':
- prfAlgorithm = prfAlgorithm.substr(8).toLowerCase();
- break;
- default:
- var error = new Error('Unsupported PRF algorithm.');
- error.algorithm = prfAlgorithm;
- error.supported = [
- 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',
- 'hmacWithSHA512'];
- throw error;
- }
- if(!factory || !(prfAlgorithm in factory)) {
- throw new Error('Unknown hash algorithm: ' + prfAlgorithm);
- }
- return factory[prfAlgorithm].create();
-}
-
-function createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm) {
- var params = asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- // salt
- asn1$6.create(
- asn1$6.Class.UNIVERSAL, asn1$6.Type.OCTETSTRING, false, salt),
- // iteration count
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.INTEGER, false,
- countBytes.getBytes())
- ]);
- // when PRF algorithm is not SHA-1 default, add key length and PRF algorithm
- if(prfAlgorithm !== 'hmacWithSHA1') {
- params.value.push(
- // key length
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.INTEGER, false,
- forge$j.util.hexToBytes(dkLen.toString(16))),
- // AlgorithmIdentifier
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.SEQUENCE, true, [
- // algorithm
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.OID, false,
- asn1$6.oidToDer(pki$3.oids[prfAlgorithm]).getBytes()),
- // parameters (null)
- asn1$6.create(asn1$6.Class.UNIVERSAL, asn1$6.Type.NULL, false, '')
- ]));
- }
- return params;
-}
-
-/**
- * Javascript implementation of ASN.1 validators for PKCS#7 v1.5.
- *
- * @author Dave Longley
- * @author Stefan Siegl
- *
- * Copyright (c) 2012-2015 Digital Bazaar, Inc.
- * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
- *
- * The ASN.1 representation of PKCS#7 is as follows
- * (see RFC #2315 for details, http://www.ietf.org/rfc/rfc2315.txt):
- *
- * A PKCS#7 message consists of a ContentInfo on root level, which may
- * contain any number of further ContentInfo nested into it.
- *
- * ContentInfo ::= SEQUENCE {
- * contentType ContentType,
- * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL
- * }
- *
- * ContentType ::= OBJECT IDENTIFIER
- *
- * EnvelopedData ::= SEQUENCE {
- * version Version,
- * recipientInfos RecipientInfos,
- * encryptedContentInfo EncryptedContentInfo
- * }
- *
- * EncryptedData ::= SEQUENCE {
- * version Version,
- * encryptedContentInfo EncryptedContentInfo
- * }
- *
- * id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
- * us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }
- *
- * SignedData ::= SEQUENCE {
- * version INTEGER,
- * digestAlgorithms DigestAlgorithmIdentifiers,
- * contentInfo ContentInfo,
- * certificates [0] IMPLICIT Certificates OPTIONAL,
- * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
- * signerInfos SignerInfos
- * }
- *
- * SignerInfos ::= SET OF SignerInfo
- *
- * SignerInfo ::= SEQUENCE {
- * version Version,
- * issuerAndSerialNumber IssuerAndSerialNumber,
- * digestAlgorithm DigestAlgorithmIdentifier,
- * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
- * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
- * encryptedDigest EncryptedDigest,
- * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
- * }
- *
- * EncryptedDigest ::= OCTET STRING
- *
- * Attributes ::= SET OF Attribute
- *
- * Attribute ::= SEQUENCE {
- * attrType OBJECT IDENTIFIER,
- * attrValues SET OF AttributeValue
- * }
- *
- * AttributeValue ::= ANY
- *
- * Version ::= INTEGER
- *
- * RecipientInfos ::= SET OF RecipientInfo
- *
- * EncryptedContentInfo ::= SEQUENCE {
- * contentType ContentType,
- * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
- * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
- * }
- *
- * ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
- *
- * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters
- * for the algorithm, if any. In the case of AES and DES3, there is only one,
- * the IV.
- *
- * AlgorithmIdentifer ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL
- * }
- *
- * EncryptedContent ::= OCTET STRING
- *
- * RecipientInfo ::= SEQUENCE {
- * version Version,
- * issuerAndSerialNumber IssuerAndSerialNumber,
- * keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
- * encryptedKey EncryptedKey
- * }
- *
- * IssuerAndSerialNumber ::= SEQUENCE {
- * issuer Name,
- * serialNumber CertificateSerialNumber
- * }
- *
- * CertificateSerialNumber ::= INTEGER
- *
- * KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
- *
- * EncryptedKey ::= OCTET STRING
- */
-
-var forge$i = forge$F;
-
-
-
-// shortcut for ASN.1 API
-var asn1$5 = forge$i.asn1;
-
-// shortcut for PKCS#7 API
-var p7v = forge$i.pkcs7asn1 = forge$i.pkcs7asn1 || {};
-forge$i.pkcs7 = forge$i.pkcs7 || {};
-forge$i.pkcs7.asn1 = p7v;
-
-var contentInfoValidator$1 = {
- name: 'ContentInfo',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'ContentInfo.ContentType',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.OID,
- constructed: false,
- capture: 'contentType'
- }, {
- name: 'ContentInfo.content',
- tagClass: asn1$5.Class.CONTEXT_SPECIFIC,
- type: 0,
- constructed: true,
- optional: true,
- captureAsn1: 'content'
- }]
-};
-p7v.contentInfoValidator = contentInfoValidator$1;
-
-var encryptedContentInfoValidator = {
- name: 'EncryptedContentInfo',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'EncryptedContentInfo.contentType',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.OID,
- constructed: false,
- capture: 'contentType'
- }, {
- name: 'EncryptedContentInfo.contentEncryptionAlgorithm',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'EncryptedContentInfo.contentEncryptionAlgorithm.algorithm',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.OID,
- constructed: false,
- capture: 'encAlgorithm'
- }, {
- name: 'EncryptedContentInfo.contentEncryptionAlgorithm.parameter',
- tagClass: asn1$5.Class.UNIVERSAL,
- captureAsn1: 'encParameter'
- }]
- }, {
- name: 'EncryptedContentInfo.encryptedContent',
- tagClass: asn1$5.Class.CONTEXT_SPECIFIC,
- type: 0,
- /* The PKCS#7 structure output by OpenSSL somewhat differs from what
- * other implementations do generate.
- *
- * OpenSSL generates a structure like this:
- * SEQUENCE {
- * ...
- * [0]
- * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38
- * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45
- * ...
- * }
- *
- * Whereas other implementations (and this PKCS#7 module) generate:
- * SEQUENCE {
- * ...
- * [0] {
- * OCTET STRING
- * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38
- * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45
- * ...
- * }
- * }
- *
- * In order to support both, we just capture the context specific
- * field here. The OCTET STRING bit is removed below.
- */
- capture: 'encryptedContent',
- captureAsn1: 'encryptedContentAsn1'
- }]
-};
-
-p7v.envelopedDataValidator = {
- name: 'EnvelopedData',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'EnvelopedData.Version',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.INTEGER,
- constructed: false,
- capture: 'version'
- }, {
- name: 'EnvelopedData.RecipientInfos',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SET,
- constructed: true,
- captureAsn1: 'recipientInfos'
- }].concat(encryptedContentInfoValidator)
-};
-
-p7v.encryptedDataValidator = {
- name: 'EncryptedData',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'EncryptedData.Version',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.INTEGER,
- constructed: false,
- capture: 'version'
- }].concat(encryptedContentInfoValidator)
-};
-
-var signerValidator = {
- name: 'SignerInfo',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'SignerInfo.version',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.INTEGER,
- constructed: false
- }, {
- name: 'SignerInfo.issuerAndSerialNumber',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'SignerInfo.issuerAndSerialNumber.issuer',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'issuer'
- }, {
- name: 'SignerInfo.issuerAndSerialNumber.serialNumber',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.INTEGER,
- constructed: false,
- capture: 'serial'
- }]
- }, {
- name: 'SignerInfo.digestAlgorithm',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'SignerInfo.digestAlgorithm.algorithm',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.OID,
- constructed: false,
- capture: 'digestAlgorithm'
- }, {
- name: 'SignerInfo.digestAlgorithm.parameter',
- tagClass: asn1$5.Class.UNIVERSAL,
- constructed: false,
- captureAsn1: 'digestParameter',
- optional: true
- }]
- }, {
- name: 'SignerInfo.authenticatedAttributes',
- tagClass: asn1$5.Class.CONTEXT_SPECIFIC,
- type: 0,
- constructed: true,
- optional: true,
- capture: 'authenticatedAttributes'
- }, {
- name: 'SignerInfo.digestEncryptionAlgorithm',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- capture: 'signatureAlgorithm'
- }, {
- name: 'SignerInfo.encryptedDigest',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.OCTETSTRING,
- constructed: false,
- capture: 'signature'
- }, {
- name: 'SignerInfo.unauthenticatedAttributes',
- tagClass: asn1$5.Class.CONTEXT_SPECIFIC,
- type: 1,
- constructed: true,
- optional: true,
- capture: 'unauthenticatedAttributes'
- }]
-};
-
-p7v.signedDataValidator = {
- name: 'SignedData',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'SignedData.Version',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.INTEGER,
- constructed: false,
- capture: 'version'
- }, {
- name: 'SignedData.DigestAlgorithms',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SET,
- constructed: true,
- captureAsn1: 'digestAlgorithms'
- },
- contentInfoValidator$1,
- {
- name: 'SignedData.Certificates',
- tagClass: asn1$5.Class.CONTEXT_SPECIFIC,
- type: 0,
- optional: true,
- captureAsn1: 'certificates'
- }, {
- name: 'SignedData.CertificateRevocationLists',
- tagClass: asn1$5.Class.CONTEXT_SPECIFIC,
- type: 1,
- optional: true,
- captureAsn1: 'crls'
- }, {
- name: 'SignedData.SignerInfos',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SET,
- capture: 'signerInfos',
- optional: true,
- value: [signerValidator]
- }]
-};
-
-p7v.recipientInfoValidator = {
- name: 'RecipientInfo',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'RecipientInfo.version',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.INTEGER,
- constructed: false,
- capture: 'version'
- }, {
- name: 'RecipientInfo.issuerAndSerial',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'RecipientInfo.issuerAndSerial.issuer',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'issuer'
- }, {
- name: 'RecipientInfo.issuerAndSerial.serialNumber',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.INTEGER,
- constructed: false,
- capture: 'serial'
- }]
- }, {
- name: 'RecipientInfo.keyEncryptionAlgorithm',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'RecipientInfo.keyEncryptionAlgorithm.algorithm',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.OID,
- constructed: false,
- capture: 'encAlgorithm'
- }, {
- name: 'RecipientInfo.keyEncryptionAlgorithm.parameter',
- tagClass: asn1$5.Class.UNIVERSAL,
- constructed: false,
- captureAsn1: 'encParameter'
- }]
- }, {
- name: 'RecipientInfo.encryptedKey',
- tagClass: asn1$5.Class.UNIVERSAL,
- type: asn1$5.Type.OCTETSTRING,
- constructed: false,
- capture: 'encKey'
- }]
-};
-
-/**
- * Javascript implementation of mask generation function MGF1.
- *
- * @author Stefan Siegl
- * @author Dave Longley
- *
- * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
- * Copyright (c) 2014 Digital Bazaar, Inc.
- */
-
-var forge$h = forge$F;
-
-
-forge$h.mgf = forge$h.mgf || {};
-var mgf1 = forge$h.mgf.mgf1 = forge$h.mgf1 = forge$h.mgf1 || {};
-
-/**
- * Creates a MGF1 mask generation function object.
- *
- * @param md the message digest API to use (eg: forge.md.sha1.create()).
- *
- * @return a mask generation function object.
- */
-mgf1.create = function(md) {
- var mgf = {
- /**
- * Generate mask of specified length.
- *
- * @param {String} seed The seed for mask generation.
- * @param maskLen Number of bytes to generate.
- * @return {String} The generated mask.
- */
- generate: function(seed, maskLen) {
- /* 2. Let T be the empty octet string. */
- var t = new forge$h.util.ByteBuffer();
-
- /* 3. For counter from 0 to ceil(maskLen / hLen), do the following: */
- var len = Math.ceil(maskLen / md.digestLength);
- for(var i = 0; i < len; i++) {
- /* a. Convert counter to an octet string C of length 4 octets */
- var c = new forge$h.util.ByteBuffer();
- c.putInt32(i);
-
- /* b. Concatenate the hash of the seed mgfSeed and C to the octet
- * string T: */
- md.start();
- md.update(seed + c.getBytes());
- t.putBuffer(md.digest());
- }
-
- /* Output the leading maskLen octets of T as the octet string mask. */
- t.truncate(t.length() - maskLen);
- return t.getBytes();
- }
- };
-
- return mgf;
-};
-
-/**
- * Node.js module for Forge mask generation functions.
- *
- * @author Stefan Siegl
- *
- * Copyright 2012 Stefan Siegl <stesie@brokenpipe.de>
- */
-
-var forge$g = forge$F;
-
-
-forge$g.mgf = forge$g.mgf || {};
-forge$g.mgf.mgf1 = forge$g.mgf1;
-
-/**
- * Javascript implementation of PKCS#1 PSS signature padding.
- *
- * @author Stefan Siegl
- *
- * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
- */
-
-var forge$f = forge$F;
-
-
-
-// shortcut for PSS API
-var pss = forge$f.pss = forge$f.pss || {};
-
-/**
- * Creates a PSS signature scheme object.
- *
- * There are several ways to provide a salt for encoding:
- *
- * 1. Specify the saltLength only and the built-in PRNG will generate it.
- * 2. Specify the saltLength and a custom PRNG with 'getBytesSync' defined that
- * will be used.
- * 3. Specify the salt itself as a forge.util.ByteBuffer.
- *
- * @param options the options to use:
- * md the message digest object to use, a forge md instance.
- * mgf the mask generation function to use, a forge mgf instance.
- * [saltLength] the length of the salt in octets.
- * [prng] the pseudo-random number generator to use to produce a salt.
- * [salt] the salt to use when encoding.
- *
- * @return a signature scheme object.
- */
-pss.create = function(options) {
- // backwards compatibility w/legacy args: hash, mgf, sLen
- if(arguments.length === 3) {
- options = {
- md: arguments[0],
- mgf: arguments[1],
- saltLength: arguments[2]
- };
- }
-
- var hash = options.md;
- var mgf = options.mgf;
- var hLen = hash.digestLength;
-
- var salt_ = options.salt || null;
- if(typeof salt_ === 'string') {
- // assume binary-encoded string
- salt_ = forge$f.util.createBuffer(salt_);
- }
-
- var sLen;
- if('saltLength' in options) {
- sLen = options.saltLength;
- } else if(salt_ !== null) {
- sLen = salt_.length();
- } else {
- throw new Error('Salt length not specified or specific salt not given.');
- }
-
- if(salt_ !== null && salt_.length() !== sLen) {
- throw new Error('Given salt length does not match length of given salt.');
- }
-
- var prng = options.prng || forge$f.random;
-
- var pssobj = {};
-
- /**
- * Encodes a PSS signature.
- *
- * This function implements EMSA-PSS-ENCODE as per RFC 3447, section 9.1.1.
- *
- * @param md the message digest object with the hash to sign.
- * @param modsBits the length of the RSA modulus in bits.
- *
- * @return the encoded message as a binary-encoded string of length
- * ceil((modBits - 1) / 8).
- */
- pssobj.encode = function(md, modBits) {
- var i;
- var emBits = modBits - 1;
- var emLen = Math.ceil(emBits / 8);
-
- /* 2. Let mHash = Hash(M), an octet string of length hLen. */
- var mHash = md.digest().getBytes();
-
- /* 3. If emLen < hLen + sLen + 2, output "encoding error" and stop. */
- if(emLen < hLen + sLen + 2) {
- throw new Error('Message is too long to encrypt.');
- }
-
- /* 4. Generate a random octet string salt of length sLen; if sLen = 0,
- * then salt is the empty string. */
- var salt;
- if(salt_ === null) {
- salt = prng.getBytesSync(sLen);
- } else {
- salt = salt_.bytes();
- }
-
- /* 5. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt; */
- var m_ = new forge$f.util.ByteBuffer();
- m_.fillWithByte(0, 8);
- m_.putBytes(mHash);
- m_.putBytes(salt);
-
- /* 6. Let H = Hash(M'), an octet string of length hLen. */
- hash.start();
- hash.update(m_.getBytes());
- var h = hash.digest().getBytes();
-
- /* 7. Generate an octet string PS consisting of emLen - sLen - hLen - 2
- * zero octets. The length of PS may be 0. */
- var ps = new forge$f.util.ByteBuffer();
- ps.fillWithByte(0, emLen - sLen - hLen - 2);
-
- /* 8. Let DB = PS || 0x01 || salt; DB is an octet string of length
- * emLen - hLen - 1. */
- ps.putByte(0x01);
- ps.putBytes(salt);
- var db = ps.getBytes();
-
- /* 9. Let dbMask = MGF(H, emLen - hLen - 1). */
- var maskLen = emLen - hLen - 1;
- var dbMask = mgf.generate(h, maskLen);
-
- /* 10. Let maskedDB = DB \xor dbMask. */
- var maskedDB = '';
- for(i = 0; i < maskLen; i++) {
- maskedDB += String.fromCharCode(db.charCodeAt(i) ^ dbMask.charCodeAt(i));
- }
-
- /* 11. Set the leftmost 8emLen - emBits bits of the leftmost octet in
- * maskedDB to zero. */
- var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF;
- maskedDB = String.fromCharCode(maskedDB.charCodeAt(0) & ~mask) +
- maskedDB.substr(1);
-
- /* 12. Let EM = maskedDB || H || 0xbc.
- * 13. Output EM. */
- return maskedDB + h + String.fromCharCode(0xbc);
- };
-
- /**
- * Verifies a PSS signature.
- *
- * This function implements EMSA-PSS-VERIFY as per RFC 3447, section 9.1.2.
- *
- * @param mHash the message digest hash, as a binary-encoded string, to
- * compare against the signature.
- * @param em the encoded message, as a binary-encoded string
- * (RSA decryption result).
- * @param modsBits the length of the RSA modulus in bits.
- *
- * @return true if the signature was verified, false if not.
- */
- pssobj.verify = function(mHash, em, modBits) {
- var i;
- var emBits = modBits - 1;
- var emLen = Math.ceil(emBits / 8);
-
- /* c. Convert the message representative m to an encoded message EM
- * of length emLen = ceil((modBits - 1) / 8) octets, where modBits
- * is the length in bits of the RSA modulus n */
- em = em.substr(-emLen);
-
- /* 3. If emLen < hLen + sLen + 2, output "inconsistent" and stop. */
- if(emLen < hLen + sLen + 2) {
- throw new Error('Inconsistent parameters to PSS signature verification.');
- }
-
- /* 4. If the rightmost octet of EM does not have hexadecimal value
- * 0xbc, output "inconsistent" and stop. */
- if(em.charCodeAt(emLen - 1) !== 0xbc) {
- throw new Error('Encoded message does not end in 0xBC.');
- }
-
- /* 5. Let maskedDB be the leftmost emLen - hLen - 1 octets of EM, and
- * let H be the next hLen octets. */
- var maskLen = emLen - hLen - 1;
- var maskedDB = em.substr(0, maskLen);
- var h = em.substr(maskLen, hLen);
-
- /* 6. If the leftmost 8emLen - emBits bits of the leftmost octet in
- * maskedDB are not all equal to zero, output "inconsistent" and stop. */
- var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF;
- if((maskedDB.charCodeAt(0) & mask) !== 0) {
- throw new Error('Bits beyond keysize not zero as expected.');
- }
-
- /* 7. Let dbMask = MGF(H, emLen - hLen - 1). */
- var dbMask = mgf.generate(h, maskLen);
-
- /* 8. Let DB = maskedDB \xor dbMask. */
- var db = '';
- for(i = 0; i < maskLen; i++) {
- db += String.fromCharCode(maskedDB.charCodeAt(i) ^ dbMask.charCodeAt(i));
- }
-
- /* 9. Set the leftmost 8emLen - emBits bits of the leftmost octet
- * in DB to zero. */
- db = String.fromCharCode(db.charCodeAt(0) & ~mask) + db.substr(1);
-
- /* 10. If the emLen - hLen - sLen - 2 leftmost octets of DB are not zero
- * or if the octet at position emLen - hLen - sLen - 1 (the leftmost
- * position is "position 1") does not have hexadecimal value 0x01,
- * output "inconsistent" and stop. */
- var checkLen = emLen - hLen - sLen - 2;
- for(i = 0; i < checkLen; i++) {
- if(db.charCodeAt(i) !== 0x00) {
- throw new Error('Leftmost octets not zero as expected');
- }
- }
-
- if(db.charCodeAt(checkLen) !== 0x01) {
- throw new Error('Inconsistent PSS signature, 0x01 marker not found');
- }
-
- /* 11. Let salt be the last sLen octets of DB. */
- var salt = db.substr(-sLen);
-
- /* 12. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt */
- var m_ = new forge$f.util.ByteBuffer();
- m_.fillWithByte(0, 8);
- m_.putBytes(mHash);
- m_.putBytes(salt);
-
- /* 13. Let H' = Hash(M'), an octet string of length hLen. */
- hash.start();
- hash.update(m_.getBytes());
- var h_ = hash.digest().getBytes();
-
- /* 14. If H = H', output "consistent." Otherwise, output "inconsistent." */
- return h === h_;
- };
-
- return pssobj;
-};
-
-/**
- * Javascript implementation of X.509 and related components (such as
- * Certification Signing Requests) of a Public Key Infrastructure.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- *
- * The ASN.1 representation of an X.509v3 certificate is as follows
- * (see RFC 2459):
- *
- * Certificate ::= SEQUENCE {
- * tbsCertificate TBSCertificate,
- * signatureAlgorithm AlgorithmIdentifier,
- * signatureValue BIT STRING
- * }
- *
- * TBSCertificate ::= SEQUENCE {
- * version [0] EXPLICIT Version DEFAULT v1,
- * serialNumber CertificateSerialNumber,
- * signature AlgorithmIdentifier,
- * issuer Name,
- * validity Validity,
- * subject Name,
- * subjectPublicKeyInfo SubjectPublicKeyInfo,
- * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
- * -- If present, version shall be v2 or v3
- * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
- * -- If present, version shall be v2 or v3
- * extensions [3] EXPLICIT Extensions OPTIONAL
- * -- If present, version shall be v3
- * }
- *
- * Version ::= INTEGER { v1(0), v2(1), v3(2) }
- *
- * CertificateSerialNumber ::= INTEGER
- *
- * Name ::= CHOICE {
- * // only one possible choice for now
- * RDNSequence
- * }
- *
- * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
- *
- * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue
- *
- * AttributeTypeAndValue ::= SEQUENCE {
- * type AttributeType,
- * value AttributeValue
- * }
- * AttributeType ::= OBJECT IDENTIFIER
- * AttributeValue ::= ANY DEFINED BY AttributeType
- *
- * Validity ::= SEQUENCE {
- * notBefore Time,
- * notAfter Time
- * }
- *
- * Time ::= CHOICE {
- * utcTime UTCTime,
- * generalTime GeneralizedTime
- * }
- *
- * UniqueIdentifier ::= BIT STRING
- *
- * SubjectPublicKeyInfo ::= SEQUENCE {
- * algorithm AlgorithmIdentifier,
- * subjectPublicKey BIT STRING
- * }
- *
- * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
- *
- * Extension ::= SEQUENCE {
- * extnID OBJECT IDENTIFIER,
- * critical BOOLEAN DEFAULT FALSE,
- * extnValue OCTET STRING
- * }
- *
- * The only key algorithm currently supported for PKI is RSA.
- *
- * RSASSA-PSS signatures are described in RFC 3447 and RFC 4055.
- *
- * PKCS#10 v1.7 describes certificate signing requests:
- *
- * CertificationRequestInfo:
- *
- * CertificationRequestInfo ::= SEQUENCE {
- * version INTEGER { v1(0) } (v1,...),
- * subject Name,
- * subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
- * attributes [0] Attributes{{ CRIAttributes }}
- * }
- *
- * Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}
- *
- * CRIAttributes ATTRIBUTE ::= {
- * ... -- add any locally defined attributes here -- }
- *
- * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {
- * type ATTRIBUTE.&id({IOSet}),
- * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})
- * }
- *
- * CertificationRequest ::= SEQUENCE {
- * certificationRequestInfo CertificationRequestInfo,
- * signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},
- * signature BIT STRING
- * }
- */
-
-var forge$e = forge$F;
-
-
-
-
-
-
-
-
-
-
-
-// shortcut for asn.1 API
-var asn1$4 = forge$e.asn1;
-
-/* Public Key Infrastructure (PKI) implementation. */
-var pki$2 = forge$e.pki = forge$e.pki || {};
-var oids = pki$2.oids;
-
-// short name OID mappings
-var _shortNames = {};
-_shortNames['CN'] = oids['commonName'];
-_shortNames['commonName'] = 'CN';
-_shortNames['C'] = oids['countryName'];
-_shortNames['countryName'] = 'C';
-_shortNames['L'] = oids['localityName'];
-_shortNames['localityName'] = 'L';
-_shortNames['ST'] = oids['stateOrProvinceName'];
-_shortNames['stateOrProvinceName'] = 'ST';
-_shortNames['O'] = oids['organizationName'];
-_shortNames['organizationName'] = 'O';
-_shortNames['OU'] = oids['organizationalUnitName'];
-_shortNames['organizationalUnitName'] = 'OU';
-_shortNames['E'] = oids['emailAddress'];
-_shortNames['emailAddress'] = 'E';
-
-// validator for an SubjectPublicKeyInfo structure
-// Note: Currently only works with an RSA public key
-var publicKeyValidator$1 = forge$e.pki.rsa.publicKeyValidator;
-
-// validator for an X.509v3 certificate
-var x509CertificateValidator = {
- name: 'Certificate',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'Certificate.TBSCertificate',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'tbsCertificate',
- value: [{
- name: 'Certificate.TBSCertificate.version',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 0,
- constructed: true,
- optional: true,
- value: [{
- name: 'Certificate.TBSCertificate.version.integer',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.INTEGER,
- constructed: false,
- capture: 'certVersion'
- }]
- }, {
- name: 'Certificate.TBSCertificate.serialNumber',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.INTEGER,
- constructed: false,
- capture: 'certSerialNumber'
- }, {
- name: 'Certificate.TBSCertificate.signature',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'Certificate.TBSCertificate.signature.algorithm',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.OID,
- constructed: false,
- capture: 'certinfoSignatureOid'
- }, {
- name: 'Certificate.TBSCertificate.signature.parameters',
- tagClass: asn1$4.Class.UNIVERSAL,
- optional: true,
- captureAsn1: 'certinfoSignatureParams'
- }]
- }, {
- name: 'Certificate.TBSCertificate.issuer',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'certIssuer'
- }, {
- name: 'Certificate.TBSCertificate.validity',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- // Note: UTC and generalized times may both appear so the capture
- // names are based on their detected order, the names used below
- // are only for the common case, which validity time really means
- // "notBefore" and which means "notAfter" will be determined by order
- value: [{
- // notBefore (Time) (UTC time case)
- name: 'Certificate.TBSCertificate.validity.notBefore (utc)',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.UTCTIME,
- constructed: false,
- optional: true,
- capture: 'certValidity1UTCTime'
- }, {
- // notBefore (Time) (generalized time case)
- name: 'Certificate.TBSCertificate.validity.notBefore (generalized)',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.GENERALIZEDTIME,
- constructed: false,
- optional: true,
- capture: 'certValidity2GeneralizedTime'
- }, {
- // notAfter (Time) (only UTC time is supported)
- name: 'Certificate.TBSCertificate.validity.notAfter (utc)',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.UTCTIME,
- constructed: false,
- optional: true,
- capture: 'certValidity3UTCTime'
- }, {
- // notAfter (Time) (only UTC time is supported)
- name: 'Certificate.TBSCertificate.validity.notAfter (generalized)',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.GENERALIZEDTIME,
- constructed: false,
- optional: true,
- capture: 'certValidity4GeneralizedTime'
- }]
- }, {
- // Name (subject) (RDNSequence)
- name: 'Certificate.TBSCertificate.subject',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'certSubject'
- },
- // SubjectPublicKeyInfo
- publicKeyValidator$1,
- {
- // issuerUniqueID (optional)
- name: 'Certificate.TBSCertificate.issuerUniqueID',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 1,
- constructed: true,
- optional: true,
- value: [{
- name: 'Certificate.TBSCertificate.issuerUniqueID.id',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.BITSTRING,
- constructed: false,
- // TODO: support arbitrary bit length ids
- captureBitStringValue: 'certIssuerUniqueId'
- }]
- }, {
- // subjectUniqueID (optional)
- name: 'Certificate.TBSCertificate.subjectUniqueID',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 2,
- constructed: true,
- optional: true,
- value: [{
- name: 'Certificate.TBSCertificate.subjectUniqueID.id',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.BITSTRING,
- constructed: false,
- // TODO: support arbitrary bit length ids
- captureBitStringValue: 'certSubjectUniqueId'
- }]
- }, {
- // Extensions (optional)
- name: 'Certificate.TBSCertificate.extensions',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 3,
- constructed: true,
- captureAsn1: 'certExtensions',
- optional: true
- }]
- }, {
- // AlgorithmIdentifier (signature algorithm)
- name: 'Certificate.signatureAlgorithm',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- value: [{
- // algorithm
- name: 'Certificate.signatureAlgorithm.algorithm',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.OID,
- constructed: false,
- capture: 'certSignatureOid'
- }, {
- name: 'Certificate.TBSCertificate.signature.parameters',
- tagClass: asn1$4.Class.UNIVERSAL,
- optional: true,
- captureAsn1: 'certSignatureParams'
- }]
- }, {
- // SignatureValue
- name: 'Certificate.signatureValue',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.BITSTRING,
- constructed: false,
- captureBitStringValue: 'certSignature'
- }]
-};
-
-var rsassaPssParameterValidator = {
- name: 'rsapss',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'rsapss.hashAlgorithm',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 0,
- constructed: true,
- value: [{
- name: 'rsapss.hashAlgorithm.AlgorithmIdentifier',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Class.SEQUENCE,
- constructed: true,
- optional: true,
- value: [{
- name: 'rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.OID,
- constructed: false,
- capture: 'hashOid'
- /* parameter block omitted, for SHA1 NULL anyhow. */
- }]
- }]
- }, {
- name: 'rsapss.maskGenAlgorithm',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 1,
- constructed: true,
- value: [{
- name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Class.SEQUENCE,
- constructed: true,
- optional: true,
- value: [{
- name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.OID,
- constructed: false,
- capture: 'maskGenOid'
- }, {
- name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.OID,
- constructed: false,
- capture: 'maskGenHashOid'
- /* parameter block omitted, for SHA1 NULL anyhow. */
- }]
- }]
- }]
- }, {
- name: 'rsapss.saltLength',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 2,
- optional: true,
- value: [{
- name: 'rsapss.saltLength.saltLength',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Class.INTEGER,
- constructed: false,
- capture: 'saltLength'
- }]
- }, {
- name: 'rsapss.trailerField',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 3,
- optional: true,
- value: [{
- name: 'rsapss.trailer.trailer',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Class.INTEGER,
- constructed: false,
- capture: 'trailer'
- }]
- }]
-};
-
-// validator for a CertificationRequestInfo structure
-var certificationRequestInfoValidator = {
- name: 'CertificationRequestInfo',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'certificationRequestInfo',
- value: [{
- name: 'CertificationRequestInfo.integer',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.INTEGER,
- constructed: false,
- capture: 'certificationRequestInfoVersion'
- }, {
- // Name (subject) (RDNSequence)
- name: 'CertificationRequestInfo.subject',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'certificationRequestInfoSubject'
- },
- // SubjectPublicKeyInfo
- publicKeyValidator$1,
- {
- name: 'CertificationRequestInfo.attributes',
- tagClass: asn1$4.Class.CONTEXT_SPECIFIC,
- type: 0,
- constructed: true,
- optional: true,
- capture: 'certificationRequestInfoAttributes',
- value: [{
- name: 'CertificationRequestInfo.attributes',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'CertificationRequestInfo.attributes.type',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.OID,
- constructed: false
- }, {
- name: 'CertificationRequestInfo.attributes.value',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SET,
- constructed: true
- }]
- }]
- }]
-};
-
-// validator for a CertificationRequest structure
-var certificationRequestValidator = {
- name: 'CertificationRequest',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'csr',
- value: [
- certificationRequestInfoValidator, {
- // AlgorithmIdentifier (signature algorithm)
- name: 'CertificationRequest.signatureAlgorithm',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.SEQUENCE,
- constructed: true,
- value: [{
- // algorithm
- name: 'CertificationRequest.signatureAlgorithm.algorithm',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.OID,
- constructed: false,
- capture: 'csrSignatureOid'
- }, {
- name: 'CertificationRequest.signatureAlgorithm.parameters',
- tagClass: asn1$4.Class.UNIVERSAL,
- optional: true,
- captureAsn1: 'csrSignatureParams'
- }]
- }, {
- // signature
- name: 'CertificationRequest.signature',
- tagClass: asn1$4.Class.UNIVERSAL,
- type: asn1$4.Type.BITSTRING,
- constructed: false,
- captureBitStringValue: 'csrSignature'
- }
- ]
-};
-
-/**
- * Converts an RDNSequence of ASN.1 DER-encoded RelativeDistinguishedName
- * sets into an array with objects that have type and value properties.
- *
- * @param rdn the RDNSequence to convert.
- * @param md a message digest to append type and value to if provided.
- */
-pki$2.RDNAttributesAsArray = function(rdn, md) {
- var rval = [];
-
- // each value in 'rdn' in is a SET of RelativeDistinguishedName
- var set, attr, obj;
- for(var si = 0; si < rdn.value.length; ++si) {
- // get the RelativeDistinguishedName set
- set = rdn.value[si];
-
- // each value in the SET is an AttributeTypeAndValue sequence
- // containing first a type (an OID) and second a value (defined by
- // the OID)
- for(var i = 0; i < set.value.length; ++i) {
- obj = {};
- attr = set.value[i];
- obj.type = asn1$4.derToOid(attr.value[0].value);
- obj.value = attr.value[1].value;
- obj.valueTagClass = attr.value[1].type;
- // if the OID is known, get its name and short name
- if(obj.type in oids) {
- obj.name = oids[obj.type];
- if(obj.name in _shortNames) {
- obj.shortName = _shortNames[obj.name];
- }
- }
- if(md) {
- md.update(obj.type);
- md.update(obj.value);
- }
- rval.push(obj);
- }
- }
-
- return rval;
-};
-
-/**
- * Converts ASN.1 CRIAttributes into an array with objects that have type and
- * value properties.
- *
- * @param attributes the CRIAttributes to convert.
- */
-pki$2.CRIAttributesAsArray = function(attributes) {
- var rval = [];
-
- // each value in 'attributes' in is a SEQUENCE with an OID and a SET
- for(var si = 0; si < attributes.length; ++si) {
- // get the attribute sequence
- var seq = attributes[si];
-
- // each value in the SEQUENCE containing first a type (an OID) and
- // second a set of values (defined by the OID)
- var type = asn1$4.derToOid(seq.value[0].value);
- var values = seq.value[1].value;
- for(var vi = 0; vi < values.length; ++vi) {
- var obj = {};
- obj.type = type;
- obj.value = values[vi].value;
- obj.valueTagClass = values[vi].type;
- // if the OID is known, get its name and short name
- if(obj.type in oids) {
- obj.name = oids[obj.type];
- if(obj.name in _shortNames) {
- obj.shortName = _shortNames[obj.name];
- }
- }
- // parse extensions
- if(obj.type === oids.extensionRequest) {
- obj.extensions = [];
- for(var ei = 0; ei < obj.value.length; ++ei) {
- obj.extensions.push(pki$2.certificateExtensionFromAsn1(obj.value[ei]));
- }
- }
- rval.push(obj);
- }
- }
-
- return rval;
-};
-
-/**
- * Gets an issuer or subject attribute from its name, type, or short name.
- *
- * @param obj the issuer or subject object.
- * @param options a short name string or an object with:
- * shortName the short name for the attribute.
- * name the name for the attribute.
- * type the type for the attribute.
- *
- * @return the attribute.
- */
-function _getAttribute(obj, options) {
- if(typeof options === 'string') {
- options = {shortName: options};
- }
-
- var rval = null;
- var attr;
- for(var i = 0; rval === null && i < obj.attributes.length; ++i) {
- attr = obj.attributes[i];
- if(options.type && options.type === attr.type) {
- rval = attr;
- } else if(options.name && options.name === attr.name) {
- rval = attr;
- } else if(options.shortName && options.shortName === attr.shortName) {
- rval = attr;
- }
- }
- return rval;
-}
-
-/**
- * Converts signature parameters from ASN.1 structure.
- *
- * Currently only RSASSA-PSS supported. The PKCS#1 v1.5 signature scheme had
- * no parameters.
- *
- * RSASSA-PSS-params ::= SEQUENCE {
- * hashAlgorithm [0] HashAlgorithm DEFAULT
- * sha1Identifier,
- * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT
- * mgf1SHA1Identifier,
- * saltLength [2] INTEGER DEFAULT 20,
- * trailerField [3] INTEGER DEFAULT 1
- * }
- *
- * HashAlgorithm ::= AlgorithmIdentifier
- *
- * MaskGenAlgorithm ::= AlgorithmIdentifier
- *
- * AlgorithmIdentifer ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL
- * }
- *
- * @param oid The OID specifying the signature algorithm
- * @param obj The ASN.1 structure holding the parameters
- * @param fillDefaults Whether to use return default values where omitted
- * @return signature parameter object
- */
-var _readSignatureParameters = function(oid, obj, fillDefaults) {
- var params = {};
-
- if(oid !== oids['RSASSA-PSS']) {
- return params;
- }
-
- if(fillDefaults) {
- params = {
- hash: {
- algorithmOid: oids['sha1']
- },
- mgf: {
- algorithmOid: oids['mgf1'],
- hash: {
- algorithmOid: oids['sha1']
- }
- },
- saltLength: 20
- };
- }
-
- var capture = {};
- var errors = [];
- if(!asn1$4.validate(obj, rsassaPssParameterValidator, capture, errors)) {
- var error = new Error('Cannot read RSASSA-PSS parameter block.');
- error.errors = errors;
- throw error;
- }
-
- if(capture.hashOid !== undefined) {
- params.hash = params.hash || {};
- params.hash.algorithmOid = asn1$4.derToOid(capture.hashOid);
- }
-
- if(capture.maskGenOid !== undefined) {
- params.mgf = params.mgf || {};
- params.mgf.algorithmOid = asn1$4.derToOid(capture.maskGenOid);
- params.mgf.hash = params.mgf.hash || {};
- params.mgf.hash.algorithmOid = asn1$4.derToOid(capture.maskGenHashOid);
- }
-
- if(capture.saltLength !== undefined) {
- params.saltLength = capture.saltLength.charCodeAt(0);
- }
-
- return params;
-};
-
-/**
- * Converts an X.509 certificate from PEM format.
- *
- * Note: If the certificate is to be verified then compute hash should
- * be set to true. This will scan the TBSCertificate part of the ASN.1
- * object while it is converted so it doesn't need to be converted back
- * to ASN.1-DER-encoding later.
- *
- * @param pem the PEM-formatted certificate.
- * @param computeHash true to compute the hash for verification.
- * @param strict true to be strict when checking ASN.1 value lengths, false to
- * allow truncated values (default: true).
- *
- * @return the certificate.
- */
-pki$2.certificateFromPem = function(pem, computeHash, strict) {
- var msg = forge$e.pem.decode(pem)[0];
-
- if(msg.type !== 'CERTIFICATE' &&
- msg.type !== 'X509 CERTIFICATE' &&
- msg.type !== 'TRUSTED CERTIFICATE') {
- var error = new Error(
- 'Could not convert certificate from PEM; PEM header type ' +
- 'is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".');
- error.headerType = msg.type;
- throw error;
- }
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- throw new Error(
- 'Could not convert certificate from PEM; PEM is encrypted.');
- }
-
- // convert DER to ASN.1 object
- var obj = asn1$4.fromDer(msg.body, strict);
-
- return pki$2.certificateFromAsn1(obj, computeHash);
-};
-
-/**
- * Converts an X.509 certificate to PEM format.
- *
- * @param cert the certificate.
- * @param maxline the maximum characters per line, defaults to 64.
- *
- * @return the PEM-formatted certificate.
- */
-pki$2.certificateToPem = function(cert, maxline) {
- // convert to ASN.1, then DER, then PEM-encode
- var msg = {
- type: 'CERTIFICATE',
- body: asn1$4.toDer(pki$2.certificateToAsn1(cert)).getBytes()
- };
- return forge$e.pem.encode(msg, {maxline: maxline});
-};
-
-/**
- * Converts an RSA public key from PEM format.
- *
- * @param pem the PEM-formatted public key.
- *
- * @return the public key.
- */
-pki$2.publicKeyFromPem = function(pem) {
- var msg = forge$e.pem.decode(pem)[0];
-
- if(msg.type !== 'PUBLIC KEY' && msg.type !== 'RSA PUBLIC KEY') {
- var error = new Error('Could not convert public key from PEM; PEM header ' +
- 'type is not "PUBLIC KEY" or "RSA PUBLIC KEY".');
- error.headerType = msg.type;
- throw error;
- }
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- throw new Error('Could not convert public key from PEM; PEM is encrypted.');
- }
-
- // convert DER to ASN.1 object
- var obj = asn1$4.fromDer(msg.body);
-
- return pki$2.publicKeyFromAsn1(obj);
-};
-
-/**
- * Converts an RSA public key to PEM format (using a SubjectPublicKeyInfo).
- *
- * @param key the public key.
- * @param maxline the maximum characters per line, defaults to 64.
- *
- * @return the PEM-formatted public key.
- */
-pki$2.publicKeyToPem = function(key, maxline) {
- // convert to ASN.1, then DER, then PEM-encode
- var msg = {
- type: 'PUBLIC KEY',
- body: asn1$4.toDer(pki$2.publicKeyToAsn1(key)).getBytes()
- };
- return forge$e.pem.encode(msg, {maxline: maxline});
-};
-
-/**
- * Converts an RSA public key to PEM format (using an RSAPublicKey).
- *
- * @param key the public key.
- * @param maxline the maximum characters per line, defaults to 64.
- *
- * @return the PEM-formatted public key.
- */
-pki$2.publicKeyToRSAPublicKeyPem = function(key, maxline) {
- // convert to ASN.1, then DER, then PEM-encode
- var msg = {
- type: 'RSA PUBLIC KEY',
- body: asn1$4.toDer(pki$2.publicKeyToRSAPublicKey(key)).getBytes()
- };
- return forge$e.pem.encode(msg, {maxline: maxline});
-};
-
-/**
- * Gets a fingerprint for the given public key.
- *
- * @param options the options to use.
- * [md] the message digest object to use (defaults to forge.md.sha1).
- * [type] the type of fingerprint, such as 'RSAPublicKey',
- * 'SubjectPublicKeyInfo' (defaults to 'RSAPublicKey').
- * [encoding] an alternative output encoding, such as 'hex'
- * (defaults to none, outputs a byte buffer).
- * [delimiter] the delimiter to use between bytes for 'hex' encoded
- * output, eg: ':' (defaults to none).
- *
- * @return the fingerprint as a byte buffer or other encoding based on options.
- */
-pki$2.getPublicKeyFingerprint = function(key, options) {
- options = options || {};
- var md = options.md || forge$e.md.sha1.create();
- var type = options.type || 'RSAPublicKey';
-
- var bytes;
- switch(type) {
- case 'RSAPublicKey':
- bytes = asn1$4.toDer(pki$2.publicKeyToRSAPublicKey(key)).getBytes();
- break;
- case 'SubjectPublicKeyInfo':
- bytes = asn1$4.toDer(pki$2.publicKeyToAsn1(key)).getBytes();
- break;
- default:
- throw new Error('Unknown fingerprint type "' + options.type + '".');
- }
-
- // hash public key bytes
- md.start();
- md.update(bytes);
- var digest = md.digest();
- if(options.encoding === 'hex') {
- var hex = digest.toHex();
- if(options.delimiter) {
- return hex.match(/.{2}/g).join(options.delimiter);
- }
- return hex;
- } else if(options.encoding === 'binary') {
- return digest.getBytes();
- } else if(options.encoding) {
- throw new Error('Unknown encoding "' + options.encoding + '".');
- }
- return digest;
-};
-
-/**
- * Converts a PKCS#10 certification request (CSR) from PEM format.
- *
- * Note: If the certification request is to be verified then compute hash
- * should be set to true. This will scan the CertificationRequestInfo part of
- * the ASN.1 object while it is converted so it doesn't need to be converted
- * back to ASN.1-DER-encoding later.
- *
- * @param pem the PEM-formatted certificate.
- * @param computeHash true to compute the hash for verification.
- * @param strict true to be strict when checking ASN.1 value lengths, false to
- * allow truncated values (default: true).
- *
- * @return the certification request (CSR).
- */
-pki$2.certificationRequestFromPem = function(pem, computeHash, strict) {
- var msg = forge$e.pem.decode(pem)[0];
-
- if(msg.type !== 'CERTIFICATE REQUEST') {
- var error = new Error('Could not convert certification request from PEM; ' +
- 'PEM header type is not "CERTIFICATE REQUEST".');
- error.headerType = msg.type;
- throw error;
- }
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- throw new Error('Could not convert certification request from PEM; ' +
- 'PEM is encrypted.');
- }
-
- // convert DER to ASN.1 object
- var obj = asn1$4.fromDer(msg.body, strict);
-
- return pki$2.certificationRequestFromAsn1(obj, computeHash);
-};
-
-/**
- * Converts a PKCS#10 certification request (CSR) to PEM format.
- *
- * @param csr the certification request.
- * @param maxline the maximum characters per line, defaults to 64.
- *
- * @return the PEM-formatted certification request.
- */
-pki$2.certificationRequestToPem = function(csr, maxline) {
- // convert to ASN.1, then DER, then PEM-encode
- var msg = {
- type: 'CERTIFICATE REQUEST',
- body: asn1$4.toDer(pki$2.certificationRequestToAsn1(csr)).getBytes()
- };
- return forge$e.pem.encode(msg, {maxline: maxline});
-};
-
-/**
- * Creates an empty X.509v3 RSA certificate.
- *
- * @return the certificate.
- */
-pki$2.createCertificate = function() {
- var cert = {};
- cert.version = 0x02;
- cert.serialNumber = '00';
- cert.signatureOid = null;
- cert.signature = null;
- cert.siginfo = {};
- cert.siginfo.algorithmOid = null;
- cert.validity = {};
- cert.validity.notBefore = new Date();
- cert.validity.notAfter = new Date();
-
- cert.issuer = {};
- cert.issuer.getField = function(sn) {
- return _getAttribute(cert.issuer, sn);
- };
- cert.issuer.addField = function(attr) {
- _fillMissingFields([attr]);
- cert.issuer.attributes.push(attr);
- };
- cert.issuer.attributes = [];
- cert.issuer.hash = null;
-
- cert.subject = {};
- cert.subject.getField = function(sn) {
- return _getAttribute(cert.subject, sn);
- };
- cert.subject.addField = function(attr) {
- _fillMissingFields([attr]);
- cert.subject.attributes.push(attr);
- };
- cert.subject.attributes = [];
- cert.subject.hash = null;
-
- cert.extensions = [];
- cert.publicKey = null;
- cert.md = null;
-
- /**
- * Sets the subject of this certificate.
- *
- * @param attrs the array of subject attributes to use.
- * @param uniqueId an optional a unique ID to use.
- */
- cert.setSubject = function(attrs, uniqueId) {
- // set new attributes, clear hash
- _fillMissingFields(attrs);
- cert.subject.attributes = attrs;
- delete cert.subject.uniqueId;
- if(uniqueId) {
- // TODO: support arbitrary bit length ids
- cert.subject.uniqueId = uniqueId;
- }
- cert.subject.hash = null;
- };
-
- /**
- * Sets the issuer of this certificate.
- *
- * @param attrs the array of issuer attributes to use.
- * @param uniqueId an optional a unique ID to use.
- */
- cert.setIssuer = function(attrs, uniqueId) {
- // set new attributes, clear hash
- _fillMissingFields(attrs);
- cert.issuer.attributes = attrs;
- delete cert.issuer.uniqueId;
- if(uniqueId) {
- // TODO: support arbitrary bit length ids
- cert.issuer.uniqueId = uniqueId;
- }
- cert.issuer.hash = null;
- };
-
- /**
- * Sets the extensions of this certificate.
- *
- * @param exts the array of extensions to use.
- */
- cert.setExtensions = function(exts) {
- for(var i = 0; i < exts.length; ++i) {
- _fillMissingExtensionFields(exts[i], {cert: cert});
- }
- // set new extensions
- cert.extensions = exts;
- };
-
- /**
- * Gets an extension by its name or id.
- *
- * @param options the name to use or an object with:
- * name the name to use.
- * id the id to use.
- *
- * @return the extension or null if not found.
- */
- cert.getExtension = function(options) {
- if(typeof options === 'string') {
- options = {name: options};
- }
-
- var rval = null;
- var ext;
- for(var i = 0; rval === null && i < cert.extensions.length; ++i) {
- ext = cert.extensions[i];
- if(options.id && ext.id === options.id) {
- rval = ext;
- } else if(options.name && ext.name === options.name) {
- rval = ext;
- }
- }
- return rval;
- };
-
- /**
- * Signs this certificate using the given private key.
- *
- * @param key the private key to sign with.
- * @param md the message digest object to use (defaults to forge.md.sha1).
- */
- cert.sign = function(key, md) {
- // TODO: get signature OID from private key
- cert.md = md || forge$e.md.sha1.create();
- var algorithmOid = oids[cert.md.algorithm + 'WithRSAEncryption'];
- if(!algorithmOid) {
- var error = new Error('Could not compute certificate digest. ' +
- 'Unknown message digest algorithm OID.');
- error.algorithm = cert.md.algorithm;
- throw error;
- }
- cert.signatureOid = cert.siginfo.algorithmOid = algorithmOid;
-
- // get TBSCertificate, convert to DER
- cert.tbsCertificate = pki$2.getTBSCertificate(cert);
- var bytes = asn1$4.toDer(cert.tbsCertificate);
-
- // digest and sign
- cert.md.update(bytes.getBytes());
- cert.signature = key.sign(cert.md);
- };
-
- /**
- * Attempts verify the signature on the passed certificate using this
- * certificate's public key.
- *
- * @param child the certificate to verify.
- *
- * @return true if verified, false if not.
- */
- cert.verify = function(child) {
- var rval = false;
-
- if(!cert.issued(child)) {
- var issuer = child.issuer;
- var subject = cert.subject;
- var error = new Error(
- 'The parent certificate did not issue the given child ' +
- 'certificate; the child certificate\'s issuer does not match the ' +
- 'parent\'s subject.');
- error.expectedIssuer = issuer.attributes;
- error.actualIssuer = subject.attributes;
- throw error;
- }
-
- var md = child.md;
- if(md === null) {
- // check signature OID for supported signature types
- if(child.signatureOid in oids) {
- var oid = oids[child.signatureOid];
- switch(oid) {
- case 'sha1WithRSAEncryption':
- md = forge$e.md.sha1.create();
- break;
- case 'md5WithRSAEncryption':
- md = forge$e.md.md5.create();
- break;
- case 'sha256WithRSAEncryption':
- md = forge$e.md.sha256.create();
- break;
- case 'sha384WithRSAEncryption':
- md = forge$e.md.sha384.create();
- break;
- case 'sha512WithRSAEncryption':
- md = forge$e.md.sha512.create();
- break;
- case 'RSASSA-PSS':
- md = forge$e.md.sha256.create();
- break;
- }
- }
- if(md === null) {
- var error = new Error('Could not compute certificate digest. ' +
- 'Unknown signature OID.');
- error.signatureOid = child.signatureOid;
- throw error;
- }
-
- // produce DER formatted TBSCertificate and digest it
- var tbsCertificate = child.tbsCertificate || pki$2.getTBSCertificate(child);
- var bytes = asn1$4.toDer(tbsCertificate);
- md.update(bytes.getBytes());
- }
-
- if(md !== null) {
- var scheme;
-
- switch(child.signatureOid) {
- case oids.sha1WithRSAEncryption:
- scheme = undefined; /* use PKCS#1 v1.5 padding scheme */
- break;
- case oids['RSASSA-PSS']:
- var hash, mgf;
-
- /* initialize mgf */
- hash = oids[child.signatureParameters.mgf.hash.algorithmOid];
- if(hash === undefined || forge$e.md[hash] === undefined) {
- var error = new Error('Unsupported MGF hash function.');
- error.oid = child.signatureParameters.mgf.hash.algorithmOid;
- error.name = hash;
- throw error;
- }
-
- mgf = oids[child.signatureParameters.mgf.algorithmOid];
- if(mgf === undefined || forge$e.mgf[mgf] === undefined) {
- var error = new Error('Unsupported MGF function.');
- error.oid = child.signatureParameters.mgf.algorithmOid;
- error.name = mgf;
- throw error;
- }
-
- mgf = forge$e.mgf[mgf].create(forge$e.md[hash].create());
-
- /* initialize hash function */
- hash = oids[child.signatureParameters.hash.algorithmOid];
- if(hash === undefined || forge$e.md[hash] === undefined) {
- throw {
- message: 'Unsupported RSASSA-PSS hash function.',
- oid: child.signatureParameters.hash.algorithmOid,
- name: hash
- };
- }
-
- scheme = forge$e.pss.create(forge$e.md[hash].create(), mgf,
- child.signatureParameters.saltLength);
- break;
- }
-
- // verify signature on cert using public key
- rval = cert.publicKey.verify(
- md.digest().getBytes(), child.signature, scheme);
- }
-
- return rval;
- };
-
- /**
- * Returns true if this certificate's issuer matches the passed
- * certificate's subject. Note that no signature check is performed.
- *
- * @param parent the certificate to check.
- *
- * @return true if this certificate's issuer matches the passed certificate's
- * subject.
- */
- cert.isIssuer = function(parent) {
- var rval = false;
-
- var i = cert.issuer;
- var s = parent.subject;
-
- // compare hashes if present
- if(i.hash && s.hash) {
- rval = (i.hash === s.hash);
- } else if(i.attributes.length === s.attributes.length) {
- // all attributes are the same so issuer matches subject
- rval = true;
- var iattr, sattr;
- for(var n = 0; rval && n < i.attributes.length; ++n) {
- iattr = i.attributes[n];
- sattr = s.attributes[n];
- if(iattr.type !== sattr.type || iattr.value !== sattr.value) {
- // attribute mismatch
- rval = false;
- }
- }
- }
-
- return rval;
- };
-
- /**
- * Returns true if this certificate's subject matches the issuer of the
- * given certificate). Note that not signature check is performed.
- *
- * @param child the certificate to check.
- *
- * @return true if this certificate's subject matches the passed
- * certificate's issuer.
- */
- cert.issued = function(child) {
- return child.isIssuer(cert);
- };
-
- /**
- * Generates the subjectKeyIdentifier for this certificate as byte buffer.
- *
- * @return the subjectKeyIdentifier for this certificate as byte buffer.
- */
- cert.generateSubjectKeyIdentifier = function() {
- /* See: 4.2.1.2 section of the the RFC3280, keyIdentifier is either:
-
- (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
- value of the BIT STRING subjectPublicKey (excluding the tag,
- length, and number of unused bits).
-
- (2) The keyIdentifier is composed of a four bit type field with
- the value 0100 followed by the least significant 60 bits of the
- SHA-1 hash of the value of the BIT STRING subjectPublicKey
- (excluding the tag, length, and number of unused bit string bits).
- */
-
- // skipping the tag, length, and number of unused bits is the same
- // as just using the RSAPublicKey (for RSA keys, which are the
- // only ones supported)
- return pki$2.getPublicKeyFingerprint(cert.publicKey, {type: 'RSAPublicKey'});
- };
-
- /**
- * Verifies the subjectKeyIdentifier extension value for this certificate
- * against its public key. If no extension is found, false will be
- * returned.
- *
- * @return true if verified, false if not.
- */
- cert.verifySubjectKeyIdentifier = function() {
- var oid = oids['subjectKeyIdentifier'];
- for(var i = 0; i < cert.extensions.length; ++i) {
- var ext = cert.extensions[i];
- if(ext.id === oid) {
- var ski = cert.generateSubjectKeyIdentifier().getBytes();
- return (forge$e.util.hexToBytes(ext.subjectKeyIdentifier) === ski);
- }
- }
- return false;
- };
-
- return cert;
-};
-
-/**
- * Converts an X.509v3 RSA certificate from an ASN.1 object.
- *
- * Note: If the certificate is to be verified then compute hash should
- * be set to true. There is currently no implementation for converting
- * a certificate back to ASN.1 so the TBSCertificate part of the ASN.1
- * object needs to be scanned before the cert object is created.
- *
- * @param obj the asn1 representation of an X.509v3 RSA certificate.
- * @param computeHash true to compute the hash for verification.
- *
- * @return the certificate.
- */
-pki$2.certificateFromAsn1 = function(obj, computeHash) {
- // validate certificate and capture data
- var capture = {};
- var errors = [];
- if(!asn1$4.validate(obj, x509CertificateValidator, capture, errors)) {
- var error = new Error('Cannot read X.509 certificate. ' +
- 'ASN.1 object is not an X509v3 Certificate.');
- error.errors = errors;
- throw error;
- }
-
- // get oid
- var oid = asn1$4.derToOid(capture.publicKeyOid);
- if(oid !== pki$2.oids.rsaEncryption) {
- throw new Error('Cannot read public key. OID is not RSA.');
- }
-
- // create certificate
- var cert = pki$2.createCertificate();
- cert.version = capture.certVersion ?
- capture.certVersion.charCodeAt(0) : 0;
- var serial = forge$e.util.createBuffer(capture.certSerialNumber);
- cert.serialNumber = serial.toHex();
- cert.signatureOid = forge$e.asn1.derToOid(capture.certSignatureOid);
- cert.signatureParameters = _readSignatureParameters(
- cert.signatureOid, capture.certSignatureParams, true);
- cert.siginfo.algorithmOid = forge$e.asn1.derToOid(capture.certinfoSignatureOid);
- cert.siginfo.parameters = _readSignatureParameters(cert.siginfo.algorithmOid,
- capture.certinfoSignatureParams, false);
- cert.signature = capture.certSignature;
-
- var validity = [];
- if(capture.certValidity1UTCTime !== undefined) {
- validity.push(asn1$4.utcTimeToDate(capture.certValidity1UTCTime));
- }
- if(capture.certValidity2GeneralizedTime !== undefined) {
- validity.push(asn1$4.generalizedTimeToDate(
- capture.certValidity2GeneralizedTime));
- }
- if(capture.certValidity3UTCTime !== undefined) {
- validity.push(asn1$4.utcTimeToDate(capture.certValidity3UTCTime));
- }
- if(capture.certValidity4GeneralizedTime !== undefined) {
- validity.push(asn1$4.generalizedTimeToDate(
- capture.certValidity4GeneralizedTime));
- }
- if(validity.length > 2) {
- throw new Error('Cannot read notBefore/notAfter validity times; more ' +
- 'than two times were provided in the certificate.');
- }
- if(validity.length < 2) {
- throw new Error('Cannot read notBefore/notAfter validity times; they ' +
- 'were not provided as either UTCTime or GeneralizedTime.');
- }
- cert.validity.notBefore = validity[0];
- cert.validity.notAfter = validity[1];
-
- // keep TBSCertificate to preserve signature when exporting
- cert.tbsCertificate = capture.tbsCertificate;
-
- if(computeHash) {
- // check signature OID for supported signature types
- cert.md = null;
- if(cert.signatureOid in oids) {
- var oid = oids[cert.signatureOid];
- switch(oid) {
- case 'sha1WithRSAEncryption':
- cert.md = forge$e.md.sha1.create();
- break;
- case 'md5WithRSAEncryption':
- cert.md = forge$e.md.md5.create();
- break;
- case 'sha256WithRSAEncryption':
- cert.md = forge$e.md.sha256.create();
- break;
- case 'sha384WithRSAEncryption':
- cert.md = forge$e.md.sha384.create();
- break;
- case 'sha512WithRSAEncryption':
- cert.md = forge$e.md.sha512.create();
- break;
- case 'RSASSA-PSS':
- cert.md = forge$e.md.sha256.create();
- break;
- }
- }
- if(cert.md === null) {
- var error = new Error('Could not compute certificate digest. ' +
- 'Unknown signature OID.');
- error.signatureOid = cert.signatureOid;
- throw error;
- }
-
- // produce DER formatted TBSCertificate and digest it
- var bytes = asn1$4.toDer(cert.tbsCertificate);
- cert.md.update(bytes.getBytes());
- }
-
- // handle issuer, build issuer message digest
- var imd = forge$e.md.sha1.create();
- cert.issuer.getField = function(sn) {
- return _getAttribute(cert.issuer, sn);
- };
- cert.issuer.addField = function(attr) {
- _fillMissingFields([attr]);
- cert.issuer.attributes.push(attr);
- };
- cert.issuer.attributes = pki$2.RDNAttributesAsArray(capture.certIssuer, imd);
- if(capture.certIssuerUniqueId) {
- cert.issuer.uniqueId = capture.certIssuerUniqueId;
- }
- cert.issuer.hash = imd.digest().toHex();
-
- // handle subject, build subject message digest
- var smd = forge$e.md.sha1.create();
- cert.subject.getField = function(sn) {
- return _getAttribute(cert.subject, sn);
- };
- cert.subject.addField = function(attr) {
- _fillMissingFields([attr]);
- cert.subject.attributes.push(attr);
- };
- cert.subject.attributes = pki$2.RDNAttributesAsArray(capture.certSubject, smd);
- if(capture.certSubjectUniqueId) {
- cert.subject.uniqueId = capture.certSubjectUniqueId;
- }
- cert.subject.hash = smd.digest().toHex();
-
- // handle extensions
- if(capture.certExtensions) {
- cert.extensions = pki$2.certificateExtensionsFromAsn1(capture.certExtensions);
- } else {
- cert.extensions = [];
- }
-
- // convert RSA public key from ASN.1
- cert.publicKey = pki$2.publicKeyFromAsn1(capture.subjectPublicKeyInfo);
-
- return cert;
-};
-
-/**
- * Converts an ASN.1 extensions object (with extension sequences as its
- * values) into an array of extension objects with types and values.
- *
- * Supported extensions:
- *
- * id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }
- * KeyUsage ::= BIT STRING {
- * digitalSignature (0),
- * nonRepudiation (1),
- * keyEncipherment (2),
- * dataEncipherment (3),
- * keyAgreement (4),
- * keyCertSign (5),
- * cRLSign (6),
- * encipherOnly (7),
- * decipherOnly (8)
- * }
- *
- * id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }
- * BasicConstraints ::= SEQUENCE {
- * cA BOOLEAN DEFAULT FALSE,
- * pathLenConstraint INTEGER (0..MAX) OPTIONAL
- * }
- *
- * subjectAltName EXTENSION ::= {
- * SYNTAX GeneralNames
- * IDENTIFIED BY id-ce-subjectAltName
- * }
- *
- * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
- *
- * GeneralName ::= CHOICE {
- * otherName [0] INSTANCE OF OTHER-NAME,
- * rfc822Name [1] IA5String,
- * dNSName [2] IA5String,
- * x400Address [3] ORAddress,
- * directoryName [4] Name,
- * ediPartyName [5] EDIPartyName,
- * uniformResourceIdentifier [6] IA5String,
- * IPAddress [7] OCTET STRING,
- * registeredID [8] OBJECT IDENTIFIER
- * }
- *
- * OTHER-NAME ::= TYPE-IDENTIFIER
- *
- * EDIPartyName ::= SEQUENCE {
- * nameAssigner [0] DirectoryString {ub-name} OPTIONAL,
- * partyName [1] DirectoryString {ub-name}
- * }
- *
- * @param exts the extensions ASN.1 with extension sequences to parse.
- *
- * @return the array.
- */
-pki$2.certificateExtensionsFromAsn1 = function(exts) {
- var rval = [];
- for(var i = 0; i < exts.value.length; ++i) {
- // get extension sequence
- var extseq = exts.value[i];
- for(var ei = 0; ei < extseq.value.length; ++ei) {
- rval.push(pki$2.certificateExtensionFromAsn1(extseq.value[ei]));
- }
- }
-
- return rval;
-};
-
-/**
- * Parses a single certificate extension from ASN.1.
- *
- * @param ext the extension in ASN.1 format.
- *
- * @return the parsed extension as an object.
- */
-pki$2.certificateExtensionFromAsn1 = function(ext) {
- // an extension has:
- // [0] extnID OBJECT IDENTIFIER
- // [1] critical BOOLEAN DEFAULT FALSE
- // [2] extnValue OCTET STRING
- var e = {};
- e.id = asn1$4.derToOid(ext.value[0].value);
- e.critical = false;
- if(ext.value[1].type === asn1$4.Type.BOOLEAN) {
- e.critical = (ext.value[1].value.charCodeAt(0) !== 0x00);
- e.value = ext.value[2].value;
- } else {
- e.value = ext.value[1].value;
- }
- // if the oid is known, get its name
- if(e.id in oids) {
- e.name = oids[e.id];
-
- // handle key usage
- if(e.name === 'keyUsage') {
- // get value as BIT STRING
- var ev = asn1$4.fromDer(e.value);
- var b2 = 0x00;
- var b3 = 0x00;
- if(ev.value.length > 1) {
- // skip first byte, just indicates unused bits which
- // will be padded with 0s anyway
- // get bytes with flag bits
- b2 = ev.value.charCodeAt(1);
- b3 = ev.value.length > 2 ? ev.value.charCodeAt(2) : 0;
- }
- // set flags
- e.digitalSignature = (b2 & 0x80) === 0x80;
- e.nonRepudiation = (b2 & 0x40) === 0x40;
- e.keyEncipherment = (b2 & 0x20) === 0x20;
- e.dataEncipherment = (b2 & 0x10) === 0x10;
- e.keyAgreement = (b2 & 0x08) === 0x08;
- e.keyCertSign = (b2 & 0x04) === 0x04;
- e.cRLSign = (b2 & 0x02) === 0x02;
- e.encipherOnly = (b2 & 0x01) === 0x01;
- e.decipherOnly = (b3 & 0x80) === 0x80;
- } else if(e.name === 'basicConstraints') {
- // handle basic constraints
- // get value as SEQUENCE
- var ev = asn1$4.fromDer(e.value);
- // get cA BOOLEAN flag (defaults to false)
- if(ev.value.length > 0 && ev.value[0].type === asn1$4.Type.BOOLEAN) {
- e.cA = (ev.value[0].value.charCodeAt(0) !== 0x00);
- } else {
- e.cA = false;
- }
- // get path length constraint
- var value = null;
- if(ev.value.length > 0 && ev.value[0].type === asn1$4.Type.INTEGER) {
- value = ev.value[0].value;
- } else if(ev.value.length > 1) {
- value = ev.value[1].value;
- }
- if(value !== null) {
- e.pathLenConstraint = asn1$4.derToInteger(value);
- }
- } else if(e.name === 'extKeyUsage') {
- // handle extKeyUsage
- // value is a SEQUENCE of OIDs
- var ev = asn1$4.fromDer(e.value);
- for(var vi = 0; vi < ev.value.length; ++vi) {
- var oid = asn1$4.derToOid(ev.value[vi].value);
- if(oid in oids) {
- e[oids[oid]] = true;
- } else {
- e[oid] = true;
- }
- }
- } else if(e.name === 'nsCertType') {
- // handle nsCertType
- // get value as BIT STRING
- var ev = asn1$4.fromDer(e.value);
- var b2 = 0x00;
- if(ev.value.length > 1) {
- // skip first byte, just indicates unused bits which
- // will be padded with 0s anyway
- // get bytes with flag bits
- b2 = ev.value.charCodeAt(1);
- }
- // set flags
- e.client = (b2 & 0x80) === 0x80;
- e.server = (b2 & 0x40) === 0x40;
- e.email = (b2 & 0x20) === 0x20;
- e.objsign = (b2 & 0x10) === 0x10;
- e.reserved = (b2 & 0x08) === 0x08;
- e.sslCA = (b2 & 0x04) === 0x04;
- e.emailCA = (b2 & 0x02) === 0x02;
- e.objCA = (b2 & 0x01) === 0x01;
- } else if(
- e.name === 'subjectAltName' ||
- e.name === 'issuerAltName') {
- // handle subjectAltName/issuerAltName
- e.altNames = [];
-
- // ev is a SYNTAX SEQUENCE
- var gn;
- var ev = asn1$4.fromDer(e.value);
- for(var n = 0; n < ev.value.length; ++n) {
- // get GeneralName
- gn = ev.value[n];
-
- var altName = {
- type: gn.type,
- value: gn.value
- };
- e.altNames.push(altName);
-
- // Note: Support for types 1,2,6,7,8
- switch(gn.type) {
- // rfc822Name
- case 1:
- // dNSName
- case 2:
- // uniformResourceIdentifier (URI)
- case 6:
- break;
- // IPAddress
- case 7:
- // convert to IPv4/IPv6 string representation
- altName.ip = forge$e.util.bytesToIP(gn.value);
- break;
- // registeredID
- case 8:
- altName.oid = asn1$4.derToOid(gn.value);
- break;
- // unsupported
- }
- }
- } else if(e.name === 'subjectKeyIdentifier') {
- // value is an OCTETSTRING w/the hash of the key-type specific
- // public key structure (eg: RSAPublicKey)
- var ev = asn1$4.fromDer(e.value);
- e.subjectKeyIdentifier = forge$e.util.bytesToHex(ev.value);
- }
- }
- return e;
-};
-
-/**
- * Converts a PKCS#10 certification request (CSR) from an ASN.1 object.
- *
- * Note: If the certification request is to be verified then compute hash
- * should be set to true. There is currently no implementation for converting
- * a certificate back to ASN.1 so the CertificationRequestInfo part of the
- * ASN.1 object needs to be scanned before the csr object is created.
- *
- * @param obj the asn1 representation of a PKCS#10 certification request (CSR).
- * @param computeHash true to compute the hash for verification.
- *
- * @return the certification request (CSR).
- */
-pki$2.certificationRequestFromAsn1 = function(obj, computeHash) {
- // validate certification request and capture data
- var capture = {};
- var errors = [];
- if(!asn1$4.validate(obj, certificationRequestValidator, capture, errors)) {
- var error = new Error('Cannot read PKCS#10 certificate request. ' +
- 'ASN.1 object is not a PKCS#10 CertificationRequest.');
- error.errors = errors;
- throw error;
- }
-
- // get oid
- var oid = asn1$4.derToOid(capture.publicKeyOid);
- if(oid !== pki$2.oids.rsaEncryption) {
- throw new Error('Cannot read public key. OID is not RSA.');
- }
-
- // create certification request
- var csr = pki$2.createCertificationRequest();
- csr.version = capture.csrVersion ? capture.csrVersion.charCodeAt(0) : 0;
- csr.signatureOid = forge$e.asn1.derToOid(capture.csrSignatureOid);
- csr.signatureParameters = _readSignatureParameters(
- csr.signatureOid, capture.csrSignatureParams, true);
- csr.siginfo.algorithmOid = forge$e.asn1.derToOid(capture.csrSignatureOid);
- csr.siginfo.parameters = _readSignatureParameters(
- csr.siginfo.algorithmOid, capture.csrSignatureParams, false);
- csr.signature = capture.csrSignature;
-
- // keep CertificationRequestInfo to preserve signature when exporting
- csr.certificationRequestInfo = capture.certificationRequestInfo;
-
- if(computeHash) {
- // check signature OID for supported signature types
- csr.md = null;
- if(csr.signatureOid in oids) {
- var oid = oids[csr.signatureOid];
- switch(oid) {
- case 'sha1WithRSAEncryption':
- csr.md = forge$e.md.sha1.create();
- break;
- case 'md5WithRSAEncryption':
- csr.md = forge$e.md.md5.create();
- break;
- case 'sha256WithRSAEncryption':
- csr.md = forge$e.md.sha256.create();
- break;
- case 'sha384WithRSAEncryption':
- csr.md = forge$e.md.sha384.create();
- break;
- case 'sha512WithRSAEncryption':
- csr.md = forge$e.md.sha512.create();
- break;
- case 'RSASSA-PSS':
- csr.md = forge$e.md.sha256.create();
- break;
- }
- }
- if(csr.md === null) {
- var error = new Error('Could not compute certification request digest. ' +
- 'Unknown signature OID.');
- error.signatureOid = csr.signatureOid;
- throw error;
- }
-
- // produce DER formatted CertificationRequestInfo and digest it
- var bytes = asn1$4.toDer(csr.certificationRequestInfo);
- csr.md.update(bytes.getBytes());
- }
-
- // handle subject, build subject message digest
- var smd = forge$e.md.sha1.create();
- csr.subject.getField = function(sn) {
- return _getAttribute(csr.subject, sn);
- };
- csr.subject.addField = function(attr) {
- _fillMissingFields([attr]);
- csr.subject.attributes.push(attr);
- };
- csr.subject.attributes = pki$2.RDNAttributesAsArray(
- capture.certificationRequestInfoSubject, smd);
- csr.subject.hash = smd.digest().toHex();
-
- // convert RSA public key from ASN.1
- csr.publicKey = pki$2.publicKeyFromAsn1(capture.subjectPublicKeyInfo);
-
- // convert attributes from ASN.1
- csr.getAttribute = function(sn) {
- return _getAttribute(csr, sn);
- };
- csr.addAttribute = function(attr) {
- _fillMissingFields([attr]);
- csr.attributes.push(attr);
- };
- csr.attributes = pki$2.CRIAttributesAsArray(
- capture.certificationRequestInfoAttributes || []);
-
- return csr;
-};
-
-/**
- * Creates an empty certification request (a CSR or certificate signing
- * request). Once created, its public key and attributes can be set and then
- * it can be signed.
- *
- * @return the empty certification request.
- */
-pki$2.createCertificationRequest = function() {
- var csr = {};
- csr.version = 0x00;
- csr.signatureOid = null;
- csr.signature = null;
- csr.siginfo = {};
- csr.siginfo.algorithmOid = null;
-
- csr.subject = {};
- csr.subject.getField = function(sn) {
- return _getAttribute(csr.subject, sn);
- };
- csr.subject.addField = function(attr) {
- _fillMissingFields([attr]);
- csr.subject.attributes.push(attr);
- };
- csr.subject.attributes = [];
- csr.subject.hash = null;
-
- csr.publicKey = null;
- csr.attributes = [];
- csr.getAttribute = function(sn) {
- return _getAttribute(csr, sn);
- };
- csr.addAttribute = function(attr) {
- _fillMissingFields([attr]);
- csr.attributes.push(attr);
- };
- csr.md = null;
-
- /**
- * Sets the subject of this certification request.
- *
- * @param attrs the array of subject attributes to use.
- */
- csr.setSubject = function(attrs) {
- // set new attributes
- _fillMissingFields(attrs);
- csr.subject.attributes = attrs;
- csr.subject.hash = null;
- };
-
- /**
- * Sets the attributes of this certification request.
- *
- * @param attrs the array of attributes to use.
- */
- csr.setAttributes = function(attrs) {
- // set new attributes
- _fillMissingFields(attrs);
- csr.attributes = attrs;
- };
-
- /**
- * Signs this certification request using the given private key.
- *
- * @param key the private key to sign with.
- * @param md the message digest object to use (defaults to forge.md.sha1).
- */
- csr.sign = function(key, md) {
- // TODO: get signature OID from private key
- csr.md = md || forge$e.md.sha1.create();
- var algorithmOid = oids[csr.md.algorithm + 'WithRSAEncryption'];
- if(!algorithmOid) {
- var error = new Error('Could not compute certification request digest. ' +
- 'Unknown message digest algorithm OID.');
- error.algorithm = csr.md.algorithm;
- throw error;
- }
- csr.signatureOid = csr.siginfo.algorithmOid = algorithmOid;
-
- // get CertificationRequestInfo, convert to DER
- csr.certificationRequestInfo = pki$2.getCertificationRequestInfo(csr);
- var bytes = asn1$4.toDer(csr.certificationRequestInfo);
-
- // digest and sign
- csr.md.update(bytes.getBytes());
- csr.signature = key.sign(csr.md);
- };
-
- /**
- * Attempts verify the signature on the passed certification request using
- * its public key.
- *
- * A CSR that has been exported to a file in PEM format can be verified using
- * OpenSSL using this command:
- *
- * openssl req -in <the-csr-pem-file> -verify -noout -text
- *
- * @return true if verified, false if not.
- */
- csr.verify = function() {
- var rval = false;
-
- var md = csr.md;
- if(md === null) {
- // check signature OID for supported signature types
- if(csr.signatureOid in oids) {
- // TODO: create DRY `OID to md` function
- var oid = oids[csr.signatureOid];
- switch(oid) {
- case 'sha1WithRSAEncryption':
- md = forge$e.md.sha1.create();
- break;
- case 'md5WithRSAEncryption':
- md = forge$e.md.md5.create();
- break;
- case 'sha256WithRSAEncryption':
- md = forge$e.md.sha256.create();
- break;
- case 'sha384WithRSAEncryption':
- md = forge$e.md.sha384.create();
- break;
- case 'sha512WithRSAEncryption':
- md = forge$e.md.sha512.create();
- break;
- case 'RSASSA-PSS':
- md = forge$e.md.sha256.create();
- break;
- }
- }
- if(md === null) {
- var error = new Error(
- 'Could not compute certification request digest. ' +
- 'Unknown signature OID.');
- error.signatureOid = csr.signatureOid;
- throw error;
- }
-
- // produce DER formatted CertificationRequestInfo and digest it
- var cri = csr.certificationRequestInfo ||
- pki$2.getCertificationRequestInfo(csr);
- var bytes = asn1$4.toDer(cri);
- md.update(bytes.getBytes());
- }
-
- if(md !== null) {
- var scheme;
-
- switch(csr.signatureOid) {
- case oids.sha1WithRSAEncryption:
- /* use PKCS#1 v1.5 padding scheme */
- break;
- case oids['RSASSA-PSS']:
- var hash, mgf;
-
- /* initialize mgf */
- hash = oids[csr.signatureParameters.mgf.hash.algorithmOid];
- if(hash === undefined || forge$e.md[hash] === undefined) {
- var error = new Error('Unsupported MGF hash function.');
- error.oid = csr.signatureParameters.mgf.hash.algorithmOid;
- error.name = hash;
- throw error;
- }
-
- mgf = oids[csr.signatureParameters.mgf.algorithmOid];
- if(mgf === undefined || forge$e.mgf[mgf] === undefined) {
- var error = new Error('Unsupported MGF function.');
- error.oid = csr.signatureParameters.mgf.algorithmOid;
- error.name = mgf;
- throw error;
- }
-
- mgf = forge$e.mgf[mgf].create(forge$e.md[hash].create());
-
- /* initialize hash function */
- hash = oids[csr.signatureParameters.hash.algorithmOid];
- if(hash === undefined || forge$e.md[hash] === undefined) {
- var error = new Error('Unsupported RSASSA-PSS hash function.');
- error.oid = csr.signatureParameters.hash.algorithmOid;
- error.name = hash;
- throw error;
- }
-
- scheme = forge$e.pss.create(forge$e.md[hash].create(), mgf,
- csr.signatureParameters.saltLength);
- break;
- }
-
- // verify signature on csr using its public key
- rval = csr.publicKey.verify(
- md.digest().getBytes(), csr.signature, scheme);
- }
-
- return rval;
- };
-
- return csr;
-};
-
-/**
- * Converts an X.509 subject or issuer to an ASN.1 RDNSequence.
- *
- * @param obj the subject or issuer (distinguished name).
- *
- * @return the ASN.1 RDNSequence.
- */
-function _dnToAsn1(obj) {
- // create an empty RDNSequence
- var rval = asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
-
- // iterate over attributes
- var attr, set;
- var attrs = obj.attributes;
- for(var i = 0; i < attrs.length; ++i) {
- attr = attrs[i];
- var value = attr.value;
-
- // reuse tag class for attribute value if available
- var valueTagClass = asn1$4.Type.PRINTABLESTRING;
- if('valueTagClass' in attr) {
- valueTagClass = attr.valueTagClass;
-
- if(valueTagClass === asn1$4.Type.UTF8) {
- value = forge$e.util.encodeUtf8(value);
- }
- // FIXME: handle more encodings
- }
-
- // create a RelativeDistinguishedName set
- // each value in the set is an AttributeTypeAndValue first
- // containing the type (an OID) and second the value
- set = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SET, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // AttributeType
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(attr.type).getBytes()),
- // AttributeValue
- asn1$4.create(asn1$4.Class.UNIVERSAL, valueTagClass, false, value)
- ])
- ]);
- rval.value.push(set);
- }
-
- return rval;
-}
-
-/**
- * Fills in missing fields in attributes.
- *
- * @param attrs the attributes to fill missing fields in.
- */
-function _fillMissingFields(attrs) {
- var attr;
- for(var i = 0; i < attrs.length; ++i) {
- attr = attrs[i];
-
- // populate missing name
- if(typeof attr.name === 'undefined') {
- if(attr.type && attr.type in pki$2.oids) {
- attr.name = pki$2.oids[attr.type];
- } else if(attr.shortName && attr.shortName in _shortNames) {
- attr.name = pki$2.oids[_shortNames[attr.shortName]];
- }
- }
-
- // populate missing type (OID)
- if(typeof attr.type === 'undefined') {
- if(attr.name && attr.name in pki$2.oids) {
- attr.type = pki$2.oids[attr.name];
- } else {
- var error = new Error('Attribute type not specified.');
- error.attribute = attr;
- throw error;
- }
- }
-
- // populate missing shortname
- if(typeof attr.shortName === 'undefined') {
- if(attr.name && attr.name in _shortNames) {
- attr.shortName = _shortNames[attr.name];
- }
- }
-
- // convert extensions to value
- if(attr.type === oids.extensionRequest) {
- attr.valueConstructed = true;
- attr.valueTagClass = asn1$4.Type.SEQUENCE;
- if(!attr.value && attr.extensions) {
- attr.value = [];
- for(var ei = 0; ei < attr.extensions.length; ++ei) {
- attr.value.push(pki$2.certificateExtensionToAsn1(
- _fillMissingExtensionFields(attr.extensions[ei])));
- }
- }
- }
-
- if(typeof attr.value === 'undefined') {
- var error = new Error('Attribute value not specified.');
- error.attribute = attr;
- throw error;
- }
- }
-}
-
-/**
- * Fills in missing fields in certificate extensions.
- *
- * @param e the extension.
- * @param [options] the options to use.
- * [cert] the certificate the extensions are for.
- *
- * @return the extension.
- */
-function _fillMissingExtensionFields(e, options) {
- options = options || {};
-
- // populate missing name
- if(typeof e.name === 'undefined') {
- if(e.id && e.id in pki$2.oids) {
- e.name = pki$2.oids[e.id];
- }
- }
-
- // populate missing id
- if(typeof e.id === 'undefined') {
- if(e.name && e.name in pki$2.oids) {
- e.id = pki$2.oids[e.name];
- } else {
- var error = new Error('Extension ID not specified.');
- error.extension = e;
- throw error;
- }
- }
-
- if(typeof e.value !== 'undefined') {
- return e;
- }
-
- // handle missing value:
-
- // value is a BIT STRING
- if(e.name === 'keyUsage') {
- // build flags
- var unused = 0;
- var b2 = 0x00;
- var b3 = 0x00;
- if(e.digitalSignature) {
- b2 |= 0x80;
- unused = 7;
- }
- if(e.nonRepudiation) {
- b2 |= 0x40;
- unused = 6;
- }
- if(e.keyEncipherment) {
- b2 |= 0x20;
- unused = 5;
- }
- if(e.dataEncipherment) {
- b2 |= 0x10;
- unused = 4;
- }
- if(e.keyAgreement) {
- b2 |= 0x08;
- unused = 3;
- }
- if(e.keyCertSign) {
- b2 |= 0x04;
- unused = 2;
- }
- if(e.cRLSign) {
- b2 |= 0x02;
- unused = 1;
- }
- if(e.encipherOnly) {
- b2 |= 0x01;
- unused = 0;
- }
- if(e.decipherOnly) {
- b3 |= 0x80;
- unused = 7;
- }
-
- // create bit string
- var value = String.fromCharCode(unused);
- if(b3 !== 0) {
- value += String.fromCharCode(b2) + String.fromCharCode(b3);
- } else if(b2 !== 0) {
- value += String.fromCharCode(b2);
- }
- e.value = asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.BITSTRING, false, value);
- } else if(e.name === 'basicConstraints') {
- // basicConstraints is a SEQUENCE
- e.value = asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
- // cA BOOLEAN flag defaults to false
- if(e.cA) {
- e.value.value.push(asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.BOOLEAN, false,
- String.fromCharCode(0xFF)));
- }
- if('pathLenConstraint' in e) {
- e.value.value.push(asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.INTEGER, false,
- asn1$4.integerToDer(e.pathLenConstraint).getBytes()));
- }
- } else if(e.name === 'extKeyUsage') {
- // extKeyUsage is a SEQUENCE of OIDs
- e.value = asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
- var seq = e.value.value;
- for(var key in e) {
- if(e[key] !== true) {
- continue;
- }
- // key is name in OID map
- if(key in oids) {
- seq.push(asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID,
- false, asn1$4.oidToDer(oids[key]).getBytes()));
- } else if(key.indexOf('.') !== -1) {
- // assume key is an OID
- seq.push(asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID,
- false, asn1$4.oidToDer(key).getBytes()));
- }
- }
- } else if(e.name === 'nsCertType') {
- // nsCertType is a BIT STRING
- // build flags
- var unused = 0;
- var b2 = 0x00;
-
- if(e.client) {
- b2 |= 0x80;
- unused = 7;
- }
- if(e.server) {
- b2 |= 0x40;
- unused = 6;
- }
- if(e.email) {
- b2 |= 0x20;
- unused = 5;
- }
- if(e.objsign) {
- b2 |= 0x10;
- unused = 4;
- }
- if(e.reserved) {
- b2 |= 0x08;
- unused = 3;
- }
- if(e.sslCA) {
- b2 |= 0x04;
- unused = 2;
- }
- if(e.emailCA) {
- b2 |= 0x02;
- unused = 1;
- }
- if(e.objCA) {
- b2 |= 0x01;
- unused = 0;
- }
-
- // create bit string
- var value = String.fromCharCode(unused);
- if(b2 !== 0) {
- value += String.fromCharCode(b2);
- }
- e.value = asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.BITSTRING, false, value);
- } else if(e.name === 'subjectAltName' || e.name === 'issuerAltName') {
- // SYNTAX SEQUENCE
- e.value = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
-
- var altName;
- for(var n = 0; n < e.altNames.length; ++n) {
- altName = e.altNames[n];
- var value = altName.value;
- // handle IP
- if(altName.type === 7 && altName.ip) {
- value = forge$e.util.bytesFromIP(altName.ip);
- if(value === null) {
- var error = new Error(
- 'Extension "ip" value is not a valid IPv4 or IPv6 address.');
- error.extension = e;
- throw error;
- }
- } else if(altName.type === 8) {
- // handle OID
- if(altName.oid) {
- value = asn1$4.oidToDer(asn1$4.oidToDer(altName.oid));
- } else {
- // deprecated ... convert value to OID
- value = asn1$4.oidToDer(value);
- }
- }
- e.value.value.push(asn1$4.create(
- asn1$4.Class.CONTEXT_SPECIFIC, altName.type, false,
- value));
- }
- } else if(e.name === 'nsComment' && options.cert) {
- // sanity check value is ASCII (req'd) and not too big
- if(!(/^[\x00-\x7F]*$/.test(e.comment)) ||
- (e.comment.length < 1) || (e.comment.length > 128)) {
- throw new Error('Invalid "nsComment" content.');
- }
- // IA5STRING opaque comment
- e.value = asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.IA5STRING, false, e.comment);
- } else if(e.name === 'subjectKeyIdentifier' && options.cert) {
- var ski = options.cert.generateSubjectKeyIdentifier();
- e.subjectKeyIdentifier = ski.toHex();
- // OCTETSTRING w/digest
- e.value = asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.OCTETSTRING, false, ski.getBytes());
- } else if(e.name === 'authorityKeyIdentifier' && options.cert) {
- // SYNTAX SEQUENCE
- e.value = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
- var seq = e.value.value;
-
- if(e.keyIdentifier) {
- var keyIdentifier = (e.keyIdentifier === true ?
- options.cert.generateSubjectKeyIdentifier().getBytes() :
- e.keyIdentifier);
- seq.push(
- asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 0, false, keyIdentifier));
- }
-
- if(e.authorityCertIssuer) {
- var authorityCertIssuer = [
- asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 4, true, [
- _dnToAsn1(e.authorityCertIssuer === true ?
- options.cert.issuer : e.authorityCertIssuer)
- ])
- ];
- seq.push(
- asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 1, true, authorityCertIssuer));
- }
-
- if(e.serialNumber) {
- var serialNumber = forge$e.util.hexToBytes(e.serialNumber === true ?
- options.cert.serialNumber : e.serialNumber);
- seq.push(
- asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 2, false, serialNumber));
- }
- } else if(e.name === 'cRLDistributionPoints') {
- e.value = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
- var seq = e.value.value;
-
- // Create sub SEQUENCE of DistributionPointName
- var subSeq = asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
-
- // Create fullName CHOICE
- var fullNameGeneralNames = asn1$4.create(
- asn1$4.Class.CONTEXT_SPECIFIC, 0, true, []);
- var altName;
- for(var n = 0; n < e.altNames.length; ++n) {
- altName = e.altNames[n];
- var value = altName.value;
- // handle IP
- if(altName.type === 7 && altName.ip) {
- value = forge$e.util.bytesFromIP(altName.ip);
- if(value === null) {
- var error = new Error(
- 'Extension "ip" value is not a valid IPv4 or IPv6 address.');
- error.extension = e;
- throw error;
- }
- } else if(altName.type === 8) {
- // handle OID
- if(altName.oid) {
- value = asn1$4.oidToDer(asn1$4.oidToDer(altName.oid));
- } else {
- // deprecated ... convert value to OID
- value = asn1$4.oidToDer(value);
- }
- }
- fullNameGeneralNames.value.push(asn1$4.create(
- asn1$4.Class.CONTEXT_SPECIFIC, altName.type, false,
- value));
- }
-
- // Add to the parent SEQUENCE
- subSeq.value.push(asn1$4.create(
- asn1$4.Class.CONTEXT_SPECIFIC, 0, true, [fullNameGeneralNames]));
- seq.push(subSeq);
- }
-
- // ensure value has been defined by now
- if(typeof e.value === 'undefined') {
- var error = new Error('Extension value not specified.');
- error.extension = e;
- throw error;
- }
-
- return e;
-}
-
-/**
- * Convert signature parameters object to ASN.1
- *
- * @param {String} oid Signature algorithm OID
- * @param params The signature parametrs object
- * @return ASN.1 object representing signature parameters
- */
-function _signatureParametersToAsn1(oid, params) {
- switch(oid) {
- case oids['RSASSA-PSS']:
- var parts = [];
-
- if(params.hash.algorithmOid !== undefined) {
- parts.push(asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(params.hash.algorithmOid).getBytes()),
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.NULL, false, '')
- ])
- ]));
- }
-
- if(params.mgf.algorithmOid !== undefined) {
- parts.push(asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 1, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(params.mgf.algorithmOid).getBytes()),
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(params.mgf.hash.algorithmOid).getBytes()),
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.NULL, false, '')
- ])
- ])
- ]));
- }
-
- if(params.saltLength !== undefined) {
- parts.push(asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 2, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.INTEGER, false,
- asn1$4.integerToDer(params.saltLength).getBytes())
- ]));
- }
-
- return asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, parts);
-
- default:
- return asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.NULL, false, '');
- }
-}
-
-/**
- * Converts a certification request's attributes to an ASN.1 set of
- * CRIAttributes.
- *
- * @param csr certification request.
- *
- * @return the ASN.1 set of CRIAttributes.
- */
-function _CRIAttributesToAsn1(csr) {
- // create an empty context-specific container
- var rval = asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 0, true, []);
-
- // no attributes, return empty container
- if(csr.attributes.length === 0) {
- return rval;
- }
-
- // each attribute has a sequence with a type and a set of values
- var attrs = csr.attributes;
- for(var i = 0; i < attrs.length; ++i) {
- var attr = attrs[i];
- var value = attr.value;
-
- // reuse tag class for attribute value if available
- var valueTagClass = asn1$4.Type.UTF8;
- if('valueTagClass' in attr) {
- valueTagClass = attr.valueTagClass;
- }
- if(valueTagClass === asn1$4.Type.UTF8) {
- value = forge$e.util.encodeUtf8(value);
- }
- var valueConstructed = false;
- if('valueConstructed' in attr) {
- valueConstructed = attr.valueConstructed;
- }
- // FIXME: handle more encodings
-
- // create a RelativeDistinguishedName set
- // each value in the set is an AttributeTypeAndValue first
- // containing the type (an OID) and second the value
- var seq = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // AttributeType
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(attr.type).getBytes()),
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SET, true, [
- // AttributeValue
- asn1$4.create(
- asn1$4.Class.UNIVERSAL, valueTagClass, valueConstructed, value)
- ])
- ]);
- rval.value.push(seq);
- }
-
- return rval;
-}
-
-var jan_1_1950 = new Date('1950-01-01T00:00:00Z');
-var jan_1_2050 = new Date('2050-01-01T00:00:00Z');
-
-/**
- * Converts a Date object to ASN.1
- * Handles the different format before and after 1st January 2050
- *
- * @param date date object.
- *
- * @return the ASN.1 object representing the date.
- */
-function _dateToAsn1(date) {
- if(date >= jan_1_1950 && date < jan_1_2050) {
- return asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.UTCTIME, false,
- asn1$4.dateToUtcTime(date));
- } else {
- return asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.GENERALIZEDTIME, false,
- asn1$4.dateToGeneralizedTime(date));
- }
-}
-
-/**
- * Gets the ASN.1 TBSCertificate part of an X.509v3 certificate.
- *
- * @param cert the certificate.
- *
- * @return the asn1 TBSCertificate.
- */
-pki$2.getTBSCertificate = function(cert) {
- // TBSCertificate
- var notBefore = _dateToAsn1(cert.validity.notBefore);
- var notAfter = _dateToAsn1(cert.validity.notAfter);
- var tbs = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // version
- asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 0, true, [
- // integer
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.INTEGER, false,
- asn1$4.integerToDer(cert.version).getBytes())
- ]),
- // serialNumber
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.INTEGER, false,
- forge$e.util.hexToBytes(cert.serialNumber)),
- // signature
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // algorithm
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(cert.siginfo.algorithmOid).getBytes()),
- // parameters
- _signatureParametersToAsn1(
- cert.siginfo.algorithmOid, cert.siginfo.parameters)
- ]),
- // issuer
- _dnToAsn1(cert.issuer),
- // validity
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- notBefore,
- notAfter
- ]),
- // subject
- _dnToAsn1(cert.subject),
- // SubjectPublicKeyInfo
- pki$2.publicKeyToAsn1(cert.publicKey)
- ]);
-
- if(cert.issuer.uniqueId) {
- // issuerUniqueID (optional)
- tbs.value.push(
- asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 1, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.BITSTRING, false,
- // TODO: support arbitrary bit length ids
- String.fromCharCode(0x00) +
- cert.issuer.uniqueId
- )
- ])
- );
- }
- if(cert.subject.uniqueId) {
- // subjectUniqueID (optional)
- tbs.value.push(
- asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 2, true, [
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.BITSTRING, false,
- // TODO: support arbitrary bit length ids
- String.fromCharCode(0x00) +
- cert.subject.uniqueId
- )
- ])
- );
- }
-
- if(cert.extensions.length > 0) {
- // extensions (optional)
- tbs.value.push(pki$2.certificateExtensionsToAsn1(cert.extensions));
- }
-
- return tbs;
-};
-
-/**
- * Gets the ASN.1 CertificationRequestInfo part of a
- * PKCS#10 CertificationRequest.
- *
- * @param csr the certification request.
- *
- * @return the asn1 CertificationRequestInfo.
- */
-pki$2.getCertificationRequestInfo = function(csr) {
- // CertificationRequestInfo
- var cri = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // version
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.INTEGER, false,
- asn1$4.integerToDer(csr.version).getBytes()),
- // subject
- _dnToAsn1(csr.subject),
- // SubjectPublicKeyInfo
- pki$2.publicKeyToAsn1(csr.publicKey),
- // attributes
- _CRIAttributesToAsn1(csr)
- ]);
-
- return cri;
-};
-
-/**
- * Converts a DistinguishedName (subject or issuer) to an ASN.1 object.
- *
- * @param dn the DistinguishedName.
- *
- * @return the asn1 representation of a DistinguishedName.
- */
-pki$2.distinguishedNameToAsn1 = function(dn) {
- return _dnToAsn1(dn);
-};
-
-/**
- * Converts an X.509v3 RSA certificate to an ASN.1 object.
- *
- * @param cert the certificate.
- *
- * @return the asn1 representation of an X.509v3 RSA certificate.
- */
-pki$2.certificateToAsn1 = function(cert) {
- // prefer cached TBSCertificate over generating one
- var tbsCertificate = cert.tbsCertificate || pki$2.getTBSCertificate(cert);
-
- // Certificate
- return asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // TBSCertificate
- tbsCertificate,
- // AlgorithmIdentifier (signature algorithm)
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // algorithm
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(cert.signatureOid).getBytes()),
- // parameters
- _signatureParametersToAsn1(cert.signatureOid, cert.signatureParameters)
- ]),
- // SignatureValue
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.BITSTRING, false,
- String.fromCharCode(0x00) + cert.signature)
- ]);
-};
-
-/**
- * Converts X.509v3 certificate extensions to ASN.1.
- *
- * @param exts the extensions to convert.
- *
- * @return the extensions in ASN.1 format.
- */
-pki$2.certificateExtensionsToAsn1 = function(exts) {
- // create top-level extension container
- var rval = asn1$4.create(asn1$4.Class.CONTEXT_SPECIFIC, 3, true, []);
-
- // create extension sequence (stores a sequence for each extension)
- var seq = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
- rval.value.push(seq);
-
- for(var i = 0; i < exts.length; ++i) {
- seq.value.push(pki$2.certificateExtensionToAsn1(exts[i]));
- }
-
- return rval;
-};
-
-/**
- * Converts a single certificate extension to ASN.1.
- *
- * @param ext the extension to convert.
- *
- * @return the extension in ASN.1 format.
- */
-pki$2.certificateExtensionToAsn1 = function(ext) {
- // create a sequence for each extension
- var extseq = asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, []);
-
- // extnID (OID)
- extseq.value.push(asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(ext.id).getBytes()));
-
- // critical defaults to false
- if(ext.critical) {
- // critical BOOLEAN DEFAULT FALSE
- extseq.value.push(asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.BOOLEAN, false,
- String.fromCharCode(0xFF)));
- }
-
- var value = ext.value;
- if(typeof ext.value !== 'string') {
- // value is asn.1
- value = asn1$4.toDer(value).getBytes();
- }
-
- // extnValue (OCTET STRING)
- extseq.value.push(asn1$4.create(
- asn1$4.Class.UNIVERSAL, asn1$4.Type.OCTETSTRING, false, value));
-
- return extseq;
-};
-
-/**
- * Converts a PKCS#10 certification request to an ASN.1 object.
- *
- * @param csr the certification request.
- *
- * @return the asn1 representation of a certification request.
- */
-pki$2.certificationRequestToAsn1 = function(csr) {
- // prefer cached CertificationRequestInfo over generating one
- var cri = csr.certificationRequestInfo ||
- pki$2.getCertificationRequestInfo(csr);
-
- // Certificate
- return asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // CertificationRequestInfo
- cri,
- // AlgorithmIdentifier (signature algorithm)
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.SEQUENCE, true, [
- // algorithm
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.OID, false,
- asn1$4.oidToDer(csr.signatureOid).getBytes()),
- // parameters
- _signatureParametersToAsn1(csr.signatureOid, csr.signatureParameters)
- ]),
- // signature
- asn1$4.create(asn1$4.Class.UNIVERSAL, asn1$4.Type.BITSTRING, false,
- String.fromCharCode(0x00) + csr.signature)
- ]);
-};
-
-/**
- * Creates a CA store.
- *
- * @param certs an optional array of certificate objects or PEM-formatted
- * certificate strings to add to the CA store.
- *
- * @return the CA store.
- */
-pki$2.createCaStore = function(certs) {
- // create CA store
- var caStore = {
- // stored certificates
- certs: {}
- };
-
- /**
- * Gets the certificate that issued the passed certificate or its
- * 'parent'.
- *
- * @param cert the certificate to get the parent for.
- *
- * @return the parent certificate or null if none was found.
- */
- caStore.getIssuer = function(cert) {
- var rval = getBySubject(cert.issuer);
-
- // see if there are multiple matches
- /*if(forge.util.isArray(rval)) {
- // TODO: resolve multiple matches by checking
- // authorityKey/subjectKey/issuerUniqueID/other identifiers, etc.
- // FIXME: or alternatively do authority key mapping
- // if possible (X.509v1 certs can't work?)
- throw new Error('Resolving multiple issuer matches not implemented yet.');
- }*/
-
- return rval;
- };
-
- /**
- * Adds a trusted certificate to the store.
- *
- * @param cert the certificate to add as a trusted certificate (either a
- * pki.certificate object or a PEM-formatted certificate).
- */
- caStore.addCertificate = function(cert) {
- // convert from pem if necessary
- if(typeof cert === 'string') {
- cert = forge$e.pki.certificateFromPem(cert);
- }
-
- ensureSubjectHasHash(cert.subject);
-
- if(!caStore.hasCertificate(cert)) { // avoid duplicate certificates in store
- if(cert.subject.hash in caStore.certs) {
- // subject hash already exists, append to array
- var tmp = caStore.certs[cert.subject.hash];
- if(!forge$e.util.isArray(tmp)) {
- tmp = [tmp];
- }
- tmp.push(cert);
- caStore.certs[cert.subject.hash] = tmp;
- } else {
- caStore.certs[cert.subject.hash] = cert;
- }
- }
- };
-
- /**
- * Checks to see if the given certificate is in the store.
- *
- * @param cert the certificate to check (either a pki.certificate or a
- * PEM-formatted certificate).
- *
- * @return true if the certificate is in the store, false if not.
- */
- caStore.hasCertificate = function(cert) {
- // convert from pem if necessary
- if(typeof cert === 'string') {
- cert = forge$e.pki.certificateFromPem(cert);
- }
-
- var match = getBySubject(cert.subject);
- if(!match) {
- return false;
- }
- if(!forge$e.util.isArray(match)) {
- match = [match];
- }
- // compare DER-encoding of certificates
- var der1 = asn1$4.toDer(pki$2.certificateToAsn1(cert)).getBytes();
- for(var i = 0; i < match.length; ++i) {
- var der2 = asn1$4.toDer(pki$2.certificateToAsn1(match[i])).getBytes();
- if(der1 === der2) {
- return true;
- }
- }
- return false;
- };
-
- /**
- * Lists all of the certificates kept in the store.
- *
- * @return an array of all of the pki.certificate objects in the store.
- */
- caStore.listAllCertificates = function() {
- var certList = [];
-
- for(var hash in caStore.certs) {
- if(caStore.certs.hasOwnProperty(hash)) {
- var value = caStore.certs[hash];
- if(!forge$e.util.isArray(value)) {
- certList.push(value);
- } else {
- for(var i = 0; i < value.length; ++i) {
- certList.push(value[i]);
- }
- }
- }
- }
-
- return certList;
- };
-
- /**
- * Removes a certificate from the store.
- *
- * @param cert the certificate to remove (either a pki.certificate or a
- * PEM-formatted certificate).
- *
- * @return the certificate that was removed or null if the certificate
- * wasn't in store.
- */
- caStore.removeCertificate = function(cert) {
- var result;
-
- // convert from pem if necessary
- if(typeof cert === 'string') {
- cert = forge$e.pki.certificateFromPem(cert);
- }
- ensureSubjectHasHash(cert.subject);
- if(!caStore.hasCertificate(cert)) {
- return null;
- }
-
- var match = getBySubject(cert.subject);
-
- if(!forge$e.util.isArray(match)) {
- result = caStore.certs[cert.subject.hash];
- delete caStore.certs[cert.subject.hash];
- return result;
- }
-
- // compare DER-encoding of certificates
- var der1 = asn1$4.toDer(pki$2.certificateToAsn1(cert)).getBytes();
- for(var i = 0; i < match.length; ++i) {
- var der2 = asn1$4.toDer(pki$2.certificateToAsn1(match[i])).getBytes();
- if(der1 === der2) {
- result = match[i];
- match.splice(i, 1);
- }
- }
- if(match.length === 0) {
- delete caStore.certs[cert.subject.hash];
- }
-
- return result;
- };
-
- function getBySubject(subject) {
- ensureSubjectHasHash(subject);
- return caStore.certs[subject.hash] || null;
- }
-
- function ensureSubjectHasHash(subject) {
- // produce subject hash if it doesn't exist
- if(!subject.hash) {
- var md = forge$e.md.sha1.create();
- subject.attributes = pki$2.RDNAttributesAsArray(_dnToAsn1(subject), md);
- subject.hash = md.digest().toHex();
- }
- }
-
- // auto-add passed in certs
- if(certs) {
- // parse PEM-formatted certificates as necessary
- for(var i = 0; i < certs.length; ++i) {
- var cert = certs[i];
- caStore.addCertificate(cert);
- }
- }
-
- return caStore;
-};
-
-/**
- * Certificate verification errors, based on TLS.
- */
-pki$2.certificateError = {
- bad_certificate: 'forge.pki.BadCertificate',
- unsupported_certificate: 'forge.pki.UnsupportedCertificate',
- certificate_revoked: 'forge.pki.CertificateRevoked',
- certificate_expired: 'forge.pki.CertificateExpired',
- certificate_unknown: 'forge.pki.CertificateUnknown',
- unknown_ca: 'forge.pki.UnknownCertificateAuthority'
-};
-
-/**
- * Verifies a certificate chain against the given Certificate Authority store
- * with an optional custom verify callback.
- *
- * @param caStore a certificate store to verify against.
- * @param chain the certificate chain to verify, with the root or highest
- * authority at the end (an array of certificates).
- * @param options a callback to be called for every certificate in the chain or
- * an object with:
- * verify a callback to be called for every certificate in the
- * chain
- * validityCheckDate the date against which the certificate
- * validity period should be checked. Pass null to not check
- * the validity period. By default, the current date is used.
- *
- * The verify callback has the following signature:
- *
- * verified - Set to true if certificate was verified, otherwise the
- * pki.certificateError for why the certificate failed.
- * depth - The current index in the chain, where 0 is the end point's cert.
- * certs - The certificate chain, *NOTE* an empty chain indicates an anonymous
- * end point.
- *
- * The function returns true on success and on failure either the appropriate
- * pki.certificateError or an object with 'error' set to the appropriate
- * pki.certificateError and 'message' set to a custom error message.
- *
- * @return true if successful, error thrown if not.
- */
-pki$2.verifyCertificateChain = function(caStore, chain, options) {
- /* From: RFC3280 - Internet X.509 Public Key Infrastructure Certificate
- Section 6: Certification Path Validation
- See inline parentheticals related to this particular implementation.
-
- The primary goal of path validation is to verify the binding between
- a subject distinguished name or a subject alternative name and subject
- public key, as represented in the end entity certificate, based on the
- public key of the trust anchor. This requires obtaining a sequence of
- certificates that support that binding. That sequence should be provided
- in the passed 'chain'. The trust anchor should be in the given CA
- store. The 'end entity' certificate is the certificate provided by the
- end point (typically a server) and is the first in the chain.
-
- To meet this goal, the path validation process verifies, among other
- things, that a prospective certification path (a sequence of n
- certificates or a 'chain') satisfies the following conditions:
-
- (a) for all x in {1, ..., n-1}, the subject of certificate x is
- the issuer of certificate x+1;
-
- (b) certificate 1 is issued by the trust anchor;
-
- (c) certificate n is the certificate to be validated; and
-
- (d) for all x in {1, ..., n}, the certificate was valid at the
- time in question.
-
- Note that here 'n' is index 0 in the chain and 1 is the last certificate
- in the chain and it must be signed by a certificate in the connection's
- CA store.
-
- The path validation process also determines the set of certificate
- policies that are valid for this path, based on the certificate policies
- extension, policy mapping extension, policy constraints extension, and
- inhibit any-policy extension.
-
- Note: Policy mapping extension not supported (Not Required).
-
- Note: If the certificate has an unsupported critical extension, then it
- must be rejected.
-
- Note: A certificate is self-issued if the DNs that appear in the subject
- and issuer fields are identical and are not empty.
-
- The path validation algorithm assumes the following seven inputs are
- provided to the path processing logic. What this specific implementation
- will use is provided parenthetically:
-
- (a) a prospective certification path of length n (the 'chain')
- (b) the current date/time: ('now').
- (c) user-initial-policy-set: A set of certificate policy identifiers
- naming the policies that are acceptable to the certificate user.
- The user-initial-policy-set contains the special value any-policy
- if the user is not concerned about certificate policy
- (Not implemented. Any policy is accepted).
- (d) trust anchor information, describing a CA that serves as a trust
- anchor for the certification path. The trust anchor information
- includes:
-
- (1) the trusted issuer name,
- (2) the trusted public key algorithm,
- (3) the trusted public key, and
- (4) optionally, the trusted public key parameters associated
- with the public key.
-
- (Trust anchors are provided via certificates in the CA store).
-
- The trust anchor information may be provided to the path processing
- procedure in the form of a self-signed certificate. The trusted anchor
- information is trusted because it was delivered to the path processing
- procedure by some trustworthy out-of-band procedure. If the trusted
- public key algorithm requires parameters, then the parameters are
- provided along with the trusted public key (No parameters used in this
- implementation).
-
- (e) initial-policy-mapping-inhibit, which indicates if policy mapping is
- allowed in the certification path.
- (Not implemented, no policy checking)
-
- (f) initial-explicit-policy, which indicates if the path must be valid
- for at least one of the certificate policies in the user-initial-
- policy-set.
- (Not implemented, no policy checking)
-
- (g) initial-any-policy-inhibit, which indicates whether the
- anyPolicy OID should be processed if it is included in a
- certificate.
- (Not implemented, so any policy is valid provided that it is
- not marked as critical) */
-
- /* Basic Path Processing:
-
- For each certificate in the 'chain', the following is checked:
-
- 1. The certificate validity period includes the current time.
- 2. The certificate was signed by its parent (where the parent is either
- the next in the chain or from the CA store). Allow processing to
- continue to the next step if no parent is found but the certificate is
- in the CA store.
- 3. TODO: The certificate has not been revoked.
- 4. The certificate issuer name matches the parent's subject name.
- 5. TODO: If the certificate is self-issued and not the final certificate
- in the chain, skip this step, otherwise verify that the subject name
- is within one of the permitted subtrees of X.500 distinguished names
- and that each of the alternative names in the subjectAltName extension
- (critical or non-critical) is within one of the permitted subtrees for
- that name type.
- 6. TODO: If the certificate is self-issued and not the final certificate
- in the chain, skip this step, otherwise verify that the subject name
- is not within one of the excluded subtrees for X.500 distinguished
- names and none of the subjectAltName extension names are excluded for
- that name type.
- 7. The other steps in the algorithm for basic path processing involve
- handling the policy extension which is not presently supported in this
- implementation. Instead, if a critical policy extension is found, the
- certificate is rejected as not supported.
- 8. If the certificate is not the first or if its the only certificate in
- the chain (having no parent from the CA store or is self-signed) and it
- has a critical key usage extension, verify that the keyCertSign bit is
- set. If the key usage extension exists, verify that the basic
- constraints extension exists. If the basic constraints extension exists,
- verify that the cA flag is set. If pathLenConstraint is set, ensure that
- the number of certificates that precede in the chain (come earlier
- in the chain as implemented below), excluding the very first in the
- chain (typically the end-entity one), isn't greater than the
- pathLenConstraint. This constraint limits the number of intermediate
- CAs that may appear below a CA before only end-entity certificates
- may be issued. */
-
- // if a verify callback is passed as the third parameter, package it within
- // the options object. This is to support a legacy function signature that
- // expected the verify callback as the third parameter.
- if(typeof options === 'function') {
- options = {verify: options};
- }
- options = options || {};
-
- // copy cert chain references to another array to protect against changes
- // in verify callback
- chain = chain.slice(0);
- var certs = chain.slice(0);
-
- var validityCheckDate = options.validityCheckDate;
- // if no validityCheckDate is specified, default to the current date. Make
- // sure to maintain the value null because it indicates that the validity
- // period should not be checked.
- if(typeof validityCheckDate === 'undefined') {
- validityCheckDate = new Date();
- }
-
- // verify each cert in the chain using its parent, where the parent
- // is either the next in the chain or from the CA store
- var first = true;
- var error = null;
- var depth = 0;
- do {
- var cert = chain.shift();
- var parent = null;
- var selfSigned = false;
-
- if(validityCheckDate) {
- // 1. check valid time
- if(validityCheckDate < cert.validity.notBefore ||
- validityCheckDate > cert.validity.notAfter) {
- error = {
- message: 'Certificate is not valid yet or has expired.',
- error: pki$2.certificateError.certificate_expired,
- notBefore: cert.validity.notBefore,
- notAfter: cert.validity.notAfter,
- // TODO: we might want to reconsider renaming 'now' to
- // 'validityCheckDate' should this API be changed in the future.
- now: validityCheckDate
- };
- }
- }
-
- // 2. verify with parent from chain or CA store
- if(error === null) {
- parent = chain[0] || caStore.getIssuer(cert);
- if(parent === null) {
- // check for self-signed cert
- if(cert.isIssuer(cert)) {
- selfSigned = true;
- parent = cert;
- }
- }
-
- if(parent) {
- // FIXME: current CA store implementation might have multiple
- // certificates where the issuer can't be determined from the
- // certificate (happens rarely with, eg: old certificates) so normalize
- // by always putting parents into an array
- // TODO: there's may be an extreme degenerate case currently uncovered
- // where an old intermediate certificate seems to have a matching parent
- // but none of the parents actually verify ... but the intermediate
- // is in the CA and it should pass this check; needs investigation
- var parents = parent;
- if(!forge$e.util.isArray(parents)) {
- parents = [parents];
- }
-
- // try to verify with each possible parent (typically only one)
- var verified = false;
- while(!verified && parents.length > 0) {
- parent = parents.shift();
- try {
- verified = parent.verify(cert);
- } catch(ex) {
- // failure to verify, don't care why, try next one
- }
- }
-
- if(!verified) {
- error = {
- message: 'Certificate signature is invalid.',
- error: pki$2.certificateError.bad_certificate
- };
- }
- }
-
- if(error === null && (!parent || selfSigned) &&
- !caStore.hasCertificate(cert)) {
- // no parent issuer and certificate itself is not trusted
- error = {
- message: 'Certificate is not trusted.',
- error: pki$2.certificateError.unknown_ca
- };
- }
- }
-
- // TODO: 3. check revoked
-
- // 4. check for matching issuer/subject
- if(error === null && parent && !cert.isIssuer(parent)) {
- // parent is not issuer
- error = {
- message: 'Certificate issuer is invalid.',
- error: pki$2.certificateError.bad_certificate
- };
- }
-
- // 5. TODO: check names with permitted names tree
-
- // 6. TODO: check names against excluded names tree
-
- // 7. check for unsupported critical extensions
- if(error === null) {
- // supported extensions
- var se = {
- keyUsage: true,
- basicConstraints: true
- };
- for(var i = 0; error === null && i < cert.extensions.length; ++i) {
- var ext = cert.extensions[i];
- if(ext.critical && !(ext.name in se)) {
- error = {
- message:
- 'Certificate has an unsupported critical extension.',
- error: pki$2.certificateError.unsupported_certificate
- };
- }
- }
- }
-
- // 8. check for CA if cert is not first or is the only certificate
- // remaining in chain with no parent or is self-signed
- if(error === null &&
- (!first || (chain.length === 0 && (!parent || selfSigned)))) {
- // first check keyUsage extension and then basic constraints
- var bcExt = cert.getExtension('basicConstraints');
- var keyUsageExt = cert.getExtension('keyUsage');
- if(keyUsageExt !== null) {
- // keyCertSign must be true and there must be a basic
- // constraints extension
- if(!keyUsageExt.keyCertSign || bcExt === null) {
- // bad certificate
- error = {
- message:
- 'Certificate keyUsage or basicConstraints conflict ' +
- 'or indicate that the certificate is not a CA. ' +
- 'If the certificate is the only one in the chain or ' +
- 'isn\'t the first then the certificate must be a ' +
- 'valid CA.',
- error: pki$2.certificateError.bad_certificate
- };
- }
- }
- // basic constraints cA flag must be set
- if(error === null && bcExt !== null && !bcExt.cA) {
- // bad certificate
- error = {
- message:
- 'Certificate basicConstraints indicates the certificate ' +
- 'is not a CA.',
- error: pki$2.certificateError.bad_certificate
- };
- }
- // if error is not null and keyUsage is available, then we know it
- // has keyCertSign and there is a basic constraints extension too,
- // which means we can check pathLenConstraint (if it exists)
- if(error === null && keyUsageExt !== null &&
- 'pathLenConstraint' in bcExt) {
- // pathLen is the maximum # of intermediate CA certs that can be
- // found between the current certificate and the end-entity (depth 0)
- // certificate; this number does not include the end-entity (depth 0,
- // last in the chain) even if it happens to be a CA certificate itself
- var pathLen = depth - 1;
- if(pathLen > bcExt.pathLenConstraint) {
- // pathLenConstraint violated, bad certificate
- error = {
- message:
- 'Certificate basicConstraints pathLenConstraint violated.',
- error: pki$2.certificateError.bad_certificate
- };
- }
- }
- }
-
- // call application callback
- var vfd = (error === null) ? true : error.error;
- var ret = options.verify ? options.verify(vfd, depth, certs) : vfd;
- if(ret === true) {
- // clear any set error
- error = null;
- } else {
- // if passed basic tests, set default message and alert
- if(vfd === true) {
- error = {
- message: 'The application rejected the certificate.',
- error: pki$2.certificateError.bad_certificate
- };
- }
-
- // check for custom error info
- if(ret || ret === 0) {
- // set custom message and error
- if(typeof ret === 'object' && !forge$e.util.isArray(ret)) {
- if(ret.message) {
- error.message = ret.message;
- }
- if(ret.error) {
- error.error = ret.error;
- }
- } else if(typeof ret === 'string') {
- // set custom error
- error.error = ret;
- }
- }
-
- // throw error
- throw error;
- }
-
- // no longer first cert in chain
- first = false;
- ++depth;
- } while(chain.length > 0);
-
- return true;
-};
-
-/**
- * Javascript implementation of PKCS#12.
- *
- * @author Dave Longley
- * @author Stefan Siegl <stesie@brokenpipe.de>
- *
- * Copyright (c) 2010-2014 Digital Bazaar, Inc.
- * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
- *
- * The ASN.1 representation of PKCS#12 is as follows
- * (see ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12-tc1.pdf for details)
- *
- * PFX ::= SEQUENCE {
- * version INTEGER {v3(3)}(v3,...),
- * authSafe ContentInfo,
- * macData MacData OPTIONAL
- * }
- *
- * MacData ::= SEQUENCE {
- * mac DigestInfo,
- * macSalt OCTET STRING,
- * iterations INTEGER DEFAULT 1
- * }
- * Note: The iterations default is for historical reasons and its use is
- * deprecated. A higher value, like 1024, is recommended.
- *
- * DigestInfo is defined in PKCS#7 as follows:
- *
- * DigestInfo ::= SEQUENCE {
- * digestAlgorithm DigestAlgorithmIdentifier,
- * digest Digest
- * }
- *
- * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
- *
- * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters
- * for the algorithm, if any. In the case of SHA1 there is none.
- *
- * AlgorithmIdentifer ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL
- * }
- *
- * Digest ::= OCTET STRING
- *
- *
- * ContentInfo ::= SEQUENCE {
- * contentType ContentType,
- * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL
- * }
- *
- * ContentType ::= OBJECT IDENTIFIER
- *
- * AuthenticatedSafe ::= SEQUENCE OF ContentInfo
- * -- Data if unencrypted
- * -- EncryptedData if password-encrypted
- * -- EnvelopedData if public key-encrypted
- *
- *
- * SafeContents ::= SEQUENCE OF SafeBag
- *
- * SafeBag ::= SEQUENCE {
- * bagId BAG-TYPE.&id ({PKCS12BagSet})
- * bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}),
- * bagAttributes SET OF PKCS12Attribute OPTIONAL
- * }
- *
- * PKCS12Attribute ::= SEQUENCE {
- * attrId ATTRIBUTE.&id ({PKCS12AttrSet}),
- * attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId})
- * } -- This type is compatible with the X.500 type 'Attribute'
- *
- * PKCS12AttrSet ATTRIBUTE ::= {
- * friendlyName | -- from PKCS #9
- * localKeyId, -- from PKCS #9
- * ... -- Other attributes are allowed
- * }
- *
- * CertBag ::= SEQUENCE {
- * certId BAG-TYPE.&id ({CertTypes}),
- * certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId})
- * }
- *
- * x509Certificate BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {certTypes 1}}
- * -- DER-encoded X.509 certificate stored in OCTET STRING
- *
- * sdsiCertificate BAG-TYPE ::= {IA5String IDENTIFIED BY {certTypes 2}}
- * -- Base64-encoded SDSI certificate stored in IA5String
- *
- * CertTypes BAG-TYPE ::= {
- * x509Certificate |
- * sdsiCertificate,
- * ... -- For future extensions
- * }
- */
-
-var forge$d = forge$F;
-
-
-
-
-
-
-
-
-
-
-
-// shortcut for asn.1 & PKI API
-var asn1$3 = forge$d.asn1;
-var pki$1 = forge$d.pki;
-
-// shortcut for PKCS#12 API
-var p12 = forge$d.pkcs12 = forge$d.pkcs12 || {};
-
-var contentInfoValidator = {
- name: 'ContentInfo',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SEQUENCE, // a ContentInfo
- constructed: true,
- value: [{
- name: 'ContentInfo.contentType',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.OID,
- constructed: false,
- capture: 'contentType'
- }, {
- name: 'ContentInfo.content',
- tagClass: asn1$3.Class.CONTEXT_SPECIFIC,
- constructed: true,
- captureAsn1: 'content'
- }]
-};
-
-var pfxValidator = {
- name: 'PFX',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'PFX.version',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.INTEGER,
- constructed: false,
- capture: 'version'
- },
- contentInfoValidator, {
- name: 'PFX.macData',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SEQUENCE,
- constructed: true,
- optional: true,
- captureAsn1: 'mac',
- value: [{
- name: 'PFX.macData.mac',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SEQUENCE, // DigestInfo
- constructed: true,
- value: [{
- name: 'PFX.macData.mac.digestAlgorithm',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SEQUENCE, // DigestAlgorithmIdentifier
- constructed: true,
- value: [{
- name: 'PFX.macData.mac.digestAlgorithm.algorithm',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.OID,
- constructed: false,
- capture: 'macAlgorithm'
- }, {
- name: 'PFX.macData.mac.digestAlgorithm.parameters',
- tagClass: asn1$3.Class.UNIVERSAL,
- captureAsn1: 'macAlgorithmParameters'
- }]
- }, {
- name: 'PFX.macData.mac.digest',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.OCTETSTRING,
- constructed: false,
- capture: 'macDigest'
- }]
- }, {
- name: 'PFX.macData.macSalt',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.OCTETSTRING,
- constructed: false,
- capture: 'macSalt'
- }, {
- name: 'PFX.macData.iterations',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.INTEGER,
- constructed: false,
- optional: true,
- capture: 'macIterations'
- }]
- }]
-};
-
-var safeBagValidator = {
- name: 'SafeBag',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'SafeBag.bagId',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.OID,
- constructed: false,
- capture: 'bagId'
- }, {
- name: 'SafeBag.bagValue',
- tagClass: asn1$3.Class.CONTEXT_SPECIFIC,
- constructed: true,
- captureAsn1: 'bagValue'
- }, {
- name: 'SafeBag.bagAttributes',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SET,
- constructed: true,
- optional: true,
- capture: 'bagAttributes'
- }]
-};
-
-var attributeValidator = {
- name: 'Attribute',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'Attribute.attrId',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.OID,
- constructed: false,
- capture: 'oid'
- }, {
- name: 'Attribute.attrValues',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SET,
- constructed: true,
- capture: 'values'
- }]
-};
-
-var certBagValidator = {
- name: 'CertBag',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'CertBag.certId',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Type.OID,
- constructed: false,
- capture: 'certId'
- }, {
- name: 'CertBag.certValue',
- tagClass: asn1$3.Class.CONTEXT_SPECIFIC,
- constructed: true,
- /* So far we only support X.509 certificates (which are wrapped in
- an OCTET STRING, hence hard code that here). */
- value: [{
- name: 'CertBag.certValue[0]',
- tagClass: asn1$3.Class.UNIVERSAL,
- type: asn1$3.Class.OCTETSTRING,
- constructed: false,
- capture: 'cert'
- }]
- }]
-};
-
-/**
- * Search SafeContents structure for bags with matching attributes.
- *
- * The search can optionally be narrowed by a certain bag type.
- *
- * @param safeContents the SafeContents structure to search in.
- * @param attrName the name of the attribute to compare against.
- * @param attrValue the attribute value to search for.
- * @param [bagType] bag type to narrow search by.
- *
- * @return an array of matching bags.
- */
-function _getBagsByAttribute(safeContents, attrName, attrValue, bagType) {
- var result = [];
-
- for(var i = 0; i < safeContents.length; i++) {
- for(var j = 0; j < safeContents[i].safeBags.length; j++) {
- var bag = safeContents[i].safeBags[j];
- if(bagType !== undefined && bag.type !== bagType) {
- continue;
- }
- // only filter by bag type, no attribute specified
- if(attrName === null) {
- result.push(bag);
- continue;
- }
- if(bag.attributes[attrName] !== undefined &&
- bag.attributes[attrName].indexOf(attrValue) >= 0) {
- result.push(bag);
- }
- }
- }
-
- return result;
-}
-
-/**
- * Converts a PKCS#12 PFX in ASN.1 notation into a PFX object.
- *
- * @param obj The PKCS#12 PFX in ASN.1 notation.
- * @param strict true to use strict DER decoding, false not to (default: true).
- * @param {String} password Password to decrypt with (optional).
- *
- * @return PKCS#12 PFX object.
- */
-p12.pkcs12FromAsn1 = function(obj, strict, password) {
- // handle args
- if(typeof strict === 'string') {
- password = strict;
- strict = true;
- } else if(strict === undefined) {
- strict = true;
- }
-
- // validate PFX and capture data
- var capture = {};
- var errors = [];
- if(!asn1$3.validate(obj, pfxValidator, capture, errors)) {
- var error = new Error('Cannot read PKCS#12 PFX. ' +
- 'ASN.1 object is not an PKCS#12 PFX.');
- error.errors = error;
- throw error;
- }
-
- var pfx = {
- version: capture.version.charCodeAt(0),
- safeContents: [],
-
- /**
- * Gets bags with matching attributes.
- *
- * @param filter the attributes to filter by:
- * [localKeyId] the localKeyId to search for.
- * [localKeyIdHex] the localKeyId in hex to search for.
- * [friendlyName] the friendly name to search for.
- * [bagType] bag type to narrow each attribute search by.
- *
- * @return a map of attribute type to an array of matching bags or, if no
- * attribute was given but a bag type, the map key will be the
- * bag type.
- */
- getBags: function(filter) {
- var rval = {};
-
- var localKeyId;
- if('localKeyId' in filter) {
- localKeyId = filter.localKeyId;
- } else if('localKeyIdHex' in filter) {
- localKeyId = forge$d.util.hexToBytes(filter.localKeyIdHex);
- }
-
- // filter on bagType only
- if(localKeyId === undefined && !('friendlyName' in filter) &&
- 'bagType' in filter) {
- rval[filter.bagType] = _getBagsByAttribute(
- pfx.safeContents, null, null, filter.bagType);
- }
-
- if(localKeyId !== undefined) {
- rval.localKeyId = _getBagsByAttribute(
- pfx.safeContents, 'localKeyId',
- localKeyId, filter.bagType);
- }
- if('friendlyName' in filter) {
- rval.friendlyName = _getBagsByAttribute(
- pfx.safeContents, 'friendlyName',
- filter.friendlyName, filter.bagType);
- }
-
- return rval;
- },
-
- /**
- * DEPRECATED: use getBags() instead.
- *
- * Get bags with matching friendlyName attribute.
- *
- * @param friendlyName the friendly name to search for.
- * @param [bagType] bag type to narrow search by.
- *
- * @return an array of bags with matching friendlyName attribute.
- */
- getBagsByFriendlyName: function(friendlyName, bagType) {
- return _getBagsByAttribute(
- pfx.safeContents, 'friendlyName', friendlyName, bagType);
- },
-
- /**
- * DEPRECATED: use getBags() instead.
- *
- * Get bags with matching localKeyId attribute.
- *
- * @param localKeyId the localKeyId to search for.
- * @param [bagType] bag type to narrow search by.
- *
- * @return an array of bags with matching localKeyId attribute.
- */
- getBagsByLocalKeyId: function(localKeyId, bagType) {
- return _getBagsByAttribute(
- pfx.safeContents, 'localKeyId', localKeyId, bagType);
- }
- };
-
- if(capture.version.charCodeAt(0) !== 3) {
- var error = new Error('PKCS#12 PFX of version other than 3 not supported.');
- error.version = capture.version.charCodeAt(0);
- throw error;
- }
-
- if(asn1$3.derToOid(capture.contentType) !== pki$1.oids.data) {
- var error = new Error('Only PKCS#12 PFX in password integrity mode supported.');
- error.oid = asn1$3.derToOid(capture.contentType);
- throw error;
- }
-
- var data = capture.content.value[0];
- if(data.tagClass !== asn1$3.Class.UNIVERSAL ||
- data.type !== asn1$3.Type.OCTETSTRING) {
- throw new Error('PKCS#12 authSafe content data is not an OCTET STRING.');
- }
- data = _decodePkcs7Data(data);
-
- // check for MAC
- if(capture.mac) {
- var md = null;
- var macKeyBytes = 0;
- var macAlgorithm = asn1$3.derToOid(capture.macAlgorithm);
- switch(macAlgorithm) {
- case pki$1.oids.sha1:
- md = forge$d.md.sha1.create();
- macKeyBytes = 20;
- break;
- case pki$1.oids.sha256:
- md = forge$d.md.sha256.create();
- macKeyBytes = 32;
- break;
- case pki$1.oids.sha384:
- md = forge$d.md.sha384.create();
- macKeyBytes = 48;
- break;
- case pki$1.oids.sha512:
- md = forge$d.md.sha512.create();
- macKeyBytes = 64;
- break;
- case pki$1.oids.md5:
- md = forge$d.md.md5.create();
- macKeyBytes = 16;
- break;
- }
- if(md === null) {
- throw new Error('PKCS#12 uses unsupported MAC algorithm: ' + macAlgorithm);
- }
-
- // verify MAC (iterations default to 1)
- var macSalt = new forge$d.util.ByteBuffer(capture.macSalt);
- var macIterations = (('macIterations' in capture) ?
- parseInt(forge$d.util.bytesToHex(capture.macIterations), 16) : 1);
- var macKey = p12.generateKey(
- password, macSalt, 3, macIterations, macKeyBytes, md);
- var mac = forge$d.hmac.create();
- mac.start(md, macKey);
- mac.update(data.value);
- var macValue = mac.getMac();
- if(macValue.getBytes() !== capture.macDigest) {
- throw new Error('PKCS#12 MAC could not be verified. Invalid password?');
- }
- }
-
- _decodeAuthenticatedSafe(pfx, data.value, strict, password);
- return pfx;
-};
-
-/**
- * Decodes PKCS#7 Data. PKCS#7 (RFC 2315) defines "Data" as an OCTET STRING,
- * but it is sometimes an OCTET STRING that is composed/constructed of chunks,
- * each its own OCTET STRING. This is BER-encoding vs. DER-encoding. This
- * function transforms this corner-case into the usual simple,
- * non-composed/constructed OCTET STRING.
- *
- * This function may be moved to ASN.1 at some point to better deal with
- * more BER-encoding issues, should they arise.
- *
- * @param data the ASN.1 Data object to transform.
- */
-function _decodePkcs7Data(data) {
- // handle special case of "chunked" data content: an octet string composed
- // of other octet strings
- if(data.composed || data.constructed) {
- var value = forge$d.util.createBuffer();
- for(var i = 0; i < data.value.length; ++i) {
- value.putBytes(data.value[i].value);
- }
- data.composed = data.constructed = false;
- data.value = value.getBytes();
- }
- return data;
-}
-
-/**
- * Decode PKCS#12 AuthenticatedSafe (BER encoded) into PFX object.
- *
- * The AuthenticatedSafe is a BER-encoded SEQUENCE OF ContentInfo.
- *
- * @param pfx The PKCS#12 PFX object to fill.
- * @param {String} authSafe BER-encoded AuthenticatedSafe.
- * @param strict true to use strict DER decoding, false not to.
- * @param {String} password Password to decrypt with (optional).
- */
-function _decodeAuthenticatedSafe(pfx, authSafe, strict, password) {
- authSafe = asn1$3.fromDer(authSafe, strict); /* actually it's BER encoded */
-
- if(authSafe.tagClass !== asn1$3.Class.UNIVERSAL ||
- authSafe.type !== asn1$3.Type.SEQUENCE ||
- authSafe.constructed !== true) {
- throw new Error('PKCS#12 AuthenticatedSafe expected to be a ' +
- 'SEQUENCE OF ContentInfo');
- }
-
- for(var i = 0; i < authSafe.value.length; i++) {
- var contentInfo = authSafe.value[i];
-
- // validate contentInfo and capture data
- var capture = {};
- var errors = [];
- if(!asn1$3.validate(contentInfo, contentInfoValidator, capture, errors)) {
- var error = new Error('Cannot read ContentInfo.');
- error.errors = errors;
- throw error;
- }
-
- var obj = {
- encrypted: false
- };
- var safeContents = null;
- var data = capture.content.value[0];
- switch(asn1$3.derToOid(capture.contentType)) {
- case pki$1.oids.data:
- if(data.tagClass !== asn1$3.Class.UNIVERSAL ||
- data.type !== asn1$3.Type.OCTETSTRING) {
- throw new Error('PKCS#12 SafeContents Data is not an OCTET STRING.');
- }
- safeContents = _decodePkcs7Data(data).value;
- break;
- case pki$1.oids.encryptedData:
- safeContents = _decryptSafeContents(data, password);
- obj.encrypted = true;
- break;
- default:
- var error = new Error('Unsupported PKCS#12 contentType.');
- error.contentType = asn1$3.derToOid(capture.contentType);
- throw error;
- }
-
- obj.safeBags = _decodeSafeContents(safeContents, strict, password);
- pfx.safeContents.push(obj);
- }
-}
-
-/**
- * Decrypt PKCS#7 EncryptedData structure.
- *
- * @param data ASN.1 encoded EncryptedContentInfo object.
- * @param password The user-provided password.
- *
- * @return The decrypted SafeContents (ASN.1 object).
- */
-function _decryptSafeContents(data, password) {
- var capture = {};
- var errors = [];
- if(!asn1$3.validate(
- data, forge$d.pkcs7.asn1.encryptedDataValidator, capture, errors)) {
- var error = new Error('Cannot read EncryptedContentInfo.');
- error.errors = errors;
- throw error;
- }
-
- var oid = asn1$3.derToOid(capture.contentType);
- if(oid !== pki$1.oids.data) {
- var error = new Error(
- 'PKCS#12 EncryptedContentInfo ContentType is not Data.');
- error.oid = oid;
- throw error;
- }
-
- // get cipher
- oid = asn1$3.derToOid(capture.encAlgorithm);
- var cipher = pki$1.pbe.getCipher(oid, capture.encParameter, password);
-
- // get encrypted data
- var encryptedContentAsn1 = _decodePkcs7Data(capture.encryptedContentAsn1);
- var encrypted = forge$d.util.createBuffer(encryptedContentAsn1.value);
-
- cipher.update(encrypted);
- if(!cipher.finish()) {
- throw new Error('Failed to decrypt PKCS#12 SafeContents.');
- }
-
- return cipher.output.getBytes();
-}
-
-/**
- * Decode PKCS#12 SafeContents (BER-encoded) into array of Bag objects.
- *
- * The safeContents is a BER-encoded SEQUENCE OF SafeBag.
- *
- * @param {String} safeContents BER-encoded safeContents.
- * @param strict true to use strict DER decoding, false not to.
- * @param {String} password Password to decrypt with (optional).
- *
- * @return {Array} Array of Bag objects.
- */
-function _decodeSafeContents(safeContents, strict, password) {
- // if strict and no safe contents, return empty safes
- if(!strict && safeContents.length === 0) {
- return [];
- }
-
- // actually it's BER-encoded
- safeContents = asn1$3.fromDer(safeContents, strict);
-
- if(safeContents.tagClass !== asn1$3.Class.UNIVERSAL ||
- safeContents.type !== asn1$3.Type.SEQUENCE ||
- safeContents.constructed !== true) {
- throw new Error(
- 'PKCS#12 SafeContents expected to be a SEQUENCE OF SafeBag.');
- }
-
- var res = [];
- for(var i = 0; i < safeContents.value.length; i++) {
- var safeBag = safeContents.value[i];
-
- // validate SafeBag and capture data
- var capture = {};
- var errors = [];
- if(!asn1$3.validate(safeBag, safeBagValidator, capture, errors)) {
- var error = new Error('Cannot read SafeBag.');
- error.errors = errors;
- throw error;
- }
-
- /* Create bag object and push to result array. */
- var bag = {
- type: asn1$3.derToOid(capture.bagId),
- attributes: _decodeBagAttributes(capture.bagAttributes)
- };
- res.push(bag);
-
- var validator, decoder;
- var bagAsn1 = capture.bagValue.value[0];
- switch(bag.type) {
- case pki$1.oids.pkcs8ShroudedKeyBag:
- /* bagAsn1 has a EncryptedPrivateKeyInfo, which we need to decrypt.
- Afterwards we can handle it like a keyBag,
- which is a PrivateKeyInfo. */
- bagAsn1 = pki$1.decryptPrivateKeyInfo(bagAsn1, password);
- if(bagAsn1 === null) {
- throw new Error(
- 'Unable to decrypt PKCS#8 ShroudedKeyBag, wrong password?');
- }
-
- /* fall through */
- case pki$1.oids.keyBag:
- /* A PKCS#12 keyBag is a simple PrivateKeyInfo as understood by our
- PKI module, hence we don't have to do validation/capturing here,
- just pass what we already got. */
- try {
- bag.key = pki$1.privateKeyFromAsn1(bagAsn1);
- } catch(e) {
- // ignore unknown key type, pass asn1 value
- bag.key = null;
- bag.asn1 = bagAsn1;
- }
- continue; /* Nothing more to do. */
-
- case pki$1.oids.certBag:
- /* A PKCS#12 certBag can wrap both X.509 and sdsi certificates.
- Therefore put the SafeBag content through another validator to
- capture the fields. Afterwards check & store the results. */
- validator = certBagValidator;
- decoder = function() {
- if(asn1$3.derToOid(capture.certId) !== pki$1.oids.x509Certificate) {
- var error = new Error(
- 'Unsupported certificate type, only X.509 supported.');
- error.oid = asn1$3.derToOid(capture.certId);
- throw error;
- }
-
- // true=produce cert hash
- var certAsn1 = asn1$3.fromDer(capture.cert, strict);
- try {
- bag.cert = pki$1.certificateFromAsn1(certAsn1, true);
- } catch(e) {
- // ignore unknown cert type, pass asn1 value
- bag.cert = null;
- bag.asn1 = certAsn1;
- }
- };
- break;
-
- default:
- var error = new Error('Unsupported PKCS#12 SafeBag type.');
- error.oid = bag.type;
- throw error;
- }
-
- /* Validate SafeBag value (i.e. CertBag, etc.) and capture data if needed. */
- if(validator !== undefined &&
- !asn1$3.validate(bagAsn1, validator, capture, errors)) {
- var error = new Error('Cannot read PKCS#12 ' + validator.name);
- error.errors = errors;
- throw error;
- }
-
- /* Call decoder function from above to store the results. */
- decoder();
- }
-
- return res;
-}
-
-/**
- * Decode PKCS#12 SET OF PKCS12Attribute into JavaScript object.
- *
- * @param attributes SET OF PKCS12Attribute (ASN.1 object).
- *
- * @return the decoded attributes.
- */
-function _decodeBagAttributes(attributes) {
- var decodedAttrs = {};
-
- if(attributes !== undefined) {
- for(var i = 0; i < attributes.length; ++i) {
- var capture = {};
- var errors = [];
- if(!asn1$3.validate(attributes[i], attributeValidator, capture, errors)) {
- var error = new Error('Cannot read PKCS#12 BagAttribute.');
- error.errors = errors;
- throw error;
- }
-
- var oid = asn1$3.derToOid(capture.oid);
- if(pki$1.oids[oid] === undefined) {
- // unsupported attribute type, ignore.
- continue;
- }
-
- decodedAttrs[pki$1.oids[oid]] = [];
- for(var j = 0; j < capture.values.length; ++j) {
- decodedAttrs[pki$1.oids[oid]].push(capture.values[j].value);
- }
- }
- }
-
- return decodedAttrs;
-}
-
-/**
- * Wraps a private key and certificate in a PKCS#12 PFX wrapper. If a
- * password is provided then the private key will be encrypted.
- *
- * An entire certificate chain may also be included. To do this, pass
- * an array for the "cert" parameter where the first certificate is
- * the one that is paired with the private key and each subsequent one
- * verifies the previous one. The certificates may be in PEM format or
- * have been already parsed by Forge.
- *
- * @todo implement password-based-encryption for the whole package
- *
- * @param key the private key.
- * @param cert the certificate (may be an array of certificates in order
- * to specify a certificate chain).
- * @param password the password to use, null for none.
- * @param options:
- * algorithm the encryption algorithm to use
- * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.
- * count the iteration count to use.
- * saltSize the salt size to use.
- * useMac true to include a MAC, false not to, defaults to true.
- * localKeyId the local key ID to use, in hex.
- * friendlyName the friendly name to use.
- * generateLocalKeyId true to generate a random local key ID,
- * false not to, defaults to true.
- *
- * @return the PKCS#12 PFX ASN.1 object.
- */
-p12.toPkcs12Asn1 = function(key, cert, password, options) {
- // set default options
- options = options || {};
- options.saltSize = options.saltSize || 8;
- options.count = options.count || 2048;
- options.algorithm = options.algorithm || options.encAlgorithm || 'aes128';
- if(!('useMac' in options)) {
- options.useMac = true;
- }
- if(!('localKeyId' in options)) {
- options.localKeyId = null;
- }
- if(!('generateLocalKeyId' in options)) {
- options.generateLocalKeyId = true;
- }
-
- var localKeyId = options.localKeyId;
- var bagAttrs;
- if(localKeyId !== null) {
- localKeyId = forge$d.util.hexToBytes(localKeyId);
- } else if(options.generateLocalKeyId) {
- // use SHA-1 of paired cert, if available
- if(cert) {
- var pairedCert = forge$d.util.isArray(cert) ? cert[0] : cert;
- if(typeof pairedCert === 'string') {
- pairedCert = pki$1.certificateFromPem(pairedCert);
- }
- var sha1 = forge$d.md.sha1.create();
- sha1.update(asn1$3.toDer(pki$1.certificateToAsn1(pairedCert)).getBytes());
- localKeyId = sha1.digest().getBytes();
- } else {
- // FIXME: consider using SHA-1 of public key (which can be generated
- // from private key components), see: cert.generateSubjectKeyIdentifier
- // generate random bytes
- localKeyId = forge$d.random.getBytes(20);
- }
- }
-
- var attrs = [];
- if(localKeyId !== null) {
- attrs.push(
- // localKeyID
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // attrId
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- asn1$3.oidToDer(pki$1.oids.localKeyId).getBytes()),
- // attrValues
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SET, true, [
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OCTETSTRING, false,
- localKeyId)
- ])
- ]));
- }
- if('friendlyName' in options) {
- attrs.push(
- // friendlyName
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // attrId
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- asn1$3.oidToDer(pki$1.oids.friendlyName).getBytes()),
- // attrValues
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SET, true, [
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.BMPSTRING, false,
- options.friendlyName)
- ])
- ]));
- }
-
- if(attrs.length > 0) {
- bagAttrs = asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SET, true, attrs);
- }
-
- // collect contents for AuthenticatedSafe
- var contents = [];
-
- // create safe bag(s) for certificate chain
- var chain = [];
- if(cert !== null) {
- if(forge$d.util.isArray(cert)) {
- chain = cert;
- } else {
- chain = [cert];
- }
- }
-
- var certSafeBags = [];
- for(var i = 0; i < chain.length; ++i) {
- // convert cert from PEM as necessary
- cert = chain[i];
- if(typeof cert === 'string') {
- cert = pki$1.certificateFromPem(cert);
- }
-
- // SafeBag
- var certBagAttrs = (i === 0) ? bagAttrs : undefined;
- var certAsn1 = pki$1.certificateToAsn1(cert);
- var certSafeBag =
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // bagId
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- asn1$3.oidToDer(pki$1.oids.certBag).getBytes()),
- // bagValue
- asn1$3.create(asn1$3.Class.CONTEXT_SPECIFIC, 0, true, [
- // CertBag
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // certId
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- asn1$3.oidToDer(pki$1.oids.x509Certificate).getBytes()),
- // certValue (x509Certificate)
- asn1$3.create(asn1$3.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1$3.create(
- asn1$3.Class.UNIVERSAL, asn1$3.Type.OCTETSTRING, false,
- asn1$3.toDer(certAsn1).getBytes())
- ])])]),
- // bagAttributes (OPTIONAL)
- certBagAttrs
- ]);
- certSafeBags.push(certSafeBag);
- }
-
- if(certSafeBags.length > 0) {
- // SafeContents
- var certSafeContents = asn1$3.create(
- asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, certSafeBags);
-
- // ContentInfo
- var certCI =
- // PKCS#7 ContentInfo
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // contentType
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- // OID for the content type is 'data'
- asn1$3.oidToDer(pki$1.oids.data).getBytes()),
- // content
- asn1$3.create(asn1$3.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1$3.create(
- asn1$3.Class.UNIVERSAL, asn1$3.Type.OCTETSTRING, false,
- asn1$3.toDer(certSafeContents).getBytes())
- ])
- ]);
- contents.push(certCI);
- }
-
- // create safe contents for private key
- var keyBag = null;
- if(key !== null) {
- // SafeBag
- var pkAsn1 = pki$1.wrapRsaPrivateKey(pki$1.privateKeyToAsn1(key));
- if(password === null) {
- // no encryption
- keyBag = asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // bagId
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- asn1$3.oidToDer(pki$1.oids.keyBag).getBytes()),
- // bagValue
- asn1$3.create(asn1$3.Class.CONTEXT_SPECIFIC, 0, true, [
- // PrivateKeyInfo
- pkAsn1
- ]),
- // bagAttributes (OPTIONAL)
- bagAttrs
- ]);
- } else {
- // encrypted PrivateKeyInfo
- keyBag = asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // bagId
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- asn1$3.oidToDer(pki$1.oids.pkcs8ShroudedKeyBag).getBytes()),
- // bagValue
- asn1$3.create(asn1$3.Class.CONTEXT_SPECIFIC, 0, true, [
- // EncryptedPrivateKeyInfo
- pki$1.encryptPrivateKeyInfo(pkAsn1, password, options)
- ]),
- // bagAttributes (OPTIONAL)
- bagAttrs
- ]);
- }
-
- // SafeContents
- var keySafeContents =
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [keyBag]);
-
- // ContentInfo
- var keyCI =
- // PKCS#7 ContentInfo
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // contentType
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- // OID for the content type is 'data'
- asn1$3.oidToDer(pki$1.oids.data).getBytes()),
- // content
- asn1$3.create(asn1$3.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1$3.create(
- asn1$3.Class.UNIVERSAL, asn1$3.Type.OCTETSTRING, false,
- asn1$3.toDer(keySafeContents).getBytes())
- ])
- ]);
- contents.push(keyCI);
- }
-
- // create AuthenticatedSafe by stringing together the contents
- var safe = asn1$3.create(
- asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, contents);
-
- var macData;
- if(options.useMac) {
- // MacData
- var sha1 = forge$d.md.sha1.create();
- var macSalt = new forge$d.util.ByteBuffer(
- forge$d.random.getBytes(options.saltSize));
- var count = options.count;
- // 160-bit key
- var key = p12.generateKey(password, macSalt, 3, count, 20);
- var mac = forge$d.hmac.create();
- mac.start(sha1, key);
- mac.update(asn1$3.toDer(safe).getBytes());
- var macValue = mac.getMac();
- macData = asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // mac DigestInfo
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // digestAlgorithm
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // algorithm = SHA-1
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- asn1$3.oidToDer(pki$1.oids.sha1).getBytes()),
- // parameters = Null
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.NULL, false, '')
- ]),
- // digest
- asn1$3.create(
- asn1$3.Class.UNIVERSAL, asn1$3.Type.OCTETSTRING,
- false, macValue.getBytes())
- ]),
- // macSalt OCTET STRING
- asn1$3.create(
- asn1$3.Class.UNIVERSAL, asn1$3.Type.OCTETSTRING, false, macSalt.getBytes()),
- // iterations INTEGER (XXX: Only support count < 65536)
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.INTEGER, false,
- asn1$3.integerToDer(count).getBytes()
- )
- ]);
- }
-
- // PFX
- return asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // version (3)
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.INTEGER, false,
- asn1$3.integerToDer(3).getBytes()),
- // PKCS#7 ContentInfo
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.SEQUENCE, true, [
- // contentType
- asn1$3.create(asn1$3.Class.UNIVERSAL, asn1$3.Type.OID, false,
- // OID for the content type is 'data'
- asn1$3.oidToDer(pki$1.oids.data).getBytes()),
- // content
- asn1$3.create(asn1$3.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1$3.create(
- asn1$3.Class.UNIVERSAL, asn1$3.Type.OCTETSTRING, false,
- asn1$3.toDer(safe).getBytes())
- ])
- ]),
- macData
- ]);
-};
-
-/**
- * Derives a PKCS#12 key.
- *
- * @param password the password to derive the key material from, null or
- * undefined for none.
- * @param salt the salt, as a ByteBuffer, to use.
- * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).
- * @param iter the iteration count.
- * @param n the number of bytes to derive from the password.
- * @param md the message digest to use, defaults to SHA-1.
- *
- * @return a ByteBuffer with the bytes derived from the password.
- */
-p12.generateKey = forge$d.pbe.generatePkcs12Key;
-
-/**
- * Javascript implementation of a basic Public Key Infrastructure, including
- * support for RSA public and private keys.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2010-2013 Digital Bazaar, Inc.
- */
-
-var forge$c = forge$F;
-
-
-
-
-
-
-
-
-
-
-
-// shortcut for asn.1 API
-var asn1$2 = forge$c.asn1;
-
-/* Public Key Infrastructure (PKI) implementation. */
-var pki = forge$c.pki = forge$c.pki || {};
-
-/**
- * NOTE: THIS METHOD IS DEPRECATED. Use pem.decode() instead.
- *
- * Converts PEM-formatted data to DER.
- *
- * @param pem the PEM-formatted data.
- *
- * @return the DER-formatted data.
- */
-pki.pemToDer = function(pem) {
- var msg = forge$c.pem.decode(pem)[0];
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- throw new Error('Could not convert PEM to DER; PEM is encrypted.');
- }
- return forge$c.util.createBuffer(msg.body);
-};
-
-/**
- * Converts an RSA private key from PEM format.
- *
- * @param pem the PEM-formatted private key.
- *
- * @return the private key.
- */
-pki.privateKeyFromPem = function(pem) {
- var msg = forge$c.pem.decode(pem)[0];
-
- if(msg.type !== 'PRIVATE KEY' && msg.type !== 'RSA PRIVATE KEY') {
- var error = new Error('Could not convert private key from PEM; PEM ' +
- 'header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".');
- error.headerType = msg.type;
- throw error;
- }
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- throw new Error('Could not convert private key from PEM; PEM is encrypted.');
- }
-
- // convert DER to ASN.1 object
- var obj = asn1$2.fromDer(msg.body);
-
- return pki.privateKeyFromAsn1(obj);
-};
-
-/**
- * Converts an RSA private key to PEM format.
- *
- * @param key the private key.
- * @param maxline the maximum characters per line, defaults to 64.
- *
- * @return the PEM-formatted private key.
- */
-pki.privateKeyToPem = function(key, maxline) {
- // convert to ASN.1, then DER, then PEM-encode
- var msg = {
- type: 'RSA PRIVATE KEY',
- body: asn1$2.toDer(pki.privateKeyToAsn1(key)).getBytes()
- };
- return forge$c.pem.encode(msg, {maxline: maxline});
-};
-
-/**
- * Converts a PrivateKeyInfo to PEM format.
- *
- * @param pki the PrivateKeyInfo.
- * @param maxline the maximum characters per line, defaults to 64.
- *
- * @return the PEM-formatted private key.
- */
-pki.privateKeyInfoToPem = function(pki, maxline) {
- // convert to DER, then PEM-encode
- var msg = {
- type: 'PRIVATE KEY',
- body: asn1$2.toDer(pki).getBytes()
- };
- return forge$c.pem.encode(msg, {maxline: maxline});
-};
-
-/**
- * A Javascript implementation of Transport Layer Security (TLS).
- *
- * @author Dave Longley
- *
- * Copyright (c) 2009-2014 Digital Bazaar, Inc.
- *
- * The TLS Handshake Protocol involves the following steps:
- *
- * - Exchange hello messages to agree on algorithms, exchange random values,
- * and check for session resumption.
- *
- * - Exchange the necessary cryptographic parameters to allow the client and
- * server to agree on a premaster secret.
- *
- * - Exchange certificates and cryptographic information to allow the client
- * and server to authenticate themselves.
- *
- * - Generate a master secret from the premaster secret and exchanged random
- * values.
- *
- * - Provide security parameters to the record layer.
- *
- * - Allow the client and server to verify that their peer has calculated the
- * same security parameters and that the handshake occurred without tampering
- * by an attacker.
- *
- * Up to 4 different messages may be sent during a key exchange. The server
- * certificate, the server key exchange, the client certificate, and the
- * client key exchange.
- *
- * A typical handshake (from the client's perspective).
- *
- * 1. Client sends ClientHello.
- * 2. Client receives ServerHello.
- * 3. Client receives optional Certificate.
- * 4. Client receives optional ServerKeyExchange.
- * 5. Client receives ServerHelloDone.
- * 6. Client sends optional Certificate.
- * 7. Client sends ClientKeyExchange.
- * 8. Client sends optional CertificateVerify.
- * 9. Client sends ChangeCipherSpec.
- * 10. Client sends Finished.
- * 11. Client receives ChangeCipherSpec.
- * 12. Client receives Finished.
- * 13. Client sends/receives application data.
- *
- * To reuse an existing session:
- *
- * 1. Client sends ClientHello with session ID for reuse.
- * 2. Client receives ServerHello with same session ID if reusing.
- * 3. Client receives ChangeCipherSpec message if reusing.
- * 4. Client receives Finished.
- * 5. Client sends ChangeCipherSpec.
- * 6. Client sends Finished.
- *
- * Note: Client ignores HelloRequest if in the middle of a handshake.
- *
- * Record Layer:
- *
- * The record layer fragments information blocks into TLSPlaintext records
- * carrying data in chunks of 2^14 bytes or less. Client message boundaries are
- * not preserved in the record layer (i.e., multiple client messages of the
- * same ContentType MAY be coalesced into a single TLSPlaintext record, or a
- * single message MAY be fragmented across several records).
- *
- * struct {
- * uint8 major;
- * uint8 minor;
- * } ProtocolVersion;
- *
- * struct {
- * ContentType type;
- * ProtocolVersion version;
- * uint16 length;
- * opaque fragment[TLSPlaintext.length];
- * } TLSPlaintext;
- *
- * type:
- * The higher-level protocol used to process the enclosed fragment.
- *
- * version:
- * The version of the protocol being employed. TLS Version 1.2 uses version
- * {3, 3}. TLS Version 1.0 uses version {3, 1}. Note that a client that
- * supports multiple versions of TLS may not know what version will be
- * employed before it receives the ServerHello.
- *
- * length:
- * The length (in bytes) of the following TLSPlaintext.fragment. The length
- * MUST NOT exceed 2^14 = 16384 bytes.
- *
- * fragment:
- * The application data. This data is transparent and treated as an
- * independent block to be dealt with by the higher-level protocol specified
- * by the type field.
- *
- * Implementations MUST NOT send zero-length fragments of Handshake, Alert, or
- * ChangeCipherSpec content types. Zero-length fragments of Application data
- * MAY be sent as they are potentially useful as a traffic analysis
- * countermeasure.
- *
- * Note: Data of different TLS record layer content types MAY be interleaved.
- * Application data is generally of lower precedence for transmission than
- * other content types. However, records MUST be delivered to the network in
- * the same order as they are protected by the record layer. Recipients MUST
- * receive and process interleaved application layer traffic during handshakes
- * subsequent to the first one on a connection.
- *
- * struct {
- * ContentType type; // same as TLSPlaintext.type
- * ProtocolVersion version;// same as TLSPlaintext.version
- * uint16 length;
- * opaque fragment[TLSCompressed.length];
- * } TLSCompressed;
- *
- * length:
- * The length (in bytes) of the following TLSCompressed.fragment.
- * The length MUST NOT exceed 2^14 + 1024.
- *
- * fragment:
- * The compressed form of TLSPlaintext.fragment.
- *
- * Note: A CompressionMethod.null operation is an identity operation; no fields
- * are altered. In this implementation, since no compression is supported,
- * uncompressed records are always the same as compressed records.
- *
- * Encryption Information:
- *
- * The encryption and MAC functions translate a TLSCompressed structure into a
- * TLSCiphertext. The decryption functions reverse the process. The MAC of the
- * record also includes a sequence number so that missing, extra, or repeated
- * messages are detectable.
- *
- * struct {
- * ContentType type;
- * ProtocolVersion version;
- * uint16 length;
- * select (SecurityParameters.cipher_type) {
- * case stream: GenericStreamCipher;
- * case block: GenericBlockCipher;
- * case aead: GenericAEADCipher;
- * } fragment;
- * } TLSCiphertext;
- *
- * type:
- * The type field is identical to TLSCompressed.type.
- *
- * version:
- * The version field is identical to TLSCompressed.version.
- *
- * length:
- * The length (in bytes) of the following TLSCiphertext.fragment.
- * The length MUST NOT exceed 2^14 + 2048.
- *
- * fragment:
- * The encrypted form of TLSCompressed.fragment, with the MAC.
- *
- * Note: Only CBC Block Ciphers are supported by this implementation.
- *
- * The TLSCompressed.fragment structures are converted to/from block
- * TLSCiphertext.fragment structures.
- *
- * struct {
- * opaque IV[SecurityParameters.record_iv_length];
- * block-ciphered struct {
- * opaque content[TLSCompressed.length];
- * opaque MAC[SecurityParameters.mac_length];
- * uint8 padding[GenericBlockCipher.padding_length];
- * uint8 padding_length;
- * };
- * } GenericBlockCipher;
- *
- * The MAC is generated as described in Section 6.2.3.1.
- *
- * IV:
- * The Initialization Vector (IV) SHOULD be chosen at random, and MUST be
- * unpredictable. Note that in versions of TLS prior to 1.1, there was no
- * IV field, and the last ciphertext block of the previous record (the "CBC
- * residue") was used as the IV. This was changed to prevent the attacks
- * described in [CBCATT]. For block ciphers, the IV length is of length
- * SecurityParameters.record_iv_length, which is equal to the
- * SecurityParameters.block_size.
- *
- * padding:
- * Padding that is added to force the length of the plaintext to be an
- * integral multiple of the block cipher's block length. The padding MAY be
- * any length up to 255 bytes, as long as it results in the
- * TLSCiphertext.length being an integral multiple of the block length.
- * Lengths longer than necessary might be desirable to frustrate attacks on
- * a protocol that are based on analysis of the lengths of exchanged
- * messages. Each uint8 in the padding data vector MUST be filled with the
- * padding length value. The receiver MUST check this padding and MUST use
- * the bad_record_mac alert to indicate padding errors.
- *
- * padding_length:
- * The padding length MUST be such that the total size of the
- * GenericBlockCipher structure is a multiple of the cipher's block length.
- * Legal values range from zero to 255, inclusive. This length specifies the
- * length of the padding field exclusive of the padding_length field itself.
- *
- * The encrypted data length (TLSCiphertext.length) is one more than the sum of
- * SecurityParameters.block_length, TLSCompressed.length,
- * SecurityParameters.mac_length, and padding_length.
- *
- * Example: If the block length is 8 bytes, the content length
- * (TLSCompressed.length) is 61 bytes, and the MAC length is 20 bytes, then the
- * length before padding is 82 bytes (this does not include the IV. Thus, the
- * padding length modulo 8 must be equal to 6 in order to make the total length
- * an even multiple of 8 bytes (the block length). The padding length can be
- * 6, 14, 22, and so on, through 254. If the padding length were the minimum
- * necessary, 6, the padding would be 6 bytes, each containing the value 6.
- * Thus, the last 8 octets of the GenericBlockCipher before block encryption
- * would be xx 06 06 06 06 06 06 06, where xx is the last octet of the MAC.
- *
- * Note: With block ciphers in CBC mode (Cipher Block Chaining), it is critical
- * that the entire plaintext of the record be known before any ciphertext is
- * transmitted. Otherwise, it is possible for the attacker to mount the attack
- * described in [CBCATT].
- *
- * Implementation note: Canvel et al. [CBCTIME] have demonstrated a timing
- * attack on CBC padding based on the time required to compute the MAC. In
- * order to defend against this attack, implementations MUST ensure that
- * record processing time is essentially the same whether or not the padding
- * is correct. In general, the best way to do this is to compute the MAC even
- * if the padding is incorrect, and only then reject the packet. For instance,
- * if the pad appears to be incorrect, the implementation might assume a
- * zero-length pad and then compute the MAC. This leaves a small timing
- * channel, since MAC performance depends, to some extent, on the size of the
- * data fragment, but it is not believed to be large enough to be exploitable,
- * due to the large block size of existing MACs and the small size of the
- * timing signal.
- */
-
-var forge$b = forge$F;
-
-
-
-
-
-
-
-
-
-/**
- * Generates pseudo random bytes by mixing the result of two hash functions,
- * MD5 and SHA-1.
- *
- * prf_TLS1(secret, label, seed) =
- * P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed);
- *
- * Each P_hash function functions as follows:
- *
- * P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +
- * HMAC_hash(secret, A(2) + seed) +
- * HMAC_hash(secret, A(3) + seed) + ...
- * A() is defined as:
- * A(0) = seed
- * A(i) = HMAC_hash(secret, A(i-1))
- *
- * The '+' operator denotes concatenation.
- *
- * As many iterations A(N) as are needed are performed to generate enough
- * pseudo random byte output. If an iteration creates more data than is
- * necessary, then it is truncated.
- *
- * Therefore:
- * A(1) = HMAC_hash(secret, A(0))
- * = HMAC_hash(secret, seed)
- * A(2) = HMAC_hash(secret, A(1))
- * = HMAC_hash(secret, HMAC_hash(secret, seed))
- *
- * Therefore:
- * P_hash(secret, seed) =
- * HMAC_hash(secret, HMAC_hash(secret, A(0)) + seed) +
- * HMAC_hash(secret, HMAC_hash(secret, A(1)) + seed) +
- * ...
- *
- * Therefore:
- * P_hash(secret, seed) =
- * HMAC_hash(secret, HMAC_hash(secret, seed) + seed) +
- * HMAC_hash(secret, HMAC_hash(secret, HMAC_hash(secret, seed)) + seed) +
- * ...
- *
- * @param secret the secret to use.
- * @param label the label to use.
- * @param seed the seed value to use.
- * @param length the number of bytes to generate.
- *
- * @return the pseudo random bytes in a byte buffer.
- */
-var prf_TLS1 = function(secret, label, seed, length) {
- var rval = forge$b.util.createBuffer();
-
- /* For TLS 1.0, the secret is split in half, into two secrets of equal
- length. If the secret has an odd length then the last byte of the first
- half will be the same as the first byte of the second. The length of the
- two secrets is half of the secret rounded up. */
- var idx = (secret.length >> 1);
- var slen = idx + (secret.length & 1);
- var s1 = secret.substr(0, slen);
- var s2 = secret.substr(idx, slen);
- var ai = forge$b.util.createBuffer();
- var hmac = forge$b.hmac.create();
- seed = label + seed;
-
- // determine the number of iterations that must be performed to generate
- // enough output bytes, md5 creates 16 byte hashes, sha1 creates 20
- var md5itr = Math.ceil(length / 16);
- var sha1itr = Math.ceil(length / 20);
-
- // do md5 iterations
- hmac.start('MD5', s1);
- var md5bytes = forge$b.util.createBuffer();
- ai.putBytes(seed);
- for(var i = 0; i < md5itr; ++i) {
- // HMAC_hash(secret, A(i-1))
- hmac.start(null, null);
- hmac.update(ai.getBytes());
- ai.putBuffer(hmac.digest());
-
- // HMAC_hash(secret, A(i) + seed)
- hmac.start(null, null);
- hmac.update(ai.bytes() + seed);
- md5bytes.putBuffer(hmac.digest());
- }
-
- // do sha1 iterations
- hmac.start('SHA1', s2);
- var sha1bytes = forge$b.util.createBuffer();
- ai.clear();
- ai.putBytes(seed);
- for(var i = 0; i < sha1itr; ++i) {
- // HMAC_hash(secret, A(i-1))
- hmac.start(null, null);
- hmac.update(ai.getBytes());
- ai.putBuffer(hmac.digest());
-
- // HMAC_hash(secret, A(i) + seed)
- hmac.start(null, null);
- hmac.update(ai.bytes() + seed);
- sha1bytes.putBuffer(hmac.digest());
- }
-
- // XOR the md5 bytes with the sha1 bytes
- rval.putBytes(forge$b.util.xorBytes(
- md5bytes.getBytes(), sha1bytes.getBytes(), length));
-
- return rval;
-};
-
-/**
- * Gets a MAC for a record using the SHA-1 hash algorithm.
- *
- * @param key the mac key.
- * @param state the sequence number (array of two 32-bit integers).
- * @param record the record.
- *
- * @return the sha-1 hash (20 bytes) for the given record.
- */
-var hmac_sha1 = function(key, seqNum, record) {
- /* MAC is computed like so:
- HMAC_hash(
- key, seqNum +
- TLSCompressed.type +
- TLSCompressed.version +
- TLSCompressed.length +
- TLSCompressed.fragment)
- */
- var hmac = forge$b.hmac.create();
- hmac.start('SHA1', key);
- var b = forge$b.util.createBuffer();
- b.putInt32(seqNum[0]);
- b.putInt32(seqNum[1]);
- b.putByte(record.type);
- b.putByte(record.version.major);
- b.putByte(record.version.minor);
- b.putInt16(record.length);
- b.putBytes(record.fragment.bytes());
- hmac.update(b.getBytes());
- return hmac.digest().getBytes();
-};
-
-/**
- * Compresses the TLSPlaintext record into a TLSCompressed record using the
- * deflate algorithm.
- *
- * @param c the TLS connection.
- * @param record the TLSPlaintext record to compress.
- * @param s the ConnectionState to use.
- *
- * @return true on success, false on failure.
- */
-var deflate = function(c, record, s) {
- var rval = false;
-
- try {
- var bytes = c.deflate(record.fragment.getBytes());
- record.fragment = forge$b.util.createBuffer(bytes);
- record.length = bytes.length;
- rval = true;
- } catch(ex) {
- // deflate error, fail out
- }
-
- return rval;
-};
-
-/**
- * Decompresses the TLSCompressed record into a TLSPlaintext record using the
- * deflate algorithm.
- *
- * @param c the TLS connection.
- * @param record the TLSCompressed record to decompress.
- * @param s the ConnectionState to use.
- *
- * @return true on success, false on failure.
- */
-var inflate = function(c, record, s) {
- var rval = false;
-
- try {
- var bytes = c.inflate(record.fragment.getBytes());
- record.fragment = forge$b.util.createBuffer(bytes);
- record.length = bytes.length;
- rval = true;
- } catch(ex) {
- // inflate error, fail out
- }
-
- return rval;
-};
-
-/**
- * Reads a TLS variable-length vector from a byte buffer.
- *
- * Variable-length vectors are defined by specifying a subrange of legal
- * lengths, inclusively, using the notation <floor..ceiling>. When these are
- * encoded, the actual length precedes the vector's contents in the byte
- * stream. The length will be in the form of a number consuming as many bytes
- * as required to hold the vector's specified maximum (ceiling) length. A
- * variable-length vector with an actual length field of zero is referred to
- * as an empty vector.
- *
- * @param b the byte buffer.
- * @param lenBytes the number of bytes required to store the length.
- *
- * @return the resulting byte buffer.
- */
-var readVector = function(b, lenBytes) {
- var len = 0;
- switch(lenBytes) {
- case 1:
- len = b.getByte();
- break;
- case 2:
- len = b.getInt16();
- break;
- case 3:
- len = b.getInt24();
- break;
- case 4:
- len = b.getInt32();
- break;
- }
-
- // read vector bytes into a new buffer
- return forge$b.util.createBuffer(b.getBytes(len));
-};
-
-/**
- * Writes a TLS variable-length vector to a byte buffer.
- *
- * @param b the byte buffer.
- * @param lenBytes the number of bytes required to store the length.
- * @param v the byte buffer vector.
- */
-var writeVector = function(b, lenBytes, v) {
- // encode length at the start of the vector, where the number of bytes for
- // the length is the maximum number of bytes it would take to encode the
- // vector's ceiling
- b.putInt(v.length(), lenBytes << 3);
- b.putBuffer(v);
-};
-
-/**
- * The tls implementation.
- */
-var tls$1 = {};
-
-/**
- * Version: TLS 1.2 = 3.3, TLS 1.1 = 3.2, TLS 1.0 = 3.1. Both TLS 1.1 and
- * TLS 1.2 were still too new (ie: openSSL didn't implement them) at the time
- * of this implementation so TLS 1.0 was implemented instead.
- */
-tls$1.Versions = {
- TLS_1_0: {major: 3, minor: 1},
- TLS_1_1: {major: 3, minor: 2},
- TLS_1_2: {major: 3, minor: 3}
-};
-tls$1.SupportedVersions = [
- tls$1.Versions.TLS_1_1,
- tls$1.Versions.TLS_1_0
-];
-tls$1.Version = tls$1.SupportedVersions[0];
-
-/**
- * Maximum fragment size. True maximum is 16384, but we fragment before that
- * to allow for unusual small increases during compression.
- */
-tls$1.MaxFragment = 16384 - 1024;
-
-/**
- * Whether this entity is considered the "client" or "server".
- * enum { server, client } ConnectionEnd;
- */
-tls$1.ConnectionEnd = {
- server: 0,
- client: 1
-};
-
-/**
- * Pseudo-random function algorithm used to generate keys from the master
- * secret.
- * enum { tls_prf_sha256 } PRFAlgorithm;
- */
-tls$1.PRFAlgorithm = {
- tls_prf_sha256: 0
-};
-
-/**
- * Bulk encryption algorithms.
- * enum { null, rc4, des3, aes } BulkCipherAlgorithm;
- */
-tls$1.BulkCipherAlgorithm = {
- none: null,
- rc4: 0,
- des3: 1,
- aes: 2
-};
-
-/**
- * Cipher types.
- * enum { stream, block, aead } CipherType;
- */
-tls$1.CipherType = {
- stream: 0,
- block: 1,
- aead: 2
-};
-
-/**
- * MAC (Message Authentication Code) algorithms.
- * enum { null, hmac_md5, hmac_sha1, hmac_sha256,
- * hmac_sha384, hmac_sha512} MACAlgorithm;
- */
-tls$1.MACAlgorithm = {
- none: null,
- hmac_md5: 0,
- hmac_sha1: 1,
- hmac_sha256: 2,
- hmac_sha384: 3,
- hmac_sha512: 4
-};
-
-/**
- * Compression algorithms.
- * enum { null(0), deflate(1), (255) } CompressionMethod;
- */
-tls$1.CompressionMethod = {
- none: 0,
- deflate: 1
-};
-
-/**
- * TLS record content types.
- * enum {
- * change_cipher_spec(20), alert(21), handshake(22),
- * application_data(23), (255)
- * } ContentType;
- */
-tls$1.ContentType = {
- change_cipher_spec: 20,
- alert: 21,
- handshake: 22,
- application_data: 23,
- heartbeat: 24
-};
-
-/**
- * TLS handshake types.
- * enum {
- * hello_request(0), client_hello(1), server_hello(2),
- * certificate(11), server_key_exchange (12),
- * certificate_request(13), server_hello_done(14),
- * certificate_verify(15), client_key_exchange(16),
- * finished(20), (255)
- * } HandshakeType;
- */
-tls$1.HandshakeType = {
- hello_request: 0,
- client_hello: 1,
- server_hello: 2,
- certificate: 11,
- server_key_exchange: 12,
- certificate_request: 13,
- server_hello_done: 14,
- certificate_verify: 15,
- client_key_exchange: 16,
- finished: 20
-};
-
-/**
- * TLS Alert Protocol.
- *
- * enum { warning(1), fatal(2), (255) } AlertLevel;
- *
- * enum {
- * close_notify(0),
- * unexpected_message(10),
- * bad_record_mac(20),
- * decryption_failed(21),
- * record_overflow(22),
- * decompression_failure(30),
- * handshake_failure(40),
- * bad_certificate(42),
- * unsupported_certificate(43),
- * certificate_revoked(44),
- * certificate_expired(45),
- * certificate_unknown(46),
- * illegal_parameter(47),
- * unknown_ca(48),
- * access_denied(49),
- * decode_error(50),
- * decrypt_error(51),
- * export_restriction(60),
- * protocol_version(70),
- * insufficient_security(71),
- * internal_error(80),
- * user_canceled(90),
- * no_renegotiation(100),
- * (255)
- * } AlertDescription;
- *
- * struct {
- * AlertLevel level;
- * AlertDescription description;
- * } Alert;
- */
-tls$1.Alert = {};
-tls$1.Alert.Level = {
- warning: 1,
- fatal: 2
-};
-tls$1.Alert.Description = {
- close_notify: 0,
- unexpected_message: 10,
- bad_record_mac: 20,
- decryption_failed: 21,
- record_overflow: 22,
- decompression_failure: 30,
- handshake_failure: 40,
- bad_certificate: 42,
- unsupported_certificate: 43,
- certificate_revoked: 44,
- certificate_expired: 45,
- certificate_unknown: 46,
- illegal_parameter: 47,
- unknown_ca: 48,
- access_denied: 49,
- decode_error: 50,
- decrypt_error: 51,
- export_restriction: 60,
- protocol_version: 70,
- insufficient_security: 71,
- internal_error: 80,
- user_canceled: 90,
- no_renegotiation: 100
-};
-
-/**
- * TLS Heartbeat Message types.
- * enum {
- * heartbeat_request(1),
- * heartbeat_response(2),
- * (255)
- * } HeartbeatMessageType;
- */
-tls$1.HeartbeatMessageType = {
- heartbeat_request: 1,
- heartbeat_response: 2
-};
-
-/**
- * Supported cipher suites.
- */
-tls$1.CipherSuites = {};
-
-/**
- * Gets a supported cipher suite from its 2 byte ID.
- *
- * @param twoBytes two bytes in a string.
- *
- * @return the matching supported cipher suite or null.
- */
-tls$1.getCipherSuite = function(twoBytes) {
- var rval = null;
- for(var key in tls$1.CipherSuites) {
- var cs = tls$1.CipherSuites[key];
- if(cs.id[0] === twoBytes.charCodeAt(0) &&
- cs.id[1] === twoBytes.charCodeAt(1)) {
- rval = cs;
- break;
- }
- }
- return rval;
-};
-
-/**
- * Called when an unexpected record is encountered.
- *
- * @param c the connection.
- * @param record the record.
- */
-tls$1.handleUnexpected = function(c, record) {
- // if connection is client and closed, ignore unexpected messages
- var ignore = (!c.open && c.entity === tls$1.ConnectionEnd.client);
- if(!ignore) {
- c.error(c, {
- message: 'Unexpected message. Received TLS record out of order.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.unexpected_message
- }
- });
- }
-};
-
-/**
- * Called when a client receives a HelloRequest record.
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleHelloRequest = function(c, record, length) {
- // ignore renegotiation requests from the server during a handshake, but
- // if handshaking, send a warning alert that renegotation is denied
- if(!c.handshaking && c.handshakes > 0) {
- // send alert warning
- tls$1.queue(c, tls$1.createAlert(c, {
- level: tls$1.Alert.Level.warning,
- description: tls$1.Alert.Description.no_renegotiation
- }));
- tls$1.flush(c);
- }
-
- // continue
- c.process();
-};
-
-/**
- * Parses a hello message from a ClientHello or ServerHello record.
- *
- * @param record the record to parse.
- *
- * @return the parsed message.
- */
-tls$1.parseHelloMessage = function(c, record, length) {
- var msg = null;
-
- var client = (c.entity === tls$1.ConnectionEnd.client);
-
- // minimum of 38 bytes in message
- if(length < 38) {
- c.error(c, {
- message: client ?
- 'Invalid ServerHello message. Message too short.' :
- 'Invalid ClientHello message. Message too short.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.illegal_parameter
- }
- });
- } else {
- // use 'remaining' to calculate # of remaining bytes in the message
- var b = record.fragment;
- var remaining = b.length();
- msg = {
- version: {
- major: b.getByte(),
- minor: b.getByte()
- },
- random: forge$b.util.createBuffer(b.getBytes(32)),
- session_id: readVector(b, 1),
- extensions: []
- };
- if(client) {
- msg.cipher_suite = b.getBytes(2);
- msg.compression_method = b.getByte();
- } else {
- msg.cipher_suites = readVector(b, 2);
- msg.compression_methods = readVector(b, 1);
- }
-
- // read extensions if there are any bytes left in the message
- remaining = length - (remaining - b.length());
- if(remaining > 0) {
- // parse extensions
- var exts = readVector(b, 2);
- while(exts.length() > 0) {
- msg.extensions.push({
- type: [exts.getByte(), exts.getByte()],
- data: readVector(exts, 2)
- });
- }
-
- // TODO: make extension support modular
- if(!client) {
- for(var i = 0; i < msg.extensions.length; ++i) {
- var ext = msg.extensions[i];
-
- // support SNI extension
- if(ext.type[0] === 0x00 && ext.type[1] === 0x00) {
- // get server name list
- var snl = readVector(ext.data, 2);
- while(snl.length() > 0) {
- // read server name type
- var snType = snl.getByte();
-
- // only HostName type (0x00) is known, break out if
- // another type is detected
- if(snType !== 0x00) {
- break;
- }
-
- // add host name to server name list
- c.session.extensions.server_name.serverNameList.push(
- readVector(snl, 2).getBytes());
- }
- }
- }
- }
- }
-
- // version already set, do not allow version change
- if(c.session.version) {
- if(msg.version.major !== c.session.version.major ||
- msg.version.minor !== c.session.version.minor) {
- return c.error(c, {
- message: 'TLS version change is disallowed during renegotiation.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.protocol_version
- }
- });
- }
- }
-
- // get the chosen (ServerHello) cipher suite
- if(client) {
- // FIXME: should be checking configured acceptable cipher suites
- c.session.cipherSuite = tls$1.getCipherSuite(msg.cipher_suite);
- } else {
- // get a supported preferred (ClientHello) cipher suite
- // choose the first supported cipher suite
- var tmp = forge$b.util.createBuffer(msg.cipher_suites.bytes());
- while(tmp.length() > 0) {
- // FIXME: should be checking configured acceptable suites
- // cipher suites take up 2 bytes
- c.session.cipherSuite = tls$1.getCipherSuite(tmp.getBytes(2));
- if(c.session.cipherSuite !== null) {
- break;
- }
- }
- }
-
- // cipher suite not supported
- if(c.session.cipherSuite === null) {
- return c.error(c, {
- message: 'No cipher suites in common.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.handshake_failure
- },
- cipherSuite: forge$b.util.bytesToHex(msg.cipher_suite)
- });
- }
-
- // TODO: handle compression methods
- if(client) {
- c.session.compressionMethod = msg.compression_method;
- } else {
- // no compression
- c.session.compressionMethod = tls$1.CompressionMethod.none;
- }
- }
-
- return msg;
-};
-
-/**
- * Creates security parameters for the given connection based on the given
- * hello message.
- *
- * @param c the TLS connection.
- * @param msg the hello message.
- */
-tls$1.createSecurityParameters = function(c, msg) {
- /* Note: security params are from TLS 1.2, some values like prf_algorithm
- are ignored for TLS 1.0/1.1 and the builtin as specified in the spec is
- used. */
-
- // TODO: handle other options from server when more supported
-
- // get client and server randoms
- var client = (c.entity === tls$1.ConnectionEnd.client);
- var msgRandom = msg.random.bytes();
- var cRandom = client ? c.session.sp.client_random : msgRandom;
- var sRandom = client ? msgRandom : tls$1.createRandom().getBytes();
-
- // create new security parameters
- c.session.sp = {
- entity: c.entity,
- prf_algorithm: tls$1.PRFAlgorithm.tls_prf_sha256,
- bulk_cipher_algorithm: null,
- cipher_type: null,
- enc_key_length: null,
- block_length: null,
- fixed_iv_length: null,
- record_iv_length: null,
- mac_algorithm: null,
- mac_length: null,
- mac_key_length: null,
- compression_algorithm: c.session.compressionMethod,
- pre_master_secret: null,
- master_secret: null,
- client_random: cRandom,
- server_random: sRandom
- };
-};
-
-/**
- * Called when a client receives a ServerHello record.
- *
- * When a ServerHello message will be sent:
- * The server will send this message in response to a client hello message
- * when it was able to find an acceptable set of algorithms. If it cannot
- * find such a match, it will respond with a handshake failure alert.
- *
- * uint24 length;
- * struct {
- * ProtocolVersion server_version;
- * Random random;
- * SessionID session_id;
- * CipherSuite cipher_suite;
- * CompressionMethod compression_method;
- * select(extensions_present) {
- * case false:
- * struct {};
- * case true:
- * Extension extensions<0..2^16-1>;
- * };
- * } ServerHello;
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleServerHello = function(c, record, length) {
- var msg = tls$1.parseHelloMessage(c, record, length);
- if(c.fail) {
- return;
- }
-
- // ensure server version is compatible
- if(msg.version.minor <= c.version.minor) {
- c.version.minor = msg.version.minor;
- } else {
- return c.error(c, {
- message: 'Incompatible TLS version.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.protocol_version
- }
- });
- }
-
- // indicate session version has been set
- c.session.version = c.version;
-
- // get the session ID from the message
- var sessionId = msg.session_id.bytes();
-
- // if the session ID is not blank and matches the cached one, resume
- // the session
- if(sessionId.length > 0 && sessionId === c.session.id) {
- // resuming session, expect a ChangeCipherSpec next
- c.expect = SCC;
- c.session.resuming = true;
-
- // get new server random
- c.session.sp.server_random = msg.random.bytes();
- } else {
- // not resuming, expect a server Certificate message next
- c.expect = SCE;
- c.session.resuming = false;
-
- // create new security parameters
- tls$1.createSecurityParameters(c, msg);
- }
-
- // set new session ID
- c.session.id = sessionId;
-
- // continue
- c.process();
-};
-
-/**
- * Called when a server receives a ClientHello record.
- *
- * When a ClientHello message will be sent:
- * When a client first connects to a server it is required to send the
- * client hello as its first message. The client can also send a client
- * hello in response to a hello request or on its own initiative in order
- * to renegotiate the security parameters in an existing connection.
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleClientHello = function(c, record, length) {
- var msg = tls$1.parseHelloMessage(c, record, length);
- if(c.fail) {
- return;
- }
-
- // get the session ID from the message
- var sessionId = msg.session_id.bytes();
-
- // see if the given session ID is in the cache
- var session = null;
- if(c.sessionCache) {
- session = c.sessionCache.getSession(sessionId);
- if(session === null) {
- // session ID not found
- sessionId = '';
- } else if(session.version.major !== msg.version.major ||
- session.version.minor > msg.version.minor) {
- // if session version is incompatible with client version, do not resume
- session = null;
- sessionId = '';
- }
- }
-
- // no session found to resume, generate a new session ID
- if(sessionId.length === 0) {
- sessionId = forge$b.random.getBytes(32);
- }
-
- // update session
- c.session.id = sessionId;
- c.session.clientHelloVersion = msg.version;
- c.session.sp = {};
- if(session) {
- // use version and security parameters from resumed session
- c.version = c.session.version = session.version;
- c.session.sp = session.sp;
- } else {
- // use highest compatible minor version
- var version;
- for(var i = 1; i < tls$1.SupportedVersions.length; ++i) {
- version = tls$1.SupportedVersions[i];
- if(version.minor <= msg.version.minor) {
- break;
- }
- }
- c.version = {major: version.major, minor: version.minor};
- c.session.version = c.version;
- }
-
- // if a session is set, resume it
- if(session !== null) {
- // resuming session, expect a ChangeCipherSpec next
- c.expect = CCC;
- c.session.resuming = true;
-
- // get new client random
- c.session.sp.client_random = msg.random.bytes();
- } else {
- // not resuming, expect a Certificate or ClientKeyExchange
- c.expect = (c.verifyClient !== false) ? CCE : CKE;
- c.session.resuming = false;
-
- // create new security parameters
- tls$1.createSecurityParameters(c, msg);
- }
-
- // connection now open
- c.open = true;
-
- // queue server hello
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createServerHello(c)
- }));
-
- if(c.session.resuming) {
- // queue change cipher spec message
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.change_cipher_spec,
- data: tls$1.createChangeCipherSpec()
- }));
-
- // create pending state
- c.state.pending = tls$1.createConnectionState(c);
-
- // change current write state to pending write state
- c.state.current.write = c.state.pending.write;
-
- // queue finished
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createFinished(c)
- }));
- } else {
- // queue server certificate
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createCertificate(c)
- }));
-
- if(!c.fail) {
- // queue server key exchange
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createServerKeyExchange(c)
- }));
-
- // request client certificate if set
- if(c.verifyClient !== false) {
- // queue certificate request
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createCertificateRequest(c)
- }));
- }
-
- // queue server hello done
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createServerHelloDone(c)
- }));
- }
- }
-
- // send records
- tls$1.flush(c);
-
- // continue
- c.process();
-};
-
-/**
- * Called when a client receives a Certificate record.
- *
- * When this message will be sent:
- * The server must send a certificate whenever the agreed-upon key exchange
- * method is not an anonymous one. This message will always immediately
- * follow the server hello message.
- *
- * Meaning of this message:
- * The certificate type must be appropriate for the selected cipher suite's
- * key exchange algorithm, and is generally an X.509v3 certificate. It must
- * contain a key which matches the key exchange method, as follows. Unless
- * otherwise specified, the signing algorithm for the certificate must be
- * the same as the algorithm for the certificate key. Unless otherwise
- * specified, the public key may be of any length.
- *
- * opaque ASN.1Cert<1..2^24-1>;
- * struct {
- * ASN.1Cert certificate_list<1..2^24-1>;
- * } Certificate;
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleCertificate = function(c, record, length) {
- // minimum of 3 bytes in message
- if(length < 3) {
- return c.error(c, {
- message: 'Invalid Certificate message. Message too short.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.illegal_parameter
- }
- });
- }
-
- var b = record.fragment;
- var msg = {
- certificate_list: readVector(b, 3)
- };
-
- /* The sender's certificate will be first in the list (chain), each
- subsequent one that follows will certify the previous one, but root
- certificates (self-signed) that specify the certificate authority may
- be omitted under the assumption that clients must already possess it. */
- var cert, asn1;
- var certs = [];
- try {
- while(msg.certificate_list.length() > 0) {
- // each entry in msg.certificate_list is a vector with 3 len bytes
- cert = readVector(msg.certificate_list, 3);
- asn1 = forge$b.asn1.fromDer(cert);
- cert = forge$b.pki.certificateFromAsn1(asn1, true);
- certs.push(cert);
- }
- } catch(ex) {
- return c.error(c, {
- message: 'Could not parse certificate list.',
- cause: ex,
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.bad_certificate
- }
- });
- }
-
- // ensure at least 1 certificate was provided if in client-mode
- // or if verifyClient was set to true to require a certificate
- // (as opposed to 'optional')
- var client = (c.entity === tls$1.ConnectionEnd.client);
- if((client || c.verifyClient === true) && certs.length === 0) {
- // error, no certificate
- c.error(c, {
- message: client ?
- 'No server certificate provided.' :
- 'No client certificate provided.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.illegal_parameter
- }
- });
- } else if(certs.length === 0) {
- // no certs to verify
- // expect a ServerKeyExchange or ClientKeyExchange message next
- c.expect = client ? SKE : CKE;
- } else {
- // save certificate in session
- if(client) {
- c.session.serverCertificate = certs[0];
- } else {
- c.session.clientCertificate = certs[0];
- }
-
- if(tls$1.verifyCertificateChain(c, certs)) {
- // expect a ServerKeyExchange or ClientKeyExchange message next
- c.expect = client ? SKE : CKE;
- }
- }
-
- // continue
- c.process();
-};
-
-/**
- * Called when a client receives a ServerKeyExchange record.
- *
- * When this message will be sent:
- * This message will be sent immediately after the server certificate
- * message (or the server hello message, if this is an anonymous
- * negotiation).
- *
- * The server key exchange message is sent by the server only when the
- * server certificate message (if sent) does not contain enough data to
- * allow the client to exchange a premaster secret.
- *
- * Meaning of this message:
- * This message conveys cryptographic information to allow the client to
- * communicate the premaster secret: either an RSA public key to encrypt
- * the premaster secret with, or a Diffie-Hellman public key with which the
- * client can complete a key exchange (with the result being the premaster
- * secret.)
- *
- * enum {
- * dhe_dss, dhe_rsa, dh_anon, rsa, dh_dss, dh_rsa
- * } KeyExchangeAlgorithm;
- *
- * struct {
- * opaque dh_p<1..2^16-1>;
- * opaque dh_g<1..2^16-1>;
- * opaque dh_Ys<1..2^16-1>;
- * } ServerDHParams;
- *
- * struct {
- * select(KeyExchangeAlgorithm) {
- * case dh_anon:
- * ServerDHParams params;
- * case dhe_dss:
- * case dhe_rsa:
- * ServerDHParams params;
- * digitally-signed struct {
- * opaque client_random[32];
- * opaque server_random[32];
- * ServerDHParams params;
- * } signed_params;
- * case rsa:
- * case dh_dss:
- * case dh_rsa:
- * struct {};
- * };
- * } ServerKeyExchange;
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleServerKeyExchange = function(c, record, length) {
- // this implementation only supports RSA, no Diffie-Hellman support
- // so any length > 0 is invalid
- if(length > 0) {
- return c.error(c, {
- message: 'Invalid key parameters. Only RSA is supported.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.unsupported_certificate
- }
- });
- }
-
- // expect an optional CertificateRequest message next
- c.expect = SCR;
-
- // continue
- c.process();
-};
-
-/**
- * Called when a client receives a ClientKeyExchange record.
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleClientKeyExchange = function(c, record, length) {
- // this implementation only supports RSA, no Diffie-Hellman support
- // so any length < 48 is invalid
- if(length < 48) {
- return c.error(c, {
- message: 'Invalid key parameters. Only RSA is supported.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.unsupported_certificate
- }
- });
- }
-
- var b = record.fragment;
- var msg = {
- enc_pre_master_secret: readVector(b, 2).getBytes()
- };
-
- // do rsa decryption
- var privateKey = null;
- if(c.getPrivateKey) {
- try {
- privateKey = c.getPrivateKey(c, c.session.serverCertificate);
- privateKey = forge$b.pki.privateKeyFromPem(privateKey);
- } catch(ex) {
- c.error(c, {
- message: 'Could not get private key.',
- cause: ex,
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.internal_error
- }
- });
- }
- }
-
- if(privateKey === null) {
- return c.error(c, {
- message: 'No private key set.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.internal_error
- }
- });
- }
-
- try {
- // decrypt 48-byte pre-master secret
- var sp = c.session.sp;
- sp.pre_master_secret = privateKey.decrypt(msg.enc_pre_master_secret);
-
- // ensure client hello version matches first 2 bytes
- var version = c.session.clientHelloVersion;
- if(version.major !== sp.pre_master_secret.charCodeAt(0) ||
- version.minor !== sp.pre_master_secret.charCodeAt(1)) {
- // error, do not send alert (see BLEI attack below)
- throw new Error('TLS version rollback attack detected.');
- }
- } catch(ex) {
- /* Note: Daniel Bleichenbacher [BLEI] can be used to attack a
- TLS server which is using PKCS#1 encoded RSA, so instead of
- failing here, we generate 48 random bytes and use that as
- the pre-master secret. */
- sp.pre_master_secret = forge$b.random.getBytes(48);
- }
-
- // expect a CertificateVerify message if a Certificate was received that
- // does not have fixed Diffie-Hellman params, otherwise expect
- // ChangeCipherSpec
- c.expect = CCC;
- if(c.session.clientCertificate !== null) {
- // only RSA support, so expect CertificateVerify
- // TODO: support Diffie-Hellman
- c.expect = CCV;
- }
-
- // continue
- c.process();
-};
-
-/**
- * Called when a client receives a CertificateRequest record.
- *
- * When this message will be sent:
- * A non-anonymous server can optionally request a certificate from the
- * client, if appropriate for the selected cipher suite. This message, if
- * sent, will immediately follow the Server Key Exchange message (if it is
- * sent; otherwise, the Server Certificate message).
- *
- * enum {
- * rsa_sign(1), dss_sign(2), rsa_fixed_dh(3), dss_fixed_dh(4),
- * rsa_ephemeral_dh_RESERVED(5), dss_ephemeral_dh_RESERVED(6),
- * fortezza_dms_RESERVED(20), (255)
- * } ClientCertificateType;
- *
- * opaque DistinguishedName<1..2^16-1>;
- *
- * struct {
- * ClientCertificateType certificate_types<1..2^8-1>;
- * SignatureAndHashAlgorithm supported_signature_algorithms<2^16-1>;
- * DistinguishedName certificate_authorities<0..2^16-1>;
- * } CertificateRequest;
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleCertificateRequest = function(c, record, length) {
- // minimum of 3 bytes in message
- if(length < 3) {
- return c.error(c, {
- message: 'Invalid CertificateRequest. Message too short.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.illegal_parameter
- }
- });
- }
-
- // TODO: TLS 1.2+ has different format including
- // SignatureAndHashAlgorithm after cert types
- var b = record.fragment;
- var msg = {
- certificate_types: readVector(b, 1),
- certificate_authorities: readVector(b, 2)
- };
-
- // save certificate request in session
- c.session.certificateRequest = msg;
-
- // expect a ServerHelloDone message next
- c.expect = SHD;
-
- // continue
- c.process();
-};
-
-/**
- * Called when a server receives a CertificateVerify record.
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleCertificateVerify = function(c, record, length) {
- if(length < 2) {
- return c.error(c, {
- message: 'Invalid CertificateVerify. Message too short.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.illegal_parameter
- }
- });
- }
-
- // rewind to get full bytes for message so it can be manually
- // digested below (special case for CertificateVerify messages because
- // they must be digested *after* handling as opposed to all others)
- var b = record.fragment;
- b.read -= 4;
- var msgBytes = b.bytes();
- b.read += 4;
-
- var msg = {
- signature: readVector(b, 2).getBytes()
- };
-
- // TODO: add support for DSA
-
- // generate data to verify
- var verify = forge$b.util.createBuffer();
- verify.putBuffer(c.session.md5.digest());
- verify.putBuffer(c.session.sha1.digest());
- verify = verify.getBytes();
-
- try {
- var cert = c.session.clientCertificate;
- /*b = forge.pki.rsa.decrypt(
- msg.signature, cert.publicKey, true, verify.length);
- if(b !== verify) {*/
- if(!cert.publicKey.verify(verify, msg.signature, 'NONE')) {
- throw new Error('CertificateVerify signature does not match.');
- }
-
- // digest message now that it has been handled
- c.session.md5.update(msgBytes);
- c.session.sha1.update(msgBytes);
- } catch(ex) {
- return c.error(c, {
- message: 'Bad signature in CertificateVerify.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.handshake_failure
- }
- });
- }
-
- // expect ChangeCipherSpec
- c.expect = CCC;
-
- // continue
- c.process();
-};
-
-/**
- * Called when a client receives a ServerHelloDone record.
- *
- * When this message will be sent:
- * The server hello done message is sent by the server to indicate the end
- * of the server hello and associated messages. After sending this message
- * the server will wait for a client response.
- *
- * Meaning of this message:
- * This message means that the server is done sending messages to support
- * the key exchange, and the client can proceed with its phase of the key
- * exchange.
- *
- * Upon receipt of the server hello done message the client should verify
- * that the server provided a valid certificate if required and check that
- * the server hello parameters are acceptable.
- *
- * struct {} ServerHelloDone;
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleServerHelloDone = function(c, record, length) {
- // len must be 0 bytes
- if(length > 0) {
- return c.error(c, {
- message: 'Invalid ServerHelloDone message. Invalid length.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.record_overflow
- }
- });
- }
-
- if(c.serverCertificate === null) {
- // no server certificate was provided
- var error = {
- message: 'No server certificate provided. Not enough security.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.insufficient_security
- }
- };
-
- // call application callback
- var depth = 0;
- var ret = c.verify(c, error.alert.description, depth, []);
- if(ret !== true) {
- // check for custom alert info
- if(ret || ret === 0) {
- // set custom message and alert description
- if(typeof ret === 'object' && !forge$b.util.isArray(ret)) {
- if(ret.message) {
- error.message = ret.message;
- }
- if(ret.alert) {
- error.alert.description = ret.alert;
- }
- } else if(typeof ret === 'number') {
- // set custom alert description
- error.alert.description = ret;
- }
- }
-
- // send error
- return c.error(c, error);
- }
- }
-
- // create client certificate message if requested
- if(c.session.certificateRequest !== null) {
- record = tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createCertificate(c)
- });
- tls$1.queue(c, record);
- }
-
- // create client key exchange message
- record = tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createClientKeyExchange(c)
- });
- tls$1.queue(c, record);
-
- // expect no messages until the following callback has been called
- c.expect = SER;
-
- // create callback to handle client signature (for client-certs)
- var callback = function(c, signature) {
- if(c.session.certificateRequest !== null &&
- c.session.clientCertificate !== null) {
- // create certificate verify message
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createCertificateVerify(c, signature)
- }));
- }
-
- // create change cipher spec message
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.change_cipher_spec,
- data: tls$1.createChangeCipherSpec()
- }));
-
- // create pending state
- c.state.pending = tls$1.createConnectionState(c);
-
- // change current write state to pending write state
- c.state.current.write = c.state.pending.write;
-
- // create finished message
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createFinished(c)
- }));
-
- // expect a server ChangeCipherSpec message next
- c.expect = SCC;
-
- // send records
- tls$1.flush(c);
-
- // continue
- c.process();
- };
-
- // if there is no certificate request or no client certificate, do
- // callback immediately
- if(c.session.certificateRequest === null ||
- c.session.clientCertificate === null) {
- return callback(c, null);
- }
-
- // otherwise get the client signature
- tls$1.getClientSignature(c, callback);
-};
-
-/**
- * Called when a ChangeCipherSpec record is received.
- *
- * @param c the connection.
- * @param record the record.
- */
-tls$1.handleChangeCipherSpec = function(c, record) {
- if(record.fragment.getByte() !== 0x01) {
- return c.error(c, {
- message: 'Invalid ChangeCipherSpec message received.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.illegal_parameter
- }
- });
- }
-
- // create pending state if:
- // 1. Resuming session in client mode OR
- // 2. NOT resuming session in server mode
- var client = (c.entity === tls$1.ConnectionEnd.client);
- if((c.session.resuming && client) || (!c.session.resuming && !client)) {
- c.state.pending = tls$1.createConnectionState(c);
- }
-
- // change current read state to pending read state
- c.state.current.read = c.state.pending.read;
-
- // clear pending state if:
- // 1. NOT resuming session in client mode OR
- // 2. resuming a session in server mode
- if((!c.session.resuming && client) || (c.session.resuming && !client)) {
- c.state.pending = null;
- }
-
- // expect a Finished record next
- c.expect = client ? SFI : CFI;
-
- // continue
- c.process();
-};
-
-/**
- * Called when a Finished record is received.
- *
- * When this message will be sent:
- * A finished message is always sent immediately after a change
- * cipher spec message to verify that the key exchange and
- * authentication processes were successful. It is essential that a
- * change cipher spec message be received between the other
- * handshake messages and the Finished message.
- *
- * Meaning of this message:
- * The finished message is the first protected with the just-
- * negotiated algorithms, keys, and secrets. Recipients of finished
- * messages must verify that the contents are correct. Once a side
- * has sent its Finished message and received and validated the
- * Finished message from its peer, it may begin to send and receive
- * application data over the connection.
- *
- * struct {
- * opaque verify_data[verify_data_length];
- * } Finished;
- *
- * verify_data
- * PRF(master_secret, finished_label, Hash(handshake_messages))
- * [0..verify_data_length-1];
- *
- * finished_label
- * For Finished messages sent by the client, the string
- * "client finished". For Finished messages sent by the server, the
- * string "server finished".
- *
- * verify_data_length depends on the cipher suite. If it is not specified
- * by the cipher suite, then it is 12. Versions of TLS < 1.2 always used
- * 12 bytes.
- *
- * @param c the connection.
- * @param record the record.
- * @param length the length of the handshake message.
- */
-tls$1.handleFinished = function(c, record, length) {
- // rewind to get full bytes for message so it can be manually
- // digested below (special case for Finished messages because they
- // must be digested *after* handling as opposed to all others)
- var b = record.fragment;
- b.read -= 4;
- var msgBytes = b.bytes();
- b.read += 4;
-
- // message contains only verify_data
- var vd = record.fragment.getBytes();
-
- // ensure verify data is correct
- b = forge$b.util.createBuffer();
- b.putBuffer(c.session.md5.digest());
- b.putBuffer(c.session.sha1.digest());
-
- // set label based on entity type
- var client = (c.entity === tls$1.ConnectionEnd.client);
- var label = client ? 'server finished' : 'client finished';
-
- // TODO: determine prf function and verify length for TLS 1.2
- var sp = c.session.sp;
- var vdl = 12;
- var prf = prf_TLS1;
- b = prf(sp.master_secret, label, b.getBytes(), vdl);
- if(b.getBytes() !== vd) {
- return c.error(c, {
- message: 'Invalid verify_data in Finished message.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.decrypt_error
- }
- });
- }
-
- // digest finished message now that it has been handled
- c.session.md5.update(msgBytes);
- c.session.sha1.update(msgBytes);
-
- // resuming session as client or NOT resuming session as server
- if((c.session.resuming && client) || (!c.session.resuming && !client)) {
- // create change cipher spec message
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.change_cipher_spec,
- data: tls$1.createChangeCipherSpec()
- }));
-
- // change current write state to pending write state, clear pending
- c.state.current.write = c.state.pending.write;
- c.state.pending = null;
-
- // create finished message
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createFinished(c)
- }));
- }
-
- // expect application data next
- c.expect = client ? SAD : CAD;
-
- // handshake complete
- c.handshaking = false;
- ++c.handshakes;
-
- // save access to peer certificate
- c.peerCertificate = client ?
- c.session.serverCertificate : c.session.clientCertificate;
-
- // send records
- tls$1.flush(c);
-
- // now connected
- c.isConnected = true;
- c.connected(c);
-
- // continue
- c.process();
-};
-
-/**
- * Called when an Alert record is received.
- *
- * @param c the connection.
- * @param record the record.
- */
-tls$1.handleAlert = function(c, record) {
- // read alert
- var b = record.fragment;
- var alert = {
- level: b.getByte(),
- description: b.getByte()
- };
-
- // TODO: consider using a table?
- // get appropriate message
- var msg;
- switch(alert.description) {
- case tls$1.Alert.Description.close_notify:
- msg = 'Connection closed.';
- break;
- case tls$1.Alert.Description.unexpected_message:
- msg = 'Unexpected message.';
- break;
- case tls$1.Alert.Description.bad_record_mac:
- msg = 'Bad record MAC.';
- break;
- case tls$1.Alert.Description.decryption_failed:
- msg = 'Decryption failed.';
- break;
- case tls$1.Alert.Description.record_overflow:
- msg = 'Record overflow.';
- break;
- case tls$1.Alert.Description.decompression_failure:
- msg = 'Decompression failed.';
- break;
- case tls$1.Alert.Description.handshake_failure:
- msg = 'Handshake failure.';
- break;
- case tls$1.Alert.Description.bad_certificate:
- msg = 'Bad certificate.';
- break;
- case tls$1.Alert.Description.unsupported_certificate:
- msg = 'Unsupported certificate.';
- break;
- case tls$1.Alert.Description.certificate_revoked:
- msg = 'Certificate revoked.';
- break;
- case tls$1.Alert.Description.certificate_expired:
- msg = 'Certificate expired.';
- break;
- case tls$1.Alert.Description.certificate_unknown:
- msg = 'Certificate unknown.';
- break;
- case tls$1.Alert.Description.illegal_parameter:
- msg = 'Illegal parameter.';
- break;
- case tls$1.Alert.Description.unknown_ca:
- msg = 'Unknown certificate authority.';
- break;
- case tls$1.Alert.Description.access_denied:
- msg = 'Access denied.';
- break;
- case tls$1.Alert.Description.decode_error:
- msg = 'Decode error.';
- break;
- case tls$1.Alert.Description.decrypt_error:
- msg = 'Decrypt error.';
- break;
- case tls$1.Alert.Description.export_restriction:
- msg = 'Export restriction.';
- break;
- case tls$1.Alert.Description.protocol_version:
- msg = 'Unsupported protocol version.';
- break;
- case tls$1.Alert.Description.insufficient_security:
- msg = 'Insufficient security.';
- break;
- case tls$1.Alert.Description.internal_error:
- msg = 'Internal error.';
- break;
- case tls$1.Alert.Description.user_canceled:
- msg = 'User canceled.';
- break;
- case tls$1.Alert.Description.no_renegotiation:
- msg = 'Renegotiation not supported.';
- break;
- default:
- msg = 'Unknown error.';
- break;
- }
-
- // close connection on close_notify, not an error
- if(alert.description === tls$1.Alert.Description.close_notify) {
- return c.close();
- }
-
- // call error handler
- c.error(c, {
- message: msg,
- send: false,
- // origin is the opposite end
- origin: (c.entity === tls$1.ConnectionEnd.client) ? 'server' : 'client',
- alert: alert
- });
-
- // continue
- c.process();
-};
-
-/**
- * Called when a Handshake record is received.
- *
- * @param c the connection.
- * @param record the record.
- */
-tls$1.handleHandshake = function(c, record) {
- // get the handshake type and message length
- var b = record.fragment;
- var type = b.getByte();
- var length = b.getInt24();
-
- // see if the record fragment doesn't yet contain the full message
- if(length > b.length()) {
- // cache the record, clear its fragment, and reset the buffer read
- // pointer before the type and length were read
- c.fragmented = record;
- record.fragment = forge$b.util.createBuffer();
- b.read -= 4;
-
- // continue
- return c.process();
- }
-
- // full message now available, clear cache, reset read pointer to
- // before type and length
- c.fragmented = null;
- b.read -= 4;
-
- // save the handshake bytes for digestion after handler is found
- // (include type and length of handshake msg)
- var bytes = b.bytes(length + 4);
-
- // restore read pointer
- b.read += 4;
-
- // handle expected message
- if(type in hsTable[c.entity][c.expect]) {
- // initialize server session
- if(c.entity === tls$1.ConnectionEnd.server && !c.open && !c.fail) {
- c.handshaking = true;
- c.session = {
- version: null,
- extensions: {
- server_name: {
- serverNameList: []
- }
- },
- cipherSuite: null,
- compressionMethod: null,
- serverCertificate: null,
- clientCertificate: null,
- md5: forge$b.md.md5.create(),
- sha1: forge$b.md.sha1.create()
- };
- }
-
- /* Update handshake messages digest. Finished and CertificateVerify
- messages are not digested here. They can't be digested as part of
- the verify_data that they contain. These messages are manually
- digested in their handlers. HelloRequest messages are simply never
- included in the handshake message digest according to spec. */
- if(type !== tls$1.HandshakeType.hello_request &&
- type !== tls$1.HandshakeType.certificate_verify &&
- type !== tls$1.HandshakeType.finished) {
- c.session.md5.update(bytes);
- c.session.sha1.update(bytes);
- }
-
- // handle specific handshake type record
- hsTable[c.entity][c.expect][type](c, record, length);
- } else {
- // unexpected record
- tls$1.handleUnexpected(c, record);
- }
-};
-
-/**
- * Called when an ApplicationData record is received.
- *
- * @param c the connection.
- * @param record the record.
- */
-tls$1.handleApplicationData = function(c, record) {
- // buffer data, notify that its ready
- c.data.putBuffer(record.fragment);
- c.dataReady(c);
-
- // continue
- c.process();
-};
-
-/**
- * Called when a Heartbeat record is received.
- *
- * @param c the connection.
- * @param record the record.
- */
-tls$1.handleHeartbeat = function(c, record) {
- // get the heartbeat type and payload
- var b = record.fragment;
- var type = b.getByte();
- var length = b.getInt16();
- var payload = b.getBytes(length);
-
- if(type === tls$1.HeartbeatMessageType.heartbeat_request) {
- // discard request during handshake or if length is too large
- if(c.handshaking || length > payload.length) {
- // continue
- return c.process();
- }
- // retransmit payload
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.heartbeat,
- data: tls$1.createHeartbeat(
- tls$1.HeartbeatMessageType.heartbeat_response, payload)
- }));
- tls$1.flush(c);
- } else if(type === tls$1.HeartbeatMessageType.heartbeat_response) {
- // check payload against expected payload, discard heartbeat if no match
- if(payload !== c.expectedHeartbeatPayload) {
- // continue
- return c.process();
- }
-
- // notify that a valid heartbeat was received
- if(c.heartbeatReceived) {
- c.heartbeatReceived(c, forge$b.util.createBuffer(payload));
- }
- }
-
- // continue
- c.process();
-};
-
-/**
- * The transistional state tables for receiving TLS records. It maps the
- * current TLS engine state and a received record to a function to handle the
- * record and update the state.
- *
- * For instance, if the current state is SHE, then the TLS engine is expecting
- * a ServerHello record. Once a record is received, the handler function is
- * looked up using the state SHE and the record's content type.
- *
- * The resulting function will either be an error handler or a record handler.
- * The function will take whatever action is appropriate and update the state
- * for the next record.
- *
- * The states are all based on possible server record types. Note that the
- * client will never specifically expect to receive a HelloRequest or an alert
- * from the server so there is no state that reflects this. These messages may
- * occur at any time.
- *
- * There are two tables for mapping states because there is a second tier of
- * types for handshake messages. Once a record with a content type of handshake
- * is received, the handshake record handler will look up the handshake type in
- * the secondary map to get its appropriate handler.
- *
- * Valid message orders are as follows:
- *
- * =======================FULL HANDSHAKE======================
- * Client Server
- *
- * ClientHello -------->
- * ServerHello
- * Certificate*
- * ServerKeyExchange*
- * CertificateRequest*
- * <-------- ServerHelloDone
- * Certificate*
- * ClientKeyExchange
- * CertificateVerify*
- * [ChangeCipherSpec]
- * Finished -------->
- * [ChangeCipherSpec]
- * <-------- Finished
- * Application Data <-------> Application Data
- *
- * =====================SESSION RESUMPTION=====================
- * Client Server
- *
- * ClientHello -------->
- * ServerHello
- * [ChangeCipherSpec]
- * <-------- Finished
- * [ChangeCipherSpec]
- * Finished -------->
- * Application Data <-------> Application Data
- */
-// client expect states (indicate which records are expected to be received)
-var SHE = 0; // rcv server hello
-var SCE = 1; // rcv server certificate
-var SKE = 2; // rcv server key exchange
-var SCR = 3; // rcv certificate request
-var SHD = 4; // rcv server hello done
-var SCC = 5; // rcv change cipher spec
-var SFI = 6; // rcv finished
-var SAD = 7; // rcv application data
-var SER = 8; // not expecting any messages at this point
-
-// server expect states
-var CHE = 0; // rcv client hello
-var CCE = 1; // rcv client certificate
-var CKE = 2; // rcv client key exchange
-var CCV = 3; // rcv certificate verify
-var CCC = 4; // rcv change cipher spec
-var CFI = 5; // rcv finished
-var CAD = 6; // rcv application data
-
-// map client current expect state and content type to function
-var __ = tls$1.handleUnexpected;
-var R0 = tls$1.handleChangeCipherSpec;
-var R1 = tls$1.handleAlert;
-var R2 = tls$1.handleHandshake;
-var R3 = tls$1.handleApplicationData;
-var R4 = tls$1.handleHeartbeat;
-var ctTable = [];
-ctTable[tls$1.ConnectionEnd.client] = [
-// CC,AL,HS,AD,HB
-/*SHE*/[__,R1,R2,__,R4],
-/*SCE*/[__,R1,R2,__,R4],
-/*SKE*/[__,R1,R2,__,R4],
-/*SCR*/[__,R1,R2,__,R4],
-/*SHD*/[__,R1,R2,__,R4],
-/*SCC*/[R0,R1,__,__,R4],
-/*SFI*/[__,R1,R2,__,R4],
-/*SAD*/[__,R1,R2,R3,R4],
-/*SER*/[__,R1,R2,__,R4]
-];
-
-// map server current expect state and content type to function
-ctTable[tls$1.ConnectionEnd.server] = [
-// CC,AL,HS,AD
-/*CHE*/[__,R1,R2,__,R4],
-/*CCE*/[__,R1,R2,__,R4],
-/*CKE*/[__,R1,R2,__,R4],
-/*CCV*/[__,R1,R2,__,R4],
-/*CCC*/[R0,R1,__,__,R4],
-/*CFI*/[__,R1,R2,__,R4],
-/*CAD*/[__,R1,R2,R3,R4],
-/*CER*/[__,R1,R2,__,R4]
-];
-
-// map client current expect state and handshake type to function
-var H0 = tls$1.handleHelloRequest;
-var H1 = tls$1.handleServerHello;
-var H2 = tls$1.handleCertificate;
-var H3 = tls$1.handleServerKeyExchange;
-var H4 = tls$1.handleCertificateRequest;
-var H5 = tls$1.handleServerHelloDone;
-var H6 = tls$1.handleFinished;
-var hsTable = [];
-hsTable[tls$1.ConnectionEnd.client] = [
-// HR,01,SH,03,04,05,06,07,08,09,10,SC,SK,CR,HD,15,CK,17,18,19,FI
-/*SHE*/[__,__,H1,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],
-/*SCE*/[H0,__,__,__,__,__,__,__,__,__,__,H2,H3,H4,H5,__,__,__,__,__,__],
-/*SKE*/[H0,__,__,__,__,__,__,__,__,__,__,__,H3,H4,H5,__,__,__,__,__,__],
-/*SCR*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,H4,H5,__,__,__,__,__,__],
-/*SHD*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,H5,__,__,__,__,__,__],
-/*SCC*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],
-/*SFI*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H6],
-/*SAD*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],
-/*SER*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__]
-];
-
-// map server current expect state and handshake type to function
-// Note: CAD[CH] does not map to FB because renegotation is prohibited
-var H7 = tls$1.handleClientHello;
-var H8 = tls$1.handleClientKeyExchange;
-var H9 = tls$1.handleCertificateVerify;
-hsTable[tls$1.ConnectionEnd.server] = [
-// 01,CH,02,03,04,05,06,07,08,09,10,CC,12,13,14,CV,CK,17,18,19,FI
-/*CHE*/[__,H7,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],
-/*CCE*/[__,__,__,__,__,__,__,__,__,__,__,H2,__,__,__,__,__,__,__,__,__],
-/*CKE*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H8,__,__,__,__],
-/*CCV*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H9,__,__,__,__,__],
-/*CCC*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],
-/*CFI*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H6],
-/*CAD*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],
-/*CER*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__]
-];
-
-/**
- * Generates the master_secret and keys using the given security parameters.
- *
- * The security parameters for a TLS connection state are defined as such:
- *
- * struct {
- * ConnectionEnd entity;
- * PRFAlgorithm prf_algorithm;
- * BulkCipherAlgorithm bulk_cipher_algorithm;
- * CipherType cipher_type;
- * uint8 enc_key_length;
- * uint8 block_length;
- * uint8 fixed_iv_length;
- * uint8 record_iv_length;
- * MACAlgorithm mac_algorithm;
- * uint8 mac_length;
- * uint8 mac_key_length;
- * CompressionMethod compression_algorithm;
- * opaque master_secret[48];
- * opaque client_random[32];
- * opaque server_random[32];
- * } SecurityParameters;
- *
- * Note that this definition is from TLS 1.2. In TLS 1.0 some of these
- * parameters are ignored because, for instance, the PRFAlgorithm is a
- * builtin-fixed algorithm combining iterations of MD5 and SHA-1 in TLS 1.0.
- *
- * The Record Protocol requires an algorithm to generate keys required by the
- * current connection state.
- *
- * The master secret is expanded into a sequence of secure bytes, which is then
- * split to a client write MAC key, a server write MAC key, a client write
- * encryption key, and a server write encryption key. In TLS 1.0 a client write
- * IV and server write IV are also generated. Each of these is generated from
- * the byte sequence in that order. Unused values are empty. In TLS 1.2, some
- * AEAD ciphers may additionally require a client write IV and a server write
- * IV (see Section 6.2.3.3).
- *
- * When keys, MAC keys, and IVs are generated, the master secret is used as an
- * entropy source.
- *
- * To generate the key material, compute:
- *
- * master_secret = PRF(pre_master_secret, "master secret",
- * ClientHello.random + ServerHello.random)
- *
- * key_block = PRF(SecurityParameters.master_secret,
- * "key expansion",
- * SecurityParameters.server_random +
- * SecurityParameters.client_random);
- *
- * until enough output has been generated. Then, the key_block is
- * partitioned as follows:
- *
- * client_write_MAC_key[SecurityParameters.mac_key_length]
- * server_write_MAC_key[SecurityParameters.mac_key_length]
- * client_write_key[SecurityParameters.enc_key_length]
- * server_write_key[SecurityParameters.enc_key_length]
- * client_write_IV[SecurityParameters.fixed_iv_length]
- * server_write_IV[SecurityParameters.fixed_iv_length]
- *
- * In TLS 1.2, the client_write_IV and server_write_IV are only generated for
- * implicit nonce techniques as described in Section 3.2.1 of [AEAD]. This
- * implementation uses TLS 1.0 so IVs are generated.
- *
- * Implementation note: The currently defined cipher suite which requires the
- * most material is AES_256_CBC_SHA256. It requires 2 x 32 byte keys and 2 x 32
- * byte MAC keys, for a total 128 bytes of key material. In TLS 1.0 it also
- * requires 2 x 16 byte IVs, so it actually takes 160 bytes of key material.
- *
- * @param c the connection.
- * @param sp the security parameters to use.
- *
- * @return the security keys.
- */
-tls$1.generateKeys = function(c, sp) {
- // TLS_RSA_WITH_AES_128_CBC_SHA (required to be compliant with TLS 1.2) &
- // TLS_RSA_WITH_AES_256_CBC_SHA are the only cipher suites implemented
- // at present
-
- // TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA is required to be compliant with
- // TLS 1.0 but we don't care right now because AES is better and we have
- // an implementation for it
-
- // TODO: TLS 1.2 implementation
- /*
- // determine the PRF
- var prf;
- switch(sp.prf_algorithm) {
- case tls.PRFAlgorithm.tls_prf_sha256:
- prf = prf_sha256;
- break;
- default:
- // should never happen
- throw new Error('Invalid PRF');
- }
- */
-
- // TLS 1.0/1.1 implementation
- var prf = prf_TLS1;
-
- // concatenate server and client random
- var random = sp.client_random + sp.server_random;
-
- // only create master secret if session is new
- if(!c.session.resuming) {
- // create master secret, clean up pre-master secret
- sp.master_secret = prf(
- sp.pre_master_secret, 'master secret', random, 48).bytes();
- sp.pre_master_secret = null;
- }
-
- // generate the amount of key material needed
- random = sp.server_random + sp.client_random;
- var length = 2 * sp.mac_key_length + 2 * sp.enc_key_length;
-
- // include IV for TLS/1.0
- var tls10 = (c.version.major === tls$1.Versions.TLS_1_0.major &&
- c.version.minor === tls$1.Versions.TLS_1_0.minor);
- if(tls10) {
- length += 2 * sp.fixed_iv_length;
- }
- var km = prf(sp.master_secret, 'key expansion', random, length);
-
- // split the key material into the MAC and encryption keys
- var rval = {
- client_write_MAC_key: km.getBytes(sp.mac_key_length),
- server_write_MAC_key: km.getBytes(sp.mac_key_length),
- client_write_key: km.getBytes(sp.enc_key_length),
- server_write_key: km.getBytes(sp.enc_key_length)
- };
-
- // include TLS 1.0 IVs
- if(tls10) {
- rval.client_write_IV = km.getBytes(sp.fixed_iv_length);
- rval.server_write_IV = km.getBytes(sp.fixed_iv_length);
- }
-
- return rval;
-};
-
-/**
- * Creates a new initialized TLS connection state. A connection state has
- * a read mode and a write mode.
- *
- * compression state:
- * The current state of the compression algorithm.
- *
- * cipher state:
- * The current state of the encryption algorithm. This will consist of the
- * scheduled key for that connection. For stream ciphers, this will also
- * contain whatever state information is necessary to allow the stream to
- * continue to encrypt or decrypt data.
- *
- * MAC key:
- * The MAC key for the connection.
- *
- * sequence number:
- * Each connection state contains a sequence number, which is maintained
- * separately for read and write states. The sequence number MUST be set to
- * zero whenever a connection state is made the active state. Sequence
- * numbers are of type uint64 and may not exceed 2^64-1. Sequence numbers do
- * not wrap. If a TLS implementation would need to wrap a sequence number,
- * it must renegotiate instead. A sequence number is incremented after each
- * record: specifically, the first record transmitted under a particular
- * connection state MUST use sequence number 0.
- *
- * @param c the connection.
- *
- * @return the new initialized TLS connection state.
- */
-tls$1.createConnectionState = function(c) {
- var client = (c.entity === tls$1.ConnectionEnd.client);
-
- var createMode = function() {
- var mode = {
- // two 32-bit numbers, first is most significant
- sequenceNumber: [0, 0],
- macKey: null,
- macLength: 0,
- macFunction: null,
- cipherState: null,
- cipherFunction: function(record) {return true;},
- compressionState: null,
- compressFunction: function(record) {return true;},
- updateSequenceNumber: function() {
- if(mode.sequenceNumber[1] === 0xFFFFFFFF) {
- mode.sequenceNumber[1] = 0;
- ++mode.sequenceNumber[0];
- } else {
- ++mode.sequenceNumber[1];
- }
- }
- };
- return mode;
- };
- var state = {
- read: createMode(),
- write: createMode()
- };
-
- // update function in read mode will decrypt then decompress a record
- state.read.update = function(c, record) {
- if(!state.read.cipherFunction(record, state.read)) {
- c.error(c, {
- message: 'Could not decrypt record or bad MAC.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- // doesn't matter if decryption failed or MAC was
- // invalid, return the same error so as not to reveal
- // which one occurred
- description: tls$1.Alert.Description.bad_record_mac
- }
- });
- } else if(!state.read.compressFunction(c, record, state.read)) {
- c.error(c, {
- message: 'Could not decompress record.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.decompression_failure
- }
- });
- }
- return !c.fail;
- };
-
- // update function in write mode will compress then encrypt a record
- state.write.update = function(c, record) {
- if(!state.write.compressFunction(c, record, state.write)) {
- // error, but do not send alert since it would require
- // compression as well
- c.error(c, {
- message: 'Could not compress record.',
- send: false,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.internal_error
- }
- });
- } else if(!state.write.cipherFunction(record, state.write)) {
- // error, but do not send alert since it would require
- // encryption as well
- c.error(c, {
- message: 'Could not encrypt record.',
- send: false,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.internal_error
- }
- });
- }
- return !c.fail;
- };
-
- // handle security parameters
- if(c.session) {
- var sp = c.session.sp;
- c.session.cipherSuite.initSecurityParameters(sp);
-
- // generate keys
- sp.keys = tls$1.generateKeys(c, sp);
- state.read.macKey = client ?
- sp.keys.server_write_MAC_key : sp.keys.client_write_MAC_key;
- state.write.macKey = client ?
- sp.keys.client_write_MAC_key : sp.keys.server_write_MAC_key;
-
- // cipher suite setup
- c.session.cipherSuite.initConnectionState(state, c, sp);
-
- // compression setup
- switch(sp.compression_algorithm) {
- case tls$1.CompressionMethod.none:
- break;
- case tls$1.CompressionMethod.deflate:
- state.read.compressFunction = inflate;
- state.write.compressFunction = deflate;
- break;
- default:
- throw new Error('Unsupported compression algorithm.');
- }
- }
-
- return state;
-};
-
-/**
- * Creates a Random structure.
- *
- * struct {
- * uint32 gmt_unix_time;
- * opaque random_bytes[28];
- * } Random;
- *
- * gmt_unix_time:
- * The current time and date in standard UNIX 32-bit format (seconds since
- * the midnight starting Jan 1, 1970, UTC, ignoring leap seconds) according
- * to the sender's internal clock. Clocks are not required to be set
- * correctly by the basic TLS protocol; higher-level or application
- * protocols may define additional requirements. Note that, for historical
- * reasons, the data element is named using GMT, the predecessor of the
- * current worldwide time base, UTC.
- * random_bytes:
- * 28 bytes generated by a secure random number generator.
- *
- * @return the Random structure as a byte array.
- */
-tls$1.createRandom = function() {
- // get UTC milliseconds
- var d = new Date();
- var utc = +d + d.getTimezoneOffset() * 60000;
- var rval = forge$b.util.createBuffer();
- rval.putInt32(utc);
- rval.putBytes(forge$b.random.getBytes(28));
- return rval;
-};
-
-/**
- * Creates a TLS record with the given type and data.
- *
- * @param c the connection.
- * @param options:
- * type: the record type.
- * data: the plain text data in a byte buffer.
- *
- * @return the created record.
- */
-tls$1.createRecord = function(c, options) {
- if(!options.data) {
- return null;
- }
- var record = {
- type: options.type,
- version: {
- major: c.version.major,
- minor: c.version.minor
- },
- length: options.data.length(),
- fragment: options.data
- };
- return record;
-};
-
-/**
- * Creates a TLS alert record.
- *
- * @param c the connection.
- * @param alert:
- * level: the TLS alert level.
- * description: the TLS alert description.
- *
- * @return the created alert record.
- */
-tls$1.createAlert = function(c, alert) {
- var b = forge$b.util.createBuffer();
- b.putByte(alert.level);
- b.putByte(alert.description);
- return tls$1.createRecord(c, {
- type: tls$1.ContentType.alert,
- data: b
- });
-};
-
-/* The structure of a TLS handshake message.
- *
- * struct {
- * HandshakeType msg_type; // handshake type
- * uint24 length; // bytes in message
- * select(HandshakeType) {
- * case hello_request: HelloRequest;
- * case client_hello: ClientHello;
- * case server_hello: ServerHello;
- * case certificate: Certificate;
- * case server_key_exchange: ServerKeyExchange;
- * case certificate_request: CertificateRequest;
- * case server_hello_done: ServerHelloDone;
- * case certificate_verify: CertificateVerify;
- * case client_key_exchange: ClientKeyExchange;
- * case finished: Finished;
- * } body;
- * } Handshake;
- */
-
-/**
- * Creates a ClientHello message.
- *
- * opaque SessionID<0..32>;
- * enum { null(0), deflate(1), (255) } CompressionMethod;
- * uint8 CipherSuite[2];
- *
- * struct {
- * ProtocolVersion client_version;
- * Random random;
- * SessionID session_id;
- * CipherSuite cipher_suites<2..2^16-2>;
- * CompressionMethod compression_methods<1..2^8-1>;
- * select(extensions_present) {
- * case false:
- * struct {};
- * case true:
- * Extension extensions<0..2^16-1>;
- * };
- * } ClientHello;
- *
- * The extension format for extended client hellos and server hellos is:
- *
- * struct {
- * ExtensionType extension_type;
- * opaque extension_data<0..2^16-1>;
- * } Extension;
- *
- * Here:
- *
- * - "extension_type" identifies the particular extension type.
- * - "extension_data" contains information specific to the particular
- * extension type.
- *
- * The extension types defined in this document are:
- *
- * enum {
- * server_name(0), max_fragment_length(1),
- * client_certificate_url(2), trusted_ca_keys(3),
- * truncated_hmac(4), status_request(5), (65535)
- * } ExtensionType;
- *
- * @param c the connection.
- *
- * @return the ClientHello byte buffer.
- */
-tls$1.createClientHello = function(c) {
- // save hello version
- c.session.clientHelloVersion = {
- major: c.version.major,
- minor: c.version.minor
- };
-
- // create supported cipher suites
- var cipherSuites = forge$b.util.createBuffer();
- for(var i = 0; i < c.cipherSuites.length; ++i) {
- var cs = c.cipherSuites[i];
- cipherSuites.putByte(cs.id[0]);
- cipherSuites.putByte(cs.id[1]);
- }
- var cSuites = cipherSuites.length();
-
- // create supported compression methods, null always supported, but
- // also support deflate if connection has inflate and deflate methods
- var compressionMethods = forge$b.util.createBuffer();
- compressionMethods.putByte(tls$1.CompressionMethod.none);
- // FIXME: deflate support disabled until issues with raw deflate data
- // without zlib headers are resolved
- /*
- if(c.inflate !== null && c.deflate !== null) {
- compressionMethods.putByte(tls.CompressionMethod.deflate);
- }
- */
- var cMethods = compressionMethods.length();
-
- // create TLS SNI (server name indication) extension if virtual host
- // has been specified, see RFC 3546
- var extensions = forge$b.util.createBuffer();
- if(c.virtualHost) {
- // create extension struct
- var ext = forge$b.util.createBuffer();
- ext.putByte(0x00); // type server_name (ExtensionType is 2 bytes)
- ext.putByte(0x00);
-
- /* In order to provide the server name, clients MAY include an
- * extension of type "server_name" in the (extended) client hello.
- * The "extension_data" field of this extension SHALL contain
- * "ServerNameList" where:
- *
- * struct {
- * NameType name_type;
- * select(name_type) {
- * case host_name: HostName;
- * } name;
- * } ServerName;
- *
- * enum {
- * host_name(0), (255)
- * } NameType;
- *
- * opaque HostName<1..2^16-1>;
- *
- * struct {
- * ServerName server_name_list<1..2^16-1>
- * } ServerNameList;
- */
- var serverName = forge$b.util.createBuffer();
- serverName.putByte(0x00); // type host_name
- writeVector(serverName, 2, forge$b.util.createBuffer(c.virtualHost));
-
- // ServerNameList is in extension_data
- var snList = forge$b.util.createBuffer();
- writeVector(snList, 2, serverName);
- writeVector(ext, 2, snList);
- extensions.putBuffer(ext);
- }
- var extLength = extensions.length();
- if(extLength > 0) {
- // add extension vector length
- extLength += 2;
- }
-
- // determine length of the handshake message
- // cipher suites and compression methods size will need to be
- // updated if more get added to the list
- var sessionId = c.session.id;
- var length =
- sessionId.length + 1 + // session ID vector
- 2 + // version (major + minor)
- 4 + 28 + // random time and random bytes
- 2 + cSuites + // cipher suites vector
- 1 + cMethods + // compression methods vector
- extLength; // extensions vector
-
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(tls$1.HandshakeType.client_hello);
- rval.putInt24(length); // handshake length
- rval.putByte(c.version.major); // major version
- rval.putByte(c.version.minor); // minor version
- rval.putBytes(c.session.sp.client_random); // random time + bytes
- writeVector(rval, 1, forge$b.util.createBuffer(sessionId));
- writeVector(rval, 2, cipherSuites);
- writeVector(rval, 1, compressionMethods);
- if(extLength > 0) {
- writeVector(rval, 2, extensions);
- }
- return rval;
-};
-
-/**
- * Creates a ServerHello message.
- *
- * @param c the connection.
- *
- * @return the ServerHello byte buffer.
- */
-tls$1.createServerHello = function(c) {
- // determine length of the handshake message
- var sessionId = c.session.id;
- var length =
- sessionId.length + 1 + // session ID vector
- 2 + // version (major + minor)
- 4 + 28 + // random time and random bytes
- 2 + // chosen cipher suite
- 1; // chosen compression method
-
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(tls$1.HandshakeType.server_hello);
- rval.putInt24(length); // handshake length
- rval.putByte(c.version.major); // major version
- rval.putByte(c.version.minor); // minor version
- rval.putBytes(c.session.sp.server_random); // random time + bytes
- writeVector(rval, 1, forge$b.util.createBuffer(sessionId));
- rval.putByte(c.session.cipherSuite.id[0]);
- rval.putByte(c.session.cipherSuite.id[1]);
- rval.putByte(c.session.compressionMethod);
- return rval;
-};
-
-/**
- * Creates a Certificate message.
- *
- * When this message will be sent:
- * This is the first message the client can send after receiving a server
- * hello done message and the first message the server can send after
- * sending a ServerHello. This client message is only sent if the server
- * requests a certificate. If no suitable certificate is available, the
- * client should send a certificate message containing no certificates. If
- * client authentication is required by the server for the handshake to
- * continue, it may respond with a fatal handshake failure alert.
- *
- * opaque ASN.1Cert<1..2^24-1>;
- *
- * struct {
- * ASN.1Cert certificate_list<0..2^24-1>;
- * } Certificate;
- *
- * @param c the connection.
- *
- * @return the Certificate byte buffer.
- */
-tls$1.createCertificate = function(c) {
- // TODO: check certificate request to ensure types are supported
-
- // get a certificate (a certificate as a PEM string)
- var client = (c.entity === tls$1.ConnectionEnd.client);
- var cert = null;
- if(c.getCertificate) {
- var hint;
- if(client) {
- hint = c.session.certificateRequest;
- } else {
- hint = c.session.extensions.server_name.serverNameList;
- }
- cert = c.getCertificate(c, hint);
- }
-
- // buffer to hold certificate list
- var certList = forge$b.util.createBuffer();
- if(cert !== null) {
- try {
- // normalize cert to a chain of certificates
- if(!forge$b.util.isArray(cert)) {
- cert = [cert];
- }
- var asn1 = null;
- for(var i = 0; i < cert.length; ++i) {
- var msg = forge$b.pem.decode(cert[i])[0];
- if(msg.type !== 'CERTIFICATE' &&
- msg.type !== 'X509 CERTIFICATE' &&
- msg.type !== 'TRUSTED CERTIFICATE') {
- var error = new Error('Could not convert certificate from PEM; PEM ' +
- 'header type is not "CERTIFICATE", "X509 CERTIFICATE", or ' +
- '"TRUSTED CERTIFICATE".');
- error.headerType = msg.type;
- throw error;
- }
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- throw new Error('Could not convert certificate from PEM; PEM is encrypted.');
- }
-
- var der = forge$b.util.createBuffer(msg.body);
- if(asn1 === null) {
- asn1 = forge$b.asn1.fromDer(der.bytes(), false);
- }
-
- // certificate entry is itself a vector with 3 length bytes
- var certBuffer = forge$b.util.createBuffer();
- writeVector(certBuffer, 3, der);
-
- // add cert vector to cert list vector
- certList.putBuffer(certBuffer);
- }
-
- // save certificate
- cert = forge$b.pki.certificateFromAsn1(asn1);
- if(client) {
- c.session.clientCertificate = cert;
- } else {
- c.session.serverCertificate = cert;
- }
- } catch(ex) {
- return c.error(c, {
- message: 'Could not send certificate list.',
- cause: ex,
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.bad_certificate
- }
- });
- }
- }
-
- // determine length of the handshake message
- var length = 3 + certList.length(); // cert list vector
-
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(tls$1.HandshakeType.certificate);
- rval.putInt24(length);
- writeVector(rval, 3, certList);
- return rval;
-};
-
-/**
- * Creates a ClientKeyExchange message.
- *
- * When this message will be sent:
- * This message is always sent by the client. It will immediately follow the
- * client certificate message, if it is sent. Otherwise it will be the first
- * message sent by the client after it receives the server hello done
- * message.
- *
- * Meaning of this message:
- * With this message, the premaster secret is set, either though direct
- * transmission of the RSA-encrypted secret, or by the transmission of
- * Diffie-Hellman parameters which will allow each side to agree upon the
- * same premaster secret. When the key exchange method is DH_RSA or DH_DSS,
- * client certification has been requested, and the client was able to
- * respond with a certificate which contained a Diffie-Hellman public key
- * whose parameters (group and generator) matched those specified by the
- * server in its certificate, this message will not contain any data.
- *
- * Meaning of this message:
- * If RSA is being used for key agreement and authentication, the client
- * generates a 48-byte premaster secret, encrypts it using the public key
- * from the server's certificate or the temporary RSA key provided in a
- * server key exchange message, and sends the result in an encrypted
- * premaster secret message. This structure is a variant of the client
- * key exchange message, not a message in itself.
- *
- * struct {
- * select(KeyExchangeAlgorithm) {
- * case rsa: EncryptedPreMasterSecret;
- * case diffie_hellman: ClientDiffieHellmanPublic;
- * } exchange_keys;
- * } ClientKeyExchange;
- *
- * struct {
- * ProtocolVersion client_version;
- * opaque random[46];
- * } PreMasterSecret;
- *
- * struct {
- * public-key-encrypted PreMasterSecret pre_master_secret;
- * } EncryptedPreMasterSecret;
- *
- * A public-key-encrypted element is encoded as a vector <0..2^16-1>.
- *
- * @param c the connection.
- *
- * @return the ClientKeyExchange byte buffer.
- */
-tls$1.createClientKeyExchange = function(c) {
- // create buffer to encrypt
- var b = forge$b.util.createBuffer();
-
- // add highest client-supported protocol to help server avoid version
- // rollback attacks
- b.putByte(c.session.clientHelloVersion.major);
- b.putByte(c.session.clientHelloVersion.minor);
-
- // generate and add 46 random bytes
- b.putBytes(forge$b.random.getBytes(46));
-
- // save pre-master secret
- var sp = c.session.sp;
- sp.pre_master_secret = b.getBytes();
-
- // RSA-encrypt the pre-master secret
- var key = c.session.serverCertificate.publicKey;
- b = key.encrypt(sp.pre_master_secret);
-
- /* Note: The encrypted pre-master secret will be stored in a
- public-key-encrypted opaque vector that has the length prefixed using
- 2 bytes, so include those 2 bytes in the handshake message length. This
- is done as a minor optimization instead of calling writeVector(). */
-
- // determine length of the handshake message
- var length = b.length + 2;
-
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(tls$1.HandshakeType.client_key_exchange);
- rval.putInt24(length);
- // add vector length bytes
- rval.putInt16(b.length);
- rval.putBytes(b);
- return rval;
-};
-
-/**
- * Creates a ServerKeyExchange message.
- *
- * @param c the connection.
- *
- * @return the ServerKeyExchange byte buffer.
- */
-tls$1.createServerKeyExchange = function(c) {
-
- // build record fragment
- var rval = forge$b.util.createBuffer();
- return rval;
-};
-
-/**
- * Gets the signed data used to verify a client-side certificate. See
- * tls.createCertificateVerify() for details.
- *
- * @param c the connection.
- * @param callback the callback to call once the signed data is ready.
- */
-tls$1.getClientSignature = function(c, callback) {
- // generate data to RSA encrypt
- var b = forge$b.util.createBuffer();
- b.putBuffer(c.session.md5.digest());
- b.putBuffer(c.session.sha1.digest());
- b = b.getBytes();
-
- // create default signing function as necessary
- c.getSignature = c.getSignature || function(c, b, callback) {
- // do rsa encryption, call callback
- var privateKey = null;
- if(c.getPrivateKey) {
- try {
- privateKey = c.getPrivateKey(c, c.session.clientCertificate);
- privateKey = forge$b.pki.privateKeyFromPem(privateKey);
- } catch(ex) {
- c.error(c, {
- message: 'Could not get private key.',
- cause: ex,
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.internal_error
- }
- });
- }
- }
- if(privateKey === null) {
- c.error(c, {
- message: 'No private key set.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.internal_error
- }
- });
- } else {
- b = privateKey.sign(b, null);
- }
- callback(c, b);
- };
-
- // get client signature
- c.getSignature(c, b, callback);
-};
-
-/**
- * Creates a CertificateVerify message.
- *
- * Meaning of this message:
- * This structure conveys the client's Diffie-Hellman public value
- * (Yc) if it was not already included in the client's certificate.
- * The encoding used for Yc is determined by the enumerated
- * PublicValueEncoding. This structure is a variant of the client
- * key exchange message, not a message in itself.
- *
- * When this message will be sent:
- * This message is used to provide explicit verification of a client
- * certificate. This message is only sent following a client
- * certificate that has signing capability (i.e. all certificates
- * except those containing fixed Diffie-Hellman parameters). When
- * sent, it will immediately follow the client key exchange message.
- *
- * struct {
- * Signature signature;
- * } CertificateVerify;
- *
- * CertificateVerify.signature.md5_hash
- * MD5(handshake_messages);
- *
- * Certificate.signature.sha_hash
- * SHA(handshake_messages);
- *
- * Here handshake_messages refers to all handshake messages sent or
- * received starting at client hello up to but not including this
- * message, including the type and length fields of the handshake
- * messages.
- *
- * select(SignatureAlgorithm) {
- * case anonymous: struct { };
- * case rsa:
- * digitally-signed struct {
- * opaque md5_hash[16];
- * opaque sha_hash[20];
- * };
- * case dsa:
- * digitally-signed struct {
- * opaque sha_hash[20];
- * };
- * } Signature;
- *
- * In digital signing, one-way hash functions are used as input for a
- * signing algorithm. A digitally-signed element is encoded as an opaque
- * vector <0..2^16-1>, where the length is specified by the signing
- * algorithm and key.
- *
- * In RSA signing, a 36-byte structure of two hashes (one SHA and one
- * MD5) is signed (encrypted with the private key). It is encoded with
- * PKCS #1 block type 0 or type 1 as described in [PKCS1].
- *
- * In DSS, the 20 bytes of the SHA hash are run directly through the
- * Digital Signing Algorithm with no additional hashing.
- *
- * @param c the connection.
- * @param signature the signature to include in the message.
- *
- * @return the CertificateVerify byte buffer.
- */
-tls$1.createCertificateVerify = function(c, signature) {
- /* Note: The signature will be stored in a "digitally-signed" opaque
- vector that has the length prefixed using 2 bytes, so include those
- 2 bytes in the handshake message length. This is done as a minor
- optimization instead of calling writeVector(). */
-
- // determine length of the handshake message
- var length = signature.length + 2;
-
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(tls$1.HandshakeType.certificate_verify);
- rval.putInt24(length);
- // add vector length bytes
- rval.putInt16(signature.length);
- rval.putBytes(signature);
- return rval;
-};
-
-/**
- * Creates a CertificateRequest message.
- *
- * @param c the connection.
- *
- * @return the CertificateRequest byte buffer.
- */
-tls$1.createCertificateRequest = function(c) {
- // TODO: support other certificate types
- var certTypes = forge$b.util.createBuffer();
-
- // common RSA certificate type
- certTypes.putByte(0x01);
-
- // add distinguished names from CA store
- var cAs = forge$b.util.createBuffer();
- for(var key in c.caStore.certs) {
- var cert = c.caStore.certs[key];
- var dn = forge$b.pki.distinguishedNameToAsn1(cert.subject);
- var byteBuffer = forge$b.asn1.toDer(dn);
- cAs.putInt16(byteBuffer.length());
- cAs.putBuffer(byteBuffer);
- }
-
- // TODO: TLS 1.2+ has a different format
-
- // determine length of the handshake message
- var length =
- 1 + certTypes.length() +
- 2 + cAs.length();
-
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(tls$1.HandshakeType.certificate_request);
- rval.putInt24(length);
- writeVector(rval, 1, certTypes);
- writeVector(rval, 2, cAs);
- return rval;
-};
-
-/**
- * Creates a ServerHelloDone message.
- *
- * @param c the connection.
- *
- * @return the ServerHelloDone byte buffer.
- */
-tls$1.createServerHelloDone = function(c) {
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(tls$1.HandshakeType.server_hello_done);
- rval.putInt24(0);
- return rval;
-};
-
-/**
- * Creates a ChangeCipherSpec message.
- *
- * The change cipher spec protocol exists to signal transitions in
- * ciphering strategies. The protocol consists of a single message,
- * which is encrypted and compressed under the current (not the pending)
- * connection state. The message consists of a single byte of value 1.
- *
- * struct {
- * enum { change_cipher_spec(1), (255) } type;
- * } ChangeCipherSpec;
- *
- * @return the ChangeCipherSpec byte buffer.
- */
-tls$1.createChangeCipherSpec = function() {
- var rval = forge$b.util.createBuffer();
- rval.putByte(0x01);
- return rval;
-};
-
-/**
- * Creates a Finished message.
- *
- * struct {
- * opaque verify_data[12];
- * } Finished;
- *
- * verify_data
- * PRF(master_secret, finished_label, MD5(handshake_messages) +
- * SHA-1(handshake_messages)) [0..11];
- *
- * finished_label
- * For Finished messages sent by the client, the string "client
- * finished". For Finished messages sent by the server, the
- * string "server finished".
- *
- * handshake_messages
- * All of the data from all handshake messages up to but not
- * including this message. This is only data visible at the
- * handshake layer and does not include record layer headers.
- * This is the concatenation of all the Handshake structures as
- * defined in 7.4 exchanged thus far.
- *
- * @param c the connection.
- *
- * @return the Finished byte buffer.
- */
-tls$1.createFinished = function(c) {
- // generate verify_data
- var b = forge$b.util.createBuffer();
- b.putBuffer(c.session.md5.digest());
- b.putBuffer(c.session.sha1.digest());
-
- // TODO: determine prf function and verify length for TLS 1.2
- var client = (c.entity === tls$1.ConnectionEnd.client);
- var sp = c.session.sp;
- var vdl = 12;
- var prf = prf_TLS1;
- var label = client ? 'client finished' : 'server finished';
- b = prf(sp.master_secret, label, b.getBytes(), vdl);
-
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(tls$1.HandshakeType.finished);
- rval.putInt24(b.length());
- rval.putBuffer(b);
- return rval;
-};
-
-/**
- * Creates a HeartbeatMessage (See RFC 6520).
- *
- * struct {
- * HeartbeatMessageType type;
- * uint16 payload_length;
- * opaque payload[HeartbeatMessage.payload_length];
- * opaque padding[padding_length];
- * } HeartbeatMessage;
- *
- * The total length of a HeartbeatMessage MUST NOT exceed 2^14 or
- * max_fragment_length when negotiated as defined in [RFC6066].
- *
- * type: The message type, either heartbeat_request or heartbeat_response.
- *
- * payload_length: The length of the payload.
- *
- * payload: The payload consists of arbitrary content.
- *
- * padding: The padding is random content that MUST be ignored by the
- * receiver. The length of a HeartbeatMessage is TLSPlaintext.length
- * for TLS and DTLSPlaintext.length for DTLS. Furthermore, the
- * length of the type field is 1 byte, and the length of the
- * payload_length is 2. Therefore, the padding_length is
- * TLSPlaintext.length - payload_length - 3 for TLS and
- * DTLSPlaintext.length - payload_length - 3 for DTLS. The
- * padding_length MUST be at least 16.
- *
- * The sender of a HeartbeatMessage MUST use a random padding of at
- * least 16 bytes. The padding of a received HeartbeatMessage message
- * MUST be ignored.
- *
- * If the payload_length of a received HeartbeatMessage is too large,
- * the received HeartbeatMessage MUST be discarded silently.
- *
- * @param c the connection.
- * @param type the tls.HeartbeatMessageType.
- * @param payload the heartbeat data to send as the payload.
- * @param [payloadLength] the payload length to use, defaults to the
- * actual payload length.
- *
- * @return the HeartbeatRequest byte buffer.
- */
-tls$1.createHeartbeat = function(type, payload, payloadLength) {
- if(typeof payloadLength === 'undefined') {
- payloadLength = payload.length;
- }
- // build record fragment
- var rval = forge$b.util.createBuffer();
- rval.putByte(type); // heartbeat message type
- rval.putInt16(payloadLength); // payload length
- rval.putBytes(payload); // payload
- // padding
- var plaintextLength = rval.length();
- var paddingLength = Math.max(16, plaintextLength - payloadLength - 3);
- rval.putBytes(forge$b.random.getBytes(paddingLength));
- return rval;
-};
-
-/**
- * Fragments, compresses, encrypts, and queues a record for delivery.
- *
- * @param c the connection.
- * @param record the record to queue.
- */
-tls$1.queue = function(c, record) {
- // error during record creation
- if(!record) {
- return;
- }
-
- if(record.fragment.length() === 0) {
- if(record.type === tls$1.ContentType.handshake ||
- record.type === tls$1.ContentType.alert ||
- record.type === tls$1.ContentType.change_cipher_spec) {
- // Empty handshake, alert of change cipher spec messages are not allowed per the TLS specification and should not be sent.
- return;
- }
- }
-
- // if the record is a handshake record, update handshake hashes
- if(record.type === tls$1.ContentType.handshake) {
- var bytes = record.fragment.bytes();
- c.session.md5.update(bytes);
- c.session.sha1.update(bytes);
- bytes = null;
- }
-
- // handle record fragmentation
- var records;
- if(record.fragment.length() <= tls$1.MaxFragment) {
- records = [record];
- } else {
- // fragment data as long as it is too long
- records = [];
- var data = record.fragment.bytes();
- while(data.length > tls$1.MaxFragment) {
- records.push(tls$1.createRecord(c, {
- type: record.type,
- data: forge$b.util.createBuffer(data.slice(0, tls$1.MaxFragment))
- }));
- data = data.slice(tls$1.MaxFragment);
- }
- // add last record
- if(data.length > 0) {
- records.push(tls$1.createRecord(c, {
- type: record.type,
- data: forge$b.util.createBuffer(data)
- }));
- }
- }
-
- // compress and encrypt all fragmented records
- for(var i = 0; i < records.length && !c.fail; ++i) {
- // update the record using current write state
- var rec = records[i];
- var s = c.state.current.write;
- if(s.update(c, rec)) {
- // store record
- c.records.push(rec);
- }
- }
-};
-
-/**
- * Flushes all queued records to the output buffer and calls the
- * tlsDataReady() handler on the given connection.
- *
- * @param c the connection.
- *
- * @return true on success, false on failure.
- */
-tls$1.flush = function(c) {
- for(var i = 0; i < c.records.length; ++i) {
- var record = c.records[i];
-
- // add record header and fragment
- c.tlsData.putByte(record.type);
- c.tlsData.putByte(record.version.major);
- c.tlsData.putByte(record.version.minor);
- c.tlsData.putInt16(record.fragment.length());
- c.tlsData.putBuffer(c.records[i].fragment);
- }
- c.records = [];
- return c.tlsDataReady(c);
-};
-
-/**
- * Maps a pki.certificateError to a tls.Alert.Description.
- *
- * @param error the error to map.
- *
- * @return the alert description.
- */
-var _certErrorToAlertDesc = function(error) {
- switch(error) {
- case true:
- return true;
- case forge$b.pki.certificateError.bad_certificate:
- return tls$1.Alert.Description.bad_certificate;
- case forge$b.pki.certificateError.unsupported_certificate:
- return tls$1.Alert.Description.unsupported_certificate;
- case forge$b.pki.certificateError.certificate_revoked:
- return tls$1.Alert.Description.certificate_revoked;
- case forge$b.pki.certificateError.certificate_expired:
- return tls$1.Alert.Description.certificate_expired;
- case forge$b.pki.certificateError.certificate_unknown:
- return tls$1.Alert.Description.certificate_unknown;
- case forge$b.pki.certificateError.unknown_ca:
- return tls$1.Alert.Description.unknown_ca;
- default:
- return tls$1.Alert.Description.bad_certificate;
- }
-};
-
-/**
- * Maps a tls.Alert.Description to a pki.certificateError.
- *
- * @param desc the alert description.
- *
- * @return the certificate error.
- */
-var _alertDescToCertError = function(desc) {
- switch(desc) {
- case true:
- return true;
- case tls$1.Alert.Description.bad_certificate:
- return forge$b.pki.certificateError.bad_certificate;
- case tls$1.Alert.Description.unsupported_certificate:
- return forge$b.pki.certificateError.unsupported_certificate;
- case tls$1.Alert.Description.certificate_revoked:
- return forge$b.pki.certificateError.certificate_revoked;
- case tls$1.Alert.Description.certificate_expired:
- return forge$b.pki.certificateError.certificate_expired;
- case tls$1.Alert.Description.certificate_unknown:
- return forge$b.pki.certificateError.certificate_unknown;
- case tls$1.Alert.Description.unknown_ca:
- return forge$b.pki.certificateError.unknown_ca;
- default:
- return forge$b.pki.certificateError.bad_certificate;
- }
-};
-
-/**
- * Verifies a certificate chain against the given connection's
- * Certificate Authority store.
- *
- * @param c the TLS connection.
- * @param chain the certificate chain to verify, with the root or highest
- * authority at the end.
- *
- * @return true if successful, false if not.
- */
-tls$1.verifyCertificateChain = function(c, chain) {
- try {
- // Make a copy of c.verifyOptions so that we can modify options.verify
- // without modifying c.verifyOptions.
- var options = {};
- for (var key in c.verifyOptions) {
- options[key] = c.verifyOptions[key];
- }
-
- options.verify = function(vfd, depth, chain) {
-
- // call application callback
- var ret = c.verify(c, vfd, depth, chain);
- if(ret !== true) {
- if(typeof ret === 'object' && !forge$b.util.isArray(ret)) {
- // throw custom error
- var error = new Error('The application rejected the certificate.');
- error.send = true;
- error.alert = {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.bad_certificate
- };
- if(ret.message) {
- error.message = ret.message;
- }
- if(ret.alert) {
- error.alert.description = ret.alert;
- }
- throw error;
- }
-
- // convert tls alert description to pki.certificateError
- if(ret !== vfd) {
- ret = _alertDescToCertError(ret);
- }
- }
-
- return ret;
- };
-
- // verify chain
- forge$b.pki.verifyCertificateChain(c.caStore, chain, options);
- } catch(ex) {
- // build tls error if not already customized
- var err = ex;
- if(typeof err !== 'object' || forge$b.util.isArray(err)) {
- err = {
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: _certErrorToAlertDesc(ex)
- }
- };
- }
- if(!('send' in err)) {
- err.send = true;
- }
- if(!('alert' in err)) {
- err.alert = {
- level: tls$1.Alert.Level.fatal,
- description: _certErrorToAlertDesc(err.error)
- };
- }
-
- // send error
- c.error(c, err);
- }
-
- return !c.fail;
-};
-
-/**
- * Creates a new TLS session cache.
- *
- * @param cache optional map of session ID to cached session.
- * @param capacity the maximum size for the cache (default: 100).
- *
- * @return the new TLS session cache.
- */
-tls$1.createSessionCache = function(cache, capacity) {
- var rval = null;
-
- // assume input is already a session cache object
- if(cache && cache.getSession && cache.setSession && cache.order) {
- rval = cache;
- } else {
- // create cache
- rval = {};
- rval.cache = cache || {};
- rval.capacity = Math.max(capacity || 100, 1);
- rval.order = [];
-
- // store order for sessions, delete session overflow
- for(var key in cache) {
- if(rval.order.length <= capacity) {
- rval.order.push(key);
- } else {
- delete cache[key];
- }
- }
-
- // get a session from a session ID (or get any session)
- rval.getSession = function(sessionId) {
- var session = null;
- var key = null;
-
- // if session ID provided, use it
- if(sessionId) {
- key = forge$b.util.bytesToHex(sessionId);
- } else if(rval.order.length > 0) {
- // get first session from cache
- key = rval.order[0];
- }
-
- if(key !== null && key in rval.cache) {
- // get cached session and remove from cache
- session = rval.cache[key];
- delete rval.cache[key];
- for(var i in rval.order) {
- if(rval.order[i] === key) {
- rval.order.splice(i, 1);
- break;
- }
- }
- }
-
- return session;
- };
-
- // set a session in the cache
- rval.setSession = function(sessionId, session) {
- // remove session from cache if at capacity
- if(rval.order.length === rval.capacity) {
- var key = rval.order.shift();
- delete rval.cache[key];
- }
- // add session to cache
- var key = forge$b.util.bytesToHex(sessionId);
- rval.order.push(key);
- rval.cache[key] = session;
- };
- }
-
- return rval;
-};
-
-/**
- * Creates a new TLS connection.
- *
- * See public createConnection() docs for more details.
- *
- * @param options the options for this connection.
- *
- * @return the new TLS connection.
- */
-tls$1.createConnection = function(options) {
- var caStore = null;
- if(options.caStore) {
- // if CA store is an array, convert it to a CA store object
- if(forge$b.util.isArray(options.caStore)) {
- caStore = forge$b.pki.createCaStore(options.caStore);
- } else {
- caStore = options.caStore;
- }
- } else {
- // create empty CA store
- caStore = forge$b.pki.createCaStore();
- }
-
- // setup default cipher suites
- var cipherSuites = options.cipherSuites || null;
- if(cipherSuites === null) {
- cipherSuites = [];
- for(var key in tls$1.CipherSuites) {
- cipherSuites.push(tls$1.CipherSuites[key]);
- }
- }
-
- // set default entity
- var entity = (options.server || false) ?
- tls$1.ConnectionEnd.server : tls$1.ConnectionEnd.client;
-
- // create session cache if requested
- var sessionCache = options.sessionCache ?
- tls$1.createSessionCache(options.sessionCache) : null;
-
- // create TLS connection
- var c = {
- version: {major: tls$1.Version.major, minor: tls$1.Version.minor},
- entity: entity,
- sessionId: options.sessionId,
- caStore: caStore,
- sessionCache: sessionCache,
- cipherSuites: cipherSuites,
- connected: options.connected,
- virtualHost: options.virtualHost || null,
- verifyClient: options.verifyClient || false,
- verify: options.verify || function(cn, vfd, dpth, cts) {return vfd;},
- verifyOptions: options.verifyOptions || {},
- getCertificate: options.getCertificate || null,
- getPrivateKey: options.getPrivateKey || null,
- getSignature: options.getSignature || null,
- input: forge$b.util.createBuffer(),
- tlsData: forge$b.util.createBuffer(),
- data: forge$b.util.createBuffer(),
- tlsDataReady: options.tlsDataReady,
- dataReady: options.dataReady,
- heartbeatReceived: options.heartbeatReceived,
- closed: options.closed,
- error: function(c, ex) {
- // set origin if not set
- ex.origin = ex.origin ||
- ((c.entity === tls$1.ConnectionEnd.client) ? 'client' : 'server');
-
- // send TLS alert
- if(ex.send) {
- tls$1.queue(c, tls$1.createAlert(c, ex.alert));
- tls$1.flush(c);
- }
-
- // error is fatal by default
- var fatal = (ex.fatal !== false);
- if(fatal) {
- // set fail flag
- c.fail = true;
- }
-
- // call error handler first
- options.error(c, ex);
-
- if(fatal) {
- // fatal error, close connection, do not clear fail
- c.close(false);
- }
- },
- deflate: options.deflate || null,
- inflate: options.inflate || null
- };
-
- /**
- * Resets a closed TLS connection for reuse. Called in c.close().
- *
- * @param clearFail true to clear the fail flag (default: true).
- */
- c.reset = function(clearFail) {
- c.version = {major: tls$1.Version.major, minor: tls$1.Version.minor};
- c.record = null;
- c.session = null;
- c.peerCertificate = null;
- c.state = {
- pending: null,
- current: null
- };
- c.expect = (c.entity === tls$1.ConnectionEnd.client) ? SHE : CHE;
- c.fragmented = null;
- c.records = [];
- c.open = false;
- c.handshakes = 0;
- c.handshaking = false;
- c.isConnected = false;
- c.fail = !(clearFail || typeof(clearFail) === 'undefined');
- c.input.clear();
- c.tlsData.clear();
- c.data.clear();
- c.state.current = tls$1.createConnectionState(c);
- };
-
- // do initial reset of connection
- c.reset();
-
- /**
- * Updates the current TLS engine state based on the given record.
- *
- * @param c the TLS connection.
- * @param record the TLS record to act on.
- */
- var _update = function(c, record) {
- // get record handler (align type in table by subtracting lowest)
- var aligned = record.type - tls$1.ContentType.change_cipher_spec;
- var handlers = ctTable[c.entity][c.expect];
- if(aligned in handlers) {
- handlers[aligned](c, record);
- } else {
- // unexpected record
- tls$1.handleUnexpected(c, record);
- }
- };
-
- /**
- * Reads the record header and initializes the next record on the given
- * connection.
- *
- * @param c the TLS connection with the next record.
- *
- * @return 0 if the input data could be processed, otherwise the
- * number of bytes required for data to be processed.
- */
- var _readRecordHeader = function(c) {
- var rval = 0;
-
- // get input buffer and its length
- var b = c.input;
- var len = b.length();
-
- // need at least 5 bytes to initialize a record
- if(len < 5) {
- rval = 5 - len;
- } else {
- // enough bytes for header
- // initialize record
- c.record = {
- type: b.getByte(),
- version: {
- major: b.getByte(),
- minor: b.getByte()
- },
- length: b.getInt16(),
- fragment: forge$b.util.createBuffer(),
- ready: false
- };
-
- // check record version
- var compatibleVersion = (c.record.version.major === c.version.major);
- if(compatibleVersion && c.session && c.session.version) {
- // session version already set, require same minor version
- compatibleVersion = (c.record.version.minor === c.version.minor);
- }
- if(!compatibleVersion) {
- c.error(c, {
- message: 'Incompatible TLS version.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description: tls$1.Alert.Description.protocol_version
- }
- });
- }
- }
-
- return rval;
- };
-
- /**
- * Reads the next record's contents and appends its message to any
- * previously fragmented message.
- *
- * @param c the TLS connection with the next record.
- *
- * @return 0 if the input data could be processed, otherwise the
- * number of bytes required for data to be processed.
- */
- var _readRecord = function(c) {
- var rval = 0;
-
- // ensure there is enough input data to get the entire record
- var b = c.input;
- var len = b.length();
- if(len < c.record.length) {
- // not enough data yet, return how much is required
- rval = c.record.length - len;
- } else {
- // there is enough data to parse the pending record
- // fill record fragment and compact input buffer
- c.record.fragment.putBytes(b.getBytes(c.record.length));
- b.compact();
-
- // update record using current read state
- var s = c.state.current.read;
- if(s.update(c, c.record)) {
- // see if there is a previously fragmented message that the
- // new record's message fragment should be appended to
- if(c.fragmented !== null) {
- // if the record type matches a previously fragmented
- // record, append the record fragment to it
- if(c.fragmented.type === c.record.type) {
- // concatenate record fragments
- c.fragmented.fragment.putBuffer(c.record.fragment);
- c.record = c.fragmented;
- } else {
- // error, invalid fragmented record
- c.error(c, {
- message: 'Invalid fragmented record.',
- send: true,
- alert: {
- level: tls$1.Alert.Level.fatal,
- description:
- tls$1.Alert.Description.unexpected_message
- }
- });
- }
- }
-
- // record is now ready
- c.record.ready = true;
- }
- }
-
- return rval;
- };
-
- /**
- * Performs a handshake using the TLS Handshake Protocol, as a client.
- *
- * This method should only be called if the connection is in client mode.
- *
- * @param sessionId the session ID to use, null to start a new one.
- */
- c.handshake = function(sessionId) {
- // error to call this in non-client mode
- if(c.entity !== tls$1.ConnectionEnd.client) {
- // not fatal error
- c.error(c, {
- message: 'Cannot initiate handshake as a server.',
- fatal: false
- });
- } else if(c.handshaking) {
- // handshake is already in progress, fail but not fatal error
- c.error(c, {
- message: 'Handshake already in progress.',
- fatal: false
- });
- } else {
- // clear fail flag on reuse
- if(c.fail && !c.open && c.handshakes === 0) {
- c.fail = false;
- }
-
- // now handshaking
- c.handshaking = true;
-
- // default to blank (new session)
- sessionId = sessionId || '';
-
- // if a session ID was specified, try to find it in the cache
- var session = null;
- if(sessionId.length > 0) {
- if(c.sessionCache) {
- session = c.sessionCache.getSession(sessionId);
- }
-
- // matching session not found in cache, clear session ID
- if(session === null) {
- sessionId = '';
- }
- }
-
- // no session given, grab a session from the cache, if available
- if(sessionId.length === 0 && c.sessionCache) {
- session = c.sessionCache.getSession();
- if(session !== null) {
- sessionId = session.id;
- }
- }
-
- // set up session
- c.session = {
- id: sessionId,
- version: null,
- cipherSuite: null,
- compressionMethod: null,
- serverCertificate: null,
- certificateRequest: null,
- clientCertificate: null,
- sp: {},
- md5: forge$b.md.md5.create(),
- sha1: forge$b.md.sha1.create()
- };
-
- // use existing session information
- if(session) {
- // only update version on connection, session version not yet set
- c.version = session.version;
- c.session.sp = session.sp;
- }
-
- // generate new client random
- c.session.sp.client_random = tls$1.createRandom().getBytes();
-
- // connection now open
- c.open = true;
-
- // send hello
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.handshake,
- data: tls$1.createClientHello(c)
- }));
- tls$1.flush(c);
- }
- };
-
- /**
- * Called when TLS protocol data has been received from somewhere and should
- * be processed by the TLS engine.
- *
- * @param data the TLS protocol data, as a string, to process.
- *
- * @return 0 if the data could be processed, otherwise the number of bytes
- * required for data to be processed.
- */
- c.process = function(data) {
- var rval = 0;
-
- // buffer input data
- if(data) {
- c.input.putBytes(data);
- }
-
- // process next record if no failure, process will be called after
- // each record is handled (since handling can be asynchronous)
- if(!c.fail) {
- // reset record if ready and now empty
- if(c.record !== null &&
- c.record.ready && c.record.fragment.isEmpty()) {
- c.record = null;
- }
-
- // if there is no pending record, try to read record header
- if(c.record === null) {
- rval = _readRecordHeader(c);
- }
-
- // read the next record (if record not yet ready)
- if(!c.fail && c.record !== null && !c.record.ready) {
- rval = _readRecord(c);
- }
-
- // record ready to be handled, update engine state
- if(!c.fail && c.record !== null && c.record.ready) {
- _update(c, c.record);
- }
- }
-
- return rval;
- };
-
- /**
- * Requests that application data be packaged into a TLS record. The
- * tlsDataReady handler will be called when the TLS record(s) have been
- * prepared.
- *
- * @param data the application data, as a raw 'binary' encoded string, to
- * be sent; to send utf-16/utf-8 string data, use the return value
- * of util.encodeUtf8(str).
- *
- * @return true on success, false on failure.
- */
- c.prepare = function(data) {
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.application_data,
- data: forge$b.util.createBuffer(data)
- }));
- return tls$1.flush(c);
- };
-
- /**
- * Requests that a heartbeat request be packaged into a TLS record for
- * transmission. The tlsDataReady handler will be called when TLS record(s)
- * have been prepared.
- *
- * When a heartbeat response has been received, the heartbeatReceived
- * handler will be called with the matching payload. This handler can
- * be used to clear a retransmission timer, etc.
- *
- * @param payload the heartbeat data to send as the payload in the message.
- * @param [payloadLength] the payload length to use, defaults to the
- * actual payload length.
- *
- * @return true on success, false on failure.
- */
- c.prepareHeartbeatRequest = function(payload, payloadLength) {
- if(payload instanceof forge$b.util.ByteBuffer) {
- payload = payload.bytes();
- }
- if(typeof payloadLength === 'undefined') {
- payloadLength = payload.length;
- }
- c.expectedHeartbeatPayload = payload;
- tls$1.queue(c, tls$1.createRecord(c, {
- type: tls$1.ContentType.heartbeat,
- data: tls$1.createHeartbeat(
- tls$1.HeartbeatMessageType.heartbeat_request, payload, payloadLength)
- }));
- return tls$1.flush(c);
- };
-
- /**
- * Closes the connection (sends a close_notify alert).
- *
- * @param clearFail true to clear the fail flag (default: true).
- */
- c.close = function(clearFail) {
- // save session if connection didn't fail
- if(!c.fail && c.sessionCache && c.session) {
- // only need to preserve session ID, version, and security params
- var session = {
- id: c.session.id,
- version: c.session.version,
- sp: c.session.sp
- };
- session.sp.keys = null;
- c.sessionCache.setSession(session.id, session);
- }
-
- if(c.open) {
- // connection no longer open, clear input
- c.open = false;
- c.input.clear();
-
- // if connected or handshaking, send an alert
- if(c.isConnected || c.handshaking) {
- c.isConnected = c.handshaking = false;
-
- // send close_notify alert
- tls$1.queue(c, tls$1.createAlert(c, {
- level: tls$1.Alert.Level.warning,
- description: tls$1.Alert.Description.close_notify
- }));
- tls$1.flush(c);
- }
-
- // call handler
- c.closed(c);
- }
-
- // reset TLS connection, do not clear fail flag
- c.reset(clearFail);
- };
-
- return c;
-};
-
-/* TLS API */
-forge$b.tls = forge$b.tls || {};
-
-// expose non-functions
-for(var key in tls$1) {
- if(typeof tls$1[key] !== 'function') {
- forge$b.tls[key] = tls$1[key];
- }
-}
-
-// expose prf_tls1 for testing
-forge$b.tls.prf_tls1 = prf_TLS1;
-
-// expose sha1 hmac method
-forge$b.tls.hmac_sha1 = hmac_sha1;
-
-// expose session cache creation
-forge$b.tls.createSessionCache = tls$1.createSessionCache;
-
-/**
- * Creates a new TLS connection. This does not make any assumptions about the
- * transport layer that TLS is working on top of, ie: it does not assume there
- * is a TCP/IP connection or establish one. A TLS connection is totally
- * abstracted away from the layer is runs on top of, it merely establishes a
- * secure channel between a client" and a "server".
- *
- * A TLS connection contains 4 connection states: pending read and write, and
- * current read and write.
- *
- * At initialization, the current read and write states will be null. Only once
- * the security parameters have been set and the keys have been generated can
- * the pending states be converted into current states. Current states will be
- * updated for each record processed.
- *
- * A custom certificate verify callback may be provided to check information
- * like the common name on the server's certificate. It will be called for
- * every certificate in the chain. It has the following signature:
- *
- * variable func(c, certs, index, preVerify)
- * Where:
- * c The TLS connection
- * verified Set to true if certificate was verified, otherwise the alert
- * tls.Alert.Description for why the certificate failed.
- * depth The current index in the chain, where 0 is the server's cert.
- * certs The certificate chain, *NOTE* if the server was anonymous then
- * the chain will be empty.
- *
- * The function returns true on success and on failure either the appropriate
- * tls.Alert.Description or an object with 'alert' set to the appropriate
- * tls.Alert.Description and 'message' set to a custom error message. If true
- * is not returned then the connection will abort using, in order of
- * availability, first the returned alert description, second the preVerify
- * alert description, and lastly the default 'bad_certificate'.
- *
- * There are three callbacks that can be used to make use of client-side
- * certificates where each takes the TLS connection as the first parameter:
- *
- * getCertificate(conn, hint)
- * The second parameter is a hint as to which certificate should be
- * returned. If the connection entity is a client, then the hint will be
- * the CertificateRequest message from the server that is part of the
- * TLS protocol. If the connection entity is a server, then it will be
- * the servername list provided via an SNI extension the ClientHello, if
- * one was provided (empty array if not). The hint can be examined to
- * determine which certificate to use (advanced). Most implementations
- * will just return a certificate. The return value must be a
- * PEM-formatted certificate or an array of PEM-formatted certificates
- * that constitute a certificate chain, with the first in the array/chain
- * being the client's certificate.
- * getPrivateKey(conn, certificate)
- * The second parameter is an forge.pki X.509 certificate object that
- * is associated with the requested private key. The return value must
- * be a PEM-formatted private key.
- * getSignature(conn, bytes, callback)
- * This callback can be used instead of getPrivateKey if the private key
- * is not directly accessible in javascript or should not be. For
- * instance, a secure external web service could provide the signature
- * in exchange for appropriate credentials. The second parameter is a
- * string of bytes to be signed that are part of the TLS protocol. These
- * bytes are used to verify that the private key for the previously
- * provided client-side certificate is accessible to the client. The
- * callback is a function that takes 2 parameters, the TLS connection
- * and the RSA encrypted (signed) bytes as a string. This callback must
- * be called once the signature is ready.
- *
- * @param options the options for this connection:
- * server: true if the connection is server-side, false for client.
- * sessionId: a session ID to reuse, null for a new connection.
- * caStore: an array of certificates to trust.
- * sessionCache: a session cache to use.
- * cipherSuites: an optional array of cipher suites to use,
- * see tls.CipherSuites.
- * connected: function(conn) called when the first handshake completes.
- * virtualHost: the virtual server name to use in a TLS SNI extension.
- * verifyClient: true to require a client certificate in server mode,
- * 'optional' to request one, false not to (default: false).
- * verify: a handler used to custom verify certificates in the chain.
- * verifyOptions: an object with options for the certificate chain validation.
- * See documentation of pki.verifyCertificateChain for possible options.
- * verifyOptions.verify is ignored. If you wish to specify a verify handler
- * use the verify key.
- * getCertificate: an optional callback used to get a certificate or
- * a chain of certificates (as an array).
- * getPrivateKey: an optional callback used to get a private key.
- * getSignature: an optional callback used to get a signature.
- * tlsDataReady: function(conn) called when TLS protocol data has been
- * prepared and is ready to be used (typically sent over a socket
- * connection to its destination), read from conn.tlsData buffer.
- * dataReady: function(conn) called when application data has
- * been parsed from a TLS record and should be consumed by the
- * application, read from conn.data buffer.
- * closed: function(conn) called when the connection has been closed.
- * error: function(conn, error) called when there was an error.
- * deflate: function(inBytes) if provided, will deflate TLS records using
- * the deflate algorithm if the server supports it.
- * inflate: function(inBytes) if provided, will inflate TLS records using
- * the deflate algorithm if the server supports it.
- *
- * @return the new TLS connection.
- */
-forge$b.tls.createConnection = tls$1.createConnection;
-
-/**
- * A Javascript implementation of AES Cipher Suites for TLS.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2009-2015 Digital Bazaar, Inc.
- *
- */
-
-var forge$a = forge$F;
-
-
-
-var tls = forge$a.tls;
-
-/**
- * Supported cipher suites.
- */
-tls.CipherSuites['TLS_RSA_WITH_AES_128_CBC_SHA'] = {
- id: [0x00, 0x2f],
- name: 'TLS_RSA_WITH_AES_128_CBC_SHA',
- initSecurityParameters: function(sp) {
- sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes;
- sp.cipher_type = tls.CipherType.block;
- sp.enc_key_length = 16;
- sp.block_length = 16;
- sp.fixed_iv_length = 16;
- sp.record_iv_length = 16;
- sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1;
- sp.mac_length = 20;
- sp.mac_key_length = 20;
- },
- initConnectionState: initConnectionState
-};
-tls.CipherSuites['TLS_RSA_WITH_AES_256_CBC_SHA'] = {
- id: [0x00, 0x35],
- name: 'TLS_RSA_WITH_AES_256_CBC_SHA',
- initSecurityParameters: function(sp) {
- sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes;
- sp.cipher_type = tls.CipherType.block;
- sp.enc_key_length = 32;
- sp.block_length = 16;
- sp.fixed_iv_length = 16;
- sp.record_iv_length = 16;
- sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1;
- sp.mac_length = 20;
- sp.mac_key_length = 20;
- },
- initConnectionState: initConnectionState
-};
-
-function initConnectionState(state, c, sp) {
- var client = (c.entity === forge$a.tls.ConnectionEnd.client);
-
- // cipher setup
- state.read.cipherState = {
- init: false,
- cipher: forge$a.cipher.createDecipher('AES-CBC', client ?
- sp.keys.server_write_key : sp.keys.client_write_key),
- iv: client ? sp.keys.server_write_IV : sp.keys.client_write_IV
- };
- state.write.cipherState = {
- init: false,
- cipher: forge$a.cipher.createCipher('AES-CBC', client ?
- sp.keys.client_write_key : sp.keys.server_write_key),
- iv: client ? sp.keys.client_write_IV : sp.keys.server_write_IV
- };
- state.read.cipherFunction = decrypt_aes_cbc_sha1;
- state.write.cipherFunction = encrypt_aes_cbc_sha1;
-
- // MAC setup
- state.read.macLength = state.write.macLength = sp.mac_length;
- state.read.macFunction = state.write.macFunction = tls.hmac_sha1;
-}
-
-/**
- * Encrypts the TLSCompressed record into a TLSCipherText record using AES
- * in CBC mode.
- *
- * @param record the TLSCompressed record to encrypt.
- * @param s the ConnectionState to use.
- *
- * @return true on success, false on failure.
- */
-function encrypt_aes_cbc_sha1(record, s) {
- var rval = false;
-
- // append MAC to fragment, update sequence number
- var mac = s.macFunction(s.macKey, s.sequenceNumber, record);
- record.fragment.putBytes(mac);
- s.updateSequenceNumber();
-
- // TLS 1.1+ use an explicit IV every time to protect against CBC attacks
- var iv;
- if(record.version.minor === tls.Versions.TLS_1_0.minor) {
- // use the pre-generated IV when initializing for TLS 1.0, otherwise use
- // the residue from the previous encryption
- iv = s.cipherState.init ? null : s.cipherState.iv;
- } else {
- iv = forge$a.random.getBytesSync(16);
- }
-
- s.cipherState.init = true;
-
- // start cipher
- var cipher = s.cipherState.cipher;
- cipher.start({iv: iv});
-
- // TLS 1.1+ write IV into output
- if(record.version.minor >= tls.Versions.TLS_1_1.minor) {
- cipher.output.putBytes(iv);
- }
-
- // do encryption (default padding is appropriate)
- cipher.update(record.fragment);
- if(cipher.finish(encrypt_aes_cbc_sha1_padding)) {
- // set record fragment to encrypted output
- record.fragment = cipher.output;
- record.length = record.fragment.length();
- rval = true;
- }
-
- return rval;
-}
-
-/**
- * Handles padding for aes_cbc_sha1 in encrypt mode.
- *
- * @param blockSize the block size.
- * @param input the input buffer.
- * @param decrypt true in decrypt mode, false in encrypt mode.
- *
- * @return true on success, false on failure.
- */
-function encrypt_aes_cbc_sha1_padding(blockSize, input, decrypt) {
- /* The encrypted data length (TLSCiphertext.length) is one more than the sum
- of SecurityParameters.block_length, TLSCompressed.length,
- SecurityParameters.mac_length, and padding_length.
-
- The padding may be any length up to 255 bytes long, as long as it results in
- the TLSCiphertext.length being an integral multiple of the block length.
- Lengths longer than necessary might be desirable to frustrate attacks on a
- protocol based on analysis of the lengths of exchanged messages. Each uint8
- in the padding data vector must be filled with the padding length value.
-
- The padding length should be such that the total size of the
- GenericBlockCipher structure is a multiple of the cipher's block length.
- Legal values range from zero to 255, inclusive. This length specifies the
- length of the padding field exclusive of the padding_length field itself.
-
- This is slightly different from PKCS#7 because the padding value is 1
- less than the actual number of padding bytes if you include the
- padding_length uint8 itself as a padding byte. */
- if(!decrypt) {
- // get the number of padding bytes required to reach the blockSize and
- // subtract 1 for the padding value (to make room for the padding_length
- // uint8)
- var padding = blockSize - (input.length() % blockSize);
- input.fillWithByte(padding - 1, padding);
- }
- return true;
-}
-
-/**
- * Handles padding for aes_cbc_sha1 in decrypt mode.
- *
- * @param blockSize the block size.
- * @param output the output buffer.
- * @param decrypt true in decrypt mode, false in encrypt mode.
- *
- * @return true on success, false on failure.
- */
-function decrypt_aes_cbc_sha1_padding(blockSize, output, decrypt) {
- var rval = true;
- if(decrypt) {
- /* The last byte in the output specifies the number of padding bytes not
- including itself. Each of the padding bytes has the same value as that
- last byte (known as the padding_length). Here we check all padding
- bytes to ensure they have the value of padding_length even if one of
- them is bad in order to ward-off timing attacks. */
- var len = output.length();
- var paddingLength = output.last();
- for(var i = len - 1 - paddingLength; i < len - 1; ++i) {
- rval = rval && (output.at(i) == paddingLength);
- }
- if(rval) {
- // trim off padding bytes and last padding length byte
- output.truncate(paddingLength + 1);
- }
- }
- return rval;
-}
-
-/**
- * Decrypts a TLSCipherText record into a TLSCompressed record using
- * AES in CBC mode.
- *
- * @param record the TLSCipherText record to decrypt.
- * @param s the ConnectionState to use.
- *
- * @return true on success, false on failure.
- */
-function decrypt_aes_cbc_sha1(record, s) {
- var rval = false;
-
- var iv;
- if(record.version.minor === tls.Versions.TLS_1_0.minor) {
- // use pre-generated IV when initializing for TLS 1.0, otherwise use the
- // residue from the previous decryption
- iv = s.cipherState.init ? null : s.cipherState.iv;
- } else {
- // TLS 1.1+ use an explicit IV every time to protect against CBC attacks
- // that is appended to the record fragment
- iv = record.fragment.getBytes(16);
- }
-
- s.cipherState.init = true;
-
- // start cipher
- var cipher = s.cipherState.cipher;
- cipher.start({iv: iv});
-
- // do decryption
- cipher.update(record.fragment);
- rval = cipher.finish(decrypt_aes_cbc_sha1_padding);
-
- // even if decryption fails, keep going to minimize timing attacks
-
- // decrypted data:
- // first (len - 20) bytes = application data
- // last 20 bytes = MAC
- var macLen = s.macLength;
-
- // create a random MAC to check against should the mac length check fail
- // Note: do this regardless of the failure to keep timing consistent
- var mac = forge$a.random.getBytesSync(macLen);
-
- // get fragment and mac
- var len = cipher.output.length();
- if(len >= macLen) {
- record.fragment = cipher.output.getBytes(len - macLen);
- mac = cipher.output.getBytes(macLen);
- } else {
- // bad data, but get bytes anyway to try to keep timing consistent
- record.fragment = cipher.output.getBytes();
- }
- record.fragment = forge$a.util.createBuffer(record.fragment);
- record.length = record.fragment.length();
-
- // see if data integrity checks out, update sequence number
- var mac2 = s.macFunction(s.macKey, s.sequenceNumber, record);
- s.updateSequenceNumber();
- rval = compareMacs(s.macKey, mac, mac2) && rval;
- return rval;
-}
-
-/**
- * Safely compare two MACs. This function will compare two MACs in a way
- * that protects against timing attacks.
- *
- * TODO: Expose elsewhere as a utility API.
- *
- * See: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/
- *
- * @param key the MAC key to use.
- * @param mac1 as a binary-encoded string of bytes.
- * @param mac2 as a binary-encoded string of bytes.
- *
- * @return true if the MACs are the same, false if not.
- */
-function compareMacs(key, mac1, mac2) {
- var hmac = forge$a.hmac.create();
-
- hmac.start('SHA1', key);
- hmac.update(mac1);
- mac1 = hmac.digest().getBytes();
-
- hmac.start(null, null);
- hmac.update(mac2);
- mac2 = hmac.digest().getBytes();
-
- return mac1 === mac2;
-}
-
-/**
- * Debugging support for web applications.
- *
- * @author David I. Lehn <dlehn@digitalbazaar.com>
- *
- * Copyright 2008-2013 Digital Bazaar, Inc.
- */
-
-var forge$9 = forge$F;
-
-/* DEBUG API */
-forge$9.debug = forge$9.debug || {};
-
-// Private storage for debugging.
-// Useful to expose data that is otherwise unviewable behind closures.
-// NOTE: remember that this can hold references to data and cause leaks!
-// format is "forge._debug.<modulename>.<dataname> = data"
-// Example:
-// (function() {
-// var cat = 'forge.test.Test'; // debugging category
-// var sState = {...}; // local state
-// forge.debug.set(cat, 'sState', sState);
-// })();
-forge$9.debug.storage = {};
-
-/**
- * Gets debug data. Omit name for all cat data Omit name and cat for
- * all data.
- *
- * @param cat name of debugging category.
- * @param name name of data to get (optional).
- * @return object with requested debug data or undefined.
- */
-forge$9.debug.get = function(cat, name) {
- var rval;
- if(typeof(cat) === 'undefined') {
- rval = forge$9.debug.storage;
- } else if(cat in forge$9.debug.storage) {
- if(typeof(name) === 'undefined') {
- rval = forge$9.debug.storage[cat];
- } else {
- rval = forge$9.debug.storage[cat][name];
- }
- }
- return rval;
-};
-
-/**
- * Sets debug data.
- *
- * @param cat name of debugging category.
- * @param name name of data to set.
- * @param data data to set.
- */
-forge$9.debug.set = function(cat, name, data) {
- if(!(cat in forge$9.debug.storage)) {
- forge$9.debug.storage[cat] = {};
- }
- forge$9.debug.storage[cat][name] = data;
-};
-
-/**
- * Clears debug data. Omit name for all cat data. Omit name and cat for
- * all data.
- *
- * @param cat name of debugging category.
- * @param name name of data to clear or omit to clear entire category.
- */
-forge$9.debug.clear = function(cat, name) {
- if(typeof(cat) === 'undefined') {
- forge$9.debug.storage = {};
- } else if(cat in forge$9.debug.storage) {
- if(typeof(name) === 'undefined') {
- delete forge$9.debug.storage[cat];
- } else {
- delete forge$9.debug.storage[cat][name];
- }
- }
-};
-
-/**
- * Secure Hash Algorithm with a 1024-bit block size implementation.
- *
- * This includes: SHA-512, SHA-384, SHA-512/224, and SHA-512/256. For
- * SHA-256 (block size 512 bits), see sha256.js.
- *
- * See FIPS 180-4 for details.
- *
- * @author Dave Longley
- *
- * Copyright (c) 2014-2015 Digital Bazaar, Inc.
- */
-
-var forge$8 = forge$F;
-
-
-
-var sha512$1 = forge$8.sha512 = forge$8.sha512 || {};
-
-// SHA-512
-forge$8.md.sha512 = forge$8.md.algorithms.sha512 = sha512$1;
-
-// SHA-384
-var sha384 = forge$8.sha384 = forge$8.sha512.sha384 = forge$8.sha512.sha384 || {};
-sha384.create = function() {
- return sha512$1.create('SHA-384');
-};
-forge$8.md.sha384 = forge$8.md.algorithms.sha384 = sha384;
-
-// SHA-512/256
-forge$8.sha512.sha256 = forge$8.sha512.sha256 || {
- create: function() {
- return sha512$1.create('SHA-512/256');
- }
-};
-forge$8.md['sha512/256'] = forge$8.md.algorithms['sha512/256'] =
- forge$8.sha512.sha256;
-
-// SHA-512/224
-forge$8.sha512.sha224 = forge$8.sha512.sha224 || {
- create: function() {
- return sha512$1.create('SHA-512/224');
- }
-};
-forge$8.md['sha512/224'] = forge$8.md.algorithms['sha512/224'] =
- forge$8.sha512.sha224;
-
-/**
- * Creates a SHA-2 message digest object.
- *
- * @param algorithm the algorithm to use (SHA-512, SHA-384, SHA-512/224,
- * SHA-512/256).
- *
- * @return a message digest object.
- */
-sha512$1.create = function(algorithm) {
- // do initialization as necessary
- if(!_initialized) {
- _init();
- }
-
- if(typeof algorithm === 'undefined') {
- algorithm = 'SHA-512';
- }
-
- if(!(algorithm in _states)) {
- throw new Error('Invalid SHA-512 algorithm: ' + algorithm);
- }
-
- // SHA-512 state contains eight 64-bit integers (each as two 32-bit ints)
- var _state = _states[algorithm];
- var _h = null;
-
- // input buffer
- var _input = forge$8.util.createBuffer();
-
- // used for 64-bit word storage
- var _w = new Array(80);
- for(var wi = 0; wi < 80; ++wi) {
- _w[wi] = new Array(2);
- }
-
- // determine digest length by algorithm name (default)
- var digestLength = 64;
- switch(algorithm) {
- case 'SHA-384':
- digestLength = 48;
- break;
- case 'SHA-512/256':
- digestLength = 32;
- break;
- case 'SHA-512/224':
- digestLength = 28;
- break;
- }
-
- // message digest object
- var md = {
- // SHA-512 => sha512
- algorithm: algorithm.replace('-', '').toLowerCase(),
- blockLength: 128,
- digestLength: digestLength,
- // 56-bit length of message so far (does not including padding)
- messageLength: 0,
- // true message length
- fullMessageLength: null,
- // size of message length in bytes
- messageLengthSize: 16
- };
-
- /**
- * Starts the digest.
- *
- * @return this digest object.
- */
- md.start = function() {
- // up to 56-bit message length for convenience
- md.messageLength = 0;
-
- // full message length (set md.messageLength128 for backwards-compatibility)
- md.fullMessageLength = md.messageLength128 = [];
- var int32s = md.messageLengthSize / 4;
- for(var i = 0; i < int32s; ++i) {
- md.fullMessageLength.push(0);
- }
- _input = forge$8.util.createBuffer();
- _h = new Array(_state.length);
- for(var i = 0; i < _state.length; ++i) {
- _h[i] = _state[i].slice(0);
- }
- return md;
- };
- // start digest automatically for first time
- md.start();
-
- /**
- * Updates the digest with the given message input. The given input can
- * treated as raw input (no encoding will be applied) or an encoding of
- * 'utf8' maybe given to encode the input using UTF-8.
- *
- * @param msg the message input to update with.
- * @param encoding the encoding to use (default: 'raw', other: 'utf8').
- *
- * @return this digest object.
- */
- md.update = function(msg, encoding) {
- if(encoding === 'utf8') {
- msg = forge$8.util.encodeUtf8(msg);
- }
-
- // update message length
- var len = msg.length;
- md.messageLength += len;
- len = [(len / 0x100000000) >>> 0, len >>> 0];
- for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {
- md.fullMessageLength[i] += len[1];
- len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);
- md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;
- len[0] = ((len[1] / 0x100000000) >>> 0);
- }
-
- // add bytes to input buffer
- _input.putBytes(msg);
-
- // process bytes
- _update(_h, _w, _input);
-
- // compact input buffer every 2K or if empty
- if(_input.read > 2048 || _input.length() === 0) {
- _input.compact();
- }
-
- return md;
- };
-
- /**
- * Produces the digest.
- *
- * @return a byte buffer containing the digest value.
- */
- md.digest = function() {
- /* Note: Here we copy the remaining bytes in the input buffer and
- add the appropriate SHA-512 padding. Then we do the final update
- on a copy of the state so that if the user wants to get
- intermediate digests they can do so. */
-
- /* Determine the number of bytes that must be added to the message
- to ensure its length is congruent to 896 mod 1024. In other words,
- the data to be digested must be a multiple of 1024 bits (or 128 bytes).
- This data includes the message, some padding, and the length of the
- message. Since the length of the message will be encoded as 16 bytes (128
- bits), that means that the last segment of the data must have 112 bytes
- (896 bits) of message and padding. Therefore, the length of the message
- plus the padding must be congruent to 896 mod 1024 because
- 1024 - 128 = 896.
-
- In order to fill up the message length it must be filled with
- padding that begins with 1 bit followed by all 0 bits. Padding
- must *always* be present, so if the message length is already
- congruent to 896 mod 1024, then 1024 padding bits must be added. */
-
- var finalBlock = forge$8.util.createBuffer();
- finalBlock.putBytes(_input.bytes());
-
- // compute remaining size to be digested (include message length size)
- var remaining = (
- md.fullMessageLength[md.fullMessageLength.length - 1] +
- md.messageLengthSize);
-
- // add padding for overflow blockSize - overflow
- // _padding starts with 1 byte with first bit is set (byte value 128), then
- // there may be up to (blockSize - 1) other pad bytes
- var overflow = remaining & (md.blockLength - 1);
- finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));
-
- // serialize message length in bits in big-endian order; since length
- // is stored in bytes we multiply by 8 and add carry from next int
- var next, carry;
- var bits = md.fullMessageLength[0] * 8;
- for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {
- next = md.fullMessageLength[i + 1] * 8;
- carry = (next / 0x100000000) >>> 0;
- bits += carry;
- finalBlock.putInt32(bits >>> 0);
- bits = next >>> 0;
- }
- finalBlock.putInt32(bits);
-
- var h = new Array(_h.length);
- for(var i = 0; i < _h.length; ++i) {
- h[i] = _h[i].slice(0);
- }
- _update(h, _w, finalBlock);
- var rval = forge$8.util.createBuffer();
- var hlen;
- if(algorithm === 'SHA-512') {
- hlen = h.length;
- } else if(algorithm === 'SHA-384') {
- hlen = h.length - 2;
- } else {
- hlen = h.length - 4;
- }
- for(var i = 0; i < hlen; ++i) {
- rval.putInt32(h[i][0]);
- if(i !== hlen - 1 || algorithm !== 'SHA-512/224') {
- rval.putInt32(h[i][1]);
- }
- }
- return rval;
- };
-
- return md;
-};
-
-// sha-512 padding bytes not initialized yet
-var _padding = null;
-var _initialized = false;
-
-// table of constants
-var _k = null;
-
-// initial hash states
-var _states = null;
-
-/**
- * Initializes the constant tables.
- */
-function _init() {
- // create padding
- _padding = String.fromCharCode(128);
- _padding += forge$8.util.fillString(String.fromCharCode(0x00), 128);
-
- // create K table for SHA-512
- _k = [
- [0x428a2f98, 0xd728ae22], [0x71374491, 0x23ef65cd],
- [0xb5c0fbcf, 0xec4d3b2f], [0xe9b5dba5, 0x8189dbbc],
- [0x3956c25b, 0xf348b538], [0x59f111f1, 0xb605d019],
- [0x923f82a4, 0xaf194f9b], [0xab1c5ed5, 0xda6d8118],
- [0xd807aa98, 0xa3030242], [0x12835b01, 0x45706fbe],
- [0x243185be, 0x4ee4b28c], [0x550c7dc3, 0xd5ffb4e2],
- [0x72be5d74, 0xf27b896f], [0x80deb1fe, 0x3b1696b1],
- [0x9bdc06a7, 0x25c71235], [0xc19bf174, 0xcf692694],
- [0xe49b69c1, 0x9ef14ad2], [0xefbe4786, 0x384f25e3],
- [0x0fc19dc6, 0x8b8cd5b5], [0x240ca1cc, 0x77ac9c65],
- [0x2de92c6f, 0x592b0275], [0x4a7484aa, 0x6ea6e483],
- [0x5cb0a9dc, 0xbd41fbd4], [0x76f988da, 0x831153b5],
- [0x983e5152, 0xee66dfab], [0xa831c66d, 0x2db43210],
- [0xb00327c8, 0x98fb213f], [0xbf597fc7, 0xbeef0ee4],
- [0xc6e00bf3, 0x3da88fc2], [0xd5a79147, 0x930aa725],
- [0x06ca6351, 0xe003826f], [0x14292967, 0x0a0e6e70],
- [0x27b70a85, 0x46d22ffc], [0x2e1b2138, 0x5c26c926],
- [0x4d2c6dfc, 0x5ac42aed], [0x53380d13, 0x9d95b3df],
- [0x650a7354, 0x8baf63de], [0x766a0abb, 0x3c77b2a8],
- [0x81c2c92e, 0x47edaee6], [0x92722c85, 0x1482353b],
- [0xa2bfe8a1, 0x4cf10364], [0xa81a664b, 0xbc423001],
- [0xc24b8b70, 0xd0f89791], [0xc76c51a3, 0x0654be30],
- [0xd192e819, 0xd6ef5218], [0xd6990624, 0x5565a910],
- [0xf40e3585, 0x5771202a], [0x106aa070, 0x32bbd1b8],
- [0x19a4c116, 0xb8d2d0c8], [0x1e376c08, 0x5141ab53],
- [0x2748774c, 0xdf8eeb99], [0x34b0bcb5, 0xe19b48a8],
- [0x391c0cb3, 0xc5c95a63], [0x4ed8aa4a, 0xe3418acb],
- [0x5b9cca4f, 0x7763e373], [0x682e6ff3, 0xd6b2b8a3],
- [0x748f82ee, 0x5defb2fc], [0x78a5636f, 0x43172f60],
- [0x84c87814, 0xa1f0ab72], [0x8cc70208, 0x1a6439ec],
- [0x90befffa, 0x23631e28], [0xa4506ceb, 0xde82bde9],
- [0xbef9a3f7, 0xb2c67915], [0xc67178f2, 0xe372532b],
- [0xca273ece, 0xea26619c], [0xd186b8c7, 0x21c0c207],
- [0xeada7dd6, 0xcde0eb1e], [0xf57d4f7f, 0xee6ed178],
- [0x06f067aa, 0x72176fba], [0x0a637dc5, 0xa2c898a6],
- [0x113f9804, 0xbef90dae], [0x1b710b35, 0x131c471b],
- [0x28db77f5, 0x23047d84], [0x32caab7b, 0x40c72493],
- [0x3c9ebe0a, 0x15c9bebc], [0x431d67c4, 0x9c100d4c],
- [0x4cc5d4be, 0xcb3e42b6], [0x597f299c, 0xfc657e2a],
- [0x5fcb6fab, 0x3ad6faec], [0x6c44198c, 0x4a475817]
- ];
-
- // initial hash states
- _states = {};
- _states['SHA-512'] = [
- [0x6a09e667, 0xf3bcc908],
- [0xbb67ae85, 0x84caa73b],
- [0x3c6ef372, 0xfe94f82b],
- [0xa54ff53a, 0x5f1d36f1],
- [0x510e527f, 0xade682d1],
- [0x9b05688c, 0x2b3e6c1f],
- [0x1f83d9ab, 0xfb41bd6b],
- [0x5be0cd19, 0x137e2179]
- ];
- _states['SHA-384'] = [
- [0xcbbb9d5d, 0xc1059ed8],
- [0x629a292a, 0x367cd507],
- [0x9159015a, 0x3070dd17],
- [0x152fecd8, 0xf70e5939],
- [0x67332667, 0xffc00b31],
- [0x8eb44a87, 0x68581511],
- [0xdb0c2e0d, 0x64f98fa7],
- [0x47b5481d, 0xbefa4fa4]
- ];
- _states['SHA-512/256'] = [
- [0x22312194, 0xFC2BF72C],
- [0x9F555FA3, 0xC84C64C2],
- [0x2393B86B, 0x6F53B151],
- [0x96387719, 0x5940EABD],
- [0x96283EE2, 0xA88EFFE3],
- [0xBE5E1E25, 0x53863992],
- [0x2B0199FC, 0x2C85B8AA],
- [0x0EB72DDC, 0x81C52CA2]
- ];
- _states['SHA-512/224'] = [
- [0x8C3D37C8, 0x19544DA2],
- [0x73E19966, 0x89DCD4D6],
- [0x1DFAB7AE, 0x32FF9C82],
- [0x679DD514, 0x582F9FCF],
- [0x0F6D2B69, 0x7BD44DA8],
- [0x77E36F73, 0x04C48942],
- [0x3F9D85A8, 0x6A1D36C8],
- [0x1112E6AD, 0x91D692A1]
- ];
-
- // now initialized
- _initialized = true;
-}
-
-/**
- * Updates a SHA-512 state with the given byte buffer.
- *
- * @param s the SHA-512 state to update.
- * @param w the array to use to store words.
- * @param bytes the byte buffer to update with.
- */
-function _update(s, w, bytes) {
- // consume 512 bit (128 byte) chunks
- var t1_hi, t1_lo;
- var t2_hi, t2_lo;
- var s0_hi, s0_lo;
- var s1_hi, s1_lo;
- var ch_hi, ch_lo;
- var maj_hi, maj_lo;
- var a_hi, a_lo;
- var b_hi, b_lo;
- var c_hi, c_lo;
- var d_hi, d_lo;
- var e_hi, e_lo;
- var f_hi, f_lo;
- var g_hi, g_lo;
- var h_hi, h_lo;
- var i, hi, lo, w2, w7, w15, w16;
- var len = bytes.length();
- while(len >= 128) {
- // the w array will be populated with sixteen 64-bit big-endian words
- // and then extended into 64 64-bit words according to SHA-512
- for(i = 0; i < 16; ++i) {
- w[i][0] = bytes.getInt32() >>> 0;
- w[i][1] = bytes.getInt32() >>> 0;
- }
- for(; i < 80; ++i) {
- // for word 2 words ago: ROTR 19(x) ^ ROTR 61(x) ^ SHR 6(x)
- w2 = w[i - 2];
- hi = w2[0];
- lo = w2[1];
-
- // high bits
- t1_hi = (
- ((hi >>> 19) | (lo << 13)) ^ // ROTR 19
- ((lo >>> 29) | (hi << 3)) ^ // ROTR 61/(swap + ROTR 29)
- (hi >>> 6)) >>> 0; // SHR 6
- // low bits
- t1_lo = (
- ((hi << 13) | (lo >>> 19)) ^ // ROTR 19
- ((lo << 3) | (hi >>> 29)) ^ // ROTR 61/(swap + ROTR 29)
- ((hi << 26) | (lo >>> 6))) >>> 0; // SHR 6
-
- // for word 15 words ago: ROTR 1(x) ^ ROTR 8(x) ^ SHR 7(x)
- w15 = w[i - 15];
- hi = w15[0];
- lo = w15[1];
-
- // high bits
- t2_hi = (
- ((hi >>> 1) | (lo << 31)) ^ // ROTR 1
- ((hi >>> 8) | (lo << 24)) ^ // ROTR 8
- (hi >>> 7)) >>> 0; // SHR 7
- // low bits
- t2_lo = (
- ((hi << 31) | (lo >>> 1)) ^ // ROTR 1
- ((hi << 24) | (lo >>> 8)) ^ // ROTR 8
- ((hi << 25) | (lo >>> 7))) >>> 0; // SHR 7
-
- // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^64 (carry lo overflow)
- w7 = w[i - 7];
- w16 = w[i - 16];
- lo = (t1_lo + w7[1] + t2_lo + w16[1]);
- w[i][0] = (t1_hi + w7[0] + t2_hi + w16[0] +
- ((lo / 0x100000000) >>> 0)) >>> 0;
- w[i][1] = lo >>> 0;
- }
-
- // initialize hash value for this chunk
- a_hi = s[0][0];
- a_lo = s[0][1];
- b_hi = s[1][0];
- b_lo = s[1][1];
- c_hi = s[2][0];
- c_lo = s[2][1];
- d_hi = s[3][0];
- d_lo = s[3][1];
- e_hi = s[4][0];
- e_lo = s[4][1];
- f_hi = s[5][0];
- f_lo = s[5][1];
- g_hi = s[6][0];
- g_lo = s[6][1];
- h_hi = s[7][0];
- h_lo = s[7][1];
-
- // round function
- for(i = 0; i < 80; ++i) {
- // Sum1(e) = ROTR 14(e) ^ ROTR 18(e) ^ ROTR 41(e)
- s1_hi = (
- ((e_hi >>> 14) | (e_lo << 18)) ^ // ROTR 14
- ((e_hi >>> 18) | (e_lo << 14)) ^ // ROTR 18
- ((e_lo >>> 9) | (e_hi << 23))) >>> 0; // ROTR 41/(swap + ROTR 9)
- s1_lo = (
- ((e_hi << 18) | (e_lo >>> 14)) ^ // ROTR 14
- ((e_hi << 14) | (e_lo >>> 18)) ^ // ROTR 18
- ((e_lo << 23) | (e_hi >>> 9))) >>> 0; // ROTR 41/(swap + ROTR 9)
-
- // Ch(e, f, g) (optimized the same way as SHA-1)
- ch_hi = (g_hi ^ (e_hi & (f_hi ^ g_hi))) >>> 0;
- ch_lo = (g_lo ^ (e_lo & (f_lo ^ g_lo))) >>> 0;
-
- // Sum0(a) = ROTR 28(a) ^ ROTR 34(a) ^ ROTR 39(a)
- s0_hi = (
- ((a_hi >>> 28) | (a_lo << 4)) ^ // ROTR 28
- ((a_lo >>> 2) | (a_hi << 30)) ^ // ROTR 34/(swap + ROTR 2)
- ((a_lo >>> 7) | (a_hi << 25))) >>> 0; // ROTR 39/(swap + ROTR 7)
- s0_lo = (
- ((a_hi << 4) | (a_lo >>> 28)) ^ // ROTR 28
- ((a_lo << 30) | (a_hi >>> 2)) ^ // ROTR 34/(swap + ROTR 2)
- ((a_lo << 25) | (a_hi >>> 7))) >>> 0; // ROTR 39/(swap + ROTR 7)
-
- // Maj(a, b, c) (optimized the same way as SHA-1)
- maj_hi = ((a_hi & b_hi) | (c_hi & (a_hi ^ b_hi))) >>> 0;
- maj_lo = ((a_lo & b_lo) | (c_lo & (a_lo ^ b_lo))) >>> 0;
-
- // main algorithm
- // t1 = (h + s1 + ch + _k[i] + _w[i]) modulo 2^64 (carry lo overflow)
- lo = (h_lo + s1_lo + ch_lo + _k[i][1] + w[i][1]);
- t1_hi = (h_hi + s1_hi + ch_hi + _k[i][0] + w[i][0] +
- ((lo / 0x100000000) >>> 0)) >>> 0;
- t1_lo = lo >>> 0;
-
- // t2 = s0 + maj modulo 2^64 (carry lo overflow)
- lo = s0_lo + maj_lo;
- t2_hi = (s0_hi + maj_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- t2_lo = lo >>> 0;
-
- h_hi = g_hi;
- h_lo = g_lo;
-
- g_hi = f_hi;
- g_lo = f_lo;
-
- f_hi = e_hi;
- f_lo = e_lo;
-
- // e = (d + t1) modulo 2^64 (carry lo overflow)
- lo = d_lo + t1_lo;
- e_hi = (d_hi + t1_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- e_lo = lo >>> 0;
-
- d_hi = c_hi;
- d_lo = c_lo;
-
- c_hi = b_hi;
- c_lo = b_lo;
-
- b_hi = a_hi;
- b_lo = a_lo;
-
- // a = (t1 + t2) modulo 2^64 (carry lo overflow)
- lo = t1_lo + t2_lo;
- a_hi = (t1_hi + t2_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- a_lo = lo >>> 0;
- }
-
- // update hash state (additional modulo 2^64)
- lo = s[0][1] + a_lo;
- s[0][0] = (s[0][0] + a_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- s[0][1] = lo >>> 0;
-
- lo = s[1][1] + b_lo;
- s[1][0] = (s[1][0] + b_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- s[1][1] = lo >>> 0;
-
- lo = s[2][1] + c_lo;
- s[2][0] = (s[2][0] + c_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- s[2][1] = lo >>> 0;
-
- lo = s[3][1] + d_lo;
- s[3][0] = (s[3][0] + d_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- s[3][1] = lo >>> 0;
-
- lo = s[4][1] + e_lo;
- s[4][0] = (s[4][0] + e_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- s[4][1] = lo >>> 0;
-
- lo = s[5][1] + f_lo;
- s[5][0] = (s[5][0] + f_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- s[5][1] = lo >>> 0;
-
- lo = s[6][1] + g_lo;
- s[6][0] = (s[6][0] + g_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- s[6][1] = lo >>> 0;
-
- lo = s[7][1] + h_lo;
- s[7][0] = (s[7][0] + h_hi + ((lo / 0x100000000) >>> 0)) >>> 0;
- s[7][1] = lo >>> 0;
-
- len -= 128;
- }
-}
-
-var asn1Validator$1 = {};
-
-/**
- * Copyright (c) 2019 Digital Bazaar, Inc.
- */
-
-var forge$7 = forge$F;
-
-var asn1$1 = forge$7.asn1;
-
-asn1Validator$1.privateKeyValidator = {
- // PrivateKeyInfo
- name: 'PrivateKeyInfo',
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.SEQUENCE,
- constructed: true,
- value: [{
- // Version (INTEGER)
- name: 'PrivateKeyInfo.version',
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.INTEGER,
- constructed: false,
- capture: 'privateKeyVersion'
- }, {
- // privateKeyAlgorithm
- name: 'PrivateKeyInfo.privateKeyAlgorithm',
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'AlgorithmIdentifier.algorithm',
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.OID,
- constructed: false,
- capture: 'privateKeyOid'
- }]
- }, {
- // PrivateKey
- name: 'PrivateKeyInfo',
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.OCTETSTRING,
- constructed: false,
- capture: 'privateKey'
- }]
-};
-
-asn1Validator$1.publicKeyValidator = {
- name: 'SubjectPublicKeyInfo',
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.SEQUENCE,
- constructed: true,
- captureAsn1: 'subjectPublicKeyInfo',
- value: [{
- name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.SEQUENCE,
- constructed: true,
- value: [{
- name: 'AlgorithmIdentifier.algorithm',
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.OID,
- constructed: false,
- capture: 'publicKeyOid'
- }]
- },
- // capture group for ed25519PublicKey
- {
- tagClass: asn1$1.Class.UNIVERSAL,
- type: asn1$1.Type.BITSTRING,
- constructed: false,
- composed: true,
- captureBitStringValue: 'ed25519PublicKey'
- }
- // FIXME: this is capture group for rsaPublicKey, use it in this API or
- // discard?
- /* {
- // subjectPublicKey
- name: 'SubjectPublicKeyInfo.subjectPublicKey',
- tagClass: asn1.Class.UNIVERSAL,
- type: asn1.Type.BITSTRING,
- constructed: false,
- value: [{
- // RSAPublicKey
- name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',
- tagClass: asn1.Class.UNIVERSAL,
- type: asn1.Type.SEQUENCE,
- constructed: true,
- optional: true,
- captureAsn1: 'rsaPublicKey'
- }]
- } */
- ]
-};
-
-/**
- * JavaScript implementation of Ed25519.
- *
- * Copyright (c) 2017-2019 Digital Bazaar, Inc.
- *
- * This implementation is based on the most excellent TweetNaCl which is
- * in the public domain. Many thanks to its contributors:
- *
- * https://github.com/dchest/tweetnacl-js
- */
-
-var forge$6 = forge$F;
-
-
-
-
-var asn1Validator = asn1Validator$1;
-var publicKeyValidator = asn1Validator.publicKeyValidator;
-var privateKeyValidator = asn1Validator.privateKeyValidator;
-
-var ByteBuffer = forge$6.util.ByteBuffer;
-var NativeBuffer = typeof Buffer === 'undefined' ? Uint8Array : Buffer;
-
-/*
- * Ed25519 algorithms, see RFC 8032:
- * https://tools.ietf.org/html/rfc8032
- */
-forge$6.pki = forge$6.pki || {};
-forge$6.pki.ed25519 = forge$6.ed25519 = forge$6.ed25519 || {};
-var ed25519 = forge$6.ed25519;
-
-ed25519.constants = {};
-ed25519.constants.PUBLIC_KEY_BYTE_LENGTH = 32;
-ed25519.constants.PRIVATE_KEY_BYTE_LENGTH = 64;
-ed25519.constants.SEED_BYTE_LENGTH = 32;
-ed25519.constants.SIGN_BYTE_LENGTH = 64;
-ed25519.constants.HASH_BYTE_LENGTH = 64;
-
-ed25519.generateKeyPair = function(options) {
- options = options || {};
- var seed = options.seed;
- if(seed === undefined) {
- // generate seed
- seed = forge$6.random.getBytesSync(ed25519.constants.SEED_BYTE_LENGTH);
- } else if(typeof seed === 'string') {
- if(seed.length !== ed25519.constants.SEED_BYTE_LENGTH) {
- throw new TypeError(
- '"seed" must be ' + ed25519.constants.SEED_BYTE_LENGTH +
- ' bytes in length.');
- }
- } else if(!(seed instanceof Uint8Array)) {
- throw new TypeError(
- '"seed" must be a node.js Buffer, Uint8Array, or a binary string.');
- }
-
- seed = messageToNativeBuffer({message: seed, encoding: 'binary'});
-
- var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);
- var sk = new NativeBuffer(ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);
- for(var i = 0; i < 32; ++i) {
- sk[i] = seed[i];
- }
- crypto_sign_keypair(pk, sk);
- return {publicKey: pk, privateKey: sk};
-};
-
-/**
- * Converts a private key from a RFC8410 ASN.1 encoding.
- *
- * @param obj - The asn1 representation of a private key.
- *
- * @returns {Object} keyInfo - The key information.
- * @returns {Buffer|Uint8Array} keyInfo.privateKeyBytes - 32 private key bytes.
- */
-ed25519.privateKeyFromAsn1 = function(obj) {
- var capture = {};
- var errors = [];
- var valid = forge$6.asn1.validate(obj, privateKeyValidator, capture, errors);
- if(!valid) {
- var error = new Error('Invalid Key.');
- error.errors = errors;
- throw error;
- }
- var oid = forge$6.asn1.derToOid(capture.privateKeyOid);
- var ed25519Oid = forge$6.oids.EdDSA25519;
- if(oid !== ed25519Oid) {
- throw new Error('Invalid OID "' + oid + '"; OID must be "' +
- ed25519Oid + '".');
- }
- var privateKey = capture.privateKey;
- // manually extract the private key bytes from nested octet string, see FIXME:
- // https://github.com/digitalbazaar/forge/blob/master/lib/asn1.js#L542
- var privateKeyBytes = messageToNativeBuffer({
- message: forge$6.asn1.fromDer(privateKey).value,
- encoding: 'binary'
- });
- // TODO: RFC8410 specifies a format for encoding the public key bytes along
- // with the private key bytes. `publicKeyBytes` can be returned in the
- // future. https://tools.ietf.org/html/rfc8410#section-10.3
- return {privateKeyBytes: privateKeyBytes};
-};
-
-/**
- * Converts a public key from a RFC8410 ASN.1 encoding.
- *
- * @param obj - The asn1 representation of a public key.
- *
- * @return {Buffer|Uint8Array} - 32 public key bytes.
- */
-ed25519.publicKeyFromAsn1 = function(obj) {
- // get SubjectPublicKeyInfo
- var capture = {};
- var errors = [];
- var valid = forge$6.asn1.validate(obj, publicKeyValidator, capture, errors);
- if(!valid) {
- var error = new Error('Invalid Key.');
- error.errors = errors;
- throw error;
- }
- var oid = forge$6.asn1.derToOid(capture.publicKeyOid);
- var ed25519Oid = forge$6.oids.EdDSA25519;
- if(oid !== ed25519Oid) {
- throw new Error('Invalid OID "' + oid + '"; OID must be "' +
- ed25519Oid + '".');
- }
- var publicKeyBytes = capture.ed25519PublicKey;
- if(publicKeyBytes.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) {
- throw new Error('Key length is invalid.');
- }
- return messageToNativeBuffer({
- message: publicKeyBytes,
- encoding: 'binary'
- });
-};
-
-ed25519.publicKeyFromPrivateKey = function(options) {
- options = options || {};
- var privateKey = messageToNativeBuffer({
- message: options.privateKey, encoding: 'binary'
- });
- if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) {
- throw new TypeError(
- '"options.privateKey" must have a byte length of ' +
- ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);
- }
-
- var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);
- for(var i = 0; i < pk.length; ++i) {
- pk[i] = privateKey[32 + i];
- }
- return pk;
-};
-
-ed25519.sign = function(options) {
- options = options || {};
- var msg = messageToNativeBuffer(options);
- var privateKey = messageToNativeBuffer({
- message: options.privateKey,
- encoding: 'binary'
- });
- if(privateKey.length === ed25519.constants.SEED_BYTE_LENGTH) {
- var keyPair = ed25519.generateKeyPair({seed: privateKey});
- privateKey = keyPair.privateKey;
- } else if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) {
- throw new TypeError(
- '"options.privateKey" must have a byte length of ' +
- ed25519.constants.SEED_BYTE_LENGTH + ' or ' +
- ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);
- }
-
- var signedMsg = new NativeBuffer(
- ed25519.constants.SIGN_BYTE_LENGTH + msg.length);
- crypto_sign(signedMsg, msg, msg.length, privateKey);
-
- var sig = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH);
- for(var i = 0; i < sig.length; ++i) {
- sig[i] = signedMsg[i];
- }
- return sig;
-};
-
-ed25519.verify = function(options) {
- options = options || {};
- var msg = messageToNativeBuffer(options);
- if(options.signature === undefined) {
- throw new TypeError(
- '"options.signature" must be a node.js Buffer, a Uint8Array, a forge ' +
- 'ByteBuffer, or a binary string.');
- }
- var sig = messageToNativeBuffer({
- message: options.signature,
- encoding: 'binary'
- });
- if(sig.length !== ed25519.constants.SIGN_BYTE_LENGTH) {
- throw new TypeError(
- '"options.signature" must have a byte length of ' +
- ed25519.constants.SIGN_BYTE_LENGTH);
- }
- var publicKey = messageToNativeBuffer({
- message: options.publicKey,
- encoding: 'binary'
- });
- if(publicKey.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) {
- throw new TypeError(
- '"options.publicKey" must have a byte length of ' +
- ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);
- }
-
- var sm = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length);
- var m = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length);
- var i;
- for(i = 0; i < ed25519.constants.SIGN_BYTE_LENGTH; ++i) {
- sm[i] = sig[i];
- }
- for(i = 0; i < msg.length; ++i) {
- sm[i + ed25519.constants.SIGN_BYTE_LENGTH] = msg[i];
- }
- return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);
-};
-
-function messageToNativeBuffer(options) {
- var message = options.message;
- if(message instanceof Uint8Array || message instanceof NativeBuffer) {
- return message;
- }
-
- var encoding = options.encoding;
- if(message === undefined) {
- if(options.md) {
- // TODO: more rigorous validation that `md` is a MessageDigest
- message = options.md.digest().getBytes();
- encoding = 'binary';
- } else {
- throw new TypeError('"options.message" or "options.md" not specified.');
- }
- }
-
- if(typeof message === 'string' && !encoding) {
- throw new TypeError('"options.encoding" must be "binary" or "utf8".');
- }
-
- if(typeof message === 'string') {
- if(typeof Buffer !== 'undefined') {
- return Buffer.from(message, encoding);
- }
- message = new ByteBuffer(message, encoding);
- } else if(!(message instanceof ByteBuffer)) {
- throw new TypeError(
- '"options.message" must be a node.js Buffer, a Uint8Array, a forge ' +
- 'ByteBuffer, or a string with "options.encoding" specifying its ' +
- 'encoding.');
- }
-
- // convert to native buffer
- var buffer = new NativeBuffer(message.length());
- for(var i = 0; i < buffer.length; ++i) {
- buffer[i] = message.at(i);
- }
- return buffer;
-}
-
-var gf0 = gf();
-var gf1 = gf([1]);
-var D = gf([
- 0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070,
- 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]);
-var D2 = gf([
- 0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0,
- 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]);
-var X = gf([
- 0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c,
- 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]);
-var Y = gf([
- 0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666,
- 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]);
-var L = new Float64Array([
- 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58,
- 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);
-var I = gf([
- 0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43,
- 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);
-
-// TODO: update forge buffer implementation to use `Buffer` or `Uint8Array`,
-// whichever is available, to improve performance
-function sha512(msg, msgLen) {
- // Note: `out` and `msg` are NativeBuffer
- var md = forge$6.md.sha512.create();
- var buffer = new ByteBuffer(msg);
- md.update(buffer.getBytes(msgLen), 'binary');
- var hash = md.digest().getBytes();
- if(typeof Buffer !== 'undefined') {
- return Buffer.from(hash, 'binary');
- }
- var out = new NativeBuffer(ed25519.constants.HASH_BYTE_LENGTH);
- for(var i = 0; i < 64; ++i) {
- out[i] = hash.charCodeAt(i);
- }
- return out;
-}
-
-function crypto_sign_keypair(pk, sk) {
- var p = [gf(), gf(), gf(), gf()];
- var i;
-
- var d = sha512(sk, 32);
- d[0] &= 248;
- d[31] &= 127;
- d[31] |= 64;
-
- scalarbase(p, d);
- pack(pk, p);
-
- for(i = 0; i < 32; ++i) {
- sk[i + 32] = pk[i];
- }
- return 0;
-}
-
-// Note: difference from C - smlen returned, not passed as argument.
-function crypto_sign(sm, m, n, sk) {
- var i, j, x = new Float64Array(64);
- var p = [gf(), gf(), gf(), gf()];
-
- var d = sha512(sk, 32);
- d[0] &= 248;
- d[31] &= 127;
- d[31] |= 64;
-
- var smlen = n + 64;
- for(i = 0; i < n; ++i) {
- sm[64 + i] = m[i];
- }
- for(i = 0; i < 32; ++i) {
- sm[32 + i] = d[32 + i];
- }
-
- var r = sha512(sm.subarray(32), n + 32);
- reduce(r);
- scalarbase(p, r);
- pack(sm, p);
-
- for(i = 32; i < 64; ++i) {
- sm[i] = sk[i];
- }
- var h = sha512(sm, n + 64);
- reduce(h);
-
- for(i = 32; i < 64; ++i) {
- x[i] = 0;
- }
- for(i = 0; i < 32; ++i) {
- x[i] = r[i];
- }
- for(i = 0; i < 32; ++i) {
- for(j = 0; j < 32; j++) {
- x[i + j] += h[i] * d[j];
- }
- }
-
- modL(sm.subarray(32), x);
- return smlen;
-}
-
-function crypto_sign_open(m, sm, n, pk) {
- var i, mlen;
- var t = new NativeBuffer(32);
- var p = [gf(), gf(), gf(), gf()],
- q = [gf(), gf(), gf(), gf()];
-
- mlen = -1;
- if(n < 64) {
- return -1;
- }
-
- if(unpackneg(q, pk)) {
- return -1;
- }
-
- for(i = 0; i < n; ++i) {
- m[i] = sm[i];
- }
- for(i = 0; i < 32; ++i) {
- m[i + 32] = pk[i];
- }
- var h = sha512(m, n);
- reduce(h);
- scalarmult(p, q, h);
-
- scalarbase(q, sm.subarray(32));
- add(p, q);
- pack(t, p);
-
- n -= 64;
- if(crypto_verify_32(sm, 0, t, 0)) {
- for(i = 0; i < n; ++i) {
- m[i] = 0;
- }
- return -1;
- }
-
- for(i = 0; i < n; ++i) {
- m[i] = sm[i + 64];
- }
- mlen = n;
- return mlen;
-}
-
-function modL(r, x) {
- var carry, i, j, k;
- for(i = 63; i >= 32; --i) {
- carry = 0;
- for(j = i - 32, k = i - 12; j < k; ++j) {
- x[j] += carry - 16 * x[i] * L[j - (i - 32)];
- carry = (x[j] + 128) >> 8;
- x[j] -= carry * 256;
- }
- x[j] += carry;
- x[i] = 0;
- }
- carry = 0;
- for(j = 0; j < 32; ++j) {
- x[j] += carry - (x[31] >> 4) * L[j];
- carry = x[j] >> 8;
- x[j] &= 255;
- }
- for(j = 0; j < 32; ++j) {
- x[j] -= carry * L[j];
- }
- for(i = 0; i < 32; ++i) {
- x[i + 1] += x[i] >> 8;
- r[i] = x[i] & 255;
- }
-}
-
-function reduce(r) {
- var x = new Float64Array(64);
- for(var i = 0; i < 64; ++i) {
- x[i] = r[i];
- r[i] = 0;
- }
- modL(r, x);
-}
-
-function add(p, q) {
- var a = gf(), b = gf(), c = gf(),
- d = gf(), e = gf(), f = gf(),
- g = gf(), h = gf(), t = gf();
-
- Z(a, p[1], p[0]);
- Z(t, q[1], q[0]);
- M(a, a, t);
- A(b, p[0], p[1]);
- A(t, q[0], q[1]);
- M(b, b, t);
- M(c, p[3], q[3]);
- M(c, c, D2);
- M(d, p[2], q[2]);
- A(d, d, d);
- Z(e, b, a);
- Z(f, d, c);
- A(g, d, c);
- A(h, b, a);
-
- M(p[0], e, f);
- M(p[1], h, g);
- M(p[2], g, f);
- M(p[3], e, h);
-}
-
-function cswap(p, q, b) {
- for(var i = 0; i < 4; ++i) {
- sel25519(p[i], q[i], b);
- }
-}
-
-function pack(r, p) {
- var tx = gf(), ty = gf(), zi = gf();
- inv25519(zi, p[2]);
- M(tx, p[0], zi);
- M(ty, p[1], zi);
- pack25519(r, ty);
- r[31] ^= par25519(tx) << 7;
-}
-
-function pack25519(o, n) {
- var i, j, b;
- var m = gf(), t = gf();
- for(i = 0; i < 16; ++i) {
- t[i] = n[i];
- }
- car25519(t);
- car25519(t);
- car25519(t);
- for(j = 0; j < 2; ++j) {
- m[0] = t[0] - 0xffed;
- for(i = 1; i < 15; ++i) {
- m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);
- m[i-1] &= 0xffff;
- }
- m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);
- b = (m[15] >> 16) & 1;
- m[14] &= 0xffff;
- sel25519(t, m, 1 - b);
- }
- for (i = 0; i < 16; i++) {
- o[2 * i] = t[i] & 0xff;
- o[2 * i + 1] = t[i] >> 8;
- }
-}
-
-function unpackneg(r, p) {
- var t = gf(), chk = gf(), num = gf(),
- den = gf(), den2 = gf(), den4 = gf(),
- den6 = gf();
-
- set25519(r[2], gf1);
- unpack25519(r[1], p);
- S(num, r[1]);
- M(den, num, D);
- Z(num, num, r[2]);
- A(den, r[2], den);
-
- S(den2, den);
- S(den4, den2);
- M(den6, den4, den2);
- M(t, den6, num);
- M(t, t, den);
-
- pow2523(t, t);
- M(t, t, num);
- M(t, t, den);
- M(t, t, den);
- M(r[0], t, den);
-
- S(chk, r[0]);
- M(chk, chk, den);
- if(neq25519(chk, num)) {
- M(r[0], r[0], I);
- }
-
- S(chk, r[0]);
- M(chk, chk, den);
- if(neq25519(chk, num)) {
- return -1;
- }
-
- if(par25519(r[0]) === (p[31] >> 7)) {
- Z(r[0], gf0, r[0]);
- }
-
- M(r[3], r[0], r[1]);
- return 0;
-}
-
-function unpack25519(o, n) {
- var i;
- for(i = 0; i < 16; ++i) {
- o[i] = n[2 * i] + (n[2 * i + 1] << 8);
- }
- o[15] &= 0x7fff;
-}
-
-function pow2523(o, i) {
- var c = gf();
- var a;
- for(a = 0; a < 16; ++a) {
- c[a] = i[a];
- }
- for(a = 250; a >= 0; --a) {
- S(c, c);
- if(a !== 1) {
- M(c, c, i);
- }
- }
- for(a = 0; a < 16; ++a) {
- o[a] = c[a];
- }
-}
-
-function neq25519(a, b) {
- var c = new NativeBuffer(32);
- var d = new NativeBuffer(32);
- pack25519(c, a);
- pack25519(d, b);
- return crypto_verify_32(c, 0, d, 0);
-}
-
-function crypto_verify_32(x, xi, y, yi) {
- return vn(x, xi, y, yi, 32);
-}
-
-function vn(x, xi, y, yi, n) {
- var i, d = 0;
- for(i = 0; i < n; ++i) {
- d |= x[xi + i] ^ y[yi + i];
- }
- return (1 & ((d - 1) >>> 8)) - 1;
-}
-
-function par25519(a) {
- var d = new NativeBuffer(32);
- pack25519(d, a);
- return d[0] & 1;
-}
-
-function scalarmult(p, q, s) {
- var b, i;
- set25519(p[0], gf0);
- set25519(p[1], gf1);
- set25519(p[2], gf1);
- set25519(p[3], gf0);
- for(i = 255; i >= 0; --i) {
- b = (s[(i / 8)|0] >> (i & 7)) & 1;
- cswap(p, q, b);
- add(q, p);
- add(p, p);
- cswap(p, q, b);
- }
-}
-
-function scalarbase(p, s) {
- var q = [gf(), gf(), gf(), gf()];
- set25519(q[0], X);
- set25519(q[1], Y);
- set25519(q[2], gf1);
- M(q[3], X, Y);
- scalarmult(p, q, s);
-}
-
-function set25519(r, a) {
- var i;
- for(i = 0; i < 16; i++) {
- r[i] = a[i] | 0;
- }
-}
-
-function inv25519(o, i) {
- var c = gf();
- var a;
- for(a = 0; a < 16; ++a) {
- c[a] = i[a];
- }
- for(a = 253; a >= 0; --a) {
- S(c, c);
- if(a !== 2 && a !== 4) {
- M(c, c, i);
- }
- }
- for(a = 0; a < 16; ++a) {
- o[a] = c[a];
- }
-}
-
-function car25519(o) {
- var i, v, c = 1;
- for(i = 0; i < 16; ++i) {
- v = o[i] + c + 65535;
- c = Math.floor(v / 65536);
- o[i] = v - c * 65536;
- }
- o[0] += c - 1 + 37 * (c - 1);
-}
-
-function sel25519(p, q, b) {
- var t, c = ~(b - 1);
- for(var i = 0; i < 16; ++i) {
- t = c & (p[i] ^ q[i]);
- p[i] ^= t;
- q[i] ^= t;
- }
-}
-
-function gf(init) {
- var i, r = new Float64Array(16);
- if(init) {
- for(i = 0; i < init.length; ++i) {
- r[i] = init[i];
- }
- }
- return r;
-}
-
-function A(o, a, b) {
- for(var i = 0; i < 16; ++i) {
- o[i] = a[i] + b[i];
- }
-}
-
-function Z(o, a, b) {
- for(var i = 0; i < 16; ++i) {
- o[i] = a[i] - b[i];
- }
-}
-
-function S(o, a) {
- M(o, a, a);
-}
-
-function M(o, a, b) {
- var v, c,
- t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,
- t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,
- t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,
- t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,
- b0 = b[0],
- b1 = b[1],
- b2 = b[2],
- b3 = b[3],
- b4 = b[4],
- b5 = b[5],
- b6 = b[6],
- b7 = b[7],
- b8 = b[8],
- b9 = b[9],
- b10 = b[10],
- b11 = b[11],
- b12 = b[12],
- b13 = b[13],
- b14 = b[14],
- b15 = b[15];
-
- v = a[0];
- t0 += v * b0;
- t1 += v * b1;
- t2 += v * b2;
- t3 += v * b3;
- t4 += v * b4;
- t5 += v * b5;
- t6 += v * b6;
- t7 += v * b7;
- t8 += v * b8;
- t9 += v * b9;
- t10 += v * b10;
- t11 += v * b11;
- t12 += v * b12;
- t13 += v * b13;
- t14 += v * b14;
- t15 += v * b15;
- v = a[1];
- t1 += v * b0;
- t2 += v * b1;
- t3 += v * b2;
- t4 += v * b3;
- t5 += v * b4;
- t6 += v * b5;
- t7 += v * b6;
- t8 += v * b7;
- t9 += v * b8;
- t10 += v * b9;
- t11 += v * b10;
- t12 += v * b11;
- t13 += v * b12;
- t14 += v * b13;
- t15 += v * b14;
- t16 += v * b15;
- v = a[2];
- t2 += v * b0;
- t3 += v * b1;
- t4 += v * b2;
- t5 += v * b3;
- t6 += v * b4;
- t7 += v * b5;
- t8 += v * b6;
- t9 += v * b7;
- t10 += v * b8;
- t11 += v * b9;
- t12 += v * b10;
- t13 += v * b11;
- t14 += v * b12;
- t15 += v * b13;
- t16 += v * b14;
- t17 += v * b15;
- v = a[3];
- t3 += v * b0;
- t4 += v * b1;
- t5 += v * b2;
- t6 += v * b3;
- t7 += v * b4;
- t8 += v * b5;
- t9 += v * b6;
- t10 += v * b7;
- t11 += v * b8;
- t12 += v * b9;
- t13 += v * b10;
- t14 += v * b11;
- t15 += v * b12;
- t16 += v * b13;
- t17 += v * b14;
- t18 += v * b15;
- v = a[4];
- t4 += v * b0;
- t5 += v * b1;
- t6 += v * b2;
- t7 += v * b3;
- t8 += v * b4;
- t9 += v * b5;
- t10 += v * b6;
- t11 += v * b7;
- t12 += v * b8;
- t13 += v * b9;
- t14 += v * b10;
- t15 += v * b11;
- t16 += v * b12;
- t17 += v * b13;
- t18 += v * b14;
- t19 += v * b15;
- v = a[5];
- t5 += v * b0;
- t6 += v * b1;
- t7 += v * b2;
- t8 += v * b3;
- t9 += v * b4;
- t10 += v * b5;
- t11 += v * b6;
- t12 += v * b7;
- t13 += v * b8;
- t14 += v * b9;
- t15 += v * b10;
- t16 += v * b11;
- t17 += v * b12;
- t18 += v * b13;
- t19 += v * b14;
- t20 += v * b15;
- v = a[6];
- t6 += v * b0;
- t7 += v * b1;
- t8 += v * b2;
- t9 += v * b3;
- t10 += v * b4;
- t11 += v * b5;
- t12 += v * b6;
- t13 += v * b7;
- t14 += v * b8;
- t15 += v * b9;
- t16 += v * b10;
- t17 += v * b11;
- t18 += v * b12;
- t19 += v * b13;
- t20 += v * b14;
- t21 += v * b15;
- v = a[7];
- t7 += v * b0;
- t8 += v * b1;
- t9 += v * b2;
- t10 += v * b3;
- t11 += v * b4;
- t12 += v * b5;
- t13 += v * b6;
- t14 += v * b7;
- t15 += v * b8;
- t16 += v * b9;
- t17 += v * b10;
- t18 += v * b11;
- t19 += v * b12;
- t20 += v * b13;
- t21 += v * b14;
- t22 += v * b15;
- v = a[8];
- t8 += v * b0;
- t9 += v * b1;
- t10 += v * b2;
- t11 += v * b3;
- t12 += v * b4;
- t13 += v * b5;
- t14 += v * b6;
- t15 += v * b7;
- t16 += v * b8;
- t17 += v * b9;
- t18 += v * b10;
- t19 += v * b11;
- t20 += v * b12;
- t21 += v * b13;
- t22 += v * b14;
- t23 += v * b15;
- v = a[9];
- t9 += v * b0;
- t10 += v * b1;
- t11 += v * b2;
- t12 += v * b3;
- t13 += v * b4;
- t14 += v * b5;
- t15 += v * b6;
- t16 += v * b7;
- t17 += v * b8;
- t18 += v * b9;
- t19 += v * b10;
- t20 += v * b11;
- t21 += v * b12;
- t22 += v * b13;
- t23 += v * b14;
- t24 += v * b15;
- v = a[10];
- t10 += v * b0;
- t11 += v * b1;
- t12 += v * b2;
- t13 += v * b3;
- t14 += v * b4;
- t15 += v * b5;
- t16 += v * b6;
- t17 += v * b7;
- t18 += v * b8;
- t19 += v * b9;
- t20 += v * b10;
- t21 += v * b11;
- t22 += v * b12;
- t23 += v * b13;
- t24 += v * b14;
- t25 += v * b15;
- v = a[11];
- t11 += v * b0;
- t12 += v * b1;
- t13 += v * b2;
- t14 += v * b3;
- t15 += v * b4;
- t16 += v * b5;
- t17 += v * b6;
- t18 += v * b7;
- t19 += v * b8;
- t20 += v * b9;
- t21 += v * b10;
- t22 += v * b11;
- t23 += v * b12;
- t24 += v * b13;
- t25 += v * b14;
- t26 += v * b15;
- v = a[12];
- t12 += v * b0;
- t13 += v * b1;
- t14 += v * b2;
- t15 += v * b3;
- t16 += v * b4;
- t17 += v * b5;
- t18 += v * b6;
- t19 += v * b7;
- t20 += v * b8;
- t21 += v * b9;
- t22 += v * b10;
- t23 += v * b11;
- t24 += v * b12;
- t25 += v * b13;
- t26 += v * b14;
- t27 += v * b15;
- v = a[13];
- t13 += v * b0;
- t14 += v * b1;
- t15 += v * b2;
- t16 += v * b3;
- t17 += v * b4;
- t18 += v * b5;
- t19 += v * b6;
- t20 += v * b7;
- t21 += v * b8;
- t22 += v * b9;
- t23 += v * b10;
- t24 += v * b11;
- t25 += v * b12;
- t26 += v * b13;
- t27 += v * b14;
- t28 += v * b15;
- v = a[14];
- t14 += v * b0;
- t15 += v * b1;
- t16 += v * b2;
- t17 += v * b3;
- t18 += v * b4;
- t19 += v * b5;
- t20 += v * b6;
- t21 += v * b7;
- t22 += v * b8;
- t23 += v * b9;
- t24 += v * b10;
- t25 += v * b11;
- t26 += v * b12;
- t27 += v * b13;
- t28 += v * b14;
- t29 += v * b15;
- v = a[15];
- t15 += v * b0;
- t16 += v * b1;
- t17 += v * b2;
- t18 += v * b3;
- t19 += v * b4;
- t20 += v * b5;
- t21 += v * b6;
- t22 += v * b7;
- t23 += v * b8;
- t24 += v * b9;
- t25 += v * b10;
- t26 += v * b11;
- t27 += v * b12;
- t28 += v * b13;
- t29 += v * b14;
- t30 += v * b15;
-
- t0 += 38 * t16;
- t1 += 38 * t17;
- t2 += 38 * t18;
- t3 += 38 * t19;
- t4 += 38 * t20;
- t5 += 38 * t21;
- t6 += 38 * t22;
- t7 += 38 * t23;
- t8 += 38 * t24;
- t9 += 38 * t25;
- t10 += 38 * t26;
- t11 += 38 * t27;
- t12 += 38 * t28;
- t13 += 38 * t29;
- t14 += 38 * t30;
- // t15 left as is
-
- // first car
- c = 1;
- v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
- v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
- v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
- v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
- v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
- v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
- v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
- v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
- v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
- v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
- v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
- v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
- v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
- v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
- v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
- v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
- t0 += c-1 + 37 * (c-1);
-
- // second car
- c = 1;
- v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
- v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
- v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
- v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
- v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
- v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
- v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
- v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
- v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
- v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
- v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
- v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
- v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
- v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
- v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
- v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
- t0 += c-1 + 37 * (c-1);
-
- o[ 0] = t0;
- o[ 1] = t1;
- o[ 2] = t2;
- o[ 3] = t3;
- o[ 4] = t4;
- o[ 5] = t5;
- o[ 6] = t6;
- o[ 7] = t7;
- o[ 8] = t8;
- o[ 9] = t9;
- o[10] = t10;
- o[11] = t11;
- o[12] = t12;
- o[13] = t13;
- o[14] = t14;
- o[15] = t15;
-}
-
-/**
- * Javascript implementation of RSA-KEM.
- *
- * @author Lautaro Cozzani Rodriguez
- * @author Dave Longley
- *
- * Copyright (c) 2014 Lautaro Cozzani <lautaro.cozzani@scytl.com>
- * Copyright (c) 2014 Digital Bazaar, Inc.
- */
-
-var forge$5 = forge$F;
-
-
-
-
-forge$5.kem = forge$5.kem || {};
-
-var BigInteger = forge$5.jsbn.BigInteger;
-
-/**
- * The API for the RSA Key Encapsulation Mechanism (RSA-KEM) from ISO 18033-2.
- */
-forge$5.kem.rsa = {};
-
-/**
- * Creates an RSA KEM API object for generating a secret asymmetric key.
- *
- * The symmetric key may be generated via a call to 'encrypt', which will
- * produce a ciphertext to be transmitted to the recipient and a key to be
- * kept secret. The ciphertext is a parameter to be passed to 'decrypt' which
- * will produce the same secret key for the recipient to use to decrypt a
- * message that was encrypted with the secret key.
- *
- * @param kdf the KDF API to use (eg: new forge.kem.kdf1()).
- * @param options the options to use.
- * [prng] a custom crypto-secure pseudo-random number generator to use,
- * that must define "getBytesSync".
- */
-forge$5.kem.rsa.create = function(kdf, options) {
- options = options || {};
- var prng = options.prng || forge$5.random;
-
- var kem = {};
-
- /**
- * Generates a secret key and its encapsulation.
- *
- * @param publicKey the RSA public key to encrypt with.
- * @param keyLength the length, in bytes, of the secret key to generate.
- *
- * @return an object with:
- * encapsulation: the ciphertext for generating the secret key, as a
- * binary-encoded string of bytes.
- * key: the secret key to use for encrypting a message.
- */
- kem.encrypt = function(publicKey, keyLength) {
- // generate a random r where 1 < r < n
- var byteLength = Math.ceil(publicKey.n.bitLength() / 8);
- var r;
- do {
- r = new BigInteger(
- forge$5.util.bytesToHex(prng.getBytesSync(byteLength)),
- 16).mod(publicKey.n);
- } while(r.compareTo(BigInteger.ONE) <= 0);
-
- // prepend r with zeros
- r = forge$5.util.hexToBytes(r.toString(16));
- var zeros = byteLength - r.length;
- if(zeros > 0) {
- r = forge$5.util.fillString(String.fromCharCode(0), zeros) + r;
- }
-
- // encrypt the random
- var encapsulation = publicKey.encrypt(r, 'NONE');
-
- // generate the secret key
- var key = kdf.generate(r, keyLength);
-
- return {encapsulation: encapsulation, key: key};
- };
-
- /**
- * Decrypts an encapsulated secret key.
- *
- * @param privateKey the RSA private key to decrypt with.
- * @param encapsulation the ciphertext for generating the secret key, as
- * a binary-encoded string of bytes.
- * @param keyLength the length, in bytes, of the secret key to generate.
- *
- * @return the secret key as a binary-encoded string of bytes.
- */
- kem.decrypt = function(privateKey, encapsulation, keyLength) {
- // decrypt the encapsulation and generate the secret key
- var r = privateKey.decrypt(encapsulation, 'NONE');
- return kdf.generate(r, keyLength);
- };
-
- return kem;
-};
-
-// TODO: add forge.kem.kdf.create('KDF1', {md: ..., ...}) API?
-
-/**
- * Creates a key derivation API object that implements KDF1 per ISO 18033-2.
- *
- * @param md the hash API to use.
- * @param [digestLength] an optional digest length that must be positive and
- * less than or equal to md.digestLength.
- *
- * @return a KDF1 API object.
- */
-forge$5.kem.kdf1 = function(md, digestLength) {
- _createKDF(this, md, 0, digestLength || md.digestLength);
-};
-
-/**
- * Creates a key derivation API object that implements KDF2 per ISO 18033-2.
- *
- * @param md the hash API to use.
- * @param [digestLength] an optional digest length that must be positive and
- * less than or equal to md.digestLength.
- *
- * @return a KDF2 API object.
- */
-forge$5.kem.kdf2 = function(md, digestLength) {
- _createKDF(this, md, 1, digestLength || md.digestLength);
-};
-
-/**
- * Creates a KDF1 or KDF2 API object.
- *
- * @param md the hash API to use.
- * @param counterStart the starting index for the counter.
- * @param digestLength the digest length to use.
- *
- * @return the KDF API object.
- */
-function _createKDF(kdf, md, counterStart, digestLength) {
- /**
- * Generate a key of the specified length.
- *
- * @param x the binary-encoded byte string to generate a key from.
- * @param length the number of bytes to generate (the size of the key).
- *
- * @return the key as a binary-encoded string.
- */
- kdf.generate = function(x, length) {
- var key = new forge$5.util.ByteBuffer();
-
- // run counter from counterStart to ceil(length / Hash.len)
- var k = Math.ceil(length / digestLength) + counterStart;
-
- var c = new forge$5.util.ByteBuffer();
- for(var i = counterStart; i < k; ++i) {
- // I2OSP(i, 4): convert counter to an octet string of 4 octets
- c.putInt32(i);
-
- // digest 'x' and the counter and add the result to the key
- md.start();
- md.update(x + c.getBytes());
- var hash = md.digest();
- key.putBytes(hash.getBytes(digestLength));
- }
-
- // truncate to the correct key length
- key.truncate(key.length() - length);
- return key.getBytes();
- };
-}
-
-/**
- * Cross-browser support for logging in a web application.
- *
- * @author David I. Lehn <dlehn@digitalbazaar.com>
- *
- * Copyright (c) 2008-2013 Digital Bazaar, Inc.
- */
-
-var forge$4 = forge$F;
-
-
-/* LOG API */
-forge$4.log = forge$4.log || {};
-
-/**
- * Application logging system.
- *
- * Each logger level available as it's own function of the form:
- * forge.log.level(category, args...)
- * The category is an arbitrary string, and the args are the same as
- * Firebug's console.log API. By default the call will be output as:
- * 'LEVEL [category] <args[0]>, args[1], ...'
- * This enables proper % formatting via the first argument.
- * Each category is enabled by default but can be enabled or disabled with
- * the setCategoryEnabled() function.
- */
-// list of known levels
-forge$4.log.levels = [
- 'none', 'error', 'warning', 'info', 'debug', 'verbose', 'max'];
-// info on the levels indexed by name:
-// index: level index
-// name: uppercased display name
-var sLevelInfo = {};
-// list of loggers
-var sLoggers = [];
-/**
- * Standard console logger. If no console support is enabled this will
- * remain null. Check before using.
- */
-var sConsoleLogger = null;
-
-// logger flags
-/**
- * Lock the level at the current value. Used in cases where user config may
- * set the level such that only critical messages are seen but more verbose
- * messages are needed for debugging or other purposes.
- */
-forge$4.log.LEVEL_LOCKED = (1 << 1);
-/**
- * Always call log function. By default, the logging system will check the
- * message level against logger.level before calling the log function. This
- * flag allows the function to do its own check.
- */
-forge$4.log.NO_LEVEL_CHECK = (1 << 2);
-/**
- * Perform message interpolation with the passed arguments. "%" style
- * fields in log messages will be replaced by arguments as needed. Some
- * loggers, such as Firebug, may do this automatically. The original log
- * message will be available as 'message' and the interpolated version will
- * be available as 'fullMessage'.
- */
-forge$4.log.INTERPOLATE = (1 << 3);
-
-// setup each log level
-for(var i = 0; i < forge$4.log.levels.length; ++i) {
- var level = forge$4.log.levels[i];
- sLevelInfo[level] = {
- index: i,
- name: level.toUpperCase()
- };
-}
-
-/**
- * Message logger. Will dispatch a message to registered loggers as needed.
- *
- * @param message message object
- */
-forge$4.log.logMessage = function(message) {
- var messageLevelIndex = sLevelInfo[message.level].index;
- for(var i = 0; i < sLoggers.length; ++i) {
- var logger = sLoggers[i];
- if(logger.flags & forge$4.log.NO_LEVEL_CHECK) {
- logger.f(message);
- } else {
- // get logger level
- var loggerLevelIndex = sLevelInfo[logger.level].index;
- // check level
- if(messageLevelIndex <= loggerLevelIndex) {
- // message critical enough, call logger
- logger.f(logger, message);
- }
- }
- }
-};
-
-/**
- * Sets the 'standard' key on a message object to:
- * "LEVEL [category] " + message
- *
- * @param message a message log object
- */
-forge$4.log.prepareStandard = function(message) {
- if(!('standard' in message)) {
- message.standard =
- sLevelInfo[message.level].name +
- //' ' + +message.timestamp +
- ' [' + message.category + '] ' +
- message.message;
- }
-};
-
-/**
- * Sets the 'full' key on a message object to the original message
- * interpolated via % formatting with the message arguments.
- *
- * @param message a message log object.
- */
-forge$4.log.prepareFull = function(message) {
- if(!('full' in message)) {
- // copy args and insert message at the front
- var args = [message.message];
- args = args.concat([] || message['arguments']);
- // format the message
- message.full = forge$4.util.format.apply(this, args);
- }
-};
-
-/**
- * Applies both preparseStandard() and prepareFull() to a message object and
- * store result in 'standardFull'.
- *
- * @param message a message log object.
- */
-forge$4.log.prepareStandardFull = function(message) {
- if(!('standardFull' in message)) {
- // FIXME implement 'standardFull' logging
- forge$4.log.prepareStandard(message);
- message.standardFull = message.standard;
- }
-};
-
-// create log level functions
-{
- // levels for which we want functions
- var levels = ['error', 'warning', 'info', 'debug', 'verbose'];
- for(var i = 0; i < levels.length; ++i) {
- // wrap in a function to ensure proper level var is passed
- (function(level) {
- // create function for this level
- forge$4.log[level] = function(category, message/*, args...*/) {
- // convert arguments to real array, remove category and message
- var args = Array.prototype.slice.call(arguments).slice(2);
- // create message object
- // Note: interpolation and standard formatting is done lazily
- var msg = {
- timestamp: new Date(),
- level: level,
- category: category,
- message: message,
- 'arguments': args
- /*standard*/
- /*full*/
- /*fullMessage*/
- };
- // process this message
- forge$4.log.logMessage(msg);
- };
- })(levels[i]);
- }
-}
-
-/**
- * Creates a new logger with specified custom logging function.
- *
- * The logging function has a signature of:
- * function(logger, message)
- * logger: current logger
- * message: object:
- * level: level id
- * category: category
- * message: string message
- * arguments: Array of extra arguments
- * fullMessage: interpolated message and arguments if INTERPOLATE flag set
- *
- * @param logFunction a logging function which takes a log message object
- * as a parameter.
- *
- * @return a logger object.
- */
-forge$4.log.makeLogger = function(logFunction) {
- var logger = {
- flags: 0,
- f: logFunction
- };
- forge$4.log.setLevel(logger, 'none');
- return logger;
-};
-
-/**
- * Sets the current log level on a logger.
- *
- * @param logger the target logger.
- * @param level the new maximum log level as a string.
- *
- * @return true if set, false if not.
- */
-forge$4.log.setLevel = function(logger, level) {
- var rval = false;
- if(logger && !(logger.flags & forge$4.log.LEVEL_LOCKED)) {
- for(var i = 0; i < forge$4.log.levels.length; ++i) {
- var aValidLevel = forge$4.log.levels[i];
- if(level == aValidLevel) {
- // set level
- logger.level = level;
- rval = true;
- break;
- }
- }
- }
-
- return rval;
-};
-
-/**
- * Locks the log level at its current value.
- *
- * @param logger the target logger.
- * @param lock boolean lock value, default to true.
- */
-forge$4.log.lock = function(logger, lock) {
- if(typeof lock === 'undefined' || lock) {
- logger.flags |= forge$4.log.LEVEL_LOCKED;
- } else {
- logger.flags &= ~forge$4.log.LEVEL_LOCKED;
- }
-};
-
-/**
- * Adds a logger.
- *
- * @param logger the logger object.
- */
-forge$4.log.addLogger = function(logger) {
- sLoggers.push(logger);
-};
-
-// setup the console logger if possible, else create fake console.log
-if(typeof(console) !== 'undefined' && 'log' in console) {
- var logger;
- if(console.error && console.warn && console.info && console.debug) {
- // looks like Firebug-style logging is available
- // level handlers map
- var levelHandlers = {
- error: console.error,
- warning: console.warn,
- info: console.info,
- debug: console.debug,
- verbose: console.debug
- };
- var f = function(logger, message) {
- forge$4.log.prepareStandard(message);
- var handler = levelHandlers[message.level];
- // prepend standard message and concat args
- var args = [message.standard];
- args = args.concat(message['arguments'].slice());
- // apply to low-level console function
- handler.apply(console, args);
- };
- logger = forge$4.log.makeLogger(f);
- } else {
- // only appear to have basic console.log
- var f = function(logger, message) {
- forge$4.log.prepareStandardFull(message);
- console.log(message.standardFull);
- };
- logger = forge$4.log.makeLogger(f);
- }
- forge$4.log.setLevel(logger, 'debug');
- forge$4.log.addLogger(logger);
- sConsoleLogger = logger;
-} else {
- // define fake console.log to avoid potential script errors on
- // browsers that do not have console logging
- console = {
- log: function() {}
- };
-}
-
-/*
- * Check for logging control query vars.
- *
- * console.level=<level-name>
- * Set's the console log level by name. Useful to override defaults and
- * allow more verbose logging before a user config is loaded.
- *
- * console.lock=<true|false>
- * Lock the console log level at whatever level it is set at. This is run
- * after console.level is processed. Useful to force a level of verbosity
- * that could otherwise be limited by a user config.
- */
-if(sConsoleLogger !== null) {
- var query = forge$4.util.getQueryVariables();
- if('console.level' in query) {
- // set with last value
- forge$4.log.setLevel(
- sConsoleLogger, query['console.level'].slice(-1)[0]);
- }
- if('console.lock' in query) {
- // set with last value
- var lock = query['console.lock'].slice(-1)[0];
- if(lock == 'true') {
- forge$4.log.lock(sConsoleLogger);
- }
- }
-}
-
-// provide public access to console logger
-forge$4.log.consoleLogger = sConsoleLogger;
-
-/**
- * Javascript implementation of PKCS#7 v1.5.
- *
- * @author Stefan Siegl
- * @author Dave Longley
- *
- * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>
- * Copyright (c) 2012-2015 Digital Bazaar, Inc.
- *
- * Currently this implementation only supports ContentType of EnvelopedData,
- * EncryptedData, or SignedData at the root level. The top level elements may
- * contain only a ContentInfo of ContentType Data, i.e. plain data. Further
- * nesting is not (yet) supported.
- *
- * The Forge validators for PKCS #7's ASN.1 structures are available from
- * a separate file pkcs7asn1.js, since those are referenced from other
- * PKCS standards like PKCS #12.
- */
-
-var forge$3 = forge$F;
-
-
-
-
-
-
-
-
-
-
-// shortcut for ASN.1 API
-var asn1 = forge$3.asn1;
-
-// shortcut for PKCS#7 API
-var p7 = forge$3.pkcs7 = forge$3.pkcs7 || {};
-
-/**
- * Converts a PKCS#7 message from PEM format.
- *
- * @param pem the PEM-formatted PKCS#7 message.
- *
- * @return the PKCS#7 message.
- */
-p7.messageFromPem = function(pem) {
- var msg = forge$3.pem.decode(pem)[0];
-
- if(msg.type !== 'PKCS7') {
- var error = new Error('Could not convert PKCS#7 message from PEM; PEM ' +
- 'header type is not "PKCS#7".');
- error.headerType = msg.type;
- throw error;
- }
- if(msg.procType && msg.procType.type === 'ENCRYPTED') {
- throw new Error('Could not convert PKCS#7 message from PEM; PEM is encrypted.');
- }
-
- // convert DER to ASN.1 object
- var obj = asn1.fromDer(msg.body);
-
- return p7.messageFromAsn1(obj);
-};
-
-/**
- * Converts a PKCS#7 message to PEM format.
- *
- * @param msg The PKCS#7 message object
- * @param maxline The maximum characters per line, defaults to 64.
- *
- * @return The PEM-formatted PKCS#7 message.
- */
-p7.messageToPem = function(msg, maxline) {
- // convert to ASN.1, then DER, then PEM-encode
- var pemObj = {
- type: 'PKCS7',
- body: asn1.toDer(msg.toAsn1()).getBytes()
- };
- return forge$3.pem.encode(pemObj, {maxline: maxline});
-};
-
-/**
- * Converts a PKCS#7 message from an ASN.1 object.
- *
- * @param obj the ASN.1 representation of a ContentInfo.
- *
- * @return the PKCS#7 message.
- */
-p7.messageFromAsn1 = function(obj) {
- // validate root level ContentInfo and capture data
- var capture = {};
- var errors = [];
- if(!asn1.validate(obj, p7.asn1.contentInfoValidator, capture, errors)) {
- var error = new Error('Cannot read PKCS#7 message. ' +
- 'ASN.1 object is not an PKCS#7 ContentInfo.');
- error.errors = errors;
- throw error;
- }
-
- var contentType = asn1.derToOid(capture.contentType);
- var msg;
-
- switch(contentType) {
- case forge$3.pki.oids.envelopedData:
- msg = p7.createEnvelopedData();
- break;
-
- case forge$3.pki.oids.encryptedData:
- msg = p7.createEncryptedData();
- break;
-
- case forge$3.pki.oids.signedData:
- msg = p7.createSignedData();
- break;
-
- default:
- throw new Error('Cannot read PKCS#7 message. ContentType with OID ' +
- contentType + ' is not (yet) supported.');
- }
-
- msg.fromAsn1(capture.content.value[0]);
- return msg;
-};
-
-p7.createSignedData = function() {
- var msg = null;
- msg = {
- type: forge$3.pki.oids.signedData,
- version: 1,
- certificates: [],
- crls: [],
- // TODO: add json-formatted signer stuff here?
- signers: [],
- // populated during sign()
- digestAlgorithmIdentifiers: [],
- contentInfo: null,
- signerInfos: [],
-
- fromAsn1: function(obj) {
- // validate SignedData content block and capture data.
- _fromAsn1(msg, obj, p7.asn1.signedDataValidator);
- msg.certificates = [];
- msg.crls = [];
- msg.digestAlgorithmIdentifiers = [];
- msg.contentInfo = null;
- msg.signerInfos = [];
-
- if(msg.rawCapture.certificates) {
- var certs = msg.rawCapture.certificates.value;
- for(var i = 0; i < certs.length; ++i) {
- msg.certificates.push(forge$3.pki.certificateFromAsn1(certs[i]));
- }
- }
-
- // TODO: parse crls
- },
-
- toAsn1: function() {
- // degenerate case with no content
- if(!msg.contentInfo) {
- msg.sign();
- }
-
- var certs = [];
- for(var i = 0; i < msg.certificates.length; ++i) {
- certs.push(forge$3.pki.certificateToAsn1(msg.certificates[i]));
- }
-
- var crls = [];
- // TODO: implement CRLs
-
- // [0] SignedData
- var signedData = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // Version
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,
- asn1.integerToDer(msg.version).getBytes()),
- // DigestAlgorithmIdentifiers
- asn1.create(
- asn1.Class.UNIVERSAL, asn1.Type.SET, true,
- msg.digestAlgorithmIdentifiers),
- // ContentInfo
- msg.contentInfo
- ])
- ]);
- if(certs.length > 0) {
- // [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL
- signedData.value[0].value.push(
- asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, certs));
- }
- if(crls.length > 0) {
- // [1] IMPLICIT CertificateRevocationLists OPTIONAL
- signedData.value[0].value.push(
- asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, crls));
- }
- // SignerInfos
- signedData.value[0].value.push(
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true,
- msg.signerInfos));
-
- // ContentInfo
- return asn1.create(
- asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // ContentType
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(msg.type).getBytes()),
- // [0] SignedData
- signedData
- ]);
- },
-
- /**
- * Add (another) entity to list of signers.
- *
- * Note: If authenticatedAttributes are provided, then, per RFC 2315,
- * they must include at least two attributes: content type and
- * message digest. The message digest attribute value will be
- * auto-calculated during signing and will be ignored if provided.
- *
- * Here's an example of providing these two attributes:
- *
- * forge.pkcs7.createSignedData();
- * p7.addSigner({
- * issuer: cert.issuer.attributes,
- * serialNumber: cert.serialNumber,
- * key: privateKey,
- * digestAlgorithm: forge.pki.oids.sha1,
- * authenticatedAttributes: [{
- * type: forge.pki.oids.contentType,
- * value: forge.pki.oids.data
- * }, {
- * type: forge.pki.oids.messageDigest
- * }]
- * });
- *
- * TODO: Support [subjectKeyIdentifier] as signer's ID.
- *
- * @param signer the signer information:
- * key the signer's private key.
- * [certificate] a certificate containing the public key
- * associated with the signer's private key; use this option as
- * an alternative to specifying signer.issuer and
- * signer.serialNumber.
- * [issuer] the issuer attributes (eg: cert.issuer.attributes).
- * [serialNumber] the signer's certificate's serial number in
- * hexadecimal (eg: cert.serialNumber).
- * [digestAlgorithm] the message digest OID, as a string, to use
- * (eg: forge.pki.oids.sha1).
- * [authenticatedAttributes] an optional array of attributes
- * to also sign along with the content.
- */
- addSigner: function(signer) {
- var issuer = signer.issuer;
- var serialNumber = signer.serialNumber;
- if(signer.certificate) {
- var cert = signer.certificate;
- if(typeof cert === 'string') {
- cert = forge$3.pki.certificateFromPem(cert);
- }
- issuer = cert.issuer.attributes;
- serialNumber = cert.serialNumber;
- }
- var key = signer.key;
- if(!key) {
- throw new Error(
- 'Could not add PKCS#7 signer; no private key specified.');
- }
- if(typeof key === 'string') {
- key = forge$3.pki.privateKeyFromPem(key);
- }
-
- // ensure OID known for digest algorithm
- var digestAlgorithm = signer.digestAlgorithm || forge$3.pki.oids.sha1;
- switch(digestAlgorithm) {
- case forge$3.pki.oids.sha1:
- case forge$3.pki.oids.sha256:
- case forge$3.pki.oids.sha384:
- case forge$3.pki.oids.sha512:
- case forge$3.pki.oids.md5:
- break;
- default:
- throw new Error(
- 'Could not add PKCS#7 signer; unknown message digest algorithm: ' +
- digestAlgorithm);
- }
-
- // if authenticatedAttributes is present, then the attributes
- // must contain at least PKCS #9 content-type and message-digest
- var authenticatedAttributes = signer.authenticatedAttributes || [];
- if(authenticatedAttributes.length > 0) {
- var contentType = false;
- var messageDigest = false;
- for(var i = 0; i < authenticatedAttributes.length; ++i) {
- var attr = authenticatedAttributes[i];
- if(!contentType && attr.type === forge$3.pki.oids.contentType) {
- contentType = true;
- if(messageDigest) {
- break;
- }
- continue;
- }
- if(!messageDigest && attr.type === forge$3.pki.oids.messageDigest) {
- messageDigest = true;
- if(contentType) {
- break;
- }
- continue;
- }
- }
-
- if(!contentType || !messageDigest) {
- throw new Error('Invalid signer.authenticatedAttributes. If ' +
- 'signer.authenticatedAttributes is specified, then it must ' +
- 'contain at least two attributes, PKCS #9 content-type and ' +
- 'PKCS #9 message-digest.');
- }
- }
-
- msg.signers.push({
- key: key,
- version: 1,
- issuer: issuer,
- serialNumber: serialNumber,
- digestAlgorithm: digestAlgorithm,
- signatureAlgorithm: forge$3.pki.oids.rsaEncryption,
- signature: null,
- authenticatedAttributes: authenticatedAttributes,
- unauthenticatedAttributes: []
- });
- },
-
- /**
- * Signs the content.
- * @param options Options to apply when signing:
- * [detached] boolean. If signing should be done in detached mode. Defaults to false.
- */
- sign: function(options) {
- options = options || {};
- // auto-generate content info
- if(typeof msg.content !== 'object' || msg.contentInfo === null) {
- // use Data ContentInfo
- msg.contentInfo = asn1.create(
- asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // ContentType
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(forge$3.pki.oids.data).getBytes())
- ]);
-
- // add actual content, if present
- if('content' in msg) {
- var content;
- if(msg.content instanceof forge$3.util.ByteBuffer) {
- content = msg.content.bytes();
- } else if(typeof msg.content === 'string') {
- content = forge$3.util.encodeUtf8(msg.content);
- }
-
- if (options.detached) {
- msg.detachedContent = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, content);
- } else {
- msg.contentInfo.value.push(
- // [0] EXPLICIT content
- asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,
- content)
- ]));
- }
- }
- }
-
- // no signers, return early (degenerate case for certificate container)
- if(msg.signers.length === 0) {
- return;
- }
-
- // generate digest algorithm identifiers
- var mds = addDigestAlgorithmIds();
-
- // generate signerInfos
- addSignerInfos(mds);
- },
-
- verify: function() {
- throw new Error('PKCS#7 signature verification not yet implemented.');
- },
-
- /**
- * Add a certificate.
- *
- * @param cert the certificate to add.
- */
- addCertificate: function(cert) {
- // convert from PEM
- if(typeof cert === 'string') {
- cert = forge$3.pki.certificateFromPem(cert);
- }
- msg.certificates.push(cert);
- },
-
- /**
- * Add a certificate revokation list.
- *
- * @param crl the certificate revokation list to add.
- */
- addCertificateRevokationList: function(crl) {
- throw new Error('PKCS#7 CRL support not yet implemented.');
- }
- };
- return msg;
-
- function addDigestAlgorithmIds() {
- var mds = {};
-
- for(var i = 0; i < msg.signers.length; ++i) {
- var signer = msg.signers[i];
- var oid = signer.digestAlgorithm;
- if(!(oid in mds)) {
- // content digest
- mds[oid] = forge$3.md[forge$3.pki.oids[oid]].create();
- }
- if(signer.authenticatedAttributes.length === 0) {
- // no custom attributes to digest; use content message digest
- signer.md = mds[oid];
- } else {
- // custom attributes to be digested; use own message digest
- // TODO: optimize to just copy message digest state if that
- // feature is ever supported with message digests
- signer.md = forge$3.md[forge$3.pki.oids[oid]].create();
- }
- }
-
- // add unique digest algorithm identifiers
- msg.digestAlgorithmIdentifiers = [];
- for(var oid in mds) {
- msg.digestAlgorithmIdentifiers.push(
- // AlgorithmIdentifier
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // algorithm
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(oid).getBytes()),
- // parameters (null)
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')
- ]));
- }
-
- return mds;
- }
-
- function addSignerInfos(mds) {
- var content;
-
- if (msg.detachedContent) {
- // Signature has been made in detached mode.
- content = msg.detachedContent;
- } else {
- // Note: ContentInfo is a SEQUENCE with 2 values, second value is
- // the content field and is optional for a ContentInfo but required here
- // since signers are present
- // get ContentInfo content
- content = msg.contentInfo.value[1];
- // skip [0] EXPLICIT content wrapper
- content = content.value[0];
- }
-
- if(!content) {
- throw new Error(
- 'Could not sign PKCS#7 message; there is no content to sign.');
- }
-
- // get ContentInfo content type
- var contentType = asn1.derToOid(msg.contentInfo.value[0].value);
-
- // serialize content
- var bytes = asn1.toDer(content);
-
- // skip identifier and length per RFC 2315 9.3
- // skip identifier (1 byte)
- bytes.getByte();
- // read and discard length bytes
- asn1.getBerValueLength(bytes);
- bytes = bytes.getBytes();
-
- // digest content DER value bytes
- for(var oid in mds) {
- mds[oid].start().update(bytes);
- }
-
- // sign content
- var signingTime = new Date();
- for(var i = 0; i < msg.signers.length; ++i) {
- var signer = msg.signers[i];
-
- if(signer.authenticatedAttributes.length === 0) {
- // if ContentInfo content type is not "Data", then
- // authenticatedAttributes must be present per RFC 2315
- if(contentType !== forge$3.pki.oids.data) {
- throw new Error(
- 'Invalid signer; authenticatedAttributes must be present ' +
- 'when the ContentInfo content type is not PKCS#7 Data.');
- }
- } else {
- // process authenticated attributes
- // [0] IMPLICIT
- signer.authenticatedAttributesAsn1 = asn1.create(
- asn1.Class.CONTEXT_SPECIFIC, 0, true, []);
-
- // per RFC 2315, attributes are to be digested using a SET container
- // not the above [0] IMPLICIT container
- var attrsAsn1 = asn1.create(
- asn1.Class.UNIVERSAL, asn1.Type.SET, true, []);
-
- for(var ai = 0; ai < signer.authenticatedAttributes.length; ++ai) {
- var attr = signer.authenticatedAttributes[ai];
- if(attr.type === forge$3.pki.oids.messageDigest) {
- // use content message digest as value
- attr.value = mds[signer.digestAlgorithm].digest();
- } else if(attr.type === forge$3.pki.oids.signingTime) {
- // auto-populate signing time if not already set
- if(!attr.value) {
- attr.value = signingTime;
- }
- }
-
- // convert to ASN.1 and push onto Attributes SET (for signing) and
- // onto authenticatedAttributesAsn1 to complete SignedData ASN.1
- // TODO: optimize away duplication
- attrsAsn1.value.push(_attributeToAsn1(attr));
- signer.authenticatedAttributesAsn1.value.push(_attributeToAsn1(attr));
- }
-
- // DER-serialize and digest SET OF attributes only
- bytes = asn1.toDer(attrsAsn1).getBytes();
- signer.md.start().update(bytes);
- }
-
- // sign digest
- signer.signature = signer.key.sign(signer.md, 'RSASSA-PKCS1-V1_5');
- }
-
- // add signer info
- msg.signerInfos = _signersToAsn1(msg.signers);
- }
-};
-
-/**
- * Creates an empty PKCS#7 message of type EncryptedData.
- *
- * @return the message.
- */
-p7.createEncryptedData = function() {
- var msg = null;
- msg = {
- type: forge$3.pki.oids.encryptedData,
- version: 0,
- encryptedContent: {
- algorithm: forge$3.pki.oids['aes256-CBC']
- },
-
- /**
- * Reads an EncryptedData content block (in ASN.1 format)
- *
- * @param obj The ASN.1 representation of the EncryptedData content block
- */
- fromAsn1: function(obj) {
- // Validate EncryptedData content block and capture data.
- _fromAsn1(msg, obj, p7.asn1.encryptedDataValidator);
- },
-
- /**
- * Decrypt encrypted content
- *
- * @param key The (symmetric) key as a byte buffer
- */
- decrypt: function(key) {
- if(key !== undefined) {
- msg.encryptedContent.key = key;
- }
- _decryptContent(msg);
- }
- };
- return msg;
-};
-
-/**
- * Creates an empty PKCS#7 message of type EnvelopedData.
- *
- * @return the message.
- */
-p7.createEnvelopedData = function() {
- var msg = null;
- msg = {
- type: forge$3.pki.oids.envelopedData,
- version: 0,
- recipients: [],
- encryptedContent: {
- algorithm: forge$3.pki.oids['aes256-CBC']
- },
-
- /**
- * Reads an EnvelopedData content block (in ASN.1 format)
- *
- * @param obj the ASN.1 representation of the EnvelopedData content block.
- */
- fromAsn1: function(obj) {
- // validate EnvelopedData content block and capture data
- var capture = _fromAsn1(msg, obj, p7.asn1.envelopedDataValidator);
- msg.recipients = _recipientsFromAsn1(capture.recipientInfos.value);
- },
-
- toAsn1: function() {
- // ContentInfo
- return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // ContentType
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(msg.type).getBytes()),
- // [0] EnvelopedData
- asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // Version
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,
- asn1.integerToDer(msg.version).getBytes()),
- // RecipientInfos
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true,
- _recipientsToAsn1(msg.recipients)),
- // EncryptedContentInfo
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true,
- _encryptedContentToAsn1(msg.encryptedContent))
- ])
- ])
- ]);
- },
-
- /**
- * Find recipient by X.509 certificate's issuer.
- *
- * @param cert the certificate with the issuer to look for.
- *
- * @return the recipient object.
- */
- findRecipient: function(cert) {
- var sAttr = cert.issuer.attributes;
-
- for(var i = 0; i < msg.recipients.length; ++i) {
- var r = msg.recipients[i];
- var rAttr = r.issuer;
-
- if(r.serialNumber !== cert.serialNumber) {
- continue;
- }
-
- if(rAttr.length !== sAttr.length) {
- continue;
- }
-
- var match = true;
- for(var j = 0; j < sAttr.length; ++j) {
- if(rAttr[j].type !== sAttr[j].type ||
- rAttr[j].value !== sAttr[j].value) {
- match = false;
- break;
- }
- }
-
- if(match) {
- return r;
- }
- }
-
- return null;
- },
-
- /**
- * Decrypt enveloped content
- *
- * @param recipient The recipient object related to the private key
- * @param privKey The (RSA) private key object
- */
- decrypt: function(recipient, privKey) {
- if(msg.encryptedContent.key === undefined && recipient !== undefined &&
- privKey !== undefined) {
- switch(recipient.encryptedContent.algorithm) {
- case forge$3.pki.oids.rsaEncryption:
- case forge$3.pki.oids.desCBC:
- var key = privKey.decrypt(recipient.encryptedContent.content);
- msg.encryptedContent.key = forge$3.util.createBuffer(key);
- break;
-
- default:
- throw new Error('Unsupported asymmetric cipher, ' +
- 'OID ' + recipient.encryptedContent.algorithm);
- }
- }
-
- _decryptContent(msg);
- },
-
- /**
- * Add (another) entity to list of recipients.
- *
- * @param cert The certificate of the entity to add.
- */
- addRecipient: function(cert) {
- msg.recipients.push({
- version: 0,
- issuer: cert.issuer.attributes,
- serialNumber: cert.serialNumber,
- encryptedContent: {
- // We simply assume rsaEncryption here, since forge.pki only
- // supports RSA so far. If the PKI module supports other
- // ciphers one day, we need to modify this one as well.
- algorithm: forge$3.pki.oids.rsaEncryption,
- key: cert.publicKey
- }
- });
- },
-
- /**
- * Encrypt enveloped content.
- *
- * This function supports two optional arguments, cipher and key, which
- * can be used to influence symmetric encryption. Unless cipher is
- * provided, the cipher specified in encryptedContent.algorithm is used
- * (defaults to AES-256-CBC). If no key is provided, encryptedContent.key
- * is (re-)used. If that one's not set, a random key will be generated
- * automatically.
- *
- * @param [key] The key to be used for symmetric encryption.
- * @param [cipher] The OID of the symmetric cipher to use.
- */
- encrypt: function(key, cipher) {
- // Part 1: Symmetric encryption
- if(msg.encryptedContent.content === undefined) {
- cipher = cipher || msg.encryptedContent.algorithm;
- key = key || msg.encryptedContent.key;
-
- var keyLen, ivLen, ciphFn;
- switch(cipher) {
- case forge$3.pki.oids['aes128-CBC']:
- keyLen = 16;
- ivLen = 16;
- ciphFn = forge$3.aes.createEncryptionCipher;
- break;
-
- case forge$3.pki.oids['aes192-CBC']:
- keyLen = 24;
- ivLen = 16;
- ciphFn = forge$3.aes.createEncryptionCipher;
- break;
-
- case forge$3.pki.oids['aes256-CBC']:
- keyLen = 32;
- ivLen = 16;
- ciphFn = forge$3.aes.createEncryptionCipher;
- break;
-
- case forge$3.pki.oids['des-EDE3-CBC']:
- keyLen = 24;
- ivLen = 8;
- ciphFn = forge$3.des.createEncryptionCipher;
- break;
-
- default:
- throw new Error('Unsupported symmetric cipher, OID ' + cipher);
- }
-
- if(key === undefined) {
- key = forge$3.util.createBuffer(forge$3.random.getBytes(keyLen));
- } else if(key.length() != keyLen) {
- throw new Error('Symmetric key has wrong length; ' +
- 'got ' + key.length() + ' bytes, expected ' + keyLen + '.');
- }
-
- // Keep a copy of the key & IV in the object, so the caller can
- // use it for whatever reason.
- msg.encryptedContent.algorithm = cipher;
- msg.encryptedContent.key = key;
- msg.encryptedContent.parameter = forge$3.util.createBuffer(
- forge$3.random.getBytes(ivLen));
-
- var ciph = ciphFn(key);
- ciph.start(msg.encryptedContent.parameter.copy());
- ciph.update(msg.content);
-
- // The finish function does PKCS#7 padding by default, therefore
- // no action required by us.
- if(!ciph.finish()) {
- throw new Error('Symmetric encryption failed.');
- }
-
- msg.encryptedContent.content = ciph.output;
- }
-
- // Part 2: asymmetric encryption for each recipient
- for(var i = 0; i < msg.recipients.length; ++i) {
- var recipient = msg.recipients[i];
-
- // Nothing to do, encryption already done.
- if(recipient.encryptedContent.content !== undefined) {
- continue;
- }
-
- switch(recipient.encryptedContent.algorithm) {
- case forge$3.pki.oids.rsaEncryption:
- recipient.encryptedContent.content =
- recipient.encryptedContent.key.encrypt(
- msg.encryptedContent.key.data);
- break;
-
- default:
- throw new Error('Unsupported asymmetric cipher, OID ' +
- recipient.encryptedContent.algorithm);
- }
- }
- }
- };
- return msg;
-};
-
-/**
- * Converts a single recipient from an ASN.1 object.
- *
- * @param obj the ASN.1 RecipientInfo.
- *
- * @return the recipient object.
- */
-function _recipientFromAsn1(obj) {
- // validate EnvelopedData content block and capture data
- var capture = {};
- var errors = [];
- if(!asn1.validate(obj, p7.asn1.recipientInfoValidator, capture, errors)) {
- var error = new Error('Cannot read PKCS#7 RecipientInfo. ' +
- 'ASN.1 object is not an PKCS#7 RecipientInfo.');
- error.errors = errors;
- throw error;
- }
-
- return {
- version: capture.version.charCodeAt(0),
- issuer: forge$3.pki.RDNAttributesAsArray(capture.issuer),
- serialNumber: forge$3.util.createBuffer(capture.serial).toHex(),
- encryptedContent: {
- algorithm: asn1.derToOid(capture.encAlgorithm),
- parameter: capture.encParameter.value,
- content: capture.encKey
- }
- };
-}
-
-/**
- * Converts a single recipient object to an ASN.1 object.
- *
- * @param obj the recipient object.
- *
- * @return the ASN.1 RecipientInfo.
- */
-function _recipientToAsn1(obj) {
- return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // Version
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,
- asn1.integerToDer(obj.version).getBytes()),
- // IssuerAndSerialNumber
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // Name
- forge$3.pki.distinguishedNameToAsn1({attributes: obj.issuer}),
- // Serial
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,
- forge$3.util.hexToBytes(obj.serialNumber))
- ]),
- // KeyEncryptionAlgorithmIdentifier
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // Algorithm
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(obj.encryptedContent.algorithm).getBytes()),
- // Parameter, force NULL, only RSA supported for now.
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')
- ]),
- // EncryptedKey
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,
- obj.encryptedContent.content)
- ]);
-}
-
-/**
- * Map a set of RecipientInfo ASN.1 objects to recipient objects.
- *
- * @param infos an array of ASN.1 representations RecipientInfo (i.e. SET OF).
- *
- * @return an array of recipient objects.
- */
-function _recipientsFromAsn1(infos) {
- var ret = [];
- for(var i = 0; i < infos.length; ++i) {
- ret.push(_recipientFromAsn1(infos[i]));
- }
- return ret;
-}
-
-/**
- * Map an array of recipient objects to ASN.1 RecipientInfo objects.
- *
- * @param recipients an array of recipientInfo objects.
- *
- * @return an array of ASN.1 RecipientInfos.
- */
-function _recipientsToAsn1(recipients) {
- var ret = [];
- for(var i = 0; i < recipients.length; ++i) {
- ret.push(_recipientToAsn1(recipients[i]));
- }
- return ret;
-}
-
-/**
- * Converts a single signerInfo object to an ASN.1 object.
- *
- * @param obj the signerInfo object.
- *
- * @return the ASN.1 representation of a SignerInfo.
- */
-function _signerToAsn1(obj) {
- // SignerInfo
- var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // version
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,
- asn1.integerToDer(obj.version).getBytes()),
- // issuerAndSerialNumber
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // name
- forge$3.pki.distinguishedNameToAsn1({attributes: obj.issuer}),
- // serial
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,
- forge$3.util.hexToBytes(obj.serialNumber))
- ]),
- // digestAlgorithm
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // algorithm
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(obj.digestAlgorithm).getBytes()),
- // parameters (null)
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')
- ])
- ]);
-
- // authenticatedAttributes (OPTIONAL)
- if(obj.authenticatedAttributesAsn1) {
- // add ASN.1 previously generated during signing
- rval.value.push(obj.authenticatedAttributesAsn1);
- }
-
- // digestEncryptionAlgorithm
- rval.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // algorithm
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(obj.signatureAlgorithm).getBytes()),
- // parameters (null)
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')
- ]));
-
- // encryptedDigest
- rval.value.push(asn1.create(
- asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, obj.signature));
-
- // unauthenticatedAttributes (OPTIONAL)
- if(obj.unauthenticatedAttributes.length > 0) {
- // [1] IMPLICIT
- var attrsAsn1 = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, []);
- for(var i = 0; i < obj.unauthenticatedAttributes.length; ++i) {
- var attr = obj.unauthenticatedAttributes[i];
- attrsAsn1.values.push(_attributeToAsn1(attr));
- }
- rval.value.push(attrsAsn1);
- }
-
- return rval;
-}
-
-/**
- * Map an array of signer objects to ASN.1 objects.
- *
- * @param signers an array of signer objects.
- *
- * @return an array of ASN.1 SignerInfos.
- */
-function _signersToAsn1(signers) {
- var ret = [];
- for(var i = 0; i < signers.length; ++i) {
- ret.push(_signerToAsn1(signers[i]));
- }
- return ret;
-}
-
-/**
- * Convert an attribute object to an ASN.1 Attribute.
- *
- * @param attr the attribute object.
- *
- * @return the ASN.1 Attribute.
- */
-function _attributeToAsn1(attr) {
- var value;
-
- // TODO: generalize to support more attributes
- if(attr.type === forge$3.pki.oids.contentType) {
- value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(attr.value).getBytes());
- } else if(attr.type === forge$3.pki.oids.messageDigest) {
- value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,
- attr.value.bytes());
- } else if(attr.type === forge$3.pki.oids.signingTime) {
- /* Note per RFC 2985: Dates between 1 January 1950 and 31 December 2049
- (inclusive) MUST be encoded as UTCTime. Any dates with year values
- before 1950 or after 2049 MUST be encoded as GeneralizedTime. [Further,]
- UTCTime values MUST be expressed in Greenwich Mean Time (Zulu) and MUST
- include seconds (i.e., times are YYMMDDHHMMSSZ), even where the
- number of seconds is zero. Midnight (GMT) must be represented as
- "YYMMDD000000Z". */
- // TODO: make these module-level constants
- var jan_1_1950 = new Date('1950-01-01T00:00:00Z');
- var jan_1_2050 = new Date('2050-01-01T00:00:00Z');
- var date = attr.value;
- if(typeof date === 'string') {
- // try to parse date
- var timestamp = Date.parse(date);
- if(!isNaN(timestamp)) {
- date = new Date(timestamp);
- } else if(date.length === 13) {
- // YYMMDDHHMMSSZ (13 chars for UTCTime)
- date = asn1.utcTimeToDate(date);
- } else {
- // assume generalized time
- date = asn1.generalizedTimeToDate(date);
- }
- }
-
- if(date >= jan_1_1950 && date < jan_1_2050) {
- value = asn1.create(
- asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false,
- asn1.dateToUtcTime(date));
- } else {
- value = asn1.create(
- asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false,
- asn1.dateToGeneralizedTime(date));
- }
- }
-
- // TODO: expose as common API call
- // create a RelativeDistinguishedName set
- // each value in the set is an AttributeTypeAndValue first
- // containing the type (an OID) and second the value
- return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // AttributeType
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(attr.type).getBytes()),
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [
- // AttributeValue
- value
- ])
- ]);
-}
-
-/**
- * Map messages encrypted content to ASN.1 objects.
- *
- * @param ec The encryptedContent object of the message.
- *
- * @return ASN.1 representation of the encryptedContent object (SEQUENCE).
- */
-function _encryptedContentToAsn1(ec) {
- return [
- // ContentType, always Data for the moment
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(forge$3.pki.oids.data).getBytes()),
- // ContentEncryptionAlgorithmIdentifier
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [
- // Algorithm
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,
- asn1.oidToDer(ec.algorithm).getBytes()),
- // Parameters (IV)
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,
- ec.parameter.getBytes())
- ]),
- // [0] EncryptedContent
- asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [
- asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,
- ec.content.getBytes())
- ])
- ];
-}
-
-/**
- * Reads the "common part" of an PKCS#7 content block (in ASN.1 format)
- *
- * This function reads the "common part" of the PKCS#7 content blocks
- * EncryptedData and EnvelopedData, i.e. version number and symmetrically
- * encrypted content block.
- *
- * The result of the ASN.1 validate and capture process is returned
- * to allow the caller to extract further data, e.g. the list of recipients
- * in case of a EnvelopedData object.
- *
- * @param msg the PKCS#7 object to read the data to.
- * @param obj the ASN.1 representation of the content block.
- * @param validator the ASN.1 structure validator object to use.
- *
- * @return the value map captured by validator object.
- */
-function _fromAsn1(msg, obj, validator) {
- var capture = {};
- var errors = [];
- if(!asn1.validate(obj, validator, capture, errors)) {
- var error = new Error('Cannot read PKCS#7 message. ' +
- 'ASN.1 object is not a supported PKCS#7 message.');
- error.errors = error;
- throw error;
- }
-
- // Check contentType, so far we only support (raw) Data.
- var contentType = asn1.derToOid(capture.contentType);
- if(contentType !== forge$3.pki.oids.data) {
- throw new Error('Unsupported PKCS#7 message. ' +
- 'Only wrapped ContentType Data supported.');
- }
-
- if(capture.encryptedContent) {
- var content = '';
- if(forge$3.util.isArray(capture.encryptedContent)) {
- for(var i = 0; i < capture.encryptedContent.length; ++i) {
- if(capture.encryptedContent[i].type !== asn1.Type.OCTETSTRING) {
- throw new Error('Malformed PKCS#7 message, expecting encrypted ' +
- 'content constructed of only OCTET STRING objects.');
- }
- content += capture.encryptedContent[i].value;
- }
- } else {
- content = capture.encryptedContent;
- }
- msg.encryptedContent = {
- algorithm: asn1.derToOid(capture.encAlgorithm),
- parameter: forge$3.util.createBuffer(capture.encParameter.value),
- content: forge$3.util.createBuffer(content)
- };
- }
-
- if(capture.content) {
- var content = '';
- if(forge$3.util.isArray(capture.content)) {
- for(var i = 0; i < capture.content.length; ++i) {
- if(capture.content[i].type !== asn1.Type.OCTETSTRING) {
- throw new Error('Malformed PKCS#7 message, expecting ' +
- 'content constructed of only OCTET STRING objects.');
- }
- content += capture.content[i].value;
- }
- } else {
- content = capture.content;
- }
- msg.content = forge$3.util.createBuffer(content);
- }
-
- msg.version = capture.version.charCodeAt(0);
- msg.rawCapture = capture;
-
- return capture;
-}
-
-/**
- * Decrypt the symmetrically encrypted content block of the PKCS#7 message.
- *
- * Decryption is skipped in case the PKCS#7 message object already has a
- * (decrypted) content attribute. The algorithm, key and cipher parameters
- * (probably the iv) are taken from the encryptedContent attribute of the
- * message object.
- *
- * @param The PKCS#7 message object.
- */
-function _decryptContent(msg) {
- if(msg.encryptedContent.key === undefined) {
- throw new Error('Symmetric key not available.');
- }
-
- if(msg.content === undefined) {
- var ciph;
-
- switch(msg.encryptedContent.algorithm) {
- case forge$3.pki.oids['aes128-CBC']:
- case forge$3.pki.oids['aes192-CBC']:
- case forge$3.pki.oids['aes256-CBC']:
- ciph = forge$3.aes.createDecryptionCipher(msg.encryptedContent.key);
- break;
-
- case forge$3.pki.oids['desCBC']:
- case forge$3.pki.oids['des-EDE3-CBC']:
- ciph = forge$3.des.createDecryptionCipher(msg.encryptedContent.key);
- break;
-
- default:
- throw new Error('Unsupported symmetric cipher, OID ' +
- msg.encryptedContent.algorithm);
- }
- ciph.start(msg.encryptedContent.parameter);
- ciph.update(msg.encryptedContent.content);
-
- if(!ciph.finish()) {
- throw new Error('Symmetric decryption failed.');
- }
-
- msg.content = ciph.output;
- }
-}
-
-/**
- * Functions to output keys in SSH-friendly formats.
- *
- * This is part of the Forge project which may be used under the terms of
- * either the BSD License or the GNU General Public License (GPL) Version 2.
- *
- * See: https://github.com/digitalbazaar/forge/blob/cbebca3780658703d925b61b2caffb1d263a6c1d/LICENSE
- *
- * @author https://github.com/shellac
- */
-
-var forge$2 = forge$F;
-
-
-
-
-
-
-var ssh = forge$2.ssh = forge$2.ssh || {};
-
-/**
- * Encodes (and optionally encrypts) a private RSA key as a Putty PPK file.
- *
- * @param privateKey the key.
- * @param passphrase a passphrase to protect the key (falsy for no encryption).
- * @param comment a comment to include in the key file.
- *
- * @return the PPK file as a string.
- */
-ssh.privateKeyToPutty = function(privateKey, passphrase, comment) {
- comment = comment || '';
- passphrase = passphrase || '';
- var algorithm = 'ssh-rsa';
- var encryptionAlgorithm = (passphrase === '') ? 'none' : 'aes256-cbc';
-
- var ppk = 'PuTTY-User-Key-File-2: ' + algorithm + '\r\n';
- ppk += 'Encryption: ' + encryptionAlgorithm + '\r\n';
- ppk += 'Comment: ' + comment + '\r\n';
-
- // public key into buffer for ppk
- var pubbuffer = forge$2.util.createBuffer();
- _addStringToBuffer(pubbuffer, algorithm);
- _addBigIntegerToBuffer(pubbuffer, privateKey.e);
- _addBigIntegerToBuffer(pubbuffer, privateKey.n);
-
- // write public key
- var pub = forge$2.util.encode64(pubbuffer.bytes(), 64);
- var length = Math.floor(pub.length / 66) + 1; // 66 = 64 + \r\n
- ppk += 'Public-Lines: ' + length + '\r\n';
- ppk += pub;
-
- // private key into a buffer
- var privbuffer = forge$2.util.createBuffer();
- _addBigIntegerToBuffer(privbuffer, privateKey.d);
- _addBigIntegerToBuffer(privbuffer, privateKey.p);
- _addBigIntegerToBuffer(privbuffer, privateKey.q);
- _addBigIntegerToBuffer(privbuffer, privateKey.qInv);
-
- // optionally encrypt the private key
- var priv;
- if(!passphrase) {
- // use the unencrypted buffer
- priv = forge$2.util.encode64(privbuffer.bytes(), 64);
- } else {
- // encrypt RSA key using passphrase
- var encLen = privbuffer.length() + 16 - 1;
- encLen -= encLen % 16;
-
- // pad private key with sha1-d data -- needs to be a multiple of 16
- var padding = _sha1(privbuffer.bytes());
-
- padding.truncate(padding.length() - encLen + privbuffer.length());
- privbuffer.putBuffer(padding);
-
- var aeskey = forge$2.util.createBuffer();
- aeskey.putBuffer(_sha1('\x00\x00\x00\x00', passphrase));
- aeskey.putBuffer(_sha1('\x00\x00\x00\x01', passphrase));
-
- // encrypt some bytes using CBC mode
- // key is 40 bytes, so truncate *by* 8 bytes
- var cipher = forge$2.aes.createEncryptionCipher(aeskey.truncate(8), 'CBC');
- cipher.start(forge$2.util.createBuffer().fillWithByte(0, 16));
- cipher.update(privbuffer.copy());
- cipher.finish();
- var encrypted = cipher.output;
-
- // Note: this appears to differ from Putty -- is forge wrong, or putty?
- // due to padding we finish as an exact multiple of 16
- encrypted.truncate(16); // all padding
-
- priv = forge$2.util.encode64(encrypted.bytes(), 64);
- }
-
- // output private key
- length = Math.floor(priv.length / 66) + 1; // 64 + \r\n
- ppk += '\r\nPrivate-Lines: ' + length + '\r\n';
- ppk += priv;
-
- // MAC
- var mackey = _sha1('putty-private-key-file-mac-key', passphrase);
-
- var macbuffer = forge$2.util.createBuffer();
- _addStringToBuffer(macbuffer, algorithm);
- _addStringToBuffer(macbuffer, encryptionAlgorithm);
- _addStringToBuffer(macbuffer, comment);
- macbuffer.putInt32(pubbuffer.length());
- macbuffer.putBuffer(pubbuffer);
- macbuffer.putInt32(privbuffer.length());
- macbuffer.putBuffer(privbuffer);
-
- var hmac = forge$2.hmac.create();
- hmac.start('sha1', mackey);
- hmac.update(macbuffer.bytes());
-
- ppk += '\r\nPrivate-MAC: ' + hmac.digest().toHex() + '\r\n';
-
- return ppk;
-};
-
-/**
- * Encodes a public RSA key as an OpenSSH file.
- *
- * @param key the key.
- * @param comment a comment.
- *
- * @return the public key in OpenSSH format.
- */
-ssh.publicKeyToOpenSSH = function(key, comment) {
- var type = 'ssh-rsa';
- comment = comment || '';
-
- var buffer = forge$2.util.createBuffer();
- _addStringToBuffer(buffer, type);
- _addBigIntegerToBuffer(buffer, key.e);
- _addBigIntegerToBuffer(buffer, key.n);
-
- return type + ' ' + forge$2.util.encode64(buffer.bytes()) + ' ' + comment;
-};
-
-/**
- * Encodes a private RSA key as an OpenSSH file.
- *
- * @param key the key.
- * @param passphrase a passphrase to protect the key (falsy for no encryption).
- *
- * @return the public key in OpenSSH format.
- */
-ssh.privateKeyToOpenSSH = function(privateKey, passphrase) {
- if(!passphrase) {
- return forge$2.pki.privateKeyToPem(privateKey);
- }
- // OpenSSH private key is just a legacy format, it seems
- return forge$2.pki.encryptRsaPrivateKey(privateKey, passphrase,
- {legacy: true, algorithm: 'aes128'});
-};
-
-/**
- * Gets the SSH fingerprint for the given public key.
- *
- * @param options the options to use.
- * [md] the message digest object to use (defaults to forge.md.md5).
- * [encoding] an alternative output encoding, such as 'hex'
- * (defaults to none, outputs a byte buffer).
- * [delimiter] the delimiter to use between bytes for 'hex' encoded
- * output, eg: ':' (defaults to none).
- *
- * @return the fingerprint as a byte buffer or other encoding based on options.
- */
-ssh.getPublicKeyFingerprint = function(key, options) {
- options = options || {};
- var md = options.md || forge$2.md.md5.create();
-
- var type = 'ssh-rsa';
- var buffer = forge$2.util.createBuffer();
- _addStringToBuffer(buffer, type);
- _addBigIntegerToBuffer(buffer, key.e);
- _addBigIntegerToBuffer(buffer, key.n);
-
- // hash public key bytes
- md.start();
- md.update(buffer.getBytes());
- var digest = md.digest();
- if(options.encoding === 'hex') {
- var hex = digest.toHex();
- if(options.delimiter) {
- return hex.match(/.{2}/g).join(options.delimiter);
- }
- return hex;
- } else if(options.encoding === 'binary') {
- return digest.getBytes();
- } else if(options.encoding) {
- throw new Error('Unknown encoding "' + options.encoding + '".');
- }
- return digest;
-};
-
-/**
- * Adds len(val) then val to a buffer.
- *
- * @param buffer the buffer to add to.
- * @param val a big integer.
- */
-function _addBigIntegerToBuffer(buffer, val) {
- var hexVal = val.toString(16);
- // ensure 2s complement +ve
- if(hexVal[0] >= '8') {
- hexVal = '00' + hexVal;
- }
- var bytes = forge$2.util.hexToBytes(hexVal);
- buffer.putInt32(bytes.length);
- buffer.putBytes(bytes);
-}
-
-/**
- * Adds len(val) then val to a buffer.
- *
- * @param buffer the buffer to add to.
- * @param val a string.
- */
-function _addStringToBuffer(buffer, val) {
- buffer.putInt32(val.length);
- buffer.putString(val);
-}
-
-/**
- * Hashes the arguments into one value using SHA-1.
- *
- * @return the sha1 hash of the provided arguments.
- */
-function _sha1() {
- var sha = forge$2.md.sha1.create();
- var num = arguments.length;
- for (var i = 0; i < num; ++i) {
- sha.update(arguments[i]);
- }
- return sha.digest();
-}
-
-/**
- * Support for concurrent task management and synchronization in web
- * applications.
- *
- * @author Dave Longley
- * @author David I. Lehn <dlehn@digitalbazaar.com>
- *
- * Copyright (c) 2009-2013 Digital Bazaar, Inc.
- */
-
-var forge$1 = forge$F;
-
-
-
-
-// logging category
-var cat = 'forge.task';
-
-// track tasks for debugging
-var sTasks = {};
-var sNextTaskId = 0;
-// debug access
-forge$1.debug.set(cat, 'tasks', sTasks);
-
-// a map of task type to task queue
-var sTaskQueues = {};
-// debug access
-forge$1.debug.set(cat, 'queues', sTaskQueues);
-
-// name for unnamed tasks
-var sNoTaskName = '?';
-
-// maximum number of doNext() recursions before a context swap occurs
-// FIXME: might need to tweak this based on the browser
-var sMaxRecursions = 30;
-
-// time slice for doing tasks before a context swap occurs
-// FIXME: might need to tweak this based on the browser
-var sTimeSlice = 20;
-
-/**
- * Task states.
- *
- * READY: ready to start processing
- * RUNNING: task or a subtask is running
- * BLOCKED: task is waiting to acquire N permits to continue
- * SLEEPING: task is sleeping for a period of time
- * DONE: task is done
- * ERROR: task has an error
- */
-var READY = 'ready';
-var RUNNING = 'running';
-var BLOCKED = 'blocked';
-var SLEEPING = 'sleeping';
-var DONE = 'done';
-var ERROR = 'error';
-
-/**
- * Task actions. Used to control state transitions.
- *
- * STOP: stop processing
- * START: start processing tasks
- * BLOCK: block task from continuing until 1 or more permits are released
- * UNBLOCK: release one or more permits
- * SLEEP: sleep for a period of time
- * WAKEUP: wakeup early from SLEEPING state
- * CANCEL: cancel further tasks
- * FAIL: a failure occured
- */
-var STOP = 'stop';
-var START = 'start';
-var BLOCK = 'block';
-var UNBLOCK = 'unblock';
-var SLEEP = 'sleep';
-var WAKEUP = 'wakeup';
-var CANCEL = 'cancel';
-var FAIL = 'fail';
-
-/**
- * State transition table.
- *
- * nextState = sStateTable[currentState][action]
- */
-var sStateTable = {};
-
-sStateTable[READY] = {};
-sStateTable[READY][STOP] = READY;
-sStateTable[READY][START] = RUNNING;
-sStateTable[READY][CANCEL] = DONE;
-sStateTable[READY][FAIL] = ERROR;
-
-sStateTable[RUNNING] = {};
-sStateTable[RUNNING][STOP] = READY;
-sStateTable[RUNNING][START] = RUNNING;
-sStateTable[RUNNING][BLOCK] = BLOCKED;
-sStateTable[RUNNING][UNBLOCK] = RUNNING;
-sStateTable[RUNNING][SLEEP] = SLEEPING;
-sStateTable[RUNNING][WAKEUP] = RUNNING;
-sStateTable[RUNNING][CANCEL] = DONE;
-sStateTable[RUNNING][FAIL] = ERROR;
-
-sStateTable[BLOCKED] = {};
-sStateTable[BLOCKED][STOP] = BLOCKED;
-sStateTable[BLOCKED][START] = BLOCKED;
-sStateTable[BLOCKED][BLOCK] = BLOCKED;
-sStateTable[BLOCKED][UNBLOCK] = BLOCKED;
-sStateTable[BLOCKED][SLEEP] = BLOCKED;
-sStateTable[BLOCKED][WAKEUP] = BLOCKED;
-sStateTable[BLOCKED][CANCEL] = DONE;
-sStateTable[BLOCKED][FAIL] = ERROR;
-
-sStateTable[SLEEPING] = {};
-sStateTable[SLEEPING][STOP] = SLEEPING;
-sStateTable[SLEEPING][START] = SLEEPING;
-sStateTable[SLEEPING][BLOCK] = SLEEPING;
-sStateTable[SLEEPING][UNBLOCK] = SLEEPING;
-sStateTable[SLEEPING][SLEEP] = SLEEPING;
-sStateTable[SLEEPING][WAKEUP] = SLEEPING;
-sStateTable[SLEEPING][CANCEL] = DONE;
-sStateTable[SLEEPING][FAIL] = ERROR;
-
-sStateTable[DONE] = {};
-sStateTable[DONE][STOP] = DONE;
-sStateTable[DONE][START] = DONE;
-sStateTable[DONE][BLOCK] = DONE;
-sStateTable[DONE][UNBLOCK] = DONE;
-sStateTable[DONE][SLEEP] = DONE;
-sStateTable[DONE][WAKEUP] = DONE;
-sStateTable[DONE][CANCEL] = DONE;
-sStateTable[DONE][FAIL] = ERROR;
-
-sStateTable[ERROR] = {};
-sStateTable[ERROR][STOP] = ERROR;
-sStateTable[ERROR][START] = ERROR;
-sStateTable[ERROR][BLOCK] = ERROR;
-sStateTable[ERROR][UNBLOCK] = ERROR;
-sStateTable[ERROR][SLEEP] = ERROR;
-sStateTable[ERROR][WAKEUP] = ERROR;
-sStateTable[ERROR][CANCEL] = ERROR;
-sStateTable[ERROR][FAIL] = ERROR;
-
-/**
- * Creates a new task.
- *
- * @param options options for this task
- * run: the run function for the task (required)
- * name: the run function for the task (optional)
- * parent: parent of this task (optional)
- *
- * @return the empty task.
- */
-var Task = function(options) {
- // task id
- this.id = -1;
-
- // task name
- this.name = options.name || sNoTaskName;
-
- // task has no parent
- this.parent = options.parent || null;
-
- // save run function
- this.run = options.run;
-
- // create a queue of subtasks to run
- this.subtasks = [];
-
- // error flag
- this.error = false;
-
- // state of the task
- this.state = READY;
-
- // number of times the task has been blocked (also the number
- // of permits needed to be released to continue running)
- this.blocks = 0;
-
- // timeout id when sleeping
- this.timeoutId = null;
-
- // no swap time yet
- this.swapTime = null;
-
- // no user data
- this.userData = null;
-
- // initialize task
- // FIXME: deal with overflow
- this.id = sNextTaskId++;
- sTasks[this.id] = this;
-};
-
-/**
- * Logs debug information on this task and the system state.
- */
-Task.prototype.debug = function(msg) {
- msg = msg || '';
- forge$1.log.debug(cat, msg,
- '[%s][%s] task:', this.id, this.name, this,
- 'subtasks:', this.subtasks.length,
- 'queue:', sTaskQueues);
-};
-
-/**
- * Adds a subtask to run after task.doNext() or task.fail() is called.
- *
- * @param name human readable name for this task (optional).
- * @param subrun a function to run that takes the current task as
- * its first parameter.
- *
- * @return the current task (useful for chaining next() calls).
- */
-Task.prototype.next = function(name, subrun) {
- // juggle parameters if it looks like no name is given
- if(typeof(name) === 'function') {
- subrun = name;
-
- // inherit parent's name
- name = this.name;
- }
- // create subtask, set parent to this task, propagate callbacks
- var subtask = new Task({
- run: subrun,
- name: name,
- parent: this
- });
- // start subtasks running
- subtask.state = RUNNING;
- subtask.type = this.type;
- subtask.successCallback = this.successCallback || null;
- subtask.failureCallback = this.failureCallback || null;
-
- // queue a new subtask
- this.subtasks.push(subtask);
-
- return this;
-};
-
-/**
- * Adds subtasks to run in parallel after task.doNext() or task.fail()
- * is called.
- *
- * @param name human readable name for this task (optional).
- * @param subrun functions to run that take the current task as
- * their first parameter.
- *
- * @return the current task (useful for chaining next() calls).
- */
-Task.prototype.parallel = function(name, subrun) {
- // juggle parameters if it looks like no name is given
- if(forge$1.util.isArray(name)) {
- subrun = name;
-
- // inherit parent's name
- name = this.name;
- }
- // Wrap parallel tasks in a regular task so they are started at the
- // proper time.
- return this.next(name, function(task) {
- // block waiting for subtasks
- var ptask = task;
- ptask.block(subrun.length);
-
- // we pass the iterator from the loop below as a parameter
- // to a function because it is otherwise included in the
- // closure and changes as the loop changes -- causing i
- // to always be set to its highest value
- var startParallelTask = function(pname, pi) {
- forge$1.task.start({
- type: pname,
- run: function(task) {
- subrun[pi](task);
- },
- success: function(task) {
- ptask.unblock();
- },
- failure: function(task) {
- ptask.unblock();
- }
- });
- };
-
- for(var i = 0; i < subrun.length; i++) {
- // Type must be unique so task starts in parallel:
- // name + private string + task id + sub-task index
- // start tasks in parallel and unblock when the finish
- var pname = name + '__parallel-' + task.id + '-' + i;
- var pi = i;
- startParallelTask(pname, pi);
- }
- });
-};
-
-/**
- * Stops a running task.
- */
-Task.prototype.stop = function() {
- this.state = sStateTable[this.state][STOP];
-};
-
-/**
- * Starts running a task.
- */
-Task.prototype.start = function() {
- this.error = false;
- this.state = sStateTable[this.state][START];
-
- // try to restart
- if(this.state === RUNNING) {
- this.start = new Date();
- this.run(this);
- runNext(this, 0);
- }
-};
-
-/**
- * Blocks a task until it one or more permits have been released. The
- * task will not resume until the requested number of permits have
- * been released with call(s) to unblock().
- *
- * @param n number of permits to wait for(default: 1).
- */
-Task.prototype.block = function(n) {
- n = typeof(n) === 'undefined' ? 1 : n;
- this.blocks += n;
- if(this.blocks > 0) {
- this.state = sStateTable[this.state][BLOCK];
- }
-};
-
-/**
- * Releases a permit to unblock a task. If a task was blocked by
- * requesting N permits via block(), then it will only continue
- * running once enough permits have been released via unblock() calls.
- *
- * If multiple processes need to synchronize with a single task then
- * use a condition variable (see forge.task.createCondition). It is
- * an error to unblock a task more times than it has been blocked.
- *
- * @param n number of permits to release (default: 1).
- *
- * @return the current block count (task is unblocked when count is 0)
- */
-Task.prototype.unblock = function(n) {
- n = typeof(n) === 'undefined' ? 1 : n;
- this.blocks -= n;
- if(this.blocks === 0 && this.state !== DONE) {
- this.state = RUNNING;
- runNext(this, 0);
- }
- return this.blocks;
-};
-
-/**
- * Sleep for a period of time before resuming tasks.
- *
- * @param n number of milliseconds to sleep (default: 0).
- */
-Task.prototype.sleep = function(n) {
- n = typeof(n) === 'undefined' ? 0 : n;
- this.state = sStateTable[this.state][SLEEP];
- var self = this;
- this.timeoutId = setTimeout(function() {
- self.timeoutId = null;
- self.state = RUNNING;
- runNext(self, 0);
- }, n);
-};
-
-/**
- * Waits on a condition variable until notified. The next task will
- * not be scheduled until notification. A condition variable can be
- * created with forge.task.createCondition().
- *
- * Once cond.notify() is called, the task will continue.
- *
- * @param cond the condition variable to wait on.
- */
-Task.prototype.wait = function(cond) {
- cond.wait(this);
-};
-
-/**
- * If sleeping, wakeup and continue running tasks.
- */
-Task.prototype.wakeup = function() {
- if(this.state === SLEEPING) {
- cancelTimeout(this.timeoutId);
- this.timeoutId = null;
- this.state = RUNNING;
- runNext(this, 0);
- }
-};
-
-/**
- * Cancel all remaining subtasks of this task.
- */
-Task.prototype.cancel = function() {
- this.state = sStateTable[this.state][CANCEL];
- // remove permits needed
- this.permitsNeeded = 0;
- // cancel timeouts
- if(this.timeoutId !== null) {
- cancelTimeout(this.timeoutId);
- this.timeoutId = null;
- }
- // remove subtasks
- this.subtasks = [];
-};
-
-/**
- * Finishes this task with failure and sets error flag. The entire
- * task will be aborted unless the next task that should execute
- * is passed as a parameter. This allows levels of subtasks to be
- * skipped. For instance, to abort only this tasks's subtasks, then
- * call fail(task.parent). To abort this task's subtasks and its
- * parent's subtasks, call fail(task.parent.parent). To abort
- * all tasks and simply call the task callback, call fail() or
- * fail(null).
- *
- * The task callback (success or failure) will always, eventually, be
- * called.
- *
- * @param next the task to continue at, or null to abort entirely.
- */
-Task.prototype.fail = function(next) {
- // set error flag
- this.error = true;
-
- // finish task
- finish(this, true);
-
- if(next) {
- // propagate task info
- next.error = this.error;
- next.swapTime = this.swapTime;
- next.userData = this.userData;
-
- // do next task as specified
- runNext(next, 0);
- } else {
- if(this.parent !== null) {
- // finish root task (ensures it is removed from task queue)
- var parent = this.parent;
- while(parent.parent !== null) {
- // propagate task info
- parent.error = this.error;
- parent.swapTime = this.swapTime;
- parent.userData = this.userData;
- parent = parent.parent;
- }
- finish(parent, true);
- }
-
- // call failure callback if one exists
- if(this.failureCallback) {
- this.failureCallback(this);
- }
- }
-};
-
-/**
- * Asynchronously start a task.
- *
- * @param task the task to start.
- */
-var start = function(task) {
- task.error = false;
- task.state = sStateTable[task.state][START];
- setTimeout(function() {
- if(task.state === RUNNING) {
- task.swapTime = +new Date();
- task.run(task);
- runNext(task, 0);
- }
- }, 0);
-};
-
-/**
- * Run the next subtask or finish this task.
- *
- * @param task the task to process.
- * @param recurse the recursion count.
- */
-var runNext = function(task, recurse) {
- // get time since last context swap (ms), if enough time has passed set
- // swap to true to indicate that doNext was performed asynchronously
- // also, if recurse is too high do asynchronously
- var swap =
- (recurse > sMaxRecursions) ||
- (+new Date() - task.swapTime) > sTimeSlice;
-
- var doNext = function(recurse) {
- recurse++;
- if(task.state === RUNNING) {
- if(swap) {
- // update swap time
- task.swapTime = +new Date();
- }
-
- if(task.subtasks.length > 0) {
- // run next subtask
- var subtask = task.subtasks.shift();
- subtask.error = task.error;
- subtask.swapTime = task.swapTime;
- subtask.userData = task.userData;
- subtask.run(subtask);
- if(!subtask.error) {
- runNext(subtask, recurse);
- }
- } else {
- finish(task);
-
- if(!task.error) {
- // chain back up and run parent
- if(task.parent !== null) {
- // propagate task info
- task.parent.error = task.error;
- task.parent.swapTime = task.swapTime;
- task.parent.userData = task.userData;
-
- // no subtasks left, call run next subtask on parent
- runNext(task.parent, recurse);
- }
- }
- }
- }
- };
-
- if(swap) {
- // we're swapping, so run asynchronously
- setTimeout(doNext, 0);
- } else {
- // not swapping, so run synchronously
- doNext(recurse);
- }
-};
-
-/**
- * Finishes a task and looks for the next task in the queue to start.
- *
- * @param task the task to finish.
- * @param suppressCallbacks true to suppress callbacks.
- */
-var finish = function(task, suppressCallbacks) {
- // subtask is now done
- task.state = DONE;
-
- delete sTasks[task.id];
-
- // only do queue processing for root tasks
- if(task.parent === null) {
- // report error if queue is missing
- if(!(task.type in sTaskQueues)) {
- forge$1.log.error(cat,
- '[%s][%s] task queue missing [%s]',
- task.id, task.name, task.type);
- } else if(sTaskQueues[task.type].length === 0) {
- // report error if queue is empty
- forge$1.log.error(cat,
- '[%s][%s] task queue empty [%s]',
- task.id, task.name, task.type);
- } else if(sTaskQueues[task.type][0] !== task) {
- // report error if this task isn't the first in the queue
- forge$1.log.error(cat,
- '[%s][%s] task not first in queue [%s]',
- task.id, task.name, task.type);
- } else {
- // remove ourselves from the queue
- sTaskQueues[task.type].shift();
- // clean up queue if it is empty
- if(sTaskQueues[task.type].length === 0) {
- /* Note: Only a task can delete a queue of its own type. This
- is used as a way to synchronize tasks. If a queue for a certain
- task type exists, then a task of that type is running.
- */
- delete sTaskQueues[task.type];
- } else {
- sTaskQueues[task.type][0].start();
- }
- }
-
- if(!suppressCallbacks) {
- // call final callback if one exists
- if(task.error && task.failureCallback) {
- task.failureCallback(task);
- } else if(!task.error && task.successCallback) {
- task.successCallback(task);
- }
- }
- }
-};
-
-/* Tasks API */
-forge$1.task = forge$1.task || {};
-
-/**
- * Starts a new task that will run the passed function asynchronously.
- *
- * In order to finish the task, either task.doNext() or task.fail()
- * *must* be called.
- *
- * The task must have a type (a string identifier) that can be used to
- * synchronize it with other tasks of the same type. That type can also
- * be used to cancel tasks that haven't started yet.
- *
- * To start a task, the following object must be provided as a parameter
- * (each function takes a task object as its first parameter):
- *
- * {
- * type: the type of task.
- * run: the function to run to execute the task.
- * success: a callback to call when the task succeeds (optional).
- * failure: a callback to call when the task fails (optional).
- * }
- *
- * @param options the object as described above.
- */
-forge$1.task.start = function(options) {
- // create a new task
- var task = new Task({
- run: options.run,
- name: options.name || sNoTaskName
- });
- task.type = options.type;
- task.successCallback = options.success || null;
- task.failureCallback = options.failure || null;
-
- // append the task onto the appropriate queue
- if(!(task.type in sTaskQueues)) {
- // create the queue with the new task
- sTaskQueues[task.type] = [task];
- start(task);
- } else {
- // push the task onto the queue, it will be run after a task
- // with the same type completes
- sTaskQueues[options.type].push(task);
- }
-};
-
-/**
- * Cancels all tasks of the given type that haven't started yet.
- *
- * @param type the type of task to cancel.
- */
-forge$1.task.cancel = function(type) {
- // find the task queue
- if(type in sTaskQueues) {
- // empty all but the current task from the queue
- sTaskQueues[type] = [sTaskQueues[type][0]];
- }
-};
-
-/**
- * Creates a condition variable to synchronize tasks. To make a task wait
- * on the condition variable, call task.wait(condition). To notify all
- * tasks that are waiting, call condition.notify().
- *
- * @return the condition variable.
- */
-forge$1.task.createCondition = function() {
- var cond = {
- // all tasks that are blocked
- tasks: {}
- };
-
- /**
- * Causes the given task to block until notify is called. If the task
- * is already waiting on this condition then this is a no-op.
- *
- * @param task the task to cause to wait.
- */
- cond.wait = function(task) {
- // only block once
- if(!(task.id in cond.tasks)) {
- task.block();
- cond.tasks[task.id] = task;
- }
- };
-
- /**
- * Notifies all waiting tasks to wake up.
- */
- cond.notify = function() {
- // since unblock() will run the next task from here, make sure to
- // clear the condition's blocked task list before unblocking
- var tmp = cond.tasks;
- cond.tasks = {};
- for(var id in tmp) {
- tmp[id].unblock();
- }
- };
-
- return cond;
-};
-
-/**
- * Node.js module for Forge.
- *
- * @author Dave Longley
- *
- * Copyright 2011-2016 Digital Bazaar, Inc.
- */
-
-var lib = forge$F;
-
-var forge = lib;
-
-// a hexString is considered negative if it's most significant bit is 1
-// because serial numbers use ones' complement notation
-// this RFC in section 4.1.2.2 requires serial numbers to be positive
-// http://www.ietf.org/rfc/rfc5280.txt
-function toPositiveHex(hexString){
- var mostSiginficativeHexAsInt = parseInt(hexString[0], 16);
- if (mostSiginficativeHexAsInt < 8){
- return hexString;
- }
-
- mostSiginficativeHexAsInt -= 8;
- return mostSiginficativeHexAsInt.toString() + hexString.substring(1);
-}
-
-function getAlgorithm(key) {
- switch (key) {
- case 'sha256':
- return forge.md.sha256.create();
- default:
- return forge.md.sha1.create();
- }
-}
-
-/**
- *
- * @param {forge.pki.CertificateField[]} attrs Attributes used for subject and issuer.
- * @param {object} options
- * @param {number} [options.days=365] the number of days before expiration
- * @param {number} [options.keySize=1024] the size for the private key in bits
- * @param {object} [options.extensions] additional extensions for the certificate
- * @param {string} [options.algorithm="sha1"] The signature algorithm sha256 or sha1
- * @param {boolean} [options.pkcs7=false] include PKCS#7 as part of the output
- * @param {boolean} [options.clientCertificate=false] generate client cert signed by the original key
- * @param {string} [options.clientCertificateCN="John Doe jdoe123"] client certificate's common name
- * @param {function} [done] Optional callback, if not provided the generation is synchronous
- * @returns
- */
-var generate = selfsigned.generate = function generate(attrs, options, done) {
- if (typeof attrs === 'function') {
- done = attrs;
- attrs = undefined;
- } else if (typeof options === 'function') {
- done = options;
- options = {};
- }
-
- options = options || {};
-
- var generatePem = function (keyPair) {
- var cert = forge.pki.createCertificate();
-
- cert.serialNumber = toPositiveHex(forge.util.bytesToHex(forge.random.getBytesSync(9))); // the serial number can be decimal or hex (if preceded by 0x)
-
- cert.validity.notBefore = new Date();
- cert.validity.notAfter = new Date();
- cert.validity.notAfter.setDate(cert.validity.notBefore.getDate() + (options.days || 365));
-
- attrs = attrs || [{
- name: 'commonName',
- value: 'example.org'
- }, {
- name: 'countryName',
- value: 'US'
- }, {
- shortName: 'ST',
- value: 'Virginia'
- }, {
- name: 'localityName',
- value: 'Blacksburg'
- }, {
- name: 'organizationName',
- value: 'Test'
- }, {
- shortName: 'OU',
- value: 'Test'
- }];
-
- cert.setSubject(attrs);
- cert.setIssuer(attrs);
-
- cert.publicKey = keyPair.publicKey;
-
- cert.setExtensions(options.extensions || [{
- name: 'basicConstraints',
- cA: true
- }, {
- name: 'keyUsage',
- keyCertSign: true,
- digitalSignature: true,
- nonRepudiation: true,
- keyEncipherment: true,
- dataEncipherment: true
- }, {
- name: 'subjectAltName',
- altNames: [{
- type: 6, // URI
- value: 'http://example.org/webid#me'
- }]
- }]);
-
- cert.sign(keyPair.privateKey, getAlgorithm(options && options.algorithm));
-
- const fingerprint = forge.md.sha1
- .create()
- .update(forge.asn1.toDer(forge.pki.certificateToAsn1(cert)).getBytes())
- .digest()
- .toHex()
- .match(/.{2}/g)
- .join(':');
-
- var pem = {
- private: forge.pki.privateKeyToPem(keyPair.privateKey),
- public: forge.pki.publicKeyToPem(keyPair.publicKey),
- cert: forge.pki.certificateToPem(cert),
- fingerprint: fingerprint,
- };
-
- if (options && options.pkcs7) {
- var p7 = forge.pkcs7.createSignedData();
- p7.addCertificate(cert);
- pem.pkcs7 = forge.pkcs7.messageToPem(p7);
- }
-
- if (options && options.clientCertificate) {
- var clientkeys = forge.pki.rsa.generateKeyPair(1024);
- var clientcert = forge.pki.createCertificate();
- clientcert.serialNumber = toPositiveHex(forge.util.bytesToHex(forge.random.getBytesSync(9)));
- clientcert.validity.notBefore = new Date();
- clientcert.validity.notAfter = new Date();
- clientcert.validity.notAfter.setFullYear(clientcert.validity.notBefore.getFullYear() + 1);
-
- var clientAttrs = JSON.parse(JSON.stringify(attrs));
-
- for(var i = 0; i < clientAttrs.length; i++) {
- if(clientAttrs[i].name === 'commonName') {
- if( options.clientCertificateCN )
- clientAttrs[i] = { name: 'commonName', value: options.clientCertificateCN };
- else
- clientAttrs[i] = { name: 'commonName', value: 'John Doe jdoe123' };
- }
- }
-
- clientcert.setSubject(clientAttrs);
-
- // Set the issuer to the parent key
- clientcert.setIssuer(attrs);
-
- clientcert.publicKey = clientkeys.publicKey;
-
- // Sign client cert with root cert
- clientcert.sign(keyPair.privateKey);
-
- pem.clientprivate = forge.pki.privateKeyToPem(clientkeys.privateKey);
- pem.clientpublic = forge.pki.publicKeyToPem(clientkeys.publicKey);
- pem.clientcert = forge.pki.certificateToPem(clientcert);
-
- if (options.pkcs7) {
- var clientp7 = forge.pkcs7.createSignedData();
- clientp7.addCertificate(clientcert);
- pem.clientpkcs7 = forge.pkcs7.messageToPem(clientp7);
- }
- }
-
- var caStore = forge.pki.createCaStore();
- caStore.addCertificate(cert);
-
- try {
- forge.pki.verifyCertificateChain(caStore, [cert],
- function (vfd, depth, chain) {
- if (vfd !== true) {
- throw new Error('Certificate could not be verified.');
- }
- return true;
- });
- }
- catch(ex) {
- throw new Error(ex);
- }
-
- return pem;
- };
-
- var keySize = options.keySize || 1024;
-
- if (done) { // async scenario
- return forge.pki.rsa.generateKeyPair({ bits: keySize }, function (err, keyPair) {
- if (err) { return done(err); }
-
- try {
- return done(null, generatePem(keyPair));
- } catch (ex) {
- return done(ex);
- }
- });
- }
-
- var keyPair = options.keyPair ? {
- privateKey: forge.pki.privateKeyFromPem(options.keyPair.privateKey),
- publicKey: forge.pki.publicKeyFromPem(options.keyPair.publicKey)
- } : forge.pki.rsa.generateKeyPair(keySize);
-
- return generatePem(keyPair);
-};
-
-var index = /*#__PURE__*/_mergeNamespaces({
- __proto__: null,
- 'default': selfsigned,
- generate: generate
-}, [selfsigned]);
-
-exports.index = index;
-//# sourceMappingURL=dep-34d2edc0.js.map
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-34d2edc0.js.map b/packages/astro/vendor/vite/dist/node/chunks/dep-34d2edc0.js.map
deleted file mode 100755
index 647181bb1..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-34d2edc0.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"dep-34d2edc0.js","sources":["../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/forge.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/baseN.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/util.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/cipher.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/cipherModes.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/aes.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/oids.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/asn1.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/md.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/hmac.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/md5.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pem.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/des.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pbkdf2.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/sha256.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/prng.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/random.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/rc2.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/jsbn.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/sha1.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pkcs1.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/prime.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/rsa.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pbe.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pkcs7asn1.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/mgf1.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/mgf.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pss.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/x509.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pkcs12.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pki.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/tls.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/aesCipherSuites.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/debug.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/sha512.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/asn1-validator.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/ed25519.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/kem.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/log.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/pkcs7.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/ssh.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/task.js","../../../../../node_modules/.pnpm/node-forge@0.10.0/node_modules/node-forge/lib/index.js","../../../../../node_modules/.pnpm/selfsigned@1.10.11/node_modules/selfsigned/index.js"],"sourcesContent":["/**\n * Node.js module for Forge.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2016 Digital Bazaar, Inc.\n */\nmodule.exports = {\n // default options\n options: {\n usePureJavaScript: false\n }\n};\n","/**\n * Base-N/Base-X encoding/decoding functions.\n *\n * Original implementation from base-x:\n * https://github.com/cryptocoinjs/base-x\n *\n * Which is MIT licensed:\n *\n * The MIT License (MIT)\n *\n * Copyright base-x contributors (c) 2016\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nvar api = {};\nmodule.exports = api;\n\n// baseN alphabet indexes\nvar _reverseAlphabets = {};\n\n/**\n * BaseN-encodes a Uint8Array using the given alphabet.\n *\n * @param input the Uint8Array to encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the baseN-encoded output string.\n */\napi.encode = function(input, alphabet, maxline) {\n if(typeof alphabet !== 'string') {\n throw new TypeError('\"alphabet\" must be a string.');\n }\n if(maxline !== undefined && typeof maxline !== 'number') {\n throw new TypeError('\"maxline\" must be a number.');\n }\n\n var output = '';\n\n if(!(input instanceof Uint8Array)) {\n // assume forge byte buffer\n output = _encodeWithByteBuffer(input, alphabet);\n } else {\n var i = 0;\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var digits = [0];\n for(i = 0; i < input.length; ++i) {\n for(var j = 0, carry = input[i]; j < digits.length; ++j) {\n carry += digits[j] << 8;\n digits[j] = carry % base;\n carry = (carry / base) | 0;\n }\n\n while(carry > 0) {\n digits.push(carry % base);\n carry = (carry / base) | 0;\n }\n }\n\n // deal with leading zeros\n for(i = 0; input[i] === 0 && i < input.length - 1; ++i) {\n output += first;\n }\n // convert digits to a string\n for(i = digits.length - 1; i >= 0; --i) {\n output += alphabet[digits[i]];\n }\n }\n\n if(maxline) {\n var regex = new RegExp('.{1,' + maxline + '}', 'g');\n output = output.match(regex).join('\\r\\n');\n }\n\n return output;\n};\n\n/**\n * Decodes a baseN-encoded (using the given alphabet) string to a\n * Uint8Array.\n *\n * @param input the baseN-encoded input string.\n *\n * @return the Uint8Array.\n */\napi.decode = function(input, alphabet) {\n if(typeof input !== 'string') {\n throw new TypeError('\"input\" must be a string.');\n }\n if(typeof alphabet !== 'string') {\n throw new TypeError('\"alphabet\" must be a string.');\n }\n\n var table = _reverseAlphabets[alphabet];\n if(!table) {\n // compute reverse alphabet\n table = _reverseAlphabets[alphabet] = [];\n for(var i = 0; i < alphabet.length; ++i) {\n table[alphabet.charCodeAt(i)] = i;\n }\n }\n\n // remove whitespace characters\n input = input.replace(/\\s/g, '');\n\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var bytes = [0];\n for(var i = 0; i < input.length; i++) {\n var value = table[input.charCodeAt(i)];\n if(value === undefined) {\n return;\n }\n\n for(var j = 0, carry = value; j < bytes.length; ++j) {\n carry += bytes[j] * base;\n bytes[j] = carry & 0xff;\n carry >>= 8;\n }\n\n while(carry > 0) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n // deal with leading zeros\n for(var k = 0; input[k] === first && k < input.length - 1; ++k) {\n bytes.push(0);\n }\n\n if(typeof Buffer !== 'undefined') {\n return Buffer.from(bytes.reverse());\n }\n\n return new Uint8Array(bytes.reverse());\n};\n\nfunction _encodeWithByteBuffer(input, alphabet) {\n var i = 0;\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var digits = [0];\n for(i = 0; i < input.length(); ++i) {\n for(var j = 0, carry = input.at(i); j < digits.length; ++j) {\n carry += digits[j] << 8;\n digits[j] = carry % base;\n carry = (carry / base) | 0;\n }\n\n while(carry > 0) {\n digits.push(carry % base);\n carry = (carry / base) | 0;\n }\n }\n\n var output = '';\n\n // deal with leading zeros\n for(i = 0; input.at(i) === 0 && i < input.length() - 1; ++i) {\n output += first;\n }\n // convert digits to a string\n for(i = digits.length - 1; i >= 0; --i) {\n output += alphabet[digits[i]];\n }\n\n return output;\n}\n","/**\n * Utility functions for web applications.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2018 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nvar baseN = require('./baseN');\n\n/* Utilities API */\nvar util = module.exports = forge.util = forge.util || {};\n\n// define setImmediate and nextTick\n(function() {\n // use native nextTick (unless we're in webpack)\n // webpack (or better node-libs-browser polyfill) sets process.browser.\n // this way we can detect webpack properly\n if(typeof process !== 'undefined' && process.nextTick && !process.browser) {\n util.nextTick = process.nextTick;\n if(typeof setImmediate === 'function') {\n util.setImmediate = setImmediate;\n } else {\n // polyfill setImmediate with nextTick, older versions of node\n // (those w/o setImmediate) won't totally starve IO\n util.setImmediate = util.nextTick;\n }\n return;\n }\n\n // polyfill nextTick with native setImmediate\n if(typeof setImmediate === 'function') {\n util.setImmediate = function() { return setImmediate.apply(undefined, arguments); };\n util.nextTick = function(callback) {\n return setImmediate(callback);\n };\n return;\n }\n\n /* Note: A polyfill upgrade pattern is used here to allow combining\n polyfills. For example, MutationObserver is fast, but blocks UI updates,\n so it needs to allow UI updates periodically, so it falls back on\n postMessage or setTimeout. */\n\n // polyfill with setTimeout\n util.setImmediate = function(callback) {\n setTimeout(callback, 0);\n };\n\n // upgrade polyfill to use postMessage\n if(typeof window !== 'undefined' &&\n typeof window.postMessage === 'function') {\n var msg = 'forge.setImmediate';\n var callbacks = [];\n util.setImmediate = function(callback) {\n callbacks.push(callback);\n // only send message when one hasn't been sent in\n // the current turn of the event loop\n if(callbacks.length === 1) {\n window.postMessage(msg, '*');\n }\n };\n function handler(event) {\n if(event.source === window && event.data === msg) {\n event.stopPropagation();\n var copy = callbacks.slice();\n callbacks.length = 0;\n copy.forEach(function(callback) {\n callback();\n });\n }\n }\n window.addEventListener('message', handler, true);\n }\n\n // upgrade polyfill to use MutationObserver\n if(typeof MutationObserver !== 'undefined') {\n // polyfill with MutationObserver\n var now = Date.now();\n var attr = true;\n var div = document.createElement('div');\n var callbacks = [];\n new MutationObserver(function() {\n var copy = callbacks.slice();\n callbacks.length = 0;\n copy.forEach(function(callback) {\n callback();\n });\n }).observe(div, {attributes: true});\n var oldSetImmediate = util.setImmediate;\n util.setImmediate = function(callback) {\n if(Date.now() - now > 15) {\n now = Date.now();\n oldSetImmediate(callback);\n } else {\n callbacks.push(callback);\n // only trigger observer when it hasn't been triggered in\n // the current turn of the event loop\n if(callbacks.length === 1) {\n div.setAttribute('a', attr = !attr);\n }\n }\n };\n }\n\n util.nextTick = util.setImmediate;\n})();\n\n// check if running under Node.js\nutil.isNodejs =\n typeof process !== 'undefined' && process.versions && process.versions.node;\n\n\n// 'self' will also work in Web Workers (instance of WorkerGlobalScope) while\n// it will point to `window` in the main thread.\n// To remain compatible with older browsers, we fall back to 'window' if 'self'\n// is not available.\nutil.globalScope = (function() {\n if(util.isNodejs) {\n return global;\n }\n\n return typeof self === 'undefined' ? window : self;\n})();\n\n// define isArray\nutil.isArray = Array.isArray || function(x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n};\n\n// define isArrayBuffer\nutil.isArrayBuffer = function(x) {\n return typeof ArrayBuffer !== 'undefined' && x instanceof ArrayBuffer;\n};\n\n// define isArrayBufferView\nutil.isArrayBufferView = function(x) {\n return x && util.isArrayBuffer(x.buffer) && x.byteLength !== undefined;\n};\n\n/**\n * Ensure a bits param is 8, 16, 24, or 32. Used to validate input for\n * algorithms where bit manipulation, JavaScript limitations, and/or algorithm\n * design only allow for byte operations of a limited size.\n *\n * @param n number of bits.\n *\n * Throw Error if n invalid.\n */\nfunction _checkBitsParam(n) {\n if(!(n === 8 || n === 16 || n === 24 || n === 32)) {\n throw new Error('Only 8, 16, 24, or 32 bits supported: ' + n);\n }\n}\n\n// TODO: set ByteBuffer to best available backing\nutil.ByteBuffer = ByteStringBuffer;\n\n/** Buffer w/BinaryString backing */\n\n/**\n * Constructor for a binary string backed byte buffer.\n *\n * @param [b] the bytes to wrap (either encoded as string, one byte per\n * character, or as an ArrayBuffer or Typed Array).\n */\nfunction ByteStringBuffer(b) {\n // TODO: update to match DataBuffer API\n\n // the data in this buffer\n this.data = '';\n // the pointer for reading from this buffer\n this.read = 0;\n\n if(typeof b === 'string') {\n this.data = b;\n } else if(util.isArrayBuffer(b) || util.isArrayBufferView(b)) {\n if(typeof Buffer !== 'undefined' && b instanceof Buffer) {\n this.data = b.toString('binary');\n } else {\n // convert native buffer to forge buffer\n // FIXME: support native buffers internally instead\n var arr = new Uint8Array(b);\n try {\n this.data = String.fromCharCode.apply(null, arr);\n } catch(e) {\n for(var i = 0; i < arr.length; ++i) {\n this.putByte(arr[i]);\n }\n }\n }\n } else if(b instanceof ByteStringBuffer ||\n (typeof b === 'object' && typeof b.data === 'string' &&\n typeof b.read === 'number')) {\n // copy existing buffer\n this.data = b.data;\n this.read = b.read;\n }\n\n // used for v8 optimization\n this._constructedStringLength = 0;\n}\nutil.ByteStringBuffer = ByteStringBuffer;\n\n/* Note: This is an optimization for V8-based browsers. When V8 concatenates\n a string, the strings are only joined logically using a \"cons string\" or\n \"constructed/concatenated string\". These containers keep references to one\n another and can result in very large memory usage. For example, if a 2MB\n string is constructed by concatenating 4 bytes together at a time, the\n memory usage will be ~44MB; so ~22x increase. The strings are only joined\n together when an operation requiring their joining takes place, such as\n substr(). This function is called when adding data to this buffer to ensure\n these types of strings are periodically joined to reduce the memory\n footprint. */\nvar _MAX_CONSTRUCTED_STRING_LENGTH = 4096;\nutil.ByteStringBuffer.prototype._optimizeConstructedString = function(x) {\n this._constructedStringLength += x;\n if(this._constructedStringLength > _MAX_CONSTRUCTED_STRING_LENGTH) {\n // this substr() should cause the constructed string to join\n this.data.substr(0, 1);\n this._constructedStringLength = 0;\n }\n};\n\n/**\n * Gets the number of bytes in this buffer.\n *\n * @return the number of bytes in this buffer.\n */\nutil.ByteStringBuffer.prototype.length = function() {\n return this.data.length - this.read;\n};\n\n/**\n * Gets whether or not this buffer is empty.\n *\n * @return true if this buffer is empty, false if not.\n */\nutil.ByteStringBuffer.prototype.isEmpty = function() {\n return this.length() <= 0;\n};\n\n/**\n * Puts a byte in this buffer.\n *\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putByte = function(b) {\n return this.putBytes(String.fromCharCode(b));\n};\n\n/**\n * Puts a byte in this buffer N times.\n *\n * @param b the byte to put.\n * @param n the number of bytes of value b to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.fillWithByte = function(b, n) {\n b = String.fromCharCode(b);\n var d = this.data;\n while(n > 0) {\n if(n & 1) {\n d += b;\n }\n n >>>= 1;\n if(n > 0) {\n b += b;\n }\n }\n this.data = d;\n this._optimizeConstructedString(n);\n return this;\n};\n\n/**\n * Puts bytes in this buffer.\n *\n * @param bytes the bytes (as a binary encoded string) to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putBytes = function(bytes) {\n this.data += bytes;\n this._optimizeConstructedString(bytes.length);\n return this;\n};\n\n/**\n * Puts a UTF-16 encoded string into this buffer.\n *\n * @param str the string to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putString = function(str) {\n return this.putBytes(util.encodeUtf8(str));\n};\n\n/**\n * Puts a 16-bit integer in this buffer in big-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt16 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 24-bit integer in this buffer in big-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt24 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 32-bit integer in this buffer in big-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt32 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 24 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 16-bit integer in this buffer in little-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt16Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF));\n};\n\n/**\n * Puts a 24-bit integer in this buffer in little-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt24Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF));\n};\n\n/**\n * Puts a 32-bit integer in this buffer in little-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt32Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 24 & 0xFF));\n};\n\n/**\n * Puts an n-bit integer in this buffer in big-endian order.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt = function(i, n) {\n _checkBitsParam(n);\n var bytes = '';\n do {\n n -= 8;\n bytes += String.fromCharCode((i >> n) & 0xFF);\n } while(n > 0);\n return this.putBytes(bytes);\n};\n\n/**\n * Puts a signed n-bit integer in this buffer in big-endian order. Two's\n * complement representation is used.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putSignedInt = function(i, n) {\n // putInt checks n\n if(i < 0) {\n i += 2 << (n - 1);\n }\n return this.putInt(i, n);\n};\n\n/**\n * Puts the given buffer into this buffer.\n *\n * @param buffer the buffer to put into this one.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putBuffer = function(buffer) {\n return this.putBytes(buffer.getBytes());\n};\n\n/**\n * Gets a byte from this buffer and advances the read pointer by 1.\n *\n * @return the byte.\n */\nutil.ByteStringBuffer.prototype.getByte = function() {\n return this.data.charCodeAt(this.read++);\n};\n\n/**\n * Gets a uint16 from this buffer in big-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.ByteStringBuffer.prototype.getInt16 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 8 ^\n this.data.charCodeAt(this.read + 1));\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in big-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.ByteStringBuffer.prototype.getInt24 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 16 ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2));\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in big-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.ByteStringBuffer.prototype.getInt32 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 24 ^\n this.data.charCodeAt(this.read + 1) << 16 ^\n this.data.charCodeAt(this.read + 2) << 8 ^\n this.data.charCodeAt(this.read + 3));\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets a uint16 from this buffer in little-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.ByteStringBuffer.prototype.getInt16Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in little-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.ByteStringBuffer.prototype.getInt24Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2) << 16);\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in little-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.ByteStringBuffer.prototype.getInt32Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2) << 16 ^\n this.data.charCodeAt(this.read + 3) << 24);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets an n-bit integer from this buffer in big-endian order and advances the\n * read pointer by ceil(n/8).\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.ByteStringBuffer.prototype.getInt = function(n) {\n _checkBitsParam(n);\n var rval = 0;\n do {\n // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits.\n rval = (rval << 8) + this.data.charCodeAt(this.read++);\n n -= 8;\n } while(n > 0);\n return rval;\n};\n\n/**\n * Gets a signed n-bit integer from this buffer in big-endian order, using\n * two's complement, and advances the read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.ByteStringBuffer.prototype.getSignedInt = function(n) {\n // getInt checks n\n var x = this.getInt(n);\n var max = 2 << (n - 2);\n if(x >= max) {\n x -= max << 1;\n }\n return x;\n};\n\n/**\n * Reads bytes out as a binary encoded string and clears them from the\n * buffer. Note that the resulting string is binary encoded (in node.js this\n * encoding is referred to as `binary`, it is *not* `utf8`).\n *\n * @param count the number of bytes to read, undefined or null for all.\n *\n * @return a binary encoded string of bytes.\n */\nutil.ByteStringBuffer.prototype.getBytes = function(count) {\n var rval;\n if(count) {\n // read count bytes\n count = Math.min(this.length(), count);\n rval = this.data.slice(this.read, this.read + count);\n this.read += count;\n } else if(count === 0) {\n rval = '';\n } else {\n // read all bytes, optimize to only copy when needed\n rval = (this.read === 0) ? this.data : this.data.slice(this.read);\n this.clear();\n }\n return rval;\n};\n\n/**\n * Gets a binary encoded string of the bytes from this buffer without\n * modifying the read pointer.\n *\n * @param count the number of bytes to get, omit to get all.\n *\n * @return a string full of binary encoded characters.\n */\nutil.ByteStringBuffer.prototype.bytes = function(count) {\n return (typeof(count) === 'undefined' ?\n this.data.slice(this.read) :\n this.data.slice(this.read, this.read + count));\n};\n\n/**\n * Gets a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n *\n * @return the byte.\n */\nutil.ByteStringBuffer.prototype.at = function(i) {\n return this.data.charCodeAt(this.read + i);\n};\n\n/**\n * Puts a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.setAt = function(i, b) {\n this.data = this.data.substr(0, this.read + i) +\n String.fromCharCode(b) +\n this.data.substr(this.read + i + 1);\n return this;\n};\n\n/**\n * Gets the last byte without modifying the read pointer.\n *\n * @return the last byte.\n */\nutil.ByteStringBuffer.prototype.last = function() {\n return this.data.charCodeAt(this.data.length - 1);\n};\n\n/**\n * Creates a copy of this buffer.\n *\n * @return the copy.\n */\nutil.ByteStringBuffer.prototype.copy = function() {\n var c = util.createBuffer(this.data);\n c.read = this.read;\n return c;\n};\n\n/**\n * Compacts this buffer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.compact = function() {\n if(this.read > 0) {\n this.data = this.data.slice(this.read);\n this.read = 0;\n }\n return this;\n};\n\n/**\n * Clears this buffer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.clear = function() {\n this.data = '';\n this.read = 0;\n return this;\n};\n\n/**\n * Shortens this buffer by triming bytes off of the end of this buffer.\n *\n * @param count the number of bytes to trim off.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.truncate = function(count) {\n var len = Math.max(0, this.length() - count);\n this.data = this.data.substr(this.read, len);\n this.read = 0;\n return this;\n};\n\n/**\n * Converts this buffer to a hexadecimal string.\n *\n * @return a hexadecimal string.\n */\nutil.ByteStringBuffer.prototype.toHex = function() {\n var rval = '';\n for(var i = this.read; i < this.data.length; ++i) {\n var b = this.data.charCodeAt(i);\n if(b < 16) {\n rval += '0';\n }\n rval += b.toString(16);\n }\n return rval;\n};\n\n/**\n * Converts this buffer to a UTF-16 string (standard JavaScript string).\n *\n * @return a UTF-16 string.\n */\nutil.ByteStringBuffer.prototype.toString = function() {\n return util.decodeUtf8(this.bytes());\n};\n\n/** End Buffer w/BinaryString backing */\n\n/** Buffer w/UInt8Array backing */\n\n/**\n * FIXME: Experimental. Do not use yet.\n *\n * Constructor for an ArrayBuffer-backed byte buffer.\n *\n * The buffer may be constructed from a string, an ArrayBuffer, DataView, or a\n * TypedArray.\n *\n * If a string is given, its encoding should be provided as an option,\n * otherwise it will default to 'binary'. A 'binary' string is encoded such\n * that each character is one byte in length and size.\n *\n * If an ArrayBuffer, DataView, or TypedArray is given, it will be used\n * *directly* without any copying. Note that, if a write to the buffer requires\n * more space, the buffer will allocate a new backing ArrayBuffer to\n * accommodate. The starting read and write offsets for the buffer may be\n * given as options.\n *\n * @param [b] the initial bytes for this buffer.\n * @param options the options to use:\n * [readOffset] the starting read offset to use (default: 0).\n * [writeOffset] the starting write offset to use (default: the\n * length of the first parameter).\n * [growSize] the minimum amount, in bytes, to grow the buffer by to\n * accommodate writes (default: 1024).\n * [encoding] the encoding ('binary', 'utf8', 'utf16', 'hex') for the\n * first parameter, if it is a string (default: 'binary').\n */\nfunction DataBuffer(b, options) {\n // default options\n options = options || {};\n\n // pointers for read from/write to buffer\n this.read = options.readOffset || 0;\n this.growSize = options.growSize || 1024;\n\n var isArrayBuffer = util.isArrayBuffer(b);\n var isArrayBufferView = util.isArrayBufferView(b);\n if(isArrayBuffer || isArrayBufferView) {\n // use ArrayBuffer directly\n if(isArrayBuffer) {\n this.data = new DataView(b);\n } else {\n // TODO: adjust read/write offset based on the type of view\n // or specify that this must be done in the options ... that the\n // offsets are byte-based\n this.data = new DataView(b.buffer, b.byteOffset, b.byteLength);\n }\n this.write = ('writeOffset' in options ?\n options.writeOffset : this.data.byteLength);\n return;\n }\n\n // initialize to empty array buffer and add any given bytes using putBytes\n this.data = new DataView(new ArrayBuffer(0));\n this.write = 0;\n\n if(b !== null && b !== undefined) {\n this.putBytes(b);\n }\n\n if('writeOffset' in options) {\n this.write = options.writeOffset;\n }\n}\nutil.DataBuffer = DataBuffer;\n\n/**\n * Gets the number of bytes in this buffer.\n *\n * @return the number of bytes in this buffer.\n */\nutil.DataBuffer.prototype.length = function() {\n return this.write - this.read;\n};\n\n/**\n * Gets whether or not this buffer is empty.\n *\n * @return true if this buffer is empty, false if not.\n */\nutil.DataBuffer.prototype.isEmpty = function() {\n return this.length() <= 0;\n};\n\n/**\n * Ensures this buffer has enough empty space to accommodate the given number\n * of bytes. An optional parameter may be given that indicates a minimum\n * amount to grow the buffer if necessary. If the parameter is not given,\n * the buffer will be grown by some previously-specified default amount\n * or heuristic.\n *\n * @param amount the number of bytes to accommodate.\n * @param [growSize] the minimum amount, in bytes, to grow the buffer by if\n * necessary.\n */\nutil.DataBuffer.prototype.accommodate = function(amount, growSize) {\n if(this.length() >= amount) {\n return this;\n }\n growSize = Math.max(growSize || this.growSize, amount);\n\n // grow buffer\n var src = new Uint8Array(\n this.data.buffer, this.data.byteOffset, this.data.byteLength);\n var dst = new Uint8Array(this.length() + growSize);\n dst.set(src);\n this.data = new DataView(dst.buffer);\n\n return this;\n};\n\n/**\n * Puts a byte in this buffer.\n *\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putByte = function(b) {\n this.accommodate(1);\n this.data.setUint8(this.write++, b);\n return this;\n};\n\n/**\n * Puts a byte in this buffer N times.\n *\n * @param b the byte to put.\n * @param n the number of bytes of value b to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.fillWithByte = function(b, n) {\n this.accommodate(n);\n for(var i = 0; i < n; ++i) {\n this.data.setUint8(b);\n }\n return this;\n};\n\n/**\n * Puts bytes in this buffer. The bytes may be given as a string, an\n * ArrayBuffer, a DataView, or a TypedArray.\n *\n * @param bytes the bytes to put.\n * @param [encoding] the encoding for the first parameter ('binary', 'utf8',\n * 'utf16', 'hex'), if it is a string (default: 'binary').\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putBytes = function(bytes, encoding) {\n if(util.isArrayBufferView(bytes)) {\n var src = new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n var len = src.byteLength - src.byteOffset;\n this.accommodate(len);\n var dst = new Uint8Array(this.data.buffer, this.write);\n dst.set(src);\n this.write += len;\n return this;\n }\n\n if(util.isArrayBuffer(bytes)) {\n var src = new Uint8Array(bytes);\n this.accommodate(src.byteLength);\n var dst = new Uint8Array(this.data.buffer);\n dst.set(src, this.write);\n this.write += src.byteLength;\n return this;\n }\n\n // bytes is a util.DataBuffer or equivalent\n if(bytes instanceof util.DataBuffer ||\n (typeof bytes === 'object' &&\n typeof bytes.read === 'number' && typeof bytes.write === 'number' &&\n util.isArrayBufferView(bytes.data))) {\n var src = new Uint8Array(bytes.data.byteLength, bytes.read, bytes.length());\n this.accommodate(src.byteLength);\n var dst = new Uint8Array(bytes.data.byteLength, this.write);\n dst.set(src);\n this.write += src.byteLength;\n return this;\n }\n\n if(bytes instanceof util.ByteStringBuffer) {\n // copy binary string and process as the same as a string parameter below\n bytes = bytes.data;\n encoding = 'binary';\n }\n\n // string conversion\n encoding = encoding || 'binary';\n if(typeof bytes === 'string') {\n var view;\n\n // decode from string\n if(encoding === 'hex') {\n this.accommodate(Math.ceil(bytes.length / 2));\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.hex.decode(bytes, view, this.write);\n return this;\n }\n if(encoding === 'base64') {\n this.accommodate(Math.ceil(bytes.length / 4) * 3);\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.base64.decode(bytes, view, this.write);\n return this;\n }\n\n // encode text as UTF-8 bytes\n if(encoding === 'utf8') {\n // encode as UTF-8 then decode string as raw binary\n bytes = util.encodeUtf8(bytes);\n encoding = 'binary';\n }\n\n // decode string as raw binary\n if(encoding === 'binary' || encoding === 'raw') {\n // one byte per character\n this.accommodate(bytes.length);\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.raw.decode(view);\n return this;\n }\n\n // encode text as UTF-16 bytes\n if(encoding === 'utf16') {\n // two bytes per character\n this.accommodate(bytes.length * 2);\n view = new Uint16Array(this.data.buffer, this.write);\n this.write += util.text.utf16.encode(view);\n return this;\n }\n\n throw new Error('Invalid encoding: ' + encoding);\n }\n\n throw Error('Invalid parameter: ' + bytes);\n};\n\n/**\n * Puts the given buffer into this buffer.\n *\n * @param buffer the buffer to put into this one.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putBuffer = function(buffer) {\n this.putBytes(buffer);\n buffer.clear();\n return this;\n};\n\n/**\n * Puts a string into this buffer.\n *\n * @param str the string to put.\n * @param [encoding] the encoding for the string (default: 'utf16').\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putString = function(str) {\n return this.putBytes(str, 'utf16');\n};\n\n/**\n * Puts a 16-bit integer in this buffer in big-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt16 = function(i) {\n this.accommodate(2);\n this.data.setInt16(this.write, i);\n this.write += 2;\n return this;\n};\n\n/**\n * Puts a 24-bit integer in this buffer in big-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt24 = function(i) {\n this.accommodate(3);\n this.data.setInt16(this.write, i >> 8 & 0xFFFF);\n this.data.setInt8(this.write, i >> 16 & 0xFF);\n this.write += 3;\n return this;\n};\n\n/**\n * Puts a 32-bit integer in this buffer in big-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt32 = function(i) {\n this.accommodate(4);\n this.data.setInt32(this.write, i);\n this.write += 4;\n return this;\n};\n\n/**\n * Puts a 16-bit integer in this buffer in little-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt16Le = function(i) {\n this.accommodate(2);\n this.data.setInt16(this.write, i, true);\n this.write += 2;\n return this;\n};\n\n/**\n * Puts a 24-bit integer in this buffer in little-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt24Le = function(i) {\n this.accommodate(3);\n this.data.setInt8(this.write, i >> 16 & 0xFF);\n this.data.setInt16(this.write, i >> 8 & 0xFFFF, true);\n this.write += 3;\n return this;\n};\n\n/**\n * Puts a 32-bit integer in this buffer in little-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt32Le = function(i) {\n this.accommodate(4);\n this.data.setInt32(this.write, i, true);\n this.write += 4;\n return this;\n};\n\n/**\n * Puts an n-bit integer in this buffer in big-endian order.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt = function(i, n) {\n _checkBitsParam(n);\n this.accommodate(n / 8);\n do {\n n -= 8;\n this.data.setInt8(this.write++, (i >> n) & 0xFF);\n } while(n > 0);\n return this;\n};\n\n/**\n * Puts a signed n-bit integer in this buffer in big-endian order. Two's\n * complement representation is used.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putSignedInt = function(i, n) {\n _checkBitsParam(n);\n this.accommodate(n / 8);\n if(i < 0) {\n i += 2 << (n - 1);\n }\n return this.putInt(i, n);\n};\n\n/**\n * Gets a byte from this buffer and advances the read pointer by 1.\n *\n * @return the byte.\n */\nutil.DataBuffer.prototype.getByte = function() {\n return this.data.getInt8(this.read++);\n};\n\n/**\n * Gets a uint16 from this buffer in big-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.DataBuffer.prototype.getInt16 = function() {\n var rval = this.data.getInt16(this.read);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in big-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.DataBuffer.prototype.getInt24 = function() {\n var rval = (\n this.data.getInt16(this.read) << 8 ^\n this.data.getInt8(this.read + 2));\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in big-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.DataBuffer.prototype.getInt32 = function() {\n var rval = this.data.getInt32(this.read);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets a uint16 from this buffer in little-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.DataBuffer.prototype.getInt16Le = function() {\n var rval = this.data.getInt16(this.read, true);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in little-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.DataBuffer.prototype.getInt24Le = function() {\n var rval = (\n this.data.getInt8(this.read) ^\n this.data.getInt16(this.read + 1, true) << 8);\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in little-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.DataBuffer.prototype.getInt32Le = function() {\n var rval = this.data.getInt32(this.read, true);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets an n-bit integer from this buffer in big-endian order and advances the\n * read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.DataBuffer.prototype.getInt = function(n) {\n _checkBitsParam(n);\n var rval = 0;\n do {\n // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits.\n rval = (rval << 8) + this.data.getInt8(this.read++);\n n -= 8;\n } while(n > 0);\n return rval;\n};\n\n/**\n * Gets a signed n-bit integer from this buffer in big-endian order, using\n * two's complement, and advances the read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.DataBuffer.prototype.getSignedInt = function(n) {\n // getInt checks n\n var x = this.getInt(n);\n var max = 2 << (n - 2);\n if(x >= max) {\n x -= max << 1;\n }\n return x;\n};\n\n/**\n * Reads bytes out as a binary encoded string and clears them from the\n * buffer.\n *\n * @param count the number of bytes to read, undefined or null for all.\n *\n * @return a binary encoded string of bytes.\n */\nutil.DataBuffer.prototype.getBytes = function(count) {\n // TODO: deprecate this method, it is poorly named and\n // this.toString('binary') replaces it\n // add a toTypedArray()/toArrayBuffer() function\n var rval;\n if(count) {\n // read count bytes\n count = Math.min(this.length(), count);\n rval = this.data.slice(this.read, this.read + count);\n this.read += count;\n } else if(count === 0) {\n rval = '';\n } else {\n // read all bytes, optimize to only copy when needed\n rval = (this.read === 0) ? this.data : this.data.slice(this.read);\n this.clear();\n }\n return rval;\n};\n\n/**\n * Gets a binary encoded string of the bytes from this buffer without\n * modifying the read pointer.\n *\n * @param count the number of bytes to get, omit to get all.\n *\n * @return a string full of binary encoded characters.\n */\nutil.DataBuffer.prototype.bytes = function(count) {\n // TODO: deprecate this method, it is poorly named, add \"getString()\"\n return (typeof(count) === 'undefined' ?\n this.data.slice(this.read) :\n this.data.slice(this.read, this.read + count));\n};\n\n/**\n * Gets a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n *\n * @return the byte.\n */\nutil.DataBuffer.prototype.at = function(i) {\n return this.data.getUint8(this.read + i);\n};\n\n/**\n * Puts a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.setAt = function(i, b) {\n this.data.setUint8(i, b);\n return this;\n};\n\n/**\n * Gets the last byte without modifying the read pointer.\n *\n * @return the last byte.\n */\nutil.DataBuffer.prototype.last = function() {\n return this.data.getUint8(this.write - 1);\n};\n\n/**\n * Creates a copy of this buffer.\n *\n * @return the copy.\n */\nutil.DataBuffer.prototype.copy = function() {\n return new util.DataBuffer(this);\n};\n\n/**\n * Compacts this buffer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.compact = function() {\n if(this.read > 0) {\n var src = new Uint8Array(this.data.buffer, this.read);\n var dst = new Uint8Array(src.byteLength);\n dst.set(src);\n this.data = new DataView(dst);\n this.write -= this.read;\n this.read = 0;\n }\n return this;\n};\n\n/**\n * Clears this buffer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.clear = function() {\n this.data = new DataView(new ArrayBuffer(0));\n this.read = this.write = 0;\n return this;\n};\n\n/**\n * Shortens this buffer by triming bytes off of the end of this buffer.\n *\n * @param count the number of bytes to trim off.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.truncate = function(count) {\n this.write = Math.max(0, this.length() - count);\n this.read = Math.min(this.read, this.write);\n return this;\n};\n\n/**\n * Converts this buffer to a hexadecimal string.\n *\n * @return a hexadecimal string.\n */\nutil.DataBuffer.prototype.toHex = function() {\n var rval = '';\n for(var i = this.read; i < this.data.byteLength; ++i) {\n var b = this.data.getUint8(i);\n if(b < 16) {\n rval += '0';\n }\n rval += b.toString(16);\n }\n return rval;\n};\n\n/**\n * Converts this buffer to a string, using the given encoding. If no\n * encoding is given, 'utf8' (UTF-8) is used.\n *\n * @param [encoding] the encoding to use: 'binary', 'utf8', 'utf16', 'hex',\n * 'base64' (default: 'utf8').\n *\n * @return a string representation of the bytes in this buffer.\n */\nutil.DataBuffer.prototype.toString = function(encoding) {\n var view = new Uint8Array(this.data, this.read, this.length());\n encoding = encoding || 'utf8';\n\n // encode to string\n if(encoding === 'binary' || encoding === 'raw') {\n return util.binary.raw.encode(view);\n }\n if(encoding === 'hex') {\n return util.binary.hex.encode(view);\n }\n if(encoding === 'base64') {\n return util.binary.base64.encode(view);\n }\n\n // decode to text\n if(encoding === 'utf8') {\n return util.text.utf8.decode(view);\n }\n if(encoding === 'utf16') {\n return util.text.utf16.decode(view);\n }\n\n throw new Error('Invalid encoding: ' + encoding);\n};\n\n/** End Buffer w/UInt8Array backing */\n\n/**\n * Creates a buffer that stores bytes. A value may be given to populate the\n * buffer with data. This value can either be string of encoded bytes or a\n * regular string of characters. When passing a string of binary encoded\n * bytes, the encoding `raw` should be given. This is also the default. When\n * passing a string of characters, the encoding `utf8` should be given.\n *\n * @param [input] a string with encoded bytes to store in the buffer.\n * @param [encoding] (default: 'raw', other: 'utf8').\n */\nutil.createBuffer = function(input, encoding) {\n // TODO: deprecate, use new ByteBuffer() instead\n encoding = encoding || 'raw';\n if(input !== undefined && encoding === 'utf8') {\n input = util.encodeUtf8(input);\n }\n return new util.ByteBuffer(input);\n};\n\n/**\n * Fills a string with a particular value. If you want the string to be a byte\n * string, pass in String.fromCharCode(theByte).\n *\n * @param c the character to fill the string with, use String.fromCharCode\n * to fill the string with a byte value.\n * @param n the number of characters of value c to fill with.\n *\n * @return the filled string.\n */\nutil.fillString = function(c, n) {\n var s = '';\n while(n > 0) {\n if(n & 1) {\n s += c;\n }\n n >>>= 1;\n if(n > 0) {\n c += c;\n }\n }\n return s;\n};\n\n/**\n * Performs a per byte XOR between two byte strings and returns the result as a\n * string of bytes.\n *\n * @param s1 first string of bytes.\n * @param s2 second string of bytes.\n * @param n the number of bytes to XOR.\n *\n * @return the XOR'd result.\n */\nutil.xorBytes = function(s1, s2, n) {\n var s3 = '';\n var b = '';\n var t = '';\n var i = 0;\n var c = 0;\n for(; n > 0; --n, ++i) {\n b = s1.charCodeAt(i) ^ s2.charCodeAt(i);\n if(c >= 10) {\n s3 += t;\n t = '';\n c = 0;\n }\n t += String.fromCharCode(b);\n ++c;\n }\n s3 += t;\n return s3;\n};\n\n/**\n * Converts a hex string into a 'binary' encoded string of bytes.\n *\n * @param hex the hexadecimal string to convert.\n *\n * @return the binary-encoded string of bytes.\n */\nutil.hexToBytes = function(hex) {\n // TODO: deprecate: \"Deprecated. Use util.binary.hex.decode instead.\"\n var rval = '';\n var i = 0;\n if(hex.length & 1 == 1) {\n // odd number of characters, convert first character alone\n i = 1;\n rval += String.fromCharCode(parseInt(hex[0], 16));\n }\n // convert 2 characters (1 byte) at a time\n for(; i < hex.length; i += 2) {\n rval += String.fromCharCode(parseInt(hex.substr(i, 2), 16));\n }\n return rval;\n};\n\n/**\n * Converts a 'binary' encoded string of bytes to hex.\n *\n * @param bytes the byte string to convert.\n *\n * @return the string of hexadecimal characters.\n */\nutil.bytesToHex = function(bytes) {\n // TODO: deprecate: \"Deprecated. Use util.binary.hex.encode instead.\"\n return util.createBuffer(bytes).toHex();\n};\n\n/**\n * Converts an 32-bit integer to 4-big-endian byte string.\n *\n * @param i the integer.\n *\n * @return the byte string.\n */\nutil.int32ToBytes = function(i) {\n return (\n String.fromCharCode(i >> 24 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n// base64 characters, reverse mapping\nvar _base64 =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nvar _base64Idx = [\n/*43 -43 = 0*/\n/*'+', 1, 2, 3,'/' */\n 62, -1, -1, -1, 63,\n\n/*'0','1','2','3','4','5','6','7','8','9' */\n 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,\n\n/*15, 16, 17,'=', 19, 20, 21 */\n -1, -1, -1, 64, -1, -1, -1,\n\n/*65 - 43 = 22*/\n/*'A','B','C','D','E','F','G','H','I','J','K','L','M', */\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n\n/*'N','O','P','Q','R','S','T','U','V','W','X','Y','Z' */\n 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\n\n/*91 - 43 = 48 */\n/*48, 49, 50, 51, 52, 53 */\n -1, -1, -1, -1, -1, -1,\n\n/*97 - 43 = 54*/\n/*'a','b','c','d','e','f','g','h','i','j','k','l','m' */\n 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\n\n/*'n','o','p','q','r','s','t','u','v','w','x','y','z' */\n 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51\n];\n\n// base58 characters (Bitcoin alphabet)\nvar _base58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\n/**\n * Base64 encodes a 'binary' encoded string of bytes.\n *\n * @param input the binary encoded string of bytes to base64-encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the base64-encoded output.\n */\nutil.encode64 = function(input, maxline) {\n // TODO: deprecate: \"Deprecated. Use util.binary.base64.encode instead.\"\n var line = '';\n var output = '';\n var chr1, chr2, chr3;\n var i = 0;\n while(i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n\n // encode 4 character group\n line += _base64.charAt(chr1 >> 2);\n line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4));\n if(isNaN(chr2)) {\n line += '==';\n } else {\n line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6));\n line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63);\n }\n\n if(maxline && line.length > maxline) {\n output += line.substr(0, maxline) + '\\r\\n';\n line = line.substr(maxline);\n }\n }\n output += line;\n return output;\n};\n\n/**\n * Base64 decodes a string into a 'binary' encoded string of bytes.\n *\n * @param input the base64-encoded input.\n *\n * @return the binary encoded string.\n */\nutil.decode64 = function(input) {\n // TODO: deprecate: \"Deprecated. Use util.binary.base64.decode instead.\"\n\n // remove all non-base64 characters\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n var output = '';\n var enc1, enc2, enc3, enc4;\n var i = 0;\n\n while(i < input.length) {\n enc1 = _base64Idx[input.charCodeAt(i++) - 43];\n enc2 = _base64Idx[input.charCodeAt(i++) - 43];\n enc3 = _base64Idx[input.charCodeAt(i++) - 43];\n enc4 = _base64Idx[input.charCodeAt(i++) - 43];\n\n output += String.fromCharCode((enc1 << 2) | (enc2 >> 4));\n if(enc3 !== 64) {\n // decoded at least 2 bytes\n output += String.fromCharCode(((enc2 & 15) << 4) | (enc3 >> 2));\n if(enc4 !== 64) {\n // decoded 3 bytes\n output += String.fromCharCode(((enc3 & 3) << 6) | enc4);\n }\n }\n }\n\n return output;\n};\n\n/**\n * Encodes the given string of characters (a standard JavaScript\n * string) as a binary encoded string where the bytes represent\n * a UTF-8 encoded string of characters. Non-ASCII characters will be\n * encoded as multiple bytes according to UTF-8.\n *\n * @param str a standard string of characters to encode.\n *\n * @return the binary encoded string.\n */\nutil.encodeUtf8 = function(str) {\n return unescape(encodeURIComponent(str));\n};\n\n/**\n * Decodes a binary encoded string that contains bytes that\n * represent a UTF-8 encoded string of characters -- into a\n * string of characters (a standard JavaScript string).\n *\n * @param str the binary encoded string to decode.\n *\n * @return the resulting standard string of characters.\n */\nutil.decodeUtf8 = function(str) {\n return decodeURIComponent(escape(str));\n};\n\n// binary encoding/decoding tools\n// FIXME: Experimental. Do not use yet.\nutil.binary = {\n raw: {},\n hex: {},\n base64: {},\n base58: {},\n baseN : {\n encode: baseN.encode,\n decode: baseN.decode\n }\n};\n\n/**\n * Encodes a Uint8Array as a binary-encoded string. This encoding uses\n * a value between 0 and 255 for each character.\n *\n * @param bytes the Uint8Array to encode.\n *\n * @return the binary-encoded string.\n */\nutil.binary.raw.encode = function(bytes) {\n return String.fromCharCode.apply(null, bytes);\n};\n\n/**\n * Decodes a binary-encoded string to a Uint8Array. This encoding uses\n * a value between 0 and 255 for each character.\n *\n * @param str the binary-encoded string to decode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.raw.decode = function(str, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length);\n }\n offset = offset || 0;\n var j = offset;\n for(var i = 0; i < str.length; ++i) {\n out[j++] = str.charCodeAt(i);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Encodes a 'binary' string, ArrayBuffer, DataView, TypedArray, or\n * ByteBuffer as a string of hexadecimal characters.\n *\n * @param bytes the bytes to convert.\n *\n * @return the string of hexadecimal characters.\n */\nutil.binary.hex.encode = util.bytesToHex;\n\n/**\n * Decodes a hex-encoded string to a Uint8Array.\n *\n * @param hex the hexadecimal string to convert.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.hex.decode = function(hex, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(Math.ceil(hex.length / 2));\n }\n offset = offset || 0;\n var i = 0, j = offset;\n if(hex.length & 1) {\n // odd number of characters, convert first character alone\n i = 1;\n out[j++] = parseInt(hex[0], 16);\n }\n // convert 2 characters (1 byte) at a time\n for(; i < hex.length; i += 2) {\n out[j++] = parseInt(hex.substr(i, 2), 16);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Base64-encodes a Uint8Array.\n *\n * @param input the Uint8Array to encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the base64-encoded output string.\n */\nutil.binary.base64.encode = function(input, maxline) {\n var line = '';\n var output = '';\n var chr1, chr2, chr3;\n var i = 0;\n while(i < input.byteLength) {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n // encode 4 character group\n line += _base64.charAt(chr1 >> 2);\n line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4));\n if(isNaN(chr2)) {\n line += '==';\n } else {\n line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6));\n line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63);\n }\n\n if(maxline && line.length > maxline) {\n output += line.substr(0, maxline) + '\\r\\n';\n line = line.substr(maxline);\n }\n }\n output += line;\n return output;\n};\n\n/**\n * Decodes a base64-encoded string to a Uint8Array.\n *\n * @param input the base64-encoded input string.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.base64.decode = function(input, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(Math.ceil(input.length / 4) * 3);\n }\n\n // remove all non-base64 characters\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n offset = offset || 0;\n var enc1, enc2, enc3, enc4;\n var i = 0, j = offset;\n\n while(i < input.length) {\n enc1 = _base64Idx[input.charCodeAt(i++) - 43];\n enc2 = _base64Idx[input.charCodeAt(i++) - 43];\n enc3 = _base64Idx[input.charCodeAt(i++) - 43];\n enc4 = _base64Idx[input.charCodeAt(i++) - 43];\n\n out[j++] = (enc1 << 2) | (enc2 >> 4);\n if(enc3 !== 64) {\n // decoded at least 2 bytes\n out[j++] = ((enc2 & 15) << 4) | (enc3 >> 2);\n if(enc4 !== 64) {\n // decoded 3 bytes\n out[j++] = ((enc3 & 3) << 6) | enc4;\n }\n }\n }\n\n // make sure result is the exact decoded length\n return output ? (j - offset) : out.subarray(0, j);\n};\n\n// add support for base58 encoding/decoding with Bitcoin alphabet\nutil.binary.base58.encode = function(input, maxline) {\n return util.binary.baseN.encode(input, _base58, maxline);\n};\nutil.binary.base58.decode = function(input, maxline) {\n return util.binary.baseN.decode(input, _base58, maxline);\n};\n\n// text encoding/decoding tools\n// FIXME: Experimental. Do not use yet.\nutil.text = {\n utf8: {},\n utf16: {}\n};\n\n/**\n * Encodes the given string as UTF-8 in a Uint8Array.\n *\n * @param str the string to encode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.text.utf8.encode = function(str, output, offset) {\n str = util.encodeUtf8(str);\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length);\n }\n offset = offset || 0;\n var j = offset;\n for(var i = 0; i < str.length; ++i) {\n out[j++] = str.charCodeAt(i);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Decodes the UTF-8 contents from a Uint8Array.\n *\n * @param bytes the Uint8Array to decode.\n *\n * @return the resulting string.\n */\nutil.text.utf8.decode = function(bytes) {\n return util.decodeUtf8(String.fromCharCode.apply(null, bytes));\n};\n\n/**\n * Encodes the given string as UTF-16 in a Uint8Array.\n *\n * @param str the string to encode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.text.utf16.encode = function(str, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length * 2);\n }\n var view = new Uint16Array(out.buffer);\n offset = offset || 0;\n var j = offset;\n var k = offset;\n for(var i = 0; i < str.length; ++i) {\n view[k++] = str.charCodeAt(i);\n j += 2;\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Decodes the UTF-16 contents from a Uint8Array.\n *\n * @param bytes the Uint8Array to decode.\n *\n * @return the resulting string.\n */\nutil.text.utf16.decode = function(bytes) {\n return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer));\n};\n\n/**\n * Deflates the given data using a flash interface.\n *\n * @param api the flash interface.\n * @param bytes the data.\n * @param raw true to return only raw deflate data, false to include zlib\n * header and trailer.\n *\n * @return the deflated data as a string.\n */\nutil.deflate = function(api, bytes, raw) {\n bytes = util.decode64(api.deflate(util.encode64(bytes)).rval);\n\n // strip zlib header and trailer if necessary\n if(raw) {\n // zlib header is 2 bytes (CMF,FLG) where FLG indicates that\n // there is a 4-byte DICT (alder-32) block before the data if\n // its 5th bit is set\n var start = 2;\n var flg = bytes.charCodeAt(1);\n if(flg & 0x20) {\n start = 6;\n }\n // zlib trailer is 4 bytes of adler-32\n bytes = bytes.substring(start, bytes.length - 4);\n }\n\n return bytes;\n};\n\n/**\n * Inflates the given data using a flash interface.\n *\n * @param api the flash interface.\n * @param bytes the data.\n * @param raw true if the incoming data has no zlib header or trailer and is\n * raw DEFLATE data.\n *\n * @return the inflated data as a string, null on error.\n */\nutil.inflate = function(api, bytes, raw) {\n // TODO: add zlib header and trailer if necessary/possible\n var rval = api.inflate(util.encode64(bytes)).rval;\n return (rval === null) ? null : util.decode64(rval);\n};\n\n/**\n * Sets a storage object.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param obj the storage object, null to remove.\n */\nvar _setStorageObject = function(api, id, obj) {\n if(!api) {\n throw new Error('WebStorage not available.');\n }\n\n var rval;\n if(obj === null) {\n rval = api.removeItem(id);\n } else {\n // json-encode and base64-encode object\n obj = util.encode64(JSON.stringify(obj));\n rval = api.setItem(id, obj);\n }\n\n // handle potential flash error\n if(typeof(rval) !== 'undefined' && rval.rval !== true) {\n var error = new Error(rval.error.message);\n error.id = rval.error.id;\n error.name = rval.error.name;\n throw error;\n }\n};\n\n/**\n * Gets a storage object.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n *\n * @return the storage object entry or null if none exists.\n */\nvar _getStorageObject = function(api, id) {\n if(!api) {\n throw new Error('WebStorage not available.');\n }\n\n // get the existing entry\n var rval = api.getItem(id);\n\n /* Note: We check api.init because we can't do (api == localStorage)\n on IE because of \"Class doesn't support Automation\" exception. Only\n the flash api has an init method so this works too, but we need a\n better solution in the future. */\n\n // flash returns item wrapped in an object, handle special case\n if(api.init) {\n if(rval.rval === null) {\n if(rval.error) {\n var error = new Error(rval.error.message);\n error.id = rval.error.id;\n error.name = rval.error.name;\n throw error;\n }\n // no error, but also no item\n rval = null;\n } else {\n rval = rval.rval;\n }\n }\n\n // handle decoding\n if(rval !== null) {\n // base64-decode and json-decode data\n rval = JSON.parse(util.decode64(rval));\n }\n\n return rval;\n};\n\n/**\n * Stores an item in local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param data the data for the item (any javascript object/primitive).\n */\nvar _setItem = function(api, id, key, data) {\n // get storage object\n var obj = _getStorageObject(api, id);\n if(obj === null) {\n // create a new storage object\n obj = {};\n }\n // update key\n obj[key] = data;\n\n // set storage object\n _setStorageObject(api, id, obj);\n};\n\n/**\n * Gets an item from local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n *\n * @return the item.\n */\nvar _getItem = function(api, id, key) {\n // get storage object\n var rval = _getStorageObject(api, id);\n if(rval !== null) {\n // return data at key\n rval = (key in rval) ? rval[key] : null;\n }\n\n return rval;\n};\n\n/**\n * Removes an item from local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n */\nvar _removeItem = function(api, id, key) {\n // get storage object\n var obj = _getStorageObject(api, id);\n if(obj !== null && key in obj) {\n // remove key\n delete obj[key];\n\n // see if entry has no keys remaining\n var empty = true;\n for(var prop in obj) {\n empty = false;\n break;\n }\n if(empty) {\n // remove entry entirely if no keys are left\n obj = null;\n }\n\n // set storage object\n _setStorageObject(api, id, obj);\n }\n};\n\n/**\n * Clears the local disk storage identified by the given ID.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n */\nvar _clearItems = function(api, id) {\n _setStorageObject(api, id, null);\n};\n\n/**\n * Calls a storage function.\n *\n * @param func the function to call.\n * @param args the arguments for the function.\n * @param location the location argument.\n *\n * @return the return value from the function.\n */\nvar _callStorageFunction = function(func, args, location) {\n var rval = null;\n\n // default storage types\n if(typeof(location) === 'undefined') {\n location = ['web', 'flash'];\n }\n\n // apply storage types in order of preference\n var type;\n var done = false;\n var exception = null;\n for(var idx in location) {\n type = location[idx];\n try {\n if(type === 'flash' || type === 'both') {\n if(args[0] === null) {\n throw new Error('Flash local storage not available.');\n }\n rval = func.apply(this, args);\n done = (type === 'flash');\n }\n if(type === 'web' || type === 'both') {\n args[0] = localStorage;\n rval = func.apply(this, args);\n done = true;\n }\n } catch(ex) {\n exception = ex;\n }\n if(done) {\n break;\n }\n }\n\n if(!done) {\n throw exception;\n }\n\n return rval;\n};\n\n/**\n * Stores an item on local disk.\n *\n * The available types of local storage include 'flash', 'web', and 'both'.\n *\n * The type 'flash' refers to flash local storage (SharedObject). In order\n * to use flash local storage, the 'api' parameter must be valid. The type\n * 'web' refers to WebStorage, if supported by the browser. The type 'both'\n * refers to storing using both 'flash' and 'web', not just one or the\n * other.\n *\n * The location array should list the storage types to use in order of\n * preference:\n *\n * ['flash']: flash only storage\n * ['web']: web only storage\n * ['both']: try to store in both\n * ['flash','web']: store in flash first, but if not available, 'web'\n * ['web','flash']: store in web first, but if not available, 'flash'\n *\n * The location array defaults to: ['web', 'flash']\n *\n * @param api the flash interface, null to use only WebStorage.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param data the data for the item (any javascript object/primitive).\n * @param location an array with the preferred types of storage to use.\n */\nutil.setItem = function(api, id, key, data, location) {\n _callStorageFunction(_setItem, arguments, location);\n};\n\n/**\n * Gets an item on local disk.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface, null to use only WebStorage.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param location an array with the preferred types of storage to use.\n *\n * @return the item.\n */\nutil.getItem = function(api, id, key, location) {\n return _callStorageFunction(_getItem, arguments, location);\n};\n\n/**\n * Removes an item on local disk.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param location an array with the preferred types of storage to use.\n */\nutil.removeItem = function(api, id, key, location) {\n _callStorageFunction(_removeItem, arguments, location);\n};\n\n/**\n * Clears the local disk storage identified by the given ID.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface if flash is available.\n * @param id the storage ID to use.\n * @param location an array with the preferred types of storage to use.\n */\nutil.clearItems = function(api, id, location) {\n _callStorageFunction(_clearItems, arguments, location);\n};\n\n/**\n * Parses the scheme, host, and port from an http(s) url.\n *\n * @param str the url string.\n *\n * @return the parsed url object or null if the url is invalid.\n */\nutil.parseUrl = function(str) {\n // FIXME: this regex looks a bit broken\n var regex = /^(https?):\\/\\/([^:&^\\/]*):?(\\d*)(.*)$/g;\n regex.lastIndex = 0;\n var m = regex.exec(str);\n var url = (m === null) ? null : {\n full: str,\n scheme: m[1],\n host: m[2],\n port: m[3],\n path: m[4]\n };\n if(url) {\n url.fullHost = url.host;\n if(url.port) {\n if(url.port !== 80 && url.scheme === 'http') {\n url.fullHost += ':' + url.port;\n } else if(url.port !== 443 && url.scheme === 'https') {\n url.fullHost += ':' + url.port;\n }\n } else if(url.scheme === 'http') {\n url.port = 80;\n } else if(url.scheme === 'https') {\n url.port = 443;\n }\n url.full = url.scheme + '://' + url.fullHost;\n }\n return url;\n};\n\n/* Storage for query variables */\nvar _queryVariables = null;\n\n/**\n * Returns the window location query variables. Query is parsed on the first\n * call and the same object is returned on subsequent calls. The mapping\n * is from keys to an array of values. Parameters without values will have\n * an object key set but no value added to the value array. Values are\n * unescaped.\n *\n * ...?k1=v1&k2=v2:\n * {\n * \"k1\": [\"v1\"],\n * \"k2\": [\"v2\"]\n * }\n *\n * ...?k1=v1&k1=v2:\n * {\n * \"k1\": [\"v1\", \"v2\"]\n * }\n *\n * ...?k1=v1&k2:\n * {\n * \"k1\": [\"v1\"],\n * \"k2\": []\n * }\n *\n * ...?k1=v1&k1:\n * {\n * \"k1\": [\"v1\"]\n * }\n *\n * ...?k1&k1:\n * {\n * \"k1\": []\n * }\n *\n * @param query the query string to parse (optional, default to cached\n * results from parsing window location search query).\n *\n * @return object mapping keys to variables.\n */\nutil.getQueryVariables = function(query) {\n var parse = function(q) {\n var rval = {};\n var kvpairs = q.split('&');\n for(var i = 0; i < kvpairs.length; i++) {\n var pos = kvpairs[i].indexOf('=');\n var key;\n var val;\n if(pos > 0) {\n key = kvpairs[i].substring(0, pos);\n val = kvpairs[i].substring(pos + 1);\n } else {\n key = kvpairs[i];\n val = null;\n }\n if(!(key in rval)) {\n rval[key] = [];\n }\n // disallow overriding object prototype keys\n if(!(key in Object.prototype) && val !== null) {\n rval[key].push(unescape(val));\n }\n }\n return rval;\n };\n\n var rval;\n if(typeof(query) === 'undefined') {\n // set cached variables if needed\n if(_queryVariables === null) {\n if(typeof(window) !== 'undefined' && window.location && window.location.search) {\n // parse window search query\n _queryVariables = parse(window.location.search.substring(1));\n } else {\n // no query variables available\n _queryVariables = {};\n }\n }\n rval = _queryVariables;\n } else {\n // parse given query\n rval = parse(query);\n }\n return rval;\n};\n\n/**\n * Parses a fragment into a path and query. This method will take a URI\n * fragment and break it up as if it were the main URI. For example:\n * /bar/baz?a=1&b=2\n * results in:\n * {\n * path: [\"bar\", \"baz\"],\n * query: {\"k1\": [\"v1\"], \"k2\": [\"v2\"]}\n * }\n *\n * @return object with a path array and query object.\n */\nutil.parseFragment = function(fragment) {\n // default to whole fragment\n var fp = fragment;\n var fq = '';\n // split into path and query if possible at the first '?'\n var pos = fragment.indexOf('?');\n if(pos > 0) {\n fp = fragment.substring(0, pos);\n fq = fragment.substring(pos + 1);\n }\n // split path based on '/' and ignore first element if empty\n var path = fp.split('/');\n if(path.length > 0 && path[0] === '') {\n path.shift();\n }\n // convert query into object\n var query = (fq === '') ? {} : util.getQueryVariables(fq);\n\n return {\n pathString: fp,\n queryString: fq,\n path: path,\n query: query\n };\n};\n\n/**\n * Makes a request out of a URI-like request string. This is intended to\n * be used where a fragment id (after a URI '#') is parsed as a URI with\n * path and query parts. The string should have a path beginning and\n * delimited by '/' and optional query parameters following a '?'. The\n * query should be a standard URL set of key value pairs delimited by\n * '&'. For backwards compatibility the initial '/' on the path is not\n * required. The request object has the following API, (fully described\n * in the method code):\n * {\n * path: <the path string part>.\n * query: <the query string part>,\n * getPath(i): get part or all of the split path array,\n * getQuery(k, i): get part or all of a query key array,\n * getQueryLast(k, _default): get last element of a query key array.\n * }\n *\n * @return object with request parameters.\n */\nutil.makeRequest = function(reqString) {\n var frag = util.parseFragment(reqString);\n var req = {\n // full path string\n path: frag.pathString,\n // full query string\n query: frag.queryString,\n /**\n * Get path or element in path.\n *\n * @param i optional path index.\n *\n * @return path or part of path if i provided.\n */\n getPath: function(i) {\n return (typeof(i) === 'undefined') ? frag.path : frag.path[i];\n },\n /**\n * Get query, values for a key, or value for a key index.\n *\n * @param k optional query key.\n * @param i optional query key index.\n *\n * @return query, values for a key, or value for a key index.\n */\n getQuery: function(k, i) {\n var rval;\n if(typeof(k) === 'undefined') {\n rval = frag.query;\n } else {\n rval = frag.query[k];\n if(rval && typeof(i) !== 'undefined') {\n rval = rval[i];\n }\n }\n return rval;\n },\n getQueryLast: function(k, _default) {\n var rval;\n var vals = req.getQuery(k);\n if(vals) {\n rval = vals[vals.length - 1];\n } else {\n rval = _default;\n }\n return rval;\n }\n };\n return req;\n};\n\n/**\n * Makes a URI out of a path, an object with query parameters, and a\n * fragment. Uses jQuery.param() internally for query string creation.\n * If the path is an array, it will be joined with '/'.\n *\n * @param path string path or array of strings.\n * @param query object with query parameters. (optional)\n * @param fragment fragment string. (optional)\n *\n * @return string object with request parameters.\n */\nutil.makeLink = function(path, query, fragment) {\n // join path parts if needed\n path = jQuery.isArray(path) ? path.join('/') : path;\n\n var qstr = jQuery.param(query || {});\n fragment = fragment || '';\n return path +\n ((qstr.length > 0) ? ('?' + qstr) : '') +\n ((fragment.length > 0) ? ('#' + fragment) : '');\n};\n\n/**\n * Check if an object is empty.\n *\n * Taken from:\n * http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json/679937#679937\n *\n * @param object the object to check.\n */\nutil.isEmpty = function(obj) {\n for(var prop in obj) {\n if(obj.hasOwnProperty(prop)) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Format with simple printf-style interpolation.\n *\n * %%: literal '%'\n * %s,%o: convert next argument into a string.\n *\n * @param format the string to format.\n * @param ... arguments to interpolate into the format string.\n */\nutil.format = function(format) {\n var re = /%./g;\n // current match\n var match;\n // current part\n var part;\n // current arg index\n var argi = 0;\n // collected parts to recombine later\n var parts = [];\n // last index found\n var last = 0;\n // loop while matches remain\n while((match = re.exec(format))) {\n part = format.substring(last, re.lastIndex - 2);\n // don't add empty strings (ie, parts between %s%s)\n if(part.length > 0) {\n parts.push(part);\n }\n last = re.lastIndex;\n // switch on % code\n var code = match[0][1];\n switch(code) {\n case 's':\n case 'o':\n // check if enough arguments were given\n if(argi < arguments.length) {\n parts.push(arguments[argi++ + 1]);\n } else {\n parts.push('<?>');\n }\n break;\n // FIXME: do proper formating for numbers, etc\n //case 'f':\n //case 'd':\n case '%':\n parts.push('%');\n break;\n default:\n parts.push('<%' + code + '?>');\n }\n }\n // add trailing part of format string\n parts.push(format.substring(last));\n return parts.join('');\n};\n\n/**\n * Formats a number.\n *\n * http://snipplr.com/view/5945/javascript-numberformat--ported-from-php/\n */\nutil.formatNumber = function(number, decimals, dec_point, thousands_sep) {\n // http://kevin.vanzonneveld.net\n // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + bugfix by: Michael White (http://crestidg.com)\n // + bugfix by: Benjamin Lupton\n // + bugfix by: Allan Jensen (http://www.winternet.no)\n // + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)\n // * example 1: number_format(1234.5678, 2, '.', '');\n // * returns 1: 1234.57\n\n var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;\n var d = dec_point === undefined ? ',' : dec_point;\n var t = thousands_sep === undefined ?\n '.' : thousands_sep, s = n < 0 ? '-' : '';\n var i = parseInt((n = Math.abs(+n || 0).toFixed(c)), 10) + '';\n var j = (i.length > 3) ? i.length % 3 : 0;\n return s + (j ? i.substr(0, j) + t : '') +\n i.substr(j).replace(/(\\d{3})(?=\\d)/g, '$1' + t) +\n (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');\n};\n\n/**\n * Formats a byte size.\n *\n * http://snipplr.com/view/5949/format-humanize-file-byte-size-presentation-in-javascript/\n */\nutil.formatSize = function(size) {\n if(size >= 1073741824) {\n size = util.formatNumber(size / 1073741824, 2, '.', '') + ' GiB';\n } else if(size >= 1048576) {\n size = util.formatNumber(size / 1048576, 2, '.', '') + ' MiB';\n } else if(size >= 1024) {\n size = util.formatNumber(size / 1024, 0) + ' KiB';\n } else {\n size = util.formatNumber(size, 0) + ' bytes';\n }\n return size;\n};\n\n/**\n * Converts an IPv4 or IPv6 string representation into bytes (in network order).\n *\n * @param ip the IPv4 or IPv6 address to convert.\n *\n * @return the 4-byte IPv6 or 16-byte IPv6 address or null if the address can't\n * be parsed.\n */\nutil.bytesFromIP = function(ip) {\n if(ip.indexOf('.') !== -1) {\n return util.bytesFromIPv4(ip);\n }\n if(ip.indexOf(':') !== -1) {\n return util.bytesFromIPv6(ip);\n }\n return null;\n};\n\n/**\n * Converts an IPv4 string representation into bytes (in network order).\n *\n * @param ip the IPv4 address to convert.\n *\n * @return the 4-byte address or null if the address can't be parsed.\n */\nutil.bytesFromIPv4 = function(ip) {\n ip = ip.split('.');\n if(ip.length !== 4) {\n return null;\n }\n var b = util.createBuffer();\n for(var i = 0; i < ip.length; ++i) {\n var num = parseInt(ip[i], 10);\n if(isNaN(num)) {\n return null;\n }\n b.putByte(num);\n }\n return b.getBytes();\n};\n\n/**\n * Converts an IPv6 string representation into bytes (in network order).\n *\n * @param ip the IPv6 address to convert.\n *\n * @return the 16-byte address or null if the address can't be parsed.\n */\nutil.bytesFromIPv6 = function(ip) {\n var blanks = 0;\n ip = ip.split(':').filter(function(e) {\n if(e.length === 0) ++blanks;\n return true;\n });\n var zeros = (8 - ip.length + blanks) * 2;\n var b = util.createBuffer();\n for(var i = 0; i < 8; ++i) {\n if(!ip[i] || ip[i].length === 0) {\n b.fillWithByte(0, zeros);\n zeros = 0;\n continue;\n }\n var bytes = util.hexToBytes(ip[i]);\n if(bytes.length < 2) {\n b.putByte(0);\n }\n b.putBytes(bytes);\n }\n return b.getBytes();\n};\n\n/**\n * Converts 4-bytes into an IPv4 string representation or 16-bytes into\n * an IPv6 string representation. The bytes must be in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv4 or IPv6 string representation if 4 or 16 bytes,\n * respectively, are given, otherwise null.\n */\nutil.bytesToIP = function(bytes) {\n if(bytes.length === 4) {\n return util.bytesToIPv4(bytes);\n }\n if(bytes.length === 16) {\n return util.bytesToIPv6(bytes);\n }\n return null;\n};\n\n/**\n * Converts 4-bytes into an IPv4 string representation. The bytes must be\n * in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv4 string representation or null for an invalid # of bytes.\n */\nutil.bytesToIPv4 = function(bytes) {\n if(bytes.length !== 4) {\n return null;\n }\n var ip = [];\n for(var i = 0; i < bytes.length; ++i) {\n ip.push(bytes.charCodeAt(i));\n }\n return ip.join('.');\n};\n\n/**\n * Converts 16-bytes into an IPv16 string representation. The bytes must be\n * in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv16 string representation or null for an invalid # of bytes.\n */\nutil.bytesToIPv6 = function(bytes) {\n if(bytes.length !== 16) {\n return null;\n }\n var ip = [];\n var zeroGroups = [];\n var zeroMaxGroup = 0;\n for(var i = 0; i < bytes.length; i += 2) {\n var hex = util.bytesToHex(bytes[i] + bytes[i + 1]);\n // canonicalize zero representation\n while(hex[0] === '0' && hex !== '0') {\n hex = hex.substr(1);\n }\n if(hex === '0') {\n var last = zeroGroups[zeroGroups.length - 1];\n var idx = ip.length;\n if(!last || idx !== last.end + 1) {\n zeroGroups.push({start: idx, end: idx});\n } else {\n last.end = idx;\n if((last.end - last.start) >\n (zeroGroups[zeroMaxGroup].end - zeroGroups[zeroMaxGroup].start)) {\n zeroMaxGroup = zeroGroups.length - 1;\n }\n }\n }\n ip.push(hex);\n }\n if(zeroGroups.length > 0) {\n var group = zeroGroups[zeroMaxGroup];\n // only shorten group of length > 0\n if(group.end - group.start > 0) {\n ip.splice(group.start, group.end - group.start + 1, '');\n if(group.start === 0) {\n ip.unshift('');\n }\n if(group.end === 7) {\n ip.push('');\n }\n }\n }\n return ip.join(':');\n};\n\n/**\n * Estimates the number of processes that can be run concurrently. If\n * creating Web Workers, keep in mind that the main JavaScript process needs\n * its own core.\n *\n * @param options the options to use:\n * update true to force an update (not use the cached value).\n * @param callback(err, max) called once the operation completes.\n */\nutil.estimateCores = function(options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n if('cores' in util && !options.update) {\n return callback(null, util.cores);\n }\n if(typeof navigator !== 'undefined' &&\n 'hardwareConcurrency' in navigator &&\n navigator.hardwareConcurrency > 0) {\n util.cores = navigator.hardwareConcurrency;\n return callback(null, util.cores);\n }\n if(typeof Worker === 'undefined') {\n // workers not available\n util.cores = 1;\n return callback(null, util.cores);\n }\n if(typeof Blob === 'undefined') {\n // can't estimate, default to 2\n util.cores = 2;\n return callback(null, util.cores);\n }\n\n // create worker concurrency estimation code as blob\n var blobUrl = URL.createObjectURL(new Blob(['(',\n function() {\n self.addEventListener('message', function(e) {\n // run worker for 4 ms\n var st = Date.now();\n var et = st + 4;\n while(Date.now() < et);\n self.postMessage({st: st, et: et});\n });\n }.toString(),\n ')()'], {type: 'application/javascript'}));\n\n // take 5 samples using 16 workers\n sample([], 5, 16);\n\n function sample(max, samples, numWorkers) {\n if(samples === 0) {\n // get overlap average\n var avg = Math.floor(max.reduce(function(avg, x) {\n return avg + x;\n }, 0) / max.length);\n util.cores = Math.max(1, avg);\n URL.revokeObjectURL(blobUrl);\n return callback(null, util.cores);\n }\n map(numWorkers, function(err, results) {\n max.push(reduce(numWorkers, results));\n sample(max, samples - 1, numWorkers);\n });\n }\n\n function map(numWorkers, callback) {\n var workers = [];\n var results = [];\n for(var i = 0; i < numWorkers; ++i) {\n var worker = new Worker(blobUrl);\n worker.addEventListener('message', function(e) {\n results.push(e.data);\n if(results.length === numWorkers) {\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].terminate();\n }\n callback(null, results);\n }\n });\n workers.push(worker);\n }\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].postMessage(i);\n }\n }\n\n function reduce(numWorkers, results) {\n // find overlapping time windows\n var overlaps = [];\n for(var n = 0; n < numWorkers; ++n) {\n var r1 = results[n];\n var overlap = overlaps[n] = [];\n for(var i = 0; i < numWorkers; ++i) {\n if(n === i) {\n continue;\n }\n var r2 = results[i];\n if((r1.st > r2.st && r1.st < r2.et) ||\n (r2.st > r1.st && r2.st < r1.et)) {\n overlap.push(i);\n }\n }\n }\n // get maximum overlaps ... don't include overlapping worker itself\n // as the main JS process was also being scheduled during the work and\n // would have to be subtracted from the estimate anyway\n return overlaps.reduce(function(max, overlap) {\n return Math.max(max, overlap.length);\n }, 0);\n }\n};\n","/**\n * Cipher base API.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nmodule.exports = forge.cipher = forge.cipher || {};\n\n// registered algorithms\nforge.cipher.algorithms = forge.cipher.algorithms || {};\n\n/**\n * Creates a cipher object that can be used to encrypt data using the given\n * algorithm and key. The algorithm may be provided as a string value for a\n * previously registered algorithm or it may be given as a cipher algorithm\n * API object.\n *\n * @param algorithm the algorithm to use, either a string or an algorithm API\n * object.\n * @param key the key to use, as a binary-encoded string of bytes or a\n * byte buffer.\n *\n * @return the cipher.\n */\nforge.cipher.createCipher = function(algorithm, key) {\n var api = algorithm;\n if(typeof api === 'string') {\n api = forge.cipher.getAlgorithm(api);\n if(api) {\n api = api();\n }\n }\n if(!api) {\n throw new Error('Unsupported algorithm: ' + algorithm);\n }\n\n // assume block cipher\n return new forge.cipher.BlockCipher({\n algorithm: api,\n key: key,\n decrypt: false\n });\n};\n\n/**\n * Creates a decipher object that can be used to decrypt data using the given\n * algorithm and key. The algorithm may be provided as a string value for a\n * previously registered algorithm or it may be given as a cipher algorithm\n * API object.\n *\n * @param algorithm the algorithm to use, either a string or an algorithm API\n * object.\n * @param key the key to use, as a binary-encoded string of bytes or a\n * byte buffer.\n *\n * @return the cipher.\n */\nforge.cipher.createDecipher = function(algorithm, key) {\n var api = algorithm;\n if(typeof api === 'string') {\n api = forge.cipher.getAlgorithm(api);\n if(api) {\n api = api();\n }\n }\n if(!api) {\n throw new Error('Unsupported algorithm: ' + algorithm);\n }\n\n // assume block cipher\n return new forge.cipher.BlockCipher({\n algorithm: api,\n key: key,\n decrypt: true\n });\n};\n\n/**\n * Registers an algorithm by name. If the name was already registered, the\n * algorithm API object will be overwritten.\n *\n * @param name the name of the algorithm.\n * @param algorithm the algorithm API object.\n */\nforge.cipher.registerAlgorithm = function(name, algorithm) {\n name = name.toUpperCase();\n forge.cipher.algorithms[name] = algorithm;\n};\n\n/**\n * Gets a registered algorithm by name.\n *\n * @param name the name of the algorithm.\n *\n * @return the algorithm, if found, null if not.\n */\nforge.cipher.getAlgorithm = function(name) {\n name = name.toUpperCase();\n if(name in forge.cipher.algorithms) {\n return forge.cipher.algorithms[name];\n }\n return null;\n};\n\nvar BlockCipher = forge.cipher.BlockCipher = function(options) {\n this.algorithm = options.algorithm;\n this.mode = this.algorithm.mode;\n this.blockSize = this.mode.blockSize;\n this._finish = false;\n this._input = null;\n this.output = null;\n this._op = options.decrypt ? this.mode.decrypt : this.mode.encrypt;\n this._decrypt = options.decrypt;\n this.algorithm.initialize(options);\n};\n\n/**\n * Starts or restarts the encryption or decryption process, whichever\n * was previously configured.\n *\n * For non-GCM mode, the IV may be a binary-encoded string of bytes, an array\n * of bytes, a byte buffer, or an array of 32-bit integers. If the IV is in\n * bytes, then it must be Nb (16) bytes in length. If the IV is given in as\n * 32-bit integers, then it must be 4 integers long.\n *\n * Note: an IV is not required or used in ECB mode.\n *\n * For GCM-mode, the IV must be given as a binary-encoded string of bytes or\n * a byte buffer. The number of bytes should be 12 (96 bits) as recommended\n * by NIST SP-800-38D but another length may be given.\n *\n * @param options the options to use:\n * iv the initialization vector to use as a binary-encoded string of\n * bytes, null to reuse the last ciphered block from a previous\n * update() (this \"residue\" method is for legacy support only).\n * additionalData additional authentication data as a binary-encoded\n * string of bytes, for 'GCM' mode, (default: none).\n * tagLength desired length of authentication tag, in bits, for\n * 'GCM' mode (0-128, default: 128).\n * tag the authentication tag to check if decrypting, as a\n * binary-encoded string of bytes.\n * output the output the buffer to write to, null to create one.\n */\nBlockCipher.prototype.start = function(options) {\n options = options || {};\n var opts = {};\n for(var key in options) {\n opts[key] = options[key];\n }\n opts.decrypt = this._decrypt;\n this._finish = false;\n this._input = forge.util.createBuffer();\n this.output = options.output || forge.util.createBuffer();\n this.mode.start(opts);\n};\n\n/**\n * Updates the next block according to the cipher mode.\n *\n * @param input the buffer to read from.\n */\nBlockCipher.prototype.update = function(input) {\n if(input) {\n // input given, so empty it into the input buffer\n this._input.putBuffer(input);\n }\n\n // do cipher operation until it needs more input and not finished\n while(!this._op.call(this.mode, this._input, this.output, this._finish) &&\n !this._finish) {}\n\n // free consumed memory from input buffer\n this._input.compact();\n};\n\n/**\n * Finishes encrypting or decrypting.\n *\n * @param pad a padding function to use in CBC mode, null for default,\n * signature(blockSize, buffer, decrypt).\n *\n * @return true if successful, false on error.\n */\nBlockCipher.prototype.finish = function(pad) {\n // backwards-compatibility w/deprecated padding API\n // Note: will overwrite padding functions even after another start() call\n if(pad && (this.mode.name === 'ECB' || this.mode.name === 'CBC')) {\n this.mode.pad = function(input) {\n return pad(this.blockSize, input, false);\n };\n this.mode.unpad = function(output) {\n return pad(this.blockSize, output, true);\n };\n }\n\n // build options for padding and afterFinish functions\n var options = {};\n options.decrypt = this._decrypt;\n\n // get # of bytes that won't fill a block\n options.overflow = this._input.length() % this.blockSize;\n\n if(!this._decrypt && this.mode.pad) {\n if(!this.mode.pad(this._input, options)) {\n return false;\n }\n }\n\n // do final update\n this._finish = true;\n this.update();\n\n if(this._decrypt && this.mode.unpad) {\n if(!this.mode.unpad(this.output, options)) {\n return false;\n }\n }\n\n if(this.mode.afterFinish) {\n if(!this.mode.afterFinish(this.output, options)) {\n return false;\n }\n }\n\n return true;\n};\n","/**\n * Supported cipher modes.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nforge.cipher = forge.cipher || {};\n\n// supported cipher modes\nvar modes = module.exports = forge.cipher.modes = forge.cipher.modes || {};\n\n/** Electronic codebook (ECB) (Don't use this; it's not secure) **/\n\nmodes.ecb = function(options) {\n options = options || {};\n this.name = 'ECB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n};\n\nmodes.ecb.prototype.start = function(options) {};\n\nmodes.ecb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodes.ecb.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodes.ecb.prototype.pad = function(input, options) {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (input.length() === this.blockSize ?\n this.blockSize : (this.blockSize - input.length()));\n input.fillWithByte(padding, padding);\n return true;\n};\n\nmodes.ecb.prototype.unpad = function(output, options) {\n // check for error: input data not a multiple of blockSize\n if(options.overflow > 0) {\n return false;\n }\n\n // ensure padding byte count is valid\n var len = output.length();\n var count = output.at(len - 1);\n if(count > (this.blockSize << 2)) {\n return false;\n }\n\n // trim off padding bytes\n output.truncate(count);\n return true;\n};\n\n/** Cipher-block Chaining (CBC) **/\n\nmodes.cbc = function(options) {\n options = options || {};\n this.name = 'CBC';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n};\n\nmodes.cbc.prototype.start = function(options) {\n // Note: legacy support for using IV residue (has security flaws)\n // if IV is null, reuse block from previous processing\n if(options.iv === null) {\n // must have a previous block\n if(!this._prev) {\n throw new Error('Invalid IV parameter.');\n }\n this._iv = this._prev.slice(0);\n } else if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n } else {\n // save IV as \"previous\" block\n this._iv = transformIV(options.iv, this.blockSize);\n this._prev = this._iv.slice(0);\n }\n};\n\nmodes.cbc.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n // CBC XOR's IV (or previous block) with plaintext\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._prev[i] ^ input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output, save previous block\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n this._prev = this._outBlock;\n};\n\nmodes.cbc.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output, save previous ciphered block\n // CBC XOR's IV (or previous block) with ciphertext\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._prev[i] ^ this._outBlock[i]);\n }\n this._prev = this._inBlock.slice(0);\n};\n\nmodes.cbc.prototype.pad = function(input, options) {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (input.length() === this.blockSize ?\n this.blockSize : (this.blockSize - input.length()));\n input.fillWithByte(padding, padding);\n return true;\n};\n\nmodes.cbc.prototype.unpad = function(output, options) {\n // check for error: input data not a multiple of blockSize\n if(options.overflow > 0) {\n return false;\n }\n\n // ensure padding byte count is valid\n var len = output.length();\n var count = output.at(len - 1);\n if(count > (this.blockSize << 2)) {\n return false;\n }\n\n // trim off padding bytes\n output.truncate(count);\n return true;\n};\n\n/** Cipher feedback (CFB) **/\n\nmodes.cfb = function(options) {\n options = options || {};\n this.name = 'CFB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output, write input as output\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32() ^ this._outBlock[i];\n output.putInt32(this._inBlock[i]);\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output, write input as partial output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialBlock[i] = input.getInt32() ^ this._outBlock[i];\n this._partialOutput.putInt32(this._partialBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._partialBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block (CFB always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output, write input as output\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n output.putInt32(this._inBlock[i] ^ this._outBlock[i]);\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output, write input as partial output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialBlock[i] = input.getInt32();\n this._partialOutput.putInt32(this._partialBlock[i] ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._partialBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\n/** Output feedback (OFB) **/\n\nmodes.ofb = function(options) {\n options = options || {};\n this.name = 'OFB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(input.length() === 0) {\n return true;\n }\n\n // encrypt block (OFB always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output and update next input\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(input.getInt32() ^ this._outBlock[i]);\n this._inBlock[i] = this._outBlock[i];\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._outBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.decrypt = modes.ofb.prototype.encrypt;\n\n/** Counter (CTR) **/\n\nmodes.ctr = function(options) {\n options = options || {};\n this.name = 'CTR';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.ctr.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.ctr.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block (CTR always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n } else {\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n }\n\n // block complete, increment counter (input block)\n inc32(this._inBlock);\n};\n\nmodes.ctr.prototype.decrypt = modes.ctr.prototype.encrypt;\n\n/** Galois/Counter Mode (GCM) **/\n\nmodes.gcm = function(options) {\n options = options || {};\n this.name = 'GCM';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n\n // R is actually this value concatenated with 120 more zero bits, but\n // we only XOR against R so the other zeros have no effect -- we just\n // apply this value to the first integer in a block\n this._R = 0xE1000000;\n};\n\nmodes.gcm.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // ensure IV is a byte buffer\n var iv = forge.util.createBuffer(options.iv);\n\n // no ciphered data processed yet\n this._cipherLength = 0;\n\n // default additional data is none\n var additionalData;\n if('additionalData' in options) {\n additionalData = forge.util.createBuffer(options.additionalData);\n } else {\n additionalData = forge.util.createBuffer();\n }\n\n // default tag length is 128 bits\n if('tagLength' in options) {\n this._tagLength = options.tagLength;\n } else {\n this._tagLength = 128;\n }\n\n // if tag is given, ensure tag matches tag length\n this._tag = null;\n if(options.decrypt) {\n // save tag to check later\n this._tag = forge.util.createBuffer(options.tag).getBytes();\n if(this._tag.length !== (this._tagLength / 8)) {\n throw new Error('Authentication tag does not match tag length.');\n }\n }\n\n // create tmp storage for hash calculation\n this._hashBlock = new Array(this._ints);\n\n // no tag generated yet\n this.tag = null;\n\n // generate hash subkey\n // (apply block cipher to \"zero\" block)\n this._hashSubkey = new Array(this._ints);\n this.cipher.encrypt([0, 0, 0, 0], this._hashSubkey);\n\n // generate table M\n // use 4-bit tables (32 component decomposition of a 16 byte value)\n // 8-bit tables take more space and are known to have security\n // vulnerabilities (in native implementations)\n this.componentBits = 4;\n this._m = this.generateHashTable(this._hashSubkey, this.componentBits);\n\n // Note: support IV length different from 96 bits? (only supporting\n // 96 bits is recommended by NIST SP-800-38D)\n // generate J_0\n var ivLength = iv.length();\n if(ivLength === 12) {\n // 96-bit IV\n this._j0 = [iv.getInt32(), iv.getInt32(), iv.getInt32(), 1];\n } else {\n // IV is NOT 96-bits\n this._j0 = [0, 0, 0, 0];\n while(iv.length() > 0) {\n this._j0 = this.ghash(\n this._hashSubkey, this._j0,\n [iv.getInt32(), iv.getInt32(), iv.getInt32(), iv.getInt32()]);\n }\n this._j0 = this.ghash(\n this._hashSubkey, this._j0, [0, 0].concat(from64To32(ivLength * 8)));\n }\n\n // generate ICB (initial counter block)\n this._inBlock = this._j0.slice(0);\n inc32(this._inBlock);\n this._partialBytes = 0;\n\n // consume authentication data\n additionalData = forge.util.createBuffer(additionalData);\n // save additional data length as a BE 64-bit number\n this._aDataLength = from64To32(additionalData.length() * 8);\n // pad additional data to 128 bit (16 byte) block size\n var overflow = additionalData.length() % this.blockSize;\n if(overflow) {\n additionalData.fillWithByte(0, this.blockSize - overflow);\n }\n this._s = [0, 0, 0, 0];\n while(additionalData.length() > 0) {\n this._s = this.ghash(this._hashSubkey, this._s, [\n additionalData.getInt32(),\n additionalData.getInt32(),\n additionalData.getInt32(),\n additionalData.getInt32()\n ]);\n }\n};\n\nmodes.gcm.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i] ^= input.getInt32());\n }\n this._cipherLength += this.blockSize;\n } else {\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes <= 0 || finish) {\n // handle overflow prior to hashing\n if(finish) {\n // get block overflow\n var overflow = inputLength % this.blockSize;\n this._cipherLength += overflow;\n // truncate for hash function\n this._partialOutput.truncate(this.blockSize - overflow);\n } else {\n this._cipherLength += this.blockSize;\n }\n\n // get output block for hashing\n for(var i = 0; i < this._ints; ++i) {\n this._outBlock[i] = this._partialOutput.getInt32();\n }\n this._partialOutput.read -= this.blockSize;\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n // block still incomplete, restore input buffer, get partial output,\n // and return early\n input.read -= this.blockSize;\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n }\n\n // update hash block S\n this._s = this.ghash(this._hashSubkey, this._s, this._outBlock);\n\n // increment counter (input block)\n inc32(this._inBlock);\n};\n\nmodes.gcm.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n var inputLength = input.length();\n if(inputLength < this.blockSize && !(finish && inputLength > 0)) {\n return true;\n }\n\n // encrypt block (GCM always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // increment counter (input block)\n inc32(this._inBlock);\n\n // update hash block S\n this._hashBlock[0] = input.getInt32();\n this._hashBlock[1] = input.getInt32();\n this._hashBlock[2] = input.getInt32();\n this._hashBlock[3] = input.getInt32();\n this._s = this.ghash(this._hashSubkey, this._s, this._hashBlock);\n\n // XOR hash input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i] ^ this._hashBlock[i]);\n }\n\n // increment cipher data length\n if(inputLength < this.blockSize) {\n this._cipherLength += inputLength % this.blockSize;\n } else {\n this._cipherLength += this.blockSize;\n }\n};\n\nmodes.gcm.prototype.afterFinish = function(output, options) {\n var rval = true;\n\n // handle overflow\n if(options.decrypt && options.overflow) {\n output.truncate(this.blockSize - options.overflow);\n }\n\n // handle authentication tag\n this.tag = forge.util.createBuffer();\n\n // concatenate additional data length with cipher length\n var lengths = this._aDataLength.concat(from64To32(this._cipherLength * 8));\n\n // include lengths in hash\n this._s = this.ghash(this._hashSubkey, this._s, lengths);\n\n // do GCTR(J_0, S)\n var tag = [];\n this.cipher.encrypt(this._j0, tag);\n for(var i = 0; i < this._ints; ++i) {\n this.tag.putInt32(this._s[i] ^ tag[i]);\n }\n\n // trim tag to length\n this.tag.truncate(this.tag.length() % (this._tagLength / 8));\n\n // check authentication tag\n if(options.decrypt && this.tag.bytes() !== this._tag) {\n rval = false;\n }\n\n return rval;\n};\n\n/**\n * See NIST SP-800-38D 6.3 (Algorithm 1). This function performs Galois\n * field multiplication. The field, GF(2^128), is defined by the polynomial:\n *\n * x^128 + x^7 + x^2 + x + 1\n *\n * Which is represented in little-endian binary form as: 11100001 (0xe1). When\n * the value of a coefficient is 1, a bit is set. The value R, is the\n * concatenation of this value and 120 zero bits, yielding a 128-bit value\n * which matches the block size.\n *\n * This function will multiply two elements (vectors of bytes), X and Y, in\n * the field GF(2^128). The result is initialized to zero. For each bit of\n * X (out of 128), x_i, if x_i is set, then the result is multiplied (XOR'd)\n * by the current value of Y. For each bit, the value of Y will be raised by\n * a power of x (multiplied by the polynomial x). This can be achieved by\n * shifting Y once to the right. If the current value of Y, prior to being\n * multiplied by x, has 0 as its LSB, then it is a 127th degree polynomial.\n * Otherwise, we must divide by R after shifting to find the remainder.\n *\n * @param x the first block to multiply by the second.\n * @param y the second block to multiply by the first.\n *\n * @return the block result of the multiplication.\n */\nmodes.gcm.prototype.multiply = function(x, y) {\n var z_i = [0, 0, 0, 0];\n var v_i = y.slice(0);\n\n // calculate Z_128 (block has 128 bits)\n for(var i = 0; i < 128; ++i) {\n // if x_i is 0, Z_{i+1} = Z_i (unchanged)\n // else Z_{i+1} = Z_i ^ V_i\n // get x_i by finding 32-bit int position, then left shift 1 by remainder\n var x_i = x[(i / 32) | 0] & (1 << (31 - i % 32));\n if(x_i) {\n z_i[0] ^= v_i[0];\n z_i[1] ^= v_i[1];\n z_i[2] ^= v_i[2];\n z_i[3] ^= v_i[3];\n }\n\n // if LSB(V_i) is 1, V_i = V_i >> 1\n // else V_i = (V_i >> 1) ^ R\n this.pow(v_i, v_i);\n }\n\n return z_i;\n};\n\nmodes.gcm.prototype.pow = function(x, out) {\n // if LSB(x) is 1, x = x >>> 1\n // else x = (x >>> 1) ^ R\n var lsb = x[3] & 1;\n\n // always do x >>> 1:\n // starting with the rightmost integer, shift each integer to the right\n // one bit, pulling in the bit from the integer to the left as its top\n // most bit (do this for the last 3 integers)\n for(var i = 3; i > 0; --i) {\n out[i] = (x[i] >>> 1) | ((x[i - 1] & 1) << 31);\n }\n // shift the first integer normally\n out[0] = x[0] >>> 1;\n\n // if lsb was not set, then polynomial had a degree of 127 and doesn't\n // need to divided; otherwise, XOR with R to find the remainder; we only\n // need to XOR the first integer since R technically ends w/120 zero bits\n if(lsb) {\n out[0] ^= this._R;\n }\n};\n\nmodes.gcm.prototype.tableMultiply = function(x) {\n // assumes 4-bit tables are used\n var z = [0, 0, 0, 0];\n for(var i = 0; i < 32; ++i) {\n var idx = (i / 8) | 0;\n var x_i = (x[idx] >>> ((7 - (i % 8)) * 4)) & 0xF;\n var ah = this._m[i][x_i];\n z[0] ^= ah[0];\n z[1] ^= ah[1];\n z[2] ^= ah[2];\n z[3] ^= ah[3];\n }\n return z;\n};\n\n/**\n * A continuing version of the GHASH algorithm that operates on a single\n * block. The hash block, last hash value (Ym) and the new block to hash\n * are given.\n *\n * @param h the hash block.\n * @param y the previous value for Ym, use [0, 0, 0, 0] for a new hash.\n * @param x the block to hash.\n *\n * @return the hashed value (Ym).\n */\nmodes.gcm.prototype.ghash = function(h, y, x) {\n y[0] ^= x[0];\n y[1] ^= x[1];\n y[2] ^= x[2];\n y[3] ^= x[3];\n return this.tableMultiply(y);\n //return this.multiply(y, h);\n};\n\n/**\n * Precomputes a table for multiplying against the hash subkey. This\n * mechanism provides a substantial speed increase over multiplication\n * performed without a table. The table-based multiplication this table is\n * for solves X * H by multiplying each component of X by H and then\n * composing the results together using XOR.\n *\n * This function can be used to generate tables with different bit sizes\n * for the components, however, this implementation assumes there are\n * 32 components of X (which is a 16 byte vector), therefore each component\n * takes 4-bits (so the table is constructed with bits=4).\n *\n * @param h the hash subkey.\n * @param bits the bit size for a component.\n */\nmodes.gcm.prototype.generateHashTable = function(h, bits) {\n // TODO: There are further optimizations that would use only the\n // first table M_0 (or some variant) along with a remainder table;\n // this can be explored in the future\n var multiplier = 8 / bits;\n var perInt = 4 * multiplier;\n var size = 16 * multiplier;\n var m = new Array(size);\n for(var i = 0; i < size; ++i) {\n var tmp = [0, 0, 0, 0];\n var idx = (i / perInt) | 0;\n var shft = ((perInt - 1 - (i % perInt)) * bits);\n tmp[idx] = (1 << (bits - 1)) << shft;\n m[i] = this.generateSubHashTable(this.multiply(tmp, h), bits);\n }\n return m;\n};\n\n/**\n * Generates a table for multiplying against the hash subkey for one\n * particular component (out of all possible component values).\n *\n * @param mid the pre-multiplied value for the middle key of the table.\n * @param bits the bit size for a component.\n */\nmodes.gcm.prototype.generateSubHashTable = function(mid, bits) {\n // compute the table quickly by minimizing the number of\n // POW operations -- they only need to be performed for powers of 2,\n // all other entries can be composed from those powers using XOR\n var size = 1 << bits;\n var half = size >>> 1;\n var m = new Array(size);\n m[half] = mid.slice(0);\n var i = half >>> 1;\n while(i > 0) {\n // raise m0[2 * i] and store in m0[i]\n this.pow(m[2 * i], m[i] = []);\n i >>= 1;\n }\n i = 2;\n while(i < half) {\n for(var j = 1; j < i; ++j) {\n var m_i = m[i];\n var m_j = m[j];\n m[i + j] = [\n m_i[0] ^ m_j[0],\n m_i[1] ^ m_j[1],\n m_i[2] ^ m_j[2],\n m_i[3] ^ m_j[3]\n ];\n }\n i *= 2;\n }\n m[0] = [0, 0, 0, 0];\n /* Note: We could avoid storing these by doing composition during multiply\n calculate top half using composition by speed is preferred. */\n for(i = half + 1; i < size; ++i) {\n var c = m[i ^ half];\n m[i] = [mid[0] ^ c[0], mid[1] ^ c[1], mid[2] ^ c[2], mid[3] ^ c[3]];\n }\n return m;\n};\n\n/** Utility functions */\n\nfunction transformIV(iv, blockSize) {\n if(typeof iv === 'string') {\n // convert iv string into byte buffer\n iv = forge.util.createBuffer(iv);\n }\n\n if(forge.util.isArray(iv) && iv.length > 4) {\n // convert iv byte array into byte buffer\n var tmp = iv;\n iv = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n iv.putByte(tmp[i]);\n }\n }\n\n if(iv.length() < blockSize) {\n throw new Error(\n 'Invalid IV length; got ' + iv.length() +\n ' bytes and expected ' + blockSize + ' bytes.');\n }\n\n if(!forge.util.isArray(iv)) {\n // convert iv byte buffer into 32-bit integer array\n var ints = [];\n var blocks = blockSize / 4;\n for(var i = 0; i < blocks; ++i) {\n ints.push(iv.getInt32());\n }\n iv = ints;\n }\n\n return iv;\n}\n\nfunction inc32(block) {\n // increment last 32 bits of block only\n block[block.length - 1] = (block[block.length - 1] + 1) & 0xFFFFFFFF;\n}\n\nfunction from64To32(num) {\n // convert 64-bit number to two BE Int32s\n return [(num / 0x100000000) | 0, num & 0xFFFFFFFF];\n}\n","/**\n * Advanced Encryption Standard (AES) implementation.\n *\n * This implementation is based on the public domain library 'jscrypto' which\n * was written by:\n *\n * Emily Stark (estark@stanford.edu)\n * Mike Hamburg (mhamburg@stanford.edu)\n * Dan Boneh (dabo@cs.stanford.edu)\n *\n * Parts of this code are based on the OpenSSL implementation of AES:\n * http://www.openssl.org\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./cipher');\nrequire('./cipherModes');\nrequire('./util');\n\n/* AES API */\nmodule.exports = forge.aes = forge.aes || {};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('AES-<mode>', key);\n * cipher.start({iv: iv});\n *\n * Creates an AES cipher object to encrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as a string of bytes, an array of bytes,\n * a byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.startEncrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: false,\n mode: mode\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('AES-<mode>', key);\n *\n * Creates an AES cipher object to encrypt data using the given symmetric key.\n *\n * The key may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.createEncryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: false,\n mode: mode\n });\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('AES-<mode>', key);\n * decipher.start({iv: iv});\n *\n * Creates an AES cipher object to decrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as a string of bytes, an array of bytes,\n * a byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.startDecrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: true,\n mode: mode\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('AES-<mode>', key);\n *\n * Creates an AES cipher object to decrypt data using the given symmetric key.\n *\n * The key may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.createDecryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: true,\n mode: mode\n });\n};\n\n/**\n * Creates a new AES cipher algorithm object.\n *\n * @param name the name of the algorithm.\n * @param mode the mode factory function.\n *\n * @return the AES algorithm object.\n */\nforge.aes.Algorithm = function(name, mode) {\n if(!init) {\n initialize();\n }\n var self = this;\n self.name = name;\n self.mode = new mode({\n blockSize: 16,\n cipher: {\n encrypt: function(inBlock, outBlock) {\n return _updateBlock(self._w, inBlock, outBlock, false);\n },\n decrypt: function(inBlock, outBlock) {\n return _updateBlock(self._w, inBlock, outBlock, true);\n }\n }\n });\n self._init = false;\n};\n\n/**\n * Initializes this AES algorithm by expanding its key.\n *\n * @param options the options to use.\n * key the key to use with this algorithm.\n * decrypt true if the algorithm should be initialized for decryption,\n * false for encryption.\n */\nforge.aes.Algorithm.prototype.initialize = function(options) {\n if(this._init) {\n return;\n }\n\n var key = options.key;\n var tmp;\n\n /* Note: The key may be a string of bytes, an array of bytes, a byte\n buffer, or an array of 32-bit integers. If the key is in bytes, then\n it must be 16, 24, or 32 bytes in length. If it is in 32-bit\n integers, it must be 4, 6, or 8 integers long. */\n\n if(typeof key === 'string' &&\n (key.length === 16 || key.length === 24 || key.length === 32)) {\n // convert key string into byte buffer\n key = forge.util.createBuffer(key);\n } else if(forge.util.isArray(key) &&\n (key.length === 16 || key.length === 24 || key.length === 32)) {\n // convert key integer array into byte buffer\n tmp = key;\n key = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n key.putByte(tmp[i]);\n }\n }\n\n // convert key byte buffer into 32-bit integer array\n if(!forge.util.isArray(key)) {\n tmp = key;\n key = [];\n\n // key lengths of 16, 24, 32 bytes allowed\n var len = tmp.length();\n if(len === 16 || len === 24 || len === 32) {\n len = len >>> 2;\n for(var i = 0; i < len; ++i) {\n key.push(tmp.getInt32());\n }\n }\n }\n\n // key must be an array of 32-bit integers by now\n if(!forge.util.isArray(key) ||\n !(key.length === 4 || key.length === 6 || key.length === 8)) {\n throw new Error('Invalid key parameter.');\n }\n\n // encryption operation is always used for these modes\n var mode = this.mode.name;\n var encryptOp = (['CFB', 'OFB', 'CTR', 'GCM'].indexOf(mode) !== -1);\n\n // do key expansion\n this._w = _expandKey(key, options.decrypt && !encryptOp);\n this._init = true;\n};\n\n/**\n * Expands a key. Typically only used for testing.\n *\n * @param key the symmetric key to expand, as an array of 32-bit words.\n * @param decrypt true to expand for decryption, false for encryption.\n *\n * @return the expanded key.\n */\nforge.aes._expandKey = function(key, decrypt) {\n if(!init) {\n initialize();\n }\n return _expandKey(key, decrypt);\n};\n\n/**\n * Updates a single block. Typically only used for testing.\n *\n * @param w the expanded key to use.\n * @param input an array of block-size 32-bit words.\n * @param output an array of block-size 32-bit words.\n * @param decrypt true to decrypt, false to encrypt.\n */\nforge.aes._updateBlock = _updateBlock;\n\n/** Register AES algorithms **/\n\nregisterAlgorithm('AES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('AES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('AES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('AES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('AES-CTR', forge.cipher.modes.ctr);\nregisterAlgorithm('AES-GCM', forge.cipher.modes.gcm);\n\nfunction registerAlgorithm(name, mode) {\n var factory = function() {\n return new forge.aes.Algorithm(name, mode);\n };\n forge.cipher.registerAlgorithm(name, factory);\n}\n\n/** AES implementation **/\n\nvar init = false; // not yet initialized\nvar Nb = 4; // number of words comprising the state (AES = 4)\nvar sbox; // non-linear substitution table used in key expansion\nvar isbox; // inversion of sbox\nvar rcon; // round constant word array\nvar mix; // mix-columns table\nvar imix; // inverse mix-columns table\n\n/**\n * Performs initialization, ie: precomputes tables to optimize for speed.\n *\n * One way to understand how AES works is to imagine that 'addition' and\n * 'multiplication' are interfaces that require certain mathematical\n * properties to hold true (ie: they are associative) but they might have\n * different implementations and produce different kinds of results ...\n * provided that their mathematical properties remain true. AES defines\n * its own methods of addition and multiplication but keeps some important\n * properties the same, ie: associativity and distributivity. The\n * explanation below tries to shed some light on how AES defines addition\n * and multiplication of bytes and 32-bit words in order to perform its\n * encryption and decryption algorithms.\n *\n * The basics:\n *\n * The AES algorithm views bytes as binary representations of polynomials\n * that have either 1 or 0 as the coefficients. It defines the addition\n * or subtraction of two bytes as the XOR operation. It also defines the\n * multiplication of two bytes as a finite field referred to as GF(2^8)\n * (Note: 'GF' means \"Galois Field\" which is a field that contains a finite\n * number of elements so GF(2^8) has 256 elements).\n *\n * This means that any two bytes can be represented as binary polynomials;\n * when they multiplied together and modularly reduced by an irreducible\n * polynomial of the 8th degree, the results are the field GF(2^8). The\n * specific irreducible polynomial that AES uses in hexadecimal is 0x11b.\n * This multiplication is associative with 0x01 as the identity:\n *\n * (b * 0x01 = GF(b, 0x01) = b).\n *\n * The operation GF(b, 0x02) can be performed at the byte level by left\n * shifting b once and then XOR'ing it (to perform the modular reduction)\n * with 0x11b if b is >= 128. Repeated application of the multiplication\n * of 0x02 can be used to implement the multiplication of any two bytes.\n *\n * For instance, multiplying 0x57 and 0x13, denoted as GF(0x57, 0x13), can\n * be performed by factoring 0x13 into 0x01, 0x02, and 0x10. Then these\n * factors can each be multiplied by 0x57 and then added together. To do\n * the multiplication, values for 0x57 multiplied by each of these 3 factors\n * can be precomputed and stored in a table. To add them, the values from\n * the table are XOR'd together.\n *\n * AES also defines addition and multiplication of words, that is 4-byte\n * numbers represented as polynomials of 3 degrees where the coefficients\n * are the values of the bytes.\n *\n * The word [a0, a1, a2, a3] is a polynomial a3x^3 + a2x^2 + a1x + a0.\n *\n * Addition is performed by XOR'ing like powers of x. Multiplication\n * is performed in two steps, the first is an algebriac expansion as\n * you would do normally (where addition is XOR). But the result is\n * a polynomial larger than 3 degrees and thus it cannot fit in a word. So\n * next the result is modularly reduced by an AES-specific polynomial of\n * degree 4 which will always produce a polynomial of less than 4 degrees\n * such that it will fit in a word. In AES, this polynomial is x^4 + 1.\n *\n * The modular product of two polynomials 'a' and 'b' is thus:\n *\n * d(x) = d3x^3 + d2x^2 + d1x + d0\n * with\n * d0 = GF(a0, b0) ^ GF(a3, b1) ^ GF(a2, b2) ^ GF(a1, b3)\n * d1 = GF(a1, b0) ^ GF(a0, b1) ^ GF(a3, b2) ^ GF(a2, b3)\n * d2 = GF(a2, b0) ^ GF(a1, b1) ^ GF(a0, b2) ^ GF(a3, b3)\n * d3 = GF(a3, b0) ^ GF(a2, b1) ^ GF(a1, b2) ^ GF(a0, b3)\n *\n * As a matrix:\n *\n * [d0] = [a0 a3 a2 a1][b0]\n * [d1] [a1 a0 a3 a2][b1]\n * [d2] [a2 a1 a0 a3][b2]\n * [d3] [a3 a2 a1 a0][b3]\n *\n * Special polynomials defined by AES (0x02 == {02}):\n * a(x) = {03}x^3 + {01}x^2 + {01}x + {02}\n * a^-1(x) = {0b}x^3 + {0d}x^2 + {09}x + {0e}.\n *\n * These polynomials are used in the MixColumns() and InverseMixColumns()\n * operations, respectively, to cause each element in the state to affect\n * the output (referred to as diffusing).\n *\n * RotWord() uses: a0 = a1 = a2 = {00} and a3 = {01}, which is the\n * polynomial x3.\n *\n * The ShiftRows() method modifies the last 3 rows in the state (where\n * the state is 4 words with 4 bytes per word) by shifting bytes cyclically.\n * The 1st byte in the second row is moved to the end of the row. The 1st\n * and 2nd bytes in the third row are moved to the end of the row. The 1st,\n * 2nd, and 3rd bytes are moved in the fourth row.\n *\n * More details on how AES arithmetic works:\n *\n * In the polynomial representation of binary numbers, XOR performs addition\n * and subtraction and multiplication in GF(2^8) denoted as GF(a, b)\n * corresponds with the multiplication of polynomials modulo an irreducible\n * polynomial of degree 8. In other words, for AES, GF(a, b) will multiply\n * polynomial 'a' with polynomial 'b' and then do a modular reduction by\n * an AES-specific irreducible polynomial of degree 8.\n *\n * A polynomial is irreducible if its only divisors are one and itself. For\n * the AES algorithm, this irreducible polynomial is:\n *\n * m(x) = x^8 + x^4 + x^3 + x + 1,\n *\n * or {01}{1b} in hexadecimal notation, where each coefficient is a bit:\n * 100011011 = 283 = 0x11b.\n *\n * For example, GF(0x57, 0x83) = 0xc1 because\n *\n * 0x57 = 87 = 01010111 = x^6 + x^4 + x^2 + x + 1\n * 0x85 = 131 = 10000101 = x^7 + x + 1\n *\n * (x^6 + x^4 + x^2 + x + 1) * (x^7 + x + 1)\n * = x^13 + x^11 + x^9 + x^8 + x^7 +\n * x^7 + x^5 + x^3 + x^2 + x +\n * x^6 + x^4 + x^2 + x + 1\n * = x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 = y\n * y modulo (x^8 + x^4 + x^3 + x + 1)\n * = x^7 + x^6 + 1.\n *\n * The modular reduction by m(x) guarantees the result will be a binary\n * polynomial of less than degree 8, so that it can fit in a byte.\n *\n * The operation to multiply a binary polynomial b with x (the polynomial\n * x in binary representation is 00000010) is:\n *\n * b_7x^8 + b_6x^7 + b_5x^6 + b_4x^5 + b_3x^4 + b_2x^3 + b_1x^2 + b_0x^1\n *\n * To get GF(b, x) we must reduce that by m(x). If b_7 is 0 (that is the\n * most significant bit is 0 in b) then the result is already reduced. If\n * it is 1, then we can reduce it by subtracting m(x) via an XOR.\n *\n * It follows that multiplication by x (00000010 or 0x02) can be implemented\n * by performing a left shift followed by a conditional bitwise XOR with\n * 0x1b. This operation on bytes is denoted by xtime(). Multiplication by\n * higher powers of x can be implemented by repeated application of xtime().\n *\n * By adding intermediate results, multiplication by any constant can be\n * implemented. For instance:\n *\n * GF(0x57, 0x13) = 0xfe because:\n *\n * xtime(b) = (b & 128) ? (b << 1 ^ 0x11b) : (b << 1)\n *\n * Note: We XOR with 0x11b instead of 0x1b because in javascript our\n * datatype for b can be larger than 1 byte, so a left shift will not\n * automatically eliminate bits that overflow a byte ... by XOR'ing the\n * overflow bit with 1 (the extra one from 0x11b) we zero it out.\n *\n * GF(0x57, 0x02) = xtime(0x57) = 0xae\n * GF(0x57, 0x04) = xtime(0xae) = 0x47\n * GF(0x57, 0x08) = xtime(0x47) = 0x8e\n * GF(0x57, 0x10) = xtime(0x8e) = 0x07\n *\n * GF(0x57, 0x13) = GF(0x57, (0x01 ^ 0x02 ^ 0x10))\n *\n * And by the distributive property (since XOR is addition and GF() is\n * multiplication):\n *\n * = GF(0x57, 0x01) ^ GF(0x57, 0x02) ^ GF(0x57, 0x10)\n * = 0x57 ^ 0xae ^ 0x07\n * = 0xfe.\n */\nfunction initialize() {\n init = true;\n\n /* Populate the Rcon table. These are the values given by\n [x^(i-1),{00},{00},{00}] where x^(i-1) are powers of x (and x = 0x02)\n in the field of GF(2^8), where i starts at 1.\n\n rcon[0] = [0x00, 0x00, 0x00, 0x00]\n rcon[1] = [0x01, 0x00, 0x00, 0x00] 2^(1-1) = 2^0 = 1\n rcon[2] = [0x02, 0x00, 0x00, 0x00] 2^(2-1) = 2^1 = 2\n ...\n rcon[9] = [0x1B, 0x00, 0x00, 0x00] 2^(9-1) = 2^8 = 0x1B\n rcon[10] = [0x36, 0x00, 0x00, 0x00] 2^(10-1) = 2^9 = 0x36\n\n We only store the first byte because it is the only one used.\n */\n rcon = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36];\n\n // compute xtime table which maps i onto GF(i, 0x02)\n var xtime = new Array(256);\n for(var i = 0; i < 128; ++i) {\n xtime[i] = i << 1;\n xtime[i + 128] = (i + 128) << 1 ^ 0x11B;\n }\n\n // compute all other tables\n sbox = new Array(256);\n isbox = new Array(256);\n mix = new Array(4);\n imix = new Array(4);\n for(var i = 0; i < 4; ++i) {\n mix[i] = new Array(256);\n imix[i] = new Array(256);\n }\n var e = 0, ei = 0, e2, e4, e8, sx, sx2, me, ime;\n for(var i = 0; i < 256; ++i) {\n /* We need to generate the SubBytes() sbox and isbox tables so that\n we can perform byte substitutions. This requires us to traverse\n all of the elements in GF, find their multiplicative inverses,\n and apply to each the following affine transformation:\n\n bi' = bi ^ b(i + 4) mod 8 ^ b(i + 5) mod 8 ^ b(i + 6) mod 8 ^\n b(i + 7) mod 8 ^ ci\n for 0 <= i < 8, where bi is the ith bit of the byte, and ci is the\n ith bit of a byte c with the value {63} or {01100011}.\n\n It is possible to traverse every possible value in a Galois field\n using what is referred to as a 'generator'. There are many\n generators (128 out of 256): 3,5,6,9,11,82 to name a few. To fully\n traverse GF we iterate 255 times, multiplying by our generator\n each time.\n\n On each iteration we can determine the multiplicative inverse for\n the current element.\n\n Suppose there is an element in GF 'e'. For a given generator 'g',\n e = g^x. The multiplicative inverse of e is g^(255 - x). It turns\n out that if use the inverse of a generator as another generator\n it will produce all of the corresponding multiplicative inverses\n at the same time. For this reason, we choose 5 as our inverse\n generator because it only requires 2 multiplies and 1 add and its\n inverse, 82, requires relatively few operations as well.\n\n In order to apply the affine transformation, the multiplicative\n inverse 'ei' of 'e' can be repeatedly XOR'd (4 times) with a\n bit-cycling of 'ei'. To do this 'ei' is first stored in 's' and\n 'x'. Then 's' is left shifted and the high bit of 's' is made the\n low bit. The resulting value is stored in 's'. Then 'x' is XOR'd\n with 's' and stored in 'x'. On each subsequent iteration the same\n operation is performed. When 4 iterations are complete, 'x' is\n XOR'd with 'c' (0x63) and the transformed value is stored in 'x'.\n For example:\n\n s = 01000001\n x = 01000001\n\n iteration 1: s = 10000010, x ^= s\n iteration 2: s = 00000101, x ^= s\n iteration 3: s = 00001010, x ^= s\n iteration 4: s = 00010100, x ^= s\n x ^= 0x63\n\n This can be done with a loop where s = (s << 1) | (s >> 7). However,\n it can also be done by using a single 16-bit (in this case 32-bit)\n number 'sx'. Since XOR is an associative operation, we can set 'sx'\n to 'ei' and then XOR it with 'sx' left-shifted 1,2,3, and 4 times.\n The most significant bits will flow into the high 8 bit positions\n and be correctly XOR'd with one another. All that remains will be\n to cycle the high 8 bits by XOR'ing them all with the lower 8 bits\n afterwards.\n\n At the same time we're populating sbox and isbox we can precompute\n the multiplication we'll need to do to do MixColumns() later.\n */\n\n // apply affine transformation\n sx = ei ^ (ei << 1) ^ (ei << 2) ^ (ei << 3) ^ (ei << 4);\n sx = (sx >> 8) ^ (sx & 255) ^ 0x63;\n\n // update tables\n sbox[e] = sx;\n isbox[sx] = e;\n\n /* Mixing columns is done using matrix multiplication. The columns\n that are to be mixed are each a single word in the current state.\n The state has Nb columns (4 columns). Therefore each column is a\n 4 byte word. So to mix the columns in a single column 'c' where\n its rows are r0, r1, r2, and r3, we use the following matrix\n multiplication:\n\n [2 3 1 1]*[r0,c]=[r'0,c]\n [1 2 3 1] [r1,c] [r'1,c]\n [1 1 2 3] [r2,c] [r'2,c]\n [3 1 1 2] [r3,c] [r'3,c]\n\n r0, r1, r2, and r3 are each 1 byte of one of the words in the\n state (a column). To do matrix multiplication for each mixed\n column c' we multiply the corresponding row from the left matrix\n with the corresponding column from the right matrix. In total, we\n get 4 equations:\n\n r0,c' = 2*r0,c + 3*r1,c + 1*r2,c + 1*r3,c\n r1,c' = 1*r0,c + 2*r1,c + 3*r2,c + 1*r3,c\n r2,c' = 1*r0,c + 1*r1,c + 2*r2,c + 3*r3,c\n r3,c' = 3*r0,c + 1*r1,c + 1*r2,c + 2*r3,c\n\n As usual, the multiplication is as previously defined and the\n addition is XOR. In order to optimize mixing columns we can store\n the multiplication results in tables. If you think of the whole\n column as a word (it might help to visualize by mentally rotating\n the equations above by counterclockwise 90 degrees) then you can\n see that it would be useful to map the multiplications performed on\n each byte (r0, r1, r2, r3) onto a word as well. For instance, we\n could map 2*r0,1*r0,1*r0,3*r0 onto a word by storing 2*r0 in the\n highest 8 bits and 3*r0 in the lowest 8 bits (with the other two\n respectively in the middle). This means that a table can be\n constructed that uses r0 as an index to the word. We can do the\n same with r1, r2, and r3, creating a total of 4 tables.\n\n To construct a full c', we can just look up each byte of c in\n their respective tables and XOR the results together.\n\n Also, to build each table we only have to calculate the word\n for 2,1,1,3 for every byte ... which we can do on each iteration\n of this loop since we will iterate over every byte. After we have\n calculated 2,1,1,3 we can get the results for the other tables\n by cycling the byte at the end to the beginning. For instance\n we can take the result of table 2,1,1,3 and produce table 3,2,1,1\n by moving the right most byte to the left most position just like\n how you can imagine the 3 moved out of 2,1,1,3 and to the front\n to produce 3,2,1,1.\n\n There is another optimization in that the same multiples of\n the current element we need in order to advance our generator\n to the next iteration can be reused in performing the 2,1,1,3\n calculation. We also calculate the inverse mix column tables,\n with e,9,d,b being the inverse of 2,1,1,3.\n\n When we're done, and we need to actually mix columns, the first\n byte of each state word should be put through mix[0] (2,1,1,3),\n the second through mix[1] (3,2,1,1) and so forth. Then they should\n be XOR'd together to produce the fully mixed column.\n */\n\n // calculate mix and imix table values\n sx2 = xtime[sx];\n e2 = xtime[e];\n e4 = xtime[e2];\n e8 = xtime[e4];\n me =\n (sx2 << 24) ^ // 2\n (sx << 16) ^ // 1\n (sx << 8) ^ // 1\n (sx ^ sx2); // 3\n ime =\n (e2 ^ e4 ^ e8) << 24 ^ // E (14)\n (e ^ e8) << 16 ^ // 9\n (e ^ e4 ^ e8) << 8 ^ // D (13)\n (e ^ e2 ^ e8); // B (11)\n // produce each of the mix tables by rotating the 2,1,1,3 value\n for(var n = 0; n < 4; ++n) {\n mix[n][e] = me;\n imix[n][sx] = ime;\n // cycle the right most byte to the left most position\n // ie: 2,1,1,3 becomes 3,2,1,1\n me = me << 24 | me >>> 8;\n ime = ime << 24 | ime >>> 8;\n }\n\n // get next element and inverse\n if(e === 0) {\n // 1 is the inverse of 1\n e = ei = 1;\n } else {\n // e = 2e + 2*2*2*(10e)) = multiply e by 82 (chosen generator)\n // ei = ei + 2*2*ei = multiply ei by 5 (inverse generator)\n e = e2 ^ xtime[xtime[xtime[e2 ^ e8]]];\n ei ^= xtime[xtime[ei]];\n }\n }\n}\n\n/**\n * Generates a key schedule using the AES key expansion algorithm.\n *\n * The AES algorithm takes the Cipher Key, K, and performs a Key Expansion\n * routine to generate a key schedule. The Key Expansion generates a total\n * of Nb*(Nr + 1) words: the algorithm requires an initial set of Nb words,\n * and each of the Nr rounds requires Nb words of key data. The resulting\n * key schedule consists of a linear array of 4-byte words, denoted [wi ],\n * with i in the range 0 <= i < Nb(Nr + 1).\n *\n * KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)\n * AES-128 (Nb=4, Nk=4, Nr=10)\n * AES-192 (Nb=4, Nk=6, Nr=12)\n * AES-256 (Nb=4, Nk=8, Nr=14)\n * Note: Nr=Nk+6.\n *\n * Nb is the number of columns (32-bit words) comprising the State (or\n * number of bytes in a block). For AES, Nb=4.\n *\n * @param key the key to schedule (as an array of 32-bit words).\n * @param decrypt true to modify the key schedule to decrypt, false not to.\n *\n * @return the generated key schedule.\n */\nfunction _expandKey(key, decrypt) {\n // copy the key's words to initialize the key schedule\n var w = key.slice(0);\n\n /* RotWord() will rotate a word, moving the first byte to the last\n byte's position (shifting the other bytes left).\n\n We will be getting the value of Rcon at i / Nk. 'i' will iterate\n from Nk to (Nb * Nr+1). Nk = 4 (4 byte key), Nb = 4 (4 words in\n a block), Nr = Nk + 6 (10). Therefore 'i' will iterate from\n 4 to 44 (exclusive). Each time we iterate 4 times, i / Nk will\n increase by 1. We use a counter iNk to keep track of this.\n */\n\n // go through the rounds expanding the key\n var temp, iNk = 1;\n var Nk = w.length;\n var Nr1 = Nk + 6 + 1;\n var end = Nb * Nr1;\n for(var i = Nk; i < end; ++i) {\n temp = w[i - 1];\n if(i % Nk === 0) {\n // temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk]\n temp =\n sbox[temp >>> 16 & 255] << 24 ^\n sbox[temp >>> 8 & 255] << 16 ^\n sbox[temp & 255] << 8 ^\n sbox[temp >>> 24] ^ (rcon[iNk] << 24);\n iNk++;\n } else if(Nk > 6 && (i % Nk === 4)) {\n // temp = SubWord(temp)\n temp =\n sbox[temp >>> 24] << 24 ^\n sbox[temp >>> 16 & 255] << 16 ^\n sbox[temp >>> 8 & 255] << 8 ^\n sbox[temp & 255];\n }\n w[i] = w[i - Nk] ^ temp;\n }\n\n /* When we are updating a cipher block we always use the code path for\n encryption whether we are decrypting or not (to shorten code and\n simplify the generation of look up tables). However, because there\n are differences in the decryption algorithm, other than just swapping\n in different look up tables, we must transform our key schedule to\n account for these changes:\n\n 1. The decryption algorithm gets its key rounds in reverse order.\n 2. The decryption algorithm adds the round key before mixing columns\n instead of afterwards.\n\n We don't need to modify our key schedule to handle the first case,\n we can just traverse the key schedule in reverse order when decrypting.\n\n The second case requires a little work.\n\n The tables we built for performing rounds will take an input and then\n perform SubBytes() and MixColumns() or, for the decrypt version,\n InvSubBytes() and InvMixColumns(). But the decrypt algorithm requires\n us to AddRoundKey() before InvMixColumns(). This means we'll need to\n apply some transformations to the round key to inverse-mix its columns\n so they'll be correct for moving AddRoundKey() to after the state has\n had its columns inverse-mixed.\n\n To inverse-mix the columns of the state when we're decrypting we use a\n lookup table that will apply InvSubBytes() and InvMixColumns() at the\n same time. However, the round key's bytes are not inverse-substituted\n in the decryption algorithm. To get around this problem, we can first\n substitute the bytes in the round key so that when we apply the\n transformation via the InvSubBytes()+InvMixColumns() table, it will\n undo our substitution leaving us with the original value that we\n want -- and then inverse-mix that value.\n\n This change will correctly alter our key schedule so that we can XOR\n each round key with our already transformed decryption state. This\n allows us to use the same code path as the encryption algorithm.\n\n We make one more change to the decryption key. Since the decryption\n algorithm runs in reverse from the encryption algorithm, we reverse\n the order of the round keys to avoid having to iterate over the key\n schedule backwards when running the encryption algorithm later in\n decryption mode. In addition to reversing the order of the round keys,\n we also swap each round key's 2nd and 4th rows. See the comments\n section where rounds are performed for more details about why this is\n done. These changes are done inline with the other substitution\n described above.\n */\n if(decrypt) {\n var tmp;\n var m0 = imix[0];\n var m1 = imix[1];\n var m2 = imix[2];\n var m3 = imix[3];\n var wnew = w.slice(0);\n end = w.length;\n for(var i = 0, wi = end - Nb; i < end; i += Nb, wi -= Nb) {\n // do not sub the first or last round key (round keys are Nb\n // words) as no column mixing is performed before they are added,\n // but do change the key order\n if(i === 0 || i === (end - Nb)) {\n wnew[i] = w[wi];\n wnew[i + 1] = w[wi + 3];\n wnew[i + 2] = w[wi + 2];\n wnew[i + 3] = w[wi + 1];\n } else {\n // substitute each round key byte because the inverse-mix\n // table will inverse-substitute it (effectively cancel the\n // substitution because round key bytes aren't sub'd in\n // decryption mode) and swap indexes 3 and 1\n for(var n = 0; n < Nb; ++n) {\n tmp = w[wi + n];\n wnew[i + (3&-n)] =\n m0[sbox[tmp >>> 24]] ^\n m1[sbox[tmp >>> 16 & 255]] ^\n m2[sbox[tmp >>> 8 & 255]] ^\n m3[sbox[tmp & 255]];\n }\n }\n }\n w = wnew;\n }\n\n return w;\n}\n\n/**\n * Updates a single block (16 bytes) using AES. The update will either\n * encrypt or decrypt the block.\n *\n * @param w the key schedule.\n * @param input the input block (an array of 32-bit words).\n * @param output the updated output block.\n * @param decrypt true to decrypt the block, false to encrypt it.\n */\nfunction _updateBlock(w, input, output, decrypt) {\n /*\n Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])\n begin\n byte state[4,Nb]\n state = in\n AddRoundKey(state, w[0, Nb-1])\n for round = 1 step 1 to Nr-1\n SubBytes(state)\n ShiftRows(state)\n MixColumns(state)\n AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])\n end for\n SubBytes(state)\n ShiftRows(state)\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n out = state\n end\n\n InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])\n begin\n byte state[4,Nb]\n state = in\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n for round = Nr-1 step -1 downto 1\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])\n InvMixColumns(state)\n end for\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[0, Nb-1])\n out = state\n end\n */\n\n // Encrypt: AddRoundKey(state, w[0, Nb-1])\n // Decrypt: AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n var Nr = w.length / 4 - 1;\n var m0, m1, m2, m3, sub;\n if(decrypt) {\n m0 = imix[0];\n m1 = imix[1];\n m2 = imix[2];\n m3 = imix[3];\n sub = isbox;\n } else {\n m0 = mix[0];\n m1 = mix[1];\n m2 = mix[2];\n m3 = mix[3];\n sub = sbox;\n }\n var a, b, c, d, a2, b2, c2;\n a = input[0] ^ w[0];\n b = input[decrypt ? 3 : 1] ^ w[1];\n c = input[2] ^ w[2];\n d = input[decrypt ? 1 : 3] ^ w[3];\n var i = 3;\n\n /* In order to share code we follow the encryption algorithm when both\n encrypting and decrypting. To account for the changes required in the\n decryption algorithm, we use different lookup tables when decrypting\n and use a modified key schedule to account for the difference in the\n order of transformations applied when performing rounds. We also get\n key rounds in reverse order (relative to encryption). */\n for(var round = 1; round < Nr; ++round) {\n /* As described above, we'll be using table lookups to perform the\n column mixing. Each column is stored as a word in the state (the\n array 'input' has one column as a word at each index). In order to\n mix a column, we perform these transformations on each row in c,\n which is 1 byte in each word. The new column for c0 is c'0:\n\n m0 m1 m2 m3\n r0,c'0 = 2*r0,c0 + 3*r1,c0 + 1*r2,c0 + 1*r3,c0\n r1,c'0 = 1*r0,c0 + 2*r1,c0 + 3*r2,c0 + 1*r3,c0\n r2,c'0 = 1*r0,c0 + 1*r1,c0 + 2*r2,c0 + 3*r3,c0\n r3,c'0 = 3*r0,c0 + 1*r1,c0 + 1*r2,c0 + 2*r3,c0\n\n So using mix tables where c0 is a word with r0 being its upper\n 8 bits and r3 being its lower 8 bits:\n\n m0[c0 >> 24] will yield this word: [2*r0,1*r0,1*r0,3*r0]\n ...\n m3[c0 & 255] will yield this word: [1*r3,1*r3,3*r3,2*r3]\n\n Therefore to mix the columns in each word in the state we\n do the following (& 255 omitted for brevity):\n c'0,r0 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r1 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r2 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r3 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n\n However, before mixing, the algorithm requires us to perform\n ShiftRows(). The ShiftRows() transformation cyclically shifts the\n last 3 rows of the state over different offsets. The first row\n (r = 0) is not shifted.\n\n s'_r,c = s_r,(c + shift(r, Nb) mod Nb\n for 0 < r < 4 and 0 <= c < Nb and\n shift(1, 4) = 1\n shift(2, 4) = 2\n shift(3, 4) = 3.\n\n This causes the first byte in r = 1 to be moved to the end of\n the row, the first 2 bytes in r = 2 to be moved to the end of\n the row, the first 3 bytes in r = 3 to be moved to the end of\n the row:\n\n r1: [c0 c1 c2 c3] => [c1 c2 c3 c0]\n r2: [c0 c1 c2 c3] [c2 c3 c0 c1]\n r3: [c0 c1 c2 c3] [c3 c0 c1 c2]\n\n We can make these substitutions inline with our column mixing to\n generate an updated set of equations to produce each word in the\n state (note the columns have changed positions):\n\n c0 c1 c2 c3 => c0 c1 c2 c3\n c0 c1 c2 c3 c1 c2 c3 c0 (cycled 1 byte)\n c0 c1 c2 c3 c2 c3 c0 c1 (cycled 2 bytes)\n c0 c1 c2 c3 c3 c0 c1 c2 (cycled 3 bytes)\n\n Therefore:\n\n c'0 = 2*r0,c0 + 3*r1,c1 + 1*r2,c2 + 1*r3,c3\n c'0 = 1*r0,c0 + 2*r1,c1 + 3*r2,c2 + 1*r3,c3\n c'0 = 1*r0,c0 + 1*r1,c1 + 2*r2,c2 + 3*r3,c3\n c'0 = 3*r0,c0 + 1*r1,c1 + 1*r2,c2 + 2*r3,c3\n\n c'1 = 2*r0,c1 + 3*r1,c2 + 1*r2,c3 + 1*r3,c0\n c'1 = 1*r0,c1 + 2*r1,c2 + 3*r2,c3 + 1*r3,c0\n c'1 = 1*r0,c1 + 1*r1,c2 + 2*r2,c3 + 3*r3,c0\n c'1 = 3*r0,c1 + 1*r1,c2 + 1*r2,c3 + 2*r3,c0\n\n ... and so forth for c'2 and c'3. The important distinction is\n that the columns are cycling, with c0 being used with the m0\n map when calculating c0, but c1 being used with the m0 map when\n calculating c1 ... and so forth.\n\n When performing the inverse we transform the mirror image and\n skip the bottom row, instead of the top one, and move upwards:\n\n c3 c2 c1 c0 => c0 c3 c2 c1 (cycled 3 bytes) *same as encryption\n c3 c2 c1 c0 c1 c0 c3 c2 (cycled 2 bytes)\n c3 c2 c1 c0 c2 c1 c0 c3 (cycled 1 byte) *same as encryption\n c3 c2 c1 c0 c3 c2 c1 c0\n\n If you compare the resulting matrices for ShiftRows()+MixColumns()\n and for InvShiftRows()+InvMixColumns() the 2nd and 4th columns are\n different (in encrypt mode vs. decrypt mode). So in order to use\n the same code to handle both encryption and decryption, we will\n need to do some mapping.\n\n If in encryption mode we let a=c0, b=c1, c=c2, d=c3, and r<N> be\n a row number in the state, then the resulting matrix in encryption\n mode for applying the above transformations would be:\n\n r1: a b c d\n r2: b c d a\n r3: c d a b\n r4: d a b c\n\n If we did the same in decryption mode we would get:\n\n r1: a d c b\n r2: b a d c\n r3: c b a d\n r4: d c b a\n\n If instead we swap d and b (set b=c3 and d=c1), then we get:\n\n r1: a b c d\n r2: d a b c\n r3: c d a b\n r4: b c d a\n\n Now the 1st and 3rd rows are the same as the encryption matrix. All\n we need to do then to make the mapping exactly the same is to swap\n the 2nd and 4th rows when in decryption mode. To do this without\n having to do it on each iteration, we swapped the 2nd and 4th rows\n in the decryption key schedule. We also have to do the swap above\n when we first pull in the input and when we set the final output. */\n a2 =\n m0[a >>> 24] ^\n m1[b >>> 16 & 255] ^\n m2[c >>> 8 & 255] ^\n m3[d & 255] ^ w[++i];\n b2 =\n m0[b >>> 24] ^\n m1[c >>> 16 & 255] ^\n m2[d >>> 8 & 255] ^\n m3[a & 255] ^ w[++i];\n c2 =\n m0[c >>> 24] ^\n m1[d >>> 16 & 255] ^\n m2[a >>> 8 & 255] ^\n m3[b & 255] ^ w[++i];\n d =\n m0[d >>> 24] ^\n m1[a >>> 16 & 255] ^\n m2[b >>> 8 & 255] ^\n m3[c & 255] ^ w[++i];\n a = a2;\n b = b2;\n c = c2;\n }\n\n /*\n Encrypt:\n SubBytes(state)\n ShiftRows(state)\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n\n Decrypt:\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[0, Nb-1])\n */\n // Note: rows are shifted inline\n output[0] =\n (sub[a >>> 24] << 24) ^\n (sub[b >>> 16 & 255] << 16) ^\n (sub[c >>> 8 & 255] << 8) ^\n (sub[d & 255]) ^ w[++i];\n output[decrypt ? 3 : 1] =\n (sub[b >>> 24] << 24) ^\n (sub[c >>> 16 & 255] << 16) ^\n (sub[d >>> 8 & 255] << 8) ^\n (sub[a & 255]) ^ w[++i];\n output[2] =\n (sub[c >>> 24] << 24) ^\n (sub[d >>> 16 & 255] << 16) ^\n (sub[a >>> 8 & 255] << 8) ^\n (sub[b & 255]) ^ w[++i];\n output[decrypt ? 1 : 3] =\n (sub[d >>> 24] << 24) ^\n (sub[a >>> 16 & 255] << 16) ^\n (sub[b >>> 8 & 255] << 8) ^\n (sub[c & 255]) ^ w[++i];\n}\n\n/**\n * Deprecated. Instead, use:\n *\n * forge.cipher.createCipher('AES-<mode>', key);\n * forge.cipher.createDecipher('AES-<mode>', key);\n *\n * Creates a deprecated AES cipher object. This object's mode will default to\n * CBC (cipher-block-chaining).\n *\n * The key and iv may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param options the options to use.\n * key the symmetric key to use.\n * output the buffer to write to.\n * decrypt true for decryption, false for encryption.\n * mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nfunction _createCipher(options) {\n options = options || {};\n var mode = (options.mode || 'CBC').toUpperCase();\n var algorithm = 'AES-' + mode;\n\n var cipher;\n if(options.decrypt) {\n cipher = forge.cipher.createDecipher(algorithm, options.key);\n } else {\n cipher = forge.cipher.createCipher(algorithm, options.key);\n }\n\n // backwards compatible start API\n var start = cipher.start;\n cipher.start = function(iv, options) {\n // backwards compatibility: support second arg as output buffer\n var output = null;\n if(options instanceof forge.util.ByteBuffer) {\n output = options;\n options = {};\n }\n options = options || {};\n options.output = output;\n options.iv = iv;\n start.call(cipher, options);\n };\n\n return cipher;\n}\n","/**\n * Object IDs for ASN.1.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\nforge.pki = forge.pki || {};\nvar oids = module.exports = forge.pki.oids = forge.oids = forge.oids || {};\n\n// set id to name mapping and name to id mapping\nfunction _IN(id, name) {\n oids[id] = name;\n oids[name] = id;\n}\n// set id to name mapping only\nfunction _I_(id, name) {\n oids[id] = name;\n}\n\n// algorithm OIDs\n_IN('1.2.840.113549.1.1.1', 'rsaEncryption');\n// Note: md2 & md4 not implemented\n//_IN('1.2.840.113549.1.1.2', 'md2WithRSAEncryption');\n//_IN('1.2.840.113549.1.1.3', 'md4WithRSAEncryption');\n_IN('1.2.840.113549.1.1.4', 'md5WithRSAEncryption');\n_IN('1.2.840.113549.1.1.5', 'sha1WithRSAEncryption');\n_IN('1.2.840.113549.1.1.7', 'RSAES-OAEP');\n_IN('1.2.840.113549.1.1.8', 'mgf1');\n_IN('1.2.840.113549.1.1.9', 'pSpecified');\n_IN('1.2.840.113549.1.1.10', 'RSASSA-PSS');\n_IN('1.2.840.113549.1.1.11', 'sha256WithRSAEncryption');\n_IN('1.2.840.113549.1.1.12', 'sha384WithRSAEncryption');\n_IN('1.2.840.113549.1.1.13', 'sha512WithRSAEncryption');\n// Edwards-curve Digital Signature Algorithm (EdDSA) Ed25519\n_IN('1.3.101.112', 'EdDSA25519');\n\n_IN('1.2.840.10040.4.3', 'dsa-with-sha1');\n\n_IN('1.3.14.3.2.7', 'desCBC');\n\n_IN('1.3.14.3.2.26', 'sha1');\n_IN('2.16.840.1.101.3.4.2.1', 'sha256');\n_IN('2.16.840.1.101.3.4.2.2', 'sha384');\n_IN('2.16.840.1.101.3.4.2.3', 'sha512');\n_IN('1.2.840.113549.2.5', 'md5');\n\n// pkcs#7 content types\n_IN('1.2.840.113549.1.7.1', 'data');\n_IN('1.2.840.113549.1.7.2', 'signedData');\n_IN('1.2.840.113549.1.7.3', 'envelopedData');\n_IN('1.2.840.113549.1.7.4', 'signedAndEnvelopedData');\n_IN('1.2.840.113549.1.7.5', 'digestedData');\n_IN('1.2.840.113549.1.7.6', 'encryptedData');\n\n// pkcs#9 oids\n_IN('1.2.840.113549.1.9.1', 'emailAddress');\n_IN('1.2.840.113549.1.9.2', 'unstructuredName');\n_IN('1.2.840.113549.1.9.3', 'contentType');\n_IN('1.2.840.113549.1.9.4', 'messageDigest');\n_IN('1.2.840.113549.1.9.5', 'signingTime');\n_IN('1.2.840.113549.1.9.6', 'counterSignature');\n_IN('1.2.840.113549.1.9.7', 'challengePassword');\n_IN('1.2.840.113549.1.9.8', 'unstructuredAddress');\n_IN('1.2.840.113549.1.9.14', 'extensionRequest');\n\n_IN('1.2.840.113549.1.9.20', 'friendlyName');\n_IN('1.2.840.113549.1.9.21', 'localKeyId');\n_IN('1.2.840.113549.1.9.22.1', 'x509Certificate');\n\n// pkcs#12 safe bags\n_IN('1.2.840.113549.1.12.10.1.1', 'keyBag');\n_IN('1.2.840.113549.1.12.10.1.2', 'pkcs8ShroudedKeyBag');\n_IN('1.2.840.113549.1.12.10.1.3', 'certBag');\n_IN('1.2.840.113549.1.12.10.1.4', 'crlBag');\n_IN('1.2.840.113549.1.12.10.1.5', 'secretBag');\n_IN('1.2.840.113549.1.12.10.1.6', 'safeContentsBag');\n\n// password-based-encryption for pkcs#12\n_IN('1.2.840.113549.1.5.13', 'pkcs5PBES2');\n_IN('1.2.840.113549.1.5.12', 'pkcs5PBKDF2');\n\n_IN('1.2.840.113549.1.12.1.1', 'pbeWithSHAAnd128BitRC4');\n_IN('1.2.840.113549.1.12.1.2', 'pbeWithSHAAnd40BitRC4');\n_IN('1.2.840.113549.1.12.1.3', 'pbeWithSHAAnd3-KeyTripleDES-CBC');\n_IN('1.2.840.113549.1.12.1.4', 'pbeWithSHAAnd2-KeyTripleDES-CBC');\n_IN('1.2.840.113549.1.12.1.5', 'pbeWithSHAAnd128BitRC2-CBC');\n_IN('1.2.840.113549.1.12.1.6', 'pbewithSHAAnd40BitRC2-CBC');\n\n// hmac OIDs\n_IN('1.2.840.113549.2.7', 'hmacWithSHA1');\n_IN('1.2.840.113549.2.8', 'hmacWithSHA224');\n_IN('1.2.840.113549.2.9', 'hmacWithSHA256');\n_IN('1.2.840.113549.2.10', 'hmacWithSHA384');\n_IN('1.2.840.113549.2.11', 'hmacWithSHA512');\n\n// symmetric key algorithm oids\n_IN('1.2.840.113549.3.7', 'des-EDE3-CBC');\n_IN('2.16.840.1.101.3.4.1.2', 'aes128-CBC');\n_IN('2.16.840.1.101.3.4.1.22', 'aes192-CBC');\n_IN('2.16.840.1.101.3.4.1.42', 'aes256-CBC');\n\n// certificate issuer/subject OIDs\n_IN('2.5.4.3', 'commonName');\n_IN('2.5.4.5', 'serialName');\n_IN('2.5.4.6', 'countryName');\n_IN('2.5.4.7', 'localityName');\n_IN('2.5.4.8', 'stateOrProvinceName');\n_IN('2.5.4.9', 'streetAddress');\n_IN('2.5.4.10', 'organizationName');\n_IN('2.5.4.11', 'organizationalUnitName');\n_IN('2.5.4.13', 'description');\n_IN('2.5.4.15', 'businessCategory');\n_IN('2.5.4.17', 'postalCode');\n_IN('1.3.6.1.4.1.311.60.2.1.2', 'jurisdictionOfIncorporationStateOrProvinceName');\n_IN('1.3.6.1.4.1.311.60.2.1.3', 'jurisdictionOfIncorporationCountryName');\n\n// X.509 extension OIDs\n_IN('2.16.840.1.113730.1.1', 'nsCertType');\n_IN('2.16.840.1.113730.1.13', 'nsComment'); // deprecated in theory; still widely used\n_I_('2.5.29.1', 'authorityKeyIdentifier'); // deprecated, use .35\n_I_('2.5.29.2', 'keyAttributes'); // obsolete use .37 or .15\n_I_('2.5.29.3', 'certificatePolicies'); // deprecated, use .32\n_I_('2.5.29.4', 'keyUsageRestriction'); // obsolete use .37 or .15\n_I_('2.5.29.5', 'policyMapping'); // deprecated use .33\n_I_('2.5.29.6', 'subtreesConstraint'); // obsolete use .30\n_I_('2.5.29.7', 'subjectAltName'); // deprecated use .17\n_I_('2.5.29.8', 'issuerAltName'); // deprecated use .18\n_I_('2.5.29.9', 'subjectDirectoryAttributes');\n_I_('2.5.29.10', 'basicConstraints'); // deprecated use .19\n_I_('2.5.29.11', 'nameConstraints'); // deprecated use .30\n_I_('2.5.29.12', 'policyConstraints'); // deprecated use .36\n_I_('2.5.29.13', 'basicConstraints'); // deprecated use .19\n_IN('2.5.29.14', 'subjectKeyIdentifier');\n_IN('2.5.29.15', 'keyUsage');\n_I_('2.5.29.16', 'privateKeyUsagePeriod');\n_IN('2.5.29.17', 'subjectAltName');\n_IN('2.5.29.18', 'issuerAltName');\n_IN('2.5.29.19', 'basicConstraints');\n_I_('2.5.29.20', 'cRLNumber');\n_I_('2.5.29.21', 'cRLReason');\n_I_('2.5.29.22', 'expirationDate');\n_I_('2.5.29.23', 'instructionCode');\n_I_('2.5.29.24', 'invalidityDate');\n_I_('2.5.29.25', 'cRLDistributionPoints'); // deprecated use .31\n_I_('2.5.29.26', 'issuingDistributionPoint'); // deprecated use .28\n_I_('2.5.29.27', 'deltaCRLIndicator');\n_I_('2.5.29.28', 'issuingDistributionPoint');\n_I_('2.5.29.29', 'certificateIssuer');\n_I_('2.5.29.30', 'nameConstraints');\n_IN('2.5.29.31', 'cRLDistributionPoints');\n_IN('2.5.29.32', 'certificatePolicies');\n_I_('2.5.29.33', 'policyMappings');\n_I_('2.5.29.34', 'policyConstraints'); // deprecated use .36\n_IN('2.5.29.35', 'authorityKeyIdentifier');\n_I_('2.5.29.36', 'policyConstraints');\n_IN('2.5.29.37', 'extKeyUsage');\n_I_('2.5.29.46', 'freshestCRL');\n_I_('2.5.29.54', 'inhibitAnyPolicy');\n\n// extKeyUsage purposes\n_IN('1.3.6.1.4.1.11129.2.4.2', 'timestampList');\n_IN('1.3.6.1.5.5.7.1.1', 'authorityInfoAccess');\n_IN('1.3.6.1.5.5.7.3.1', 'serverAuth');\n_IN('1.3.6.1.5.5.7.3.2', 'clientAuth');\n_IN('1.3.6.1.5.5.7.3.3', 'codeSigning');\n_IN('1.3.6.1.5.5.7.3.4', 'emailProtection');\n_IN('1.3.6.1.5.5.7.3.8', 'timeStamping');\n","/**\n * Javascript implementation of Abstract Syntax Notation Number One.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n *\n * An API for storing data using the Abstract Syntax Notation Number One\n * format using DER (Distinguished Encoding Rules) encoding. This encoding is\n * commonly used to store data for PKI, i.e. X.509 Certificates, and this\n * implementation exists for that purpose.\n *\n * Abstract Syntax Notation Number One (ASN.1) is used to define the abstract\n * syntax of information without restricting the way the information is encoded\n * for transmission. It provides a standard that allows for open systems\n * communication. ASN.1 defines the syntax of information data and a number of\n * simple data types as well as a notation for describing them and specifying\n * values for them.\n *\n * The RSA algorithm creates public and private keys that are often stored in\n * X.509 or PKCS#X formats -- which use ASN.1 (encoded in DER format). This\n * class provides the most basic functionality required to store and load DSA\n * keys that are encoded according to ASN.1.\n *\n * The most common binary encodings for ASN.1 are BER (Basic Encoding Rules)\n * and DER (Distinguished Encoding Rules). DER is just a subset of BER that\n * has stricter requirements for how data must be encoded.\n *\n * Each ASN.1 structure has a tag (a byte identifying the ASN.1 structure type)\n * and a byte array for the value of this ASN1 structure which may be data or a\n * list of ASN.1 structures.\n *\n * Each ASN.1 structure using BER is (Tag-Length-Value):\n *\n * | byte 0 | bytes X | bytes Y |\n * |--------|---------|----------\n * | tag | length | value |\n *\n * ASN.1 allows for tags to be of \"High-tag-number form\" which allows a tag to\n * be two or more octets, but that is not supported by this class. A tag is\n * only 1 byte. Bits 1-5 give the tag number (ie the data type within a\n * particular 'class'), 6 indicates whether or not the ASN.1 value is\n * constructed from other ASN.1 values, and bits 7 and 8 give the 'class'. If\n * bits 7 and 8 are both zero, the class is UNIVERSAL. If only bit 7 is set,\n * then the class is APPLICATION. If only bit 8 is set, then the class is\n * CONTEXT_SPECIFIC. If both bits 7 and 8 are set, then the class is PRIVATE.\n * The tag numbers for the data types for the class UNIVERSAL are listed below:\n *\n * UNIVERSAL 0 Reserved for use by the encoding rules\n * UNIVERSAL 1 Boolean type\n * UNIVERSAL 2 Integer type\n * UNIVERSAL 3 Bitstring type\n * UNIVERSAL 4 Octetstring type\n * UNIVERSAL 5 Null type\n * UNIVERSAL 6 Object identifier type\n * UNIVERSAL 7 Object descriptor type\n * UNIVERSAL 8 External type and Instance-of type\n * UNIVERSAL 9 Real type\n * UNIVERSAL 10 Enumerated type\n * UNIVERSAL 11 Embedded-pdv type\n * UNIVERSAL 12 UTF8String type\n * UNIVERSAL 13 Relative object identifier type\n * UNIVERSAL 14-15 Reserved for future editions\n * UNIVERSAL 16 Sequence and Sequence-of types\n * UNIVERSAL 17 Set and Set-of types\n * UNIVERSAL 18-22, 25-30 Character string types\n * UNIVERSAL 23-24 Time types\n *\n * The length of an ASN.1 structure is specified after the tag identifier.\n * There is a definite form and an indefinite form. The indefinite form may\n * be used if the encoding is constructed and not all immediately available.\n * The indefinite form is encoded using a length byte with only the 8th bit\n * set. The end of the constructed object is marked using end-of-contents\n * octets (two zero bytes).\n *\n * The definite form looks like this:\n *\n * The length may take up 1 or more bytes, it depends on the length of the\n * value of the ASN.1 structure. DER encoding requires that if the ASN.1\n * structure has a value that has a length greater than 127, more than 1 byte\n * will be used to store its length, otherwise just one byte will be used.\n * This is strict.\n *\n * In the case that the length of the ASN.1 value is less than 127, 1 octet\n * (byte) is used to store the \"short form\" length. The 8th bit has a value of\n * 0 indicating the length is \"short form\" and not \"long form\" and bits 7-1\n * give the length of the data. (The 8th bit is the left-most, most significant\n * bit: also known as big endian or network format).\n *\n * In the case that the length of the ASN.1 value is greater than 127, 2 to\n * 127 octets (bytes) are used to store the \"long form\" length. The first\n * byte's 8th bit is set to 1 to indicate the length is \"long form.\" Bits 7-1\n * give the number of additional octets. All following octets are in base 256\n * with the most significant digit first (typical big-endian binary unsigned\n * integer storage). So, for instance, if the length of a value was 257, the\n * first byte would be set to:\n *\n * 10000010 = 130 = 0x82.\n *\n * This indicates there are 2 octets (base 256) for the length. The second and\n * third bytes (the octets just mentioned) would store the length in base 256:\n *\n * octet 2: 00000001 = 1 * 256^1 = 256\n * octet 3: 00000001 = 1 * 256^0 = 1\n * total = 257\n *\n * The algorithm for converting a js integer value of 257 to base-256 is:\n *\n * var value = 257;\n * var bytes = [];\n * bytes[0] = (value >>> 8) & 0xFF; // most significant byte first\n * bytes[1] = value & 0xFF; // least significant byte last\n *\n * On the ASN.1 UNIVERSAL Object Identifier (OID) type:\n *\n * An OID can be written like: \"value1.value2.value3...valueN\"\n *\n * The DER encoding rules:\n *\n * The first byte has the value 40 * value1 + value2.\n * The following bytes, if any, encode the remaining values. Each value is\n * encoded in base 128, most significant digit first (big endian), with as\n * few digits as possible, and the most significant bit of each byte set\n * to 1 except the last in each value's encoding. For example: Given the\n * OID \"1.2.840.113549\", its DER encoding is (remember each byte except the\n * last one in each encoding is OR'd with 0x80):\n *\n * byte 1: 40 * 1 + 2 = 42 = 0x2A.\n * bytes 2-3: 128 * 6 + 72 = 840 = 6 72 = 6 72 = 0x0648 = 0x8648\n * bytes 4-6: 16384 * 6 + 128 * 119 + 13 = 6 119 13 = 0x06770D = 0x86F70D\n *\n * The final value is: 0x2A864886F70D.\n * The full OID (including ASN.1 tag and length of 6 bytes) is:\n * 0x06062A864886F70D\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./oids');\n\n/* ASN.1 API */\nvar asn1 = module.exports = forge.asn1 = forge.asn1 || {};\n\n/**\n * ASN.1 classes.\n */\nasn1.Class = {\n UNIVERSAL: 0x00,\n APPLICATION: 0x40,\n CONTEXT_SPECIFIC: 0x80,\n PRIVATE: 0xC0\n};\n\n/**\n * ASN.1 types. Not all types are supported by this implementation, only\n * those necessary to implement a simple PKI are implemented.\n */\nasn1.Type = {\n NONE: 0,\n BOOLEAN: 1,\n INTEGER: 2,\n BITSTRING: 3,\n OCTETSTRING: 4,\n NULL: 5,\n OID: 6,\n ODESC: 7,\n EXTERNAL: 8,\n REAL: 9,\n ENUMERATED: 10,\n EMBEDDED: 11,\n UTF8: 12,\n ROID: 13,\n SEQUENCE: 16,\n SET: 17,\n PRINTABLESTRING: 19,\n IA5STRING: 22,\n UTCTIME: 23,\n GENERALIZEDTIME: 24,\n BMPSTRING: 30\n};\n\n/**\n * Creates a new asn1 object.\n *\n * @param tagClass the tag class for the object.\n * @param type the data type (tag number) for the object.\n * @param constructed true if the asn1 object is in constructed form.\n * @param value the value for the object, if it is not constructed.\n * @param [options] the options to use:\n * [bitStringContents] the plain BIT STRING content including padding\n * byte.\n *\n * @return the asn1 object.\n */\nasn1.create = function(tagClass, type, constructed, value, options) {\n /* An asn1 object has a tagClass, a type, a constructed flag, and a\n value. The value's type depends on the constructed flag. If\n constructed, it will contain a list of other asn1 objects. If not,\n it will contain the ASN.1 value as an array of bytes formatted\n according to the ASN.1 data type. */\n\n // remove undefined values\n if(forge.util.isArray(value)) {\n var tmp = [];\n for(var i = 0; i < value.length; ++i) {\n if(value[i] !== undefined) {\n tmp.push(value[i]);\n }\n }\n value = tmp;\n }\n\n var obj = {\n tagClass: tagClass,\n type: type,\n constructed: constructed,\n composed: constructed || forge.util.isArray(value),\n value: value\n };\n if(options && 'bitStringContents' in options) {\n // TODO: copy byte buffer if it's a buffer not a string\n obj.bitStringContents = options.bitStringContents;\n // TODO: add readonly flag to avoid this overhead\n // save copy to detect changes\n obj.original = asn1.copy(obj);\n }\n return obj;\n};\n\n/**\n * Copies an asn1 object.\n *\n * @param obj the asn1 object.\n * @param [options] copy options:\n * [excludeBitStringContents] true to not copy bitStringContents\n *\n * @return the a copy of the asn1 object.\n */\nasn1.copy = function(obj, options) {\n var copy;\n\n if(forge.util.isArray(obj)) {\n copy = [];\n for(var i = 0; i < obj.length; ++i) {\n copy.push(asn1.copy(obj[i], options));\n }\n return copy;\n }\n\n if(typeof obj === 'string') {\n // TODO: copy byte buffer if it's a buffer not a string\n return obj;\n }\n\n copy = {\n tagClass: obj.tagClass,\n type: obj.type,\n constructed: obj.constructed,\n composed: obj.composed,\n value: asn1.copy(obj.value, options)\n };\n if(options && !options.excludeBitStringContents) {\n // TODO: copy byte buffer if it's a buffer not a string\n copy.bitStringContents = obj.bitStringContents;\n }\n return copy;\n};\n\n/**\n * Compares asn1 objects for equality.\n *\n * Note this function does not run in constant time.\n *\n * @param obj1 the first asn1 object.\n * @param obj2 the second asn1 object.\n * @param [options] compare options:\n * [includeBitStringContents] true to compare bitStringContents\n *\n * @return true if the asn1 objects are equal.\n */\nasn1.equals = function(obj1, obj2, options) {\n if(forge.util.isArray(obj1)) {\n if(!forge.util.isArray(obj2)) {\n return false;\n }\n if(obj1.length !== obj2.length) {\n return false;\n }\n for(var i = 0; i < obj1.length; ++i) {\n if(!asn1.equals(obj1[i], obj2[i])) {\n return false;\n }\n }\n return true;\n }\n\n if(typeof obj1 !== typeof obj2) {\n return false;\n }\n\n if(typeof obj1 === 'string') {\n return obj1 === obj2;\n }\n\n var equal = obj1.tagClass === obj2.tagClass &&\n obj1.type === obj2.type &&\n obj1.constructed === obj2.constructed &&\n obj1.composed === obj2.composed &&\n asn1.equals(obj1.value, obj2.value);\n if(options && options.includeBitStringContents) {\n equal = equal && (obj1.bitStringContents === obj2.bitStringContents);\n }\n\n return equal;\n};\n\n/**\n * Gets the length of a BER-encoded ASN.1 value.\n *\n * In case the length is not specified, undefined is returned.\n *\n * @param b the BER-encoded ASN.1 byte buffer, starting with the first\n * length byte.\n *\n * @return the length of the BER-encoded ASN.1 value or undefined.\n */\nasn1.getBerValueLength = function(b) {\n // TODO: move this function and related DER/BER functions to a der.js\n // file; better abstract ASN.1 away from der/ber.\n var b2 = b.getByte();\n if(b2 === 0x80) {\n return undefined;\n }\n\n // see if the length is \"short form\" or \"long form\" (bit 8 set)\n var length;\n var longForm = b2 & 0x80;\n if(!longForm) {\n // length is just the first byte\n length = b2;\n } else {\n // the number of bytes the length is specified in bits 7 through 1\n // and each length byte is in big-endian base-256\n length = b.getInt((b2 & 0x7F) << 3);\n }\n return length;\n};\n\n/**\n * Check if the byte buffer has enough bytes. Throws an Error if not.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the bytes remaining in the current parsing state.\n * @param n the number of bytes the buffer must have.\n */\nfunction _checkBufferLength(bytes, remaining, n) {\n if(n > remaining) {\n var error = new Error('Too few bytes to parse DER.');\n error.available = bytes.length();\n error.remaining = remaining;\n error.requested = n;\n throw error;\n }\n}\n\n/**\n * Gets the length of a BER-encoded ASN.1 value.\n *\n * In case the length is not specified, undefined is returned.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the bytes remaining in the current parsing state.\n *\n * @return the length of the BER-encoded ASN.1 value or undefined.\n */\nvar _getValueLength = function(bytes, remaining) {\n // TODO: move this function and related DER/BER functions to a der.js\n // file; better abstract ASN.1 away from der/ber.\n // fromDer already checked that this byte exists\n var b2 = bytes.getByte();\n remaining--;\n if(b2 === 0x80) {\n return undefined;\n }\n\n // see if the length is \"short form\" or \"long form\" (bit 8 set)\n var length;\n var longForm = b2 & 0x80;\n if(!longForm) {\n // length is just the first byte\n length = b2;\n } else {\n // the number of bytes the length is specified in bits 7 through 1\n // and each length byte is in big-endian base-256\n var longFormBytes = b2 & 0x7F;\n _checkBufferLength(bytes, remaining, longFormBytes);\n length = bytes.getInt(longFormBytes << 3);\n }\n // FIXME: this will only happen for 32 bit getInt with high bit set\n if(length < 0) {\n throw new Error('Negative length: ' + length);\n }\n return length;\n};\n\n/**\n * Parses an asn1 object from a byte buffer in DER format.\n *\n * @param bytes the byte buffer to parse from.\n * @param [strict] true to be strict when checking value lengths, false to\n * allow truncated values (default: true).\n * @param [options] object with options or boolean strict flag\n * [strict] true to be strict when checking value lengths, false to\n * allow truncated values (default: true).\n * [decodeBitStrings] true to attempt to decode the content of\n * BIT STRINGs (not OCTET STRINGs) using strict mode. Note that\n * without schema support to understand the data context this can\n * erroneously decode values that happen to be valid ASN.1. This\n * flag will be deprecated or removed as soon as schema support is\n * available. (default: true)\n *\n * @return the parsed asn1 object.\n */\nasn1.fromDer = function(bytes, options) {\n if(options === undefined) {\n options = {\n strict: true,\n decodeBitStrings: true\n };\n }\n if(typeof options === 'boolean') {\n options = {\n strict: options,\n decodeBitStrings: true\n };\n }\n if(!('strict' in options)) {\n options.strict = true;\n }\n if(!('decodeBitStrings' in options)) {\n options.decodeBitStrings = true;\n }\n\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n return _fromDer(bytes, bytes.length(), 0, options);\n};\n\n/**\n * Internal function to parse an asn1 object from a byte buffer in DER format.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the number of bytes remaining for this chunk.\n * @param depth the current parsing depth.\n * @param options object with same options as fromDer().\n *\n * @return the parsed asn1 object.\n */\nfunction _fromDer(bytes, remaining, depth, options) {\n // temporary storage for consumption calculations\n var start;\n\n // minimum length for ASN.1 DER structure is 2\n _checkBufferLength(bytes, remaining, 2);\n\n // get the first byte\n var b1 = bytes.getByte();\n // consumed one byte\n remaining--;\n\n // get the tag class\n var tagClass = (b1 & 0xC0);\n\n // get the type (bits 1-5)\n var type = b1 & 0x1F;\n\n // get the variable value length and adjust remaining bytes\n start = bytes.length();\n var length = _getValueLength(bytes, remaining);\n remaining -= start - bytes.length();\n\n // ensure there are enough bytes to get the value\n if(length !== undefined && length > remaining) {\n if(options.strict) {\n var error = new Error('Too few bytes to read ASN.1 value.');\n error.available = bytes.length();\n error.remaining = remaining;\n error.requested = length;\n throw error;\n }\n // Note: be lenient with truncated values and use remaining state bytes\n length = remaining;\n }\n\n // value storage\n var value;\n // possible BIT STRING contents storage\n var bitStringContents;\n\n // constructed flag is bit 6 (32 = 0x20) of the first byte\n var constructed = ((b1 & 0x20) === 0x20);\n if(constructed) {\n // parse child asn1 objects from the value\n value = [];\n if(length === undefined) {\n // asn1 object of indefinite length, read until end tag\n for(;;) {\n _checkBufferLength(bytes, remaining, 2);\n if(bytes.bytes(2) === String.fromCharCode(0, 0)) {\n bytes.getBytes(2);\n remaining -= 2;\n break;\n }\n start = bytes.length();\n value.push(_fromDer(bytes, remaining, depth + 1, options));\n remaining -= start - bytes.length();\n }\n } else {\n // parsing asn1 object of definite length\n while(length > 0) {\n start = bytes.length();\n value.push(_fromDer(bytes, length, depth + 1, options));\n remaining -= start - bytes.length();\n length -= start - bytes.length();\n }\n }\n }\n\n // if a BIT STRING, save the contents including padding\n if(value === undefined && tagClass === asn1.Class.UNIVERSAL &&\n type === asn1.Type.BITSTRING) {\n bitStringContents = bytes.bytes(length);\n }\n\n // determine if a non-constructed value should be decoded as a composed\n // value that contains other ASN.1 objects. BIT STRINGs (and OCTET STRINGs)\n // can be used this way.\n if(value === undefined && options.decodeBitStrings &&\n tagClass === asn1.Class.UNIVERSAL &&\n // FIXME: OCTET STRINGs not yet supported here\n // .. other parts of forge expect to decode OCTET STRINGs manually\n (type === asn1.Type.BITSTRING /*|| type === asn1.Type.OCTETSTRING*/) &&\n length > 1) {\n // save read position\n var savedRead = bytes.read;\n var savedRemaining = remaining;\n var unused = 0;\n if(type === asn1.Type.BITSTRING) {\n /* The first octet gives the number of bits by which the length of the\n bit string is less than the next multiple of eight (this is called\n the \"number of unused bits\").\n\n The second and following octets give the value of the bit string\n converted to an octet string. */\n _checkBufferLength(bytes, remaining, 1);\n unused = bytes.getByte();\n remaining--;\n }\n // if all bits are used, maybe the BIT/OCTET STRING holds ASN.1 objs\n if(unused === 0) {\n try {\n // attempt to parse child asn1 object from the value\n // (stored in array to signal composed value)\n start = bytes.length();\n var subOptions = {\n // enforce strict mode to avoid parsing ASN.1 from plain data\n verbose: options.verbose,\n strict: true,\n decodeBitStrings: true\n };\n var composed = _fromDer(bytes, remaining, depth + 1, subOptions);\n var used = start - bytes.length();\n remaining -= used;\n if(type == asn1.Type.BITSTRING) {\n used++;\n }\n\n // if the data all decoded and the class indicates UNIVERSAL or\n // CONTEXT_SPECIFIC then assume we've got an encapsulated ASN.1 object\n var tc = composed.tagClass;\n if(used === length &&\n (tc === asn1.Class.UNIVERSAL || tc === asn1.Class.CONTEXT_SPECIFIC)) {\n value = [composed];\n }\n } catch(ex) {\n }\n }\n if(value === undefined) {\n // restore read position\n bytes.read = savedRead;\n remaining = savedRemaining;\n }\n }\n\n if(value === undefined) {\n // asn1 not constructed or composed, get raw value\n // TODO: do DER to OID conversion and vice-versa in .toDer?\n\n if(length === undefined) {\n if(options.strict) {\n throw new Error('Non-constructed ASN.1 object of indefinite length.');\n }\n // be lenient and use remaining state bytes\n length = remaining;\n }\n\n if(type === asn1.Type.BMPSTRING) {\n value = '';\n for(; length > 0; length -= 2) {\n _checkBufferLength(bytes, remaining, 2);\n value += String.fromCharCode(bytes.getInt16());\n remaining -= 2;\n }\n } else {\n value = bytes.getBytes(length);\n }\n }\n\n // add BIT STRING contents if available\n var asn1Options = bitStringContents === undefined ? null : {\n bitStringContents: bitStringContents\n };\n\n // create and return asn1 object\n return asn1.create(tagClass, type, constructed, value, asn1Options);\n}\n\n/**\n * Converts the given asn1 object to a buffer of bytes in DER format.\n *\n * @param asn1 the asn1 object to convert to bytes.\n *\n * @return the buffer of bytes.\n */\nasn1.toDer = function(obj) {\n var bytes = forge.util.createBuffer();\n\n // build the first byte\n var b1 = obj.tagClass | obj.type;\n\n // for storing the ASN.1 value\n var value = forge.util.createBuffer();\n\n // use BIT STRING contents if available and data not changed\n var useBitStringContents = false;\n if('bitStringContents' in obj) {\n useBitStringContents = true;\n if(obj.original) {\n useBitStringContents = asn1.equals(obj, obj.original);\n }\n }\n\n if(useBitStringContents) {\n value.putBytes(obj.bitStringContents);\n } else if(obj.composed) {\n // if composed, use each child asn1 object's DER bytes as value\n // turn on 6th bit (0x20 = 32) to indicate asn1 is constructed\n // from other asn1 objects\n if(obj.constructed) {\n b1 |= 0x20;\n } else {\n // type is a bit string, add unused bits of 0x00\n value.putByte(0x00);\n }\n\n // add all of the child DER bytes together\n for(var i = 0; i < obj.value.length; ++i) {\n if(obj.value[i] !== undefined) {\n value.putBuffer(asn1.toDer(obj.value[i]));\n }\n }\n } else {\n // use asn1.value directly\n if(obj.type === asn1.Type.BMPSTRING) {\n for(var i = 0; i < obj.value.length; ++i) {\n value.putInt16(obj.value.charCodeAt(i));\n }\n } else {\n // ensure integer is minimally-encoded\n // TODO: should all leading bytes be stripped vs just one?\n // .. ex '00 00 01' => '01'?\n if(obj.type === asn1.Type.INTEGER &&\n obj.value.length > 1 &&\n // leading 0x00 for positive integer\n ((obj.value.charCodeAt(0) === 0 &&\n (obj.value.charCodeAt(1) & 0x80) === 0) ||\n // leading 0xFF for negative integer\n (obj.value.charCodeAt(0) === 0xFF &&\n (obj.value.charCodeAt(1) & 0x80) === 0x80))) {\n value.putBytes(obj.value.substr(1));\n } else {\n value.putBytes(obj.value);\n }\n }\n }\n\n // add tag byte\n bytes.putByte(b1);\n\n // use \"short form\" encoding\n if(value.length() <= 127) {\n // one byte describes the length\n // bit 8 = 0 and bits 7-1 = length\n bytes.putByte(value.length() & 0x7F);\n } else {\n // use \"long form\" encoding\n // 2 to 127 bytes describe the length\n // first byte: bit 8 = 1 and bits 7-1 = # of additional bytes\n // other bytes: length in base 256, big-endian\n var len = value.length();\n var lenBytes = '';\n do {\n lenBytes += String.fromCharCode(len & 0xFF);\n len = len >>> 8;\n } while(len > 0);\n\n // set first byte to # bytes used to store the length and turn on\n // bit 8 to indicate long-form length is used\n bytes.putByte(lenBytes.length | 0x80);\n\n // concatenate length bytes in reverse since they were generated\n // little endian and we need big endian\n for(var i = lenBytes.length - 1; i >= 0; --i) {\n bytes.putByte(lenBytes.charCodeAt(i));\n }\n }\n\n // concatenate value bytes\n bytes.putBuffer(value);\n return bytes;\n};\n\n/**\n * Converts an OID dot-separated string to a byte buffer. The byte buffer\n * contains only the DER-encoded value, not any tag or length bytes.\n *\n * @param oid the OID dot-separated string.\n *\n * @return the byte buffer.\n */\nasn1.oidToDer = function(oid) {\n // split OID into individual values\n var values = oid.split('.');\n var bytes = forge.util.createBuffer();\n\n // first byte is 40 * value1 + value2\n bytes.putByte(40 * parseInt(values[0], 10) + parseInt(values[1], 10));\n // other bytes are each value in base 128 with 8th bit set except for\n // the last byte for each value\n var last, valueBytes, value, b;\n for(var i = 2; i < values.length; ++i) {\n // produce value bytes in reverse because we don't know how many\n // bytes it will take to store the value\n last = true;\n valueBytes = [];\n value = parseInt(values[i], 10);\n do {\n b = value & 0x7F;\n value = value >>> 7;\n // if value is not last, then turn on 8th bit\n if(!last) {\n b |= 0x80;\n }\n valueBytes.push(b);\n last = false;\n } while(value > 0);\n\n // add value bytes in reverse (needs to be in big endian)\n for(var n = valueBytes.length - 1; n >= 0; --n) {\n bytes.putByte(valueBytes[n]);\n }\n }\n\n return bytes;\n};\n\n/**\n * Converts a DER-encoded byte buffer to an OID dot-separated string. The\n * byte buffer should contain only the DER-encoded value, not any tag or\n * length bytes.\n *\n * @param bytes the byte buffer.\n *\n * @return the OID dot-separated string.\n */\nasn1.derToOid = function(bytes) {\n var oid;\n\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n // first byte is 40 * value1 + value2\n var b = bytes.getByte();\n oid = Math.floor(b / 40) + '.' + (b % 40);\n\n // other bytes are each value in base 128 with 8th bit set except for\n // the last byte for each value\n var value = 0;\n while(bytes.length() > 0) {\n b = bytes.getByte();\n value = value << 7;\n // not the last byte for the value\n if(b & 0x80) {\n value += b & 0x7F;\n } else {\n // last byte\n oid += '.' + (value + b);\n value = 0;\n }\n }\n\n return oid;\n};\n\n/**\n * Converts a UTCTime value to a date.\n *\n * Note: GeneralizedTime has 4 digits for the year and is used for X.509\n * dates past 2049. Parsing that structure hasn't been implemented yet.\n *\n * @param utc the UTCTime value to convert.\n *\n * @return the date.\n */\nasn1.utcTimeToDate = function(utc) {\n /* The following formats can be used:\n\n YYMMDDhhmmZ\n YYMMDDhhmm+hh'mm'\n YYMMDDhhmm-hh'mm'\n YYMMDDhhmmssZ\n YYMMDDhhmmss+hh'mm'\n YYMMDDhhmmss-hh'mm'\n\n Where:\n\n YY is the least significant two digits of the year\n MM is the month (01 to 12)\n DD is the day (01 to 31)\n hh is the hour (00 to 23)\n mm are the minutes (00 to 59)\n ss are the seconds (00 to 59)\n Z indicates that local time is GMT, + indicates that local time is\n later than GMT, and - indicates that local time is earlier than GMT\n hh' is the absolute value of the offset from GMT in hours\n mm' is the absolute value of the offset from GMT in minutes */\n var date = new Date();\n\n // if YY >= 50 use 19xx, if YY < 50 use 20xx\n var year = parseInt(utc.substr(0, 2), 10);\n year = (year >= 50) ? 1900 + year : 2000 + year;\n var MM = parseInt(utc.substr(2, 2), 10) - 1; // use 0-11 for month\n var DD = parseInt(utc.substr(4, 2), 10);\n var hh = parseInt(utc.substr(6, 2), 10);\n var mm = parseInt(utc.substr(8, 2), 10);\n var ss = 0;\n\n // not just YYMMDDhhmmZ\n if(utc.length > 11) {\n // get character after minutes\n var c = utc.charAt(10);\n var end = 10;\n\n // see if seconds are present\n if(c !== '+' && c !== '-') {\n // get seconds\n ss = parseInt(utc.substr(10, 2), 10);\n end += 2;\n }\n }\n\n // update date\n date.setUTCFullYear(year, MM, DD);\n date.setUTCHours(hh, mm, ss, 0);\n\n if(end) {\n // get +/- after end of time\n c = utc.charAt(end);\n if(c === '+' || c === '-') {\n // get hours+minutes offset\n var hhoffset = parseInt(utc.substr(end + 1, 2), 10);\n var mmoffset = parseInt(utc.substr(end + 4, 2), 10);\n\n // calculate offset in milliseconds\n var offset = hhoffset * 60 + mmoffset;\n offset *= 60000;\n\n // apply offset\n if(c === '+') {\n date.setTime(+date - offset);\n } else {\n date.setTime(+date + offset);\n }\n }\n }\n\n return date;\n};\n\n/**\n * Converts a GeneralizedTime value to a date.\n *\n * @param gentime the GeneralizedTime value to convert.\n *\n * @return the date.\n */\nasn1.generalizedTimeToDate = function(gentime) {\n /* The following formats can be used:\n\n YYYYMMDDHHMMSS\n YYYYMMDDHHMMSS.fff\n YYYYMMDDHHMMSSZ\n YYYYMMDDHHMMSS.fffZ\n YYYYMMDDHHMMSS+hh'mm'\n YYYYMMDDHHMMSS.fff+hh'mm'\n YYYYMMDDHHMMSS-hh'mm'\n YYYYMMDDHHMMSS.fff-hh'mm'\n\n Where:\n\n YYYY is the year\n MM is the month (01 to 12)\n DD is the day (01 to 31)\n hh is the hour (00 to 23)\n mm are the minutes (00 to 59)\n ss are the seconds (00 to 59)\n .fff is the second fraction, accurate to three decimal places\n Z indicates that local time is GMT, + indicates that local time is\n later than GMT, and - indicates that local time is earlier than GMT\n hh' is the absolute value of the offset from GMT in hours\n mm' is the absolute value of the offset from GMT in minutes */\n var date = new Date();\n\n var YYYY = parseInt(gentime.substr(0, 4), 10);\n var MM = parseInt(gentime.substr(4, 2), 10) - 1; // use 0-11 for month\n var DD = parseInt(gentime.substr(6, 2), 10);\n var hh = parseInt(gentime.substr(8, 2), 10);\n var mm = parseInt(gentime.substr(10, 2), 10);\n var ss = parseInt(gentime.substr(12, 2), 10);\n var fff = 0;\n var offset = 0;\n var isUTC = false;\n\n if(gentime.charAt(gentime.length - 1) === 'Z') {\n isUTC = true;\n }\n\n var end = gentime.length - 5, c = gentime.charAt(end);\n if(c === '+' || c === '-') {\n // get hours+minutes offset\n var hhoffset = parseInt(gentime.substr(end + 1, 2), 10);\n var mmoffset = parseInt(gentime.substr(end + 4, 2), 10);\n\n // calculate offset in milliseconds\n offset = hhoffset * 60 + mmoffset;\n offset *= 60000;\n\n // apply offset\n if(c === '+') {\n offset *= -1;\n }\n\n isUTC = true;\n }\n\n // check for second fraction\n if(gentime.charAt(14) === '.') {\n fff = parseFloat(gentime.substr(14), 10) * 1000;\n }\n\n if(isUTC) {\n date.setUTCFullYear(YYYY, MM, DD);\n date.setUTCHours(hh, mm, ss, fff);\n\n // apply offset\n date.setTime(+date + offset);\n } else {\n date.setFullYear(YYYY, MM, DD);\n date.setHours(hh, mm, ss, fff);\n }\n\n return date;\n};\n\n/**\n * Converts a date to a UTCTime value.\n *\n * Note: GeneralizedTime has 4 digits for the year and is used for X.509\n * dates past 2049. Converting to a GeneralizedTime hasn't been\n * implemented yet.\n *\n * @param date the date to convert.\n *\n * @return the UTCTime value.\n */\nasn1.dateToUtcTime = function(date) {\n // TODO: validate; currently assumes proper format\n if(typeof date === 'string') {\n return date;\n }\n\n var rval = '';\n\n // create format YYMMDDhhmmssZ\n var format = [];\n format.push(('' + date.getUTCFullYear()).substr(2));\n format.push('' + (date.getUTCMonth() + 1));\n format.push('' + date.getUTCDate());\n format.push('' + date.getUTCHours());\n format.push('' + date.getUTCMinutes());\n format.push('' + date.getUTCSeconds());\n\n // ensure 2 digits are used for each format entry\n for(var i = 0; i < format.length; ++i) {\n if(format[i].length < 2) {\n rval += '0';\n }\n rval += format[i];\n }\n rval += 'Z';\n\n return rval;\n};\n\n/**\n * Converts a date to a GeneralizedTime value.\n *\n * @param date the date to convert.\n *\n * @return the GeneralizedTime value as a string.\n */\nasn1.dateToGeneralizedTime = function(date) {\n // TODO: validate; currently assumes proper format\n if(typeof date === 'string') {\n return date;\n }\n\n var rval = '';\n\n // create format YYYYMMDDHHMMSSZ\n var format = [];\n format.push('' + date.getUTCFullYear());\n format.push('' + (date.getUTCMonth() + 1));\n format.push('' + date.getUTCDate());\n format.push('' + date.getUTCHours());\n format.push('' + date.getUTCMinutes());\n format.push('' + date.getUTCSeconds());\n\n // ensure 2 digits are used for each format entry\n for(var i = 0; i < format.length; ++i) {\n if(format[i].length < 2) {\n rval += '0';\n }\n rval += format[i];\n }\n rval += 'Z';\n\n return rval;\n};\n\n/**\n * Converts a javascript integer to a DER-encoded byte buffer to be used\n * as the value for an INTEGER type.\n *\n * @param x the integer.\n *\n * @return the byte buffer.\n */\nasn1.integerToDer = function(x) {\n var rval = forge.util.createBuffer();\n if(x >= -0x80 && x < 0x80) {\n return rval.putSignedInt(x, 8);\n }\n if(x >= -0x8000 && x < 0x8000) {\n return rval.putSignedInt(x, 16);\n }\n if(x >= -0x800000 && x < 0x800000) {\n return rval.putSignedInt(x, 24);\n }\n if(x >= -0x80000000 && x < 0x80000000) {\n return rval.putSignedInt(x, 32);\n }\n var error = new Error('Integer too large; max is 32-bits.');\n error.integer = x;\n throw error;\n};\n\n/**\n * Converts a DER-encoded byte buffer to a javascript integer. This is\n * typically used to decode the value of an INTEGER type.\n *\n * @param bytes the byte buffer.\n *\n * @return the integer.\n */\nasn1.derToInteger = function(bytes) {\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n var n = bytes.length() * 8;\n if(n > 32) {\n throw new Error('Integer too large; max is 32-bits.');\n }\n return bytes.getSignedInt(n);\n};\n\n/**\n * Validates that the given ASN.1 object is at least a super set of the\n * given ASN.1 structure. Only tag classes and types are checked. An\n * optional map may also be provided to capture ASN.1 values while the\n * structure is checked.\n *\n * To capture an ASN.1 value, set an object in the validator's 'capture'\n * parameter to the key to use in the capture map. To capture the full\n * ASN.1 object, specify 'captureAsn1'. To capture BIT STRING bytes, including\n * the leading unused bits counter byte, specify 'captureBitStringContents'.\n * To capture BIT STRING bytes, without the leading unused bits counter byte,\n * specify 'captureBitStringValue'.\n *\n * Objects in the validator may set a field 'optional' to true to indicate\n * that it isn't necessary to pass validation.\n *\n * @param obj the ASN.1 object to validate.\n * @param v the ASN.1 structure validator.\n * @param capture an optional map to capture values in.\n * @param errors an optional array for storing validation errors.\n *\n * @return true on success, false on failure.\n */\nasn1.validate = function(obj, v, capture, errors) {\n var rval = false;\n\n // ensure tag class and type are the same if specified\n if((obj.tagClass === v.tagClass || typeof(v.tagClass) === 'undefined') &&\n (obj.type === v.type || typeof(v.type) === 'undefined')) {\n // ensure constructed flag is the same if specified\n if(obj.constructed === v.constructed ||\n typeof(v.constructed) === 'undefined') {\n rval = true;\n\n // handle sub values\n if(v.value && forge.util.isArray(v.value)) {\n var j = 0;\n for(var i = 0; rval && i < v.value.length; ++i) {\n rval = v.value[i].optional || false;\n if(obj.value[j]) {\n rval = asn1.validate(obj.value[j], v.value[i], capture, errors);\n if(rval) {\n ++j;\n } else if(v.value[i].optional) {\n rval = true;\n }\n }\n if(!rval && errors) {\n errors.push(\n '[' + v.name + '] ' +\n 'Tag class \"' + v.tagClass + '\", type \"' +\n v.type + '\" expected value length \"' +\n v.value.length + '\", got \"' +\n obj.value.length + '\"');\n }\n }\n }\n\n if(rval && capture) {\n if(v.capture) {\n capture[v.capture] = obj.value;\n }\n if(v.captureAsn1) {\n capture[v.captureAsn1] = obj;\n }\n if(v.captureBitStringContents && 'bitStringContents' in obj) {\n capture[v.captureBitStringContents] = obj.bitStringContents;\n }\n if(v.captureBitStringValue && 'bitStringContents' in obj) {\n var value;\n if(obj.bitStringContents.length < 2) {\n capture[v.captureBitStringValue] = '';\n } else {\n // FIXME: support unused bits with data shifting\n var unused = obj.bitStringContents.charCodeAt(0);\n if(unused !== 0) {\n throw new Error(\n 'captureBitStringValue only supported for zero unused bits');\n }\n capture[v.captureBitStringValue] = obj.bitStringContents.slice(1);\n }\n }\n }\n } else if(errors) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected constructed \"' + v.constructed + '\", got \"' +\n obj.constructed + '\"');\n }\n } else if(errors) {\n if(obj.tagClass !== v.tagClass) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected tag class \"' + v.tagClass + '\", got \"' +\n obj.tagClass + '\"');\n }\n if(obj.type !== v.type) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected type \"' + v.type + '\", got \"' + obj.type + '\"');\n }\n }\n return rval;\n};\n\n// regex for testing for non-latin characters\nvar _nonLatinRegex = /[^\\\\u0000-\\\\u00ff]/;\n\n/**\n * Pretty prints an ASN.1 object to a string.\n *\n * @param obj the object to write out.\n * @param level the level in the tree.\n * @param indentation the indentation to use.\n *\n * @return the string.\n */\nasn1.prettyPrint = function(obj, level, indentation) {\n var rval = '';\n\n // set default level and indentation\n level = level || 0;\n indentation = indentation || 2;\n\n // start new line for deep levels\n if(level > 0) {\n rval += '\\n';\n }\n\n // create indent\n var indent = '';\n for(var i = 0; i < level * indentation; ++i) {\n indent += ' ';\n }\n\n // print class:type\n rval += indent + 'Tag: ';\n switch(obj.tagClass) {\n case asn1.Class.UNIVERSAL:\n rval += 'Universal:';\n break;\n case asn1.Class.APPLICATION:\n rval += 'Application:';\n break;\n case asn1.Class.CONTEXT_SPECIFIC:\n rval += 'Context-Specific:';\n break;\n case asn1.Class.PRIVATE:\n rval += 'Private:';\n break;\n }\n\n if(obj.tagClass === asn1.Class.UNIVERSAL) {\n rval += obj.type;\n\n // known types\n switch(obj.type) {\n case asn1.Type.NONE:\n rval += ' (None)';\n break;\n case asn1.Type.BOOLEAN:\n rval += ' (Boolean)';\n break;\n case asn1.Type.INTEGER:\n rval += ' (Integer)';\n break;\n case asn1.Type.BITSTRING:\n rval += ' (Bit string)';\n break;\n case asn1.Type.OCTETSTRING:\n rval += ' (Octet string)';\n break;\n case asn1.Type.NULL:\n rval += ' (Null)';\n break;\n case asn1.Type.OID:\n rval += ' (Object Identifier)';\n break;\n case asn1.Type.ODESC:\n rval += ' (Object Descriptor)';\n break;\n case asn1.Type.EXTERNAL:\n rval += ' (External or Instance of)';\n break;\n case asn1.Type.REAL:\n rval += ' (Real)';\n break;\n case asn1.Type.ENUMERATED:\n rval += ' (Enumerated)';\n break;\n case asn1.Type.EMBEDDED:\n rval += ' (Embedded PDV)';\n break;\n case asn1.Type.UTF8:\n rval += ' (UTF8)';\n break;\n case asn1.Type.ROID:\n rval += ' (Relative Object Identifier)';\n break;\n case asn1.Type.SEQUENCE:\n rval += ' (Sequence)';\n break;\n case asn1.Type.SET:\n rval += ' (Set)';\n break;\n case asn1.Type.PRINTABLESTRING:\n rval += ' (Printable String)';\n break;\n case asn1.Type.IA5String:\n rval += ' (IA5String (ASCII))';\n break;\n case asn1.Type.UTCTIME:\n rval += ' (UTC time)';\n break;\n case asn1.Type.GENERALIZEDTIME:\n rval += ' (Generalized time)';\n break;\n case asn1.Type.BMPSTRING:\n rval += ' (BMP String)';\n break;\n }\n } else {\n rval += obj.type;\n }\n\n rval += '\\n';\n rval += indent + 'Constructed: ' + obj.constructed + '\\n';\n\n if(obj.composed) {\n var subvalues = 0;\n var sub = '';\n for(var i = 0; i < obj.value.length; ++i) {\n if(obj.value[i] !== undefined) {\n subvalues += 1;\n sub += asn1.prettyPrint(obj.value[i], level + 1, indentation);\n if((i + 1) < obj.value.length) {\n sub += ',';\n }\n }\n }\n rval += indent + 'Sub values: ' + subvalues + sub;\n } else {\n rval += indent + 'Value: ';\n if(obj.type === asn1.Type.OID) {\n var oid = asn1.derToOid(obj.value);\n rval += oid;\n if(forge.pki && forge.pki.oids) {\n if(oid in forge.pki.oids) {\n rval += ' (' + forge.pki.oids[oid] + ') ';\n }\n }\n }\n if(obj.type === asn1.Type.INTEGER) {\n try {\n rval += asn1.derToInteger(obj.value);\n } catch(ex) {\n rval += '0x' + forge.util.bytesToHex(obj.value);\n }\n } else if(obj.type === asn1.Type.BITSTRING) {\n // TODO: shift bits as needed to display without padding\n if(obj.value.length > 1) {\n // remove unused bits field\n rval += '0x' + forge.util.bytesToHex(obj.value.slice(1));\n } else {\n rval += '(none)';\n }\n // show unused bit count\n if(obj.value.length > 0) {\n var unused = obj.value.charCodeAt(0);\n if(unused == 1) {\n rval += ' (1 unused bit shown)';\n } else if(unused > 1) {\n rval += ' (' + unused + ' unused bits shown)';\n }\n }\n } else if(obj.type === asn1.Type.OCTETSTRING) {\n if(!_nonLatinRegex.test(obj.value)) {\n rval += '(' + obj.value + ') ';\n }\n rval += '0x' + forge.util.bytesToHex(obj.value);\n } else if(obj.type === asn1.Type.UTF8) {\n rval += forge.util.decodeUtf8(obj.value);\n } else if(obj.type === asn1.Type.PRINTABLESTRING ||\n obj.type === asn1.Type.IA5String) {\n rval += obj.value;\n } else if(_nonLatinRegex.test(obj.value)) {\n rval += '0x' + forge.util.bytesToHex(obj.value);\n } else if(obj.value.length === 0) {\n rval += '[null]';\n } else {\n rval += obj.value;\n }\n }\n\n return rval;\n};\n","/**\n * Node.js module for Forge message digests.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2017 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\nmodule.exports = forge.md = forge.md || {};\nforge.md.algorithms = forge.md.algorithms || {};\n","/**\n * Hash-based Message Authentication Code implementation. Requires a message\n * digest object that can be obtained, for example, from forge.md.sha1 or\n * forge.md.md5.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2012 Digital Bazaar, Inc. All rights reserved.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\n/* HMAC API */\nvar hmac = module.exports = forge.hmac = forge.hmac || {};\n\n/**\n * Creates an HMAC object that uses the given message digest object.\n *\n * @return an HMAC object.\n */\nhmac.create = function() {\n // the hmac key to use\n var _key = null;\n\n // the message digest to use\n var _md = null;\n\n // the inner padding\n var _ipadding = null;\n\n // the outer padding\n var _opadding = null;\n\n // hmac context\n var ctx = {};\n\n /**\n * Starts or restarts the HMAC with the given key and message digest.\n *\n * @param md the message digest to use, null to reuse the previous one,\n * a string to use builtin 'sha1', 'md5', 'sha256'.\n * @param key the key to use as a string, array of bytes, byte buffer,\n * or null to reuse the previous key.\n */\n ctx.start = function(md, key) {\n if(md !== null) {\n if(typeof md === 'string') {\n // create builtin message digest\n md = md.toLowerCase();\n if(md in forge.md.algorithms) {\n _md = forge.md.algorithms[md].create();\n } else {\n throw new Error('Unknown hash algorithm \"' + md + '\"');\n }\n } else {\n // store message digest\n _md = md;\n }\n }\n\n if(key === null) {\n // reuse previous key\n key = _key;\n } else {\n if(typeof key === 'string') {\n // convert string into byte buffer\n key = forge.util.createBuffer(key);\n } else if(forge.util.isArray(key)) {\n // convert byte array into byte buffer\n var tmp = key;\n key = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n key.putByte(tmp[i]);\n }\n }\n\n // if key is longer than blocksize, hash it\n var keylen = key.length();\n if(keylen > _md.blockLength) {\n _md.start();\n _md.update(key.bytes());\n key = _md.digest();\n }\n\n // mix key into inner and outer padding\n // ipadding = [0x36 * blocksize] ^ key\n // opadding = [0x5C * blocksize] ^ key\n _ipadding = forge.util.createBuffer();\n _opadding = forge.util.createBuffer();\n keylen = key.length();\n for(var i = 0; i < keylen; ++i) {\n var tmp = key.at(i);\n _ipadding.putByte(0x36 ^ tmp);\n _opadding.putByte(0x5C ^ tmp);\n }\n\n // if key is shorter than blocksize, add additional padding\n if(keylen < _md.blockLength) {\n var tmp = _md.blockLength - keylen;\n for(var i = 0; i < tmp; ++i) {\n _ipadding.putByte(0x36);\n _opadding.putByte(0x5C);\n }\n }\n _key = key;\n _ipadding = _ipadding.bytes();\n _opadding = _opadding.bytes();\n }\n\n // digest is done like so: hash(opadding | hash(ipadding | message))\n\n // prepare to do inner hash\n // hash(ipadding | message)\n _md.start();\n _md.update(_ipadding);\n };\n\n /**\n * Updates the HMAC with the given message bytes.\n *\n * @param bytes the bytes to update with.\n */\n ctx.update = function(bytes) {\n _md.update(bytes);\n };\n\n /**\n * Produces the Message Authentication Code (MAC).\n *\n * @return a byte buffer containing the digest value.\n */\n ctx.getMac = function() {\n // digest is done like so: hash(opadding | hash(ipadding | message))\n // here we do the outer hashing\n var inner = _md.digest().bytes();\n _md.start();\n _md.update(_opadding);\n _md.update(inner);\n return _md.digest();\n };\n // alias for getMac\n ctx.digest = ctx.getMac;\n\n return ctx;\n};\n","/**\n * Message Digest Algorithm 5 with 128-bit digest (MD5) implementation.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar md5 = module.exports = forge.md5 = forge.md5 || {};\nforge.md.md5 = forge.md.algorithms.md5 = md5;\n\n/**\n * Creates an MD5 message digest object.\n *\n * @return a message digest object.\n */\nmd5.create = function() {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n // MD5 state contains four 32-bit integers\n var _state = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for word storage\n var _w = new Array(16);\n\n // message digest object\n var md = {\n algorithm: 'md5',\n blockLength: 64,\n digestLength: 16,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 8\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength64 for backwards-compatibility)\n md.fullMessageLength = md.messageLength64 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _state = {\n h0: 0x67452301,\n h1: 0xEFCDAB89,\n h2: 0x98BADCFE,\n h3: 0x10325476\n };\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = (len[1] / 0x100000000) >>> 0;\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_state, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate MD5 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 448 mod 512. In other words,\n the data to be digested must be a multiple of 512 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 8 bytes (64\n bits), that means that the last segment of the data must have 56 bytes\n (448 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 448 mod 512 because\n 512 - 128 = 448.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 448 mod 512, then 512 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in little-endian order; since length\n // is stored in bytes we multiply by 8 and add carry\n var bits, carry = 0;\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n bits = md.fullMessageLength[i] * 8 + carry;\n carry = (bits / 0x100000000) >>> 0;\n finalBlock.putInt32Le(bits >>> 0);\n }\n\n var s2 = {\n h0: _state.h0,\n h1: _state.h1,\n h2: _state.h2,\n h3: _state.h3\n };\n _update(s2, _w, finalBlock);\n var rval = forge.util.createBuffer();\n rval.putInt32Le(s2.h0);\n rval.putInt32Le(s2.h1);\n rval.putInt32Le(s2.h2);\n rval.putInt32Le(s2.h3);\n return rval;\n };\n\n return md;\n};\n\n// padding, constant tables for calculating md5\nvar _padding = null;\nvar _g = null;\nvar _r = null;\nvar _k = null;\nvar _initialized = false;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 64);\n\n // g values\n _g = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12,\n 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2,\n 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9];\n\n // rounds table\n _r = [\n 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,\n 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,\n 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,\n 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21];\n\n // get the result of abs(sin(i + 1)) as a 32-bit integer\n _k = new Array(64);\n for(var i = 0; i < 64; ++i) {\n _k[i] = Math.floor(Math.abs(Math.sin(i + 1)) * 0x100000000);\n }\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates an MD5 state with the given byte buffer.\n *\n * @param s the MD5 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (64 byte) chunks\n var t, a, b, c, d, f, r, i;\n var len = bytes.length();\n while(len >= 64) {\n // initialize hash value for this chunk\n a = s.h0;\n b = s.h1;\n c = s.h2;\n d = s.h3;\n\n // round 1\n for(i = 0; i < 16; ++i) {\n w[i] = bytes.getInt32Le();\n f = d ^ (b & (c ^ d));\n t = (a + f + _k[i] + w[i]);\n r = _r[i];\n a = d;\n d = c;\n c = b;\n b += (t << r) | (t >>> (32 - r));\n }\n // round 2\n for(; i < 32; ++i) {\n f = c ^ (d & (b ^ c));\n t = (a + f + _k[i] + w[_g[i]]);\n r = _r[i];\n a = d;\n d = c;\n c = b;\n b += (t << r) | (t >>> (32 - r));\n }\n // round 3\n for(; i < 48; ++i) {\n f = b ^ c ^ d;\n t = (a + f + _k[i] + w[_g[i]]);\n r = _r[i];\n a = d;\n d = c;\n c = b;\n b += (t << r) | (t >>> (32 - r));\n }\n // round 4\n for(; i < 64; ++i) {\n f = c ^ (b | ~d);\n t = (a + f + _k[i] + w[_g[i]]);\n r = _r[i];\n a = d;\n d = c;\n c = b;\n b += (t << r) | (t >>> (32 - r));\n }\n\n // update hash state\n s.h0 = (s.h0 + a) | 0;\n s.h1 = (s.h1 + b) | 0;\n s.h2 = (s.h2 + c) | 0;\n s.h3 = (s.h3 + d) | 0;\n\n len -= 64;\n }\n}\n","/**\n * Javascript implementation of basic PEM (Privacy Enhanced Mail) algorithms.\n *\n * See: RFC 1421.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2013-2014 Digital Bazaar, Inc.\n *\n * A Forge PEM object has the following fields:\n *\n * type: identifies the type of message (eg: \"RSA PRIVATE KEY\").\n *\n * procType: identifies the type of processing performed on the message,\n * it has two subfields: version and type, eg: 4,ENCRYPTED.\n *\n * contentDomain: identifies the type of content in the message, typically\n * only uses the value: \"RFC822\".\n *\n * dekInfo: identifies the message encryption algorithm and mode and includes\n * any parameters for the algorithm, it has two subfields: algorithm and\n * parameters, eg: DES-CBC,F8143EDE5960C597.\n *\n * headers: contains all other PEM encapsulated headers -- where order is\n * significant (for pairing data like recipient ID + key info).\n *\n * body: the binary-encoded body.\n */\nvar forge = require('./forge');\nrequire('./util');\n\n// shortcut for pem API\nvar pem = module.exports = forge.pem = forge.pem || {};\n\n/**\n * Encodes (serializes) the given PEM object.\n *\n * @param msg the PEM message object to encode.\n * @param options the options to use:\n * maxline the maximum characters per line for the body, (default: 64).\n *\n * @return the PEM-formatted string.\n */\npem.encode = function(msg, options) {\n options = options || {};\n var rval = '-----BEGIN ' + msg.type + '-----\\r\\n';\n\n // encode special headers\n var header;\n if(msg.procType) {\n header = {\n name: 'Proc-Type',\n values: [String(msg.procType.version), msg.procType.type]\n };\n rval += foldHeader(header);\n }\n if(msg.contentDomain) {\n header = {name: 'Content-Domain', values: [msg.contentDomain]};\n rval += foldHeader(header);\n }\n if(msg.dekInfo) {\n header = {name: 'DEK-Info', values: [msg.dekInfo.algorithm]};\n if(msg.dekInfo.parameters) {\n header.values.push(msg.dekInfo.parameters);\n }\n rval += foldHeader(header);\n }\n\n if(msg.headers) {\n // encode all other headers\n for(var i = 0; i < msg.headers.length; ++i) {\n rval += foldHeader(msg.headers[i]);\n }\n }\n\n // terminate header\n if(msg.procType) {\n rval += '\\r\\n';\n }\n\n // add body\n rval += forge.util.encode64(msg.body, options.maxline || 64) + '\\r\\n';\n\n rval += '-----END ' + msg.type + '-----\\r\\n';\n return rval;\n};\n\n/**\n * Decodes (deserializes) all PEM messages found in the given string.\n *\n * @param str the PEM-formatted string to decode.\n *\n * @return the PEM message objects in an array.\n */\npem.decode = function(str) {\n var rval = [];\n\n // split string into PEM messages (be lenient w/EOF on BEGIN line)\n var rMessage = /\\s*-----BEGIN ([A-Z0-9- ]+)-----\\r?\\n?([\\x21-\\x7e\\s]+?(?:\\r?\\n\\r?\\n))?([:A-Za-z0-9+\\/=\\s]+?)-----END \\1-----/g;\n var rHeader = /([\\x21-\\x7e]+):\\s*([\\x21-\\x7e\\s^:]+)/;\n var rCRLF = /\\r?\\n/;\n var match;\n while(true) {\n match = rMessage.exec(str);\n if(!match) {\n break;\n }\n\n var msg = {\n type: match[1],\n procType: null,\n contentDomain: null,\n dekInfo: null,\n headers: [],\n body: forge.util.decode64(match[3])\n };\n rval.push(msg);\n\n // no headers\n if(!match[2]) {\n continue;\n }\n\n // parse headers\n var lines = match[2].split(rCRLF);\n var li = 0;\n while(match && li < lines.length) {\n // get line, trim any rhs whitespace\n var line = lines[li].replace(/\\s+$/, '');\n\n // RFC2822 unfold any following folded lines\n for(var nl = li + 1; nl < lines.length; ++nl) {\n var next = lines[nl];\n if(!/\\s/.test(next[0])) {\n break;\n }\n line += next;\n li = nl;\n }\n\n // parse header\n match = line.match(rHeader);\n if(match) {\n var header = {name: match[1], values: []};\n var values = match[2].split(',');\n for(var vi = 0; vi < values.length; ++vi) {\n header.values.push(ltrim(values[vi]));\n }\n\n // Proc-Type must be the first header\n if(!msg.procType) {\n if(header.name !== 'Proc-Type') {\n throw new Error('Invalid PEM formatted message. The first ' +\n 'encapsulated header must be \"Proc-Type\".');\n } else if(header.values.length !== 2) {\n throw new Error('Invalid PEM formatted message. The \"Proc-Type\" ' +\n 'header must have two subfields.');\n }\n msg.procType = {version: values[0], type: values[1]};\n } else if(!msg.contentDomain && header.name === 'Content-Domain') {\n // special-case Content-Domain\n msg.contentDomain = values[0] || '';\n } else if(!msg.dekInfo && header.name === 'DEK-Info') {\n // special-case DEK-Info\n if(header.values.length === 0) {\n throw new Error('Invalid PEM formatted message. The \"DEK-Info\" ' +\n 'header must have at least one subfield.');\n }\n msg.dekInfo = {algorithm: values[0], parameters: values[1] || null};\n } else {\n msg.headers.push(header);\n }\n }\n\n ++li;\n }\n\n if(msg.procType === 'ENCRYPTED' && !msg.dekInfo) {\n throw new Error('Invalid PEM formatted message. The \"DEK-Info\" ' +\n 'header must be present if \"Proc-Type\" is \"ENCRYPTED\".');\n }\n }\n\n if(rval.length === 0) {\n throw new Error('Invalid PEM formatted message.');\n }\n\n return rval;\n};\n\nfunction foldHeader(header) {\n var rval = header.name + ': ';\n\n // ensure values with CRLF are folded\n var values = [];\n var insertSpace = function(match, $1) {\n return ' ' + $1;\n };\n for(var i = 0; i < header.values.length; ++i) {\n values.push(header.values[i].replace(/^(\\S+\\r\\n)/, insertSpace));\n }\n rval += values.join(',') + '\\r\\n';\n\n // do folding\n var length = 0;\n var candidate = -1;\n for(var i = 0; i < rval.length; ++i, ++length) {\n if(length > 65 && candidate !== -1) {\n var insert = rval[candidate];\n if(insert === ',') {\n ++candidate;\n rval = rval.substr(0, candidate) + '\\r\\n ' + rval.substr(candidate);\n } else {\n rval = rval.substr(0, candidate) +\n '\\r\\n' + insert + rval.substr(candidate + 1);\n }\n length = (i - candidate - 1);\n candidate = -1;\n ++i;\n } else if(rval[i] === ' ' || rval[i] === '\\t' || rval[i] === ',') {\n candidate = i;\n }\n }\n\n return rval;\n}\n\nfunction ltrim(str) {\n return str.replace(/^\\s+/, '');\n}\n","/**\n * DES (Data Encryption Standard) implementation.\n *\n * This implementation supports DES as well as 3DES-EDE in ECB and CBC mode.\n * It is based on the BSD-licensed implementation by Paul Tero:\n *\n * Paul Tero, July 2001\n * http://www.tero.co.uk/des/\n *\n * Optimised for performance with large blocks by\n * Michael Hayworth, November 2001\n * http://www.netdealing.com\n *\n * THIS SOFTWARE IS PROVIDED \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\n * Copyright (c) 2012-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./cipher');\nrequire('./cipherModes');\nrequire('./util');\n\n/* DES API */\nmodule.exports = forge.des = forge.des || {};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('DES-<mode>', key);\n * cipher.start({iv: iv});\n *\n * Creates an DES cipher object to encrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as binary-encoded strings of bytes or\n * byte buffers.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC' if IV is\n * given, 'ECB' if null).\n *\n * @return the cipher.\n */\nforge.des.startEncrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: false,\n mode: mode || (iv === null ? 'ECB' : 'CBC')\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('DES-<mode>', key);\n *\n * Creates an DES cipher object to encrypt data using the given symmetric key.\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.des.createEncryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: false,\n mode: mode\n });\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('DES-<mode>', key);\n * decipher.start({iv: iv});\n *\n * Creates an DES cipher object to decrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as binary-encoded strings of bytes or\n * byte buffers.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC' if IV is\n * given, 'ECB' if null).\n *\n * @return the cipher.\n */\nforge.des.startDecrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: true,\n mode: mode || (iv === null ? 'ECB' : 'CBC')\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('DES-<mode>', key);\n *\n * Creates an DES cipher object to decrypt data using the given symmetric key.\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.des.createDecryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: true,\n mode: mode\n });\n};\n\n/**\n * Creates a new DES cipher algorithm object.\n *\n * @param name the name of the algorithm.\n * @param mode the mode factory function.\n *\n * @return the DES algorithm object.\n */\nforge.des.Algorithm = function(name, mode) {\n var self = this;\n self.name = name;\n self.mode = new mode({\n blockSize: 8,\n cipher: {\n encrypt: function(inBlock, outBlock) {\n return _updateBlock(self._keys, inBlock, outBlock, false);\n },\n decrypt: function(inBlock, outBlock) {\n return _updateBlock(self._keys, inBlock, outBlock, true);\n }\n }\n });\n self._init = false;\n};\n\n/**\n * Initializes this DES algorithm by expanding its key.\n *\n * @param options the options to use.\n * key the key to use with this algorithm.\n * decrypt true if the algorithm should be initialized for decryption,\n * false for encryption.\n */\nforge.des.Algorithm.prototype.initialize = function(options) {\n if(this._init) {\n return;\n }\n\n var key = forge.util.createBuffer(options.key);\n if(this.name.indexOf('3DES') === 0) {\n if(key.length() !== 24) {\n throw new Error('Invalid Triple-DES key size: ' + key.length() * 8);\n }\n }\n\n // do key expansion to 16 or 48 subkeys (single or triple DES)\n this._keys = _createKeys(key);\n this._init = true;\n};\n\n/** Register DES algorithms **/\n\nregisterAlgorithm('DES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('DES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('DES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('DES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('DES-CTR', forge.cipher.modes.ctr);\n\nregisterAlgorithm('3DES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('3DES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('3DES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('3DES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('3DES-CTR', forge.cipher.modes.ctr);\n\nfunction registerAlgorithm(name, mode) {\n var factory = function() {\n return new forge.des.Algorithm(name, mode);\n };\n forge.cipher.registerAlgorithm(name, factory);\n}\n\n/** DES implementation **/\n\nvar spfunction1 = [0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004];\nvar spfunction2 = [-0x7fef7fe0,-0x7fff8000,0x8000,0x108020,0x100000,0x20,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,0x100000,0x20,-0x7fefffe0,0x108000,0x100020,-0x7fff7fe0,0,-0x80000000,0x8000,0x108020,-0x7ff00000,0x100020,-0x7fffffe0,0,0x108000,0x8020,-0x7fef8000,-0x7ff00000,0x8020,0,0x108020,-0x7fefffe0,0x100000,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,0x8000,-0x7ff00000,-0x7fff8000,0x20,-0x7fef7fe0,0x108020,0x20,0x8000,-0x80000000,0x8020,-0x7fef8000,0x100000,-0x7fffffe0,0x100020,-0x7fff7fe0,-0x7fffffe0,0x100020,0x108000,0,-0x7fff8000,0x8020,-0x80000000,-0x7fefffe0,-0x7fef7fe0,0x108000];\nvar spfunction3 = [0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200];\nvar spfunction4 = [0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080];\nvar spfunction5 = [0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100];\nvar spfunction6 = [0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010];\nvar spfunction7 = [0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002];\nvar spfunction8 = [0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000];\n\n/**\n * Create necessary sub keys.\n *\n * @param key the 64-bit or 192-bit key.\n *\n * @return the expanded keys.\n */\nfunction _createKeys(key) {\n var pc2bytes0 = [0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204],\n pc2bytes1 = [0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101],\n pc2bytes2 = [0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808],\n pc2bytes3 = [0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000],\n pc2bytes4 = [0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010],\n pc2bytes5 = [0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420],\n pc2bytes6 = [0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002],\n pc2bytes7 = [0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800],\n pc2bytes8 = [0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002],\n pc2bytes9 = [0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408],\n pc2bytes10 = [0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020],\n pc2bytes11 = [0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200],\n pc2bytes12 = [0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010],\n pc2bytes13 = [0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105];\n\n // how many iterations (1 for des, 3 for triple des)\n // changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys\n var iterations = key.length() > 8 ? 3 : 1;\n\n // stores the return keys\n var keys = [];\n\n // now define the left shifts which need to be done\n var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];\n\n var n = 0, tmp;\n for(var j = 0; j < iterations; j++) {\n var left = key.getInt32();\n var right = key.getInt32();\n\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n tmp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= tmp;\n right ^= (tmp << -16);\n\n tmp = ((left >>> 2) ^ right) & 0x33333333;\n right ^= tmp;\n left ^= (tmp << 2);\n\n tmp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= tmp;\n right ^= (tmp << -16);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n // right needs to be shifted and OR'd with last four bits of left\n tmp = (left << 8) | ((right >>> 20) & 0x000000f0);\n\n // left needs to be put upside down\n left = ((right << 24) | ((right << 8) & 0xff0000) |\n ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0));\n right = tmp;\n\n // now go through and perform these shifts on the left and right keys\n for(var i = 0; i < shifts.length; ++i) {\n //shift the keys either one or two bits to the left\n if(shifts[i]) {\n left = (left << 2) | (left >>> 26);\n right = (right << 2) | (right >>> 26);\n } else {\n left = (left << 1) | (left >>> 27);\n right = (right << 1) | (right >>> 27);\n }\n left &= -0xf;\n right &= -0xf;\n\n // now apply PC-2, in such a way that E is easier when encrypting or\n // decrypting this conversion will look like PC-2 except only the last 6\n // bits of each byte are used rather than 48 consecutive bits and the\n // order of lines will be according to how the S selection functions will\n // be applied: S2, S4, S6, S8, S1, S3, S5, S7\n var lefttmp = (\n pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] |\n pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf] |\n pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] |\n pc2bytes6[(left >>> 4) & 0xf]);\n var righttmp = (\n pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] |\n pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf] |\n pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] |\n pc2bytes13[(right >>> 4) & 0xf]);\n tmp = ((righttmp >>> 16) ^ lefttmp) & 0x0000ffff;\n keys[n++] = lefttmp ^ tmp;\n keys[n++] = righttmp ^ (tmp << 16);\n }\n }\n\n return keys;\n}\n\n/**\n * Updates a single block (1 byte) using DES. The update will either\n * encrypt or decrypt the block.\n *\n * @param keys the expanded keys.\n * @param input the input block (an array of 32-bit words).\n * @param output the updated output block.\n * @param decrypt true to decrypt the block, false to encrypt it.\n */\nfunction _updateBlock(keys, input, output, decrypt) {\n // set up loops for single or triple DES\n var iterations = keys.length === 32 ? 3 : 9;\n var looping;\n if(iterations === 3) {\n looping = decrypt ? [30, -2, -2] : [0, 32, 2];\n } else {\n looping = (decrypt ?\n [94, 62, -2, 32, 64, 2, 30, -2, -2] :\n [0, 32, 2, 62, 30, -2, 64, 96, 2]);\n }\n\n var tmp;\n\n var left = input[0];\n var right = input[1];\n\n // first each 64 bit chunk of the message must be permuted according to IP\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n tmp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= tmp;\n left ^= (tmp << 16);\n\n tmp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= tmp;\n right ^= (tmp << 2);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n // rotate left 1 bit\n left = ((left << 1) | (left >>> 31));\n right = ((right << 1) | (right >>> 31));\n\n for(var j = 0; j < iterations; j += 3) {\n var endloop = looping[j + 1];\n var loopinc = looping[j + 2];\n\n // now go through and perform the encryption or decryption\n for(var i = looping[j]; i != endloop; i += loopinc) {\n var right1 = right ^ keys[i];\n var right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];\n\n // passing these bytes through the S selection functions\n tmp = left;\n left = right;\n right = tmp ^ (\n spfunction2[(right1 >>> 24) & 0x3f] |\n spfunction4[(right1 >>> 16) & 0x3f] |\n spfunction6[(right1 >>> 8) & 0x3f] |\n spfunction8[right1 & 0x3f] |\n spfunction1[(right2 >>> 24) & 0x3f] |\n spfunction3[(right2 >>> 16) & 0x3f] |\n spfunction5[(right2 >>> 8) & 0x3f] |\n spfunction7[right2 & 0x3f]);\n }\n // unreverse left and right\n tmp = left;\n left = right;\n right = tmp;\n }\n\n // rotate right 1 bit\n left = ((left >>> 1) | (left << 31));\n right = ((right >>> 1) | (right << 31));\n\n // now perform IP-1, which is IP in the opposite direction\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= tmp;\n right ^= (tmp << 2);\n\n tmp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= tmp;\n left ^= (tmp << 16);\n\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n output[0] = left;\n output[1] = right;\n}\n\n/**\n * Deprecated. Instead, use:\n *\n * forge.cipher.createCipher('DES-<mode>', key);\n * forge.cipher.createDecipher('DES-<mode>', key);\n *\n * Creates a deprecated DES cipher object. This object's mode will default to\n * CBC (cipher-block-chaining).\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param options the options to use.\n * key the symmetric key to use (64 or 192 bits).\n * output the buffer to write to.\n * decrypt true for decryption, false for encryption.\n * mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nfunction _createCipher(options) {\n options = options || {};\n var mode = (options.mode || 'CBC').toUpperCase();\n var algorithm = 'DES-' + mode;\n\n var cipher;\n if(options.decrypt) {\n cipher = forge.cipher.createDecipher(algorithm, options.key);\n } else {\n cipher = forge.cipher.createCipher(algorithm, options.key);\n }\n\n // backwards compatible start API\n var start = cipher.start;\n cipher.start = function(iv, options) {\n // backwards compatibility: support second arg as output buffer\n var output = null;\n if(options instanceof forge.util.ByteBuffer) {\n output = options;\n options = {};\n }\n options = options || {};\n options.output = output;\n options.iv = iv;\n start.call(cipher, options);\n };\n\n return cipher;\n}\n","/**\n * Password-Based Key-Derivation Function #2 implementation.\n *\n * See RFC 2898 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./hmac');\nrequire('./md');\nrequire('./util');\n\nvar pkcs5 = forge.pkcs5 = forge.pkcs5 || {};\n\nvar crypto;\nif(forge.util.isNodejs && !forge.options.usePureJavaScript) {\n crypto = require('crypto');\n}\n\n/**\n * Derives a key from a password.\n *\n * @param p the password as a binary-encoded string of bytes.\n * @param s the salt as a binary-encoded string of bytes.\n * @param c the iteration count, a positive integer.\n * @param dkLen the intended length, in bytes, of the derived key,\n * (max: 2^32 - 1) * hash length of the PRF.\n * @param [md] the message digest (or algorithm identifier as a string) to use\n * in the PRF, defaults to SHA-1.\n * @param [callback(err, key)] presence triggers asynchronous version, called\n * once the operation completes.\n *\n * @return the derived key, as a binary-encoded string of bytes, for the\n * synchronous version (if no callback is specified).\n */\nmodule.exports = forge.pbkdf2 = pkcs5.pbkdf2 = function(\n p, s, c, dkLen, md, callback) {\n if(typeof md === 'function') {\n callback = md;\n md = null;\n }\n\n // use native implementation if possible and not disabled, note that\n // some node versions only support SHA-1, others allow digest to be changed\n if(forge.util.isNodejs && !forge.options.usePureJavaScript &&\n crypto.pbkdf2 && (md === null || typeof md !== 'object') &&\n (crypto.pbkdf2Sync.length > 4 || (!md || md === 'sha1'))) {\n if(typeof md !== 'string') {\n // default prf to SHA-1\n md = 'sha1';\n }\n p = Buffer.from(p, 'binary');\n s = Buffer.from(s, 'binary');\n if(!callback) {\n if(crypto.pbkdf2Sync.length === 4) {\n return crypto.pbkdf2Sync(p, s, c, dkLen).toString('binary');\n }\n return crypto.pbkdf2Sync(p, s, c, dkLen, md).toString('binary');\n }\n if(crypto.pbkdf2Sync.length === 4) {\n return crypto.pbkdf2(p, s, c, dkLen, function(err, key) {\n if(err) {\n return callback(err);\n }\n callback(null, key.toString('binary'));\n });\n }\n return crypto.pbkdf2(p, s, c, dkLen, md, function(err, key) {\n if(err) {\n return callback(err);\n }\n callback(null, key.toString('binary'));\n });\n }\n\n if(typeof md === 'undefined' || md === null) {\n // default prf to SHA-1\n md = 'sha1';\n }\n if(typeof md === 'string') {\n if(!(md in forge.md.algorithms)) {\n throw new Error('Unknown hash algorithm: ' + md);\n }\n md = forge.md[md].create();\n }\n\n var hLen = md.digestLength;\n\n /* 1. If dkLen > (2^32 - 1) * hLen, output \"derived key too long\" and\n stop. */\n if(dkLen > (0xFFFFFFFF * hLen)) {\n var err = new Error('Derived key is too long.');\n if(callback) {\n return callback(err);\n }\n throw err;\n }\n\n /* 2. Let len be the number of hLen-octet blocks in the derived key,\n rounding up, and let r be the number of octets in the last\n block:\n\n len = CEIL(dkLen / hLen),\n r = dkLen - (len - 1) * hLen. */\n var len = Math.ceil(dkLen / hLen);\n var r = dkLen - (len - 1) * hLen;\n\n /* 3. For each block of the derived key apply the function F defined\n below to the password P, the salt S, the iteration count c, and\n the block index to compute the block:\n\n T_1 = F(P, S, c, 1),\n T_2 = F(P, S, c, 2),\n ...\n T_len = F(P, S, c, len),\n\n where the function F is defined as the exclusive-or sum of the\n first c iterates of the underlying pseudorandom function PRF\n applied to the password P and the concatenation of the salt S\n and the block index i:\n\n F(P, S, c, i) = u_1 XOR u_2 XOR ... XOR u_c\n\n where\n\n u_1 = PRF(P, S || INT(i)),\n u_2 = PRF(P, u_1),\n ...\n u_c = PRF(P, u_{c-1}).\n\n Here, INT(i) is a four-octet encoding of the integer i, most\n significant octet first. */\n var prf = forge.hmac.create();\n prf.start(md, p);\n var dk = '';\n var xor, u_c, u_c1;\n\n // sync version\n if(!callback) {\n for(var i = 1; i <= len; ++i) {\n // PRF(P, S || INT(i)) (first iteration)\n prf.start(null, null);\n prf.update(s);\n prf.update(forge.util.int32ToBytes(i));\n xor = u_c1 = prf.digest().getBytes();\n\n // PRF(P, u_{c-1}) (other iterations)\n for(var j = 2; j <= c; ++j) {\n prf.start(null, null);\n prf.update(u_c1);\n u_c = prf.digest().getBytes();\n // F(p, s, c, i)\n xor = forge.util.xorBytes(xor, u_c, hLen);\n u_c1 = u_c;\n }\n\n /* 4. Concatenate the blocks and extract the first dkLen octets to\n produce a derived key DK:\n\n DK = T_1 || T_2 || ... || T_len<0..r-1> */\n dk += (i < len) ? xor : xor.substr(0, r);\n }\n /* 5. Output the derived key DK. */\n return dk;\n }\n\n // async version\n var i = 1, j;\n function outer() {\n if(i > len) {\n // done\n return callback(null, dk);\n }\n\n // PRF(P, S || INT(i)) (first iteration)\n prf.start(null, null);\n prf.update(s);\n prf.update(forge.util.int32ToBytes(i));\n xor = u_c1 = prf.digest().getBytes();\n\n // PRF(P, u_{c-1}) (other iterations)\n j = 2;\n inner();\n }\n\n function inner() {\n if(j <= c) {\n prf.start(null, null);\n prf.update(u_c1);\n u_c = prf.digest().getBytes();\n // F(p, s, c, i)\n xor = forge.util.xorBytes(xor, u_c, hLen);\n u_c1 = u_c;\n ++j;\n return forge.util.setImmediate(inner);\n }\n\n /* 4. Concatenate the blocks and extract the first dkLen octets to\n produce a derived key DK:\n\n DK = T_1 || T_2 || ... || T_len<0..r-1> */\n dk += (i < len) ? xor : xor.substr(0, r);\n\n ++i;\n outer();\n }\n\n outer();\n};\n","/**\n * Secure Hash Algorithm with 256-bit digest (SHA-256) implementation.\n *\n * See FIPS 180-2 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha256 = module.exports = forge.sha256 = forge.sha256 || {};\nforge.md.sha256 = forge.md.algorithms.sha256 = sha256;\n\n/**\n * Creates a SHA-256 message digest object.\n *\n * @return a message digest object.\n */\nsha256.create = function() {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n // SHA-256 state contains eight 32-bit integers\n var _state = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for word storage\n var _w = new Array(64);\n\n // message digest object\n var md = {\n algorithm: 'sha256',\n blockLength: 64,\n digestLength: 32,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 8\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength64 for backwards-compatibility)\n md.fullMessageLength = md.messageLength64 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _state = {\n h0: 0x6A09E667,\n h1: 0xBB67AE85,\n h2: 0x3C6EF372,\n h3: 0xA54FF53A,\n h4: 0x510E527F,\n h5: 0x9B05688C,\n h6: 0x1F83D9AB,\n h7: 0x5BE0CD19\n };\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_state, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-256 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 448 mod 512. In other words,\n the data to be digested must be a multiple of 512 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 8 bytes (64\n bits), that means that the last segment of the data must have 56 bytes\n (448 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 448 mod 512 because\n 512 - 128 = 448.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 448 mod 512, then 512 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var s2 = {\n h0: _state.h0,\n h1: _state.h1,\n h2: _state.h2,\n h3: _state.h3,\n h4: _state.h4,\n h5: _state.h5,\n h6: _state.h6,\n h7: _state.h7\n };\n _update(s2, _w, finalBlock);\n var rval = forge.util.createBuffer();\n rval.putInt32(s2.h0);\n rval.putInt32(s2.h1);\n rval.putInt32(s2.h2);\n rval.putInt32(s2.h3);\n rval.putInt32(s2.h4);\n rval.putInt32(s2.h5);\n rval.putInt32(s2.h6);\n rval.putInt32(s2.h7);\n return rval;\n };\n\n return md;\n};\n\n// sha-256 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n// table of constants\nvar _k = null;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 64);\n\n // create K table for SHA-256\n _k = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-256 state with the given byte buffer.\n *\n * @param s the SHA-256 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (64 byte) chunks\n var t1, t2, s0, s1, ch, maj, i, a, b, c, d, e, f, g, h;\n var len = bytes.length();\n while(len >= 64) {\n // the w array will be populated with sixteen 32-bit big-endian words\n // and then extended into 64 32-bit words according to SHA-256\n for(i = 0; i < 16; ++i) {\n w[i] = bytes.getInt32();\n }\n for(; i < 64; ++i) {\n // XOR word 2 words ago rot right 17, rot right 19, shft right 10\n t1 = w[i - 2];\n t1 =\n ((t1 >>> 17) | (t1 << 15)) ^\n ((t1 >>> 19) | (t1 << 13)) ^\n (t1 >>> 10);\n // XOR word 15 words ago rot right 7, rot right 18, shft right 3\n t2 = w[i - 15];\n t2 =\n ((t2 >>> 7) | (t2 << 25)) ^\n ((t2 >>> 18) | (t2 << 14)) ^\n (t2 >>> 3);\n // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^32\n w[i] = (t1 + w[i - 7] + t2 + w[i - 16]) | 0;\n }\n\n // initialize hash value for this chunk\n a = s.h0;\n b = s.h1;\n c = s.h2;\n d = s.h3;\n e = s.h4;\n f = s.h5;\n g = s.h6;\n h = s.h7;\n\n // round function\n for(i = 0; i < 64; ++i) {\n // Sum1(e)\n s1 =\n ((e >>> 6) | (e << 26)) ^\n ((e >>> 11) | (e << 21)) ^\n ((e >>> 25) | (e << 7));\n // Ch(e, f, g) (optimized the same way as SHA-1)\n ch = g ^ (e & (f ^ g));\n // Sum0(a)\n s0 =\n ((a >>> 2) | (a << 30)) ^\n ((a >>> 13) | (a << 19)) ^\n ((a >>> 22) | (a << 10));\n // Maj(a, b, c) (optimized the same way as SHA-1)\n maj = (a & b) | (c & (a ^ b));\n\n // main algorithm\n t1 = h + s1 + ch + _k[i] + w[i];\n t2 = s0 + maj;\n h = g;\n g = f;\n f = e;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n // can't truncate with `| 0`\n e = (d + t1) >>> 0;\n d = c;\n c = b;\n b = a;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n // can't truncate with `| 0`\n a = (t1 + t2) >>> 0;\n }\n\n // update hash state\n s.h0 = (s.h0 + a) | 0;\n s.h1 = (s.h1 + b) | 0;\n s.h2 = (s.h2 + c) | 0;\n s.h3 = (s.h3 + d) | 0;\n s.h4 = (s.h4 + e) | 0;\n s.h5 = (s.h5 + f) | 0;\n s.h6 = (s.h6 + g) | 0;\n s.h7 = (s.h7 + h) | 0;\n len -= 64;\n }\n}\n","/**\n * A javascript implementation of a cryptographically-secure\n * Pseudo Random Number Generator (PRNG). The Fortuna algorithm is followed\n * here though the use of SHA-256 is not enforced; when generating an\n * a PRNG context, the hashing algorithm and block cipher used for\n * the generator are specified via a plugin.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nvar _crypto = null;\nif(forge.util.isNodejs && !forge.options.usePureJavaScript &&\n !process.versions['node-webkit']) {\n _crypto = require('crypto');\n}\n\n/* PRNG API */\nvar prng = module.exports = forge.prng = forge.prng || {};\n\n/**\n * Creates a new PRNG context.\n *\n * A PRNG plugin must be passed in that will provide:\n *\n * 1. A function that initializes the key and seed of a PRNG context. It\n * will be given a 16 byte key and a 16 byte seed. Any key expansion\n * or transformation of the seed from a byte string into an array of\n * integers (or similar) should be performed.\n * 2. The cryptographic function used by the generator. It takes a key and\n * a seed.\n * 3. A seed increment function. It takes the seed and returns seed + 1.\n * 4. An api to create a message digest.\n *\n * For an example, see random.js.\n *\n * @param plugin the PRNG plugin to use.\n */\nprng.create = function(plugin) {\n var ctx = {\n plugin: plugin,\n key: null,\n seed: null,\n time: null,\n // number of reseeds so far\n reseeds: 0,\n // amount of data generated so far\n generated: 0,\n // no initial key bytes\n keyBytes: ''\n };\n\n // create 32 entropy pools (each is a message digest)\n var md = plugin.md;\n var pools = new Array(32);\n for(var i = 0; i < 32; ++i) {\n pools[i] = md.create();\n }\n ctx.pools = pools;\n\n // entropy pools are written to cyclically, starting at index 0\n ctx.pool = 0;\n\n /**\n * Generates random bytes. The bytes may be generated synchronously or\n * asynchronously. Web workers must use the asynchronous interface or\n * else the behavior is undefined.\n *\n * @param count the number of random bytes to generate.\n * @param [callback(err, bytes)] called once the operation completes.\n *\n * @return count random bytes as a string.\n */\n ctx.generate = function(count, callback) {\n // do synchronously\n if(!callback) {\n return ctx.generateSync(count);\n }\n\n // simple generator using counter-based CBC\n var cipher = ctx.plugin.cipher;\n var increment = ctx.plugin.increment;\n var formatKey = ctx.plugin.formatKey;\n var formatSeed = ctx.plugin.formatSeed;\n var b = forge.util.createBuffer();\n\n // paranoid deviation from Fortuna:\n // reset key for every request to protect previously\n // generated random bytes should the key be discovered;\n // there is no 100ms based reseeding because of this\n // forced reseed for every `generate` call\n ctx.key = null;\n\n generate();\n\n function generate(err) {\n if(err) {\n return callback(err);\n }\n\n // sufficient bytes generated\n if(b.length() >= count) {\n return callback(null, b.getBytes(count));\n }\n\n // if amount of data generated is greater than 1 MiB, trigger reseed\n if(ctx.generated > 0xfffff) {\n ctx.key = null;\n }\n\n if(ctx.key === null) {\n // prevent stack overflow\n return forge.util.nextTick(function() {\n _reseed(generate);\n });\n }\n\n // generate the random bytes\n var bytes = cipher(ctx.key, ctx.seed);\n ctx.generated += bytes.length;\n b.putBytes(bytes);\n\n // generate bytes for a new key and seed\n ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));\n ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));\n\n forge.util.setImmediate(generate);\n }\n };\n\n /**\n * Generates random bytes synchronously.\n *\n * @param count the number of random bytes to generate.\n *\n * @return count random bytes as a string.\n */\n ctx.generateSync = function(count) {\n // simple generator using counter-based CBC\n var cipher = ctx.plugin.cipher;\n var increment = ctx.plugin.increment;\n var formatKey = ctx.plugin.formatKey;\n var formatSeed = ctx.plugin.formatSeed;\n\n // paranoid deviation from Fortuna:\n // reset key for every request to protect previously\n // generated random bytes should the key be discovered;\n // there is no 100ms based reseeding because of this\n // forced reseed for every `generateSync` call\n ctx.key = null;\n\n var b = forge.util.createBuffer();\n while(b.length() < count) {\n // if amount of data generated is greater than 1 MiB, trigger reseed\n if(ctx.generated > 0xfffff) {\n ctx.key = null;\n }\n\n if(ctx.key === null) {\n _reseedSync();\n }\n\n // generate the random bytes\n var bytes = cipher(ctx.key, ctx.seed);\n ctx.generated += bytes.length;\n b.putBytes(bytes);\n\n // generate bytes for a new key and seed\n ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));\n ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));\n }\n\n return b.getBytes(count);\n };\n\n /**\n * Private function that asynchronously reseeds a generator.\n *\n * @param callback(err) called once the operation completes.\n */\n function _reseed(callback) {\n if(ctx.pools[0].messageLength >= 32) {\n _seed();\n return callback();\n }\n // not enough seed data...\n var needed = (32 - ctx.pools[0].messageLength) << 5;\n ctx.seedFile(needed, function(err, bytes) {\n if(err) {\n return callback(err);\n }\n ctx.collect(bytes);\n _seed();\n callback();\n });\n }\n\n /**\n * Private function that synchronously reseeds a generator.\n */\n function _reseedSync() {\n if(ctx.pools[0].messageLength >= 32) {\n return _seed();\n }\n // not enough seed data...\n var needed = (32 - ctx.pools[0].messageLength) << 5;\n ctx.collect(ctx.seedFileSync(needed));\n _seed();\n }\n\n /**\n * Private function that seeds a generator once enough bytes are available.\n */\n function _seed() {\n // update reseed count\n ctx.reseeds = (ctx.reseeds === 0xffffffff) ? 0 : ctx.reseeds + 1;\n\n // goal is to update `key` via:\n // key = hash(key + s)\n // where 's' is all collected entropy from selected pools, then...\n\n // create a plugin-based message digest\n var md = ctx.plugin.md.create();\n\n // consume current key bytes\n md.update(ctx.keyBytes);\n\n // digest the entropy of pools whose index k meet the\n // condition 'n mod 2^k == 0' where n is the number of reseeds\n var _2powK = 1;\n for(var k = 0; k < 32; ++k) {\n if(ctx.reseeds % _2powK === 0) {\n md.update(ctx.pools[k].digest().getBytes());\n ctx.pools[k].start();\n }\n _2powK = _2powK << 1;\n }\n\n // get digest for key bytes\n ctx.keyBytes = md.digest().getBytes();\n\n // paranoid deviation from Fortuna:\n // update `seed` via `seed = hash(key)`\n // instead of initializing to zero once and only\n // ever incrementing it\n md.start();\n md.update(ctx.keyBytes);\n var seedBytes = md.digest().getBytes();\n\n // update state\n ctx.key = ctx.plugin.formatKey(ctx.keyBytes);\n ctx.seed = ctx.plugin.formatSeed(seedBytes);\n ctx.generated = 0;\n }\n\n /**\n * The built-in default seedFile. This seedFile is used when entropy\n * is needed immediately.\n *\n * @param needed the number of bytes that are needed.\n *\n * @return the random bytes.\n */\n function defaultSeedFile(needed) {\n // use window.crypto.getRandomValues strong source of entropy if available\n var getRandomValues = null;\n var globalScope = forge.util.globalScope;\n var _crypto = globalScope.crypto || globalScope.msCrypto;\n if(_crypto && _crypto.getRandomValues) {\n getRandomValues = function(arr) {\n return _crypto.getRandomValues(arr);\n };\n }\n\n var b = forge.util.createBuffer();\n if(getRandomValues) {\n while(b.length() < needed) {\n // max byte length is 65536 before QuotaExceededError is thrown\n // http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues\n var count = Math.max(1, Math.min(needed - b.length(), 65536) / 4);\n var entropy = new Uint32Array(Math.floor(count));\n try {\n getRandomValues(entropy);\n for(var i = 0; i < entropy.length; ++i) {\n b.putInt32(entropy[i]);\n }\n } catch(e) {\n /* only ignore QuotaExceededError */\n if(!(typeof QuotaExceededError !== 'undefined' &&\n e instanceof QuotaExceededError)) {\n throw e;\n }\n }\n }\n }\n\n // be sad and add some weak random data\n if(b.length() < needed) {\n /* Draws from Park-Miller \"minimal standard\" 31 bit PRNG,\n implemented with David G. Carta's optimization: with 32 bit math\n and without division (Public Domain). */\n var hi, lo, next;\n var seed = Math.floor(Math.random() * 0x010000);\n while(b.length() < needed) {\n lo = 16807 * (seed & 0xFFFF);\n hi = 16807 * (seed >> 16);\n lo += (hi & 0x7FFF) << 16;\n lo += hi >> 15;\n lo = (lo & 0x7FFFFFFF) + (lo >> 31);\n seed = lo & 0xFFFFFFFF;\n\n // consume lower 3 bytes of seed\n for(var i = 0; i < 3; ++i) {\n // throw in more pseudo random\n next = seed >>> (i << 3);\n next ^= Math.floor(Math.random() * 0x0100);\n b.putByte(String.fromCharCode(next & 0xFF));\n }\n }\n }\n\n return b.getBytes(needed);\n }\n // initialize seed file APIs\n if(_crypto) {\n // use nodejs async API\n ctx.seedFile = function(needed, callback) {\n _crypto.randomBytes(needed, function(err, bytes) {\n if(err) {\n return callback(err);\n }\n callback(null, bytes.toString());\n });\n };\n // use nodejs sync API\n ctx.seedFileSync = function(needed) {\n return _crypto.randomBytes(needed).toString();\n };\n } else {\n ctx.seedFile = function(needed, callback) {\n try {\n callback(null, defaultSeedFile(needed));\n } catch(e) {\n callback(e);\n }\n };\n ctx.seedFileSync = defaultSeedFile;\n }\n\n /**\n * Adds entropy to a prng ctx's accumulator.\n *\n * @param bytes the bytes of entropy as a string.\n */\n ctx.collect = function(bytes) {\n // iterate over pools distributing entropy cyclically\n var count = bytes.length;\n for(var i = 0; i < count; ++i) {\n ctx.pools[ctx.pool].update(bytes.substr(i, 1));\n ctx.pool = (ctx.pool === 31) ? 0 : ctx.pool + 1;\n }\n };\n\n /**\n * Collects an integer of n bits.\n *\n * @param i the integer entropy.\n * @param n the number of bits in the integer.\n */\n ctx.collectInt = function(i, n) {\n var bytes = '';\n for(var x = 0; x < n; x += 8) {\n bytes += String.fromCharCode((i >> x) & 0xFF);\n }\n ctx.collect(bytes);\n };\n\n /**\n * Registers a Web Worker to receive immediate entropy from the main thread.\n * This method is required until Web Workers can access the native crypto\n * API. This method should be called twice for each created worker, once in\n * the main thread, and once in the worker itself.\n *\n * @param worker the worker to register.\n */\n ctx.registerWorker = function(worker) {\n // worker receives random bytes\n if(worker === self) {\n ctx.seedFile = function(needed, callback) {\n function listener(e) {\n var data = e.data;\n if(data.forge && data.forge.prng) {\n self.removeEventListener('message', listener);\n callback(data.forge.prng.err, data.forge.prng.bytes);\n }\n }\n self.addEventListener('message', listener);\n self.postMessage({forge: {prng: {needed: needed}}});\n };\n } else {\n // main thread sends random bytes upon request\n var listener = function(e) {\n var data = e.data;\n if(data.forge && data.forge.prng) {\n ctx.seedFile(data.forge.prng.needed, function(err, bytes) {\n worker.postMessage({forge: {prng: {err: err, bytes: bytes}}});\n });\n }\n };\n // TODO: do we need to remove the event listener when the worker dies?\n worker.addEventListener('message', listener);\n }\n };\n\n return ctx;\n};\n","/**\n * An API for getting cryptographically-secure random bytes. The bytes are\n * generated using the Fortuna algorithm devised by Bruce Schneier and\n * Niels Ferguson.\n *\n * Getting strong random bytes is not yet easy to do in javascript. The only\n * truish random entropy that can be collected is from the mouse, keyboard, or\n * from timing with respect to page loads, etc. This generator makes a poor\n * attempt at providing random bytes when those sources haven't yet provided\n * enough entropy to initially seed or to reseed the PRNG.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2009-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./sha256');\nrequire('./prng');\nrequire('./util');\n\n(function() {\n\n// forge.random already defined\nif(forge.random && forge.random.getBytes) {\n module.exports = forge.random;\n return;\n}\n\n(function(jQuery) {\n\n// the default prng plugin, uses AES-128\nvar prng_aes = {};\nvar _prng_aes_output = new Array(4);\nvar _prng_aes_buffer = forge.util.createBuffer();\nprng_aes.formatKey = function(key) {\n // convert the key into 32-bit integers\n var tmp = forge.util.createBuffer(key);\n key = new Array(4);\n key[0] = tmp.getInt32();\n key[1] = tmp.getInt32();\n key[2] = tmp.getInt32();\n key[3] = tmp.getInt32();\n\n // return the expanded key\n return forge.aes._expandKey(key, false);\n};\nprng_aes.formatSeed = function(seed) {\n // convert seed into 32-bit integers\n var tmp = forge.util.createBuffer(seed);\n seed = new Array(4);\n seed[0] = tmp.getInt32();\n seed[1] = tmp.getInt32();\n seed[2] = tmp.getInt32();\n seed[3] = tmp.getInt32();\n return seed;\n};\nprng_aes.cipher = function(key, seed) {\n forge.aes._updateBlock(key, seed, _prng_aes_output, false);\n _prng_aes_buffer.putInt32(_prng_aes_output[0]);\n _prng_aes_buffer.putInt32(_prng_aes_output[1]);\n _prng_aes_buffer.putInt32(_prng_aes_output[2]);\n _prng_aes_buffer.putInt32(_prng_aes_output[3]);\n return _prng_aes_buffer.getBytes();\n};\nprng_aes.increment = function(seed) {\n // FIXME: do we care about carry or signed issues?\n ++seed[3];\n return seed;\n};\nprng_aes.md = forge.md.sha256;\n\n/**\n * Creates a new PRNG.\n */\nfunction spawnPrng() {\n var ctx = forge.prng.create(prng_aes);\n\n /**\n * Gets random bytes. If a native secure crypto API is unavailable, this\n * method tries to make the bytes more unpredictable by drawing from data that\n * can be collected from the user of the browser, eg: mouse movement.\n *\n * If a callback is given, this method will be called asynchronously.\n *\n * @param count the number of random bytes to get.\n * @param [callback(err, bytes)] called once the operation completes.\n *\n * @return the random bytes in a string.\n */\n ctx.getBytes = function(count, callback) {\n return ctx.generate(count, callback);\n };\n\n /**\n * Gets random bytes asynchronously. If a native secure crypto API is\n * unavailable, this method tries to make the bytes more unpredictable by\n * drawing from data that can be collected from the user of the browser,\n * eg: mouse movement.\n *\n * @param count the number of random bytes to get.\n *\n * @return the random bytes in a string.\n */\n ctx.getBytesSync = function(count) {\n return ctx.generate(count);\n };\n\n return ctx;\n}\n\n// create default prng context\nvar _ctx = spawnPrng();\n\n// add other sources of entropy only if window.crypto.getRandomValues is not\n// available -- otherwise this source will be automatically used by the prng\nvar getRandomValues = null;\nvar globalScope = forge.util.globalScope;\nvar _crypto = globalScope.crypto || globalScope.msCrypto;\nif(_crypto && _crypto.getRandomValues) {\n getRandomValues = function(arr) {\n return _crypto.getRandomValues(arr);\n };\n}\n\nif(forge.options.usePureJavaScript ||\n (!forge.util.isNodejs && !getRandomValues)) {\n // if this is a web worker, do not use weak entropy, instead register to\n // receive strong entropy asynchronously from the main thread\n if(typeof window === 'undefined' || window.document === undefined) {\n // FIXME:\n }\n\n // get load time entropy\n _ctx.collectInt(+new Date(), 32);\n\n // add some entropy from navigator object\n if(typeof(navigator) !== 'undefined') {\n var _navBytes = '';\n for(var key in navigator) {\n try {\n if(typeof(navigator[key]) == 'string') {\n _navBytes += navigator[key];\n }\n } catch(e) {\n /* Some navigator keys might not be accessible, e.g. the geolocation\n attribute throws an exception if touched in Mozilla chrome://\n context.\n\n Silently ignore this and just don't use this as a source of\n entropy. */\n }\n }\n _ctx.collect(_navBytes);\n _navBytes = null;\n }\n\n // add mouse and keyboard collectors if jquery is available\n if(jQuery) {\n // set up mouse entropy capture\n jQuery().mousemove(function(e) {\n // add mouse coords\n _ctx.collectInt(e.clientX, 16);\n _ctx.collectInt(e.clientY, 16);\n });\n\n // set up keyboard entropy capture\n jQuery().keypress(function(e) {\n _ctx.collectInt(e.charCode, 8);\n });\n }\n}\n\n/* Random API */\nif(!forge.random) {\n forge.random = _ctx;\n} else {\n // extend forge.random with _ctx\n for(var key in _ctx) {\n forge.random[key] = _ctx[key];\n }\n}\n\n// expose spawn PRNG\nforge.random.createInstance = spawnPrng;\n\nmodule.exports = forge.random;\n\n})(typeof(jQuery) !== 'undefined' ? jQuery : null);\n\n})();\n","/**\n * RC2 implementation.\n *\n * @author Stefan Siegl\n *\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\n *\n * Information on the RC2 cipher is available from RFC #2268,\n * http://www.ietf.org/rfc/rfc2268.txt\n */\nvar forge = require('./forge');\nrequire('./util');\n\nvar piTable = [\n 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d,\n 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2,\n 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32,\n 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82,\n 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc,\n 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26,\n 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03,\n 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7,\n 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a,\n 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec,\n 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39,\n 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31,\n 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9,\n 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9,\n 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e,\n 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad\n];\n\nvar s = [1, 2, 3, 5];\n\n/**\n * Rotate a word left by given number of bits.\n *\n * Bits that are shifted out on the left are put back in on the right\n * hand side.\n *\n * @param word The word to shift left.\n * @param bits The number of bits to shift by.\n * @return The rotated word.\n */\nvar rol = function(word, bits) {\n return ((word << bits) & 0xffff) | ((word & 0xffff) >> (16 - bits));\n};\n\n/**\n * Rotate a word right by given number of bits.\n *\n * Bits that are shifted out on the right are put back in on the left\n * hand side.\n *\n * @param word The word to shift right.\n * @param bits The number of bits to shift by.\n * @return The rotated word.\n */\nvar ror = function(word, bits) {\n return ((word & 0xffff) >> bits) | ((word << (16 - bits)) & 0xffff);\n};\n\n/* RC2 API */\nmodule.exports = forge.rc2 = forge.rc2 || {};\n\n/**\n * Perform RC2 key expansion as per RFC #2268, section 2.\n *\n * @param key variable-length user key (between 1 and 128 bytes)\n * @param effKeyBits number of effective key bits (default: 128)\n * @return the expanded RC2 key (ByteBuffer of 128 bytes)\n */\nforge.rc2.expandKey = function(key, effKeyBits) {\n if(typeof key === 'string') {\n key = forge.util.createBuffer(key);\n }\n effKeyBits = effKeyBits || 128;\n\n /* introduce variables that match the names used in RFC #2268 */\n var L = key;\n var T = key.length();\n var T1 = effKeyBits;\n var T8 = Math.ceil(T1 / 8);\n var TM = 0xff >> (T1 & 0x07);\n var i;\n\n for(i = T; i < 128; i++) {\n L.putByte(piTable[(L.at(i - 1) + L.at(i - T)) & 0xff]);\n }\n\n L.setAt(128 - T8, piTable[L.at(128 - T8) & TM]);\n\n for(i = 127 - T8; i >= 0; i--) {\n L.setAt(i, piTable[L.at(i + 1) ^ L.at(i + T8)]);\n }\n\n return L;\n};\n\n/**\n * Creates a RC2 cipher object.\n *\n * @param key the symmetric key to use (as base for key generation).\n * @param bits the number of effective key bits.\n * @param encrypt false for decryption, true for encryption.\n *\n * @return the cipher.\n */\nvar createCipher = function(key, bits, encrypt) {\n var _finish = false, _input = null, _output = null, _iv = null;\n var mixRound, mashRound;\n var i, j, K = [];\n\n /* Expand key and fill into K[] Array */\n key = forge.rc2.expandKey(key, bits);\n for(i = 0; i < 64; i++) {\n K.push(key.getInt16Le());\n }\n\n if(encrypt) {\n /**\n * Perform one mixing round \"in place\".\n *\n * @param R Array of four words to perform mixing on.\n */\n mixRound = function(R) {\n for(i = 0; i < 4; i++) {\n R[i] += K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) +\n ((~R[(i + 3) % 4]) & R[(i + 1) % 4]);\n R[i] = rol(R[i], s[i]);\n j++;\n }\n };\n\n /**\n * Perform one mashing round \"in place\".\n *\n * @param R Array of four words to perform mashing on.\n */\n mashRound = function(R) {\n for(i = 0; i < 4; i++) {\n R[i] += K[R[(i + 3) % 4] & 63];\n }\n };\n } else {\n /**\n * Perform one r-mixing round \"in place\".\n *\n * @param R Array of four words to perform mixing on.\n */\n mixRound = function(R) {\n for(i = 3; i >= 0; i--) {\n R[i] = ror(R[i], s[i]);\n R[i] -= K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) +\n ((~R[(i + 3) % 4]) & R[(i + 1) % 4]);\n j--;\n }\n };\n\n /**\n * Perform one r-mashing round \"in place\".\n *\n * @param R Array of four words to perform mashing on.\n */\n mashRound = function(R) {\n for(i = 3; i >= 0; i--) {\n R[i] -= K[R[(i + 3) % 4] & 63];\n }\n };\n }\n\n /**\n * Run the specified cipher execution plan.\n *\n * This function takes four words from the input buffer, applies the IV on\n * it (if requested) and runs the provided execution plan.\n *\n * The plan must be put together in form of a array of arrays. Where the\n * outer one is simply a list of steps to perform and the inner one needs\n * to have two elements: the first one telling how many rounds to perform,\n * the second one telling what to do (i.e. the function to call).\n *\n * @param {Array} plan The plan to execute.\n */\n var runPlan = function(plan) {\n var R = [];\n\n /* Get data from input buffer and fill the four words into R */\n for(i = 0; i < 4; i++) {\n var val = _input.getInt16Le();\n\n if(_iv !== null) {\n if(encrypt) {\n /* We're encrypting, apply the IV first. */\n val ^= _iv.getInt16Le();\n } else {\n /* We're decryption, keep cipher text for next block. */\n _iv.putInt16Le(val);\n }\n }\n\n R.push(val & 0xffff);\n }\n\n /* Reset global \"j\" variable as per spec. */\n j = encrypt ? 0 : 63;\n\n /* Run execution plan. */\n for(var ptr = 0; ptr < plan.length; ptr++) {\n for(var ctr = 0; ctr < plan[ptr][0]; ctr++) {\n plan[ptr][1](R);\n }\n }\n\n /* Write back result to output buffer. */\n for(i = 0; i < 4; i++) {\n if(_iv !== null) {\n if(encrypt) {\n /* We're encrypting in CBC-mode, feed back encrypted bytes into\n IV buffer to carry it forward to next block. */\n _iv.putInt16Le(R[i]);\n } else {\n R[i] ^= _iv.getInt16Le();\n }\n }\n\n _output.putInt16Le(R[i]);\n }\n };\n\n /* Create cipher object */\n var cipher = null;\n cipher = {\n /**\n * Starts or restarts the encryption or decryption process, whichever\n * was previously configured.\n *\n * To use the cipher in CBC mode, iv may be given either as a string\n * of bytes, or as a byte buffer. For ECB mode, give null as iv.\n *\n * @param iv the initialization vector to use, null for ECB mode.\n * @param output the output the buffer to write to, null to create one.\n */\n start: function(iv, output) {\n if(iv) {\n /* CBC mode */\n if(typeof iv === 'string') {\n iv = forge.util.createBuffer(iv);\n }\n }\n\n _finish = false;\n _input = forge.util.createBuffer();\n _output = output || new forge.util.createBuffer();\n _iv = iv;\n\n cipher.output = _output;\n },\n\n /**\n * Updates the next block.\n *\n * @param input the buffer to read from.\n */\n update: function(input) {\n if(!_finish) {\n // not finishing, so fill the input buffer with more input\n _input.putBuffer(input);\n }\n\n while(_input.length() >= 8) {\n runPlan([\n [ 5, mixRound ],\n [ 1, mashRound ],\n [ 6, mixRound ],\n [ 1, mashRound ],\n [ 5, mixRound ]\n ]);\n }\n },\n\n /**\n * Finishes encrypting or decrypting.\n *\n * @param pad a padding function to use, null for PKCS#7 padding,\n * signature(blockSize, buffer, decrypt).\n *\n * @return true if successful, false on error.\n */\n finish: function(pad) {\n var rval = true;\n\n if(encrypt) {\n if(pad) {\n rval = pad(8, _input, !encrypt);\n } else {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (_input.length() === 8) ? 8 : (8 - _input.length());\n _input.fillWithByte(padding, padding);\n }\n }\n\n if(rval) {\n // do final update\n _finish = true;\n cipher.update();\n }\n\n if(!encrypt) {\n // check for error: input data not a multiple of block size\n rval = (_input.length() === 0);\n if(rval) {\n if(pad) {\n rval = pad(8, _output, !encrypt);\n } else {\n // ensure padding byte count is valid\n var len = _output.length();\n var count = _output.at(len - 1);\n\n if(count > len) {\n rval = false;\n } else {\n // trim off padding bytes\n _output.truncate(count);\n }\n }\n }\n }\n\n return rval;\n }\n };\n\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the\n * given symmetric key. The output will be stored in the 'output' member\n * of the returned cipher.\n *\n * The key and iv may be given as a string of bytes or a byte buffer.\n * The cipher is initialized to use 128 effective key bits.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n *\n * @return the cipher.\n */\nforge.rc2.startEncrypting = function(key, iv, output) {\n var cipher = forge.rc2.createEncryptionCipher(key, 128);\n cipher.start(iv, output);\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the\n * given symmetric key.\n *\n * The key may be given as a string of bytes or a byte buffer.\n *\n * To start encrypting call start() on the cipher with an iv and optional\n * output buffer.\n *\n * @param key the symmetric key to use.\n *\n * @return the cipher.\n */\nforge.rc2.createEncryptionCipher = function(key, bits) {\n return createCipher(key, bits, true);\n};\n\n/**\n * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the\n * given symmetric key. The output will be stored in the 'output' member\n * of the returned cipher.\n *\n * The key and iv may be given as a string of bytes or a byte buffer.\n * The cipher is initialized to use 128 effective key bits.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n *\n * @return the cipher.\n */\nforge.rc2.startDecrypting = function(key, iv, output) {\n var cipher = forge.rc2.createDecryptionCipher(key, 128);\n cipher.start(iv, output);\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the\n * given symmetric key.\n *\n * The key may be given as a string of bytes or a byte buffer.\n *\n * To start decrypting call start() on the cipher with an iv and optional\n * output buffer.\n *\n * @param key the symmetric key to use.\n *\n * @return the cipher.\n */\nforge.rc2.createDecryptionCipher = function(key, bits) {\n return createCipher(key, bits, false);\n};\n","// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n/*\nLicensing (LICENSE)\n-------------------\n\nThis software is covered under the following copyright:\n*/\n/*\n * Copyright (c) 2003-2005 Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n/*\nAddress all questions regarding this license to:\n\n Tom Wu\n tjw@cs.Stanford.EDU\n*/\nvar forge = require('./forge');\n\nmodule.exports = forge.jsbn = forge.jsbn || {};\n\n// Bits per digit\nvar dbits;\n\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary&0xffffff)==0xefcafe);\n\n// (public) Constructor\nfunction BigInteger(a,b,c) {\n this.data = [];\n if(a != null)\n if(\"number\" == typeof a) this.fromNumber(a,b,c);\n else if(b == null && \"string\" != typeof a) this.fromString(a,256);\n else this.fromString(a,b);\n}\nforge.jsbn.BigInteger = BigInteger;\n\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\n\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\nfunction am1(i,x,w,j,c,n) {\n while(--n >= 0) {\n var v = x*this.data[i++]+w.data[j]+c;\n c = Math.floor(v/0x4000000);\n w.data[j++] = v&0x3ffffff;\n }\n return c;\n}\n// am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\nfunction am2(i,x,w,j,c,n) {\n var xl = x&0x7fff, xh = x>>15;\n while(--n >= 0) {\n var l = this.data[i]&0x7fff;\n var h = this.data[i++]>>15;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x7fff)<<15)+w.data[j]+(c&0x3fffffff);\n c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n w.data[j++] = l&0x3fffffff;\n }\n return c;\n}\n// Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\nfunction am3(i,x,w,j,c,n) {\n var xl = x&0x3fff, xh = x>>14;\n while(--n >= 0) {\n var l = this.data[i]&0x3fff;\n var h = this.data[i++]>>14;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x3fff)<<14)+w.data[j]+c;\n c = (l>>28)+(m>>14)+xh*h;\n w.data[j++] = l&0xfffffff;\n }\n return c;\n}\n\n// node.js (no browser)\nif(typeof(navigator) === 'undefined')\n{\n BigInteger.prototype.am = am3;\n dbits = 28;\n} else if(j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else if(j_lm && (navigator.appName != \"Netscape\")) {\n BigInteger.prototype.am = am1;\n dbits = 26;\n} else { // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1<<dbits)-1);\nBigInteger.prototype.DV = (1<<dbits);\n\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2,BI_FP);\nBigInteger.prototype.F1 = BI_FP-dbits;\nBigInteger.prototype.F2 = 2*dbits-BI_FP;\n\n// Digit conversions\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nvar BI_RC = new Array();\nvar rr,vv;\nrr = \"0\".charCodeAt(0);\nfor(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\nrr = \"a\".charCodeAt(0);\nfor(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\nrr = \"A\".charCodeAt(0);\nfor(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n\nfunction int2char(n) { return BI_RM.charAt(n); }\nfunction intAt(s,i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c==null)?-1:c;\n}\n\n// (protected) copy this to r\nfunction bnpCopyTo(r) {\n for(var i = this.t-1; i >= 0; --i) r.data[i] = this.data[i];\n r.t = this.t;\n r.s = this.s;\n}\n\n// (protected) set from integer value x, -DV <= x < DV\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = (x<0)?-1:0;\n if(x > 0) this.data[0] = x;\n else if(x < -1) this.data[0] = x+this.DV;\n else this.t = 0;\n}\n\n// return bigint initialized to value\nfunction nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n// (protected) set from string and radix\nfunction bnpFromString(s,b) {\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 256) k = 8; // byte array\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else { this.fromRadix(s,b); return; }\n this.t = 0;\n this.s = 0;\n var i = s.length, mi = false, sh = 0;\n while(--i >= 0) {\n var x = (k==8)?s[i]&0xff:intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\") mi = true;\n continue;\n }\n mi = false;\n if(sh == 0)\n this.data[this.t++] = x;\n else if(sh+k > this.DB) {\n this.data[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;\n this.data[this.t++] = (x>>(this.DB-sh));\n } else\n this.data[this.t-1] |= x<<sh;\n sh += k;\n if(sh >= this.DB) sh -= this.DB;\n }\n if(k == 8 && (s[0]&0x80) != 0) {\n this.s = -1;\n if(sh > 0) this.data[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;\n }\n this.clamp();\n if(mi) BigInteger.ZERO.subTo(this,this);\n}\n\n// (protected) clamp off excess high words\nfunction bnpClamp() {\n var c = this.s&this.DM;\n while(this.t > 0 && this.data[this.t-1] == c) --this.t;\n}\n\n// (public) return string representation in given radix\nfunction bnToString(b) {\n if(this.s < 0) return \"-\"+this.negate().toString(b);\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else return this.toRadix(b);\n var km = (1<<k)-1, d, m = false, r = \"\", i = this.t;\n var p = this.DB-(i*this.DB)%k;\n if(i-- > 0) {\n if(p < this.DB && (d = this.data[i]>>p) > 0) { m = true; r = int2char(d); }\n while(i >= 0) {\n if(p < k) {\n d = (this.data[i]&((1<<p)-1))<<(k-p);\n d |= this.data[--i]>>(p+=this.DB-k);\n } else {\n d = (this.data[i]>>(p-=k))&km;\n if(p <= 0) { p += this.DB; --i; }\n }\n if(d > 0) m = true;\n if(m) r += int2char(d);\n }\n }\n return m?r:\"0\";\n}\n\n// (public) -this\nfunction bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n// (public) |this|\nfunction bnAbs() { return (this.s<0)?this.negate():this; }\n\n// (public) return + if this > a, - if this < a, 0 if equal\nfunction bnCompareTo(a) {\n var r = this.s-a.s;\n if(r != 0) return r;\n var i = this.t;\n r = i-a.t;\n if(r != 0) return (this.s<0)?-r:r;\n while(--i >= 0) if((r=this.data[i]-a.data[i]) != 0) return r;\n return 0;\n}\n\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1, t;\n if((t=x>>>16) != 0) { x = t; r += 16; }\n if((t=x>>8) != 0) { x = t; r += 8; }\n if((t=x>>4) != 0) { x = t; r += 4; }\n if((t=x>>2) != 0) { x = t; r += 2; }\n if((t=x>>1) != 0) { x = t; r += 1; }\n return r;\n}\n\n// (public) return the number of bits in \"this\"\nfunction bnBitLength() {\n if(this.t <= 0) return 0;\n return this.DB*(this.t-1)+nbits(this.data[this.t-1]^(this.s&this.DM));\n}\n\n// (protected) r = this << n*DB\nfunction bnpDLShiftTo(n,r) {\n var i;\n for(i = this.t-1; i >= 0; --i) r.data[i+n] = this.data[i];\n for(i = n-1; i >= 0; --i) r.data[i] = 0;\n r.t = this.t+n;\n r.s = this.s;\n}\n\n// (protected) r = this >> n*DB\nfunction bnpDRShiftTo(n,r) {\n for(var i = n; i < this.t; ++i) r.data[i-n] = this.data[i];\n r.t = Math.max(this.t-n,0);\n r.s = this.s;\n}\n\n// (protected) r = this << n\nfunction bnpLShiftTo(n,r) {\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<<cbs)-1;\n var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;\n for(i = this.t-1; i >= 0; --i) {\n r.data[i+ds+1] = (this.data[i]>>cbs)|c;\n c = (this.data[i]&bm)<<bs;\n }\n for(i = ds-1; i >= 0; --i) r.data[i] = 0;\n r.data[ds] = c;\n r.t = this.t+ds+1;\n r.s = this.s;\n r.clamp();\n}\n\n// (protected) r = this >> n\nfunction bnpRShiftTo(n,r) {\n r.s = this.s;\n var ds = Math.floor(n/this.DB);\n if(ds >= this.t) { r.t = 0; return; }\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<<bs)-1;\n r.data[0] = this.data[ds]>>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r.data[i-ds-1] |= (this.data[i]&bm)<<cbs;\n r.data[i-ds] = this.data[i]>>bs;\n }\n if(bs > 0) r.data[this.t-ds-1] |= (this.s&bm)<<cbs;\n r.t = this.t-ds;\n r.clamp();\n}\n\n// (protected) r = this - a\nfunction bnpSubTo(a,r) {\n var i = 0, c = 0, m = Math.min(a.t,this.t);\n while(i < m) {\n c += this.data[i]-a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n if(a.t < this.t) {\n c -= a.s;\n while(i < this.t) {\n c += this.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n } else {\n c += this.s;\n while(i < a.t) {\n c -= a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c<0)?-1:0;\n if(c < -1) r.data[i++] = this.DV+c;\n else if(c > 0) r.data[i++] = c;\n r.t = i;\n r.clamp();\n}\n\n// (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyTo(a,r) {\n var x = this.abs(), y = a.abs();\n var i = x.t;\n r.t = i+y.t;\n while(--i >= 0) r.data[i] = 0;\n for(i = 0; i < y.t; ++i) r.data[i+x.t] = x.am(0,y.data[i],r,i,0,x.t);\n r.s = 0;\n r.clamp();\n if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n}\n\n// (protected) r = this^2, r != this (HAC 14.16)\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2*x.t;\n while(--i >= 0) r.data[i] = 0;\n for(i = 0; i < x.t-1; ++i) {\n var c = x.am(i,x.data[i],r,2*i,0,1);\n if((r.data[i+x.t]+=x.am(i+1,2*x.data[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n r.data[i+x.t] -= x.DV;\n r.data[i+x.t+1] = 1;\n }\n }\n if(r.t > 0) r.data[r.t-1] += x.am(i,x.data[i],r,2*i,0,1);\n r.s = 0;\n r.clamp();\n}\n\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\nfunction bnpDivRemTo(m,q,r) {\n var pm = m.abs();\n if(pm.t <= 0) return;\n var pt = this.abs();\n if(pt.t < pm.t) {\n if(q != null) q.fromInt(0);\n if(r != null) this.copyTo(r);\n return;\n }\n if(r == null) r = nbi();\n var y = nbi(), ts = this.s, ms = m.s;\n var nsh = this.DB-nbits(pm.data[pm.t-1]);\t// normalize modulus\n if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } else { pm.copyTo(y); pt.copyTo(r); }\n var ys = y.t;\n var y0 = y.data[ys-1];\n if(y0 == 0) return;\n var yt = y0*(1<<this.F1)+((ys>1)?y.data[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;\n var i = r.t, j = i-ys, t = (q==null)?nbi():q;\n y.dlShiftTo(j,t);\n if(r.compareTo(t) >= 0) {\n r.data[r.t++] = 1;\n r.subTo(t,r);\n }\n BigInteger.ONE.dlShiftTo(ys,t);\n t.subTo(y,y);\t// \"negative\" y so we can replace sub with am later\n while(y.t < ys) y.data[y.t++] = 0;\n while(--j >= 0) {\n // Estimate quotient digit\n var qd = (r.data[--i]==y0)?this.DM:Math.floor(r.data[i]*d1+(r.data[i-1]+e)*d2);\n if((r.data[i]+=y.am(0,qd,r,j,0,ys)) < qd) {\t// Try it out\n y.dlShiftTo(j,t);\n r.subTo(t,r);\n while(r.data[i] < --qd) r.subTo(t,r);\n }\n }\n if(q != null) {\n r.drShiftTo(ys,q);\n if(ts != ms) BigInteger.ZERO.subTo(q,q);\n }\n r.t = ys;\n r.clamp();\n if(nsh > 0) r.rShiftTo(nsh,r);\t// Denormalize remainder\n if(ts < 0) BigInteger.ZERO.subTo(r,r);\n}\n\n// (public) this mod a\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a,null,r);\n if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n return r;\n}\n\n// Modular reduction using \"classic\" algorithm\nfunction Classic(m) { this.m = m; }\nfunction cConvert(x) {\n if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n}\nfunction cRevert(x) { return x; }\nfunction cReduce(x) { x.divRemTo(this.m,null,x); }\nfunction cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\nfunction cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\nClassic.prototype.convert = cConvert;\nClassic.prototype.revert = cRevert;\nClassic.prototype.reduce = cReduce;\nClassic.prototype.mulTo = cMulTo;\nClassic.prototype.sqrTo = cSqrTo;\n\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\nfunction bnpInvDigit() {\n if(this.t < 1) return 0;\n var x = this.data[0];\n if((x&1) == 0) return 0;\n var y = x&3;\t\t// y == 1/x mod 2^2\n y = (y*(2-(x&0xf)*y))&0xf;\t// y == 1/x mod 2^4\n y = (y*(2-(x&0xff)*y))&0xff;\t// y == 1/x mod 2^8\n y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;\t// y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y*(2-x*y%this.DV))%this.DV;\t\t// y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y>0)?this.DV-y:-y;\n}\n\n// Montgomery reduction\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp&0x7fff;\n this.mph = this.mp>>15;\n this.um = (1<<(m.DB-15))-1;\n this.mt2 = 2*m.t;\n}\n\n// xR mod m\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t,r);\n r.divRemTo(this.m,null,r);\n if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n return r;\n}\n\n// x/R mod m\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n}\n\n// x = x/R mod m (HAC 14.32)\nfunction montReduce(x) {\n while(x.t <= this.mt2)\t// pad x so am has enough room later\n x.data[x.t++] = 0;\n for(var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x.data[i]*mp mod DV\n var j = x.data[i]&0x7fff;\n var u0 = (j*this.mpl+(((j*this.mph+(x.data[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i+this.m.t;\n x.data[j] += this.m.am(0,u0,x,i,0,this.m.t);\n // propagate carry\n while(x.data[j] >= x.DV) { x.data[j] -= x.DV; x.data[++j]++; }\n }\n x.clamp();\n x.drShiftTo(this.m.t,x);\n if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n// r = \"x^2/R mod m\"; x != r\nfunction montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n// r = \"xy/R mod m\"; x,y != r\nfunction montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\n\n// (protected) true iff this is even\nfunction bnpIsEven() { return ((this.t>0)?(this.data[0]&1):this.s) == 0; }\n\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\nfunction bnpExp(e,z) {\n if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n g.copyTo(r);\n while(--i >= 0) {\n z.sqrTo(r,r2);\n if((e&(1<<i)) > 0) z.mulTo(r2,g,r);\n else { var t = r; r = r2; r2 = t; }\n }\n return z.revert(r);\n}\n\n// (public) this^e % m, 0 <= e < 2^32\nfunction bnModPowInt(e,m) {\n var z;\n if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n return this.exp(e,z);\n}\n\n// protected\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.isEven = bnpIsEven;\nBigInteger.prototype.exp = bnpExp;\n\n// public\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.modPowInt = bnModPowInt;\n\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n// jsbn2 lib\n\n//Copyright (c) 2005-2009 Tom Wu\n//All Rights Reserved.\n//See \"LICENSE\" for details (See jsbn.js for LICENSE).\n\n//Extended JavaScript BN functions, required for RSA private ops.\n\n//Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n\n//(public)\nfunction bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n//(public) return value as integer\nfunction bnIntValue() {\nif(this.s < 0) {\n if(this.t == 1) return this.data[0]-this.DV;\n else if(this.t == 0) return -1;\n} else if(this.t == 1) return this.data[0];\nelse if(this.t == 0) return 0;\n// assumes 16 < DB < 32\nreturn ((this.data[1]&((1<<(32-this.DB))-1))<<this.DB)|this.data[0];\n}\n\n//(public) return value as byte\nfunction bnByteValue() { return (this.t==0)?this.s:(this.data[0]<<24)>>24; }\n\n//(public) return value as short (assumes DB>=16)\nfunction bnShortValue() { return (this.t==0)?this.s:(this.data[0]<<16)>>16; }\n\n//(protected) return x s.t. r^x < DV\nfunction bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n//(public) 0 if this == 0, 1 if this > 0\nfunction bnSigNum() {\nif(this.s < 0) return -1;\nelse if(this.t <= 0 || (this.t == 1 && this.data[0] <= 0)) return 0;\nelse return 1;\n}\n\n//(protected) convert to radix string\nfunction bnpToRadix(b) {\nif(b == null) b = 10;\nif(this.signum() == 0 || b < 2 || b > 36) return \"0\";\nvar cs = this.chunkSize(b);\nvar a = Math.pow(b,cs);\nvar d = nbv(a), y = nbi(), z = nbi(), r = \"\";\nthis.divRemTo(d,y,z);\nwhile(y.signum() > 0) {\n r = (a+z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d,y,z);\n}\nreturn z.intValue().toString(b) + r;\n}\n\n//(protected) convert from radix string\nfunction bnpFromRadix(s,b) {\nthis.fromInt(0);\nif(b == null) b = 10;\nvar cs = this.chunkSize(b);\nvar d = Math.pow(b,cs), mi = false, j = 0, w = 0;\nfor(var i = 0; i < s.length; ++i) {\n var x = intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n continue;\n }\n w = b*w+x;\n if(++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w,0);\n j = 0;\n w = 0;\n }\n}\nif(j > 0) {\n this.dMultiply(Math.pow(b,j));\n this.dAddOffset(w,0);\n}\nif(mi) BigInteger.ZERO.subTo(this,this);\n}\n\n//(protected) alternate constructor\nfunction bnpFromNumber(a,b,c) {\nif(\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if(a < 2) this.fromInt(1);\n else {\n this.fromNumber(a,c);\n if(!this.testBit(a-1)) // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n if(this.isEven()) this.dAddOffset(1,0); // force odd\n while(!this.isProbablePrime(b)) {\n this.dAddOffset(2,0);\n if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n }\n }\n} else {\n // new BigInteger(int,RNG)\n var x = new Array(), t = a&7;\n x.length = (a>>3)+1;\n b.nextBytes(x);\n if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;\n this.fromString(x,256);\n}\n}\n\n//(public) convert to bigendian byte array\nfunction bnToByteArray() {\nvar i = this.t, r = new Array();\nr[0] = this.s;\nvar p = this.DB-(i*this.DB)%8, d, k = 0;\nif(i-- > 0) {\n if(p < this.DB && (d = this.data[i]>>p) != (this.s&this.DM)>>p)\n r[k++] = d|(this.s<<(this.DB-p));\n while(i >= 0) {\n if(p < 8) {\n d = (this.data[i]&((1<<p)-1))<<(8-p);\n d |= this.data[--i]>>(p+=this.DB-8);\n } else {\n d = (this.data[i]>>(p-=8))&0xff;\n if(p <= 0) { p += this.DB; --i; }\n }\n if((d&0x80) != 0) d |= -256;\n if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n if(k > 0 || d != this.s) r[k++] = d;\n }\n}\nreturn r;\n}\n\nfunction bnEquals(a) { return(this.compareTo(a)==0); }\nfunction bnMin(a) { return(this.compareTo(a)<0)?this:a; }\nfunction bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n//(protected) r = this op a (bitwise)\nfunction bnpBitwiseTo(a,op,r) {\nvar i, f, m = Math.min(a.t,this.t);\nfor(i = 0; i < m; ++i) r.data[i] = op(this.data[i],a.data[i]);\nif(a.t < this.t) {\n f = a.s&this.DM;\n for(i = m; i < this.t; ++i) r.data[i] = op(this.data[i],f);\n r.t = this.t;\n} else {\n f = this.s&this.DM;\n for(i = m; i < a.t; ++i) r.data[i] = op(f,a.data[i]);\n r.t = a.t;\n}\nr.s = op(this.s,a.s);\nr.clamp();\n}\n\n//(public) this & a\nfunction op_and(x,y) { return x&y; }\nfunction bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n//(public) this | a\nfunction op_or(x,y) { return x|y; }\nfunction bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n//(public) this ^ a\nfunction op_xor(x,y) { return x^y; }\nfunction bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n//(public) this & ~a\nfunction op_andnot(x,y) { return x&~y; }\nfunction bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n//(public) ~this\nfunction bnNot() {\nvar r = nbi();\nfor(var i = 0; i < this.t; ++i) r.data[i] = this.DM&~this.data[i];\nr.t = this.t;\nr.s = ~this.s;\nreturn r;\n}\n\n//(public) this << n\nfunction bnShiftLeft(n) {\nvar r = nbi();\nif(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\nreturn r;\n}\n\n//(public) this >> n\nfunction bnShiftRight(n) {\nvar r = nbi();\nif(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\nreturn r;\n}\n\n//return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\nif(x == 0) return -1;\nvar r = 0;\nif((x&0xffff) == 0) { x >>= 16; r += 16; }\nif((x&0xff) == 0) { x >>= 8; r += 8; }\nif((x&0xf) == 0) { x >>= 4; r += 4; }\nif((x&3) == 0) { x >>= 2; r += 2; }\nif((x&1) == 0) ++r;\nreturn r;\n}\n\n//(public) returns index of lowest 1-bit (or -1 if none)\nfunction bnGetLowestSetBit() {\nfor(var i = 0; i < this.t; ++i)\n if(this.data[i] != 0) return i*this.DB+lbit(this.data[i]);\nif(this.s < 0) return this.t*this.DB;\nreturn -1;\n}\n\n//return number of 1 bits in x\nfunction cbit(x) {\nvar r = 0;\nwhile(x != 0) { x &= x-1; ++r; }\nreturn r;\n}\n\n//(public) return number of set bits\nfunction bnBitCount() {\nvar r = 0, x = this.s&this.DM;\nfor(var i = 0; i < this.t; ++i) r += cbit(this.data[i]^x);\nreturn r;\n}\n\n//(public) true iff nth bit is set\nfunction bnTestBit(n) {\nvar j = Math.floor(n/this.DB);\nif(j >= this.t) return(this.s!=0);\nreturn((this.data[j]&(1<<(n%this.DB)))!=0);\n}\n\n//(protected) this op (1<<n)\nfunction bnpChangeBit(n,op) {\nvar r = BigInteger.ONE.shiftLeft(n);\nthis.bitwiseTo(r,op,r);\nreturn r;\n}\n\n//(public) this | (1<<n)\nfunction bnSetBit(n) { return this.changeBit(n,op_or); }\n\n//(public) this & ~(1<<n)\nfunction bnClearBit(n) { return this.changeBit(n,op_andnot); }\n\n//(public) this ^ (1<<n)\nfunction bnFlipBit(n) { return this.changeBit(n,op_xor); }\n\n//(protected) r = this + a\nfunction bnpAddTo(a,r) {\nvar i = 0, c = 0, m = Math.min(a.t,this.t);\nwhile(i < m) {\n c += this.data[i]+a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n}\nif(a.t < this.t) {\n c += a.s;\n while(i < this.t) {\n c += this.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n} else {\n c += this.s;\n while(i < a.t) {\n c += a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += a.s;\n}\nr.s = (c<0)?-1:0;\nif(c > 0) r.data[i++] = c;\nelse if(c < -1) r.data[i++] = this.DV+c;\nr.t = i;\nr.clamp();\n}\n\n//(public) this + a\nfunction bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n//(public) this - a\nfunction bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n//(public) this * a\nfunction bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n//(public) this / a\nfunction bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n//(public) this % a\nfunction bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n//(public) [this/a,this%a]\nfunction bnDivideAndRemainder(a) {\nvar q = nbi(), r = nbi();\nthis.divRemTo(a,q,r);\nreturn new Array(q,r);\n}\n\n//(protected) this *= n, this >= 0, 1 < n < DV\nfunction bnpDMultiply(n) {\nthis.data[this.t] = this.am(0,n-1,this,0,0,this.t);\n++this.t;\nthis.clamp();\n}\n\n//(protected) this += n << w words, this >= 0\nfunction bnpDAddOffset(n,w) {\nif(n == 0) return;\nwhile(this.t <= w) this.data[this.t++] = 0;\nthis.data[w] += n;\nwhile(this.data[w] >= this.DV) {\n this.data[w] -= this.DV;\n if(++w >= this.t) this.data[this.t++] = 0;\n ++this.data[w];\n}\n}\n\n//A \"null\" reducer\nfunction NullExp() {}\nfunction nNop(x) { return x; }\nfunction nMulTo(x,y,r) { x.multiplyTo(y,r); }\nfunction nSqrTo(x,r) { x.squareTo(r); }\n\nNullExp.prototype.convert = nNop;\nNullExp.prototype.revert = nNop;\nNullExp.prototype.mulTo = nMulTo;\nNullExp.prototype.sqrTo = nSqrTo;\n\n//(public) this^e\nfunction bnPow(e) { return this.exp(e,new NullExp()); }\n\n//(protected) r = lower n words of \"this * a\", a.t <= n\n//\"this\" should be the larger one if appropriate.\nfunction bnpMultiplyLowerTo(a,n,r) {\nvar i = Math.min(this.t+a.t,n);\nr.s = 0; // assumes a,this >= 0\nr.t = i;\nwhile(i > 0) r.data[--i] = 0;\nvar j;\nfor(j = r.t-this.t; i < j; ++i) r.data[i+this.t] = this.am(0,a.data[i],r,i,0,this.t);\nfor(j = Math.min(a.t,n); i < j; ++i) this.am(0,a.data[i],r,i,0,n-i);\nr.clamp();\n}\n\n//(protected) r = \"this * a\" without lower n words, n > 0\n//\"this\" should be the larger one if appropriate.\nfunction bnpMultiplyUpperTo(a,n,r) {\n--n;\nvar i = r.t = this.t+a.t-n;\nr.s = 0; // assumes a,this >= 0\nwhile(--i >= 0) r.data[i] = 0;\nfor(i = Math.max(n-this.t,0); i < a.t; ++i)\n r.data[this.t+i-n] = this.am(n-i,a.data[i],r,0,0,this.t+i-n);\nr.clamp();\nr.drShiftTo(1,r);\n}\n\n//Barrett modular reduction\nfunction Barrett(m) {\n// setup Barrett\nthis.r2 = nbi();\nthis.q3 = nbi();\nBigInteger.ONE.dlShiftTo(2*m.t,this.r2);\nthis.mu = this.r2.divide(m);\nthis.m = m;\n}\n\nfunction barrettConvert(x) {\nif(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\nelse if(x.compareTo(this.m) < 0) return x;\nelse { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n}\n\nfunction barrettRevert(x) { return x; }\n\n//x = x mod m (HAC 14.42)\nfunction barrettReduce(x) {\nx.drShiftTo(this.m.t-1,this.r2);\nif(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\nthis.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\nthis.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\nwhile(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\nx.subTo(this.r2,x);\nwhile(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n//r = x^2 mod m; x != r\nfunction barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n//r = x*y mod m; x,y != r\nfunction barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\n\n//(public) this^e % m (HAC 14.85)\nfunction bnModPow(e,m) {\nvar i = e.bitLength(), k, r = nbv(1), z;\nif(i <= 0) return r;\nelse if(i < 18) k = 1;\nelse if(i < 48) k = 3;\nelse if(i < 144) k = 4;\nelse if(i < 768) k = 5;\nelse k = 6;\nif(i < 8)\n z = new Classic(m);\nelse if(m.isEven())\n z = new Barrett(m);\nelse\n z = new Montgomery(m);\n\n// precomputation\nvar g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;\ng[1] = z.convert(this);\nif(k > 1) {\n var g2 = nbi();\n z.sqrTo(g[1],g2);\n while(n <= km) {\n g[n] = nbi();\n z.mulTo(g2,g[n-2],g[n]);\n n += 2;\n }\n}\n\nvar j = e.t-1, w, is1 = true, r2 = nbi(), t;\ni = nbits(e.data[j])-1;\nwhile(j >= 0) {\n if(i >= k1) w = (e.data[j]>>(i-k1))&km;\n else {\n w = (e.data[j]&((1<<(i+1))-1))<<(k1-i);\n if(j > 0) w |= e.data[j-1]>>(this.DB+i-k1);\n }\n\n n = k;\n while((w&1) == 0) { w >>= 1; --n; }\n if((i -= n) < 0) { i += this.DB; --j; }\n if(is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n } else {\n while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n z.mulTo(r2,g[w],r);\n }\n\n while(j >= 0 && (e.data[j]&(1<<i)) == 0) {\n z.sqrTo(r,r2); t = r; r = r2; r2 = t;\n if(--i < 0) { i = this.DB-1; --j; }\n }\n}\nreturn z.revert(r);\n}\n\n//(public) gcd(this,a) (HAC 14.54)\nfunction bnGCD(a) {\nvar x = (this.s<0)?this.negate():this.clone();\nvar y = (a.s<0)?a.negate():a.clone();\nif(x.compareTo(y) < 0) { var t = x; x = y; y = t; }\nvar i = x.getLowestSetBit(), g = y.getLowestSetBit();\nif(g < 0) return x;\nif(i < g) g = i;\nif(g > 0) {\n x.rShiftTo(g,x);\n y.rShiftTo(g,y);\n}\nwhile(x.signum() > 0) {\n if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n if(x.compareTo(y) >= 0) {\n x.subTo(y,x);\n x.rShiftTo(1,x);\n } else {\n y.subTo(x,y);\n y.rShiftTo(1,y);\n }\n}\nif(g > 0) y.lShiftTo(g,y);\nreturn y;\n}\n\n//(protected) this % n, n < 2^26\nfunction bnpModInt(n) {\nif(n <= 0) return 0;\nvar d = this.DV%n, r = (this.s<0)?n-1:0;\nif(this.t > 0)\n if(d == 0) r = this.data[0]%n;\n else for(var i = this.t-1; i >= 0; --i) r = (d*r+this.data[i])%n;\nreturn r;\n}\n\n//(public) 1/this % m (HAC 14.61)\nfunction bnModInverse(m) {\nvar ac = m.isEven();\nif((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\nvar u = m.clone(), v = this.clone();\nvar a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\nwhile(u.signum() != 0) {\n while(u.isEven()) {\n u.rShiftTo(1,u);\n if(ac) {\n if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n a.rShiftTo(1,a);\n } else if(!b.isEven()) b.subTo(m,b);\n b.rShiftTo(1,b);\n }\n while(v.isEven()) {\n v.rShiftTo(1,v);\n if(ac) {\n if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n c.rShiftTo(1,c);\n } else if(!d.isEven()) d.subTo(m,d);\n d.rShiftTo(1,d);\n }\n if(u.compareTo(v) >= 0) {\n u.subTo(v,u);\n if(ac) a.subTo(c,a);\n b.subTo(d,b);\n } else {\n v.subTo(u,v);\n if(ac) c.subTo(a,c);\n d.subTo(b,d);\n }\n}\nif(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\nif(d.compareTo(m) >= 0) return d.subtract(m);\nif(d.signum() < 0) d.addTo(m,d); else return d;\nif(d.signum() < 0) return d.add(m); else return d;\n}\n\nvar lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];\nvar lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n//(public) test primality with certainty >= 1-.5^t\nfunction bnIsProbablePrime(t) {\nvar i, x = this.abs();\nif(x.t == 1 && x.data[0] <= lowprimes[lowprimes.length-1]) {\n for(i = 0; i < lowprimes.length; ++i)\n if(x.data[0] == lowprimes[i]) return true;\n return false;\n}\nif(x.isEven()) return false;\ni = 1;\nwhile(i < lowprimes.length) {\n var m = lowprimes[i], j = i+1;\n while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n m = x.modInt(m);\n while(i < j) if(m%lowprimes[i++] == 0) return false;\n}\nreturn x.millerRabin(t);\n}\n\n//(protected) true if probably prime (HAC 4.24, Miller-Rabin)\nfunction bnpMillerRabin(t) {\nvar n1 = this.subtract(BigInteger.ONE);\nvar k = n1.getLowestSetBit();\nif(k <= 0) return false;\nvar r = n1.shiftRight(k);\nvar prng = bnGetPrng();\nvar a;\nfor(var i = 0; i < t; ++i) {\n // select witness 'a' at random from between 1 and n1\n do {\n a = new BigInteger(this.bitLength(), prng);\n }\n while(a.compareTo(BigInteger.ONE) <= 0 || a.compareTo(n1) >= 0);\n var y = a.modPow(r,this);\n if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while(j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2,this);\n if(y.compareTo(BigInteger.ONE) == 0) return false;\n }\n if(y.compareTo(n1) != 0) return false;\n }\n}\nreturn true;\n}\n\n// get pseudo random number generator\nfunction bnGetPrng() {\n // create prng with api that matches BigInteger secure random\n return {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n for(var i = 0; i < x.length; ++i) {\n x[i] = Math.floor(Math.random() * 0x0100);\n }\n }\n };\n}\n\n//protected\nBigInteger.prototype.chunkSize = bnpChunkSize;\nBigInteger.prototype.toRadix = bnpToRadix;\nBigInteger.prototype.fromRadix = bnpFromRadix;\nBigInteger.prototype.fromNumber = bnpFromNumber;\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\nBigInteger.prototype.changeBit = bnpChangeBit;\nBigInteger.prototype.addTo = bnpAddTo;\nBigInteger.prototype.dMultiply = bnpDMultiply;\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\nBigInteger.prototype.modInt = bnpModInt;\nBigInteger.prototype.millerRabin = bnpMillerRabin;\n\n//public\nBigInteger.prototype.clone = bnClone;\nBigInteger.prototype.intValue = bnIntValue;\nBigInteger.prototype.byteValue = bnByteValue;\nBigInteger.prototype.shortValue = bnShortValue;\nBigInteger.prototype.signum = bnSigNum;\nBigInteger.prototype.toByteArray = bnToByteArray;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.min = bnMin;\nBigInteger.prototype.max = bnMax;\nBigInteger.prototype.and = bnAnd;\nBigInteger.prototype.or = bnOr;\nBigInteger.prototype.xor = bnXor;\nBigInteger.prototype.andNot = bnAndNot;\nBigInteger.prototype.not = bnNot;\nBigInteger.prototype.shiftLeft = bnShiftLeft;\nBigInteger.prototype.shiftRight = bnShiftRight;\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\nBigInteger.prototype.bitCount = bnBitCount;\nBigInteger.prototype.testBit = bnTestBit;\nBigInteger.prototype.setBit = bnSetBit;\nBigInteger.prototype.clearBit = bnClearBit;\nBigInteger.prototype.flipBit = bnFlipBit;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.remainder = bnRemainder;\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\nBigInteger.prototype.modPow = bnModPow;\nBigInteger.prototype.modInverse = bnModInverse;\nBigInteger.prototype.pow = bnPow;\nBigInteger.prototype.gcd = bnGCD;\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n//BigInteger interfaces not implemented in jsbn:\n\n//BigInteger(int signum, byte[] magnitude)\n//double doubleValue()\n//float floatValue()\n//int hashCode()\n//long longValue()\n//static BigInteger valueOf(long val)\n","/**\n * Secure Hash Algorithm with 160-bit digest (SHA-1) implementation.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha1 = module.exports = forge.sha1 = forge.sha1 || {};\nforge.md.sha1 = forge.md.algorithms.sha1 = sha1;\n\n/**\n * Creates a SHA-1 message digest object.\n *\n * @return a message digest object.\n */\nsha1.create = function() {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n // SHA-1 state contains five 32-bit integers\n var _state = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for word storage\n var _w = new Array(80);\n\n // message digest object\n var md = {\n algorithm: 'sha1',\n blockLength: 64,\n digestLength: 20,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 8\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength64 for backwards-compatibility)\n md.fullMessageLength = md.messageLength64 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _state = {\n h0: 0x67452301,\n h1: 0xEFCDAB89,\n h2: 0x98BADCFE,\n h3: 0x10325476,\n h4: 0xC3D2E1F0\n };\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_state, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-1 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 448 mod 512. In other words,\n the data to be digested must be a multiple of 512 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 8 bytes (64\n bits), that means that the last segment of the data must have 56 bytes\n (448 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 448 mod 512 because\n 512 - 128 = 448.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 448 mod 512, then 512 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var s2 = {\n h0: _state.h0,\n h1: _state.h1,\n h2: _state.h2,\n h3: _state.h3,\n h4: _state.h4\n };\n _update(s2, _w, finalBlock);\n var rval = forge.util.createBuffer();\n rval.putInt32(s2.h0);\n rval.putInt32(s2.h1);\n rval.putInt32(s2.h2);\n rval.putInt32(s2.h3);\n rval.putInt32(s2.h4);\n return rval;\n };\n\n return md;\n};\n\n// sha-1 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 64);\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-1 state with the given byte buffer.\n *\n * @param s the SHA-1 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (64 byte) chunks\n var t, a, b, c, d, e, f, i;\n var len = bytes.length();\n while(len >= 64) {\n // the w array will be populated with sixteen 32-bit big-endian words\n // and then extended into 80 32-bit words according to SHA-1 algorithm\n // and for 32-79 using Max Locktyukhin's optimization\n\n // initialize hash value for this chunk\n a = s.h0;\n b = s.h1;\n c = s.h2;\n d = s.h3;\n e = s.h4;\n\n // round 1\n for(i = 0; i < 16; ++i) {\n t = bytes.getInt32();\n w[i] = t;\n f = d ^ (b & (c ^ d));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n for(; i < 20; ++i) {\n t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]);\n t = (t << 1) | (t >>> 31);\n w[i] = t;\n f = d ^ (b & (c ^ d));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 2\n for(; i < 32; ++i) {\n t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]);\n t = (t << 1) | (t >>> 31);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n for(; i < 40; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 3\n for(; i < 60; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = (b & c) | (d & (b ^ c));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x8F1BBCDC + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 4\n for(; i < 80; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0xCA62C1D6 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n\n // update hash state\n s.h0 = (s.h0 + a) | 0;\n s.h1 = (s.h1 + b) | 0;\n s.h2 = (s.h2 + c) | 0;\n s.h3 = (s.h3 + d) | 0;\n s.h4 = (s.h4 + e) | 0;\n\n len -= 64;\n }\n}\n","/**\n * Partial implementation of PKCS#1 v2.2: RSA-OEAP\n *\n * Modified but based on the following MIT and BSD licensed code:\n *\n * https://github.com/kjur/jsjws/blob/master/rsa.js:\n *\n * The 'jsjws'(JSON Web Signature JavaScript Library) License\n *\n * Copyright (c) 2012 Kenji Urushima\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * http://webrsa.cvs.sourceforge.net/viewvc/webrsa/Client/RSAES-OAEP.js?content-type=text%2Fplain:\n *\n * RSAES-OAEP.js\n * $Id: RSAES-OAEP.js,v 1.1.1.1 2003/03/19 15:37:20 ellispritchard Exp $\n * JavaScript Implementation of PKCS #1 v2.1 RSA CRYPTOGRAPHY STANDARD (RSA Laboratories, June 14, 2002)\n * Copyright (C) Ellis Pritchard, Guardian Unlimited 2003.\n * Contact: ellis@nukinetics.com\n * Distributed under the BSD License.\n *\n * Official documentation: http://www.rsa.com/rsalabs/node.asp?id=2125\n *\n * @author Evan Jones (http://evanjones.ca/)\n * @author Dave Longley\n *\n * Copyright (c) 2013-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./random');\nrequire('./sha1');\n\n// shortcut for PKCS#1 API\nvar pkcs1 = module.exports = forge.pkcs1 = forge.pkcs1 || {};\n\n/**\n * Encode the given RSAES-OAEP message (M) using key, with optional label (L)\n * and seed.\n *\n * This method does not perform RSA encryption, it only encodes the message\n * using RSAES-OAEP.\n *\n * @param key the RSA key to use.\n * @param message the message to encode.\n * @param options the options to use:\n * label an optional label to use.\n * seed the seed to use.\n * md the message digest object to use, undefined for SHA-1.\n * mgf1 optional mgf1 parameters:\n * md the message digest object to use for MGF1.\n *\n * @return the encoded message bytes.\n */\npkcs1.encode_rsa_oaep = function(key, message, options) {\n // parse arguments\n var label;\n var seed;\n var md;\n var mgf1Md;\n // legacy args (label, seed, md)\n if(typeof options === 'string') {\n label = options;\n seed = arguments[3] || undefined;\n md = arguments[4] || undefined;\n } else if(options) {\n label = options.label || undefined;\n seed = options.seed || undefined;\n md = options.md || undefined;\n if(options.mgf1 && options.mgf1.md) {\n mgf1Md = options.mgf1.md;\n }\n }\n\n // default OAEP to SHA-1 message digest\n if(!md) {\n md = forge.md.sha1.create();\n } else {\n md.start();\n }\n\n // default MGF-1 to same as OAEP\n if(!mgf1Md) {\n mgf1Md = md;\n }\n\n // compute length in bytes and check output\n var keyLength = Math.ceil(key.n.bitLength() / 8);\n var maxLength = keyLength - 2 * md.digestLength - 2;\n if(message.length > maxLength) {\n var error = new Error('RSAES-OAEP input message length is too long.');\n error.length = message.length;\n error.maxLength = maxLength;\n throw error;\n }\n\n if(!label) {\n label = '';\n }\n md.update(label, 'raw');\n var lHash = md.digest();\n\n var PS = '';\n var PS_length = maxLength - message.length;\n for(var i = 0; i < PS_length; i++) {\n PS += '\\x00';\n }\n\n var DB = lHash.getBytes() + PS + '\\x01' + message;\n\n if(!seed) {\n seed = forge.random.getBytes(md.digestLength);\n } else if(seed.length !== md.digestLength) {\n var error = new Error('Invalid RSAES-OAEP seed. The seed length must ' +\n 'match the digest length.');\n error.seedLength = seed.length;\n error.digestLength = md.digestLength;\n throw error;\n }\n\n var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md);\n var maskedDB = forge.util.xorBytes(DB, dbMask, DB.length);\n\n var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md);\n var maskedSeed = forge.util.xorBytes(seed, seedMask, seed.length);\n\n // return encoded message\n return '\\x00' + maskedSeed + maskedDB;\n};\n\n/**\n * Decode the given RSAES-OAEP encoded message (EM) using key, with optional\n * label (L).\n *\n * This method does not perform RSA decryption, it only decodes the message\n * using RSAES-OAEP.\n *\n * @param key the RSA key to use.\n * @param em the encoded message to decode.\n * @param options the options to use:\n * label an optional label to use.\n * md the message digest object to use for OAEP, undefined for SHA-1.\n * mgf1 optional mgf1 parameters:\n * md the message digest object to use for MGF1.\n *\n * @return the decoded message bytes.\n */\npkcs1.decode_rsa_oaep = function(key, em, options) {\n // parse args\n var label;\n var md;\n var mgf1Md;\n // legacy args\n if(typeof options === 'string') {\n label = options;\n md = arguments[3] || undefined;\n } else if(options) {\n label = options.label || undefined;\n md = options.md || undefined;\n if(options.mgf1 && options.mgf1.md) {\n mgf1Md = options.mgf1.md;\n }\n }\n\n // compute length in bytes\n var keyLength = Math.ceil(key.n.bitLength() / 8);\n\n if(em.length !== keyLength) {\n var error = new Error('RSAES-OAEP encoded message length is invalid.');\n error.length = em.length;\n error.expectedLength = keyLength;\n throw error;\n }\n\n // default OAEP to SHA-1 message digest\n if(md === undefined) {\n md = forge.md.sha1.create();\n } else {\n md.start();\n }\n\n // default MGF-1 to same as OAEP\n if(!mgf1Md) {\n mgf1Md = md;\n }\n\n if(keyLength < 2 * md.digestLength + 2) {\n throw new Error('RSAES-OAEP key is too short for the hash function.');\n }\n\n if(!label) {\n label = '';\n }\n md.update(label, 'raw');\n var lHash = md.digest().getBytes();\n\n // split the message into its parts\n var y = em.charAt(0);\n var maskedSeed = em.substring(1, md.digestLength + 1);\n var maskedDB = em.substring(1 + md.digestLength);\n\n var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md);\n var seed = forge.util.xorBytes(maskedSeed, seedMask, maskedSeed.length);\n\n var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md);\n var db = forge.util.xorBytes(maskedDB, dbMask, maskedDB.length);\n\n var lHashPrime = db.substring(0, md.digestLength);\n\n // constant time check that all values match what is expected\n var error = (y !== '\\x00');\n\n // constant time check lHash vs lHashPrime\n for(var i = 0; i < md.digestLength; ++i) {\n error |= (lHash.charAt(i) !== lHashPrime.charAt(i));\n }\n\n // \"constant time\" find the 0x1 byte separating the padding (zeros) from the\n // message\n // TODO: It must be possible to do this in a better/smarter way?\n var in_ps = 1;\n var index = md.digestLength;\n for(var j = md.digestLength; j < db.length; j++) {\n var code = db.charCodeAt(j);\n\n var is_0 = (code & 0x1) ^ 0x1;\n\n // non-zero if not 0 or 1 in the ps section\n var error_mask = in_ps ? 0xfffe : 0x0000;\n error |= (code & error_mask);\n\n // latch in_ps to zero after we find 0x1\n in_ps = in_ps & is_0;\n index += in_ps;\n }\n\n if(error || db.charCodeAt(index) !== 0x1) {\n throw new Error('Invalid RSAES-OAEP padding.');\n }\n\n return db.substring(index + 1);\n};\n\nfunction rsa_mgf1(seed, maskLength, hash) {\n // default to SHA-1 message digest\n if(!hash) {\n hash = forge.md.sha1.create();\n }\n var t = '';\n var count = Math.ceil(maskLength / hash.digestLength);\n for(var i = 0; i < count; ++i) {\n var c = String.fromCharCode(\n (i >> 24) & 0xFF, (i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF);\n hash.start();\n hash.update(seed + c);\n t += hash.digest().getBytes();\n }\n return t.substring(0, maskLength);\n}\n","/**\n * Prime number generation API.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./jsbn');\nrequire('./random');\n\n(function() {\n\n// forge.prime already defined\nif(forge.prime) {\n module.exports = forge.prime;\n return;\n}\n\n/* PRIME API */\nvar prime = module.exports = forge.prime = forge.prime || {};\n\nvar BigInteger = forge.jsbn.BigInteger;\n\n// primes are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29\nvar GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];\nvar THIRTY = new BigInteger(null);\nTHIRTY.fromInt(30);\nvar op_or = function(x, y) {return x|y;};\n\n/**\n * Generates a random probable prime with the given number of bits.\n *\n * Alternative algorithms can be specified by name as a string or as an\n * object with custom options like so:\n *\n * {\n * name: 'PRIMEINC',\n * options: {\n * maxBlockTime: <the maximum amount of time to block the main\n * thread before allowing I/O other JS to run>,\n * millerRabinTests: <the number of miller-rabin tests to run>,\n * workerScript: <the worker script URL>,\n * workers: <the number of web workers (if supported) to use,\n * -1 to use estimated cores minus one>.\n * workLoad: the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * }\n * }\n *\n * @param bits the number of bits for the prime number.\n * @param options the options to use.\n * [algorithm] the algorithm to use (default: 'PRIMEINC').\n * [prng] a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n *\n * @return callback(err, num) called once the operation completes.\n */\nprime.generateProbablePrime = function(bits, options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n // default to PRIMEINC algorithm\n var algorithm = options.algorithm || 'PRIMEINC';\n if(typeof algorithm === 'string') {\n algorithm = {name: algorithm};\n }\n algorithm.options = algorithm.options || {};\n\n // create prng with api that matches BigInteger secure random\n var prng = options.prng || forge.random;\n var rng = {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n var b = prng.getBytesSync(x.length);\n for(var i = 0; i < x.length; ++i) {\n x[i] = b.charCodeAt(i);\n }\n }\n };\n\n if(algorithm.name === 'PRIMEINC') {\n return primeincFindPrime(bits, rng, algorithm.options, callback);\n }\n\n throw new Error('Invalid prime generation algorithm: ' + algorithm.name);\n};\n\nfunction primeincFindPrime(bits, rng, options, callback) {\n if('workers' in options) {\n return primeincFindPrimeWithWorkers(bits, rng, options, callback);\n }\n return primeincFindPrimeWithoutWorkers(bits, rng, options, callback);\n}\n\nfunction primeincFindPrimeWithoutWorkers(bits, rng, options, callback) {\n // initialize random number\n var num = generateRandom(bits, rng);\n\n /* Note: All primes are of the form 30k+i for i < 30 and gcd(30, i)=1. The\n number we are given is always aligned at 30k + 1. Each time the number is\n determined not to be prime we add to get to the next 'i', eg: if the number\n was at 30k + 1 we add 6. */\n var deltaIdx = 0;\n\n // get required number of MR tests\n var mrTests = getMillerRabinTests(num.bitLength());\n if('millerRabinTests' in options) {\n mrTests = options.millerRabinTests;\n }\n\n // find prime nearest to 'num' for maxBlockTime ms\n // 10 ms gives 5ms of leeway for other calculations before dropping\n // below 60fps (1000/60 == 16.67), but in reality, the number will\n // likely be higher due to an 'atomic' big int modPow\n var maxBlockTime = 10;\n if('maxBlockTime' in options) {\n maxBlockTime = options.maxBlockTime;\n }\n\n _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);\n}\n\nfunction _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback) {\n var start = +new Date();\n do {\n // overflow, regenerate random number\n if(num.bitLength() > bits) {\n num = generateRandom(bits, rng);\n }\n // do primality test\n if(num.isProbablePrime(mrTests)) {\n return callback(null, num);\n }\n // get next potential prime\n num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);\n } while(maxBlockTime < 0 || (+new Date() - start < maxBlockTime));\n\n // keep trying later\n forge.util.setImmediate(function() {\n _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);\n });\n}\n\n// NOTE: This algorithm is indeterminate in nature because workers\n// run in parallel looking at different segments of numbers. Even if this\n// algorithm is run twice with the same input from a predictable RNG, it\n// may produce different outputs.\nfunction primeincFindPrimeWithWorkers(bits, rng, options, callback) {\n // web workers unavailable\n if(typeof Worker === 'undefined') {\n return primeincFindPrimeWithoutWorkers(bits, rng, options, callback);\n }\n\n // initialize random number\n var num = generateRandom(bits, rng);\n\n // use web workers to generate keys\n var numWorkers = options.workers;\n var workLoad = options.workLoad || 100;\n var range = workLoad * 30 / 8;\n var workerScript = options.workerScript || 'forge/prime.worker.js';\n if(numWorkers === -1) {\n return forge.util.estimateCores(function(err, cores) {\n if(err) {\n // default to 2\n cores = 2;\n }\n numWorkers = cores - 1;\n generate();\n });\n }\n generate();\n\n function generate() {\n // require at least 1 worker\n numWorkers = Math.max(1, numWorkers);\n\n // TODO: consider optimizing by starting workers outside getPrime() ...\n // note that in order to clean up they will have to be made internally\n // asynchronous which may actually be slower\n\n // start workers immediately\n var workers = [];\n for(var i = 0; i < numWorkers; ++i) {\n // FIXME: fix path or use blob URLs\n workers[i] = new Worker(workerScript);\n }\n var running = numWorkers;\n\n // listen for requests from workers and assign ranges to find prime\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].addEventListener('message', workerMessage);\n }\n\n /* Note: The distribution of random numbers is unknown. Therefore, each\n web worker is continuously allocated a range of numbers to check for a\n random number until one is found.\n\n Every 30 numbers will be checked just 8 times, because prime numbers\n have the form:\n\n 30k+i, for i < 30 and gcd(30, i)=1 (there are 8 values of i for this)\n\n Therefore, if we want a web worker to run N checks before asking for\n a new range of numbers, each range must contain N*30/8 numbers.\n\n For 100 checks (workLoad), this is a range of 375. */\n\n var found = false;\n function workerMessage(e) {\n // ignore message, prime already found\n if(found) {\n return;\n }\n\n --running;\n var data = e.data;\n if(data.found) {\n // terminate all workers\n for(var i = 0; i < workers.length; ++i) {\n workers[i].terminate();\n }\n found = true;\n return callback(null, new BigInteger(data.prime, 16));\n }\n\n // overflow, regenerate random number\n if(num.bitLength() > bits) {\n num = generateRandom(bits, rng);\n }\n\n // assign new range to check\n var hex = num.toString(16);\n\n // start prime search\n e.target.postMessage({\n hex: hex,\n workLoad: workLoad\n });\n\n num.dAddOffset(range, 0);\n }\n }\n}\n\n/**\n * Generates a random number using the given number of bits and RNG.\n *\n * @param bits the number of bits for the number.\n * @param rng the random number generator to use.\n *\n * @return the random number.\n */\nfunction generateRandom(bits, rng) {\n var num = new BigInteger(bits, rng);\n // force MSB set\n var bits1 = bits - 1;\n if(!num.testBit(bits1)) {\n num.bitwiseTo(BigInteger.ONE.shiftLeft(bits1), op_or, num);\n }\n // align number on 30k+1 boundary\n num.dAddOffset(31 - num.mod(THIRTY).byteValue(), 0);\n return num;\n}\n\n/**\n * Returns the required number of Miller-Rabin tests to generate a\n * prime with an error probability of (1/2)^80.\n *\n * See Handbook of Applied Cryptography Chapter 4, Table 4.4.\n *\n * @param bits the bit size.\n *\n * @return the required number of iterations.\n */\nfunction getMillerRabinTests(bits) {\n if(bits <= 100) return 27;\n if(bits <= 150) return 18;\n if(bits <= 200) return 15;\n if(bits <= 250) return 12;\n if(bits <= 300) return 9;\n if(bits <= 350) return 8;\n if(bits <= 400) return 7;\n if(bits <= 500) return 6;\n if(bits <= 600) return 5;\n if(bits <= 800) return 4;\n if(bits <= 1250) return 3;\n return 2;\n}\n\n})();\n","/**\n * Javascript implementation of basic RSA algorithms.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n *\n * The only algorithm currently supported for PKI is RSA.\n *\n * An RSA key is often stored in ASN.1 DER format. The SubjectPublicKeyInfo\n * ASN.1 structure is composed of an algorithm of type AlgorithmIdentifier\n * and a subjectPublicKey of type bit string.\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of RSA, there aren't any.\n *\n * SubjectPublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * subjectPublicKey BIT STRING\n * }\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * For an RSA public key, the subjectPublicKey is:\n *\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n *\n * PrivateKeyInfo ::= SEQUENCE {\n * version Version,\n * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,\n * privateKey PrivateKey,\n * attributes [0] IMPLICIT Attributes OPTIONAL\n * }\n *\n * Version ::= INTEGER\n * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier\n * PrivateKey ::= OCTET STRING\n * Attributes ::= SET OF Attribute\n *\n * An RSA private key as the following structure:\n *\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p-1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER -- (inverse of q) mod p\n * }\n *\n * Version ::= INTEGER\n *\n * The OID for the RSA key algorithm is: 1.2.840.113549.1.1.1\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./jsbn');\nrequire('./oids');\nrequire('./pkcs1');\nrequire('./prime');\nrequire('./random');\nrequire('./util');\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\nvar _crypto = forge.util.isNodejs ? require('crypto') : null;\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for util API\nvar util = forge.util;\n\n/*\n * RSA encryption and decryption, see RFC 2313.\n */\nforge.pki = forge.pki || {};\nmodule.exports = forge.pki.rsa = forge.rsa = forge.rsa || {};\nvar pki = forge.pki;\n\n// for finding primes, which are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29\nvar GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];\n\n// validator for a PrivateKeyInfo structure\nvar privateKeyValidator = {\n // PrivateKeyInfo\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'PrivateKeyInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // privateKeyAlgorithm\n name: 'PrivateKeyInfo.privateKeyAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'privateKeyOid'\n }]\n }, {\n // PrivateKey\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'privateKey'\n }]\n};\n\n// validator for an RSA private key\nvar rsaPrivateKeyValidator = {\n // RSAPrivateKey\n name: 'RSAPrivateKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'RSAPrivateKey.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // modulus (n)\n name: 'RSAPrivateKey.modulus',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyModulus'\n }, {\n // publicExponent (e)\n name: 'RSAPrivateKey.publicExponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPublicExponent'\n }, {\n // privateExponent (d)\n name: 'RSAPrivateKey.privateExponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrivateExponent'\n }, {\n // prime1 (p)\n name: 'RSAPrivateKey.prime1',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrime1'\n }, {\n // prime2 (q)\n name: 'RSAPrivateKey.prime2',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrime2'\n }, {\n // exponent1 (d mod (p-1))\n name: 'RSAPrivateKey.exponent1',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyExponent1'\n }, {\n // exponent2 (d mod (q-1))\n name: 'RSAPrivateKey.exponent2',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyExponent2'\n }, {\n // coefficient ((inverse of q) mod p)\n name: 'RSAPrivateKey.coefficient',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyCoefficient'\n }]\n};\n\n// validator for an RSA public key\nvar rsaPublicKeyValidator = {\n // RSAPublicKey\n name: 'RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // modulus (n)\n name: 'RSAPublicKey.modulus',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'publicKeyModulus'\n }, {\n // publicExponent (e)\n name: 'RSAPublicKey.exponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'publicKeyExponent'\n }]\n};\n\n// validator for an SubjectPublicKeyInfo structure\n// Note: Currently only works with an RSA public key\nvar publicKeyValidator = forge.pki.rsa.publicKeyValidator = {\n name: 'SubjectPublicKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'subjectPublicKeyInfo',\n value: [{\n name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'publicKeyOid'\n }]\n }, {\n // subjectPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n value: [{\n // RSAPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'rsaPublicKey'\n }]\n }]\n};\n\n/**\n * Wrap digest in DigestInfo object.\n *\n * This function implements EMSA-PKCS1-v1_5-ENCODE as per RFC 3447.\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n *\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n * Digest ::= OCTET STRING\n *\n * @param md the message digest object with the hash to sign.\n *\n * @return the encoded message (ready for RSA encrytion)\n */\nvar emsaPkcs1v15encode = function(md) {\n // get the oid for the algorithm\n var oid;\n if(md.algorithm in pki.oids) {\n oid = pki.oids[md.algorithm];\n } else {\n var error = new Error('Unknown message digest algorithm.');\n error.algorithm = md.algorithm;\n throw error;\n }\n var oidBytes = asn1.oidToDer(oid).getBytes();\n\n // create the digest info\n var digestInfo = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var digestAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n digestAlgorithm.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false, oidBytes));\n digestAlgorithm.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.NULL, false, ''));\n var digest = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING,\n false, md.digest().getBytes());\n digestInfo.value.push(digestAlgorithm);\n digestInfo.value.push(digest);\n\n // encode digest info\n return asn1.toDer(digestInfo).getBytes();\n};\n\n/**\n * Performs x^c mod n (RSA encryption or decryption operation).\n *\n * @param x the number to raise and mod.\n * @param key the key to use.\n * @param pub true if the key is public, false if private.\n *\n * @return the result of x^c mod n.\n */\nvar _modPow = function(x, key, pub) {\n if(pub) {\n return x.modPow(key.e, key.n);\n }\n\n if(!key.p || !key.q) {\n // allow calculation without CRT params (slow)\n return x.modPow(key.d, key.n);\n }\n\n // pre-compute dP, dQ, and qInv if necessary\n if(!key.dP) {\n key.dP = key.d.mod(key.p.subtract(BigInteger.ONE));\n }\n if(!key.dQ) {\n key.dQ = key.d.mod(key.q.subtract(BigInteger.ONE));\n }\n if(!key.qInv) {\n key.qInv = key.q.modInverse(key.p);\n }\n\n /* Chinese remainder theorem (CRT) states:\n\n Suppose n1, n2, ..., nk are positive integers which are pairwise\n coprime (n1 and n2 have no common factors other than 1). For any\n integers x1, x2, ..., xk there exists an integer x solving the\n system of simultaneous congruences (where ~= means modularly\n congruent so a ~= b mod n means a mod n = b mod n):\n\n x ~= x1 mod n1\n x ~= x2 mod n2\n ...\n x ~= xk mod nk\n\n This system of congruences has a single simultaneous solution x\n between 0 and n - 1. Furthermore, each xk solution and x itself\n is congruent modulo the product n = n1*n2*...*nk.\n So x1 mod n = x2 mod n = xk mod n = x mod n.\n\n The single simultaneous solution x can be solved with the following\n equation:\n\n x = sum(xi*ri*si) mod n where ri = n/ni and si = ri^-1 mod ni.\n\n Where x is less than n, xi = x mod ni.\n\n For RSA we are only concerned with k = 2. The modulus n = pq, where\n p and q are coprime. The RSA decryption algorithm is:\n\n y = x^d mod n\n\n Given the above:\n\n x1 = x^d mod p\n r1 = n/p = q\n s1 = q^-1 mod p\n x2 = x^d mod q\n r2 = n/q = p\n s2 = p^-1 mod q\n\n So y = (x1r1s1 + x2r2s2) mod n\n = ((x^d mod p)q(q^-1 mod p) + (x^d mod q)p(p^-1 mod q)) mod n\n\n According to Fermat's Little Theorem, if the modulus P is prime,\n for any integer A not evenly divisible by P, A^(P-1) ~= 1 mod P.\n Since A is not divisible by P it follows that if:\n N ~= M mod (P - 1), then A^N mod P = A^M mod P. Therefore:\n\n A^N mod P = A^(M mod (P - 1)) mod P. (The latter takes less effort\n to calculate). In order to calculate x^d mod p more quickly the\n exponent d mod (p - 1) is stored in the RSA private key (the same\n is done for x^d mod q). These values are referred to as dP and dQ\n respectively. Therefore we now have:\n\n y = ((x^dP mod p)q(q^-1 mod p) + (x^dQ mod q)p(p^-1 mod q)) mod n\n\n Since we'll be reducing x^dP by modulo p (same for q) we can also\n reduce x by p (and q respectively) before hand. Therefore, let\n\n xp = ((x mod p)^dP mod p), and\n xq = ((x mod q)^dQ mod q), yielding:\n\n y = (xp*q*(q^-1 mod p) + xq*p*(p^-1 mod q)) mod n\n\n This can be further reduced to a simple algorithm that only\n requires 1 inverse (the q inverse is used) to be used and stored.\n The algorithm is called Garner's algorithm. If qInv is the\n inverse of q, we simply calculate:\n\n y = (qInv*(xp - xq) mod p) * q + xq\n\n However, there are two further complications. First, we need to\n ensure that xp > xq to prevent signed BigIntegers from being used\n so we add p until this is true (since we will be mod'ing with\n p anyway). Then, there is a known timing attack on algorithms\n using the CRT. To mitigate this risk, \"cryptographic blinding\"\n should be used. This requires simply generating a random number r\n between 0 and n-1 and its inverse and multiplying x by r^e before\n calculating y and then multiplying y by r^-1 afterwards. Note that\n r must be coprime with n (gcd(r, n) === 1) in order to have an\n inverse.\n */\n\n // cryptographic blinding\n var r;\n do {\n r = new BigInteger(\n forge.util.bytesToHex(forge.random.getBytes(key.n.bitLength() / 8)),\n 16);\n } while(r.compareTo(key.n) >= 0 || !r.gcd(key.n).equals(BigInteger.ONE));\n x = x.multiply(r.modPow(key.e, key.n)).mod(key.n);\n\n // calculate xp and xq\n var xp = x.mod(key.p).modPow(key.dP, key.p);\n var xq = x.mod(key.q).modPow(key.dQ, key.q);\n\n // xp must be larger than xq to avoid signed bit usage\n while(xp.compareTo(xq) < 0) {\n xp = xp.add(key.p);\n }\n\n // do last step\n var y = xp.subtract(xq)\n .multiply(key.qInv).mod(key.p)\n .multiply(key.q).add(xq);\n\n // remove effect of random for cryptographic blinding\n y = y.multiply(r.modInverse(key.n)).mod(key.n);\n\n return y;\n};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED, use 'sign' on a private key object or\n * 'encrypt' on a public key object instead.\n *\n * Performs RSA encryption.\n *\n * The parameter bt controls whether to put padding bytes before the\n * message passed in. Set bt to either true or false to disable padding\n * completely (in order to handle e.g. EMSA-PSS encoding seperately before),\n * signaling whether the encryption operation is a public key operation\n * (i.e. encrypting data) or not, i.e. private key operation (data signing).\n *\n * For PKCS#1 v1.5 padding pass in the block type to use, i.e. either 0x01\n * (for signing) or 0x02 (for encryption). The key operation mode (private\n * or public) is derived from this flag in that case).\n *\n * @param m the message to encrypt as a byte string.\n * @param key the RSA key to use.\n * @param bt for PKCS#1 v1.5 padding, the block type to use\n * (0x01 for private key, 0x02 for public),\n * to disable padding: true = public key, false = private key.\n *\n * @return the encrypted bytes as a string.\n */\npki.rsa.encrypt = function(m, key, bt) {\n var pub = bt;\n var eb;\n\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n if(bt !== false && bt !== true) {\n // legacy, default to PKCS#1 v1.5 padding\n pub = (bt === 0x02);\n eb = _encodePkcs1_v1_5(m, key, bt);\n } else {\n eb = forge.util.createBuffer();\n eb.putBytes(m);\n }\n\n // load encryption block as big integer 'x'\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var x = new BigInteger(eb.toHex(), 16);\n\n // do RSA encryption\n var y = _modPow(x, key, pub);\n\n // convert y into the encrypted data byte string, if y is shorter in\n // bytes than k, then prepend zero bytes to fill up ed\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var yhex = y.toString(16);\n var ed = forge.util.createBuffer();\n var zeros = k - Math.ceil(yhex.length / 2);\n while(zeros > 0) {\n ed.putByte(0x00);\n --zeros;\n }\n ed.putBytes(forge.util.hexToBytes(yhex));\n return ed.getBytes();\n};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED, use 'decrypt' on a private key object or\n * 'verify' on a public key object instead.\n *\n * Performs RSA decryption.\n *\n * The parameter ml controls whether to apply PKCS#1 v1.5 padding\n * or not. Set ml = false to disable padding removal completely\n * (in order to handle e.g. EMSA-PSS later on) and simply pass back\n * the RSA encryption block.\n *\n * @param ed the encrypted data to decrypt in as a byte string.\n * @param key the RSA key to use.\n * @param pub true for a public key operation, false for private.\n * @param ml the message length, if known, false to disable padding.\n *\n * @return the decrypted message as a byte string.\n */\npki.rsa.decrypt = function(ed, key, pub, ml) {\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n // error if the length of the encrypted data ED is not k\n if(ed.length !== k) {\n var error = new Error('Encrypted message length is invalid.');\n error.length = ed.length;\n error.expected = k;\n throw error;\n }\n\n // convert encrypted data into a big integer\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var y = new BigInteger(forge.util.createBuffer(ed).toHex(), 16);\n\n // y must be less than the modulus or it wasn't the result of\n // a previous mod operation (encryption) using that modulus\n if(y.compareTo(key.n) >= 0) {\n throw new Error('Encrypted message is invalid.');\n }\n\n // do RSA decryption\n var x = _modPow(y, key, pub);\n\n // create the encryption block, if x is shorter in bytes than k, then\n // prepend zero bytes to fill up eb\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var xhex = x.toString(16);\n var eb = forge.util.createBuffer();\n var zeros = k - Math.ceil(xhex.length / 2);\n while(zeros > 0) {\n eb.putByte(0x00);\n --zeros;\n }\n eb.putBytes(forge.util.hexToBytes(xhex));\n\n if(ml !== false) {\n // legacy, default to PKCS#1 v1.5 padding\n return _decodePkcs1_v1_5(eb.getBytes(), key, pub);\n }\n\n // return message\n return eb.getBytes();\n};\n\n/**\n * Creates an RSA key-pair generation state object. It is used to allow\n * key-generation to be performed in steps. It also allows for a UI to\n * display progress updates.\n *\n * @param bits the size for the private key in bits, defaults to 2048.\n * @param e the public exponent to use, defaults to 65537 (0x10001).\n * @param [options] the options to use.\n * prng a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n * algorithm the algorithm to use (default: 'PRIMEINC').\n *\n * @return the state object to use to generate the key-pair.\n */\npki.rsa.createKeyPairGenerationState = function(bits, e, options) {\n // TODO: migrate step-based prime generation code to forge.prime\n\n // set default bits\n if(typeof(bits) === 'string') {\n bits = parseInt(bits, 10);\n }\n bits = bits || 2048;\n\n // create prng with api that matches BigInteger secure random\n options = options || {};\n var prng = options.prng || forge.random;\n var rng = {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n var b = prng.getBytesSync(x.length);\n for(var i = 0; i < x.length; ++i) {\n x[i] = b.charCodeAt(i);\n }\n }\n };\n\n var algorithm = options.algorithm || 'PRIMEINC';\n\n // create PRIMEINC algorithm state\n var rval;\n if(algorithm === 'PRIMEINC') {\n rval = {\n algorithm: algorithm,\n state: 0,\n bits: bits,\n rng: rng,\n eInt: e || 65537,\n e: new BigInteger(null),\n p: null,\n q: null,\n qBits: bits >> 1,\n pBits: bits - (bits >> 1),\n pqState: 0,\n num: null,\n keys: null\n };\n rval.e.fromInt(rval.eInt);\n } else {\n throw new Error('Invalid key generation algorithm: ' + algorithm);\n }\n\n return rval;\n};\n\n/**\n * Attempts to runs the key-generation algorithm for at most n seconds\n * (approximately) using the given state. When key-generation has completed,\n * the keys will be stored in state.keys.\n *\n * To use this function to update a UI while generating a key or to prevent\n * causing browser lockups/warnings, set \"n\" to a value other than 0. A\n * simple pattern for generating a key and showing a progress indicator is:\n *\n * var state = pki.rsa.createKeyPairGenerationState(2048);\n * var step = function() {\n * // step key-generation, run algorithm for 100 ms, repeat\n * if(!forge.pki.rsa.stepKeyPairGenerationState(state, 100)) {\n * setTimeout(step, 1);\n * } else {\n * // key-generation complete\n * // TODO: turn off progress indicator here\n * // TODO: use the generated key-pair in \"state.keys\"\n * }\n * };\n * // TODO: turn on progress indicator here\n * setTimeout(step, 0);\n *\n * @param state the state to use.\n * @param n the maximum number of milliseconds to run the algorithm for, 0\n * to run the algorithm to completion.\n *\n * @return true if the key-generation completed, false if not.\n */\npki.rsa.stepKeyPairGenerationState = function(state, n) {\n // set default algorithm if not set\n if(!('algorithm' in state)) {\n state.algorithm = 'PRIMEINC';\n }\n\n // TODO: migrate step-based prime generation code to forge.prime\n // TODO: abstract as PRIMEINC algorithm\n\n // do key generation (based on Tom Wu's rsa.js, see jsbn.js license)\n // with some minor optimizations and designed to run in steps\n\n // local state vars\n var THIRTY = new BigInteger(null);\n THIRTY.fromInt(30);\n var deltaIdx = 0;\n var op_or = function(x, y) {return x | y;};\n\n // keep stepping until time limit is reached or done\n var t1 = +new Date();\n var t2;\n var total = 0;\n while(state.keys === null && (n <= 0 || total < n)) {\n // generate p or q\n if(state.state === 0) {\n /* Note: All primes are of the form:\n\n 30k+i, for i < 30 and gcd(30, i)=1, where there are 8 values for i\n\n When we generate a random number, we always align it at 30k + 1. Each\n time the number is determined not to be prime we add to get to the\n next 'i', eg: if the number was at 30k + 1 we add 6. */\n var bits = (state.p === null) ? state.pBits : state.qBits;\n var bits1 = bits - 1;\n\n // get a random number\n if(state.pqState === 0) {\n state.num = new BigInteger(bits, state.rng);\n // force MSB set\n if(!state.num.testBit(bits1)) {\n state.num.bitwiseTo(\n BigInteger.ONE.shiftLeft(bits1), op_or, state.num);\n }\n // align number on 30k+1 boundary\n state.num.dAddOffset(31 - state.num.mod(THIRTY).byteValue(), 0);\n deltaIdx = 0;\n\n ++state.pqState;\n } else if(state.pqState === 1) {\n // try to make the number a prime\n if(state.num.bitLength() > bits) {\n // overflow, try again\n state.pqState = 0;\n // do primality test\n } else if(state.num.isProbablePrime(\n _getMillerRabinTests(state.num.bitLength()))) {\n ++state.pqState;\n } else {\n // get next potential prime\n state.num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);\n }\n } else if(state.pqState === 2) {\n // ensure number is coprime with e\n state.pqState =\n (state.num.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) === 0) ? 3 : 0;\n } else if(state.pqState === 3) {\n // store p or q\n state.pqState = 0;\n if(state.p === null) {\n state.p = state.num;\n } else {\n state.q = state.num;\n }\n\n // advance state if both p and q are ready\n if(state.p !== null && state.q !== null) {\n ++state.state;\n }\n state.num = null;\n }\n } else if(state.state === 1) {\n // ensure p is larger than q (swap them if not)\n if(state.p.compareTo(state.q) < 0) {\n state.num = state.p;\n state.p = state.q;\n state.q = state.num;\n }\n ++state.state;\n } else if(state.state === 2) {\n // compute phi: (p - 1)(q - 1) (Euler's totient function)\n state.p1 = state.p.subtract(BigInteger.ONE);\n state.q1 = state.q.subtract(BigInteger.ONE);\n state.phi = state.p1.multiply(state.q1);\n ++state.state;\n } else if(state.state === 3) {\n // ensure e and phi are coprime\n if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) === 0) {\n // phi and e are coprime, advance\n ++state.state;\n } else {\n // phi and e aren't coprime, so generate a new p and q\n state.p = null;\n state.q = null;\n state.state = 0;\n }\n } else if(state.state === 4) {\n // create n, ensure n is has the right number of bits\n state.n = state.p.multiply(state.q);\n\n // ensure n is right number of bits\n if(state.n.bitLength() === state.bits) {\n // success, advance\n ++state.state;\n } else {\n // failed, get new q\n state.q = null;\n state.state = 0;\n }\n } else if(state.state === 5) {\n // set keys\n var d = state.e.modInverse(state.phi);\n state.keys = {\n privateKey: pki.rsa.setPrivateKey(\n state.n, state.e, d, state.p, state.q,\n d.mod(state.p1), d.mod(state.q1),\n state.q.modInverse(state.p)),\n publicKey: pki.rsa.setPublicKey(state.n, state.e)\n };\n }\n\n // update timing\n t2 = +new Date();\n total += t2 - t1;\n t1 = t2;\n }\n\n return state.keys !== null;\n};\n\n/**\n * Generates an RSA public-private key pair in a single call.\n *\n * To generate a key-pair in steps (to allow for progress updates and to\n * prevent blocking or warnings in slow browsers) then use the key-pair\n * generation state functions.\n *\n * To generate a key-pair asynchronously (either through web-workers, if\n * available, or by breaking up the work on the main thread), pass a\n * callback function.\n *\n * @param [bits] the size for the private key in bits, defaults to 2048.\n * @param [e] the public exponent to use, defaults to 65537.\n * @param [options] options for key-pair generation, if given then 'bits'\n * and 'e' must *not* be given:\n * bits the size for the private key in bits, (default: 2048).\n * e the public exponent to use, (default: 65537 (0x10001)).\n * workerScript the worker script URL.\n * workers the number of web workers (if supported) to use,\n * (default: 2).\n * workLoad the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * prng a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\". Disables use of native APIs.\n * algorithm the algorithm to use (default: 'PRIMEINC').\n * @param [callback(err, keypair)] called once the operation completes.\n *\n * @return an object with privateKey and publicKey properties.\n */\npki.rsa.generateKeyPair = function(bits, e, options, callback) {\n // (bits), (options), (callback)\n if(arguments.length === 1) {\n if(typeof bits === 'object') {\n options = bits;\n bits = undefined;\n } else if(typeof bits === 'function') {\n callback = bits;\n bits = undefined;\n }\n } else if(arguments.length === 2) {\n // (bits, e), (bits, options), (bits, callback), (options, callback)\n if(typeof bits === 'number') {\n if(typeof e === 'function') {\n callback = e;\n e = undefined;\n } else if(typeof e !== 'number') {\n options = e;\n e = undefined;\n }\n } else {\n options = bits;\n callback = e;\n bits = undefined;\n e = undefined;\n }\n } else if(arguments.length === 3) {\n // (bits, e, options), (bits, e, callback), (bits, options, callback)\n if(typeof e === 'number') {\n if(typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n } else {\n callback = options;\n options = e;\n e = undefined;\n }\n }\n options = options || {};\n if(bits === undefined) {\n bits = options.bits || 2048;\n }\n if(e === undefined) {\n e = options.e || 0x10001;\n }\n\n // use native code if permitted, available, and parameters are acceptable\n if(!forge.options.usePureJavaScript && !options.prng &&\n bits >= 256 && bits <= 16384 && (e === 0x10001 || e === 3)) {\n if(callback) {\n // try native async\n if(_detectNodeCrypto('generateKeyPair')) {\n return _crypto.generateKeyPair('rsa', {\n modulusLength: bits,\n publicExponent: e,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem'\n }\n }, function(err, pub, priv) {\n if(err) {\n return callback(err);\n }\n callback(null, {\n privateKey: pki.privateKeyFromPem(priv),\n publicKey: pki.publicKeyFromPem(pub)\n });\n });\n }\n if(_detectSubtleCrypto('generateKey') &&\n _detectSubtleCrypto('exportKey')) {\n // use standard native generateKey\n return util.globalScope.crypto.subtle.generateKey({\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: _intToUint8Array(e),\n hash: {name: 'SHA-256'}\n }, true /* key can be exported*/, ['sign', 'verify'])\n .then(function(pair) {\n return util.globalScope.crypto.subtle.exportKey(\n 'pkcs8', pair.privateKey);\n // avoiding catch(function(err) {...}) to support IE <= 8\n }).then(undefined, function(err) {\n callback(err);\n }).then(function(pkcs8) {\n if(pkcs8) {\n var privateKey = pki.privateKeyFromAsn1(\n asn1.fromDer(forge.util.createBuffer(pkcs8)));\n callback(null, {\n privateKey: privateKey,\n publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e)\n });\n }\n });\n }\n if(_detectSubtleMsCrypto('generateKey') &&\n _detectSubtleMsCrypto('exportKey')) {\n var genOp = util.globalScope.msCrypto.subtle.generateKey({\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: _intToUint8Array(e),\n hash: {name: 'SHA-256'}\n }, true /* key can be exported*/, ['sign', 'verify']);\n genOp.oncomplete = function(e) {\n var pair = e.target.result;\n var exportOp = util.globalScope.msCrypto.subtle.exportKey(\n 'pkcs8', pair.privateKey);\n exportOp.oncomplete = function(e) {\n var pkcs8 = e.target.result;\n var privateKey = pki.privateKeyFromAsn1(\n asn1.fromDer(forge.util.createBuffer(pkcs8)));\n callback(null, {\n privateKey: privateKey,\n publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e)\n });\n };\n exportOp.onerror = function(err) {\n callback(err);\n };\n };\n genOp.onerror = function(err) {\n callback(err);\n };\n return;\n }\n } else {\n // try native sync\n if(_detectNodeCrypto('generateKeyPairSync')) {\n var keypair = _crypto.generateKeyPairSync('rsa', {\n modulusLength: bits,\n publicExponent: e,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem'\n }\n });\n return {\n privateKey: pki.privateKeyFromPem(keypair.privateKey),\n publicKey: pki.publicKeyFromPem(keypair.publicKey)\n };\n }\n }\n }\n\n // use JavaScript implementation\n var state = pki.rsa.createKeyPairGenerationState(bits, e, options);\n if(!callback) {\n pki.rsa.stepKeyPairGenerationState(state, 0);\n return state.keys;\n }\n _generateKeyPair(state, options, callback);\n};\n\n/**\n * Sets an RSA public key from BigIntegers modulus and exponent.\n *\n * @param n the modulus.\n * @param e the exponent.\n *\n * @return the public key.\n */\npki.setRsaPublicKey = pki.rsa.setPublicKey = function(n, e) {\n var key = {\n n: n,\n e: e\n };\n\n /**\n * Encrypts the given data with this public key. Newer applications\n * should use the 'RSA-OAEP' decryption scheme, 'RSAES-PKCS1-V1_5' is for\n * legacy applications.\n *\n * @param data the byte string to encrypt.\n * @param scheme the encryption scheme to use:\n * 'RSAES-PKCS1-V1_5' (default),\n * 'RSA-OAEP',\n * 'RAW', 'NONE', or null to perform raw RSA encryption,\n * an object with an 'encode' property set to a function\n * with the signature 'function(data, key)' that returns\n * a binary-encoded string representing the encoded data.\n * @param schemeOptions any scheme-specific options.\n *\n * @return the encrypted byte string.\n */\n key.encrypt = function(data, scheme, schemeOptions) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSAES-PKCS1-V1_5';\n }\n\n if(scheme === 'RSAES-PKCS1-V1_5') {\n scheme = {\n encode: function(m, key, pub) {\n return _encodePkcs1_v1_5(m, key, 0x02).getBytes();\n }\n };\n } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {\n scheme = {\n encode: function(m, key) {\n return forge.pkcs1.encode_rsa_oaep(key, m, schemeOptions);\n }\n };\n } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {\n scheme = {encode: function(e) {return e;}};\n } else if(typeof scheme === 'string') {\n throw new Error('Unsupported encryption scheme: \"' + scheme + '\".');\n }\n\n // do scheme-based encoding then rsa encryption\n var e = scheme.encode(data, key, true);\n return pki.rsa.encrypt(e, key, true);\n };\n\n /**\n * Verifies the given signature against the given digest.\n *\n * PKCS#1 supports multiple (currently two) signature schemes:\n * RSASSA-PKCS1-V1_5 and RSASSA-PSS.\n *\n * By default this implementation uses the \"old scheme\", i.e.\n * RSASSA-PKCS1-V1_5, in which case once RSA-decrypted, the\n * signature is an OCTET STRING that holds a DigestInfo.\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n * Digest ::= OCTET STRING\n *\n * To perform PSS signature verification, provide an instance\n * of Forge PSS object as the scheme parameter.\n *\n * @param digest the message digest hash to compare against the signature,\n * as a binary-encoded string.\n * @param signature the signature to verify, as a binary-encoded string.\n * @param scheme signature verification scheme to use:\n * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,\n * a Forge PSS object for RSASSA-PSS,\n * 'NONE' or null for none, DigestInfo will not be expected, but\n * PKCS#1 v1.5 padding will still be used.\n *\n * @return true if the signature was verified, false if not.\n */\n key.verify = function(digest, signature, scheme) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSASSA-PKCS1-V1_5';\n }\n\n if(scheme === 'RSASSA-PKCS1-V1_5') {\n scheme = {\n verify: function(digest, d) {\n // remove padding\n d = _decodePkcs1_v1_5(d, key, true);\n // d is ASN.1 BER-encoded DigestInfo\n var obj = asn1.fromDer(d);\n // compare the given digest to the decrypted one\n return digest === obj.value[1].value;\n }\n };\n } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {\n scheme = {\n verify: function(digest, d) {\n // remove padding\n d = _decodePkcs1_v1_5(d, key, true);\n return digest === d;\n }\n };\n }\n\n // do rsa decryption w/o any decoding, then verify -- which does decoding\n var d = pki.rsa.decrypt(signature, key, true, false);\n return scheme.verify(digest, d, key.n.bitLength());\n };\n\n return key;\n};\n\n/**\n * Sets an RSA private key from BigIntegers modulus, exponent, primes,\n * prime exponents, and modular multiplicative inverse.\n *\n * @param n the modulus.\n * @param e the public exponent.\n * @param d the private exponent ((inverse of e) mod n).\n * @param p the first prime.\n * @param q the second prime.\n * @param dP exponent1 (d mod (p-1)).\n * @param dQ exponent2 (d mod (q-1)).\n * @param qInv ((inverse of q) mod p)\n *\n * @return the private key.\n */\npki.setRsaPrivateKey = pki.rsa.setPrivateKey = function(\n n, e, d, p, q, dP, dQ, qInv) {\n var key = {\n n: n,\n e: e,\n d: d,\n p: p,\n q: q,\n dP: dP,\n dQ: dQ,\n qInv: qInv\n };\n\n /**\n * Decrypts the given data with this private key. The decryption scheme\n * must match the one used to encrypt the data.\n *\n * @param data the byte string to decrypt.\n * @param scheme the decryption scheme to use:\n * 'RSAES-PKCS1-V1_5' (default),\n * 'RSA-OAEP',\n * 'RAW', 'NONE', or null to perform raw RSA decryption.\n * @param schemeOptions any scheme-specific options.\n *\n * @return the decrypted byte string.\n */\n key.decrypt = function(data, scheme, schemeOptions) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSAES-PKCS1-V1_5';\n }\n\n // do rsa decryption w/o any decoding\n var d = pki.rsa.decrypt(data, key, false, false);\n\n if(scheme === 'RSAES-PKCS1-V1_5') {\n scheme = {decode: _decodePkcs1_v1_5};\n } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {\n scheme = {\n decode: function(d, key) {\n return forge.pkcs1.decode_rsa_oaep(key, d, schemeOptions);\n }\n };\n } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {\n scheme = {decode: function(d) {return d;}};\n } else {\n throw new Error('Unsupported encryption scheme: \"' + scheme + '\".');\n }\n\n // decode according to scheme\n return scheme.decode(d, key, false);\n };\n\n /**\n * Signs the given digest, producing a signature.\n *\n * PKCS#1 supports multiple (currently two) signature schemes:\n * RSASSA-PKCS1-V1_5 and RSASSA-PSS.\n *\n * By default this implementation uses the \"old scheme\", i.e.\n * RSASSA-PKCS1-V1_5. In order to generate a PSS signature, provide\n * an instance of Forge PSS object as the scheme parameter.\n *\n * @param md the message digest object with the hash to sign.\n * @param scheme the signature scheme to use:\n * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,\n * a Forge PSS object for RSASSA-PSS,\n * 'NONE' or null for none, DigestInfo will not be used but\n * PKCS#1 v1.5 padding will still be used.\n *\n * @return the signature as a byte string.\n */\n key.sign = function(md, scheme) {\n /* Note: The internal implementation of RSA operations is being\n transitioned away from a PKCS#1 v1.5 hard-coded scheme. Some legacy\n code like the use of an encoding block identifier 'bt' will eventually\n be removed. */\n\n // private key operation\n var bt = false;\n\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n }\n\n if(scheme === undefined || scheme === 'RSASSA-PKCS1-V1_5') {\n scheme = {encode: emsaPkcs1v15encode};\n bt = 0x01;\n } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {\n scheme = {encode: function() {return md;}};\n bt = 0x01;\n }\n\n // encode and then encrypt\n var d = scheme.encode(md, key.n.bitLength());\n return pki.rsa.encrypt(d, key, bt);\n };\n\n return key;\n};\n\n/**\n * Wraps an RSAPrivateKey ASN.1 object in an ASN.1 PrivateKeyInfo object.\n *\n * @param rsaKey the ASN.1 RSAPrivateKey.\n *\n * @return the ASN.1 PrivateKeyInfo.\n */\npki.wrapRsaPrivateKey = function(rsaKey) {\n // PrivateKeyInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (0)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(0).getBytes()),\n // privateKeyAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.rsaEncryption).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // PrivateKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(rsaKey).getBytes())\n ]);\n};\n\n/**\n * Converts a private key from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a PrivateKeyInfo containing an\n * RSAPrivateKey or an RSAPrivateKey.\n *\n * @return the private key.\n */\npki.privateKeyFromAsn1 = function(obj) {\n // get PrivateKeyInfo\n var capture = {};\n var errors = [];\n if(asn1.validate(obj, privateKeyValidator, capture, errors)) {\n obj = asn1.fromDer(forge.util.createBuffer(capture.privateKey));\n }\n\n // get RSAPrivateKey\n capture = {};\n errors = [];\n if(!asn1.validate(obj, rsaPrivateKeyValidator, capture, errors)) {\n var error = new Error('Cannot read private key. ' +\n 'ASN.1 object does not contain an RSAPrivateKey.');\n error.errors = errors;\n throw error;\n }\n\n // Note: Version is currently ignored.\n // capture.privateKeyVersion\n // FIXME: inefficient, get a BigInteger that uses byte strings\n var n, e, d, p, q, dP, dQ, qInv;\n n = forge.util.createBuffer(capture.privateKeyModulus).toHex();\n e = forge.util.createBuffer(capture.privateKeyPublicExponent).toHex();\n d = forge.util.createBuffer(capture.privateKeyPrivateExponent).toHex();\n p = forge.util.createBuffer(capture.privateKeyPrime1).toHex();\n q = forge.util.createBuffer(capture.privateKeyPrime2).toHex();\n dP = forge.util.createBuffer(capture.privateKeyExponent1).toHex();\n dQ = forge.util.createBuffer(capture.privateKeyExponent2).toHex();\n qInv = forge.util.createBuffer(capture.privateKeyCoefficient).toHex();\n\n // set private key\n return pki.setRsaPrivateKey(\n new BigInteger(n, 16),\n new BigInteger(e, 16),\n new BigInteger(d, 16),\n new BigInteger(p, 16),\n new BigInteger(q, 16),\n new BigInteger(dP, 16),\n new BigInteger(dQ, 16),\n new BigInteger(qInv, 16));\n};\n\n/**\n * Converts a private key to an ASN.1 RSAPrivateKey.\n *\n * @param key the private key.\n *\n * @return the ASN.1 representation of an RSAPrivateKey.\n */\npki.privateKeyToAsn1 = pki.privateKeyToRSAPrivateKey = function(key) {\n // RSAPrivateKey\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (0 = only 2 primes, 1 multiple primes)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(0).getBytes()),\n // modulus (n)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.n)),\n // publicExponent (e)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.e)),\n // privateExponent (d)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.d)),\n // privateKeyPrime1 (p)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.p)),\n // privateKeyPrime2 (q)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.q)),\n // privateKeyExponent1 (dP)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.dP)),\n // privateKeyExponent2 (dQ)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.dQ)),\n // coefficient (qInv)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.qInv))\n ]);\n};\n\n/**\n * Converts a public key from an ASN.1 SubjectPublicKeyInfo or RSAPublicKey.\n *\n * @param obj the asn1 representation of a SubjectPublicKeyInfo or RSAPublicKey.\n *\n * @return the public key.\n */\npki.publicKeyFromAsn1 = function(obj) {\n // get SubjectPublicKeyInfo\n var capture = {};\n var errors = [];\n if(asn1.validate(obj, publicKeyValidator, capture, errors)) {\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n var error = new Error('Cannot read public key. Unknown OID.');\n error.oid = oid;\n throw error;\n }\n obj = capture.rsaPublicKey;\n }\n\n // get RSA params\n errors = [];\n if(!asn1.validate(obj, rsaPublicKeyValidator, capture, errors)) {\n var error = new Error('Cannot read public key. ' +\n 'ASN.1 object does not contain an RSAPublicKey.');\n error.errors = errors;\n throw error;\n }\n\n // FIXME: inefficient, get a BigInteger that uses byte strings\n var n = forge.util.createBuffer(capture.publicKeyModulus).toHex();\n var e = forge.util.createBuffer(capture.publicKeyExponent).toHex();\n\n // set public key\n return pki.setRsaPublicKey(\n new BigInteger(n, 16),\n new BigInteger(e, 16));\n};\n\n/**\n * Converts a public key to an ASN.1 SubjectPublicKeyInfo.\n *\n * @param key the public key.\n *\n * @return the asn1 representation of a SubjectPublicKeyInfo.\n */\npki.publicKeyToAsn1 = pki.publicKeyToSubjectPublicKeyInfo = function(key) {\n // SubjectPublicKeyInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.rsaEncryption).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // subjectPublicKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, [\n pki.publicKeyToRSAPublicKey(key)\n ])\n ]);\n};\n\n/**\n * Converts a public key to an ASN.1 RSAPublicKey.\n *\n * @param key the public key.\n *\n * @return the asn1 representation of a RSAPublicKey.\n */\npki.publicKeyToRSAPublicKey = function(key) {\n // RSAPublicKey\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // modulus (n)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.n)),\n // publicExponent (e)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.e))\n ]);\n};\n\n/**\n * Encodes a message using PKCS#1 v1.5 padding.\n *\n * @param m the message to encode.\n * @param key the RSA key to use.\n * @param bt the block type to use, i.e. either 0x01 (for signing) or 0x02\n * (for encryption).\n *\n * @return the padded byte buffer.\n */\nfunction _encodePkcs1_v1_5(m, key, bt) {\n var eb = forge.util.createBuffer();\n\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n /* use PKCS#1 v1.5 padding */\n if(m.length > (k - 11)) {\n var error = new Error('Message is too long for PKCS#1 v1.5 padding.');\n error.length = m.length;\n error.max = k - 11;\n throw error;\n }\n\n /* A block type BT, a padding string PS, and the data D shall be\n formatted into an octet string EB, the encryption block:\n\n EB = 00 || BT || PS || 00 || D\n\n The block type BT shall be a single octet indicating the structure of\n the encryption block. For this version of the document it shall have\n value 00, 01, or 02. For a private-key operation, the block type\n shall be 00 or 01. For a public-key operation, it shall be 02.\n\n The padding string PS shall consist of k-3-||D|| octets. For block\n type 00, the octets shall have value 00; for block type 01, they\n shall have value FF; and for block type 02, they shall be\n pseudorandomly generated and nonzero. This makes the length of the\n encryption block EB equal to k. */\n\n // build the encryption block\n eb.putByte(0x00);\n eb.putByte(bt);\n\n // create the padding\n var padNum = k - 3 - m.length;\n var padByte;\n // private key op\n if(bt === 0x00 || bt === 0x01) {\n padByte = (bt === 0x00) ? 0x00 : 0xFF;\n for(var i = 0; i < padNum; ++i) {\n eb.putByte(padByte);\n }\n } else {\n // public key op\n // pad with random non-zero values\n while(padNum > 0) {\n var numZeros = 0;\n var padBytes = forge.random.getBytes(padNum);\n for(var i = 0; i < padNum; ++i) {\n padByte = padBytes.charCodeAt(i);\n if(padByte === 0) {\n ++numZeros;\n } else {\n eb.putByte(padByte);\n }\n }\n padNum = numZeros;\n }\n }\n\n // zero followed by message\n eb.putByte(0x00);\n eb.putBytes(m);\n\n return eb;\n}\n\n/**\n * Decodes a message using PKCS#1 v1.5 padding.\n *\n * @param em the message to decode.\n * @param key the RSA key to use.\n * @param pub true if the key is a public key, false if it is private.\n * @param ml the message length, if specified.\n *\n * @return the decoded bytes.\n */\nfunction _decodePkcs1_v1_5(em, key, pub, ml) {\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n /* It is an error if any of the following conditions occurs:\n\n 1. The encryption block EB cannot be parsed unambiguously.\n 2. The padding string PS consists of fewer than eight octets\n or is inconsisent with the block type BT.\n 3. The decryption process is a public-key operation and the block\n type BT is not 00 or 01, or the decryption process is a\n private-key operation and the block type is not 02.\n */\n\n // parse the encryption block\n var eb = forge.util.createBuffer(em);\n var first = eb.getByte();\n var bt = eb.getByte();\n if(first !== 0x00 ||\n (pub && bt !== 0x00 && bt !== 0x01) ||\n (!pub && bt != 0x02) ||\n (pub && bt === 0x00 && typeof(ml) === 'undefined')) {\n throw new Error('Encryption block is invalid.');\n }\n\n var padNum = 0;\n if(bt === 0x00) {\n // check all padding bytes for 0x00\n padNum = k - 3 - ml;\n for(var i = 0; i < padNum; ++i) {\n if(eb.getByte() !== 0x00) {\n throw new Error('Encryption block is invalid.');\n }\n }\n } else if(bt === 0x01) {\n // find the first byte that isn't 0xFF, should be after all padding\n padNum = 0;\n while(eb.length() > 1) {\n if(eb.getByte() !== 0xFF) {\n --eb.read;\n break;\n }\n ++padNum;\n }\n } else if(bt === 0x02) {\n // look for 0x00 byte\n padNum = 0;\n while(eb.length() > 1) {\n if(eb.getByte() === 0x00) {\n --eb.read;\n break;\n }\n ++padNum;\n }\n }\n\n // zero must be 0x00 and padNum must be (k - 3 - message length)\n var zero = eb.getByte();\n if(zero !== 0x00 || padNum !== (k - 3 - eb.length())) {\n throw new Error('Encryption block is invalid.');\n }\n\n return eb.getBytes();\n}\n\n/**\n * Runs the key-generation algorithm asynchronously, either in the background\n * via Web Workers, or using the main thread and setImmediate.\n *\n * @param state the key-pair generation state.\n * @param [options] options for key-pair generation:\n * workerScript the worker script URL.\n * workers the number of web workers (if supported) to use,\n * (default: 2, -1 to use estimated cores minus one).\n * workLoad the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * @param callback(err, keypair) called once the operation completes.\n */\nfunction _generateKeyPair(state, options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n var opts = {\n algorithm: {\n name: options.algorithm || 'PRIMEINC',\n options: {\n workers: options.workers || 2,\n workLoad: options.workLoad || 100,\n workerScript: options.workerScript\n }\n }\n };\n if('prng' in options) {\n opts.prng = options.prng;\n }\n\n generate();\n\n function generate() {\n // find p and then q (done in series to simplify)\n getPrime(state.pBits, function(err, num) {\n if(err) {\n return callback(err);\n }\n state.p = num;\n if(state.q !== null) {\n return finish(err, state.q);\n }\n getPrime(state.qBits, finish);\n });\n }\n\n function getPrime(bits, callback) {\n forge.prime.generateProbablePrime(bits, opts, callback);\n }\n\n function finish(err, num) {\n if(err) {\n return callback(err);\n }\n\n // set q\n state.q = num;\n\n // ensure p is larger than q (swap them if not)\n if(state.p.compareTo(state.q) < 0) {\n var tmp = state.p;\n state.p = state.q;\n state.q = tmp;\n }\n\n // ensure p is coprime with e\n if(state.p.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) !== 0) {\n state.p = null;\n generate();\n return;\n }\n\n // ensure q is coprime with e\n if(state.q.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) !== 0) {\n state.q = null;\n getPrime(state.qBits, finish);\n return;\n }\n\n // compute phi: (p - 1)(q - 1) (Euler's totient function)\n state.p1 = state.p.subtract(BigInteger.ONE);\n state.q1 = state.q.subtract(BigInteger.ONE);\n state.phi = state.p1.multiply(state.q1);\n\n // ensure e and phi are coprime\n if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) !== 0) {\n // phi and e aren't coprime, so generate a new p and q\n state.p = state.q = null;\n generate();\n return;\n }\n\n // create n, ensure n is has the right number of bits\n state.n = state.p.multiply(state.q);\n if(state.n.bitLength() !== state.bits) {\n // failed, get new q\n state.q = null;\n getPrime(state.qBits, finish);\n return;\n }\n\n // set keys\n var d = state.e.modInverse(state.phi);\n state.keys = {\n privateKey: pki.rsa.setPrivateKey(\n state.n, state.e, d, state.p, state.q,\n d.mod(state.p1), d.mod(state.q1),\n state.q.modInverse(state.p)),\n publicKey: pki.rsa.setPublicKey(state.n, state.e)\n };\n\n callback(null, state.keys);\n }\n}\n\n/**\n * Converts a positive BigInteger into 2's-complement big-endian bytes.\n *\n * @param b the big integer to convert.\n *\n * @return the bytes.\n */\nfunction _bnToBytes(b) {\n // prepend 0x00 if first byte >= 0x80\n var hex = b.toString(16);\n if(hex[0] >= '8') {\n hex = '00' + hex;\n }\n var bytes = forge.util.hexToBytes(hex);\n\n // ensure integer is minimally-encoded\n if(bytes.length > 1 &&\n // leading 0x00 for positive integer\n ((bytes.charCodeAt(0) === 0 &&\n (bytes.charCodeAt(1) & 0x80) === 0) ||\n // leading 0xFF for negative integer\n (bytes.charCodeAt(0) === 0xFF &&\n (bytes.charCodeAt(1) & 0x80) === 0x80))) {\n return bytes.substr(1);\n }\n return bytes;\n}\n\n/**\n * Returns the required number of Miller-Rabin tests to generate a\n * prime with an error probability of (1/2)^80.\n *\n * See Handbook of Applied Cryptography Chapter 4, Table 4.4.\n *\n * @param bits the bit size.\n *\n * @return the required number of iterations.\n */\nfunction _getMillerRabinTests(bits) {\n if(bits <= 100) return 27;\n if(bits <= 150) return 18;\n if(bits <= 200) return 15;\n if(bits <= 250) return 12;\n if(bits <= 300) return 9;\n if(bits <= 350) return 8;\n if(bits <= 400) return 7;\n if(bits <= 500) return 6;\n if(bits <= 600) return 5;\n if(bits <= 800) return 4;\n if(bits <= 1250) return 3;\n return 2;\n}\n\n/**\n * Performs feature detection on the Node crypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectNodeCrypto(fn) {\n return forge.util.isNodejs && typeof _crypto[fn] === 'function';\n}\n\n/**\n * Performs feature detection on the SubtleCrypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectSubtleCrypto(fn) {\n return (typeof util.globalScope !== 'undefined' &&\n typeof util.globalScope.crypto === 'object' &&\n typeof util.globalScope.crypto.subtle === 'object' &&\n typeof util.globalScope.crypto.subtle[fn] === 'function');\n}\n\n/**\n * Performs feature detection on the deprecated Microsoft Internet Explorer\n * outdated SubtleCrypto interface. This function should only be used after\n * checking for the modern, standard SubtleCrypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectSubtleMsCrypto(fn) {\n return (typeof util.globalScope !== 'undefined' &&\n typeof util.globalScope.msCrypto === 'object' &&\n typeof util.globalScope.msCrypto.subtle === 'object' &&\n typeof util.globalScope.msCrypto.subtle[fn] === 'function');\n}\n\nfunction _intToUint8Array(x) {\n var bytes = forge.util.hexToBytes(x.toString(16));\n var buffer = new Uint8Array(bytes.length);\n for(var i = 0; i < bytes.length; ++i) {\n buffer[i] = bytes.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction _privateKeyFromJwk(jwk) {\n if(jwk.kty !== 'RSA') {\n throw new Error(\n 'Unsupported key algorithm \"' + jwk.kty + '\"; algorithm must be \"RSA\".');\n }\n return pki.setRsaPrivateKey(\n _base64ToBigInt(jwk.n),\n _base64ToBigInt(jwk.e),\n _base64ToBigInt(jwk.d),\n _base64ToBigInt(jwk.p),\n _base64ToBigInt(jwk.q),\n _base64ToBigInt(jwk.dp),\n _base64ToBigInt(jwk.dq),\n _base64ToBigInt(jwk.qi));\n}\n\nfunction _publicKeyFromJwk(jwk) {\n if(jwk.kty !== 'RSA') {\n throw new Error('Key algorithm must be \"RSA\".');\n }\n return pki.setRsaPublicKey(\n _base64ToBigInt(jwk.n),\n _base64ToBigInt(jwk.e));\n}\n\nfunction _base64ToBigInt(b64) {\n return new BigInteger(forge.util.bytesToHex(forge.util.decode64(b64)), 16);\n}\n","/**\n * Password-based encryption functions.\n *\n * @author Dave Longley\n * @author Stefan Siegl <stesie@brokenpipe.de>\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\n *\n * An EncryptedPrivateKeyInfo:\n *\n * EncryptedPrivateKeyInfo ::= SEQUENCE {\n * encryptionAlgorithm EncryptionAlgorithmIdentifier,\n * encryptedData EncryptedData }\n *\n * EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * EncryptedData ::= OCTET STRING\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./md');\nrequire('./oids');\nrequire('./pbkdf2');\nrequire('./pem');\nrequire('./random');\nrequire('./rc2');\nrequire('./rsa');\nrequire('./util');\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Password-based encryption implementation. */\nvar pki = forge.pki = forge.pki || {};\nmodule.exports = pki.pbe = forge.pbe = forge.pbe || {};\nvar oids = pki.oids;\n\n// validator for an EncryptedPrivateKeyInfo structure\n// Note: Currently only works w/algorithm params\nvar encryptedPrivateKeyValidator = {\n name: 'EncryptedPrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedPrivateKeyInfo.encryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encryptionOid'\n }, {\n name: 'AlgorithmIdentifier.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'encryptionParams'\n }]\n }, {\n // encryptedData\n name: 'EncryptedPrivateKeyInfo.encryptedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encryptedData'\n }]\n};\n\n// validator for a PBES2Algorithms structure\n// Note: Currently only works w/PBKDF2 + AES encryption schemes\nvar PBES2AlgorithmsValidator = {\n name: 'PBES2Algorithms',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.keyDerivationFunc',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.keyDerivationFunc.oid',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'kdfOid'\n }, {\n name: 'PBES2Algorithms.params',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.params.salt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'kdfSalt'\n }, {\n name: 'PBES2Algorithms.params.iterationCount',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'kdfIterationCount'\n }, {\n name: 'PBES2Algorithms.params.keyLength',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n optional: true,\n capture: 'keyLength'\n }, {\n // prf\n name: 'PBES2Algorithms.params.prf',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'PBES2Algorithms.params.prf.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'prfOid'\n }]\n }]\n }]\n }, {\n name: 'PBES2Algorithms.encryptionScheme',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.encryptionScheme.oid',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encOid'\n }, {\n name: 'PBES2Algorithms.encryptionScheme.iv',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encIv'\n }]\n }]\n};\n\nvar pkcs12PbeParamsValidator = {\n name: 'pkcs-12PbeParams',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'pkcs-12PbeParams.salt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'salt'\n }, {\n name: 'pkcs-12PbeParams.iterations',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'iterations'\n }]\n};\n\n/**\n * Encrypts a ASN.1 PrivateKeyInfo object, producing an EncryptedPrivateKeyInfo.\n *\n * PBES2Algorithms ALGORITHM-IDENTIFIER ::=\n * { {PBES2-params IDENTIFIED BY id-PBES2}, ...}\n *\n * id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}\n *\n * PBES2-params ::= SEQUENCE {\n * keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},\n * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}\n * }\n *\n * PBES2-KDFs ALGORITHM-IDENTIFIER ::=\n * { {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }\n *\n * PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... }\n *\n * PBKDF2-params ::= SEQUENCE {\n * salt CHOICE {\n * specified OCTET STRING,\n * otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}\n * },\n * iterationCount INTEGER (1..MAX),\n * keyLength INTEGER (1..MAX) OPTIONAL,\n * prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1\n * }\n *\n * @param obj the ASN.1 PrivateKeyInfo object.\n * @param password the password to encrypt with.\n * @param options:\n * algorithm the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.\n * count the iteration count to use.\n * saltSize the salt size to use.\n * prfAlgorithm the PRF message digest algorithm to use\n * ('sha1', 'sha224', 'sha256', 'sha384', 'sha512')\n *\n * @return the ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptPrivateKeyInfo = function(obj, password, options) {\n // set default options\n options = options || {};\n options.saltSize = options.saltSize || 8;\n options.count = options.count || 2048;\n options.algorithm = options.algorithm || 'aes128';\n options.prfAlgorithm = options.prfAlgorithm || 'sha1';\n\n // generate PBE params\n var salt = forge.random.getBytesSync(options.saltSize);\n var count = options.count;\n var countBytes = asn1.integerToDer(count);\n var dkLen;\n var encryptionAlgorithm;\n var encryptedData;\n if(options.algorithm.indexOf('aes') === 0 || options.algorithm === 'des') {\n // do PBES2\n var ivLen, encOid, cipherFn;\n switch(options.algorithm) {\n case 'aes128':\n dkLen = 16;\n ivLen = 16;\n encOid = oids['aes128-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes192':\n dkLen = 24;\n ivLen = 16;\n encOid = oids['aes192-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes256':\n dkLen = 32;\n ivLen = 16;\n encOid = oids['aes256-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'des':\n dkLen = 8;\n ivLen = 8;\n encOid = oids['desCBC'];\n cipherFn = forge.des.createEncryptionCipher;\n break;\n default:\n var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // get PRF message digest\n var prfAlgorithm = 'hmacWith' + options.prfAlgorithm.toUpperCase();\n var md = prfAlgorithmToMessageDigest(prfAlgorithm);\n\n // encrypt private key using pbe SHA-1 and AES/DES\n var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md);\n var iv = forge.random.getBytesSync(ivLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(obj));\n cipher.finish();\n encryptedData = cipher.output.getBytes();\n\n // get PBKDF2-params\n var params = createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm);\n\n encryptionAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pkcs5PBES2']).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // keyDerivationFunc\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pkcs5PBKDF2']).getBytes()),\n // PBKDF2-params\n params\n ]),\n // encryptionScheme\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(encOid).getBytes()),\n // iv\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, iv)\n ])\n ])\n ]);\n } else if(options.algorithm === '3des') {\n // Do PKCS12 PBE\n dkLen = 24;\n\n var saltBytes = new forge.util.ByteBuffer(salt);\n var dk = pki.pbe.generatePkcs12Key(password, saltBytes, 1, count, dkLen);\n var iv = pki.pbe.generatePkcs12Key(password, saltBytes, 2, count, dkLen);\n var cipher = forge.des.createEncryptionCipher(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(obj));\n cipher.finish();\n encryptedData = cipher.output.getBytes();\n\n encryptionAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pbeWithSHAAnd3-KeyTripleDES-CBC']).getBytes()),\n // pkcs-12PbeParams\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // salt\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt),\n // iteration count\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n countBytes.getBytes())\n ])\n ]);\n } else {\n var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // EncryptedPrivateKeyInfo\n var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // encryptionAlgorithm\n encryptionAlgorithm,\n // encryptedData\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, encryptedData)\n ]);\n return rval;\n};\n\n/**\n * Decrypts a ASN.1 PrivateKeyInfo object.\n *\n * @param obj the ASN.1 EncryptedPrivateKeyInfo object.\n * @param password the password to decrypt with.\n *\n * @return the ASN.1 PrivateKeyInfo on success, null on failure.\n */\npki.decryptPrivateKeyInfo = function(obj, password) {\n var rval = null;\n\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, encryptedPrivateKeyValidator, capture, errors)) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n // get cipher\n var oid = asn1.derToOid(capture.encryptionOid);\n var cipher = pki.pbe.getCipher(oid, capture.encryptionParams, password);\n\n // get encrypted data\n var encrypted = forge.util.createBuffer(capture.encryptedData);\n\n cipher.update(encrypted);\n if(cipher.finish()) {\n rval = asn1.fromDer(cipher.output);\n }\n\n return rval;\n};\n\n/**\n * Converts a EncryptedPrivateKeyInfo to PEM format.\n *\n * @param epki the EncryptedPrivateKeyInfo.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted encrypted private key.\n */\npki.encryptedPrivateKeyToPem = function(epki, maxline) {\n // convert to DER, then PEM-encode\n var msg = {\n type: 'ENCRYPTED PRIVATE KEY',\n body: asn1.toDer(epki).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts a PEM-encoded EncryptedPrivateKeyInfo to ASN.1 format. Decryption\n * is not performed.\n *\n * @param pem the EncryptedPrivateKeyInfo in PEM-format.\n *\n * @return the ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptedPrivateKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'ENCRYPTED PRIVATE KEY') {\n var error = new Error('Could not convert encrypted private key from PEM; ' +\n 'PEM header type is \"ENCRYPTED PRIVATE KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert encrypted private key from PEM; ' +\n 'PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n return asn1.fromDer(msg.body);\n};\n\n/**\n * Encrypts an RSA private key. By default, the key will be wrapped in\n * a PrivateKeyInfo and encrypted to produce a PKCS#8 EncryptedPrivateKeyInfo.\n * This is the standard, preferred way to encrypt a private key.\n *\n * To produce a non-standard PEM-encrypted private key that uses encapsulated\n * headers to indicate the encryption algorithm (old-style non-PKCS#8 OpenSSL\n * private key encryption), set the 'legacy' option to true. Note: Using this\n * option will cause the iteration count to be forced to 1.\n *\n * Note: The 'des' algorithm is supported, but it is not considered to be\n * secure because it only uses a single 56-bit key. If possible, it is highly\n * recommended that a different algorithm be used.\n *\n * @param rsaKey the RSA key to encrypt.\n * @param password the password to use.\n * @param options:\n * algorithm: the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des', 'des').\n * count: the iteration count to use.\n * saltSize: the salt size to use.\n * legacy: output an old non-PKCS#8 PEM-encrypted+encapsulated\n * headers (DEK-Info) private key.\n *\n * @return the PEM-encoded ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptRsaPrivateKey = function(rsaKey, password, options) {\n // standard PKCS#8\n options = options || {};\n if(!options.legacy) {\n // encrypt PrivateKeyInfo\n var rval = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(rsaKey));\n rval = pki.encryptPrivateKeyInfo(rval, password, options);\n return pki.encryptedPrivateKeyToPem(rval);\n }\n\n // legacy non-PKCS#8\n var algorithm;\n var iv;\n var dkLen;\n var cipherFn;\n switch(options.algorithm) {\n case 'aes128':\n algorithm = 'AES-128-CBC';\n dkLen = 16;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes192':\n algorithm = 'AES-192-CBC';\n dkLen = 24;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes256':\n algorithm = 'AES-256-CBC';\n dkLen = 32;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case '3des':\n algorithm = 'DES-EDE3-CBC';\n dkLen = 24;\n iv = forge.random.getBytesSync(8);\n cipherFn = forge.des.createEncryptionCipher;\n break;\n case 'des':\n algorithm = 'DES-CBC';\n dkLen = 8;\n iv = forge.random.getBytesSync(8);\n cipherFn = forge.des.createEncryptionCipher;\n break;\n default:\n var error = new Error('Could not encrypt RSA private key; unsupported ' +\n 'encryption algorithm \"' + options.algorithm + '\".');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // encrypt private key using OpenSSL legacy key derivation\n var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(pki.privateKeyToAsn1(rsaKey)));\n cipher.finish();\n\n var msg = {\n type: 'RSA PRIVATE KEY',\n procType: {\n version: '4',\n type: 'ENCRYPTED'\n },\n dekInfo: {\n algorithm: algorithm,\n parameters: forge.util.bytesToHex(iv).toUpperCase()\n },\n body: cipher.output.getBytes()\n };\n return forge.pem.encode(msg);\n};\n\n/**\n * Decrypts an RSA private key.\n *\n * @param pem the PEM-formatted EncryptedPrivateKeyInfo to decrypt.\n * @param password the password to use.\n *\n * @return the RSA key on success, null on failure.\n */\npki.decryptRsaPrivateKey = function(pem, password) {\n var rval = null;\n\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'ENCRYPTED PRIVATE KEY' &&\n msg.type !== 'PRIVATE KEY' &&\n msg.type !== 'RSA PRIVATE KEY') {\n var error = new Error('Could not convert private key from PEM; PEM header type ' +\n 'is not \"ENCRYPTED PRIVATE KEY\", \"PRIVATE KEY\", or \"RSA PRIVATE KEY\".');\n error.headerType = error;\n throw error;\n }\n\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n var dkLen;\n var cipherFn;\n switch(msg.dekInfo.algorithm) {\n case 'DES-CBC':\n dkLen = 8;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'DES-EDE3-CBC':\n dkLen = 24;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'AES-128-CBC':\n dkLen = 16;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'AES-192-CBC':\n dkLen = 24;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'AES-256-CBC':\n dkLen = 32;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'RC2-40-CBC':\n dkLen = 5;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 40);\n };\n break;\n case 'RC2-64-CBC':\n dkLen = 8;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 64);\n };\n break;\n case 'RC2-128-CBC':\n dkLen = 16;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 128);\n };\n break;\n default:\n var error = new Error('Could not decrypt private key; unsupported ' +\n 'encryption algorithm \"' + msg.dekInfo.algorithm + '\".');\n error.algorithm = msg.dekInfo.algorithm;\n throw error;\n }\n\n // use OpenSSL legacy key derivation\n var iv = forge.util.hexToBytes(msg.dekInfo.parameters);\n var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(forge.util.createBuffer(msg.body));\n if(cipher.finish()) {\n rval = cipher.output.getBytes();\n } else {\n return rval;\n }\n } else {\n rval = msg.body;\n }\n\n if(msg.type === 'ENCRYPTED PRIVATE KEY') {\n rval = pki.decryptPrivateKeyInfo(asn1.fromDer(rval), password);\n } else {\n // decryption already performed above\n rval = asn1.fromDer(rval);\n }\n\n if(rval !== null) {\n rval = pki.privateKeyFromAsn1(rval);\n }\n\n return rval;\n};\n\n/**\n * Derives a PKCS#12 key.\n *\n * @param password the password to derive the key material from, null or\n * undefined for none.\n * @param salt the salt, as a ByteBuffer, to use.\n * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).\n * @param iter the iteration count.\n * @param n the number of bytes to derive from the password.\n * @param md the message digest to use, defaults to SHA-1.\n *\n * @return a ByteBuffer with the bytes derived from the password.\n */\npki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {\n var j, l;\n\n if(typeof md === 'undefined' || md === null) {\n if(!('sha1' in forge.md)) {\n throw new Error('\"sha1\" hash algorithm unavailable.');\n }\n md = forge.md.sha1.create();\n }\n\n var u = md.digestLength;\n var v = md.blockLength;\n var result = new forge.util.ByteBuffer();\n\n /* Convert password to Unicode byte buffer + trailing 0-byte. */\n var passBuf = new forge.util.ByteBuffer();\n if(password !== null && password !== undefined) {\n for(l = 0; l < password.length; l++) {\n passBuf.putInt16(password.charCodeAt(l));\n }\n passBuf.putInt16(0);\n }\n\n /* Length of salt and password in BYTES. */\n var p = passBuf.length();\n var s = salt.length();\n\n /* 1. Construct a string, D (the \"diversifier\"), by concatenating\n v copies of ID. */\n var D = new forge.util.ByteBuffer();\n D.fillWithByte(id, v);\n\n /* 2. Concatenate copies of the salt together to create a string S of length\n v * ceil(s / v) bytes (the final copy of the salt may be trunacted\n to create S).\n Note that if the salt is the empty string, then so is S. */\n var Slen = v * Math.ceil(s / v);\n var S = new forge.util.ByteBuffer();\n for(l = 0; l < Slen; l++) {\n S.putByte(salt.at(l % s));\n }\n\n /* 3. Concatenate copies of the password together to create a string P of\n length v * ceil(p / v) bytes (the final copy of the password may be\n truncated to create P).\n Note that if the password is the empty string, then so is P. */\n var Plen = v * Math.ceil(p / v);\n var P = new forge.util.ByteBuffer();\n for(l = 0; l < Plen; l++) {\n P.putByte(passBuf.at(l % p));\n }\n\n /* 4. Set I=S||P to be the concatenation of S and P. */\n var I = S;\n I.putBuffer(P);\n\n /* 5. Set c=ceil(n / u). */\n var c = Math.ceil(n / u);\n\n /* 6. For i=1, 2, ..., c, do the following: */\n for(var i = 1; i <= c; i++) {\n /* a) Set Ai=H^r(D||I). (l.e. the rth hash of D||I, H(H(H(...H(D||I)))) */\n var buf = new forge.util.ByteBuffer();\n buf.putBytes(D.bytes());\n buf.putBytes(I.bytes());\n for(var round = 0; round < iter; round++) {\n md.start();\n md.update(buf.getBytes());\n buf = md.digest();\n }\n\n /* b) Concatenate copies of Ai to create a string B of length v bytes (the\n final copy of Ai may be truncated to create B). */\n var B = new forge.util.ByteBuffer();\n for(l = 0; l < v; l++) {\n B.putByte(buf.at(l % u));\n }\n\n /* c) Treating I as a concatenation I0, I1, ..., Ik-1 of v-byte blocks,\n where k=ceil(s / v) + ceil(p / v), modify I by setting\n Ij=(Ij+B+1) mod 2v for each j. */\n var k = Math.ceil(s / v) + Math.ceil(p / v);\n var Inew = new forge.util.ByteBuffer();\n for(j = 0; j < k; j++) {\n var chunk = new forge.util.ByteBuffer(I.getBytes(v));\n var x = 0x1ff;\n for(l = B.length() - 1; l >= 0; l--) {\n x = x >> 8;\n x += B.at(l) + chunk.at(l);\n chunk.setAt(l, x & 0xff);\n }\n Inew.putBuffer(chunk);\n }\n I = Inew;\n\n /* Add Ai to A. */\n result.putBuffer(buf);\n }\n\n result.truncate(result.length() - n);\n return result;\n};\n\n/**\n * Get new Forge cipher object instance.\n *\n * @param oid the OID (in string notation).\n * @param params the ASN.1 params object.\n * @param password the password to decrypt with.\n *\n * @return new cipher object instance.\n */\npki.pbe.getCipher = function(oid, params, password) {\n switch(oid) {\n case pki.oids['pkcs5PBES2']:\n return pki.pbe.getCipherForPBES2(oid, params, password);\n\n case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:\n case pki.oids['pbewithSHAAnd40BitRC2-CBC']:\n return pki.pbe.getCipherForPKCS12PBE(oid, params, password);\n\n default:\n var error = new Error('Cannot read encrypted PBE data block. Unsupported OID.');\n error.oid = oid;\n error.supportedOids = [\n 'pkcs5PBES2',\n 'pbeWithSHAAnd3-KeyTripleDES-CBC',\n 'pbewithSHAAnd40BitRC2-CBC'\n ];\n throw error;\n }\n};\n\n/**\n * Get new Forge cipher object instance according to PBES2 params block.\n *\n * The returned cipher instance is already started using the IV\n * from PBES2 parameter block.\n *\n * @param oid the PKCS#5 PBKDF2 OID (in string notation).\n * @param params the ASN.1 PBES2-params object.\n * @param password the password to decrypt with.\n *\n * @return new cipher object instance.\n */\npki.pbe.getCipherForPBES2 = function(oid, params, password) {\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(params, PBES2AlgorithmsValidator, capture, errors)) {\n var error = new Error('Cannot read password-based-encryption algorithm ' +\n 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n // check oids\n oid = asn1.derToOid(capture.kdfOid);\n if(oid !== pki.oids['pkcs5PBKDF2']) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'Unsupported key derivation function OID.');\n error.oid = oid;\n error.supportedOids = ['pkcs5PBKDF2'];\n throw error;\n }\n oid = asn1.derToOid(capture.encOid);\n if(oid !== pki.oids['aes128-CBC'] &&\n oid !== pki.oids['aes192-CBC'] &&\n oid !== pki.oids['aes256-CBC'] &&\n oid !== pki.oids['des-EDE3-CBC'] &&\n oid !== pki.oids['desCBC']) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'Unsupported encryption scheme OID.');\n error.oid = oid;\n error.supportedOids = [\n 'aes128-CBC', 'aes192-CBC', 'aes256-CBC', 'des-EDE3-CBC', 'desCBC'];\n throw error;\n }\n\n // set PBE params\n var salt = capture.kdfSalt;\n var count = forge.util.createBuffer(capture.kdfIterationCount);\n count = count.getInt(count.length() << 3);\n var dkLen;\n var cipherFn;\n switch(pki.oids[oid]) {\n case 'aes128-CBC':\n dkLen = 16;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'aes192-CBC':\n dkLen = 24;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'aes256-CBC':\n dkLen = 32;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'des-EDE3-CBC':\n dkLen = 24;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'desCBC':\n dkLen = 8;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n }\n\n // get PRF message digest\n var md = prfOidToMessageDigest(capture.prfOid);\n\n // decrypt private key using pbe with chosen PRF and AES/DES\n var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md);\n var iv = capture.encIv;\n var cipher = cipherFn(dk);\n cipher.start(iv);\n\n return cipher;\n};\n\n/**\n * Get new Forge cipher object instance for PKCS#12 PBE.\n *\n * The returned cipher instance is already started using the key & IV\n * derived from the provided password and PKCS#12 PBE salt.\n *\n * @param oid The PKCS#12 PBE OID (in string notation).\n * @param params The ASN.1 PKCS#12 PBE-params object.\n * @param password The password to decrypt with.\n *\n * @return the new cipher object instance.\n */\npki.pbe.getCipherForPKCS12PBE = function(oid, params, password) {\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(params, pkcs12PbeParamsValidator, capture, errors)) {\n var error = new Error('Cannot read password-based-encryption algorithm ' +\n 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n var salt = forge.util.createBuffer(capture.salt);\n var count = forge.util.createBuffer(capture.iterations);\n count = count.getInt(count.length() << 3);\n\n var dkLen, dIvLen, cipherFn;\n switch(oid) {\n case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:\n dkLen = 24;\n dIvLen = 8;\n cipherFn = forge.des.startDecrypting;\n break;\n\n case pki.oids['pbewithSHAAnd40BitRC2-CBC']:\n dkLen = 5;\n dIvLen = 8;\n cipherFn = function(key, iv) {\n var cipher = forge.rc2.createDecryptionCipher(key, 40);\n cipher.start(iv, null);\n return cipher;\n };\n break;\n\n default:\n var error = new Error('Cannot read PKCS #12 PBE data block. Unsupported OID.');\n error.oid = oid;\n throw error;\n }\n\n // get PRF message digest\n var md = prfOidToMessageDigest(capture.prfOid);\n var key = pki.pbe.generatePkcs12Key(password, salt, 1, count, dkLen, md);\n md.start();\n var iv = pki.pbe.generatePkcs12Key(password, salt, 2, count, dIvLen, md);\n\n return cipherFn(key, iv);\n};\n\n/**\n * OpenSSL's legacy key derivation function.\n *\n * See: http://www.openssl.org/docs/crypto/EVP_BytesToKey.html\n *\n * @param password the password to derive the key from.\n * @param salt the salt to use, null for none.\n * @param dkLen the number of bytes needed for the derived key.\n * @param [options] the options to use:\n * [md] an optional message digest object to use.\n */\npki.pbe.opensslDeriveBytes = function(password, salt, dkLen, md) {\n if(typeof md === 'undefined' || md === null) {\n if(!('md5' in forge.md)) {\n throw new Error('\"md5\" hash algorithm unavailable.');\n }\n md = forge.md.md5.create();\n }\n if(salt === null) {\n salt = '';\n }\n var digests = [hash(md, password + salt)];\n for(var length = 16, i = 1; length < dkLen; ++i, length += 16) {\n digests.push(hash(md, digests[i - 1] + password + salt));\n }\n return digests.join('').substr(0, dkLen);\n};\n\nfunction hash(md, bytes) {\n return md.start().update(bytes).digest().getBytes();\n}\n\nfunction prfOidToMessageDigest(prfOid) {\n // get PRF algorithm, default to SHA-1\n var prfAlgorithm;\n if(!prfOid) {\n prfAlgorithm = 'hmacWithSHA1';\n } else {\n prfAlgorithm = pki.oids[asn1.derToOid(prfOid)];\n if(!prfAlgorithm) {\n var error = new Error('Unsupported PRF OID.');\n error.oid = prfOid;\n error.supported = [\n 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',\n 'hmacWithSHA512'];\n throw error;\n }\n }\n return prfAlgorithmToMessageDigest(prfAlgorithm);\n}\n\nfunction prfAlgorithmToMessageDigest(prfAlgorithm) {\n var factory = forge.md;\n switch(prfAlgorithm) {\n case 'hmacWithSHA224':\n factory = forge.md.sha512;\n case 'hmacWithSHA1':\n case 'hmacWithSHA256':\n case 'hmacWithSHA384':\n case 'hmacWithSHA512':\n prfAlgorithm = prfAlgorithm.substr(8).toLowerCase();\n break;\n default:\n var error = new Error('Unsupported PRF algorithm.');\n error.algorithm = prfAlgorithm;\n error.supported = [\n 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',\n 'hmacWithSHA512'];\n throw error;\n }\n if(!factory || !(prfAlgorithm in factory)) {\n throw new Error('Unknown hash algorithm: ' + prfAlgorithm);\n }\n return factory[prfAlgorithm].create();\n}\n\nfunction createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm) {\n var params = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // salt\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt),\n // iteration count\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n countBytes.getBytes())\n ]);\n // when PRF algorithm is not SHA-1 default, add key length and PRF algorithm\n if(prfAlgorithm !== 'hmacWithSHA1') {\n params.value.push(\n // key length\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(dkLen.toString(16))),\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids[prfAlgorithm]).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n }\n return params;\n}\n","/**\n * Javascript implementation of ASN.1 validators for PKCS#7 v1.5.\n *\n * @author Dave Longley\n * @author Stefan Siegl\n *\n * Copyright (c) 2012-2015 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\n *\n * The ASN.1 representation of PKCS#7 is as follows\n * (see RFC #2315 for details, http://www.ietf.org/rfc/rfc2315.txt):\n *\n * A PKCS#7 message consists of a ContentInfo on root level, which may\n * contain any number of further ContentInfo nested into it.\n *\n * ContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL\n * }\n *\n * ContentType ::= OBJECT IDENTIFIER\n *\n * EnvelopedData ::= SEQUENCE {\n * version Version,\n * recipientInfos RecipientInfos,\n * encryptedContentInfo EncryptedContentInfo\n * }\n *\n * EncryptedData ::= SEQUENCE {\n * version Version,\n * encryptedContentInfo EncryptedContentInfo\n * }\n *\n * id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)\n * us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }\n *\n * SignedData ::= SEQUENCE {\n * version INTEGER,\n * digestAlgorithms DigestAlgorithmIdentifiers,\n * contentInfo ContentInfo,\n * certificates [0] IMPLICIT Certificates OPTIONAL,\n * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,\n * signerInfos SignerInfos\n * }\n *\n * SignerInfos ::= SET OF SignerInfo\n *\n * SignerInfo ::= SEQUENCE {\n * version Version,\n * issuerAndSerialNumber IssuerAndSerialNumber,\n * digestAlgorithm DigestAlgorithmIdentifier,\n * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,\n * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,\n * encryptedDigest EncryptedDigest,\n * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL\n * }\n *\n * EncryptedDigest ::= OCTET STRING\n *\n * Attributes ::= SET OF Attribute\n *\n * Attribute ::= SEQUENCE {\n * attrType OBJECT IDENTIFIER,\n * attrValues SET OF AttributeValue\n * }\n *\n * AttributeValue ::= ANY\n *\n * Version ::= INTEGER\n *\n * RecipientInfos ::= SET OF RecipientInfo\n *\n * EncryptedContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,\n * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL\n * }\n *\n * ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of AES and DES3, there is only one,\n * the IV.\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * EncryptedContent ::= OCTET STRING\n *\n * RecipientInfo ::= SEQUENCE {\n * version Version,\n * issuerAndSerialNumber IssuerAndSerialNumber,\n * keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,\n * encryptedKey EncryptedKey\n * }\n *\n * IssuerAndSerialNumber ::= SEQUENCE {\n * issuer Name,\n * serialNumber CertificateSerialNumber\n * }\n *\n * CertificateSerialNumber ::= INTEGER\n *\n * KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * EncryptedKey ::= OCTET STRING\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./util');\n\n// shortcut for ASN.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for PKCS#7 API\nvar p7v = module.exports = forge.pkcs7asn1 = forge.pkcs7asn1 || {};\nforge.pkcs7 = forge.pkcs7 || {};\nforge.pkcs7.asn1 = p7v;\n\nvar contentInfoValidator = {\n name: 'ContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'ContentInfo.ContentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'ContentInfo.content',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n captureAsn1: 'content'\n }]\n};\np7v.contentInfoValidator = contentInfoValidator;\n\nvar encryptedContentInfoValidator = {\n name: 'EncryptedContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedContentInfo.contentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encAlgorithm'\n }, {\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n captureAsn1: 'encParameter'\n }]\n }, {\n name: 'EncryptedContentInfo.encryptedContent',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n /* The PKCS#7 structure output by OpenSSL somewhat differs from what\n * other implementations do generate.\n *\n * OpenSSL generates a structure like this:\n * SEQUENCE {\n * ...\n * [0]\n * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38\n * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45\n * ...\n * }\n *\n * Whereas other implementations (and this PKCS#7 module) generate:\n * SEQUENCE {\n * ...\n * [0] {\n * OCTET STRING\n * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38\n * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45\n * ...\n * }\n * }\n *\n * In order to support both, we just capture the context specific\n * field here. The OCTET STRING bit is removed below.\n */\n capture: 'encryptedContent',\n captureAsn1: 'encryptedContentAsn1'\n }]\n};\n\np7v.envelopedDataValidator = {\n name: 'EnvelopedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EnvelopedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'EnvelopedData.RecipientInfos',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n captureAsn1: 'recipientInfos'\n }].concat(encryptedContentInfoValidator)\n};\n\np7v.encryptedDataValidator = {\n name: 'EncryptedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }].concat(encryptedContentInfoValidator)\n};\n\nvar signerValidator = {\n name: 'SignerInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false\n }, {\n name: 'SignerInfo.issuerAndSerialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.issuerAndSerialNumber.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'issuer'\n }, {\n name: 'SignerInfo.issuerAndSerialNumber.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'serial'\n }]\n }, {\n name: 'SignerInfo.digestAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.digestAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'digestAlgorithm'\n }, {\n name: 'SignerInfo.digestAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n constructed: false,\n captureAsn1: 'digestParameter',\n optional: true\n }]\n }, {\n name: 'SignerInfo.authenticatedAttributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n capture: 'authenticatedAttributes'\n }, {\n name: 'SignerInfo.digestEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n capture: 'signatureAlgorithm'\n }, {\n name: 'SignerInfo.encryptedDigest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'signature'\n }, {\n name: 'SignerInfo.unauthenticatedAttributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n optional: true,\n capture: 'unauthenticatedAttributes'\n }]\n};\n\np7v.signedDataValidator = {\n name: 'SignedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'SignedData.DigestAlgorithms',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n captureAsn1: 'digestAlgorithms'\n },\n contentInfoValidator,\n {\n name: 'SignedData.Certificates',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n optional: true,\n captureAsn1: 'certificates'\n }, {\n name: 'SignedData.CertificateRevocationLists',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n optional: true,\n captureAsn1: 'crls'\n }, {\n name: 'SignedData.SignerInfos',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n capture: 'signerInfos',\n optional: true,\n value: [signerValidator]\n }]\n};\n\np7v.recipientInfoValidator = {\n name: 'RecipientInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'RecipientInfo.issuerAndSerial',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.issuerAndSerial.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'issuer'\n }, {\n name: 'RecipientInfo.issuerAndSerial.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'serial'\n }]\n }, {\n name: 'RecipientInfo.keyEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.keyEncryptionAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encAlgorithm'\n }, {\n name: 'RecipientInfo.keyEncryptionAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n constructed: false,\n captureAsn1: 'encParameter'\n }]\n }, {\n name: 'RecipientInfo.encryptedKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encKey'\n }]\n};\n","/**\n * Javascript implementation of mask generation function MGF1.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\n * Copyright (c) 2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nforge.mgf = forge.mgf || {};\nvar mgf1 = module.exports = forge.mgf.mgf1 = forge.mgf1 = forge.mgf1 || {};\n\n/**\n * Creates a MGF1 mask generation function object.\n *\n * @param md the message digest API to use (eg: forge.md.sha1.create()).\n *\n * @return a mask generation function object.\n */\nmgf1.create = function(md) {\n var mgf = {\n /**\n * Generate mask of specified length.\n *\n * @param {String} seed The seed for mask generation.\n * @param maskLen Number of bytes to generate.\n * @return {String} The generated mask.\n */\n generate: function(seed, maskLen) {\n /* 2. Let T be the empty octet string. */\n var t = new forge.util.ByteBuffer();\n\n /* 3. For counter from 0 to ceil(maskLen / hLen), do the following: */\n var len = Math.ceil(maskLen / md.digestLength);\n for(var i = 0; i < len; i++) {\n /* a. Convert counter to an octet string C of length 4 octets */\n var c = new forge.util.ByteBuffer();\n c.putInt32(i);\n\n /* b. Concatenate the hash of the seed mgfSeed and C to the octet\n * string T: */\n md.start();\n md.update(seed + c.getBytes());\n t.putBuffer(md.digest());\n }\n\n /* Output the leading maskLen octets of T as the octet string mask. */\n t.truncate(t.length() - maskLen);\n return t.getBytes();\n }\n };\n\n return mgf;\n};\n","/**\n * Node.js module for Forge mask generation functions.\n *\n * @author Stefan Siegl\n *\n * Copyright 2012 Stefan Siegl <stesie@brokenpipe.de>\n */\nvar forge = require('./forge');\nrequire('./mgf1');\n\nmodule.exports = forge.mgf = forge.mgf || {};\nforge.mgf.mgf1 = forge.mgf1;\n","/**\n * Javascript implementation of PKCS#1 PSS signature padding.\n *\n * @author Stefan Siegl\n *\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\n */\nvar forge = require('./forge');\nrequire('./random');\nrequire('./util');\n\n// shortcut for PSS API\nvar pss = module.exports = forge.pss = forge.pss || {};\n\n/**\n * Creates a PSS signature scheme object.\n *\n * There are several ways to provide a salt for encoding:\n *\n * 1. Specify the saltLength only and the built-in PRNG will generate it.\n * 2. Specify the saltLength and a custom PRNG with 'getBytesSync' defined that\n * will be used.\n * 3. Specify the salt itself as a forge.util.ByteBuffer.\n *\n * @param options the options to use:\n * md the message digest object to use, a forge md instance.\n * mgf the mask generation function to use, a forge mgf instance.\n * [saltLength] the length of the salt in octets.\n * [prng] the pseudo-random number generator to use to produce a salt.\n * [salt] the salt to use when encoding.\n *\n * @return a signature scheme object.\n */\npss.create = function(options) {\n // backwards compatibility w/legacy args: hash, mgf, sLen\n if(arguments.length === 3) {\n options = {\n md: arguments[0],\n mgf: arguments[1],\n saltLength: arguments[2]\n };\n }\n\n var hash = options.md;\n var mgf = options.mgf;\n var hLen = hash.digestLength;\n\n var salt_ = options.salt || null;\n if(typeof salt_ === 'string') {\n // assume binary-encoded string\n salt_ = forge.util.createBuffer(salt_);\n }\n\n var sLen;\n if('saltLength' in options) {\n sLen = options.saltLength;\n } else if(salt_ !== null) {\n sLen = salt_.length();\n } else {\n throw new Error('Salt length not specified or specific salt not given.');\n }\n\n if(salt_ !== null && salt_.length() !== sLen) {\n throw new Error('Given salt length does not match length of given salt.');\n }\n\n var prng = options.prng || forge.random;\n\n var pssobj = {};\n\n /**\n * Encodes a PSS signature.\n *\n * This function implements EMSA-PSS-ENCODE as per RFC 3447, section 9.1.1.\n *\n * @param md the message digest object with the hash to sign.\n * @param modsBits the length of the RSA modulus in bits.\n *\n * @return the encoded message as a binary-encoded string of length\n * ceil((modBits - 1) / 8).\n */\n pssobj.encode = function(md, modBits) {\n var i;\n var emBits = modBits - 1;\n var emLen = Math.ceil(emBits / 8);\n\n /* 2. Let mHash = Hash(M), an octet string of length hLen. */\n var mHash = md.digest().getBytes();\n\n /* 3. If emLen < hLen + sLen + 2, output \"encoding error\" and stop. */\n if(emLen < hLen + sLen + 2) {\n throw new Error('Message is too long to encrypt.');\n }\n\n /* 4. Generate a random octet string salt of length sLen; if sLen = 0,\n * then salt is the empty string. */\n var salt;\n if(salt_ === null) {\n salt = prng.getBytesSync(sLen);\n } else {\n salt = salt_.bytes();\n }\n\n /* 5. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt; */\n var m_ = new forge.util.ByteBuffer();\n m_.fillWithByte(0, 8);\n m_.putBytes(mHash);\n m_.putBytes(salt);\n\n /* 6. Let H = Hash(M'), an octet string of length hLen. */\n hash.start();\n hash.update(m_.getBytes());\n var h = hash.digest().getBytes();\n\n /* 7. Generate an octet string PS consisting of emLen - sLen - hLen - 2\n * zero octets. The length of PS may be 0. */\n var ps = new forge.util.ByteBuffer();\n ps.fillWithByte(0, emLen - sLen - hLen - 2);\n\n /* 8. Let DB = PS || 0x01 || salt; DB is an octet string of length\n * emLen - hLen - 1. */\n ps.putByte(0x01);\n ps.putBytes(salt);\n var db = ps.getBytes();\n\n /* 9. Let dbMask = MGF(H, emLen - hLen - 1). */\n var maskLen = emLen - hLen - 1;\n var dbMask = mgf.generate(h, maskLen);\n\n /* 10. Let maskedDB = DB \\xor dbMask. */\n var maskedDB = '';\n for(i = 0; i < maskLen; i++) {\n maskedDB += String.fromCharCode(db.charCodeAt(i) ^ dbMask.charCodeAt(i));\n }\n\n /* 11. Set the leftmost 8emLen - emBits bits of the leftmost octet in\n * maskedDB to zero. */\n var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF;\n maskedDB = String.fromCharCode(maskedDB.charCodeAt(0) & ~mask) +\n maskedDB.substr(1);\n\n /* 12. Let EM = maskedDB || H || 0xbc.\n * 13. Output EM. */\n return maskedDB + h + String.fromCharCode(0xbc);\n };\n\n /**\n * Verifies a PSS signature.\n *\n * This function implements EMSA-PSS-VERIFY as per RFC 3447, section 9.1.2.\n *\n * @param mHash the message digest hash, as a binary-encoded string, to\n * compare against the signature.\n * @param em the encoded message, as a binary-encoded string\n * (RSA decryption result).\n * @param modsBits the length of the RSA modulus in bits.\n *\n * @return true if the signature was verified, false if not.\n */\n pssobj.verify = function(mHash, em, modBits) {\n var i;\n var emBits = modBits - 1;\n var emLen = Math.ceil(emBits / 8);\n\n /* c. Convert the message representative m to an encoded message EM\n * of length emLen = ceil((modBits - 1) / 8) octets, where modBits\n * is the length in bits of the RSA modulus n */\n em = em.substr(-emLen);\n\n /* 3. If emLen < hLen + sLen + 2, output \"inconsistent\" and stop. */\n if(emLen < hLen + sLen + 2) {\n throw new Error('Inconsistent parameters to PSS signature verification.');\n }\n\n /* 4. If the rightmost octet of EM does not have hexadecimal value\n * 0xbc, output \"inconsistent\" and stop. */\n if(em.charCodeAt(emLen - 1) !== 0xbc) {\n throw new Error('Encoded message does not end in 0xBC.');\n }\n\n /* 5. Let maskedDB be the leftmost emLen - hLen - 1 octets of EM, and\n * let H be the next hLen octets. */\n var maskLen = emLen - hLen - 1;\n var maskedDB = em.substr(0, maskLen);\n var h = em.substr(maskLen, hLen);\n\n /* 6. If the leftmost 8emLen - emBits bits of the leftmost octet in\n * maskedDB are not all equal to zero, output \"inconsistent\" and stop. */\n var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF;\n if((maskedDB.charCodeAt(0) & mask) !== 0) {\n throw new Error('Bits beyond keysize not zero as expected.');\n }\n\n /* 7. Let dbMask = MGF(H, emLen - hLen - 1). */\n var dbMask = mgf.generate(h, maskLen);\n\n /* 8. Let DB = maskedDB \\xor dbMask. */\n var db = '';\n for(i = 0; i < maskLen; i++) {\n db += String.fromCharCode(maskedDB.charCodeAt(i) ^ dbMask.charCodeAt(i));\n }\n\n /* 9. Set the leftmost 8emLen - emBits bits of the leftmost octet\n * in DB to zero. */\n db = String.fromCharCode(db.charCodeAt(0) & ~mask) + db.substr(1);\n\n /* 10. If the emLen - hLen - sLen - 2 leftmost octets of DB are not zero\n * or if the octet at position emLen - hLen - sLen - 1 (the leftmost\n * position is \"position 1\") does not have hexadecimal value 0x01,\n * output \"inconsistent\" and stop. */\n var checkLen = emLen - hLen - sLen - 2;\n for(i = 0; i < checkLen; i++) {\n if(db.charCodeAt(i) !== 0x00) {\n throw new Error('Leftmost octets not zero as expected');\n }\n }\n\n if(db.charCodeAt(checkLen) !== 0x01) {\n throw new Error('Inconsistent PSS signature, 0x01 marker not found');\n }\n\n /* 11. Let salt be the last sLen octets of DB. */\n var salt = db.substr(-sLen);\n\n /* 12. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt */\n var m_ = new forge.util.ByteBuffer();\n m_.fillWithByte(0, 8);\n m_.putBytes(mHash);\n m_.putBytes(salt);\n\n /* 13. Let H' = Hash(M'), an octet string of length hLen. */\n hash.start();\n hash.update(m_.getBytes());\n var h_ = hash.digest().getBytes();\n\n /* 14. If H = H', output \"consistent.\" Otherwise, output \"inconsistent.\" */\n return h === h_;\n };\n\n return pssobj;\n};\n","/**\n * Javascript implementation of X.509 and related components (such as\n * Certification Signing Requests) of a Public Key Infrastructure.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n *\n * The ASN.1 representation of an X.509v3 certificate is as follows\n * (see RFC 2459):\n *\n * Certificate ::= SEQUENCE {\n * tbsCertificate TBSCertificate,\n * signatureAlgorithm AlgorithmIdentifier,\n * signatureValue BIT STRING\n * }\n *\n * TBSCertificate ::= SEQUENCE {\n * version [0] EXPLICIT Version DEFAULT v1,\n * serialNumber CertificateSerialNumber,\n * signature AlgorithmIdentifier,\n * issuer Name,\n * validity Validity,\n * subject Name,\n * subjectPublicKeyInfo SubjectPublicKeyInfo,\n * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,\n * -- If present, version shall be v2 or v3\n * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,\n * -- If present, version shall be v2 or v3\n * extensions [3] EXPLICIT Extensions OPTIONAL\n * -- If present, version shall be v3\n * }\n *\n * Version ::= INTEGER { v1(0), v2(1), v3(2) }\n *\n * CertificateSerialNumber ::= INTEGER\n *\n * Name ::= CHOICE {\n * // only one possible choice for now\n * RDNSequence\n * }\n *\n * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName\n *\n * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue\n *\n * AttributeTypeAndValue ::= SEQUENCE {\n * type AttributeType,\n * value AttributeValue\n * }\n * AttributeType ::= OBJECT IDENTIFIER\n * AttributeValue ::= ANY DEFINED BY AttributeType\n *\n * Validity ::= SEQUENCE {\n * notBefore Time,\n * notAfter Time\n * }\n *\n * Time ::= CHOICE {\n * utcTime UTCTime,\n * generalTime GeneralizedTime\n * }\n *\n * UniqueIdentifier ::= BIT STRING\n *\n * SubjectPublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * subjectPublicKey BIT STRING\n * }\n *\n * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension\n *\n * Extension ::= SEQUENCE {\n * extnID OBJECT IDENTIFIER,\n * critical BOOLEAN DEFAULT FALSE,\n * extnValue OCTET STRING\n * }\n *\n * The only key algorithm currently supported for PKI is RSA.\n *\n * RSASSA-PSS signatures are described in RFC 3447 and RFC 4055.\n *\n * PKCS#10 v1.7 describes certificate signing requests:\n *\n * CertificationRequestInfo:\n *\n * CertificationRequestInfo ::= SEQUENCE {\n * version INTEGER { v1(0) } (v1,...),\n * subject Name,\n * subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},\n * attributes [0] Attributes{{ CRIAttributes }}\n * }\n *\n * Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}\n *\n * CRIAttributes ATTRIBUTE ::= {\n * ... -- add any locally defined attributes here -- }\n *\n * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {\n * type ATTRIBUTE.&id({IOSet}),\n * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})\n * }\n *\n * CertificationRequest ::= SEQUENCE {\n * certificationRequestInfo CertificationRequestInfo,\n * signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},\n * signature BIT STRING\n * }\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./md');\nrequire('./mgf');\nrequire('./oids');\nrequire('./pem');\nrequire('./pss');\nrequire('./rsa');\nrequire('./util');\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Public Key Infrastructure (PKI) implementation. */\nvar pki = module.exports = forge.pki = forge.pki || {};\nvar oids = pki.oids;\n\n// short name OID mappings\nvar _shortNames = {};\n_shortNames['CN'] = oids['commonName'];\n_shortNames['commonName'] = 'CN';\n_shortNames['C'] = oids['countryName'];\n_shortNames['countryName'] = 'C';\n_shortNames['L'] = oids['localityName'];\n_shortNames['localityName'] = 'L';\n_shortNames['ST'] = oids['stateOrProvinceName'];\n_shortNames['stateOrProvinceName'] = 'ST';\n_shortNames['O'] = oids['organizationName'];\n_shortNames['organizationName'] = 'O';\n_shortNames['OU'] = oids['organizationalUnitName'];\n_shortNames['organizationalUnitName'] = 'OU';\n_shortNames['E'] = oids['emailAddress'];\n_shortNames['emailAddress'] = 'E';\n\n// validator for an SubjectPublicKeyInfo structure\n// Note: Currently only works with an RSA public key\nvar publicKeyValidator = forge.pki.rsa.publicKeyValidator;\n\n// validator for an X.509v3 certificate\nvar x509CertificateValidator = {\n name: 'Certificate',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Certificate.TBSCertificate',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'tbsCertificate',\n value: [{\n name: 'Certificate.TBSCertificate.version',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.version.integer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certVersion'\n }]\n }, {\n name: 'Certificate.TBSCertificate.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certSerialNumber'\n }, {\n name: 'Certificate.TBSCertificate.signature',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Certificate.TBSCertificate.signature.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certinfoSignatureOid'\n }, {\n name: 'Certificate.TBSCertificate.signature.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'certinfoSignatureParams'\n }]\n }, {\n name: 'Certificate.TBSCertificate.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certIssuer'\n }, {\n name: 'Certificate.TBSCertificate.validity',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n // Note: UTC and generalized times may both appear so the capture\n // names are based on their detected order, the names used below\n // are only for the common case, which validity time really means\n // \"notBefore\" and which means \"notAfter\" will be determined by order\n value: [{\n // notBefore (Time) (UTC time case)\n name: 'Certificate.TBSCertificate.validity.notBefore (utc)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity1UTCTime'\n }, {\n // notBefore (Time) (generalized time case)\n name: 'Certificate.TBSCertificate.validity.notBefore (generalized)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity2GeneralizedTime'\n }, {\n // notAfter (Time) (only UTC time is supported)\n name: 'Certificate.TBSCertificate.validity.notAfter (utc)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity3UTCTime'\n }, {\n // notAfter (Time) (only UTC time is supported)\n name: 'Certificate.TBSCertificate.validity.notAfter (generalized)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity4GeneralizedTime'\n }]\n }, {\n // Name (subject) (RDNSequence)\n name: 'Certificate.TBSCertificate.subject',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certSubject'\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n // issuerUniqueID (optional)\n name: 'Certificate.TBSCertificate.issuerUniqueID',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.issuerUniqueID.id',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n // TODO: support arbitrary bit length ids\n captureBitStringValue: 'certIssuerUniqueId'\n }]\n }, {\n // subjectUniqueID (optional)\n name: 'Certificate.TBSCertificate.subjectUniqueID',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.subjectUniqueID.id',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n // TODO: support arbitrary bit length ids\n captureBitStringValue: 'certSubjectUniqueId'\n }]\n }, {\n // Extensions (optional)\n name: 'Certificate.TBSCertificate.extensions',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n constructed: true,\n captureAsn1: 'certExtensions',\n optional: true\n }]\n }, {\n // AlgorithmIdentifier (signature algorithm)\n name: 'Certificate.signatureAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // algorithm\n name: 'Certificate.signatureAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certSignatureOid'\n }, {\n name: 'Certificate.TBSCertificate.signature.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'certSignatureParams'\n }]\n }, {\n // SignatureValue\n name: 'Certificate.signatureValue',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n captureBitStringValue: 'certSignature'\n }]\n};\n\nvar rsassaPssParameterValidator = {\n name: 'rsapss',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'rsapss.hashAlgorithm',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n value: [{\n name: 'rsapss.hashAlgorithm.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'hashOid'\n /* parameter block omitted, for SHA1 NULL anyhow. */\n }]\n }]\n }, {\n name: 'rsapss.maskGenAlgorithm',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'maskGenOid'\n }, {\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'maskGenHashOid'\n /* parameter block omitted, for SHA1 NULL anyhow. */\n }]\n }]\n }]\n }, {\n name: 'rsapss.saltLength',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n optional: true,\n value: [{\n name: 'rsapss.saltLength.saltLength',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.INTEGER,\n constructed: false,\n capture: 'saltLength'\n }]\n }, {\n name: 'rsapss.trailerField',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n optional: true,\n value: [{\n name: 'rsapss.trailer.trailer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.INTEGER,\n constructed: false,\n capture: 'trailer'\n }]\n }]\n};\n\n// validator for a CertificationRequestInfo structure\nvar certificationRequestInfoValidator = {\n name: 'CertificationRequestInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certificationRequestInfo',\n value: [{\n name: 'CertificationRequestInfo.integer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certificationRequestInfoVersion'\n }, {\n // Name (subject) (RDNSequence)\n name: 'CertificationRequestInfo.subject',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certificationRequestInfoSubject'\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n name: 'CertificationRequestInfo.attributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n capture: 'certificationRequestInfoAttributes',\n value: [{\n name: 'CertificationRequestInfo.attributes',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'CertificationRequestInfo.attributes.type',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false\n }, {\n name: 'CertificationRequestInfo.attributes.value',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true\n }]\n }]\n }]\n};\n\n// validator for a CertificationRequest structure\nvar certificationRequestValidator = {\n name: 'CertificationRequest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'csr',\n value: [\n certificationRequestInfoValidator, {\n // AlgorithmIdentifier (signature algorithm)\n name: 'CertificationRequest.signatureAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // algorithm\n name: 'CertificationRequest.signatureAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'csrSignatureOid'\n }, {\n name: 'CertificationRequest.signatureAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'csrSignatureParams'\n }]\n }, {\n // signature\n name: 'CertificationRequest.signature',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n captureBitStringValue: 'csrSignature'\n }\n ]\n};\n\n/**\n * Converts an RDNSequence of ASN.1 DER-encoded RelativeDistinguishedName\n * sets into an array with objects that have type and value properties.\n *\n * @param rdn the RDNSequence to convert.\n * @param md a message digest to append type and value to if provided.\n */\npki.RDNAttributesAsArray = function(rdn, md) {\n var rval = [];\n\n // each value in 'rdn' in is a SET of RelativeDistinguishedName\n var set, attr, obj;\n for(var si = 0; si < rdn.value.length; ++si) {\n // get the RelativeDistinguishedName set\n set = rdn.value[si];\n\n // each value in the SET is an AttributeTypeAndValue sequence\n // containing first a type (an OID) and second a value (defined by\n // the OID)\n for(var i = 0; i < set.value.length; ++i) {\n obj = {};\n attr = set.value[i];\n obj.type = asn1.derToOid(attr.value[0].value);\n obj.value = attr.value[1].value;\n obj.valueTagClass = attr.value[1].type;\n // if the OID is known, get its name and short name\n if(obj.type in oids) {\n obj.name = oids[obj.type];\n if(obj.name in _shortNames) {\n obj.shortName = _shortNames[obj.name];\n }\n }\n if(md) {\n md.update(obj.type);\n md.update(obj.value);\n }\n rval.push(obj);\n }\n }\n\n return rval;\n};\n\n/**\n * Converts ASN.1 CRIAttributes into an array with objects that have type and\n * value properties.\n *\n * @param attributes the CRIAttributes to convert.\n */\npki.CRIAttributesAsArray = function(attributes) {\n var rval = [];\n\n // each value in 'attributes' in is a SEQUENCE with an OID and a SET\n for(var si = 0; si < attributes.length; ++si) {\n // get the attribute sequence\n var seq = attributes[si];\n\n // each value in the SEQUENCE containing first a type (an OID) and\n // second a set of values (defined by the OID)\n var type = asn1.derToOid(seq.value[0].value);\n var values = seq.value[1].value;\n for(var vi = 0; vi < values.length; ++vi) {\n var obj = {};\n obj.type = type;\n obj.value = values[vi].value;\n obj.valueTagClass = values[vi].type;\n // if the OID is known, get its name and short name\n if(obj.type in oids) {\n obj.name = oids[obj.type];\n if(obj.name in _shortNames) {\n obj.shortName = _shortNames[obj.name];\n }\n }\n // parse extensions\n if(obj.type === oids.extensionRequest) {\n obj.extensions = [];\n for(var ei = 0; ei < obj.value.length; ++ei) {\n obj.extensions.push(pki.certificateExtensionFromAsn1(obj.value[ei]));\n }\n }\n rval.push(obj);\n }\n }\n\n return rval;\n};\n\n/**\n * Gets an issuer or subject attribute from its name, type, or short name.\n *\n * @param obj the issuer or subject object.\n * @param options a short name string or an object with:\n * shortName the short name for the attribute.\n * name the name for the attribute.\n * type the type for the attribute.\n *\n * @return the attribute.\n */\nfunction _getAttribute(obj, options) {\n if(typeof options === 'string') {\n options = {shortName: options};\n }\n\n var rval = null;\n var attr;\n for(var i = 0; rval === null && i < obj.attributes.length; ++i) {\n attr = obj.attributes[i];\n if(options.type && options.type === attr.type) {\n rval = attr;\n } else if(options.name && options.name === attr.name) {\n rval = attr;\n } else if(options.shortName && options.shortName === attr.shortName) {\n rval = attr;\n }\n }\n return rval;\n}\n\n/**\n * Converts signature parameters from ASN.1 structure.\n *\n * Currently only RSASSA-PSS supported. The PKCS#1 v1.5 signature scheme had\n * no parameters.\n *\n * RSASSA-PSS-params ::= SEQUENCE {\n * hashAlgorithm [0] HashAlgorithm DEFAULT\n * sha1Identifier,\n * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT\n * mgf1SHA1Identifier,\n * saltLength [2] INTEGER DEFAULT 20,\n * trailerField [3] INTEGER DEFAULT 1\n * }\n *\n * HashAlgorithm ::= AlgorithmIdentifier\n *\n * MaskGenAlgorithm ::= AlgorithmIdentifier\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * @param oid The OID specifying the signature algorithm\n * @param obj The ASN.1 structure holding the parameters\n * @param fillDefaults Whether to use return default values where omitted\n * @return signature parameter object\n */\nvar _readSignatureParameters = function(oid, obj, fillDefaults) {\n var params = {};\n\n if(oid !== oids['RSASSA-PSS']) {\n return params;\n }\n\n if(fillDefaults) {\n params = {\n hash: {\n algorithmOid: oids['sha1']\n },\n mgf: {\n algorithmOid: oids['mgf1'],\n hash: {\n algorithmOid: oids['sha1']\n }\n },\n saltLength: 20\n };\n }\n\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, rsassaPssParameterValidator, capture, errors)) {\n var error = new Error('Cannot read RSASSA-PSS parameter block.');\n error.errors = errors;\n throw error;\n }\n\n if(capture.hashOid !== undefined) {\n params.hash = params.hash || {};\n params.hash.algorithmOid = asn1.derToOid(capture.hashOid);\n }\n\n if(capture.maskGenOid !== undefined) {\n params.mgf = params.mgf || {};\n params.mgf.algorithmOid = asn1.derToOid(capture.maskGenOid);\n params.mgf.hash = params.mgf.hash || {};\n params.mgf.hash.algorithmOid = asn1.derToOid(capture.maskGenHashOid);\n }\n\n if(capture.saltLength !== undefined) {\n params.saltLength = capture.saltLength.charCodeAt(0);\n }\n\n return params;\n};\n\n/**\n * Converts an X.509 certificate from PEM format.\n *\n * Note: If the certificate is to be verified then compute hash should\n * be set to true. This will scan the TBSCertificate part of the ASN.1\n * object while it is converted so it doesn't need to be converted back\n * to ASN.1-DER-encoding later.\n *\n * @param pem the PEM-formatted certificate.\n * @param computeHash true to compute the hash for verification.\n * @param strict true to be strict when checking ASN.1 value lengths, false to\n * allow truncated values (default: true).\n *\n * @return the certificate.\n */\npki.certificateFromPem = function(pem, computeHash, strict) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'CERTIFICATE' &&\n msg.type !== 'X509 CERTIFICATE' &&\n msg.type !== 'TRUSTED CERTIFICATE') {\n var error = new Error(\n 'Could not convert certificate from PEM; PEM header type ' +\n 'is not \"CERTIFICATE\", \"X509 CERTIFICATE\", or \"TRUSTED CERTIFICATE\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error(\n 'Could not convert certificate from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body, strict);\n\n return pki.certificateFromAsn1(obj, computeHash);\n};\n\n/**\n * Converts an X.509 certificate to PEM format.\n *\n * @param cert the certificate.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted certificate.\n */\npki.certificateToPem = function(cert, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'CERTIFICATE',\n body: asn1.toDer(pki.certificateToAsn1(cert)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts an RSA public key from PEM format.\n *\n * @param pem the PEM-formatted public key.\n *\n * @return the public key.\n */\npki.publicKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PUBLIC KEY' && msg.type !== 'RSA PUBLIC KEY') {\n var error = new Error('Could not convert public key from PEM; PEM header ' +\n 'type is not \"PUBLIC KEY\" or \"RSA PUBLIC KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert public key from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return pki.publicKeyFromAsn1(obj);\n};\n\n/**\n * Converts an RSA public key to PEM format (using a SubjectPublicKeyInfo).\n *\n * @param key the public key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted public key.\n */\npki.publicKeyToPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'PUBLIC KEY',\n body: asn1.toDer(pki.publicKeyToAsn1(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts an RSA public key to PEM format (using an RSAPublicKey).\n *\n * @param key the public key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted public key.\n */\npki.publicKeyToRSAPublicKeyPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'RSA PUBLIC KEY',\n body: asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Gets a fingerprint for the given public key.\n *\n * @param options the options to use.\n * [md] the message digest object to use (defaults to forge.md.sha1).\n * [type] the type of fingerprint, such as 'RSAPublicKey',\n * 'SubjectPublicKeyInfo' (defaults to 'RSAPublicKey').\n * [encoding] an alternative output encoding, such as 'hex'\n * (defaults to none, outputs a byte buffer).\n * [delimiter] the delimiter to use between bytes for 'hex' encoded\n * output, eg: ':' (defaults to none).\n *\n * @return the fingerprint as a byte buffer or other encoding based on options.\n */\npki.getPublicKeyFingerprint = function(key, options) {\n options = options || {};\n var md = options.md || forge.md.sha1.create();\n var type = options.type || 'RSAPublicKey';\n\n var bytes;\n switch(type) {\n case 'RSAPublicKey':\n bytes = asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes();\n break;\n case 'SubjectPublicKeyInfo':\n bytes = asn1.toDer(pki.publicKeyToAsn1(key)).getBytes();\n break;\n default:\n throw new Error('Unknown fingerprint type \"' + options.type + '\".');\n }\n\n // hash public key bytes\n md.start();\n md.update(bytes);\n var digest = md.digest();\n if(options.encoding === 'hex') {\n var hex = digest.toHex();\n if(options.delimiter) {\n return hex.match(/.{2}/g).join(options.delimiter);\n }\n return hex;\n } else if(options.encoding === 'binary') {\n return digest.getBytes();\n } else if(options.encoding) {\n throw new Error('Unknown encoding \"' + options.encoding + '\".');\n }\n return digest;\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) from PEM format.\n *\n * Note: If the certification request is to be verified then compute hash\n * should be set to true. This will scan the CertificationRequestInfo part of\n * the ASN.1 object while it is converted so it doesn't need to be converted\n * back to ASN.1-DER-encoding later.\n *\n * @param pem the PEM-formatted certificate.\n * @param computeHash true to compute the hash for verification.\n * @param strict true to be strict when checking ASN.1 value lengths, false to\n * allow truncated values (default: true).\n *\n * @return the certification request (CSR).\n */\npki.certificationRequestFromPem = function(pem, computeHash, strict) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'CERTIFICATE REQUEST') {\n var error = new Error('Could not convert certification request from PEM; ' +\n 'PEM header type is not \"CERTIFICATE REQUEST\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert certification request from PEM; ' +\n 'PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body, strict);\n\n return pki.certificationRequestFromAsn1(obj, computeHash);\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) to PEM format.\n *\n * @param csr the certification request.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted certification request.\n */\npki.certificationRequestToPem = function(csr, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'CERTIFICATE REQUEST',\n body: asn1.toDer(pki.certificationRequestToAsn1(csr)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Creates an empty X.509v3 RSA certificate.\n *\n * @return the certificate.\n */\npki.createCertificate = function() {\n var cert = {};\n cert.version = 0x02;\n cert.serialNumber = '00';\n cert.signatureOid = null;\n cert.signature = null;\n cert.siginfo = {};\n cert.siginfo.algorithmOid = null;\n cert.validity = {};\n cert.validity.notBefore = new Date();\n cert.validity.notAfter = new Date();\n\n cert.issuer = {};\n cert.issuer.getField = function(sn) {\n return _getAttribute(cert.issuer, sn);\n };\n cert.issuer.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.issuer.attributes.push(attr);\n };\n cert.issuer.attributes = [];\n cert.issuer.hash = null;\n\n cert.subject = {};\n cert.subject.getField = function(sn) {\n return _getAttribute(cert.subject, sn);\n };\n cert.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.subject.attributes.push(attr);\n };\n cert.subject.attributes = [];\n cert.subject.hash = null;\n\n cert.extensions = [];\n cert.publicKey = null;\n cert.md = null;\n\n /**\n * Sets the subject of this certificate.\n *\n * @param attrs the array of subject attributes to use.\n * @param uniqueId an optional a unique ID to use.\n */\n cert.setSubject = function(attrs, uniqueId) {\n // set new attributes, clear hash\n _fillMissingFields(attrs);\n cert.subject.attributes = attrs;\n delete cert.subject.uniqueId;\n if(uniqueId) {\n // TODO: support arbitrary bit length ids\n cert.subject.uniqueId = uniqueId;\n }\n cert.subject.hash = null;\n };\n\n /**\n * Sets the issuer of this certificate.\n *\n * @param attrs the array of issuer attributes to use.\n * @param uniqueId an optional a unique ID to use.\n */\n cert.setIssuer = function(attrs, uniqueId) {\n // set new attributes, clear hash\n _fillMissingFields(attrs);\n cert.issuer.attributes = attrs;\n delete cert.issuer.uniqueId;\n if(uniqueId) {\n // TODO: support arbitrary bit length ids\n cert.issuer.uniqueId = uniqueId;\n }\n cert.issuer.hash = null;\n };\n\n /**\n * Sets the extensions of this certificate.\n *\n * @param exts the array of extensions to use.\n */\n cert.setExtensions = function(exts) {\n for(var i = 0; i < exts.length; ++i) {\n _fillMissingExtensionFields(exts[i], {cert: cert});\n }\n // set new extensions\n cert.extensions = exts;\n };\n\n /**\n * Gets an extension by its name or id.\n *\n * @param options the name to use or an object with:\n * name the name to use.\n * id the id to use.\n *\n * @return the extension or null if not found.\n */\n cert.getExtension = function(options) {\n if(typeof options === 'string') {\n options = {name: options};\n }\n\n var rval = null;\n var ext;\n for(var i = 0; rval === null && i < cert.extensions.length; ++i) {\n ext = cert.extensions[i];\n if(options.id && ext.id === options.id) {\n rval = ext;\n } else if(options.name && ext.name === options.name) {\n rval = ext;\n }\n }\n return rval;\n };\n\n /**\n * Signs this certificate using the given private key.\n *\n * @param key the private key to sign with.\n * @param md the message digest object to use (defaults to forge.md.sha1).\n */\n cert.sign = function(key, md) {\n // TODO: get signature OID from private key\n cert.md = md || forge.md.sha1.create();\n var algorithmOid = oids[cert.md.algorithm + 'WithRSAEncryption'];\n if(!algorithmOid) {\n var error = new Error('Could not compute certificate digest. ' +\n 'Unknown message digest algorithm OID.');\n error.algorithm = cert.md.algorithm;\n throw error;\n }\n cert.signatureOid = cert.siginfo.algorithmOid = algorithmOid;\n\n // get TBSCertificate, convert to DER\n cert.tbsCertificate = pki.getTBSCertificate(cert);\n var bytes = asn1.toDer(cert.tbsCertificate);\n\n // digest and sign\n cert.md.update(bytes.getBytes());\n cert.signature = key.sign(cert.md);\n };\n\n /**\n * Attempts verify the signature on the passed certificate using this\n * certificate's public key.\n *\n * @param child the certificate to verify.\n *\n * @return true if verified, false if not.\n */\n cert.verify = function(child) {\n var rval = false;\n\n if(!cert.issued(child)) {\n var issuer = child.issuer;\n var subject = cert.subject;\n var error = new Error(\n 'The parent certificate did not issue the given child ' +\n 'certificate; the child certificate\\'s issuer does not match the ' +\n 'parent\\'s subject.');\n error.expectedIssuer = issuer.attributes;\n error.actualIssuer = subject.attributes;\n throw error;\n }\n\n var md = child.md;\n if(md === null) {\n // check signature OID for supported signature types\n if(child.signatureOid in oids) {\n var oid = oids[child.signatureOid];\n switch(oid) {\n case 'sha1WithRSAEncryption':\n md = forge.md.sha1.create();\n break;\n case 'md5WithRSAEncryption':\n md = forge.md.md5.create();\n break;\n case 'sha256WithRSAEncryption':\n md = forge.md.sha256.create();\n break;\n case 'sha384WithRSAEncryption':\n md = forge.md.sha384.create();\n break;\n case 'sha512WithRSAEncryption':\n md = forge.md.sha512.create();\n break;\n case 'RSASSA-PSS':\n md = forge.md.sha256.create();\n break;\n }\n }\n if(md === null) {\n var error = new Error('Could not compute certificate digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = child.signatureOid;\n throw error;\n }\n\n // produce DER formatted TBSCertificate and digest it\n var tbsCertificate = child.tbsCertificate || pki.getTBSCertificate(child);\n var bytes = asn1.toDer(tbsCertificate);\n md.update(bytes.getBytes());\n }\n\n if(md !== null) {\n var scheme;\n\n switch(child.signatureOid) {\n case oids.sha1WithRSAEncryption:\n scheme = undefined; /* use PKCS#1 v1.5 padding scheme */\n break;\n case oids['RSASSA-PSS']:\n var hash, mgf;\n\n /* initialize mgf */\n hash = oids[child.signatureParameters.mgf.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported MGF hash function.');\n error.oid = child.signatureParameters.mgf.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n mgf = oids[child.signatureParameters.mgf.algorithmOid];\n if(mgf === undefined || forge.mgf[mgf] === undefined) {\n var error = new Error('Unsupported MGF function.');\n error.oid = child.signatureParameters.mgf.algorithmOid;\n error.name = mgf;\n throw error;\n }\n\n mgf = forge.mgf[mgf].create(forge.md[hash].create());\n\n /* initialize hash function */\n hash = oids[child.signatureParameters.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n throw {\n message: 'Unsupported RSASSA-PSS hash function.',\n oid: child.signatureParameters.hash.algorithmOid,\n name: hash\n };\n }\n\n scheme = forge.pss.create(forge.md[hash].create(), mgf,\n child.signatureParameters.saltLength);\n break;\n }\n\n // verify signature on cert using public key\n rval = cert.publicKey.verify(\n md.digest().getBytes(), child.signature, scheme);\n }\n\n return rval;\n };\n\n /**\n * Returns true if this certificate's issuer matches the passed\n * certificate's subject. Note that no signature check is performed.\n *\n * @param parent the certificate to check.\n *\n * @return true if this certificate's issuer matches the passed certificate's\n * subject.\n */\n cert.isIssuer = function(parent) {\n var rval = false;\n\n var i = cert.issuer;\n var s = parent.subject;\n\n // compare hashes if present\n if(i.hash && s.hash) {\n rval = (i.hash === s.hash);\n } else if(i.attributes.length === s.attributes.length) {\n // all attributes are the same so issuer matches subject\n rval = true;\n var iattr, sattr;\n for(var n = 0; rval && n < i.attributes.length; ++n) {\n iattr = i.attributes[n];\n sattr = s.attributes[n];\n if(iattr.type !== sattr.type || iattr.value !== sattr.value) {\n // attribute mismatch\n rval = false;\n }\n }\n }\n\n return rval;\n };\n\n /**\n * Returns true if this certificate's subject matches the issuer of the\n * given certificate). Note that not signature check is performed.\n *\n * @param child the certificate to check.\n *\n * @return true if this certificate's subject matches the passed\n * certificate's issuer.\n */\n cert.issued = function(child) {\n return child.isIssuer(cert);\n };\n\n /**\n * Generates the subjectKeyIdentifier for this certificate as byte buffer.\n *\n * @return the subjectKeyIdentifier for this certificate as byte buffer.\n */\n cert.generateSubjectKeyIdentifier = function() {\n /* See: 4.2.1.2 section of the the RFC3280, keyIdentifier is either:\n\n (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the\n value of the BIT STRING subjectPublicKey (excluding the tag,\n length, and number of unused bits).\n\n (2) The keyIdentifier is composed of a four bit type field with\n the value 0100 followed by the least significant 60 bits of the\n SHA-1 hash of the value of the BIT STRING subjectPublicKey\n (excluding the tag, length, and number of unused bit string bits).\n */\n\n // skipping the tag, length, and number of unused bits is the same\n // as just using the RSAPublicKey (for RSA keys, which are the\n // only ones supported)\n return pki.getPublicKeyFingerprint(cert.publicKey, {type: 'RSAPublicKey'});\n };\n\n /**\n * Verifies the subjectKeyIdentifier extension value for this certificate\n * against its public key. If no extension is found, false will be\n * returned.\n *\n * @return true if verified, false if not.\n */\n cert.verifySubjectKeyIdentifier = function() {\n var oid = oids['subjectKeyIdentifier'];\n for(var i = 0; i < cert.extensions.length; ++i) {\n var ext = cert.extensions[i];\n if(ext.id === oid) {\n var ski = cert.generateSubjectKeyIdentifier().getBytes();\n return (forge.util.hexToBytes(ext.subjectKeyIdentifier) === ski);\n }\n }\n return false;\n };\n\n return cert;\n};\n\n/**\n * Converts an X.509v3 RSA certificate from an ASN.1 object.\n *\n * Note: If the certificate is to be verified then compute hash should\n * be set to true. There is currently no implementation for converting\n * a certificate back to ASN.1 so the TBSCertificate part of the ASN.1\n * object needs to be scanned before the cert object is created.\n *\n * @param obj the asn1 representation of an X.509v3 RSA certificate.\n * @param computeHash true to compute the hash for verification.\n *\n * @return the certificate.\n */\npki.certificateFromAsn1 = function(obj, computeHash) {\n // validate certificate and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, x509CertificateValidator, capture, errors)) {\n var error = new Error('Cannot read X.509 certificate. ' +\n 'ASN.1 object is not an X509v3 Certificate.');\n error.errors = errors;\n throw error;\n }\n\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n throw new Error('Cannot read public key. OID is not RSA.');\n }\n\n // create certificate\n var cert = pki.createCertificate();\n cert.version = capture.certVersion ?\n capture.certVersion.charCodeAt(0) : 0;\n var serial = forge.util.createBuffer(capture.certSerialNumber);\n cert.serialNumber = serial.toHex();\n cert.signatureOid = forge.asn1.derToOid(capture.certSignatureOid);\n cert.signatureParameters = _readSignatureParameters(\n cert.signatureOid, capture.certSignatureParams, true);\n cert.siginfo.algorithmOid = forge.asn1.derToOid(capture.certinfoSignatureOid);\n cert.siginfo.parameters = _readSignatureParameters(cert.siginfo.algorithmOid,\n capture.certinfoSignatureParams, false);\n cert.signature = capture.certSignature;\n\n var validity = [];\n if(capture.certValidity1UTCTime !== undefined) {\n validity.push(asn1.utcTimeToDate(capture.certValidity1UTCTime));\n }\n if(capture.certValidity2GeneralizedTime !== undefined) {\n validity.push(asn1.generalizedTimeToDate(\n capture.certValidity2GeneralizedTime));\n }\n if(capture.certValidity3UTCTime !== undefined) {\n validity.push(asn1.utcTimeToDate(capture.certValidity3UTCTime));\n }\n if(capture.certValidity4GeneralizedTime !== undefined) {\n validity.push(asn1.generalizedTimeToDate(\n capture.certValidity4GeneralizedTime));\n }\n if(validity.length > 2) {\n throw new Error('Cannot read notBefore/notAfter validity times; more ' +\n 'than two times were provided in the certificate.');\n }\n if(validity.length < 2) {\n throw new Error('Cannot read notBefore/notAfter validity times; they ' +\n 'were not provided as either UTCTime or GeneralizedTime.');\n }\n cert.validity.notBefore = validity[0];\n cert.validity.notAfter = validity[1];\n\n // keep TBSCertificate to preserve signature when exporting\n cert.tbsCertificate = capture.tbsCertificate;\n\n if(computeHash) {\n // check signature OID for supported signature types\n cert.md = null;\n if(cert.signatureOid in oids) {\n var oid = oids[cert.signatureOid];\n switch(oid) {\n case 'sha1WithRSAEncryption':\n cert.md = forge.md.sha1.create();\n break;\n case 'md5WithRSAEncryption':\n cert.md = forge.md.md5.create();\n break;\n case 'sha256WithRSAEncryption':\n cert.md = forge.md.sha256.create();\n break;\n case 'sha384WithRSAEncryption':\n cert.md = forge.md.sha384.create();\n break;\n case 'sha512WithRSAEncryption':\n cert.md = forge.md.sha512.create();\n break;\n case 'RSASSA-PSS':\n cert.md = forge.md.sha256.create();\n break;\n }\n }\n if(cert.md === null) {\n var error = new Error('Could not compute certificate digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = cert.signatureOid;\n throw error;\n }\n\n // produce DER formatted TBSCertificate and digest it\n var bytes = asn1.toDer(cert.tbsCertificate);\n cert.md.update(bytes.getBytes());\n }\n\n // handle issuer, build issuer message digest\n var imd = forge.md.sha1.create();\n cert.issuer.getField = function(sn) {\n return _getAttribute(cert.issuer, sn);\n };\n cert.issuer.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.issuer.attributes.push(attr);\n };\n cert.issuer.attributes = pki.RDNAttributesAsArray(capture.certIssuer, imd);\n if(capture.certIssuerUniqueId) {\n cert.issuer.uniqueId = capture.certIssuerUniqueId;\n }\n cert.issuer.hash = imd.digest().toHex();\n\n // handle subject, build subject message digest\n var smd = forge.md.sha1.create();\n cert.subject.getField = function(sn) {\n return _getAttribute(cert.subject, sn);\n };\n cert.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.subject.attributes.push(attr);\n };\n cert.subject.attributes = pki.RDNAttributesAsArray(capture.certSubject, smd);\n if(capture.certSubjectUniqueId) {\n cert.subject.uniqueId = capture.certSubjectUniqueId;\n }\n cert.subject.hash = smd.digest().toHex();\n\n // handle extensions\n if(capture.certExtensions) {\n cert.extensions = pki.certificateExtensionsFromAsn1(capture.certExtensions);\n } else {\n cert.extensions = [];\n }\n\n // convert RSA public key from ASN.1\n cert.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo);\n\n return cert;\n};\n\n/**\n * Converts an ASN.1 extensions object (with extension sequences as its\n * values) into an array of extension objects with types and values.\n *\n * Supported extensions:\n *\n * id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }\n * KeyUsage ::= BIT STRING {\n * digitalSignature (0),\n * nonRepudiation (1),\n * keyEncipherment (2),\n * dataEncipherment (3),\n * keyAgreement (4),\n * keyCertSign (5),\n * cRLSign (6),\n * encipherOnly (7),\n * decipherOnly (8)\n * }\n *\n * id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }\n * BasicConstraints ::= SEQUENCE {\n * cA BOOLEAN DEFAULT FALSE,\n * pathLenConstraint INTEGER (0..MAX) OPTIONAL\n * }\n *\n * subjectAltName EXTENSION ::= {\n * SYNTAX GeneralNames\n * IDENTIFIED BY id-ce-subjectAltName\n * }\n *\n * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName\n *\n * GeneralName ::= CHOICE {\n * otherName [0] INSTANCE OF OTHER-NAME,\n * rfc822Name [1] IA5String,\n * dNSName [2] IA5String,\n * x400Address [3] ORAddress,\n * directoryName [4] Name,\n * ediPartyName [5] EDIPartyName,\n * uniformResourceIdentifier [6] IA5String,\n * IPAddress [7] OCTET STRING,\n * registeredID [8] OBJECT IDENTIFIER\n * }\n *\n * OTHER-NAME ::= TYPE-IDENTIFIER\n *\n * EDIPartyName ::= SEQUENCE {\n * nameAssigner [0] DirectoryString {ub-name} OPTIONAL,\n * partyName [1] DirectoryString {ub-name}\n * }\n *\n * @param exts the extensions ASN.1 with extension sequences to parse.\n *\n * @return the array.\n */\npki.certificateExtensionsFromAsn1 = function(exts) {\n var rval = [];\n for(var i = 0; i < exts.value.length; ++i) {\n // get extension sequence\n var extseq = exts.value[i];\n for(var ei = 0; ei < extseq.value.length; ++ei) {\n rval.push(pki.certificateExtensionFromAsn1(extseq.value[ei]));\n }\n }\n\n return rval;\n};\n\n/**\n * Parses a single certificate extension from ASN.1.\n *\n * @param ext the extension in ASN.1 format.\n *\n * @return the parsed extension as an object.\n */\npki.certificateExtensionFromAsn1 = function(ext) {\n // an extension has:\n // [0] extnID OBJECT IDENTIFIER\n // [1] critical BOOLEAN DEFAULT FALSE\n // [2] extnValue OCTET STRING\n var e = {};\n e.id = asn1.derToOid(ext.value[0].value);\n e.critical = false;\n if(ext.value[1].type === asn1.Type.BOOLEAN) {\n e.critical = (ext.value[1].value.charCodeAt(0) !== 0x00);\n e.value = ext.value[2].value;\n } else {\n e.value = ext.value[1].value;\n }\n // if the oid is known, get its name\n if(e.id in oids) {\n e.name = oids[e.id];\n\n // handle key usage\n if(e.name === 'keyUsage') {\n // get value as BIT STRING\n var ev = asn1.fromDer(e.value);\n var b2 = 0x00;\n var b3 = 0x00;\n if(ev.value.length > 1) {\n // skip first byte, just indicates unused bits which\n // will be padded with 0s anyway\n // get bytes with flag bits\n b2 = ev.value.charCodeAt(1);\n b3 = ev.value.length > 2 ? ev.value.charCodeAt(2) : 0;\n }\n // set flags\n e.digitalSignature = (b2 & 0x80) === 0x80;\n e.nonRepudiation = (b2 & 0x40) === 0x40;\n e.keyEncipherment = (b2 & 0x20) === 0x20;\n e.dataEncipherment = (b2 & 0x10) === 0x10;\n e.keyAgreement = (b2 & 0x08) === 0x08;\n e.keyCertSign = (b2 & 0x04) === 0x04;\n e.cRLSign = (b2 & 0x02) === 0x02;\n e.encipherOnly = (b2 & 0x01) === 0x01;\n e.decipherOnly = (b3 & 0x80) === 0x80;\n } else if(e.name === 'basicConstraints') {\n // handle basic constraints\n // get value as SEQUENCE\n var ev = asn1.fromDer(e.value);\n // get cA BOOLEAN flag (defaults to false)\n if(ev.value.length > 0 && ev.value[0].type === asn1.Type.BOOLEAN) {\n e.cA = (ev.value[0].value.charCodeAt(0) !== 0x00);\n } else {\n e.cA = false;\n }\n // get path length constraint\n var value = null;\n if(ev.value.length > 0 && ev.value[0].type === asn1.Type.INTEGER) {\n value = ev.value[0].value;\n } else if(ev.value.length > 1) {\n value = ev.value[1].value;\n }\n if(value !== null) {\n e.pathLenConstraint = asn1.derToInteger(value);\n }\n } else if(e.name === 'extKeyUsage') {\n // handle extKeyUsage\n // value is a SEQUENCE of OIDs\n var ev = asn1.fromDer(e.value);\n for(var vi = 0; vi < ev.value.length; ++vi) {\n var oid = asn1.derToOid(ev.value[vi].value);\n if(oid in oids) {\n e[oids[oid]] = true;\n } else {\n e[oid] = true;\n }\n }\n } else if(e.name === 'nsCertType') {\n // handle nsCertType\n // get value as BIT STRING\n var ev = asn1.fromDer(e.value);\n var b2 = 0x00;\n if(ev.value.length > 1) {\n // skip first byte, just indicates unused bits which\n // will be padded with 0s anyway\n // get bytes with flag bits\n b2 = ev.value.charCodeAt(1);\n }\n // set flags\n e.client = (b2 & 0x80) === 0x80;\n e.server = (b2 & 0x40) === 0x40;\n e.email = (b2 & 0x20) === 0x20;\n e.objsign = (b2 & 0x10) === 0x10;\n e.reserved = (b2 & 0x08) === 0x08;\n e.sslCA = (b2 & 0x04) === 0x04;\n e.emailCA = (b2 & 0x02) === 0x02;\n e.objCA = (b2 & 0x01) === 0x01;\n } else if(\n e.name === 'subjectAltName' ||\n e.name === 'issuerAltName') {\n // handle subjectAltName/issuerAltName\n e.altNames = [];\n\n // ev is a SYNTAX SEQUENCE\n var gn;\n var ev = asn1.fromDer(e.value);\n for(var n = 0; n < ev.value.length; ++n) {\n // get GeneralName\n gn = ev.value[n];\n\n var altName = {\n type: gn.type,\n value: gn.value\n };\n e.altNames.push(altName);\n\n // Note: Support for types 1,2,6,7,8\n switch(gn.type) {\n // rfc822Name\n case 1:\n // dNSName\n case 2:\n // uniformResourceIdentifier (URI)\n case 6:\n break;\n // IPAddress\n case 7:\n // convert to IPv4/IPv6 string representation\n altName.ip = forge.util.bytesToIP(gn.value);\n break;\n // registeredID\n case 8:\n altName.oid = asn1.derToOid(gn.value);\n break;\n default:\n // unsupported\n }\n }\n } else if(e.name === 'subjectKeyIdentifier') {\n // value is an OCTETSTRING w/the hash of the key-type specific\n // public key structure (eg: RSAPublicKey)\n var ev = asn1.fromDer(e.value);\n e.subjectKeyIdentifier = forge.util.bytesToHex(ev.value);\n }\n }\n return e;\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) from an ASN.1 object.\n *\n * Note: If the certification request is to be verified then compute hash\n * should be set to true. There is currently no implementation for converting\n * a certificate back to ASN.1 so the CertificationRequestInfo part of the\n * ASN.1 object needs to be scanned before the csr object is created.\n *\n * @param obj the asn1 representation of a PKCS#10 certification request (CSR).\n * @param computeHash true to compute the hash for verification.\n *\n * @return the certification request (CSR).\n */\npki.certificationRequestFromAsn1 = function(obj, computeHash) {\n // validate certification request and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, certificationRequestValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#10 certificate request. ' +\n 'ASN.1 object is not a PKCS#10 CertificationRequest.');\n error.errors = errors;\n throw error;\n }\n\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n throw new Error('Cannot read public key. OID is not RSA.');\n }\n\n // create certification request\n var csr = pki.createCertificationRequest();\n csr.version = capture.csrVersion ? capture.csrVersion.charCodeAt(0) : 0;\n csr.signatureOid = forge.asn1.derToOid(capture.csrSignatureOid);\n csr.signatureParameters = _readSignatureParameters(\n csr.signatureOid, capture.csrSignatureParams, true);\n csr.siginfo.algorithmOid = forge.asn1.derToOid(capture.csrSignatureOid);\n csr.siginfo.parameters = _readSignatureParameters(\n csr.siginfo.algorithmOid, capture.csrSignatureParams, false);\n csr.signature = capture.csrSignature;\n\n // keep CertificationRequestInfo to preserve signature when exporting\n csr.certificationRequestInfo = capture.certificationRequestInfo;\n\n if(computeHash) {\n // check signature OID for supported signature types\n csr.md = null;\n if(csr.signatureOid in oids) {\n var oid = oids[csr.signatureOid];\n switch(oid) {\n case 'sha1WithRSAEncryption':\n csr.md = forge.md.sha1.create();\n break;\n case 'md5WithRSAEncryption':\n csr.md = forge.md.md5.create();\n break;\n case 'sha256WithRSAEncryption':\n csr.md = forge.md.sha256.create();\n break;\n case 'sha384WithRSAEncryption':\n csr.md = forge.md.sha384.create();\n break;\n case 'sha512WithRSAEncryption':\n csr.md = forge.md.sha512.create();\n break;\n case 'RSASSA-PSS':\n csr.md = forge.md.sha256.create();\n break;\n }\n }\n if(csr.md === null) {\n var error = new Error('Could not compute certification request digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = csr.signatureOid;\n throw error;\n }\n\n // produce DER formatted CertificationRequestInfo and digest it\n var bytes = asn1.toDer(csr.certificationRequestInfo);\n csr.md.update(bytes.getBytes());\n }\n\n // handle subject, build subject message digest\n var smd = forge.md.sha1.create();\n csr.subject.getField = function(sn) {\n return _getAttribute(csr.subject, sn);\n };\n csr.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n csr.subject.attributes.push(attr);\n };\n csr.subject.attributes = pki.RDNAttributesAsArray(\n capture.certificationRequestInfoSubject, smd);\n csr.subject.hash = smd.digest().toHex();\n\n // convert RSA public key from ASN.1\n csr.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo);\n\n // convert attributes from ASN.1\n csr.getAttribute = function(sn) {\n return _getAttribute(csr, sn);\n };\n csr.addAttribute = function(attr) {\n _fillMissingFields([attr]);\n csr.attributes.push(attr);\n };\n csr.attributes = pki.CRIAttributesAsArray(\n capture.certificationRequestInfoAttributes || []);\n\n return csr;\n};\n\n/**\n * Creates an empty certification request (a CSR or certificate signing\n * request). Once created, its public key and attributes can be set and then\n * it can be signed.\n *\n * @return the empty certification request.\n */\npki.createCertificationRequest = function() {\n var csr = {};\n csr.version = 0x00;\n csr.signatureOid = null;\n csr.signature = null;\n csr.siginfo = {};\n csr.siginfo.algorithmOid = null;\n\n csr.subject = {};\n csr.subject.getField = function(sn) {\n return _getAttribute(csr.subject, sn);\n };\n csr.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n csr.subject.attributes.push(attr);\n };\n csr.subject.attributes = [];\n csr.subject.hash = null;\n\n csr.publicKey = null;\n csr.attributes = [];\n csr.getAttribute = function(sn) {\n return _getAttribute(csr, sn);\n };\n csr.addAttribute = function(attr) {\n _fillMissingFields([attr]);\n csr.attributes.push(attr);\n };\n csr.md = null;\n\n /**\n * Sets the subject of this certification request.\n *\n * @param attrs the array of subject attributes to use.\n */\n csr.setSubject = function(attrs) {\n // set new attributes\n _fillMissingFields(attrs);\n csr.subject.attributes = attrs;\n csr.subject.hash = null;\n };\n\n /**\n * Sets the attributes of this certification request.\n *\n * @param attrs the array of attributes to use.\n */\n csr.setAttributes = function(attrs) {\n // set new attributes\n _fillMissingFields(attrs);\n csr.attributes = attrs;\n };\n\n /**\n * Signs this certification request using the given private key.\n *\n * @param key the private key to sign with.\n * @param md the message digest object to use (defaults to forge.md.sha1).\n */\n csr.sign = function(key, md) {\n // TODO: get signature OID from private key\n csr.md = md || forge.md.sha1.create();\n var algorithmOid = oids[csr.md.algorithm + 'WithRSAEncryption'];\n if(!algorithmOid) {\n var error = new Error('Could not compute certification request digest. ' +\n 'Unknown message digest algorithm OID.');\n error.algorithm = csr.md.algorithm;\n throw error;\n }\n csr.signatureOid = csr.siginfo.algorithmOid = algorithmOid;\n\n // get CertificationRequestInfo, convert to DER\n csr.certificationRequestInfo = pki.getCertificationRequestInfo(csr);\n var bytes = asn1.toDer(csr.certificationRequestInfo);\n\n // digest and sign\n csr.md.update(bytes.getBytes());\n csr.signature = key.sign(csr.md);\n };\n\n /**\n * Attempts verify the signature on the passed certification request using\n * its public key.\n *\n * A CSR that has been exported to a file in PEM format can be verified using\n * OpenSSL using this command:\n *\n * openssl req -in <the-csr-pem-file> -verify -noout -text\n *\n * @return true if verified, false if not.\n */\n csr.verify = function() {\n var rval = false;\n\n var md = csr.md;\n if(md === null) {\n // check signature OID for supported signature types\n if(csr.signatureOid in oids) {\n // TODO: create DRY `OID to md` function\n var oid = oids[csr.signatureOid];\n switch(oid) {\n case 'sha1WithRSAEncryption':\n md = forge.md.sha1.create();\n break;\n case 'md5WithRSAEncryption':\n md = forge.md.md5.create();\n break;\n case 'sha256WithRSAEncryption':\n md = forge.md.sha256.create();\n break;\n case 'sha384WithRSAEncryption':\n md = forge.md.sha384.create();\n break;\n case 'sha512WithRSAEncryption':\n md = forge.md.sha512.create();\n break;\n case 'RSASSA-PSS':\n md = forge.md.sha256.create();\n break;\n }\n }\n if(md === null) {\n var error = new Error(\n 'Could not compute certification request digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = csr.signatureOid;\n throw error;\n }\n\n // produce DER formatted CertificationRequestInfo and digest it\n var cri = csr.certificationRequestInfo ||\n pki.getCertificationRequestInfo(csr);\n var bytes = asn1.toDer(cri);\n md.update(bytes.getBytes());\n }\n\n if(md !== null) {\n var scheme;\n\n switch(csr.signatureOid) {\n case oids.sha1WithRSAEncryption:\n /* use PKCS#1 v1.5 padding scheme */\n break;\n case oids['RSASSA-PSS']:\n var hash, mgf;\n\n /* initialize mgf */\n hash = oids[csr.signatureParameters.mgf.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported MGF hash function.');\n error.oid = csr.signatureParameters.mgf.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n mgf = oids[csr.signatureParameters.mgf.algorithmOid];\n if(mgf === undefined || forge.mgf[mgf] === undefined) {\n var error = new Error('Unsupported MGF function.');\n error.oid = csr.signatureParameters.mgf.algorithmOid;\n error.name = mgf;\n throw error;\n }\n\n mgf = forge.mgf[mgf].create(forge.md[hash].create());\n\n /* initialize hash function */\n hash = oids[csr.signatureParameters.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported RSASSA-PSS hash function.');\n error.oid = csr.signatureParameters.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n scheme = forge.pss.create(forge.md[hash].create(), mgf,\n csr.signatureParameters.saltLength);\n break;\n }\n\n // verify signature on csr using its public key\n rval = csr.publicKey.verify(\n md.digest().getBytes(), csr.signature, scheme);\n }\n\n return rval;\n };\n\n return csr;\n};\n\n/**\n * Converts an X.509 subject or issuer to an ASN.1 RDNSequence.\n *\n * @param obj the subject or issuer (distinguished name).\n *\n * @return the ASN.1 RDNSequence.\n */\nfunction _dnToAsn1(obj) {\n // create an empty RDNSequence\n var rval = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // iterate over attributes\n var attr, set;\n var attrs = obj.attributes;\n for(var i = 0; i < attrs.length; ++i) {\n attr = attrs[i];\n var value = attr.value;\n\n // reuse tag class for attribute value if available\n var valueTagClass = asn1.Type.PRINTABLESTRING;\n if('valueTagClass' in attr) {\n valueTagClass = attr.valueTagClass;\n\n if(valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(value);\n }\n // FIXME: handle more encodings\n }\n\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n set = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n // AttributeValue\n asn1.create(asn1.Class.UNIVERSAL, valueTagClass, false, value)\n ])\n ]);\n rval.value.push(set);\n }\n\n return rval;\n}\n\n/**\n * Gets all printable attributes (typically of an issuer or subject) in a\n * simplified JSON format for display.\n *\n * @param attrs the attributes.\n *\n * @return the JSON for display.\n */\nfunction _getAttributesAsJson(attrs) {\n var rval = {};\n for(var i = 0; i < attrs.length; ++i) {\n var attr = attrs[i];\n if(attr.shortName && (\n attr.valueTagClass === asn1.Type.UTF8 ||\n attr.valueTagClass === asn1.Type.PRINTABLESTRING ||\n attr.valueTagClass === asn1.Type.IA5STRING)) {\n var value = attr.value;\n if(attr.valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(attr.value);\n }\n if(!(attr.shortName in rval)) {\n rval[attr.shortName] = value;\n } else if(forge.util.isArray(rval[attr.shortName])) {\n rval[attr.shortName].push(value);\n } else {\n rval[attr.shortName] = [rval[attr.shortName], value];\n }\n }\n }\n return rval;\n}\n\n/**\n * Fills in missing fields in attributes.\n *\n * @param attrs the attributes to fill missing fields in.\n */\nfunction _fillMissingFields(attrs) {\n var attr;\n for(var i = 0; i < attrs.length; ++i) {\n attr = attrs[i];\n\n // populate missing name\n if(typeof attr.name === 'undefined') {\n if(attr.type && attr.type in pki.oids) {\n attr.name = pki.oids[attr.type];\n } else if(attr.shortName && attr.shortName in _shortNames) {\n attr.name = pki.oids[_shortNames[attr.shortName]];\n }\n }\n\n // populate missing type (OID)\n if(typeof attr.type === 'undefined') {\n if(attr.name && attr.name in pki.oids) {\n attr.type = pki.oids[attr.name];\n } else {\n var error = new Error('Attribute type not specified.');\n error.attribute = attr;\n throw error;\n }\n }\n\n // populate missing shortname\n if(typeof attr.shortName === 'undefined') {\n if(attr.name && attr.name in _shortNames) {\n attr.shortName = _shortNames[attr.name];\n }\n }\n\n // convert extensions to value\n if(attr.type === oids.extensionRequest) {\n attr.valueConstructed = true;\n attr.valueTagClass = asn1.Type.SEQUENCE;\n if(!attr.value && attr.extensions) {\n attr.value = [];\n for(var ei = 0; ei < attr.extensions.length; ++ei) {\n attr.value.push(pki.certificateExtensionToAsn1(\n _fillMissingExtensionFields(attr.extensions[ei])));\n }\n }\n }\n\n if(typeof attr.value === 'undefined') {\n var error = new Error('Attribute value not specified.');\n error.attribute = attr;\n throw error;\n }\n }\n}\n\n/**\n * Fills in missing fields in certificate extensions.\n *\n * @param e the extension.\n * @param [options] the options to use.\n * [cert] the certificate the extensions are for.\n *\n * @return the extension.\n */\nfunction _fillMissingExtensionFields(e, options) {\n options = options || {};\n\n // populate missing name\n if(typeof e.name === 'undefined') {\n if(e.id && e.id in pki.oids) {\n e.name = pki.oids[e.id];\n }\n }\n\n // populate missing id\n if(typeof e.id === 'undefined') {\n if(e.name && e.name in pki.oids) {\n e.id = pki.oids[e.name];\n } else {\n var error = new Error('Extension ID not specified.');\n error.extension = e;\n throw error;\n }\n }\n\n if(typeof e.value !== 'undefined') {\n return e;\n }\n\n // handle missing value:\n\n // value is a BIT STRING\n if(e.name === 'keyUsage') {\n // build flags\n var unused = 0;\n var b2 = 0x00;\n var b3 = 0x00;\n if(e.digitalSignature) {\n b2 |= 0x80;\n unused = 7;\n }\n if(e.nonRepudiation) {\n b2 |= 0x40;\n unused = 6;\n }\n if(e.keyEncipherment) {\n b2 |= 0x20;\n unused = 5;\n }\n if(e.dataEncipherment) {\n b2 |= 0x10;\n unused = 4;\n }\n if(e.keyAgreement) {\n b2 |= 0x08;\n unused = 3;\n }\n if(e.keyCertSign) {\n b2 |= 0x04;\n unused = 2;\n }\n if(e.cRLSign) {\n b2 |= 0x02;\n unused = 1;\n }\n if(e.encipherOnly) {\n b2 |= 0x01;\n unused = 0;\n }\n if(e.decipherOnly) {\n b3 |= 0x80;\n unused = 7;\n }\n\n // create bit string\n var value = String.fromCharCode(unused);\n if(b3 !== 0) {\n value += String.fromCharCode(b2) + String.fromCharCode(b3);\n } else if(b2 !== 0) {\n value += String.fromCharCode(b2);\n }\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value);\n } else if(e.name === 'basicConstraints') {\n // basicConstraints is a SEQUENCE\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n // cA BOOLEAN flag defaults to false\n if(e.cA) {\n e.value.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false,\n String.fromCharCode(0xFF)));\n }\n if('pathLenConstraint' in e) {\n e.value.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(e.pathLenConstraint).getBytes()));\n }\n } else if(e.name === 'extKeyUsage') {\n // extKeyUsage is a SEQUENCE of OIDs\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n for(var key in e) {\n if(e[key] !== true) {\n continue;\n }\n // key is name in OID map\n if(key in oids) {\n seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID,\n false, asn1.oidToDer(oids[key]).getBytes()));\n } else if(key.indexOf('.') !== -1) {\n // assume key is an OID\n seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID,\n false, asn1.oidToDer(key).getBytes()));\n }\n }\n } else if(e.name === 'nsCertType') {\n // nsCertType is a BIT STRING\n // build flags\n var unused = 0;\n var b2 = 0x00;\n\n if(e.client) {\n b2 |= 0x80;\n unused = 7;\n }\n if(e.server) {\n b2 |= 0x40;\n unused = 6;\n }\n if(e.email) {\n b2 |= 0x20;\n unused = 5;\n }\n if(e.objsign) {\n b2 |= 0x10;\n unused = 4;\n }\n if(e.reserved) {\n b2 |= 0x08;\n unused = 3;\n }\n if(e.sslCA) {\n b2 |= 0x04;\n unused = 2;\n }\n if(e.emailCA) {\n b2 |= 0x02;\n unused = 1;\n }\n if(e.objCA) {\n b2 |= 0x01;\n unused = 0;\n }\n\n // create bit string\n var value = String.fromCharCode(unused);\n if(b2 !== 0) {\n value += String.fromCharCode(b2);\n }\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value);\n } else if(e.name === 'subjectAltName' || e.name === 'issuerAltName') {\n // SYNTAX SEQUENCE\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n var altName;\n for(var n = 0; n < e.altNames.length; ++n) {\n altName = e.altNames[n];\n var value = altName.value;\n // handle IP\n if(altName.type === 7 && altName.ip) {\n value = forge.util.bytesFromIP(altName.ip);\n if(value === null) {\n var error = new Error(\n 'Extension \"ip\" value is not a valid IPv4 or IPv6 address.');\n error.extension = e;\n throw error;\n }\n } else if(altName.type === 8) {\n // handle OID\n if(altName.oid) {\n value = asn1.oidToDer(asn1.oidToDer(altName.oid));\n } else {\n // deprecated ... convert value to OID\n value = asn1.oidToDer(value);\n }\n }\n e.value.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, altName.type, false,\n value));\n }\n } else if(e.name === 'nsComment' && options.cert) {\n // sanity check value is ASCII (req'd) and not too big\n if(!(/^[\\x00-\\x7F]*$/.test(e.comment)) ||\n (e.comment.length < 1) || (e.comment.length > 128)) {\n throw new Error('Invalid \"nsComment\" content.');\n }\n // IA5STRING opaque comment\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.IA5STRING, false, e.comment);\n } else if(e.name === 'subjectKeyIdentifier' && options.cert) {\n var ski = options.cert.generateSubjectKeyIdentifier();\n e.subjectKeyIdentifier = ski.toHex();\n // OCTETSTRING w/digest\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, ski.getBytes());\n } else if(e.name === 'authorityKeyIdentifier' && options.cert) {\n // SYNTAX SEQUENCE\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n\n if(e.keyIdentifier) {\n var keyIdentifier = (e.keyIdentifier === true ?\n options.cert.generateSubjectKeyIdentifier().getBytes() :\n e.keyIdentifier);\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, false, keyIdentifier));\n }\n\n if(e.authorityCertIssuer) {\n var authorityCertIssuer = [\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 4, true, [\n _dnToAsn1(e.authorityCertIssuer === true ?\n options.cert.issuer : e.authorityCertIssuer)\n ])\n ];\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, authorityCertIssuer));\n }\n\n if(e.serialNumber) {\n var serialNumber = forge.util.hexToBytes(e.serialNumber === true ?\n options.cert.serialNumber : e.serialNumber);\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, false, serialNumber));\n }\n } else if(e.name === 'cRLDistributionPoints') {\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n\n // Create sub SEQUENCE of DistributionPointName\n var subSeq = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // Create fullName CHOICE\n var fullNameGeneralNames = asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n var altName;\n for(var n = 0; n < e.altNames.length; ++n) {\n altName = e.altNames[n];\n var value = altName.value;\n // handle IP\n if(altName.type === 7 && altName.ip) {\n value = forge.util.bytesFromIP(altName.ip);\n if(value === null) {\n var error = new Error(\n 'Extension \"ip\" value is not a valid IPv4 or IPv6 address.');\n error.extension = e;\n throw error;\n }\n } else if(altName.type === 8) {\n // handle OID\n if(altName.oid) {\n value = asn1.oidToDer(asn1.oidToDer(altName.oid));\n } else {\n // deprecated ... convert value to OID\n value = asn1.oidToDer(value);\n }\n }\n fullNameGeneralNames.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, altName.type, false,\n value));\n }\n\n // Add to the parent SEQUENCE\n subSeq.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, [fullNameGeneralNames]));\n seq.push(subSeq);\n }\n\n // ensure value has been defined by now\n if(typeof e.value === 'undefined') {\n var error = new Error('Extension value not specified.');\n error.extension = e;\n throw error;\n }\n\n return e;\n}\n\n/**\n * Convert signature parameters object to ASN.1\n *\n * @param {String} oid Signature algorithm OID\n * @param params The signature parametrs object\n * @return ASN.1 object representing signature parameters\n */\nfunction _signatureParametersToAsn1(oid, params) {\n switch(oid) {\n case oids['RSASSA-PSS']:\n var parts = [];\n\n if(params.hash.algorithmOid !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.hash.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ]));\n }\n\n if(params.mgf.algorithmOid !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.mgf.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.mgf.hash.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ])\n ]));\n }\n\n if(params.saltLength !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(params.saltLength).getBytes())\n ]));\n }\n\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, parts);\n\n default:\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '');\n }\n}\n\n/**\n * Converts a certification request's attributes to an ASN.1 set of\n * CRIAttributes.\n *\n * @param csr certification request.\n *\n * @return the ASN.1 set of CRIAttributes.\n */\nfunction _CRIAttributesToAsn1(csr) {\n // create an empty context-specific container\n var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n\n // no attributes, return empty container\n if(csr.attributes.length === 0) {\n return rval;\n }\n\n // each attribute has a sequence with a type and a set of values\n var attrs = csr.attributes;\n for(var i = 0; i < attrs.length; ++i) {\n var attr = attrs[i];\n var value = attr.value;\n\n // reuse tag class for attribute value if available\n var valueTagClass = asn1.Type.UTF8;\n if('valueTagClass' in attr) {\n valueTagClass = attr.valueTagClass;\n }\n if(valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(value);\n }\n var valueConstructed = false;\n if('valueConstructed' in attr) {\n valueConstructed = attr.valueConstructed;\n }\n // FIXME: handle more encodings\n\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n // AttributeValue\n asn1.create(\n asn1.Class.UNIVERSAL, valueTagClass, valueConstructed, value)\n ])\n ]);\n rval.value.push(seq);\n }\n\n return rval;\n}\n\nvar jan_1_1950 = new Date('1950-01-01T00:00:00Z');\nvar jan_1_2050 = new Date('2050-01-01T00:00:00Z');\n\n/**\n * Converts a Date object to ASN.1\n * Handles the different format before and after 1st January 2050\n *\n * @param date date object.\n *\n * @return the ASN.1 object representing the date.\n */\nfunction _dateToAsn1(date) {\n if(date >= jan_1_1950 && date < jan_1_2050) {\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false,\n asn1.dateToUtcTime(date));\n } else {\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false,\n asn1.dateToGeneralizedTime(date));\n }\n}\n\n/**\n * Gets the ASN.1 TBSCertificate part of an X.509v3 certificate.\n *\n * @param cert the certificate.\n *\n * @return the asn1 TBSCertificate.\n */\npki.getTBSCertificate = function(cert) {\n // TBSCertificate\n var notBefore = _dateToAsn1(cert.validity.notBefore);\n var notAfter = _dateToAsn1(cert.validity.notAfter);\n var tbs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // integer\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(cert.version).getBytes())\n ]),\n // serialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(cert.serialNumber)),\n // signature\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(cert.siginfo.algorithmOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(\n cert.siginfo.algorithmOid, cert.siginfo.parameters)\n ]),\n // issuer\n _dnToAsn1(cert.issuer),\n // validity\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n notBefore,\n notAfter\n ]),\n // subject\n _dnToAsn1(cert.subject),\n // SubjectPublicKeyInfo\n pki.publicKeyToAsn1(cert.publicKey)\n ]);\n\n if(cert.issuer.uniqueId) {\n // issuerUniqueID (optional)\n tbs.value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n // TODO: support arbitrary bit length ids\n String.fromCharCode(0x00) +\n cert.issuer.uniqueId\n )\n ])\n );\n }\n if(cert.subject.uniqueId) {\n // subjectUniqueID (optional)\n tbs.value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n // TODO: support arbitrary bit length ids\n String.fromCharCode(0x00) +\n cert.subject.uniqueId\n )\n ])\n );\n }\n\n if(cert.extensions.length > 0) {\n // extensions (optional)\n tbs.value.push(pki.certificateExtensionsToAsn1(cert.extensions));\n }\n\n return tbs;\n};\n\n/**\n * Gets the ASN.1 CertificationRequestInfo part of a\n * PKCS#10 CertificationRequest.\n *\n * @param csr the certification request.\n *\n * @return the asn1 CertificationRequestInfo.\n */\npki.getCertificationRequestInfo = function(csr) {\n // CertificationRequestInfo\n var cri = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(csr.version).getBytes()),\n // subject\n _dnToAsn1(csr.subject),\n // SubjectPublicKeyInfo\n pki.publicKeyToAsn1(csr.publicKey),\n // attributes\n _CRIAttributesToAsn1(csr)\n ]);\n\n return cri;\n};\n\n/**\n * Converts a DistinguishedName (subject or issuer) to an ASN.1 object.\n *\n * @param dn the DistinguishedName.\n *\n * @return the asn1 representation of a DistinguishedName.\n */\npki.distinguishedNameToAsn1 = function(dn) {\n return _dnToAsn1(dn);\n};\n\n/**\n * Converts an X.509v3 RSA certificate to an ASN.1 object.\n *\n * @param cert the certificate.\n *\n * @return the asn1 representation of an X.509v3 RSA certificate.\n */\npki.certificateToAsn1 = function(cert) {\n // prefer cached TBSCertificate over generating one\n var tbsCertificate = cert.tbsCertificate || pki.getTBSCertificate(cert);\n\n // Certificate\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // TBSCertificate\n tbsCertificate,\n // AlgorithmIdentifier (signature algorithm)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(cert.signatureOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(cert.signatureOid, cert.signatureParameters)\n ]),\n // SignatureValue\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n String.fromCharCode(0x00) + cert.signature)\n ]);\n};\n\n/**\n * Converts X.509v3 certificate extensions to ASN.1.\n *\n * @param exts the extensions to convert.\n *\n * @return the extensions in ASN.1 format.\n */\npki.certificateExtensionsToAsn1 = function(exts) {\n // create top-level extension container\n var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 3, true, []);\n\n // create extension sequence (stores a sequence for each extension)\n var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n rval.value.push(seq);\n\n for(var i = 0; i < exts.length; ++i) {\n seq.value.push(pki.certificateExtensionToAsn1(exts[i]));\n }\n\n return rval;\n};\n\n/**\n * Converts a single certificate extension to ASN.1.\n *\n * @param ext the extension to convert.\n *\n * @return the extension in ASN.1 format.\n */\npki.certificateExtensionToAsn1 = function(ext) {\n // create a sequence for each extension\n var extseq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // extnID (OID)\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(ext.id).getBytes()));\n\n // critical defaults to false\n if(ext.critical) {\n // critical BOOLEAN DEFAULT FALSE\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false,\n String.fromCharCode(0xFF)));\n }\n\n var value = ext.value;\n if(typeof ext.value !== 'string') {\n // value is asn.1\n value = asn1.toDer(value).getBytes();\n }\n\n // extnValue (OCTET STRING)\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, value));\n\n return extseq;\n};\n\n/**\n * Converts a PKCS#10 certification request to an ASN.1 object.\n *\n * @param csr the certification request.\n *\n * @return the asn1 representation of a certification request.\n */\npki.certificationRequestToAsn1 = function(csr) {\n // prefer cached CertificationRequestInfo over generating one\n var cri = csr.certificationRequestInfo ||\n pki.getCertificationRequestInfo(csr);\n\n // Certificate\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // CertificationRequestInfo\n cri,\n // AlgorithmIdentifier (signature algorithm)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(csr.signatureOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(csr.signatureOid, csr.signatureParameters)\n ]),\n // signature\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n String.fromCharCode(0x00) + csr.signature)\n ]);\n};\n\n/**\n * Creates a CA store.\n *\n * @param certs an optional array of certificate objects or PEM-formatted\n * certificate strings to add to the CA store.\n *\n * @return the CA store.\n */\npki.createCaStore = function(certs) {\n // create CA store\n var caStore = {\n // stored certificates\n certs: {}\n };\n\n /**\n * Gets the certificate that issued the passed certificate or its\n * 'parent'.\n *\n * @param cert the certificate to get the parent for.\n *\n * @return the parent certificate or null if none was found.\n */\n caStore.getIssuer = function(cert) {\n var rval = getBySubject(cert.issuer);\n\n // see if there are multiple matches\n /*if(forge.util.isArray(rval)) {\n // TODO: resolve multiple matches by checking\n // authorityKey/subjectKey/issuerUniqueID/other identifiers, etc.\n // FIXME: or alternatively do authority key mapping\n // if possible (X.509v1 certs can't work?)\n throw new Error('Resolving multiple issuer matches not implemented yet.');\n }*/\n\n return rval;\n };\n\n /**\n * Adds a trusted certificate to the store.\n *\n * @param cert the certificate to add as a trusted certificate (either a\n * pki.certificate object or a PEM-formatted certificate).\n */\n caStore.addCertificate = function(cert) {\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n\n ensureSubjectHasHash(cert.subject);\n\n if(!caStore.hasCertificate(cert)) { // avoid duplicate certificates in store\n if(cert.subject.hash in caStore.certs) {\n // subject hash already exists, append to array\n var tmp = caStore.certs[cert.subject.hash];\n if(!forge.util.isArray(tmp)) {\n tmp = [tmp];\n }\n tmp.push(cert);\n caStore.certs[cert.subject.hash] = tmp;\n } else {\n caStore.certs[cert.subject.hash] = cert;\n }\n }\n };\n\n /**\n * Checks to see if the given certificate is in the store.\n *\n * @param cert the certificate to check (either a pki.certificate or a\n * PEM-formatted certificate).\n *\n * @return true if the certificate is in the store, false if not.\n */\n caStore.hasCertificate = function(cert) {\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n\n var match = getBySubject(cert.subject);\n if(!match) {\n return false;\n }\n if(!forge.util.isArray(match)) {\n match = [match];\n }\n // compare DER-encoding of certificates\n var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();\n for(var i = 0; i < match.length; ++i) {\n var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();\n if(der1 === der2) {\n return true;\n }\n }\n return false;\n };\n\n /**\n * Lists all of the certificates kept in the store.\n *\n * @return an array of all of the pki.certificate objects in the store.\n */\n caStore.listAllCertificates = function() {\n var certList = [];\n\n for(var hash in caStore.certs) {\n if(caStore.certs.hasOwnProperty(hash)) {\n var value = caStore.certs[hash];\n if(!forge.util.isArray(value)) {\n certList.push(value);\n } else {\n for(var i = 0; i < value.length; ++i) {\n certList.push(value[i]);\n }\n }\n }\n }\n\n return certList;\n };\n\n /**\n * Removes a certificate from the store.\n *\n * @param cert the certificate to remove (either a pki.certificate or a\n * PEM-formatted certificate).\n *\n * @return the certificate that was removed or null if the certificate\n * wasn't in store.\n */\n caStore.removeCertificate = function(cert) {\n var result;\n\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n ensureSubjectHasHash(cert.subject);\n if(!caStore.hasCertificate(cert)) {\n return null;\n }\n\n var match = getBySubject(cert.subject);\n\n if(!forge.util.isArray(match)) {\n result = caStore.certs[cert.subject.hash];\n delete caStore.certs[cert.subject.hash];\n return result;\n }\n\n // compare DER-encoding of certificates\n var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();\n for(var i = 0; i < match.length; ++i) {\n var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();\n if(der1 === der2) {\n result = match[i];\n match.splice(i, 1);\n }\n }\n if(match.length === 0) {\n delete caStore.certs[cert.subject.hash];\n }\n\n return result;\n };\n\n function getBySubject(subject) {\n ensureSubjectHasHash(subject);\n return caStore.certs[subject.hash] || null;\n }\n\n function ensureSubjectHasHash(subject) {\n // produce subject hash if it doesn't exist\n if(!subject.hash) {\n var md = forge.md.sha1.create();\n subject.attributes = pki.RDNAttributesAsArray(_dnToAsn1(subject), md);\n subject.hash = md.digest().toHex();\n }\n }\n\n // auto-add passed in certs\n if(certs) {\n // parse PEM-formatted certificates as necessary\n for(var i = 0; i < certs.length; ++i) {\n var cert = certs[i];\n caStore.addCertificate(cert);\n }\n }\n\n return caStore;\n};\n\n/**\n * Certificate verification errors, based on TLS.\n */\npki.certificateError = {\n bad_certificate: 'forge.pki.BadCertificate',\n unsupported_certificate: 'forge.pki.UnsupportedCertificate',\n certificate_revoked: 'forge.pki.CertificateRevoked',\n certificate_expired: 'forge.pki.CertificateExpired',\n certificate_unknown: 'forge.pki.CertificateUnknown',\n unknown_ca: 'forge.pki.UnknownCertificateAuthority'\n};\n\n/**\n * Verifies a certificate chain against the given Certificate Authority store\n * with an optional custom verify callback.\n *\n * @param caStore a certificate store to verify against.\n * @param chain the certificate chain to verify, with the root or highest\n * authority at the end (an array of certificates).\n * @param options a callback to be called for every certificate in the chain or\n * an object with:\n * verify a callback to be called for every certificate in the\n * chain\n * validityCheckDate the date against which the certificate\n * validity period should be checked. Pass null to not check\n * the validity period. By default, the current date is used.\n *\n * The verify callback has the following signature:\n *\n * verified - Set to true if certificate was verified, otherwise the\n * pki.certificateError for why the certificate failed.\n * depth - The current index in the chain, where 0 is the end point's cert.\n * certs - The certificate chain, *NOTE* an empty chain indicates an anonymous\n * end point.\n *\n * The function returns true on success and on failure either the appropriate\n * pki.certificateError or an object with 'error' set to the appropriate\n * pki.certificateError and 'message' set to a custom error message.\n *\n * @return true if successful, error thrown if not.\n */\npki.verifyCertificateChain = function(caStore, chain, options) {\n /* From: RFC3280 - Internet X.509 Public Key Infrastructure Certificate\n Section 6: Certification Path Validation\n See inline parentheticals related to this particular implementation.\n\n The primary goal of path validation is to verify the binding between\n a subject distinguished name or a subject alternative name and subject\n public key, as represented in the end entity certificate, based on the\n public key of the trust anchor. This requires obtaining a sequence of\n certificates that support that binding. That sequence should be provided\n in the passed 'chain'. The trust anchor should be in the given CA\n store. The 'end entity' certificate is the certificate provided by the\n end point (typically a server) and is the first in the chain.\n\n To meet this goal, the path validation process verifies, among other\n things, that a prospective certification path (a sequence of n\n certificates or a 'chain') satisfies the following conditions:\n\n (a) for all x in {1, ..., n-1}, the subject of certificate x is\n the issuer of certificate x+1;\n\n (b) certificate 1 is issued by the trust anchor;\n\n (c) certificate n is the certificate to be validated; and\n\n (d) for all x in {1, ..., n}, the certificate was valid at the\n time in question.\n\n Note that here 'n' is index 0 in the chain and 1 is the last certificate\n in the chain and it must be signed by a certificate in the connection's\n CA store.\n\n The path validation process also determines the set of certificate\n policies that are valid for this path, based on the certificate policies\n extension, policy mapping extension, policy constraints extension, and\n inhibit any-policy extension.\n\n Note: Policy mapping extension not supported (Not Required).\n\n Note: If the certificate has an unsupported critical extension, then it\n must be rejected.\n\n Note: A certificate is self-issued if the DNs that appear in the subject\n and issuer fields are identical and are not empty.\n\n The path validation algorithm assumes the following seven inputs are\n provided to the path processing logic. What this specific implementation\n will use is provided parenthetically:\n\n (a) a prospective certification path of length n (the 'chain')\n (b) the current date/time: ('now').\n (c) user-initial-policy-set: A set of certificate policy identifiers\n naming the policies that are acceptable to the certificate user.\n The user-initial-policy-set contains the special value any-policy\n if the user is not concerned about certificate policy\n (Not implemented. Any policy is accepted).\n (d) trust anchor information, describing a CA that serves as a trust\n anchor for the certification path. The trust anchor information\n includes:\n\n (1) the trusted issuer name,\n (2) the trusted public key algorithm,\n (3) the trusted public key, and\n (4) optionally, the trusted public key parameters associated\n with the public key.\n\n (Trust anchors are provided via certificates in the CA store).\n\n The trust anchor information may be provided to the path processing\n procedure in the form of a self-signed certificate. The trusted anchor\n information is trusted because it was delivered to the path processing\n procedure by some trustworthy out-of-band procedure. If the trusted\n public key algorithm requires parameters, then the parameters are\n provided along with the trusted public key (No parameters used in this\n implementation).\n\n (e) initial-policy-mapping-inhibit, which indicates if policy mapping is\n allowed in the certification path.\n (Not implemented, no policy checking)\n\n (f) initial-explicit-policy, which indicates if the path must be valid\n for at least one of the certificate policies in the user-initial-\n policy-set.\n (Not implemented, no policy checking)\n\n (g) initial-any-policy-inhibit, which indicates whether the\n anyPolicy OID should be processed if it is included in a\n certificate.\n (Not implemented, so any policy is valid provided that it is\n not marked as critical) */\n\n /* Basic Path Processing:\n\n For each certificate in the 'chain', the following is checked:\n\n 1. The certificate validity period includes the current time.\n 2. The certificate was signed by its parent (where the parent is either\n the next in the chain or from the CA store). Allow processing to\n continue to the next step if no parent is found but the certificate is\n in the CA store.\n 3. TODO: The certificate has not been revoked.\n 4. The certificate issuer name matches the parent's subject name.\n 5. TODO: If the certificate is self-issued and not the final certificate\n in the chain, skip this step, otherwise verify that the subject name\n is within one of the permitted subtrees of X.500 distinguished names\n and that each of the alternative names in the subjectAltName extension\n (critical or non-critical) is within one of the permitted subtrees for\n that name type.\n 6. TODO: If the certificate is self-issued and not the final certificate\n in the chain, skip this step, otherwise verify that the subject name\n is not within one of the excluded subtrees for X.500 distinguished\n names and none of the subjectAltName extension names are excluded for\n that name type.\n 7. The other steps in the algorithm for basic path processing involve\n handling the policy extension which is not presently supported in this\n implementation. Instead, if a critical policy extension is found, the\n certificate is rejected as not supported.\n 8. If the certificate is not the first or if its the only certificate in\n the chain (having no parent from the CA store or is self-signed) and it\n has a critical key usage extension, verify that the keyCertSign bit is\n set. If the key usage extension exists, verify that the basic\n constraints extension exists. If the basic constraints extension exists,\n verify that the cA flag is set. If pathLenConstraint is set, ensure that\n the number of certificates that precede in the chain (come earlier\n in the chain as implemented below), excluding the very first in the\n chain (typically the end-entity one), isn't greater than the\n pathLenConstraint. This constraint limits the number of intermediate\n CAs that may appear below a CA before only end-entity certificates\n may be issued. */\n\n // if a verify callback is passed as the third parameter, package it within\n // the options object. This is to support a legacy function signature that\n // expected the verify callback as the third parameter.\n if(typeof options === 'function') {\n options = {verify: options};\n }\n options = options || {};\n\n // copy cert chain references to another array to protect against changes\n // in verify callback\n chain = chain.slice(0);\n var certs = chain.slice(0);\n\n var validityCheckDate = options.validityCheckDate;\n // if no validityCheckDate is specified, default to the current date. Make\n // sure to maintain the value null because it indicates that the validity\n // period should not be checked.\n if(typeof validityCheckDate === 'undefined') {\n validityCheckDate = new Date();\n }\n\n // verify each cert in the chain using its parent, where the parent\n // is either the next in the chain or from the CA store\n var first = true;\n var error = null;\n var depth = 0;\n do {\n var cert = chain.shift();\n var parent = null;\n var selfSigned = false;\n\n if(validityCheckDate) {\n // 1. check valid time\n if(validityCheckDate < cert.validity.notBefore ||\n validityCheckDate > cert.validity.notAfter) {\n error = {\n message: 'Certificate is not valid yet or has expired.',\n error: pki.certificateError.certificate_expired,\n notBefore: cert.validity.notBefore,\n notAfter: cert.validity.notAfter,\n // TODO: we might want to reconsider renaming 'now' to\n // 'validityCheckDate' should this API be changed in the future.\n now: validityCheckDate\n };\n }\n }\n\n // 2. verify with parent from chain or CA store\n if(error === null) {\n parent = chain[0] || caStore.getIssuer(cert);\n if(parent === null) {\n // check for self-signed cert\n if(cert.isIssuer(cert)) {\n selfSigned = true;\n parent = cert;\n }\n }\n\n if(parent) {\n // FIXME: current CA store implementation might have multiple\n // certificates where the issuer can't be determined from the\n // certificate (happens rarely with, eg: old certificates) so normalize\n // by always putting parents into an array\n // TODO: there's may be an extreme degenerate case currently uncovered\n // where an old intermediate certificate seems to have a matching parent\n // but none of the parents actually verify ... but the intermediate\n // is in the CA and it should pass this check; needs investigation\n var parents = parent;\n if(!forge.util.isArray(parents)) {\n parents = [parents];\n }\n\n // try to verify with each possible parent (typically only one)\n var verified = false;\n while(!verified && parents.length > 0) {\n parent = parents.shift();\n try {\n verified = parent.verify(cert);\n } catch(ex) {\n // failure to verify, don't care why, try next one\n }\n }\n\n if(!verified) {\n error = {\n message: 'Certificate signature is invalid.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n\n if(error === null && (!parent || selfSigned) &&\n !caStore.hasCertificate(cert)) {\n // no parent issuer and certificate itself is not trusted\n error = {\n message: 'Certificate is not trusted.',\n error: pki.certificateError.unknown_ca\n };\n }\n }\n\n // TODO: 3. check revoked\n\n // 4. check for matching issuer/subject\n if(error === null && parent && !cert.isIssuer(parent)) {\n // parent is not issuer\n error = {\n message: 'Certificate issuer is invalid.',\n error: pki.certificateError.bad_certificate\n };\n }\n\n // 5. TODO: check names with permitted names tree\n\n // 6. TODO: check names against excluded names tree\n\n // 7. check for unsupported critical extensions\n if(error === null) {\n // supported extensions\n var se = {\n keyUsage: true,\n basicConstraints: true\n };\n for(var i = 0; error === null && i < cert.extensions.length; ++i) {\n var ext = cert.extensions[i];\n if(ext.critical && !(ext.name in se)) {\n error = {\n message:\n 'Certificate has an unsupported critical extension.',\n error: pki.certificateError.unsupported_certificate\n };\n }\n }\n }\n\n // 8. check for CA if cert is not first or is the only certificate\n // remaining in chain with no parent or is self-signed\n if(error === null &&\n (!first || (chain.length === 0 && (!parent || selfSigned)))) {\n // first check keyUsage extension and then basic constraints\n var bcExt = cert.getExtension('basicConstraints');\n var keyUsageExt = cert.getExtension('keyUsage');\n if(keyUsageExt !== null) {\n // keyCertSign must be true and there must be a basic\n // constraints extension\n if(!keyUsageExt.keyCertSign || bcExt === null) {\n // bad certificate\n error = {\n message:\n 'Certificate keyUsage or basicConstraints conflict ' +\n 'or indicate that the certificate is not a CA. ' +\n 'If the certificate is the only one in the chain or ' +\n 'isn\\'t the first then the certificate must be a ' +\n 'valid CA.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n // basic constraints cA flag must be set\n if(error === null && bcExt !== null && !bcExt.cA) {\n // bad certificate\n error = {\n message:\n 'Certificate basicConstraints indicates the certificate ' +\n 'is not a CA.',\n error: pki.certificateError.bad_certificate\n };\n }\n // if error is not null and keyUsage is available, then we know it\n // has keyCertSign and there is a basic constraints extension too,\n // which means we can check pathLenConstraint (if it exists)\n if(error === null && keyUsageExt !== null &&\n 'pathLenConstraint' in bcExt) {\n // pathLen is the maximum # of intermediate CA certs that can be\n // found between the current certificate and the end-entity (depth 0)\n // certificate; this number does not include the end-entity (depth 0,\n // last in the chain) even if it happens to be a CA certificate itself\n var pathLen = depth - 1;\n if(pathLen > bcExt.pathLenConstraint) {\n // pathLenConstraint violated, bad certificate\n error = {\n message:\n 'Certificate basicConstraints pathLenConstraint violated.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n }\n\n // call application callback\n var vfd = (error === null) ? true : error.error;\n var ret = options.verify ? options.verify(vfd, depth, certs) : vfd;\n if(ret === true) {\n // clear any set error\n error = null;\n } else {\n // if passed basic tests, set default message and alert\n if(vfd === true) {\n error = {\n message: 'The application rejected the certificate.',\n error: pki.certificateError.bad_certificate\n };\n }\n\n // check for custom error info\n if(ret || ret === 0) {\n // set custom message and error\n if(typeof ret === 'object' && !forge.util.isArray(ret)) {\n if(ret.message) {\n error.message = ret.message;\n }\n if(ret.error) {\n error.error = ret.error;\n }\n } else if(typeof ret === 'string') {\n // set custom error\n error.error = ret;\n }\n }\n\n // throw error\n throw error;\n }\n\n // no longer first cert in chain\n first = false;\n ++depth;\n } while(chain.length > 0);\n\n return true;\n};\n","/**\n * Javascript implementation of PKCS#12.\n *\n * @author Dave Longley\n * @author Stefan Siegl <stesie@brokenpipe.de>\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\n *\n * The ASN.1 representation of PKCS#12 is as follows\n * (see ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12-tc1.pdf for details)\n *\n * PFX ::= SEQUENCE {\n * version INTEGER {v3(3)}(v3,...),\n * authSafe ContentInfo,\n * macData MacData OPTIONAL\n * }\n *\n * MacData ::= SEQUENCE {\n * mac DigestInfo,\n * macSalt OCTET STRING,\n * iterations INTEGER DEFAULT 1\n * }\n * Note: The iterations default is for historical reasons and its use is\n * deprecated. A higher value, like 1024, is recommended.\n *\n * DigestInfo is defined in PKCS#7 as follows:\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n *\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of SHA1 there is none.\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * Digest ::= OCTET STRING\n *\n *\n * ContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL\n * }\n *\n * ContentType ::= OBJECT IDENTIFIER\n *\n * AuthenticatedSafe ::= SEQUENCE OF ContentInfo\n * -- Data if unencrypted\n * -- EncryptedData if password-encrypted\n * -- EnvelopedData if public key-encrypted\n *\n *\n * SafeContents ::= SEQUENCE OF SafeBag\n *\n * SafeBag ::= SEQUENCE {\n * bagId BAG-TYPE.&id ({PKCS12BagSet})\n * bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}),\n * bagAttributes SET OF PKCS12Attribute OPTIONAL\n * }\n *\n * PKCS12Attribute ::= SEQUENCE {\n * attrId ATTRIBUTE.&id ({PKCS12AttrSet}),\n * attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId})\n * } -- This type is compatible with the X.500 type 'Attribute'\n *\n * PKCS12AttrSet ATTRIBUTE ::= {\n * friendlyName | -- from PKCS #9\n * localKeyId, -- from PKCS #9\n * ... -- Other attributes are allowed\n * }\n *\n * CertBag ::= SEQUENCE {\n * certId BAG-TYPE.&id ({CertTypes}),\n * certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId})\n * }\n *\n * x509Certificate BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {certTypes 1}}\n * -- DER-encoded X.509 certificate stored in OCTET STRING\n *\n * sdsiCertificate BAG-TYPE ::= {IA5String IDENTIFIED BY {certTypes 2}}\n * -- Base64-encoded SDSI certificate stored in IA5String\n *\n * CertTypes BAG-TYPE ::= {\n * x509Certificate |\n * sdsiCertificate,\n * ... -- For future extensions\n * }\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./hmac');\nrequire('./oids');\nrequire('./pkcs7asn1');\nrequire('./pbe');\nrequire('./random');\nrequire('./rsa');\nrequire('./sha1');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for asn.1 & PKI API\nvar asn1 = forge.asn1;\nvar pki = forge.pki;\n\n// shortcut for PKCS#12 API\nvar p12 = module.exports = forge.pkcs12 = forge.pkcs12 || {};\n\nvar contentInfoValidator = {\n name: 'ContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // a ContentInfo\n constructed: true,\n value: [{\n name: 'ContentInfo.contentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'ContentInfo.content',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n captureAsn1: 'content'\n }]\n};\n\nvar pfxValidator = {\n name: 'PFX',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PFX.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n },\n contentInfoValidator, {\n name: 'PFX.macData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'mac',\n value: [{\n name: 'PFX.macData.mac',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // DigestInfo\n constructed: true,\n value: [{\n name: 'PFX.macData.mac.digestAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // DigestAlgorithmIdentifier\n constructed: true,\n value: [{\n name: 'PFX.macData.mac.digestAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'macAlgorithm'\n }, {\n name: 'PFX.macData.mac.digestAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n captureAsn1: 'macAlgorithmParameters'\n }]\n }, {\n name: 'PFX.macData.mac.digest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'macDigest'\n }]\n }, {\n name: 'PFX.macData.macSalt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'macSalt'\n }, {\n name: 'PFX.macData.iterations',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n optional: true,\n capture: 'macIterations'\n }]\n }]\n};\n\nvar safeBagValidator = {\n name: 'SafeBag',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SafeBag.bagId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'bagId'\n }, {\n name: 'SafeBag.bagValue',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n captureAsn1: 'bagValue'\n }, {\n name: 'SafeBag.bagAttributes',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n optional: true,\n capture: 'bagAttributes'\n }]\n};\n\nvar attributeValidator = {\n name: 'Attribute',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Attribute.attrId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'oid'\n }, {\n name: 'Attribute.attrValues',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n capture: 'values'\n }]\n};\n\nvar certBagValidator = {\n name: 'CertBag',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'CertBag.certId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certId'\n }, {\n name: 'CertBag.certValue',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n /* So far we only support X.509 certificates (which are wrapped in\n an OCTET STRING, hence hard code that here). */\n value: [{\n name: 'CertBag.certValue[0]',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.OCTETSTRING,\n constructed: false,\n capture: 'cert'\n }]\n }]\n};\n\n/**\n * Search SafeContents structure for bags with matching attributes.\n *\n * The search can optionally be narrowed by a certain bag type.\n *\n * @param safeContents the SafeContents structure to search in.\n * @param attrName the name of the attribute to compare against.\n * @param attrValue the attribute value to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of matching bags.\n */\nfunction _getBagsByAttribute(safeContents, attrName, attrValue, bagType) {\n var result = [];\n\n for(var i = 0; i < safeContents.length; i++) {\n for(var j = 0; j < safeContents[i].safeBags.length; j++) {\n var bag = safeContents[i].safeBags[j];\n if(bagType !== undefined && bag.type !== bagType) {\n continue;\n }\n // only filter by bag type, no attribute specified\n if(attrName === null) {\n result.push(bag);\n continue;\n }\n if(bag.attributes[attrName] !== undefined &&\n bag.attributes[attrName].indexOf(attrValue) >= 0) {\n result.push(bag);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Converts a PKCS#12 PFX in ASN.1 notation into a PFX object.\n *\n * @param obj The PKCS#12 PFX in ASN.1 notation.\n * @param strict true to use strict DER decoding, false not to (default: true).\n * @param {String} password Password to decrypt with (optional).\n *\n * @return PKCS#12 PFX object.\n */\np12.pkcs12FromAsn1 = function(obj, strict, password) {\n // handle args\n if(typeof strict === 'string') {\n password = strict;\n strict = true;\n } else if(strict === undefined) {\n strict = true;\n }\n\n // validate PFX and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, pfxValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 PFX. ' +\n 'ASN.1 object is not an PKCS#12 PFX.');\n error.errors = error;\n throw error;\n }\n\n var pfx = {\n version: capture.version.charCodeAt(0),\n safeContents: [],\n\n /**\n * Gets bags with matching attributes.\n *\n * @param filter the attributes to filter by:\n * [localKeyId] the localKeyId to search for.\n * [localKeyIdHex] the localKeyId in hex to search for.\n * [friendlyName] the friendly name to search for.\n * [bagType] bag type to narrow each attribute search by.\n *\n * @return a map of attribute type to an array of matching bags or, if no\n * attribute was given but a bag type, the map key will be the\n * bag type.\n */\n getBags: function(filter) {\n var rval = {};\n\n var localKeyId;\n if('localKeyId' in filter) {\n localKeyId = filter.localKeyId;\n } else if('localKeyIdHex' in filter) {\n localKeyId = forge.util.hexToBytes(filter.localKeyIdHex);\n }\n\n // filter on bagType only\n if(localKeyId === undefined && !('friendlyName' in filter) &&\n 'bagType' in filter) {\n rval[filter.bagType] = _getBagsByAttribute(\n pfx.safeContents, null, null, filter.bagType);\n }\n\n if(localKeyId !== undefined) {\n rval.localKeyId = _getBagsByAttribute(\n pfx.safeContents, 'localKeyId',\n localKeyId, filter.bagType);\n }\n if('friendlyName' in filter) {\n rval.friendlyName = _getBagsByAttribute(\n pfx.safeContents, 'friendlyName',\n filter.friendlyName, filter.bagType);\n }\n\n return rval;\n },\n\n /**\n * DEPRECATED: use getBags() instead.\n *\n * Get bags with matching friendlyName attribute.\n *\n * @param friendlyName the friendly name to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of bags with matching friendlyName attribute.\n */\n getBagsByFriendlyName: function(friendlyName, bagType) {\n return _getBagsByAttribute(\n pfx.safeContents, 'friendlyName', friendlyName, bagType);\n },\n\n /**\n * DEPRECATED: use getBags() instead.\n *\n * Get bags with matching localKeyId attribute.\n *\n * @param localKeyId the localKeyId to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of bags with matching localKeyId attribute.\n */\n getBagsByLocalKeyId: function(localKeyId, bagType) {\n return _getBagsByAttribute(\n pfx.safeContents, 'localKeyId', localKeyId, bagType);\n }\n };\n\n if(capture.version.charCodeAt(0) !== 3) {\n var error = new Error('PKCS#12 PFX of version other than 3 not supported.');\n error.version = capture.version.charCodeAt(0);\n throw error;\n }\n\n if(asn1.derToOid(capture.contentType) !== pki.oids.data) {\n var error = new Error('Only PKCS#12 PFX in password integrity mode supported.');\n error.oid = asn1.derToOid(capture.contentType);\n throw error;\n }\n\n var data = capture.content.value[0];\n if(data.tagClass !== asn1.Class.UNIVERSAL ||\n data.type !== asn1.Type.OCTETSTRING) {\n throw new Error('PKCS#12 authSafe content data is not an OCTET STRING.');\n }\n data = _decodePkcs7Data(data);\n\n // check for MAC\n if(capture.mac) {\n var md = null;\n var macKeyBytes = 0;\n var macAlgorithm = asn1.derToOid(capture.macAlgorithm);\n switch(macAlgorithm) {\n case pki.oids.sha1:\n md = forge.md.sha1.create();\n macKeyBytes = 20;\n break;\n case pki.oids.sha256:\n md = forge.md.sha256.create();\n macKeyBytes = 32;\n break;\n case pki.oids.sha384:\n md = forge.md.sha384.create();\n macKeyBytes = 48;\n break;\n case pki.oids.sha512:\n md = forge.md.sha512.create();\n macKeyBytes = 64;\n break;\n case pki.oids.md5:\n md = forge.md.md5.create();\n macKeyBytes = 16;\n break;\n }\n if(md === null) {\n throw new Error('PKCS#12 uses unsupported MAC algorithm: ' + macAlgorithm);\n }\n\n // verify MAC (iterations default to 1)\n var macSalt = new forge.util.ByteBuffer(capture.macSalt);\n var macIterations = (('macIterations' in capture) ?\n parseInt(forge.util.bytesToHex(capture.macIterations), 16) : 1);\n var macKey = p12.generateKey(\n password, macSalt, 3, macIterations, macKeyBytes, md);\n var mac = forge.hmac.create();\n mac.start(md, macKey);\n mac.update(data.value);\n var macValue = mac.getMac();\n if(macValue.getBytes() !== capture.macDigest) {\n throw new Error('PKCS#12 MAC could not be verified. Invalid password?');\n }\n }\n\n _decodeAuthenticatedSafe(pfx, data.value, strict, password);\n return pfx;\n};\n\n/**\n * Decodes PKCS#7 Data. PKCS#7 (RFC 2315) defines \"Data\" as an OCTET STRING,\n * but it is sometimes an OCTET STRING that is composed/constructed of chunks,\n * each its own OCTET STRING. This is BER-encoding vs. DER-encoding. This\n * function transforms this corner-case into the usual simple,\n * non-composed/constructed OCTET STRING.\n *\n * This function may be moved to ASN.1 at some point to better deal with\n * more BER-encoding issues, should they arise.\n *\n * @param data the ASN.1 Data object to transform.\n */\nfunction _decodePkcs7Data(data) {\n // handle special case of \"chunked\" data content: an octet string composed\n // of other octet strings\n if(data.composed || data.constructed) {\n var value = forge.util.createBuffer();\n for(var i = 0; i < data.value.length; ++i) {\n value.putBytes(data.value[i].value);\n }\n data.composed = data.constructed = false;\n data.value = value.getBytes();\n }\n return data;\n}\n\n/**\n * Decode PKCS#12 AuthenticatedSafe (BER encoded) into PFX object.\n *\n * The AuthenticatedSafe is a BER-encoded SEQUENCE OF ContentInfo.\n *\n * @param pfx The PKCS#12 PFX object to fill.\n * @param {String} authSafe BER-encoded AuthenticatedSafe.\n * @param strict true to use strict DER decoding, false not to.\n * @param {String} password Password to decrypt with (optional).\n */\nfunction _decodeAuthenticatedSafe(pfx, authSafe, strict, password) {\n authSafe = asn1.fromDer(authSafe, strict); /* actually it's BER encoded */\n\n if(authSafe.tagClass !== asn1.Class.UNIVERSAL ||\n authSafe.type !== asn1.Type.SEQUENCE ||\n authSafe.constructed !== true) {\n throw new Error('PKCS#12 AuthenticatedSafe expected to be a ' +\n 'SEQUENCE OF ContentInfo');\n }\n\n for(var i = 0; i < authSafe.value.length; i++) {\n var contentInfo = authSafe.value[i];\n\n // validate contentInfo and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(contentInfo, contentInfoValidator, capture, errors)) {\n var error = new Error('Cannot read ContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var obj = {\n encrypted: false\n };\n var safeContents = null;\n var data = capture.content.value[0];\n switch(asn1.derToOid(capture.contentType)) {\n case pki.oids.data:\n if(data.tagClass !== asn1.Class.UNIVERSAL ||\n data.type !== asn1.Type.OCTETSTRING) {\n throw new Error('PKCS#12 SafeContents Data is not an OCTET STRING.');\n }\n safeContents = _decodePkcs7Data(data).value;\n break;\n case pki.oids.encryptedData:\n safeContents = _decryptSafeContents(data, password);\n obj.encrypted = true;\n break;\n default:\n var error = new Error('Unsupported PKCS#12 contentType.');\n error.contentType = asn1.derToOid(capture.contentType);\n throw error;\n }\n\n obj.safeBags = _decodeSafeContents(safeContents, strict, password);\n pfx.safeContents.push(obj);\n }\n}\n\n/**\n * Decrypt PKCS#7 EncryptedData structure.\n *\n * @param data ASN.1 encoded EncryptedContentInfo object.\n * @param password The user-provided password.\n *\n * @return The decrypted SafeContents (ASN.1 object).\n */\nfunction _decryptSafeContents(data, password) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(\n data, forge.pkcs7.asn1.encryptedDataValidator, capture, errors)) {\n var error = new Error('Cannot read EncryptedContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var oid = asn1.derToOid(capture.contentType);\n if(oid !== pki.oids.data) {\n var error = new Error(\n 'PKCS#12 EncryptedContentInfo ContentType is not Data.');\n error.oid = oid;\n throw error;\n }\n\n // get cipher\n oid = asn1.derToOid(capture.encAlgorithm);\n var cipher = pki.pbe.getCipher(oid, capture.encParameter, password);\n\n // get encrypted data\n var encryptedContentAsn1 = _decodePkcs7Data(capture.encryptedContentAsn1);\n var encrypted = forge.util.createBuffer(encryptedContentAsn1.value);\n\n cipher.update(encrypted);\n if(!cipher.finish()) {\n throw new Error('Failed to decrypt PKCS#12 SafeContents.');\n }\n\n return cipher.output.getBytes();\n}\n\n/**\n * Decode PKCS#12 SafeContents (BER-encoded) into array of Bag objects.\n *\n * The safeContents is a BER-encoded SEQUENCE OF SafeBag.\n *\n * @param {String} safeContents BER-encoded safeContents.\n * @param strict true to use strict DER decoding, false not to.\n * @param {String} password Password to decrypt with (optional).\n *\n * @return {Array} Array of Bag objects.\n */\nfunction _decodeSafeContents(safeContents, strict, password) {\n // if strict and no safe contents, return empty safes\n if(!strict && safeContents.length === 0) {\n return [];\n }\n\n // actually it's BER-encoded\n safeContents = asn1.fromDer(safeContents, strict);\n\n if(safeContents.tagClass !== asn1.Class.UNIVERSAL ||\n safeContents.type !== asn1.Type.SEQUENCE ||\n safeContents.constructed !== true) {\n throw new Error(\n 'PKCS#12 SafeContents expected to be a SEQUENCE OF SafeBag.');\n }\n\n var res = [];\n for(var i = 0; i < safeContents.value.length; i++) {\n var safeBag = safeContents.value[i];\n\n // validate SafeBag and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(safeBag, safeBagValidator, capture, errors)) {\n var error = new Error('Cannot read SafeBag.');\n error.errors = errors;\n throw error;\n }\n\n /* Create bag object and push to result array. */\n var bag = {\n type: asn1.derToOid(capture.bagId),\n attributes: _decodeBagAttributes(capture.bagAttributes)\n };\n res.push(bag);\n\n var validator, decoder;\n var bagAsn1 = capture.bagValue.value[0];\n switch(bag.type) {\n case pki.oids.pkcs8ShroudedKeyBag:\n /* bagAsn1 has a EncryptedPrivateKeyInfo, which we need to decrypt.\n Afterwards we can handle it like a keyBag,\n which is a PrivateKeyInfo. */\n bagAsn1 = pki.decryptPrivateKeyInfo(bagAsn1, password);\n if(bagAsn1 === null) {\n throw new Error(\n 'Unable to decrypt PKCS#8 ShroudedKeyBag, wrong password?');\n }\n\n /* fall through */\n case pki.oids.keyBag:\n /* A PKCS#12 keyBag is a simple PrivateKeyInfo as understood by our\n PKI module, hence we don't have to do validation/capturing here,\n just pass what we already got. */\n try {\n bag.key = pki.privateKeyFromAsn1(bagAsn1);\n } catch(e) {\n // ignore unknown key type, pass asn1 value\n bag.key = null;\n bag.asn1 = bagAsn1;\n }\n continue; /* Nothing more to do. */\n\n case pki.oids.certBag:\n /* A PKCS#12 certBag can wrap both X.509 and sdsi certificates.\n Therefore put the SafeBag content through another validator to\n capture the fields. Afterwards check & store the results. */\n validator = certBagValidator;\n decoder = function() {\n if(asn1.derToOid(capture.certId) !== pki.oids.x509Certificate) {\n var error = new Error(\n 'Unsupported certificate type, only X.509 supported.');\n error.oid = asn1.derToOid(capture.certId);\n throw error;\n }\n\n // true=produce cert hash\n var certAsn1 = asn1.fromDer(capture.cert, strict);\n try {\n bag.cert = pki.certificateFromAsn1(certAsn1, true);\n } catch(e) {\n // ignore unknown cert type, pass asn1 value\n bag.cert = null;\n bag.asn1 = certAsn1;\n }\n };\n break;\n\n default:\n var error = new Error('Unsupported PKCS#12 SafeBag type.');\n error.oid = bag.type;\n throw error;\n }\n\n /* Validate SafeBag value (i.e. CertBag, etc.) and capture data if needed. */\n if(validator !== undefined &&\n !asn1.validate(bagAsn1, validator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 ' + validator.name);\n error.errors = errors;\n throw error;\n }\n\n /* Call decoder function from above to store the results. */\n decoder();\n }\n\n return res;\n}\n\n/**\n * Decode PKCS#12 SET OF PKCS12Attribute into JavaScript object.\n *\n * @param attributes SET OF PKCS12Attribute (ASN.1 object).\n *\n * @return the decoded attributes.\n */\nfunction _decodeBagAttributes(attributes) {\n var decodedAttrs = {};\n\n if(attributes !== undefined) {\n for(var i = 0; i < attributes.length; ++i) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(attributes[i], attributeValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 BagAttribute.');\n error.errors = errors;\n throw error;\n }\n\n var oid = asn1.derToOid(capture.oid);\n if(pki.oids[oid] === undefined) {\n // unsupported attribute type, ignore.\n continue;\n }\n\n decodedAttrs[pki.oids[oid]] = [];\n for(var j = 0; j < capture.values.length; ++j) {\n decodedAttrs[pki.oids[oid]].push(capture.values[j].value);\n }\n }\n }\n\n return decodedAttrs;\n}\n\n/**\n * Wraps a private key and certificate in a PKCS#12 PFX wrapper. If a\n * password is provided then the private key will be encrypted.\n *\n * An entire certificate chain may also be included. To do this, pass\n * an array for the \"cert\" parameter where the first certificate is\n * the one that is paired with the private key and each subsequent one\n * verifies the previous one. The certificates may be in PEM format or\n * have been already parsed by Forge.\n *\n * @todo implement password-based-encryption for the whole package\n *\n * @param key the private key.\n * @param cert the certificate (may be an array of certificates in order\n * to specify a certificate chain).\n * @param password the password to use, null for none.\n * @param options:\n * algorithm the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.\n * count the iteration count to use.\n * saltSize the salt size to use.\n * useMac true to include a MAC, false not to, defaults to true.\n * localKeyId the local key ID to use, in hex.\n * friendlyName the friendly name to use.\n * generateLocalKeyId true to generate a random local key ID,\n * false not to, defaults to true.\n *\n * @return the PKCS#12 PFX ASN.1 object.\n */\np12.toPkcs12Asn1 = function(key, cert, password, options) {\n // set default options\n options = options || {};\n options.saltSize = options.saltSize || 8;\n options.count = options.count || 2048;\n options.algorithm = options.algorithm || options.encAlgorithm || 'aes128';\n if(!('useMac' in options)) {\n options.useMac = true;\n }\n if(!('localKeyId' in options)) {\n options.localKeyId = null;\n }\n if(!('generateLocalKeyId' in options)) {\n options.generateLocalKeyId = true;\n }\n\n var localKeyId = options.localKeyId;\n var bagAttrs;\n if(localKeyId !== null) {\n localKeyId = forge.util.hexToBytes(localKeyId);\n } else if(options.generateLocalKeyId) {\n // use SHA-1 of paired cert, if available\n if(cert) {\n var pairedCert = forge.util.isArray(cert) ? cert[0] : cert;\n if(typeof pairedCert === 'string') {\n pairedCert = pki.certificateFromPem(pairedCert);\n }\n var sha1 = forge.md.sha1.create();\n sha1.update(asn1.toDer(pki.certificateToAsn1(pairedCert)).getBytes());\n localKeyId = sha1.digest().getBytes();\n } else {\n // FIXME: consider using SHA-1 of public key (which can be generated\n // from private key components), see: cert.generateSubjectKeyIdentifier\n // generate random bytes\n localKeyId = forge.random.getBytes(20);\n }\n }\n\n var attrs = [];\n if(localKeyId !== null) {\n attrs.push(\n // localKeyID\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // attrId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.localKeyId).getBytes()),\n // attrValues\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n localKeyId)\n ])\n ]));\n }\n if('friendlyName' in options) {\n attrs.push(\n // friendlyName\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // attrId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.friendlyName).getBytes()),\n // attrValues\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BMPSTRING, false,\n options.friendlyName)\n ])\n ]));\n }\n\n if(attrs.length > 0) {\n bagAttrs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, attrs);\n }\n\n // collect contents for AuthenticatedSafe\n var contents = [];\n\n // create safe bag(s) for certificate chain\n var chain = [];\n if(cert !== null) {\n if(forge.util.isArray(cert)) {\n chain = cert;\n } else {\n chain = [cert];\n }\n }\n\n var certSafeBags = [];\n for(var i = 0; i < chain.length; ++i) {\n // convert cert from PEM as necessary\n cert = chain[i];\n if(typeof cert === 'string') {\n cert = pki.certificateFromPem(cert);\n }\n\n // SafeBag\n var certBagAttrs = (i === 0) ? bagAttrs : undefined;\n var certAsn1 = pki.certificateToAsn1(cert);\n var certSafeBag =\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.certBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // CertBag\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // certId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.x509Certificate).getBytes()),\n // certValue (x509Certificate)\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(certAsn1).getBytes())\n ])])]),\n // bagAttributes (OPTIONAL)\n certBagAttrs\n ]);\n certSafeBags.push(certSafeBag);\n }\n\n if(certSafeBags.length > 0) {\n // SafeContents\n var certSafeContents = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, certSafeBags);\n\n // ContentInfo\n var certCI =\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(certSafeContents).getBytes())\n ])\n ]);\n contents.push(certCI);\n }\n\n // create safe contents for private key\n var keyBag = null;\n if(key !== null) {\n // SafeBag\n var pkAsn1 = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(key));\n if(password === null) {\n // no encryption\n keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.keyBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // PrivateKeyInfo\n pkAsn1\n ]),\n // bagAttributes (OPTIONAL)\n bagAttrs\n ]);\n } else {\n // encrypted PrivateKeyInfo\n keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.pkcs8ShroudedKeyBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // EncryptedPrivateKeyInfo\n pki.encryptPrivateKeyInfo(pkAsn1, password, options)\n ]),\n // bagAttributes (OPTIONAL)\n bagAttrs\n ]);\n }\n\n // SafeContents\n var keySafeContents =\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [keyBag]);\n\n // ContentInfo\n var keyCI =\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(keySafeContents).getBytes())\n ])\n ]);\n contents.push(keyCI);\n }\n\n // create AuthenticatedSafe by stringing together the contents\n var safe = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, contents);\n\n var macData;\n if(options.useMac) {\n // MacData\n var sha1 = forge.md.sha1.create();\n var macSalt = new forge.util.ByteBuffer(\n forge.random.getBytes(options.saltSize));\n var count = options.count;\n // 160-bit key\n var key = p12.generateKey(password, macSalt, 3, count, 20);\n var mac = forge.hmac.create();\n mac.start(sha1, key);\n mac.update(asn1.toDer(safe).getBytes());\n var macValue = mac.getMac();\n macData = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // mac DigestInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // digestAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm = SHA-1\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.sha1).getBytes()),\n // parameters = Null\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // digest\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING,\n false, macValue.getBytes())\n ]),\n // macSalt OCTET STRING\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, macSalt.getBytes()),\n // iterations INTEGER (XXX: Only support count < 65536)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(count).getBytes()\n )\n ]);\n }\n\n // PFX\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (3)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(3).getBytes()),\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(safe).getBytes())\n ])\n ]),\n macData\n ]);\n};\n\n/**\n * Derives a PKCS#12 key.\n *\n * @param password the password to derive the key material from, null or\n * undefined for none.\n * @param salt the salt, as a ByteBuffer, to use.\n * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).\n * @param iter the iteration count.\n * @param n the number of bytes to derive from the password.\n * @param md the message digest to use, defaults to SHA-1.\n *\n * @return a ByteBuffer with the bytes derived from the password.\n */\np12.generateKey = forge.pbe.generatePkcs12Key;\n","/**\n * Javascript implementation of a basic Public Key Infrastructure, including\n * support for RSA public and private keys.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./oids');\nrequire('./pbe');\nrequire('./pem');\nrequire('./pbkdf2');\nrequire('./pkcs12');\nrequire('./pss');\nrequire('./rsa');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Public Key Infrastructure (PKI) implementation. */\nvar pki = module.exports = forge.pki = forge.pki || {};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED. Use pem.decode() instead.\n *\n * Converts PEM-formatted data to DER.\n *\n * @param pem the PEM-formatted data.\n *\n * @return the DER-formatted data.\n */\npki.pemToDer = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert PEM to DER; PEM is encrypted.');\n }\n return forge.util.createBuffer(msg.body);\n};\n\n/**\n * Converts an RSA private key from PEM format.\n *\n * @param pem the PEM-formatted private key.\n *\n * @return the private key.\n */\npki.privateKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PRIVATE KEY' && msg.type !== 'RSA PRIVATE KEY') {\n var error = new Error('Could not convert private key from PEM; PEM ' +\n 'header type is not \"PRIVATE KEY\" or \"RSA PRIVATE KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert private key from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return pki.privateKeyFromAsn1(obj);\n};\n\n/**\n * Converts an RSA private key to PEM format.\n *\n * @param key the private key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted private key.\n */\npki.privateKeyToPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'RSA PRIVATE KEY',\n body: asn1.toDer(pki.privateKeyToAsn1(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts a PrivateKeyInfo to PEM format.\n *\n * @param pki the PrivateKeyInfo.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted private key.\n */\npki.privateKeyInfoToPem = function(pki, maxline) {\n // convert to DER, then PEM-encode\n var msg = {\n type: 'PRIVATE KEY',\n body: asn1.toDer(pki).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n","/**\n * A Javascript implementation of Transport Layer Security (TLS).\n *\n * @author Dave Longley\n *\n * Copyright (c) 2009-2014 Digital Bazaar, Inc.\n *\n * The TLS Handshake Protocol involves the following steps:\n *\n * - Exchange hello messages to agree on algorithms, exchange random values,\n * and check for session resumption.\n *\n * - Exchange the necessary cryptographic parameters to allow the client and\n * server to agree on a premaster secret.\n *\n * - Exchange certificates and cryptographic information to allow the client\n * and server to authenticate themselves.\n *\n * - Generate a master secret from the premaster secret and exchanged random\n * values.\n *\n * - Provide security parameters to the record layer.\n *\n * - Allow the client and server to verify that their peer has calculated the\n * same security parameters and that the handshake occurred without tampering\n * by an attacker.\n *\n * Up to 4 different messages may be sent during a key exchange. The server\n * certificate, the server key exchange, the client certificate, and the\n * client key exchange.\n *\n * A typical handshake (from the client's perspective).\n *\n * 1. Client sends ClientHello.\n * 2. Client receives ServerHello.\n * 3. Client receives optional Certificate.\n * 4. Client receives optional ServerKeyExchange.\n * 5. Client receives ServerHelloDone.\n * 6. Client sends optional Certificate.\n * 7. Client sends ClientKeyExchange.\n * 8. Client sends optional CertificateVerify.\n * 9. Client sends ChangeCipherSpec.\n * 10. Client sends Finished.\n * 11. Client receives ChangeCipherSpec.\n * 12. Client receives Finished.\n * 13. Client sends/receives application data.\n *\n * To reuse an existing session:\n *\n * 1. Client sends ClientHello with session ID for reuse.\n * 2. Client receives ServerHello with same session ID if reusing.\n * 3. Client receives ChangeCipherSpec message if reusing.\n * 4. Client receives Finished.\n * 5. Client sends ChangeCipherSpec.\n * 6. Client sends Finished.\n *\n * Note: Client ignores HelloRequest if in the middle of a handshake.\n *\n * Record Layer:\n *\n * The record layer fragments information blocks into TLSPlaintext records\n * carrying data in chunks of 2^14 bytes or less. Client message boundaries are\n * not preserved in the record layer (i.e., multiple client messages of the\n * same ContentType MAY be coalesced into a single TLSPlaintext record, or a\n * single message MAY be fragmented across several records).\n *\n * struct {\n * uint8 major;\n * uint8 minor;\n * } ProtocolVersion;\n *\n * struct {\n * ContentType type;\n * ProtocolVersion version;\n * uint16 length;\n * opaque fragment[TLSPlaintext.length];\n * } TLSPlaintext;\n *\n * type:\n * The higher-level protocol used to process the enclosed fragment.\n *\n * version:\n * The version of the protocol being employed. TLS Version 1.2 uses version\n * {3, 3}. TLS Version 1.0 uses version {3, 1}. Note that a client that\n * supports multiple versions of TLS may not know what version will be\n * employed before it receives the ServerHello.\n *\n * length:\n * The length (in bytes) of the following TLSPlaintext.fragment. The length\n * MUST NOT exceed 2^14 = 16384 bytes.\n *\n * fragment:\n * The application data. This data is transparent and treated as an\n * independent block to be dealt with by the higher-level protocol specified\n * by the type field.\n *\n * Implementations MUST NOT send zero-length fragments of Handshake, Alert, or\n * ChangeCipherSpec content types. Zero-length fragments of Application data\n * MAY be sent as they are potentially useful as a traffic analysis\n * countermeasure.\n *\n * Note: Data of different TLS record layer content types MAY be interleaved.\n * Application data is generally of lower precedence for transmission than\n * other content types. However, records MUST be delivered to the network in\n * the same order as they are protected by the record layer. Recipients MUST\n * receive and process interleaved application layer traffic during handshakes\n * subsequent to the first one on a connection.\n *\n * struct {\n * ContentType type; // same as TLSPlaintext.type\n * ProtocolVersion version;// same as TLSPlaintext.version\n * uint16 length;\n * opaque fragment[TLSCompressed.length];\n * } TLSCompressed;\n *\n * length:\n * The length (in bytes) of the following TLSCompressed.fragment.\n * The length MUST NOT exceed 2^14 + 1024.\n *\n * fragment:\n * The compressed form of TLSPlaintext.fragment.\n *\n * Note: A CompressionMethod.null operation is an identity operation; no fields\n * are altered. In this implementation, since no compression is supported,\n * uncompressed records are always the same as compressed records.\n *\n * Encryption Information:\n *\n * The encryption and MAC functions translate a TLSCompressed structure into a\n * TLSCiphertext. The decryption functions reverse the process. The MAC of the\n * record also includes a sequence number so that missing, extra, or repeated\n * messages are detectable.\n *\n * struct {\n * ContentType type;\n * ProtocolVersion version;\n * uint16 length;\n * select (SecurityParameters.cipher_type) {\n * case stream: GenericStreamCipher;\n * case block: GenericBlockCipher;\n * case aead: GenericAEADCipher;\n * } fragment;\n * } TLSCiphertext;\n *\n * type:\n * The type field is identical to TLSCompressed.type.\n *\n * version:\n * The version field is identical to TLSCompressed.version.\n *\n * length:\n * The length (in bytes) of the following TLSCiphertext.fragment.\n * The length MUST NOT exceed 2^14 + 2048.\n *\n * fragment:\n * The encrypted form of TLSCompressed.fragment, with the MAC.\n *\n * Note: Only CBC Block Ciphers are supported by this implementation.\n *\n * The TLSCompressed.fragment structures are converted to/from block\n * TLSCiphertext.fragment structures.\n *\n * struct {\n * opaque IV[SecurityParameters.record_iv_length];\n * block-ciphered struct {\n * opaque content[TLSCompressed.length];\n * opaque MAC[SecurityParameters.mac_length];\n * uint8 padding[GenericBlockCipher.padding_length];\n * uint8 padding_length;\n * };\n * } GenericBlockCipher;\n *\n * The MAC is generated as described in Section 6.2.3.1.\n *\n * IV:\n * The Initialization Vector (IV) SHOULD be chosen at random, and MUST be\n * unpredictable. Note that in versions of TLS prior to 1.1, there was no\n * IV field, and the last ciphertext block of the previous record (the \"CBC\n * residue\") was used as the IV. This was changed to prevent the attacks\n * described in [CBCATT]. For block ciphers, the IV length is of length\n * SecurityParameters.record_iv_length, which is equal to the\n * SecurityParameters.block_size.\n *\n * padding:\n * Padding that is added to force the length of the plaintext to be an\n * integral multiple of the block cipher's block length. The padding MAY be\n * any length up to 255 bytes, as long as it results in the\n * TLSCiphertext.length being an integral multiple of the block length.\n * Lengths longer than necessary might be desirable to frustrate attacks on\n * a protocol that are based on analysis of the lengths of exchanged\n * messages. Each uint8 in the padding data vector MUST be filled with the\n * padding length value. The receiver MUST check this padding and MUST use\n * the bad_record_mac alert to indicate padding errors.\n *\n * padding_length:\n * The padding length MUST be such that the total size of the\n * GenericBlockCipher structure is a multiple of the cipher's block length.\n * Legal values range from zero to 255, inclusive. This length specifies the\n * length of the padding field exclusive of the padding_length field itself.\n *\n * The encrypted data length (TLSCiphertext.length) is one more than the sum of\n * SecurityParameters.block_length, TLSCompressed.length,\n * SecurityParameters.mac_length, and padding_length.\n *\n * Example: If the block length is 8 bytes, the content length\n * (TLSCompressed.length) is 61 bytes, and the MAC length is 20 bytes, then the\n * length before padding is 82 bytes (this does not include the IV. Thus, the\n * padding length modulo 8 must be equal to 6 in order to make the total length\n * an even multiple of 8 bytes (the block length). The padding length can be\n * 6, 14, 22, and so on, through 254. If the padding length were the minimum\n * necessary, 6, the padding would be 6 bytes, each containing the value 6.\n * Thus, the last 8 octets of the GenericBlockCipher before block encryption\n * would be xx 06 06 06 06 06 06 06, where xx is the last octet of the MAC.\n *\n * Note: With block ciphers in CBC mode (Cipher Block Chaining), it is critical\n * that the entire plaintext of the record be known before any ciphertext is\n * transmitted. Otherwise, it is possible for the attacker to mount the attack\n * described in [CBCATT].\n *\n * Implementation note: Canvel et al. [CBCTIME] have demonstrated a timing\n * attack on CBC padding based on the time required to compute the MAC. In\n * order to defend against this attack, implementations MUST ensure that\n * record processing time is essentially the same whether or not the padding\n * is correct. In general, the best way to do this is to compute the MAC even\n * if the padding is incorrect, and only then reject the packet. For instance,\n * if the pad appears to be incorrect, the implementation might assume a\n * zero-length pad and then compute the MAC. This leaves a small timing\n * channel, since MAC performance depends, to some extent, on the size of the\n * data fragment, but it is not believed to be large enough to be exploitable,\n * due to the large block size of existing MACs and the small size of the\n * timing signal.\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./hmac');\nrequire('./md5');\nrequire('./pem');\nrequire('./pki');\nrequire('./random');\nrequire('./sha1');\nrequire('./util');\n\n/**\n * Generates pseudo random bytes by mixing the result of two hash functions,\n * MD5 and SHA-1.\n *\n * prf_TLS1(secret, label, seed) =\n * P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed);\n *\n * Each P_hash function functions as follows:\n *\n * P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +\n * HMAC_hash(secret, A(2) + seed) +\n * HMAC_hash(secret, A(3) + seed) + ...\n * A() is defined as:\n * A(0) = seed\n * A(i) = HMAC_hash(secret, A(i-1))\n *\n * The '+' operator denotes concatenation.\n *\n * As many iterations A(N) as are needed are performed to generate enough\n * pseudo random byte output. If an iteration creates more data than is\n * necessary, then it is truncated.\n *\n * Therefore:\n * A(1) = HMAC_hash(secret, A(0))\n * = HMAC_hash(secret, seed)\n * A(2) = HMAC_hash(secret, A(1))\n * = HMAC_hash(secret, HMAC_hash(secret, seed))\n *\n * Therefore:\n * P_hash(secret, seed) =\n * HMAC_hash(secret, HMAC_hash(secret, A(0)) + seed) +\n * HMAC_hash(secret, HMAC_hash(secret, A(1)) + seed) +\n * ...\n *\n * Therefore:\n * P_hash(secret, seed) =\n * HMAC_hash(secret, HMAC_hash(secret, seed) + seed) +\n * HMAC_hash(secret, HMAC_hash(secret, HMAC_hash(secret, seed)) + seed) +\n * ...\n *\n * @param secret the secret to use.\n * @param label the label to use.\n * @param seed the seed value to use.\n * @param length the number of bytes to generate.\n *\n * @return the pseudo random bytes in a byte buffer.\n */\nvar prf_TLS1 = function(secret, label, seed, length) {\n var rval = forge.util.createBuffer();\n\n /* For TLS 1.0, the secret is split in half, into two secrets of equal\n length. If the secret has an odd length then the last byte of the first\n half will be the same as the first byte of the second. The length of the\n two secrets is half of the secret rounded up. */\n var idx = (secret.length >> 1);\n var slen = idx + (secret.length & 1);\n var s1 = secret.substr(0, slen);\n var s2 = secret.substr(idx, slen);\n var ai = forge.util.createBuffer();\n var hmac = forge.hmac.create();\n seed = label + seed;\n\n // determine the number of iterations that must be performed to generate\n // enough output bytes, md5 creates 16 byte hashes, sha1 creates 20\n var md5itr = Math.ceil(length / 16);\n var sha1itr = Math.ceil(length / 20);\n\n // do md5 iterations\n hmac.start('MD5', s1);\n var md5bytes = forge.util.createBuffer();\n ai.putBytes(seed);\n for(var i = 0; i < md5itr; ++i) {\n // HMAC_hash(secret, A(i-1))\n hmac.start(null, null);\n hmac.update(ai.getBytes());\n ai.putBuffer(hmac.digest());\n\n // HMAC_hash(secret, A(i) + seed)\n hmac.start(null, null);\n hmac.update(ai.bytes() + seed);\n md5bytes.putBuffer(hmac.digest());\n }\n\n // do sha1 iterations\n hmac.start('SHA1', s2);\n var sha1bytes = forge.util.createBuffer();\n ai.clear();\n ai.putBytes(seed);\n for(var i = 0; i < sha1itr; ++i) {\n // HMAC_hash(secret, A(i-1))\n hmac.start(null, null);\n hmac.update(ai.getBytes());\n ai.putBuffer(hmac.digest());\n\n // HMAC_hash(secret, A(i) + seed)\n hmac.start(null, null);\n hmac.update(ai.bytes() + seed);\n sha1bytes.putBuffer(hmac.digest());\n }\n\n // XOR the md5 bytes with the sha1 bytes\n rval.putBytes(forge.util.xorBytes(\n md5bytes.getBytes(), sha1bytes.getBytes(), length));\n\n return rval;\n};\n\n/**\n * Generates pseudo random bytes using a SHA256 algorithm. For TLS 1.2.\n *\n * @param secret the secret to use.\n * @param label the label to use.\n * @param seed the seed value to use.\n * @param length the number of bytes to generate.\n *\n * @return the pseudo random bytes in a byte buffer.\n */\nvar prf_sha256 = function(secret, label, seed, length) {\n // FIXME: implement me for TLS 1.2\n};\n\n/**\n * Gets a MAC for a record using the SHA-1 hash algorithm.\n *\n * @param key the mac key.\n * @param state the sequence number (array of two 32-bit integers).\n * @param record the record.\n *\n * @return the sha-1 hash (20 bytes) for the given record.\n */\nvar hmac_sha1 = function(key, seqNum, record) {\n /* MAC is computed like so:\n HMAC_hash(\n key, seqNum +\n TLSCompressed.type +\n TLSCompressed.version +\n TLSCompressed.length +\n TLSCompressed.fragment)\n */\n var hmac = forge.hmac.create();\n hmac.start('SHA1', key);\n var b = forge.util.createBuffer();\n b.putInt32(seqNum[0]);\n b.putInt32(seqNum[1]);\n b.putByte(record.type);\n b.putByte(record.version.major);\n b.putByte(record.version.minor);\n b.putInt16(record.length);\n b.putBytes(record.fragment.bytes());\n hmac.update(b.getBytes());\n return hmac.digest().getBytes();\n};\n\n/**\n * Compresses the TLSPlaintext record into a TLSCompressed record using the\n * deflate algorithm.\n *\n * @param c the TLS connection.\n * @param record the TLSPlaintext record to compress.\n * @param s the ConnectionState to use.\n *\n * @return true on success, false on failure.\n */\nvar deflate = function(c, record, s) {\n var rval = false;\n\n try {\n var bytes = c.deflate(record.fragment.getBytes());\n record.fragment = forge.util.createBuffer(bytes);\n record.length = bytes.length;\n rval = true;\n } catch(ex) {\n // deflate error, fail out\n }\n\n return rval;\n};\n\n/**\n * Decompresses the TLSCompressed record into a TLSPlaintext record using the\n * deflate algorithm.\n *\n * @param c the TLS connection.\n * @param record the TLSCompressed record to decompress.\n * @param s the ConnectionState to use.\n *\n * @return true on success, false on failure.\n */\nvar inflate = function(c, record, s) {\n var rval = false;\n\n try {\n var bytes = c.inflate(record.fragment.getBytes());\n record.fragment = forge.util.createBuffer(bytes);\n record.length = bytes.length;\n rval = true;\n } catch(ex) {\n // inflate error, fail out\n }\n\n return rval;\n};\n\n/**\n * Reads a TLS variable-length vector from a byte buffer.\n *\n * Variable-length vectors are defined by specifying a subrange of legal\n * lengths, inclusively, using the notation <floor..ceiling>. When these are\n * encoded, the actual length precedes the vector's contents in the byte\n * stream. The length will be in the form of a number consuming as many bytes\n * as required to hold the vector's specified maximum (ceiling) length. A\n * variable-length vector with an actual length field of zero is referred to\n * as an empty vector.\n *\n * @param b the byte buffer.\n * @param lenBytes the number of bytes required to store the length.\n *\n * @return the resulting byte buffer.\n */\nvar readVector = function(b, lenBytes) {\n var len = 0;\n switch(lenBytes) {\n case 1:\n len = b.getByte();\n break;\n case 2:\n len = b.getInt16();\n break;\n case 3:\n len = b.getInt24();\n break;\n case 4:\n len = b.getInt32();\n break;\n }\n\n // read vector bytes into a new buffer\n return forge.util.createBuffer(b.getBytes(len));\n};\n\n/**\n * Writes a TLS variable-length vector to a byte buffer.\n *\n * @param b the byte buffer.\n * @param lenBytes the number of bytes required to store the length.\n * @param v the byte buffer vector.\n */\nvar writeVector = function(b, lenBytes, v) {\n // encode length at the start of the vector, where the number of bytes for\n // the length is the maximum number of bytes it would take to encode the\n // vector's ceiling\n b.putInt(v.length(), lenBytes << 3);\n b.putBuffer(v);\n};\n\n/**\n * The tls implementation.\n */\nvar tls = {};\n\n/**\n * Version: TLS 1.2 = 3.3, TLS 1.1 = 3.2, TLS 1.0 = 3.1. Both TLS 1.1 and\n * TLS 1.2 were still too new (ie: openSSL didn't implement them) at the time\n * of this implementation so TLS 1.0 was implemented instead.\n */\ntls.Versions = {\n TLS_1_0: {major: 3, minor: 1},\n TLS_1_1: {major: 3, minor: 2},\n TLS_1_2: {major: 3, minor: 3}\n};\ntls.SupportedVersions = [\n tls.Versions.TLS_1_1,\n tls.Versions.TLS_1_0\n];\ntls.Version = tls.SupportedVersions[0];\n\n/**\n * Maximum fragment size. True maximum is 16384, but we fragment before that\n * to allow for unusual small increases during compression.\n */\ntls.MaxFragment = 16384 - 1024;\n\n/**\n * Whether this entity is considered the \"client\" or \"server\".\n * enum { server, client } ConnectionEnd;\n */\ntls.ConnectionEnd = {\n server: 0,\n client: 1\n};\n\n/**\n * Pseudo-random function algorithm used to generate keys from the master\n * secret.\n * enum { tls_prf_sha256 } PRFAlgorithm;\n */\ntls.PRFAlgorithm = {\n tls_prf_sha256: 0\n};\n\n/**\n * Bulk encryption algorithms.\n * enum { null, rc4, des3, aes } BulkCipherAlgorithm;\n */\ntls.BulkCipherAlgorithm = {\n none: null,\n rc4: 0,\n des3: 1,\n aes: 2\n};\n\n/**\n * Cipher types.\n * enum { stream, block, aead } CipherType;\n */\ntls.CipherType = {\n stream: 0,\n block: 1,\n aead: 2\n};\n\n/**\n * MAC (Message Authentication Code) algorithms.\n * enum { null, hmac_md5, hmac_sha1, hmac_sha256,\n * hmac_sha384, hmac_sha512} MACAlgorithm;\n */\ntls.MACAlgorithm = {\n none: null,\n hmac_md5: 0,\n hmac_sha1: 1,\n hmac_sha256: 2,\n hmac_sha384: 3,\n hmac_sha512: 4\n};\n\n/**\n * Compression algorithms.\n * enum { null(0), deflate(1), (255) } CompressionMethod;\n */\ntls.CompressionMethod = {\n none: 0,\n deflate: 1\n};\n\n/**\n * TLS record content types.\n * enum {\n * change_cipher_spec(20), alert(21), handshake(22),\n * application_data(23), (255)\n * } ContentType;\n */\ntls.ContentType = {\n change_cipher_spec: 20,\n alert: 21,\n handshake: 22,\n application_data: 23,\n heartbeat: 24\n};\n\n/**\n * TLS handshake types.\n * enum {\n * hello_request(0), client_hello(1), server_hello(2),\n * certificate(11), server_key_exchange (12),\n * certificate_request(13), server_hello_done(14),\n * certificate_verify(15), client_key_exchange(16),\n * finished(20), (255)\n * } HandshakeType;\n */\ntls.HandshakeType = {\n hello_request: 0,\n client_hello: 1,\n server_hello: 2,\n certificate: 11,\n server_key_exchange: 12,\n certificate_request: 13,\n server_hello_done: 14,\n certificate_verify: 15,\n client_key_exchange: 16,\n finished: 20\n};\n\n/**\n * TLS Alert Protocol.\n *\n * enum { warning(1), fatal(2), (255) } AlertLevel;\n *\n * enum {\n * close_notify(0),\n * unexpected_message(10),\n * bad_record_mac(20),\n * decryption_failed(21),\n * record_overflow(22),\n * decompression_failure(30),\n * handshake_failure(40),\n * bad_certificate(42),\n * unsupported_certificate(43),\n * certificate_revoked(44),\n * certificate_expired(45),\n * certificate_unknown(46),\n * illegal_parameter(47),\n * unknown_ca(48),\n * access_denied(49),\n * decode_error(50),\n * decrypt_error(51),\n * export_restriction(60),\n * protocol_version(70),\n * insufficient_security(71),\n * internal_error(80),\n * user_canceled(90),\n * no_renegotiation(100),\n * (255)\n * } AlertDescription;\n *\n * struct {\n * AlertLevel level;\n * AlertDescription description;\n * } Alert;\n */\ntls.Alert = {};\ntls.Alert.Level = {\n warning: 1,\n fatal: 2\n};\ntls.Alert.Description = {\n close_notify: 0,\n unexpected_message: 10,\n bad_record_mac: 20,\n decryption_failed: 21,\n record_overflow: 22,\n decompression_failure: 30,\n handshake_failure: 40,\n bad_certificate: 42,\n unsupported_certificate: 43,\n certificate_revoked: 44,\n certificate_expired: 45,\n certificate_unknown: 46,\n illegal_parameter: 47,\n unknown_ca: 48,\n access_denied: 49,\n decode_error: 50,\n decrypt_error: 51,\n export_restriction: 60,\n protocol_version: 70,\n insufficient_security: 71,\n internal_error: 80,\n user_canceled: 90,\n no_renegotiation: 100\n};\n\n/**\n * TLS Heartbeat Message types.\n * enum {\n * heartbeat_request(1),\n * heartbeat_response(2),\n * (255)\n * } HeartbeatMessageType;\n */\ntls.HeartbeatMessageType = {\n heartbeat_request: 1,\n heartbeat_response: 2\n};\n\n/**\n * Supported cipher suites.\n */\ntls.CipherSuites = {};\n\n/**\n * Gets a supported cipher suite from its 2 byte ID.\n *\n * @param twoBytes two bytes in a string.\n *\n * @return the matching supported cipher suite or null.\n */\ntls.getCipherSuite = function(twoBytes) {\n var rval = null;\n for(var key in tls.CipherSuites) {\n var cs = tls.CipherSuites[key];\n if(cs.id[0] === twoBytes.charCodeAt(0) &&\n cs.id[1] === twoBytes.charCodeAt(1)) {\n rval = cs;\n break;\n }\n }\n return rval;\n};\n\n/**\n * Called when an unexpected record is encountered.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleUnexpected = function(c, record) {\n // if connection is client and closed, ignore unexpected messages\n var ignore = (!c.open && c.entity === tls.ConnectionEnd.client);\n if(!ignore) {\n c.error(c, {\n message: 'Unexpected message. Received TLS record out of order.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.unexpected_message\n }\n });\n }\n};\n\n/**\n * Called when a client receives a HelloRequest record.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleHelloRequest = function(c, record, length) {\n // ignore renegotiation requests from the server during a handshake, but\n // if handshaking, send a warning alert that renegotation is denied\n if(!c.handshaking && c.handshakes > 0) {\n // send alert warning\n tls.queue(c, tls.createAlert(c, {\n level: tls.Alert.Level.warning,\n description: tls.Alert.Description.no_renegotiation\n }));\n tls.flush(c);\n }\n\n // continue\n c.process();\n};\n\n/**\n * Parses a hello message from a ClientHello or ServerHello record.\n *\n * @param record the record to parse.\n *\n * @return the parsed message.\n */\ntls.parseHelloMessage = function(c, record, length) {\n var msg = null;\n\n var client = (c.entity === tls.ConnectionEnd.client);\n\n // minimum of 38 bytes in message\n if(length < 38) {\n c.error(c, {\n message: client ?\n 'Invalid ServerHello message. Message too short.' :\n 'Invalid ClientHello message. Message too short.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n } else {\n // use 'remaining' to calculate # of remaining bytes in the message\n var b = record.fragment;\n var remaining = b.length();\n msg = {\n version: {\n major: b.getByte(),\n minor: b.getByte()\n },\n random: forge.util.createBuffer(b.getBytes(32)),\n session_id: readVector(b, 1),\n extensions: []\n };\n if(client) {\n msg.cipher_suite = b.getBytes(2);\n msg.compression_method = b.getByte();\n } else {\n msg.cipher_suites = readVector(b, 2);\n msg.compression_methods = readVector(b, 1);\n }\n\n // read extensions if there are any bytes left in the message\n remaining = length - (remaining - b.length());\n if(remaining > 0) {\n // parse extensions\n var exts = readVector(b, 2);\n while(exts.length() > 0) {\n msg.extensions.push({\n type: [exts.getByte(), exts.getByte()],\n data: readVector(exts, 2)\n });\n }\n\n // TODO: make extension support modular\n if(!client) {\n for(var i = 0; i < msg.extensions.length; ++i) {\n var ext = msg.extensions[i];\n\n // support SNI extension\n if(ext.type[0] === 0x00 && ext.type[1] === 0x00) {\n // get server name list\n var snl = readVector(ext.data, 2);\n while(snl.length() > 0) {\n // read server name type\n var snType = snl.getByte();\n\n // only HostName type (0x00) is known, break out if\n // another type is detected\n if(snType !== 0x00) {\n break;\n }\n\n // add host name to server name list\n c.session.extensions.server_name.serverNameList.push(\n readVector(snl, 2).getBytes());\n }\n }\n }\n }\n }\n\n // version already set, do not allow version change\n if(c.session.version) {\n if(msg.version.major !== c.session.version.major ||\n msg.version.minor !== c.session.version.minor) {\n return c.error(c, {\n message: 'TLS version change is disallowed during renegotiation.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.protocol_version\n }\n });\n }\n }\n\n // get the chosen (ServerHello) cipher suite\n if(client) {\n // FIXME: should be checking configured acceptable cipher suites\n c.session.cipherSuite = tls.getCipherSuite(msg.cipher_suite);\n } else {\n // get a supported preferred (ClientHello) cipher suite\n // choose the first supported cipher suite\n var tmp = forge.util.createBuffer(msg.cipher_suites.bytes());\n while(tmp.length() > 0) {\n // FIXME: should be checking configured acceptable suites\n // cipher suites take up 2 bytes\n c.session.cipherSuite = tls.getCipherSuite(tmp.getBytes(2));\n if(c.session.cipherSuite !== null) {\n break;\n }\n }\n }\n\n // cipher suite not supported\n if(c.session.cipherSuite === null) {\n return c.error(c, {\n message: 'No cipher suites in common.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.handshake_failure\n },\n cipherSuite: forge.util.bytesToHex(msg.cipher_suite)\n });\n }\n\n // TODO: handle compression methods\n if(client) {\n c.session.compressionMethod = msg.compression_method;\n } else {\n // no compression\n c.session.compressionMethod = tls.CompressionMethod.none;\n }\n }\n\n return msg;\n};\n\n/**\n * Creates security parameters for the given connection based on the given\n * hello message.\n *\n * @param c the TLS connection.\n * @param msg the hello message.\n */\ntls.createSecurityParameters = function(c, msg) {\n /* Note: security params are from TLS 1.2, some values like prf_algorithm\n are ignored for TLS 1.0/1.1 and the builtin as specified in the spec is\n used. */\n\n // TODO: handle other options from server when more supported\n\n // get client and server randoms\n var client = (c.entity === tls.ConnectionEnd.client);\n var msgRandom = msg.random.bytes();\n var cRandom = client ? c.session.sp.client_random : msgRandom;\n var sRandom = client ? msgRandom : tls.createRandom().getBytes();\n\n // create new security parameters\n c.session.sp = {\n entity: c.entity,\n prf_algorithm: tls.PRFAlgorithm.tls_prf_sha256,\n bulk_cipher_algorithm: null,\n cipher_type: null,\n enc_key_length: null,\n block_length: null,\n fixed_iv_length: null,\n record_iv_length: null,\n mac_algorithm: null,\n mac_length: null,\n mac_key_length: null,\n compression_algorithm: c.session.compressionMethod,\n pre_master_secret: null,\n master_secret: null,\n client_random: cRandom,\n server_random: sRandom\n };\n};\n\n/**\n * Called when a client receives a ServerHello record.\n *\n * When a ServerHello message will be sent:\n * The server will send this message in response to a client hello message\n * when it was able to find an acceptable set of algorithms. If it cannot\n * find such a match, it will respond with a handshake failure alert.\n *\n * uint24 length;\n * struct {\n * ProtocolVersion server_version;\n * Random random;\n * SessionID session_id;\n * CipherSuite cipher_suite;\n * CompressionMethod compression_method;\n * select(extensions_present) {\n * case false:\n * struct {};\n * case true:\n * Extension extensions<0..2^16-1>;\n * };\n * } ServerHello;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleServerHello = function(c, record, length) {\n var msg = tls.parseHelloMessage(c, record, length);\n if(c.fail) {\n return;\n }\n\n // ensure server version is compatible\n if(msg.version.minor <= c.version.minor) {\n c.version.minor = msg.version.minor;\n } else {\n return c.error(c, {\n message: 'Incompatible TLS version.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.protocol_version\n }\n });\n }\n\n // indicate session version has been set\n c.session.version = c.version;\n\n // get the session ID from the message\n var sessionId = msg.session_id.bytes();\n\n // if the session ID is not blank and matches the cached one, resume\n // the session\n if(sessionId.length > 0 && sessionId === c.session.id) {\n // resuming session, expect a ChangeCipherSpec next\n c.expect = SCC;\n c.session.resuming = true;\n\n // get new server random\n c.session.sp.server_random = msg.random.bytes();\n } else {\n // not resuming, expect a server Certificate message next\n c.expect = SCE;\n c.session.resuming = false;\n\n // create new security parameters\n tls.createSecurityParameters(c, msg);\n }\n\n // set new session ID\n c.session.id = sessionId;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a server receives a ClientHello record.\n *\n * When a ClientHello message will be sent:\n * When a client first connects to a server it is required to send the\n * client hello as its first message. The client can also send a client\n * hello in response to a hello request or on its own initiative in order\n * to renegotiate the security parameters in an existing connection.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleClientHello = function(c, record, length) {\n var msg = tls.parseHelloMessage(c, record, length);\n if(c.fail) {\n return;\n }\n\n // get the session ID from the message\n var sessionId = msg.session_id.bytes();\n\n // see if the given session ID is in the cache\n var session = null;\n if(c.sessionCache) {\n session = c.sessionCache.getSession(sessionId);\n if(session === null) {\n // session ID not found\n sessionId = '';\n } else if(session.version.major !== msg.version.major ||\n session.version.minor > msg.version.minor) {\n // if session version is incompatible with client version, do not resume\n session = null;\n sessionId = '';\n }\n }\n\n // no session found to resume, generate a new session ID\n if(sessionId.length === 0) {\n sessionId = forge.random.getBytes(32);\n }\n\n // update session\n c.session.id = sessionId;\n c.session.clientHelloVersion = msg.version;\n c.session.sp = {};\n if(session) {\n // use version and security parameters from resumed session\n c.version = c.session.version = session.version;\n c.session.sp = session.sp;\n } else {\n // use highest compatible minor version\n var version;\n for(var i = 1; i < tls.SupportedVersions.length; ++i) {\n version = tls.SupportedVersions[i];\n if(version.minor <= msg.version.minor) {\n break;\n }\n }\n c.version = {major: version.major, minor: version.minor};\n c.session.version = c.version;\n }\n\n // if a session is set, resume it\n if(session !== null) {\n // resuming session, expect a ChangeCipherSpec next\n c.expect = CCC;\n c.session.resuming = true;\n\n // get new client random\n c.session.sp.client_random = msg.random.bytes();\n } else {\n // not resuming, expect a Certificate or ClientKeyExchange\n c.expect = (c.verifyClient !== false) ? CCE : CKE;\n c.session.resuming = false;\n\n // create new security parameters\n tls.createSecurityParameters(c, msg);\n }\n\n // connection now open\n c.open = true;\n\n // queue server hello\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createServerHello(c)\n }));\n\n if(c.session.resuming) {\n // queue change cipher spec message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.change_cipher_spec,\n data: tls.createChangeCipherSpec()\n }));\n\n // create pending state\n c.state.pending = tls.createConnectionState(c);\n\n // change current write state to pending write state\n c.state.current.write = c.state.pending.write;\n\n // queue finished\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createFinished(c)\n }));\n } else {\n // queue server certificate\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createCertificate(c)\n }));\n\n if(!c.fail) {\n // queue server key exchange\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createServerKeyExchange(c)\n }));\n\n // request client certificate if set\n if(c.verifyClient !== false) {\n // queue certificate request\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createCertificateRequest(c)\n }));\n }\n\n // queue server hello done\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createServerHelloDone(c)\n }));\n }\n }\n\n // send records\n tls.flush(c);\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a Certificate record.\n *\n * When this message will be sent:\n * The server must send a certificate whenever the agreed-upon key exchange\n * method is not an anonymous one. This message will always immediately\n * follow the server hello message.\n *\n * Meaning of this message:\n * The certificate type must be appropriate for the selected cipher suite's\n * key exchange algorithm, and is generally an X.509v3 certificate. It must\n * contain a key which matches the key exchange method, as follows. Unless\n * otherwise specified, the signing algorithm for the certificate must be\n * the same as the algorithm for the certificate key. Unless otherwise\n * specified, the public key may be of any length.\n *\n * opaque ASN.1Cert<1..2^24-1>;\n * struct {\n * ASN.1Cert certificate_list<1..2^24-1>;\n * } Certificate;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleCertificate = function(c, record, length) {\n // minimum of 3 bytes in message\n if(length < 3) {\n return c.error(c, {\n message: 'Invalid Certificate message. Message too short.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n }\n\n var b = record.fragment;\n var msg = {\n certificate_list: readVector(b, 3)\n };\n\n /* The sender's certificate will be first in the list (chain), each\n subsequent one that follows will certify the previous one, but root\n certificates (self-signed) that specify the certificate authority may\n be omitted under the assumption that clients must already possess it. */\n var cert, asn1;\n var certs = [];\n try {\n while(msg.certificate_list.length() > 0) {\n // each entry in msg.certificate_list is a vector with 3 len bytes\n cert = readVector(msg.certificate_list, 3);\n asn1 = forge.asn1.fromDer(cert);\n cert = forge.pki.certificateFromAsn1(asn1, true);\n certs.push(cert);\n }\n } catch(ex) {\n return c.error(c, {\n message: 'Could not parse certificate list.',\n cause: ex,\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.bad_certificate\n }\n });\n }\n\n // ensure at least 1 certificate was provided if in client-mode\n // or if verifyClient was set to true to require a certificate\n // (as opposed to 'optional')\n var client = (c.entity === tls.ConnectionEnd.client);\n if((client || c.verifyClient === true) && certs.length === 0) {\n // error, no certificate\n c.error(c, {\n message: client ?\n 'No server certificate provided.' :\n 'No client certificate provided.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n } else if(certs.length === 0) {\n // no certs to verify\n // expect a ServerKeyExchange or ClientKeyExchange message next\n c.expect = client ? SKE : CKE;\n } else {\n // save certificate in session\n if(client) {\n c.session.serverCertificate = certs[0];\n } else {\n c.session.clientCertificate = certs[0];\n }\n\n if(tls.verifyCertificateChain(c, certs)) {\n // expect a ServerKeyExchange or ClientKeyExchange message next\n c.expect = client ? SKE : CKE;\n }\n }\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a ServerKeyExchange record.\n *\n * When this message will be sent:\n * This message will be sent immediately after the server certificate\n * message (or the server hello message, if this is an anonymous\n * negotiation).\n *\n * The server key exchange message is sent by the server only when the\n * server certificate message (if sent) does not contain enough data to\n * allow the client to exchange a premaster secret.\n *\n * Meaning of this message:\n * This message conveys cryptographic information to allow the client to\n * communicate the premaster secret: either an RSA public key to encrypt\n * the premaster secret with, or a Diffie-Hellman public key with which the\n * client can complete a key exchange (with the result being the premaster\n * secret.)\n *\n * enum {\n * dhe_dss, dhe_rsa, dh_anon, rsa, dh_dss, dh_rsa\n * } KeyExchangeAlgorithm;\n *\n * struct {\n * opaque dh_p<1..2^16-1>;\n * opaque dh_g<1..2^16-1>;\n * opaque dh_Ys<1..2^16-1>;\n * } ServerDHParams;\n *\n * struct {\n * select(KeyExchangeAlgorithm) {\n * case dh_anon:\n * ServerDHParams params;\n * case dhe_dss:\n * case dhe_rsa:\n * ServerDHParams params;\n * digitally-signed struct {\n * opaque client_random[32];\n * opaque server_random[32];\n * ServerDHParams params;\n * } signed_params;\n * case rsa:\n * case dh_dss:\n * case dh_rsa:\n * struct {};\n * };\n * } ServerKeyExchange;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleServerKeyExchange = function(c, record, length) {\n // this implementation only supports RSA, no Diffie-Hellman support\n // so any length > 0 is invalid\n if(length > 0) {\n return c.error(c, {\n message: 'Invalid key parameters. Only RSA is supported.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.unsupported_certificate\n }\n });\n }\n\n // expect an optional CertificateRequest message next\n c.expect = SCR;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a ClientKeyExchange record.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleClientKeyExchange = function(c, record, length) {\n // this implementation only supports RSA, no Diffie-Hellman support\n // so any length < 48 is invalid\n if(length < 48) {\n return c.error(c, {\n message: 'Invalid key parameters. Only RSA is supported.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.unsupported_certificate\n }\n });\n }\n\n var b = record.fragment;\n var msg = {\n enc_pre_master_secret: readVector(b, 2).getBytes()\n };\n\n // do rsa decryption\n var privateKey = null;\n if(c.getPrivateKey) {\n try {\n privateKey = c.getPrivateKey(c, c.session.serverCertificate);\n privateKey = forge.pki.privateKeyFromPem(privateKey);\n } catch(ex) {\n c.error(c, {\n message: 'Could not get private key.',\n cause: ex,\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n }\n }\n\n if(privateKey === null) {\n return c.error(c, {\n message: 'No private key set.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n }\n\n try {\n // decrypt 48-byte pre-master secret\n var sp = c.session.sp;\n sp.pre_master_secret = privateKey.decrypt(msg.enc_pre_master_secret);\n\n // ensure client hello version matches first 2 bytes\n var version = c.session.clientHelloVersion;\n if(version.major !== sp.pre_master_secret.charCodeAt(0) ||\n version.minor !== sp.pre_master_secret.charCodeAt(1)) {\n // error, do not send alert (see BLEI attack below)\n throw new Error('TLS version rollback attack detected.');\n }\n } catch(ex) {\n /* Note: Daniel Bleichenbacher [BLEI] can be used to attack a\n TLS server which is using PKCS#1 encoded RSA, so instead of\n failing here, we generate 48 random bytes and use that as\n the pre-master secret. */\n sp.pre_master_secret = forge.random.getBytes(48);\n }\n\n // expect a CertificateVerify message if a Certificate was received that\n // does not have fixed Diffie-Hellman params, otherwise expect\n // ChangeCipherSpec\n c.expect = CCC;\n if(c.session.clientCertificate !== null) {\n // only RSA support, so expect CertificateVerify\n // TODO: support Diffie-Hellman\n c.expect = CCV;\n }\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a CertificateRequest record.\n *\n * When this message will be sent:\n * A non-anonymous server can optionally request a certificate from the\n * client, if appropriate for the selected cipher suite. This message, if\n * sent, will immediately follow the Server Key Exchange message (if it is\n * sent; otherwise, the Server Certificate message).\n *\n * enum {\n * rsa_sign(1), dss_sign(2), rsa_fixed_dh(3), dss_fixed_dh(4),\n * rsa_ephemeral_dh_RESERVED(5), dss_ephemeral_dh_RESERVED(6),\n * fortezza_dms_RESERVED(20), (255)\n * } ClientCertificateType;\n *\n * opaque DistinguishedName<1..2^16-1>;\n *\n * struct {\n * ClientCertificateType certificate_types<1..2^8-1>;\n * SignatureAndHashAlgorithm supported_signature_algorithms<2^16-1>;\n * DistinguishedName certificate_authorities<0..2^16-1>;\n * } CertificateRequest;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleCertificateRequest = function(c, record, length) {\n // minimum of 3 bytes in message\n if(length < 3) {\n return c.error(c, {\n message: 'Invalid CertificateRequest. Message too short.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n }\n\n // TODO: TLS 1.2+ has different format including\n // SignatureAndHashAlgorithm after cert types\n var b = record.fragment;\n var msg = {\n certificate_types: readVector(b, 1),\n certificate_authorities: readVector(b, 2)\n };\n\n // save certificate request in session\n c.session.certificateRequest = msg;\n\n // expect a ServerHelloDone message next\n c.expect = SHD;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a server receives a CertificateVerify record.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleCertificateVerify = function(c, record, length) {\n if(length < 2) {\n return c.error(c, {\n message: 'Invalid CertificateVerify. Message too short.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n }\n\n // rewind to get full bytes for message so it can be manually\n // digested below (special case for CertificateVerify messages because\n // they must be digested *after* handling as opposed to all others)\n var b = record.fragment;\n b.read -= 4;\n var msgBytes = b.bytes();\n b.read += 4;\n\n var msg = {\n signature: readVector(b, 2).getBytes()\n };\n\n // TODO: add support for DSA\n\n // generate data to verify\n var verify = forge.util.createBuffer();\n verify.putBuffer(c.session.md5.digest());\n verify.putBuffer(c.session.sha1.digest());\n verify = verify.getBytes();\n\n try {\n var cert = c.session.clientCertificate;\n /*b = forge.pki.rsa.decrypt(\n msg.signature, cert.publicKey, true, verify.length);\n if(b !== verify) {*/\n if(!cert.publicKey.verify(verify, msg.signature, 'NONE')) {\n throw new Error('CertificateVerify signature does not match.');\n }\n\n // digest message now that it has been handled\n c.session.md5.update(msgBytes);\n c.session.sha1.update(msgBytes);\n } catch(ex) {\n return c.error(c, {\n message: 'Bad signature in CertificateVerify.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.handshake_failure\n }\n });\n }\n\n // expect ChangeCipherSpec\n c.expect = CCC;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a ServerHelloDone record.\n *\n * When this message will be sent:\n * The server hello done message is sent by the server to indicate the end\n * of the server hello and associated messages. After sending this message\n * the server will wait for a client response.\n *\n * Meaning of this message:\n * This message means that the server is done sending messages to support\n * the key exchange, and the client can proceed with its phase of the key\n * exchange.\n *\n * Upon receipt of the server hello done message the client should verify\n * that the server provided a valid certificate if required and check that\n * the server hello parameters are acceptable.\n *\n * struct {} ServerHelloDone;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleServerHelloDone = function(c, record, length) {\n // len must be 0 bytes\n if(length > 0) {\n return c.error(c, {\n message: 'Invalid ServerHelloDone message. Invalid length.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.record_overflow\n }\n });\n }\n\n if(c.serverCertificate === null) {\n // no server certificate was provided\n var error = {\n message: 'No server certificate provided. Not enough security.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.insufficient_security\n }\n };\n\n // call application callback\n var depth = 0;\n var ret = c.verify(c, error.alert.description, depth, []);\n if(ret !== true) {\n // check for custom alert info\n if(ret || ret === 0) {\n // set custom message and alert description\n if(typeof ret === 'object' && !forge.util.isArray(ret)) {\n if(ret.message) {\n error.message = ret.message;\n }\n if(ret.alert) {\n error.alert.description = ret.alert;\n }\n } else if(typeof ret === 'number') {\n // set custom alert description\n error.alert.description = ret;\n }\n }\n\n // send error\n return c.error(c, error);\n }\n }\n\n // create client certificate message if requested\n if(c.session.certificateRequest !== null) {\n record = tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createCertificate(c)\n });\n tls.queue(c, record);\n }\n\n // create client key exchange message\n record = tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createClientKeyExchange(c)\n });\n tls.queue(c, record);\n\n // expect no messages until the following callback has been called\n c.expect = SER;\n\n // create callback to handle client signature (for client-certs)\n var callback = function(c, signature) {\n if(c.session.certificateRequest !== null &&\n c.session.clientCertificate !== null) {\n // create certificate verify message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createCertificateVerify(c, signature)\n }));\n }\n\n // create change cipher spec message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.change_cipher_spec,\n data: tls.createChangeCipherSpec()\n }));\n\n // create pending state\n c.state.pending = tls.createConnectionState(c);\n\n // change current write state to pending write state\n c.state.current.write = c.state.pending.write;\n\n // create finished message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createFinished(c)\n }));\n\n // expect a server ChangeCipherSpec message next\n c.expect = SCC;\n\n // send records\n tls.flush(c);\n\n // continue\n c.process();\n };\n\n // if there is no certificate request or no client certificate, do\n // callback immediately\n if(c.session.certificateRequest === null ||\n c.session.clientCertificate === null) {\n return callback(c, null);\n }\n\n // otherwise get the client signature\n tls.getClientSignature(c, callback);\n};\n\n/**\n * Called when a ChangeCipherSpec record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleChangeCipherSpec = function(c, record) {\n if(record.fragment.getByte() !== 0x01) {\n return c.error(c, {\n message: 'Invalid ChangeCipherSpec message received.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n }\n\n // create pending state if:\n // 1. Resuming session in client mode OR\n // 2. NOT resuming session in server mode\n var client = (c.entity === tls.ConnectionEnd.client);\n if((c.session.resuming && client) || (!c.session.resuming && !client)) {\n c.state.pending = tls.createConnectionState(c);\n }\n\n // change current read state to pending read state\n c.state.current.read = c.state.pending.read;\n\n // clear pending state if:\n // 1. NOT resuming session in client mode OR\n // 2. resuming a session in server mode\n if((!c.session.resuming && client) || (c.session.resuming && !client)) {\n c.state.pending = null;\n }\n\n // expect a Finished record next\n c.expect = client ? SFI : CFI;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a Finished record is received.\n *\n * When this message will be sent:\n * A finished message is always sent immediately after a change\n * cipher spec message to verify that the key exchange and\n * authentication processes were successful. It is essential that a\n * change cipher spec message be received between the other\n * handshake messages and the Finished message.\n *\n * Meaning of this message:\n * The finished message is the first protected with the just-\n * negotiated algorithms, keys, and secrets. Recipients of finished\n * messages must verify that the contents are correct. Once a side\n * has sent its Finished message and received and validated the\n * Finished message from its peer, it may begin to send and receive\n * application data over the connection.\n *\n * struct {\n * opaque verify_data[verify_data_length];\n * } Finished;\n *\n * verify_data\n * PRF(master_secret, finished_label, Hash(handshake_messages))\n * [0..verify_data_length-1];\n *\n * finished_label\n * For Finished messages sent by the client, the string\n * \"client finished\". For Finished messages sent by the server, the\n * string \"server finished\".\n *\n * verify_data_length depends on the cipher suite. If it is not specified\n * by the cipher suite, then it is 12. Versions of TLS < 1.2 always used\n * 12 bytes.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleFinished = function(c, record, length) {\n // rewind to get full bytes for message so it can be manually\n // digested below (special case for Finished messages because they\n // must be digested *after* handling as opposed to all others)\n var b = record.fragment;\n b.read -= 4;\n var msgBytes = b.bytes();\n b.read += 4;\n\n // message contains only verify_data\n var vd = record.fragment.getBytes();\n\n // ensure verify data is correct\n b = forge.util.createBuffer();\n b.putBuffer(c.session.md5.digest());\n b.putBuffer(c.session.sha1.digest());\n\n // set label based on entity type\n var client = (c.entity === tls.ConnectionEnd.client);\n var label = client ? 'server finished' : 'client finished';\n\n // TODO: determine prf function and verify length for TLS 1.2\n var sp = c.session.sp;\n var vdl = 12;\n var prf = prf_TLS1;\n b = prf(sp.master_secret, label, b.getBytes(), vdl);\n if(b.getBytes() !== vd) {\n return c.error(c, {\n message: 'Invalid verify_data in Finished message.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.decrypt_error\n }\n });\n }\n\n // digest finished message now that it has been handled\n c.session.md5.update(msgBytes);\n c.session.sha1.update(msgBytes);\n\n // resuming session as client or NOT resuming session as server\n if((c.session.resuming && client) || (!c.session.resuming && !client)) {\n // create change cipher spec message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.change_cipher_spec,\n data: tls.createChangeCipherSpec()\n }));\n\n // change current write state to pending write state, clear pending\n c.state.current.write = c.state.pending.write;\n c.state.pending = null;\n\n // create finished message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createFinished(c)\n }));\n }\n\n // expect application data next\n c.expect = client ? SAD : CAD;\n\n // handshake complete\n c.handshaking = false;\n ++c.handshakes;\n\n // save access to peer certificate\n c.peerCertificate = client ?\n c.session.serverCertificate : c.session.clientCertificate;\n\n // send records\n tls.flush(c);\n\n // now connected\n c.isConnected = true;\n c.connected(c);\n\n // continue\n c.process();\n};\n\n/**\n * Called when an Alert record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleAlert = function(c, record) {\n // read alert\n var b = record.fragment;\n var alert = {\n level: b.getByte(),\n description: b.getByte()\n };\n\n // TODO: consider using a table?\n // get appropriate message\n var msg;\n switch(alert.description) {\n case tls.Alert.Description.close_notify:\n msg = 'Connection closed.';\n break;\n case tls.Alert.Description.unexpected_message:\n msg = 'Unexpected message.';\n break;\n case tls.Alert.Description.bad_record_mac:\n msg = 'Bad record MAC.';\n break;\n case tls.Alert.Description.decryption_failed:\n msg = 'Decryption failed.';\n break;\n case tls.Alert.Description.record_overflow:\n msg = 'Record overflow.';\n break;\n case tls.Alert.Description.decompression_failure:\n msg = 'Decompression failed.';\n break;\n case tls.Alert.Description.handshake_failure:\n msg = 'Handshake failure.';\n break;\n case tls.Alert.Description.bad_certificate:\n msg = 'Bad certificate.';\n break;\n case tls.Alert.Description.unsupported_certificate:\n msg = 'Unsupported certificate.';\n break;\n case tls.Alert.Description.certificate_revoked:\n msg = 'Certificate revoked.';\n break;\n case tls.Alert.Description.certificate_expired:\n msg = 'Certificate expired.';\n break;\n case tls.Alert.Description.certificate_unknown:\n msg = 'Certificate unknown.';\n break;\n case tls.Alert.Description.illegal_parameter:\n msg = 'Illegal parameter.';\n break;\n case tls.Alert.Description.unknown_ca:\n msg = 'Unknown certificate authority.';\n break;\n case tls.Alert.Description.access_denied:\n msg = 'Access denied.';\n break;\n case tls.Alert.Description.decode_error:\n msg = 'Decode error.';\n break;\n case tls.Alert.Description.decrypt_error:\n msg = 'Decrypt error.';\n break;\n case tls.Alert.Description.export_restriction:\n msg = 'Export restriction.';\n break;\n case tls.Alert.Description.protocol_version:\n msg = 'Unsupported protocol version.';\n break;\n case tls.Alert.Description.insufficient_security:\n msg = 'Insufficient security.';\n break;\n case tls.Alert.Description.internal_error:\n msg = 'Internal error.';\n break;\n case tls.Alert.Description.user_canceled:\n msg = 'User canceled.';\n break;\n case tls.Alert.Description.no_renegotiation:\n msg = 'Renegotiation not supported.';\n break;\n default:\n msg = 'Unknown error.';\n break;\n }\n\n // close connection on close_notify, not an error\n if(alert.description === tls.Alert.Description.close_notify) {\n return c.close();\n }\n\n // call error handler\n c.error(c, {\n message: msg,\n send: false,\n // origin is the opposite end\n origin: (c.entity === tls.ConnectionEnd.client) ? 'server' : 'client',\n alert: alert\n });\n\n // continue\n c.process();\n};\n\n/**\n * Called when a Handshake record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleHandshake = function(c, record) {\n // get the handshake type and message length\n var b = record.fragment;\n var type = b.getByte();\n var length = b.getInt24();\n\n // see if the record fragment doesn't yet contain the full message\n if(length > b.length()) {\n // cache the record, clear its fragment, and reset the buffer read\n // pointer before the type and length were read\n c.fragmented = record;\n record.fragment = forge.util.createBuffer();\n b.read -= 4;\n\n // continue\n return c.process();\n }\n\n // full message now available, clear cache, reset read pointer to\n // before type and length\n c.fragmented = null;\n b.read -= 4;\n\n // save the handshake bytes for digestion after handler is found\n // (include type and length of handshake msg)\n var bytes = b.bytes(length + 4);\n\n // restore read pointer\n b.read += 4;\n\n // handle expected message\n if(type in hsTable[c.entity][c.expect]) {\n // initialize server session\n if(c.entity === tls.ConnectionEnd.server && !c.open && !c.fail) {\n c.handshaking = true;\n c.session = {\n version: null,\n extensions: {\n server_name: {\n serverNameList: []\n }\n },\n cipherSuite: null,\n compressionMethod: null,\n serverCertificate: null,\n clientCertificate: null,\n md5: forge.md.md5.create(),\n sha1: forge.md.sha1.create()\n };\n }\n\n /* Update handshake messages digest. Finished and CertificateVerify\n messages are not digested here. They can't be digested as part of\n the verify_data that they contain. These messages are manually\n digested in their handlers. HelloRequest messages are simply never\n included in the handshake message digest according to spec. */\n if(type !== tls.HandshakeType.hello_request &&\n type !== tls.HandshakeType.certificate_verify &&\n type !== tls.HandshakeType.finished) {\n c.session.md5.update(bytes);\n c.session.sha1.update(bytes);\n }\n\n // handle specific handshake type record\n hsTable[c.entity][c.expect][type](c, record, length);\n } else {\n // unexpected record\n tls.handleUnexpected(c, record);\n }\n};\n\n/**\n * Called when an ApplicationData record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleApplicationData = function(c, record) {\n // buffer data, notify that its ready\n c.data.putBuffer(record.fragment);\n c.dataReady(c);\n\n // continue\n c.process();\n};\n\n/**\n * Called when a Heartbeat record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleHeartbeat = function(c, record) {\n // get the heartbeat type and payload\n var b = record.fragment;\n var type = b.getByte();\n var length = b.getInt16();\n var payload = b.getBytes(length);\n\n if(type === tls.HeartbeatMessageType.heartbeat_request) {\n // discard request during handshake or if length is too large\n if(c.handshaking || length > payload.length) {\n // continue\n return c.process();\n }\n // retransmit payload\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.heartbeat,\n data: tls.createHeartbeat(\n tls.HeartbeatMessageType.heartbeat_response, payload)\n }));\n tls.flush(c);\n } else if(type === tls.HeartbeatMessageType.heartbeat_response) {\n // check payload against expected payload, discard heartbeat if no match\n if(payload !== c.expectedHeartbeatPayload) {\n // continue\n return c.process();\n }\n\n // notify that a valid heartbeat was received\n if(c.heartbeatReceived) {\n c.heartbeatReceived(c, forge.util.createBuffer(payload));\n }\n }\n\n // continue\n c.process();\n};\n\n/**\n * The transistional state tables for receiving TLS records. It maps the\n * current TLS engine state and a received record to a function to handle the\n * record and update the state.\n *\n * For instance, if the current state is SHE, then the TLS engine is expecting\n * a ServerHello record. Once a record is received, the handler function is\n * looked up using the state SHE and the record's content type.\n *\n * The resulting function will either be an error handler or a record handler.\n * The function will take whatever action is appropriate and update the state\n * for the next record.\n *\n * The states are all based on possible server record types. Note that the\n * client will never specifically expect to receive a HelloRequest or an alert\n * from the server so there is no state that reflects this. These messages may\n * occur at any time.\n *\n * There are two tables for mapping states because there is a second tier of\n * types for handshake messages. Once a record with a content type of handshake\n * is received, the handshake record handler will look up the handshake type in\n * the secondary map to get its appropriate handler.\n *\n * Valid message orders are as follows:\n *\n * =======================FULL HANDSHAKE======================\n * Client Server\n *\n * ClientHello -------->\n * ServerHello\n * Certificate*\n * ServerKeyExchange*\n * CertificateRequest*\n * <-------- ServerHelloDone\n * Certificate*\n * ClientKeyExchange\n * CertificateVerify*\n * [ChangeCipherSpec]\n * Finished -------->\n * [ChangeCipherSpec]\n * <-------- Finished\n * Application Data <-------> Application Data\n *\n * =====================SESSION RESUMPTION=====================\n * Client Server\n *\n * ClientHello -------->\n * ServerHello\n * [ChangeCipherSpec]\n * <-------- Finished\n * [ChangeCipherSpec]\n * Finished -------->\n * Application Data <-------> Application Data\n */\n// client expect states (indicate which records are expected to be received)\nvar SHE = 0; // rcv server hello\nvar SCE = 1; // rcv server certificate\nvar SKE = 2; // rcv server key exchange\nvar SCR = 3; // rcv certificate request\nvar SHD = 4; // rcv server hello done\nvar SCC = 5; // rcv change cipher spec\nvar SFI = 6; // rcv finished\nvar SAD = 7; // rcv application data\nvar SER = 8; // not expecting any messages at this point\n\n// server expect states\nvar CHE = 0; // rcv client hello\nvar CCE = 1; // rcv client certificate\nvar CKE = 2; // rcv client key exchange\nvar CCV = 3; // rcv certificate verify\nvar CCC = 4; // rcv change cipher spec\nvar CFI = 5; // rcv finished\nvar CAD = 6; // rcv application data\nvar CER = 7; // not expecting any messages at this point\n\n// map client current expect state and content type to function\nvar __ = tls.handleUnexpected;\nvar R0 = tls.handleChangeCipherSpec;\nvar R1 = tls.handleAlert;\nvar R2 = tls.handleHandshake;\nvar R3 = tls.handleApplicationData;\nvar R4 = tls.handleHeartbeat;\nvar ctTable = [];\nctTable[tls.ConnectionEnd.client] = [\n// CC,AL,HS,AD,HB\n/*SHE*/[__,R1,R2,__,R4],\n/*SCE*/[__,R1,R2,__,R4],\n/*SKE*/[__,R1,R2,__,R4],\n/*SCR*/[__,R1,R2,__,R4],\n/*SHD*/[__,R1,R2,__,R4],\n/*SCC*/[R0,R1,__,__,R4],\n/*SFI*/[__,R1,R2,__,R4],\n/*SAD*/[__,R1,R2,R3,R4],\n/*SER*/[__,R1,R2,__,R4]\n];\n\n// map server current expect state and content type to function\nctTable[tls.ConnectionEnd.server] = [\n// CC,AL,HS,AD\n/*CHE*/[__,R1,R2,__,R4],\n/*CCE*/[__,R1,R2,__,R4],\n/*CKE*/[__,R1,R2,__,R4],\n/*CCV*/[__,R1,R2,__,R4],\n/*CCC*/[R0,R1,__,__,R4],\n/*CFI*/[__,R1,R2,__,R4],\n/*CAD*/[__,R1,R2,R3,R4],\n/*CER*/[__,R1,R2,__,R4]\n];\n\n// map client current expect state and handshake type to function\nvar H0 = tls.handleHelloRequest;\nvar H1 = tls.handleServerHello;\nvar H2 = tls.handleCertificate;\nvar H3 = tls.handleServerKeyExchange;\nvar H4 = tls.handleCertificateRequest;\nvar H5 = tls.handleServerHelloDone;\nvar H6 = tls.handleFinished;\nvar hsTable = [];\nhsTable[tls.ConnectionEnd.client] = [\n// HR,01,SH,03,04,05,06,07,08,09,10,SC,SK,CR,HD,15,CK,17,18,19,FI\n/*SHE*/[__,__,H1,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*SCE*/[H0,__,__,__,__,__,__,__,__,__,__,H2,H3,H4,H5,__,__,__,__,__,__],\n/*SKE*/[H0,__,__,__,__,__,__,__,__,__,__,__,H3,H4,H5,__,__,__,__,__,__],\n/*SCR*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,H4,H5,__,__,__,__,__,__],\n/*SHD*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,H5,__,__,__,__,__,__],\n/*SCC*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*SFI*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H6],\n/*SAD*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*SER*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__]\n];\n\n// map server current expect state and handshake type to function\n// Note: CAD[CH] does not map to FB because renegotation is prohibited\nvar H7 = tls.handleClientHello;\nvar H8 = tls.handleClientKeyExchange;\nvar H9 = tls.handleCertificateVerify;\nhsTable[tls.ConnectionEnd.server] = [\n// 01,CH,02,03,04,05,06,07,08,09,10,CC,12,13,14,CV,CK,17,18,19,FI\n/*CHE*/[__,H7,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*CCE*/[__,__,__,__,__,__,__,__,__,__,__,H2,__,__,__,__,__,__,__,__,__],\n/*CKE*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H8,__,__,__,__],\n/*CCV*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H9,__,__,__,__,__],\n/*CCC*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*CFI*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H6],\n/*CAD*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*CER*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__]\n];\n\n/**\n * Generates the master_secret and keys using the given security parameters.\n *\n * The security parameters for a TLS connection state are defined as such:\n *\n * struct {\n * ConnectionEnd entity;\n * PRFAlgorithm prf_algorithm;\n * BulkCipherAlgorithm bulk_cipher_algorithm;\n * CipherType cipher_type;\n * uint8 enc_key_length;\n * uint8 block_length;\n * uint8 fixed_iv_length;\n * uint8 record_iv_length;\n * MACAlgorithm mac_algorithm;\n * uint8 mac_length;\n * uint8 mac_key_length;\n * CompressionMethod compression_algorithm;\n * opaque master_secret[48];\n * opaque client_random[32];\n * opaque server_random[32];\n * } SecurityParameters;\n *\n * Note that this definition is from TLS 1.2. In TLS 1.0 some of these\n * parameters are ignored because, for instance, the PRFAlgorithm is a\n * builtin-fixed algorithm combining iterations of MD5 and SHA-1 in TLS 1.0.\n *\n * The Record Protocol requires an algorithm to generate keys required by the\n * current connection state.\n *\n * The master secret is expanded into a sequence of secure bytes, which is then\n * split to a client write MAC key, a server write MAC key, a client write\n * encryption key, and a server write encryption key. In TLS 1.0 a client write\n * IV and server write IV are also generated. Each of these is generated from\n * the byte sequence in that order. Unused values are empty. In TLS 1.2, some\n * AEAD ciphers may additionally require a client write IV and a server write\n * IV (see Section 6.2.3.3).\n *\n * When keys, MAC keys, and IVs are generated, the master secret is used as an\n * entropy source.\n *\n * To generate the key material, compute:\n *\n * master_secret = PRF(pre_master_secret, \"master secret\",\n * ClientHello.random + ServerHello.random)\n *\n * key_block = PRF(SecurityParameters.master_secret,\n * \"key expansion\",\n * SecurityParameters.server_random +\n * SecurityParameters.client_random);\n *\n * until enough output has been generated. Then, the key_block is\n * partitioned as follows:\n *\n * client_write_MAC_key[SecurityParameters.mac_key_length]\n * server_write_MAC_key[SecurityParameters.mac_key_length]\n * client_write_key[SecurityParameters.enc_key_length]\n * server_write_key[SecurityParameters.enc_key_length]\n * client_write_IV[SecurityParameters.fixed_iv_length]\n * server_write_IV[SecurityParameters.fixed_iv_length]\n *\n * In TLS 1.2, the client_write_IV and server_write_IV are only generated for\n * implicit nonce techniques as described in Section 3.2.1 of [AEAD]. This\n * implementation uses TLS 1.0 so IVs are generated.\n *\n * Implementation note: The currently defined cipher suite which requires the\n * most material is AES_256_CBC_SHA256. It requires 2 x 32 byte keys and 2 x 32\n * byte MAC keys, for a total 128 bytes of key material. In TLS 1.0 it also\n * requires 2 x 16 byte IVs, so it actually takes 160 bytes of key material.\n *\n * @param c the connection.\n * @param sp the security parameters to use.\n *\n * @return the security keys.\n */\ntls.generateKeys = function(c, sp) {\n // TLS_RSA_WITH_AES_128_CBC_SHA (required to be compliant with TLS 1.2) &\n // TLS_RSA_WITH_AES_256_CBC_SHA are the only cipher suites implemented\n // at present\n\n // TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA is required to be compliant with\n // TLS 1.0 but we don't care right now because AES is better and we have\n // an implementation for it\n\n // TODO: TLS 1.2 implementation\n /*\n // determine the PRF\n var prf;\n switch(sp.prf_algorithm) {\n case tls.PRFAlgorithm.tls_prf_sha256:\n prf = prf_sha256;\n break;\n default:\n // should never happen\n throw new Error('Invalid PRF');\n }\n */\n\n // TLS 1.0/1.1 implementation\n var prf = prf_TLS1;\n\n // concatenate server and client random\n var random = sp.client_random + sp.server_random;\n\n // only create master secret if session is new\n if(!c.session.resuming) {\n // create master secret, clean up pre-master secret\n sp.master_secret = prf(\n sp.pre_master_secret, 'master secret', random, 48).bytes();\n sp.pre_master_secret = null;\n }\n\n // generate the amount of key material needed\n random = sp.server_random + sp.client_random;\n var length = 2 * sp.mac_key_length + 2 * sp.enc_key_length;\n\n // include IV for TLS/1.0\n var tls10 = (c.version.major === tls.Versions.TLS_1_0.major &&\n c.version.minor === tls.Versions.TLS_1_0.minor);\n if(tls10) {\n length += 2 * sp.fixed_iv_length;\n }\n var km = prf(sp.master_secret, 'key expansion', random, length);\n\n // split the key material into the MAC and encryption keys\n var rval = {\n client_write_MAC_key: km.getBytes(sp.mac_key_length),\n server_write_MAC_key: km.getBytes(sp.mac_key_length),\n client_write_key: km.getBytes(sp.enc_key_length),\n server_write_key: km.getBytes(sp.enc_key_length)\n };\n\n // include TLS 1.0 IVs\n if(tls10) {\n rval.client_write_IV = km.getBytes(sp.fixed_iv_length);\n rval.server_write_IV = km.getBytes(sp.fixed_iv_length);\n }\n\n return rval;\n};\n\n/**\n * Creates a new initialized TLS connection state. A connection state has\n * a read mode and a write mode.\n *\n * compression state:\n * The current state of the compression algorithm.\n *\n * cipher state:\n * The current state of the encryption algorithm. This will consist of the\n * scheduled key for that connection. For stream ciphers, this will also\n * contain whatever state information is necessary to allow the stream to\n * continue to encrypt or decrypt data.\n *\n * MAC key:\n * The MAC key for the connection.\n *\n * sequence number:\n * Each connection state contains a sequence number, which is maintained\n * separately for read and write states. The sequence number MUST be set to\n * zero whenever a connection state is made the active state. Sequence\n * numbers are of type uint64 and may not exceed 2^64-1. Sequence numbers do\n * not wrap. If a TLS implementation would need to wrap a sequence number,\n * it must renegotiate instead. A sequence number is incremented after each\n * record: specifically, the first record transmitted under a particular\n * connection state MUST use sequence number 0.\n *\n * @param c the connection.\n *\n * @return the new initialized TLS connection state.\n */\ntls.createConnectionState = function(c) {\n var client = (c.entity === tls.ConnectionEnd.client);\n\n var createMode = function() {\n var mode = {\n // two 32-bit numbers, first is most significant\n sequenceNumber: [0, 0],\n macKey: null,\n macLength: 0,\n macFunction: null,\n cipherState: null,\n cipherFunction: function(record) {return true;},\n compressionState: null,\n compressFunction: function(record) {return true;},\n updateSequenceNumber: function() {\n if(mode.sequenceNumber[1] === 0xFFFFFFFF) {\n mode.sequenceNumber[1] = 0;\n ++mode.sequenceNumber[0];\n } else {\n ++mode.sequenceNumber[1];\n }\n }\n };\n return mode;\n };\n var state = {\n read: createMode(),\n write: createMode()\n };\n\n // update function in read mode will decrypt then decompress a record\n state.read.update = function(c, record) {\n if(!state.read.cipherFunction(record, state.read)) {\n c.error(c, {\n message: 'Could not decrypt record or bad MAC.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n // doesn't matter if decryption failed or MAC was\n // invalid, return the same error so as not to reveal\n // which one occurred\n description: tls.Alert.Description.bad_record_mac\n }\n });\n } else if(!state.read.compressFunction(c, record, state.read)) {\n c.error(c, {\n message: 'Could not decompress record.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.decompression_failure\n }\n });\n }\n return !c.fail;\n };\n\n // update function in write mode will compress then encrypt a record\n state.write.update = function(c, record) {\n if(!state.write.compressFunction(c, record, state.write)) {\n // error, but do not send alert since it would require\n // compression as well\n c.error(c, {\n message: 'Could not compress record.',\n send: false,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n } else if(!state.write.cipherFunction(record, state.write)) {\n // error, but do not send alert since it would require\n // encryption as well\n c.error(c, {\n message: 'Could not encrypt record.',\n send: false,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n }\n return !c.fail;\n };\n\n // handle security parameters\n if(c.session) {\n var sp = c.session.sp;\n c.session.cipherSuite.initSecurityParameters(sp);\n\n // generate keys\n sp.keys = tls.generateKeys(c, sp);\n state.read.macKey = client ?\n sp.keys.server_write_MAC_key : sp.keys.client_write_MAC_key;\n state.write.macKey = client ?\n sp.keys.client_write_MAC_key : sp.keys.server_write_MAC_key;\n\n // cipher suite setup\n c.session.cipherSuite.initConnectionState(state, c, sp);\n\n // compression setup\n switch(sp.compression_algorithm) {\n case tls.CompressionMethod.none:\n break;\n case tls.CompressionMethod.deflate:\n state.read.compressFunction = inflate;\n state.write.compressFunction = deflate;\n break;\n default:\n throw new Error('Unsupported compression algorithm.');\n }\n }\n\n return state;\n};\n\n/**\n * Creates a Random structure.\n *\n * struct {\n * uint32 gmt_unix_time;\n * opaque random_bytes[28];\n * } Random;\n *\n * gmt_unix_time:\n * The current time and date in standard UNIX 32-bit format (seconds since\n * the midnight starting Jan 1, 1970, UTC, ignoring leap seconds) according\n * to the sender's internal clock. Clocks are not required to be set\n * correctly by the basic TLS protocol; higher-level or application\n * protocols may define additional requirements. Note that, for historical\n * reasons, the data element is named using GMT, the predecessor of the\n * current worldwide time base, UTC.\n * random_bytes:\n * 28 bytes generated by a secure random number generator.\n *\n * @return the Random structure as a byte array.\n */\ntls.createRandom = function() {\n // get UTC milliseconds\n var d = new Date();\n var utc = +d + d.getTimezoneOffset() * 60000;\n var rval = forge.util.createBuffer();\n rval.putInt32(utc);\n rval.putBytes(forge.random.getBytes(28));\n return rval;\n};\n\n/**\n * Creates a TLS record with the given type and data.\n *\n * @param c the connection.\n * @param options:\n * type: the record type.\n * data: the plain text data in a byte buffer.\n *\n * @return the created record.\n */\ntls.createRecord = function(c, options) {\n if(!options.data) {\n return null;\n }\n var record = {\n type: options.type,\n version: {\n major: c.version.major,\n minor: c.version.minor\n },\n length: options.data.length(),\n fragment: options.data\n };\n return record;\n};\n\n/**\n * Creates a TLS alert record.\n *\n * @param c the connection.\n * @param alert:\n * level: the TLS alert level.\n * description: the TLS alert description.\n *\n * @return the created alert record.\n */\ntls.createAlert = function(c, alert) {\n var b = forge.util.createBuffer();\n b.putByte(alert.level);\n b.putByte(alert.description);\n return tls.createRecord(c, {\n type: tls.ContentType.alert,\n data: b\n });\n};\n\n/* The structure of a TLS handshake message.\n *\n * struct {\n * HandshakeType msg_type; // handshake type\n * uint24 length; // bytes in message\n * select(HandshakeType) {\n * case hello_request: HelloRequest;\n * case client_hello: ClientHello;\n * case server_hello: ServerHello;\n * case certificate: Certificate;\n * case server_key_exchange: ServerKeyExchange;\n * case certificate_request: CertificateRequest;\n * case server_hello_done: ServerHelloDone;\n * case certificate_verify: CertificateVerify;\n * case client_key_exchange: ClientKeyExchange;\n * case finished: Finished;\n * } body;\n * } Handshake;\n */\n\n/**\n * Creates a ClientHello message.\n *\n * opaque SessionID<0..32>;\n * enum { null(0), deflate(1), (255) } CompressionMethod;\n * uint8 CipherSuite[2];\n *\n * struct {\n * ProtocolVersion client_version;\n * Random random;\n * SessionID session_id;\n * CipherSuite cipher_suites<2..2^16-2>;\n * CompressionMethod compression_methods<1..2^8-1>;\n * select(extensions_present) {\n * case false:\n * struct {};\n * case true:\n * Extension extensions<0..2^16-1>;\n * };\n * } ClientHello;\n *\n * The extension format for extended client hellos and server hellos is:\n *\n * struct {\n * ExtensionType extension_type;\n * opaque extension_data<0..2^16-1>;\n * } Extension;\n *\n * Here:\n *\n * - \"extension_type\" identifies the particular extension type.\n * - \"extension_data\" contains information specific to the particular\n * extension type.\n *\n * The extension types defined in this document are:\n *\n * enum {\n * server_name(0), max_fragment_length(1),\n * client_certificate_url(2), trusted_ca_keys(3),\n * truncated_hmac(4), status_request(5), (65535)\n * } ExtensionType;\n *\n * @param c the connection.\n *\n * @return the ClientHello byte buffer.\n */\ntls.createClientHello = function(c) {\n // save hello version\n c.session.clientHelloVersion = {\n major: c.version.major,\n minor: c.version.minor\n };\n\n // create supported cipher suites\n var cipherSuites = forge.util.createBuffer();\n for(var i = 0; i < c.cipherSuites.length; ++i) {\n var cs = c.cipherSuites[i];\n cipherSuites.putByte(cs.id[0]);\n cipherSuites.putByte(cs.id[1]);\n }\n var cSuites = cipherSuites.length();\n\n // create supported compression methods, null always supported, but\n // also support deflate if connection has inflate and deflate methods\n var compressionMethods = forge.util.createBuffer();\n compressionMethods.putByte(tls.CompressionMethod.none);\n // FIXME: deflate support disabled until issues with raw deflate data\n // without zlib headers are resolved\n /*\n if(c.inflate !== null && c.deflate !== null) {\n compressionMethods.putByte(tls.CompressionMethod.deflate);\n }\n */\n var cMethods = compressionMethods.length();\n\n // create TLS SNI (server name indication) extension if virtual host\n // has been specified, see RFC 3546\n var extensions = forge.util.createBuffer();\n if(c.virtualHost) {\n // create extension struct\n var ext = forge.util.createBuffer();\n ext.putByte(0x00); // type server_name (ExtensionType is 2 bytes)\n ext.putByte(0x00);\n\n /* In order to provide the server name, clients MAY include an\n * extension of type \"server_name\" in the (extended) client hello.\n * The \"extension_data\" field of this extension SHALL contain\n * \"ServerNameList\" where:\n *\n * struct {\n * NameType name_type;\n * select(name_type) {\n * case host_name: HostName;\n * } name;\n * } ServerName;\n *\n * enum {\n * host_name(0), (255)\n * } NameType;\n *\n * opaque HostName<1..2^16-1>;\n *\n * struct {\n * ServerName server_name_list<1..2^16-1>\n * } ServerNameList;\n */\n var serverName = forge.util.createBuffer();\n serverName.putByte(0x00); // type host_name\n writeVector(serverName, 2, forge.util.createBuffer(c.virtualHost));\n\n // ServerNameList is in extension_data\n var snList = forge.util.createBuffer();\n writeVector(snList, 2, serverName);\n writeVector(ext, 2, snList);\n extensions.putBuffer(ext);\n }\n var extLength = extensions.length();\n if(extLength > 0) {\n // add extension vector length\n extLength += 2;\n }\n\n // determine length of the handshake message\n // cipher suites and compression methods size will need to be\n // updated if more get added to the list\n var sessionId = c.session.id;\n var length =\n sessionId.length + 1 + // session ID vector\n 2 + // version (major + minor)\n 4 + 28 + // random time and random bytes\n 2 + cSuites + // cipher suites vector\n 1 + cMethods + // compression methods vector\n extLength; // extensions vector\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.client_hello);\n rval.putInt24(length); // handshake length\n rval.putByte(c.version.major); // major version\n rval.putByte(c.version.minor); // minor version\n rval.putBytes(c.session.sp.client_random); // random time + bytes\n writeVector(rval, 1, forge.util.createBuffer(sessionId));\n writeVector(rval, 2, cipherSuites);\n writeVector(rval, 1, compressionMethods);\n if(extLength > 0) {\n writeVector(rval, 2, extensions);\n }\n return rval;\n};\n\n/**\n * Creates a ServerHello message.\n *\n * @param c the connection.\n *\n * @return the ServerHello byte buffer.\n */\ntls.createServerHello = function(c) {\n // determine length of the handshake message\n var sessionId = c.session.id;\n var length =\n sessionId.length + 1 + // session ID vector\n 2 + // version (major + minor)\n 4 + 28 + // random time and random bytes\n 2 + // chosen cipher suite\n 1; // chosen compression method\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.server_hello);\n rval.putInt24(length); // handshake length\n rval.putByte(c.version.major); // major version\n rval.putByte(c.version.minor); // minor version\n rval.putBytes(c.session.sp.server_random); // random time + bytes\n writeVector(rval, 1, forge.util.createBuffer(sessionId));\n rval.putByte(c.session.cipherSuite.id[0]);\n rval.putByte(c.session.cipherSuite.id[1]);\n rval.putByte(c.session.compressionMethod);\n return rval;\n};\n\n/**\n * Creates a Certificate message.\n *\n * When this message will be sent:\n * This is the first message the client can send after receiving a server\n * hello done message and the first message the server can send after\n * sending a ServerHello. This client message is only sent if the server\n * requests a certificate. If no suitable certificate is available, the\n * client should send a certificate message containing no certificates. If\n * client authentication is required by the server for the handshake to\n * continue, it may respond with a fatal handshake failure alert.\n *\n * opaque ASN.1Cert<1..2^24-1>;\n *\n * struct {\n * ASN.1Cert certificate_list<0..2^24-1>;\n * } Certificate;\n *\n * @param c the connection.\n *\n * @return the Certificate byte buffer.\n */\ntls.createCertificate = function(c) {\n // TODO: check certificate request to ensure types are supported\n\n // get a certificate (a certificate as a PEM string)\n var client = (c.entity === tls.ConnectionEnd.client);\n var cert = null;\n if(c.getCertificate) {\n var hint;\n if(client) {\n hint = c.session.certificateRequest;\n } else {\n hint = c.session.extensions.server_name.serverNameList;\n }\n cert = c.getCertificate(c, hint);\n }\n\n // buffer to hold certificate list\n var certList = forge.util.createBuffer();\n if(cert !== null) {\n try {\n // normalize cert to a chain of certificates\n if(!forge.util.isArray(cert)) {\n cert = [cert];\n }\n var asn1 = null;\n for(var i = 0; i < cert.length; ++i) {\n var msg = forge.pem.decode(cert[i])[0];\n if(msg.type !== 'CERTIFICATE' &&\n msg.type !== 'X509 CERTIFICATE' &&\n msg.type !== 'TRUSTED CERTIFICATE') {\n var error = new Error('Could not convert certificate from PEM; PEM ' +\n 'header type is not \"CERTIFICATE\", \"X509 CERTIFICATE\", or ' +\n '\"TRUSTED CERTIFICATE\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert certificate from PEM; PEM is encrypted.');\n }\n\n var der = forge.util.createBuffer(msg.body);\n if(asn1 === null) {\n asn1 = forge.asn1.fromDer(der.bytes(), false);\n }\n\n // certificate entry is itself a vector with 3 length bytes\n var certBuffer = forge.util.createBuffer();\n writeVector(certBuffer, 3, der);\n\n // add cert vector to cert list vector\n certList.putBuffer(certBuffer);\n }\n\n // save certificate\n cert = forge.pki.certificateFromAsn1(asn1);\n if(client) {\n c.session.clientCertificate = cert;\n } else {\n c.session.serverCertificate = cert;\n }\n } catch(ex) {\n return c.error(c, {\n message: 'Could not send certificate list.',\n cause: ex,\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.bad_certificate\n }\n });\n }\n }\n\n // determine length of the handshake message\n var length = 3 + certList.length(); // cert list vector\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.certificate);\n rval.putInt24(length);\n writeVector(rval, 3, certList);\n return rval;\n};\n\n/**\n * Creates a ClientKeyExchange message.\n *\n * When this message will be sent:\n * This message is always sent by the client. It will immediately follow the\n * client certificate message, if it is sent. Otherwise it will be the first\n * message sent by the client after it receives the server hello done\n * message.\n *\n * Meaning of this message:\n * With this message, the premaster secret is set, either though direct\n * transmission of the RSA-encrypted secret, or by the transmission of\n * Diffie-Hellman parameters which will allow each side to agree upon the\n * same premaster secret. When the key exchange method is DH_RSA or DH_DSS,\n * client certification has been requested, and the client was able to\n * respond with a certificate which contained a Diffie-Hellman public key\n * whose parameters (group and generator) matched those specified by the\n * server in its certificate, this message will not contain any data.\n *\n * Meaning of this message:\n * If RSA is being used for key agreement and authentication, the client\n * generates a 48-byte premaster secret, encrypts it using the public key\n * from the server's certificate or the temporary RSA key provided in a\n * server key exchange message, and sends the result in an encrypted\n * premaster secret message. This structure is a variant of the client\n * key exchange message, not a message in itself.\n *\n * struct {\n * select(KeyExchangeAlgorithm) {\n * case rsa: EncryptedPreMasterSecret;\n * case diffie_hellman: ClientDiffieHellmanPublic;\n * } exchange_keys;\n * } ClientKeyExchange;\n *\n * struct {\n * ProtocolVersion client_version;\n * opaque random[46];\n * } PreMasterSecret;\n *\n * struct {\n * public-key-encrypted PreMasterSecret pre_master_secret;\n * } EncryptedPreMasterSecret;\n *\n * A public-key-encrypted element is encoded as a vector <0..2^16-1>.\n *\n * @param c the connection.\n *\n * @return the ClientKeyExchange byte buffer.\n */\ntls.createClientKeyExchange = function(c) {\n // create buffer to encrypt\n var b = forge.util.createBuffer();\n\n // add highest client-supported protocol to help server avoid version\n // rollback attacks\n b.putByte(c.session.clientHelloVersion.major);\n b.putByte(c.session.clientHelloVersion.minor);\n\n // generate and add 46 random bytes\n b.putBytes(forge.random.getBytes(46));\n\n // save pre-master secret\n var sp = c.session.sp;\n sp.pre_master_secret = b.getBytes();\n\n // RSA-encrypt the pre-master secret\n var key = c.session.serverCertificate.publicKey;\n b = key.encrypt(sp.pre_master_secret);\n\n /* Note: The encrypted pre-master secret will be stored in a\n public-key-encrypted opaque vector that has the length prefixed using\n 2 bytes, so include those 2 bytes in the handshake message length. This\n is done as a minor optimization instead of calling writeVector(). */\n\n // determine length of the handshake message\n var length = b.length + 2;\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.client_key_exchange);\n rval.putInt24(length);\n // add vector length bytes\n rval.putInt16(b.length);\n rval.putBytes(b);\n return rval;\n};\n\n/**\n * Creates a ServerKeyExchange message.\n *\n * @param c the connection.\n *\n * @return the ServerKeyExchange byte buffer.\n */\ntls.createServerKeyExchange = function(c) {\n // this implementation only supports RSA, no Diffie-Hellman support,\n // so this record is empty\n\n // determine length of the handshake message\n var length = 0;\n\n // build record fragment\n var rval = forge.util.createBuffer();\n if(length > 0) {\n rval.putByte(tls.HandshakeType.server_key_exchange);\n rval.putInt24(length);\n }\n return rval;\n};\n\n/**\n * Gets the signed data used to verify a client-side certificate. See\n * tls.createCertificateVerify() for details.\n *\n * @param c the connection.\n * @param callback the callback to call once the signed data is ready.\n */\ntls.getClientSignature = function(c, callback) {\n // generate data to RSA encrypt\n var b = forge.util.createBuffer();\n b.putBuffer(c.session.md5.digest());\n b.putBuffer(c.session.sha1.digest());\n b = b.getBytes();\n\n // create default signing function as necessary\n c.getSignature = c.getSignature || function(c, b, callback) {\n // do rsa encryption, call callback\n var privateKey = null;\n if(c.getPrivateKey) {\n try {\n privateKey = c.getPrivateKey(c, c.session.clientCertificate);\n privateKey = forge.pki.privateKeyFromPem(privateKey);\n } catch(ex) {\n c.error(c, {\n message: 'Could not get private key.',\n cause: ex,\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n }\n }\n if(privateKey === null) {\n c.error(c, {\n message: 'No private key set.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n } else {\n b = privateKey.sign(b, null);\n }\n callback(c, b);\n };\n\n // get client signature\n c.getSignature(c, b, callback);\n};\n\n/**\n * Creates a CertificateVerify message.\n *\n * Meaning of this message:\n * This structure conveys the client's Diffie-Hellman public value\n * (Yc) if it was not already included in the client's certificate.\n * The encoding used for Yc is determined by the enumerated\n * PublicValueEncoding. This structure is a variant of the client\n * key exchange message, not a message in itself.\n *\n * When this message will be sent:\n * This message is used to provide explicit verification of a client\n * certificate. This message is only sent following a client\n * certificate that has signing capability (i.e. all certificates\n * except those containing fixed Diffie-Hellman parameters). When\n * sent, it will immediately follow the client key exchange message.\n *\n * struct {\n * Signature signature;\n * } CertificateVerify;\n *\n * CertificateVerify.signature.md5_hash\n * MD5(handshake_messages);\n *\n * Certificate.signature.sha_hash\n * SHA(handshake_messages);\n *\n * Here handshake_messages refers to all handshake messages sent or\n * received starting at client hello up to but not including this\n * message, including the type and length fields of the handshake\n * messages.\n *\n * select(SignatureAlgorithm) {\n * case anonymous: struct { };\n * case rsa:\n * digitally-signed struct {\n * opaque md5_hash[16];\n * opaque sha_hash[20];\n * };\n * case dsa:\n * digitally-signed struct {\n * opaque sha_hash[20];\n * };\n * } Signature;\n *\n * In digital signing, one-way hash functions are used as input for a\n * signing algorithm. A digitally-signed element is encoded as an opaque\n * vector <0..2^16-1>, where the length is specified by the signing\n * algorithm and key.\n *\n * In RSA signing, a 36-byte structure of two hashes (one SHA and one\n * MD5) is signed (encrypted with the private key). It is encoded with\n * PKCS #1 block type 0 or type 1 as described in [PKCS1].\n *\n * In DSS, the 20 bytes of the SHA hash are run directly through the\n * Digital Signing Algorithm with no additional hashing.\n *\n * @param c the connection.\n * @param signature the signature to include in the message.\n *\n * @return the CertificateVerify byte buffer.\n */\ntls.createCertificateVerify = function(c, signature) {\n /* Note: The signature will be stored in a \"digitally-signed\" opaque\n vector that has the length prefixed using 2 bytes, so include those\n 2 bytes in the handshake message length. This is done as a minor\n optimization instead of calling writeVector(). */\n\n // determine length of the handshake message\n var length = signature.length + 2;\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.certificate_verify);\n rval.putInt24(length);\n // add vector length bytes\n rval.putInt16(signature.length);\n rval.putBytes(signature);\n return rval;\n};\n\n/**\n * Creates a CertificateRequest message.\n *\n * @param c the connection.\n *\n * @return the CertificateRequest byte buffer.\n */\ntls.createCertificateRequest = function(c) {\n // TODO: support other certificate types\n var certTypes = forge.util.createBuffer();\n\n // common RSA certificate type\n certTypes.putByte(0x01);\n\n // add distinguished names from CA store\n var cAs = forge.util.createBuffer();\n for(var key in c.caStore.certs) {\n var cert = c.caStore.certs[key];\n var dn = forge.pki.distinguishedNameToAsn1(cert.subject);\n var byteBuffer = forge.asn1.toDer(dn);\n cAs.putInt16(byteBuffer.length());\n cAs.putBuffer(byteBuffer);\n }\n\n // TODO: TLS 1.2+ has a different format\n\n // determine length of the handshake message\n var length =\n 1 + certTypes.length() +\n 2 + cAs.length();\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.certificate_request);\n rval.putInt24(length);\n writeVector(rval, 1, certTypes);\n writeVector(rval, 2, cAs);\n return rval;\n};\n\n/**\n * Creates a ServerHelloDone message.\n *\n * @param c the connection.\n *\n * @return the ServerHelloDone byte buffer.\n */\ntls.createServerHelloDone = function(c) {\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.server_hello_done);\n rval.putInt24(0);\n return rval;\n};\n\n/**\n * Creates a ChangeCipherSpec message.\n *\n * The change cipher spec protocol exists to signal transitions in\n * ciphering strategies. The protocol consists of a single message,\n * which is encrypted and compressed under the current (not the pending)\n * connection state. The message consists of a single byte of value 1.\n *\n * struct {\n * enum { change_cipher_spec(1), (255) } type;\n * } ChangeCipherSpec;\n *\n * @return the ChangeCipherSpec byte buffer.\n */\ntls.createChangeCipherSpec = function() {\n var rval = forge.util.createBuffer();\n rval.putByte(0x01);\n return rval;\n};\n\n/**\n * Creates a Finished message.\n *\n * struct {\n * opaque verify_data[12];\n * } Finished;\n *\n * verify_data\n * PRF(master_secret, finished_label, MD5(handshake_messages) +\n * SHA-1(handshake_messages)) [0..11];\n *\n * finished_label\n * For Finished messages sent by the client, the string \"client\n * finished\". For Finished messages sent by the server, the\n * string \"server finished\".\n *\n * handshake_messages\n * All of the data from all handshake messages up to but not\n * including this message. This is only data visible at the\n * handshake layer and does not include record layer headers.\n * This is the concatenation of all the Handshake structures as\n * defined in 7.4 exchanged thus far.\n *\n * @param c the connection.\n *\n * @return the Finished byte buffer.\n */\ntls.createFinished = function(c) {\n // generate verify_data\n var b = forge.util.createBuffer();\n b.putBuffer(c.session.md5.digest());\n b.putBuffer(c.session.sha1.digest());\n\n // TODO: determine prf function and verify length for TLS 1.2\n var client = (c.entity === tls.ConnectionEnd.client);\n var sp = c.session.sp;\n var vdl = 12;\n var prf = prf_TLS1;\n var label = client ? 'client finished' : 'server finished';\n b = prf(sp.master_secret, label, b.getBytes(), vdl);\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.finished);\n rval.putInt24(b.length());\n rval.putBuffer(b);\n return rval;\n};\n\n/**\n * Creates a HeartbeatMessage (See RFC 6520).\n *\n * struct {\n * HeartbeatMessageType type;\n * uint16 payload_length;\n * opaque payload[HeartbeatMessage.payload_length];\n * opaque padding[padding_length];\n * } HeartbeatMessage;\n *\n * The total length of a HeartbeatMessage MUST NOT exceed 2^14 or\n * max_fragment_length when negotiated as defined in [RFC6066].\n *\n * type: The message type, either heartbeat_request or heartbeat_response.\n *\n * payload_length: The length of the payload.\n *\n * payload: The payload consists of arbitrary content.\n *\n * padding: The padding is random content that MUST be ignored by the\n * receiver. The length of a HeartbeatMessage is TLSPlaintext.length\n * for TLS and DTLSPlaintext.length for DTLS. Furthermore, the\n * length of the type field is 1 byte, and the length of the\n * payload_length is 2. Therefore, the padding_length is\n * TLSPlaintext.length - payload_length - 3 for TLS and\n * DTLSPlaintext.length - payload_length - 3 for DTLS. The\n * padding_length MUST be at least 16.\n *\n * The sender of a HeartbeatMessage MUST use a random padding of at\n * least 16 bytes. The padding of a received HeartbeatMessage message\n * MUST be ignored.\n *\n * If the payload_length of a received HeartbeatMessage is too large,\n * the received HeartbeatMessage MUST be discarded silently.\n *\n * @param c the connection.\n * @param type the tls.HeartbeatMessageType.\n * @param payload the heartbeat data to send as the payload.\n * @param [payloadLength] the payload length to use, defaults to the\n * actual payload length.\n *\n * @return the HeartbeatRequest byte buffer.\n */\ntls.createHeartbeat = function(type, payload, payloadLength) {\n if(typeof payloadLength === 'undefined') {\n payloadLength = payload.length;\n }\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(type); // heartbeat message type\n rval.putInt16(payloadLength); // payload length\n rval.putBytes(payload); // payload\n // padding\n var plaintextLength = rval.length();\n var paddingLength = Math.max(16, plaintextLength - payloadLength - 3);\n rval.putBytes(forge.random.getBytes(paddingLength));\n return rval;\n};\n\n/**\n * Fragments, compresses, encrypts, and queues a record for delivery.\n *\n * @param c the connection.\n * @param record the record to queue.\n */\ntls.queue = function(c, record) {\n // error during record creation\n if(!record) {\n return;\n }\n\n if(record.fragment.length() === 0) {\n if(record.type === tls.ContentType.handshake ||\n record.type === tls.ContentType.alert ||\n record.type === tls.ContentType.change_cipher_spec) {\n // Empty handshake, alert of change cipher spec messages are not allowed per the TLS specification and should not be sent.\n return;\n }\n }\n\n // if the record is a handshake record, update handshake hashes\n if(record.type === tls.ContentType.handshake) {\n var bytes = record.fragment.bytes();\n c.session.md5.update(bytes);\n c.session.sha1.update(bytes);\n bytes = null;\n }\n\n // handle record fragmentation\n var records;\n if(record.fragment.length() <= tls.MaxFragment) {\n records = [record];\n } else {\n // fragment data as long as it is too long\n records = [];\n var data = record.fragment.bytes();\n while(data.length > tls.MaxFragment) {\n records.push(tls.createRecord(c, {\n type: record.type,\n data: forge.util.createBuffer(data.slice(0, tls.MaxFragment))\n }));\n data = data.slice(tls.MaxFragment);\n }\n // add last record\n if(data.length > 0) {\n records.push(tls.createRecord(c, {\n type: record.type,\n data: forge.util.createBuffer(data)\n }));\n }\n }\n\n // compress and encrypt all fragmented records\n for(var i = 0; i < records.length && !c.fail; ++i) {\n // update the record using current write state\n var rec = records[i];\n var s = c.state.current.write;\n if(s.update(c, rec)) {\n // store record\n c.records.push(rec);\n }\n }\n};\n\n/**\n * Flushes all queued records to the output buffer and calls the\n * tlsDataReady() handler on the given connection.\n *\n * @param c the connection.\n *\n * @return true on success, false on failure.\n */\ntls.flush = function(c) {\n for(var i = 0; i < c.records.length; ++i) {\n var record = c.records[i];\n\n // add record header and fragment\n c.tlsData.putByte(record.type);\n c.tlsData.putByte(record.version.major);\n c.tlsData.putByte(record.version.minor);\n c.tlsData.putInt16(record.fragment.length());\n c.tlsData.putBuffer(c.records[i].fragment);\n }\n c.records = [];\n return c.tlsDataReady(c);\n};\n\n/**\n * Maps a pki.certificateError to a tls.Alert.Description.\n *\n * @param error the error to map.\n *\n * @return the alert description.\n */\nvar _certErrorToAlertDesc = function(error) {\n switch(error) {\n case true:\n return true;\n case forge.pki.certificateError.bad_certificate:\n return tls.Alert.Description.bad_certificate;\n case forge.pki.certificateError.unsupported_certificate:\n return tls.Alert.Description.unsupported_certificate;\n case forge.pki.certificateError.certificate_revoked:\n return tls.Alert.Description.certificate_revoked;\n case forge.pki.certificateError.certificate_expired:\n return tls.Alert.Description.certificate_expired;\n case forge.pki.certificateError.certificate_unknown:\n return tls.Alert.Description.certificate_unknown;\n case forge.pki.certificateError.unknown_ca:\n return tls.Alert.Description.unknown_ca;\n default:\n return tls.Alert.Description.bad_certificate;\n }\n};\n\n/**\n * Maps a tls.Alert.Description to a pki.certificateError.\n *\n * @param desc the alert description.\n *\n * @return the certificate error.\n */\nvar _alertDescToCertError = function(desc) {\n switch(desc) {\n case true:\n return true;\n case tls.Alert.Description.bad_certificate:\n return forge.pki.certificateError.bad_certificate;\n case tls.Alert.Description.unsupported_certificate:\n return forge.pki.certificateError.unsupported_certificate;\n case tls.Alert.Description.certificate_revoked:\n return forge.pki.certificateError.certificate_revoked;\n case tls.Alert.Description.certificate_expired:\n return forge.pki.certificateError.certificate_expired;\n case tls.Alert.Description.certificate_unknown:\n return forge.pki.certificateError.certificate_unknown;\n case tls.Alert.Description.unknown_ca:\n return forge.pki.certificateError.unknown_ca;\n default:\n return forge.pki.certificateError.bad_certificate;\n }\n};\n\n/**\n * Verifies a certificate chain against the given connection's\n * Certificate Authority store.\n *\n * @param c the TLS connection.\n * @param chain the certificate chain to verify, with the root or highest\n * authority at the end.\n *\n * @return true if successful, false if not.\n */\ntls.verifyCertificateChain = function(c, chain) {\n try {\n // Make a copy of c.verifyOptions so that we can modify options.verify\n // without modifying c.verifyOptions.\n var options = {};\n for (var key in c.verifyOptions) {\n options[key] = c.verifyOptions[key];\n }\n\n options.verify = function(vfd, depth, chain) {\n // convert pki.certificateError to tls alert description\n var desc = _certErrorToAlertDesc(vfd);\n\n // call application callback\n var ret = c.verify(c, vfd, depth, chain);\n if(ret !== true) {\n if(typeof ret === 'object' && !forge.util.isArray(ret)) {\n // throw custom error\n var error = new Error('The application rejected the certificate.');\n error.send = true;\n error.alert = {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.bad_certificate\n };\n if(ret.message) {\n error.message = ret.message;\n }\n if(ret.alert) {\n error.alert.description = ret.alert;\n }\n throw error;\n }\n\n // convert tls alert description to pki.certificateError\n if(ret !== vfd) {\n ret = _alertDescToCertError(ret);\n }\n }\n\n return ret;\n };\n\n // verify chain\n forge.pki.verifyCertificateChain(c.caStore, chain, options);\n } catch(ex) {\n // build tls error if not already customized\n var err = ex;\n if(typeof err !== 'object' || forge.util.isArray(err)) {\n err = {\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: _certErrorToAlertDesc(ex)\n }\n };\n }\n if(!('send' in err)) {\n err.send = true;\n }\n if(!('alert' in err)) {\n err.alert = {\n level: tls.Alert.Level.fatal,\n description: _certErrorToAlertDesc(err.error)\n };\n }\n\n // send error\n c.error(c, err);\n }\n\n return !c.fail;\n};\n\n/**\n * Creates a new TLS session cache.\n *\n * @param cache optional map of session ID to cached session.\n * @param capacity the maximum size for the cache (default: 100).\n *\n * @return the new TLS session cache.\n */\ntls.createSessionCache = function(cache, capacity) {\n var rval = null;\n\n // assume input is already a session cache object\n if(cache && cache.getSession && cache.setSession && cache.order) {\n rval = cache;\n } else {\n // create cache\n rval = {};\n rval.cache = cache || {};\n rval.capacity = Math.max(capacity || 100, 1);\n rval.order = [];\n\n // store order for sessions, delete session overflow\n for(var key in cache) {\n if(rval.order.length <= capacity) {\n rval.order.push(key);\n } else {\n delete cache[key];\n }\n }\n\n // get a session from a session ID (or get any session)\n rval.getSession = function(sessionId) {\n var session = null;\n var key = null;\n\n // if session ID provided, use it\n if(sessionId) {\n key = forge.util.bytesToHex(sessionId);\n } else if(rval.order.length > 0) {\n // get first session from cache\n key = rval.order[0];\n }\n\n if(key !== null && key in rval.cache) {\n // get cached session and remove from cache\n session = rval.cache[key];\n delete rval.cache[key];\n for(var i in rval.order) {\n if(rval.order[i] === key) {\n rval.order.splice(i, 1);\n break;\n }\n }\n }\n\n return session;\n };\n\n // set a session in the cache\n rval.setSession = function(sessionId, session) {\n // remove session from cache if at capacity\n if(rval.order.length === rval.capacity) {\n var key = rval.order.shift();\n delete rval.cache[key];\n }\n // add session to cache\n var key = forge.util.bytesToHex(sessionId);\n rval.order.push(key);\n rval.cache[key] = session;\n };\n }\n\n return rval;\n};\n\n/**\n * Creates a new TLS connection.\n *\n * See public createConnection() docs for more details.\n *\n * @param options the options for this connection.\n *\n * @return the new TLS connection.\n */\ntls.createConnection = function(options) {\n var caStore = null;\n if(options.caStore) {\n // if CA store is an array, convert it to a CA store object\n if(forge.util.isArray(options.caStore)) {\n caStore = forge.pki.createCaStore(options.caStore);\n } else {\n caStore = options.caStore;\n }\n } else {\n // create empty CA store\n caStore = forge.pki.createCaStore();\n }\n\n // setup default cipher suites\n var cipherSuites = options.cipherSuites || null;\n if(cipherSuites === null) {\n cipherSuites = [];\n for(var key in tls.CipherSuites) {\n cipherSuites.push(tls.CipherSuites[key]);\n }\n }\n\n // set default entity\n var entity = (options.server || false) ?\n tls.ConnectionEnd.server : tls.ConnectionEnd.client;\n\n // create session cache if requested\n var sessionCache = options.sessionCache ?\n tls.createSessionCache(options.sessionCache) : null;\n\n // create TLS connection\n var c = {\n version: {major: tls.Version.major, minor: tls.Version.minor},\n entity: entity,\n sessionId: options.sessionId,\n caStore: caStore,\n sessionCache: sessionCache,\n cipherSuites: cipherSuites,\n connected: options.connected,\n virtualHost: options.virtualHost || null,\n verifyClient: options.verifyClient || false,\n verify: options.verify || function(cn, vfd, dpth, cts) {return vfd;},\n verifyOptions: options.verifyOptions || {},\n getCertificate: options.getCertificate || null,\n getPrivateKey: options.getPrivateKey || null,\n getSignature: options.getSignature || null,\n input: forge.util.createBuffer(),\n tlsData: forge.util.createBuffer(),\n data: forge.util.createBuffer(),\n tlsDataReady: options.tlsDataReady,\n dataReady: options.dataReady,\n heartbeatReceived: options.heartbeatReceived,\n closed: options.closed,\n error: function(c, ex) {\n // set origin if not set\n ex.origin = ex.origin ||\n ((c.entity === tls.ConnectionEnd.client) ? 'client' : 'server');\n\n // send TLS alert\n if(ex.send) {\n tls.queue(c, tls.createAlert(c, ex.alert));\n tls.flush(c);\n }\n\n // error is fatal by default\n var fatal = (ex.fatal !== false);\n if(fatal) {\n // set fail flag\n c.fail = true;\n }\n\n // call error handler first\n options.error(c, ex);\n\n if(fatal) {\n // fatal error, close connection, do not clear fail\n c.close(false);\n }\n },\n deflate: options.deflate || null,\n inflate: options.inflate || null\n };\n\n /**\n * Resets a closed TLS connection for reuse. Called in c.close().\n *\n * @param clearFail true to clear the fail flag (default: true).\n */\n c.reset = function(clearFail) {\n c.version = {major: tls.Version.major, minor: tls.Version.minor};\n c.record = null;\n c.session = null;\n c.peerCertificate = null;\n c.state = {\n pending: null,\n current: null\n };\n c.expect = (c.entity === tls.ConnectionEnd.client) ? SHE : CHE;\n c.fragmented = null;\n c.records = [];\n c.open = false;\n c.handshakes = 0;\n c.handshaking = false;\n c.isConnected = false;\n c.fail = !(clearFail || typeof(clearFail) === 'undefined');\n c.input.clear();\n c.tlsData.clear();\n c.data.clear();\n c.state.current = tls.createConnectionState(c);\n };\n\n // do initial reset of connection\n c.reset();\n\n /**\n * Updates the current TLS engine state based on the given record.\n *\n * @param c the TLS connection.\n * @param record the TLS record to act on.\n */\n var _update = function(c, record) {\n // get record handler (align type in table by subtracting lowest)\n var aligned = record.type - tls.ContentType.change_cipher_spec;\n var handlers = ctTable[c.entity][c.expect];\n if(aligned in handlers) {\n handlers[aligned](c, record);\n } else {\n // unexpected record\n tls.handleUnexpected(c, record);\n }\n };\n\n /**\n * Reads the record header and initializes the next record on the given\n * connection.\n *\n * @param c the TLS connection with the next record.\n *\n * @return 0 if the input data could be processed, otherwise the\n * number of bytes required for data to be processed.\n */\n var _readRecordHeader = function(c) {\n var rval = 0;\n\n // get input buffer and its length\n var b = c.input;\n var len = b.length();\n\n // need at least 5 bytes to initialize a record\n if(len < 5) {\n rval = 5 - len;\n } else {\n // enough bytes for header\n // initialize record\n c.record = {\n type: b.getByte(),\n version: {\n major: b.getByte(),\n minor: b.getByte()\n },\n length: b.getInt16(),\n fragment: forge.util.createBuffer(),\n ready: false\n };\n\n // check record version\n var compatibleVersion = (c.record.version.major === c.version.major);\n if(compatibleVersion && c.session && c.session.version) {\n // session version already set, require same minor version\n compatibleVersion = (c.record.version.minor === c.version.minor);\n }\n if(!compatibleVersion) {\n c.error(c, {\n message: 'Incompatible TLS version.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.protocol_version\n }\n });\n }\n }\n\n return rval;\n };\n\n /**\n * Reads the next record's contents and appends its message to any\n * previously fragmented message.\n *\n * @param c the TLS connection with the next record.\n *\n * @return 0 if the input data could be processed, otherwise the\n * number of bytes required for data to be processed.\n */\n var _readRecord = function(c) {\n var rval = 0;\n\n // ensure there is enough input data to get the entire record\n var b = c.input;\n var len = b.length();\n if(len < c.record.length) {\n // not enough data yet, return how much is required\n rval = c.record.length - len;\n } else {\n // there is enough data to parse the pending record\n // fill record fragment and compact input buffer\n c.record.fragment.putBytes(b.getBytes(c.record.length));\n b.compact();\n\n // update record using current read state\n var s = c.state.current.read;\n if(s.update(c, c.record)) {\n // see if there is a previously fragmented message that the\n // new record's message fragment should be appended to\n if(c.fragmented !== null) {\n // if the record type matches a previously fragmented\n // record, append the record fragment to it\n if(c.fragmented.type === c.record.type) {\n // concatenate record fragments\n c.fragmented.fragment.putBuffer(c.record.fragment);\n c.record = c.fragmented;\n } else {\n // error, invalid fragmented record\n c.error(c, {\n message: 'Invalid fragmented record.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description:\n tls.Alert.Description.unexpected_message\n }\n });\n }\n }\n\n // record is now ready\n c.record.ready = true;\n }\n }\n\n return rval;\n };\n\n /**\n * Performs a handshake using the TLS Handshake Protocol, as a client.\n *\n * This method should only be called if the connection is in client mode.\n *\n * @param sessionId the session ID to use, null to start a new one.\n */\n c.handshake = function(sessionId) {\n // error to call this in non-client mode\n if(c.entity !== tls.ConnectionEnd.client) {\n // not fatal error\n c.error(c, {\n message: 'Cannot initiate handshake as a server.',\n fatal: false\n });\n } else if(c.handshaking) {\n // handshake is already in progress, fail but not fatal error\n c.error(c, {\n message: 'Handshake already in progress.',\n fatal: false\n });\n } else {\n // clear fail flag on reuse\n if(c.fail && !c.open && c.handshakes === 0) {\n c.fail = false;\n }\n\n // now handshaking\n c.handshaking = true;\n\n // default to blank (new session)\n sessionId = sessionId || '';\n\n // if a session ID was specified, try to find it in the cache\n var session = null;\n if(sessionId.length > 0) {\n if(c.sessionCache) {\n session = c.sessionCache.getSession(sessionId);\n }\n\n // matching session not found in cache, clear session ID\n if(session === null) {\n sessionId = '';\n }\n }\n\n // no session given, grab a session from the cache, if available\n if(sessionId.length === 0 && c.sessionCache) {\n session = c.sessionCache.getSession();\n if(session !== null) {\n sessionId = session.id;\n }\n }\n\n // set up session\n c.session = {\n id: sessionId,\n version: null,\n cipherSuite: null,\n compressionMethod: null,\n serverCertificate: null,\n certificateRequest: null,\n clientCertificate: null,\n sp: {},\n md5: forge.md.md5.create(),\n sha1: forge.md.sha1.create()\n };\n\n // use existing session information\n if(session) {\n // only update version on connection, session version not yet set\n c.version = session.version;\n c.session.sp = session.sp;\n }\n\n // generate new client random\n c.session.sp.client_random = tls.createRandom().getBytes();\n\n // connection now open\n c.open = true;\n\n // send hello\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createClientHello(c)\n }));\n tls.flush(c);\n }\n };\n\n /**\n * Called when TLS protocol data has been received from somewhere and should\n * be processed by the TLS engine.\n *\n * @param data the TLS protocol data, as a string, to process.\n *\n * @return 0 if the data could be processed, otherwise the number of bytes\n * required for data to be processed.\n */\n c.process = function(data) {\n var rval = 0;\n\n // buffer input data\n if(data) {\n c.input.putBytes(data);\n }\n\n // process next record if no failure, process will be called after\n // each record is handled (since handling can be asynchronous)\n if(!c.fail) {\n // reset record if ready and now empty\n if(c.record !== null &&\n c.record.ready && c.record.fragment.isEmpty()) {\n c.record = null;\n }\n\n // if there is no pending record, try to read record header\n if(c.record === null) {\n rval = _readRecordHeader(c);\n }\n\n // read the next record (if record not yet ready)\n if(!c.fail && c.record !== null && !c.record.ready) {\n rval = _readRecord(c);\n }\n\n // record ready to be handled, update engine state\n if(!c.fail && c.record !== null && c.record.ready) {\n _update(c, c.record);\n }\n }\n\n return rval;\n };\n\n /**\n * Requests that application data be packaged into a TLS record. The\n * tlsDataReady handler will be called when the TLS record(s) have been\n * prepared.\n *\n * @param data the application data, as a raw 'binary' encoded string, to\n * be sent; to send utf-16/utf-8 string data, use the return value\n * of util.encodeUtf8(str).\n *\n * @return true on success, false on failure.\n */\n c.prepare = function(data) {\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.application_data,\n data: forge.util.createBuffer(data)\n }));\n return tls.flush(c);\n };\n\n /**\n * Requests that a heartbeat request be packaged into a TLS record for\n * transmission. The tlsDataReady handler will be called when TLS record(s)\n * have been prepared.\n *\n * When a heartbeat response has been received, the heartbeatReceived\n * handler will be called with the matching payload. This handler can\n * be used to clear a retransmission timer, etc.\n *\n * @param payload the heartbeat data to send as the payload in the message.\n * @param [payloadLength] the payload length to use, defaults to the\n * actual payload length.\n *\n * @return true on success, false on failure.\n */\n c.prepareHeartbeatRequest = function(payload, payloadLength) {\n if(payload instanceof forge.util.ByteBuffer) {\n payload = payload.bytes();\n }\n if(typeof payloadLength === 'undefined') {\n payloadLength = payload.length;\n }\n c.expectedHeartbeatPayload = payload;\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.heartbeat,\n data: tls.createHeartbeat(\n tls.HeartbeatMessageType.heartbeat_request, payload, payloadLength)\n }));\n return tls.flush(c);\n };\n\n /**\n * Closes the connection (sends a close_notify alert).\n *\n * @param clearFail true to clear the fail flag (default: true).\n */\n c.close = function(clearFail) {\n // save session if connection didn't fail\n if(!c.fail && c.sessionCache && c.session) {\n // only need to preserve session ID, version, and security params\n var session = {\n id: c.session.id,\n version: c.session.version,\n sp: c.session.sp\n };\n session.sp.keys = null;\n c.sessionCache.setSession(session.id, session);\n }\n\n if(c.open) {\n // connection no longer open, clear input\n c.open = false;\n c.input.clear();\n\n // if connected or handshaking, send an alert\n if(c.isConnected || c.handshaking) {\n c.isConnected = c.handshaking = false;\n\n // send close_notify alert\n tls.queue(c, tls.createAlert(c, {\n level: tls.Alert.Level.warning,\n description: tls.Alert.Description.close_notify\n }));\n tls.flush(c);\n }\n\n // call handler\n c.closed(c);\n }\n\n // reset TLS connection, do not clear fail flag\n c.reset(clearFail);\n };\n\n return c;\n};\n\n/* TLS API */\nmodule.exports = forge.tls = forge.tls || {};\n\n// expose non-functions\nfor(var key in tls) {\n if(typeof tls[key] !== 'function') {\n forge.tls[key] = tls[key];\n }\n}\n\n// expose prf_tls1 for testing\nforge.tls.prf_tls1 = prf_TLS1;\n\n// expose sha1 hmac method\nforge.tls.hmac_sha1 = hmac_sha1;\n\n// expose session cache creation\nforge.tls.createSessionCache = tls.createSessionCache;\n\n/**\n * Creates a new TLS connection. This does not make any assumptions about the\n * transport layer that TLS is working on top of, ie: it does not assume there\n * is a TCP/IP connection or establish one. A TLS connection is totally\n * abstracted away from the layer is runs on top of, it merely establishes a\n * secure channel between a client\" and a \"server\".\n *\n * A TLS connection contains 4 connection states: pending read and write, and\n * current read and write.\n *\n * At initialization, the current read and write states will be null. Only once\n * the security parameters have been set and the keys have been generated can\n * the pending states be converted into current states. Current states will be\n * updated for each record processed.\n *\n * A custom certificate verify callback may be provided to check information\n * like the common name on the server's certificate. It will be called for\n * every certificate in the chain. It has the following signature:\n *\n * variable func(c, certs, index, preVerify)\n * Where:\n * c The TLS connection\n * verified Set to true if certificate was verified, otherwise the alert\n * tls.Alert.Description for why the certificate failed.\n * depth The current index in the chain, where 0 is the server's cert.\n * certs The certificate chain, *NOTE* if the server was anonymous then\n * the chain will be empty.\n *\n * The function returns true on success and on failure either the appropriate\n * tls.Alert.Description or an object with 'alert' set to the appropriate\n * tls.Alert.Description and 'message' set to a custom error message. If true\n * is not returned then the connection will abort using, in order of\n * availability, first the returned alert description, second the preVerify\n * alert description, and lastly the default 'bad_certificate'.\n *\n * There are three callbacks that can be used to make use of client-side\n * certificates where each takes the TLS connection as the first parameter:\n *\n * getCertificate(conn, hint)\n * The second parameter is a hint as to which certificate should be\n * returned. If the connection entity is a client, then the hint will be\n * the CertificateRequest message from the server that is part of the\n * TLS protocol. If the connection entity is a server, then it will be\n * the servername list provided via an SNI extension the ClientHello, if\n * one was provided (empty array if not). The hint can be examined to\n * determine which certificate to use (advanced). Most implementations\n * will just return a certificate. The return value must be a\n * PEM-formatted certificate or an array of PEM-formatted certificates\n * that constitute a certificate chain, with the first in the array/chain\n * being the client's certificate.\n * getPrivateKey(conn, certificate)\n * The second parameter is an forge.pki X.509 certificate object that\n * is associated with the requested private key. The return value must\n * be a PEM-formatted private key.\n * getSignature(conn, bytes, callback)\n * This callback can be used instead of getPrivateKey if the private key\n * is not directly accessible in javascript or should not be. For\n * instance, a secure external web service could provide the signature\n * in exchange for appropriate credentials. The second parameter is a\n * string of bytes to be signed that are part of the TLS protocol. These\n * bytes are used to verify that the private key for the previously\n * provided client-side certificate is accessible to the client. The\n * callback is a function that takes 2 parameters, the TLS connection\n * and the RSA encrypted (signed) bytes as a string. This callback must\n * be called once the signature is ready.\n *\n * @param options the options for this connection:\n * server: true if the connection is server-side, false for client.\n * sessionId: a session ID to reuse, null for a new connection.\n * caStore: an array of certificates to trust.\n * sessionCache: a session cache to use.\n * cipherSuites: an optional array of cipher suites to use,\n * see tls.CipherSuites.\n * connected: function(conn) called when the first handshake completes.\n * virtualHost: the virtual server name to use in a TLS SNI extension.\n * verifyClient: true to require a client certificate in server mode,\n * 'optional' to request one, false not to (default: false).\n * verify: a handler used to custom verify certificates in the chain.\n * verifyOptions: an object with options for the certificate chain validation.\n * See documentation of pki.verifyCertificateChain for possible options.\n * verifyOptions.verify is ignored. If you wish to specify a verify handler\n * use the verify key.\n * getCertificate: an optional callback used to get a certificate or\n * a chain of certificates (as an array).\n * getPrivateKey: an optional callback used to get a private key.\n * getSignature: an optional callback used to get a signature.\n * tlsDataReady: function(conn) called when TLS protocol data has been\n * prepared and is ready to be used (typically sent over a socket\n * connection to its destination), read from conn.tlsData buffer.\n * dataReady: function(conn) called when application data has\n * been parsed from a TLS record and should be consumed by the\n * application, read from conn.data buffer.\n * closed: function(conn) called when the connection has been closed.\n * error: function(conn, error) called when there was an error.\n * deflate: function(inBytes) if provided, will deflate TLS records using\n * the deflate algorithm if the server supports it.\n * inflate: function(inBytes) if provided, will inflate TLS records using\n * the deflate algorithm if the server supports it.\n *\n * @return the new TLS connection.\n */\nforge.tls.createConnection = tls.createConnection;\n","/**\n * A Javascript implementation of AES Cipher Suites for TLS.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2009-2015 Digital Bazaar, Inc.\n *\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./tls');\n\nvar tls = module.exports = forge.tls;\n\n/**\n * Supported cipher suites.\n */\ntls.CipherSuites['TLS_RSA_WITH_AES_128_CBC_SHA'] = {\n id: [0x00, 0x2f],\n name: 'TLS_RSA_WITH_AES_128_CBC_SHA',\n initSecurityParameters: function(sp) {\n sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes;\n sp.cipher_type = tls.CipherType.block;\n sp.enc_key_length = 16;\n sp.block_length = 16;\n sp.fixed_iv_length = 16;\n sp.record_iv_length = 16;\n sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1;\n sp.mac_length = 20;\n sp.mac_key_length = 20;\n },\n initConnectionState: initConnectionState\n};\ntls.CipherSuites['TLS_RSA_WITH_AES_256_CBC_SHA'] = {\n id: [0x00, 0x35],\n name: 'TLS_RSA_WITH_AES_256_CBC_SHA',\n initSecurityParameters: function(sp) {\n sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes;\n sp.cipher_type = tls.CipherType.block;\n sp.enc_key_length = 32;\n sp.block_length = 16;\n sp.fixed_iv_length = 16;\n sp.record_iv_length = 16;\n sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1;\n sp.mac_length = 20;\n sp.mac_key_length = 20;\n },\n initConnectionState: initConnectionState\n};\n\nfunction initConnectionState(state, c, sp) {\n var client = (c.entity === forge.tls.ConnectionEnd.client);\n\n // cipher setup\n state.read.cipherState = {\n init: false,\n cipher: forge.cipher.createDecipher('AES-CBC', client ?\n sp.keys.server_write_key : sp.keys.client_write_key),\n iv: client ? sp.keys.server_write_IV : sp.keys.client_write_IV\n };\n state.write.cipherState = {\n init: false,\n cipher: forge.cipher.createCipher('AES-CBC', client ?\n sp.keys.client_write_key : sp.keys.server_write_key),\n iv: client ? sp.keys.client_write_IV : sp.keys.server_write_IV\n };\n state.read.cipherFunction = decrypt_aes_cbc_sha1;\n state.write.cipherFunction = encrypt_aes_cbc_sha1;\n\n // MAC setup\n state.read.macLength = state.write.macLength = sp.mac_length;\n state.read.macFunction = state.write.macFunction = tls.hmac_sha1;\n}\n\n/**\n * Encrypts the TLSCompressed record into a TLSCipherText record using AES\n * in CBC mode.\n *\n * @param record the TLSCompressed record to encrypt.\n * @param s the ConnectionState to use.\n *\n * @return true on success, false on failure.\n */\nfunction encrypt_aes_cbc_sha1(record, s) {\n var rval = false;\n\n // append MAC to fragment, update sequence number\n var mac = s.macFunction(s.macKey, s.sequenceNumber, record);\n record.fragment.putBytes(mac);\n s.updateSequenceNumber();\n\n // TLS 1.1+ use an explicit IV every time to protect against CBC attacks\n var iv;\n if(record.version.minor === tls.Versions.TLS_1_0.minor) {\n // use the pre-generated IV when initializing for TLS 1.0, otherwise use\n // the residue from the previous encryption\n iv = s.cipherState.init ? null : s.cipherState.iv;\n } else {\n iv = forge.random.getBytesSync(16);\n }\n\n s.cipherState.init = true;\n\n // start cipher\n var cipher = s.cipherState.cipher;\n cipher.start({iv: iv});\n\n // TLS 1.1+ write IV into output\n if(record.version.minor >= tls.Versions.TLS_1_1.minor) {\n cipher.output.putBytes(iv);\n }\n\n // do encryption (default padding is appropriate)\n cipher.update(record.fragment);\n if(cipher.finish(encrypt_aes_cbc_sha1_padding)) {\n // set record fragment to encrypted output\n record.fragment = cipher.output;\n record.length = record.fragment.length();\n rval = true;\n }\n\n return rval;\n}\n\n/**\n * Handles padding for aes_cbc_sha1 in encrypt mode.\n *\n * @param blockSize the block size.\n * @param input the input buffer.\n * @param decrypt true in decrypt mode, false in encrypt mode.\n *\n * @return true on success, false on failure.\n */\nfunction encrypt_aes_cbc_sha1_padding(blockSize, input, decrypt) {\n /* The encrypted data length (TLSCiphertext.length) is one more than the sum\n of SecurityParameters.block_length, TLSCompressed.length,\n SecurityParameters.mac_length, and padding_length.\n\n The padding may be any length up to 255 bytes long, as long as it results in\n the TLSCiphertext.length being an integral multiple of the block length.\n Lengths longer than necessary might be desirable to frustrate attacks on a\n protocol based on analysis of the lengths of exchanged messages. Each uint8\n in the padding data vector must be filled with the padding length value.\n\n The padding length should be such that the total size of the\n GenericBlockCipher structure is a multiple of the cipher's block length.\n Legal values range from zero to 255, inclusive. This length specifies the\n length of the padding field exclusive of the padding_length field itself.\n\n This is slightly different from PKCS#7 because the padding value is 1\n less than the actual number of padding bytes if you include the\n padding_length uint8 itself as a padding byte. */\n if(!decrypt) {\n // get the number of padding bytes required to reach the blockSize and\n // subtract 1 for the padding value (to make room for the padding_length\n // uint8)\n var padding = blockSize - (input.length() % blockSize);\n input.fillWithByte(padding - 1, padding);\n }\n return true;\n}\n\n/**\n * Handles padding for aes_cbc_sha1 in decrypt mode.\n *\n * @param blockSize the block size.\n * @param output the output buffer.\n * @param decrypt true in decrypt mode, false in encrypt mode.\n *\n * @return true on success, false on failure.\n */\nfunction decrypt_aes_cbc_sha1_padding(blockSize, output, decrypt) {\n var rval = true;\n if(decrypt) {\n /* The last byte in the output specifies the number of padding bytes not\n including itself. Each of the padding bytes has the same value as that\n last byte (known as the padding_length). Here we check all padding\n bytes to ensure they have the value of padding_length even if one of\n them is bad in order to ward-off timing attacks. */\n var len = output.length();\n var paddingLength = output.last();\n for(var i = len - 1 - paddingLength; i < len - 1; ++i) {\n rval = rval && (output.at(i) == paddingLength);\n }\n if(rval) {\n // trim off padding bytes and last padding length byte\n output.truncate(paddingLength + 1);\n }\n }\n return rval;\n}\n\n/**\n * Decrypts a TLSCipherText record into a TLSCompressed record using\n * AES in CBC mode.\n *\n * @param record the TLSCipherText record to decrypt.\n * @param s the ConnectionState to use.\n *\n * @return true on success, false on failure.\n */\nfunction decrypt_aes_cbc_sha1(record, s) {\n var rval = false;\n\n var iv;\n if(record.version.minor === tls.Versions.TLS_1_0.minor) {\n // use pre-generated IV when initializing for TLS 1.0, otherwise use the\n // residue from the previous decryption\n iv = s.cipherState.init ? null : s.cipherState.iv;\n } else {\n // TLS 1.1+ use an explicit IV every time to protect against CBC attacks\n // that is appended to the record fragment\n iv = record.fragment.getBytes(16);\n }\n\n s.cipherState.init = true;\n\n // start cipher\n var cipher = s.cipherState.cipher;\n cipher.start({iv: iv});\n\n // do decryption\n cipher.update(record.fragment);\n rval = cipher.finish(decrypt_aes_cbc_sha1_padding);\n\n // even if decryption fails, keep going to minimize timing attacks\n\n // decrypted data:\n // first (len - 20) bytes = application data\n // last 20 bytes = MAC\n var macLen = s.macLength;\n\n // create a random MAC to check against should the mac length check fail\n // Note: do this regardless of the failure to keep timing consistent\n var mac = forge.random.getBytesSync(macLen);\n\n // get fragment and mac\n var len = cipher.output.length();\n if(len >= macLen) {\n record.fragment = cipher.output.getBytes(len - macLen);\n mac = cipher.output.getBytes(macLen);\n } else {\n // bad data, but get bytes anyway to try to keep timing consistent\n record.fragment = cipher.output.getBytes();\n }\n record.fragment = forge.util.createBuffer(record.fragment);\n record.length = record.fragment.length();\n\n // see if data integrity checks out, update sequence number\n var mac2 = s.macFunction(s.macKey, s.sequenceNumber, record);\n s.updateSequenceNumber();\n rval = compareMacs(s.macKey, mac, mac2) && rval;\n return rval;\n}\n\n/**\n * Safely compare two MACs. This function will compare two MACs in a way\n * that protects against timing attacks.\n *\n * TODO: Expose elsewhere as a utility API.\n *\n * See: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n *\n * @param key the MAC key to use.\n * @param mac1 as a binary-encoded string of bytes.\n * @param mac2 as a binary-encoded string of bytes.\n *\n * @return true if the MACs are the same, false if not.\n */\nfunction compareMacs(key, mac1, mac2) {\n var hmac = forge.hmac.create();\n\n hmac.start('SHA1', key);\n hmac.update(mac1);\n mac1 = hmac.digest().getBytes();\n\n hmac.start(null, null);\n hmac.update(mac2);\n mac2 = hmac.digest().getBytes();\n\n return mac1 === mac2;\n}\n","/**\n * Debugging support for web applications.\n *\n * @author David I. Lehn <dlehn@digitalbazaar.com>\n *\n * Copyright 2008-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\n/* DEBUG API */\nmodule.exports = forge.debug = forge.debug || {};\n\n// Private storage for debugging.\n// Useful to expose data that is otherwise unviewable behind closures.\n// NOTE: remember that this can hold references to data and cause leaks!\n// format is \"forge._debug.<modulename>.<dataname> = data\"\n// Example:\n// (function() {\n// var cat = 'forge.test.Test'; // debugging category\n// var sState = {...}; // local state\n// forge.debug.set(cat, 'sState', sState);\n// })();\nforge.debug.storage = {};\n\n/**\n * Gets debug data. Omit name for all cat data Omit name and cat for\n * all data.\n *\n * @param cat name of debugging category.\n * @param name name of data to get (optional).\n * @return object with requested debug data or undefined.\n */\nforge.debug.get = function(cat, name) {\n var rval;\n if(typeof(cat) === 'undefined') {\n rval = forge.debug.storage;\n } else if(cat in forge.debug.storage) {\n if(typeof(name) === 'undefined') {\n rval = forge.debug.storage[cat];\n } else {\n rval = forge.debug.storage[cat][name];\n }\n }\n return rval;\n};\n\n/**\n * Sets debug data.\n *\n * @param cat name of debugging category.\n * @param name name of data to set.\n * @param data data to set.\n */\nforge.debug.set = function(cat, name, data) {\n if(!(cat in forge.debug.storage)) {\n forge.debug.storage[cat] = {};\n }\n forge.debug.storage[cat][name] = data;\n};\n\n/**\n * Clears debug data. Omit name for all cat data. Omit name and cat for\n * all data.\n *\n * @param cat name of debugging category.\n * @param name name of data to clear or omit to clear entire category.\n */\nforge.debug.clear = function(cat, name) {\n if(typeof(cat) === 'undefined') {\n forge.debug.storage = {};\n } else if(cat in forge.debug.storage) {\n if(typeof(name) === 'undefined') {\n delete forge.debug.storage[cat];\n } else {\n delete forge.debug.storage[cat][name];\n }\n }\n};\n","/**\n * Secure Hash Algorithm with a 1024-bit block size implementation.\n *\n * This includes: SHA-512, SHA-384, SHA-512/224, and SHA-512/256. For\n * SHA-256 (block size 512 bits), see sha256.js.\n *\n * See FIPS 180-4 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2014-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha512 = module.exports = forge.sha512 = forge.sha512 || {};\n\n// SHA-512\nforge.md.sha512 = forge.md.algorithms.sha512 = sha512;\n\n// SHA-384\nvar sha384 = forge.sha384 = forge.sha512.sha384 = forge.sha512.sha384 || {};\nsha384.create = function() {\n return sha512.create('SHA-384');\n};\nforge.md.sha384 = forge.md.algorithms.sha384 = sha384;\n\n// SHA-512/256\nforge.sha512.sha256 = forge.sha512.sha256 || {\n create: function() {\n return sha512.create('SHA-512/256');\n }\n};\nforge.md['sha512/256'] = forge.md.algorithms['sha512/256'] =\n forge.sha512.sha256;\n\n// SHA-512/224\nforge.sha512.sha224 = forge.sha512.sha224 || {\n create: function() {\n return sha512.create('SHA-512/224');\n }\n};\nforge.md['sha512/224'] = forge.md.algorithms['sha512/224'] =\n forge.sha512.sha224;\n\n/**\n * Creates a SHA-2 message digest object.\n *\n * @param algorithm the algorithm to use (SHA-512, SHA-384, SHA-512/224,\n * SHA-512/256).\n *\n * @return a message digest object.\n */\nsha512.create = function(algorithm) {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n if(typeof algorithm === 'undefined') {\n algorithm = 'SHA-512';\n }\n\n if(!(algorithm in _states)) {\n throw new Error('Invalid SHA-512 algorithm: ' + algorithm);\n }\n\n // SHA-512 state contains eight 64-bit integers (each as two 32-bit ints)\n var _state = _states[algorithm];\n var _h = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for 64-bit word storage\n var _w = new Array(80);\n for(var wi = 0; wi < 80; ++wi) {\n _w[wi] = new Array(2);\n }\n\n // determine digest length by algorithm name (default)\n var digestLength = 64;\n switch(algorithm) {\n case 'SHA-384':\n digestLength = 48;\n break;\n case 'SHA-512/256':\n digestLength = 32;\n break;\n case 'SHA-512/224':\n digestLength = 28;\n break;\n }\n\n // message digest object\n var md = {\n // SHA-512 => sha512\n algorithm: algorithm.replace('-', '').toLowerCase(),\n blockLength: 128,\n digestLength: digestLength,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 16\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength128 for backwards-compatibility)\n md.fullMessageLength = md.messageLength128 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _h = new Array(_state.length);\n for(var i = 0; i < _state.length; ++i) {\n _h[i] = _state[i].slice(0);\n }\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_h, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-512 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 896 mod 1024. In other words,\n the data to be digested must be a multiple of 1024 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 16 bytes (128\n bits), that means that the last segment of the data must have 112 bytes\n (896 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 896 mod 1024 because\n 1024 - 128 = 896.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 896 mod 1024, then 1024 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var h = new Array(_h.length);\n for(var i = 0; i < _h.length; ++i) {\n h[i] = _h[i].slice(0);\n }\n _update(h, _w, finalBlock);\n var rval = forge.util.createBuffer();\n var hlen;\n if(algorithm === 'SHA-512') {\n hlen = h.length;\n } else if(algorithm === 'SHA-384') {\n hlen = h.length - 2;\n } else {\n hlen = h.length - 4;\n }\n for(var i = 0; i < hlen; ++i) {\n rval.putInt32(h[i][0]);\n if(i !== hlen - 1 || algorithm !== 'SHA-512/224') {\n rval.putInt32(h[i][1]);\n }\n }\n return rval;\n };\n\n return md;\n};\n\n// sha-512 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n// table of constants\nvar _k = null;\n\n// initial hash states\nvar _states = null;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 128);\n\n // create K table for SHA-512\n _k = [\n [0x428a2f98, 0xd728ae22], [0x71374491, 0x23ef65cd],\n [0xb5c0fbcf, 0xec4d3b2f], [0xe9b5dba5, 0x8189dbbc],\n [0x3956c25b, 0xf348b538], [0x59f111f1, 0xb605d019],\n [0x923f82a4, 0xaf194f9b], [0xab1c5ed5, 0xda6d8118],\n [0xd807aa98, 0xa3030242], [0x12835b01, 0x45706fbe],\n [0x243185be, 0x4ee4b28c], [0x550c7dc3, 0xd5ffb4e2],\n [0x72be5d74, 0xf27b896f], [0x80deb1fe, 0x3b1696b1],\n [0x9bdc06a7, 0x25c71235], [0xc19bf174, 0xcf692694],\n [0xe49b69c1, 0x9ef14ad2], [0xefbe4786, 0x384f25e3],\n [0x0fc19dc6, 0x8b8cd5b5], [0x240ca1cc, 0x77ac9c65],\n [0x2de92c6f, 0x592b0275], [0x4a7484aa, 0x6ea6e483],\n [0x5cb0a9dc, 0xbd41fbd4], [0x76f988da, 0x831153b5],\n [0x983e5152, 0xee66dfab], [0xa831c66d, 0x2db43210],\n [0xb00327c8, 0x98fb213f], [0xbf597fc7, 0xbeef0ee4],\n [0xc6e00bf3, 0x3da88fc2], [0xd5a79147, 0x930aa725],\n [0x06ca6351, 0xe003826f], [0x14292967, 0x0a0e6e70],\n [0x27b70a85, 0x46d22ffc], [0x2e1b2138, 0x5c26c926],\n [0x4d2c6dfc, 0x5ac42aed], [0x53380d13, 0x9d95b3df],\n [0x650a7354, 0x8baf63de], [0x766a0abb, 0x3c77b2a8],\n [0x81c2c92e, 0x47edaee6], [0x92722c85, 0x1482353b],\n [0xa2bfe8a1, 0x4cf10364], [0xa81a664b, 0xbc423001],\n [0xc24b8b70, 0xd0f89791], [0xc76c51a3, 0x0654be30],\n [0xd192e819, 0xd6ef5218], [0xd6990624, 0x5565a910],\n [0xf40e3585, 0x5771202a], [0x106aa070, 0x32bbd1b8],\n [0x19a4c116, 0xb8d2d0c8], [0x1e376c08, 0x5141ab53],\n [0x2748774c, 0xdf8eeb99], [0x34b0bcb5, 0xe19b48a8],\n [0x391c0cb3, 0xc5c95a63], [0x4ed8aa4a, 0xe3418acb],\n [0x5b9cca4f, 0x7763e373], [0x682e6ff3, 0xd6b2b8a3],\n [0x748f82ee, 0x5defb2fc], [0x78a5636f, 0x43172f60],\n [0x84c87814, 0xa1f0ab72], [0x8cc70208, 0x1a6439ec],\n [0x90befffa, 0x23631e28], [0xa4506ceb, 0xde82bde9],\n [0xbef9a3f7, 0xb2c67915], [0xc67178f2, 0xe372532b],\n [0xca273ece, 0xea26619c], [0xd186b8c7, 0x21c0c207],\n [0xeada7dd6, 0xcde0eb1e], [0xf57d4f7f, 0xee6ed178],\n [0x06f067aa, 0x72176fba], [0x0a637dc5, 0xa2c898a6],\n [0x113f9804, 0xbef90dae], [0x1b710b35, 0x131c471b],\n [0x28db77f5, 0x23047d84], [0x32caab7b, 0x40c72493],\n [0x3c9ebe0a, 0x15c9bebc], [0x431d67c4, 0x9c100d4c],\n [0x4cc5d4be, 0xcb3e42b6], [0x597f299c, 0xfc657e2a],\n [0x5fcb6fab, 0x3ad6faec], [0x6c44198c, 0x4a475817]\n ];\n\n // initial hash states\n _states = {};\n _states['SHA-512'] = [\n [0x6a09e667, 0xf3bcc908],\n [0xbb67ae85, 0x84caa73b],\n [0x3c6ef372, 0xfe94f82b],\n [0xa54ff53a, 0x5f1d36f1],\n [0x510e527f, 0xade682d1],\n [0x9b05688c, 0x2b3e6c1f],\n [0x1f83d9ab, 0xfb41bd6b],\n [0x5be0cd19, 0x137e2179]\n ];\n _states['SHA-384'] = [\n [0xcbbb9d5d, 0xc1059ed8],\n [0x629a292a, 0x367cd507],\n [0x9159015a, 0x3070dd17],\n [0x152fecd8, 0xf70e5939],\n [0x67332667, 0xffc00b31],\n [0x8eb44a87, 0x68581511],\n [0xdb0c2e0d, 0x64f98fa7],\n [0x47b5481d, 0xbefa4fa4]\n ];\n _states['SHA-512/256'] = [\n [0x22312194, 0xFC2BF72C],\n [0x9F555FA3, 0xC84C64C2],\n [0x2393B86B, 0x6F53B151],\n [0x96387719, 0x5940EABD],\n [0x96283EE2, 0xA88EFFE3],\n [0xBE5E1E25, 0x53863992],\n [0x2B0199FC, 0x2C85B8AA],\n [0x0EB72DDC, 0x81C52CA2]\n ];\n _states['SHA-512/224'] = [\n [0x8C3D37C8, 0x19544DA2],\n [0x73E19966, 0x89DCD4D6],\n [0x1DFAB7AE, 0x32FF9C82],\n [0x679DD514, 0x582F9FCF],\n [0x0F6D2B69, 0x7BD44DA8],\n [0x77E36F73, 0x04C48942],\n [0x3F9D85A8, 0x6A1D36C8],\n [0x1112E6AD, 0x91D692A1]\n ];\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-512 state with the given byte buffer.\n *\n * @param s the SHA-512 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (128 byte) chunks\n var t1_hi, t1_lo;\n var t2_hi, t2_lo;\n var s0_hi, s0_lo;\n var s1_hi, s1_lo;\n var ch_hi, ch_lo;\n var maj_hi, maj_lo;\n var a_hi, a_lo;\n var b_hi, b_lo;\n var c_hi, c_lo;\n var d_hi, d_lo;\n var e_hi, e_lo;\n var f_hi, f_lo;\n var g_hi, g_lo;\n var h_hi, h_lo;\n var i, hi, lo, w2, w7, w15, w16;\n var len = bytes.length();\n while(len >= 128) {\n // the w array will be populated with sixteen 64-bit big-endian words\n // and then extended into 64 64-bit words according to SHA-512\n for(i = 0; i < 16; ++i) {\n w[i][0] = bytes.getInt32() >>> 0;\n w[i][1] = bytes.getInt32() >>> 0;\n }\n for(; i < 80; ++i) {\n // for word 2 words ago: ROTR 19(x) ^ ROTR 61(x) ^ SHR 6(x)\n w2 = w[i - 2];\n hi = w2[0];\n lo = w2[1];\n\n // high bits\n t1_hi = (\n ((hi >>> 19) | (lo << 13)) ^ // ROTR 19\n ((lo >>> 29) | (hi << 3)) ^ // ROTR 61/(swap + ROTR 29)\n (hi >>> 6)) >>> 0; // SHR 6\n // low bits\n t1_lo = (\n ((hi << 13) | (lo >>> 19)) ^ // ROTR 19\n ((lo << 3) | (hi >>> 29)) ^ // ROTR 61/(swap + ROTR 29)\n ((hi << 26) | (lo >>> 6))) >>> 0; // SHR 6\n\n // for word 15 words ago: ROTR 1(x) ^ ROTR 8(x) ^ SHR 7(x)\n w15 = w[i - 15];\n hi = w15[0];\n lo = w15[1];\n\n // high bits\n t2_hi = (\n ((hi >>> 1) | (lo << 31)) ^ // ROTR 1\n ((hi >>> 8) | (lo << 24)) ^ // ROTR 8\n (hi >>> 7)) >>> 0; // SHR 7\n // low bits\n t2_lo = (\n ((hi << 31) | (lo >>> 1)) ^ // ROTR 1\n ((hi << 24) | (lo >>> 8)) ^ // ROTR 8\n ((hi << 25) | (lo >>> 7))) >>> 0; // SHR 7\n\n // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^64 (carry lo overflow)\n w7 = w[i - 7];\n w16 = w[i - 16];\n lo = (t1_lo + w7[1] + t2_lo + w16[1]);\n w[i][0] = (t1_hi + w7[0] + t2_hi + w16[0] +\n ((lo / 0x100000000) >>> 0)) >>> 0;\n w[i][1] = lo >>> 0;\n }\n\n // initialize hash value for this chunk\n a_hi = s[0][0];\n a_lo = s[0][1];\n b_hi = s[1][0];\n b_lo = s[1][1];\n c_hi = s[2][0];\n c_lo = s[2][1];\n d_hi = s[3][0];\n d_lo = s[3][1];\n e_hi = s[4][0];\n e_lo = s[4][1];\n f_hi = s[5][0];\n f_lo = s[5][1];\n g_hi = s[6][0];\n g_lo = s[6][1];\n h_hi = s[7][0];\n h_lo = s[7][1];\n\n // round function\n for(i = 0; i < 80; ++i) {\n // Sum1(e) = ROTR 14(e) ^ ROTR 18(e) ^ ROTR 41(e)\n s1_hi = (\n ((e_hi >>> 14) | (e_lo << 18)) ^ // ROTR 14\n ((e_hi >>> 18) | (e_lo << 14)) ^ // ROTR 18\n ((e_lo >>> 9) | (e_hi << 23))) >>> 0; // ROTR 41/(swap + ROTR 9)\n s1_lo = (\n ((e_hi << 18) | (e_lo >>> 14)) ^ // ROTR 14\n ((e_hi << 14) | (e_lo >>> 18)) ^ // ROTR 18\n ((e_lo << 23) | (e_hi >>> 9))) >>> 0; // ROTR 41/(swap + ROTR 9)\n\n // Ch(e, f, g) (optimized the same way as SHA-1)\n ch_hi = (g_hi ^ (e_hi & (f_hi ^ g_hi))) >>> 0;\n ch_lo = (g_lo ^ (e_lo & (f_lo ^ g_lo))) >>> 0;\n\n // Sum0(a) = ROTR 28(a) ^ ROTR 34(a) ^ ROTR 39(a)\n s0_hi = (\n ((a_hi >>> 28) | (a_lo << 4)) ^ // ROTR 28\n ((a_lo >>> 2) | (a_hi << 30)) ^ // ROTR 34/(swap + ROTR 2)\n ((a_lo >>> 7) | (a_hi << 25))) >>> 0; // ROTR 39/(swap + ROTR 7)\n s0_lo = (\n ((a_hi << 4) | (a_lo >>> 28)) ^ // ROTR 28\n ((a_lo << 30) | (a_hi >>> 2)) ^ // ROTR 34/(swap + ROTR 2)\n ((a_lo << 25) | (a_hi >>> 7))) >>> 0; // ROTR 39/(swap + ROTR 7)\n\n // Maj(a, b, c) (optimized the same way as SHA-1)\n maj_hi = ((a_hi & b_hi) | (c_hi & (a_hi ^ b_hi))) >>> 0;\n maj_lo = ((a_lo & b_lo) | (c_lo & (a_lo ^ b_lo))) >>> 0;\n\n // main algorithm\n // t1 = (h + s1 + ch + _k[i] + _w[i]) modulo 2^64 (carry lo overflow)\n lo = (h_lo + s1_lo + ch_lo + _k[i][1] + w[i][1]);\n t1_hi = (h_hi + s1_hi + ch_hi + _k[i][0] + w[i][0] +\n ((lo / 0x100000000) >>> 0)) >>> 0;\n t1_lo = lo >>> 0;\n\n // t2 = s0 + maj modulo 2^64 (carry lo overflow)\n lo = s0_lo + maj_lo;\n t2_hi = (s0_hi + maj_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n t2_lo = lo >>> 0;\n\n h_hi = g_hi;\n h_lo = g_lo;\n\n g_hi = f_hi;\n g_lo = f_lo;\n\n f_hi = e_hi;\n f_lo = e_lo;\n\n // e = (d + t1) modulo 2^64 (carry lo overflow)\n lo = d_lo + t1_lo;\n e_hi = (d_hi + t1_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n e_lo = lo >>> 0;\n\n d_hi = c_hi;\n d_lo = c_lo;\n\n c_hi = b_hi;\n c_lo = b_lo;\n\n b_hi = a_hi;\n b_lo = a_lo;\n\n // a = (t1 + t2) modulo 2^64 (carry lo overflow)\n lo = t1_lo + t2_lo;\n a_hi = (t1_hi + t2_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n a_lo = lo >>> 0;\n }\n\n // update hash state (additional modulo 2^64)\n lo = s[0][1] + a_lo;\n s[0][0] = (s[0][0] + a_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[0][1] = lo >>> 0;\n\n lo = s[1][1] + b_lo;\n s[1][0] = (s[1][0] + b_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[1][1] = lo >>> 0;\n\n lo = s[2][1] + c_lo;\n s[2][0] = (s[2][0] + c_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[2][1] = lo >>> 0;\n\n lo = s[3][1] + d_lo;\n s[3][0] = (s[3][0] + d_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[3][1] = lo >>> 0;\n\n lo = s[4][1] + e_lo;\n s[4][0] = (s[4][0] + e_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[4][1] = lo >>> 0;\n\n lo = s[5][1] + f_lo;\n s[5][0] = (s[5][0] + f_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[5][1] = lo >>> 0;\n\n lo = s[6][1] + g_lo;\n s[6][0] = (s[6][0] + g_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[6][1] = lo >>> 0;\n\n lo = s[7][1] + h_lo;\n s[7][0] = (s[7][0] + h_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[7][1] = lo >>> 0;\n\n len -= 128;\n }\n}\n","/**\n * Copyright (c) 2019 Digital Bazaar, Inc.\n */\n\nvar forge = require('./forge');\nrequire('./asn1');\nvar asn1 = forge.asn1;\n\nexports.privateKeyValidator = {\n // PrivateKeyInfo\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'PrivateKeyInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // privateKeyAlgorithm\n name: 'PrivateKeyInfo.privateKeyAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'privateKeyOid'\n }]\n }, {\n // PrivateKey\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'privateKey'\n }]\n};\n\nexports.publicKeyValidator = {\n name: 'SubjectPublicKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'subjectPublicKeyInfo',\n value: [{\n name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'publicKeyOid'\n }]\n },\n // capture group for ed25519PublicKey\n {\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n composed: true,\n captureBitStringValue: 'ed25519PublicKey'\n }\n // FIXME: this is capture group for rsaPublicKey, use it in this API or\n // discard?\n /* {\n // subjectPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n value: [{\n // RSAPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'rsaPublicKey'\n }]\n } */\n ]\n};\n","/**\n * JavaScript implementation of Ed25519.\n *\n * Copyright (c) 2017-2019 Digital Bazaar, Inc.\n *\n * This implementation is based on the most excellent TweetNaCl which is\n * in the public domain. Many thanks to its contributors:\n *\n * https://github.com/dchest/tweetnacl-js\n */\nvar forge = require('./forge');\nrequire('./jsbn');\nrequire('./random');\nrequire('./sha512');\nrequire('./util');\nvar asn1Validator = require('./asn1-validator');\nvar publicKeyValidator = asn1Validator.publicKeyValidator;\nvar privateKeyValidator = asn1Validator.privateKeyValidator;\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\nvar ByteBuffer = forge.util.ByteBuffer;\nvar NativeBuffer = typeof Buffer === 'undefined' ? Uint8Array : Buffer;\n\n/*\n * Ed25519 algorithms, see RFC 8032:\n * https://tools.ietf.org/html/rfc8032\n */\nforge.pki = forge.pki || {};\nmodule.exports = forge.pki.ed25519 = forge.ed25519 = forge.ed25519 || {};\nvar ed25519 = forge.ed25519;\n\ned25519.constants = {};\ned25519.constants.PUBLIC_KEY_BYTE_LENGTH = 32;\ned25519.constants.PRIVATE_KEY_BYTE_LENGTH = 64;\ned25519.constants.SEED_BYTE_LENGTH = 32;\ned25519.constants.SIGN_BYTE_LENGTH = 64;\ned25519.constants.HASH_BYTE_LENGTH = 64;\n\ned25519.generateKeyPair = function(options) {\n options = options || {};\n var seed = options.seed;\n if(seed === undefined) {\n // generate seed\n seed = forge.random.getBytesSync(ed25519.constants.SEED_BYTE_LENGTH);\n } else if(typeof seed === 'string') {\n if(seed.length !== ed25519.constants.SEED_BYTE_LENGTH) {\n throw new TypeError(\n '\"seed\" must be ' + ed25519.constants.SEED_BYTE_LENGTH +\n ' bytes in length.');\n }\n } else if(!(seed instanceof Uint8Array)) {\n throw new TypeError(\n '\"seed\" must be a node.js Buffer, Uint8Array, or a binary string.');\n }\n\n seed = messageToNativeBuffer({message: seed, encoding: 'binary'});\n\n var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);\n var sk = new NativeBuffer(ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);\n for(var i = 0; i < 32; ++i) {\n sk[i] = seed[i];\n }\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, privateKey: sk};\n};\n\n/**\n * Converts a private key from a RFC8410 ASN.1 encoding.\n *\n * @param obj - The asn1 representation of a private key.\n *\n * @returns {Object} keyInfo - The key information.\n * @returns {Buffer|Uint8Array} keyInfo.privateKeyBytes - 32 private key bytes.\n */\ned25519.privateKeyFromAsn1 = function(obj) {\n var capture = {};\n var errors = [];\n var valid = forge.asn1.validate(obj, privateKeyValidator, capture, errors);\n if(!valid) {\n var error = new Error('Invalid Key.');\n error.errors = errors;\n throw error;\n }\n var oid = forge.asn1.derToOid(capture.privateKeyOid);\n var ed25519Oid = forge.oids.EdDSA25519;\n if(oid !== ed25519Oid) {\n throw new Error('Invalid OID \"' + oid + '\"; OID must be \"' +\n ed25519Oid + '\".');\n }\n var privateKey = capture.privateKey;\n // manually extract the private key bytes from nested octet string, see FIXME:\n // https://github.com/digitalbazaar/forge/blob/master/lib/asn1.js#L542\n var privateKeyBytes = messageToNativeBuffer({\n message: forge.asn1.fromDer(privateKey).value,\n encoding: 'binary'\n });\n // TODO: RFC8410 specifies a format for encoding the public key bytes along\n // with the private key bytes. `publicKeyBytes` can be returned in the\n // future. https://tools.ietf.org/html/rfc8410#section-10.3\n return {privateKeyBytes: privateKeyBytes};\n};\n\n/**\n * Converts a public key from a RFC8410 ASN.1 encoding.\n *\n * @param obj - The asn1 representation of a public key.\n *\n * @return {Buffer|Uint8Array} - 32 public key bytes.\n */\ned25519.publicKeyFromAsn1 = function(obj) {\n // get SubjectPublicKeyInfo\n var capture = {};\n var errors = [];\n var valid = forge.asn1.validate(obj, publicKeyValidator, capture, errors);\n if(!valid) {\n var error = new Error('Invalid Key.');\n error.errors = errors;\n throw error;\n }\n var oid = forge.asn1.derToOid(capture.publicKeyOid);\n var ed25519Oid = forge.oids.EdDSA25519;\n if(oid !== ed25519Oid) {\n throw new Error('Invalid OID \"' + oid + '\"; OID must be \"' +\n ed25519Oid + '\".');\n }\n var publicKeyBytes = capture.ed25519PublicKey;\n if(publicKeyBytes.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) {\n throw new Error('Key length is invalid.');\n }\n return messageToNativeBuffer({\n message: publicKeyBytes,\n encoding: 'binary'\n });\n};\n\ned25519.publicKeyFromPrivateKey = function(options) {\n options = options || {};\n var privateKey = messageToNativeBuffer({\n message: options.privateKey, encoding: 'binary'\n });\n if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) {\n throw new TypeError(\n '\"options.privateKey\" must have a byte length of ' +\n ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);\n }\n\n var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);\n for(var i = 0; i < pk.length; ++i) {\n pk[i] = privateKey[32 + i];\n }\n return pk;\n};\n\ned25519.sign = function(options) {\n options = options || {};\n var msg = messageToNativeBuffer(options);\n var privateKey = messageToNativeBuffer({\n message: options.privateKey,\n encoding: 'binary'\n });\n if(privateKey.length === ed25519.constants.SEED_BYTE_LENGTH) {\n var keyPair = ed25519.generateKeyPair({seed: privateKey});\n privateKey = keyPair.privateKey;\n } else if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) {\n throw new TypeError(\n '\"options.privateKey\" must have a byte length of ' +\n ed25519.constants.SEED_BYTE_LENGTH + ' or ' +\n ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);\n }\n\n var signedMsg = new NativeBuffer(\n ed25519.constants.SIGN_BYTE_LENGTH + msg.length);\n crypto_sign(signedMsg, msg, msg.length, privateKey);\n\n var sig = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH);\n for(var i = 0; i < sig.length; ++i) {\n sig[i] = signedMsg[i];\n }\n return sig;\n};\n\ned25519.verify = function(options) {\n options = options || {};\n var msg = messageToNativeBuffer(options);\n if(options.signature === undefined) {\n throw new TypeError(\n '\"options.signature\" must be a node.js Buffer, a Uint8Array, a forge ' +\n 'ByteBuffer, or a binary string.');\n }\n var sig = messageToNativeBuffer({\n message: options.signature,\n encoding: 'binary'\n });\n if(sig.length !== ed25519.constants.SIGN_BYTE_LENGTH) {\n throw new TypeError(\n '\"options.signature\" must have a byte length of ' +\n ed25519.constants.SIGN_BYTE_LENGTH);\n }\n var publicKey = messageToNativeBuffer({\n message: options.publicKey,\n encoding: 'binary'\n });\n if(publicKey.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) {\n throw new TypeError(\n '\"options.publicKey\" must have a byte length of ' +\n ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);\n }\n\n var sm = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length);\n var m = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length);\n var i;\n for(i = 0; i < ed25519.constants.SIGN_BYTE_LENGTH; ++i) {\n sm[i] = sig[i];\n }\n for(i = 0; i < msg.length; ++i) {\n sm[i + ed25519.constants.SIGN_BYTE_LENGTH] = msg[i];\n }\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nfunction messageToNativeBuffer(options) {\n var message = options.message;\n if(message instanceof Uint8Array || message instanceof NativeBuffer) {\n return message;\n }\n\n var encoding = options.encoding;\n if(message === undefined) {\n if(options.md) {\n // TODO: more rigorous validation that `md` is a MessageDigest\n message = options.md.digest().getBytes();\n encoding = 'binary';\n } else {\n throw new TypeError('\"options.message\" or \"options.md\" not specified.');\n }\n }\n\n if(typeof message === 'string' && !encoding) {\n throw new TypeError('\"options.encoding\" must be \"binary\" or \"utf8\".');\n }\n\n if(typeof message === 'string') {\n if(typeof Buffer !== 'undefined') {\n return Buffer.from(message, encoding);\n }\n message = new ByteBuffer(message, encoding);\n } else if(!(message instanceof ByteBuffer)) {\n throw new TypeError(\n '\"options.message\" must be a node.js Buffer, a Uint8Array, a forge ' +\n 'ByteBuffer, or a string with \"options.encoding\" specifying its ' +\n 'encoding.');\n }\n\n // convert to native buffer\n var buffer = new NativeBuffer(message.length());\n for(var i = 0; i < buffer.length; ++i) {\n buffer[i] = message.at(i);\n }\n return buffer;\n}\n\nvar gf0 = gf();\nvar gf1 = gf([1]);\nvar D = gf([\n 0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070,\n 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]);\nvar D2 = gf([\n 0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0,\n 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]);\nvar X = gf([\n 0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c,\n 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]);\nvar Y = gf([\n 0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666,\n 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]);\nvar L = new Float64Array([\n 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58,\n 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\nvar I = gf([\n 0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43,\n 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\n// TODO: update forge buffer implementation to use `Buffer` or `Uint8Array`,\n// whichever is available, to improve performance\nfunction sha512(msg, msgLen) {\n // Note: `out` and `msg` are NativeBuffer\n var md = forge.md.sha512.create();\n var buffer = new ByteBuffer(msg);\n md.update(buffer.getBytes(msgLen), 'binary');\n var hash = md.digest().getBytes();\n if(typeof Buffer !== 'undefined') {\n return Buffer.from(hash, 'binary');\n }\n var out = new NativeBuffer(ed25519.constants.HASH_BYTE_LENGTH);\n for(var i = 0; i < 64; ++i) {\n out[i] = hash.charCodeAt(i);\n }\n return out;\n}\n\nfunction crypto_sign_keypair(pk, sk) {\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n var d = sha512(sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for(i = 0; i < 32; ++i) {\n sk[i + 32] = pk[i];\n }\n return 0;\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n var d = sha512(sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for(i = 0; i < n; ++i) {\n sm[64 + i] = m[i];\n }\n for(i = 0; i < 32; ++i) {\n sm[32 + i] = d[32 + i];\n }\n\n var r = sha512(sm.subarray(32), n + 32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for(i = 32; i < 64; ++i) {\n sm[i] = sk[i];\n }\n var h = sha512(sm, n + 64);\n reduce(h);\n\n for(i = 32; i < 64; ++i) {\n x[i] = 0;\n }\n for(i = 0; i < 32; ++i) {\n x[i] = r[i];\n }\n for(i = 0; i < 32; ++i) {\n for(j = 0; j < 32; j++) {\n x[i + j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i, mlen;\n var t = new NativeBuffer(32);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n mlen = -1;\n if(n < 64) {\n return -1;\n }\n\n if(unpackneg(q, pk)) {\n return -1;\n }\n\n for(i = 0; i < n; ++i) {\n m[i] = sm[i];\n }\n for(i = 0; i < 32; ++i) {\n m[i + 32] = pk[i];\n }\n var h = sha512(m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if(crypto_verify_32(sm, 0, t, 0)) {\n for(i = 0; i < n; ++i) {\n m[i] = 0;\n }\n return -1;\n }\n\n for(i = 0; i < n; ++i) {\n m[i] = sm[i + 64];\n }\n mlen = n;\n return mlen;\n}\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for(i = 63; i >= 32; --i) {\n carry = 0;\n for(j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = (x[j] + 128) >> 8;\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for(j = 0; j < 32; ++j) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for(j = 0; j < 32; ++j) {\n x[j] -= carry * L[j];\n }\n for(i = 0; i < 32; ++i) {\n x[i + 1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64);\n for(var i = 0; i < 64; ++i) {\n x[i] = r[i];\n r[i] = 0;\n }\n modL(r, x);\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n for(var i = 0; i < 4; ++i) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for(i = 0; i < 16; ++i) {\n t[i] = n[i];\n }\n car25519(t);\n car25519(t);\n car25519(t);\n for(j = 0; j < 2; ++j) {\n m[0] = t[0] - 0xffed;\n for(i = 1; i < 15; ++i) {\n m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);\n b = (m[15] >> 16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1 - b);\n }\n for (i = 0; i < 16; i++) {\n o[2 * i] = t[i] & 0xff;\n o[2 * i + 1] = t[i] >> 8;\n }\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if(neq25519(chk, num)) {\n M(r[0], r[0], I);\n }\n\n S(chk, r[0]);\n M(chk, chk, den);\n if(neq25519(chk, num)) {\n return -1;\n }\n\n if(par25519(r[0]) === (p[31] >> 7)) {\n Z(r[0], gf0, r[0]);\n }\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for(i = 0; i < 16; ++i) {\n o[i] = n[2 * i] + (n[2 * i + 1] << 8);\n }\n o[15] &= 0x7fff;\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for(a = 0; a < 16; ++a) {\n c[a] = i[a];\n }\n for(a = 250; a >= 0; --a) {\n S(c, c);\n if(a !== 1) {\n M(c, c, i);\n }\n }\n for(a = 0; a < 16; ++a) {\n o[a] = c[a];\n }\n}\n\nfunction neq25519(a, b) {\n var c = new NativeBuffer(32);\n var d = new NativeBuffer(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x, xi, y, yi, 32);\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i, d = 0;\n for(i = 0; i < n; ++i) {\n d |= x[xi + i] ^ y[yi + i];\n }\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction par25519(a) {\n var d = new NativeBuffer(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for(i = 255; i >= 0; --i) {\n b = (s[(i / 8)|0] >> (i & 7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction set25519(r, a) {\n var i;\n for(i = 0; i < 16; i++) {\n r[i] = a[i] | 0;\n }\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for(a = 0; a < 16; ++a) {\n c[a] = i[a];\n }\n for(a = 253; a >= 0; --a) {\n S(c, c);\n if(a !== 2 && a !== 4) {\n M(c, c, i);\n }\n }\n for(a = 0; a < 16; ++a) {\n o[a] = c[a];\n }\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for(i = 0; i < 16; ++i) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c - 1 + 37 * (c - 1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b - 1);\n for(var i = 0; i < 16; ++i) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction gf(init) {\n var i, r = new Float64Array(16);\n if(init) {\n for(i = 0; i < init.length; ++i) {\n r[i] = init[i];\n }\n }\n return r;\n}\n\nfunction A(o, a, b) {\n for(var i = 0; i < 16; ++i) {\n o[i] = a[i] + b[i];\n }\n}\n\nfunction Z(o, a, b) {\n for(var i = 0; i < 16; ++i) {\n o[i] = a[i] - b[i];\n }\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n","/**\n * Javascript implementation of RSA-KEM.\n *\n * @author Lautaro Cozzani Rodriguez\n * @author Dave Longley\n *\n * Copyright (c) 2014 Lautaro Cozzani <lautaro.cozzani@scytl.com>\n * Copyright (c) 2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./random');\nrequire('./jsbn');\n\nmodule.exports = forge.kem = forge.kem || {};\n\nvar BigInteger = forge.jsbn.BigInteger;\n\n/**\n * The API for the RSA Key Encapsulation Mechanism (RSA-KEM) from ISO 18033-2.\n */\nforge.kem.rsa = {};\n\n/**\n * Creates an RSA KEM API object for generating a secret asymmetric key.\n *\n * The symmetric key may be generated via a call to 'encrypt', which will\n * produce a ciphertext to be transmitted to the recipient and a key to be\n * kept secret. The ciphertext is a parameter to be passed to 'decrypt' which\n * will produce the same secret key for the recipient to use to decrypt a\n * message that was encrypted with the secret key.\n *\n * @param kdf the KDF API to use (eg: new forge.kem.kdf1()).\n * @param options the options to use.\n * [prng] a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n */\nforge.kem.rsa.create = function(kdf, options) {\n options = options || {};\n var prng = options.prng || forge.random;\n\n var kem = {};\n\n /**\n * Generates a secret key and its encapsulation.\n *\n * @param publicKey the RSA public key to encrypt with.\n * @param keyLength the length, in bytes, of the secret key to generate.\n *\n * @return an object with:\n * encapsulation: the ciphertext for generating the secret key, as a\n * binary-encoded string of bytes.\n * key: the secret key to use for encrypting a message.\n */\n kem.encrypt = function(publicKey, keyLength) {\n // generate a random r where 1 < r < n\n var byteLength = Math.ceil(publicKey.n.bitLength() / 8);\n var r;\n do {\n r = new BigInteger(\n forge.util.bytesToHex(prng.getBytesSync(byteLength)),\n 16).mod(publicKey.n);\n } while(r.compareTo(BigInteger.ONE) <= 0);\n\n // prepend r with zeros\n r = forge.util.hexToBytes(r.toString(16));\n var zeros = byteLength - r.length;\n if(zeros > 0) {\n r = forge.util.fillString(String.fromCharCode(0), zeros) + r;\n }\n\n // encrypt the random\n var encapsulation = publicKey.encrypt(r, 'NONE');\n\n // generate the secret key\n var key = kdf.generate(r, keyLength);\n\n return {encapsulation: encapsulation, key: key};\n };\n\n /**\n * Decrypts an encapsulated secret key.\n *\n * @param privateKey the RSA private key to decrypt with.\n * @param encapsulation the ciphertext for generating the secret key, as\n * a binary-encoded string of bytes.\n * @param keyLength the length, in bytes, of the secret key to generate.\n *\n * @return the secret key as a binary-encoded string of bytes.\n */\n kem.decrypt = function(privateKey, encapsulation, keyLength) {\n // decrypt the encapsulation and generate the secret key\n var r = privateKey.decrypt(encapsulation, 'NONE');\n return kdf.generate(r, keyLength);\n };\n\n return kem;\n};\n\n// TODO: add forge.kem.kdf.create('KDF1', {md: ..., ...}) API?\n\n/**\n * Creates a key derivation API object that implements KDF1 per ISO 18033-2.\n *\n * @param md the hash API to use.\n * @param [digestLength] an optional digest length that must be positive and\n * less than or equal to md.digestLength.\n *\n * @return a KDF1 API object.\n */\nforge.kem.kdf1 = function(md, digestLength) {\n _createKDF(this, md, 0, digestLength || md.digestLength);\n};\n\n/**\n * Creates a key derivation API object that implements KDF2 per ISO 18033-2.\n *\n * @param md the hash API to use.\n * @param [digestLength] an optional digest length that must be positive and\n * less than or equal to md.digestLength.\n *\n * @return a KDF2 API object.\n */\nforge.kem.kdf2 = function(md, digestLength) {\n _createKDF(this, md, 1, digestLength || md.digestLength);\n};\n\n/**\n * Creates a KDF1 or KDF2 API object.\n *\n * @param md the hash API to use.\n * @param counterStart the starting index for the counter.\n * @param digestLength the digest length to use.\n *\n * @return the KDF API object.\n */\nfunction _createKDF(kdf, md, counterStart, digestLength) {\n /**\n * Generate a key of the specified length.\n *\n * @param x the binary-encoded byte string to generate a key from.\n * @param length the number of bytes to generate (the size of the key).\n *\n * @return the key as a binary-encoded string.\n */\n kdf.generate = function(x, length) {\n var key = new forge.util.ByteBuffer();\n\n // run counter from counterStart to ceil(length / Hash.len)\n var k = Math.ceil(length / digestLength) + counterStart;\n\n var c = new forge.util.ByteBuffer();\n for(var i = counterStart; i < k; ++i) {\n // I2OSP(i, 4): convert counter to an octet string of 4 octets\n c.putInt32(i);\n\n // digest 'x' and the counter and add the result to the key\n md.start();\n md.update(x + c.getBytes());\n var hash = md.digest();\n key.putBytes(hash.getBytes(digestLength));\n }\n\n // truncate to the correct key length\n key.truncate(key.length() - length);\n return key.getBytes();\n };\n}\n","/**\n * Cross-browser support for logging in a web application.\n *\n * @author David I. Lehn <dlehn@digitalbazaar.com>\n *\n * Copyright (c) 2008-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\n/* LOG API */\nmodule.exports = forge.log = forge.log || {};\n\n/**\n * Application logging system.\n *\n * Each logger level available as it's own function of the form:\n * forge.log.level(category, args...)\n * The category is an arbitrary string, and the args are the same as\n * Firebug's console.log API. By default the call will be output as:\n * 'LEVEL [category] <args[0]>, args[1], ...'\n * This enables proper % formatting via the first argument.\n * Each category is enabled by default but can be enabled or disabled with\n * the setCategoryEnabled() function.\n */\n// list of known levels\nforge.log.levels = [\n 'none', 'error', 'warning', 'info', 'debug', 'verbose', 'max'];\n// info on the levels indexed by name:\n// index: level index\n// name: uppercased display name\nvar sLevelInfo = {};\n// list of loggers\nvar sLoggers = [];\n/**\n * Standard console logger. If no console support is enabled this will\n * remain null. Check before using.\n */\nvar sConsoleLogger = null;\n\n// logger flags\n/**\n * Lock the level at the current value. Used in cases where user config may\n * set the level such that only critical messages are seen but more verbose\n * messages are needed for debugging or other purposes.\n */\nforge.log.LEVEL_LOCKED = (1 << 1);\n/**\n * Always call log function. By default, the logging system will check the\n * message level against logger.level before calling the log function. This\n * flag allows the function to do its own check.\n */\nforge.log.NO_LEVEL_CHECK = (1 << 2);\n/**\n * Perform message interpolation with the passed arguments. \"%\" style\n * fields in log messages will be replaced by arguments as needed. Some\n * loggers, such as Firebug, may do this automatically. The original log\n * message will be available as 'message' and the interpolated version will\n * be available as 'fullMessage'.\n */\nforge.log.INTERPOLATE = (1 << 3);\n\n// setup each log level\nfor(var i = 0; i < forge.log.levels.length; ++i) {\n var level = forge.log.levels[i];\n sLevelInfo[level] = {\n index: i,\n name: level.toUpperCase()\n };\n}\n\n/**\n * Message logger. Will dispatch a message to registered loggers as needed.\n *\n * @param message message object\n */\nforge.log.logMessage = function(message) {\n var messageLevelIndex = sLevelInfo[message.level].index;\n for(var i = 0; i < sLoggers.length; ++i) {\n var logger = sLoggers[i];\n if(logger.flags & forge.log.NO_LEVEL_CHECK) {\n logger.f(message);\n } else {\n // get logger level\n var loggerLevelIndex = sLevelInfo[logger.level].index;\n // check level\n if(messageLevelIndex <= loggerLevelIndex) {\n // message critical enough, call logger\n logger.f(logger, message);\n }\n }\n }\n};\n\n/**\n * Sets the 'standard' key on a message object to:\n * \"LEVEL [category] \" + message\n *\n * @param message a message log object\n */\nforge.log.prepareStandard = function(message) {\n if(!('standard' in message)) {\n message.standard =\n sLevelInfo[message.level].name +\n //' ' + +message.timestamp +\n ' [' + message.category + '] ' +\n message.message;\n }\n};\n\n/**\n * Sets the 'full' key on a message object to the original message\n * interpolated via % formatting with the message arguments.\n *\n * @param message a message log object.\n */\nforge.log.prepareFull = function(message) {\n if(!('full' in message)) {\n // copy args and insert message at the front\n var args = [message.message];\n args = args.concat([] || message['arguments']);\n // format the message\n message.full = forge.util.format.apply(this, args);\n }\n};\n\n/**\n * Applies both preparseStandard() and prepareFull() to a message object and\n * store result in 'standardFull'.\n *\n * @param message a message log object.\n */\nforge.log.prepareStandardFull = function(message) {\n if(!('standardFull' in message)) {\n // FIXME implement 'standardFull' logging\n forge.log.prepareStandard(message);\n message.standardFull = message.standard;\n }\n};\n\n// create log level functions\nif(true) {\n // levels for which we want functions\n var levels = ['error', 'warning', 'info', 'debug', 'verbose'];\n for(var i = 0; i < levels.length; ++i) {\n // wrap in a function to ensure proper level var is passed\n (function(level) {\n // create function for this level\n forge.log[level] = function(category, message/*, args...*/) {\n // convert arguments to real array, remove category and message\n var args = Array.prototype.slice.call(arguments).slice(2);\n // create message object\n // Note: interpolation and standard formatting is done lazily\n var msg = {\n timestamp: new Date(),\n level: level,\n category: category,\n message: message,\n 'arguments': args\n /*standard*/\n /*full*/\n /*fullMessage*/\n };\n // process this message\n forge.log.logMessage(msg);\n };\n })(levels[i]);\n }\n}\n\n/**\n * Creates a new logger with specified custom logging function.\n *\n * The logging function has a signature of:\n * function(logger, message)\n * logger: current logger\n * message: object:\n * level: level id\n * category: category\n * message: string message\n * arguments: Array of extra arguments\n * fullMessage: interpolated message and arguments if INTERPOLATE flag set\n *\n * @param logFunction a logging function which takes a log message object\n * as a parameter.\n *\n * @return a logger object.\n */\nforge.log.makeLogger = function(logFunction) {\n var logger = {\n flags: 0,\n f: logFunction\n };\n forge.log.setLevel(logger, 'none');\n return logger;\n};\n\n/**\n * Sets the current log level on a logger.\n *\n * @param logger the target logger.\n * @param level the new maximum log level as a string.\n *\n * @return true if set, false if not.\n */\nforge.log.setLevel = function(logger, level) {\n var rval = false;\n if(logger && !(logger.flags & forge.log.LEVEL_LOCKED)) {\n for(var i = 0; i < forge.log.levels.length; ++i) {\n var aValidLevel = forge.log.levels[i];\n if(level == aValidLevel) {\n // set level\n logger.level = level;\n rval = true;\n break;\n }\n }\n }\n\n return rval;\n};\n\n/**\n * Locks the log level at its current value.\n *\n * @param logger the target logger.\n * @param lock boolean lock value, default to true.\n */\nforge.log.lock = function(logger, lock) {\n if(typeof lock === 'undefined' || lock) {\n logger.flags |= forge.log.LEVEL_LOCKED;\n } else {\n logger.flags &= ~forge.log.LEVEL_LOCKED;\n }\n};\n\n/**\n * Adds a logger.\n *\n * @param logger the logger object.\n */\nforge.log.addLogger = function(logger) {\n sLoggers.push(logger);\n};\n\n// setup the console logger if possible, else create fake console.log\nif(typeof(console) !== 'undefined' && 'log' in console) {\n var logger;\n if(console.error && console.warn && console.info && console.debug) {\n // looks like Firebug-style logging is available\n // level handlers map\n var levelHandlers = {\n error: console.error,\n warning: console.warn,\n info: console.info,\n debug: console.debug,\n verbose: console.debug\n };\n var f = function(logger, message) {\n forge.log.prepareStandard(message);\n var handler = levelHandlers[message.level];\n // prepend standard message and concat args\n var args = [message.standard];\n args = args.concat(message['arguments'].slice());\n // apply to low-level console function\n handler.apply(console, args);\n };\n logger = forge.log.makeLogger(f);\n } else {\n // only appear to have basic console.log\n var f = function(logger, message) {\n forge.log.prepareStandardFull(message);\n console.log(message.standardFull);\n };\n logger = forge.log.makeLogger(f);\n }\n forge.log.setLevel(logger, 'debug');\n forge.log.addLogger(logger);\n sConsoleLogger = logger;\n} else {\n // define fake console.log to avoid potential script errors on\n // browsers that do not have console logging\n console = {\n log: function() {}\n };\n}\n\n/*\n * Check for logging control query vars.\n *\n * console.level=<level-name>\n * Set's the console log level by name. Useful to override defaults and\n * allow more verbose logging before a user config is loaded.\n *\n * console.lock=<true|false>\n * Lock the console log level at whatever level it is set at. This is run\n * after console.level is processed. Useful to force a level of verbosity\n * that could otherwise be limited by a user config.\n */\nif(sConsoleLogger !== null) {\n var query = forge.util.getQueryVariables();\n if('console.level' in query) {\n // set with last value\n forge.log.setLevel(\n sConsoleLogger, query['console.level'].slice(-1)[0]);\n }\n if('console.lock' in query) {\n // set with last value\n var lock = query['console.lock'].slice(-1)[0];\n if(lock == 'true') {\n forge.log.lock(sConsoleLogger);\n }\n }\n}\n\n// provide public access to console logger\nforge.log.consoleLogger = sConsoleLogger;\n","/**\n * Javascript implementation of PKCS#7 v1.5.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\n * Copyright (c) 2012-2015 Digital Bazaar, Inc.\n *\n * Currently this implementation only supports ContentType of EnvelopedData,\n * EncryptedData, or SignedData at the root level. The top level elements may\n * contain only a ContentInfo of ContentType Data, i.e. plain data. Further\n * nesting is not (yet) supported.\n *\n * The Forge validators for PKCS #7's ASN.1 structures are available from\n * a separate file pkcs7asn1.js, since those are referenced from other\n * PKCS standards like PKCS #12.\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./oids');\nrequire('./pem');\nrequire('./pkcs7asn1');\nrequire('./random');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for ASN.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for PKCS#7 API\nvar p7 = module.exports = forge.pkcs7 = forge.pkcs7 || {};\n\n/**\n * Converts a PKCS#7 message from PEM format.\n *\n * @param pem the PEM-formatted PKCS#7 message.\n *\n * @return the PKCS#7 message.\n */\np7.messageFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PKCS7') {\n var error = new Error('Could not convert PKCS#7 message from PEM; PEM ' +\n 'header type is not \"PKCS#7\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert PKCS#7 message from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return p7.messageFromAsn1(obj);\n};\n\n/**\n * Converts a PKCS#7 message to PEM format.\n *\n * @param msg The PKCS#7 message object\n * @param maxline The maximum characters per line, defaults to 64.\n *\n * @return The PEM-formatted PKCS#7 message.\n */\np7.messageToPem = function(msg, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var pemObj = {\n type: 'PKCS7',\n body: asn1.toDer(msg.toAsn1()).getBytes()\n };\n return forge.pem.encode(pemObj, {maxline: maxline});\n};\n\n/**\n * Converts a PKCS#7 message from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a ContentInfo.\n *\n * @return the PKCS#7 message.\n */\np7.messageFromAsn1 = function(obj) {\n // validate root level ContentInfo and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.contentInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 message. ' +\n 'ASN.1 object is not an PKCS#7 ContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var contentType = asn1.derToOid(capture.contentType);\n var msg;\n\n switch(contentType) {\n case forge.pki.oids.envelopedData:\n msg = p7.createEnvelopedData();\n break;\n\n case forge.pki.oids.encryptedData:\n msg = p7.createEncryptedData();\n break;\n\n case forge.pki.oids.signedData:\n msg = p7.createSignedData();\n break;\n\n default:\n throw new Error('Cannot read PKCS#7 message. ContentType with OID ' +\n contentType + ' is not (yet) supported.');\n }\n\n msg.fromAsn1(capture.content.value[0]);\n return msg;\n};\n\np7.createSignedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.signedData,\n version: 1,\n certificates: [],\n crls: [],\n // TODO: add json-formatted signer stuff here?\n signers: [],\n // populated during sign()\n digestAlgorithmIdentifiers: [],\n contentInfo: null,\n signerInfos: [],\n\n fromAsn1: function(obj) {\n // validate SignedData content block and capture data.\n _fromAsn1(msg, obj, p7.asn1.signedDataValidator);\n msg.certificates = [];\n msg.crls = [];\n msg.digestAlgorithmIdentifiers = [];\n msg.contentInfo = null;\n msg.signerInfos = [];\n\n if(msg.rawCapture.certificates) {\n var certs = msg.rawCapture.certificates.value;\n for(var i = 0; i < certs.length; ++i) {\n msg.certificates.push(forge.pki.certificateFromAsn1(certs[i]));\n }\n }\n\n // TODO: parse crls\n },\n\n toAsn1: function() {\n // degenerate case with no content\n if(!msg.contentInfo) {\n msg.sign();\n }\n\n var certs = [];\n for(var i = 0; i < msg.certificates.length; ++i) {\n certs.push(forge.pki.certificateToAsn1(msg.certificates[i]));\n }\n\n var crls = [];\n // TODO: implement CRLs\n\n // [0] SignedData\n var signedData = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(msg.version).getBytes()),\n // DigestAlgorithmIdentifiers\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n msg.digestAlgorithmIdentifiers),\n // ContentInfo\n msg.contentInfo\n ])\n ]);\n if(certs.length > 0) {\n // [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL\n signedData.value[0].value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, certs));\n }\n if(crls.length > 0) {\n // [1] IMPLICIT CertificateRevocationLists OPTIONAL\n signedData.value[0].value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, crls));\n }\n // SignerInfos\n signedData.value[0].value.push(\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n msg.signerInfos));\n\n // ContentInfo\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(msg.type).getBytes()),\n // [0] SignedData\n signedData\n ]);\n },\n\n /**\n * Add (another) entity to list of signers.\n *\n * Note: If authenticatedAttributes are provided, then, per RFC 2315,\n * they must include at least two attributes: content type and\n * message digest. The message digest attribute value will be\n * auto-calculated during signing and will be ignored if provided.\n *\n * Here's an example of providing these two attributes:\n *\n * forge.pkcs7.createSignedData();\n * p7.addSigner({\n * issuer: cert.issuer.attributes,\n * serialNumber: cert.serialNumber,\n * key: privateKey,\n * digestAlgorithm: forge.pki.oids.sha1,\n * authenticatedAttributes: [{\n * type: forge.pki.oids.contentType,\n * value: forge.pki.oids.data\n * }, {\n * type: forge.pki.oids.messageDigest\n * }]\n * });\n *\n * TODO: Support [subjectKeyIdentifier] as signer's ID.\n *\n * @param signer the signer information:\n * key the signer's private key.\n * [certificate] a certificate containing the public key\n * associated with the signer's private key; use this option as\n * an alternative to specifying signer.issuer and\n * signer.serialNumber.\n * [issuer] the issuer attributes (eg: cert.issuer.attributes).\n * [serialNumber] the signer's certificate's serial number in\n * hexadecimal (eg: cert.serialNumber).\n * [digestAlgorithm] the message digest OID, as a string, to use\n * (eg: forge.pki.oids.sha1).\n * [authenticatedAttributes] an optional array of attributes\n * to also sign along with the content.\n */\n addSigner: function(signer) {\n var issuer = signer.issuer;\n var serialNumber = signer.serialNumber;\n if(signer.certificate) {\n var cert = signer.certificate;\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n issuer = cert.issuer.attributes;\n serialNumber = cert.serialNumber;\n }\n var key = signer.key;\n if(!key) {\n throw new Error(\n 'Could not add PKCS#7 signer; no private key specified.');\n }\n if(typeof key === 'string') {\n key = forge.pki.privateKeyFromPem(key);\n }\n\n // ensure OID known for digest algorithm\n var digestAlgorithm = signer.digestAlgorithm || forge.pki.oids.sha1;\n switch(digestAlgorithm) {\n case forge.pki.oids.sha1:\n case forge.pki.oids.sha256:\n case forge.pki.oids.sha384:\n case forge.pki.oids.sha512:\n case forge.pki.oids.md5:\n break;\n default:\n throw new Error(\n 'Could not add PKCS#7 signer; unknown message digest algorithm: ' +\n digestAlgorithm);\n }\n\n // if authenticatedAttributes is present, then the attributes\n // must contain at least PKCS #9 content-type and message-digest\n var authenticatedAttributes = signer.authenticatedAttributes || [];\n if(authenticatedAttributes.length > 0) {\n var contentType = false;\n var messageDigest = false;\n for(var i = 0; i < authenticatedAttributes.length; ++i) {\n var attr = authenticatedAttributes[i];\n if(!contentType && attr.type === forge.pki.oids.contentType) {\n contentType = true;\n if(messageDigest) {\n break;\n }\n continue;\n }\n if(!messageDigest && attr.type === forge.pki.oids.messageDigest) {\n messageDigest = true;\n if(contentType) {\n break;\n }\n continue;\n }\n }\n\n if(!contentType || !messageDigest) {\n throw new Error('Invalid signer.authenticatedAttributes. If ' +\n 'signer.authenticatedAttributes is specified, then it must ' +\n 'contain at least two attributes, PKCS #9 content-type and ' +\n 'PKCS #9 message-digest.');\n }\n }\n\n msg.signers.push({\n key: key,\n version: 1,\n issuer: issuer,\n serialNumber: serialNumber,\n digestAlgorithm: digestAlgorithm,\n signatureAlgorithm: forge.pki.oids.rsaEncryption,\n signature: null,\n authenticatedAttributes: authenticatedAttributes,\n unauthenticatedAttributes: []\n });\n },\n\n /**\n * Signs the content.\n * @param options Options to apply when signing:\n * [detached] boolean. If signing should be done in detached mode. Defaults to false.\n */\n sign: function(options) {\n options = options || {};\n // auto-generate content info\n if(typeof msg.content !== 'object' || msg.contentInfo === null) {\n // use Data ContentInfo\n msg.contentInfo = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(forge.pki.oids.data).getBytes())\n ]);\n\n // add actual content, if present\n if('content' in msg) {\n var content;\n if(msg.content instanceof forge.util.ByteBuffer) {\n content = msg.content.bytes();\n } else if(typeof msg.content === 'string') {\n content = forge.util.encodeUtf8(msg.content);\n }\n\n if (options.detached) {\n msg.detachedContent = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, content);\n } else {\n msg.contentInfo.value.push(\n // [0] EXPLICIT content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n content)\n ]));\n }\n }\n }\n\n // no signers, return early (degenerate case for certificate container)\n if(msg.signers.length === 0) {\n return;\n }\n\n // generate digest algorithm identifiers\n var mds = addDigestAlgorithmIds();\n\n // generate signerInfos\n addSignerInfos(mds);\n },\n\n verify: function() {\n throw new Error('PKCS#7 signature verification not yet implemented.');\n },\n\n /**\n * Add a certificate.\n *\n * @param cert the certificate to add.\n */\n addCertificate: function(cert) {\n // convert from PEM\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n msg.certificates.push(cert);\n },\n\n /**\n * Add a certificate revokation list.\n *\n * @param crl the certificate revokation list to add.\n */\n addCertificateRevokationList: function(crl) {\n throw new Error('PKCS#7 CRL support not yet implemented.');\n }\n };\n return msg;\n\n function addDigestAlgorithmIds() {\n var mds = {};\n\n for(var i = 0; i < msg.signers.length; ++i) {\n var signer = msg.signers[i];\n var oid = signer.digestAlgorithm;\n if(!(oid in mds)) {\n // content digest\n mds[oid] = forge.md[forge.pki.oids[oid]].create();\n }\n if(signer.authenticatedAttributes.length === 0) {\n // no custom attributes to digest; use content message digest\n signer.md = mds[oid];\n } else {\n // custom attributes to be digested; use own message digest\n // TODO: optimize to just copy message digest state if that\n // feature is ever supported with message digests\n signer.md = forge.md[forge.pki.oids[oid]].create();\n }\n }\n\n // add unique digest algorithm identifiers\n msg.digestAlgorithmIdentifiers = [];\n for(var oid in mds) {\n msg.digestAlgorithmIdentifiers.push(\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oid).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n }\n\n return mds;\n }\n\n function addSignerInfos(mds) {\n var content;\n\n if (msg.detachedContent) {\n // Signature has been made in detached mode.\n content = msg.detachedContent;\n } else {\n // Note: ContentInfo is a SEQUENCE with 2 values, second value is\n // the content field and is optional for a ContentInfo but required here\n // since signers are present\n // get ContentInfo content\n content = msg.contentInfo.value[1];\n // skip [0] EXPLICIT content wrapper\n content = content.value[0];\n }\n\n if(!content) {\n throw new Error(\n 'Could not sign PKCS#7 message; there is no content to sign.');\n }\n\n // get ContentInfo content type\n var contentType = asn1.derToOid(msg.contentInfo.value[0].value);\n\n // serialize content\n var bytes = asn1.toDer(content);\n\n // skip identifier and length per RFC 2315 9.3\n // skip identifier (1 byte)\n bytes.getByte();\n // read and discard length bytes\n asn1.getBerValueLength(bytes);\n bytes = bytes.getBytes();\n\n // digest content DER value bytes\n for(var oid in mds) {\n mds[oid].start().update(bytes);\n }\n\n // sign content\n var signingTime = new Date();\n for(var i = 0; i < msg.signers.length; ++i) {\n var signer = msg.signers[i];\n\n if(signer.authenticatedAttributes.length === 0) {\n // if ContentInfo content type is not \"Data\", then\n // authenticatedAttributes must be present per RFC 2315\n if(contentType !== forge.pki.oids.data) {\n throw new Error(\n 'Invalid signer; authenticatedAttributes must be present ' +\n 'when the ContentInfo content type is not PKCS#7 Data.');\n }\n } else {\n // process authenticated attributes\n // [0] IMPLICIT\n signer.authenticatedAttributesAsn1 = asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n\n // per RFC 2315, attributes are to be digested using a SET container\n // not the above [0] IMPLICIT container\n var attrsAsn1 = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SET, true, []);\n\n for(var ai = 0; ai < signer.authenticatedAttributes.length; ++ai) {\n var attr = signer.authenticatedAttributes[ai];\n if(attr.type === forge.pki.oids.messageDigest) {\n // use content message digest as value\n attr.value = mds[signer.digestAlgorithm].digest();\n } else if(attr.type === forge.pki.oids.signingTime) {\n // auto-populate signing time if not already set\n if(!attr.value) {\n attr.value = signingTime;\n }\n }\n\n // convert to ASN.1 and push onto Attributes SET (for signing) and\n // onto authenticatedAttributesAsn1 to complete SignedData ASN.1\n // TODO: optimize away duplication\n attrsAsn1.value.push(_attributeToAsn1(attr));\n signer.authenticatedAttributesAsn1.value.push(_attributeToAsn1(attr));\n }\n\n // DER-serialize and digest SET OF attributes only\n bytes = asn1.toDer(attrsAsn1).getBytes();\n signer.md.start().update(bytes);\n }\n\n // sign digest\n signer.signature = signer.key.sign(signer.md, 'RSASSA-PKCS1-V1_5');\n }\n\n // add signer info\n msg.signerInfos = _signersToAsn1(msg.signers);\n }\n};\n\n/**\n * Creates an empty PKCS#7 message of type EncryptedData.\n *\n * @return the message.\n */\np7.createEncryptedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.encryptedData,\n version: 0,\n encryptedContent: {\n algorithm: forge.pki.oids['aes256-CBC']\n },\n\n /**\n * Reads an EncryptedData content block (in ASN.1 format)\n *\n * @param obj The ASN.1 representation of the EncryptedData content block\n */\n fromAsn1: function(obj) {\n // Validate EncryptedData content block and capture data.\n _fromAsn1(msg, obj, p7.asn1.encryptedDataValidator);\n },\n\n /**\n * Decrypt encrypted content\n *\n * @param key The (symmetric) key as a byte buffer\n */\n decrypt: function(key) {\n if(key !== undefined) {\n msg.encryptedContent.key = key;\n }\n _decryptContent(msg);\n }\n };\n return msg;\n};\n\n/**\n * Creates an empty PKCS#7 message of type EnvelopedData.\n *\n * @return the message.\n */\np7.createEnvelopedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.envelopedData,\n version: 0,\n recipients: [],\n encryptedContent: {\n algorithm: forge.pki.oids['aes256-CBC']\n },\n\n /**\n * Reads an EnvelopedData content block (in ASN.1 format)\n *\n * @param obj the ASN.1 representation of the EnvelopedData content block.\n */\n fromAsn1: function(obj) {\n // validate EnvelopedData content block and capture data\n var capture = _fromAsn1(msg, obj, p7.asn1.envelopedDataValidator);\n msg.recipients = _recipientsFromAsn1(capture.recipientInfos.value);\n },\n\n toAsn1: function() {\n // ContentInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(msg.type).getBytes()),\n // [0] EnvelopedData\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(msg.version).getBytes()),\n // RecipientInfos\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n _recipientsToAsn1(msg.recipients)),\n // EncryptedContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true,\n _encryptedContentToAsn1(msg.encryptedContent))\n ])\n ])\n ]);\n },\n\n /**\n * Find recipient by X.509 certificate's issuer.\n *\n * @param cert the certificate with the issuer to look for.\n *\n * @return the recipient object.\n */\n findRecipient: function(cert) {\n var sAttr = cert.issuer.attributes;\n\n for(var i = 0; i < msg.recipients.length; ++i) {\n var r = msg.recipients[i];\n var rAttr = r.issuer;\n\n if(r.serialNumber !== cert.serialNumber) {\n continue;\n }\n\n if(rAttr.length !== sAttr.length) {\n continue;\n }\n\n var match = true;\n for(var j = 0; j < sAttr.length; ++j) {\n if(rAttr[j].type !== sAttr[j].type ||\n rAttr[j].value !== sAttr[j].value) {\n match = false;\n break;\n }\n }\n\n if(match) {\n return r;\n }\n }\n\n return null;\n },\n\n /**\n * Decrypt enveloped content\n *\n * @param recipient The recipient object related to the private key\n * @param privKey The (RSA) private key object\n */\n decrypt: function(recipient, privKey) {\n if(msg.encryptedContent.key === undefined && recipient !== undefined &&\n privKey !== undefined) {\n switch(recipient.encryptedContent.algorithm) {\n case forge.pki.oids.rsaEncryption:\n case forge.pki.oids.desCBC:\n var key = privKey.decrypt(recipient.encryptedContent.content);\n msg.encryptedContent.key = forge.util.createBuffer(key);\n break;\n\n default:\n throw new Error('Unsupported asymmetric cipher, ' +\n 'OID ' + recipient.encryptedContent.algorithm);\n }\n }\n\n _decryptContent(msg);\n },\n\n /**\n * Add (another) entity to list of recipients.\n *\n * @param cert The certificate of the entity to add.\n */\n addRecipient: function(cert) {\n msg.recipients.push({\n version: 0,\n issuer: cert.issuer.attributes,\n serialNumber: cert.serialNumber,\n encryptedContent: {\n // We simply assume rsaEncryption here, since forge.pki only\n // supports RSA so far. If the PKI module supports other\n // ciphers one day, we need to modify this one as well.\n algorithm: forge.pki.oids.rsaEncryption,\n key: cert.publicKey\n }\n });\n },\n\n /**\n * Encrypt enveloped content.\n *\n * This function supports two optional arguments, cipher and key, which\n * can be used to influence symmetric encryption. Unless cipher is\n * provided, the cipher specified in encryptedContent.algorithm is used\n * (defaults to AES-256-CBC). If no key is provided, encryptedContent.key\n * is (re-)used. If that one's not set, a random key will be generated\n * automatically.\n *\n * @param [key] The key to be used for symmetric encryption.\n * @param [cipher] The OID of the symmetric cipher to use.\n */\n encrypt: function(key, cipher) {\n // Part 1: Symmetric encryption\n if(msg.encryptedContent.content === undefined) {\n cipher = cipher || msg.encryptedContent.algorithm;\n key = key || msg.encryptedContent.key;\n\n var keyLen, ivLen, ciphFn;\n switch(cipher) {\n case forge.pki.oids['aes128-CBC']:\n keyLen = 16;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['aes192-CBC']:\n keyLen = 24;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['aes256-CBC']:\n keyLen = 32;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['des-EDE3-CBC']:\n keyLen = 24;\n ivLen = 8;\n ciphFn = forge.des.createEncryptionCipher;\n break;\n\n default:\n throw new Error('Unsupported symmetric cipher, OID ' + cipher);\n }\n\n if(key === undefined) {\n key = forge.util.createBuffer(forge.random.getBytes(keyLen));\n } else if(key.length() != keyLen) {\n throw new Error('Symmetric key has wrong length; ' +\n 'got ' + key.length() + ' bytes, expected ' + keyLen + '.');\n }\n\n // Keep a copy of the key & IV in the object, so the caller can\n // use it for whatever reason.\n msg.encryptedContent.algorithm = cipher;\n msg.encryptedContent.key = key;\n msg.encryptedContent.parameter = forge.util.createBuffer(\n forge.random.getBytes(ivLen));\n\n var ciph = ciphFn(key);\n ciph.start(msg.encryptedContent.parameter.copy());\n ciph.update(msg.content);\n\n // The finish function does PKCS#7 padding by default, therefore\n // no action required by us.\n if(!ciph.finish()) {\n throw new Error('Symmetric encryption failed.');\n }\n\n msg.encryptedContent.content = ciph.output;\n }\n\n // Part 2: asymmetric encryption for each recipient\n for(var i = 0; i < msg.recipients.length; ++i) {\n var recipient = msg.recipients[i];\n\n // Nothing to do, encryption already done.\n if(recipient.encryptedContent.content !== undefined) {\n continue;\n }\n\n switch(recipient.encryptedContent.algorithm) {\n case forge.pki.oids.rsaEncryption:\n recipient.encryptedContent.content =\n recipient.encryptedContent.key.encrypt(\n msg.encryptedContent.key.data);\n break;\n\n default:\n throw new Error('Unsupported asymmetric cipher, OID ' +\n recipient.encryptedContent.algorithm);\n }\n }\n }\n };\n return msg;\n};\n\n/**\n * Converts a single recipient from an ASN.1 object.\n *\n * @param obj the ASN.1 RecipientInfo.\n *\n * @return the recipient object.\n */\nfunction _recipientFromAsn1(obj) {\n // validate EnvelopedData content block and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.recipientInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 RecipientInfo. ' +\n 'ASN.1 object is not an PKCS#7 RecipientInfo.');\n error.errors = errors;\n throw error;\n }\n\n return {\n version: capture.version.charCodeAt(0),\n issuer: forge.pki.RDNAttributesAsArray(capture.issuer),\n serialNumber: forge.util.createBuffer(capture.serial).toHex(),\n encryptedContent: {\n algorithm: asn1.derToOid(capture.encAlgorithm),\n parameter: capture.encParameter.value,\n content: capture.encKey\n }\n };\n}\n\n/**\n * Converts a single recipient object to an ASN.1 object.\n *\n * @param obj the recipient object.\n *\n * @return the ASN.1 RecipientInfo.\n */\nfunction _recipientToAsn1(obj) {\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(obj.version).getBytes()),\n // IssuerAndSerialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Name\n forge.pki.distinguishedNameToAsn1({attributes: obj.issuer}),\n // Serial\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(obj.serialNumber))\n ]),\n // KeyEncryptionAlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.encryptedContent.algorithm).getBytes()),\n // Parameter, force NULL, only RSA supported for now.\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // EncryptedKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n obj.encryptedContent.content)\n ]);\n}\n\n/**\n * Map a set of RecipientInfo ASN.1 objects to recipient objects.\n *\n * @param infos an array of ASN.1 representations RecipientInfo (i.e. SET OF).\n *\n * @return an array of recipient objects.\n */\nfunction _recipientsFromAsn1(infos) {\n var ret = [];\n for(var i = 0; i < infos.length; ++i) {\n ret.push(_recipientFromAsn1(infos[i]));\n }\n return ret;\n}\n\n/**\n * Map an array of recipient objects to ASN.1 RecipientInfo objects.\n *\n * @param recipients an array of recipientInfo objects.\n *\n * @return an array of ASN.1 RecipientInfos.\n */\nfunction _recipientsToAsn1(recipients) {\n var ret = [];\n for(var i = 0; i < recipients.length; ++i) {\n ret.push(_recipientToAsn1(recipients[i]));\n }\n return ret;\n}\n\n/**\n * Converts a single signer from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a SignerInfo.\n *\n * @return the signer object.\n */\nfunction _signerFromAsn1(obj) {\n // validate EnvelopedData content block and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.signerInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 SignerInfo. ' +\n 'ASN.1 object is not an PKCS#7 SignerInfo.');\n error.errors = errors;\n throw error;\n }\n\n var rval = {\n version: capture.version.charCodeAt(0),\n issuer: forge.pki.RDNAttributesAsArray(capture.issuer),\n serialNumber: forge.util.createBuffer(capture.serial).toHex(),\n digestAlgorithm: asn1.derToOid(capture.digestAlgorithm),\n signatureAlgorithm: asn1.derToOid(capture.signatureAlgorithm),\n signature: capture.signature,\n authenticatedAttributes: [],\n unauthenticatedAttributes: []\n };\n\n // TODO: convert attributes\n var authenticatedAttributes = capture.authenticatedAttributes || [];\n var unauthenticatedAttributes = capture.unauthenticatedAttributes || [];\n\n return rval;\n}\n\n/**\n * Converts a single signerInfo object to an ASN.1 object.\n *\n * @param obj the signerInfo object.\n *\n * @return the ASN.1 representation of a SignerInfo.\n */\nfunction _signerToAsn1(obj) {\n // SignerInfo\n var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(obj.version).getBytes()),\n // issuerAndSerialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // name\n forge.pki.distinguishedNameToAsn1({attributes: obj.issuer}),\n // serial\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(obj.serialNumber))\n ]),\n // digestAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.digestAlgorithm).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ]);\n\n // authenticatedAttributes (OPTIONAL)\n if(obj.authenticatedAttributesAsn1) {\n // add ASN.1 previously generated during signing\n rval.value.push(obj.authenticatedAttributesAsn1);\n }\n\n // digestEncryptionAlgorithm\n rval.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.signatureAlgorithm).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n\n // encryptedDigest\n rval.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, obj.signature));\n\n // unauthenticatedAttributes (OPTIONAL)\n if(obj.unauthenticatedAttributes.length > 0) {\n // [1] IMPLICIT\n var attrsAsn1 = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, []);\n for(var i = 0; i < obj.unauthenticatedAttributes.length; ++i) {\n var attr = obj.unauthenticatedAttributes[i];\n attrsAsn1.values.push(_attributeToAsn1(attr));\n }\n rval.value.push(attrsAsn1);\n }\n\n return rval;\n}\n\n/**\n * Map a set of SignerInfo ASN.1 objects to an array of signer objects.\n *\n * @param signerInfoAsn1s an array of ASN.1 SignerInfos (i.e. SET OF).\n *\n * @return an array of signers objects.\n */\nfunction _signersFromAsn1(signerInfoAsn1s) {\n var ret = [];\n for(var i = 0; i < signerInfoAsn1s.length; ++i) {\n ret.push(_signerFromAsn1(signerInfoAsn1s[i]));\n }\n return ret;\n}\n\n/**\n * Map an array of signer objects to ASN.1 objects.\n *\n * @param signers an array of signer objects.\n *\n * @return an array of ASN.1 SignerInfos.\n */\nfunction _signersToAsn1(signers) {\n var ret = [];\n for(var i = 0; i < signers.length; ++i) {\n ret.push(_signerToAsn1(signers[i]));\n }\n return ret;\n}\n\n/**\n * Convert an attribute object to an ASN.1 Attribute.\n *\n * @param attr the attribute object.\n *\n * @return the ASN.1 Attribute.\n */\nfunction _attributeToAsn1(attr) {\n var value;\n\n // TODO: generalize to support more attributes\n if(attr.type === forge.pki.oids.contentType) {\n value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.value).getBytes());\n } else if(attr.type === forge.pki.oids.messageDigest) {\n value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n attr.value.bytes());\n } else if(attr.type === forge.pki.oids.signingTime) {\n /* Note per RFC 2985: Dates between 1 January 1950 and 31 December 2049\n (inclusive) MUST be encoded as UTCTime. Any dates with year values\n before 1950 or after 2049 MUST be encoded as GeneralizedTime. [Further,]\n UTCTime values MUST be expressed in Greenwich Mean Time (Zulu) and MUST\n include seconds (i.e., times are YYMMDDHHMMSSZ), even where the\n number of seconds is zero. Midnight (GMT) must be represented as\n \"YYMMDD000000Z\". */\n // TODO: make these module-level constants\n var jan_1_1950 = new Date('1950-01-01T00:00:00Z');\n var jan_1_2050 = new Date('2050-01-01T00:00:00Z');\n var date = attr.value;\n if(typeof date === 'string') {\n // try to parse date\n var timestamp = Date.parse(date);\n if(!isNaN(timestamp)) {\n date = new Date(timestamp);\n } else if(date.length === 13) {\n // YYMMDDHHMMSSZ (13 chars for UTCTime)\n date = asn1.utcTimeToDate(date);\n } else {\n // assume generalized time\n date = asn1.generalizedTimeToDate(date);\n }\n }\n\n if(date >= jan_1_1950 && date < jan_1_2050) {\n value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false,\n asn1.dateToUtcTime(date));\n } else {\n value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false,\n asn1.dateToGeneralizedTime(date));\n }\n }\n\n // TODO: expose as common API call\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n // AttributeValue\n value\n ])\n ]);\n}\n\n/**\n * Map messages encrypted content to ASN.1 objects.\n *\n * @param ec The encryptedContent object of the message.\n *\n * @return ASN.1 representation of the encryptedContent object (SEQUENCE).\n */\nfunction _encryptedContentToAsn1(ec) {\n return [\n // ContentType, always Data for the moment\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(forge.pki.oids.data).getBytes()),\n // ContentEncryptionAlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(ec.algorithm).getBytes()),\n // Parameters (IV)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n ec.parameter.getBytes())\n ]),\n // [0] EncryptedContent\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n ec.content.getBytes())\n ])\n ];\n}\n\n/**\n * Reads the \"common part\" of an PKCS#7 content block (in ASN.1 format)\n *\n * This function reads the \"common part\" of the PKCS#7 content blocks\n * EncryptedData and EnvelopedData, i.e. version number and symmetrically\n * encrypted content block.\n *\n * The result of the ASN.1 validate and capture process is returned\n * to allow the caller to extract further data, e.g. the list of recipients\n * in case of a EnvelopedData object.\n *\n * @param msg the PKCS#7 object to read the data to.\n * @param obj the ASN.1 representation of the content block.\n * @param validator the ASN.1 structure validator object to use.\n *\n * @return the value map captured by validator object.\n */\nfunction _fromAsn1(msg, obj, validator) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, validator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 message. ' +\n 'ASN.1 object is not a supported PKCS#7 message.');\n error.errors = error;\n throw error;\n }\n\n // Check contentType, so far we only support (raw) Data.\n var contentType = asn1.derToOid(capture.contentType);\n if(contentType !== forge.pki.oids.data) {\n throw new Error('Unsupported PKCS#7 message. ' +\n 'Only wrapped ContentType Data supported.');\n }\n\n if(capture.encryptedContent) {\n var content = '';\n if(forge.util.isArray(capture.encryptedContent)) {\n for(var i = 0; i < capture.encryptedContent.length; ++i) {\n if(capture.encryptedContent[i].type !== asn1.Type.OCTETSTRING) {\n throw new Error('Malformed PKCS#7 message, expecting encrypted ' +\n 'content constructed of only OCTET STRING objects.');\n }\n content += capture.encryptedContent[i].value;\n }\n } else {\n content = capture.encryptedContent;\n }\n msg.encryptedContent = {\n algorithm: asn1.derToOid(capture.encAlgorithm),\n parameter: forge.util.createBuffer(capture.encParameter.value),\n content: forge.util.createBuffer(content)\n };\n }\n\n if(capture.content) {\n var content = '';\n if(forge.util.isArray(capture.content)) {\n for(var i = 0; i < capture.content.length; ++i) {\n if(capture.content[i].type !== asn1.Type.OCTETSTRING) {\n throw new Error('Malformed PKCS#7 message, expecting ' +\n 'content constructed of only OCTET STRING objects.');\n }\n content += capture.content[i].value;\n }\n } else {\n content = capture.content;\n }\n msg.content = forge.util.createBuffer(content);\n }\n\n msg.version = capture.version.charCodeAt(0);\n msg.rawCapture = capture;\n\n return capture;\n}\n\n/**\n * Decrypt the symmetrically encrypted content block of the PKCS#7 message.\n *\n * Decryption is skipped in case the PKCS#7 message object already has a\n * (decrypted) content attribute. The algorithm, key and cipher parameters\n * (probably the iv) are taken from the encryptedContent attribute of the\n * message object.\n *\n * @param The PKCS#7 message object.\n */\nfunction _decryptContent(msg) {\n if(msg.encryptedContent.key === undefined) {\n throw new Error('Symmetric key not available.');\n }\n\n if(msg.content === undefined) {\n var ciph;\n\n switch(msg.encryptedContent.algorithm) {\n case forge.pki.oids['aes128-CBC']:\n case forge.pki.oids['aes192-CBC']:\n case forge.pki.oids['aes256-CBC']:\n ciph = forge.aes.createDecryptionCipher(msg.encryptedContent.key);\n break;\n\n case forge.pki.oids['desCBC']:\n case forge.pki.oids['des-EDE3-CBC']:\n ciph = forge.des.createDecryptionCipher(msg.encryptedContent.key);\n break;\n\n default:\n throw new Error('Unsupported symmetric cipher, OID ' +\n msg.encryptedContent.algorithm);\n }\n ciph.start(msg.encryptedContent.parameter);\n ciph.update(msg.encryptedContent.content);\n\n if(!ciph.finish()) {\n throw new Error('Symmetric decryption failed.');\n }\n\n msg.content = ciph.output;\n }\n}\n","/**\n * Functions to output keys in SSH-friendly formats.\n *\n * This is part of the Forge project which may be used under the terms of\n * either the BSD License or the GNU General Public License (GPL) Version 2.\n *\n * See: https://github.com/digitalbazaar/forge/blob/cbebca3780658703d925b61b2caffb1d263a6c1d/LICENSE\n *\n * @author https://github.com/shellac\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./hmac');\nrequire('./md5');\nrequire('./sha1');\nrequire('./util');\n\nvar ssh = module.exports = forge.ssh = forge.ssh || {};\n\n/**\n * Encodes (and optionally encrypts) a private RSA key as a Putty PPK file.\n *\n * @param privateKey the key.\n * @param passphrase a passphrase to protect the key (falsy for no encryption).\n * @param comment a comment to include in the key file.\n *\n * @return the PPK file as a string.\n */\nssh.privateKeyToPutty = function(privateKey, passphrase, comment) {\n comment = comment || '';\n passphrase = passphrase || '';\n var algorithm = 'ssh-rsa';\n var encryptionAlgorithm = (passphrase === '') ? 'none' : 'aes256-cbc';\n\n var ppk = 'PuTTY-User-Key-File-2: ' + algorithm + '\\r\\n';\n ppk += 'Encryption: ' + encryptionAlgorithm + '\\r\\n';\n ppk += 'Comment: ' + comment + '\\r\\n';\n\n // public key into buffer for ppk\n var pubbuffer = forge.util.createBuffer();\n _addStringToBuffer(pubbuffer, algorithm);\n _addBigIntegerToBuffer(pubbuffer, privateKey.e);\n _addBigIntegerToBuffer(pubbuffer, privateKey.n);\n\n // write public key\n var pub = forge.util.encode64(pubbuffer.bytes(), 64);\n var length = Math.floor(pub.length / 66) + 1; // 66 = 64 + \\r\\n\n ppk += 'Public-Lines: ' + length + '\\r\\n';\n ppk += pub;\n\n // private key into a buffer\n var privbuffer = forge.util.createBuffer();\n _addBigIntegerToBuffer(privbuffer, privateKey.d);\n _addBigIntegerToBuffer(privbuffer, privateKey.p);\n _addBigIntegerToBuffer(privbuffer, privateKey.q);\n _addBigIntegerToBuffer(privbuffer, privateKey.qInv);\n\n // optionally encrypt the private key\n var priv;\n if(!passphrase) {\n // use the unencrypted buffer\n priv = forge.util.encode64(privbuffer.bytes(), 64);\n } else {\n // encrypt RSA key using passphrase\n var encLen = privbuffer.length() + 16 - 1;\n encLen -= encLen % 16;\n\n // pad private key with sha1-d data -- needs to be a multiple of 16\n var padding = _sha1(privbuffer.bytes());\n\n padding.truncate(padding.length() - encLen + privbuffer.length());\n privbuffer.putBuffer(padding);\n\n var aeskey = forge.util.createBuffer();\n aeskey.putBuffer(_sha1('\\x00\\x00\\x00\\x00', passphrase));\n aeskey.putBuffer(_sha1('\\x00\\x00\\x00\\x01', passphrase));\n\n // encrypt some bytes using CBC mode\n // key is 40 bytes, so truncate *by* 8 bytes\n var cipher = forge.aes.createEncryptionCipher(aeskey.truncate(8), 'CBC');\n cipher.start(forge.util.createBuffer().fillWithByte(0, 16));\n cipher.update(privbuffer.copy());\n cipher.finish();\n var encrypted = cipher.output;\n\n // Note: this appears to differ from Putty -- is forge wrong, or putty?\n // due to padding we finish as an exact multiple of 16\n encrypted.truncate(16); // all padding\n\n priv = forge.util.encode64(encrypted.bytes(), 64);\n }\n\n // output private key\n length = Math.floor(priv.length / 66) + 1; // 64 + \\r\\n\n ppk += '\\r\\nPrivate-Lines: ' + length + '\\r\\n';\n ppk += priv;\n\n // MAC\n var mackey = _sha1('putty-private-key-file-mac-key', passphrase);\n\n var macbuffer = forge.util.createBuffer();\n _addStringToBuffer(macbuffer, algorithm);\n _addStringToBuffer(macbuffer, encryptionAlgorithm);\n _addStringToBuffer(macbuffer, comment);\n macbuffer.putInt32(pubbuffer.length());\n macbuffer.putBuffer(pubbuffer);\n macbuffer.putInt32(privbuffer.length());\n macbuffer.putBuffer(privbuffer);\n\n var hmac = forge.hmac.create();\n hmac.start('sha1', mackey);\n hmac.update(macbuffer.bytes());\n\n ppk += '\\r\\nPrivate-MAC: ' + hmac.digest().toHex() + '\\r\\n';\n\n return ppk;\n};\n\n/**\n * Encodes a public RSA key as an OpenSSH file.\n *\n * @param key the key.\n * @param comment a comment.\n *\n * @return the public key in OpenSSH format.\n */\nssh.publicKeyToOpenSSH = function(key, comment) {\n var type = 'ssh-rsa';\n comment = comment || '';\n\n var buffer = forge.util.createBuffer();\n _addStringToBuffer(buffer, type);\n _addBigIntegerToBuffer(buffer, key.e);\n _addBigIntegerToBuffer(buffer, key.n);\n\n return type + ' ' + forge.util.encode64(buffer.bytes()) + ' ' + comment;\n};\n\n/**\n * Encodes a private RSA key as an OpenSSH file.\n *\n * @param key the key.\n * @param passphrase a passphrase to protect the key (falsy for no encryption).\n *\n * @return the public key in OpenSSH format.\n */\nssh.privateKeyToOpenSSH = function(privateKey, passphrase) {\n if(!passphrase) {\n return forge.pki.privateKeyToPem(privateKey);\n }\n // OpenSSH private key is just a legacy format, it seems\n return forge.pki.encryptRsaPrivateKey(privateKey, passphrase,\n {legacy: true, algorithm: 'aes128'});\n};\n\n/**\n * Gets the SSH fingerprint for the given public key.\n *\n * @param options the options to use.\n * [md] the message digest object to use (defaults to forge.md.md5).\n * [encoding] an alternative output encoding, such as 'hex'\n * (defaults to none, outputs a byte buffer).\n * [delimiter] the delimiter to use between bytes for 'hex' encoded\n * output, eg: ':' (defaults to none).\n *\n * @return the fingerprint as a byte buffer or other encoding based on options.\n */\nssh.getPublicKeyFingerprint = function(key, options) {\n options = options || {};\n var md = options.md || forge.md.md5.create();\n\n var type = 'ssh-rsa';\n var buffer = forge.util.createBuffer();\n _addStringToBuffer(buffer, type);\n _addBigIntegerToBuffer(buffer, key.e);\n _addBigIntegerToBuffer(buffer, key.n);\n\n // hash public key bytes\n md.start();\n md.update(buffer.getBytes());\n var digest = md.digest();\n if(options.encoding === 'hex') {\n var hex = digest.toHex();\n if(options.delimiter) {\n return hex.match(/.{2}/g).join(options.delimiter);\n }\n return hex;\n } else if(options.encoding === 'binary') {\n return digest.getBytes();\n } else if(options.encoding) {\n throw new Error('Unknown encoding \"' + options.encoding + '\".');\n }\n return digest;\n};\n\n/**\n * Adds len(val) then val to a buffer.\n *\n * @param buffer the buffer to add to.\n * @param val a big integer.\n */\nfunction _addBigIntegerToBuffer(buffer, val) {\n var hexVal = val.toString(16);\n // ensure 2s complement +ve\n if(hexVal[0] >= '8') {\n hexVal = '00' + hexVal;\n }\n var bytes = forge.util.hexToBytes(hexVal);\n buffer.putInt32(bytes.length);\n buffer.putBytes(bytes);\n}\n\n/**\n * Adds len(val) then val to a buffer.\n *\n * @param buffer the buffer to add to.\n * @param val a string.\n */\nfunction _addStringToBuffer(buffer, val) {\n buffer.putInt32(val.length);\n buffer.putString(val);\n}\n\n/**\n * Hashes the arguments into one value using SHA-1.\n *\n * @return the sha1 hash of the provided arguments.\n */\nfunction _sha1() {\n var sha = forge.md.sha1.create();\n var num = arguments.length;\n for (var i = 0; i < num; ++i) {\n sha.update(arguments[i]);\n }\n return sha.digest();\n}\n","/**\n * Support for concurrent task management and synchronization in web\n * applications.\n *\n * @author Dave Longley\n * @author David I. Lehn <dlehn@digitalbazaar.com>\n *\n * Copyright (c) 2009-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./debug');\nrequire('./log');\nrequire('./util');\n\n// logging category\nvar cat = 'forge.task';\n\n// verbose level\n// 0: off, 1: a little, 2: a whole lot\n// Verbose debug logging is surrounded by a level check to avoid the\n// performance issues with even calling the logging code regardless if it\n// is actually logged. For performance reasons this should not be set to 2\n// for production use.\n// ex: if(sVL >= 2) forge.log.verbose(....)\nvar sVL = 0;\n\n// track tasks for debugging\nvar sTasks = {};\nvar sNextTaskId = 0;\n// debug access\nforge.debug.set(cat, 'tasks', sTasks);\n\n// a map of task type to task queue\nvar sTaskQueues = {};\n// debug access\nforge.debug.set(cat, 'queues', sTaskQueues);\n\n// name for unnamed tasks\nvar sNoTaskName = '?';\n\n// maximum number of doNext() recursions before a context swap occurs\n// FIXME: might need to tweak this based on the browser\nvar sMaxRecursions = 30;\n\n// time slice for doing tasks before a context swap occurs\n// FIXME: might need to tweak this based on the browser\nvar sTimeSlice = 20;\n\n/**\n * Task states.\n *\n * READY: ready to start processing\n * RUNNING: task or a subtask is running\n * BLOCKED: task is waiting to acquire N permits to continue\n * SLEEPING: task is sleeping for a period of time\n * DONE: task is done\n * ERROR: task has an error\n */\nvar READY = 'ready';\nvar RUNNING = 'running';\nvar BLOCKED = 'blocked';\nvar SLEEPING = 'sleeping';\nvar DONE = 'done';\nvar ERROR = 'error';\n\n/**\n * Task actions. Used to control state transitions.\n *\n * STOP: stop processing\n * START: start processing tasks\n * BLOCK: block task from continuing until 1 or more permits are released\n * UNBLOCK: release one or more permits\n * SLEEP: sleep for a period of time\n * WAKEUP: wakeup early from SLEEPING state\n * CANCEL: cancel further tasks\n * FAIL: a failure occured\n */\nvar STOP = 'stop';\nvar START = 'start';\nvar BLOCK = 'block';\nvar UNBLOCK = 'unblock';\nvar SLEEP = 'sleep';\nvar WAKEUP = 'wakeup';\nvar CANCEL = 'cancel';\nvar FAIL = 'fail';\n\n/**\n * State transition table.\n *\n * nextState = sStateTable[currentState][action]\n */\nvar sStateTable = {};\n\nsStateTable[READY] = {};\nsStateTable[READY][STOP] = READY;\nsStateTable[READY][START] = RUNNING;\nsStateTable[READY][CANCEL] = DONE;\nsStateTable[READY][FAIL] = ERROR;\n\nsStateTable[RUNNING] = {};\nsStateTable[RUNNING][STOP] = READY;\nsStateTable[RUNNING][START] = RUNNING;\nsStateTable[RUNNING][BLOCK] = BLOCKED;\nsStateTable[RUNNING][UNBLOCK] = RUNNING;\nsStateTable[RUNNING][SLEEP] = SLEEPING;\nsStateTable[RUNNING][WAKEUP] = RUNNING;\nsStateTable[RUNNING][CANCEL] = DONE;\nsStateTable[RUNNING][FAIL] = ERROR;\n\nsStateTable[BLOCKED] = {};\nsStateTable[BLOCKED][STOP] = BLOCKED;\nsStateTable[BLOCKED][START] = BLOCKED;\nsStateTable[BLOCKED][BLOCK] = BLOCKED;\nsStateTable[BLOCKED][UNBLOCK] = BLOCKED;\nsStateTable[BLOCKED][SLEEP] = BLOCKED;\nsStateTable[BLOCKED][WAKEUP] = BLOCKED;\nsStateTable[BLOCKED][CANCEL] = DONE;\nsStateTable[BLOCKED][FAIL] = ERROR;\n\nsStateTable[SLEEPING] = {};\nsStateTable[SLEEPING][STOP] = SLEEPING;\nsStateTable[SLEEPING][START] = SLEEPING;\nsStateTable[SLEEPING][BLOCK] = SLEEPING;\nsStateTable[SLEEPING][UNBLOCK] = SLEEPING;\nsStateTable[SLEEPING][SLEEP] = SLEEPING;\nsStateTable[SLEEPING][WAKEUP] = SLEEPING;\nsStateTable[SLEEPING][CANCEL] = DONE;\nsStateTable[SLEEPING][FAIL] = ERROR;\n\nsStateTable[DONE] = {};\nsStateTable[DONE][STOP] = DONE;\nsStateTable[DONE][START] = DONE;\nsStateTable[DONE][BLOCK] = DONE;\nsStateTable[DONE][UNBLOCK] = DONE;\nsStateTable[DONE][SLEEP] = DONE;\nsStateTable[DONE][WAKEUP] = DONE;\nsStateTable[DONE][CANCEL] = DONE;\nsStateTable[DONE][FAIL] = ERROR;\n\nsStateTable[ERROR] = {};\nsStateTable[ERROR][STOP] = ERROR;\nsStateTable[ERROR][START] = ERROR;\nsStateTable[ERROR][BLOCK] = ERROR;\nsStateTable[ERROR][UNBLOCK] = ERROR;\nsStateTable[ERROR][SLEEP] = ERROR;\nsStateTable[ERROR][WAKEUP] = ERROR;\nsStateTable[ERROR][CANCEL] = ERROR;\nsStateTable[ERROR][FAIL] = ERROR;\n\n/**\n * Creates a new task.\n *\n * @param options options for this task\n * run: the run function for the task (required)\n * name: the run function for the task (optional)\n * parent: parent of this task (optional)\n *\n * @return the empty task.\n */\nvar Task = function(options) {\n // task id\n this.id = -1;\n\n // task name\n this.name = options.name || sNoTaskName;\n\n // task has no parent\n this.parent = options.parent || null;\n\n // save run function\n this.run = options.run;\n\n // create a queue of subtasks to run\n this.subtasks = [];\n\n // error flag\n this.error = false;\n\n // state of the task\n this.state = READY;\n\n // number of times the task has been blocked (also the number\n // of permits needed to be released to continue running)\n this.blocks = 0;\n\n // timeout id when sleeping\n this.timeoutId = null;\n\n // no swap time yet\n this.swapTime = null;\n\n // no user data\n this.userData = null;\n\n // initialize task\n // FIXME: deal with overflow\n this.id = sNextTaskId++;\n sTasks[this.id] = this;\n if(sVL >= 1) {\n forge.log.verbose(cat, '[%s][%s] init', this.id, this.name, this);\n }\n};\n\n/**\n * Logs debug information on this task and the system state.\n */\nTask.prototype.debug = function(msg) {\n msg = msg || '';\n forge.log.debug(cat, msg,\n '[%s][%s] task:', this.id, this.name, this,\n 'subtasks:', this.subtasks.length,\n 'queue:', sTaskQueues);\n};\n\n/**\n * Adds a subtask to run after task.doNext() or task.fail() is called.\n *\n * @param name human readable name for this task (optional).\n * @param subrun a function to run that takes the current task as\n * its first parameter.\n *\n * @return the current task (useful for chaining next() calls).\n */\nTask.prototype.next = function(name, subrun) {\n // juggle parameters if it looks like no name is given\n if(typeof(name) === 'function') {\n subrun = name;\n\n // inherit parent's name\n name = this.name;\n }\n // create subtask, set parent to this task, propagate callbacks\n var subtask = new Task({\n run: subrun,\n name: name,\n parent: this\n });\n // start subtasks running\n subtask.state = RUNNING;\n subtask.type = this.type;\n subtask.successCallback = this.successCallback || null;\n subtask.failureCallback = this.failureCallback || null;\n\n // queue a new subtask\n this.subtasks.push(subtask);\n\n return this;\n};\n\n/**\n * Adds subtasks to run in parallel after task.doNext() or task.fail()\n * is called.\n *\n * @param name human readable name for this task (optional).\n * @param subrun functions to run that take the current task as\n * their first parameter.\n *\n * @return the current task (useful for chaining next() calls).\n */\nTask.prototype.parallel = function(name, subrun) {\n // juggle parameters if it looks like no name is given\n if(forge.util.isArray(name)) {\n subrun = name;\n\n // inherit parent's name\n name = this.name;\n }\n // Wrap parallel tasks in a regular task so they are started at the\n // proper time.\n return this.next(name, function(task) {\n // block waiting for subtasks\n var ptask = task;\n ptask.block(subrun.length);\n\n // we pass the iterator from the loop below as a parameter\n // to a function because it is otherwise included in the\n // closure and changes as the loop changes -- causing i\n // to always be set to its highest value\n var startParallelTask = function(pname, pi) {\n forge.task.start({\n type: pname,\n run: function(task) {\n subrun[pi](task);\n },\n success: function(task) {\n ptask.unblock();\n },\n failure: function(task) {\n ptask.unblock();\n }\n });\n };\n\n for(var i = 0; i < subrun.length; i++) {\n // Type must be unique so task starts in parallel:\n // name + private string + task id + sub-task index\n // start tasks in parallel and unblock when the finish\n var pname = name + '__parallel-' + task.id + '-' + i;\n var pi = i;\n startParallelTask(pname, pi);\n }\n });\n};\n\n/**\n * Stops a running task.\n */\nTask.prototype.stop = function() {\n this.state = sStateTable[this.state][STOP];\n};\n\n/**\n * Starts running a task.\n */\nTask.prototype.start = function() {\n this.error = false;\n this.state = sStateTable[this.state][START];\n\n // try to restart\n if(this.state === RUNNING) {\n this.start = new Date();\n this.run(this);\n runNext(this, 0);\n }\n};\n\n/**\n * Blocks a task until it one or more permits have been released. The\n * task will not resume until the requested number of permits have\n * been released with call(s) to unblock().\n *\n * @param n number of permits to wait for(default: 1).\n */\nTask.prototype.block = function(n) {\n n = typeof(n) === 'undefined' ? 1 : n;\n this.blocks += n;\n if(this.blocks > 0) {\n this.state = sStateTable[this.state][BLOCK];\n }\n};\n\n/**\n * Releases a permit to unblock a task. If a task was blocked by\n * requesting N permits via block(), then it will only continue\n * running once enough permits have been released via unblock() calls.\n *\n * If multiple processes need to synchronize with a single task then\n * use a condition variable (see forge.task.createCondition). It is\n * an error to unblock a task more times than it has been blocked.\n *\n * @param n number of permits to release (default: 1).\n *\n * @return the current block count (task is unblocked when count is 0)\n */\nTask.prototype.unblock = function(n) {\n n = typeof(n) === 'undefined' ? 1 : n;\n this.blocks -= n;\n if(this.blocks === 0 && this.state !== DONE) {\n this.state = RUNNING;\n runNext(this, 0);\n }\n return this.blocks;\n};\n\n/**\n * Sleep for a period of time before resuming tasks.\n *\n * @param n number of milliseconds to sleep (default: 0).\n */\nTask.prototype.sleep = function(n) {\n n = typeof(n) === 'undefined' ? 0 : n;\n this.state = sStateTable[this.state][SLEEP];\n var self = this;\n this.timeoutId = setTimeout(function() {\n self.timeoutId = null;\n self.state = RUNNING;\n runNext(self, 0);\n }, n);\n};\n\n/**\n * Waits on a condition variable until notified. The next task will\n * not be scheduled until notification. A condition variable can be\n * created with forge.task.createCondition().\n *\n * Once cond.notify() is called, the task will continue.\n *\n * @param cond the condition variable to wait on.\n */\nTask.prototype.wait = function(cond) {\n cond.wait(this);\n};\n\n/**\n * If sleeping, wakeup and continue running tasks.\n */\nTask.prototype.wakeup = function() {\n if(this.state === SLEEPING) {\n cancelTimeout(this.timeoutId);\n this.timeoutId = null;\n this.state = RUNNING;\n runNext(this, 0);\n }\n};\n\n/**\n * Cancel all remaining subtasks of this task.\n */\nTask.prototype.cancel = function() {\n this.state = sStateTable[this.state][CANCEL];\n // remove permits needed\n this.permitsNeeded = 0;\n // cancel timeouts\n if(this.timeoutId !== null) {\n cancelTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n // remove subtasks\n this.subtasks = [];\n};\n\n/**\n * Finishes this task with failure and sets error flag. The entire\n * task will be aborted unless the next task that should execute\n * is passed as a parameter. This allows levels of subtasks to be\n * skipped. For instance, to abort only this tasks's subtasks, then\n * call fail(task.parent). To abort this task's subtasks and its\n * parent's subtasks, call fail(task.parent.parent). To abort\n * all tasks and simply call the task callback, call fail() or\n * fail(null).\n *\n * The task callback (success or failure) will always, eventually, be\n * called.\n *\n * @param next the task to continue at, or null to abort entirely.\n */\nTask.prototype.fail = function(next) {\n // set error flag\n this.error = true;\n\n // finish task\n finish(this, true);\n\n if(next) {\n // propagate task info\n next.error = this.error;\n next.swapTime = this.swapTime;\n next.userData = this.userData;\n\n // do next task as specified\n runNext(next, 0);\n } else {\n if(this.parent !== null) {\n // finish root task (ensures it is removed from task queue)\n var parent = this.parent;\n while(parent.parent !== null) {\n // propagate task info\n parent.error = this.error;\n parent.swapTime = this.swapTime;\n parent.userData = this.userData;\n parent = parent.parent;\n }\n finish(parent, true);\n }\n\n // call failure callback if one exists\n if(this.failureCallback) {\n this.failureCallback(this);\n }\n }\n};\n\n/**\n * Asynchronously start a task.\n *\n * @param task the task to start.\n */\nvar start = function(task) {\n task.error = false;\n task.state = sStateTable[task.state][START];\n setTimeout(function() {\n if(task.state === RUNNING) {\n task.swapTime = +new Date();\n task.run(task);\n runNext(task, 0);\n }\n }, 0);\n};\n\n/**\n * Run the next subtask or finish this task.\n *\n * @param task the task to process.\n * @param recurse the recursion count.\n */\nvar runNext = function(task, recurse) {\n // get time since last context swap (ms), if enough time has passed set\n // swap to true to indicate that doNext was performed asynchronously\n // also, if recurse is too high do asynchronously\n var swap =\n (recurse > sMaxRecursions) ||\n (+new Date() - task.swapTime) > sTimeSlice;\n\n var doNext = function(recurse) {\n recurse++;\n if(task.state === RUNNING) {\n if(swap) {\n // update swap time\n task.swapTime = +new Date();\n }\n\n if(task.subtasks.length > 0) {\n // run next subtask\n var subtask = task.subtasks.shift();\n subtask.error = task.error;\n subtask.swapTime = task.swapTime;\n subtask.userData = task.userData;\n subtask.run(subtask);\n if(!subtask.error) {\n runNext(subtask, recurse);\n }\n } else {\n finish(task);\n\n if(!task.error) {\n // chain back up and run parent\n if(task.parent !== null) {\n // propagate task info\n task.parent.error = task.error;\n task.parent.swapTime = task.swapTime;\n task.parent.userData = task.userData;\n\n // no subtasks left, call run next subtask on parent\n runNext(task.parent, recurse);\n }\n }\n }\n }\n };\n\n if(swap) {\n // we're swapping, so run asynchronously\n setTimeout(doNext, 0);\n } else {\n // not swapping, so run synchronously\n doNext(recurse);\n }\n};\n\n/**\n * Finishes a task and looks for the next task in the queue to start.\n *\n * @param task the task to finish.\n * @param suppressCallbacks true to suppress callbacks.\n */\nvar finish = function(task, suppressCallbacks) {\n // subtask is now done\n task.state = DONE;\n\n delete sTasks[task.id];\n if(sVL >= 1) {\n forge.log.verbose(cat, '[%s][%s] finish',\n task.id, task.name, task);\n }\n\n // only do queue processing for root tasks\n if(task.parent === null) {\n // report error if queue is missing\n if(!(task.type in sTaskQueues)) {\n forge.log.error(cat,\n '[%s][%s] task queue missing [%s]',\n task.id, task.name, task.type);\n } else if(sTaskQueues[task.type].length === 0) {\n // report error if queue is empty\n forge.log.error(cat,\n '[%s][%s] task queue empty [%s]',\n task.id, task.name, task.type);\n } else if(sTaskQueues[task.type][0] !== task) {\n // report error if this task isn't the first in the queue\n forge.log.error(cat,\n '[%s][%s] task not first in queue [%s]',\n task.id, task.name, task.type);\n } else {\n // remove ourselves from the queue\n sTaskQueues[task.type].shift();\n // clean up queue if it is empty\n if(sTaskQueues[task.type].length === 0) {\n if(sVL >= 1) {\n forge.log.verbose(cat, '[%s][%s] delete queue [%s]',\n task.id, task.name, task.type);\n }\n /* Note: Only a task can delete a queue of its own type. This\n is used as a way to synchronize tasks. If a queue for a certain\n task type exists, then a task of that type is running.\n */\n delete sTaskQueues[task.type];\n } else {\n // dequeue the next task and start it\n if(sVL >= 1) {\n forge.log.verbose(cat,\n '[%s][%s] queue start next [%s] remain:%s',\n task.id, task.name, task.type,\n sTaskQueues[task.type].length);\n }\n sTaskQueues[task.type][0].start();\n }\n }\n\n if(!suppressCallbacks) {\n // call final callback if one exists\n if(task.error && task.failureCallback) {\n task.failureCallback(task);\n } else if(!task.error && task.successCallback) {\n task.successCallback(task);\n }\n }\n }\n};\n\n/* Tasks API */\nmodule.exports = forge.task = forge.task || {};\n\n/**\n * Starts a new task that will run the passed function asynchronously.\n *\n * In order to finish the task, either task.doNext() or task.fail()\n * *must* be called.\n *\n * The task must have a type (a string identifier) that can be used to\n * synchronize it with other tasks of the same type. That type can also\n * be used to cancel tasks that haven't started yet.\n *\n * To start a task, the following object must be provided as a parameter\n * (each function takes a task object as its first parameter):\n *\n * {\n * type: the type of task.\n * run: the function to run to execute the task.\n * success: a callback to call when the task succeeds (optional).\n * failure: a callback to call when the task fails (optional).\n * }\n *\n * @param options the object as described above.\n */\nforge.task.start = function(options) {\n // create a new task\n var task = new Task({\n run: options.run,\n name: options.name || sNoTaskName\n });\n task.type = options.type;\n task.successCallback = options.success || null;\n task.failureCallback = options.failure || null;\n\n // append the task onto the appropriate queue\n if(!(task.type in sTaskQueues)) {\n if(sVL >= 1) {\n forge.log.verbose(cat, '[%s][%s] create queue [%s]',\n task.id, task.name, task.type);\n }\n // create the queue with the new task\n sTaskQueues[task.type] = [task];\n start(task);\n } else {\n // push the task onto the queue, it will be run after a task\n // with the same type completes\n sTaskQueues[options.type].push(task);\n }\n};\n\n/**\n * Cancels all tasks of the given type that haven't started yet.\n *\n * @param type the type of task to cancel.\n */\nforge.task.cancel = function(type) {\n // find the task queue\n if(type in sTaskQueues) {\n // empty all but the current task from the queue\n sTaskQueues[type] = [sTaskQueues[type][0]];\n }\n};\n\n/**\n * Creates a condition variable to synchronize tasks. To make a task wait\n * on the condition variable, call task.wait(condition). To notify all\n * tasks that are waiting, call condition.notify().\n *\n * @return the condition variable.\n */\nforge.task.createCondition = function() {\n var cond = {\n // all tasks that are blocked\n tasks: {}\n };\n\n /**\n * Causes the given task to block until notify is called. If the task\n * is already waiting on this condition then this is a no-op.\n *\n * @param task the task to cause to wait.\n */\n cond.wait = function(task) {\n // only block once\n if(!(task.id in cond.tasks)) {\n task.block();\n cond.tasks[task.id] = task;\n }\n };\n\n /**\n * Notifies all waiting tasks to wake up.\n */\n cond.notify = function() {\n // since unblock() will run the next task from here, make sure to\n // clear the condition's blocked task list before unblocking\n var tmp = cond.tasks;\n cond.tasks = {};\n for(var id in tmp) {\n tmp[id].unblock();\n }\n };\n\n return cond;\n};\n","/**\n * Node.js module for Forge.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2016 Digital Bazaar, Inc.\n */\nmodule.exports = require('./forge');\nrequire('./aes');\nrequire('./aesCipherSuites');\nrequire('./asn1');\nrequire('./cipher');\nrequire('./debug');\nrequire('./des');\nrequire('./ed25519');\nrequire('./hmac');\nrequire('./kem');\nrequire('./log');\nrequire('./md.all');\nrequire('./mgf1');\nrequire('./pbkdf2');\nrequire('./pem');\nrequire('./pkcs1');\nrequire('./pkcs12');\nrequire('./pkcs7');\nrequire('./pki');\nrequire('./prime');\nrequire('./prng');\nrequire('./pss');\nrequire('./random');\nrequire('./rc2');\nrequire('./ssh');\nrequire('./task');\nrequire('./tls');\nrequire('./util');\n","var forge = require('node-forge');\n\n// a hexString is considered negative if it's most significant bit is 1\n// because serial numbers use ones' complement notation\n// this RFC in section 4.1.2.2 requires serial numbers to be positive\n// http://www.ietf.org/rfc/rfc5280.txt\nfunction toPositiveHex(hexString){\n var mostSiginficativeHexAsInt = parseInt(hexString[0], 16);\n if (mostSiginficativeHexAsInt < 8){\n return hexString;\n }\n\n mostSiginficativeHexAsInt -= 8;\n return mostSiginficativeHexAsInt.toString() + hexString.substring(1);\n}\n\nfunction getAlgorithm(key) {\n switch (key) {\n case 'sha256':\n return forge.md.sha256.create();\n default:\n return forge.md.sha1.create();\n }\n}\n\n/**\n *\n * @param {forge.pki.CertificateField[]} attrs Attributes used for subject and issuer.\n * @param {object} options\n * @param {number} [options.days=365] the number of days before expiration\n * @param {number} [options.keySize=1024] the size for the private key in bits\n * @param {object} [options.extensions] additional extensions for the certificate\n * @param {string} [options.algorithm=\"sha1\"] The signature algorithm sha256 or sha1\n * @param {boolean} [options.pkcs7=false] include PKCS#7 as part of the output\n * @param {boolean} [options.clientCertificate=false] generate client cert signed by the original key\n * @param {string} [options.clientCertificateCN=\"John Doe jdoe123\"] client certificate's common name\n * @param {function} [done] Optional callback, if not provided the generation is synchronous\n * @returns\n */\nexports.generate = function generate(attrs, options, done) {\n if (typeof attrs === 'function') {\n done = attrs;\n attrs = undefined;\n } else if (typeof options === 'function') {\n done = options;\n options = {};\n }\n\n options = options || {};\n\n var generatePem = function (keyPair) {\n var cert = forge.pki.createCertificate();\n\n cert.serialNumber = toPositiveHex(forge.util.bytesToHex(forge.random.getBytesSync(9))); // the serial number can be decimal or hex (if preceded by 0x)\n\n cert.validity.notBefore = new Date();\n cert.validity.notAfter = new Date();\n cert.validity.notAfter.setDate(cert.validity.notBefore.getDate() + (options.days || 365));\n\n attrs = attrs || [{\n name: 'commonName',\n value: 'example.org'\n }, {\n name: 'countryName',\n value: 'US'\n }, {\n shortName: 'ST',\n value: 'Virginia'\n }, {\n name: 'localityName',\n value: 'Blacksburg'\n }, {\n name: 'organizationName',\n value: 'Test'\n }, {\n shortName: 'OU',\n value: 'Test'\n }];\n\n cert.setSubject(attrs);\n cert.setIssuer(attrs);\n\n cert.publicKey = keyPair.publicKey;\n\n cert.setExtensions(options.extensions || [{\n name: 'basicConstraints',\n cA: true\n }, {\n name: 'keyUsage',\n keyCertSign: true,\n digitalSignature: true,\n nonRepudiation: true,\n keyEncipherment: true,\n dataEncipherment: true\n }, {\n name: 'subjectAltName',\n altNames: [{\n type: 6, // URI\n value: 'http://example.org/webid#me'\n }]\n }]);\n\n cert.sign(keyPair.privateKey, getAlgorithm(options && options.algorithm));\n\n const fingerprint = forge.md.sha1\n .create()\n .update(forge.asn1.toDer(forge.pki.certificateToAsn1(cert)).getBytes())\n .digest()\n .toHex()\n .match(/.{2}/g)\n .join(':');\n\n var pem = {\n private: forge.pki.privateKeyToPem(keyPair.privateKey),\n public: forge.pki.publicKeyToPem(keyPair.publicKey),\n cert: forge.pki.certificateToPem(cert),\n fingerprint: fingerprint,\n };\n\n if (options && options.pkcs7) {\n var p7 = forge.pkcs7.createSignedData();\n p7.addCertificate(cert);\n pem.pkcs7 = forge.pkcs7.messageToPem(p7);\n }\n\n if (options && options.clientCertificate) {\n var clientkeys = forge.pki.rsa.generateKeyPair(1024);\n var clientcert = forge.pki.createCertificate();\n clientcert.serialNumber = toPositiveHex(forge.util.bytesToHex(forge.random.getBytesSync(9)));\n clientcert.validity.notBefore = new Date();\n clientcert.validity.notAfter = new Date();\n clientcert.validity.notAfter.setFullYear(clientcert.validity.notBefore.getFullYear() + 1);\n\n var clientAttrs = JSON.parse(JSON.stringify(attrs));\n\n for(var i = 0; i < clientAttrs.length; i++) {\n if(clientAttrs[i].name === 'commonName') {\n if( options.clientCertificateCN )\n clientAttrs[i] = { name: 'commonName', value: options.clientCertificateCN };\n else\n clientAttrs[i] = { name: 'commonName', value: 'John Doe jdoe123' };\n }\n }\n\n clientcert.setSubject(clientAttrs);\n\n // Set the issuer to the parent key\n clientcert.setIssuer(attrs);\n\n clientcert.publicKey = clientkeys.publicKey;\n\n // Sign client cert with root cert\n clientcert.sign(keyPair.privateKey);\n\n pem.clientprivate = forge.pki.privateKeyToPem(clientkeys.privateKey);\n pem.clientpublic = forge.pki.publicKeyToPem(clientkeys.publicKey);\n pem.clientcert = forge.pki.certificateToPem(clientcert);\n\n if (options.pkcs7) {\n var clientp7 = forge.pkcs7.createSignedData();\n clientp7.addCertificate(clientcert);\n pem.clientpkcs7 = forge.pkcs7.messageToPem(clientp7);\n }\n }\n\n var caStore = forge.pki.createCaStore();\n caStore.addCertificate(cert);\n\n try {\n forge.pki.verifyCertificateChain(caStore, [cert],\n function (vfd, depth, chain) {\n if (vfd !== true) {\n throw new Error('Certificate could not be verified.');\n }\n return true;\n });\n }\n catch(ex) {\n throw new Error(ex);\n }\n\n return pem;\n };\n\n var keySize = options.keySize || 1024;\n\n if (done) { // async scenario\n return forge.pki.rsa.generateKeyPair({ bits: keySize }, function (err, keyPair) {\n if (err) { return done(err); }\n\n try {\n return done(null, generatePem(keyPair));\n } catch (ex) {\n return done(ex);\n }\n });\n }\n\n var keyPair = options.keyPair ? {\n privateKey: forge.pki.privateKeyFromPem(options.keyPair.privateKey),\n publicKey: forge.pki.publicKeyFromPem(options.keyPair.publicKey)\n } : forge.pki.rsa.generateKeyPair(keySize);\n\n return generatePem(keyPair);\n};\n"],"names":["forge","baseN","require$$0","require$$1","util","global","_createCipher","_updateBlock","registerAlgorithm","oids","asn1","_initialized","_init","_update","_padding","_k","_crypto","BigInteger","pki","privateKeyValidator","publicKeyValidator","contentInfoValidator","tls","sha512"],"mappings":"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CAAC,GAAG,CAAC,CAAC;AACrDQ,mBAAiB,CAAC,SAAS,EAAER,OAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrD;AACA,SAASQ,mBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE;AACvC,EAAE,IAAI,OAAO,GAAG,WAAW;AAC3B,IAAI,OAAO,IAAIR,OAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/C,GAAG,CAAC;AACJ,EAAEA,OAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AACD;AACA;AACA;AACA,IAAI,IAAI,GAAG,KAAK,CAAC;AACjB,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,IAAI,IAAI,CAAC;AACT,IAAI,KAAK,CAAC;AACV,IAAI,IAAI,CAAC;AACT,IAAI,GAAG,CAAC;AACR,IAAI,IAAI,CAAC;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,GAAG;AACtB,EAAE,IAAI,GAAG,IAAI,CAAC;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5E;AACA;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7B,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;AAC/B,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,IAAI,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAC5C,GAAG;AACH;AACA;AACA,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AACxB,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;AAC7B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7B,GAAG;AACH,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAClD,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5D,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;AACvC;AACA;AACA,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACjB,IAAI,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACpB,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,C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I,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE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,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5E,MAAM,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AACzC,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,GAAG,KAAK,EAAE;AACZ;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC1C,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACnC,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACAA,KAAG,CAAC,gBAAgB,GAAG;AACvB,EAAE,eAAe,EAAE,0BAA0B;AAC7C,EAAE,uBAAuB,EAAE,kCAAkC;AAC7D,EAAE,mBAAmB,EAAE,8BAA8B;AACrD,EAAE,mBAAmB,EAAE,8BAA8B;AACrD,EAAE,mBAAmB,EAAE,8BAA8B;AACrD,EAAE,UAAU,EAAE,uCAAuC;AACrD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAA,KAAG,CAAC,sBAAsB,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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,aAAa,CAAC,MAAM,CAAC,GAAG;AACpC;AACA,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC,CAAC;AACF;AACA;AACA;AACA,IAAI,EAAE,GAAGA,KAAG,CAAC,iBAAiB,CAAC;AAC/B,IAAI,EAAE,GAAGA,KAAG,CAAC,uBAAuB,CAAC;AACrC,IAAI,EAAE,GAAGA,KAAG,CAAC,uBAAuB,CAAC;AACrC,OAAO,CAACA,KAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG;AACpC;AACA,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAtB,OAAK,CAAC,GAAG,CAAC,gBAAgB,GAAGsB,KAAG,CAAC,gBAAgB;;;;;;;;;;;ACjrIjD,IAAItB,OAAK,GAAGE,OAAkB,CAAC;AACd;AACA;AACjB;AACA,IAAI,GAAG,GAAoBF,OAAK,CAAC,GAAG,CAAC;AACrC;AACA;AACA;AACA;AACA,GAAG,CAAC,YAAY,CAAC,8BAA8B,CAAC,GAAG;AACnD,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AAClB,EAAE,IAAI,EAAE,8BAA8B;AACtC,EAAE,sBAAsB,EAAE,SAAS,EAAE,EAAE;AACvC,IAAI,EAAE,CAAC,qBAAqB,GAAG,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC3D,IAAI,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AAC1C,IAAI,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC;AAC3B,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC;AACzB,IAAI,EAAE,CAAC,eAAe,GAAG,EAAE,CAAC;AAC5B,IAAI,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC7B,IAAI,EAAE,CAAC,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;AAClD,IAAI,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC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UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACtD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UA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CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB;AACA,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;AAClB,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;AAClB;AACA;AACA;AACA,EAAE,CAAC,GAAG,CAAC,CAAC;AACR,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB;AACA;AACA,EAAE,CAAC,GAAG,CAAC,CAAC;AACR,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CA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"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-35df7f96.js b/packages/astro/vendor/vite/dist/node/chunks/dep-35df7f96.js
deleted file mode 100755
index 9365f132b..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-35df7f96.js
+++ /dev/null
@@ -1,92088 +0,0 @@
-'use strict';
-
-var fs$r = require('fs');
-var path$t = require('path');
-var require$$0$b = require('events');
-var require$$0$6 = require('util');
-var require$$0$a = require('stream');
-var require$$0$5 = require('os');
-var perf_hooks = require('perf_hooks');
-var require$$0$8 = require('url');
-var require$$1 = require('crypto');
-var require$$0$7 = require('module');
-var esbuild = require('esbuild');
-var require$$1$1 = require('worker_threads');
-var require$$5 = require('assert');
-var require$$1$4 = require('child_process');
-var readline = require('readline');
-var require$$0$9 = require('zlib');
-var resolve$4 = require('resolve');
-var qs = require('querystring');
-var require$$0$4 = require('tty');
-var require$$3 = require('net');
-var require$$1$2 = require('http');
-var require$$0$c = require('buffer');
-var require$$1$3 = require('https');
-var require$$4 = require('tls');
-
-function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
-
-function _interopNamespace(e) {
- if (e && e.__esModule) return e;
- var n = Object.create(null);
- if (e) {
- for (var k in e) {
- n[k] = e[k];
- }
- }
- n["default"] = e;
- return n;
-}
-
-var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs$r);
-var fs__namespace = /*#__PURE__*/_interopNamespace(fs$r);
-var path__default = /*#__PURE__*/_interopDefaultLegacy(path$t);
-var require$$0__default$5 = /*#__PURE__*/_interopDefaultLegacy(require$$0$b);
-var require$$0__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$0$6);
-var require$$0__default$4 = /*#__PURE__*/_interopDefaultLegacy(require$$0$a);
-var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$5);
-var require$$0__default$6 = /*#__PURE__*/_interopDefaultLegacy(require$$0$8);
-var require$$1__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$1);
-var require$$0__default$3 = /*#__PURE__*/_interopDefaultLegacy(require$$0$7);
-var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1$1);
-var require$$5__default = /*#__PURE__*/_interopDefaultLegacy(require$$5);
-var require$$1__default$4 = /*#__PURE__*/_interopDefaultLegacy(require$$1$4);
-var readline__default = /*#__PURE__*/_interopDefaultLegacy(readline);
-var require$$0__default$7 = /*#__PURE__*/_interopDefaultLegacy(require$$0$9);
-var resolve__default = /*#__PURE__*/_interopDefaultLegacy(resolve$4);
-var qs__namespace = /*#__PURE__*/_interopNamespace(qs);
-var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$4);
-var require$$3__default = /*#__PURE__*/_interopDefaultLegacy(require$$3);
-var require$$1__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$1$2);
-var require$$0__default$8 = /*#__PURE__*/_interopDefaultLegacy(require$$0$c);
-var require$$1__default$3 = /*#__PURE__*/_interopDefaultLegacy(require$$1$3);
-var require$$4__default = /*#__PURE__*/_interopDefaultLegacy(require$$4);
-
-var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
-
-function getDefaultExportFromCjs (x) {
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
-}
-
-function getAugmentedNamespace(n) {
- if (n.__esModule) return n;
- var a = Object.defineProperty({}, '__esModule', {value: true});
- Object.keys(n).forEach(function (k) {
- var d = Object.getOwnPropertyDescriptor(n, k);
- Object.defineProperty(a, k, d.get ? d : {
- enumerable: true,
- get: function () {
- return n[k];
- }
- });
- });
- return a;
-}
-
-function commonjsRequire (path) {
- throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
-}
-
-var ansiStyles$2 = {exports: {}};
-
-var colorName$1 = {
- "aliceblue": [240, 248, 255],
- "antiquewhite": [250, 235, 215],
- "aqua": [0, 255, 255],
- "aquamarine": [127, 255, 212],
- "azure": [240, 255, 255],
- "beige": [245, 245, 220],
- "bisque": [255, 228, 196],
- "black": [0, 0, 0],
- "blanchedalmond": [255, 235, 205],
- "blue": [0, 0, 255],
- "blueviolet": [138, 43, 226],
- "brown": [165, 42, 42],
- "burlywood": [222, 184, 135],
- "cadetblue": [95, 158, 160],
- "chartreuse": [127, 255, 0],
- "chocolate": [210, 105, 30],
- "coral": [255, 127, 80],
- "cornflowerblue": [100, 149, 237],
- "cornsilk": [255, 248, 220],
- "crimson": [220, 20, 60],
- "cyan": [0, 255, 255],
- "darkblue": [0, 0, 139],
- "darkcyan": [0, 139, 139],
- "darkgoldenrod": [184, 134, 11],
- "darkgray": [169, 169, 169],
- "darkgreen": [0, 100, 0],
- "darkgrey": [169, 169, 169],
- "darkkhaki": [189, 183, 107],
- "darkmagenta": [139, 0, 139],
- "darkolivegreen": [85, 107, 47],
- "darkorange": [255, 140, 0],
- "darkorchid": [153, 50, 204],
- "darkred": [139, 0, 0],
- "darksalmon": [233, 150, 122],
- "darkseagreen": [143, 188, 143],
- "darkslateblue": [72, 61, 139],
- "darkslategray": [47, 79, 79],
- "darkslategrey": [47, 79, 79],
- "darkturquoise": [0, 206, 209],
- "darkviolet": [148, 0, 211],
- "deeppink": [255, 20, 147],
- "deepskyblue": [0, 191, 255],
- "dimgray": [105, 105, 105],
- "dimgrey": [105, 105, 105],
- "dodgerblue": [30, 144, 255],
- "firebrick": [178, 34, 34],
- "floralwhite": [255, 250, 240],
- "forestgreen": [34, 139, 34],
- "fuchsia": [255, 0, 255],
- "gainsboro": [220, 220, 220],
- "ghostwhite": [248, 248, 255],
- "gold": [255, 215, 0],
- "goldenrod": [218, 165, 32],
- "gray": [128, 128, 128],
- "green": [0, 128, 0],
- "greenyellow": [173, 255, 47],
- "grey": [128, 128, 128],
- "honeydew": [240, 255, 240],
- "hotpink": [255, 105, 180],
- "indianred": [205, 92, 92],
- "indigo": [75, 0, 130],
- "ivory": [255, 255, 240],
- "khaki": [240, 230, 140],
- "lavender": [230, 230, 250],
- "lavenderblush": [255, 240, 245],
- "lawngreen": [124, 252, 0],
- "lemonchiffon": [255, 250, 205],
- "lightblue": [173, 216, 230],
- "lightcoral": [240, 128, 128],
- "lightcyan": [224, 255, 255],
- "lightgoldenrodyellow": [250, 250, 210],
- "lightgray": [211, 211, 211],
- "lightgreen": [144, 238, 144],
- "lightgrey": [211, 211, 211],
- "lightpink": [255, 182, 193],
- "lightsalmon": [255, 160, 122],
- "lightseagreen": [32, 178, 170],
- "lightskyblue": [135, 206, 250],
- "lightslategray": [119, 136, 153],
- "lightslategrey": [119, 136, 153],
- "lightsteelblue": [176, 196, 222],
- "lightyellow": [255, 255, 224],
- "lime": [0, 255, 0],
- "limegreen": [50, 205, 50],
- "linen": [250, 240, 230],
- "magenta": [255, 0, 255],
- "maroon": [128, 0, 0],
- "mediumaquamarine": [102, 205, 170],
- "mediumblue": [0, 0, 205],
- "mediumorchid": [186, 85, 211],
- "mediumpurple": [147, 112, 219],
- "mediumseagreen": [60, 179, 113],
- "mediumslateblue": [123, 104, 238],
- "mediumspringgreen": [0, 250, 154],
- "mediumturquoise": [72, 209, 204],
- "mediumvioletred": [199, 21, 133],
- "midnightblue": [25, 25, 112],
- "mintcream": [245, 255, 250],
- "mistyrose": [255, 228, 225],
- "moccasin": [255, 228, 181],
- "navajowhite": [255, 222, 173],
- "navy": [0, 0, 128],
- "oldlace": [253, 245, 230],
- "olive": [128, 128, 0],
- "olivedrab": [107, 142, 35],
- "orange": [255, 165, 0],
- "orangered": [255, 69, 0],
- "orchid": [218, 112, 214],
- "palegoldenrod": [238, 232, 170],
- "palegreen": [152, 251, 152],
- "paleturquoise": [175, 238, 238],
- "palevioletred": [219, 112, 147],
- "papayawhip": [255, 239, 213],
- "peachpuff": [255, 218, 185],
- "peru": [205, 133, 63],
- "pink": [255, 192, 203],
- "plum": [221, 160, 221],
- "powderblue": [176, 224, 230],
- "purple": [128, 0, 128],
- "rebeccapurple": [102, 51, 153],
- "red": [255, 0, 0],
- "rosybrown": [188, 143, 143],
- "royalblue": [65, 105, 225],
- "saddlebrown": [139, 69, 19],
- "salmon": [250, 128, 114],
- "sandybrown": [244, 164, 96],
- "seagreen": [46, 139, 87],
- "seashell": [255, 245, 238],
- "sienna": [160, 82, 45],
- "silver": [192, 192, 192],
- "skyblue": [135, 206, 235],
- "slateblue": [106, 90, 205],
- "slategray": [112, 128, 144],
- "slategrey": [112, 128, 144],
- "snow": [255, 250, 250],
- "springgreen": [0, 255, 127],
- "steelblue": [70, 130, 180],
- "tan": [210, 180, 140],
- "teal": [0, 128, 128],
- "thistle": [216, 191, 216],
- "tomato": [255, 99, 71],
- "turquoise": [64, 224, 208],
- "violet": [238, 130, 238],
- "wheat": [245, 222, 179],
- "white": [255, 255, 255],
- "whitesmoke": [245, 245, 245],
- "yellow": [255, 255, 0],
- "yellowgreen": [154, 205, 50]
-};
-
-/* MIT license */
-
-/* eslint-disable no-mixed-operators */
-const cssKeywords$1 = colorName$1;
-
-// NOTE: conversions should only return primitive values (i.e. arrays, or
-// values that give correct `typeof` results).
-// do not use box values types (i.e. Number(), String(), etc.)
-
-const reverseKeywords$1 = {};
-for (const key of Object.keys(cssKeywords$1)) {
- reverseKeywords$1[cssKeywords$1[key]] = key;
-}
-
-const convert$3 = {
- rgb: {channels: 3, labels: 'rgb'},
- hsl: {channels: 3, labels: 'hsl'},
- hsv: {channels: 3, labels: 'hsv'},
- hwb: {channels: 3, labels: 'hwb'},
- cmyk: {channels: 4, labels: 'cmyk'},
- xyz: {channels: 3, labels: 'xyz'},
- lab: {channels: 3, labels: 'lab'},
- lch: {channels: 3, labels: 'lch'},
- hex: {channels: 1, labels: ['hex']},
- keyword: {channels: 1, labels: ['keyword']},
- ansi16: {channels: 1, labels: ['ansi16']},
- ansi256: {channels: 1, labels: ['ansi256']},
- hcg: {channels: 3, labels: ['h', 'c', 'g']},
- apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
- gray: {channels: 1, labels: ['gray']}
-};
-
-var conversions$5 = convert$3;
-
-// Hide .channels and .labels properties
-for (const model of Object.keys(convert$3)) {
- if (!('channels' in convert$3[model])) {
- throw new Error('missing channels property: ' + model);
- }
-
- if (!('labels' in convert$3[model])) {
- throw new Error('missing channel labels property: ' + model);
- }
-
- if (convert$3[model].labels.length !== convert$3[model].channels) {
- throw new Error('channel and label counts mismatch: ' + model);
- }
-
- const {channels, labels} = convert$3[model];
- delete convert$3[model].channels;
- delete convert$3[model].labels;
- Object.defineProperty(convert$3[model], 'channels', {value: channels});
- Object.defineProperty(convert$3[model], 'labels', {value: labels});
-}
-
-convert$3.rgb.hsl = function (rgb) {
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
- const min = Math.min(r, g, b);
- const max = Math.max(r, g, b);
- const delta = max - min;
- let h;
- let s;
-
- if (max === min) {
- h = 0;
- } else if (r === max) {
- h = (g - b) / delta;
- } else if (g === max) {
- h = 2 + (b - r) / delta;
- } else if (b === max) {
- h = 4 + (r - g) / delta;
- }
-
- h = Math.min(h * 60, 360);
-
- if (h < 0) {
- h += 360;
- }
-
- const l = (min + max) / 2;
-
- if (max === min) {
- s = 0;
- } else if (l <= 0.5) {
- s = delta / (max + min);
- } else {
- s = delta / (2 - max - min);
- }
-
- return [h, s * 100, l * 100];
-};
-
-convert$3.rgb.hsv = function (rgb) {
- let rdif;
- let gdif;
- let bdif;
- let h;
- let s;
-
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
- const v = Math.max(r, g, b);
- const diff = v - Math.min(r, g, b);
- const diffc = function (c) {
- return (v - c) / 6 / diff + 1 / 2;
- };
-
- if (diff === 0) {
- h = 0;
- s = 0;
- } else {
- s = diff / v;
- rdif = diffc(r);
- gdif = diffc(g);
- bdif = diffc(b);
-
- if (r === v) {
- h = bdif - gdif;
- } else if (g === v) {
- h = (1 / 3) + rdif - bdif;
- } else if (b === v) {
- h = (2 / 3) + gdif - rdif;
- }
-
- if (h < 0) {
- h += 1;
- } else if (h > 1) {
- h -= 1;
- }
- }
-
- return [
- h * 360,
- s * 100,
- v * 100
- ];
-};
-
-convert$3.rgb.hwb = function (rgb) {
- const r = rgb[0];
- const g = rgb[1];
- let b = rgb[2];
- const h = convert$3.rgb.hsl(rgb)[0];
- const w = 1 / 255 * Math.min(r, Math.min(g, b));
-
- b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
-
- return [h, w * 100, b * 100];
-};
-
-convert$3.rgb.cmyk = function (rgb) {
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
-
- const k = Math.min(1 - r, 1 - g, 1 - b);
- const c = (1 - r - k) / (1 - k) || 0;
- const m = (1 - g - k) / (1 - k) || 0;
- const y = (1 - b - k) / (1 - k) || 0;
-
- return [c * 100, m * 100, y * 100, k * 100];
-};
-
-function comparativeDistance$1(x, y) {
- /*
- See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
- */
- return (
- ((x[0] - y[0]) ** 2) +
- ((x[1] - y[1]) ** 2) +
- ((x[2] - y[2]) ** 2)
- );
-}
-
-convert$3.rgb.keyword = function (rgb) {
- const reversed = reverseKeywords$1[rgb];
- if (reversed) {
- return reversed;
- }
-
- let currentClosestDistance = Infinity;
- let currentClosestKeyword;
-
- for (const keyword of Object.keys(cssKeywords$1)) {
- const value = cssKeywords$1[keyword];
-
- // Compute comparative distance
- const distance = comparativeDistance$1(rgb, value);
-
- // Check if its less, if so set as closest
- if (distance < currentClosestDistance) {
- currentClosestDistance = distance;
- currentClosestKeyword = keyword;
- }
- }
-
- return currentClosestKeyword;
-};
-
-convert$3.keyword.rgb = function (keyword) {
- return cssKeywords$1[keyword];
-};
-
-convert$3.rgb.xyz = function (rgb) {
- let r = rgb[0] / 255;
- let g = rgb[1] / 255;
- let b = rgb[2] / 255;
-
- // Assume sRGB
- r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);
- g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);
- b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);
-
- const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
- const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
- const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
-
- return [x * 100, y * 100, z * 100];
-};
-
-convert$3.rgb.lab = function (rgb) {
- const xyz = convert$3.rgb.xyz(rgb);
- let x = xyz[0];
- let y = xyz[1];
- let z = xyz[2];
-
- x /= 95.047;
- y /= 100;
- z /= 108.883;
-
- x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
-
- const l = (116 * y) - 16;
- const a = 500 * (x - y);
- const b = 200 * (y - z);
-
- return [l, a, b];
-};
-
-convert$3.hsl.rgb = function (hsl) {
- const h = hsl[0] / 360;
- const s = hsl[1] / 100;
- const l = hsl[2] / 100;
- let t2;
- let t3;
- let val;
-
- if (s === 0) {
- val = l * 255;
- return [val, val, val];
- }
-
- if (l < 0.5) {
- t2 = l * (1 + s);
- } else {
- t2 = l + s - l * s;
- }
-
- const t1 = 2 * l - t2;
-
- const rgb = [0, 0, 0];
- for (let i = 0; i < 3; i++) {
- t3 = h + 1 / 3 * -(i - 1);
- if (t3 < 0) {
- t3++;
- }
-
- if (t3 > 1) {
- t3--;
- }
-
- if (6 * t3 < 1) {
- val = t1 + (t2 - t1) * 6 * t3;
- } else if (2 * t3 < 1) {
- val = t2;
- } else if (3 * t3 < 2) {
- val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
- } else {
- val = t1;
- }
-
- rgb[i] = val * 255;
- }
-
- return rgb;
-};
-
-convert$3.hsl.hsv = function (hsl) {
- const h = hsl[0];
- let s = hsl[1] / 100;
- let l = hsl[2] / 100;
- let smin = s;
- const lmin = Math.max(l, 0.01);
-
- l *= 2;
- s *= (l <= 1) ? l : 2 - l;
- smin *= lmin <= 1 ? lmin : 2 - lmin;
- const v = (l + s) / 2;
- const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
-
- return [h, sv * 100, v * 100];
-};
-
-convert$3.hsv.rgb = function (hsv) {
- const h = hsv[0] / 60;
- const s = hsv[1] / 100;
- let v = hsv[2] / 100;
- const hi = Math.floor(h) % 6;
-
- const f = h - Math.floor(h);
- const p = 255 * v * (1 - s);
- const q = 255 * v * (1 - (s * f));
- const t = 255 * v * (1 - (s * (1 - f)));
- v *= 255;
-
- switch (hi) {
- case 0:
- return [v, t, p];
- case 1:
- return [q, v, p];
- case 2:
- return [p, v, t];
- case 3:
- return [p, q, v];
- case 4:
- return [t, p, v];
- case 5:
- return [v, p, q];
- }
-};
-
-convert$3.hsv.hsl = function (hsv) {
- const h = hsv[0];
- const s = hsv[1] / 100;
- const v = hsv[2] / 100;
- const vmin = Math.max(v, 0.01);
- let sl;
- let l;
-
- l = (2 - s) * v;
- const lmin = (2 - s) * vmin;
- sl = s * vmin;
- sl /= (lmin <= 1) ? lmin : 2 - lmin;
- sl = sl || 0;
- l /= 2;
-
- return [h, sl * 100, l * 100];
-};
-
-// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
-convert$3.hwb.rgb = function (hwb) {
- const h = hwb[0] / 360;
- let wh = hwb[1] / 100;
- let bl = hwb[2] / 100;
- const ratio = wh + bl;
- let f;
-
- // Wh + bl cant be > 1
- if (ratio > 1) {
- wh /= ratio;
- bl /= ratio;
- }
-
- const i = Math.floor(6 * h);
- const v = 1 - bl;
- f = 6 * h - i;
-
- if ((i & 0x01) !== 0) {
- f = 1 - f;
- }
-
- const n = wh + f * (v - wh); // Linear interpolation
-
- let r;
- let g;
- let b;
- /* eslint-disable max-statements-per-line,no-multi-spaces */
- switch (i) {
- default:
- case 6:
- case 0: r = v; g = n; b = wh; break;
- case 1: r = n; g = v; b = wh; break;
- case 2: r = wh; g = v; b = n; break;
- case 3: r = wh; g = n; b = v; break;
- case 4: r = n; g = wh; b = v; break;
- case 5: r = v; g = wh; b = n; break;
- }
- /* eslint-enable max-statements-per-line,no-multi-spaces */
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert$3.cmyk.rgb = function (cmyk) {
- const c = cmyk[0] / 100;
- const m = cmyk[1] / 100;
- const y = cmyk[2] / 100;
- const k = cmyk[3] / 100;
-
- const r = 1 - Math.min(1, c * (1 - k) + k);
- const g = 1 - Math.min(1, m * (1 - k) + k);
- const b = 1 - Math.min(1, y * (1 - k) + k);
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert$3.xyz.rgb = function (xyz) {
- const x = xyz[0] / 100;
- const y = xyz[1] / 100;
- const z = xyz[2] / 100;
- let r;
- let g;
- let b;
-
- r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
- g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
- b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
-
- // Assume sRGB
- r = r > 0.0031308
- ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
- : r * 12.92;
-
- g = g > 0.0031308
- ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)
- : g * 12.92;
-
- b = b > 0.0031308
- ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)
- : b * 12.92;
-
- r = Math.min(Math.max(0, r), 1);
- g = Math.min(Math.max(0, g), 1);
- b = Math.min(Math.max(0, b), 1);
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert$3.xyz.lab = function (xyz) {
- let x = xyz[0];
- let y = xyz[1];
- let z = xyz[2];
-
- x /= 95.047;
- y /= 100;
- z /= 108.883;
-
- x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
-
- const l = (116 * y) - 16;
- const a = 500 * (x - y);
- const b = 200 * (y - z);
-
- return [l, a, b];
-};
-
-convert$3.lab.xyz = function (lab) {
- const l = lab[0];
- const a = lab[1];
- const b = lab[2];
- let x;
- let y;
- let z;
-
- y = (l + 16) / 116;
- x = a / 500 + y;
- z = y - b / 200;
-
- const y2 = y ** 3;
- const x2 = x ** 3;
- const z2 = z ** 3;
- y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
- x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
- z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
-
- x *= 95.047;
- y *= 100;
- z *= 108.883;
-
- return [x, y, z];
-};
-
-convert$3.lab.lch = function (lab) {
- const l = lab[0];
- const a = lab[1];
- const b = lab[2];
- let h;
-
- const hr = Math.atan2(b, a);
- h = hr * 360 / 2 / Math.PI;
-
- if (h < 0) {
- h += 360;
- }
-
- const c = Math.sqrt(a * a + b * b);
-
- return [l, c, h];
-};
-
-convert$3.lch.lab = function (lch) {
- const l = lch[0];
- const c = lch[1];
- const h = lch[2];
-
- const hr = h / 360 * 2 * Math.PI;
- const a = c * Math.cos(hr);
- const b = c * Math.sin(hr);
-
- return [l, a, b];
-};
-
-convert$3.rgb.ansi16 = function (args, saturation = null) {
- const [r, g, b] = args;
- let value = saturation === null ? convert$3.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization
-
- value = Math.round(value / 50);
-
- if (value === 0) {
- return 30;
- }
-
- let ansi = 30
- + ((Math.round(b / 255) << 2)
- | (Math.round(g / 255) << 1)
- | Math.round(r / 255));
-
- if (value === 2) {
- ansi += 60;
- }
-
- return ansi;
-};
-
-convert$3.hsv.ansi16 = function (args) {
- // Optimization here; we already know the value and don't need to get
- // it converted for us.
- return convert$3.rgb.ansi16(convert$3.hsv.rgb(args), args[2]);
-};
-
-convert$3.rgb.ansi256 = function (args) {
- const r = args[0];
- const g = args[1];
- const b = args[2];
-
- // We use the extended greyscale palette here, with the exception of
- // black and white. normal palette only has 4 greyscale shades.
- if (r === g && g === b) {
- if (r < 8) {
- return 16;
- }
-
- if (r > 248) {
- return 231;
- }
-
- return Math.round(((r - 8) / 247) * 24) + 232;
- }
-
- const ansi = 16
- + (36 * Math.round(r / 255 * 5))
- + (6 * Math.round(g / 255 * 5))
- + Math.round(b / 255 * 5);
-
- return ansi;
-};
-
-convert$3.ansi16.rgb = function (args) {
- let color = args % 10;
-
- // Handle greyscale
- if (color === 0 || color === 7) {
- if (args > 50) {
- color += 3.5;
- }
-
- color = color / 10.5 * 255;
-
- return [color, color, color];
- }
-
- const mult = (~~(args > 50) + 1) * 0.5;
- const r = ((color & 1) * mult) * 255;
- const g = (((color >> 1) & 1) * mult) * 255;
- const b = (((color >> 2) & 1) * mult) * 255;
-
- return [r, g, b];
-};
-
-convert$3.ansi256.rgb = function (args) {
- // Handle greyscale
- if (args >= 232) {
- const c = (args - 232) * 10 + 8;
- return [c, c, c];
- }
-
- args -= 16;
-
- let rem;
- const r = Math.floor(args / 36) / 5 * 255;
- const g = Math.floor((rem = args % 36) / 6) / 5 * 255;
- const b = (rem % 6) / 5 * 255;
-
- return [r, g, b];
-};
-
-convert$3.rgb.hex = function (args) {
- const integer = ((Math.round(args[0]) & 0xFF) << 16)
- + ((Math.round(args[1]) & 0xFF) << 8)
- + (Math.round(args[2]) & 0xFF);
-
- const string = integer.toString(16).toUpperCase();
- return '000000'.substring(string.length) + string;
-};
-
-convert$3.hex.rgb = function (args) {
- const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
- if (!match) {
- return [0, 0, 0];
- }
-
- let colorString = match[0];
-
- if (match[0].length === 3) {
- colorString = colorString.split('').map(char => {
- return char + char;
- }).join('');
- }
-
- const integer = parseInt(colorString, 16);
- const r = (integer >> 16) & 0xFF;
- const g = (integer >> 8) & 0xFF;
- const b = integer & 0xFF;
-
- return [r, g, b];
-};
-
-convert$3.rgb.hcg = function (rgb) {
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
- const max = Math.max(Math.max(r, g), b);
- const min = Math.min(Math.min(r, g), b);
- const chroma = (max - min);
- let grayscale;
- let hue;
-
- if (chroma < 1) {
- grayscale = min / (1 - chroma);
- } else {
- grayscale = 0;
- }
-
- if (chroma <= 0) {
- hue = 0;
- } else
- if (max === r) {
- hue = ((g - b) / chroma) % 6;
- } else
- if (max === g) {
- hue = 2 + (b - r) / chroma;
- } else {
- hue = 4 + (r - g) / chroma;
- }
-
- hue /= 6;
- hue %= 1;
-
- return [hue * 360, chroma * 100, grayscale * 100];
-};
-
-convert$3.hsl.hcg = function (hsl) {
- const s = hsl[1] / 100;
- const l = hsl[2] / 100;
-
- const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
-
- let f = 0;
- if (c < 1.0) {
- f = (l - 0.5 * c) / (1.0 - c);
- }
-
- return [hsl[0], c * 100, f * 100];
-};
-
-convert$3.hsv.hcg = function (hsv) {
- const s = hsv[1] / 100;
- const v = hsv[2] / 100;
-
- const c = s * v;
- let f = 0;
-
- if (c < 1.0) {
- f = (v - c) / (1 - c);
- }
-
- return [hsv[0], c * 100, f * 100];
-};
-
-convert$3.hcg.rgb = function (hcg) {
- const h = hcg[0] / 360;
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
-
- if (c === 0.0) {
- return [g * 255, g * 255, g * 255];
- }
-
- const pure = [0, 0, 0];
- const hi = (h % 1) * 6;
- const v = hi % 1;
- const w = 1 - v;
- let mg = 0;
-
- /* eslint-disable max-statements-per-line */
- switch (Math.floor(hi)) {
- case 0:
- pure[0] = 1; pure[1] = v; pure[2] = 0; break;
- case 1:
- pure[0] = w; pure[1] = 1; pure[2] = 0; break;
- case 2:
- pure[0] = 0; pure[1] = 1; pure[2] = v; break;
- case 3:
- pure[0] = 0; pure[1] = w; pure[2] = 1; break;
- case 4:
- pure[0] = v; pure[1] = 0; pure[2] = 1; break;
- default:
- pure[0] = 1; pure[1] = 0; pure[2] = w;
- }
- /* eslint-enable max-statements-per-line */
-
- mg = (1.0 - c) * g;
-
- return [
- (c * pure[0] + mg) * 255,
- (c * pure[1] + mg) * 255,
- (c * pure[2] + mg) * 255
- ];
-};
-
-convert$3.hcg.hsv = function (hcg) {
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
-
- const v = c + g * (1.0 - c);
- let f = 0;
-
- if (v > 0.0) {
- f = c / v;
- }
-
- return [hcg[0], f * 100, v * 100];
-};
-
-convert$3.hcg.hsl = function (hcg) {
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
-
- const l = g * (1.0 - c) + 0.5 * c;
- let s = 0;
-
- if (l > 0.0 && l < 0.5) {
- s = c / (2 * l);
- } else
- if (l >= 0.5 && l < 1.0) {
- s = c / (2 * (1 - l));
- }
-
- return [hcg[0], s * 100, l * 100];
-};
-
-convert$3.hcg.hwb = function (hcg) {
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
- const v = c + g * (1.0 - c);
- return [hcg[0], (v - c) * 100, (1 - v) * 100];
-};
-
-convert$3.hwb.hcg = function (hwb) {
- const w = hwb[1] / 100;
- const b = hwb[2] / 100;
- const v = 1 - b;
- const c = v - w;
- let g = 0;
-
- if (c < 1) {
- g = (v - c) / (1 - c);
- }
-
- return [hwb[0], c * 100, g * 100];
-};
-
-convert$3.apple.rgb = function (apple) {
- return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
-};
-
-convert$3.rgb.apple = function (rgb) {
- return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
-};
-
-convert$3.gray.rgb = function (args) {
- return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
-};
-
-convert$3.gray.hsl = function (args) {
- return [0, 0, args[0]];
-};
-
-convert$3.gray.hsv = convert$3.gray.hsl;
-
-convert$3.gray.hwb = function (gray) {
- return [0, 100, gray[0]];
-};
-
-convert$3.gray.cmyk = function (gray) {
- return [0, 0, 0, gray[0]];
-};
-
-convert$3.gray.lab = function (gray) {
- return [gray[0], 0, 0];
-};
-
-convert$3.gray.hex = function (gray) {
- const val = Math.round(gray[0] / 100 * 255) & 0xFF;
- const integer = (val << 16) + (val << 8) + val;
-
- const string = integer.toString(16).toUpperCase();
- return '000000'.substring(string.length) + string;
-};
-
-convert$3.rgb.gray = function (rgb) {
- const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
- return [val / 255 * 100];
-};
-
-const conversions$4 = conversions$5;
-
-/*
- This function routes a model to all other models.
-
- all functions that are routed have a property `.conversion` attached
- to the returned synthetic function. This property is an array
- of strings, each with the steps in between the 'from' and 'to'
- color models (inclusive).
-
- conversions that are not possible simply are not included.
-*/
-
-function buildGraph$1() {
- const graph = {};
- // https://jsperf.com/object-keys-vs-for-in-with-closure/3
- const models = Object.keys(conversions$4);
-
- for (let len = models.length, i = 0; i < len; i++) {
- graph[models[i]] = {
- // http://jsperf.com/1-vs-infinity
- // micro-opt, but this is simple.
- distance: -1,
- parent: null
- };
- }
-
- return graph;
-}
-
-// https://en.wikipedia.org/wiki/Breadth-first_search
-function deriveBFS$1(fromModel) {
- const graph = buildGraph$1();
- const queue = [fromModel]; // Unshift -> queue -> pop
-
- graph[fromModel].distance = 0;
-
- while (queue.length) {
- const current = queue.pop();
- const adjacents = Object.keys(conversions$4[current]);
-
- for (let len = adjacents.length, i = 0; i < len; i++) {
- const adjacent = adjacents[i];
- const node = graph[adjacent];
-
- if (node.distance === -1) {
- node.distance = graph[current].distance + 1;
- node.parent = current;
- queue.unshift(adjacent);
- }
- }
- }
-
- return graph;
-}
-
-function link$1(from, to) {
- return function (args) {
- return to(from(args));
- };
-}
-
-function wrapConversion$1(toModel, graph) {
- const path = [graph[toModel].parent, toModel];
- let fn = conversions$4[graph[toModel].parent][toModel];
-
- let cur = graph[toModel].parent;
- while (graph[cur].parent) {
- path.unshift(graph[cur].parent);
- fn = link$1(conversions$4[graph[cur].parent][cur], fn);
- cur = graph[cur].parent;
- }
-
- fn.conversion = path;
- return fn;
-}
-
-var route$3 = function (fromModel) {
- const graph = deriveBFS$1(fromModel);
- const conversion = {};
-
- const models = Object.keys(graph);
- for (let len = models.length, i = 0; i < len; i++) {
- const toModel = models[i];
- const node = graph[toModel];
-
- if (node.parent === null) {
- // No possible conversion, or this node is the source model.
- continue;
- }
-
- conversion[toModel] = wrapConversion$1(toModel, graph);
- }
-
- return conversion;
-};
-
-const conversions$3 = conversions$5;
-const route$2 = route$3;
-
-const convert$2 = {};
-
-const models$1 = Object.keys(conversions$3);
-
-function wrapRaw$1(fn) {
- const wrappedFn = function (...args) {
- const arg0 = args[0];
- if (arg0 === undefined || arg0 === null) {
- return arg0;
- }
-
- if (arg0.length > 1) {
- args = arg0;
- }
-
- return fn(args);
- };
-
- // Preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-function wrapRounded$1(fn) {
- const wrappedFn = function (...args) {
- const arg0 = args[0];
-
- if (arg0 === undefined || arg0 === null) {
- return arg0;
- }
-
- if (arg0.length > 1) {
- args = arg0;
- }
-
- const result = fn(args);
-
- // We're assuming the result is an array here.
- // see notice in conversions.js; don't use box types
- // in conversion functions.
- if (typeof result === 'object') {
- for (let len = result.length, i = 0; i < len; i++) {
- result[i] = Math.round(result[i]);
- }
- }
-
- return result;
- };
-
- // Preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-models$1.forEach(fromModel => {
- convert$2[fromModel] = {};
-
- Object.defineProperty(convert$2[fromModel], 'channels', {value: conversions$3[fromModel].channels});
- Object.defineProperty(convert$2[fromModel], 'labels', {value: conversions$3[fromModel].labels});
-
- const routes = route$2(fromModel);
- const routeModels = Object.keys(routes);
-
- routeModels.forEach(toModel => {
- const fn = routes[toModel];
-
- convert$2[fromModel][toModel] = wrapRounded$1(fn);
- convert$2[fromModel][toModel].raw = wrapRaw$1(fn);
- });
-});
-
-var colorConvert$1 = convert$2;
-
-(function (module) {
-
-const wrapAnsi16 = (fn, offset) => (...args) => {
- const code = fn(...args);
- return `\u001B[${code + offset}m`;
-};
-
-const wrapAnsi256 = (fn, offset) => (...args) => {
- const code = fn(...args);
- return `\u001B[${38 + offset};5;${code}m`;
-};
-
-const wrapAnsi16m = (fn, offset) => (...args) => {
- const rgb = fn(...args);
- return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
-};
-
-const ansi2ansi = n => n;
-const rgb2rgb = (r, g, b) => [r, g, b];
-
-const setLazyProperty = (object, property, get) => {
- Object.defineProperty(object, property, {
- get: () => {
- const value = get();
-
- Object.defineProperty(object, property, {
- value,
- enumerable: true,
- configurable: true
- });
-
- return value;
- },
- enumerable: true,
- configurable: true
- });
-};
-
-/** @type {typeof import('color-convert')} */
-let colorConvert;
-const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
- if (colorConvert === undefined) {
- colorConvert = colorConvert$1;
- }
-
- const offset = isBackground ? 10 : 0;
- const styles = {};
-
- for (const [sourceSpace, suite] of Object.entries(colorConvert)) {
- const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;
- if (sourceSpace === targetSpace) {
- styles[name] = wrap(identity, offset);
- } else if (typeof suite === 'object') {
- styles[name] = wrap(suite[targetSpace], offset);
- }
- }
-
- return styles;
-};
-
-function assembleStyles() {
- const codes = new Map();
- const styles = {
- modifier: {
- reset: [0, 0],
- // 21 isn't widely supported and 22 does the same thing
- bold: [1, 22],
- dim: [2, 22],
- italic: [3, 23],
- underline: [4, 24],
- inverse: [7, 27],
- hidden: [8, 28],
- strikethrough: [9, 29]
- },
- color: {
- black: [30, 39],
- red: [31, 39],
- green: [32, 39],
- yellow: [33, 39],
- blue: [34, 39],
- magenta: [35, 39],
- cyan: [36, 39],
- white: [37, 39],
-
- // Bright color
- blackBright: [90, 39],
- redBright: [91, 39],
- greenBright: [92, 39],
- yellowBright: [93, 39],
- blueBright: [94, 39],
- magentaBright: [95, 39],
- cyanBright: [96, 39],
- whiteBright: [97, 39]
- },
- bgColor: {
- bgBlack: [40, 49],
- bgRed: [41, 49],
- bgGreen: [42, 49],
- bgYellow: [43, 49],
- bgBlue: [44, 49],
- bgMagenta: [45, 49],
- bgCyan: [46, 49],
- bgWhite: [47, 49],
-
- // Bright color
- bgBlackBright: [100, 49],
- bgRedBright: [101, 49],
- bgGreenBright: [102, 49],
- bgYellowBright: [103, 49],
- bgBlueBright: [104, 49],
- bgMagentaBright: [105, 49],
- bgCyanBright: [106, 49],
- bgWhiteBright: [107, 49]
- }
- };
-
- // Alias bright black as gray (and grey)
- styles.color.gray = styles.color.blackBright;
- styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
- styles.color.grey = styles.color.blackBright;
- styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
-
- for (const [groupName, group] of Object.entries(styles)) {
- for (const [styleName, style] of Object.entries(group)) {
- styles[styleName] = {
- open: `\u001B[${style[0]}m`,
- close: `\u001B[${style[1]}m`
- };
-
- group[styleName] = styles[styleName];
-
- codes.set(style[0], style[1]);
- }
-
- Object.defineProperty(styles, groupName, {
- value: group,
- enumerable: false
- });
- }
-
- Object.defineProperty(styles, 'codes', {
- value: codes,
- enumerable: false
- });
-
- styles.color.close = '\u001B[39m';
- styles.bgColor.close = '\u001B[49m';
-
- setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));
- setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));
- setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));
- setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));
- setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));
- setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));
-
- return styles;
-}
-
-// Make the export immutable
-Object.defineProperty(module, 'exports', {
- enumerable: true,
- get: assembleStyles
-});
-}(ansiStyles$2));
-
-var hasFlag$3 = (flag, argv = process.argv) => {
- const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
- const position = argv.indexOf(prefix + flag);
- const terminatorPosition = argv.indexOf('--');
- return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
-};
-
-const os$5 = require$$0__default$1;
-const tty = require$$0__default;
-const hasFlag$2 = hasFlag$3;
-
-const {env: env$2} = process;
-
-let forceColor$1;
-if (hasFlag$2('no-color') ||
- hasFlag$2('no-colors') ||
- hasFlag$2('color=false') ||
- hasFlag$2('color=never')) {
- forceColor$1 = 0;
-} else if (hasFlag$2('color') ||
- hasFlag$2('colors') ||
- hasFlag$2('color=true') ||
- hasFlag$2('color=always')) {
- forceColor$1 = 1;
-}
-
-if ('FORCE_COLOR' in env$2) {
- if (env$2.FORCE_COLOR === 'true') {
- forceColor$1 = 1;
- } else if (env$2.FORCE_COLOR === 'false') {
- forceColor$1 = 0;
- } else {
- forceColor$1 = env$2.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env$2.FORCE_COLOR, 10), 3);
- }
-}
-
-function translateLevel$1(level) {
- if (level === 0) {
- return false;
- }
-
- return {
- level,
- hasBasic: true,
- has256: level >= 2,
- has16m: level >= 3
- };
-}
-
-function supportsColor$1(haveStream, streamIsTTY) {
- if (forceColor$1 === 0) {
- return 0;
- }
-
- if (hasFlag$2('color=16m') ||
- hasFlag$2('color=full') ||
- hasFlag$2('color=truecolor')) {
- return 3;
- }
-
- if (hasFlag$2('color=256')) {
- return 2;
- }
-
- if (haveStream && !streamIsTTY && forceColor$1 === undefined) {
- return 0;
- }
-
- const min = forceColor$1 || 0;
-
- if (env$2.TERM === 'dumb') {
- return min;
- }
-
- if (process.platform === 'win32') {
- // Windows 10 build 10586 is the first Windows release that supports 256 colors.
- // Windows 10 build 14931 is the first release that supports 16m/TrueColor.
- const osRelease = os$5.release().split('.');
- if (
- Number(osRelease[0]) >= 10 &&
- Number(osRelease[2]) >= 10586
- ) {
- return Number(osRelease[2]) >= 14931 ? 3 : 2;
- }
-
- return 1;
- }
-
- if ('CI' in env$2) {
- if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env$2) || env$2.CI_NAME === 'codeship') {
- return 1;
- }
-
- return min;
- }
-
- if ('TEAMCITY_VERSION' in env$2) {
- return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$2.TEAMCITY_VERSION) ? 1 : 0;
- }
-
- if (env$2.COLORTERM === 'truecolor') {
- return 3;
- }
-
- if ('TERM_PROGRAM' in env$2) {
- const version = parseInt((env$2.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
-
- switch (env$2.TERM_PROGRAM) {
- case 'iTerm.app':
- return version >= 3 ? 3 : 2;
- case 'Apple_Terminal':
- return 2;
- // No default
- }
- }
-
- if (/-256(color)?$/i.test(env$2.TERM)) {
- return 2;
- }
-
- if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$2.TERM)) {
- return 1;
- }
-
- if ('COLORTERM' in env$2) {
- return 1;
- }
-
- return min;
-}
-
-function getSupportLevel$1(stream) {
- const level = supportsColor$1(stream, stream && stream.isTTY);
- return translateLevel$1(level);
-}
-
-var supportsColor_1$1 = {
- supportsColor: getSupportLevel$1,
- stdout: translateLevel$1(supportsColor$1(true, tty.isatty(1))),
- stderr: translateLevel$1(supportsColor$1(true, tty.isatty(2)))
-};
-
-const stringReplaceAll$1 = (string, substring, replacer) => {
- let index = string.indexOf(substring);
- if (index === -1) {
- return string;
- }
-
- const substringLength = substring.length;
- let endIndex = 0;
- let returnValue = '';
- do {
- returnValue += string.substr(endIndex, index - endIndex) + substring + replacer;
- endIndex = index + substringLength;
- index = string.indexOf(substring, endIndex);
- } while (index !== -1);
-
- returnValue += string.substr(endIndex);
- return returnValue;
-};
-
-const stringEncaseCRLFWithFirstIndex$1 = (string, prefix, postfix, index) => {
- let endIndex = 0;
- let returnValue = '';
- do {
- const gotCR = string[index - 1] === '\r';
- returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix;
- endIndex = index + 1;
- index = string.indexOf('\n', endIndex);
- } while (index !== -1);
-
- returnValue += string.substr(endIndex);
- return returnValue;
-};
-
-var util$9 = {
- stringReplaceAll: stringReplaceAll$1,
- stringEncaseCRLFWithFirstIndex: stringEncaseCRLFWithFirstIndex$1
-};
-
-const TEMPLATE_REGEX$1 = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
-const STYLE_REGEX$1 = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
-const STRING_REGEX$1 = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
-const ESCAPE_REGEX$1 = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi;
-
-const ESCAPES$1 = new Map([
- ['n', '\n'],
- ['r', '\r'],
- ['t', '\t'],
- ['b', '\b'],
- ['f', '\f'],
- ['v', '\v'],
- ['0', '\0'],
- ['\\', '\\'],
- ['e', '\u001B'],
- ['a', '\u0007']
-]);
-
-function unescape$2(c) {
- const u = c[0] === 'u';
- const bracket = c[1] === '{';
-
- if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
- return String.fromCharCode(parseInt(c.slice(1), 16));
- }
-
- if (u && bracket) {
- return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
- }
-
- return ESCAPES$1.get(c) || c;
-}
-
-function parseArguments$1(name, arguments_) {
- const results = [];
- const chunks = arguments_.trim().split(/\s*,\s*/g);
- let matches;
-
- for (const chunk of chunks) {
- const number = Number(chunk);
- if (!Number.isNaN(number)) {
- results.push(number);
- } else if ((matches = chunk.match(STRING_REGEX$1))) {
- results.push(matches[2].replace(ESCAPE_REGEX$1, (m, escape, character) => escape ? unescape$2(escape) : character));
- } else {
- throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
- }
- }
-
- return results;
-}
-
-function parseStyle$1(style) {
- STYLE_REGEX$1.lastIndex = 0;
-
- const results = [];
- let matches;
-
- while ((matches = STYLE_REGEX$1.exec(style)) !== null) {
- const name = matches[1];
-
- if (matches[2]) {
- const args = parseArguments$1(name, matches[2]);
- results.push([name].concat(args));
- } else {
- results.push([name]);
- }
- }
-
- return results;
-}
-
-function buildStyle$1(chalk, styles) {
- const enabled = {};
-
- for (const layer of styles) {
- for (const style of layer.styles) {
- enabled[style[0]] = layer.inverse ? null : style.slice(1);
- }
- }
-
- let current = chalk;
- for (const [styleName, styles] of Object.entries(enabled)) {
- if (!Array.isArray(styles)) {
- continue;
- }
-
- if (!(styleName in current)) {
- throw new Error(`Unknown Chalk style: ${styleName}`);
- }
-
- current = styles.length > 0 ? current[styleName](...styles) : current[styleName];
- }
-
- return current;
-}
-
-var templates$1 = (chalk, temporary) => {
- const styles = [];
- const chunks = [];
- let chunk = [];
-
- // eslint-disable-next-line max-params
- temporary.replace(TEMPLATE_REGEX$1, (m, escapeCharacter, inverse, style, close, character) => {
- if (escapeCharacter) {
- chunk.push(unescape$2(escapeCharacter));
- } else if (style) {
- const string = chunk.join('');
- chunk = [];
- chunks.push(styles.length === 0 ? string : buildStyle$1(chalk, styles)(string));
- styles.push({inverse, styles: parseStyle$1(style)});
- } else if (close) {
- if (styles.length === 0) {
- throw new Error('Found extraneous } in Chalk template literal');
- }
-
- chunks.push(buildStyle$1(chalk, styles)(chunk.join('')));
- chunk = [];
- styles.pop();
- } else {
- chunk.push(character);
- }
- });
-
- chunks.push(chunk.join(''));
-
- if (styles.length > 0) {
- const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
- throw new Error(errMessage);
- }
-
- return chunks.join('');
-};
-
-const ansiStyles$1 = ansiStyles$2.exports;
-const {stdout: stdoutColor, stderr: stderrColor} = supportsColor_1$1;
-const {
- stringReplaceAll,
- stringEncaseCRLFWithFirstIndex
-} = util$9;
-
-const {isArray: isArray$4} = Array;
-
-// `supportsColor.level` → `ansiStyles.color[name]` mapping
-const levelMapping = [
- 'ansi',
- 'ansi',
- 'ansi256',
- 'ansi16m'
-];
-
-const styles = Object.create(null);
-
-const applyOptions = (object, options = {}) => {
- if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
- throw new Error('The `level` option should be an integer from 0 to 3');
- }
-
- // Detect level if not set manually
- const colorLevel = stdoutColor ? stdoutColor.level : 0;
- object.level = options.level === undefined ? colorLevel : options.level;
-};
-
-class ChalkClass {
- constructor(options) {
- // eslint-disable-next-line no-constructor-return
- return chalkFactory(options);
- }
-}
-
-const chalkFactory = options => {
- const chalk = {};
- applyOptions(chalk, options);
-
- chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);
-
- Object.setPrototypeOf(chalk, Chalk.prototype);
- Object.setPrototypeOf(chalk.template, chalk);
-
- chalk.template.constructor = () => {
- throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');
- };
-
- chalk.template.Instance = ChalkClass;
-
- return chalk.template;
-};
-
-function Chalk(options) {
- return chalkFactory(options);
-}
-
-for (const [styleName, style] of Object.entries(ansiStyles$1)) {
- styles[styleName] = {
- get() {
- const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);
- Object.defineProperty(this, styleName, {value: builder});
- return builder;
- }
- };
-}
-
-styles.visible = {
- get() {
- const builder = createBuilder(this, this._styler, true);
- Object.defineProperty(this, 'visible', {value: builder});
- return builder;
- }
-};
-
-const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];
-
-for (const model of usedModels) {
- styles[model] = {
- get() {
- const {level} = this;
- return function (...arguments_) {
- const styler = createStyler(ansiStyles$1.color[levelMapping[level]][model](...arguments_), ansiStyles$1.color.close, this._styler);
- return createBuilder(this, styler, this._isEmpty);
- };
- }
- };
-}
-
-for (const model of usedModels) {
- const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
- styles[bgModel] = {
- get() {
- const {level} = this;
- return function (...arguments_) {
- const styler = createStyler(ansiStyles$1.bgColor[levelMapping[level]][model](...arguments_), ansiStyles$1.bgColor.close, this._styler);
- return createBuilder(this, styler, this._isEmpty);
- };
- }
- };
-}
-
-const proto$1 = Object.defineProperties(() => {}, {
- ...styles,
- level: {
- enumerable: true,
- get() {
- return this._generator.level;
- },
- set(level) {
- this._generator.level = level;
- }
- }
-});
-
-const createStyler = (open, close, parent) => {
- let openAll;
- let closeAll;
- if (parent === undefined) {
- openAll = open;
- closeAll = close;
- } else {
- openAll = parent.openAll + open;
- closeAll = close + parent.closeAll;
- }
-
- return {
- open,
- close,
- openAll,
- closeAll,
- parent
- };
-};
-
-const createBuilder = (self, _styler, _isEmpty) => {
- const builder = (...arguments_) => {
- if (isArray$4(arguments_[0]) && isArray$4(arguments_[0].raw)) {
- // Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`
- return applyStyle(builder, chalkTag(builder, ...arguments_));
- }
-
- // Single argument is hot path, implicit coercion is faster than anything
- // eslint-disable-next-line no-implicit-coercion
- return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));
- };
-
- // We alter the prototype because we must return a function, but there is
- // no way to create a function with a different prototype
- Object.setPrototypeOf(builder, proto$1);
-
- builder._generator = self;
- builder._styler = _styler;
- builder._isEmpty = _isEmpty;
-
- return builder;
-};
-
-const applyStyle = (self, string) => {
- if (self.level <= 0 || !string) {
- return self._isEmpty ? '' : string;
- }
-
- let styler = self._styler;
-
- if (styler === undefined) {
- return string;
- }
-
- const {openAll, closeAll} = styler;
- if (string.indexOf('\u001B') !== -1) {
- while (styler !== undefined) {
- // Replace any instances already present with a re-opening code
- // otherwise only the part of the string until said closing code
- // will be colored, and the rest will simply be 'plain'.
- string = stringReplaceAll(string, styler.close, styler.open);
-
- styler = styler.parent;
- }
- }
-
- // We can move both next actions out of loop, because remaining actions in loop won't have
- // any/visible effect on parts we add here. Close the styling before a linebreak and reopen
- // after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92
- const lfIndex = string.indexOf('\n');
- if (lfIndex !== -1) {
- string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
- }
-
- return openAll + string + closeAll;
-};
-
-let template;
-const chalkTag = (chalk, ...strings) => {
- const [firstString] = strings;
-
- if (!isArray$4(firstString) || !isArray$4(firstString.raw)) {
- // If chalk() was called by itself or with a string,
- // return the string itself as a string.
- return strings.join(' ');
- }
-
- const arguments_ = strings.slice(1);
- const parts = [firstString.raw[0]];
-
- for (let i = 1; i < firstString.length; i++) {
- parts.push(
- String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'),
- String(firstString.raw[i])
- );
- }
-
- if (template === undefined) {
- template = templates$1;
- }
-
- return template(chalk, parts.join(''));
-};
-
-Object.defineProperties(Chalk.prototype, styles);
-
-const chalk$2 = Chalk(); // eslint-disable-line new-cap
-chalk$2.supportsColor = stdoutColor;
-chalk$2.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap
-chalk$2.stderr.supportsColor = stderrColor;
-
-var source = chalk$2;
-
-var src$2 = {exports: {}};
-
-var browser$1 = {exports: {}};
-
-/**
- * Helpers.
- */
-
-var s$1 = 1000;
-var m$1 = s$1 * 60;
-var h$1 = m$1 * 60;
-var d$1 = h$1 * 24;
-var w = d$1 * 7;
-var y$1 = d$1 * 365.25;
-
-/**
- * Parse or format the given `val`.
- *
- * Options:
- *
- * - `long` verbose formatting [false]
- *
- * @param {String|Number} val
- * @param {Object} [options]
- * @throws {Error} throw an error if val is not a non-empty string or a number
- * @return {String|Number}
- * @api public
- */
-
-var ms$1 = function(val, options) {
- options = options || {};
- var type = typeof val;
- if (type === 'string' && val.length > 0) {
- return parse$m(val);
- } else if (type === 'number' && isFinite(val)) {
- return options.long ? fmtLong$1(val) : fmtShort$1(val);
- }
- throw new Error(
- 'val is not a non-empty string or a valid number. val=' +
- JSON.stringify(val)
- );
-};
-
-/**
- * Parse the given `str` and return milliseconds.
- *
- * @param {String} str
- * @return {Number}
- * @api private
- */
-
-function parse$m(str) {
- str = String(str);
- if (str.length > 100) {
- return;
- }
- var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
- str
- );
- if (!match) {
- return;
- }
- var n = parseFloat(match[1]);
- var type = (match[2] || 'ms').toLowerCase();
- switch (type) {
- case 'years':
- case 'year':
- case 'yrs':
- case 'yr':
- case 'y':
- return n * y$1;
- case 'weeks':
- case 'week':
- case 'w':
- return n * w;
- case 'days':
- case 'day':
- case 'd':
- return n * d$1;
- case 'hours':
- case 'hour':
- case 'hrs':
- case 'hr':
- case 'h':
- return n * h$1;
- case 'minutes':
- case 'minute':
- case 'mins':
- case 'min':
- case 'm':
- return n * m$1;
- case 'seconds':
- case 'second':
- case 'secs':
- case 'sec':
- case 's':
- return n * s$1;
- case 'milliseconds':
- case 'millisecond':
- case 'msecs':
- case 'msec':
- case 'ms':
- return n;
- default:
- return undefined;
- }
-}
-
-/**
- * Short format for `ms`.
- *
- * @param {Number} ms
- * @return {String}
- * @api private
- */
-
-function fmtShort$1(ms) {
- var msAbs = Math.abs(ms);
- if (msAbs >= d$1) {
- return Math.round(ms / d$1) + 'd';
- }
- if (msAbs >= h$1) {
- return Math.round(ms / h$1) + 'h';
- }
- if (msAbs >= m$1) {
- return Math.round(ms / m$1) + 'm';
- }
- if (msAbs >= s$1) {
- return Math.round(ms / s$1) + 's';
- }
- return ms + 'ms';
-}
-
-/**
- * Long format for `ms`.
- *
- * @param {Number} ms
- * @return {String}
- * @api private
- */
-
-function fmtLong$1(ms) {
- var msAbs = Math.abs(ms);
- if (msAbs >= d$1) {
- return plural$1(ms, msAbs, d$1, 'day');
- }
- if (msAbs >= h$1) {
- return plural$1(ms, msAbs, h$1, 'hour');
- }
- if (msAbs >= m$1) {
- return plural$1(ms, msAbs, m$1, 'minute');
- }
- if (msAbs >= s$1) {
- return plural$1(ms, msAbs, s$1, 'second');
- }
- return ms + ' ms';
-}
-
-/**
- * Pluralization helper.
- */
-
-function plural$1(ms, msAbs, n, name) {
- var isPlural = msAbs >= n * 1.5;
- return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
-}
-
-/**
- * This is the common logic for both the Node.js and web browser
- * implementations of `debug()`.
- */
-
-function setup(env) {
- createDebug.debug = createDebug;
- createDebug.default = createDebug;
- createDebug.coerce = coerce;
- createDebug.disable = disable;
- createDebug.enable = enable;
- createDebug.enabled = enabled;
- createDebug.humanize = ms$1;
- createDebug.destroy = destroy;
-
- Object.keys(env).forEach(key => {
- createDebug[key] = env[key];
- });
-
- /**
- * The currently active debug mode names, and names to skip.
- */
-
- createDebug.names = [];
- createDebug.skips = [];
-
- /**
- * Map of special "%n" handling functions, for the debug "format" argument.
- *
- * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
- */
- createDebug.formatters = {};
-
- /**
- * Selects a color for a debug namespace
- * @param {String} namespace The namespace string for the for the debug instance to be colored
- * @return {Number|String} An ANSI color code for the given namespace
- * @api private
- */
- function selectColor(namespace) {
- let hash = 0;
-
- for (let i = 0; i < namespace.length; i++) {
- hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
- hash |= 0; // Convert to 32bit integer
- }
-
- return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
- }
- createDebug.selectColor = selectColor;
-
- /**
- * Create a debugger with the given `namespace`.
- *
- * @param {String} namespace
- * @return {Function}
- * @api public
- */
- function createDebug(namespace) {
- let prevTime;
- let enableOverride = null;
- let namespacesCache;
- let enabledCache;
-
- function debug(...args) {
- // Disabled?
- if (!debug.enabled) {
- return;
- }
-
- const self = debug;
-
- // Set `diff` timestamp
- const curr = Number(new Date());
- const ms = curr - (prevTime || curr);
- self.diff = ms;
- self.prev = prevTime;
- self.curr = curr;
- prevTime = curr;
-
- args[0] = createDebug.coerce(args[0]);
-
- if (typeof args[0] !== 'string') {
- // Anything else let's inspect with %O
- args.unshift('%O');
- }
-
- // Apply any `formatters` transformations
- let index = 0;
- args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
- // If we encounter an escaped % then don't increase the array index
- if (match === '%%') {
- return '%';
- }
- index++;
- const formatter = createDebug.formatters[format];
- if (typeof formatter === 'function') {
- const val = args[index];
- match = formatter.call(self, val);
-
- // Now we need to remove `args[index]` since it's inlined in the `format`
- args.splice(index, 1);
- index--;
- }
- return match;
- });
-
- // Apply env-specific formatting (colors, etc.)
- createDebug.formatArgs.call(self, args);
-
- const logFn = self.log || createDebug.log;
- logFn.apply(self, args);
- }
-
- debug.namespace = namespace;
- debug.useColors = createDebug.useColors();
- debug.color = createDebug.selectColor(namespace);
- debug.extend = extend;
- debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.
-
- Object.defineProperty(debug, 'enabled', {
- enumerable: true,
- configurable: false,
- get: () => {
- if (enableOverride !== null) {
- return enableOverride;
- }
- if (namespacesCache !== createDebug.namespaces) {
- namespacesCache = createDebug.namespaces;
- enabledCache = createDebug.enabled(namespace);
- }
-
- return enabledCache;
- },
- set: v => {
- enableOverride = v;
- }
- });
-
- // Env-specific initialization logic for debug instances
- if (typeof createDebug.init === 'function') {
- createDebug.init(debug);
- }
-
- return debug;
- }
-
- function extend(namespace, delimiter) {
- const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
- newDebug.log = this.log;
- return newDebug;
- }
-
- /**
- * Enables a debug mode by namespaces. This can include modes
- * separated by a colon and wildcards.
- *
- * @param {String} namespaces
- * @api public
- */
- function enable(namespaces) {
- createDebug.save(namespaces);
- createDebug.namespaces = namespaces;
-
- createDebug.names = [];
- createDebug.skips = [];
-
- let i;
- const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
- const len = split.length;
-
- for (i = 0; i < len; i++) {
- if (!split[i]) {
- // ignore empty strings
- continue;
- }
-
- namespaces = split[i].replace(/\*/g, '.*?');
-
- if (namespaces[0] === '-') {
- createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
- } else {
- createDebug.names.push(new RegExp('^' + namespaces + '$'));
- }
- }
- }
-
- /**
- * Disable debug output.
- *
- * @return {String} namespaces
- * @api public
- */
- function disable() {
- const namespaces = [
- ...createDebug.names.map(toNamespace),
- ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)
- ].join(',');
- createDebug.enable('');
- return namespaces;
- }
-
- /**
- * Returns true if the given mode name is enabled, false otherwise.
- *
- * @param {String} name
- * @return {Boolean}
- * @api public
- */
- function enabled(name) {
- if (name[name.length - 1] === '*') {
- return true;
- }
-
- let i;
- let len;
-
- for (i = 0, len = createDebug.skips.length; i < len; i++) {
- if (createDebug.skips[i].test(name)) {
- return false;
- }
- }
-
- for (i = 0, len = createDebug.names.length; i < len; i++) {
- if (createDebug.names[i].test(name)) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Convert regexp to namespace
- *
- * @param {RegExp} regxep
- * @return {String} namespace
- * @api private
- */
- function toNamespace(regexp) {
- return regexp.toString()
- .substring(2, regexp.toString().length - 2)
- .replace(/\.\*\?$/, '*');
- }
-
- /**
- * Coerce `val`.
- *
- * @param {Mixed} val
- * @return {Mixed}
- * @api private
- */
- function coerce(val) {
- if (val instanceof Error) {
- return val.stack || val.message;
- }
- return val;
- }
-
- /**
- * XXX DO NOT USE. This is a temporary stub function.
- * XXX It WILL be removed in the next major release.
- */
- function destroy() {
- console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
- }
-
- createDebug.enable(createDebug.load());
-
- return createDebug;
-}
-
-var common$e = setup;
-
-/* eslint-env browser */
-
-(function (module, exports) {
-/**
- * This is the web browser implementation of `debug()`.
- */
-
-exports.formatArgs = formatArgs;
-exports.save = save;
-exports.load = load;
-exports.useColors = useColors;
-exports.storage = localstorage();
-exports.destroy = (() => {
- let warned = false;
-
- return () => {
- if (!warned) {
- warned = true;
- console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
- }
- };
-})();
-
-/**
- * Colors.
- */
-
-exports.colors = [
- '#0000CC',
- '#0000FF',
- '#0033CC',
- '#0033FF',
- '#0066CC',
- '#0066FF',
- '#0099CC',
- '#0099FF',
- '#00CC00',
- '#00CC33',
- '#00CC66',
- '#00CC99',
- '#00CCCC',
- '#00CCFF',
- '#3300CC',
- '#3300FF',
- '#3333CC',
- '#3333FF',
- '#3366CC',
- '#3366FF',
- '#3399CC',
- '#3399FF',
- '#33CC00',
- '#33CC33',
- '#33CC66',
- '#33CC99',
- '#33CCCC',
- '#33CCFF',
- '#6600CC',
- '#6600FF',
- '#6633CC',
- '#6633FF',
- '#66CC00',
- '#66CC33',
- '#9900CC',
- '#9900FF',
- '#9933CC',
- '#9933FF',
- '#99CC00',
- '#99CC33',
- '#CC0000',
- '#CC0033',
- '#CC0066',
- '#CC0099',
- '#CC00CC',
- '#CC00FF',
- '#CC3300',
- '#CC3333',
- '#CC3366',
- '#CC3399',
- '#CC33CC',
- '#CC33FF',
- '#CC6600',
- '#CC6633',
- '#CC9900',
- '#CC9933',
- '#CCCC00',
- '#CCCC33',
- '#FF0000',
- '#FF0033',
- '#FF0066',
- '#FF0099',
- '#FF00CC',
- '#FF00FF',
- '#FF3300',
- '#FF3333',
- '#FF3366',
- '#FF3399',
- '#FF33CC',
- '#FF33FF',
- '#FF6600',
- '#FF6633',
- '#FF9900',
- '#FF9933',
- '#FFCC00',
- '#FFCC33'
-];
-
-/**
- * Currently only WebKit-based Web Inspectors, Firefox >= v31,
- * and the Firebug extension (any Firefox version) are known
- * to support "%c" CSS customizations.
- *
- * TODO: add a `localStorage` variable to explicitly enable/disable colors
- */
-
-// eslint-disable-next-line complexity
-function useColors() {
- // NB: In an Electron preload script, document will be defined but not fully
- // initialized. Since we know we're in Chrome, we'll just detect this case
- // explicitly
- if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
- return true;
- }
-
- // Internet Explorer and Edge do not support colors.
- if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
- return false;
- }
-
- // Is webkit? http://stackoverflow.com/a/16459606/376773
- // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
- return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
- // Is firebug? http://stackoverflow.com/a/398120/376773
- (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
- // Is firefox >= v31?
- // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
- (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
- // Double check webkit in userAgent just in case we are in a worker
- (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
-}
-
-/**
- * Colorize log arguments if enabled.
- *
- * @api public
- */
-
-function formatArgs(args) {
- args[0] = (this.useColors ? '%c' : '') +
- this.namespace +
- (this.useColors ? ' %c' : ' ') +
- args[0] +
- (this.useColors ? '%c ' : ' ') +
- '+' + module.exports.humanize(this.diff);
-
- if (!this.useColors) {
- return;
- }
-
- const c = 'color: ' + this.color;
- args.splice(1, 0, c, 'color: inherit');
-
- // The final "%c" is somewhat tricky, because there could be other
- // arguments passed either before or after the %c, so we need to
- // figure out the correct index to insert the CSS into
- let index = 0;
- let lastC = 0;
- args[0].replace(/%[a-zA-Z%]/g, match => {
- if (match === '%%') {
- return;
- }
- index++;
- if (match === '%c') {
- // We only are interested in the *last* %c
- // (the user may have provided their own)
- lastC = index;
- }
- });
-
- args.splice(lastC, 0, c);
-}
-
-/**
- * Invokes `console.debug()` when available.
- * No-op when `console.debug` is not a "function".
- * If `console.debug` is not available, falls back
- * to `console.log`.
- *
- * @api public
- */
-exports.log = console.debug || console.log || (() => {});
-
-/**
- * Save `namespaces`.
- *
- * @param {String} namespaces
- * @api private
- */
-function save(namespaces) {
- try {
- if (namespaces) {
- exports.storage.setItem('debug', namespaces);
- } else {
- exports.storage.removeItem('debug');
- }
- } catch (error) {
- // Swallow
- // XXX (@Qix-) should we be logging these?
- }
-}
-
-/**
- * Load `namespaces`.
- *
- * @return {String} returns the previously persisted debug modes
- * @api private
- */
-function load() {
- let r;
- try {
- r = exports.storage.getItem('debug');
- } catch (error) {
- // Swallow
- // XXX (@Qix-) should we be logging these?
- }
-
- // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
- if (!r && typeof process !== 'undefined' && 'env' in process) {
- r = process.env.DEBUG;
- }
-
- return r;
-}
-
-/**
- * Localstorage attempts to return the localstorage.
- *
- * This is necessary because safari throws
- * when a user disables cookies/localstorage
- * and you attempt to access it.
- *
- * @return {LocalStorage}
- * @api private
- */
-
-function localstorage() {
- try {
- // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
- // The Browser also has localStorage in the global context.
- return localStorage;
- } catch (error) {
- // Swallow
- // XXX (@Qix-) should we be logging these?
- }
-}
-
-module.exports = common$e(exports);
-
-const {formatters} = module.exports;
-
-/**
- * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
- */
-
-formatters.j = function (v) {
- try {
- return JSON.stringify(v);
- } catch (error) {
- return '[UnexpectedJSONParseError]: ' + error.message;
- }
-};
-}(browser$1, browser$1.exports));
-
-var node$1 = {exports: {}};
-
-/**
- * Module dependencies.
- */
-
-(function (module, exports) {
-const tty = require$$0__default;
-const util = require$$0__default$2;
-
-/**
- * This is the Node.js implementation of `debug()`.
- */
-
-exports.init = init;
-exports.log = log;
-exports.formatArgs = formatArgs;
-exports.save = save;
-exports.load = load;
-exports.useColors = useColors;
-exports.destroy = util.deprecate(
- () => {},
- 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'
-);
-
-/**
- * Colors.
- */
-
-exports.colors = [6, 2, 3, 4, 5, 1];
-
-try {
- // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)
- // eslint-disable-next-line import/no-extraneous-dependencies
- const supportsColor = require('supports-color');
-
- if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
- exports.colors = [
- 20,
- 21,
- 26,
- 27,
- 32,
- 33,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 56,
- 57,
- 62,
- 63,
- 68,
- 69,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 92,
- 93,
- 98,
- 99,
- 112,
- 113,
- 128,
- 129,
- 134,
- 135,
- 148,
- 149,
- 160,
- 161,
- 162,
- 163,
- 164,
- 165,
- 166,
- 167,
- 168,
- 169,
- 170,
- 171,
- 172,
- 173,
- 178,
- 179,
- 184,
- 185,
- 196,
- 197,
- 198,
- 199,
- 200,
- 201,
- 202,
- 203,
- 204,
- 205,
- 206,
- 207,
- 208,
- 209,
- 214,
- 215,
- 220,
- 221
- ];
- }
-} catch (error) {
- // Swallow - we only care if `supports-color` is available; it doesn't have to be.
-}
-
-/**
- * Build up the default `inspectOpts` object from the environment variables.
- *
- * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
- */
-
-exports.inspectOpts = Object.keys(process.env).filter(key => {
- return /^debug_/i.test(key);
-}).reduce((obj, key) => {
- // Camel-case
- const prop = key
- .substring(6)
- .toLowerCase()
- .replace(/_([a-z])/g, (_, k) => {
- return k.toUpperCase();
- });
-
- // Coerce string value into JS value
- let val = process.env[key];
- if (/^(yes|on|true|enabled)$/i.test(val)) {
- val = true;
- } else if (/^(no|off|false|disabled)$/i.test(val)) {
- val = false;
- } else if (val === 'null') {
- val = null;
- } else {
- val = Number(val);
- }
-
- obj[prop] = val;
- return obj;
-}, {});
-
-/**
- * Is stdout a TTY? Colored output is enabled when `true`.
- */
-
-function useColors() {
- return 'colors' in exports.inspectOpts ?
- Boolean(exports.inspectOpts.colors) :
- tty.isatty(process.stderr.fd);
-}
-
-/**
- * Adds ANSI color escape codes if enabled.
- *
- * @api public
- */
-
-function formatArgs(args) {
- const {namespace: name, useColors} = this;
-
- if (useColors) {
- const c = this.color;
- const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c);
- const prefix = ` ${colorCode};1m${name} \u001B[0m`;
-
- args[0] = prefix + args[0].split('\n').join('\n' + prefix);
- args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m');
- } else {
- args[0] = getDate() + name + ' ' + args[0];
- }
-}
-
-function getDate() {
- if (exports.inspectOpts.hideDate) {
- return '';
- }
- return new Date().toISOString() + ' ';
-}
-
-/**
- * Invokes `util.format()` with the specified arguments and writes to stderr.
- */
-
-function log(...args) {
- return process.stderr.write(util.format(...args) + '\n');
-}
-
-/**
- * Save `namespaces`.
- *
- * @param {String} namespaces
- * @api private
- */
-function save(namespaces) {
- if (namespaces) {
- process.env.DEBUG = namespaces;
- } else {
- // If you set a process.env field to null or undefined, it gets cast to the
- // string 'null' or 'undefined'. Just delete instead.
- delete process.env.DEBUG;
- }
-}
-
-/**
- * Load `namespaces`.
- *
- * @return {String} returns the previously persisted debug modes
- * @api private
- */
-
-function load() {
- return process.env.DEBUG;
-}
-
-/**
- * Init logic for `debug` instances.
- *
- * Create a new `inspectOpts` object in case `useColors` is set
- * differently for a particular `debug` instance.
- */
-
-function init(debug) {
- debug.inspectOpts = {};
-
- const keys = Object.keys(exports.inspectOpts);
- for (let i = 0; i < keys.length; i++) {
- debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
- }
-}
-
-module.exports = common$e(exports);
-
-const {formatters} = module.exports;
-
-/**
- * Map %o to `util.inspect()`, all on a single line.
- */
-
-formatters.o = function (v) {
- this.inspectOpts.colors = this.useColors;
- return util.inspect(v, this.inspectOpts)
- .split('\n')
- .map(str => str.trim())
- .join(' ');
-};
-
-/**
- * Map %O to `util.inspect()`, allowing multiple lines if needed.
- */
-
-formatters.O = function (v) {
- this.inspectOpts.colors = this.useColors;
- return util.inspect(v, this.inspectOpts);
-};
-}(node$1, node$1.exports));
-
-/**
- * Detect Electron renderer / nwjs process, which is node, but we should
- * treat as a browser.
- */
-
-if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {
- src$2.exports = browser$1.exports;
-} else {
- src$2.exports = node$1.exports;
-}
-
-var debug$f = src$2.exports;
-
-const DEFAULT_MAIN_FIELDS = [
- 'module',
- 'jsnext:main',
- 'jsnext'
-];
-const DEFAULT_EXTENSIONS = [
- '.mjs',
- '.js',
- '.ts',
- '.jsx',
- '.tsx',
- '.json'
-];
-const JS_TYPES_RE = /\.(?:j|t)sx?$|\.mjs$/;
-const OPTIMIZABLE_ENTRY_RE = /\.(?:m?js|ts)$/;
-const SPECIAL_QUERY_RE = /[\?&](?:worker|sharedworker|raw|url)\b/;
-/**
- * Prefix for resolved fs paths, since windows paths may not be valid as URLs.
- */
-const FS_PREFIX = `/@fs/`;
-/**
- * Prefix for resolved Ids that are not valid browser import specifiers
- */
-const VALID_ID_PREFIX = `/@id/`;
-/**
- * Some Rollup plugins use ids that starts with the null byte \0 to avoid
- * collisions, but it is not permitted in import URLs so we have to replace
- * them.
- */
-const NULL_BYTE_PLACEHOLDER = `__x00__`;
-const CLIENT_PUBLIC_PATH = `/@vite/client`;
-const ENV_PUBLIC_PATH = `/@vite/env`;
-// eslint-disable-next-line node/no-missing-require
-const CLIENT_ENTRY = require.resolve('../../client/client.mjs');
-// eslint-disable-next-line node/no-missing-require
-const ENV_ENTRY = require.resolve('../../client/env.mjs');
-const CLIENT_DIR = path__default.dirname(CLIENT_ENTRY);
-// ** READ THIS ** before editing `KNOWN_ASSET_TYPES`.
-// If you add an asset to `KNOWN_ASSET_TYPES`, make sure to also add it
-// to the TypeScript declaration file `packages/vite/client.d.ts`.
-const KNOWN_ASSET_TYPES = [
- // images
- 'png',
- 'jpe?g',
- 'gif',
- 'svg',
- 'ico',
- 'webp',
- 'avif',
- // media
- 'mp4',
- 'webm',
- 'ogg',
- 'mp3',
- 'wav',
- 'flac',
- 'aac',
- // fonts
- 'woff2?',
- 'eot',
- 'ttf',
- 'otf',
- // other
- 'wasm',
- 'webmanifest',
- 'pdf'
-];
-const DEFAULT_ASSETS_RE = new RegExp(`\\.(` + KNOWN_ASSET_TYPES.join('|') + `)(\\?.*)?$`);
-const DEP_VERSION_RE = /[\?&](v=[\w\.-]+)\b/;
-
-const {builtinModules} = require$$0__default$3;
-
-const ignoreList = [
- 'sys'
-];
-
-// eslint-disable-next-line node/no-deprecated-api
-var builtinModules_1 = (builtinModules || Object.keys(process.binding('natives')))
- .filter(x => !/^_|^(internal|v8|node-inspect)\/|\//.test(x) && !ignoreList.includes(x))
- .sort();
-
-var charToInteger$1 = {};
-var chars$2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
-for (var i$2 = 0; i$2 < chars$2.length; i$2++) {
- charToInteger$1[chars$2.charCodeAt(i$2)] = i$2;
-}
-function decode(mappings) {
- var decoded = [];
- var line = [];
- var segment = [
- 0,
- 0,
- 0,
- 0,
- 0,
- ];
- var j = 0;
- for (var i = 0, shift = 0, value = 0; i < mappings.length; i++) {
- var c = mappings.charCodeAt(i);
- if (c === 44) { // ","
- segmentify(line, segment, j);
- j = 0;
- }
- else if (c === 59) { // ";"
- segmentify(line, segment, j);
- j = 0;
- decoded.push(line);
- line = [];
- segment[0] = 0;
- }
- else {
- var integer = charToInteger$1[c];
- if (integer === undefined) {
- throw new Error('Invalid character (' + String.fromCharCode(c) + ')');
- }
- var hasContinuationBit = integer & 32;
- integer &= 31;
- value += integer << shift;
- if (hasContinuationBit) {
- shift += 5;
- }
- else {
- var shouldNegate = value & 1;
- value >>>= 1;
- if (shouldNegate) {
- value = value === 0 ? -0x80000000 : -value;
- }
- segment[j] += value;
- j++;
- value = shift = 0; // reset
- }
- }
- }
- segmentify(line, segment, j);
- decoded.push(line);
- return decoded;
-}
-function segmentify(line, segment, j) {
- // This looks ugly, but we're creating specialized arrays with a specific
- // length. This is much faster than creating a new array (which v8 expands to
- // a capacity of 17 after pushing the first item), or slicing out a subarray
- // (which is slow). Length 4 is assumed to be the most frequent, followed by
- // length 5 (since not everything will have an associated name), followed by
- // length 1 (it's probably rare for a source substring to not have an
- // associated segment data).
- if (j === 4)
- line.push([segment[0], segment[1], segment[2], segment[3]]);
- else if (j === 5)
- line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);
- else if (j === 1)
- line.push([segment[0]]);
-}
-function encode$1(decoded) {
- var sourceFileIndex = 0; // second field
- var sourceCodeLine = 0; // third field
- var sourceCodeColumn = 0; // fourth field
- var nameIndex = 0; // fifth field
- var mappings = '';
- for (var i = 0; i < decoded.length; i++) {
- var line = decoded[i];
- if (i > 0)
- mappings += ';';
- if (line.length === 0)
- continue;
- var generatedCodeColumn = 0; // first field
- var lineMappings = [];
- for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {
- var segment = line_1[_i];
- var segmentMappings = encodeInteger$1(segment[0] - generatedCodeColumn);
- generatedCodeColumn = segment[0];
- if (segment.length > 1) {
- segmentMappings +=
- encodeInteger$1(segment[1] - sourceFileIndex) +
- encodeInteger$1(segment[2] - sourceCodeLine) +
- encodeInteger$1(segment[3] - sourceCodeColumn);
- sourceFileIndex = segment[1];
- sourceCodeLine = segment[2];
- sourceCodeColumn = segment[3];
- }
- if (segment.length === 5) {
- segmentMappings += encodeInteger$1(segment[4] - nameIndex);
- nameIndex = segment[4];
- }
- lineMappings.push(segmentMappings);
- }
- mappings += lineMappings.join(',');
- }
- return mappings;
-}
-function encodeInteger$1(num) {
- var result = '';
- num = num < 0 ? (-num << 1) | 1 : num << 1;
- do {
- var clamped = num & 31;
- num >>>= 5;
- if (num > 0) {
- clamped |= 32;
- }
- result += chars$2[clamped];
- } while (num > 0);
- return result;
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Creates a brand new (prototype-less) object with the enumerable-own
- * properties of `target`. Any enumerable-own properties from `source` which
- * are not present on `target` will be copied as well.
- */
-function defaults(target, source) {
- return Object.assign(Object.create(null), source, target);
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Decodes an input sourcemap into a `DecodedSourceMap` sourcemap object.
- *
- * Valid input maps include a `DecodedSourceMap`, a `RawSourceMap`, or JSON
- * representations of either type.
- */
-function decodeSourceMap(map) {
- if (typeof map === 'string') {
- map = JSON.parse(map);
- }
- let { mappings } = map;
- if (typeof mappings === 'string') {
- mappings = sortMappings(decode(mappings), true);
- }
- else {
- // Clone the Line so that we can sort it. We don't want to mutate an array
- // that we don't own directly.
- mappings = sortMappings(mappings, false);
- }
- return defaults({ mappings }, map);
-}
-function firstUnsortedSegmentLine(mappings) {
- for (let i = 0; i < mappings.length; i++) {
- const segments = mappings[i];
- for (let j = 1; j < segments.length; j++) {
- if (segments[j][0] < segments[j - 1][0]) {
- return i;
- }
- }
- }
- return mappings.length;
-}
-function sortMappings(mappings, owned) {
- const unosrtedIndex = firstUnsortedSegmentLine(mappings);
- if (unosrtedIndex === mappings.length)
- return mappings;
- if (!owned)
- mappings = mappings.slice();
- for (let i = unosrtedIndex; i < mappings.length; i++) {
- mappings[i] = sortSegments(mappings[i], owned);
- }
- return mappings;
-}
-function sortSegments(segments, owned) {
- if (!owned)
- segments = segments.slice();
- return segments.sort(segmentComparator);
-}
-function segmentComparator(a, b) {
- return a[0] - b[0];
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * A "leaf" node in the sourcemap tree, representing an original, unmodified
- * source file. Recursive segment tracing ends at the `OriginalSource`.
- */
-class OriginalSource {
- constructor(filename, content) {
- this.filename = filename;
- this.content = content;
- }
- /**
- * Tracing a `SourceMapSegment` ends when we get to an `OriginalSource`,
- * meaning this line/column location originated from this source file.
- */
- traceSegment(line, column, name) {
- return { column, line, name, source: this };
- }
-}
-
-/* istanbul ignore next */
-const Url$1 = (typeof URL !== 'undefined' ? URL : require('url').URL);
-// Matches "..", which must be preceeded by "/" or the start of the string, and
-// must be followed by a "/". We do not eat the following "/", so that the next
-// iteration can match on it.
-const parentRegex = /(^|\/)\.\.(?=\/|$)/g;
-function isAbsoluteUrl(url) {
- try {
- return !!new Url$1(url);
- }
- catch (e) {
- return false;
- }
-}
-/**
- * Creates a directory name that is guaranteed to not be in `str`.
- */
-function uniqInStr(str) {
- let uniq = String(Math.random()).slice(2);
- while (str.indexOf(uniq) > -1) {
- /* istanbul ignore next */
- uniq += uniq;
- }
- return uniq;
-}
-/**
- * Removes the filename from the path (everything trailing the last "/"). This
- * is only safe to call on a path, never call with an absolute or protocol
- * relative URL.
- */
-function stripPathFilename(path) {
- path = normalizePath$5(path);
- const index = path.lastIndexOf('/');
- return path.slice(0, index + 1);
-}
-/**
- * Normalizes a protocol-relative URL, but keeps it protocol relative by
- * stripping out the protocl before returning it.
- */
-function normalizeProtocolRelative(input, absoluteBase) {
- const { href, protocol } = new Url$1(input, absoluteBase);
- return href.slice(protocol.length);
-}
-/**
- * Normalizes a simple path (one that has no ".."s, or is absolute so ".."s can
- * be normalized absolutely).
- */
-function normalizeSimplePath(input) {
- const { href } = new Url$1(input, 'https://foo.com/');
- return href.slice('https://foo.com/'.length);
-}
-/**
- * Normalizes a path, ensuring that excess ".."s are preserved for relative
- * paths in the output.
- *
- * If the input is absolute, this will return an absolutey normalized path, but
- * it will not have a leading "/".
- *
- * If the input has a leading "..", the output will have a leading "..".
- *
- * If the input has a leading ".", the output will not have a leading "."
- * unless there are too many ".."s, in which case there will be a leading "..".
- */
-function normalizePath$5(input) {
- // If there are no ".."s, we can treat this as if it were an absolute path.
- // The return won't be an absolute path, so it's easy.
- if (!parentRegex.test(input))
- return normalizeSimplePath(input);
- // We already found one "..". Let's see how many there are.
- let total = 1;
- while (parentRegex.test(input))
- total++;
- // If there are ".."s, we need to prefix the the path with the same number of
- // unique directories. This is to ensure that we "remember" how many parent
- // directories we are accessing. Eg, "../../.." must keep 3, and "foo/../.."
- // must keep 1.
- const uniqDirectory = `z${uniqInStr(input)}/`;
- // uniqDirectory is just a "z", followed by numbers, followed by a "/". So
- // generating a runtime regex from it is safe. We'll use this search regex to
- // strip out our uniq directory names and insert any needed ".."s.
- const search = new RegExp(`^(?:${uniqDirectory})*`);
- // Now we can resolve the total path. If there are excess ".."s, they will
- // eliminate one or more of the unique directories we prefix with.
- const relative = normalizeSimplePath(uniqDirectory.repeat(total) + input);
- // We can now count the number of unique directories that were eliminated. If
- // there were 3, and 1 was eliminated, we know we only need to add 1 "..". If
- // 2 were eliminated, we need to insert 2 ".."s. If all 3 were eliminated,
- // then we need 3, etc. This replace is guranteed to match (it may match 0 or
- // more times), and we can count the total match to see how many were eliminated.
- return relative.replace(search, (all) => {
- const leftover = all.length / uniqDirectory.length;
- return '../'.repeat(total - leftover);
- });
-}
-/**
- * Attempts to resolve `input` URL relative to `base`.
- */
-function resolve$3(input, base) {
- if (!base)
- base = '';
- // Absolute URLs are very easy to resolve right.
- if (isAbsoluteUrl(input))
- return new Url$1(input).href;
- if (base) {
- // Absolute URLs are easy...
- if (isAbsoluteUrl(base))
- return new Url$1(input, base).href;
- // If base is protocol relative, we'll resolve with it but keep the result
- // protocol relative.
- if (base.startsWith('//'))
- return normalizeProtocolRelative(input, `https:${base}`);
- }
- // Normalize input, but keep it protocol relative. We know base doesn't supply
- // a protocol, because that would have been handled above.
- if (input.startsWith('//'))
- return normalizeProtocolRelative(input, 'https://foo.com/');
- // We now know that base (if there is one) and input are paths. We've handled
- // both absolute and protocol-relative variations above.
- // Absolute paths don't need any special handling, because they cannot have
- // extra "." or ".."s. That'll all be stripped away. Input takes priority here,
- // because if input is an absolute path, base path won't affect it in any way.
- if (input.startsWith('/'))
- return '/' + normalizeSimplePath(input);
- // Since input and base are paths, we need to join them to do any further
- // processing. Paths are joined at the directory level, so we need to remove
- // the base's filename before joining. We also know that input does not have a
- // leading slash, and that the stripped base will have a trailing slash if
- // there are any directories (or it'll be empty).
- const joined = stripPathFilename(base) + input;
- // If base is an absolute path, then input will be relative to it.
- if (base.startsWith('/'))
- return '/' + normalizeSimplePath(joined);
- // We now know both base (if there is one) and input are relative paths.
- const relative = normalizePath$5(joined);
- // If base started with a leading ".", or there is no base and input started
- // with a ".", then we need to ensure that the relative path starts with a
- // ".". We don't know if relative starts with a "..", though, so check before
- // prepending.
- if ((base || input).startsWith('.') && !relative.startsWith('.')) {
- return './' + relative;
- }
- return relative;
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-function resolve$1$1(input, base) {
- // The base is always treated as a directory, if it's not empty.
- // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327
- // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401
- if (base && !base.endsWith('/'))
- base += '/';
- return resolve$3(input, base);
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * A binary search implementation that returns the index if a match is found,
- * or the negated index of where the `needle` should be inserted.
- *
- * The `comparator` callback receives both the `item` under comparison and the
- * needle we are searching for. It must return `0` if the `item` is a match,
- * any negative number if `item` is too small (and we must search after it), or
- * any positive number if the `item` is too large (and we must search before
- * it).
- *
- * If no match is found, a negated index of where to insert the `needle` is
- * returned. This negated index is guaranteed to be less than 0. To insert an
- * item, negate it (again) and splice:
- *
- * ```js
- * const array = [1, 3];
- * const needle = 2;
- * const index = binarySearch(array, needle, (item, needle) => item - needle);
- *
- * assert.equal(index, -2);
- * assert.equal(~index, 1);
- * array.splice(~index, 0, needle);
- * assert.deepEqual(array, [1, 2, 3]);
- * ```
- */
-function binarySearch$2(haystack, needle, comparator, low, high) {
- low = Math.max(low, 0);
- while (low <= high) {
- const mid = low + ((high - low) >> 1);
- const cmp = comparator(haystack[mid], needle);
- if (cmp === 0) {
- return mid;
- }
- if (cmp < 0) {
- low = mid + 1;
- }
- else {
- high = mid - 1;
- }
- }
- return ~low;
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * FastStringArray acts like a `Set` (allowing only one occurrence of a string
- * `key`), but provides the index of the `key` in the backing array.
- *
- * This is designed to allow synchronizing a second array with the contents of
- * the backing array, like how `sourcesContent[i]` is the source content
- * associated with `source[i]`, and there are never duplicates.
- */
-class FastStringArray {
- constructor() {
- this.indexes = Object.create(null);
- this.array = [];
- }
- /**
- * Puts `key` into the backing array, if it is not already present. Returns
- * the index of the `key` in the backing array.
- */
- put(key) {
- const { array, indexes } = this;
- // The key may or may not be present. If it is present, it's a number.
- let index = indexes[key];
- // If it's not yet present, we need to insert it and track the index in the
- // indexes.
- if (index === undefined) {
- index = indexes[key] = array.length;
- array.push(key);
- }
- return index;
- }
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * SourceMapTree represents a single sourcemap, with the ability to trace
- * mappings into its child nodes (which may themselves be SourceMapTrees).
- */
-class SourceMapTree {
- constructor(map, sources) {
- this.map = map;
- this.sources = sources;
- this.lastLine = 0;
- this.lastColumn = 0;
- this.lastIndex = 0;
- }
- /**
- * traceMappings is only called on the root level SourceMapTree, and begins
- * the process of resolving each mapping in terms of the original source
- * files.
- */
- traceMappings() {
- const mappings = [];
- const names = new FastStringArray();
- const sources = new FastStringArray();
- const sourcesContent = [];
- const { mappings: rootMappings, names: rootNames } = this.map;
- for (let i = 0; i < rootMappings.length; i++) {
- const segments = rootMappings[i];
- const tracedSegments = [];
- let lastTraced = undefined;
- for (let j = 0; j < segments.length; j++) {
- const segment = segments[j];
- // 1-length segments only move the current generated column, there's no
- // source information to gather from it.
- if (segment.length === 1)
- continue;
- const source = this.sources[segment[1]];
- const traced = source.traceSegment(segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : '');
- if (!traced)
- continue;
- // So we traced a segment down into its original source file. Now push a
- // new segment pointing to this location.
- const { column, line, name } = traced;
- const { content, filename } = traced.source;
- // Store the source location, and ensure we keep sourcesContent up to
- // date with the sources array.
- const sourceIndex = sources.put(filename);
- sourcesContent[sourceIndex] = content;
- if (lastTraced &&
- lastTraced[1] === sourceIndex &&
- lastTraced[2] === line &&
- lastTraced[3] === column) {
- // This is a duplicate mapping pointing at the exact same starting point in the source file.
- // It doesn't provide any new information, and only bloats the sourcemap.
- continue;
- }
- // This looks like unnecessary duplication, but it noticeably increases
- // performance. If we were to push the nameIndex onto length-4 array, v8
- // would internally allocate 22 slots! That's 68 wasted bytes! Array
- // literals have the same capacity as their length, saving memory.
- if (name) {
- lastTraced = [segment[0], sourceIndex, line, column, names.put(name)];
- }
- else {
- lastTraced = [segment[0], sourceIndex, line, column];
- }
- tracedSegments.push(lastTraced);
- }
- mappings.push(tracedSegments);
- }
- // TODO: Make all sources relative to the sourceRoot.
- return defaults({
- mappings,
- names: names.array,
- sources: sources.array,
- sourcesContent,
- }, this.map);
- }
- /**
- * traceSegment is only called on children SourceMapTrees. It recurses down
- * into its own child SourceMapTrees, until we find the original source map.
- */
- traceSegment(line, column, name) {
- const { mappings, names } = this.map;
- // It's common for parent sourcemaps to have pointers to lines that have no
- // mapping (like a "//# sourceMappingURL=") at the end of the child file.
- if (line >= mappings.length)
- return null;
- const segments = mappings[line];
- if (segments.length === 0)
- return null;
- let low = 0;
- let high = segments.length - 1;
- if (line === this.lastLine) {
- if (column >= this.lastColumn) {
- low = this.lastIndex;
- }
- else {
- high = this.lastIndex;
- }
- }
- let index = binarySearch$2(segments, column, segmentComparator$1, low, high);
- this.lastLine = line;
- this.lastColumn = column;
- if (index === -1) {
- this.lastIndex = index;
- return null; // we come before any mapped segment
- }
- // If we can't find a segment that lines up to this column, we use the
- // segment before.
- if (index < 0) {
- index = ~index - 1;
- }
- this.lastIndex = index;
- const segment = segments[index];
- // 1-length segments only move the current generated column, there's no
- // source information to gather from it.
- if (segment.length === 1)
- return null;
- const source = this.sources[segment[1]];
- // So now we can recurse down, until we hit the original source file.
- return source.traceSegment(segment[2], segment[3],
- // A child map's recorded name for this segment takes precedence over the
- // parent's mapped name. Imagine a mangler changing the name over, etc.
- segment.length === 5 ? names[segment[4]] : name);
- }
-}
-function segmentComparator$1(segment, column) {
- return segment[0] - column;
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Removes the filename from a path.
- */
-function stripFilename(path) {
- if (!path)
- return '';
- const index = path.lastIndexOf('/');
- return path.slice(0, index + 1);
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-function asArray(value) {
- if (Array.isArray(value))
- return value;
- return [value];
-}
-/**
- * Recursively builds a tree structure out of sourcemap files, with each node
- * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of
- * `OriginalSource`s and `SourceMapTree`s.
- *
- * Every sourcemap is composed of a collection of source files and mappings
- * into locations of those source files. When we generate a `SourceMapTree` for
- * the sourcemap, we attempt to load each source file's own sourcemap. If it
- * does not have an associated sourcemap, it is considered an original,
- * unmodified source file.
- */
-function buildSourceMapTree(input, loader, relativeRoot) {
- const maps = asArray(input).map(decodeSourceMap);
- const map = maps.pop();
- for (let i = 0; i < maps.length; i++) {
- if (maps[i].sources.length !== 1) {
- throw new Error(`Transformation map ${i} must have exactly one source file.\n` +
- 'Did you specify these with the most recent transformation maps first?');
- }
- }
- const { sourceRoot, sources, sourcesContent } = map;
- const children = sources.map((sourceFile, i) => {
- // Each source file is loaded relative to the sourcemap's own sourceRoot,
- // which is itself relative to the sourcemap's parent.
- const uri = resolve$1$1(sourceFile || '', resolve$1$1(sourceRoot || '', stripFilename(relativeRoot)));
- // Use the provided loader callback to retrieve the file's sourcemap.
- // TODO: We should eventually support async loading of sourcemap files.
- const sourceMap = loader(uri);
- // If there is no sourcemap, then it is an unmodified source file.
- if (!sourceMap) {
- // The source file's actual contents must be included in the sourcemap
- // (done when generating the sourcemap) for it to be included as a
- // sourceContent in the output sourcemap.
- const sourceContent = sourcesContent ? sourcesContent[i] : null;
- return new OriginalSource(uri, sourceContent);
- }
- // Else, it's a real sourcemap, and we need to recurse into it to load its
- // source files.
- return buildSourceMapTree(decodeSourceMap(sourceMap), loader, uri);
- });
- let tree = new SourceMapTree(map, children);
- for (let i = maps.length - 1; i >= 0; i--) {
- tree = new SourceMapTree(maps[i], [tree]);
- }
- return tree;
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * A SourceMap v3 compatible sourcemap, which only includes fields that were
- * provided to it.
- */
-class SourceMap$1 {
- constructor(map, options) {
- this.version = 3; // SourceMap spec says this should be first.
- if ('file' in map)
- this.file = map.file;
- this.mappings = options.decodedMappings ? map.mappings : encode$1(map.mappings);
- this.names = map.names;
- // TODO: We first need to make all source URIs relative to the sourceRoot
- // before we can support a sourceRoot.
- // if ('sourceRoot' in map) this.sourceRoot = map.sourceRoot;
- this.sources = map.sources;
- if (!options.excludeContent && 'sourcesContent' in map) {
- this.sourcesContent = map.sourcesContent;
- }
- }
- toString() {
- return JSON.stringify(this);
- }
-}
-
-/**
- * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Traces through all the mappings in the root sourcemap, through the sources
- * (and their sourcemaps), all the way back to the original source location.
- *
- * `loader` will be called every time we encounter a source file. If it returns
- * a sourcemap, we will recurse into that sourcemap to continue the trace. If
- * it returns a falsey value, that source file is treated as an original,
- * unmodified source file.
- *
- * Pass `excludeContent` to exclude any self-containing source file content
- * from the output sourcemap.
- *
- * Pass `decodedMappings` to receive a SourceMap with decoded (instead of
- * VLQ encoded) mappings.
- */
-function remapping(input, loader, options) {
- const opts = typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };
- const graph = buildSourceMapTree(input, loader);
- return new SourceMap$1(graph.traceMappings(), opts);
-}
-
-function slash$3(p) {
- return p.replace(/\\/g, '/');
-}
-// Strip valid id prefix. This is prepended to resolved Ids that are
-// not valid browser import specifiers by the importAnalysis plugin.
-function unwrapId$1(id) {
- return id.startsWith(VALID_ID_PREFIX) ? id.slice(VALID_ID_PREFIX.length) : id;
-}
-const flattenId = (id) => id.replace(/(\s*>\s*)/g, '__').replace(/[\/\.]/g, '_');
-const normalizeId$1 = (id) => id.replace(/(\s*>\s*)/g, ' > ');
-function isBuiltin(id) {
- return builtinModules_1.includes(id);
-}
-const bareImportRE = /^[\w@](?!.*:\/\/)/;
-const deepImportRE = /^([^@][^/]*)\/|^(@[^/]+\/[^/]+)\//;
-let isRunningWithYarnPnp;
-try {
- isRunningWithYarnPnp = Boolean(require('pnpapi'));
-}
-catch { }
-const ssrExtensions = ['.js', '.cjs', '.json', '.node'];
-function resolveFrom$3(id, basedir, preserveSymlinks = false, ssr = false) {
- return resolve__default.sync(id, {
- basedir,
- extensions: ssr ? ssrExtensions : DEFAULT_EXTENSIONS,
- // necessary to work with pnpm
- preserveSymlinks: preserveSymlinks || isRunningWithYarnPnp || false
- });
-}
-/**
- * like `resolveFrom` but supports resolving `>` path in `id`,
- * for example: `foo > bar > baz`
- */
-function nestedResolveFrom(id, basedir, preserveSymlinks = false) {
- const pkgs = id.split('>').map((pkg) => pkg.trim());
- try {
- for (const pkg of pkgs) {
- basedir = resolveFrom$3(pkg, basedir, preserveSymlinks);
- }
- }
- catch { }
- return basedir;
-}
-// set in bin/vite.js
-const filter$1 = process.env.VITE_DEBUG_FILTER;
-const DEBUG$1 = process.env.DEBUG;
-function createDebugger(namespace, options = {}) {
- const log = debug$f(namespace);
- const { onlyWhenFocused } = options;
- const focus = typeof onlyWhenFocused === 'string' ? onlyWhenFocused : namespace;
- return (msg, ...args) => {
- if (filter$1 && !msg.includes(filter$1)) {
- return;
- }
- if (onlyWhenFocused && !(DEBUG$1 === null || DEBUG$1 === void 0 ? void 0 : DEBUG$1.includes(focus))) {
- return;
- }
- log(msg, ...args);
- };
-}
-const isWindows$4 = require$$0__default$1.platform() === 'win32';
-const VOLUME_RE = /^[A-Z]:/i;
-function normalizePath$4(id) {
- return path__default.posix.normalize(isWindows$4 ? slash$3(id) : id);
-}
-function fsPathFromId(id) {
- const fsPath = normalizePath$4(id.slice(FS_PREFIX.length));
- return fsPath.startsWith('/') || fsPath.match(VOLUME_RE)
- ? fsPath
- : `/${fsPath}`;
-}
-function ensureVolumeInPath(file) {
- return isWindows$4 ? path__default.resolve(file) : file;
-}
-const queryRE = /\?.*$/s;
-const hashRE = /#.*$/s;
-const cleanUrl = (url) => url.replace(hashRE, '').replace(queryRE, '');
-const externalRE = /^(https?:)?\/\//;
-const isExternalUrl = (url) => externalRE.test(url);
-const dataUrlRE = /^\s*data:/i;
-const isDataUrl = (url) => dataUrlRE.test(url);
-const knownJsSrcRE = /\.((j|t)sx?|mjs|vue|marko|svelte|astro)($|\?)/;
-const isJSRequest = (url) => {
- url = cleanUrl(url);
- if (knownJsSrcRE.test(url)) {
- return true;
- }
- if (!path__default.extname(url) && !url.endsWith('/')) {
- return true;
- }
- return false;
-};
-const importQueryRE = /(\?|&)import=?(?:&|$)/;
-const internalPrefixes = [
- FS_PREFIX,
- VALID_ID_PREFIX,
- CLIENT_PUBLIC_PATH,
- ENV_PUBLIC_PATH
-];
-const InternalPrefixRE = new RegExp(`^(?:${internalPrefixes.join('|')})`);
-const trailingSeparatorRE = /[\?&]$/;
-const isImportRequest = (url) => importQueryRE.test(url);
-const isInternalRequest = (url) => InternalPrefixRE.test(url);
-function removeImportQuery(url) {
- return url.replace(importQueryRE, '$1').replace(trailingSeparatorRE, '');
-}
-function injectQuery(url, queryToInject) {
- // encode percents for consistent behavior with pathToFileURL
- // see #2614 for details
- let resolvedUrl = new require$$0$8.URL(url.replace(/%/g, '%25'), 'relative:///');
- if (resolvedUrl.protocol !== 'relative:') {
- resolvedUrl = require$$0$8.pathToFileURL(url);
- }
- let { protocol, pathname, search, hash } = resolvedUrl;
- if (protocol === 'file:') {
- pathname = pathname.slice(1);
- }
- pathname = decodeURIComponent(pathname);
- return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ''}${hash || ''}`;
-}
-const timestampRE = /\bt=\d{13}&?\b/;
-function removeTimestampQuery(url) {
- return url.replace(timestampRE, '').replace(trailingSeparatorRE, '');
-}
-async function asyncReplace(input, re, replacer) {
- let match;
- let remaining = input;
- let rewritten = '';
- while ((match = re.exec(remaining))) {
- rewritten += remaining.slice(0, match.index);
- rewritten += await replacer(match);
- remaining = remaining.slice(match.index + match[0].length);
- }
- rewritten += remaining;
- return rewritten;
-}
-function timeFrom(start, subtract = 0) {
- const time = perf_hooks.performance.now() - start - subtract;
- const timeString = (time.toFixed(2) + `ms`).padEnd(5, ' ');
- if (time < 10) {
- return source.green(timeString);
- }
- else if (time < 50) {
- return source.yellow(timeString);
- }
- else {
- return source.red(timeString);
- }
-}
-/**
- * pretty url for logging.
- */
-function prettifyUrl(url, root) {
- url = removeTimestampQuery(url);
- const isAbsoluteFile = url.startsWith(root);
- if (isAbsoluteFile || url.startsWith(FS_PREFIX)) {
- let file = path__default.relative(root, isAbsoluteFile ? url : fsPathFromId(url));
- const seg = file.split('/');
- const npmIndex = seg.indexOf(`node_modules`);
- const isSourceMap = file.endsWith('.map');
- if (npmIndex > 0) {
- file = seg[npmIndex + 1];
- if (file.startsWith('@')) {
- file = `${file}/${seg[npmIndex + 2]}`;
- }
- file = `npm: ${source.dim(file)}${isSourceMap ? ` (source map)` : ``}`;
- }
- return source.dim(file);
- }
- else {
- return source.dim(url);
- }
-}
-function isObject$3(value) {
- return Object.prototype.toString.call(value) === '[object Object]';
-}
-function isDefined(value) {
- return value != null;
-}
-function lookupFile(dir, formats, pathOnly = false) {
- for (const format of formats) {
- const fullPath = path__default.join(dir, format);
- if (fs__default.existsSync(fullPath) && fs__default.statSync(fullPath).isFile()) {
- return pathOnly ? fullPath : fs__default.readFileSync(fullPath, 'utf-8');
- }
- }
- const parentDir = path__default.dirname(dir);
- if (parentDir !== dir) {
- return lookupFile(parentDir, formats, pathOnly);
- }
-}
-const splitRE = /\r?\n/;
-const range$1 = 2;
-function pad$1(source, n = 2) {
- const lines = source.split(splitRE);
- return lines.map((l) => ` `.repeat(n) + l).join(`\n`);
-}
-function posToNumber(source, pos) {
- if (typeof pos === 'number')
- return pos;
- const lines = source.split(splitRE);
- const { line, column } = pos;
- let start = 0;
- for (let i = 0; i < line - 1; i++) {
- start += lines[i].length + 1;
- }
- return start + column;
-}
-function numberToPos(source, offset) {
- if (typeof offset !== 'number')
- return offset;
- if (offset > source.length) {
- throw new Error(`offset is longer than source length! offset ${offset} > length ${source.length}`);
- }
- const lines = source.split(splitRE);
- let counted = 0;
- let line = 0;
- let column = 0;
- for (; line < lines.length; line++) {
- const lineLength = lines[line].length + 1;
- if (counted + lineLength >= offset) {
- column = offset - counted + 1;
- break;
- }
- counted += lineLength;
- }
- return { line: line + 1, column };
-}
-function generateCodeFrame(source, start = 0, end) {
- start = posToNumber(source, start);
- end = end || start;
- const lines = source.split(splitRE);
- let count = 0;
- const res = [];
- for (let i = 0; i < lines.length; i++) {
- count += lines[i].length + 1;
- if (count >= start) {
- for (let j = i - range$1; j <= i + range$1 || end > count; j++) {
- if (j < 0 || j >= lines.length)
- continue;
- const line = j + 1;
- res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`);
- const lineLength = lines[j].length;
- if (j === i) {
- // push underline
- const pad = start - (count - lineLength) + 1;
- const length = Math.max(1, end > count ? lineLength - pad : end - start);
- res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length));
- }
- else if (j > i) {
- if (end > count) {
- const length = Math.max(Math.min(end - count, lineLength), 1);
- res.push(` | ` + '^'.repeat(length));
- }
- count += lineLength + 1;
- }
- }
- break;
- }
- }
- return res.join('\n');
-}
-function writeFile(filename, content) {
- const dir = path__default.dirname(filename);
- if (!fs__default.existsSync(dir)) {
- fs__default.mkdirSync(dir, { recursive: true });
- }
- fs__default.writeFileSync(filename, content);
-}
-/**
- * Delete every file and subdirectory. **The given directory must exist.**
- * Pass an optional `skip` array to preserve files in the root directory.
- */
-function emptyDir(dir, skip) {
- for (const file of fs__default.readdirSync(dir)) {
- if (skip === null || skip === void 0 ? void 0 : skip.includes(file)) {
- continue;
- }
- const abs = path__default.resolve(dir, file);
- // baseline is Node 12 so can't use rmSync :(
- if (fs__default.lstatSync(abs).isDirectory()) {
- emptyDir(abs);
- fs__default.rmdirSync(abs);
- }
- else {
- fs__default.unlinkSync(abs);
- }
- }
-}
-function copyDir(srcDir, destDir) {
- fs__default.mkdirSync(destDir, { recursive: true });
- for (const file of fs__default.readdirSync(srcDir)) {
- const srcFile = path__default.resolve(srcDir, file);
- if (srcFile === destDir) {
- continue;
- }
- const destFile = path__default.resolve(destDir, file);
- const stat = fs__default.statSync(srcFile);
- if (stat.isDirectory()) {
- copyDir(srcFile, destFile);
- }
- else {
- fs__default.copyFileSync(srcFile, destFile);
- }
- }
-}
-function ensureLeadingSlash(path) {
- return !path.startsWith('/') ? '/' + path : path;
-}
-function ensureWatchedFile(watcher, file, root) {
- if (file &&
- // only need to watch if out of root
- !file.startsWith(root + '/') &&
- // some rollup plugins use null bytes for private resolved Ids
- !file.includes('\0') &&
- fs__default.existsSync(file)) {
- // resolve file to normalized system path
- watcher.add(path__default.resolve(file));
- }
-}
-const escapedSpaceCharacters = /( |\\t|\\n|\\f|\\r)+/g;
-async function processSrcSet(srcs, replacer) {
- const imageCandidates = srcs
- .split(',')
- .map((s) => {
- const [url, descriptor] = s
- .replace(escapedSpaceCharacters, ' ')
- .trim()
- .split(' ', 2);
- return { url, descriptor };
- })
- .filter(({ url }) => !!url);
- const ret = await Promise.all(imageCandidates.map(async ({ url, descriptor }) => {
- return {
- url: await replacer({ url, descriptor }),
- descriptor
- };
- }));
- const url = ret.reduce((prev, { url, descriptor }, index) => {
- descriptor = descriptor || '';
- return (prev +=
- url + ` ${descriptor}${index === ret.length - 1 ? '' : ', '}`);
- }, '');
- return url;
-}
-// based on https://github.com/sveltejs/svelte/blob/abf11bb02b2afbd3e4cac509a0f70e318c306364/src/compiler/utils/mapped_code.ts#L221
-const nullSourceMap = {
- names: [],
- sources: [],
- mappings: '',
- version: 3
-};
-function combineSourcemaps(filename, sourcemapList) {
- if (sourcemapList.length === 0 ||
- sourcemapList.every((m) => m.sources.length === 0)) {
- return { ...nullSourceMap };
- }
- // We don't declare type here so we can convert/fake/map as RawSourceMap
- let map; //: SourceMap
- let mapIndex = 1;
- const useArrayInterface = sourcemapList.slice(0, -1).find((m) => m.sources.length !== 1) === undefined;
- if (useArrayInterface) {
- map = remapping(sourcemapList, () => null, true);
- }
- else {
- map = remapping(sourcemapList[0], function loader(sourcefile) {
- if (sourcefile === filename && sourcemapList[mapIndex]) {
- return sourcemapList[mapIndex++];
- }
- else {
- return { ...nullSourceMap };
- }
- }, true);
- }
- if (!map.file) {
- delete map.file;
- }
- return map;
-}
-function unique(arr) {
- return Array.from(new Set(arr));
-}
-function resolveHostname(optionsHost) {
- let host;
- if (optionsHost === undefined ||
- optionsHost === false ||
- optionsHost === 'localhost') {
- // Use a secure default
- host = '127.0.0.1';
- }
- else if (optionsHost === true) {
- // If passed --host in the CLI without arguments
- host = undefined; // undefined typically means 0.0.0.0 or :: (listen on all IPs)
- }
- else {
- host = optionsHost;
- }
- // Set host name to localhost when possible, unless the user explicitly asked for '127.0.0.1'
- const name = (optionsHost !== '127.0.0.1' && host === '127.0.0.1') ||
- host === '0.0.0.0' ||
- host === '::' ||
- host === undefined
- ? 'localhost'
- : host;
- return { host, name };
-}
-function arraify(target) {
- return Array.isArray(target) ? target : [target];
-}
-function toUpperCaseDriveLetter(pathName) {
- return pathName.replace(/^\w:/, (letter) => letter.toUpperCase());
-}
-const multilineCommentsRE = /\/\*(.|[\r\n])*?\*\//gm;
-const singlelineCommentsRE = /\/\/.*/g;
-const usingDynamicImport = typeof jest === 'undefined';
-/**
- * Dynamically import files. It will make sure it's not being compiled away by TS/Rollup.
- *
- * As a temporary workaround for Jest's lack of stable ESM support, we fallback to require
- * if we're in a Jest environment.
- * See https://github.com/vitejs/vite/pull/5197#issuecomment-938054077
- *
- * @param file File path to import.
- */
-const dynamicImport = usingDynamicImport ? new Function('file', 'return import(file)') : require;
-
-/* eslint no-console: 0 */
-const LogLevels = {
- silent: 0,
- error: 1,
- warn: 2,
- info: 3
-};
-let lastType;
-let lastMsg;
-let sameCount = 0;
-function clearScreen() {
- const repeatCount = process.stdout.rows - 2;
- const blank = repeatCount > 0 ? '\n'.repeat(repeatCount) : '';
- console.log(blank);
- readline__default.cursorTo(process.stdout, 0, 0);
- readline__default.clearScreenDown(process.stdout);
-}
-function createLogger(level = 'info', options = {}) {
- if (options.customLogger) {
- return options.customLogger;
- }
- const loggedErrors = new WeakSet();
- const { prefix = '[vite]', allowClearScreen = true } = options;
- const thresh = LogLevels[level];
- const clear = allowClearScreen && process.stdout.isTTY && !process.env.CI
- ? clearScreen
- : () => { };
- function output(type, msg, options = {}) {
- if (thresh >= LogLevels[type]) {
- const method = type === 'info' ? 'log' : type;
- const format = () => {
- if (options.timestamp) {
- const tag = type === 'info'
- ? source.cyan.bold(prefix)
- : type === 'warn'
- ? source.yellow.bold(prefix)
- : source.red.bold(prefix);
- return `${source.dim(new Date().toLocaleTimeString())} ${tag} ${msg}`;
- }
- else {
- return msg;
- }
- };
- if (options.error) {
- loggedErrors.add(options.error);
- }
- if (type === lastType && msg === lastMsg) {
- sameCount++;
- clear();
- console[method](format(), source.yellow(`(x${sameCount + 1})`));
- }
- else {
- sameCount = 0;
- lastMsg = msg;
- lastType = type;
- if (options.clear) {
- clear();
- }
- console[method](format());
- }
- }
- }
- const warnedMessages = new Set();
- const logger = {
- hasWarned: false,
- info(msg, opts) {
- output('info', msg, opts);
- },
- warn(msg, opts) {
- logger.hasWarned = true;
- output('warn', msg, opts);
- },
- warnOnce(msg, opts) {
- if (warnedMessages.has(msg))
- return;
- logger.hasWarned = true;
- output('warn', msg, opts);
- warnedMessages.add(msg);
- },
- error(msg, opts) {
- logger.hasWarned = true;
- output('error', msg, opts);
- },
- clearScreen(type) {
- if (thresh >= LogLevels[type]) {
- clear();
- }
- },
- hasErrorLogged(error) {
- return loggedErrors.has(error);
- }
- };
- return logger;
-}
-function printHttpServerUrls(server, config) {
- const address = server.address();
- const isAddressInfo = (x) => x === null || x === void 0 ? void 0 : x.address;
- if (isAddressInfo(address)) {
- const hostname = resolveHostname(config.server.host);
- const protocol = config.server.https ? 'https' : 'http';
- printServerUrls(hostname, protocol, address.port, config.base, config.logger.info);
- }
-}
-function printServerUrls(hostname, protocol, port, base, info) {
- if (hostname.host === '127.0.0.1') {
- const url = `${protocol}://${hostname.name}:${source.bold(port)}${base}`;
- info(` > Local: ${source.cyan(url)}`);
- if (hostname.name !== '127.0.0.1') {
- info(` > Network: ${source.dim('use `--host` to expose')}`);
- }
- }
- else {
- Object.values(require$$0__default$1.networkInterfaces())
- .flatMap((nInterface) => nInterface !== null && nInterface !== void 0 ? nInterface : [])
- .filter((detail) => detail && detail.address && detail.family === 'IPv4')
- .map((detail) => {
- const type = detail.address.includes('127.0.0.1')
- ? 'Local: '
- : 'Network: ';
- const host = detail.address.replace('127.0.0.1', hostname.name);
- const url = `${protocol}://${host}:${source.bold(port)}${base}`;
- return ` > ${type} ${source.cyan(url)}`;
- })
- .forEach((msg) => info(msg));
- }
-}
-
-const writeColors = {
- [0 /* JS */]: source.cyan,
- [1 /* CSS */]: source.magenta,
- [2 /* ASSET */]: source.green,
- [3 /* HTML */]: source.blue,
- [4 /* SOURCE_MAP */]: source.gray
-};
-function buildReporterPlugin(config) {
- const compress = require$$0$6.promisify(require$$0$9.gzip);
- const chunkLimit = config.build.chunkSizeWarningLimit;
- function isLarge(code) {
- // bail out on particularly large chunks
- return code.length / 1024 > chunkLimit;
- }
- async function getCompressedSize(code) {
- if (config.build.ssr ||
- !config.build.reportCompressedSize ||
- config.build.brotliSize === false) {
- return '';
- }
- return ` / gzip: ${((await compress(typeof code === 'string' ? code : Buffer.from(code)))
- .length / 1024).toFixed(2)} KiB`;
- }
- function printFileInfo(filePath, content, type, maxLength, compressedSize = '') {
- const outDir = normalizePath$4(path__default.relative(config.root, path__default.resolve(config.root, config.build.outDir))) + '/';
- const kibs = content.length / 1024;
- const sizeColor = kibs > chunkLimit ? source.yellow : source.dim;
- config.logger.info(`${source.gray(source.white.dim(outDir))}${writeColors[type](filePath.padEnd(maxLength + 2))} ${sizeColor(`${kibs.toFixed(2)} KiB${compressedSize}`)}`);
- }
- const tty = process.stdout.isTTY && !process.env.CI;
- const shouldLogInfo = LogLevels[config.logLevel || 'info'] >= LogLevels.info;
- let hasTransformed = false;
- let hasRenderedChunk = false;
- let transformedCount = 0;
- let chunkCount = 0;
- const logTransform = throttle((id) => {
- writeLine(`transforming (${transformedCount}) ${source.dim(path__default.relative(config.root, id))}`);
- });
- return {
- name: 'vite:reporter',
- transform(_, id) {
- transformedCount++;
- if (shouldLogInfo) {
- if (!tty) {
- if (!hasTransformed) {
- config.logger.info(`transforming...`);
- }
- }
- else {
- if (id.includes(`?`))
- return;
- logTransform(id);
- }
- hasTransformed = true;
- }
- return null;
- },
- buildEnd() {
- if (shouldLogInfo) {
- if (tty) {
- process.stdout.clearLine(0);
- process.stdout.cursorTo(0);
- }
- config.logger.info(`${source.green(`✓`)} ${transformedCount} modules transformed.`);
- }
- },
- renderStart() {
- chunkCount = 0;
- },
- renderChunk() {
- chunkCount++;
- if (shouldLogInfo) {
- if (!tty) {
- if (!hasRenderedChunk) {
- config.logger.info('rendering chunks...');
- }
- }
- else {
- writeLine(`rendering chunks (${chunkCount})...`);
- }
- hasRenderedChunk = true;
- }
- return null;
- },
- generateBundle() {
- if (shouldLogInfo && tty) {
- process.stdout.clearLine(0);
- process.stdout.cursorTo(0);
- }
- },
- async writeBundle(_, output) {
- let hasLargeChunks = false;
- if (shouldLogInfo) {
- let longest = 0;
- for (const file in output) {
- const l = output[file].fileName.length;
- if (l > longest)
- longest = l;
- }
- // large chunks are deferred to be logged at the end so they are more
- // visible.
- const deferredLogs = [];
- await Promise.all(Object.keys(output).map(async (file) => {
- const chunk = output[file];
- if (chunk.type === 'chunk') {
- const log = async () => {
- printFileInfo(chunk.fileName, chunk.code, 0 /* JS */, longest, await getCompressedSize(chunk.code));
- if (chunk.map) {
- printFileInfo(chunk.fileName + '.map', chunk.map.toString(), 4 /* SOURCE_MAP */, longest);
- }
- };
- if (isLarge(chunk.code)) {
- hasLargeChunks = true;
- deferredLogs.push(log);
- }
- else {
- await log();
- }
- }
- else if (chunk.source) {
- const isCSS = chunk.fileName.endsWith('.css');
- printFileInfo(chunk.fileName, chunk.source, isCSS ? 1 /* CSS */ : 2 /* ASSET */, longest, isCSS ? await getCompressedSize(chunk.source) : undefined);
- }
- }));
- await Promise.all(deferredLogs.map((l) => l()));
- }
- else {
- hasLargeChunks = Object.keys(output).some((file) => {
- const chunk = output[file];
- return chunk.type === 'chunk' && chunk.code.length / 1024 > chunkLimit;
- });
- }
- if (hasLargeChunks &&
- config.build.minify &&
- !config.build.lib &&
- !config.build.ssr) {
- config.logger.warn(source.yellow(`\n(!) Some chunks are larger than ${chunkLimit} KiB after minification. Consider:\n` +
- `- Using dynamic import() to code-split the application\n` +
- `- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/guide/en/#outputmanualchunks\n` +
- `- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.`));
- }
- }
- };
-}
-function writeLine(output) {
- process.stdout.clearLine(0);
- process.stdout.cursorTo(0);
- if (output.length < process.stdout.columns) {
- process.stdout.write(output);
- }
- else {
- process.stdout.write(output.substring(0, process.stdout.columns - 1));
- }
-}
-function throttle(fn) {
- let timerHandle = null;
- return (...args) => {
- if (timerHandle)
- return;
- fn(...args);
- timerHandle = setTimeout(() => {
- timerHandle = null;
- }, 100);
- };
-}
-
-var charToInteger = {};
-var chars$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
-for (var i$1 = 0; i$1 < chars$1.length; i$1++) {
- charToInteger[chars$1.charCodeAt(i$1)] = i$1;
-}
-function encode(decoded) {
- var sourceFileIndex = 0; // second field
- var sourceCodeLine = 0; // third field
- var sourceCodeColumn = 0; // fourth field
- var nameIndex = 0; // fifth field
- var mappings = '';
- for (var i = 0; i < decoded.length; i++) {
- var line = decoded[i];
- if (i > 0)
- mappings += ';';
- if (line.length === 0)
- continue;
- var generatedCodeColumn = 0; // first field
- var lineMappings = [];
- for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {
- var segment = line_1[_i];
- var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);
- generatedCodeColumn = segment[0];
- if (segment.length > 1) {
- segmentMappings +=
- encodeInteger(segment[1] - sourceFileIndex) +
- encodeInteger(segment[2] - sourceCodeLine) +
- encodeInteger(segment[3] - sourceCodeColumn);
- sourceFileIndex = segment[1];
- sourceCodeLine = segment[2];
- sourceCodeColumn = segment[3];
- }
- if (segment.length === 5) {
- segmentMappings += encodeInteger(segment[4] - nameIndex);
- nameIndex = segment[4];
- }
- lineMappings.push(segmentMappings);
- }
- mappings += lineMappings.join(',');
- }
- return mappings;
-}
-function encodeInteger(num) {
- var result = '';
- num = num < 0 ? (-num << 1) | 1 : num << 1;
- do {
- var clamped = num & 31;
- num >>>= 5;
- if (num > 0) {
- clamped |= 32;
- }
- result += chars$1[clamped];
- } while (num > 0);
- return result;
-}
-
-var BitSet = function BitSet(arg) {
- this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
-};
-
-BitSet.prototype.add = function add (n) {
- this.bits[n >> 5] |= 1 << (n & 31);
-};
-
-BitSet.prototype.has = function has (n) {
- return !!(this.bits[n >> 5] & (1 << (n & 31)));
-};
-
-var Chunk = function Chunk(start, end, content) {
- this.start = start;
- this.end = end;
- this.original = content;
-
- this.intro = '';
- this.outro = '';
-
- this.content = content;
- this.storeName = false;
- this.edited = false;
-
- // we make these non-enumerable, for sanity while debugging
- Object.defineProperties(this, {
- previous: { writable: true, value: null },
- next: { writable: true, value: null }
- });
-};
-
-Chunk.prototype.appendLeft = function appendLeft (content) {
- this.outro += content;
-};
-
-Chunk.prototype.appendRight = function appendRight (content) {
- this.intro = this.intro + content;
-};
-
-Chunk.prototype.clone = function clone () {
- var chunk = new Chunk(this.start, this.end, this.original);
-
- chunk.intro = this.intro;
- chunk.outro = this.outro;
- chunk.content = this.content;
- chunk.storeName = this.storeName;
- chunk.edited = this.edited;
-
- return chunk;
-};
-
-Chunk.prototype.contains = function contains (index) {
- return this.start < index && index < this.end;
-};
-
-Chunk.prototype.eachNext = function eachNext (fn) {
- var chunk = this;
- while (chunk) {
- fn(chunk);
- chunk = chunk.next;
- }
-};
-
-Chunk.prototype.eachPrevious = function eachPrevious (fn) {
- var chunk = this;
- while (chunk) {
- fn(chunk);
- chunk = chunk.previous;
- }
-};
-
-Chunk.prototype.edit = function edit (content, storeName, contentOnly) {
- this.content = content;
- if (!contentOnly) {
- this.intro = '';
- this.outro = '';
- }
- this.storeName = storeName;
-
- this.edited = true;
-
- return this;
-};
-
-Chunk.prototype.prependLeft = function prependLeft (content) {
- this.outro = content + this.outro;
-};
-
-Chunk.prototype.prependRight = function prependRight (content) {
- this.intro = content + this.intro;
-};
-
-Chunk.prototype.split = function split (index) {
- var sliceIndex = index - this.start;
-
- var originalBefore = this.original.slice(0, sliceIndex);
- var originalAfter = this.original.slice(sliceIndex);
-
- this.original = originalBefore;
-
- var newChunk = new Chunk(index, this.end, originalAfter);
- newChunk.outro = this.outro;
- this.outro = '';
-
- this.end = index;
-
- if (this.edited) {
- // TODO is this block necessary?...
- newChunk.edit('', false);
- this.content = '';
- } else {
- this.content = originalBefore;
- }
-
- newChunk.next = this.next;
- if (newChunk.next) { newChunk.next.previous = newChunk; }
- newChunk.previous = this;
- this.next = newChunk;
-
- return newChunk;
-};
-
-Chunk.prototype.toString = function toString () {
- return this.intro + this.content + this.outro;
-};
-
-Chunk.prototype.trimEnd = function trimEnd (rx) {
- this.outro = this.outro.replace(rx, '');
- if (this.outro.length) { return true; }
-
- var trimmed = this.content.replace(rx, '');
-
- if (trimmed.length) {
- if (trimmed !== this.content) {
- this.split(this.start + trimmed.length).edit('', undefined, true);
- }
- return true;
-
- } else {
- this.edit('', undefined, true);
-
- this.intro = this.intro.replace(rx, '');
- if (this.intro.length) { return true; }
- }
-};
-
-Chunk.prototype.trimStart = function trimStart (rx) {
- this.intro = this.intro.replace(rx, '');
- if (this.intro.length) { return true; }
-
- var trimmed = this.content.replace(rx, '');
-
- if (trimmed.length) {
- if (trimmed !== this.content) {
- this.split(this.end - trimmed.length);
- this.edit('', undefined, true);
- }
- return true;
-
- } else {
- this.edit('', undefined, true);
-
- this.outro = this.outro.replace(rx, '');
- if (this.outro.length) { return true; }
- }
-};
-
-var btoa$1 = function () {
- throw new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');
-};
-if (typeof window !== 'undefined' && typeof window.btoa === 'function') {
- btoa$1 = function (str) { return window.btoa(unescape(encodeURIComponent(str))); };
-} else if (typeof Buffer === 'function') {
- btoa$1 = function (str) { return Buffer.from(str, 'utf-8').toString('base64'); };
-}
-
-var SourceMap = function SourceMap(properties) {
- this.version = 3;
- this.file = properties.file;
- this.sources = properties.sources;
- this.sourcesContent = properties.sourcesContent;
- this.names = properties.names;
- this.mappings = encode(properties.mappings);
-};
-
-SourceMap.prototype.toString = function toString () {
- return JSON.stringify(this);
-};
-
-SourceMap.prototype.toUrl = function toUrl () {
- return 'data:application/json;charset=utf-8;base64,' + btoa$1(this.toString());
-};
-
-function guessIndent(code) {
- var lines = code.split('\n');
-
- var tabbed = lines.filter(function (line) { return /^\t+/.test(line); });
- var spaced = lines.filter(function (line) { return /^ {2,}/.test(line); });
-
- if (tabbed.length === 0 && spaced.length === 0) {
- return null;
- }
-
- // More lines tabbed than spaced? Assume tabs, and
- // default to tabs in the case of a tie (or nothing
- // to go on)
- if (tabbed.length >= spaced.length) {
- return '\t';
- }
-
- // Otherwise, we need to guess the multiple
- var min = spaced.reduce(function (previous, current) {
- var numSpaces = /^ +/.exec(current)[0].length;
- return Math.min(numSpaces, previous);
- }, Infinity);
-
- return new Array(min + 1).join(' ');
-}
-
-function getRelativePath(from, to) {
- var fromParts = from.split(/[/\\]/);
- var toParts = to.split(/[/\\]/);
-
- fromParts.pop(); // get dirname
-
- while (fromParts[0] === toParts[0]) {
- fromParts.shift();
- toParts.shift();
- }
-
- if (fromParts.length) {
- var i = fromParts.length;
- while (i--) { fromParts[i] = '..'; }
- }
-
- return fromParts.concat(toParts).join('/');
-}
-
-var toString$2 = Object.prototype.toString;
-
-function isObject$2(thing) {
- return toString$2.call(thing) === '[object Object]';
-}
-
-function getLocator(source) {
- var originalLines = source.split('\n');
- var lineOffsets = [];
-
- for (var i = 0, pos = 0; i < originalLines.length; i++) {
- lineOffsets.push(pos);
- pos += originalLines[i].length + 1;
- }
-
- return function locate(index) {
- var i = 0;
- var j = lineOffsets.length;
- while (i < j) {
- var m = (i + j) >> 1;
- if (index < lineOffsets[m]) {
- j = m;
- } else {
- i = m + 1;
- }
- }
- var line = i - 1;
- var column = index - lineOffsets[line];
- return { line: line, column: column };
- };
-}
-
-var Mappings = function Mappings(hires) {
- this.hires = hires;
- this.generatedCodeLine = 0;
- this.generatedCodeColumn = 0;
- this.raw = [];
- this.rawSegments = this.raw[this.generatedCodeLine] = [];
- this.pending = null;
-};
-
-Mappings.prototype.addEdit = function addEdit (sourceIndex, content, loc, nameIndex) {
- if (content.length) {
- var segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
- if (nameIndex >= 0) {
- segment.push(nameIndex);
- }
- this.rawSegments.push(segment);
- } else if (this.pending) {
- this.rawSegments.push(this.pending);
- }
-
- this.advance(content);
- this.pending = null;
-};
-
-Mappings.prototype.addUneditedChunk = function addUneditedChunk (sourceIndex, chunk, original, loc, sourcemapLocations) {
- var originalCharIndex = chunk.start;
- var first = true;
-
- while (originalCharIndex < chunk.end) {
- if (this.hires || first || sourcemapLocations.has(originalCharIndex)) {
- this.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);
- }
-
- if (original[originalCharIndex] === '\n') {
- loc.line += 1;
- loc.column = 0;
- this.generatedCodeLine += 1;
- this.raw[this.generatedCodeLine] = this.rawSegments = [];
- this.generatedCodeColumn = 0;
- first = true;
- } else {
- loc.column += 1;
- this.generatedCodeColumn += 1;
- first = false;
- }
-
- originalCharIndex += 1;
- }
-
- this.pending = null;
-};
-
-Mappings.prototype.advance = function advance (str) {
- if (!str) { return; }
-
- var lines = str.split('\n');
-
- if (lines.length > 1) {
- for (var i = 0; i < lines.length - 1; i++) {
- this.generatedCodeLine++;
- this.raw[this.generatedCodeLine] = this.rawSegments = [];
- }
- this.generatedCodeColumn = 0;
- }
-
- this.generatedCodeColumn += lines[lines.length - 1].length;
-};
-
-var n = '\n';
-
-var warned$1 = {
- insertLeft: false,
- insertRight: false,
- storeName: false
-};
-
-var MagicString = function MagicString(string, options) {
- if ( options === void 0 ) options = {};
-
- var chunk = new Chunk(0, string.length, string);
-
- Object.defineProperties(this, {
- original: { writable: true, value: string },
- outro: { writable: true, value: '' },
- intro: { writable: true, value: '' },
- firstChunk: { writable: true, value: chunk },
- lastChunk: { writable: true, value: chunk },
- lastSearchedChunk: { writable: true, value: chunk },
- byStart: { writable: true, value: {} },
- byEnd: { writable: true, value: {} },
- filename: { writable: true, value: options.filename },
- indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
- sourcemapLocations: { writable: true, value: new BitSet() },
- storedNames: { writable: true, value: {} },
- indentStr: { writable: true, value: guessIndent(string) }
- });
-
- this.byStart[0] = chunk;
- this.byEnd[string.length] = chunk;
-};
-
-MagicString.prototype.addSourcemapLocation = function addSourcemapLocation (char) {
- this.sourcemapLocations.add(char);
-};
-
-MagicString.prototype.append = function append (content) {
- if (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }
-
- this.outro += content;
- return this;
-};
-
-MagicString.prototype.appendLeft = function appendLeft (index, content) {
- if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }
-
- this._split(index);
-
- var chunk = this.byEnd[index];
-
- if (chunk) {
- chunk.appendLeft(content);
- } else {
- this.intro += content;
- }
- return this;
-};
-
-MagicString.prototype.appendRight = function appendRight (index, content) {
- if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }
-
- this._split(index);
-
- var chunk = this.byStart[index];
-
- if (chunk) {
- chunk.appendRight(content);
- } else {
- this.outro += content;
- }
- return this;
-};
-
-MagicString.prototype.clone = function clone () {
- var cloned = new MagicString(this.original, { filename: this.filename });
-
- var originalChunk = this.firstChunk;
- var clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());
-
- while (originalChunk) {
- cloned.byStart[clonedChunk.start] = clonedChunk;
- cloned.byEnd[clonedChunk.end] = clonedChunk;
-
- var nextOriginalChunk = originalChunk.next;
- var nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();
-
- if (nextClonedChunk) {
- clonedChunk.next = nextClonedChunk;
- nextClonedChunk.previous = clonedChunk;
-
- clonedChunk = nextClonedChunk;
- }
-
- originalChunk = nextOriginalChunk;
- }
-
- cloned.lastChunk = clonedChunk;
-
- if (this.indentExclusionRanges) {
- cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
- }
-
- cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);
-
- cloned.intro = this.intro;
- cloned.outro = this.outro;
-
- return cloned;
-};
-
-MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) {
- var this$1$1 = this;
-
- options = options || {};
-
- var sourceIndex = 0;
- var names = Object.keys(this.storedNames);
- var mappings = new Mappings(options.hires);
-
- var locate = getLocator(this.original);
-
- if (this.intro) {
- mappings.advance(this.intro);
- }
-
- this.firstChunk.eachNext(function (chunk) {
- var loc = locate(chunk.start);
-
- if (chunk.intro.length) { mappings.advance(chunk.intro); }
-
- if (chunk.edited) {
- mappings.addEdit(
- sourceIndex,
- chunk.content,
- loc,
- chunk.storeName ? names.indexOf(chunk.original) : -1
- );
- } else {
- mappings.addUneditedChunk(sourceIndex, chunk, this$1$1.original, loc, this$1$1.sourcemapLocations);
- }
-
- if (chunk.outro.length) { mappings.advance(chunk.outro); }
- });
-
- return {
- file: options.file ? options.file.split(/[/\\]/).pop() : null,
- sources: [options.source ? getRelativePath(options.file || '', options.source) : null],
- sourcesContent: options.includeContent ? [this.original] : [null],
- names: names,
- mappings: mappings.raw
- };
-};
-
-MagicString.prototype.generateMap = function generateMap (options) {
- return new SourceMap(this.generateDecodedMap(options));
-};
-
-MagicString.prototype.getIndentString = function getIndentString () {
- return this.indentStr === null ? '\t' : this.indentStr;
-};
-
-MagicString.prototype.indent = function indent (indentStr, options) {
- var pattern = /^[^\r\n]/gm;
-
- if (isObject$2(indentStr)) {
- options = indentStr;
- indentStr = undefined;
- }
-
- indentStr = indentStr !== undefined ? indentStr : this.indentStr || '\t';
-
- if (indentStr === '') { return this; } // noop
-
- options = options || {};
-
- // Process exclusion ranges
- var isExcluded = {};
-
- if (options.exclude) {
- var exclusions =
- typeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;
- exclusions.forEach(function (exclusion) {
- for (var i = exclusion[0]; i < exclusion[1]; i += 1) {
- isExcluded[i] = true;
- }
- });
- }
-
- var shouldIndentNextCharacter = options.indentStart !== false;
- var replacer = function (match) {
- if (shouldIndentNextCharacter) { return ("" + indentStr + match); }
- shouldIndentNextCharacter = true;
- return match;
- };
-
- this.intro = this.intro.replace(pattern, replacer);
-
- var charIndex = 0;
- var chunk = this.firstChunk;
-
- while (chunk) {
- var end = chunk.end;
-
- if (chunk.edited) {
- if (!isExcluded[charIndex]) {
- chunk.content = chunk.content.replace(pattern, replacer);
-
- if (chunk.content.length) {
- shouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\n';
- }
- }
- } else {
- charIndex = chunk.start;
-
- while (charIndex < end) {
- if (!isExcluded[charIndex]) {
- var char = this.original[charIndex];
-
- if (char === '\n') {
- shouldIndentNextCharacter = true;
- } else if (char !== '\r' && shouldIndentNextCharacter) {
- shouldIndentNextCharacter = false;
-
- if (charIndex === chunk.start) {
- chunk.prependRight(indentStr);
- } else {
- this._splitChunk(chunk, charIndex);
- chunk = chunk.next;
- chunk.prependRight(indentStr);
- }
- }
- }
-
- charIndex += 1;
- }
- }
-
- charIndex = chunk.end;
- chunk = chunk.next;
- }
-
- this.outro = this.outro.replace(pattern, replacer);
-
- return this;
-};
-
-MagicString.prototype.insert = function insert () {
- throw new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)');
-};
-
-MagicString.prototype.insertLeft = function insertLeft (index, content) {
- if (!warned$1.insertLeft) {
- console.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console
- warned$1.insertLeft = true;
- }
-
- return this.appendLeft(index, content);
-};
-
-MagicString.prototype.insertRight = function insertRight (index, content) {
- if (!warned$1.insertRight) {
- console.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console
- warned$1.insertRight = true;
- }
-
- return this.prependRight(index, content);
-};
-
-MagicString.prototype.move = function move (start, end, index) {
- if (index >= start && index <= end) { throw new Error('Cannot move a selection inside itself'); }
-
- this._split(start);
- this._split(end);
- this._split(index);
-
- var first = this.byStart[start];
- var last = this.byEnd[end];
-
- var oldLeft = first.previous;
- var oldRight = last.next;
-
- var newRight = this.byStart[index];
- if (!newRight && last === this.lastChunk) { return this; }
- var newLeft = newRight ? newRight.previous : this.lastChunk;
-
- if (oldLeft) { oldLeft.next = oldRight; }
- if (oldRight) { oldRight.previous = oldLeft; }
-
- if (newLeft) { newLeft.next = first; }
- if (newRight) { newRight.previous = last; }
-
- if (!first.previous) { this.firstChunk = last.next; }
- if (!last.next) {
- this.lastChunk = first.previous;
- this.lastChunk.next = null;
- }
-
- first.previous = newLeft;
- last.next = newRight || null;
-
- if (!newLeft) { this.firstChunk = first; }
- if (!newRight) { this.lastChunk = last; }
- return this;
-};
-
-MagicString.prototype.overwrite = function overwrite (start, end, content, options) {
- if (typeof content !== 'string') { throw new TypeError('replacement content must be a string'); }
-
- while (start < 0) { start += this.original.length; }
- while (end < 0) { end += this.original.length; }
-
- if (end > this.original.length) { throw new Error('end is out of bounds'); }
- if (start === end)
- { throw new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead'); }
-
- this._split(start);
- this._split(end);
-
- if (options === true) {
- if (!warned$1.storeName) {
- console.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console
- warned$1.storeName = true;
- }
-
- options = { storeName: true };
- }
- var storeName = options !== undefined ? options.storeName : false;
- var contentOnly = options !== undefined ? options.contentOnly : false;
-
- if (storeName) {
- var original = this.original.slice(start, end);
- this.storedNames[original] = true;
- }
-
- var first = this.byStart[start];
- var last = this.byEnd[end];
-
- if (first) {
- if (end > first.end && first.next !== this.byStart[first.end]) {
- throw new Error('Cannot overwrite across a split point');
- }
-
- first.edit(content, storeName, contentOnly);
-
- if (first !== last) {
- var chunk = first.next;
- while (chunk !== last) {
- chunk.edit('', false);
- chunk = chunk.next;
- }
-
- chunk.edit('', false);
- }
- } else {
- // must be inserting at the end
- var newChunk = new Chunk(start, end, '').edit(content, storeName);
-
- // TODO last chunk in the array may not be the last chunk, if it's moved...
- last.next = newChunk;
- newChunk.previous = last;
- }
- return this;
-};
-
-MagicString.prototype.prepend = function prepend (content) {
- if (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }
-
- this.intro = content + this.intro;
- return this;
-};
-
-MagicString.prototype.prependLeft = function prependLeft (index, content) {
- if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }
-
- this._split(index);
-
- var chunk = this.byEnd[index];
-
- if (chunk) {
- chunk.prependLeft(content);
- } else {
- this.intro = content + this.intro;
- }
- return this;
-};
-
-MagicString.prototype.prependRight = function prependRight (index, content) {
- if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }
-
- this._split(index);
-
- var chunk = this.byStart[index];
-
- if (chunk) {
- chunk.prependRight(content);
- } else {
- this.outro = content + this.outro;
- }
- return this;
-};
-
-MagicString.prototype.remove = function remove (start, end) {
- while (start < 0) { start += this.original.length; }
- while (end < 0) { end += this.original.length; }
-
- if (start === end) { return this; }
-
- if (start < 0 || end > this.original.length) { throw new Error('Character is out of bounds'); }
- if (start > end) { throw new Error('end must be greater than start'); }
-
- this._split(start);
- this._split(end);
-
- var chunk = this.byStart[start];
-
- while (chunk) {
- chunk.intro = '';
- chunk.outro = '';
- chunk.edit('');
-
- chunk = end > chunk.end ? this.byStart[chunk.end] : null;
- }
- return this;
-};
-
-MagicString.prototype.lastChar = function lastChar () {
- if (this.outro.length)
- { return this.outro[this.outro.length - 1]; }
- var chunk = this.lastChunk;
- do {
- if (chunk.outro.length)
- { return chunk.outro[chunk.outro.length - 1]; }
- if (chunk.content.length)
- { return chunk.content[chunk.content.length - 1]; }
- if (chunk.intro.length)
- { return chunk.intro[chunk.intro.length - 1]; }
- } while (chunk = chunk.previous);
- if (this.intro.length)
- { return this.intro[this.intro.length - 1]; }
- return '';
-};
-
-MagicString.prototype.lastLine = function lastLine () {
- var lineIndex = this.outro.lastIndexOf(n);
- if (lineIndex !== -1)
- { return this.outro.substr(lineIndex + 1); }
- var lineStr = this.outro;
- var chunk = this.lastChunk;
- do {
- if (chunk.outro.length > 0) {
- lineIndex = chunk.outro.lastIndexOf(n);
- if (lineIndex !== -1)
- { return chunk.outro.substr(lineIndex + 1) + lineStr; }
- lineStr = chunk.outro + lineStr;
- }
-
- if (chunk.content.length > 0) {
- lineIndex = chunk.content.lastIndexOf(n);
- if (lineIndex !== -1)
- { return chunk.content.substr(lineIndex + 1) + lineStr; }
- lineStr = chunk.content + lineStr;
- }
-
- if (chunk.intro.length > 0) {
- lineIndex = chunk.intro.lastIndexOf(n);
- if (lineIndex !== -1)
- { return chunk.intro.substr(lineIndex + 1) + lineStr; }
- lineStr = chunk.intro + lineStr;
- }
- } while (chunk = chunk.previous);
- lineIndex = this.intro.lastIndexOf(n);
- if (lineIndex !== -1)
- { return this.intro.substr(lineIndex + 1) + lineStr; }
- return this.intro + lineStr;
-};
-
-MagicString.prototype.slice = function slice (start, end) {
- if ( start === void 0 ) start = 0;
- if ( end === void 0 ) end = this.original.length;
-
- while (start < 0) { start += this.original.length; }
- while (end < 0) { end += this.original.length; }
-
- var result = '';
-
- // find start chunk
- var chunk = this.firstChunk;
- while (chunk && (chunk.start > start || chunk.end <= start)) {
- // found end chunk before start
- if (chunk.start < end && chunk.end >= end) {
- return result;
- }
-
- chunk = chunk.next;
- }
-
- if (chunk && chunk.edited && chunk.start !== start)
- { throw new Error(("Cannot use replaced character " + start + " as slice start anchor.")); }
-
- var startChunk = chunk;
- while (chunk) {
- if (chunk.intro && (startChunk !== chunk || chunk.start === start)) {
- result += chunk.intro;
- }
-
- var containsEnd = chunk.start < end && chunk.end >= end;
- if (containsEnd && chunk.edited && chunk.end !== end)
- { throw new Error(("Cannot use replaced character " + end + " as slice end anchor.")); }
-
- var sliceStart = startChunk === chunk ? start - chunk.start : 0;
- var sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;
-
- result += chunk.content.slice(sliceStart, sliceEnd);
-
- if (chunk.outro && (!containsEnd || chunk.end === end)) {
- result += chunk.outro;
- }
-
- if (containsEnd) {
- break;
- }
-
- chunk = chunk.next;
- }
-
- return result;
-};
-
-// TODO deprecate this? not really very useful
-MagicString.prototype.snip = function snip (start, end) {
- var clone = this.clone();
- clone.remove(0, start);
- clone.remove(end, clone.original.length);
-
- return clone;
-};
-
-MagicString.prototype._split = function _split (index) {
- if (this.byStart[index] || this.byEnd[index]) { return; }
-
- var chunk = this.lastSearchedChunk;
- var searchForward = index > chunk.end;
-
- while (chunk) {
- if (chunk.contains(index)) { return this._splitChunk(chunk, index); }
-
- chunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];
- }
-};
-
-MagicString.prototype._splitChunk = function _splitChunk (chunk, index) {
- if (chunk.edited && chunk.content.length) {
- // zero-length edited chunks are a special case (overlapping replacements)
- var loc = getLocator(this.original)(index);
- throw new Error(
- ("Cannot split a chunk that has already been edited (" + (loc.line) + ":" + (loc.column) + " – \"" + (chunk.original) + "\")")
- );
- }
-
- var newChunk = chunk.split(index);
-
- this.byEnd[index] = chunk;
- this.byStart[index] = newChunk;
- this.byEnd[newChunk.end] = newChunk;
-
- if (chunk === this.lastChunk) { this.lastChunk = newChunk; }
-
- this.lastSearchedChunk = chunk;
- return true;
-};
-
-MagicString.prototype.toString = function toString () {
- var str = this.intro;
-
- var chunk = this.firstChunk;
- while (chunk) {
- str += chunk.toString();
- chunk = chunk.next;
- }
-
- return str + this.outro;
-};
-
-MagicString.prototype.isEmpty = function isEmpty () {
- var chunk = this.firstChunk;
- do {
- if (chunk.intro.length && chunk.intro.trim() ||
- chunk.content.length && chunk.content.trim() ||
- chunk.outro.length && chunk.outro.trim())
- { return false; }
- } while (chunk = chunk.next);
- return true;
-};
-
-MagicString.prototype.length = function length () {
- var chunk = this.firstChunk;
- var length = 0;
- do {
- length += chunk.intro.length + chunk.content.length + chunk.outro.length;
- } while (chunk = chunk.next);
- return length;
-};
-
-MagicString.prototype.trimLines = function trimLines () {
- return this.trim('[\\r\\n]');
-};
-
-MagicString.prototype.trim = function trim (charType) {
- return this.trimStart(charType).trimEnd(charType);
-};
-
-MagicString.prototype.trimEndAborted = function trimEndAborted (charType) {
- var rx = new RegExp((charType || '\\s') + '+$');
-
- this.outro = this.outro.replace(rx, '');
- if (this.outro.length) { return true; }
-
- var chunk = this.lastChunk;
-
- do {
- var end = chunk.end;
- var aborted = chunk.trimEnd(rx);
-
- // if chunk was trimmed, we have a new lastChunk
- if (chunk.end !== end) {
- if (this.lastChunk === chunk) {
- this.lastChunk = chunk.next;
- }
-
- this.byEnd[chunk.end] = chunk;
- this.byStart[chunk.next.start] = chunk.next;
- this.byEnd[chunk.next.end] = chunk.next;
- }
-
- if (aborted) { return true; }
- chunk = chunk.previous;
- } while (chunk);
-
- return false;
-};
-
-MagicString.prototype.trimEnd = function trimEnd (charType) {
- this.trimEndAborted(charType);
- return this;
-};
-MagicString.prototype.trimStartAborted = function trimStartAborted (charType) {
- var rx = new RegExp('^' + (charType || '\\s') + '+');
-
- this.intro = this.intro.replace(rx, '');
- if (this.intro.length) { return true; }
-
- var chunk = this.firstChunk;
-
- do {
- var end = chunk.end;
- var aborted = chunk.trimStart(rx);
-
- if (chunk.end !== end) {
- // special case...
- if (chunk === this.lastChunk) { this.lastChunk = chunk.next; }
-
- this.byEnd[chunk.end] = chunk;
- this.byStart[chunk.next.start] = chunk.next;
- this.byEnd[chunk.next.end] = chunk.next;
- }
-
- if (aborted) { return true; }
- chunk = chunk.next;
- } while (chunk);
-
- return false;
-};
-
-MagicString.prototype.trimStart = function trimStart (charType) {
- this.trimStartAborted(charType);
- return this;
-};
-
-/**
- * @param typeMap [Object] Map of MIME type -> Array[extensions]
- * @param ...
- */
-function Mime$1() {
- this._types = Object.create(null);
- this._extensions = Object.create(null);
-
- for (let i = 0; i < arguments.length; i++) {
- this.define(arguments[i]);
- }
-
- this.define = this.define.bind(this);
- this.getType = this.getType.bind(this);
- this.getExtension = this.getExtension.bind(this);
-}
-
-/**
- * Define mimetype -> extension mappings. Each key is a mime-type that maps
- * to an array of extensions associated with the type. The first extension is
- * used as the default extension for the type.
- *
- * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});
- *
- * If a type declares an extension that has already been defined, an error will
- * be thrown. To suppress this error and force the extension to be associated
- * with the new type, pass `force`=true. Alternatively, you may prefix the
- * extension with "*" to map the type to extension, without mapping the
- * extension to the type.
- *
- * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});
- *
- *
- * @param map (Object) type definitions
- * @param force (Boolean) if true, force overriding of existing definitions
- */
-Mime$1.prototype.define = function(typeMap, force) {
- for (let type in typeMap) {
- let extensions = typeMap[type].map(function(t) {
- return t.toLowerCase();
- });
- type = type.toLowerCase();
-
- for (let i = 0; i < extensions.length; i++) {
- const ext = extensions[i];
-
- // '*' prefix = not the preferred type for this extension. So fixup the
- // extension, and skip it.
- if (ext[0] === '*') {
- continue;
- }
-
- if (!force && (ext in this._types)) {
- throw new Error(
- 'Attempt to change mapping for "' + ext +
- '" extension from "' + this._types[ext] + '" to "' + type +
- '". Pass `force=true` to allow this, otherwise remove "' + ext +
- '" from the list of extensions for "' + type + '".'
- );
- }
-
- this._types[ext] = type;
- }
-
- // Use first extension as default
- if (force || !this._extensions[type]) {
- const ext = extensions[0];
- this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);
- }
- }
-};
-
-/**
- * Lookup a mime type based on extension
- */
-Mime$1.prototype.getType = function(path) {
- path = String(path);
- let last = path.replace(/^.*[/\\]/, '').toLowerCase();
- let ext = last.replace(/^.*\./, '').toLowerCase();
-
- let hasPath = last.length < path.length;
- let hasDot = ext.length < last.length - 1;
-
- return (hasDot || !hasPath) && this._types[ext] || null;
-};
-
-/**
- * Return file extension associated with a mime type
- */
-Mime$1.prototype.getExtension = function(type) {
- type = /^\s*([^;\s]*)/.test(type) && RegExp.$1;
- return type && this._extensions[type.toLowerCase()] || null;
-};
-
-var Mime_1 = Mime$1;
-
-var standard = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma","es"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/mrb-consumer+xml":["*xdf"],"application/mrb-publish+xml":["*xdf"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["*xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-error+xml":["xer"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};
-
-let Mime = Mime_1;
-var lite = new Mime(standard);
-
-const assetUrlRE = /__VITE_ASSET__([a-z\d]{8})__(?:\$_(.*?)__)?/g;
-// urls in JS must be quoted as strings, so when replacing them we need
-// a different regex
-const assetUrlQuotedRE = /"__VITE_ASSET__([a-z\d]{8})__(?:\$_(.*?)__)?"/g;
-const rawRE = /(\?|&)raw(?:&|$)/;
-const urlRE = /(\?|&)url(?:&|$)/;
-const isURLRequest = (id) => urlRE.test(id)
-const chunkToEmittedAssetsMap = new WeakMap();
-const assetCache = new WeakMap();
-const assetHashToFilenameMap = new WeakMap();
-// save hashes of the files that has been emitted in build watch
-const emittedHashMap = new WeakMap();
-/**
- * Also supports loading plain strings with import text from './foo.txt?raw'
- */
-function assetPlugin(config) {
- // assetHashToFilenameMap initialization in buildStart causes getAssetFilename to return undefined
- assetHashToFilenameMap.set(config, new Map());
- return {
- name: 'vite:asset',
- buildStart() {
- assetCache.set(config, new Map());
- emittedHashMap.set(config, new Set());
- },
- resolveId(id) {
- if (!config.assetsInclude(cleanUrl(id))) {
- return;
- }
- // imports to absolute urls pointing to files in /public
- // will fail to resolve in the main resolver. handle them here.
- const publicFile = checkPublicFile(id, config);
- if (publicFile) {
- return id;
- }
- },
- async load(id) {
- if (id.startsWith('\0')) {
- // Rollup convention, this id should be handled by the
- // plugin that marked it with \0
- return;
- }
- // raw requests, read from disk
- if (rawRE.test(id)) {
- const file = checkPublicFile(id, config) || cleanUrl(id);
- // raw query, read file and return as string
- return `export default ${JSON.stringify(await fs$r.promises.readFile(file, 'utf-8'))}`;
- }
- if (!config.assetsInclude(cleanUrl(id)) && !urlRE.test(id)) {
- return;
- }
- id = id.replace(urlRE, '$1').replace(/[\?&]$/, '');
- const url = await fileToUrl(id, config, this);
- return `export default ${JSON.stringify(url)}`;
- },
- renderChunk(code, chunk) {
- let match;
- let s;
- while ((match = assetUrlQuotedRE.exec(code))) {
- s = s || (s = new MagicString(code));
- const [full, hash, postfix = ''] = match;
- // some internal plugins may still need to emit chunks (e.g. worker) so
- // fallback to this.getFileName for that.
- const file = getAssetFilename(hash, config) || this.getFileName(hash);
- registerAssetToChunk(chunk, file);
- const outputFilepath = config.base + file + postfix;
- s.overwrite(match.index, match.index + full.length, JSON.stringify(outputFilepath));
- }
- if (s) {
- return {
- code: s.toString(),
- map: config.build.sourcemap ? s.generateMap({ hires: true }) : null
- };
- }
- else {
- return null;
- }
- },
- generateBundle(_, bundle) {
- // do not emit assets for SSR build
- if (config.command === 'build' && config.build.ssr) {
- for (const file in bundle) {
- if (bundle[file].type === 'asset' &&
- !file.includes('ssr-manifest.json')) {
- delete bundle[file];
- }
- }
- }
- }
- };
-}
-function registerAssetToChunk(chunk, file) {
- let emitted = chunkToEmittedAssetsMap.get(chunk);
- if (!emitted) {
- emitted = new Set();
- chunkToEmittedAssetsMap.set(chunk, emitted);
- }
- emitted.add(cleanUrl(file));
-}
-function checkPublicFile(url, { publicDir }) {
- // note if the file is in /public, the resolver would have returned it
- // as-is so it's not going to be a fully resolved path.
- if (!publicDir || !url.startsWith('/')) {
- return;
- }
- const publicFile = path__default.join(publicDir, cleanUrl(url));
- if (fs__default.existsSync(publicFile)) {
- return publicFile;
- }
- else {
- return;
- }
-}
-function fileToUrl(id, config, ctx) {
- if (config.command === 'serve') {
- return fileToDevUrl(id, config);
- }
- else {
- return fileToBuiltUrl(id, config, ctx);
- }
-}
-function fileToDevUrl(id, config) {
- var _a, _b;
- let rtn;
- if (checkPublicFile(id, config)) {
- // in public dir, keep the url as-is
- rtn = id;
- }
- else if (id.startsWith(config.root)) {
- // in project root, infer short public path
- rtn = '/' + path__default.posix.relative(config.root, id);
- }
- else {
- // outside of project root, use absolute fs path
- // (this is special handled by the serve static middleware
- rtn = path__default.posix.join(FS_PREFIX + id);
- }
- const origin = (_b = (_a = config.server) === null || _a === void 0 ? void 0 : _a.origin) !== null && _b !== void 0 ? _b : '';
- return origin + config.base + rtn.replace(/^\//, '');
-}
-function getAssetFilename(hash, config) {
- var _a;
- return (_a = assetHashToFilenameMap.get(config)) === null || _a === void 0 ? void 0 : _a.get(hash);
-}
-/**
- * converts the source filepath of the asset to the output filename based on the assetFileNames option. \
- * this function imitates the behavior of rollup.js. \
- * https://rollupjs.org/guide/en/#outputassetfilenames
- *
- * @example
- * ```ts
- * const content = Buffer.from('text');
- * const fileName = assetFileNamesToFileName(
- * 'assets/[name].[hash][extname]',
- * '/path/to/file.txt',
- * getAssetHash(content),
- * content
- * )
- * // fileName: 'assets/file.982d9e3e.txt'
- * ```
- *
- * @param assetFileNames filename pattern. e.g. `'assets/[name].[hash][extname]'`
- * @param file filepath of the asset
- * @param contentHash hash of the asset. used for `'[hash]'` placeholder
- * @param content content of the asset. passed to `assetFileNames` if `assetFileNames` is a function
- * @returns output filename
- */
-function assetFileNamesToFileName(assetFileNames, file, contentHash, content) {
- const basename = path__default.basename(file);
- // placeholders for `assetFileNames`
- // `hash` is slightly different from the rollup's one
- const extname = path__default.extname(basename);
- const ext = extname.substr(1);
- const name = basename.slice(0, -extname.length);
- const hash = contentHash;
- if (typeof assetFileNames === 'function') {
- assetFileNames = assetFileNames({
- name: file,
- source: content,
- type: 'asset'
- });
- if (typeof assetFileNames !== 'string') {
- throw new TypeError('assetFileNames must return a string');
- }
- }
- else if (typeof assetFileNames !== 'string') {
- throw new TypeError('assetFileNames must be a string or a function');
- }
- const fileName = assetFileNames.replace(/\[\w+\]/g, (placeholder) => {
- switch (placeholder) {
- case '[ext]':
- return ext;
- case '[extname]':
- return extname;
- case '[hash]':
- return hash;
- case '[name]':
- return name;
- }
- throw new Error(`invalid placeholder ${placeholder} in assetFileNames "${assetFileNames}"`);
- });
- return fileName;
-}
-/**
- * Register an asset to be emitted as part of the bundle (if necessary)
- * and returns the resolved public URL
- */
-async function fileToBuiltUrl(id, config, pluginContext, skipPublicCheck = false) {
- var _a, _b, _c;
- if (!skipPublicCheck && checkPublicFile(id, config)) {
- return config.base + id.slice(1);
- }
- const cache = assetCache.get(config);
- const cached = cache.get(id);
- if (cached) {
- return cached;
- }
- const file = cleanUrl(id);
- const content = await fs$r.promises.readFile(file);
- let url;
- if (config.build.lib ||
- (!file.endsWith('.svg') &&
- content.length < Number(config.build.assetsInlineLimit))) {
- // base64 inlined as a string
- url = `data:${lite.getType(file)};base64,${content.toString('base64')}`;
- }
- else {
- // emit as asset
- // rollup supports `import.meta.ROLLUP_FILE_URL_*`, but it generates code
- // that uses runtime url sniffing and it can be verbose when targeting
- // non-module format. It also fails to cascade the asset content change
- // into the chunk's hash, so we have to do our own content hashing here.
- // https://bundlers.tooling.report/hashing/asset-cascade/
- // https://github.com/rollup/rollup/issues/3415
- const map = assetHashToFilenameMap.get(config);
- const contentHash = getAssetHash(content);
- const { search, hash } = require$$0$8.parse(id);
- const postfix = (search || '') + (hash || '');
- const output = (_b = (_a = config.build) === null || _a === void 0 ? void 0 : _a.rollupOptions) === null || _b === void 0 ? void 0 : _b.output;
- const assetFileNames = (_c = (output && !Array.isArray(output) ? output.assetFileNames : undefined)) !== null && _c !== void 0 ? _c :
- // defaults to '<assetsDir>/[name].[hash][extname]'
- // slightly different from rollup's one ('assets/[name]-[hash][extname]')
- path__default.posix.join(config.build.assetsDir, '[name].[hash][extname]');
- const fileName = assetFileNamesToFileName(assetFileNames, file, contentHash, content);
- if (!map.has(contentHash)) {
- map.set(contentHash, fileName);
- }
- const emittedSet = emittedHashMap.get(config);
- if (!emittedSet.has(contentHash)) {
- const name = normalizePath$4(path__default.relative(config.root, file));
- pluginContext.emitFile({
- name,
- fileName,
- type: 'asset',
- source: content
- });
- emittedSet.add(contentHash);
- }
- url = `__VITE_ASSET__${contentHash}__${postfix ? `$_${postfix}__` : ``}`;
- }
- cache.set(id, url);
- return url;
-}
-function getAssetHash(content) {
- return require$$1.createHash('sha256').update(content).digest('hex').slice(0, 8);
-}
-async function urlToBuiltUrl(url, importer, config, pluginContext) {
- if (checkPublicFile(url, config)) {
- return config.base + url.slice(1);
- }
- const file = url.startsWith('/')
- ? path__default.join(config.root, url)
- : path__default.join(path__default.dirname(importer), url);
- return fileToBuiltUrl(file, config, pluginContext,
- // skip public check since we just did it above
- true);
-}
-
-var tasks = {};
-
-var utils$k = {};
-
-var array$1 = {};
-
-Object.defineProperty(array$1, "__esModule", { value: true });
-array$1.splitWhen = array$1.flatten = void 0;
-function flatten$1(items) {
- return items.reduce((collection, item) => [].concat(collection, item), []);
-}
-array$1.flatten = flatten$1;
-function splitWhen(items, predicate) {
- const result = [[]];
- let groupIndex = 0;
- for (const item of items) {
- if (predicate(item)) {
- groupIndex++;
- result[groupIndex] = [];
- }
- else {
- result[groupIndex].push(item);
- }
- }
- return result;
-}
-array$1.splitWhen = splitWhen;
-
-var errno$1 = {};
-
-Object.defineProperty(errno$1, "__esModule", { value: true });
-errno$1.isEnoentCodeError = void 0;
-function isEnoentCodeError(error) {
- return error.code === 'ENOENT';
-}
-errno$1.isEnoentCodeError = isEnoentCodeError;
-
-var fs$q = {};
-
-Object.defineProperty(fs$q, "__esModule", { value: true });
-fs$q.createDirentFromStats = void 0;
-class DirentFromStats$1 {
- constructor(name, stats) {
- this.name = name;
- this.isBlockDevice = stats.isBlockDevice.bind(stats);
- this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
- this.isDirectory = stats.isDirectory.bind(stats);
- this.isFIFO = stats.isFIFO.bind(stats);
- this.isFile = stats.isFile.bind(stats);
- this.isSocket = stats.isSocket.bind(stats);
- this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
- }
-}
-function createDirentFromStats$1(name, stats) {
- return new DirentFromStats$1(name, stats);
-}
-fs$q.createDirentFromStats = createDirentFromStats$1;
-
-var path$s = {};
-
-Object.defineProperty(path$s, "__esModule", { value: true });
-path$s.removeLeadingDotSegment = path$s.escape = path$s.makeAbsolute = path$s.unixify = void 0;
-const path$r = path__default;
-const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\
-const UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;
-/**
- * Designed to work only with simple paths: `dir\\file`.
- */
-function unixify(filepath) {
- return filepath.replace(/\\/g, '/');
-}
-path$s.unixify = unixify;
-function makeAbsolute(cwd, filepath) {
- return path$r.resolve(cwd, filepath);
-}
-path$s.makeAbsolute = makeAbsolute;
-function escape$1(pattern) {
- return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\$2');
-}
-path$s.escape = escape$1;
-function removeLeadingDotSegment(entry) {
- // We do not use `startsWith` because this is 10x slower than current implementation for some cases.
- // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
- if (entry.charAt(0) === '.') {
- const secondCharactery = entry.charAt(1);
- if (secondCharactery === '/' || secondCharactery === '\\') {
- return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);
- }
- }
- return entry;
-}
-path$s.removeLeadingDotSegment = removeLeadingDotSegment;
-
-var pattern$1 = {};
-
-/*!
- * is-extglob <https://github.com/jonschlinkert/is-extglob>
- *
- * Copyright (c) 2014-2016, Jon Schlinkert.
- * Licensed under the MIT License.
- */
-
-var isExtglob$1 = function isExtglob(str) {
- if (typeof str !== 'string' || str === '') {
- return false;
- }
-
- var match;
- while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
- if (match[2]) return true;
- str = str.slice(match.index + match[0].length);
- }
-
- return false;
-};
-
-/*!
- * is-glob <https://github.com/jonschlinkert/is-glob>
- *
- * Copyright (c) 2014-2017, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-var isExtglob = isExtglob$1;
-var chars = { '{': '}', '(': ')', '[': ']'};
-var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
-var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
-
-var isGlob$2 = function isGlob(str, options) {
- if (typeof str !== 'string' || str === '') {
- return false;
- }
-
- if (isExtglob(str)) {
- return true;
- }
-
- var regex = strictRegex;
- var match;
-
- // optionally relax regex
- if (options && options.strict === false) {
- regex = relaxedRegex;
- }
-
- while ((match = regex.exec(str))) {
- if (match[2]) return true;
- var idx = match.index + match[0].length;
-
- // if an open bracket/brace/paren is escaped,
- // set the index to the next closing character
- var open = match[1];
- var close = open ? chars[open] : null;
- if (open && close) {
- var n = str.indexOf(close, idx);
- if (n !== -1) {
- idx = n + 1;
- }
- }
-
- str = str.slice(idx);
- }
- return false;
-};
-
-var isGlob$1 = isGlob$2;
-var pathPosixDirname = path__default.posix.dirname;
-var isWin32 = require$$0__default$1.platform() === 'win32';
-
-var slash$2 = '/';
-var backslash = /\\/g;
-var enclosure = /[\{\[].*[\}\]]$/;
-var globby$2 = /(^|[^\\])([\{\[]|\([^\)]+$)/;
-var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
-
-/**
- * @param {string} str
- * @param {Object} opts
- * @param {boolean} [opts.flipBackslashes=true]
- * @returns {string}
- */
-var globParent$2 = function globParent(str, opts) {
- var options = Object.assign({ flipBackslashes: true }, opts);
-
- // flip windows path separators
- if (options.flipBackslashes && isWin32 && str.indexOf(slash$2) < 0) {
- str = str.replace(backslash, slash$2);
- }
-
- // special case for strings ending in enclosure containing path separator
- if (enclosure.test(str)) {
- str += slash$2;
- }
-
- // preserves full path in case of trailing path separator
- str += 'a';
-
- // remove path parts that are globby
- do {
- str = pathPosixDirname(str);
- } while (isGlob$1(str) || globby$2.test(str));
-
- // remove escape chars and return result
- return str.replace(escaped, '$1');
-};
-
-var utils$j = {};
-
-(function (exports) {
-
-exports.isInteger = num => {
- if (typeof num === 'number') {
- return Number.isInteger(num);
- }
- if (typeof num === 'string' && num.trim() !== '') {
- return Number.isInteger(Number(num));
- }
- return false;
-};
-
-/**
- * Find a node of the given type
- */
-
-exports.find = (node, type) => node.nodes.find(node => node.type === type);
-
-/**
- * Find a node of the given type
- */
-
-exports.exceedsLimit = (min, max, step = 1, limit) => {
- if (limit === false) return false;
- if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
- return ((Number(max) - Number(min)) / Number(step)) >= limit;
-};
-
-/**
- * Escape the given node with '\\' before node.value
- */
-
-exports.escapeNode = (block, n = 0, type) => {
- let node = block.nodes[n];
- if (!node) return;
-
- if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
- if (node.escaped !== true) {
- node.value = '\\' + node.value;
- node.escaped = true;
- }
- }
-};
-
-/**
- * Returns true if the given brace node should be enclosed in literal braces
- */
-
-exports.encloseBrace = node => {
- if (node.type !== 'brace') return false;
- if ((node.commas >> 0 + node.ranges >> 0) === 0) {
- node.invalid = true;
- return true;
- }
- return false;
-};
-
-/**
- * Returns true if a brace node is invalid.
- */
-
-exports.isInvalidBrace = block => {
- if (block.type !== 'brace') return false;
- if (block.invalid === true || block.dollar) return true;
- if ((block.commas >> 0 + block.ranges >> 0) === 0) {
- block.invalid = true;
- return true;
- }
- if (block.open !== true || block.close !== true) {
- block.invalid = true;
- return true;
- }
- return false;
-};
-
-/**
- * Returns true if a node is an open or close node
- */
-
-exports.isOpenOrClose = node => {
- if (node.type === 'open' || node.type === 'close') {
- return true;
- }
- return node.open === true || node.close === true;
-};
-
-/**
- * Reduce an array of text nodes.
- */
-
-exports.reduce = nodes => nodes.reduce((acc, node) => {
- if (node.type === 'text') acc.push(node.value);
- if (node.type === 'range') node.type = 'text';
- return acc;
-}, []);
-
-/**
- * Flatten an array
- */
-
-exports.flatten = (...args) => {
- const result = [];
- const flat = arr => {
- for (let i = 0; i < arr.length; i++) {
- let ele = arr[i];
- Array.isArray(ele) ? flat(ele) : ele !== void 0 && result.push(ele);
- }
- return result;
- };
- flat(args);
- return result;
-};
-}(utils$j));
-
-const utils$i = utils$j;
-
-var stringify$7 = (ast, options = {}) => {
- let stringify = (node, parent = {}) => {
- let invalidBlock = options.escapeInvalid && utils$i.isInvalidBrace(parent);
- let invalidNode = node.invalid === true && options.escapeInvalid === true;
- let output = '';
-
- if (node.value) {
- if ((invalidBlock || invalidNode) && utils$i.isOpenOrClose(node)) {
- return '\\' + node.value;
- }
- return node.value;
- }
-
- if (node.value) {
- return node.value;
- }
-
- if (node.nodes) {
- for (let child of node.nodes) {
- output += stringify(child);
- }
- }
- return output;
- };
-
- return stringify(ast);
-};
-
-/*!
- * is-number <https://github.com/jonschlinkert/is-number>
- *
- * Copyright (c) 2014-present, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-var isNumber$2 = function(num) {
- if (typeof num === 'number') {
- return num - num === 0;
- }
- if (typeof num === 'string' && num.trim() !== '') {
- return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
- }
- return false;
-};
-
-/*!
- * to-regex-range <https://github.com/micromatch/to-regex-range>
- *
- * Copyright (c) 2015-present, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-const isNumber$1 = isNumber$2;
-
-const toRegexRange$1 = (min, max, options) => {
- if (isNumber$1(min) === false) {
- throw new TypeError('toRegexRange: expected the first argument to be a number');
- }
-
- if (max === void 0 || min === max) {
- return String(min);
- }
-
- if (isNumber$1(max) === false) {
- throw new TypeError('toRegexRange: expected the second argument to be a number.');
- }
-
- let opts = { relaxZeros: true, ...options };
- if (typeof opts.strictZeros === 'boolean') {
- opts.relaxZeros = opts.strictZeros === false;
- }
-
- let relax = String(opts.relaxZeros);
- let shorthand = String(opts.shorthand);
- let capture = String(opts.capture);
- let wrap = String(opts.wrap);
- let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
-
- if (toRegexRange$1.cache.hasOwnProperty(cacheKey)) {
- return toRegexRange$1.cache[cacheKey].result;
- }
-
- let a = Math.min(min, max);
- let b = Math.max(min, max);
-
- if (Math.abs(a - b) === 1) {
- let result = min + '|' + max;
- if (opts.capture) {
- return `(${result})`;
- }
- if (opts.wrap === false) {
- return result;
- }
- return `(?:${result})`;
- }
-
- let isPadded = hasPadding(min) || hasPadding(max);
- let state = { min, max, a, b };
- let positives = [];
- let negatives = [];
-
- if (isPadded) {
- state.isPadded = isPadded;
- state.maxLen = String(state.max).length;
- }
-
- if (a < 0) {
- let newMin = b < 0 ? Math.abs(b) : 1;
- negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
- a = state.a = 0;
- }
-
- if (b >= 0) {
- positives = splitToPatterns(a, b, state, opts);
- }
-
- state.negatives = negatives;
- state.positives = positives;
- state.result = collatePatterns(negatives, positives);
-
- if (opts.capture === true) {
- state.result = `(${state.result})`;
- } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
- state.result = `(?:${state.result})`;
- }
-
- toRegexRange$1.cache[cacheKey] = state;
- return state.result;
-};
-
-function collatePatterns(neg, pos, options) {
- let onlyNegative = filterPatterns(neg, pos, '-', false) || [];
- let onlyPositive = filterPatterns(pos, neg, '', false) || [];
- let intersected = filterPatterns(neg, pos, '-?', true) || [];
- let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
- return subpatterns.join('|');
-}
-
-function splitToRanges(min, max) {
- let nines = 1;
- let zeros = 1;
-
- let stop = countNines(min, nines);
- let stops = new Set([max]);
-
- while (min <= stop && stop <= max) {
- stops.add(stop);
- nines += 1;
- stop = countNines(min, nines);
- }
-
- stop = countZeros(max + 1, zeros) - 1;
-
- while (min < stop && stop <= max) {
- stops.add(stop);
- zeros += 1;
- stop = countZeros(max + 1, zeros) - 1;
- }
-
- stops = [...stops];
- stops.sort(compare);
- return stops;
-}
-
-/**
- * Convert a range to a regex pattern
- * @param {Number} `start`
- * @param {Number} `stop`
- * @return {String}
- */
-
-function rangeToPattern(start, stop, options) {
- if (start === stop) {
- return { pattern: start, count: [], digits: 0 };
- }
-
- let zipped = zip(start, stop);
- let digits = zipped.length;
- let pattern = '';
- let count = 0;
-
- for (let i = 0; i < digits; i++) {
- let [startDigit, stopDigit] = zipped[i];
-
- if (startDigit === stopDigit) {
- pattern += startDigit;
-
- } else if (startDigit !== '0' || stopDigit !== '9') {
- pattern += toCharacterClass(startDigit, stopDigit);
-
- } else {
- count++;
- }
- }
-
- if (count) {
- pattern += options.shorthand === true ? '\\d' : '[0-9]';
- }
-
- return { pattern, count: [count], digits };
-}
-
-function splitToPatterns(min, max, tok, options) {
- let ranges = splitToRanges(min, max);
- let tokens = [];
- let start = min;
- let prev;
-
- for (let i = 0; i < ranges.length; i++) {
- let max = ranges[i];
- let obj = rangeToPattern(String(start), String(max), options);
- let zeros = '';
-
- if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
- if (prev.count.length > 1) {
- prev.count.pop();
- }
-
- prev.count.push(obj.count[0]);
- prev.string = prev.pattern + toQuantifier(prev.count);
- start = max + 1;
- continue;
- }
-
- if (tok.isPadded) {
- zeros = padZeros(max, tok, options);
- }
-
- obj.string = zeros + obj.pattern + toQuantifier(obj.count);
- tokens.push(obj);
- start = max + 1;
- prev = obj;
- }
-
- return tokens;
-}
-
-function filterPatterns(arr, comparison, prefix, intersection, options) {
- let result = [];
-
- for (let ele of arr) {
- let { string } = ele;
-
- // only push if _both_ are negative...
- if (!intersection && !contains(comparison, 'string', string)) {
- result.push(prefix + string);
- }
-
- // or _both_ are positive
- if (intersection && contains(comparison, 'string', string)) {
- result.push(prefix + string);
- }
- }
- return result;
-}
-
-/**
- * Zip strings
- */
-
-function zip(a, b) {
- let arr = [];
- for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
- return arr;
-}
-
-function compare(a, b) {
- return a > b ? 1 : b > a ? -1 : 0;
-}
-
-function contains(arr, key, val) {
- return arr.some(ele => ele[key] === val);
-}
-
-function countNines(min, len) {
- return Number(String(min).slice(0, -len) + '9'.repeat(len));
-}
-
-function countZeros(integer, zeros) {
- return integer - (integer % Math.pow(10, zeros));
-}
-
-function toQuantifier(digits) {
- let [start = 0, stop = ''] = digits;
- if (stop || start > 1) {
- return `{${start + (stop ? ',' + stop : '')}}`;
- }
- return '';
-}
-
-function toCharacterClass(a, b, options) {
- return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
-}
-
-function hasPadding(str) {
- return /^-?(0+)\d/.test(str);
-}
-
-function padZeros(value, tok, options) {
- if (!tok.isPadded) {
- return value;
- }
-
- let diff = Math.abs(tok.maxLen - String(value).length);
- let relax = options.relaxZeros !== false;
-
- switch (diff) {
- case 0:
- return '';
- case 1:
- return relax ? '0?' : '0';
- case 2:
- return relax ? '0{0,2}' : '00';
- default: {
- return relax ? `0{0,${diff}}` : `0{${diff}}`;
- }
- }
-}
-
-/**
- * Cache
- */
-
-toRegexRange$1.cache = {};
-toRegexRange$1.clearCache = () => (toRegexRange$1.cache = {});
-
-/**
- * Expose `toRegexRange`
- */
-
-var toRegexRange_1 = toRegexRange$1;
-
-/*!
- * fill-range <https://github.com/jonschlinkert/fill-range>
- *
- * Copyright (c) 2014-present, Jon Schlinkert.
- * Licensed under the MIT License.
- */
-
-const util$8 = require$$0__default$2;
-const toRegexRange = toRegexRange_1;
-
-const isObject$1 = val => val !== null && typeof val === 'object' && !Array.isArray(val);
-
-const transform = toNumber => {
- return value => toNumber === true ? Number(value) : String(value);
-};
-
-const isValidValue = value => {
- return typeof value === 'number' || (typeof value === 'string' && value !== '');
-};
-
-const isNumber = num => Number.isInteger(+num);
-
-const zeros = input => {
- let value = `${input}`;
- let index = -1;
- if (value[0] === '-') value = value.slice(1);
- if (value === '0') return false;
- while (value[++index] === '0');
- return index > 0;
-};
-
-const stringify$6 = (start, end, options) => {
- if (typeof start === 'string' || typeof end === 'string') {
- return true;
- }
- return options.stringify === true;
-};
-
-const pad = (input, maxLength, toNumber) => {
- if (maxLength > 0) {
- let dash = input[0] === '-' ? '-' : '';
- if (dash) input = input.slice(1);
- input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
- }
- if (toNumber === false) {
- return String(input);
- }
- return input;
-};
-
-const toMaxLen = (input, maxLength) => {
- let negative = input[0] === '-' ? '-' : '';
- if (negative) {
- input = input.slice(1);
- maxLength--;
- }
- while (input.length < maxLength) input = '0' + input;
- return negative ? ('-' + input) : input;
-};
-
-const toSequence = (parts, options) => {
- parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
- parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
-
- let prefix = options.capture ? '' : '?:';
- let positives = '';
- let negatives = '';
- let result;
-
- if (parts.positives.length) {
- positives = parts.positives.join('|');
- }
-
- if (parts.negatives.length) {
- negatives = `-(${prefix}${parts.negatives.join('|')})`;
- }
-
- if (positives && negatives) {
- result = `${positives}|${negatives}`;
- } else {
- result = positives || negatives;
- }
-
- if (options.wrap) {
- return `(${prefix}${result})`;
- }
-
- return result;
-};
-
-const toRange = (a, b, isNumbers, options) => {
- if (isNumbers) {
- return toRegexRange(a, b, { wrap: false, ...options });
- }
-
- let start = String.fromCharCode(a);
- if (a === b) return start;
-
- let stop = String.fromCharCode(b);
- return `[${start}-${stop}]`;
-};
-
-const toRegex = (start, end, options) => {
- if (Array.isArray(start)) {
- let wrap = options.wrap === true;
- let prefix = options.capture ? '' : '?:';
- return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
- }
- return toRegexRange(start, end, options);
-};
-
-const rangeError = (...args) => {
- return new RangeError('Invalid range arguments: ' + util$8.inspect(...args));
-};
-
-const invalidRange = (start, end, options) => {
- if (options.strictRanges === true) throw rangeError([start, end]);
- return [];
-};
-
-const invalidStep = (step, options) => {
- if (options.strictRanges === true) {
- throw new TypeError(`Expected step "${step}" to be a number`);
- }
- return [];
-};
-
-const fillNumbers = (start, end, step = 1, options = {}) => {
- let a = Number(start);
- let b = Number(end);
-
- if (!Number.isInteger(a) || !Number.isInteger(b)) {
- if (options.strictRanges === true) throw rangeError([start, end]);
- return [];
- }
-
- // fix negative zero
- if (a === 0) a = 0;
- if (b === 0) b = 0;
-
- let descending = a > b;
- let startString = String(start);
- let endString = String(end);
- let stepString = String(step);
- step = Math.max(Math.abs(step), 1);
-
- let padded = zeros(startString) || zeros(endString) || zeros(stepString);
- let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
- let toNumber = padded === false && stringify$6(start, end, options) === false;
- let format = options.transform || transform(toNumber);
-
- if (options.toRegex && step === 1) {
- return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
- }
-
- let parts = { negatives: [], positives: [] };
- let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
- let range = [];
- let index = 0;
-
- while (descending ? a >= b : a <= b) {
- if (options.toRegex === true && step > 1) {
- push(a);
- } else {
- range.push(pad(format(a, index), maxLen, toNumber));
- }
- a = descending ? a - step : a + step;
- index++;
- }
-
- if (options.toRegex === true) {
- return step > 1
- ? toSequence(parts, options)
- : toRegex(range, null, { wrap: false, ...options });
- }
-
- return range;
-};
-
-const fillLetters = (start, end, step = 1, options = {}) => {
- if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {
- return invalidRange(start, end, options);
- }
-
-
- let format = options.transform || (val => String.fromCharCode(val));
- let a = `${start}`.charCodeAt(0);
- let b = `${end}`.charCodeAt(0);
-
- let descending = a > b;
- let min = Math.min(a, b);
- let max = Math.max(a, b);
-
- if (options.toRegex && step === 1) {
- return toRange(min, max, false, options);
- }
-
- let range = [];
- let index = 0;
-
- while (descending ? a >= b : a <= b) {
- range.push(format(a, index));
- a = descending ? a - step : a + step;
- index++;
- }
-
- if (options.toRegex === true) {
- return toRegex(range, null, { wrap: false, options });
- }
-
- return range;
-};
-
-const fill$2 = (start, end, step, options = {}) => {
- if (end == null && isValidValue(start)) {
- return [start];
- }
-
- if (!isValidValue(start) || !isValidValue(end)) {
- return invalidRange(start, end, options);
- }
-
- if (typeof step === 'function') {
- return fill$2(start, end, 1, { transform: step });
- }
-
- if (isObject$1(step)) {
- return fill$2(start, end, 0, step);
- }
-
- let opts = { ...options };
- if (opts.capture === true) opts.wrap = true;
- step = step || opts.step || 1;
-
- if (!isNumber(step)) {
- if (step != null && !isObject$1(step)) return invalidStep(step, opts);
- return fill$2(start, end, 1, step);
- }
-
- if (isNumber(start) && isNumber(end)) {
- return fillNumbers(start, end, step, opts);
- }
-
- return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
-};
-
-var fillRange = fill$2;
-
-const fill$1 = fillRange;
-const utils$h = utils$j;
-
-const compile$1 = (ast, options = {}) => {
- let walk = (node, parent = {}) => {
- let invalidBlock = utils$h.isInvalidBrace(parent);
- let invalidNode = node.invalid === true && options.escapeInvalid === true;
- let invalid = invalidBlock === true || invalidNode === true;
- let prefix = options.escapeInvalid === true ? '\\' : '';
- let output = '';
-
- if (node.isOpen === true) {
- return prefix + node.value;
- }
- if (node.isClose === true) {
- return prefix + node.value;
- }
-
- if (node.type === 'open') {
- return invalid ? (prefix + node.value) : '(';
- }
-
- if (node.type === 'close') {
- return invalid ? (prefix + node.value) : ')';
- }
-
- if (node.type === 'comma') {
- return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
- }
-
- if (node.value) {
- return node.value;
- }
-
- if (node.nodes && node.ranges > 0) {
- let args = utils$h.reduce(node.nodes);
- let range = fill$1(...args, { ...options, wrap: false, toRegex: true });
-
- if (range.length !== 0) {
- return args.length > 1 && range.length > 1 ? `(${range})` : range;
- }
- }
-
- if (node.nodes) {
- for (let child of node.nodes) {
- output += walk(child, node);
- }
- }
- return output;
- };
-
- return walk(ast);
-};
-
-var compile_1 = compile$1;
-
-const fill = fillRange;
-const stringify$5 = stringify$7;
-const utils$g = utils$j;
-
-const append$1 = (queue = '', stash = '', enclose = false) => {
- let result = [];
-
- queue = [].concat(queue);
- stash = [].concat(stash);
-
- if (!stash.length) return queue;
- if (!queue.length) {
- return enclose ? utils$g.flatten(stash).map(ele => `{${ele}}`) : stash;
- }
-
- for (let item of queue) {
- if (Array.isArray(item)) {
- for (let value of item) {
- result.push(append$1(value, stash, enclose));
- }
- } else {
- for (let ele of stash) {
- if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
- result.push(Array.isArray(ele) ? append$1(item, ele, enclose) : (item + ele));
- }
- }
- }
- return utils$g.flatten(result);
-};
-
-const expand$3 = (ast, options = {}) => {
- let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
-
- let walk = (node, parent = {}) => {
- node.queue = [];
-
- let p = parent;
- let q = parent.queue;
-
- while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
- p = p.parent;
- q = p.queue;
- }
-
- if (node.invalid || node.dollar) {
- q.push(append$1(q.pop(), stringify$5(node, options)));
- return;
- }
-
- if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
- q.push(append$1(q.pop(), ['{}']));
- return;
- }
-
- if (node.nodes && node.ranges > 0) {
- let args = utils$g.reduce(node.nodes);
-
- if (utils$g.exceedsLimit(...args, options.step, rangeLimit)) {
- throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
- }
-
- let range = fill(...args, options);
- if (range.length === 0) {
- range = stringify$5(node, options);
- }
-
- q.push(append$1(q.pop(), range));
- node.nodes = [];
- return;
- }
-
- let enclose = utils$g.encloseBrace(node);
- let queue = node.queue;
- let block = node;
-
- while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
- block = block.parent;
- queue = block.queue;
- }
-
- for (let i = 0; i < node.nodes.length; i++) {
- let child = node.nodes[i];
-
- if (child.type === 'comma' && node.type === 'brace') {
- if (i === 1) queue.push('');
- queue.push('');
- continue;
- }
-
- if (child.type === 'close') {
- q.push(append$1(q.pop(), queue, enclose));
- continue;
- }
-
- if (child.value && child.type !== 'open') {
- queue.push(append$1(queue.pop(), child.value));
- continue;
- }
-
- if (child.nodes) {
- walk(child, node);
- }
- }
-
- return queue;
- };
-
- return utils$g.flatten(walk(ast));
-};
-
-var expand_1 = expand$3;
-
-var constants$6 = {
- MAX_LENGTH: 1024 * 64,
-
- // Digits
- CHAR_0: '0', /* 0 */
- CHAR_9: '9', /* 9 */
-
- // Alphabet chars.
- CHAR_UPPERCASE_A: 'A', /* A */
- CHAR_LOWERCASE_A: 'a', /* a */
- CHAR_UPPERCASE_Z: 'Z', /* Z */
- CHAR_LOWERCASE_Z: 'z', /* z */
-
- CHAR_LEFT_PARENTHESES: '(', /* ( */
- CHAR_RIGHT_PARENTHESES: ')', /* ) */
-
- CHAR_ASTERISK: '*', /* * */
-
- // Non-alphabetic chars.
- CHAR_AMPERSAND: '&', /* & */
- CHAR_AT: '@', /* @ */
- CHAR_BACKSLASH: '\\', /* \ */
- CHAR_BACKTICK: '`', /* ` */
- CHAR_CARRIAGE_RETURN: '\r', /* \r */
- CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
- CHAR_COLON: ':', /* : */
- CHAR_COMMA: ',', /* , */
- CHAR_DOLLAR: '$', /* . */
- CHAR_DOT: '.', /* . */
- CHAR_DOUBLE_QUOTE: '"', /* " */
- CHAR_EQUAL: '=', /* = */
- CHAR_EXCLAMATION_MARK: '!', /* ! */
- CHAR_FORM_FEED: '\f', /* \f */
- CHAR_FORWARD_SLASH: '/', /* / */
- CHAR_HASH: '#', /* # */
- CHAR_HYPHEN_MINUS: '-', /* - */
- CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
- CHAR_LEFT_CURLY_BRACE: '{', /* { */
- CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
- CHAR_LINE_FEED: '\n', /* \n */
- CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
- CHAR_PERCENT: '%', /* % */
- CHAR_PLUS: '+', /* + */
- CHAR_QUESTION_MARK: '?', /* ? */
- CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
- CHAR_RIGHT_CURLY_BRACE: '}', /* } */
- CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
- CHAR_SEMICOLON: ';', /* ; */
- CHAR_SINGLE_QUOTE: '\'', /* ' */
- CHAR_SPACE: ' ', /* */
- CHAR_TAB: '\t', /* \t */
- CHAR_UNDERSCORE: '_', /* _ */
- CHAR_VERTICAL_LINE: '|', /* | */
- CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
-};
-
-const stringify$4 = stringify$7;
-
-/**
- * Constants
- */
-
-const {
- MAX_LENGTH: MAX_LENGTH$1,
- CHAR_BACKSLASH, /* \ */
- CHAR_BACKTICK, /* ` */
- CHAR_COMMA: CHAR_COMMA$1, /* , */
- CHAR_DOT: CHAR_DOT$1, /* . */
- CHAR_LEFT_PARENTHESES: CHAR_LEFT_PARENTHESES$1, /* ( */
- CHAR_RIGHT_PARENTHESES: CHAR_RIGHT_PARENTHESES$1, /* ) */
- CHAR_LEFT_CURLY_BRACE: CHAR_LEFT_CURLY_BRACE$1, /* { */
- CHAR_RIGHT_CURLY_BRACE: CHAR_RIGHT_CURLY_BRACE$1, /* } */
- CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$1, /* [ */
- CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$1, /* ] */
- CHAR_DOUBLE_QUOTE, /* " */
- CHAR_SINGLE_QUOTE, /* ' */
- CHAR_NO_BREAK_SPACE,
- CHAR_ZERO_WIDTH_NOBREAK_SPACE
-} = constants$6;
-
-/**
- * parse
- */
-
-const parse$l = (input, options = {}) => {
- if (typeof input !== 'string') {
- throw new TypeError('Expected a string');
- }
-
- let opts = options || {};
- let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$1, opts.maxLength) : MAX_LENGTH$1;
- if (input.length > max) {
- throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
- }
-
- let ast = { type: 'root', input, nodes: [] };
- let stack = [ast];
- let block = ast;
- let prev = ast;
- let brackets = 0;
- let length = input.length;
- let index = 0;
- let depth = 0;
- let value;
-
- /**
- * Helpers
- */
-
- const advance = () => input[index++];
- const push = node => {
- if (node.type === 'text' && prev.type === 'dot') {
- prev.type = 'text';
- }
-
- if (prev && prev.type === 'text' && node.type === 'text') {
- prev.value += node.value;
- return;
- }
-
- block.nodes.push(node);
- node.parent = block;
- node.prev = prev;
- prev = node;
- return node;
- };
-
- push({ type: 'bos' });
-
- while (index < length) {
- block = stack[stack.length - 1];
- value = advance();
-
- /**
- * Invalid chars
- */
-
- if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
- continue;
- }
-
- /**
- * Escaped chars
- */
-
- if (value === CHAR_BACKSLASH) {
- push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
- continue;
- }
-
- /**
- * Right square bracket (literal): ']'
- */
-
- if (value === CHAR_RIGHT_SQUARE_BRACKET$1) {
- push({ type: 'text', value: '\\' + value });
- continue;
- }
-
- /**
- * Left square bracket: '['
- */
-
- if (value === CHAR_LEFT_SQUARE_BRACKET$1) {
- brackets++;
- let next;
-
- while (index < length && (next = advance())) {
- value += next;
-
- if (next === CHAR_LEFT_SQUARE_BRACKET$1) {
- brackets++;
- continue;
- }
-
- if (next === CHAR_BACKSLASH) {
- value += advance();
- continue;
- }
-
- if (next === CHAR_RIGHT_SQUARE_BRACKET$1) {
- brackets--;
-
- if (brackets === 0) {
- break;
- }
- }
- }
-
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Parentheses
- */
-
- if (value === CHAR_LEFT_PARENTHESES$1) {
- block = push({ type: 'paren', nodes: [] });
- stack.push(block);
- push({ type: 'text', value });
- continue;
- }
-
- if (value === CHAR_RIGHT_PARENTHESES$1) {
- if (block.type !== 'paren') {
- push({ type: 'text', value });
- continue;
- }
- block = stack.pop();
- push({ type: 'text', value });
- block = stack[stack.length - 1];
- continue;
- }
-
- /**
- * Quotes: '|"|`
- */
-
- if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
- let open = value;
- let next;
-
- if (options.keepQuotes !== true) {
- value = '';
- }
-
- while (index < length && (next = advance())) {
- if (next === CHAR_BACKSLASH) {
- value += next + advance();
- continue;
- }
-
- if (next === open) {
- if (options.keepQuotes === true) value += next;
- break;
- }
-
- value += next;
- }
-
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Left curly brace: '{'
- */
-
- if (value === CHAR_LEFT_CURLY_BRACE$1) {
- depth++;
-
- let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
- let brace = {
- type: 'brace',
- open: true,
- close: false,
- dollar,
- depth,
- commas: 0,
- ranges: 0,
- nodes: []
- };
-
- block = push(brace);
- stack.push(block);
- push({ type: 'open', value });
- continue;
- }
-
- /**
- * Right curly brace: '}'
- */
-
- if (value === CHAR_RIGHT_CURLY_BRACE$1) {
- if (block.type !== 'brace') {
- push({ type: 'text', value });
- continue;
- }
-
- let type = 'close';
- block = stack.pop();
- block.close = true;
-
- push({ type, value });
- depth--;
-
- block = stack[stack.length - 1];
- continue;
- }
-
- /**
- * Comma: ','
- */
-
- if (value === CHAR_COMMA$1 && depth > 0) {
- if (block.ranges > 0) {
- block.ranges = 0;
- let open = block.nodes.shift();
- block.nodes = [open, { type: 'text', value: stringify$4(block) }];
- }
-
- push({ type: 'comma', value });
- block.commas++;
- continue;
- }
-
- /**
- * Dot: '.'
- */
-
- if (value === CHAR_DOT$1 && depth > 0 && block.commas === 0) {
- let siblings = block.nodes;
-
- if (depth === 0 || siblings.length === 0) {
- push({ type: 'text', value });
- continue;
- }
-
- if (prev.type === 'dot') {
- block.range = [];
- prev.value += value;
- prev.type = 'range';
-
- if (block.nodes.length !== 3 && block.nodes.length !== 5) {
- block.invalid = true;
- block.ranges = 0;
- prev.type = 'text';
- continue;
- }
-
- block.ranges++;
- block.args = [];
- continue;
- }
-
- if (prev.type === 'range') {
- siblings.pop();
-
- let before = siblings[siblings.length - 1];
- before.value += prev.value + value;
- prev = before;
- block.ranges--;
- continue;
- }
-
- push({ type: 'dot', value });
- continue;
- }
-
- /**
- * Text
- */
-
- push({ type: 'text', value });
- }
-
- // Mark imbalanced braces and brackets as invalid
- do {
- block = stack.pop();
-
- if (block.type !== 'root') {
- block.nodes.forEach(node => {
- if (!node.nodes) {
- if (node.type === 'open') node.isOpen = true;
- if (node.type === 'close') node.isClose = true;
- if (!node.nodes) node.type = 'text';
- node.invalid = true;
- }
- });
-
- // get the location of the block on parent.nodes (block's siblings)
- let parent = stack[stack.length - 1];
- let index = parent.nodes.indexOf(block);
- // replace the (invalid) block with it's nodes
- parent.nodes.splice(index, 1, ...block.nodes);
- }
- } while (stack.length > 0);
-
- push({ type: 'eos' });
- return ast;
-};
-
-var parse_1$2 = parse$l;
-
-const stringify$3 = stringify$7;
-const compile = compile_1;
-const expand$2 = expand_1;
-const parse$k = parse_1$2;
-
-/**
- * Expand the given pattern or create a regex-compatible string.
- *
- * ```js
- * const braces = require('braces');
- * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
- * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
- * ```
- * @param {String} `str`
- * @param {Object} `options`
- * @return {String}
- * @api public
- */
-
-const braces$2 = (input, options = {}) => {
- let output = [];
-
- if (Array.isArray(input)) {
- for (let pattern of input) {
- let result = braces$2.create(pattern, options);
- if (Array.isArray(result)) {
- output.push(...result);
- } else {
- output.push(result);
- }
- }
- } else {
- output = [].concat(braces$2.create(input, options));
- }
-
- if (options && options.expand === true && options.nodupes === true) {
- output = [...new Set(output)];
- }
- return output;
-};
-
-/**
- * Parse the given `str` with the given `options`.
- *
- * ```js
- * // braces.parse(pattern, [, options]);
- * const ast = braces.parse('a/{b,c}/d');
- * console.log(ast);
- * ```
- * @param {String} pattern Brace pattern to parse
- * @param {Object} options
- * @return {Object} Returns an AST
- * @api public
- */
-
-braces$2.parse = (input, options = {}) => parse$k(input, options);
-
-/**
- * Creates a braces string from an AST, or an AST node.
- *
- * ```js
- * const braces = require('braces');
- * let ast = braces.parse('foo/{a,b}/bar');
- * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
- * ```
- * @param {String} `input` Brace pattern or AST.
- * @param {Object} `options`
- * @return {Array} Returns an array of expanded values.
- * @api public
- */
-
-braces$2.stringify = (input, options = {}) => {
- if (typeof input === 'string') {
- return stringify$3(braces$2.parse(input, options), options);
- }
- return stringify$3(input, options);
-};
-
-/**
- * Compiles a brace pattern into a regex-compatible, optimized string.
- * This method is called by the main [braces](#braces) function by default.
- *
- * ```js
- * const braces = require('braces');
- * console.log(braces.compile('a/{b,c}/d'));
- * //=> ['a/(b|c)/d']
- * ```
- * @param {String} `input` Brace pattern or AST.
- * @param {Object} `options`
- * @return {Array} Returns an array of expanded values.
- * @api public
- */
-
-braces$2.compile = (input, options = {}) => {
- if (typeof input === 'string') {
- input = braces$2.parse(input, options);
- }
- return compile(input, options);
-};
-
-/**
- * Expands a brace pattern into an array. This method is called by the
- * main [braces](#braces) function when `options.expand` is true. Before
- * using this method it's recommended that you read the [performance notes](#performance))
- * and advantages of using [.compile](#compile) instead.
- *
- * ```js
- * const braces = require('braces');
- * console.log(braces.expand('a/{b,c}/d'));
- * //=> ['a/b/d', 'a/c/d'];
- * ```
- * @param {String} `pattern` Brace pattern
- * @param {Object} `options`
- * @return {Array} Returns an array of expanded values.
- * @api public
- */
-
-braces$2.expand = (input, options = {}) => {
- if (typeof input === 'string') {
- input = braces$2.parse(input, options);
- }
-
- let result = expand$2(input, options);
-
- // filter out empty strings if specified
- if (options.noempty === true) {
- result = result.filter(Boolean);
- }
-
- // filter out duplicates if specified
- if (options.nodupes === true) {
- result = [...new Set(result)];
- }
-
- return result;
-};
-
-/**
- * Processes a brace pattern and returns either an expanded array
- * (if `options.expand` is true), a highly optimized regex-compatible string.
- * This method is called by the main [braces](#braces) function.
- *
- * ```js
- * const braces = require('braces');
- * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
- * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
- * ```
- * @param {String} `pattern` Brace pattern
- * @param {Object} `options`
- * @return {Array} Returns an array of expanded values.
- * @api public
- */
-
-braces$2.create = (input, options = {}) => {
- if (input === '' || input.length < 3) {
- return [input];
- }
-
- return options.expand !== true
- ? braces$2.compile(input, options)
- : braces$2.expand(input, options);
-};
-
-/**
- * Expose "braces"
- */
-
-var braces_1 = braces$2;
-
-var utils$f = {};
-
-const path$q = path__default;
-const WIN_SLASH = '\\\\/';
-const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
-
-/**
- * Posix glob regex
- */
-
-const DOT_LITERAL = '\\.';
-const PLUS_LITERAL = '\\+';
-const QMARK_LITERAL = '\\?';
-const SLASH_LITERAL = '\\/';
-const ONE_CHAR = '(?=.)';
-const QMARK = '[^/]';
-const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
-const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
-const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
-const NO_DOT = `(?!${DOT_LITERAL})`;
-const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
-const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
-const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
-const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
-const STAR$1 = `${QMARK}*?`;
-
-const POSIX_CHARS = {
- DOT_LITERAL,
- PLUS_LITERAL,
- QMARK_LITERAL,
- SLASH_LITERAL,
- ONE_CHAR,
- QMARK,
- END_ANCHOR,
- DOTS_SLASH,
- NO_DOT,
- NO_DOTS,
- NO_DOT_SLASH,
- NO_DOTS_SLASH,
- QMARK_NO_DOT,
- STAR: STAR$1,
- START_ANCHOR
-};
-
-/**
- * Windows glob regex
- */
-
-const WINDOWS_CHARS = {
- ...POSIX_CHARS,
-
- SLASH_LITERAL: `[${WIN_SLASH}]`,
- QMARK: WIN_NO_SLASH,
- STAR: `${WIN_NO_SLASH}*?`,
- DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
- NO_DOT: `(?!${DOT_LITERAL})`,
- NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
- NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
- NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
- QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
- START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
- END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
-};
-
-/**
- * POSIX Bracket Regex
- */
-
-const POSIX_REGEX_SOURCE$1 = {
- alnum: 'a-zA-Z0-9',
- alpha: 'a-zA-Z',
- ascii: '\\x00-\\x7F',
- blank: ' \\t',
- cntrl: '\\x00-\\x1F\\x7F',
- digit: '0-9',
- graph: '\\x21-\\x7E',
- lower: 'a-z',
- print: '\\x20-\\x7E ',
- punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
- space: ' \\t\\r\\n\\v\\f',
- upper: 'A-Z',
- word: 'A-Za-z0-9_',
- xdigit: 'A-Fa-f0-9'
-};
-
-var constants$5 = {
- MAX_LENGTH: 1024 * 64,
- POSIX_REGEX_SOURCE: POSIX_REGEX_SOURCE$1,
-
- // regular expressions
- REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
- REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
- REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
- REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
- REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
- REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
-
- // Replace globs with equivalent patterns to reduce parsing time.
- REPLACEMENTS: {
- '***': '*',
- '**/**': '**',
- '**/**/**': '**'
- },
-
- // Digits
- CHAR_0: 48, /* 0 */
- CHAR_9: 57, /* 9 */
-
- // Alphabet chars.
- CHAR_UPPERCASE_A: 65, /* A */
- CHAR_LOWERCASE_A: 97, /* a */
- CHAR_UPPERCASE_Z: 90, /* Z */
- CHAR_LOWERCASE_Z: 122, /* z */
-
- CHAR_LEFT_PARENTHESES: 40, /* ( */
- CHAR_RIGHT_PARENTHESES: 41, /* ) */
-
- CHAR_ASTERISK: 42, /* * */
-
- // Non-alphabetic chars.
- CHAR_AMPERSAND: 38, /* & */
- CHAR_AT: 64, /* @ */
- CHAR_BACKWARD_SLASH: 92, /* \ */
- CHAR_CARRIAGE_RETURN: 13, /* \r */
- CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
- CHAR_COLON: 58, /* : */
- CHAR_COMMA: 44, /* , */
- CHAR_DOT: 46, /* . */
- CHAR_DOUBLE_QUOTE: 34, /* " */
- CHAR_EQUAL: 61, /* = */
- CHAR_EXCLAMATION_MARK: 33, /* ! */
- CHAR_FORM_FEED: 12, /* \f */
- CHAR_FORWARD_SLASH: 47, /* / */
- CHAR_GRAVE_ACCENT: 96, /* ` */
- CHAR_HASH: 35, /* # */
- CHAR_HYPHEN_MINUS: 45, /* - */
- CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
- CHAR_LEFT_CURLY_BRACE: 123, /* { */
- CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
- CHAR_LINE_FEED: 10, /* \n */
- CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
- CHAR_PERCENT: 37, /* % */
- CHAR_PLUS: 43, /* + */
- CHAR_QUESTION_MARK: 63, /* ? */
- CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
- CHAR_RIGHT_CURLY_BRACE: 125, /* } */
- CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
- CHAR_SEMICOLON: 59, /* ; */
- CHAR_SINGLE_QUOTE: 39, /* ' */
- CHAR_SPACE: 32, /* */
- CHAR_TAB: 9, /* \t */
- CHAR_UNDERSCORE: 95, /* _ */
- CHAR_VERTICAL_LINE: 124, /* | */
- CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
-
- SEP: path$q.sep,
-
- /**
- * Create EXTGLOB_CHARS
- */
-
- extglobChars(chars) {
- return {
- '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
- '?': { type: 'qmark', open: '(?:', close: ')?' },
- '+': { type: 'plus', open: '(?:', close: ')+' },
- '*': { type: 'star', open: '(?:', close: ')*' },
- '@': { type: 'at', open: '(?:', close: ')' }
- };
- },
-
- /**
- * Create GLOB_CHARS
- */
-
- globChars(win32) {
- return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
- }
-};
-
-(function (exports) {
-
-const path = path__default;
-const win32 = process.platform === 'win32';
-const {
- REGEX_BACKSLASH,
- REGEX_REMOVE_BACKSLASH,
- REGEX_SPECIAL_CHARS,
- REGEX_SPECIAL_CHARS_GLOBAL
-} = constants$5;
-
-exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
-exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
-exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
-exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
-exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
-
-exports.removeBackslashes = str => {
- return str.replace(REGEX_REMOVE_BACKSLASH, match => {
- return match === '\\' ? '' : match;
- });
-};
-
-exports.supportsLookbehinds = () => {
- const segs = process.version.slice(1).split('.').map(Number);
- if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
- return true;
- }
- return false;
-};
-
-exports.isWindows = options => {
- if (options && typeof options.windows === 'boolean') {
- return options.windows;
- }
- return win32 === true || path.sep === '\\';
-};
-
-exports.escapeLast = (input, char, lastIdx) => {
- const idx = input.lastIndexOf(char, lastIdx);
- if (idx === -1) return input;
- if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
- return `${input.slice(0, idx)}\\${input.slice(idx)}`;
-};
-
-exports.removePrefix = (input, state = {}) => {
- let output = input;
- if (output.startsWith('./')) {
- output = output.slice(2);
- state.prefix = './';
- }
- return output;
-};
-
-exports.wrapOutput = (input, state = {}, options = {}) => {
- const prepend = options.contains ? '' : '^';
- const append = options.contains ? '' : '$';
-
- let output = `${prepend}(?:${input})${append}`;
- if (state.negated === true) {
- output = `(?:^(?!${output}).*$)`;
- }
- return output;
-};
-}(utils$f));
-
-const utils$e = utils$f;
-const {
- CHAR_ASTERISK, /* * */
- CHAR_AT, /* @ */
- CHAR_BACKWARD_SLASH, /* \ */
- CHAR_COMMA, /* , */
- CHAR_DOT, /* . */
- CHAR_EXCLAMATION_MARK, /* ! */
- CHAR_FORWARD_SLASH, /* / */
- CHAR_LEFT_CURLY_BRACE, /* { */
- CHAR_LEFT_PARENTHESES, /* ( */
- CHAR_LEFT_SQUARE_BRACKET, /* [ */
- CHAR_PLUS, /* + */
- CHAR_QUESTION_MARK, /* ? */
- CHAR_RIGHT_CURLY_BRACE, /* } */
- CHAR_RIGHT_PARENTHESES, /* ) */
- CHAR_RIGHT_SQUARE_BRACKET /* ] */
-} = constants$5;
-
-const isPathSeparator = code => {
- return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
-};
-
-const depth = token => {
- if (token.isPrefix !== true) {
- token.depth = token.isGlobstar ? Infinity : 1;
- }
-};
-
-/**
- * Quickly scans a glob pattern and returns an object with a handful of
- * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
- * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not
- * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).
- *
- * ```js
- * const pm = require('picomatch');
- * console.log(pm.scan('foo/bar/*.js'));
- * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
- * ```
- * @param {String} `str`
- * @param {Object} `options`
- * @return {Object} Returns an object with tokens and regex source string.
- * @api public
- */
-
-const scan$1 = (input, options) => {
- const opts = options || {};
-
- const length = input.length - 1;
- const scanToEnd = opts.parts === true || opts.scanToEnd === true;
- const slashes = [];
- const tokens = [];
- const parts = [];
-
- let str = input;
- let index = -1;
- let start = 0;
- let lastIndex = 0;
- let isBrace = false;
- let isBracket = false;
- let isGlob = false;
- let isExtglob = false;
- let isGlobstar = false;
- let braceEscaped = false;
- let backslashes = false;
- let negated = false;
- let negatedExtglob = false;
- let finished = false;
- let braces = 0;
- let prev;
- let code;
- let token = { value: '', depth: 0, isGlob: false };
-
- const eos = () => index >= length;
- const peek = () => str.charCodeAt(index + 1);
- const advance = () => {
- prev = code;
- return str.charCodeAt(++index);
- };
-
- while (index < length) {
- code = advance();
- let next;
-
- if (code === CHAR_BACKWARD_SLASH) {
- backslashes = token.backslashes = true;
- code = advance();
-
- if (code === CHAR_LEFT_CURLY_BRACE) {
- braceEscaped = true;
- }
- continue;
- }
-
- if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
- braces++;
-
- while (eos() !== true && (code = advance())) {
- if (code === CHAR_BACKWARD_SLASH) {
- backslashes = token.backslashes = true;
- advance();
- continue;
- }
-
- if (code === CHAR_LEFT_CURLY_BRACE) {
- braces++;
- continue;
- }
-
- if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
- isBrace = token.isBrace = true;
- isGlob = token.isGlob = true;
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
-
- if (braceEscaped !== true && code === CHAR_COMMA) {
- isBrace = token.isBrace = true;
- isGlob = token.isGlob = true;
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
-
- if (code === CHAR_RIGHT_CURLY_BRACE) {
- braces--;
-
- if (braces === 0) {
- braceEscaped = false;
- isBrace = token.isBrace = true;
- finished = true;
- break;
- }
- }
- }
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
-
- if (code === CHAR_FORWARD_SLASH) {
- slashes.push(index);
- tokens.push(token);
- token = { value: '', depth: 0, isGlob: false };
-
- if (finished === true) continue;
- if (prev === CHAR_DOT && index === (start + 1)) {
- start += 2;
- continue;
- }
-
- lastIndex = index + 1;
- continue;
- }
-
- if (opts.noext !== true) {
- const isExtglobChar = code === CHAR_PLUS
- || code === CHAR_AT
- || code === CHAR_ASTERISK
- || code === CHAR_QUESTION_MARK
- || code === CHAR_EXCLAMATION_MARK;
-
- if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
- isGlob = token.isGlob = true;
- isExtglob = token.isExtglob = true;
- finished = true;
- if (code === CHAR_EXCLAMATION_MARK && index === start) {
- negatedExtglob = true;
- }
-
- if (scanToEnd === true) {
- while (eos() !== true && (code = advance())) {
- if (code === CHAR_BACKWARD_SLASH) {
- backslashes = token.backslashes = true;
- code = advance();
- continue;
- }
-
- if (code === CHAR_RIGHT_PARENTHESES) {
- isGlob = token.isGlob = true;
- finished = true;
- break;
- }
- }
- continue;
- }
- break;
- }
- }
-
- if (code === CHAR_ASTERISK) {
- if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
- isGlob = token.isGlob = true;
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
- break;
- }
-
- if (code === CHAR_QUESTION_MARK) {
- isGlob = token.isGlob = true;
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
- break;
- }
-
- if (code === CHAR_LEFT_SQUARE_BRACKET) {
- while (eos() !== true && (next = advance())) {
- if (next === CHAR_BACKWARD_SLASH) {
- backslashes = token.backslashes = true;
- advance();
- continue;
- }
-
- if (next === CHAR_RIGHT_SQUARE_BRACKET) {
- isBracket = token.isBracket = true;
- isGlob = token.isGlob = true;
- finished = true;
- break;
- }
- }
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
-
- if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
- negated = token.negated = true;
- start++;
- continue;
- }
-
- if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
- isGlob = token.isGlob = true;
-
- if (scanToEnd === true) {
- while (eos() !== true && (code = advance())) {
- if (code === CHAR_LEFT_PARENTHESES) {
- backslashes = token.backslashes = true;
- code = advance();
- continue;
- }
-
- if (code === CHAR_RIGHT_PARENTHESES) {
- finished = true;
- break;
- }
- }
- continue;
- }
- break;
- }
-
- if (isGlob === true) {
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
- }
-
- if (opts.noext === true) {
- isExtglob = false;
- isGlob = false;
- }
-
- let base = str;
- let prefix = '';
- let glob = '';
-
- if (start > 0) {
- prefix = str.slice(0, start);
- str = str.slice(start);
- lastIndex -= start;
- }
-
- if (base && isGlob === true && lastIndex > 0) {
- base = str.slice(0, lastIndex);
- glob = str.slice(lastIndex);
- } else if (isGlob === true) {
- base = '';
- glob = str;
- } else {
- base = str;
- }
-
- if (base && base !== '' && base !== '/' && base !== str) {
- if (isPathSeparator(base.charCodeAt(base.length - 1))) {
- base = base.slice(0, -1);
- }
- }
-
- if (opts.unescape === true) {
- if (glob) glob = utils$e.removeBackslashes(glob);
-
- if (base && backslashes === true) {
- base = utils$e.removeBackslashes(base);
- }
- }
-
- const state = {
- prefix,
- input,
- start,
- base,
- glob,
- isBrace,
- isBracket,
- isGlob,
- isExtglob,
- isGlobstar,
- negated,
- negatedExtglob
- };
-
- if (opts.tokens === true) {
- state.maxDepth = 0;
- if (!isPathSeparator(code)) {
- tokens.push(token);
- }
- state.tokens = tokens;
- }
-
- if (opts.parts === true || opts.tokens === true) {
- let prevIndex;
-
- for (let idx = 0; idx < slashes.length; idx++) {
- const n = prevIndex ? prevIndex + 1 : start;
- const i = slashes[idx];
- const value = input.slice(n, i);
- if (opts.tokens) {
- if (idx === 0 && start !== 0) {
- tokens[idx].isPrefix = true;
- tokens[idx].value = prefix;
- } else {
- tokens[idx].value = value;
- }
- depth(tokens[idx]);
- state.maxDepth += tokens[idx].depth;
- }
- if (idx !== 0 || value !== '') {
- parts.push(value);
- }
- prevIndex = i;
- }
-
- if (prevIndex && prevIndex + 1 < input.length) {
- const value = input.slice(prevIndex + 1);
- parts.push(value);
-
- if (opts.tokens) {
- tokens[tokens.length - 1].value = value;
- depth(tokens[tokens.length - 1]);
- state.maxDepth += tokens[tokens.length - 1].depth;
- }
- }
-
- state.slashes = slashes;
- state.parts = parts;
- }
-
- return state;
-};
-
-var scan_1 = scan$1;
-
-const constants$4 = constants$5;
-const utils$d = utils$f;
-
-/**
- * Constants
- */
-
-const {
- MAX_LENGTH,
- POSIX_REGEX_SOURCE,
- REGEX_NON_SPECIAL_CHARS,
- REGEX_SPECIAL_CHARS_BACKREF,
- REPLACEMENTS
-} = constants$4;
-
-/**
- * Helpers
- */
-
-const expandRange = (args, options) => {
- if (typeof options.expandRange === 'function') {
- return options.expandRange(...args, options);
- }
-
- args.sort();
- const value = `[${args.join('-')}]`;
-
- return value;
-};
-
-/**
- * Create the message for a syntax error
- */
-
-const syntaxError = (type, char) => {
- return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
-};
-
-/**
- * Parse the given input string.
- * @param {String} input
- * @param {Object} options
- * @return {Object}
- */
-
-const parse$j = (input, options) => {
- if (typeof input !== 'string') {
- throw new TypeError('Expected a string');
- }
-
- input = REPLACEMENTS[input] || input;
-
- const opts = { ...options };
- const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
-
- let len = input.length;
- if (len > max) {
- throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
- }
-
- const bos = { type: 'bos', value: '', output: opts.prepend || '' };
- const tokens = [bos];
-
- const capture = opts.capture ? '' : '?:';
- const win32 = utils$d.isWindows(options);
-
- // create constants based on platform, for windows or posix
- const PLATFORM_CHARS = constants$4.globChars(win32);
- const EXTGLOB_CHARS = constants$4.extglobChars(PLATFORM_CHARS);
-
- const {
- DOT_LITERAL,
- PLUS_LITERAL,
- SLASH_LITERAL,
- ONE_CHAR,
- DOTS_SLASH,
- NO_DOT,
- NO_DOT_SLASH,
- NO_DOTS_SLASH,
- QMARK,
- QMARK_NO_DOT,
- STAR,
- START_ANCHOR
- } = PLATFORM_CHARS;
-
- const globstar = opts => {
- return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
- };
-
- const nodot = opts.dot ? '' : NO_DOT;
- const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
- let star = opts.bash === true ? globstar(opts) : STAR;
-
- if (opts.capture) {
- star = `(${star})`;
- }
-
- // minimatch options support
- if (typeof opts.noext === 'boolean') {
- opts.noextglob = opts.noext;
- }
-
- const state = {
- input,
- index: -1,
- start: 0,
- dot: opts.dot === true,
- consumed: '',
- output: '',
- prefix: '',
- backtrack: false,
- negated: false,
- brackets: 0,
- braces: 0,
- parens: 0,
- quotes: 0,
- globstar: false,
- tokens
- };
-
- input = utils$d.removePrefix(input, state);
- len = input.length;
-
- const extglobs = [];
- const braces = [];
- const stack = [];
- let prev = bos;
- let value;
-
- /**
- * Tokenizing helpers
- */
-
- const eos = () => state.index === len - 1;
- const peek = state.peek = (n = 1) => input[state.index + n];
- const advance = state.advance = () => input[++state.index] || '';
- const remaining = () => input.slice(state.index + 1);
- const consume = (value = '', num = 0) => {
- state.consumed += value;
- state.index += num;
- };
-
- const append = token => {
- state.output += token.output != null ? token.output : token.value;
- consume(token.value);
- };
-
- const negate = () => {
- let count = 1;
-
- while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
- advance();
- state.start++;
- count++;
- }
-
- if (count % 2 === 0) {
- return false;
- }
-
- state.negated = true;
- state.start++;
- return true;
- };
-
- const increment = type => {
- state[type]++;
- stack.push(type);
- };
-
- const decrement = type => {
- state[type]--;
- stack.pop();
- };
-
- /**
- * Push tokens onto the tokens array. This helper speeds up
- * tokenizing by 1) helping us avoid backtracking as much as possible,
- * and 2) helping us avoid creating extra tokens when consecutive
- * characters are plain text. This improves performance and simplifies
- * lookbehinds.
- */
-
- const push = tok => {
- if (prev.type === 'globstar') {
- const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
- const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
-
- if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
- state.output = state.output.slice(0, -prev.output.length);
- prev.type = 'star';
- prev.value = '*';
- prev.output = star;
- state.output += prev.output;
- }
- }
-
- if (extglobs.length && tok.type !== 'paren') {
- extglobs[extglobs.length - 1].inner += tok.value;
- }
-
- if (tok.value || tok.output) append(tok);
- if (prev && prev.type === 'text' && tok.type === 'text') {
- prev.value += tok.value;
- prev.output = (prev.output || '') + tok.value;
- return;
- }
-
- tok.prev = prev;
- tokens.push(tok);
- prev = tok;
- };
-
- const extglobOpen = (type, value) => {
- const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
-
- token.prev = prev;
- token.parens = state.parens;
- token.output = state.output;
- const output = (opts.capture ? '(' : '') + token.open;
-
- increment('parens');
- push({ type, value, output: state.output ? '' : ONE_CHAR });
- push({ type: 'paren', extglob: true, value: advance(), output });
- extglobs.push(token);
- };
-
- const extglobClose = token => {
- let output = token.close + (opts.capture ? ')' : '');
- let rest;
-
- if (token.type === 'negate') {
- let extglobStar = star;
-
- if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
- extglobStar = globstar(opts);
- }
-
- if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
- output = token.close = `)$))${extglobStar}`;
- }
-
- if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
- output = token.close = `)${rest})${extglobStar})`;
- }
-
- if (token.prev.type === 'bos') {
- state.negatedExtglob = true;
- }
- }
-
- push({ type: 'paren', extglob: true, value, output });
- decrement('parens');
- };
-
- /**
- * Fast paths
- */
-
- if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
- let backslashes = false;
-
- let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
- if (first === '\\') {
- backslashes = true;
- return m;
- }
-
- if (first === '?') {
- if (esc) {
- return esc + first + (rest ? QMARK.repeat(rest.length) : '');
- }
- if (index === 0) {
- return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
- }
- return QMARK.repeat(chars.length);
- }
-
- if (first === '.') {
- return DOT_LITERAL.repeat(chars.length);
- }
-
- if (first === '*') {
- if (esc) {
- return esc + first + (rest ? star : '');
- }
- return star;
- }
- return esc ? m : `\\${m}`;
- });
-
- if (backslashes === true) {
- if (opts.unescape === true) {
- output = output.replace(/\\/g, '');
- } else {
- output = output.replace(/\\+/g, m => {
- return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
- });
- }
- }
-
- if (output === input && opts.contains === true) {
- state.output = input;
- return state;
- }
-
- state.output = utils$d.wrapOutput(output, state, options);
- return state;
- }
-
- /**
- * Tokenize input until we reach end-of-string
- */
-
- while (!eos()) {
- value = advance();
-
- if (value === '\u0000') {
- continue;
- }
-
- /**
- * Escaped characters
- */
-
- if (value === '\\') {
- const next = peek();
-
- if (next === '/' && opts.bash !== true) {
- continue;
- }
-
- if (next === '.' || next === ';') {
- continue;
- }
-
- if (!next) {
- value += '\\';
- push({ type: 'text', value });
- continue;
- }
-
- // collapse slashes to reduce potential for exploits
- const match = /^\\+/.exec(remaining());
- let slashes = 0;
-
- if (match && match[0].length > 2) {
- slashes = match[0].length;
- state.index += slashes;
- if (slashes % 2 !== 0) {
- value += '\\';
- }
- }
-
- if (opts.unescape === true) {
- value = advance();
- } else {
- value += advance();
- }
-
- if (state.brackets === 0) {
- push({ type: 'text', value });
- continue;
- }
- }
-
- /**
- * If we're inside a regex character class, continue
- * until we reach the closing bracket.
- */
-
- if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
- if (opts.posix !== false && value === ':') {
- const inner = prev.value.slice(1);
- if (inner.includes('[')) {
- prev.posix = true;
-
- if (inner.includes(':')) {
- const idx = prev.value.lastIndexOf('[');
- const pre = prev.value.slice(0, idx);
- const rest = prev.value.slice(idx + 2);
- const posix = POSIX_REGEX_SOURCE[rest];
- if (posix) {
- prev.value = pre + posix;
- state.backtrack = true;
- advance();
-
- if (!bos.output && tokens.indexOf(prev) === 1) {
- bos.output = ONE_CHAR;
- }
- continue;
- }
- }
- }
- }
-
- if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
- value = `\\${value}`;
- }
-
- if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
- value = `\\${value}`;
- }
-
- if (opts.posix === true && value === '!' && prev.value === '[') {
- value = '^';
- }
-
- prev.value += value;
- append({ value });
- continue;
- }
-
- /**
- * If we're inside a quoted string, continue
- * until we reach the closing double quote.
- */
-
- if (state.quotes === 1 && value !== '"') {
- value = utils$d.escapeRegex(value);
- prev.value += value;
- append({ value });
- continue;
- }
-
- /**
- * Double quotes
- */
-
- if (value === '"') {
- state.quotes = state.quotes === 1 ? 0 : 1;
- if (opts.keepQuotes === true) {
- push({ type: 'text', value });
- }
- continue;
- }
-
- /**
- * Parentheses
- */
-
- if (value === '(') {
- increment('parens');
- push({ type: 'paren', value });
- continue;
- }
-
- if (value === ')') {
- if (state.parens === 0 && opts.strictBrackets === true) {
- throw new SyntaxError(syntaxError('opening', '('));
- }
-
- const extglob = extglobs[extglobs.length - 1];
- if (extglob && state.parens === extglob.parens + 1) {
- extglobClose(extglobs.pop());
- continue;
- }
-
- push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
- decrement('parens');
- continue;
- }
-
- /**
- * Square brackets
- */
-
- if (value === '[') {
- if (opts.nobracket === true || !remaining().includes(']')) {
- if (opts.nobracket !== true && opts.strictBrackets === true) {
- throw new SyntaxError(syntaxError('closing', ']'));
- }
-
- value = `\\${value}`;
- } else {
- increment('brackets');
- }
-
- push({ type: 'bracket', value });
- continue;
- }
-
- if (value === ']') {
- if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
- push({ type: 'text', value, output: `\\${value}` });
- continue;
- }
-
- if (state.brackets === 0) {
- if (opts.strictBrackets === true) {
- throw new SyntaxError(syntaxError('opening', '['));
- }
-
- push({ type: 'text', value, output: `\\${value}` });
- continue;
- }
-
- decrement('brackets');
-
- const prevValue = prev.value.slice(1);
- if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
- value = `/${value}`;
- }
-
- prev.value += value;
- append({ value });
-
- // when literal brackets are explicitly disabled
- // assume we should match with a regex character class
- if (opts.literalBrackets === false || utils$d.hasRegexChars(prevValue)) {
- continue;
- }
-
- const escaped = utils$d.escapeRegex(prev.value);
- state.output = state.output.slice(0, -prev.value.length);
-
- // when literal brackets are explicitly enabled
- // assume we should escape the brackets to match literal characters
- if (opts.literalBrackets === true) {
- state.output += escaped;
- prev.value = escaped;
- continue;
- }
-
- // when the user specifies nothing, try to match both
- prev.value = `(${capture}${escaped}|${prev.value})`;
- state.output += prev.value;
- continue;
- }
-
- /**
- * Braces
- */
-
- if (value === '{' && opts.nobrace !== true) {
- increment('braces');
-
- const open = {
- type: 'brace',
- value,
- output: '(',
- outputIndex: state.output.length,
- tokensIndex: state.tokens.length
- };
-
- braces.push(open);
- push(open);
- continue;
- }
-
- if (value === '}') {
- const brace = braces[braces.length - 1];
-
- if (opts.nobrace === true || !brace) {
- push({ type: 'text', value, output: value });
- continue;
- }
-
- let output = ')';
-
- if (brace.dots === true) {
- const arr = tokens.slice();
- const range = [];
-
- for (let i = arr.length - 1; i >= 0; i--) {
- tokens.pop();
- if (arr[i].type === 'brace') {
- break;
- }
- if (arr[i].type !== 'dots') {
- range.unshift(arr[i].value);
- }
- }
-
- output = expandRange(range, opts);
- state.backtrack = true;
- }
-
- if (brace.comma !== true && brace.dots !== true) {
- const out = state.output.slice(0, brace.outputIndex);
- const toks = state.tokens.slice(brace.tokensIndex);
- brace.value = brace.output = '\\{';
- value = output = '\\}';
- state.output = out;
- for (const t of toks) {
- state.output += (t.output || t.value);
- }
- }
-
- push({ type: 'brace', value, output });
- decrement('braces');
- braces.pop();
- continue;
- }
-
- /**
- * Pipes
- */
-
- if (value === '|') {
- if (extglobs.length > 0) {
- extglobs[extglobs.length - 1].conditions++;
- }
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Commas
- */
-
- if (value === ',') {
- let output = value;
-
- const brace = braces[braces.length - 1];
- if (brace && stack[stack.length - 1] === 'braces') {
- brace.comma = true;
- output = '|';
- }
-
- push({ type: 'comma', value, output });
- continue;
- }
-
- /**
- * Slashes
- */
-
- if (value === '/') {
- // if the beginning of the glob is "./", advance the start
- // to the current index, and don't add the "./" characters
- // to the state. This greatly simplifies lookbehinds when
- // checking for BOS characters like "!" and "." (not "./")
- if (prev.type === 'dot' && state.index === state.start + 1) {
- state.start = state.index + 1;
- state.consumed = '';
- state.output = '';
- tokens.pop();
- prev = bos; // reset "prev" to the first token
- continue;
- }
-
- push({ type: 'slash', value, output: SLASH_LITERAL });
- continue;
- }
-
- /**
- * Dots
- */
-
- if (value === '.') {
- if (state.braces > 0 && prev.type === 'dot') {
- if (prev.value === '.') prev.output = DOT_LITERAL;
- const brace = braces[braces.length - 1];
- prev.type = 'dots';
- prev.output += value;
- prev.value += value;
- brace.dots = true;
- continue;
- }
-
- if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
- push({ type: 'text', value, output: DOT_LITERAL });
- continue;
- }
-
- push({ type: 'dot', value, output: DOT_LITERAL });
- continue;
- }
-
- /**
- * Question marks
- */
-
- if (value === '?') {
- const isGroup = prev && prev.value === '(';
- if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
- extglobOpen('qmark', value);
- continue;
- }
-
- if (prev && prev.type === 'paren') {
- const next = peek();
- let output = value;
-
- if (next === '<' && !utils$d.supportsLookbehinds()) {
- throw new Error('Node.js v10 or higher is required for regex lookbehinds');
- }
-
- if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
- output = `\\${value}`;
- }
-
- push({ type: 'text', value, output });
- continue;
- }
-
- if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
- push({ type: 'qmark', value, output: QMARK_NO_DOT });
- continue;
- }
-
- push({ type: 'qmark', value, output: QMARK });
- continue;
- }
-
- /**
- * Exclamation
- */
-
- if (value === '!') {
- if (opts.noextglob !== true && peek() === '(') {
- if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
- extglobOpen('negate', value);
- continue;
- }
- }
-
- if (opts.nonegate !== true && state.index === 0) {
- negate();
- continue;
- }
- }
-
- /**
- * Plus
- */
-
- if (value === '+') {
- if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
- extglobOpen('plus', value);
- continue;
- }
-
- if ((prev && prev.value === '(') || opts.regex === false) {
- push({ type: 'plus', value, output: PLUS_LITERAL });
- continue;
- }
-
- if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
- push({ type: 'plus', value });
- continue;
- }
-
- push({ type: 'plus', value: PLUS_LITERAL });
- continue;
- }
-
- /**
- * Plain text
- */
-
- if (value === '@') {
- if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
- push({ type: 'at', extglob: true, value, output: '' });
- continue;
- }
-
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Plain text
- */
-
- if (value !== '*') {
- if (value === '$' || value === '^') {
- value = `\\${value}`;
- }
-
- const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
- if (match) {
- value += match[0];
- state.index += match[0].length;
- }
-
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Stars
- */
-
- if (prev && (prev.type === 'globstar' || prev.star === true)) {
- prev.type = 'star';
- prev.star = true;
- prev.value += value;
- prev.output = star;
- state.backtrack = true;
- state.globstar = true;
- consume(value);
- continue;
- }
-
- let rest = remaining();
- if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
- extglobOpen('star', value);
- continue;
- }
-
- if (prev.type === 'star') {
- if (opts.noglobstar === true) {
- consume(value);
- continue;
- }
-
- const prior = prev.prev;
- const before = prior.prev;
- const isStart = prior.type === 'slash' || prior.type === 'bos';
- const afterStar = before && (before.type === 'star' || before.type === 'globstar');
-
- if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
- push({ type: 'star', value, output: '' });
- continue;
- }
-
- const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
- const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
- if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
- push({ type: 'star', value, output: '' });
- continue;
- }
-
- // strip consecutive `/**/`
- while (rest.slice(0, 3) === '/**') {
- const after = input[state.index + 4];
- if (after && after !== '/') {
- break;
- }
- rest = rest.slice(3);
- consume('/**', 3);
- }
-
- if (prior.type === 'bos' && eos()) {
- prev.type = 'globstar';
- prev.value += value;
- prev.output = globstar(opts);
- state.output = prev.output;
- state.globstar = true;
- consume(value);
- continue;
- }
-
- if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
- state.output = state.output.slice(0, -(prior.output + prev.output).length);
- prior.output = `(?:${prior.output}`;
-
- prev.type = 'globstar';
- prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
- prev.value += value;
- state.globstar = true;
- state.output += prior.output + prev.output;
- consume(value);
- continue;
- }
-
- if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
- const end = rest[1] !== void 0 ? '|$' : '';
-
- state.output = state.output.slice(0, -(prior.output + prev.output).length);
- prior.output = `(?:${prior.output}`;
-
- prev.type = 'globstar';
- prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
- prev.value += value;
-
- state.output += prior.output + prev.output;
- state.globstar = true;
-
- consume(value + advance());
-
- push({ type: 'slash', value: '/', output: '' });
- continue;
- }
-
- if (prior.type === 'bos' && rest[0] === '/') {
- prev.type = 'globstar';
- prev.value += value;
- prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
- state.output = prev.output;
- state.globstar = true;
- consume(value + advance());
- push({ type: 'slash', value: '/', output: '' });
- continue;
- }
-
- // remove single star from output
- state.output = state.output.slice(0, -prev.output.length);
-
- // reset previous token to globstar
- prev.type = 'globstar';
- prev.output = globstar(opts);
- prev.value += value;
-
- // reset output with globstar
- state.output += prev.output;
- state.globstar = true;
- consume(value);
- continue;
- }
-
- const token = { type: 'star', value, output: star };
-
- if (opts.bash === true) {
- token.output = '.*?';
- if (prev.type === 'bos' || prev.type === 'slash') {
- token.output = nodot + token.output;
- }
- push(token);
- continue;
- }
-
- if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
- token.output = value;
- push(token);
- continue;
- }
-
- if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
- if (prev.type === 'dot') {
- state.output += NO_DOT_SLASH;
- prev.output += NO_DOT_SLASH;
-
- } else if (opts.dot === true) {
- state.output += NO_DOTS_SLASH;
- prev.output += NO_DOTS_SLASH;
-
- } else {
- state.output += nodot;
- prev.output += nodot;
- }
-
- if (peek() !== '*') {
- state.output += ONE_CHAR;
- prev.output += ONE_CHAR;
- }
- }
-
- push(token);
- }
-
- while (state.brackets > 0) {
- if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
- state.output = utils$d.escapeLast(state.output, '[');
- decrement('brackets');
- }
-
- while (state.parens > 0) {
- if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
- state.output = utils$d.escapeLast(state.output, '(');
- decrement('parens');
- }
-
- while (state.braces > 0) {
- if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
- state.output = utils$d.escapeLast(state.output, '{');
- decrement('braces');
- }
-
- if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
- push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
- }
-
- // rebuild the output if we had to backtrack at any point
- if (state.backtrack === true) {
- state.output = '';
-
- for (const token of state.tokens) {
- state.output += token.output != null ? token.output : token.value;
-
- if (token.suffix) {
- state.output += token.suffix;
- }
- }
- }
-
- return state;
-};
-
-/**
- * Fast paths for creating regular expressions for common glob patterns.
- * This can significantly speed up processing and has very little downside
- * impact when none of the fast paths match.
- */
-
-parse$j.fastpaths = (input, options) => {
- const opts = { ...options };
- const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
- const len = input.length;
- if (len > max) {
- throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
- }
-
- input = REPLACEMENTS[input] || input;
- const win32 = utils$d.isWindows(options);
-
- // create constants based on platform, for windows or posix
- const {
- DOT_LITERAL,
- SLASH_LITERAL,
- ONE_CHAR,
- DOTS_SLASH,
- NO_DOT,
- NO_DOTS,
- NO_DOTS_SLASH,
- STAR,
- START_ANCHOR
- } = constants$4.globChars(win32);
-
- const nodot = opts.dot ? NO_DOTS : NO_DOT;
- const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
- const capture = opts.capture ? '' : '?:';
- const state = { negated: false, prefix: '' };
- let star = opts.bash === true ? '.*?' : STAR;
-
- if (opts.capture) {
- star = `(${star})`;
- }
-
- const globstar = opts => {
- if (opts.noglobstar === true) return star;
- return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
- };
-
- const create = str => {
- switch (str) {
- case '*':
- return `${nodot}${ONE_CHAR}${star}`;
-
- case '.*':
- return `${DOT_LITERAL}${ONE_CHAR}${star}`;
-
- case '*.*':
- return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
-
- case '*/*':
- return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
-
- case '**':
- return nodot + globstar(opts);
-
- case '**/*':
- return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
-
- case '**/*.*':
- return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
-
- case '**/.*':
- return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
-
- default: {
- const match = /^(.*?)\.(\w+)$/.exec(str);
- if (!match) return;
-
- const source = create(match[1]);
- if (!source) return;
-
- return source + DOT_LITERAL + match[2];
- }
- }
- };
-
- const output = utils$d.removePrefix(input, state);
- let source = create(output);
-
- if (source && opts.strictSlashes !== true) {
- source += `${SLASH_LITERAL}?`;
- }
-
- return source;
-};
-
-var parse_1$1 = parse$j;
-
-const path$p = path__default;
-const scan = scan_1;
-const parse$i = parse_1$1;
-const utils$c = utils$f;
-const constants$3 = constants$5;
-const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
-
-/**
- * Creates a matcher function from one or more glob patterns. The
- * returned function takes a string to match as its first argument,
- * and returns true if the string is a match. The returned matcher
- * function also takes a boolean as the second argument that, when true,
- * returns an object with additional information.
- *
- * ```js
- * const picomatch = require('picomatch');
- * // picomatch(glob[, options]);
- *
- * const isMatch = picomatch('*.!(*a)');
- * console.log(isMatch('a.a')); //=> false
- * console.log(isMatch('a.b')); //=> true
- * ```
- * @name picomatch
- * @param {String|Array} `globs` One or more glob patterns.
- * @param {Object=} `options`
- * @return {Function=} Returns a matcher function.
- * @api public
- */
-
-const picomatch$4 = (glob, options, returnState = false) => {
- if (Array.isArray(glob)) {
- const fns = glob.map(input => picomatch$4(input, options, returnState));
- const arrayMatcher = str => {
- for (const isMatch of fns) {
- const state = isMatch(str);
- if (state) return state;
- }
- return false;
- };
- return arrayMatcher;
- }
-
- const isState = isObject(glob) && glob.tokens && glob.input;
-
- if (glob === '' || (typeof glob !== 'string' && !isState)) {
- throw new TypeError('Expected pattern to be a non-empty string');
- }
-
- const opts = options || {};
- const posix = utils$c.isWindows(options);
- const regex = isState
- ? picomatch$4.compileRe(glob, options)
- : picomatch$4.makeRe(glob, options, false, true);
-
- const state = regex.state;
- delete regex.state;
-
- let isIgnored = () => false;
- if (opts.ignore) {
- const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
- isIgnored = picomatch$4(opts.ignore, ignoreOpts, returnState);
- }
-
- const matcher = (input, returnObject = false) => {
- const { isMatch, match, output } = picomatch$4.test(input, regex, options, { glob, posix });
- const result = { glob, state, regex, posix, input, output, match, isMatch };
-
- if (typeof opts.onResult === 'function') {
- opts.onResult(result);
- }
-
- if (isMatch === false) {
- result.isMatch = false;
- return returnObject ? result : false;
- }
-
- if (isIgnored(input)) {
- if (typeof opts.onIgnore === 'function') {
- opts.onIgnore(result);
- }
- result.isMatch = false;
- return returnObject ? result : false;
- }
-
- if (typeof opts.onMatch === 'function') {
- opts.onMatch(result);
- }
- return returnObject ? result : true;
- };
-
- if (returnState) {
- matcher.state = state;
- }
-
- return matcher;
-};
-
-/**
- * Test `input` with the given `regex`. This is used by the main
- * `picomatch()` function to test the input string.
- *
- * ```js
- * const picomatch = require('picomatch');
- * // picomatch.test(input, regex[, options]);
- *
- * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
- * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
- * ```
- * @param {String} `input` String to test.
- * @param {RegExp} `regex`
- * @return {Object} Returns an object with matching info.
- * @api public
- */
-
-picomatch$4.test = (input, regex, options, { glob, posix } = {}) => {
- if (typeof input !== 'string') {
- throw new TypeError('Expected input to be a string');
- }
-
- if (input === '') {
- return { isMatch: false, output: '' };
- }
-
- const opts = options || {};
- const format = opts.format || (posix ? utils$c.toPosixSlashes : null);
- let match = input === glob;
- let output = (match && format) ? format(input) : input;
-
- if (match === false) {
- output = format ? format(input) : input;
- match = output === glob;
- }
-
- if (match === false || opts.capture === true) {
- if (opts.matchBase === true || opts.basename === true) {
- match = picomatch$4.matchBase(input, regex, options, posix);
- } else {
- match = regex.exec(output);
- }
- }
-
- return { isMatch: Boolean(match), match, output };
-};
-
-/**
- * Match the basename of a filepath.
- *
- * ```js
- * const picomatch = require('picomatch');
- * // picomatch.matchBase(input, glob[, options]);
- * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
- * ```
- * @param {String} `input` String to test.
- * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
- * @return {Boolean}
- * @api public
- */
-
-picomatch$4.matchBase = (input, glob, options, posix = utils$c.isWindows(options)) => {
- const regex = glob instanceof RegExp ? glob : picomatch$4.makeRe(glob, options);
- return regex.test(path$p.basename(input));
-};
-
-/**
- * Returns true if **any** of the given glob `patterns` match the specified `string`.
- *
- * ```js
- * const picomatch = require('picomatch');
- * // picomatch.isMatch(string, patterns[, options]);
- *
- * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
- * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
- * ```
- * @param {String|Array} str The string to test.
- * @param {String|Array} patterns One or more glob patterns to use for matching.
- * @param {Object} [options] See available [options](#options).
- * @return {Boolean} Returns true if any patterns match `str`
- * @api public
- */
-
-picomatch$4.isMatch = (str, patterns, options) => picomatch$4(patterns, options)(str);
-
-/**
- * Parse a glob pattern to create the source string for a regular
- * expression.
- *
- * ```js
- * const picomatch = require('picomatch');
- * const result = picomatch.parse(pattern[, options]);
- * ```
- * @param {String} `pattern`
- * @param {Object} `options`
- * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
- * @api public
- */
-
-picomatch$4.parse = (pattern, options) => {
- if (Array.isArray(pattern)) return pattern.map(p => picomatch$4.parse(p, options));
- return parse$i(pattern, { ...options, fastpaths: false });
-};
-
-/**
- * Scan a glob pattern to separate the pattern into segments.
- *
- * ```js
- * const picomatch = require('picomatch');
- * // picomatch.scan(input[, options]);
- *
- * const result = picomatch.scan('!./foo/*.js');
- * console.log(result);
- * { prefix: '!./',
- * input: '!./foo/*.js',
- * start: 3,
- * base: 'foo',
- * glob: '*.js',
- * isBrace: false,
- * isBracket: false,
- * isGlob: true,
- * isExtglob: false,
- * isGlobstar: false,
- * negated: true }
- * ```
- * @param {String} `input` Glob pattern to scan.
- * @param {Object} `options`
- * @return {Object} Returns an object with
- * @api public
- */
-
-picomatch$4.scan = (input, options) => scan(input, options);
-
-/**
- * Compile a regular expression from the `state` object returned by the
- * [parse()](#parse) method.
- *
- * @param {Object} `state`
- * @param {Object} `options`
- * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.
- * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.
- * @return {RegExp}
- * @api public
- */
-
-picomatch$4.compileRe = (state, options, returnOutput = false, returnState = false) => {
- if (returnOutput === true) {
- return state.output;
- }
-
- const opts = options || {};
- const prepend = opts.contains ? '' : '^';
- const append = opts.contains ? '' : '$';
-
- let source = `${prepend}(?:${state.output})${append}`;
- if (state && state.negated === true) {
- source = `^(?!${source}).*$`;
- }
-
- const regex = picomatch$4.toRegex(source, options);
- if (returnState === true) {
- regex.state = state;
- }
-
- return regex;
-};
-
-/**
- * Create a regular expression from a parsed glob pattern.
- *
- * ```js
- * const picomatch = require('picomatch');
- * const state = picomatch.parse('*.js');
- * // picomatch.compileRe(state[, options]);
- *
- * console.log(picomatch.compileRe(state));
- * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
- * ```
- * @param {String} `state` The object returned from the `.parse` method.
- * @param {Object} `options`
- * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.
- * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.
- * @return {RegExp} Returns a regex created from the given pattern.
- * @api public
- */
-
-picomatch$4.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {
- if (!input || typeof input !== 'string') {
- throw new TypeError('Expected a non-empty string');
- }
-
- let parsed = { negated: false, fastpaths: true };
-
- if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
- parsed.output = parse$i.fastpaths(input, options);
- }
-
- if (!parsed.output) {
- parsed = parse$i(input, options);
- }
-
- return picomatch$4.compileRe(parsed, options, returnOutput, returnState);
-};
-
-/**
- * Create a regular expression from the given regex source string.
- *
- * ```js
- * const picomatch = require('picomatch');
- * // picomatch.toRegex(source[, options]);
- *
- * const { output } = picomatch.parse('*.js');
- * console.log(picomatch.toRegex(output));
- * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
- * ```
- * @param {String} `source` Regular expression source string.
- * @param {Object} `options`
- * @return {RegExp}
- * @api public
- */
-
-picomatch$4.toRegex = (source, options) => {
- try {
- const opts = options || {};
- return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
- } catch (err) {
- if (options && options.debug === true) throw err;
- return /$^/;
- }
-};
-
-/**
- * Picomatch constants.
- * @return {Object}
- */
-
-picomatch$4.constants = constants$3;
-
-/**
- * Expose "picomatch"
- */
-
-var picomatch_1 = picomatch$4;
-
-var picomatch$3 = picomatch_1;
-
-const util$7 = require$$0__default$2;
-const braces$1 = braces_1;
-const picomatch$2 = picomatch$3;
-const utils$b = utils$f;
-const isEmptyString = val => val === '' || val === './';
-
-/**
- * Returns an array of strings that match one or more glob patterns.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm(list, patterns[, options]);
- *
- * console.log(mm(['a.js', 'a.txt'], ['*.js']));
- * //=> [ 'a.js' ]
- * ```
- * @param {String|Array<string>} `list` List of strings to match.
- * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.
- * @param {Object} `options` See available [options](#options)
- * @return {Array} Returns an array of matches
- * @summary false
- * @api public
- */
-
-const micromatch$1 = (list, patterns, options) => {
- patterns = [].concat(patterns);
- list = [].concat(list);
-
- let omit = new Set();
- let keep = new Set();
- let items = new Set();
- let negatives = 0;
-
- let onResult = state => {
- items.add(state.output);
- if (options && options.onResult) {
- options.onResult(state);
- }
- };
-
- for (let i = 0; i < patterns.length; i++) {
- let isMatch = picomatch$2(String(patterns[i]), { ...options, onResult }, true);
- let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
- if (negated) negatives++;
-
- for (let item of list) {
- let matched = isMatch(item, true);
-
- let match = negated ? !matched.isMatch : matched.isMatch;
- if (!match) continue;
-
- if (negated) {
- omit.add(matched.output);
- } else {
- omit.delete(matched.output);
- keep.add(matched.output);
- }
- }
- }
-
- let result = negatives === patterns.length ? [...items] : [...keep];
- let matches = result.filter(item => !omit.has(item));
-
- if (options && matches.length === 0) {
- if (options.failglob === true) {
- throw new Error(`No matches found for "${patterns.join(', ')}"`);
- }
-
- if (options.nonull === true || options.nullglob === true) {
- return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
- }
- }
-
- return matches;
-};
-
-/**
- * Backwards compatibility
- */
-
-micromatch$1.match = micromatch$1;
-
-/**
- * Returns a matcher function from the given glob `pattern` and `options`.
- * The returned function takes a string to match as its only argument and returns
- * true if the string is a match.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.matcher(pattern[, options]);
- *
- * const isMatch = mm.matcher('*.!(*a)');
- * console.log(isMatch('a.a')); //=> false
- * console.log(isMatch('a.b')); //=> true
- * ```
- * @param {String} `pattern` Glob pattern
- * @param {Object} `options`
- * @return {Function} Returns a matcher function.
- * @api public
- */
-
-micromatch$1.matcher = (pattern, options) => picomatch$2(pattern, options);
-
-/**
- * Returns true if **any** of the given glob `patterns` match the specified `string`.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.isMatch(string, patterns[, options]);
- *
- * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
- * console.log(mm.isMatch('a.a', 'b.*')); //=> false
- * ```
- * @param {String} `str` The string to test.
- * @param {String|Array} `patterns` One or more glob patterns to use for matching.
- * @param {Object} `[options]` See available [options](#options).
- * @return {Boolean} Returns true if any patterns match `str`
- * @api public
- */
-
-micromatch$1.isMatch = (str, patterns, options) => picomatch$2(patterns, options)(str);
-
-/**
- * Backwards compatibility
- */
-
-micromatch$1.any = micromatch$1.isMatch;
-
-/**
- * Returns a list of strings that _**do not match any**_ of the given `patterns`.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.not(list, patterns[, options]);
- *
- * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
- * //=> ['b.b', 'c.c']
- * ```
- * @param {Array} `list` Array of strings to match.
- * @param {String|Array} `patterns` One or more glob pattern to use for matching.
- * @param {Object} `options` See available [options](#options) for changing how matches are performed
- * @return {Array} Returns an array of strings that **do not match** the given patterns.
- * @api public
- */
-
-micromatch$1.not = (list, patterns, options = {}) => {
- patterns = [].concat(patterns).map(String);
- let result = new Set();
- let items = [];
-
- let onResult = state => {
- if (options.onResult) options.onResult(state);
- items.push(state.output);
- };
-
- let matches = micromatch$1(list, patterns, { ...options, onResult });
-
- for (let item of items) {
- if (!matches.includes(item)) {
- result.add(item);
- }
- }
- return [...result];
-};
-
-/**
- * Returns true if the given `string` contains the given pattern. Similar
- * to [.isMatch](#isMatch) but the pattern can match any part of the string.
- *
- * ```js
- * var mm = require('micromatch');
- * // mm.contains(string, pattern[, options]);
- *
- * console.log(mm.contains('aa/bb/cc', '*b'));
- * //=> true
- * console.log(mm.contains('aa/bb/cc', '*d'));
- * //=> false
- * ```
- * @param {String} `str` The string to match.
- * @param {String|Array} `patterns` Glob pattern to use for matching.
- * @param {Object} `options` See available [options](#options) for changing how matches are performed
- * @return {Boolean} Returns true if any of the patterns matches any part of `str`.
- * @api public
- */
-
-micromatch$1.contains = (str, pattern, options) => {
- if (typeof str !== 'string') {
- throw new TypeError(`Expected a string: "${util$7.inspect(str)}"`);
- }
-
- if (Array.isArray(pattern)) {
- return pattern.some(p => micromatch$1.contains(str, p, options));
- }
-
- if (typeof pattern === 'string') {
- if (isEmptyString(str) || isEmptyString(pattern)) {
- return false;
- }
-
- if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
- return true;
- }
- }
-
- return micromatch$1.isMatch(str, pattern, { ...options, contains: true });
-};
-
-/**
- * Filter the keys of the given object with the given `glob` pattern
- * and `options`. Does not attempt to match nested keys. If you need this feature,
- * use [glob-object][] instead.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.matchKeys(object, patterns[, options]);
- *
- * const obj = { aa: 'a', ab: 'b', ac: 'c' };
- * console.log(mm.matchKeys(obj, '*b'));
- * //=> { ab: 'b' }
- * ```
- * @param {Object} `object` The object with keys to filter.
- * @param {String|Array} `patterns` One or more glob patterns to use for matching.
- * @param {Object} `options` See available [options](#options) for changing how matches are performed
- * @return {Object} Returns an object with only keys that match the given patterns.
- * @api public
- */
-
-micromatch$1.matchKeys = (obj, patterns, options) => {
- if (!utils$b.isObject(obj)) {
- throw new TypeError('Expected the first argument to be an object');
- }
- let keys = micromatch$1(Object.keys(obj), patterns, options);
- let res = {};
- for (let key of keys) res[key] = obj[key];
- return res;
-};
-
-/**
- * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.some(list, patterns[, options]);
- *
- * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
- * // true
- * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
- * // false
- * ```
- * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
- * @param {String|Array} `patterns` One or more glob patterns to use for matching.
- * @param {Object} `options` See available [options](#options) for changing how matches are performed
- * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`
- * @api public
- */
-
-micromatch$1.some = (list, patterns, options) => {
- let items = [].concat(list);
-
- for (let pattern of [].concat(patterns)) {
- let isMatch = picomatch$2(String(pattern), options);
- if (items.some(item => isMatch(item))) {
- return true;
- }
- }
- return false;
-};
-
-/**
- * Returns true if every string in the given `list` matches
- * any of the given glob `patterns`.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.every(list, patterns[, options]);
- *
- * console.log(mm.every('foo.js', ['foo.js']));
- * // true
- * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
- * // true
- * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
- * // false
- * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
- * // false
- * ```
- * @param {String|Array} `list` The string or array of strings to test.
- * @param {String|Array} `patterns` One or more glob patterns to use for matching.
- * @param {Object} `options` See available [options](#options) for changing how matches are performed
- * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`
- * @api public
- */
-
-micromatch$1.every = (list, patterns, options) => {
- let items = [].concat(list);
-
- for (let pattern of [].concat(patterns)) {
- let isMatch = picomatch$2(String(pattern), options);
- if (!items.every(item => isMatch(item))) {
- return false;
- }
- }
- return true;
-};
-
-/**
- * Returns true if **all** of the given `patterns` match
- * the specified string.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.all(string, patterns[, options]);
- *
- * console.log(mm.all('foo.js', ['foo.js']));
- * // true
- *
- * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
- * // false
- *
- * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
- * // true
- *
- * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
- * // true
- * ```
- * @param {String|Array} `str` The string to test.
- * @param {String|Array} `patterns` One or more glob patterns to use for matching.
- * @param {Object} `options` See available [options](#options) for changing how matches are performed
- * @return {Boolean} Returns true if any patterns match `str`
- * @api public
- */
-
-micromatch$1.all = (str, patterns, options) => {
- if (typeof str !== 'string') {
- throw new TypeError(`Expected a string: "${util$7.inspect(str)}"`);
- }
-
- return [].concat(patterns).every(p => picomatch$2(p, options)(str));
-};
-
-/**
- * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.capture(pattern, string[, options]);
- *
- * console.log(mm.capture('test/*.js', 'test/foo.js'));
- * //=> ['foo']
- * console.log(mm.capture('test/*.js', 'foo/bar.css'));
- * //=> null
- * ```
- * @param {String} `glob` Glob pattern to use for matching.
- * @param {String} `input` String to match
- * @param {Object} `options` See available [options](#options) for changing how matches are performed
- * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
- * @api public
- */
-
-micromatch$1.capture = (glob, input, options) => {
- let posix = utils$b.isWindows(options);
- let regex = picomatch$2.makeRe(String(glob), { ...options, capture: true });
- let match = regex.exec(posix ? utils$b.toPosixSlashes(input) : input);
-
- if (match) {
- return match.slice(1).map(v => v === void 0 ? '' : v);
- }
-};
-
-/**
- * Create a regular expression from the given glob `pattern`.
- *
- * ```js
- * const mm = require('micromatch');
- * // mm.makeRe(pattern[, options]);
- *
- * console.log(mm.makeRe('*.js'));
- * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
- * ```
- * @param {String} `pattern` A glob pattern to convert to regex.
- * @param {Object} `options`
- * @return {RegExp} Returns a regex created from the given pattern.
- * @api public
- */
-
-micromatch$1.makeRe = (...args) => picomatch$2.makeRe(...args);
-
-/**
- * Scan a glob pattern to separate the pattern into segments. Used
- * by the [split](#split) method.
- *
- * ```js
- * const mm = require('micromatch');
- * const state = mm.scan(pattern[, options]);
- * ```
- * @param {String} `pattern`
- * @param {Object} `options`
- * @return {Object} Returns an object with
- * @api public
- */
-
-micromatch$1.scan = (...args) => picomatch$2.scan(...args);
-
-/**
- * Parse a glob pattern to create the source string for a regular
- * expression.
- *
- * ```js
- * const mm = require('micromatch');
- * const state = mm(pattern[, options]);
- * ```
- * @param {String} `glob`
- * @param {Object} `options`
- * @return {Object} Returns an object with useful properties and output to be used as regex source string.
- * @api public
- */
-
-micromatch$1.parse = (patterns, options) => {
- let res = [];
- for (let pattern of [].concat(patterns || [])) {
- for (let str of braces$1(String(pattern), options)) {
- res.push(picomatch$2.parse(str, options));
- }
- }
- return res;
-};
-
-/**
- * Process the given brace `pattern`.
- *
- * ```js
- * const { braces } = require('micromatch');
- * console.log(braces('foo/{a,b,c}/bar'));
- * //=> [ 'foo/(a|b|c)/bar' ]
- *
- * console.log(braces('foo/{a,b,c}/bar', { expand: true }));
- * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
- * ```
- * @param {String} `pattern` String with brace pattern to process.
- * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
- * @return {Array}
- * @api public
- */
-
-micromatch$1.braces = (pattern, options) => {
- if (typeof pattern !== 'string') throw new TypeError('Expected a string');
- if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
- return [pattern];
- }
- return braces$1(pattern, options);
-};
-
-/**
- * Expand braces
- */
-
-micromatch$1.braceExpand = (pattern, options) => {
- if (typeof pattern !== 'string') throw new TypeError('Expected a string');
- return micromatch$1.braces(pattern, { ...options, expand: true });
-};
-
-/**
- * Expose micromatch
- */
-
-var micromatch_1 = micromatch$1;
-
-Object.defineProperty(pattern$1, "__esModule", { value: true });
-pattern$1.matchAny = pattern$1.convertPatternsToRe = pattern$1.makeRe = pattern$1.getPatternParts = pattern$1.expandBraceExpansion = pattern$1.expandPatternsWithBraceExpansion = pattern$1.isAffectDepthOfReadingPattern = pattern$1.endsWithSlashGlobStar = pattern$1.hasGlobStar = pattern$1.getBaseDirectory = pattern$1.isPatternRelatedToParentDirectory = pattern$1.getPatternsOutsideCurrentDirectory = pattern$1.getPatternsInsideCurrentDirectory = pattern$1.getPositivePatterns = pattern$1.getNegativePatterns = pattern$1.isPositivePattern = pattern$1.isNegativePattern = pattern$1.convertToNegativePattern = pattern$1.convertToPositivePattern = pattern$1.isDynamicPattern = pattern$1.isStaticPattern = void 0;
-const path$o = path__default;
-const globParent$1 = globParent$2;
-const micromatch = micromatch_1;
-const GLOBSTAR$2 = '**';
-const ESCAPE_SYMBOL = '\\';
-const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;
-const REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[.*]/;
-const REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\(.*\|.*\)/;
-const GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\(.*\)/;
-const BRACE_EXPANSIONS_SYMBOLS_RE = /{.*(?:,|\.\.).*}/;
-function isStaticPattern(pattern, options = {}) {
- return !isDynamicPattern(pattern, options);
-}
-pattern$1.isStaticPattern = isStaticPattern;
-function isDynamicPattern(pattern, options = {}) {
- /**
- * A special case with an empty string is necessary for matching patterns that start with a forward slash.
- * An empty string cannot be a dynamic pattern.
- * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.
- */
- if (pattern === '') {
- return false;
- }
- /**
- * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check
- * filepath directly (without read directory).
- */
- if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {
- return true;
- }
- if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {
- return true;
- }
- if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {
- return true;
- }
- if (options.braceExpansion !== false && BRACE_EXPANSIONS_SYMBOLS_RE.test(pattern)) {
- return true;
- }
- return false;
-}
-pattern$1.isDynamicPattern = isDynamicPattern;
-function convertToPositivePattern(pattern) {
- return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
-}
-pattern$1.convertToPositivePattern = convertToPositivePattern;
-function convertToNegativePattern(pattern) {
- return '!' + pattern;
-}
-pattern$1.convertToNegativePattern = convertToNegativePattern;
-function isNegativePattern(pattern) {
- return pattern.startsWith('!') && pattern[1] !== '(';
-}
-pattern$1.isNegativePattern = isNegativePattern;
-function isPositivePattern(pattern) {
- return !isNegativePattern(pattern);
-}
-pattern$1.isPositivePattern = isPositivePattern;
-function getNegativePatterns(patterns) {
- return patterns.filter(isNegativePattern);
-}
-pattern$1.getNegativePatterns = getNegativePatterns;
-function getPositivePatterns$1(patterns) {
- return patterns.filter(isPositivePattern);
-}
-pattern$1.getPositivePatterns = getPositivePatterns$1;
-/**
- * Returns patterns that can be applied inside the current directory.
- *
- * @example
- * // ['./*', '*', 'a/*']
- * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])
- */
-function getPatternsInsideCurrentDirectory(patterns) {
- return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));
-}
-pattern$1.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;
-/**
- * Returns patterns to be expanded relative to (outside) the current directory.
- *
- * @example
- * // ['../*', './../*']
- * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])
- */
-function getPatternsOutsideCurrentDirectory(patterns) {
- return patterns.filter(isPatternRelatedToParentDirectory);
-}
-pattern$1.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;
-function isPatternRelatedToParentDirectory(pattern) {
- return pattern.startsWith('..') || pattern.startsWith('./..');
-}
-pattern$1.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;
-function getBaseDirectory(pattern) {
- return globParent$1(pattern, { flipBackslashes: false });
-}
-pattern$1.getBaseDirectory = getBaseDirectory;
-function hasGlobStar(pattern) {
- return pattern.includes(GLOBSTAR$2);
-}
-pattern$1.hasGlobStar = hasGlobStar;
-function endsWithSlashGlobStar(pattern) {
- return pattern.endsWith('/' + GLOBSTAR$2);
-}
-pattern$1.endsWithSlashGlobStar = endsWithSlashGlobStar;
-function isAffectDepthOfReadingPattern(pattern) {
- const basename = path$o.basename(pattern);
- return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
-}
-pattern$1.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
-function expandPatternsWithBraceExpansion(patterns) {
- return patterns.reduce((collection, pattern) => {
- return collection.concat(expandBraceExpansion(pattern));
- }, []);
-}
-pattern$1.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;
-function expandBraceExpansion(pattern) {
- return micromatch.braces(pattern, {
- expand: true,
- nodupes: true
- });
-}
-pattern$1.expandBraceExpansion = expandBraceExpansion;
-function getPatternParts(pattern, options) {
- let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));
- /**
- * The scan method returns an empty array in some cases.
- * See micromatch/picomatch#58 for more details.
- */
- if (parts.length === 0) {
- parts = [pattern];
- }
- /**
- * The scan method does not return an empty part for the pattern with a forward slash.
- * This is another part of micromatch/picomatch#58.
- */
- if (parts[0].startsWith('/')) {
- parts[0] = parts[0].slice(1);
- parts.unshift('');
- }
- return parts;
-}
-pattern$1.getPatternParts = getPatternParts;
-function makeRe$1(pattern, options) {
- return micromatch.makeRe(pattern, options);
-}
-pattern$1.makeRe = makeRe$1;
-function convertPatternsToRe(patterns, options) {
- return patterns.map((pattern) => makeRe$1(pattern, options));
-}
-pattern$1.convertPatternsToRe = convertPatternsToRe;
-function matchAny(entry, patternsRe) {
- return patternsRe.some((patternRe) => patternRe.test(entry));
-}
-pattern$1.matchAny = matchAny;
-
-var stream$7 = {};
-
-/*
- * merge2
- * https://github.com/teambition/merge2
- *
- * Copyright (c) 2014-2020 Teambition
- * Licensed under the MIT license.
- */
-const Stream = require$$0__default$4;
-const PassThrough$1 = Stream.PassThrough;
-const slice$1 = Array.prototype.slice;
-
-var merge2_1 = merge2$2;
-
-function merge2$2 () {
- const streamsQueue = [];
- const args = slice$1.call(arguments);
- let merging = false;
- let options = args[args.length - 1];
-
- if (options && !Array.isArray(options) && options.pipe == null) {
- args.pop();
- } else {
- options = {};
- }
-
- const doEnd = options.end !== false;
- const doPipeError = options.pipeError === true;
- if (options.objectMode == null) {
- options.objectMode = true;
- }
- if (options.highWaterMark == null) {
- options.highWaterMark = 64 * 1024;
- }
- const mergedStream = PassThrough$1(options);
-
- function addStream () {
- for (let i = 0, len = arguments.length; i < len; i++) {
- streamsQueue.push(pauseStreams(arguments[i], options));
- }
- mergeStream();
- return this
- }
-
- function mergeStream () {
- if (merging) {
- return
- }
- merging = true;
-
- let streams = streamsQueue.shift();
- if (!streams) {
- process.nextTick(endStream);
- return
- }
- if (!Array.isArray(streams)) {
- streams = [streams];
- }
-
- let pipesCount = streams.length + 1;
-
- function next () {
- if (--pipesCount > 0) {
- return
- }
- merging = false;
- mergeStream();
- }
-
- function pipe (stream) {
- function onend () {
- stream.removeListener('merge2UnpipeEnd', onend);
- stream.removeListener('end', onend);
- if (doPipeError) {
- stream.removeListener('error', onerror);
- }
- next();
- }
- function onerror (err) {
- mergedStream.emit('error', err);
- }
- // skip ended stream
- if (stream._readableState.endEmitted) {
- return next()
- }
-
- stream.on('merge2UnpipeEnd', onend);
- stream.on('end', onend);
-
- if (doPipeError) {
- stream.on('error', onerror);
- }
-
- stream.pipe(mergedStream, { end: false });
- // compatible for old stream
- stream.resume();
- }
-
- for (let i = 0; i < streams.length; i++) {
- pipe(streams[i]);
- }
-
- next();
- }
-
- function endStream () {
- merging = false;
- // emit 'queueDrain' when all streams merged.
- mergedStream.emit('queueDrain');
- if (doEnd) {
- mergedStream.end();
- }
- }
-
- mergedStream.setMaxListeners(0);
- mergedStream.add = addStream;
- mergedStream.on('unpipe', function (stream) {
- stream.emit('merge2UnpipeEnd');
- });
-
- if (args.length) {
- addStream.apply(null, args);
- }
- return mergedStream
-}
-
-// check and pause streams for pipe.
-function pauseStreams (streams, options) {
- if (!Array.isArray(streams)) {
- // Backwards-compat with old-style streams
- if (!streams._readableState && streams.pipe) {
- streams = streams.pipe(PassThrough$1(options));
- }
- if (!streams._readableState || !streams.pause || !streams.pipe) {
- throw new Error('Only readable stream can be merged.')
- }
- streams.pause();
- } else {
- for (let i = 0, len = streams.length; i < len; i++) {
- streams[i] = pauseStreams(streams[i], options);
- }
- }
- return streams
-}
-
-Object.defineProperty(stream$7, "__esModule", { value: true });
-stream$7.merge = void 0;
-const merge2$1 = merge2_1;
-function merge$1(streams) {
- const mergedStream = merge2$1(streams);
- streams.forEach((stream) => {
- stream.once('error', (error) => mergedStream.emit('error', error));
- });
- mergedStream.once('close', () => propagateCloseEventToSources(streams));
- mergedStream.once('end', () => propagateCloseEventToSources(streams));
- return mergedStream;
-}
-stream$7.merge = merge$1;
-function propagateCloseEventToSources(streams) {
- streams.forEach((stream) => stream.emit('close'));
-}
-
-var string$2 = {};
-
-Object.defineProperty(string$2, "__esModule", { value: true });
-string$2.isEmpty = string$2.isString = void 0;
-function isString$1(input) {
- return typeof input === 'string';
-}
-string$2.isString = isString$1;
-function isEmpty(input) {
- return input === '';
-}
-string$2.isEmpty = isEmpty;
-
-Object.defineProperty(utils$k, "__esModule", { value: true });
-utils$k.string = utils$k.stream = utils$k.pattern = utils$k.path = utils$k.fs = utils$k.errno = utils$k.array = void 0;
-const array = array$1;
-utils$k.array = array;
-const errno = errno$1;
-utils$k.errno = errno;
-const fs$p = fs$q;
-utils$k.fs = fs$p;
-const path$n = path$s;
-utils$k.path = path$n;
-const pattern = pattern$1;
-utils$k.pattern = pattern;
-const stream$6 = stream$7;
-utils$k.stream = stream$6;
-const string$1 = string$2;
-utils$k.string = string$1;
-
-Object.defineProperty(tasks, "__esModule", { value: true });
-tasks.convertPatternGroupToTask = tasks.convertPatternGroupsToTasks = tasks.groupPatternsByBaseDirectory = tasks.getNegativePatternsAsPositive = tasks.getPositivePatterns = tasks.convertPatternsToTasks = tasks.generate = void 0;
-const utils$a = utils$k;
-function generate(patterns, settings) {
- const positivePatterns = getPositivePatterns(patterns);
- const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
- const staticPatterns = positivePatterns.filter((pattern) => utils$a.pattern.isStaticPattern(pattern, settings));
- const dynamicPatterns = positivePatterns.filter((pattern) => utils$a.pattern.isDynamicPattern(pattern, settings));
- const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
- const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
- return staticTasks.concat(dynamicTasks);
-}
-tasks.generate = generate;
-/**
- * Returns tasks grouped by basic pattern directories.
- *
- * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.
- * This is necessary because directory traversal starts at the base directory and goes deeper.
- */
-function convertPatternsToTasks(positive, negative, dynamic) {
- const tasks = [];
- const patternsOutsideCurrentDirectory = utils$a.pattern.getPatternsOutsideCurrentDirectory(positive);
- const patternsInsideCurrentDirectory = utils$a.pattern.getPatternsInsideCurrentDirectory(positive);
- const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);
- const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);
- tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));
- /*
- * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory
- * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.
- */
- if ('.' in insideCurrentDirectoryGroup) {
- tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));
- }
- else {
- tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));
- }
- return tasks;
-}
-tasks.convertPatternsToTasks = convertPatternsToTasks;
-function getPositivePatterns(patterns) {
- return utils$a.pattern.getPositivePatterns(patterns);
-}
-tasks.getPositivePatterns = getPositivePatterns;
-function getNegativePatternsAsPositive(patterns, ignore) {
- const negative = utils$a.pattern.getNegativePatterns(patterns).concat(ignore);
- const positive = negative.map(utils$a.pattern.convertToPositivePattern);
- return positive;
-}
-tasks.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
-function groupPatternsByBaseDirectory(patterns) {
- const group = {};
- return patterns.reduce((collection, pattern) => {
- const base = utils$a.pattern.getBaseDirectory(pattern);
- if (base in collection) {
- collection[base].push(pattern);
- }
- else {
- collection[base] = [pattern];
- }
- return collection;
- }, group);
-}
-tasks.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
-function convertPatternGroupsToTasks(positive, negative, dynamic) {
- return Object.keys(positive).map((base) => {
- return convertPatternGroupToTask(base, positive[base], negative, dynamic);
- });
-}
-tasks.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
-function convertPatternGroupToTask(base, positive, negative, dynamic) {
- return {
- dynamic,
- positive,
- negative,
- base,
- patterns: [].concat(positive, negative.map(utils$a.pattern.convertToNegativePattern))
- };
-}
-tasks.convertPatternGroupToTask = convertPatternGroupToTask;
-
-var async$6 = {};
-
-var stream$5 = {};
-
-var out$3 = {};
-
-var async$5 = {};
-
-Object.defineProperty(async$5, "__esModule", { value: true });
-async$5.read = void 0;
-function read$3(path, settings, callback) {
- settings.fs.lstat(path, (lstatError, lstat) => {
- if (lstatError !== null) {
- callFailureCallback$2(callback, lstatError);
- return;
- }
- if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
- callSuccessCallback$2(callback, lstat);
- return;
- }
- settings.fs.stat(path, (statError, stat) => {
- if (statError !== null) {
- if (settings.throwErrorOnBrokenSymbolicLink) {
- callFailureCallback$2(callback, statError);
- return;
- }
- callSuccessCallback$2(callback, lstat);
- return;
- }
- if (settings.markSymbolicLink) {
- stat.isSymbolicLink = () => true;
- }
- callSuccessCallback$2(callback, stat);
- });
- });
-}
-async$5.read = read$3;
-function callFailureCallback$2(callback, error) {
- callback(error);
-}
-function callSuccessCallback$2(callback, result) {
- callback(null, result);
-}
-
-var sync$b = {};
-
-Object.defineProperty(sync$b, "__esModule", { value: true });
-sync$b.read = void 0;
-function read$2(path, settings) {
- const lstat = settings.fs.lstatSync(path);
- if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
- return lstat;
- }
- try {
- const stat = settings.fs.statSync(path);
- if (settings.markSymbolicLink) {
- stat.isSymbolicLink = () => true;
- }
- return stat;
- }
- catch (error) {
- if (!settings.throwErrorOnBrokenSymbolicLink) {
- return lstat;
- }
- throw error;
- }
-}
-sync$b.read = read$2;
-
-var settings$3 = {};
-
-var fs$o = {};
-
-(function (exports) {
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
-const fs = fs__default;
-exports.FILE_SYSTEM_ADAPTER = {
- lstat: fs.lstat,
- stat: fs.stat,
- lstatSync: fs.lstatSync,
- statSync: fs.statSync
-};
-function createFileSystemAdapter(fsMethods) {
- if (fsMethods === undefined) {
- return exports.FILE_SYSTEM_ADAPTER;
- }
- return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
-}
-exports.createFileSystemAdapter = createFileSystemAdapter;
-}(fs$o));
-
-Object.defineProperty(settings$3, "__esModule", { value: true });
-const fs$n = fs$o;
-class Settings$2 {
- constructor(_options = {}) {
- this._options = _options;
- this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
- this.fs = fs$n.createFileSystemAdapter(this._options.fs);
- this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
- this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
- }
- _getValue(option, value) {
- return option !== null && option !== void 0 ? option : value;
- }
-}
-settings$3.default = Settings$2;
-
-Object.defineProperty(out$3, "__esModule", { value: true });
-out$3.statSync = out$3.stat = out$3.Settings = void 0;
-const async$4 = async$5;
-const sync$a = sync$b;
-const settings_1$3 = settings$3;
-out$3.Settings = settings_1$3.default;
-function stat$4(path, optionsOrSettingsOrCallback, callback) {
- if (typeof optionsOrSettingsOrCallback === 'function') {
- async$4.read(path, getSettings$2(), optionsOrSettingsOrCallback);
- return;
- }
- async$4.read(path, getSettings$2(optionsOrSettingsOrCallback), callback);
-}
-out$3.stat = stat$4;
-function statSync(path, optionsOrSettings) {
- const settings = getSettings$2(optionsOrSettings);
- return sync$a.read(path, settings);
-}
-out$3.statSync = statSync;
-function getSettings$2(settingsOrOptions = {}) {
- if (settingsOrOptions instanceof settings_1$3.default) {
- return settingsOrOptions;
- }
- return new settings_1$3.default(settingsOrOptions);
-}
-
-var out$2 = {};
-
-var async$3 = {};
-
-var async$2 = {};
-
-var out$1 = {};
-
-var async$1 = {};
-
-/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
-
-let promise$1;
-
-var queueMicrotask_1 = typeof queueMicrotask === 'function'
- ? queueMicrotask.bind(typeof window !== 'undefined' ? window : commonjsGlobal)
- // reuse resolved promise, and allocate it lazily
- : cb => (promise$1 || (promise$1 = Promise.resolve()))
- .then(cb)
- .catch(err => setTimeout(() => { throw err }, 0));
-
-/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
-
-var runParallel_1 = runParallel;
-
-const queueMicrotask$1 = queueMicrotask_1;
-
-function runParallel (tasks, cb) {
- let results, pending, keys;
- let isSync = true;
-
- if (Array.isArray(tasks)) {
- results = [];
- pending = tasks.length;
- } else {
- keys = Object.keys(tasks);
- results = {};
- pending = keys.length;
- }
-
- function done (err) {
- function end () {
- if (cb) cb(err, results);
- cb = null;
- }
- if (isSync) queueMicrotask$1(end);
- else end();
- }
-
- function each (i, err, result) {
- results[i] = result;
- if (--pending === 0 || err) {
- done(err);
- }
- }
-
- if (!pending) {
- // empty
- done(null);
- } else if (keys) {
- // object
- keys.forEach(function (key) {
- tasks[key](function (err, result) { each(key, err, result); });
- });
- } else {
- // array
- tasks.forEach(function (task, i) {
- task(function (err, result) { each(i, err, result); });
- });
- }
-
- isSync = false;
-}
-
-var constants$2 = {};
-
-Object.defineProperty(constants$2, "__esModule", { value: true });
-constants$2.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;
-const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');
-if (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {
- throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);
-}
-const MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
-const MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
-const SUPPORTED_MAJOR_VERSION = 10;
-const SUPPORTED_MINOR_VERSION = 10;
-const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;
-const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;
-/**
- * IS `true` for Node.js 10.10 and greater.
- */
-constants$2.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
-
-var utils$9 = {};
-
-var fs$m = {};
-
-Object.defineProperty(fs$m, "__esModule", { value: true });
-fs$m.createDirentFromStats = void 0;
-class DirentFromStats {
- constructor(name, stats) {
- this.name = name;
- this.isBlockDevice = stats.isBlockDevice.bind(stats);
- this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
- this.isDirectory = stats.isDirectory.bind(stats);
- this.isFIFO = stats.isFIFO.bind(stats);
- this.isFile = stats.isFile.bind(stats);
- this.isSocket = stats.isSocket.bind(stats);
- this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
- }
-}
-function createDirentFromStats(name, stats) {
- return new DirentFromStats(name, stats);
-}
-fs$m.createDirentFromStats = createDirentFromStats;
-
-Object.defineProperty(utils$9, "__esModule", { value: true });
-utils$9.fs = void 0;
-const fs$l = fs$m;
-utils$9.fs = fs$l;
-
-var common$d = {};
-
-Object.defineProperty(common$d, "__esModule", { value: true });
-common$d.joinPathSegments = void 0;
-function joinPathSegments$1(a, b, separator) {
- /**
- * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).
- */
- if (a.endsWith(separator)) {
- return a + b;
- }
- return a + separator + b;
-}
-common$d.joinPathSegments = joinPathSegments$1;
-
-Object.defineProperty(async$1, "__esModule", { value: true });
-async$1.readdir = async$1.readdirWithFileTypes = async$1.read = void 0;
-const fsStat$5 = out$3;
-const rpl = runParallel_1;
-const constants_1$1 = constants$2;
-const utils$8 = utils$9;
-const common$c = common$d;
-function read$1(directory, settings, callback) {
- if (!settings.stats && constants_1$1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
- readdirWithFileTypes$1(directory, settings, callback);
- return;
- }
- readdir$3(directory, settings, callback);
-}
-async$1.read = read$1;
-function readdirWithFileTypes$1(directory, settings, callback) {
- settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {
- if (readdirError !== null) {
- callFailureCallback$1(callback, readdirError);
- return;
- }
- const entries = dirents.map((dirent) => ({
- dirent,
- name: dirent.name,
- path: common$c.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)
- }));
- if (!settings.followSymbolicLinks) {
- callSuccessCallback$1(callback, entries);
- return;
- }
- const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
- rpl(tasks, (rplError, rplEntries) => {
- if (rplError !== null) {
- callFailureCallback$1(callback, rplError);
- return;
- }
- callSuccessCallback$1(callback, rplEntries);
- });
- });
-}
-async$1.readdirWithFileTypes = readdirWithFileTypes$1;
-function makeRplTaskEntry(entry, settings) {
- return (done) => {
- if (!entry.dirent.isSymbolicLink()) {
- done(null, entry);
- return;
- }
- settings.fs.stat(entry.path, (statError, stats) => {
- if (statError !== null) {
- if (settings.throwErrorOnBrokenSymbolicLink) {
- done(statError);
- return;
- }
- done(null, entry);
- return;
- }
- entry.dirent = utils$8.fs.createDirentFromStats(entry.name, stats);
- done(null, entry);
- });
- };
-}
-function readdir$3(directory, settings, callback) {
- settings.fs.readdir(directory, (readdirError, names) => {
- if (readdirError !== null) {
- callFailureCallback$1(callback, readdirError);
- return;
- }
- const tasks = names.map((name) => {
- const path = common$c.joinPathSegments(directory, name, settings.pathSegmentSeparator);
- return (done) => {
- fsStat$5.stat(path, settings.fsStatSettings, (error, stats) => {
- if (error !== null) {
- done(error);
- return;
- }
- const entry = {
- name,
- path,
- dirent: utils$8.fs.createDirentFromStats(name, stats)
- };
- if (settings.stats) {
- entry.stats = stats;
- }
- done(null, entry);
- });
- };
- });
- rpl(tasks, (rplError, entries) => {
- if (rplError !== null) {
- callFailureCallback$1(callback, rplError);
- return;
- }
- callSuccessCallback$1(callback, entries);
- });
- });
-}
-async$1.readdir = readdir$3;
-function callFailureCallback$1(callback, error) {
- callback(error);
-}
-function callSuccessCallback$1(callback, result) {
- callback(null, result);
-}
-
-var sync$9 = {};
-
-Object.defineProperty(sync$9, "__esModule", { value: true });
-sync$9.readdir = sync$9.readdirWithFileTypes = sync$9.read = void 0;
-const fsStat$4 = out$3;
-const constants_1 = constants$2;
-const utils$7 = utils$9;
-const common$b = common$d;
-function read(directory, settings) {
- if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
- return readdirWithFileTypes(directory, settings);
- }
- return readdir$2(directory, settings);
-}
-sync$9.read = read;
-function readdirWithFileTypes(directory, settings) {
- const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
- return dirents.map((dirent) => {
- const entry = {
- dirent,
- name: dirent.name,
- path: common$b.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)
- };
- if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
- try {
- const stats = settings.fs.statSync(entry.path);
- entry.dirent = utils$7.fs.createDirentFromStats(entry.name, stats);
- }
- catch (error) {
- if (settings.throwErrorOnBrokenSymbolicLink) {
- throw error;
- }
- }
- }
- return entry;
- });
-}
-sync$9.readdirWithFileTypes = readdirWithFileTypes;
-function readdir$2(directory, settings) {
- const names = settings.fs.readdirSync(directory);
- return names.map((name) => {
- const entryPath = common$b.joinPathSegments(directory, name, settings.pathSegmentSeparator);
- const stats = fsStat$4.statSync(entryPath, settings.fsStatSettings);
- const entry = {
- name,
- path: entryPath,
- dirent: utils$7.fs.createDirentFromStats(name, stats)
- };
- if (settings.stats) {
- entry.stats = stats;
- }
- return entry;
- });
-}
-sync$9.readdir = readdir$2;
-
-var settings$2 = {};
-
-var fs$k = {};
-
-(function (exports) {
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
-const fs = fs__default;
-exports.FILE_SYSTEM_ADAPTER = {
- lstat: fs.lstat,
- stat: fs.stat,
- lstatSync: fs.lstatSync,
- statSync: fs.statSync,
- readdir: fs.readdir,
- readdirSync: fs.readdirSync
-};
-function createFileSystemAdapter(fsMethods) {
- if (fsMethods === undefined) {
- return exports.FILE_SYSTEM_ADAPTER;
- }
- return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
-}
-exports.createFileSystemAdapter = createFileSystemAdapter;
-}(fs$k));
-
-Object.defineProperty(settings$2, "__esModule", { value: true });
-const path$m = path__default;
-const fsStat$3 = out$3;
-const fs$j = fs$k;
-class Settings$1 {
- constructor(_options = {}) {
- this._options = _options;
- this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
- this.fs = fs$j.createFileSystemAdapter(this._options.fs);
- this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$m.sep);
- this.stats = this._getValue(this._options.stats, false);
- this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
- this.fsStatSettings = new fsStat$3.Settings({
- followSymbolicLink: this.followSymbolicLinks,
- fs: this.fs,
- throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
- });
- }
- _getValue(option, value) {
- return option !== null && option !== void 0 ? option : value;
- }
-}
-settings$2.default = Settings$1;
-
-Object.defineProperty(out$1, "__esModule", { value: true });
-out$1.Settings = out$1.scandirSync = out$1.scandir = void 0;
-const async = async$1;
-const sync$8 = sync$9;
-const settings_1$2 = settings$2;
-out$1.Settings = settings_1$2.default;
-function scandir(path, optionsOrSettingsOrCallback, callback) {
- if (typeof optionsOrSettingsOrCallback === 'function') {
- async.read(path, getSettings$1(), optionsOrSettingsOrCallback);
- return;
- }
- async.read(path, getSettings$1(optionsOrSettingsOrCallback), callback);
-}
-out$1.scandir = scandir;
-function scandirSync(path, optionsOrSettings) {
- const settings = getSettings$1(optionsOrSettings);
- return sync$8.read(path, settings);
-}
-out$1.scandirSync = scandirSync;
-function getSettings$1(settingsOrOptions = {}) {
- if (settingsOrOptions instanceof settings_1$2.default) {
- return settingsOrOptions;
- }
- return new settings_1$2.default(settingsOrOptions);
-}
-
-var queue = {exports: {}};
-
-function reusify$1 (Constructor) {
- var head = new Constructor();
- var tail = head;
-
- function get () {
- var current = head;
-
- if (current.next) {
- head = current.next;
- } else {
- head = new Constructor();
- tail = head;
- }
-
- current.next = null;
-
- return current
- }
-
- function release (obj) {
- tail.next = obj;
- tail = obj;
- }
-
- return {
- get: get,
- release: release
- }
-}
-
-var reusify_1 = reusify$1;
-
-/* eslint-disable no-var */
-
-var reusify = reusify_1;
-
-function fastqueue (context, worker, concurrency) {
- if (typeof context === 'function') {
- concurrency = worker;
- worker = context;
- context = null;
- }
-
- if (concurrency < 1) {
- throw new Error('fastqueue concurrency must be greater than 1')
- }
-
- var cache = reusify(Task);
- var queueHead = null;
- var queueTail = null;
- var _running = 0;
- var errorHandler = null;
-
- var self = {
- push: push,
- drain: noop$3,
- saturated: noop$3,
- pause: pause,
- paused: false,
- concurrency: concurrency,
- running: running,
- resume: resume,
- idle: idle,
- length: length,
- getQueue: getQueue,
- unshift: unshift,
- empty: noop$3,
- kill: kill,
- killAndDrain: killAndDrain,
- error: error
- };
-
- return self
-
- function running () {
- return _running
- }
-
- function pause () {
- self.paused = true;
- }
-
- function length () {
- var current = queueHead;
- var counter = 0;
-
- while (current) {
- current = current.next;
- counter++;
- }
-
- return counter
- }
-
- function getQueue () {
- var current = queueHead;
- var tasks = [];
-
- while (current) {
- tasks.push(current.value);
- current = current.next;
- }
-
- return tasks
- }
-
- function resume () {
- if (!self.paused) return
- self.paused = false;
- for (var i = 0; i < self.concurrency; i++) {
- _running++;
- release();
- }
- }
-
- function idle () {
- return _running === 0 && self.length() === 0
- }
-
- function push (value, done) {
- var current = cache.get();
-
- current.context = context;
- current.release = release;
- current.value = value;
- current.callback = done || noop$3;
- current.errorHandler = errorHandler;
-
- if (_running === self.concurrency || self.paused) {
- if (queueTail) {
- queueTail.next = current;
- queueTail = current;
- } else {
- queueHead = current;
- queueTail = current;
- self.saturated();
- }
- } else {
- _running++;
- worker.call(context, current.value, current.worked);
- }
- }
-
- function unshift (value, done) {
- var current = cache.get();
-
- current.context = context;
- current.release = release;
- current.value = value;
- current.callback = done || noop$3;
-
- if (_running === self.concurrency || self.paused) {
- if (queueHead) {
- current.next = queueHead;
- queueHead = current;
- } else {
- queueHead = current;
- queueTail = current;
- self.saturated();
- }
- } else {
- _running++;
- worker.call(context, current.value, current.worked);
- }
- }
-
- function release (holder) {
- if (holder) {
- cache.release(holder);
- }
- var next = queueHead;
- if (next) {
- if (!self.paused) {
- if (queueTail === queueHead) {
- queueTail = null;
- }
- queueHead = next.next;
- next.next = null;
- worker.call(context, next.value, next.worked);
- if (queueTail === null) {
- self.empty();
- }
- } else {
- _running--;
- }
- } else if (--_running === 0) {
- self.drain();
- }
- }
-
- function kill () {
- queueHead = null;
- queueTail = null;
- self.drain = noop$3;
- }
-
- function killAndDrain () {
- queueHead = null;
- queueTail = null;
- self.drain();
- self.drain = noop$3;
- }
-
- function error (handler) {
- errorHandler = handler;
- }
-}
-
-function noop$3 () {}
-
-function Task () {
- this.value = null;
- this.callback = noop$3;
- this.next = null;
- this.release = noop$3;
- this.context = null;
- this.errorHandler = null;
-
- var self = this;
-
- this.worked = function worked (err, result) {
- var callback = self.callback;
- var errorHandler = self.errorHandler;
- var val = self.value;
- self.value = null;
- self.callback = noop$3;
- if (self.errorHandler) {
- errorHandler(err, val);
- }
- callback.call(self.context, err, result);
- self.release(self);
- };
-}
-
-function queueAsPromised (context, worker, concurrency) {
- if (typeof context === 'function') {
- concurrency = worker;
- worker = context;
- context = null;
- }
-
- function asyncWrapper (arg, cb) {
- worker.call(this, arg)
- .then(function (res) {
- cb(null, res);
- }, cb);
- }
-
- var queue = fastqueue(context, asyncWrapper, concurrency);
-
- var pushCb = queue.push;
- var unshiftCb = queue.unshift;
-
- queue.push = push;
- queue.unshift = unshift;
- queue.drained = drained;
-
- return queue
-
- function push (value) {
- var p = new Promise(function (resolve, reject) {
- pushCb(value, function (err, result) {
- if (err) {
- reject(err);
- return
- }
- resolve(result);
- });
- });
-
- // Let's fork the promise chain to
- // make the error bubble up to the user but
- // not lead to a unhandledRejection
- p.catch(noop$3);
-
- return p
- }
-
- function unshift (value) {
- var p = new Promise(function (resolve, reject) {
- unshiftCb(value, function (err, result) {
- if (err) {
- reject(err);
- return
- }
- resolve(result);
- });
- });
-
- // Let's fork the promise chain to
- // make the error bubble up to the user but
- // not lead to a unhandledRejection
- p.catch(noop$3);
-
- return p
- }
-
- function drained () {
- var previousDrain = queue.drain;
-
- var p = new Promise(function (resolve) {
- queue.drain = function () {
- previousDrain();
- resolve();
- };
- });
-
- return p
- }
-}
-
-queue.exports = fastqueue;
-queue.exports.promise = queueAsPromised;
-
-var common$a = {};
-
-Object.defineProperty(common$a, "__esModule", { value: true });
-common$a.joinPathSegments = common$a.replacePathSegmentSeparator = common$a.isAppliedFilter = common$a.isFatalError = void 0;
-function isFatalError(settings, error) {
- if (settings.errorFilter === null) {
- return true;
- }
- return !settings.errorFilter(error);
-}
-common$a.isFatalError = isFatalError;
-function isAppliedFilter(filter, value) {
- return filter === null || filter(value);
-}
-common$a.isAppliedFilter = isAppliedFilter;
-function replacePathSegmentSeparator(filepath, separator) {
- return filepath.split(/[/\\]/).join(separator);
-}
-common$a.replacePathSegmentSeparator = replacePathSegmentSeparator;
-function joinPathSegments(a, b, separator) {
- if (a === '') {
- return b;
- }
- /**
- * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).
- */
- if (a.endsWith(separator)) {
- return a + b;
- }
- return a + separator + b;
-}
-common$a.joinPathSegments = joinPathSegments;
-
-var reader$1 = {};
-
-Object.defineProperty(reader$1, "__esModule", { value: true });
-const common$9 = common$a;
-class Reader$1 {
- constructor(_root, _settings) {
- this._root = _root;
- this._settings = _settings;
- this._root = common$9.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
- }
-}
-reader$1.default = Reader$1;
-
-Object.defineProperty(async$2, "__esModule", { value: true });
-const events_1 = require$$0__default$5;
-const fsScandir$2 = out$1;
-const fastq = queue.exports;
-const common$8 = common$a;
-const reader_1$3 = reader$1;
-class AsyncReader extends reader_1$3.default {
- constructor(_root, _settings) {
- super(_root, _settings);
- this._settings = _settings;
- this._scandir = fsScandir$2.scandir;
- this._emitter = new events_1.EventEmitter();
- this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
- this._isFatalError = false;
- this._isDestroyed = false;
- this._queue.drain = () => {
- if (!this._isFatalError) {
- this._emitter.emit('end');
- }
- };
- }
- read() {
- this._isFatalError = false;
- this._isDestroyed = false;
- setImmediate(() => {
- this._pushToQueue(this._root, this._settings.basePath);
- });
- return this._emitter;
- }
- get isDestroyed() {
- return this._isDestroyed;
- }
- destroy() {
- if (this._isDestroyed) {
- throw new Error('The reader is already destroyed');
- }
- this._isDestroyed = true;
- this._queue.killAndDrain();
- }
- onEntry(callback) {
- this._emitter.on('entry', callback);
- }
- onError(callback) {
- this._emitter.once('error', callback);
- }
- onEnd(callback) {
- this._emitter.once('end', callback);
- }
- _pushToQueue(directory, base) {
- const queueItem = { directory, base };
- this._queue.push(queueItem, (error) => {
- if (error !== null) {
- this._handleError(error);
- }
- });
- }
- _worker(item, done) {
- this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {
- if (error !== null) {
- done(error, undefined);
- return;
- }
- for (const entry of entries) {
- this._handleEntry(entry, item.base);
- }
- done(null, undefined);
- });
- }
- _handleError(error) {
- if (this._isDestroyed || !common$8.isFatalError(this._settings, error)) {
- return;
- }
- this._isFatalError = true;
- this._isDestroyed = true;
- this._emitter.emit('error', error);
- }
- _handleEntry(entry, base) {
- if (this._isDestroyed || this._isFatalError) {
- return;
- }
- const fullpath = entry.path;
- if (base !== undefined) {
- entry.path = common$8.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
- }
- if (common$8.isAppliedFilter(this._settings.entryFilter, entry)) {
- this._emitEntry(entry);
- }
- if (entry.dirent.isDirectory() && common$8.isAppliedFilter(this._settings.deepFilter, entry)) {
- this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);
- }
- }
- _emitEntry(entry) {
- this._emitter.emit('entry', entry);
- }
-}
-async$2.default = AsyncReader;
-
-Object.defineProperty(async$3, "__esModule", { value: true });
-const async_1$3 = async$2;
-class AsyncProvider {
- constructor(_root, _settings) {
- this._root = _root;
- this._settings = _settings;
- this._reader = new async_1$3.default(this._root, this._settings);
- this._storage = [];
- }
- read(callback) {
- this._reader.onError((error) => {
- callFailureCallback(callback, error);
- });
- this._reader.onEntry((entry) => {
- this._storage.push(entry);
- });
- this._reader.onEnd(() => {
- callSuccessCallback(callback, this._storage);
- });
- this._reader.read();
- }
-}
-async$3.default = AsyncProvider;
-function callFailureCallback(callback, error) {
- callback(error);
-}
-function callSuccessCallback(callback, entries) {
- callback(null, entries);
-}
-
-var stream$4 = {};
-
-Object.defineProperty(stream$4, "__esModule", { value: true });
-const stream_1$5 = require$$0__default$4;
-const async_1$2 = async$2;
-class StreamProvider {
- constructor(_root, _settings) {
- this._root = _root;
- this._settings = _settings;
- this._reader = new async_1$2.default(this._root, this._settings);
- this._stream = new stream_1$5.Readable({
- objectMode: true,
- read: () => { },
- destroy: () => {
- if (!this._reader.isDestroyed) {
- this._reader.destroy();
- }
- }
- });
- }
- read() {
- this._reader.onError((error) => {
- this._stream.emit('error', error);
- });
- this._reader.onEntry((entry) => {
- this._stream.push(entry);
- });
- this._reader.onEnd(() => {
- this._stream.push(null);
- });
- this._reader.read();
- return this._stream;
- }
-}
-stream$4.default = StreamProvider;
-
-var sync$7 = {};
-
-var sync$6 = {};
-
-Object.defineProperty(sync$6, "__esModule", { value: true });
-const fsScandir$1 = out$1;
-const common$7 = common$a;
-const reader_1$2 = reader$1;
-class SyncReader extends reader_1$2.default {
- constructor() {
- super(...arguments);
- this._scandir = fsScandir$1.scandirSync;
- this._storage = [];
- this._queue = new Set();
- }
- read() {
- this._pushToQueue(this._root, this._settings.basePath);
- this._handleQueue();
- return this._storage;
- }
- _pushToQueue(directory, base) {
- this._queue.add({ directory, base });
- }
- _handleQueue() {
- for (const item of this._queue.values()) {
- this._handleDirectory(item.directory, item.base);
- }
- }
- _handleDirectory(directory, base) {
- try {
- const entries = this._scandir(directory, this._settings.fsScandirSettings);
- for (const entry of entries) {
- this._handleEntry(entry, base);
- }
- }
- catch (error) {
- this._handleError(error);
- }
- }
- _handleError(error) {
- if (!common$7.isFatalError(this._settings, error)) {
- return;
- }
- throw error;
- }
- _handleEntry(entry, base) {
- const fullpath = entry.path;
- if (base !== undefined) {
- entry.path = common$7.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
- }
- if (common$7.isAppliedFilter(this._settings.entryFilter, entry)) {
- this._pushToStorage(entry);
- }
- if (entry.dirent.isDirectory() && common$7.isAppliedFilter(this._settings.deepFilter, entry)) {
- this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);
- }
- }
- _pushToStorage(entry) {
- this._storage.push(entry);
- }
-}
-sync$6.default = SyncReader;
-
-Object.defineProperty(sync$7, "__esModule", { value: true });
-const sync_1$3 = sync$6;
-class SyncProvider {
- constructor(_root, _settings) {
- this._root = _root;
- this._settings = _settings;
- this._reader = new sync_1$3.default(this._root, this._settings);
- }
- read() {
- return this._reader.read();
- }
-}
-sync$7.default = SyncProvider;
-
-var settings$1 = {};
-
-Object.defineProperty(settings$1, "__esModule", { value: true });
-const path$l = path__default;
-const fsScandir = out$1;
-class Settings {
- constructor(_options = {}) {
- this._options = _options;
- this.basePath = this._getValue(this._options.basePath, undefined);
- this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);
- this.deepFilter = this._getValue(this._options.deepFilter, null);
- this.entryFilter = this._getValue(this._options.entryFilter, null);
- this.errorFilter = this._getValue(this._options.errorFilter, null);
- this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$l.sep);
- this.fsScandirSettings = new fsScandir.Settings({
- followSymbolicLinks: this._options.followSymbolicLinks,
- fs: this._options.fs,
- pathSegmentSeparator: this._options.pathSegmentSeparator,
- stats: this._options.stats,
- throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
- });
- }
- _getValue(option, value) {
- return option !== null && option !== void 0 ? option : value;
- }
-}
-settings$1.default = Settings;
-
-Object.defineProperty(out$2, "__esModule", { value: true });
-out$2.Settings = out$2.walkStream = out$2.walkSync = out$2.walk = void 0;
-const async_1$1 = async$3;
-const stream_1$4 = stream$4;
-const sync_1$2 = sync$7;
-const settings_1$1 = settings$1;
-out$2.Settings = settings_1$1.default;
-function walk$3(directory, optionsOrSettingsOrCallback, callback) {
- if (typeof optionsOrSettingsOrCallback === 'function') {
- new async_1$1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);
- return;
- }
- new async_1$1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);
-}
-out$2.walk = walk$3;
-function walkSync(directory, optionsOrSettings) {
- const settings = getSettings(optionsOrSettings);
- const provider = new sync_1$2.default(directory, settings);
- return provider.read();
-}
-out$2.walkSync = walkSync;
-function walkStream(directory, optionsOrSettings) {
- const settings = getSettings(optionsOrSettings);
- const provider = new stream_1$4.default(directory, settings);
- return provider.read();
-}
-out$2.walkStream = walkStream;
-function getSettings(settingsOrOptions = {}) {
- if (settingsOrOptions instanceof settings_1$1.default) {
- return settingsOrOptions;
- }
- return new settings_1$1.default(settingsOrOptions);
-}
-
-var reader = {};
-
-Object.defineProperty(reader, "__esModule", { value: true });
-const path$k = path__default;
-const fsStat$2 = out$3;
-const utils$6 = utils$k;
-class Reader {
- constructor(_settings) {
- this._settings = _settings;
- this._fsStatSettings = new fsStat$2.Settings({
- followSymbolicLink: this._settings.followSymbolicLinks,
- fs: this._settings.fs,
- throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
- });
- }
- _getFullEntryPath(filepath) {
- return path$k.resolve(this._settings.cwd, filepath);
- }
- _makeEntry(stats, pattern) {
- const entry = {
- name: pattern,
- path: pattern,
- dirent: utils$6.fs.createDirentFromStats(pattern, stats)
- };
- if (this._settings.stats) {
- entry.stats = stats;
- }
- return entry;
- }
- _isFatalError(error) {
- return !utils$6.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
- }
-}
-reader.default = Reader;
-
-Object.defineProperty(stream$5, "__esModule", { value: true });
-const stream_1$3 = require$$0__default$4;
-const fsStat$1 = out$3;
-const fsWalk$1 = out$2;
-const reader_1$1 = reader;
-class ReaderStream extends reader_1$1.default {
- constructor() {
- super(...arguments);
- this._walkStream = fsWalk$1.walkStream;
- this._stat = fsStat$1.stat;
- }
- dynamic(root, options) {
- return this._walkStream(root, options);
- }
- static(patterns, options) {
- const filepaths = patterns.map(this._getFullEntryPath, this);
- const stream = new stream_1$3.PassThrough({ objectMode: true });
- stream._write = (index, _enc, done) => {
- return this._getEntry(filepaths[index], patterns[index], options)
- .then((entry) => {
- if (entry !== null && options.entryFilter(entry)) {
- stream.push(entry);
- }
- if (index === filepaths.length - 1) {
- stream.end();
- }
- done();
- })
- .catch(done);
- };
- for (let i = 0; i < filepaths.length; i++) {
- stream.write(i);
- }
- return stream;
- }
- _getEntry(filepath, pattern, options) {
- return this._getStat(filepath)
- .then((stats) => this._makeEntry(stats, pattern))
- .catch((error) => {
- if (options.errorFilter(error)) {
- return null;
- }
- throw error;
- });
- }
- _getStat(filepath) {
- return new Promise((resolve, reject) => {
- this._stat(filepath, this._fsStatSettings, (error, stats) => {
- return error === null ? resolve(stats) : reject(error);
- });
- });
- }
-}
-stream$5.default = ReaderStream;
-
-var provider = {};
-
-var deep = {};
-
-var partial = {};
-
-var matcher = {};
-
-Object.defineProperty(matcher, "__esModule", { value: true });
-const utils$5 = utils$k;
-class Matcher {
- constructor(_patterns, _settings, _micromatchOptions) {
- this._patterns = _patterns;
- this._settings = _settings;
- this._micromatchOptions = _micromatchOptions;
- this._storage = [];
- this._fillStorage();
- }
- _fillStorage() {
- /**
- * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).
- * So, before expand patterns with brace expansion into separated patterns.
- */
- const patterns = utils$5.pattern.expandPatternsWithBraceExpansion(this._patterns);
- for (const pattern of patterns) {
- const segments = this._getPatternSegments(pattern);
- const sections = this._splitSegmentsIntoSections(segments);
- this._storage.push({
- complete: sections.length <= 1,
- pattern,
- segments,
- sections
- });
- }
- }
- _getPatternSegments(pattern) {
- const parts = utils$5.pattern.getPatternParts(pattern, this._micromatchOptions);
- return parts.map((part) => {
- const dynamic = utils$5.pattern.isDynamicPattern(part, this._settings);
- if (!dynamic) {
- return {
- dynamic: false,
- pattern: part
- };
- }
- return {
- dynamic: true,
- pattern: part,
- patternRe: utils$5.pattern.makeRe(part, this._micromatchOptions)
- };
- });
- }
- _splitSegmentsIntoSections(segments) {
- return utils$5.array.splitWhen(segments, (segment) => segment.dynamic && utils$5.pattern.hasGlobStar(segment.pattern));
- }
-}
-matcher.default = Matcher;
-
-Object.defineProperty(partial, "__esModule", { value: true });
-const matcher_1 = matcher;
-class PartialMatcher extends matcher_1.default {
- match(filepath) {
- const parts = filepath.split('/');
- const levels = parts.length;
- const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
- for (const pattern of patterns) {
- const section = pattern.sections[0];
- /**
- * In this case, the pattern has a globstar and we must read all directories unconditionally,
- * but only if the level has reached the end of the first group.
- *
- * fixtures/{a,b}/**
- * ^ true/false ^ always true
- */
- if (!pattern.complete && levels > section.length) {
- return true;
- }
- const match = parts.every((part, index) => {
- const segment = pattern.segments[index];
- if (segment.dynamic && segment.patternRe.test(part)) {
- return true;
- }
- if (!segment.dynamic && segment.pattern === part) {
- return true;
- }
- return false;
- });
- if (match) {
- return true;
- }
- }
- return false;
- }
-}
-partial.default = PartialMatcher;
-
-Object.defineProperty(deep, "__esModule", { value: true });
-const utils$4 = utils$k;
-const partial_1 = partial;
-class DeepFilter {
- constructor(_settings, _micromatchOptions) {
- this._settings = _settings;
- this._micromatchOptions = _micromatchOptions;
- }
- getFilter(basePath, positive, negative) {
- const matcher = this._getMatcher(positive);
- const negativeRe = this._getNegativePatternsRe(negative);
- return (entry) => this._filter(basePath, entry, matcher, negativeRe);
- }
- _getMatcher(patterns) {
- return new partial_1.default(patterns, this._settings, this._micromatchOptions);
- }
- _getNegativePatternsRe(patterns) {
- const affectDepthOfReadingPatterns = patterns.filter(utils$4.pattern.isAffectDepthOfReadingPattern);
- return utils$4.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
- }
- _filter(basePath, entry, matcher, negativeRe) {
- if (this._isSkippedByDeep(basePath, entry.path)) {
- return false;
- }
- if (this._isSkippedSymbolicLink(entry)) {
- return false;
- }
- const filepath = utils$4.path.removeLeadingDotSegment(entry.path);
- if (this._isSkippedByPositivePatterns(filepath, matcher)) {
- return false;
- }
- return this._isSkippedByNegativePatterns(filepath, negativeRe);
- }
- _isSkippedByDeep(basePath, entryPath) {
- /**
- * Avoid unnecessary depth calculations when it doesn't matter.
- */
- if (this._settings.deep === Infinity) {
- return false;
- }
- return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;
- }
- _getEntryLevel(basePath, entryPath) {
- const entryPathDepth = entryPath.split('/').length;
- if (basePath === '') {
- return entryPathDepth;
- }
- const basePathDepth = basePath.split('/').length;
- return entryPathDepth - basePathDepth;
- }
- _isSkippedSymbolicLink(entry) {
- return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
- }
- _isSkippedByPositivePatterns(entryPath, matcher) {
- return !this._settings.baseNameMatch && !matcher.match(entryPath);
- }
- _isSkippedByNegativePatterns(entryPath, patternsRe) {
- return !utils$4.pattern.matchAny(entryPath, patternsRe);
- }
-}
-deep.default = DeepFilter;
-
-var entry$1 = {};
-
-Object.defineProperty(entry$1, "__esModule", { value: true });
-const utils$3 = utils$k;
-class EntryFilter {
- constructor(_settings, _micromatchOptions) {
- this._settings = _settings;
- this._micromatchOptions = _micromatchOptions;
- this.index = new Map();
- }
- getFilter(positive, negative) {
- const positiveRe = utils$3.pattern.convertPatternsToRe(positive, this._micromatchOptions);
- const negativeRe = utils$3.pattern.convertPatternsToRe(negative, this._micromatchOptions);
- return (entry) => this._filter(entry, positiveRe, negativeRe);
- }
- _filter(entry, positiveRe, negativeRe) {
- if (this._settings.unique && this._isDuplicateEntry(entry)) {
- return false;
- }
- if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
- return false;
- }
- if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) {
- return false;
- }
- const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
- const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);
- if (this._settings.unique && isMatched) {
- this._createIndexRecord(entry);
- }
- return isMatched;
- }
- _isDuplicateEntry(entry) {
- return this.index.has(entry.path);
- }
- _createIndexRecord(entry) {
- this.index.set(entry.path, undefined);
- }
- _onlyFileFilter(entry) {
- return this._settings.onlyFiles && !entry.dirent.isFile();
- }
- _onlyDirectoryFilter(entry) {
- return this._settings.onlyDirectories && !entry.dirent.isDirectory();
- }
- _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {
- if (!this._settings.absolute) {
- return false;
- }
- const fullpath = utils$3.path.makeAbsolute(this._settings.cwd, entryPath);
- return utils$3.pattern.matchAny(fullpath, patternsRe);
- }
- _isMatchToPatterns(entryPath, patternsRe) {
- const filepath = utils$3.path.removeLeadingDotSegment(entryPath);
- return utils$3.pattern.matchAny(filepath, patternsRe);
- }
-}
-entry$1.default = EntryFilter;
-
-var error$4 = {};
-
-Object.defineProperty(error$4, "__esModule", { value: true });
-const utils$2 = utils$k;
-class ErrorFilter {
- constructor(_settings) {
- this._settings = _settings;
- }
- getFilter() {
- return (error) => this._isNonFatalError(error);
- }
- _isNonFatalError(error) {
- return utils$2.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
- }
-}
-error$4.default = ErrorFilter;
-
-var entry = {};
-
-Object.defineProperty(entry, "__esModule", { value: true });
-const utils$1 = utils$k;
-class EntryTransformer {
- constructor(_settings) {
- this._settings = _settings;
- }
- getTransformer() {
- return (entry) => this._transform(entry);
- }
- _transform(entry) {
- let filepath = entry.path;
- if (this._settings.absolute) {
- filepath = utils$1.path.makeAbsolute(this._settings.cwd, filepath);
- filepath = utils$1.path.unixify(filepath);
- }
- if (this._settings.markDirectories && entry.dirent.isDirectory()) {
- filepath += '/';
- }
- if (!this._settings.objectMode) {
- return filepath;
- }
- return Object.assign(Object.assign({}, entry), { path: filepath });
- }
-}
-entry.default = EntryTransformer;
-
-Object.defineProperty(provider, "__esModule", { value: true });
-const path$j = path__default;
-const deep_1 = deep;
-const entry_1 = entry$1;
-const error_1 = error$4;
-const entry_2 = entry;
-class Provider {
- constructor(_settings) {
- this._settings = _settings;
- this.errorFilter = new error_1.default(this._settings);
- this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
- this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
- this.entryTransformer = new entry_2.default(this._settings);
- }
- _getRootDirectory(task) {
- return path$j.resolve(this._settings.cwd, task.base);
- }
- _getReaderOptions(task) {
- const basePath = task.base === '.' ? '' : task.base;
- return {
- basePath,
- pathSegmentSeparator: '/',
- concurrency: this._settings.concurrency,
- deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
- entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
- errorFilter: this.errorFilter.getFilter(),
- followSymbolicLinks: this._settings.followSymbolicLinks,
- fs: this._settings.fs,
- stats: this._settings.stats,
- throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
- transform: this.entryTransformer.getTransformer()
- };
- }
- _getMicromatchOptions() {
- return {
- dot: this._settings.dot,
- matchBase: this._settings.baseNameMatch,
- nobrace: !this._settings.braceExpansion,
- nocase: !this._settings.caseSensitiveMatch,
- noext: !this._settings.extglob,
- noglobstar: !this._settings.globstar,
- posix: true,
- strictSlashes: false
- };
- }
-}
-provider.default = Provider;
-
-Object.defineProperty(async$6, "__esModule", { value: true });
-const stream_1$2 = stream$5;
-const provider_1$2 = provider;
-class ProviderAsync extends provider_1$2.default {
- constructor() {
- super(...arguments);
- this._reader = new stream_1$2.default(this._settings);
- }
- read(task) {
- const root = this._getRootDirectory(task);
- const options = this._getReaderOptions(task);
- const entries = [];
- return new Promise((resolve, reject) => {
- const stream = this.api(root, task, options);
- stream.once('error', reject);
- stream.on('data', (entry) => entries.push(options.transform(entry)));
- stream.once('end', () => resolve(entries));
- });
- }
- api(root, task, options) {
- if (task.dynamic) {
- return this._reader.dynamic(root, options);
- }
- return this._reader.static(task.patterns, options);
- }
-}
-async$6.default = ProviderAsync;
-
-var stream$3 = {};
-
-Object.defineProperty(stream$3, "__esModule", { value: true });
-const stream_1$1 = require$$0__default$4;
-const stream_2 = stream$5;
-const provider_1$1 = provider;
-class ProviderStream extends provider_1$1.default {
- constructor() {
- super(...arguments);
- this._reader = new stream_2.default(this._settings);
- }
- read(task) {
- const root = this._getRootDirectory(task);
- const options = this._getReaderOptions(task);
- const source = this.api(root, task, options);
- const destination = new stream_1$1.Readable({ objectMode: true, read: () => { } });
- source
- .once('error', (error) => destination.emit('error', error))
- .on('data', (entry) => destination.emit('data', options.transform(entry)))
- .once('end', () => destination.emit('end'));
- destination
- .once('close', () => source.destroy());
- return destination;
- }
- api(root, task, options) {
- if (task.dynamic) {
- return this._reader.dynamic(root, options);
- }
- return this._reader.static(task.patterns, options);
- }
-}
-stream$3.default = ProviderStream;
-
-var sync$5 = {};
-
-var sync$4 = {};
-
-Object.defineProperty(sync$4, "__esModule", { value: true });
-const fsStat = out$3;
-const fsWalk = out$2;
-const reader_1 = reader;
-class ReaderSync extends reader_1.default {
- constructor() {
- super(...arguments);
- this._walkSync = fsWalk.walkSync;
- this._statSync = fsStat.statSync;
- }
- dynamic(root, options) {
- return this._walkSync(root, options);
- }
- static(patterns, options) {
- const entries = [];
- for (const pattern of patterns) {
- const filepath = this._getFullEntryPath(pattern);
- const entry = this._getEntry(filepath, pattern, options);
- if (entry === null || !options.entryFilter(entry)) {
- continue;
- }
- entries.push(entry);
- }
- return entries;
- }
- _getEntry(filepath, pattern, options) {
- try {
- const stats = this._getStat(filepath);
- return this._makeEntry(stats, pattern);
- }
- catch (error) {
- if (options.errorFilter(error)) {
- return null;
- }
- throw error;
- }
- }
- _getStat(filepath) {
- return this._statSync(filepath, this._fsStatSettings);
- }
-}
-sync$4.default = ReaderSync;
-
-Object.defineProperty(sync$5, "__esModule", { value: true });
-const sync_1$1 = sync$4;
-const provider_1 = provider;
-class ProviderSync extends provider_1.default {
- constructor() {
- super(...arguments);
- this._reader = new sync_1$1.default(this._settings);
- }
- read(task) {
- const root = this._getRootDirectory(task);
- const options = this._getReaderOptions(task);
- const entries = this.api(root, task, options);
- return entries.map(options.transform);
- }
- api(root, task, options) {
- if (task.dynamic) {
- return this._reader.dynamic(root, options);
- }
- return this._reader.static(task.patterns, options);
- }
-}
-sync$5.default = ProviderSync;
-
-var settings = {};
-
-(function (exports) {
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
-const fs = fs__default;
-const os = require$$0__default$1;
-/**
- * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.
- * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107
- */
-const CPU_COUNT = Math.max(os.cpus().length, 1);
-exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
- lstat: fs.lstat,
- lstatSync: fs.lstatSync,
- stat: fs.stat,
- statSync: fs.statSync,
- readdir: fs.readdir,
- readdirSync: fs.readdirSync
-};
-class Settings {
- constructor(_options = {}) {
- this._options = _options;
- this.absolute = this._getValue(this._options.absolute, false);
- this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
- this.braceExpansion = this._getValue(this._options.braceExpansion, true);
- this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
- this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
- this.cwd = this._getValue(this._options.cwd, process.cwd());
- this.deep = this._getValue(this._options.deep, Infinity);
- this.dot = this._getValue(this._options.dot, false);
- this.extglob = this._getValue(this._options.extglob, true);
- this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
- this.fs = this._getFileSystemMethods(this._options.fs);
- this.globstar = this._getValue(this._options.globstar, true);
- this.ignore = this._getValue(this._options.ignore, []);
- this.markDirectories = this._getValue(this._options.markDirectories, false);
- this.objectMode = this._getValue(this._options.objectMode, false);
- this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
- this.onlyFiles = this._getValue(this._options.onlyFiles, true);
- this.stats = this._getValue(this._options.stats, false);
- this.suppressErrors = this._getValue(this._options.suppressErrors, false);
- this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
- this.unique = this._getValue(this._options.unique, true);
- if (this.onlyDirectories) {
- this.onlyFiles = false;
- }
- if (this.stats) {
- this.objectMode = true;
- }
- }
- _getValue(option, value) {
- return option === undefined ? value : option;
- }
- _getFileSystemMethods(methods = {}) {
- return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
- }
-}
-exports.default = Settings;
-}(settings));
-
-const taskManager = tasks;
-const async_1 = async$6;
-const stream_1 = stream$3;
-const sync_1 = sync$5;
-const settings_1 = settings;
-const utils = utils$k;
-async function FastGlob(source, options) {
- assertPatternsInput$1(source);
- const works = getWorks(source, async_1.default, options);
- const result = await Promise.all(works);
- return utils.array.flatten(result);
-}
-// https://github.com/typescript-eslint/typescript-eslint/issues/60
-// eslint-disable-next-line no-redeclare
-(function (FastGlob) {
- function sync(source, options) {
- assertPatternsInput$1(source);
- const works = getWorks(source, sync_1.default, options);
- return utils.array.flatten(works);
- }
- FastGlob.sync = sync;
- function stream(source, options) {
- assertPatternsInput$1(source);
- const works = getWorks(source, stream_1.default, options);
- /**
- * The stream returned by the provider cannot work with an asynchronous iterator.
- * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.
- * This affects performance (+25%). I don't see best solution right now.
- */
- return utils.stream.merge(works);
- }
- FastGlob.stream = stream;
- function generateTasks(source, options) {
- assertPatternsInput$1(source);
- const patterns = [].concat(source);
- const settings = new settings_1.default(options);
- return taskManager.generate(patterns, settings);
- }
- FastGlob.generateTasks = generateTasks;
- function isDynamicPattern(source, options) {
- assertPatternsInput$1(source);
- const settings = new settings_1.default(options);
- return utils.pattern.isDynamicPattern(source, settings);
- }
- FastGlob.isDynamicPattern = isDynamicPattern;
- function escapePath(source) {
- assertPatternsInput$1(source);
- return utils.path.escape(source);
- }
- FastGlob.escapePath = escapePath;
-})(FastGlob || (FastGlob = {}));
-function getWorks(source, _Provider, options) {
- const patterns = [].concat(source);
- const settings = new settings_1.default(options);
- const tasks = taskManager.generate(patterns, settings);
- const provider = new _Provider(settings);
- return tasks.map(provider.read, provider);
-}
-function assertPatternsInput$1(input) {
- const source = [].concat(input);
- const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));
- if (!isValidSource) {
- throw new TypeError('Patterns must be a string (non empty) or an array of strings');
- }
-}
-var out = FastGlob;
-
-var dist$2 = {};
-
-(function (exports) {
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.lilconfigSync = exports.lilconfig = exports.defaultLoaders = void 0;
-const path = path__default;
-const fs = fs__default;
-const os = require$$0__default$1;
-const fsReadFileAsync = fs.promises.readFile;
-function getDefaultSearchPlaces(name) {
- return [
- 'package.json',
- `.${name}rc.json`,
- `.${name}rc.js`,
- `${name}.config.js`,
- `.${name}rc.cjs`,
- `${name}.config.cjs`,
- ];
-}
-function getSearchPaths(startDir, stopDir) {
- return startDir
- .split(path.sep)
- .reduceRight((acc, _, ind, arr) => {
- const currentPath = arr.slice(0, ind + 1).join(path.sep);
- if (!acc.passedStopDir)
- acc.searchPlaces.push(currentPath || path.sep);
- if (currentPath === stopDir)
- acc.passedStopDir = true;
- return acc;
- }, { searchPlaces: [], passedStopDir: false }).searchPlaces;
-}
-exports.defaultLoaders = Object.freeze({
- '.js': eval('require'),
- '.json': eval('require'),
- '.cjs': eval('require'),
- noExt(_, content) {
- return JSON.parse(content);
- },
-});
-function getExtDesc(ext) {
- return ext === 'noExt' ? 'files without extensions' : `extension "${ext}"`;
-}
-function getOptions(name, options = {}) {
- const conf = {
- stopDir: os.homedir(),
- searchPlaces: getDefaultSearchPlaces(name),
- ignoreEmptySearchPlaces: true,
- transform: (x) => x,
- packageProp: [name],
- ...options,
- loaders: { ...exports.defaultLoaders, ...options.loaders },
- };
- conf.searchPlaces.forEach(place => {
- const key = path.extname(place) || 'noExt';
- const loader = conf.loaders[key];
- if (!loader) {
- throw new Error(`No loader specified for ${getExtDesc(key)}, so searchPlaces item "${place}" is invalid`);
- }
- if (typeof loader !== 'function') {
- throw new Error(`loader for ${getExtDesc(key)} is not a function (type provided: "${typeof loader}"), so searchPlaces item "${place}" is invalid`);
- }
- });
- return conf;
-}
-function getPackageProp(props, obj) {
- if (typeof props === 'string' && props in obj)
- return obj[props];
- return ((Array.isArray(props) ? props : props.split('.')).reduce((acc, prop) => (acc === undefined ? acc : acc[prop]), obj) || null);
-}
-function getSearchItems(searchPlaces, searchPaths) {
- return searchPaths.reduce((acc, searchPath) => {
- searchPlaces.forEach(fileName => acc.push({
- fileName,
- filepath: path.join(searchPath, fileName),
- loaderKey: path.extname(fileName) || 'noExt',
- }));
- return acc;
- }, []);
-}
-function validateFilePath(filepath) {
- if (!filepath)
- throw new Error('load must pass a non-empty string');
-}
-function validateLoader(loader, ext) {
- if (!loader)
- throw new Error(`No loader specified for extension "${ext}"`);
- if (typeof loader !== 'function')
- throw new Error('loader is not a function');
-}
-function lilconfig(name, options) {
- const { ignoreEmptySearchPlaces, loaders, packageProp, searchPlaces, stopDir, transform, } = getOptions(name, options);
- return {
- async search(searchFrom = process.cwd()) {
- const searchPaths = getSearchPaths(searchFrom, stopDir);
- const result = {
- config: null,
- filepath: '',
- };
- const searchItems = getSearchItems(searchPlaces, searchPaths);
- for (const { fileName, filepath, loaderKey } of searchItems) {
- try {
- await fs.promises.access(filepath);
- }
- catch (_a) {
- continue;
- }
- const content = String(await fsReadFileAsync(filepath));
- const loader = loaders[loaderKey];
- if (fileName === 'package.json') {
- const pkg = loader(filepath, content);
- const maybeConfig = getPackageProp(packageProp, pkg);
- if (maybeConfig != null) {
- result.config = maybeConfig;
- result.filepath = filepath;
- break;
- }
- continue;
- }
- const isEmpty = content.trim() === '';
- if (isEmpty && ignoreEmptySearchPlaces)
- continue;
- if (isEmpty) {
- result.isEmpty = true;
- result.config = undefined;
- }
- else {
- validateLoader(loader, loaderKey);
- result.config = loader(filepath, content);
- }
- result.filepath = filepath;
- break;
- }
- if (result.filepath === '' && result.config === null)
- return transform(null);
- return transform(result);
- },
- async load(filepath) {
- validateFilePath(filepath);
- const { base, ext } = path.parse(filepath);
- const loaderKey = ext || 'noExt';
- const loader = loaders[loaderKey];
- validateLoader(loader, loaderKey);
- const content = String(await fsReadFileAsync(filepath));
- if (base === 'package.json') {
- const pkg = await loader(filepath, content);
- return transform({
- config: getPackageProp(packageProp, pkg),
- filepath,
- });
- }
- const result = {
- config: null,
- filepath,
- };
- const isEmpty = content.trim() === '';
- if (isEmpty && ignoreEmptySearchPlaces)
- return transform({
- config: undefined,
- filepath,
- isEmpty: true,
- });
- result.config = isEmpty
- ? undefined
- : await loader(filepath, content);
- return transform(isEmpty ? { ...result, isEmpty, config: undefined } : result);
- },
- };
-}
-exports.lilconfig = lilconfig;
-function lilconfigSync(name, options) {
- const { ignoreEmptySearchPlaces, loaders, packageProp, searchPlaces, stopDir, transform, } = getOptions(name, options);
- return {
- search(searchFrom = process.cwd()) {
- const searchPaths = getSearchPaths(searchFrom, stopDir);
- const result = {
- config: null,
- filepath: '',
- };
- const searchItems = getSearchItems(searchPlaces, searchPaths);
- for (const { fileName, filepath, loaderKey } of searchItems) {
- try {
- fs.accessSync(filepath);
- }
- catch (_a) {
- continue;
- }
- const loader = loaders[loaderKey];
- const content = String(fs.readFileSync(filepath));
- if (fileName === 'package.json') {
- const pkg = loader(filepath, content);
- const maybeConfig = getPackageProp(packageProp, pkg);
- if (maybeConfig != null) {
- result.config = maybeConfig;
- result.filepath = filepath;
- break;
- }
- continue;
- }
- const isEmpty = content.trim() === '';
- if (isEmpty && ignoreEmptySearchPlaces)
- continue;
- if (isEmpty) {
- result.isEmpty = true;
- result.config = undefined;
- }
- else {
- validateLoader(loader, loaderKey);
- result.config = loader(filepath, content);
- }
- result.filepath = filepath;
- break;
- }
- if (result.filepath === '' && result.config === null)
- return transform(null);
- return transform(result);
- },
- load(filepath) {
- validateFilePath(filepath);
- const { base, ext } = path.parse(filepath);
- const loaderKey = ext || 'noExt';
- const loader = loaders[loaderKey];
- validateLoader(loader, loaderKey);
- const content = String(fs.readFileSync(filepath));
- if (base === 'package.json') {
- const pkg = loader(filepath, content);
- return transform({
- config: getPackageProp(packageProp, pkg),
- filepath,
- });
- }
- const result = {
- config: null,
- filepath,
- };
- const isEmpty = content.trim() === '';
- if (isEmpty && ignoreEmptySearchPlaces)
- return transform({
- filepath,
- config: undefined,
- isEmpty: true,
- });
- result.config = isEmpty ? undefined : loader(filepath, content);
- return transform(isEmpty ? { ...result, isEmpty, config: undefined } : result);
- },
- };
-}
-exports.lilconfigSync = lilconfigSync;
-}(dist$2));
-
-var dist$1 = {};
-
-var parseCst$1 = {};
-
-var PlainValueEc8e588e = {};
-
-const Char = {
- ANCHOR: '&',
- COMMENT: '#',
- TAG: '!',
- DIRECTIVES_END: '-',
- DOCUMENT_END: '.'
-};
-const Type = {
- ALIAS: 'ALIAS',
- BLANK_LINE: 'BLANK_LINE',
- BLOCK_FOLDED: 'BLOCK_FOLDED',
- BLOCK_LITERAL: 'BLOCK_LITERAL',
- COMMENT: 'COMMENT',
- DIRECTIVE: 'DIRECTIVE',
- DOCUMENT: 'DOCUMENT',
- FLOW_MAP: 'FLOW_MAP',
- FLOW_SEQ: 'FLOW_SEQ',
- MAP: 'MAP',
- MAP_KEY: 'MAP_KEY',
- MAP_VALUE: 'MAP_VALUE',
- PLAIN: 'PLAIN',
- QUOTE_DOUBLE: 'QUOTE_DOUBLE',
- QUOTE_SINGLE: 'QUOTE_SINGLE',
- SEQ: 'SEQ',
- SEQ_ITEM: 'SEQ_ITEM'
-};
-const defaultTagPrefix = 'tag:yaml.org,2002:';
-const defaultTags = {
- MAP: 'tag:yaml.org,2002:map',
- SEQ: 'tag:yaml.org,2002:seq',
- STR: 'tag:yaml.org,2002:str'
-};
-
-function findLineStarts(src) {
- const ls = [0];
- let offset = src.indexOf('\n');
-
- while (offset !== -1) {
- offset += 1;
- ls.push(offset);
- offset = src.indexOf('\n', offset);
- }
-
- return ls;
-}
-
-function getSrcInfo(cst) {
- let lineStarts, src;
-
- if (typeof cst === 'string') {
- lineStarts = findLineStarts(cst);
- src = cst;
- } else {
- if (Array.isArray(cst)) cst = cst[0];
-
- if (cst && cst.context) {
- if (!cst.lineStarts) cst.lineStarts = findLineStarts(cst.context.src);
- lineStarts = cst.lineStarts;
- src = cst.context.src;
- }
- }
-
- return {
- lineStarts,
- src
- };
-}
-/**
- * @typedef {Object} LinePos - One-indexed position in the source
- * @property {number} line
- * @property {number} col
- */
-
-/**
- * Determine the line/col position matching a character offset.
- *
- * Accepts a source string or a CST document as the second parameter. With
- * the latter, starting indices for lines are cached in the document as
- * `lineStarts: number[]`.
- *
- * Returns a one-indexed `{ line, col }` location if found, or
- * `undefined` otherwise.
- *
- * @param {number} offset
- * @param {string|Document|Document[]} cst
- * @returns {?LinePos}
- */
-
-
-function getLinePos(offset, cst) {
- if (typeof offset !== 'number' || offset < 0) return null;
- const {
- lineStarts,
- src
- } = getSrcInfo(cst);
- if (!lineStarts || !src || offset > src.length) return null;
-
- for (let i = 0; i < lineStarts.length; ++i) {
- const start = lineStarts[i];
-
- if (offset < start) {
- return {
- line: i,
- col: offset - lineStarts[i - 1] + 1
- };
- }
-
- if (offset === start) return {
- line: i + 1,
- col: 1
- };
- }
-
- const line = lineStarts.length;
- return {
- line,
- col: offset - lineStarts[line - 1] + 1
- };
-}
-/**
- * Get a specified line from the source.
- *
- * Accepts a source string or a CST document as the second parameter. With
- * the latter, starting indices for lines are cached in the document as
- * `lineStarts: number[]`.
- *
- * Returns the line as a string if found, or `null` otherwise.
- *
- * @param {number} line One-indexed line number
- * @param {string|Document|Document[]} cst
- * @returns {?string}
- */
-
-function getLine(line, cst) {
- const {
- lineStarts,
- src
- } = getSrcInfo(cst);
- if (!lineStarts || !(line >= 1) || line > lineStarts.length) return null;
- const start = lineStarts[line - 1];
- let end = lineStarts[line]; // undefined for last line; that's ok for slice()
-
- while (end && end > start && src[end - 1] === '\n') --end;
-
- return src.slice(start, end);
-}
-/**
- * Pretty-print the starting line from the source indicated by the range `pos`
- *
- * Trims output to `maxWidth` chars while keeping the starting column visible,
- * using `…` at either end to indicate dropped characters.
- *
- * Returns a two-line string (or `null`) with `\n` as separator; the second line
- * will hold appropriately indented `^` marks indicating the column range.
- *
- * @param {Object} pos
- * @param {LinePos} pos.start
- * @param {LinePos} [pos.end]
- * @param {string|Document|Document[]*} cst
- * @param {number} [maxWidth=80]
- * @returns {?string}
- */
-
-function getPrettyContext({
- start,
- end
-}, cst, maxWidth = 80) {
- let src = getLine(start.line, cst);
- if (!src) return null;
- let {
- col
- } = start;
-
- if (src.length > maxWidth) {
- if (col <= maxWidth - 10) {
- src = src.substr(0, maxWidth - 1) + '…';
- } else {
- const halfWidth = Math.round(maxWidth / 2);
- if (src.length > col + halfWidth) src = src.substr(0, col + halfWidth - 1) + '…';
- col -= src.length - maxWidth;
- src = '…' + src.substr(1 - maxWidth);
- }
- }
-
- let errLen = 1;
- let errEnd = '';
-
- if (end) {
- if (end.line === start.line && col + (end.col - start.col) <= maxWidth + 1) {
- errLen = end.col - start.col;
- } else {
- errLen = Math.min(src.length + 1, maxWidth) - col;
- errEnd = '…';
- }
- }
-
- const offset = col > 1 ? ' '.repeat(col - 1) : '';
- const err = '^'.repeat(errLen);
- return `${src}\n${offset}${err}${errEnd}`;
-}
-
-class Range {
- static copy(orig) {
- return new Range(orig.start, orig.end);
- }
-
- constructor(start, end) {
- this.start = start;
- this.end = end || start;
- }
-
- isEmpty() {
- return typeof this.start !== 'number' || !this.end || this.end <= this.start;
- }
- /**
- * Set `origStart` and `origEnd` to point to the original source range for
- * this node, which may differ due to dropped CR characters.
- *
- * @param {number[]} cr - Positions of dropped CR characters
- * @param {number} offset - Starting index of `cr` from the last call
- * @returns {number} - The next offset, matching the one found for `origStart`
- */
-
-
- setOrigRange(cr, offset) {
- const {
- start,
- end
- } = this;
-
- if (cr.length === 0 || end <= cr[0]) {
- this.origStart = start;
- this.origEnd = end;
- return offset;
- }
-
- let i = offset;
-
- while (i < cr.length) {
- if (cr[i] > start) break;else ++i;
- }
-
- this.origStart = start + i;
- const nextOffset = i;
-
- while (i < cr.length) {
- // if end was at \n, it should now be at \r
- if (cr[i] >= end) break;else ++i;
- }
-
- this.origEnd = end + i;
- return nextOffset;
- }
-
-}
-
-/** Root class of all nodes */
-
-class Node$2 {
- static addStringTerminator(src, offset, str) {
- if (str[str.length - 1] === '\n') return str;
- const next = Node$2.endOfWhiteSpace(src, offset);
- return next >= src.length || src[next] === '\n' ? str + '\n' : str;
- } // ^(---|...)
-
-
- static atDocumentBoundary(src, offset, sep) {
- const ch0 = src[offset];
- if (!ch0) return true;
- const prev = src[offset - 1];
- if (prev && prev !== '\n') return false;
-
- if (sep) {
- if (ch0 !== sep) return false;
- } else {
- if (ch0 !== Char.DIRECTIVES_END && ch0 !== Char.DOCUMENT_END) return false;
- }
-
- const ch1 = src[offset + 1];
- const ch2 = src[offset + 2];
- if (ch1 !== ch0 || ch2 !== ch0) return false;
- const ch3 = src[offset + 3];
- return !ch3 || ch3 === '\n' || ch3 === '\t' || ch3 === ' ';
- }
-
- static endOfIdentifier(src, offset) {
- let ch = src[offset];
- const isVerbatim = ch === '<';
- const notOk = isVerbatim ? ['\n', '\t', ' ', '>'] : ['\n', '\t', ' ', '[', ']', '{', '}', ','];
-
- while (ch && notOk.indexOf(ch) === -1) ch = src[offset += 1];
-
- if (isVerbatim && ch === '>') offset += 1;
- return offset;
- }
-
- static endOfIndent(src, offset) {
- let ch = src[offset];
-
- while (ch === ' ') ch = src[offset += 1];
-
- return offset;
- }
-
- static endOfLine(src, offset) {
- let ch = src[offset];
-
- while (ch && ch !== '\n') ch = src[offset += 1];
-
- return offset;
- }
-
- static endOfWhiteSpace(src, offset) {
- let ch = src[offset];
-
- while (ch === '\t' || ch === ' ') ch = src[offset += 1];
-
- return offset;
- }
-
- static startOfLine(src, offset) {
- let ch = src[offset - 1];
- if (ch === '\n') return offset;
-
- while (ch && ch !== '\n') ch = src[offset -= 1];
-
- return offset + 1;
- }
- /**
- * End of indentation, or null if the line's indent level is not more
- * than `indent`
- *
- * @param {string} src
- * @param {number} indent
- * @param {number} lineStart
- * @returns {?number}
- */
-
-
- static endOfBlockIndent(src, indent, lineStart) {
- const inEnd = Node$2.endOfIndent(src, lineStart);
-
- if (inEnd > lineStart + indent) {
- return inEnd;
- } else {
- const wsEnd = Node$2.endOfWhiteSpace(src, inEnd);
- const ch = src[wsEnd];
- if (!ch || ch === '\n') return wsEnd;
- }
-
- return null;
- }
-
- static atBlank(src, offset, endAsBlank) {
- const ch = src[offset];
- return ch === '\n' || ch === '\t' || ch === ' ' || endAsBlank && !ch;
- }
-
- static nextNodeIsIndented(ch, indentDiff, indicatorAsIndent) {
- if (!ch || indentDiff < 0) return false;
- if (indentDiff > 0) return true;
- return indicatorAsIndent && ch === '-';
- } // should be at line or string end, or at next non-whitespace char
-
-
- static normalizeOffset(src, offset) {
- const ch = src[offset];
- return !ch ? offset : ch !== '\n' && src[offset - 1] === '\n' ? offset - 1 : Node$2.endOfWhiteSpace(src, offset);
- } // fold single newline into space, multiple newlines to N - 1 newlines
- // presumes src[offset] === '\n'
-
-
- static foldNewline(src, offset, indent) {
- let inCount = 0;
- let error = false;
- let fold = '';
- let ch = src[offset + 1];
-
- while (ch === ' ' || ch === '\t' || ch === '\n') {
- switch (ch) {
- case '\n':
- inCount = 0;
- offset += 1;
- fold += '\n';
- break;
-
- case '\t':
- if (inCount <= indent) error = true;
- offset = Node$2.endOfWhiteSpace(src, offset + 2) - 1;
- break;
-
- case ' ':
- inCount += 1;
- offset += 1;
- break;
- }
-
- ch = src[offset + 1];
- }
-
- if (!fold) fold = ' ';
- if (ch && inCount <= indent) error = true;
- return {
- fold,
- offset,
- error
- };
- }
-
- constructor(type, props, context) {
- Object.defineProperty(this, 'context', {
- value: context || null,
- writable: true
- });
- this.error = null;
- this.range = null;
- this.valueRange = null;
- this.props = props || [];
- this.type = type;
- this.value = null;
- }
-
- getPropValue(idx, key, skipKey) {
- if (!this.context) return null;
- const {
- src
- } = this.context;
- const prop = this.props[idx];
- return prop && src[prop.start] === key ? src.slice(prop.start + (skipKey ? 1 : 0), prop.end) : null;
- }
-
- get anchor() {
- for (let i = 0; i < this.props.length; ++i) {
- const anchor = this.getPropValue(i, Char.ANCHOR, true);
- if (anchor != null) return anchor;
- }
-
- return null;
- }
-
- get comment() {
- const comments = [];
-
- for (let i = 0; i < this.props.length; ++i) {
- const comment = this.getPropValue(i, Char.COMMENT, true);
- if (comment != null) comments.push(comment);
- }
-
- return comments.length > 0 ? comments.join('\n') : null;
- }
-
- commentHasRequiredWhitespace(start) {
- const {
- src
- } = this.context;
- if (this.header && start === this.header.end) return false;
- if (!this.valueRange) return false;
- const {
- end
- } = this.valueRange;
- return start !== end || Node$2.atBlank(src, end - 1);
- }
-
- get hasComment() {
- if (this.context) {
- const {
- src
- } = this.context;
-
- for (let i = 0; i < this.props.length; ++i) {
- if (src[this.props[i].start] === Char.COMMENT) return true;
- }
- }
-
- return false;
- }
-
- get hasProps() {
- if (this.context) {
- const {
- src
- } = this.context;
-
- for (let i = 0; i < this.props.length; ++i) {
- if (src[this.props[i].start] !== Char.COMMENT) return true;
- }
- }
-
- return false;
- }
-
- get includesTrailingLines() {
- return false;
- }
-
- get jsonLike() {
- const jsonLikeTypes = [Type.FLOW_MAP, Type.FLOW_SEQ, Type.QUOTE_DOUBLE, Type.QUOTE_SINGLE];
- return jsonLikeTypes.indexOf(this.type) !== -1;
- }
-
- get rangeAsLinePos() {
- if (!this.range || !this.context) return undefined;
- const start = getLinePos(this.range.start, this.context.root);
- if (!start) return undefined;
- const end = getLinePos(this.range.end, this.context.root);
- return {
- start,
- end
- };
- }
-
- get rawValue() {
- if (!this.valueRange || !this.context) return null;
- const {
- start,
- end
- } = this.valueRange;
- return this.context.src.slice(start, end);
- }
-
- get tag() {
- for (let i = 0; i < this.props.length; ++i) {
- const tag = this.getPropValue(i, Char.TAG, false);
-
- if (tag != null) {
- if (tag[1] === '<') {
- return {
- verbatim: tag.slice(2, -1)
- };
- } else {
- // eslint-disable-next-line no-unused-vars
- const [_, handle, suffix] = tag.match(/^(.*!)([^!]*)$/);
- return {
- handle,
- suffix
- };
- }
- }
- }
-
- return null;
- }
-
- get valueRangeContainsNewline() {
- if (!this.valueRange || !this.context) return false;
- const {
- start,
- end
- } = this.valueRange;
- const {
- src
- } = this.context;
-
- for (let i = start; i < end; ++i) {
- if (src[i] === '\n') return true;
- }
-
- return false;
- }
-
- parseComment(start) {
- const {
- src
- } = this.context;
-
- if (src[start] === Char.COMMENT) {
- const end = Node$2.endOfLine(src, start + 1);
- const commentRange = new Range(start, end);
- this.props.push(commentRange);
- return end;
- }
-
- return start;
- }
- /**
- * Populates the `origStart` and `origEnd` values of all ranges for this
- * node. Extended by child classes to handle descendant nodes.
- *
- * @param {number[]} cr - Positions of dropped CR characters
- * @param {number} offset - Starting index of `cr` from the last call
- * @returns {number} - The next offset, matching the one found for `origStart`
- */
-
-
- setOrigRanges(cr, offset) {
- if (this.range) offset = this.range.setOrigRange(cr, offset);
- if (this.valueRange) this.valueRange.setOrigRange(cr, offset);
- this.props.forEach(prop => prop.setOrigRange(cr, offset));
- return offset;
- }
-
- toString() {
- const {
- context: {
- src
- },
- range,
- value
- } = this;
- if (value != null) return value;
- const str = src.slice(range.start, range.end);
- return Node$2.addStringTerminator(src, range.end, str);
- }
-
-}
-
-class YAMLError extends Error {
- constructor(name, source, message) {
- if (!message || !(source instanceof Node$2)) throw new Error(`Invalid arguments for new ${name}`);
- super();
- this.name = name;
- this.message = message;
- this.source = source;
- }
-
- makePretty() {
- if (!this.source) return;
- this.nodeType = this.source.type;
- const cst = this.source.context && this.source.context.root;
-
- if (typeof this.offset === 'number') {
- this.range = new Range(this.offset, this.offset + 1);
- const start = cst && getLinePos(this.offset, cst);
-
- if (start) {
- const end = {
- line: start.line,
- col: start.col + 1
- };
- this.linePos = {
- start,
- end
- };
- }
-
- delete this.offset;
- } else {
- this.range = this.source.range;
- this.linePos = this.source.rangeAsLinePos;
- }
-
- if (this.linePos) {
- const {
- line,
- col
- } = this.linePos.start;
- this.message += ` at line ${line}, column ${col}`;
- const ctx = cst && getPrettyContext(this.linePos, cst);
- if (ctx) this.message += `:\n\n${ctx}\n`;
- }
-
- delete this.source;
- }
-
-}
-class YAMLReferenceError extends YAMLError {
- constructor(source, message) {
- super('YAMLReferenceError', source, message);
- }
-
-}
-class YAMLSemanticError extends YAMLError {
- constructor(source, message) {
- super('YAMLSemanticError', source, message);
- }
-
-}
-class YAMLSyntaxError extends YAMLError {
- constructor(source, message) {
- super('YAMLSyntaxError', source, message);
- }
-
-}
-class YAMLWarning extends YAMLError {
- constructor(source, message) {
- super('YAMLWarning', source, message);
- }
-
-}
-
-function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
-
- return obj;
-}
-
-class PlainValue$6 extends Node$2 {
- static endOfLine(src, start, inFlow) {
- let ch = src[start];
- let offset = start;
-
- while (ch && ch !== '\n') {
- if (inFlow && (ch === '[' || ch === ']' || ch === '{' || ch === '}' || ch === ',')) break;
- const next = src[offset + 1];
- if (ch === ':' && (!next || next === '\n' || next === '\t' || next === ' ' || inFlow && next === ',')) break;
- if ((ch === ' ' || ch === '\t') && next === '#') break;
- offset += 1;
- ch = next;
- }
-
- return offset;
- }
-
- get strValue() {
- if (!this.valueRange || !this.context) return null;
- let {
- start,
- end
- } = this.valueRange;
- const {
- src
- } = this.context;
- let ch = src[end - 1];
-
- while (start < end && (ch === '\n' || ch === '\t' || ch === ' ')) ch = src[--end - 1];
-
- let str = '';
-
- for (let i = start; i < end; ++i) {
- const ch = src[i];
-
- if (ch === '\n') {
- const {
- fold,
- offset
- } = Node$2.foldNewline(src, i, -1);
- str += fold;
- i = offset;
- } else if (ch === ' ' || ch === '\t') {
- // trim trailing whitespace
- const wsStart = i;
- let next = src[i + 1];
-
- while (i < end && (next === ' ' || next === '\t')) {
- i += 1;
- next = src[i + 1];
- }
-
- if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch;
- } else {
- str += ch;
- }
- }
-
- const ch0 = src[start];
-
- switch (ch0) {
- case '\t':
- {
- const msg = 'Plain value cannot start with a tab character';
- const errors = [new YAMLSemanticError(this, msg)];
- return {
- errors,
- str
- };
- }
-
- case '@':
- case '`':
- {
- const msg = `Plain value cannot start with reserved character ${ch0}`;
- const errors = [new YAMLSemanticError(this, msg)];
- return {
- errors,
- str
- };
- }
-
- default:
- return str;
- }
- }
-
- parseBlockValue(start) {
- const {
- indent,
- inFlow,
- src
- } = this.context;
- let offset = start;
- let valueEnd = start;
-
- for (let ch = src[offset]; ch === '\n'; ch = src[offset]) {
- if (Node$2.atDocumentBoundary(src, offset + 1)) break;
- const end = Node$2.endOfBlockIndent(src, indent, offset + 1);
- if (end === null || src[end] === '#') break;
-
- if (src[end] === '\n') {
- offset = end;
- } else {
- valueEnd = PlainValue$6.endOfLine(src, end, inFlow);
- offset = valueEnd;
- }
- }
-
- if (this.valueRange.isEmpty()) this.valueRange.start = start;
- this.valueRange.end = valueEnd;
- return valueEnd;
- }
- /**
- * Parses a plain value from the source
- *
- * Accepted forms are:
- * ```
- * #comment
- *
- * first line
- *
- * first line #comment
- *
- * first line
- * block
- * lines
- *
- * #comment
- * block
- * lines
- * ```
- * where block lines are empty or have an indent level greater than `indent`.
- *
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this scalar, may be `\n`
- */
-
-
- parse(context, start) {
- this.context = context;
- const {
- inFlow,
- src
- } = context;
- let offset = start;
- const ch = src[offset];
-
- if (ch && ch !== '#' && ch !== '\n') {
- offset = PlainValue$6.endOfLine(src, start, inFlow);
- }
-
- this.valueRange = new Range(start, offset);
- offset = Node$2.endOfWhiteSpace(src, offset);
- offset = this.parseComment(offset);
-
- if (!this.hasComment || this.valueRange.isEmpty()) {
- offset = this.parseBlockValue(offset);
- }
-
- return offset;
- }
-
-}
-
-PlainValueEc8e588e.Char = Char;
-PlainValueEc8e588e.Node = Node$2;
-PlainValueEc8e588e.PlainValue = PlainValue$6;
-PlainValueEc8e588e.Range = Range;
-PlainValueEc8e588e.Type = Type;
-PlainValueEc8e588e.YAMLError = YAMLError;
-PlainValueEc8e588e.YAMLReferenceError = YAMLReferenceError;
-PlainValueEc8e588e.YAMLSemanticError = YAMLSemanticError;
-PlainValueEc8e588e.YAMLSyntaxError = YAMLSyntaxError;
-PlainValueEc8e588e.YAMLWarning = YAMLWarning;
-PlainValueEc8e588e._defineProperty = _defineProperty;
-PlainValueEc8e588e.defaultTagPrefix = defaultTagPrefix;
-PlainValueEc8e588e.defaultTags = defaultTags;
-
-var PlainValue$5 = PlainValueEc8e588e;
-
-class BlankLine extends PlainValue$5.Node {
- constructor() {
- super(PlainValue$5.Type.BLANK_LINE);
- }
- /* istanbul ignore next */
-
-
- get includesTrailingLines() {
- // This is never called from anywhere, but if it were,
- // this is the value it should return.
- return true;
- }
- /**
- * Parses a blank line from the source
- *
- * @param {ParseContext} context
- * @param {number} start - Index of first \n character
- * @returns {number} - Index of the character after this
- */
-
-
- parse(context, start) {
- this.context = context;
- this.range = new PlainValue$5.Range(start, start + 1);
- return start + 1;
- }
-
-}
-
-class CollectionItem extends PlainValue$5.Node {
- constructor(type, props) {
- super(type, props);
- this.node = null;
- }
-
- get includesTrailingLines() {
- return !!this.node && this.node.includesTrailingLines;
- }
- /**
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this
- */
-
-
- parse(context, start) {
- this.context = context;
- const {
- parseNode,
- src
- } = context;
- let {
- atLineStart,
- lineStart
- } = context;
- if (!atLineStart && this.type === PlainValue$5.Type.SEQ_ITEM) this.error = new PlainValue$5.YAMLSemanticError(this, 'Sequence items must not have preceding content on the same line');
- const indent = atLineStart ? start - lineStart : context.indent;
- let offset = PlainValue$5.Node.endOfWhiteSpace(src, start + 1);
- let ch = src[offset];
- const inlineComment = ch === '#';
- const comments = [];
- let blankLine = null;
-
- while (ch === '\n' || ch === '#') {
- if (ch === '#') {
- const end = PlainValue$5.Node.endOfLine(src, offset + 1);
- comments.push(new PlainValue$5.Range(offset, end));
- offset = end;
- } else {
- atLineStart = true;
- lineStart = offset + 1;
- const wsEnd = PlainValue$5.Node.endOfWhiteSpace(src, lineStart);
-
- if (src[wsEnd] === '\n' && comments.length === 0) {
- blankLine = new BlankLine();
- lineStart = blankLine.parse({
- src
- }, lineStart);
- }
-
- offset = PlainValue$5.Node.endOfIndent(src, lineStart);
- }
-
- ch = src[offset];
- }
-
- if (PlainValue$5.Node.nextNodeIsIndented(ch, offset - (lineStart + indent), this.type !== PlainValue$5.Type.SEQ_ITEM)) {
- this.node = parseNode({
- atLineStart,
- inCollection: false,
- indent,
- lineStart,
- parent: this
- }, offset);
- } else if (ch && lineStart > start + 1) {
- offset = lineStart - 1;
- }
-
- if (this.node) {
- if (blankLine) {
- // Only blank lines preceding non-empty nodes are captured. Note that
- // this means that collection item range start indices do not always
- // increase monotonically. -- eemeli/yaml#126
- const items = context.parent.items || context.parent.contents;
- if (items) items.push(blankLine);
- }
-
- if (comments.length) Array.prototype.push.apply(this.props, comments);
- offset = this.node.range.end;
- } else {
- if (inlineComment) {
- const c = comments[0];
- this.props.push(c);
- offset = c.end;
- } else {
- offset = PlainValue$5.Node.endOfLine(src, start + 1);
- }
- }
-
- const end = this.node ? this.node.valueRange.end : offset;
- this.valueRange = new PlainValue$5.Range(start, end);
- return offset;
- }
-
- setOrigRanges(cr, offset) {
- offset = super.setOrigRanges(cr, offset);
- return this.node ? this.node.setOrigRanges(cr, offset) : offset;
- }
-
- toString() {
- const {
- context: {
- src
- },
- node,
- range,
- value
- } = this;
- if (value != null) return value;
- const str = node ? src.slice(range.start, node.range.start) + String(node) : src.slice(range.start, range.end);
- return PlainValue$5.Node.addStringTerminator(src, range.end, str);
- }
-
-}
-
-class Comment extends PlainValue$5.Node {
- constructor() {
- super(PlainValue$5.Type.COMMENT);
- }
- /**
- * Parses a comment line from the source
- *
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this scalar
- */
-
-
- parse(context, start) {
- this.context = context;
- const offset = this.parseComment(start);
- this.range = new PlainValue$5.Range(start, offset);
- return offset;
- }
-
-}
-
-function grabCollectionEndComments(node) {
- let cnode = node;
-
- while (cnode instanceof CollectionItem) cnode = cnode.node;
-
- if (!(cnode instanceof Collection$1)) return null;
- const len = cnode.items.length;
- let ci = -1;
-
- for (let i = len - 1; i >= 0; --i) {
- const n = cnode.items[i];
-
- if (n.type === PlainValue$5.Type.COMMENT) {
- // Keep sufficiently indented comments with preceding node
- const {
- indent,
- lineStart
- } = n.context;
- if (indent > 0 && n.range.start >= lineStart + indent) break;
- ci = i;
- } else if (n.type === PlainValue$5.Type.BLANK_LINE) ci = i;else break;
- }
-
- if (ci === -1) return null;
- const ca = cnode.items.splice(ci, len - ci);
- const prevEnd = ca[0].range.start;
-
- while (true) {
- cnode.range.end = prevEnd;
- if (cnode.valueRange && cnode.valueRange.end > prevEnd) cnode.valueRange.end = prevEnd;
- if (cnode === node) break;
- cnode = cnode.context.parent;
- }
-
- return ca;
-}
-class Collection$1 extends PlainValue$5.Node {
- static nextContentHasIndent(src, offset, indent) {
- const lineStart = PlainValue$5.Node.endOfLine(src, offset) + 1;
- offset = PlainValue$5.Node.endOfWhiteSpace(src, lineStart);
- const ch = src[offset];
- if (!ch) return false;
- if (offset >= lineStart + indent) return true;
- if (ch !== '#' && ch !== '\n') return false;
- return Collection$1.nextContentHasIndent(src, offset, indent);
- }
-
- constructor(firstItem) {
- super(firstItem.type === PlainValue$5.Type.SEQ_ITEM ? PlainValue$5.Type.SEQ : PlainValue$5.Type.MAP);
-
- for (let i = firstItem.props.length - 1; i >= 0; --i) {
- if (firstItem.props[i].start < firstItem.context.lineStart) {
- // props on previous line are assumed by the collection
- this.props = firstItem.props.slice(0, i + 1);
- firstItem.props = firstItem.props.slice(i + 1);
- const itemRange = firstItem.props[0] || firstItem.valueRange;
- firstItem.range.start = itemRange.start;
- break;
- }
- }
-
- this.items = [firstItem];
- const ec = grabCollectionEndComments(firstItem);
- if (ec) Array.prototype.push.apply(this.items, ec);
- }
-
- get includesTrailingLines() {
- return this.items.length > 0;
- }
- /**
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this
- */
-
-
- parse(context, start) {
- this.context = context;
- const {
- parseNode,
- src
- } = context; // It's easier to recalculate lineStart here rather than tracking down the
- // last context from which to read it -- eemeli/yaml#2
-
- let lineStart = PlainValue$5.Node.startOfLine(src, start);
- const firstItem = this.items[0]; // First-item context needs to be correct for later comment handling
- // -- eemeli/yaml#17
-
- firstItem.context.parent = this;
- this.valueRange = PlainValue$5.Range.copy(firstItem.valueRange);
- const indent = firstItem.range.start - firstItem.context.lineStart;
- let offset = start;
- offset = PlainValue$5.Node.normalizeOffset(src, offset);
- let ch = src[offset];
- let atLineStart = PlainValue$5.Node.endOfWhiteSpace(src, lineStart) === offset;
- let prevIncludesTrailingLines = false;
-
- while (ch) {
- while (ch === '\n' || ch === '#') {
- if (atLineStart && ch === '\n' && !prevIncludesTrailingLines) {
- const blankLine = new BlankLine();
- offset = blankLine.parse({
- src
- }, offset);
- this.valueRange.end = offset;
-
- if (offset >= src.length) {
- ch = null;
- break;
- }
-
- this.items.push(blankLine);
- offset -= 1; // blankLine.parse() consumes terminal newline
- } else if (ch === '#') {
- if (offset < lineStart + indent && !Collection$1.nextContentHasIndent(src, offset, indent)) {
- return offset;
- }
-
- const comment = new Comment();
- offset = comment.parse({
- indent,
- lineStart,
- src
- }, offset);
- this.items.push(comment);
- this.valueRange.end = offset;
-
- if (offset >= src.length) {
- ch = null;
- break;
- }
- }
-
- lineStart = offset + 1;
- offset = PlainValue$5.Node.endOfIndent(src, lineStart);
-
- if (PlainValue$5.Node.atBlank(src, offset)) {
- const wsEnd = PlainValue$5.Node.endOfWhiteSpace(src, offset);
- const next = src[wsEnd];
-
- if (!next || next === '\n' || next === '#') {
- offset = wsEnd;
- }
- }
-
- ch = src[offset];
- atLineStart = true;
- }
-
- if (!ch) {
- break;
- }
-
- if (offset !== lineStart + indent && (atLineStart || ch !== ':')) {
- if (offset < lineStart + indent) {
- if (lineStart > start) offset = lineStart;
- break;
- } else if (!this.error) {
- const msg = 'All collection items must start at the same column';
- this.error = new PlainValue$5.YAMLSyntaxError(this, msg);
- }
- }
-
- if (firstItem.type === PlainValue$5.Type.SEQ_ITEM) {
- if (ch !== '-') {
- if (lineStart > start) offset = lineStart;
- break;
- }
- } else if (ch === '-' && !this.error) {
- // map key may start with -, as long as it's followed by a non-whitespace char
- const next = src[offset + 1];
-
- if (!next || next === '\n' || next === '\t' || next === ' ') {
- const msg = 'A collection cannot be both a mapping and a sequence';
- this.error = new PlainValue$5.YAMLSyntaxError(this, msg);
- }
- }
-
- const node = parseNode({
- atLineStart,
- inCollection: true,
- indent,
- lineStart,
- parent: this
- }, offset);
- if (!node) return offset; // at next document start
-
- this.items.push(node);
- this.valueRange.end = node.valueRange.end;
- offset = PlainValue$5.Node.normalizeOffset(src, node.range.end);
- ch = src[offset];
- atLineStart = false;
- prevIncludesTrailingLines = node.includesTrailingLines; // Need to reset lineStart and atLineStart here if preceding node's range
- // has advanced to check the current line's indentation level
- // -- eemeli/yaml#10 & eemeli/yaml#38
-
- if (ch) {
- let ls = offset - 1;
- let prev = src[ls];
-
- while (prev === ' ' || prev === '\t') prev = src[--ls];
-
- if (prev === '\n') {
- lineStart = ls + 1;
- atLineStart = true;
- }
- }
-
- const ec = grabCollectionEndComments(node);
- if (ec) Array.prototype.push.apply(this.items, ec);
- }
-
- return offset;
- }
-
- setOrigRanges(cr, offset) {
- offset = super.setOrigRanges(cr, offset);
- this.items.forEach(node => {
- offset = node.setOrigRanges(cr, offset);
- });
- return offset;
- }
-
- toString() {
- const {
- context: {
- src
- },
- items,
- range,
- value
- } = this;
- if (value != null) return value;
- let str = src.slice(range.start, items[0].range.start) + String(items[0]);
-
- for (let i = 1; i < items.length; ++i) {
- const item = items[i];
- const {
- atLineStart,
- indent
- } = item.context;
- if (atLineStart) for (let i = 0; i < indent; ++i) str += ' ';
- str += String(item);
- }
-
- return PlainValue$5.Node.addStringTerminator(src, range.end, str);
- }
-
-}
-
-class Directive extends PlainValue$5.Node {
- constructor() {
- super(PlainValue$5.Type.DIRECTIVE);
- this.name = null;
- }
-
- get parameters() {
- const raw = this.rawValue;
- return raw ? raw.trim().split(/[ \t]+/) : [];
- }
-
- parseName(start) {
- const {
- src
- } = this.context;
- let offset = start;
- let ch = src[offset];
-
- while (ch && ch !== '\n' && ch !== '\t' && ch !== ' ') ch = src[offset += 1];
-
- this.name = src.slice(start, offset);
- return offset;
- }
-
- parseParameters(start) {
- const {
- src
- } = this.context;
- let offset = start;
- let ch = src[offset];
-
- while (ch && ch !== '\n' && ch !== '#') ch = src[offset += 1];
-
- this.valueRange = new PlainValue$5.Range(start, offset);
- return offset;
- }
-
- parse(context, start) {
- this.context = context;
- let offset = this.parseName(start + 1);
- offset = this.parseParameters(offset);
- offset = this.parseComment(offset);
- this.range = new PlainValue$5.Range(start, offset);
- return offset;
- }
-
-}
-
-class Document$3 extends PlainValue$5.Node {
- static startCommentOrEndBlankLine(src, start) {
- const offset = PlainValue$5.Node.endOfWhiteSpace(src, start);
- const ch = src[offset];
- return ch === '#' || ch === '\n' ? offset : start;
- }
-
- constructor() {
- super(PlainValue$5.Type.DOCUMENT);
- this.directives = null;
- this.contents = null;
- this.directivesEndMarker = null;
- this.documentEndMarker = null;
- }
-
- parseDirectives(start) {
- const {
- src
- } = this.context;
- this.directives = [];
- let atLineStart = true;
- let hasDirectives = false;
- let offset = start;
-
- while (!PlainValue$5.Node.atDocumentBoundary(src, offset, PlainValue$5.Char.DIRECTIVES_END)) {
- offset = Document$3.startCommentOrEndBlankLine(src, offset);
-
- switch (src[offset]) {
- case '\n':
- if (atLineStart) {
- const blankLine = new BlankLine();
- offset = blankLine.parse({
- src
- }, offset);
-
- if (offset < src.length) {
- this.directives.push(blankLine);
- }
- } else {
- offset += 1;
- atLineStart = true;
- }
-
- break;
-
- case '#':
- {
- const comment = new Comment();
- offset = comment.parse({
- src
- }, offset);
- this.directives.push(comment);
- atLineStart = false;
- }
- break;
-
- case '%':
- {
- const directive = new Directive();
- offset = directive.parse({
- parent: this,
- src
- }, offset);
- this.directives.push(directive);
- hasDirectives = true;
- atLineStart = false;
- }
- break;
-
- default:
- if (hasDirectives) {
- this.error = new PlainValue$5.YAMLSemanticError(this, 'Missing directives-end indicator line');
- } else if (this.directives.length > 0) {
- this.contents = this.directives;
- this.directives = [];
- }
-
- return offset;
- }
- }
-
- if (src[offset]) {
- this.directivesEndMarker = new PlainValue$5.Range(offset, offset + 3);
- return offset + 3;
- }
-
- if (hasDirectives) {
- this.error = new PlainValue$5.YAMLSemanticError(this, 'Missing directives-end indicator line');
- } else if (this.directives.length > 0) {
- this.contents = this.directives;
- this.directives = [];
- }
-
- return offset;
- }
-
- parseContents(start) {
- const {
- parseNode,
- src
- } = this.context;
- if (!this.contents) this.contents = [];
- let lineStart = start;
-
- while (src[lineStart - 1] === '-') lineStart -= 1;
-
- let offset = PlainValue$5.Node.endOfWhiteSpace(src, start);
- let atLineStart = lineStart === start;
- this.valueRange = new PlainValue$5.Range(offset);
-
- while (!PlainValue$5.Node.atDocumentBoundary(src, offset, PlainValue$5.Char.DOCUMENT_END)) {
- switch (src[offset]) {
- case '\n':
- if (atLineStart) {
- const blankLine = new BlankLine();
- offset = blankLine.parse({
- src
- }, offset);
-
- if (offset < src.length) {
- this.contents.push(blankLine);
- }
- } else {
- offset += 1;
- atLineStart = true;
- }
-
- lineStart = offset;
- break;
-
- case '#':
- {
- const comment = new Comment();
- offset = comment.parse({
- src
- }, offset);
- this.contents.push(comment);
- atLineStart = false;
- }
- break;
-
- default:
- {
- const iEnd = PlainValue$5.Node.endOfIndent(src, offset);
- const context = {
- atLineStart,
- indent: -1,
- inFlow: false,
- inCollection: false,
- lineStart,
- parent: this
- };
- const node = parseNode(context, iEnd);
- if (!node) return this.valueRange.end = iEnd; // at next document start
-
- this.contents.push(node);
- offset = node.range.end;
- atLineStart = false;
- const ec = grabCollectionEndComments(node);
- if (ec) Array.prototype.push.apply(this.contents, ec);
- }
- }
-
- offset = Document$3.startCommentOrEndBlankLine(src, offset);
- }
-
- this.valueRange.end = offset;
-
- if (src[offset]) {
- this.documentEndMarker = new PlainValue$5.Range(offset, offset + 3);
- offset += 3;
-
- if (src[offset]) {
- offset = PlainValue$5.Node.endOfWhiteSpace(src, offset);
-
- if (src[offset] === '#') {
- const comment = new Comment();
- offset = comment.parse({
- src
- }, offset);
- this.contents.push(comment);
- }
-
- switch (src[offset]) {
- case '\n':
- offset += 1;
- break;
-
- case undefined:
- break;
-
- default:
- this.error = new PlainValue$5.YAMLSyntaxError(this, 'Document end marker line cannot have a non-comment suffix');
- }
- }
- }
-
- return offset;
- }
- /**
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this
- */
-
-
- parse(context, start) {
- context.root = this;
- this.context = context;
- const {
- src
- } = context;
- let offset = src.charCodeAt(start) === 0xfeff ? start + 1 : start; // skip BOM
-
- offset = this.parseDirectives(offset);
- offset = this.parseContents(offset);
- return offset;
- }
-
- setOrigRanges(cr, offset) {
- offset = super.setOrigRanges(cr, offset);
- this.directives.forEach(node => {
- offset = node.setOrigRanges(cr, offset);
- });
- if (this.directivesEndMarker) offset = this.directivesEndMarker.setOrigRange(cr, offset);
- this.contents.forEach(node => {
- offset = node.setOrigRanges(cr, offset);
- });
- if (this.documentEndMarker) offset = this.documentEndMarker.setOrigRange(cr, offset);
- return offset;
- }
-
- toString() {
- const {
- contents,
- directives,
- value
- } = this;
- if (value != null) return value;
- let str = directives.join('');
-
- if (contents.length > 0) {
- if (directives.length > 0 || contents[0].type === PlainValue$5.Type.COMMENT) str += '---\n';
- str += contents.join('');
- }
-
- if (str[str.length - 1] !== '\n') str += '\n';
- return str;
- }
-
-}
-
-class Alias$1 extends PlainValue$5.Node {
- /**
- * Parses an *alias from the source
- *
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this scalar
- */
- parse(context, start) {
- this.context = context;
- const {
- src
- } = context;
- let offset = PlainValue$5.Node.endOfIdentifier(src, start + 1);
- this.valueRange = new PlainValue$5.Range(start + 1, offset);
- offset = PlainValue$5.Node.endOfWhiteSpace(src, offset);
- offset = this.parseComment(offset);
- return offset;
- }
-
-}
-
-const Chomp = {
- CLIP: 'CLIP',
- KEEP: 'KEEP',
- STRIP: 'STRIP'
-};
-class BlockValue extends PlainValue$5.Node {
- constructor(type, props) {
- super(type, props);
- this.blockIndent = null;
- this.chomping = Chomp.CLIP;
- this.header = null;
- }
-
- get includesTrailingLines() {
- return this.chomping === Chomp.KEEP;
- }
-
- get strValue() {
- if (!this.valueRange || !this.context) return null;
- let {
- start,
- end
- } = this.valueRange;
- const {
- indent,
- src
- } = this.context;
- if (this.valueRange.isEmpty()) return '';
- let lastNewLine = null;
- let ch = src[end - 1];
-
- while (ch === '\n' || ch === '\t' || ch === ' ') {
- end -= 1;
-
- if (end <= start) {
- if (this.chomping === Chomp.KEEP) break;else return ''; // probably never happens
- }
-
- if (ch === '\n') lastNewLine = end;
- ch = src[end - 1];
- }
-
- let keepStart = end + 1;
-
- if (lastNewLine) {
- if (this.chomping === Chomp.KEEP) {
- keepStart = lastNewLine;
- end = this.valueRange.end;
- } else {
- end = lastNewLine;
- }
- }
-
- const bi = indent + this.blockIndent;
- const folded = this.type === PlainValue$5.Type.BLOCK_FOLDED;
- let atStart = true;
- let str = '';
- let sep = '';
- let prevMoreIndented = false;
-
- for (let i = start; i < end; ++i) {
- for (let j = 0; j < bi; ++j) {
- if (src[i] !== ' ') break;
- i += 1;
- }
-
- const ch = src[i];
-
- if (ch === '\n') {
- if (sep === '\n') str += '\n';else sep = '\n';
- } else {
- const lineEnd = PlainValue$5.Node.endOfLine(src, i);
- const line = src.slice(i, lineEnd);
- i = lineEnd;
-
- if (folded && (ch === ' ' || ch === '\t') && i < keepStart) {
- if (sep === ' ') sep = '\n';else if (!prevMoreIndented && !atStart && sep === '\n') sep = '\n\n';
- str += sep + line; //+ ((lineEnd < end && src[lineEnd]) || '')
-
- sep = lineEnd < end && src[lineEnd] || '';
- prevMoreIndented = true;
- } else {
- str += sep + line;
- sep = folded && i < keepStart ? ' ' : '\n';
- prevMoreIndented = false;
- }
-
- if (atStart && line !== '') atStart = false;
- }
- }
-
- return this.chomping === Chomp.STRIP ? str : str + '\n';
- }
-
- parseBlockHeader(start) {
- const {
- src
- } = this.context;
- let offset = start + 1;
- let bi = '';
-
- while (true) {
- const ch = src[offset];
-
- switch (ch) {
- case '-':
- this.chomping = Chomp.STRIP;
- break;
-
- case '+':
- this.chomping = Chomp.KEEP;
- break;
-
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- bi += ch;
- break;
-
- default:
- this.blockIndent = Number(bi) || null;
- this.header = new PlainValue$5.Range(start, offset);
- return offset;
- }
-
- offset += 1;
- }
- }
-
- parseBlockValue(start) {
- const {
- indent,
- src
- } = this.context;
- const explicit = !!this.blockIndent;
- let offset = start;
- let valueEnd = start;
- let minBlockIndent = 1;
-
- for (let ch = src[offset]; ch === '\n'; ch = src[offset]) {
- offset += 1;
- if (PlainValue$5.Node.atDocumentBoundary(src, offset)) break;
- const end = PlainValue$5.Node.endOfBlockIndent(src, indent, offset); // should not include tab?
-
- if (end === null) break;
- const ch = src[end];
- const lineIndent = end - (offset + indent);
-
- if (!this.blockIndent) {
- // no explicit block indent, none yet detected
- if (src[end] !== '\n') {
- // first line with non-whitespace content
- if (lineIndent < minBlockIndent) {
- const msg = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';
- this.error = new PlainValue$5.YAMLSemanticError(this, msg);
- }
-
- this.blockIndent = lineIndent;
- } else if (lineIndent > minBlockIndent) {
- // empty line with more whitespace
- minBlockIndent = lineIndent;
- }
- } else if (ch && ch !== '\n' && lineIndent < this.blockIndent) {
- if (src[end] === '#') break;
-
- if (!this.error) {
- const src = explicit ? 'explicit indentation indicator' : 'first line';
- const msg = `Block scalars must not be less indented than their ${src}`;
- this.error = new PlainValue$5.YAMLSemanticError(this, msg);
- }
- }
-
- if (src[end] === '\n') {
- offset = end;
- } else {
- offset = valueEnd = PlainValue$5.Node.endOfLine(src, end);
- }
- }
-
- if (this.chomping !== Chomp.KEEP) {
- offset = src[valueEnd] ? valueEnd + 1 : valueEnd;
- }
-
- this.valueRange = new PlainValue$5.Range(start + 1, offset);
- return offset;
- }
- /**
- * Parses a block value from the source
- *
- * Accepted forms are:
- * ```
- * BS
- * block
- * lines
- *
- * BS #comment
- * block
- * lines
- * ```
- * where the block style BS matches the regexp `[|>][-+1-9]*` and block lines
- * are empty or have an indent level greater than `indent`.
- *
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this block
- */
-
-
- parse(context, start) {
- this.context = context;
- const {
- src
- } = context;
- let offset = this.parseBlockHeader(start);
- offset = PlainValue$5.Node.endOfWhiteSpace(src, offset);
- offset = this.parseComment(offset);
- offset = this.parseBlockValue(offset);
- return offset;
- }
-
- setOrigRanges(cr, offset) {
- offset = super.setOrigRanges(cr, offset);
- return this.header ? this.header.setOrigRange(cr, offset) : offset;
- }
-
-}
-
-class FlowCollection extends PlainValue$5.Node {
- constructor(type, props) {
- super(type, props);
- this.items = null;
- }
-
- prevNodeIsJsonLike(idx = this.items.length) {
- const node = this.items[idx - 1];
- return !!node && (node.jsonLike || node.type === PlainValue$5.Type.COMMENT && this.prevNodeIsJsonLike(idx - 1));
- }
- /**
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this
- */
-
-
- parse(context, start) {
- this.context = context;
- const {
- parseNode,
- src
- } = context;
- let {
- indent,
- lineStart
- } = context;
- let char = src[start]; // { or [
-
- this.items = [{
- char,
- offset: start
- }];
- let offset = PlainValue$5.Node.endOfWhiteSpace(src, start + 1);
- char = src[offset];
-
- while (char && char !== ']' && char !== '}') {
- switch (char) {
- case '\n':
- {
- lineStart = offset + 1;
- const wsEnd = PlainValue$5.Node.endOfWhiteSpace(src, lineStart);
-
- if (src[wsEnd] === '\n') {
- const blankLine = new BlankLine();
- lineStart = blankLine.parse({
- src
- }, lineStart);
- this.items.push(blankLine);
- }
-
- offset = PlainValue$5.Node.endOfIndent(src, lineStart);
-
- if (offset <= lineStart + indent) {
- char = src[offset];
-
- if (offset < lineStart + indent || char !== ']' && char !== '}') {
- const msg = 'Insufficient indentation in flow collection';
- this.error = new PlainValue$5.YAMLSemanticError(this, msg);
- }
- }
- }
- break;
-
- case ',':
- {
- this.items.push({
- char,
- offset
- });
- offset += 1;
- }
- break;
-
- case '#':
- {
- const comment = new Comment();
- offset = comment.parse({
- src
- }, offset);
- this.items.push(comment);
- }
- break;
-
- case '?':
- case ':':
- {
- const next = src[offset + 1];
-
- if (next === '\n' || next === '\t' || next === ' ' || next === ',' || // in-flow : after JSON-like key does not need to be followed by whitespace
- char === ':' && this.prevNodeIsJsonLike()) {
- this.items.push({
- char,
- offset
- });
- offset += 1;
- break;
- }
- }
- // fallthrough
-
- default:
- {
- const node = parseNode({
- atLineStart: false,
- inCollection: false,
- inFlow: true,
- indent: -1,
- lineStart,
- parent: this
- }, offset);
-
- if (!node) {
- // at next document start
- this.valueRange = new PlainValue$5.Range(start, offset);
- return offset;
- }
-
- this.items.push(node);
- offset = PlainValue$5.Node.normalizeOffset(src, node.range.end);
- }
- }
-
- offset = PlainValue$5.Node.endOfWhiteSpace(src, offset);
- char = src[offset];
- }
-
- this.valueRange = new PlainValue$5.Range(start, offset + 1);
-
- if (char) {
- this.items.push({
- char,
- offset
- });
- offset = PlainValue$5.Node.endOfWhiteSpace(src, offset + 1);
- offset = this.parseComment(offset);
- }
-
- return offset;
- }
-
- setOrigRanges(cr, offset) {
- offset = super.setOrigRanges(cr, offset);
- this.items.forEach(node => {
- if (node instanceof PlainValue$5.Node) {
- offset = node.setOrigRanges(cr, offset);
- } else if (cr.length === 0) {
- node.origOffset = node.offset;
- } else {
- let i = offset;
-
- while (i < cr.length) {
- if (cr[i] > node.offset) break;else ++i;
- }
-
- node.origOffset = node.offset + i;
- offset = i;
- }
- });
- return offset;
- }
-
- toString() {
- const {
- context: {
- src
- },
- items,
- range,
- value
- } = this;
- if (value != null) return value;
- const nodes = items.filter(item => item instanceof PlainValue$5.Node);
- let str = '';
- let prevEnd = range.start;
- nodes.forEach(node => {
- const prefix = src.slice(prevEnd, node.range.start);
- prevEnd = node.range.end;
- str += prefix + String(node);
-
- if (str[str.length - 1] === '\n' && src[prevEnd - 1] !== '\n' && src[prevEnd] === '\n') {
- // Comment range does not include the terminal newline, but its
- // stringified value does. Without this fix, newlines at comment ends
- // get duplicated.
- prevEnd += 1;
- }
- });
- str += src.slice(prevEnd, range.end);
- return PlainValue$5.Node.addStringTerminator(src, range.end, str);
- }
-
-}
-
-class QuoteDouble extends PlainValue$5.Node {
- static endOfQuote(src, offset) {
- let ch = src[offset];
-
- while (ch && ch !== '"') {
- offset += ch === '\\' ? 2 : 1;
- ch = src[offset];
- }
-
- return offset + 1;
- }
- /**
- * @returns {string | { str: string, errors: YAMLSyntaxError[] }}
- */
-
-
- get strValue() {
- if (!this.valueRange || !this.context) return null;
- const errors = [];
- const {
- start,
- end
- } = this.valueRange;
- const {
- indent,
- src
- } = this.context;
- if (src[end - 1] !== '"') errors.push(new PlainValue$5.YAMLSyntaxError(this, 'Missing closing "quote')); // Using String#replace is too painful with escaped newlines preceded by
- // escaped backslashes; also, this should be faster.
-
- let str = '';
-
- for (let i = start + 1; i < end - 1; ++i) {
- const ch = src[i];
-
- if (ch === '\n') {
- if (PlainValue$5.Node.atDocumentBoundary(src, i + 1)) errors.push(new PlainValue$5.YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values'));
- const {
- fold,
- offset,
- error
- } = PlainValue$5.Node.foldNewline(src, i, indent);
- str += fold;
- i = offset;
- if (error) errors.push(new PlainValue$5.YAMLSemanticError(this, 'Multi-line double-quoted string needs to be sufficiently indented'));
- } else if (ch === '\\') {
- i += 1;
-
- switch (src[i]) {
- case '0':
- str += '\0';
- break;
- // null character
-
- case 'a':
- str += '\x07';
- break;
- // bell character
-
- case 'b':
- str += '\b';
- break;
- // backspace
-
- case 'e':
- str += '\x1b';
- break;
- // escape character
-
- case 'f':
- str += '\f';
- break;
- // form feed
-
- case 'n':
- str += '\n';
- break;
- // line feed
-
- case 'r':
- str += '\r';
- break;
- // carriage return
-
- case 't':
- str += '\t';
- break;
- // horizontal tab
-
- case 'v':
- str += '\v';
- break;
- // vertical tab
-
- case 'N':
- str += '\u0085';
- break;
- // Unicode next line
-
- case '_':
- str += '\u00a0';
- break;
- // Unicode non-breaking space
-
- case 'L':
- str += '\u2028';
- break;
- // Unicode line separator
-
- case 'P':
- str += '\u2029';
- break;
- // Unicode paragraph separator
-
- case ' ':
- str += ' ';
- break;
-
- case '"':
- str += '"';
- break;
-
- case '/':
- str += '/';
- break;
-
- case '\\':
- str += '\\';
- break;
-
- case '\t':
- str += '\t';
- break;
-
- case 'x':
- str += this.parseCharCode(i + 1, 2, errors);
- i += 2;
- break;
-
- case 'u':
- str += this.parseCharCode(i + 1, 4, errors);
- i += 4;
- break;
-
- case 'U':
- str += this.parseCharCode(i + 1, 8, errors);
- i += 8;
- break;
-
- case '\n':
- // skip escaped newlines, but still trim the following line
- while (src[i + 1] === ' ' || src[i + 1] === '\t') i += 1;
-
- break;
-
- default:
- errors.push(new PlainValue$5.YAMLSyntaxError(this, `Invalid escape sequence ${src.substr(i - 1, 2)}`));
- str += '\\' + src[i];
- }
- } else if (ch === ' ' || ch === '\t') {
- // trim trailing whitespace
- const wsStart = i;
- let next = src[i + 1];
-
- while (next === ' ' || next === '\t') {
- i += 1;
- next = src[i + 1];
- }
-
- if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch;
- } else {
- str += ch;
- }
- }
-
- return errors.length > 0 ? {
- errors,
- str
- } : str;
- }
-
- parseCharCode(offset, length, errors) {
- const {
- src
- } = this.context;
- const cc = src.substr(offset, length);
- const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);
- const code = ok ? parseInt(cc, 16) : NaN;
-
- if (isNaN(code)) {
- errors.push(new PlainValue$5.YAMLSyntaxError(this, `Invalid escape sequence ${src.substr(offset - 2, length + 2)}`));
- return src.substr(offset - 2, length + 2);
- }
-
- return String.fromCodePoint(code);
- }
- /**
- * Parses a "double quoted" value from the source
- *
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this scalar
- */
-
-
- parse(context, start) {
- this.context = context;
- const {
- src
- } = context;
- let offset = QuoteDouble.endOfQuote(src, start + 1);
- this.valueRange = new PlainValue$5.Range(start, offset);
- offset = PlainValue$5.Node.endOfWhiteSpace(src, offset);
- offset = this.parseComment(offset);
- return offset;
- }
-
-}
-
-class QuoteSingle extends PlainValue$5.Node {
- static endOfQuote(src, offset) {
- let ch = src[offset];
-
- while (ch) {
- if (ch === "'") {
- if (src[offset + 1] !== "'") break;
- ch = src[offset += 2];
- } else {
- ch = src[offset += 1];
- }
- }
-
- return offset + 1;
- }
- /**
- * @returns {string | { str: string, errors: YAMLSyntaxError[] }}
- */
-
-
- get strValue() {
- if (!this.valueRange || !this.context) return null;
- const errors = [];
- const {
- start,
- end
- } = this.valueRange;
- const {
- indent,
- src
- } = this.context;
- if (src[end - 1] !== "'") errors.push(new PlainValue$5.YAMLSyntaxError(this, "Missing closing 'quote"));
- let str = '';
-
- for (let i = start + 1; i < end - 1; ++i) {
- const ch = src[i];
-
- if (ch === '\n') {
- if (PlainValue$5.Node.atDocumentBoundary(src, i + 1)) errors.push(new PlainValue$5.YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values'));
- const {
- fold,
- offset,
- error
- } = PlainValue$5.Node.foldNewline(src, i, indent);
- str += fold;
- i = offset;
- if (error) errors.push(new PlainValue$5.YAMLSemanticError(this, 'Multi-line single-quoted string needs to be sufficiently indented'));
- } else if (ch === "'") {
- str += ch;
- i += 1;
- if (src[i] !== "'") errors.push(new PlainValue$5.YAMLSyntaxError(this, 'Unescaped single quote? This should not happen.'));
- } else if (ch === ' ' || ch === '\t') {
- // trim trailing whitespace
- const wsStart = i;
- let next = src[i + 1];
-
- while (next === ' ' || next === '\t') {
- i += 1;
- next = src[i + 1];
- }
-
- if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch;
- } else {
- str += ch;
- }
- }
-
- return errors.length > 0 ? {
- errors,
- str
- } : str;
- }
- /**
- * Parses a 'single quoted' value from the source
- *
- * @param {ParseContext} context
- * @param {number} start - Index of first character
- * @returns {number} - Index of the character after this scalar
- */
-
-
- parse(context, start) {
- this.context = context;
- const {
- src
- } = context;
- let offset = QuoteSingle.endOfQuote(src, start + 1);
- this.valueRange = new PlainValue$5.Range(start, offset);
- offset = PlainValue$5.Node.endOfWhiteSpace(src, offset);
- offset = this.parseComment(offset);
- return offset;
- }
-
-}
-
-function createNewNode(type, props) {
- switch (type) {
- case PlainValue$5.Type.ALIAS:
- return new Alias$1(type, props);
-
- case PlainValue$5.Type.BLOCK_FOLDED:
- case PlainValue$5.Type.BLOCK_LITERAL:
- return new BlockValue(type, props);
-
- case PlainValue$5.Type.FLOW_MAP:
- case PlainValue$5.Type.FLOW_SEQ:
- return new FlowCollection(type, props);
-
- case PlainValue$5.Type.MAP_KEY:
- case PlainValue$5.Type.MAP_VALUE:
- case PlainValue$5.Type.SEQ_ITEM:
- return new CollectionItem(type, props);
-
- case PlainValue$5.Type.COMMENT:
- case PlainValue$5.Type.PLAIN:
- return new PlainValue$5.PlainValue(type, props);
-
- case PlainValue$5.Type.QUOTE_DOUBLE:
- return new QuoteDouble(type, props);
-
- case PlainValue$5.Type.QUOTE_SINGLE:
- return new QuoteSingle(type, props);
-
- /* istanbul ignore next */
-
- default:
- return null;
- // should never happen
- }
-}
-/**
- * @param {boolean} atLineStart - Node starts at beginning of line
- * @param {boolean} inFlow - true if currently in a flow context
- * @param {boolean} inCollection - true if currently in a collection context
- * @param {number} indent - Current level of indentation
- * @param {number} lineStart - Start of the current line
- * @param {Node} parent - The parent of the node
- * @param {string} src - Source of the YAML document
- */
-
-
-class ParseContext {
- static parseType(src, offset, inFlow) {
- switch (src[offset]) {
- case '*':
- return PlainValue$5.Type.ALIAS;
-
- case '>':
- return PlainValue$5.Type.BLOCK_FOLDED;
-
- case '|':
- return PlainValue$5.Type.BLOCK_LITERAL;
-
- case '{':
- return PlainValue$5.Type.FLOW_MAP;
-
- case '[':
- return PlainValue$5.Type.FLOW_SEQ;
-
- case '?':
- return !inFlow && PlainValue$5.Node.atBlank(src, offset + 1, true) ? PlainValue$5.Type.MAP_KEY : PlainValue$5.Type.PLAIN;
-
- case ':':
- return !inFlow && PlainValue$5.Node.atBlank(src, offset + 1, true) ? PlainValue$5.Type.MAP_VALUE : PlainValue$5.Type.PLAIN;
-
- case '-':
- return !inFlow && PlainValue$5.Node.atBlank(src, offset + 1, true) ? PlainValue$5.Type.SEQ_ITEM : PlainValue$5.Type.PLAIN;
-
- case '"':
- return PlainValue$5.Type.QUOTE_DOUBLE;
-
- case "'":
- return PlainValue$5.Type.QUOTE_SINGLE;
-
- default:
- return PlainValue$5.Type.PLAIN;
- }
- }
-
- constructor(orig = {}, {
- atLineStart,
- inCollection,
- inFlow,
- indent,
- lineStart,
- parent
- } = {}) {
- PlainValue$5._defineProperty(this, "parseNode", (overlay, start) => {
- if (PlainValue$5.Node.atDocumentBoundary(this.src, start)) return null;
- const context = new ParseContext(this, overlay);
- const {
- props,
- type,
- valueStart
- } = context.parseProps(start);
- const node = createNewNode(type, props);
- let offset = node.parse(context, valueStart);
- node.range = new PlainValue$5.Range(start, offset);
- /* istanbul ignore if */
-
- if (offset <= start) {
- // This should never happen, but if it does, let's make sure to at least
- // step one character forward to avoid a busy loop.
- node.error = new Error(`Node#parse consumed no characters`);
- node.error.parseEnd = offset;
- node.error.source = node;
- node.range.end = start + 1;
- }
-
- if (context.nodeStartsCollection(node)) {
- if (!node.error && !context.atLineStart && context.parent.type === PlainValue$5.Type.DOCUMENT) {
- node.error = new PlainValue$5.YAMLSyntaxError(node, 'Block collection must not have preceding content here (e.g. directives-end indicator)');
- }
-
- const collection = new Collection$1(node);
- offset = collection.parse(new ParseContext(context), offset);
- collection.range = new PlainValue$5.Range(start, offset);
- return collection;
- }
-
- return node;
- });
-
- this.atLineStart = atLineStart != null ? atLineStart : orig.atLineStart || false;
- this.inCollection = inCollection != null ? inCollection : orig.inCollection || false;
- this.inFlow = inFlow != null ? inFlow : orig.inFlow || false;
- this.indent = indent != null ? indent : orig.indent;
- this.lineStart = lineStart != null ? lineStart : orig.lineStart;
- this.parent = parent != null ? parent : orig.parent || {};
- this.root = orig.root;
- this.src = orig.src;
- }
-
- nodeStartsCollection(node) {
- const {
- inCollection,
- inFlow,
- src
- } = this;
- if (inCollection || inFlow) return false;
- if (node instanceof CollectionItem) return true; // check for implicit key
-
- let offset = node.range.end;
- if (src[offset] === '\n' || src[offset - 1] === '\n') return false;
- offset = PlainValue$5.Node.endOfWhiteSpace(src, offset);
- return src[offset] === ':';
- } // Anchor and tag are before type, which determines the node implementation
- // class; hence this intermediate step.
-
-
- parseProps(offset) {
- const {
- inFlow,
- parent,
- src
- } = this;
- const props = [];
- let lineHasProps = false;
- offset = this.atLineStart ? PlainValue$5.Node.endOfIndent(src, offset) : PlainValue$5.Node.endOfWhiteSpace(src, offset);
- let ch = src[offset];
-
- while (ch === PlainValue$5.Char.ANCHOR || ch === PlainValue$5.Char.COMMENT || ch === PlainValue$5.Char.TAG || ch === '\n') {
- if (ch === '\n') {
- let inEnd = offset;
- let lineStart;
-
- do {
- lineStart = inEnd + 1;
- inEnd = PlainValue$5.Node.endOfIndent(src, lineStart);
- } while (src[inEnd] === '\n');
-
- const indentDiff = inEnd - (lineStart + this.indent);
- const noIndicatorAsIndent = parent.type === PlainValue$5.Type.SEQ_ITEM && parent.context.atLineStart;
- if (src[inEnd] !== '#' && !PlainValue$5.Node.nextNodeIsIndented(src[inEnd], indentDiff, !noIndicatorAsIndent)) break;
- this.atLineStart = true;
- this.lineStart = lineStart;
- lineHasProps = false;
- offset = inEnd;
- } else if (ch === PlainValue$5.Char.COMMENT) {
- const end = PlainValue$5.Node.endOfLine(src, offset + 1);
- props.push(new PlainValue$5.Range(offset, end));
- offset = end;
- } else {
- let end = PlainValue$5.Node.endOfIdentifier(src, offset + 1);
-
- if (ch === PlainValue$5.Char.TAG && src[end] === ',' && /^[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+,\d\d\d\d(-\d\d){0,2}\/\S/.test(src.slice(offset + 1, end + 13))) {
- // Let's presume we're dealing with a YAML 1.0 domain tag here, rather
- // than an empty but 'foo.bar' private-tagged node in a flow collection
- // followed without whitespace by a plain string starting with a year
- // or date divided by something.
- end = PlainValue$5.Node.endOfIdentifier(src, end + 5);
- }
-
- props.push(new PlainValue$5.Range(offset, end));
- lineHasProps = true;
- offset = PlainValue$5.Node.endOfWhiteSpace(src, end);
- }
-
- ch = src[offset];
- } // '- &a : b' has an anchor on an empty node
-
-
- if (lineHasProps && ch === ':' && PlainValue$5.Node.atBlank(src, offset + 1, true)) offset -= 1;
- const type = ParseContext.parseType(src, offset, inFlow);
- return {
- props,
- type,
- valueStart: offset
- };
- }
- /**
- * Parses a node from the source
- * @param {ParseContext} overlay
- * @param {number} start - Index of first non-whitespace character for the node
- * @returns {?Node} - null if at a document boundary
- */
-
-
-}
-
-// Published as 'yaml/parse-cst'
-function parse$h(src) {
- const cr = [];
-
- if (src.indexOf('\r') !== -1) {
- src = src.replace(/\r\n?/g, (match, offset) => {
- if (match.length > 1) cr.push(offset);
- return '\n';
- });
- }
-
- const documents = [];
- let offset = 0;
-
- do {
- const doc = new Document$3();
- const context = new ParseContext({
- src
- });
- offset = doc.parse(context, offset);
- documents.push(doc);
- } while (offset < src.length);
-
- documents.setOrigRanges = () => {
- if (cr.length === 0) return false;
-
- for (let i = 1; i < cr.length; ++i) cr[i] -= i;
-
- let crOffset = 0;
-
- for (let i = 0; i < documents.length; ++i) {
- crOffset = documents[i].setOrigRanges(cr, crOffset);
- }
-
- cr.splice(0, cr.length);
- return true;
- };
-
- documents.toString = () => documents.join('...\n');
-
- return documents;
-}
-
-parseCst$1.parse = parse$h;
-
-var Document9b4560a1 = {};
-
-var resolveSeqD03cb037 = {};
-
-var PlainValue$4 = PlainValueEc8e588e;
-
-function addCommentBefore(str, indent, comment) {
- if (!comment) return str;
- const cc = comment.replace(/[\s\S]^/gm, `$&${indent}#`);
- return `#${cc}\n${indent}${str}`;
-}
-function addComment(str, indent, comment) {
- return !comment ? str : comment.indexOf('\n') === -1 ? `${str} #${comment}` : `${str}\n` + comment.replace(/^/gm, `${indent || ''}#`);
-}
-
-class Node$1 {}
-
-function toJSON(value, arg, ctx) {
- if (Array.isArray(value)) return value.map((v, i) => toJSON(v, String(i), ctx));
-
- if (value && typeof value.toJSON === 'function') {
- const anchor = ctx && ctx.anchors && ctx.anchors.get(value);
- if (anchor) ctx.onCreate = res => {
- anchor.res = res;
- delete ctx.onCreate;
- };
- const res = value.toJSON(arg, ctx);
- if (anchor && ctx.onCreate) ctx.onCreate(res);
- return res;
- }
-
- if ((!ctx || !ctx.keep) && typeof value === 'bigint') return Number(value);
- return value;
-}
-
-class Scalar extends Node$1 {
- constructor(value) {
- super();
- this.value = value;
- }
-
- toJSON(arg, ctx) {
- return ctx && ctx.keep ? this.value : toJSON(this.value, arg, ctx);
- }
-
- toString() {
- return String(this.value);
- }
-
-}
-
-function collectionFromPath(schema, path, value) {
- let v = value;
-
- for (let i = path.length - 1; i >= 0; --i) {
- const k = path[i];
-
- if (Number.isInteger(k) && k >= 0) {
- const a = [];
- a[k] = v;
- v = a;
- } else {
- const o = {};
- Object.defineProperty(o, k, {
- value: v,
- writable: true,
- enumerable: true,
- configurable: true
- });
- v = o;
- }
- }
-
- return schema.createNode(v, false);
-} // null, undefined, or an empty non-string iterable (e.g. [])
-
-
-const isEmptyPath = path => path == null || typeof path === 'object' && path[Symbol.iterator]().next().done;
-class Collection extends Node$1 {
- constructor(schema) {
- super();
-
- PlainValue$4._defineProperty(this, "items", []);
-
- this.schema = schema;
- }
-
- addIn(path, value) {
- if (isEmptyPath(path)) this.add(value);else {
- const [key, ...rest] = path;
- const node = this.get(key, true);
- if (node instanceof Collection) node.addIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
- }
- }
-
- deleteIn([key, ...rest]) {
- if (rest.length === 0) return this.delete(key);
- const node = this.get(key, true);
- if (node instanceof Collection) return node.deleteIn(rest);else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
- }
-
- getIn([key, ...rest], keepScalar) {
- const node = this.get(key, true);
- if (rest.length === 0) return !keepScalar && node instanceof Scalar ? node.value : node;else return node instanceof Collection ? node.getIn(rest, keepScalar) : undefined;
- }
-
- hasAllNullValues() {
- return this.items.every(node => {
- if (!node || node.type !== 'PAIR') return false;
- const n = node.value;
- return n == null || n instanceof Scalar && n.value == null && !n.commentBefore && !n.comment && !n.tag;
- });
- }
-
- hasIn([key, ...rest]) {
- if (rest.length === 0) return this.has(key);
- const node = this.get(key, true);
- return node instanceof Collection ? node.hasIn(rest) : false;
- }
-
- setIn([key, ...rest], value) {
- if (rest.length === 0) {
- this.set(key, value);
- } else {
- const node = this.get(key, true);
- if (node instanceof Collection) node.setIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
- }
- } // overridden in implementations
-
- /* istanbul ignore next */
-
-
- toJSON() {
- return null;
- }
-
- toString(ctx, {
- blockItem,
- flowChars,
- isMap,
- itemIndent
- }, onComment, onChompKeep) {
- const {
- indent,
- indentStep,
- stringify
- } = ctx;
- const inFlow = this.type === PlainValue$4.Type.FLOW_MAP || this.type === PlainValue$4.Type.FLOW_SEQ || ctx.inFlow;
- if (inFlow) itemIndent += indentStep;
- const allNullValues = isMap && this.hasAllNullValues();
- ctx = Object.assign({}, ctx, {
- allNullValues,
- indent: itemIndent,
- inFlow,
- type: null
- });
- let chompKeep = false;
- let hasItemWithNewLine = false;
- const nodes = this.items.reduce((nodes, item, i) => {
- let comment;
-
- if (item) {
- if (!chompKeep && item.spaceBefore) nodes.push({
- type: 'comment',
- str: ''
- });
- if (item.commentBefore) item.commentBefore.match(/^.*$/gm).forEach(line => {
- nodes.push({
- type: 'comment',
- str: `#${line}`
- });
- });
- if (item.comment) comment = item.comment;
- if (inFlow && (!chompKeep && item.spaceBefore || item.commentBefore || item.comment || item.key && (item.key.commentBefore || item.key.comment) || item.value && (item.value.commentBefore || item.value.comment))) hasItemWithNewLine = true;
- }
-
- chompKeep = false;
- let str = stringify(item, ctx, () => comment = null, () => chompKeep = true);
- if (inFlow && !hasItemWithNewLine && str.includes('\n')) hasItemWithNewLine = true;
- if (inFlow && i < this.items.length - 1) str += ',';
- str = addComment(str, itemIndent, comment);
- if (chompKeep && (comment || inFlow)) chompKeep = false;
- nodes.push({
- type: 'item',
- str
- });
- return nodes;
- }, []);
- let str;
-
- if (nodes.length === 0) {
- str = flowChars.start + flowChars.end;
- } else if (inFlow) {
- const {
- start,
- end
- } = flowChars;
- const strings = nodes.map(n => n.str);
-
- if (hasItemWithNewLine || strings.reduce((sum, str) => sum + str.length + 2, 2) > Collection.maxFlowStringSingleLineLength) {
- str = start;
-
- for (const s of strings) {
- str += s ? `\n${indentStep}${indent}${s}` : '\n';
- }
-
- str += `\n${indent}${end}`;
- } else {
- str = `${start} ${strings.join(' ')} ${end}`;
- }
- } else {
- const strings = nodes.map(blockItem);
- str = strings.shift();
-
- for (const s of strings) str += s ? `\n${indent}${s}` : '\n';
- }
-
- if (this.comment) {
- str += '\n' + this.comment.replace(/^/gm, `${indent}#`);
- if (onComment) onComment();
- } else if (chompKeep && onChompKeep) onChompKeep();
-
- return str;
- }
-
-}
-
-PlainValue$4._defineProperty(Collection, "maxFlowStringSingleLineLength", 60);
-
-function asItemIndex(key) {
- let idx = key instanceof Scalar ? key.value : key;
- if (idx && typeof idx === 'string') idx = Number(idx);
- return Number.isInteger(idx) && idx >= 0 ? idx : null;
-}
-
-class YAMLSeq extends Collection {
- add(value) {
- this.items.push(value);
- }
-
- delete(key) {
- const idx = asItemIndex(key);
- if (typeof idx !== 'number') return false;
- const del = this.items.splice(idx, 1);
- return del.length > 0;
- }
-
- get(key, keepScalar) {
- const idx = asItemIndex(key);
- if (typeof idx !== 'number') return undefined;
- const it = this.items[idx];
- return !keepScalar && it instanceof Scalar ? it.value : it;
- }
-
- has(key) {
- const idx = asItemIndex(key);
- return typeof idx === 'number' && idx < this.items.length;
- }
-
- set(key, value) {
- const idx = asItemIndex(key);
- if (typeof idx !== 'number') throw new Error(`Expected a valid index, not ${key}.`);
- this.items[idx] = value;
- }
-
- toJSON(_, ctx) {
- const seq = [];
- if (ctx && ctx.onCreate) ctx.onCreate(seq);
- let i = 0;
-
- for (const item of this.items) seq.push(toJSON(item, String(i++), ctx));
-
- return seq;
- }
-
- toString(ctx, onComment, onChompKeep) {
- if (!ctx) return JSON.stringify(this);
- return super.toString(ctx, {
- blockItem: n => n.type === 'comment' ? n.str : `- ${n.str}`,
- flowChars: {
- start: '[',
- end: ']'
- },
- isMap: false,
- itemIndent: (ctx.indent || '') + ' '
- }, onComment, onChompKeep);
- }
-
-}
-
-const stringifyKey = (key, jsKey, ctx) => {
- if (jsKey === null) return '';
- if (typeof jsKey !== 'object') return String(jsKey);
- if (key instanceof Node$1 && ctx && ctx.doc) return key.toString({
- anchors: Object.create(null),
- doc: ctx.doc,
- indent: '',
- indentStep: ctx.indentStep,
- inFlow: true,
- inStringifyKey: true,
- stringify: ctx.stringify
- });
- return JSON.stringify(jsKey);
-};
-
-class Pair extends Node$1 {
- constructor(key, value = null) {
- super();
- this.key = key;
- this.value = value;
- this.type = Pair.Type.PAIR;
- }
-
- get commentBefore() {
- return this.key instanceof Node$1 ? this.key.commentBefore : undefined;
- }
-
- set commentBefore(cb) {
- if (this.key == null) this.key = new Scalar(null);
- if (this.key instanceof Node$1) this.key.commentBefore = cb;else {
- const msg = 'Pair.commentBefore is an alias for Pair.key.commentBefore. To set it, the key must be a Node.';
- throw new Error(msg);
- }
- }
-
- addToJSMap(ctx, map) {
- const key = toJSON(this.key, '', ctx);
-
- if (map instanceof Map) {
- const value = toJSON(this.value, key, ctx);
- map.set(key, value);
- } else if (map instanceof Set) {
- map.add(key);
- } else {
- const stringKey = stringifyKey(this.key, key, ctx);
- const value = toJSON(this.value, stringKey, ctx);
- if (stringKey in map) Object.defineProperty(map, stringKey, {
- value,
- writable: true,
- enumerable: true,
- configurable: true
- });else map[stringKey] = value;
- }
-
- return map;
- }
-
- toJSON(_, ctx) {
- const pair = ctx && ctx.mapAsMap ? new Map() : {};
- return this.addToJSMap(ctx, pair);
- }
-
- toString(ctx, onComment, onChompKeep) {
- if (!ctx || !ctx.doc) return JSON.stringify(this);
- const {
- indent: indentSize,
- indentSeq,
- simpleKeys
- } = ctx.doc.options;
- let {
- key,
- value
- } = this;
- let keyComment = key instanceof Node$1 && key.comment;
-
- if (simpleKeys) {
- if (keyComment) {
- throw new Error('With simple keys, key nodes cannot have comments');
- }
-
- if (key instanceof Collection) {
- const msg = 'With simple keys, collection cannot be used as a key value';
- throw new Error(msg);
- }
- }
-
- let explicitKey = !simpleKeys && (!key || keyComment || (key instanceof Node$1 ? key instanceof Collection || key.type === PlainValue$4.Type.BLOCK_FOLDED || key.type === PlainValue$4.Type.BLOCK_LITERAL : typeof key === 'object'));
- const {
- doc,
- indent,
- indentStep,
- stringify
- } = ctx;
- ctx = Object.assign({}, ctx, {
- implicitKey: !explicitKey,
- indent: indent + indentStep
- });
- let chompKeep = false;
- let str = stringify(key, ctx, () => keyComment = null, () => chompKeep = true);
- str = addComment(str, ctx.indent, keyComment);
-
- if (!explicitKey && str.length > 1024) {
- if (simpleKeys) throw new Error('With simple keys, single line scalar must not span more than 1024 characters');
- explicitKey = true;
- }
-
- if (ctx.allNullValues && !simpleKeys) {
- if (this.comment) {
- str = addComment(str, ctx.indent, this.comment);
- if (onComment) onComment();
- } else if (chompKeep && !keyComment && onChompKeep) onChompKeep();
-
- return ctx.inFlow && !explicitKey ? str : `? ${str}`;
- }
-
- str = explicitKey ? `? ${str}\n${indent}:` : `${str}:`;
-
- if (this.comment) {
- // expected (but not strictly required) to be a single-line comment
- str = addComment(str, ctx.indent, this.comment);
- if (onComment) onComment();
- }
-
- let vcb = '';
- let valueComment = null;
-
- if (value instanceof Node$1) {
- if (value.spaceBefore) vcb = '\n';
-
- if (value.commentBefore) {
- const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`);
- vcb += `\n${cs}`;
- }
-
- valueComment = value.comment;
- } else if (value && typeof value === 'object') {
- value = doc.schema.createNode(value, true);
- }
-
- ctx.implicitKey = false;
- if (!explicitKey && !this.comment && value instanceof Scalar) ctx.indentAtStart = str.length + 1;
- chompKeep = false;
-
- if (!indentSeq && indentSize >= 2 && !ctx.inFlow && !explicitKey && value instanceof YAMLSeq && value.type !== PlainValue$4.Type.FLOW_SEQ && !value.tag && !doc.anchors.getName(value)) {
- // If indentSeq === false, consider '- ' as part of indentation where possible
- ctx.indent = ctx.indent.substr(2);
- }
-
- const valueStr = stringify(value, ctx, () => valueComment = null, () => chompKeep = true);
- let ws = ' ';
-
- if (vcb || this.comment) {
- ws = `${vcb}\n${ctx.indent}`;
- } else if (!explicitKey && value instanceof Collection) {
- const flow = valueStr[0] === '[' || valueStr[0] === '{';
- if (!flow || valueStr.includes('\n')) ws = `\n${ctx.indent}`;
- } else if (valueStr[0] === '\n') ws = '';
-
- if (chompKeep && !valueComment && onChompKeep) onChompKeep();
- return addComment(str + ws + valueStr, ctx.indent, valueComment);
- }
-
-}
-
-PlainValue$4._defineProperty(Pair, "Type", {
- PAIR: 'PAIR',
- MERGE_PAIR: 'MERGE_PAIR'
-});
-
-const getAliasCount = (node, anchors) => {
- if (node instanceof Alias) {
- const anchor = anchors.get(node.source);
- return anchor.count * anchor.aliasCount;
- } else if (node instanceof Collection) {
- let count = 0;
-
- for (const item of node.items) {
- const c = getAliasCount(item, anchors);
- if (c > count) count = c;
- }
-
- return count;
- } else if (node instanceof Pair) {
- const kc = getAliasCount(node.key, anchors);
- const vc = getAliasCount(node.value, anchors);
- return Math.max(kc, vc);
- }
-
- return 1;
-};
-
-class Alias extends Node$1 {
- static stringify({
- range,
- source
- }, {
- anchors,
- doc,
- implicitKey,
- inStringifyKey
- }) {
- let anchor = Object.keys(anchors).find(a => anchors[a] === source);
- if (!anchor && inStringifyKey) anchor = doc.anchors.getName(source) || doc.anchors.newName();
- if (anchor) return `*${anchor}${implicitKey ? ' ' : ''}`;
- const msg = doc.anchors.getName(source) ? 'Alias node must be after source node' : 'Source node not found for alias node';
- throw new Error(`${msg} [${range}]`);
- }
-
- constructor(source) {
- super();
- this.source = source;
- this.type = PlainValue$4.Type.ALIAS;
- }
-
- set tag(t) {
- throw new Error('Alias nodes cannot have tags');
- }
-
- toJSON(arg, ctx) {
- if (!ctx) return toJSON(this.source, arg, ctx);
- const {
- anchors,
- maxAliasCount
- } = ctx;
- const anchor = anchors.get(this.source);
- /* istanbul ignore if */
-
- if (!anchor || anchor.res === undefined) {
- const msg = 'This should not happen: Alias anchor was not resolved?';
- if (this.cstNode) throw new PlainValue$4.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg);
- }
-
- if (maxAliasCount >= 0) {
- anchor.count += 1;
- if (anchor.aliasCount === 0) anchor.aliasCount = getAliasCount(this.source, anchors);
-
- if (anchor.count * anchor.aliasCount > maxAliasCount) {
- const msg = 'Excessive alias count indicates a resource exhaustion attack';
- if (this.cstNode) throw new PlainValue$4.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg);
- }
- }
-
- return anchor.res;
- } // Only called when stringifying an alias mapping key while constructing
- // Object output.
-
-
- toString(ctx) {
- return Alias.stringify(this, ctx);
- }
-
-}
-
-PlainValue$4._defineProperty(Alias, "default", true);
-
-function findPair(items, key) {
- const k = key instanceof Scalar ? key.value : key;
-
- for (const it of items) {
- if (it instanceof Pair) {
- if (it.key === key || it.key === k) return it;
- if (it.key && it.key.value === k) return it;
- }
- }
-
- return undefined;
-}
-class YAMLMap extends Collection {
- add(pair, overwrite) {
- if (!pair) pair = new Pair(pair);else if (!(pair instanceof Pair)) pair = new Pair(pair.key || pair, pair.value);
- const prev = findPair(this.items, pair.key);
- const sortEntries = this.schema && this.schema.sortMapEntries;
-
- if (prev) {
- if (overwrite) prev.value = pair.value;else throw new Error(`Key ${pair.key} already set`);
- } else if (sortEntries) {
- const i = this.items.findIndex(item => sortEntries(pair, item) < 0);
- if (i === -1) this.items.push(pair);else this.items.splice(i, 0, pair);
- } else {
- this.items.push(pair);
- }
- }
-
- delete(key) {
- const it = findPair(this.items, key);
- if (!it) return false;
- const del = this.items.splice(this.items.indexOf(it), 1);
- return del.length > 0;
- }
-
- get(key, keepScalar) {
- const it = findPair(this.items, key);
- const node = it && it.value;
- return !keepScalar && node instanceof Scalar ? node.value : node;
- }
-
- has(key) {
- return !!findPair(this.items, key);
- }
-
- set(key, value) {
- this.add(new Pair(key, value), true);
- }
- /**
- * @param {*} arg ignored
- * @param {*} ctx Conversion context, originally set in Document#toJSON()
- * @param {Class} Type If set, forces the returned collection type
- * @returns {*} Instance of Type, Map, or Object
- */
-
-
- toJSON(_, ctx, Type) {
- const map = Type ? new Type() : ctx && ctx.mapAsMap ? new Map() : {};
- if (ctx && ctx.onCreate) ctx.onCreate(map);
-
- for (const item of this.items) item.addToJSMap(ctx, map);
-
- return map;
- }
-
- toString(ctx, onComment, onChompKeep) {
- if (!ctx) return JSON.stringify(this);
-
- for (const item of this.items) {
- if (!(item instanceof Pair)) throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);
- }
-
- return super.toString(ctx, {
- blockItem: n => n.str,
- flowChars: {
- start: '{',
- end: '}'
- },
- isMap: true,
- itemIndent: ctx.indent || ''
- }, onComment, onChompKeep);
- }
-
-}
-
-const MERGE_KEY = '<<';
-class Merge extends Pair {
- constructor(pair) {
- if (pair instanceof Pair) {
- let seq = pair.value;
-
- if (!(seq instanceof YAMLSeq)) {
- seq = new YAMLSeq();
- seq.items.push(pair.value);
- seq.range = pair.value.range;
- }
-
- super(pair.key, seq);
- this.range = pair.range;
- } else {
- super(new Scalar(MERGE_KEY), new YAMLSeq());
- }
-
- this.type = Pair.Type.MERGE_PAIR;
- } // If the value associated with a merge key is a single mapping node, each of
- // its key/value pairs is inserted into the current mapping, unless the key
- // already exists in it. If the value associated with the merge key is a
- // sequence, then this sequence is expected to contain mapping nodes and each
- // of these nodes is merged in turn according to its order in the sequence.
- // Keys in mapping nodes earlier in the sequence override keys specified in
- // later mapping nodes. -- http://yaml.org/type/merge.html
-
-
- addToJSMap(ctx, map) {
- for (const {
- source
- } of this.value.items) {
- if (!(source instanceof YAMLMap)) throw new Error('Merge sources must be maps');
- const srcMap = source.toJSON(null, ctx, Map);
-
- for (const [key, value] of srcMap) {
- if (map instanceof Map) {
- if (!map.has(key)) map.set(key, value);
- } else if (map instanceof Set) {
- map.add(key);
- } else if (!Object.prototype.hasOwnProperty.call(map, key)) {
- Object.defineProperty(map, key, {
- value,
- writable: true,
- enumerable: true,
- configurable: true
- });
- }
- }
- }
-
- return map;
- }
-
- toString(ctx, onComment) {
- const seq = this.value;
- if (seq.items.length > 1) return super.toString(ctx, onComment);
- this.value = seq.items[0];
- const str = super.toString(ctx, onComment);
- this.value = seq;
- return str;
- }
-
-}
-
-const binaryOptions = {
- defaultType: PlainValue$4.Type.BLOCK_LITERAL,
- lineWidth: 76
-};
-const boolOptions = {
- trueStr: 'true',
- falseStr: 'false'
-};
-const intOptions = {
- asBigInt: false
-};
-const nullOptions = {
- nullStr: 'null'
-};
-const strOptions = {
- defaultType: PlainValue$4.Type.PLAIN,
- doubleQuoted: {
- jsonEncoding: false,
- minMultiLineLength: 40
- },
- fold: {
- lineWidth: 80,
- minContentWidth: 20
- }
-};
-
-function resolveScalar(str, tags, scalarFallback) {
- for (const {
- format,
- test,
- resolve
- } of tags) {
- if (test) {
- const match = str.match(test);
-
- if (match) {
- let res = resolve.apply(null, match);
- if (!(res instanceof Scalar)) res = new Scalar(res);
- if (format) res.format = format;
- return res;
- }
- }
- }
-
- if (scalarFallback) str = scalarFallback(str);
- return new Scalar(str);
-}
-
-const FOLD_FLOW = 'flow';
-const FOLD_BLOCK = 'block';
-const FOLD_QUOTED = 'quoted'; // presumes i+1 is at the start of a line
-// returns index of last newline in more-indented block
-
-const consumeMoreIndentedLines = (text, i) => {
- let ch = text[i + 1];
-
- while (ch === ' ' || ch === '\t') {
- do {
- ch = text[i += 1];
- } while (ch && ch !== '\n');
-
- ch = text[i + 1];
- }
-
- return i;
-};
-/**
- * Tries to keep input at up to `lineWidth` characters, splitting only on spaces
- * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are
- * terminated with `\n` and started with `indent`.
- *
- * @param {string} text
- * @param {string} indent
- * @param {string} [mode='flow'] `'block'` prevents more-indented lines
- * from being folded; `'quoted'` allows for `\` escapes, including escaped
- * newlines
- * @param {Object} options
- * @param {number} [options.indentAtStart] Accounts for leading contents on
- * the first line, defaulting to `indent.length`
- * @param {number} [options.lineWidth=80]
- * @param {number} [options.minContentWidth=20] Allow highly indented lines to
- * stretch the line width or indent content from the start
- * @param {function} options.onFold Called once if the text is folded
- * @param {function} options.onFold Called once if any line of text exceeds
- * lineWidth characters
- */
-
-
-function foldFlowLines(text, indent, mode, {
- indentAtStart,
- lineWidth = 80,
- minContentWidth = 20,
- onFold,
- onOverflow
-}) {
- if (!lineWidth || lineWidth < 0) return text;
- const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
- if (text.length <= endStep) return text;
- const folds = [];
- const escapedFolds = {};
- let end = lineWidth - indent.length;
-
- if (typeof indentAtStart === 'number') {
- if (indentAtStart > lineWidth - Math.max(2, minContentWidth)) folds.push(0);else end = lineWidth - indentAtStart;
- }
-
- let split = undefined;
- let prev = undefined;
- let overflow = false;
- let i = -1;
- let escStart = -1;
- let escEnd = -1;
-
- if (mode === FOLD_BLOCK) {
- i = consumeMoreIndentedLines(text, i);
- if (i !== -1) end = i + endStep;
- }
-
- for (let ch; ch = text[i += 1];) {
- if (mode === FOLD_QUOTED && ch === '\\') {
- escStart = i;
-
- switch (text[i + 1]) {
- case 'x':
- i += 3;
- break;
-
- case 'u':
- i += 5;
- break;
-
- case 'U':
- i += 9;
- break;
-
- default:
- i += 1;
- }
-
- escEnd = i;
- }
-
- if (ch === '\n') {
- if (mode === FOLD_BLOCK) i = consumeMoreIndentedLines(text, i);
- end = i + endStep;
- split = undefined;
- } else {
- if (ch === ' ' && prev && prev !== ' ' && prev !== '\n' && prev !== '\t') {
- // space surrounded by non-space can be replaced with newline + indent
- const next = text[i + 1];
- if (next && next !== ' ' && next !== '\n' && next !== '\t') split = i;
- }
-
- if (i >= end) {
- if (split) {
- folds.push(split);
- end = split + endStep;
- split = undefined;
- } else if (mode === FOLD_QUOTED) {
- // white-space collected at end may stretch past lineWidth
- while (prev === ' ' || prev === '\t') {
- prev = ch;
- ch = text[i += 1];
- overflow = true;
- } // Account for newline escape, but don't break preceding escape
-
-
- const j = i > escEnd + 1 ? i - 2 : escStart - 1; // Bail out if lineWidth & minContentWidth are shorter than an escape string
-
- if (escapedFolds[j]) return text;
- folds.push(j);
- escapedFolds[j] = true;
- end = j + endStep;
- split = undefined;
- } else {
- overflow = true;
- }
- }
- }
-
- prev = ch;
- }
-
- if (overflow && onOverflow) onOverflow();
- if (folds.length === 0) return text;
- if (onFold) onFold();
- let res = text.slice(0, folds[0]);
-
- for (let i = 0; i < folds.length; ++i) {
- const fold = folds[i];
- const end = folds[i + 1] || text.length;
- if (fold === 0) res = `\n${indent}${text.slice(0, end)}`;else {
- if (mode === FOLD_QUOTED && escapedFolds[fold]) res += `${text[fold]}\\`;
- res += `\n${indent}${text.slice(fold + 1, end)}`;
- }
- }
-
- return res;
-}
-
-const getFoldOptions = ({
- indentAtStart
-}) => indentAtStart ? Object.assign({
- indentAtStart
-}, strOptions.fold) : strOptions.fold; // Also checks for lines starting with %, as parsing the output as YAML 1.1 will
-// presume that's starting a new document.
-
-
-const containsDocumentMarker = str => /^(%|---|\.\.\.)/m.test(str);
-
-function lineLengthOverLimit(str, lineWidth, indentLength) {
- if (!lineWidth || lineWidth < 0) return false;
- const limit = lineWidth - indentLength;
- const strLen = str.length;
- if (strLen <= limit) return false;
-
- for (let i = 0, start = 0; i < strLen; ++i) {
- if (str[i] === '\n') {
- if (i - start > limit) return true;
- start = i + 1;
- if (strLen - start <= limit) return false;
- }
- }
-
- return true;
-}
-
-function doubleQuotedString(value, ctx) {
- const {
- implicitKey
- } = ctx;
- const {
- jsonEncoding,
- minMultiLineLength
- } = strOptions.doubleQuoted;
- const json = JSON.stringify(value);
- if (jsonEncoding) return json;
- const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');
- let str = '';
- let start = 0;
-
- for (let i = 0, ch = json[i]; ch; ch = json[++i]) {
- if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') {
- // space before newline needs to be escaped to not be folded
- str += json.slice(start, i) + '\\ ';
- i += 1;
- start = i;
- ch = '\\';
- }
-
- if (ch === '\\') switch (json[i + 1]) {
- case 'u':
- {
- str += json.slice(start, i);
- const code = json.substr(i + 2, 4);
-
- switch (code) {
- case '0000':
- str += '\\0';
- break;
-
- case '0007':
- str += '\\a';
- break;
-
- case '000b':
- str += '\\v';
- break;
-
- case '001b':
- str += '\\e';
- break;
-
- case '0085':
- str += '\\N';
- break;
-
- case '00a0':
- str += '\\_';
- break;
-
- case '2028':
- str += '\\L';
- break;
-
- case '2029':
- str += '\\P';
- break;
-
- default:
- if (code.substr(0, 2) === '00') str += '\\x' + code.substr(2);else str += json.substr(i, 6);
- }
-
- i += 5;
- start = i + 1;
- }
- break;
-
- case 'n':
- if (implicitKey || json[i + 2] === '"' || json.length < minMultiLineLength) {
- i += 1;
- } else {
- // folding will eat first newline
- str += json.slice(start, i) + '\n\n';
-
- while (json[i + 2] === '\\' && json[i + 3] === 'n' && json[i + 4] !== '"') {
- str += '\n';
- i += 2;
- }
-
- str += indent; // space after newline needs to be escaped to not be folded
-
- if (json[i + 2] === ' ') str += '\\';
- i += 1;
- start = i + 1;
- }
-
- break;
-
- default:
- i += 1;
- }
- }
-
- str = start ? str + json.slice(start) : json;
- return implicitKey ? str : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx));
-}
-
-function singleQuotedString(value, ctx) {
- if (ctx.implicitKey) {
- if (/\n/.test(value)) return doubleQuotedString(value, ctx);
- } else {
- // single quoted string can't have leading or trailing whitespace around newline
- if (/[ \t]\n|\n[ \t]/.test(value)) return doubleQuotedString(value, ctx);
- }
-
- const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');
- const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'";
- return ctx.implicitKey ? res : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx));
-}
-
-function blockString({
- comment,
- type,
- value
-}, ctx, onComment, onChompKeep) {
- // 1. Block can't end in whitespace unless the last line is non-empty.
- // 2. Strings consisting of only whitespace are best rendered explicitly.
- if (/\n[\t ]+$/.test(value) || /^\s*$/.test(value)) {
- return doubleQuotedString(value, ctx);
- }
-
- const indent = ctx.indent || (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');
- const indentSize = indent ? '2' : '1'; // root is at -1
-
- const literal = type === PlainValue$4.Type.BLOCK_FOLDED ? false : type === PlainValue$4.Type.BLOCK_LITERAL ? true : !lineLengthOverLimit(value, strOptions.fold.lineWidth, indent.length);
- let header = literal ? '|' : '>';
- if (!value) return header + '\n';
- let wsStart = '';
- let wsEnd = '';
- value = value.replace(/[\n\t ]*$/, ws => {
- const n = ws.indexOf('\n');
-
- if (n === -1) {
- header += '-'; // strip
- } else if (value === ws || n !== ws.length - 1) {
- header += '+'; // keep
-
- if (onChompKeep) onChompKeep();
- }
-
- wsEnd = ws.replace(/\n$/, '');
- return '';
- }).replace(/^[\n ]*/, ws => {
- if (ws.indexOf(' ') !== -1) header += indentSize;
- const m = ws.match(/ +$/);
-
- if (m) {
- wsStart = ws.slice(0, -m[0].length);
- return m[0];
- } else {
- wsStart = ws;
- return '';
- }
- });
- if (wsEnd) wsEnd = wsEnd.replace(/\n+(?!\n|$)/g, `$&${indent}`);
- if (wsStart) wsStart = wsStart.replace(/\n+/g, `$&${indent}`);
-
- if (comment) {
- header += ' #' + comment.replace(/ ?[\r\n]+/g, ' ');
- if (onComment) onComment();
- }
-
- if (!value) return `${header}${indentSize}\n${indent}${wsEnd}`;
-
- if (literal) {
- value = value.replace(/\n+/g, `$&${indent}`);
- return `${header}\n${indent}${wsStart}${value}${wsEnd}`;
- }
-
- value = value.replace(/\n+/g, '\n$&').replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded
- // ^ ind.line ^ empty ^ capture next empty lines only at end of indent
- .replace(/\n+/g, `$&${indent}`);
- const body = foldFlowLines(`${wsStart}${value}${wsEnd}`, indent, FOLD_BLOCK, strOptions.fold);
- return `${header}\n${indent}${body}`;
-}
-
-function plainString(item, ctx, onComment, onChompKeep) {
- const {
- comment,
- type,
- value
- } = item;
- const {
- actualString,
- implicitKey,
- indent,
- inFlow
- } = ctx;
-
- if (implicitKey && /[\n[\]{},]/.test(value) || inFlow && /[[\]{},]/.test(value)) {
- return doubleQuotedString(value, ctx);
- }
-
- if (!value || /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) {
- // not allowed:
- // - empty string, '-' or '?'
- // - start with an indicator character (except [?:-]) or /[?-] /
- // - '\n ', ': ' or ' \n' anywhere
- // - '#' not preceded by a non-space char
- // - end with ' ' or ':'
- return implicitKey || inFlow || value.indexOf('\n') === -1 ? value.indexOf('"') !== -1 && value.indexOf("'") === -1 ? singleQuotedString(value, ctx) : doubleQuotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep);
- }
-
- if (!implicitKey && !inFlow && type !== PlainValue$4.Type.PLAIN && value.indexOf('\n') !== -1) {
- // Where allowed & type not set explicitly, prefer block style for multiline strings
- return blockString(item, ctx, onComment, onChompKeep);
- }
-
- if (indent === '' && containsDocumentMarker(value)) {
- ctx.forceBlockIndent = true;
- return blockString(item, ctx, onComment, onChompKeep);
- }
-
- const str = value.replace(/\n+/g, `$&\n${indent}`); // Verify that output will be parsed as a string, as e.g. plain numbers and
- // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),
- // and others in v1.1.
-
- if (actualString) {
- const {
- tags
- } = ctx.doc.schema;
- const resolved = resolveScalar(str, tags, tags.scalarFallback).value;
- if (typeof resolved !== 'string') return doubleQuotedString(value, ctx);
- }
-
- const body = implicitKey ? str : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx));
-
- if (comment && !inFlow && (body.indexOf('\n') !== -1 || comment.indexOf('\n') !== -1)) {
- if (onComment) onComment();
- return addCommentBefore(body, indent, comment);
- }
-
- return body;
-}
-
-function stringifyString(item, ctx, onComment, onChompKeep) {
- const {
- defaultType
- } = strOptions;
- const {
- implicitKey,
- inFlow
- } = ctx;
- let {
- type,
- value
- } = item;
-
- if (typeof value !== 'string') {
- value = String(value);
- item = Object.assign({}, item, {
- value
- });
- }
-
- const _stringify = _type => {
- switch (_type) {
- case PlainValue$4.Type.BLOCK_FOLDED:
- case PlainValue$4.Type.BLOCK_LITERAL:
- return blockString(item, ctx, onComment, onChompKeep);
-
- case PlainValue$4.Type.QUOTE_DOUBLE:
- return doubleQuotedString(value, ctx);
-
- case PlainValue$4.Type.QUOTE_SINGLE:
- return singleQuotedString(value, ctx);
-
- case PlainValue$4.Type.PLAIN:
- return plainString(item, ctx, onComment, onChompKeep);
-
- default:
- return null;
- }
- };
-
- if (type !== PlainValue$4.Type.QUOTE_DOUBLE && /[\x00-\x08\x0b-\x1f\x7f-\x9f]/.test(value)) {
- // force double quotes on control characters
- type = PlainValue$4.Type.QUOTE_DOUBLE;
- } else if ((implicitKey || inFlow) && (type === PlainValue$4.Type.BLOCK_FOLDED || type === PlainValue$4.Type.BLOCK_LITERAL)) {
- // should not happen; blocks are not valid inside flow containers
- type = PlainValue$4.Type.QUOTE_DOUBLE;
- }
-
- let res = _stringify(type);
-
- if (res === null) {
- res = _stringify(defaultType);
- if (res === null) throw new Error(`Unsupported default string type ${defaultType}`);
- }
-
- return res;
-}
-
-function stringifyNumber({
- format,
- minFractionDigits,
- tag,
- value
-}) {
- if (typeof value === 'bigint') return String(value);
- if (!isFinite(value)) return isNaN(value) ? '.nan' : value < 0 ? '-.inf' : '.inf';
- let n = JSON.stringify(value);
-
- if (!format && minFractionDigits && (!tag || tag === 'tag:yaml.org,2002:float') && /^\d/.test(n)) {
- let i = n.indexOf('.');
-
- if (i < 0) {
- i = n.length;
- n += '.';
- }
-
- let d = minFractionDigits - (n.length - i - 1);
-
- while (d-- > 0) n += '0';
- }
-
- return n;
-}
-
-function checkFlowCollectionEnd(errors, cst) {
- let char, name;
-
- switch (cst.type) {
- case PlainValue$4.Type.FLOW_MAP:
- char = '}';
- name = 'flow map';
- break;
-
- case PlainValue$4.Type.FLOW_SEQ:
- char = ']';
- name = 'flow sequence';
- break;
-
- default:
- errors.push(new PlainValue$4.YAMLSemanticError(cst, 'Not a flow collection!?'));
- return;
- }
-
- let lastItem;
-
- for (let i = cst.items.length - 1; i >= 0; --i) {
- const item = cst.items[i];
-
- if (!item || item.type !== PlainValue$4.Type.COMMENT) {
- lastItem = item;
- break;
- }
- }
-
- if (lastItem && lastItem.char !== char) {
- const msg = `Expected ${name} to end with ${char}`;
- let err;
-
- if (typeof lastItem.offset === 'number') {
- err = new PlainValue$4.YAMLSemanticError(cst, msg);
- err.offset = lastItem.offset + 1;
- } else {
- err = new PlainValue$4.YAMLSemanticError(lastItem, msg);
- if (lastItem.range && lastItem.range.end) err.offset = lastItem.range.end - lastItem.range.start;
- }
-
- errors.push(err);
- }
-}
-function checkFlowCommentSpace(errors, comment) {
- const prev = comment.context.src[comment.range.start - 1];
-
- if (prev !== '\n' && prev !== '\t' && prev !== ' ') {
- const msg = 'Comments must be separated from other tokens by white space characters';
- errors.push(new PlainValue$4.YAMLSemanticError(comment, msg));
- }
-}
-function getLongKeyError(source, key) {
- const sk = String(key);
- const k = sk.substr(0, 8) + '...' + sk.substr(-8);
- return new PlainValue$4.YAMLSemanticError(source, `The "${k}" key is too long`);
-}
-function resolveComments(collection, comments) {
- for (const {
- afterKey,
- before,
- comment
- } of comments) {
- let item = collection.items[before];
-
- if (!item) {
- if (comment !== undefined) {
- if (collection.comment) collection.comment += '\n' + comment;else collection.comment = comment;
- }
- } else {
- if (afterKey && item.value) item = item.value;
-
- if (comment === undefined) {
- if (afterKey || !item.commentBefore) item.spaceBefore = true;
- } else {
- if (item.commentBefore) item.commentBefore += '\n' + comment;else item.commentBefore = comment;
- }
- }
- }
-}
-
-// on error, will return { str: string, errors: Error[] }
-function resolveString(doc, node) {
- const res = node.strValue;
- if (!res) return '';
- if (typeof res === 'string') return res;
- res.errors.forEach(error => {
- if (!error.source) error.source = node;
- doc.errors.push(error);
- });
- return res.str;
-}
-
-function resolveTagHandle(doc, node) {
- const {
- handle,
- suffix
- } = node.tag;
- let prefix = doc.tagPrefixes.find(p => p.handle === handle);
-
- if (!prefix) {
- const dtp = doc.getDefaults().tagPrefixes;
- if (dtp) prefix = dtp.find(p => p.handle === handle);
- if (!prefix) throw new PlainValue$4.YAMLSemanticError(node, `The ${handle} tag handle is non-default and was not declared.`);
- }
-
- if (!suffix) throw new PlainValue$4.YAMLSemanticError(node, `The ${handle} tag has no suffix.`);
-
- if (handle === '!' && (doc.version || doc.options.version) === '1.0') {
- if (suffix[0] === '^') {
- doc.warnings.push(new PlainValue$4.YAMLWarning(node, 'YAML 1.0 ^ tag expansion is not supported'));
- return suffix;
- }
-
- if (/[:/]/.test(suffix)) {
- // word/foo -> tag:word.yaml.org,2002:foo
- const vocab = suffix.match(/^([a-z0-9-]+)\/(.*)/i);
- return vocab ? `tag:${vocab[1]}.yaml.org,2002:${vocab[2]}` : `tag:${suffix}`;
- }
- }
-
- return prefix.prefix + decodeURIComponent(suffix);
-}
-
-function resolveTagName(doc, node) {
- const {
- tag,
- type
- } = node;
- let nonSpecific = false;
-
- if (tag) {
- const {
- handle,
- suffix,
- verbatim
- } = tag;
-
- if (verbatim) {
- if (verbatim !== '!' && verbatim !== '!!') return verbatim;
- const msg = `Verbatim tags aren't resolved, so ${verbatim} is invalid.`;
- doc.errors.push(new PlainValue$4.YAMLSemanticError(node, msg));
- } else if (handle === '!' && !suffix) {
- nonSpecific = true;
- } else {
- try {
- return resolveTagHandle(doc, node);
- } catch (error) {
- doc.errors.push(error);
- }
- }
- }
-
- switch (type) {
- case PlainValue$4.Type.BLOCK_FOLDED:
- case PlainValue$4.Type.BLOCK_LITERAL:
- case PlainValue$4.Type.QUOTE_DOUBLE:
- case PlainValue$4.Type.QUOTE_SINGLE:
- return PlainValue$4.defaultTags.STR;
-
- case PlainValue$4.Type.FLOW_MAP:
- case PlainValue$4.Type.MAP:
- return PlainValue$4.defaultTags.MAP;
-
- case PlainValue$4.Type.FLOW_SEQ:
- case PlainValue$4.Type.SEQ:
- return PlainValue$4.defaultTags.SEQ;
-
- case PlainValue$4.Type.PLAIN:
- return nonSpecific ? PlainValue$4.defaultTags.STR : null;
-
- default:
- return null;
- }
-}
-
-function resolveByTagName(doc, node, tagName) {
- const {
- tags
- } = doc.schema;
- const matchWithTest = [];
-
- for (const tag of tags) {
- if (tag.tag === tagName) {
- if (tag.test) matchWithTest.push(tag);else {
- const res = tag.resolve(doc, node);
- return res instanceof Collection ? res : new Scalar(res);
- }
- }
- }
-
- const str = resolveString(doc, node);
- if (typeof str === 'string' && matchWithTest.length > 0) return resolveScalar(str, matchWithTest, tags.scalarFallback);
- return null;
-}
-
-function getFallbackTagName({
- type
-}) {
- switch (type) {
- case PlainValue$4.Type.FLOW_MAP:
- case PlainValue$4.Type.MAP:
- return PlainValue$4.defaultTags.MAP;
-
- case PlainValue$4.Type.FLOW_SEQ:
- case PlainValue$4.Type.SEQ:
- return PlainValue$4.defaultTags.SEQ;
-
- default:
- return PlainValue$4.defaultTags.STR;
- }
-}
-
-function resolveTag(doc, node, tagName) {
- try {
- const res = resolveByTagName(doc, node, tagName);
-
- if (res) {
- if (tagName && node.tag) res.tag = tagName;
- return res;
- }
- } catch (error) {
- /* istanbul ignore if */
- if (!error.source) error.source = node;
- doc.errors.push(error);
- return null;
- }
-
- try {
- const fallback = getFallbackTagName(node);
- if (!fallback) throw new Error(`The tag ${tagName} is unavailable`);
- const msg = `The tag ${tagName} is unavailable, falling back to ${fallback}`;
- doc.warnings.push(new PlainValue$4.YAMLWarning(node, msg));
- const res = resolveByTagName(doc, node, fallback);
- res.tag = tagName;
- return res;
- } catch (error) {
- const refError = new PlainValue$4.YAMLReferenceError(node, error.message);
- refError.stack = error.stack;
- doc.errors.push(refError);
- return null;
- }
-}
-
-const isCollectionItem = node => {
- if (!node) return false;
- const {
- type
- } = node;
- return type === PlainValue$4.Type.MAP_KEY || type === PlainValue$4.Type.MAP_VALUE || type === PlainValue$4.Type.SEQ_ITEM;
-};
-
-function resolveNodeProps(errors, node) {
- const comments = {
- before: [],
- after: []
- };
- let hasAnchor = false;
- let hasTag = false;
- const props = isCollectionItem(node.context.parent) ? node.context.parent.props.concat(node.props) : node.props;
-
- for (const {
- start,
- end
- } of props) {
- switch (node.context.src[start]) {
- case PlainValue$4.Char.COMMENT:
- {
- if (!node.commentHasRequiredWhitespace(start)) {
- const msg = 'Comments must be separated from other tokens by white space characters';
- errors.push(new PlainValue$4.YAMLSemanticError(node, msg));
- }
-
- const {
- header,
- valueRange
- } = node;
- const cc = valueRange && (start > valueRange.start || header && start > header.start) ? comments.after : comments.before;
- cc.push(node.context.src.slice(start + 1, end));
- break;
- }
- // Actual anchor & tag resolution is handled by schema, here we just complain
-
- case PlainValue$4.Char.ANCHOR:
- if (hasAnchor) {
- const msg = 'A node can have at most one anchor';
- errors.push(new PlainValue$4.YAMLSemanticError(node, msg));
- }
-
- hasAnchor = true;
- break;
-
- case PlainValue$4.Char.TAG:
- if (hasTag) {
- const msg = 'A node can have at most one tag';
- errors.push(new PlainValue$4.YAMLSemanticError(node, msg));
- }
-
- hasTag = true;
- break;
- }
- }
-
- return {
- comments,
- hasAnchor,
- hasTag
- };
-}
-
-function resolveNodeValue(doc, node) {
- const {
- anchors,
- errors,
- schema
- } = doc;
-
- if (node.type === PlainValue$4.Type.ALIAS) {
- const name = node.rawValue;
- const src = anchors.getNode(name);
-
- if (!src) {
- const msg = `Aliased anchor not found: ${name}`;
- errors.push(new PlainValue$4.YAMLReferenceError(node, msg));
- return null;
- } // Lazy resolution for circular references
-
-
- const res = new Alias(src);
-
- anchors._cstAliases.push(res);
-
- return res;
- }
-
- const tagName = resolveTagName(doc, node);
- if (tagName) return resolveTag(doc, node, tagName);
-
- if (node.type !== PlainValue$4.Type.PLAIN) {
- const msg = `Failed to resolve ${node.type} node here`;
- errors.push(new PlainValue$4.YAMLSyntaxError(node, msg));
- return null;
- }
-
- try {
- const str = resolveString(doc, node);
- return resolveScalar(str, schema.tags, schema.tags.scalarFallback);
- } catch (error) {
- if (!error.source) error.source = node;
- errors.push(error);
- return null;
- }
-} // sets node.resolved on success
-
-
-function resolveNode(doc, node) {
- if (!node) return null;
- if (node.error) doc.errors.push(node.error);
- const {
- comments,
- hasAnchor,
- hasTag
- } = resolveNodeProps(doc.errors, node);
-
- if (hasAnchor) {
- const {
- anchors
- } = doc;
- const name = node.anchor;
- const prev = anchors.getNode(name); // At this point, aliases for any preceding node with the same anchor
- // name have already been resolved, so it may safely be renamed.
-
- if (prev) anchors.map[anchors.newName(name)] = prev; // During parsing, we need to store the CST node in anchors.map as
- // anchors need to be available during resolution to allow for
- // circular references.
-
- anchors.map[name] = node;
- }
-
- if (node.type === PlainValue$4.Type.ALIAS && (hasAnchor || hasTag)) {
- const msg = 'An alias node must not specify any properties';
- doc.errors.push(new PlainValue$4.YAMLSemanticError(node, msg));
- }
-
- const res = resolveNodeValue(doc, node);
-
- if (res) {
- res.range = [node.range.start, node.range.end];
- if (doc.options.keepCstNodes) res.cstNode = node;
- if (doc.options.keepNodeTypes) res.type = node.type;
- const cb = comments.before.join('\n');
-
- if (cb) {
- res.commentBefore = res.commentBefore ? `${res.commentBefore}\n${cb}` : cb;
- }
-
- const ca = comments.after.join('\n');
- if (ca) res.comment = res.comment ? `${res.comment}\n${ca}` : ca;
- }
-
- return node.resolved = res;
-}
-
-function resolveMap(doc, cst) {
- if (cst.type !== PlainValue$4.Type.MAP && cst.type !== PlainValue$4.Type.FLOW_MAP) {
- const msg = `A ${cst.type} node cannot be resolved as a mapping`;
- doc.errors.push(new PlainValue$4.YAMLSyntaxError(cst, msg));
- return null;
- }
-
- const {
- comments,
- items
- } = cst.type === PlainValue$4.Type.FLOW_MAP ? resolveFlowMapItems(doc, cst) : resolveBlockMapItems(doc, cst);
- const map = new YAMLMap();
- map.items = items;
- resolveComments(map, comments);
- let hasCollectionKey = false;
-
- for (let i = 0; i < items.length; ++i) {
- const {
- key: iKey
- } = items[i];
- if (iKey instanceof Collection) hasCollectionKey = true;
-
- if (doc.schema.merge && iKey && iKey.value === MERGE_KEY) {
- items[i] = new Merge(items[i]);
- const sources = items[i].value.items;
- let error = null;
- sources.some(node => {
- if (node instanceof Alias) {
- // During parsing, alias sources are CST nodes; to account for
- // circular references their resolved values can't be used here.
- const {
- type
- } = node.source;
- if (type === PlainValue$4.Type.MAP || type === PlainValue$4.Type.FLOW_MAP) return false;
- return error = 'Merge nodes aliases can only point to maps';
- }
-
- return error = 'Merge nodes can only have Alias nodes as values';
- });
- if (error) doc.errors.push(new PlainValue$4.YAMLSemanticError(cst, error));
- } else {
- for (let j = i + 1; j < items.length; ++j) {
- const {
- key: jKey
- } = items[j];
-
- if (iKey === jKey || iKey && jKey && Object.prototype.hasOwnProperty.call(iKey, 'value') && iKey.value === jKey.value) {
- const msg = `Map keys must be unique; "${iKey}" is repeated`;
- doc.errors.push(new PlainValue$4.YAMLSemanticError(cst, msg));
- break;
- }
- }
- }
- }
-
- if (hasCollectionKey && !doc.options.mapAsMap) {
- const warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.';
- doc.warnings.push(new PlainValue$4.YAMLWarning(cst, warn));
- }
-
- cst.resolved = map;
- return map;
-}
-
-const valueHasPairComment = ({
- context: {
- lineStart,
- node,
- src
- },
- props
-}) => {
- if (props.length === 0) return false;
- const {
- start
- } = props[0];
- if (node && start > node.valueRange.start) return false;
- if (src[start] !== PlainValue$4.Char.COMMENT) return false;
-
- for (let i = lineStart; i < start; ++i) if (src[i] === '\n') return false;
-
- return true;
-};
-
-function resolvePairComment(item, pair) {
- if (!valueHasPairComment(item)) return;
- const comment = item.getPropValue(0, PlainValue$4.Char.COMMENT, true);
- let found = false;
- const cb = pair.value.commentBefore;
-
- if (cb && cb.startsWith(comment)) {
- pair.value.commentBefore = cb.substr(comment.length + 1);
- found = true;
- } else {
- const cc = pair.value.comment;
-
- if (!item.node && cc && cc.startsWith(comment)) {
- pair.value.comment = cc.substr(comment.length + 1);
- found = true;
- }
- }
-
- if (found) pair.comment = comment;
-}
-
-function resolveBlockMapItems(doc, cst) {
- const comments = [];
- const items = [];
- let key = undefined;
- let keyStart = null;
-
- for (let i = 0; i < cst.items.length; ++i) {
- const item = cst.items[i];
-
- switch (item.type) {
- case PlainValue$4.Type.BLANK_LINE:
- comments.push({
- afterKey: !!key,
- before: items.length
- });
- break;
-
- case PlainValue$4.Type.COMMENT:
- comments.push({
- afterKey: !!key,
- before: items.length,
- comment: item.comment
- });
- break;
-
- case PlainValue$4.Type.MAP_KEY:
- if (key !== undefined) items.push(new Pair(key));
- if (item.error) doc.errors.push(item.error);
- key = resolveNode(doc, item.node);
- keyStart = null;
- break;
-
- case PlainValue$4.Type.MAP_VALUE:
- {
- if (key === undefined) key = null;
- if (item.error) doc.errors.push(item.error);
-
- if (!item.context.atLineStart && item.node && item.node.type === PlainValue$4.Type.MAP && !item.node.context.atLineStart) {
- const msg = 'Nested mappings are not allowed in compact mappings';
- doc.errors.push(new PlainValue$4.YAMLSemanticError(item.node, msg));
- }
-
- let valueNode = item.node;
-
- if (!valueNode && item.props.length > 0) {
- // Comments on an empty mapping value need to be preserved, so we
- // need to construct a minimal empty node here to use instead of the
- // missing `item.node`. -- eemeli/yaml#19
- valueNode = new PlainValue$4.PlainValue(PlainValue$4.Type.PLAIN, []);
- valueNode.context = {
- parent: item,
- src: item.context.src
- };
- const pos = item.range.start + 1;
- valueNode.range = {
- start: pos,
- end: pos
- };
- valueNode.valueRange = {
- start: pos,
- end: pos
- };
-
- if (typeof item.range.origStart === 'number') {
- const origPos = item.range.origStart + 1;
- valueNode.range.origStart = valueNode.range.origEnd = origPos;
- valueNode.valueRange.origStart = valueNode.valueRange.origEnd = origPos;
- }
- }
-
- const pair = new Pair(key, resolveNode(doc, valueNode));
- resolvePairComment(item, pair);
- items.push(pair);
-
- if (key && typeof keyStart === 'number') {
- if (item.range.start > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key));
- }
-
- key = undefined;
- keyStart = null;
- }
- break;
-
- default:
- if (key !== undefined) items.push(new Pair(key));
- key = resolveNode(doc, item);
- keyStart = item.range.start;
- if (item.error) doc.errors.push(item.error);
-
- next: for (let j = i + 1;; ++j) {
- const nextItem = cst.items[j];
-
- switch (nextItem && nextItem.type) {
- case PlainValue$4.Type.BLANK_LINE:
- case PlainValue$4.Type.COMMENT:
- continue next;
-
- case PlainValue$4.Type.MAP_VALUE:
- break next;
-
- default:
- {
- const msg = 'Implicit map keys need to be followed by map values';
- doc.errors.push(new PlainValue$4.YAMLSemanticError(item, msg));
- break next;
- }
- }
- }
-
- if (item.valueRangeContainsNewline) {
- const msg = 'Implicit map keys need to be on a single line';
- doc.errors.push(new PlainValue$4.YAMLSemanticError(item, msg));
- }
-
- }
- }
-
- if (key !== undefined) items.push(new Pair(key));
- return {
- comments,
- items
- };
-}
-
-function resolveFlowMapItems(doc, cst) {
- const comments = [];
- const items = [];
- let key = undefined;
- let explicitKey = false;
- let next = '{';
-
- for (let i = 0; i < cst.items.length; ++i) {
- const item = cst.items[i];
-
- if (typeof item.char === 'string') {
- const {
- char,
- offset
- } = item;
-
- if (char === '?' && key === undefined && !explicitKey) {
- explicitKey = true;
- next = ':';
- continue;
- }
-
- if (char === ':') {
- if (key === undefined) key = null;
-
- if (next === ':') {
- next = ',';
- continue;
- }
- } else {
- if (explicitKey) {
- if (key === undefined && char !== ',') key = null;
- explicitKey = false;
- }
-
- if (key !== undefined) {
- items.push(new Pair(key));
- key = undefined;
-
- if (char === ',') {
- next = ':';
- continue;
- }
- }
- }
-
- if (char === '}') {
- if (i === cst.items.length - 1) continue;
- } else if (char === next) {
- next = ':';
- continue;
- }
-
- const msg = `Flow map contains an unexpected ${char}`;
- const err = new PlainValue$4.YAMLSyntaxError(cst, msg);
- err.offset = offset;
- doc.errors.push(err);
- } else if (item.type === PlainValue$4.Type.BLANK_LINE) {
- comments.push({
- afterKey: !!key,
- before: items.length
- });
- } else if (item.type === PlainValue$4.Type.COMMENT) {
- checkFlowCommentSpace(doc.errors, item);
- comments.push({
- afterKey: !!key,
- before: items.length,
- comment: item.comment
- });
- } else if (key === undefined) {
- if (next === ',') doc.errors.push(new PlainValue$4.YAMLSemanticError(item, 'Separator , missing in flow map'));
- key = resolveNode(doc, item);
- } else {
- if (next !== ',') doc.errors.push(new PlainValue$4.YAMLSemanticError(item, 'Indicator : missing in flow map entry'));
- items.push(new Pair(key, resolveNode(doc, item)));
- key = undefined;
- explicitKey = false;
- }
- }
-
- checkFlowCollectionEnd(doc.errors, cst);
- if (key !== undefined) items.push(new Pair(key));
- return {
- comments,
- items
- };
-}
-
-function resolveSeq$3(doc, cst) {
- if (cst.type !== PlainValue$4.Type.SEQ && cst.type !== PlainValue$4.Type.FLOW_SEQ) {
- const msg = `A ${cst.type} node cannot be resolved as a sequence`;
- doc.errors.push(new PlainValue$4.YAMLSyntaxError(cst, msg));
- return null;
- }
-
- const {
- comments,
- items
- } = cst.type === PlainValue$4.Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst);
- const seq = new YAMLSeq();
- seq.items = items;
- resolveComments(seq, comments);
-
- if (!doc.options.mapAsMap && items.some(it => it instanceof Pair && it.key instanceof Collection)) {
- const warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.';
- doc.warnings.push(new PlainValue$4.YAMLWarning(cst, warn));
- }
-
- cst.resolved = seq;
- return seq;
-}
-
-function resolveBlockSeqItems(doc, cst) {
- const comments = [];
- const items = [];
-
- for (let i = 0; i < cst.items.length; ++i) {
- const item = cst.items[i];
-
- switch (item.type) {
- case PlainValue$4.Type.BLANK_LINE:
- comments.push({
- before: items.length
- });
- break;
-
- case PlainValue$4.Type.COMMENT:
- comments.push({
- comment: item.comment,
- before: items.length
- });
- break;
-
- case PlainValue$4.Type.SEQ_ITEM:
- if (item.error) doc.errors.push(item.error);
- items.push(resolveNode(doc, item.node));
-
- if (item.hasProps) {
- const msg = 'Sequence items cannot have tags or anchors before the - indicator';
- doc.errors.push(new PlainValue$4.YAMLSemanticError(item, msg));
- }
-
- break;
-
- default:
- if (item.error) doc.errors.push(item.error);
- doc.errors.push(new PlainValue$4.YAMLSyntaxError(item, `Unexpected ${item.type} node in sequence`));
- }
- }
-
- return {
- comments,
- items
- };
-}
-
-function resolveFlowSeqItems(doc, cst) {
- const comments = [];
- const items = [];
- let explicitKey = false;
- let key = undefined;
- let keyStart = null;
- let next = '[';
- let prevItem = null;
-
- for (let i = 0; i < cst.items.length; ++i) {
- const item = cst.items[i];
-
- if (typeof item.char === 'string') {
- const {
- char,
- offset
- } = item;
-
- if (char !== ':' && (explicitKey || key !== undefined)) {
- if (explicitKey && key === undefined) key = next ? items.pop() : null;
- items.push(new Pair(key));
- explicitKey = false;
- key = undefined;
- keyStart = null;
- }
-
- if (char === next) {
- next = null;
- } else if (!next && char === '?') {
- explicitKey = true;
- } else if (next !== '[' && char === ':' && key === undefined) {
- if (next === ',') {
- key = items.pop();
-
- if (key instanceof Pair) {
- const msg = 'Chaining flow sequence pairs is invalid';
- const err = new PlainValue$4.YAMLSemanticError(cst, msg);
- err.offset = offset;
- doc.errors.push(err);
- }
-
- if (!explicitKey && typeof keyStart === 'number') {
- const keyEnd = item.range ? item.range.start : item.offset;
- if (keyEnd > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key));
- const {
- src
- } = prevItem.context;
-
- for (let i = keyStart; i < keyEnd; ++i) if (src[i] === '\n') {
- const msg = 'Implicit keys of flow sequence pairs need to be on a single line';
- doc.errors.push(new PlainValue$4.YAMLSemanticError(prevItem, msg));
- break;
- }
- }
- } else {
- key = null;
- }
-
- keyStart = null;
- explicitKey = false;
- next = null;
- } else if (next === '[' || char !== ']' || i < cst.items.length - 1) {
- const msg = `Flow sequence contains an unexpected ${char}`;
- const err = new PlainValue$4.YAMLSyntaxError(cst, msg);
- err.offset = offset;
- doc.errors.push(err);
- }
- } else if (item.type === PlainValue$4.Type.BLANK_LINE) {
- comments.push({
- before: items.length
- });
- } else if (item.type === PlainValue$4.Type.COMMENT) {
- checkFlowCommentSpace(doc.errors, item);
- comments.push({
- comment: item.comment,
- before: items.length
- });
- } else {
- if (next) {
- const msg = `Expected a ${next} in flow sequence`;
- doc.errors.push(new PlainValue$4.YAMLSemanticError(item, msg));
- }
-
- const value = resolveNode(doc, item);
-
- if (key === undefined) {
- items.push(value);
- prevItem = item;
- } else {
- items.push(new Pair(key, value));
- key = undefined;
- }
-
- keyStart = item.range.start;
- next = ',';
- }
- }
-
- checkFlowCollectionEnd(doc.errors, cst);
- if (key !== undefined) items.push(new Pair(key));
- return {
- comments,
- items
- };
-}
-
-resolveSeqD03cb037.Alias = Alias;
-resolveSeqD03cb037.Collection = Collection;
-resolveSeqD03cb037.Merge = Merge;
-resolveSeqD03cb037.Node = Node$1;
-resolveSeqD03cb037.Pair = Pair;
-resolveSeqD03cb037.Scalar = Scalar;
-resolveSeqD03cb037.YAMLMap = YAMLMap;
-resolveSeqD03cb037.YAMLSeq = YAMLSeq;
-resolveSeqD03cb037.addComment = addComment;
-resolveSeqD03cb037.binaryOptions = binaryOptions;
-resolveSeqD03cb037.boolOptions = boolOptions;
-resolveSeqD03cb037.findPair = findPair;
-resolveSeqD03cb037.intOptions = intOptions;
-resolveSeqD03cb037.isEmptyPath = isEmptyPath;
-resolveSeqD03cb037.nullOptions = nullOptions;
-resolveSeqD03cb037.resolveMap = resolveMap;
-resolveSeqD03cb037.resolveNode = resolveNode;
-resolveSeqD03cb037.resolveSeq = resolveSeq$3;
-resolveSeqD03cb037.resolveString = resolveString;
-resolveSeqD03cb037.strOptions = strOptions;
-resolveSeqD03cb037.stringifyNumber = stringifyNumber;
-resolveSeqD03cb037.stringifyString = stringifyString;
-resolveSeqD03cb037.toJSON = toJSON;
-
-var Schema88e323a7 = {};
-
-var warnings1000a372 = {};
-
-var PlainValue$3 = PlainValueEc8e588e;
-var resolveSeq$2 = resolveSeqD03cb037;
-
-/* global atob, btoa, Buffer */
-const binary = {
- identify: value => value instanceof Uint8Array,
- // Buffer inherits from Uint8Array
- default: false,
- tag: 'tag:yaml.org,2002:binary',
-
- /**
- * Returns a Buffer in node and an Uint8Array in browsers
- *
- * To use the resulting buffer as an image, you'll want to do something like:
- *
- * const blob = new Blob([buffer], { type: 'image/jpeg' })
- * document.querySelector('#photo').src = URL.createObjectURL(blob)
- */
- resolve: (doc, node) => {
- const src = resolveSeq$2.resolveString(doc, node);
-
- if (typeof Buffer === 'function') {
- return Buffer.from(src, 'base64');
- } else if (typeof atob === 'function') {
- // On IE 11, atob() can't handle newlines
- const str = atob(src.replace(/[\n\r]/g, ''));
- const buffer = new Uint8Array(str.length);
-
- for (let i = 0; i < str.length; ++i) buffer[i] = str.charCodeAt(i);
-
- return buffer;
- } else {
- const msg = 'This environment does not support reading binary tags; either Buffer or atob is required';
- doc.errors.push(new PlainValue$3.YAMLReferenceError(node, msg));
- return null;
- }
- },
- options: resolveSeq$2.binaryOptions,
- stringify: ({
- comment,
- type,
- value
- }, ctx, onComment, onChompKeep) => {
- let src;
-
- if (typeof Buffer === 'function') {
- src = value instanceof Buffer ? value.toString('base64') : Buffer.from(value.buffer).toString('base64');
- } else if (typeof btoa === 'function') {
- let s = '';
-
- for (let i = 0; i < value.length; ++i) s += String.fromCharCode(value[i]);
-
- src = btoa(s);
- } else {
- throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');
- }
-
- if (!type) type = resolveSeq$2.binaryOptions.defaultType;
-
- if (type === PlainValue$3.Type.QUOTE_DOUBLE) {
- value = src;
- } else {
- const {
- lineWidth
- } = resolveSeq$2.binaryOptions;
- const n = Math.ceil(src.length / lineWidth);
- const lines = new Array(n);
-
- for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {
- lines[i] = src.substr(o, lineWidth);
- }
-
- value = lines.join(type === PlainValue$3.Type.BLOCK_LITERAL ? '\n' : ' ');
- }
-
- return resolveSeq$2.stringifyString({
- comment,
- type,
- value
- }, ctx, onComment, onChompKeep);
- }
-};
-
-function parsePairs(doc, cst) {
- const seq = resolveSeq$2.resolveSeq(doc, cst);
-
- for (let i = 0; i < seq.items.length; ++i) {
- let item = seq.items[i];
- if (item instanceof resolveSeq$2.Pair) continue;else if (item instanceof resolveSeq$2.YAMLMap) {
- if (item.items.length > 1) {
- const msg = 'Each pair must have its own sequence indicator';
- throw new PlainValue$3.YAMLSemanticError(cst, msg);
- }
-
- const pair = item.items[0] || new resolveSeq$2.Pair();
- if (item.commentBefore) pair.commentBefore = pair.commentBefore ? `${item.commentBefore}\n${pair.commentBefore}` : item.commentBefore;
- if (item.comment) pair.comment = pair.comment ? `${item.comment}\n${pair.comment}` : item.comment;
- item = pair;
- }
- seq.items[i] = item instanceof resolveSeq$2.Pair ? item : new resolveSeq$2.Pair(item);
- }
-
- return seq;
-}
-function createPairs(schema, iterable, ctx) {
- const pairs = new resolveSeq$2.YAMLSeq(schema);
- pairs.tag = 'tag:yaml.org,2002:pairs';
-
- for (const it of iterable) {
- let key, value;
-
- if (Array.isArray(it)) {
- if (it.length === 2) {
- key = it[0];
- value = it[1];
- } else throw new TypeError(`Expected [key, value] tuple: ${it}`);
- } else if (it && it instanceof Object) {
- const keys = Object.keys(it);
-
- if (keys.length === 1) {
- key = keys[0];
- value = it[key];
- } else throw new TypeError(`Expected { key: value } tuple: ${it}`);
- } else {
- key = it;
- }
-
- const pair = schema.createPair(key, value, ctx);
- pairs.items.push(pair);
- }
-
- return pairs;
-}
-const pairs = {
- default: false,
- tag: 'tag:yaml.org,2002:pairs',
- resolve: parsePairs,
- createNode: createPairs
-};
-
-class YAMLOMap extends resolveSeq$2.YAMLSeq {
- constructor() {
- super();
-
- PlainValue$3._defineProperty(this, "add", resolveSeq$2.YAMLMap.prototype.add.bind(this));
-
- PlainValue$3._defineProperty(this, "delete", resolveSeq$2.YAMLMap.prototype.delete.bind(this));
-
- PlainValue$3._defineProperty(this, "get", resolveSeq$2.YAMLMap.prototype.get.bind(this));
-
- PlainValue$3._defineProperty(this, "has", resolveSeq$2.YAMLMap.prototype.has.bind(this));
-
- PlainValue$3._defineProperty(this, "set", resolveSeq$2.YAMLMap.prototype.set.bind(this));
-
- this.tag = YAMLOMap.tag;
- }
-
- toJSON(_, ctx) {
- const map = new Map();
- if (ctx && ctx.onCreate) ctx.onCreate(map);
-
- for (const pair of this.items) {
- let key, value;
-
- if (pair instanceof resolveSeq$2.Pair) {
- key = resolveSeq$2.toJSON(pair.key, '', ctx);
- value = resolveSeq$2.toJSON(pair.value, key, ctx);
- } else {
- key = resolveSeq$2.toJSON(pair, '', ctx);
- }
-
- if (map.has(key)) throw new Error('Ordered maps must not include duplicate keys');
- map.set(key, value);
- }
-
- return map;
- }
-
-}
-
-PlainValue$3._defineProperty(YAMLOMap, "tag", 'tag:yaml.org,2002:omap');
-
-function parseOMap(doc, cst) {
- const pairs = parsePairs(doc, cst);
- const seenKeys = [];
-
- for (const {
- key
- } of pairs.items) {
- if (key instanceof resolveSeq$2.Scalar) {
- if (seenKeys.includes(key.value)) {
- const msg = 'Ordered maps must not include duplicate keys';
- throw new PlainValue$3.YAMLSemanticError(cst, msg);
- } else {
- seenKeys.push(key.value);
- }
- }
- }
-
- return Object.assign(new YAMLOMap(), pairs);
-}
-
-function createOMap(schema, iterable, ctx) {
- const pairs = createPairs(schema, iterable, ctx);
- const omap = new YAMLOMap();
- omap.items = pairs.items;
- return omap;
-}
-
-const omap = {
- identify: value => value instanceof Map,
- nodeClass: YAMLOMap,
- default: false,
- tag: 'tag:yaml.org,2002:omap',
- resolve: parseOMap,
- createNode: createOMap
-};
-
-class YAMLSet extends resolveSeq$2.YAMLMap {
- constructor() {
- super();
- this.tag = YAMLSet.tag;
- }
-
- add(key) {
- const pair = key instanceof resolveSeq$2.Pair ? key : new resolveSeq$2.Pair(key);
- const prev = resolveSeq$2.findPair(this.items, pair.key);
- if (!prev) this.items.push(pair);
- }
-
- get(key, keepPair) {
- const pair = resolveSeq$2.findPair(this.items, key);
- return !keepPair && pair instanceof resolveSeq$2.Pair ? pair.key instanceof resolveSeq$2.Scalar ? pair.key.value : pair.key : pair;
- }
-
- set(key, value) {
- if (typeof value !== 'boolean') throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
- const prev = resolveSeq$2.findPair(this.items, key);
-
- if (prev && !value) {
- this.items.splice(this.items.indexOf(prev), 1);
- } else if (!prev && value) {
- this.items.push(new resolveSeq$2.Pair(key));
- }
- }
-
- toJSON(_, ctx) {
- return super.toJSON(_, ctx, Set);
- }
-
- toString(ctx, onComment, onChompKeep) {
- if (!ctx) return JSON.stringify(this);
- if (this.hasAllNullValues()) return super.toString(ctx, onComment, onChompKeep);else throw new Error('Set items must all have null values');
- }
-
-}
-
-PlainValue$3._defineProperty(YAMLSet, "tag", 'tag:yaml.org,2002:set');
-
-function parseSet(doc, cst) {
- const map = resolveSeq$2.resolveMap(doc, cst);
- if (!map.hasAllNullValues()) throw new PlainValue$3.YAMLSemanticError(cst, 'Set items must all have null values');
- return Object.assign(new YAMLSet(), map);
-}
-
-function createSet(schema, iterable, ctx) {
- const set = new YAMLSet();
-
- for (const value of iterable) set.items.push(schema.createPair(value, null, ctx));
-
- return set;
-}
-
-const set = {
- identify: value => value instanceof Set,
- nodeClass: YAMLSet,
- default: false,
- tag: 'tag:yaml.org,2002:set',
- resolve: parseSet,
- createNode: createSet
-};
-
-const parseSexagesimal = (sign, parts) => {
- const n = parts.split(':').reduce((n, p) => n * 60 + Number(p), 0);
- return sign === '-' ? -n : n;
-}; // hhhh:mm:ss.sss
-
-
-const stringifySexagesimal = ({
- value
-}) => {
- if (isNaN(value) || !isFinite(value)) return resolveSeq$2.stringifyNumber(value);
- let sign = '';
-
- if (value < 0) {
- sign = '-';
- value = Math.abs(value);
- }
-
- const parts = [value % 60]; // seconds, including ms
-
- if (value < 60) {
- parts.unshift(0); // at least one : is required
- } else {
- value = Math.round((value - parts[0]) / 60);
- parts.unshift(value % 60); // minutes
-
- if (value >= 60) {
- value = Math.round((value - parts[0]) / 60);
- parts.unshift(value); // hours
- }
- }
-
- return sign + parts.map(n => n < 10 ? '0' + String(n) : String(n)).join(':').replace(/000000\d*$/, '') // % 60 may introduce error
- ;
-};
-
-const intTime = {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:int',
- format: 'TIME',
- test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+)$/,
- resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')),
- stringify: stringifySexagesimal
-};
-const floatTime = {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:float',
- format: 'TIME',
- test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*)$/,
- resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')),
- stringify: stringifySexagesimal
-};
-const timestamp = {
- identify: value => value instanceof Date,
- default: true,
- tag: 'tag:yaml.org,2002:timestamp',
- // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
- // may be omitted altogether, resulting in a date format. In such a case, the time part is
- // assumed to be 00:00:00Z (start of day, UTC).
- test: RegExp('^(?:' + '([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd
- '(?:(?:t|T|[ \\t]+)' + // t | T | whitespace
- '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?
- '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30
- ')?' + ')$'),
- resolve: (str, year, month, day, hour, minute, second, millisec, tz) => {
- if (millisec) millisec = (millisec + '00').substr(1, 3);
- let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec || 0);
-
- if (tz && tz !== 'Z') {
- let d = parseSexagesimal(tz[0], tz.slice(1));
- if (Math.abs(d) < 30) d *= 60;
- date -= 60000 * d;
- }
-
- return new Date(date);
- },
- stringify: ({
- value
- }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '')
-};
-
-/* global console, process, YAML_SILENCE_DEPRECATION_WARNINGS, YAML_SILENCE_WARNINGS */
-function shouldWarn(deprecation) {
- const env = typeof process !== 'undefined' && process.env || {};
-
- if (deprecation) {
- if (typeof YAML_SILENCE_DEPRECATION_WARNINGS !== 'undefined') return !YAML_SILENCE_DEPRECATION_WARNINGS;
- return !env.YAML_SILENCE_DEPRECATION_WARNINGS;
- }
-
- if (typeof YAML_SILENCE_WARNINGS !== 'undefined') return !YAML_SILENCE_WARNINGS;
- return !env.YAML_SILENCE_WARNINGS;
-}
-
-function warn(warning, type) {
- if (shouldWarn(false)) {
- const emit = typeof process !== 'undefined' && process.emitWarning; // This will throw in Jest if `warning` is an Error instance due to
- // https://github.com/facebook/jest/issues/2549
-
- if (emit) emit(warning, type);else {
- // eslint-disable-next-line no-console
- console.warn(type ? `${type}: ${warning}` : warning);
- }
- }
-}
-function warnFileDeprecation(filename) {
- if (shouldWarn(true)) {
- const path = filename.replace(/.*yaml[/\\]/i, '').replace(/\.js$/, '').replace(/\\/g, '/');
- warn(`The endpoint 'yaml/${path}' will be removed in a future release.`, 'DeprecationWarning');
- }
-}
-const warned = {};
-function warnOptionDeprecation(name, alternative) {
- if (!warned[name] && shouldWarn(true)) {
- warned[name] = true;
- let msg = `The option '${name}' will be removed in a future release`;
- msg += alternative ? `, use '${alternative}' instead.` : '.';
- warn(msg, 'DeprecationWarning');
- }
-}
-
-warnings1000a372.binary = binary;
-warnings1000a372.floatTime = floatTime;
-warnings1000a372.intTime = intTime;
-warnings1000a372.omap = omap;
-warnings1000a372.pairs = pairs;
-warnings1000a372.set = set;
-warnings1000a372.timestamp = timestamp;
-warnings1000a372.warn = warn;
-warnings1000a372.warnFileDeprecation = warnFileDeprecation;
-warnings1000a372.warnOptionDeprecation = warnOptionDeprecation;
-
-var PlainValue$2 = PlainValueEc8e588e;
-var resolveSeq$1 = resolveSeqD03cb037;
-var warnings$1 = warnings1000a372;
-
-function createMap(schema, obj, ctx) {
- const map = new resolveSeq$1.YAMLMap(schema);
-
- if (obj instanceof Map) {
- for (const [key, value] of obj) map.items.push(schema.createPair(key, value, ctx));
- } else if (obj && typeof obj === 'object') {
- for (const key of Object.keys(obj)) map.items.push(schema.createPair(key, obj[key], ctx));
- }
-
- if (typeof schema.sortMapEntries === 'function') {
- map.items.sort(schema.sortMapEntries);
- }
-
- return map;
-}
-
-const map$1 = {
- createNode: createMap,
- default: true,
- nodeClass: resolveSeq$1.YAMLMap,
- tag: 'tag:yaml.org,2002:map',
- resolve: resolveSeq$1.resolveMap
-};
-
-function createSeq(schema, obj, ctx) {
- const seq = new resolveSeq$1.YAMLSeq(schema);
-
- if (obj && obj[Symbol.iterator]) {
- for (const it of obj) {
- const v = schema.createNode(it, ctx.wrapScalars, null, ctx);
- seq.items.push(v);
- }
- }
-
- return seq;
-}
-
-const seq = {
- createNode: createSeq,
- default: true,
- nodeClass: resolveSeq$1.YAMLSeq,
- tag: 'tag:yaml.org,2002:seq',
- resolve: resolveSeq$1.resolveSeq
-};
-
-const string = {
- identify: value => typeof value === 'string',
- default: true,
- tag: 'tag:yaml.org,2002:str',
- resolve: resolveSeq$1.resolveString,
-
- stringify(item, ctx, onComment, onChompKeep) {
- ctx = Object.assign({
- actualString: true
- }, ctx);
- return resolveSeq$1.stringifyString(item, ctx, onComment, onChompKeep);
- },
-
- options: resolveSeq$1.strOptions
-};
-
-const failsafe = [map$1, seq, string];
-
-/* global BigInt */
-
-const intIdentify$2 = value => typeof value === 'bigint' || Number.isInteger(value);
-
-const intResolve$1 = (src, part, radix) => resolveSeq$1.intOptions.asBigInt ? BigInt(src) : parseInt(part, radix);
-
-function intStringify$1(node, radix, prefix) {
- const {
- value
- } = node;
- if (intIdentify$2(value) && value >= 0) return prefix + value.toString(radix);
- return resolveSeq$1.stringifyNumber(node);
-}
-
-const nullObj = {
- identify: value => value == null,
- createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq$1.Scalar(null) : null,
- default: true,
- tag: 'tag:yaml.org,2002:null',
- test: /^(?:~|[Nn]ull|NULL)?$/,
- resolve: () => null,
- options: resolveSeq$1.nullOptions,
- stringify: () => resolveSeq$1.nullOptions.nullStr
-};
-const boolObj = {
- identify: value => typeof value === 'boolean',
- default: true,
- tag: 'tag:yaml.org,2002:bool',
- test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,
- resolve: str => str[0] === 't' || str[0] === 'T',
- options: resolveSeq$1.boolOptions,
- stringify: ({
- value
- }) => value ? resolveSeq$1.boolOptions.trueStr : resolveSeq$1.boolOptions.falseStr
-};
-const octObj = {
- identify: value => intIdentify$2(value) && value >= 0,
- default: true,
- tag: 'tag:yaml.org,2002:int',
- format: 'OCT',
- test: /^0o([0-7]+)$/,
- resolve: (str, oct) => intResolve$1(str, oct, 8),
- options: resolveSeq$1.intOptions,
- stringify: node => intStringify$1(node, 8, '0o')
-};
-const intObj = {
- identify: intIdentify$2,
- default: true,
- tag: 'tag:yaml.org,2002:int',
- test: /^[-+]?[0-9]+$/,
- resolve: str => intResolve$1(str, str, 10),
- options: resolveSeq$1.intOptions,
- stringify: resolveSeq$1.stringifyNumber
-};
-const hexObj = {
- identify: value => intIdentify$2(value) && value >= 0,
- default: true,
- tag: 'tag:yaml.org,2002:int',
- format: 'HEX',
- test: /^0x([0-9a-fA-F]+)$/,
- resolve: (str, hex) => intResolve$1(str, hex, 16),
- options: resolveSeq$1.intOptions,
- stringify: node => intStringify$1(node, 16, '0x')
-};
-const nanObj = {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:float',
- test: /^(?:[-+]?\.inf|(\.nan))$/i,
- resolve: (str, nan) => nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
- stringify: resolveSeq$1.stringifyNumber
-};
-const expObj = {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:float',
- format: 'EXP',
- test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,
- resolve: str => parseFloat(str),
- stringify: ({
- value
- }) => Number(value).toExponential()
-};
-const floatObj = {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:float',
- test: /^[-+]?(?:\.([0-9]+)|[0-9]+\.([0-9]*))$/,
-
- resolve(str, frac1, frac2) {
- const frac = frac1 || frac2;
- const node = new resolveSeq$1.Scalar(parseFloat(str));
- if (frac && frac[frac.length - 1] === '0') node.minFractionDigits = frac.length;
- return node;
- },
-
- stringify: resolveSeq$1.stringifyNumber
-};
-const core$2 = failsafe.concat([nullObj, boolObj, octObj, intObj, hexObj, nanObj, expObj, floatObj]);
-
-/* global BigInt */
-
-const intIdentify$1 = value => typeof value === 'bigint' || Number.isInteger(value);
-
-const stringifyJSON = ({
- value
-}) => JSON.stringify(value);
-
-const json = [map$1, seq, {
- identify: value => typeof value === 'string',
- default: true,
- tag: 'tag:yaml.org,2002:str',
- resolve: resolveSeq$1.resolveString,
- stringify: stringifyJSON
-}, {
- identify: value => value == null,
- createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq$1.Scalar(null) : null,
- default: true,
- tag: 'tag:yaml.org,2002:null',
- test: /^null$/,
- resolve: () => null,
- stringify: stringifyJSON
-}, {
- identify: value => typeof value === 'boolean',
- default: true,
- tag: 'tag:yaml.org,2002:bool',
- test: /^true|false$/,
- resolve: str => str === 'true',
- stringify: stringifyJSON
-}, {
- identify: intIdentify$1,
- default: true,
- tag: 'tag:yaml.org,2002:int',
- test: /^-?(?:0|[1-9][0-9]*)$/,
- resolve: str => resolveSeq$1.intOptions.asBigInt ? BigInt(str) : parseInt(str, 10),
- stringify: ({
- value
- }) => intIdentify$1(value) ? value.toString() : JSON.stringify(value)
-}, {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:float',
- test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,
- resolve: str => parseFloat(str),
- stringify: stringifyJSON
-}];
-
-json.scalarFallback = str => {
- throw new SyntaxError(`Unresolved plain scalar ${JSON.stringify(str)}`);
-};
-
-/* global BigInt */
-
-const boolStringify = ({
- value
-}) => value ? resolveSeq$1.boolOptions.trueStr : resolveSeq$1.boolOptions.falseStr;
-
-const intIdentify = value => typeof value === 'bigint' || Number.isInteger(value);
-
-function intResolve(sign, src, radix) {
- let str = src.replace(/_/g, '');
-
- if (resolveSeq$1.intOptions.asBigInt) {
- switch (radix) {
- case 2:
- str = `0b${str}`;
- break;
-
- case 8:
- str = `0o${str}`;
- break;
-
- case 16:
- str = `0x${str}`;
- break;
- }
-
- const n = BigInt(str);
- return sign === '-' ? BigInt(-1) * n : n;
- }
-
- const n = parseInt(str, radix);
- return sign === '-' ? -1 * n : n;
-}
-
-function intStringify(node, radix, prefix) {
- const {
- value
- } = node;
-
- if (intIdentify(value)) {
- const str = value.toString(radix);
- return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;
- }
-
- return resolveSeq$1.stringifyNumber(node);
-}
-
-const yaml11 = failsafe.concat([{
- identify: value => value == null,
- createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq$1.Scalar(null) : null,
- default: true,
- tag: 'tag:yaml.org,2002:null',
- test: /^(?:~|[Nn]ull|NULL)?$/,
- resolve: () => null,
- options: resolveSeq$1.nullOptions,
- stringify: () => resolveSeq$1.nullOptions.nullStr
-}, {
- identify: value => typeof value === 'boolean',
- default: true,
- tag: 'tag:yaml.org,2002:bool',
- test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,
- resolve: () => true,
- options: resolveSeq$1.boolOptions,
- stringify: boolStringify
-}, {
- identify: value => typeof value === 'boolean',
- default: true,
- tag: 'tag:yaml.org,2002:bool',
- test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i,
- resolve: () => false,
- options: resolveSeq$1.boolOptions,
- stringify: boolStringify
-}, {
- identify: intIdentify,
- default: true,
- tag: 'tag:yaml.org,2002:int',
- format: 'BIN',
- test: /^([-+]?)0b([0-1_]+)$/,
- resolve: (str, sign, bin) => intResolve(sign, bin, 2),
- stringify: node => intStringify(node, 2, '0b')
-}, {
- identify: intIdentify,
- default: true,
- tag: 'tag:yaml.org,2002:int',
- format: 'OCT',
- test: /^([-+]?)0([0-7_]+)$/,
- resolve: (str, sign, oct) => intResolve(sign, oct, 8),
- stringify: node => intStringify(node, 8, '0')
-}, {
- identify: intIdentify,
- default: true,
- tag: 'tag:yaml.org,2002:int',
- test: /^([-+]?)([0-9][0-9_]*)$/,
- resolve: (str, sign, abs) => intResolve(sign, abs, 10),
- stringify: resolveSeq$1.stringifyNumber
-}, {
- identify: intIdentify,
- default: true,
- tag: 'tag:yaml.org,2002:int',
- format: 'HEX',
- test: /^([-+]?)0x([0-9a-fA-F_]+)$/,
- resolve: (str, sign, hex) => intResolve(sign, hex, 16),
- stringify: node => intStringify(node, 16, '0x')
-}, {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:float',
- test: /^(?:[-+]?\.inf|(\.nan))$/i,
- resolve: (str, nan) => nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
- stringify: resolveSeq$1.stringifyNumber
-}, {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:float',
- format: 'EXP',
- test: /^[-+]?([0-9][0-9_]*)?(\.[0-9_]*)?[eE][-+]?[0-9]+$/,
- resolve: str => parseFloat(str.replace(/_/g, '')),
- stringify: ({
- value
- }) => Number(value).toExponential()
-}, {
- identify: value => typeof value === 'number',
- default: true,
- tag: 'tag:yaml.org,2002:float',
- test: /^[-+]?(?:[0-9][0-9_]*)?\.([0-9_]*)$/,
-
- resolve(str, frac) {
- const node = new resolveSeq$1.Scalar(parseFloat(str.replace(/_/g, '')));
-
- if (frac) {
- const f = frac.replace(/_/g, '');
- if (f[f.length - 1] === '0') node.minFractionDigits = f.length;
- }
-
- return node;
- },
-
- stringify: resolveSeq$1.stringifyNumber
-}], warnings$1.binary, warnings$1.omap, warnings$1.pairs, warnings$1.set, warnings$1.intTime, warnings$1.floatTime, warnings$1.timestamp);
-
-const schemas = {
- core: core$2,
- failsafe,
- json,
- yaml11
-};
-const tags = {
- binary: warnings$1.binary,
- bool: boolObj,
- float: floatObj,
- floatExp: expObj,
- floatNaN: nanObj,
- floatTime: warnings$1.floatTime,
- int: intObj,
- intHex: hexObj,
- intOct: octObj,
- intTime: warnings$1.intTime,
- map: map$1,
- null: nullObj,
- omap: warnings$1.omap,
- pairs: warnings$1.pairs,
- seq,
- set: warnings$1.set,
- timestamp: warnings$1.timestamp
-};
-
-function findTagObject(value, tagName, tags) {
- if (tagName) {
- const match = tags.filter(t => t.tag === tagName);
- const tagObj = match.find(t => !t.format) || match[0];
- if (!tagObj) throw new Error(`Tag ${tagName} not found`);
- return tagObj;
- } // TODO: deprecate/remove class check
-
-
- return tags.find(t => (t.identify && t.identify(value) || t.class && value instanceof t.class) && !t.format);
-}
-
-function createNode$1(value, tagName, ctx) {
- if (value instanceof resolveSeq$1.Node) return value;
- const {
- defaultPrefix,
- onTagObj,
- prevObjects,
- schema,
- wrapScalars
- } = ctx;
- if (tagName && tagName.startsWith('!!')) tagName = defaultPrefix + tagName.slice(2);
- let tagObj = findTagObject(value, tagName, schema.tags);
-
- if (!tagObj) {
- if (typeof value.toJSON === 'function') value = value.toJSON();
- if (!value || typeof value !== 'object') return wrapScalars ? new resolveSeq$1.Scalar(value) : value;
- tagObj = value instanceof Map ? map$1 : value[Symbol.iterator] ? seq : map$1;
- }
-
- if (onTagObj) {
- onTagObj(tagObj);
- delete ctx.onTagObj;
- } // Detect duplicate references to the same object & use Alias nodes for all
- // after first. The `obj` wrapper allows for circular references to resolve.
-
-
- const obj = {
- value: undefined,
- node: undefined
- };
-
- if (value && typeof value === 'object' && prevObjects) {
- const prev = prevObjects.get(value);
-
- if (prev) {
- const alias = new resolveSeq$1.Alias(prev); // leaves source dirty; must be cleaned by caller
-
- ctx.aliasNodes.push(alias); // defined along with prevObjects
-
- return alias;
- }
-
- obj.value = value;
- prevObjects.set(value, obj);
- }
-
- obj.node = tagObj.createNode ? tagObj.createNode(ctx.schema, value, ctx) : wrapScalars ? new resolveSeq$1.Scalar(value) : value;
- if (tagName && obj.node instanceof resolveSeq$1.Node) obj.node.tag = tagName;
- return obj.node;
-}
-
-function getSchemaTags(schemas, knownTags, customTags, schemaId) {
- let tags = schemas[schemaId.replace(/\W/g, '')]; // 'yaml-1.1' -> 'yaml11'
-
- if (!tags) {
- const keys = Object.keys(schemas).map(key => JSON.stringify(key)).join(', ');
- throw new Error(`Unknown schema "${schemaId}"; use one of ${keys}`);
- }
-
- if (Array.isArray(customTags)) {
- for (const tag of customTags) tags = tags.concat(tag);
- } else if (typeof customTags === 'function') {
- tags = customTags(tags.slice());
- }
-
- for (let i = 0; i < tags.length; ++i) {
- const tag = tags[i];
-
- if (typeof tag === 'string') {
- const tagObj = knownTags[tag];
-
- if (!tagObj) {
- const keys = Object.keys(knownTags).map(key => JSON.stringify(key)).join(', ');
- throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`);
- }
-
- tags[i] = tagObj;
- }
- }
-
- return tags;
-}
-
-const sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
-
-class Schema$2 {
- // TODO: remove in v2
- // TODO: remove in v2
- constructor({
- customTags,
- merge,
- schema,
- sortMapEntries,
- tags: deprecatedCustomTags
- }) {
- this.merge = !!merge;
- this.name = schema;
- this.sortMapEntries = sortMapEntries === true ? sortMapEntriesByKey : sortMapEntries || null;
- if (!customTags && deprecatedCustomTags) warnings$1.warnOptionDeprecation('tags', 'customTags');
- this.tags = getSchemaTags(schemas, tags, customTags || deprecatedCustomTags, schema);
- }
-
- createNode(value, wrapScalars, tagName, ctx) {
- const baseCtx = {
- defaultPrefix: Schema$2.defaultPrefix,
- schema: this,
- wrapScalars
- };
- const createCtx = ctx ? Object.assign(ctx, baseCtx) : baseCtx;
- return createNode$1(value, tagName, createCtx);
- }
-
- createPair(key, value, ctx) {
- if (!ctx) ctx = {
- wrapScalars: true
- };
- const k = this.createNode(key, ctx.wrapScalars, null, ctx);
- const v = this.createNode(value, ctx.wrapScalars, null, ctx);
- return new resolveSeq$1.Pair(k, v);
- }
-
-}
-
-PlainValue$2._defineProperty(Schema$2, "defaultPrefix", PlainValue$2.defaultTagPrefix);
-
-PlainValue$2._defineProperty(Schema$2, "defaultTags", PlainValue$2.defaultTags);
-
-Schema88e323a7.Schema = Schema$2;
-
-var PlainValue$1 = PlainValueEc8e588e;
-var resolveSeq = resolveSeqD03cb037;
-var Schema$1 = Schema88e323a7;
-
-const defaultOptions$1 = {
- anchorPrefix: 'a',
- customTags: null,
- indent: 2,
- indentSeq: true,
- keepCstNodes: false,
- keepNodeTypes: true,
- keepBlobsInJSON: true,
- mapAsMap: false,
- maxAliasCount: 100,
- prettyErrors: false,
- // TODO Set true in v2
- simpleKeys: false,
- version: '1.2'
-};
-const scalarOptions = {
- get binary() {
- return resolveSeq.binaryOptions;
- },
-
- set binary(opt) {
- Object.assign(resolveSeq.binaryOptions, opt);
- },
-
- get bool() {
- return resolveSeq.boolOptions;
- },
-
- set bool(opt) {
- Object.assign(resolveSeq.boolOptions, opt);
- },
-
- get int() {
- return resolveSeq.intOptions;
- },
-
- set int(opt) {
- Object.assign(resolveSeq.intOptions, opt);
- },
-
- get null() {
- return resolveSeq.nullOptions;
- },
-
- set null(opt) {
- Object.assign(resolveSeq.nullOptions, opt);
- },
-
- get str() {
- return resolveSeq.strOptions;
- },
-
- set str(opt) {
- Object.assign(resolveSeq.strOptions, opt);
- }
-
-};
-const documentOptions = {
- '1.0': {
- schema: 'yaml-1.1',
- merge: true,
- tagPrefixes: [{
- handle: '!',
- prefix: PlainValue$1.defaultTagPrefix
- }, {
- handle: '!!',
- prefix: 'tag:private.yaml.org,2002:'
- }]
- },
- 1.1: {
- schema: 'yaml-1.1',
- merge: true,
- tagPrefixes: [{
- handle: '!',
- prefix: '!'
- }, {
- handle: '!!',
- prefix: PlainValue$1.defaultTagPrefix
- }]
- },
- 1.2: {
- schema: 'core',
- merge: false,
- tagPrefixes: [{
- handle: '!',
- prefix: '!'
- }, {
- handle: '!!',
- prefix: PlainValue$1.defaultTagPrefix
- }]
- }
-};
-
-function stringifyTag(doc, tag) {
- if ((doc.version || doc.options.version) === '1.0') {
- const priv = tag.match(/^tag:private\.yaml\.org,2002:([^:/]+)$/);
- if (priv) return '!' + priv[1];
- const vocab = tag.match(/^tag:([a-zA-Z0-9-]+)\.yaml\.org,2002:(.*)/);
- return vocab ? `!${vocab[1]}/${vocab[2]}` : `!${tag.replace(/^tag:/, '')}`;
- }
-
- let p = doc.tagPrefixes.find(p => tag.indexOf(p.prefix) === 0);
-
- if (!p) {
- const dtp = doc.getDefaults().tagPrefixes;
- p = dtp && dtp.find(p => tag.indexOf(p.prefix) === 0);
- }
-
- if (!p) return tag[0] === '!' ? tag : `!<${tag}>`;
- const suffix = tag.substr(p.prefix.length).replace(/[!,[\]{}]/g, ch => ({
- '!': '%21',
- ',': '%2C',
- '[': '%5B',
- ']': '%5D',
- '{': '%7B',
- '}': '%7D'
- })[ch]);
- return p.handle + suffix;
-}
-
-function getTagObject(tags, item) {
- if (item instanceof resolveSeq.Alias) return resolveSeq.Alias;
-
- if (item.tag) {
- const match = tags.filter(t => t.tag === item.tag);
- if (match.length > 0) return match.find(t => t.format === item.format) || match[0];
- }
-
- let tagObj, obj;
-
- if (item instanceof resolveSeq.Scalar) {
- obj = item.value; // TODO: deprecate/remove class check
-
- const match = tags.filter(t => t.identify && t.identify(obj) || t.class && obj instanceof t.class);
- tagObj = match.find(t => t.format === item.format) || match.find(t => !t.format);
- } else {
- obj = item;
- tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);
- }
-
- if (!tagObj) {
- const name = obj && obj.constructor ? obj.constructor.name : typeof obj;
- throw new Error(`Tag not resolved for ${name} value`);
- }
-
- return tagObj;
-} // needs to be called before value stringifier to allow for circular anchor refs
-
-
-function stringifyProps(node, tagObj, {
- anchors,
- doc
-}) {
- const props = [];
- const anchor = doc.anchors.getName(node);
-
- if (anchor) {
- anchors[anchor] = node;
- props.push(`&${anchor}`);
- }
-
- if (node.tag) {
- props.push(stringifyTag(doc, node.tag));
- } else if (!tagObj.default) {
- props.push(stringifyTag(doc, tagObj.tag));
- }
-
- return props.join(' ');
-}
-
-function stringify$2(item, ctx, onComment, onChompKeep) {
- const {
- anchors,
- schema
- } = ctx.doc;
- let tagObj;
-
- if (!(item instanceof resolveSeq.Node)) {
- const createCtx = {
- aliasNodes: [],
- onTagObj: o => tagObj = o,
- prevObjects: new Map()
- };
- item = schema.createNode(item, true, null, createCtx);
-
- for (const alias of createCtx.aliasNodes) {
- alias.source = alias.source.node;
- let name = anchors.getName(alias.source);
-
- if (!name) {
- name = anchors.newName();
- anchors.map[name] = alias.source;
- }
- }
- }
-
- if (item instanceof resolveSeq.Pair) return item.toString(ctx, onComment, onChompKeep);
- if (!tagObj) tagObj = getTagObject(schema.tags, item);
- const props = stringifyProps(item, tagObj, ctx);
- if (props.length > 0) ctx.indentAtStart = (ctx.indentAtStart || 0) + props.length + 1;
- const str = typeof tagObj.stringify === 'function' ? tagObj.stringify(item, ctx, onComment, onChompKeep) : item instanceof resolveSeq.Scalar ? resolveSeq.stringifyString(item, ctx, onComment, onChompKeep) : item.toString(ctx, onComment, onChompKeep);
- if (!props) return str;
- return item instanceof resolveSeq.Scalar || str[0] === '{' || str[0] === '[' ? `${props} ${str}` : `${props}\n${ctx.indent}${str}`;
-}
-
-class Anchors {
- static validAnchorNode(node) {
- return node instanceof resolveSeq.Scalar || node instanceof resolveSeq.YAMLSeq || node instanceof resolveSeq.YAMLMap;
- }
-
- constructor(prefix) {
- PlainValue$1._defineProperty(this, "map", Object.create(null));
-
- this.prefix = prefix;
- }
-
- createAlias(node, name) {
- this.setAnchor(node, name);
- return new resolveSeq.Alias(node);
- }
-
- createMergePair(...sources) {
- const merge = new resolveSeq.Merge();
- merge.value.items = sources.map(s => {
- if (s instanceof resolveSeq.Alias) {
- if (s.source instanceof resolveSeq.YAMLMap) return s;
- } else if (s instanceof resolveSeq.YAMLMap) {
- return this.createAlias(s);
- }
-
- throw new Error('Merge sources must be Map nodes or their Aliases');
- });
- return merge;
- }
-
- getName(node) {
- const {
- map
- } = this;
- return Object.keys(map).find(a => map[a] === node);
- }
-
- getNames() {
- return Object.keys(this.map);
- }
-
- getNode(name) {
- return this.map[name];
- }
-
- newName(prefix) {
- if (!prefix) prefix = this.prefix;
- const names = Object.keys(this.map);
-
- for (let i = 1; true; ++i) {
- const name = `${prefix}${i}`;
- if (!names.includes(name)) return name;
- }
- } // During parsing, map & aliases contain CST nodes
-
-
- resolveNodes() {
- const {
- map,
- _cstAliases
- } = this;
- Object.keys(map).forEach(a => {
- map[a] = map[a].resolved;
- });
-
- _cstAliases.forEach(a => {
- a.source = a.source.resolved;
- });
-
- delete this._cstAliases;
- }
-
- setAnchor(node, name) {
- if (node != null && !Anchors.validAnchorNode(node)) {
- throw new Error('Anchors may only be set for Scalar, Seq and Map nodes');
- }
-
- if (name && /[\x00-\x19\s,[\]{}]/.test(name)) {
- throw new Error('Anchor names must not contain whitespace or control characters');
- }
-
- const {
- map
- } = this;
- const prev = node && Object.keys(map).find(a => map[a] === node);
-
- if (prev) {
- if (!name) {
- return prev;
- } else if (prev !== name) {
- delete map[prev];
- map[name] = node;
- }
- } else {
- if (!name) {
- if (!node) return null;
- name = this.newName();
- }
-
- map[name] = node;
- }
-
- return name;
- }
-
-}
-
-const visit$1 = (node, tags) => {
- if (node && typeof node === 'object') {
- const {
- tag
- } = node;
-
- if (node instanceof resolveSeq.Collection) {
- if (tag) tags[tag] = true;
- node.items.forEach(n => visit$1(n, tags));
- } else if (node instanceof resolveSeq.Pair) {
- visit$1(node.key, tags);
- visit$1(node.value, tags);
- } else if (node instanceof resolveSeq.Scalar) {
- if (tag) tags[tag] = true;
- }
- }
-
- return tags;
-};
-
-const listTagNames = node => Object.keys(visit$1(node, {}));
-
-function parseContents(doc, contents) {
- const comments = {
- before: [],
- after: []
- };
- let body = undefined;
- let spaceBefore = false;
-
- for (const node of contents) {
- if (node.valueRange) {
- if (body !== undefined) {
- const msg = 'Document contains trailing content not separated by a ... or --- line';
- doc.errors.push(new PlainValue$1.YAMLSyntaxError(node, msg));
- break;
- }
-
- const res = resolveSeq.resolveNode(doc, node);
-
- if (spaceBefore) {
- res.spaceBefore = true;
- spaceBefore = false;
- }
-
- body = res;
- } else if (node.comment !== null) {
- const cc = body === undefined ? comments.before : comments.after;
- cc.push(node.comment);
- } else if (node.type === PlainValue$1.Type.BLANK_LINE) {
- spaceBefore = true;
-
- if (body === undefined && comments.before.length > 0 && !doc.commentBefore) {
- // space-separated comments at start are parsed as document comments
- doc.commentBefore = comments.before.join('\n');
- comments.before = [];
- }
- }
- }
-
- doc.contents = body || null;
-
- if (!body) {
- doc.comment = comments.before.concat(comments.after).join('\n') || null;
- } else {
- const cb = comments.before.join('\n');
-
- if (cb) {
- const cbNode = body instanceof resolveSeq.Collection && body.items[0] ? body.items[0] : body;
- cbNode.commentBefore = cbNode.commentBefore ? `${cb}\n${cbNode.commentBefore}` : cb;
- }
-
- doc.comment = comments.after.join('\n') || null;
- }
-}
-
-function resolveTagDirective({
- tagPrefixes
-}, directive) {
- const [handle, prefix] = directive.parameters;
-
- if (!handle || !prefix) {
- const msg = 'Insufficient parameters given for %TAG directive';
- throw new PlainValue$1.YAMLSemanticError(directive, msg);
- }
-
- if (tagPrefixes.some(p => p.handle === handle)) {
- const msg = 'The %TAG directive must only be given at most once per handle in the same document.';
- throw new PlainValue$1.YAMLSemanticError(directive, msg);
- }
-
- return {
- handle,
- prefix
- };
-}
-
-function resolveYamlDirective(doc, directive) {
- let [version] = directive.parameters;
- if (directive.name === 'YAML:1.0') version = '1.0';
-
- if (!version) {
- const msg = 'Insufficient parameters given for %YAML directive';
- throw new PlainValue$1.YAMLSemanticError(directive, msg);
- }
-
- if (!documentOptions[version]) {
- const v0 = doc.version || doc.options.version;
- const msg = `Document will be parsed as YAML ${v0} rather than YAML ${version}`;
- doc.warnings.push(new PlainValue$1.YAMLWarning(directive, msg));
- }
-
- return version;
-}
-
-function parseDirectives(doc, directives, prevDoc) {
- const directiveComments = [];
- let hasDirectives = false;
-
- for (const directive of directives) {
- const {
- comment,
- name
- } = directive;
-
- switch (name) {
- case 'TAG':
- try {
- doc.tagPrefixes.push(resolveTagDirective(doc, directive));
- } catch (error) {
- doc.errors.push(error);
- }
-
- hasDirectives = true;
- break;
-
- case 'YAML':
- case 'YAML:1.0':
- if (doc.version) {
- const msg = 'The %YAML directive must only be given at most once per document.';
- doc.errors.push(new PlainValue$1.YAMLSemanticError(directive, msg));
- }
-
- try {
- doc.version = resolveYamlDirective(doc, directive);
- } catch (error) {
- doc.errors.push(error);
- }
-
- hasDirectives = true;
- break;
-
- default:
- if (name) {
- const msg = `YAML only supports %TAG and %YAML directives, and not %${name}`;
- doc.warnings.push(new PlainValue$1.YAMLWarning(directive, msg));
- }
-
- }
-
- if (comment) directiveComments.push(comment);
- }
-
- if (prevDoc && !hasDirectives && '1.1' === (doc.version || prevDoc.version || doc.options.version)) {
- const copyTagPrefix = ({
- handle,
- prefix
- }) => ({
- handle,
- prefix
- });
-
- doc.tagPrefixes = prevDoc.tagPrefixes.map(copyTagPrefix);
- doc.version = prevDoc.version;
- }
-
- doc.commentBefore = directiveComments.join('\n') || null;
-}
-
-function assertCollection(contents) {
- if (contents instanceof resolveSeq.Collection) return true;
- throw new Error('Expected a YAML collection as document contents');
-}
-
-class Document$2 {
- constructor(options) {
- this.anchors = new Anchors(options.anchorPrefix);
- this.commentBefore = null;
- this.comment = null;
- this.contents = null;
- this.directivesEndMarker = null;
- this.errors = [];
- this.options = options;
- this.schema = null;
- this.tagPrefixes = [];
- this.version = null;
- this.warnings = [];
- }
-
- add(value) {
- assertCollection(this.contents);
- return this.contents.add(value);
- }
-
- addIn(path, value) {
- assertCollection(this.contents);
- this.contents.addIn(path, value);
- }
-
- delete(key) {
- assertCollection(this.contents);
- return this.contents.delete(key);
- }
-
- deleteIn(path) {
- if (resolveSeq.isEmptyPath(path)) {
- if (this.contents == null) return false;
- this.contents = null;
- return true;
- }
-
- assertCollection(this.contents);
- return this.contents.deleteIn(path);
- }
-
- getDefaults() {
- return Document$2.defaults[this.version] || Document$2.defaults[this.options.version] || {};
- }
-
- get(key, keepScalar) {
- return this.contents instanceof resolveSeq.Collection ? this.contents.get(key, keepScalar) : undefined;
- }
-
- getIn(path, keepScalar) {
- if (resolveSeq.isEmptyPath(path)) return !keepScalar && this.contents instanceof resolveSeq.Scalar ? this.contents.value : this.contents;
- return this.contents instanceof resolveSeq.Collection ? this.contents.getIn(path, keepScalar) : undefined;
- }
-
- has(key) {
- return this.contents instanceof resolveSeq.Collection ? this.contents.has(key) : false;
- }
-
- hasIn(path) {
- if (resolveSeq.isEmptyPath(path)) return this.contents !== undefined;
- return this.contents instanceof resolveSeq.Collection ? this.contents.hasIn(path) : false;
- }
-
- set(key, value) {
- assertCollection(this.contents);
- this.contents.set(key, value);
- }
-
- setIn(path, value) {
- if (resolveSeq.isEmptyPath(path)) this.contents = value;else {
- assertCollection(this.contents);
- this.contents.setIn(path, value);
- }
- }
-
- setSchema(id, customTags) {
- if (!id && !customTags && this.schema) return;
- if (typeof id === 'number') id = id.toFixed(1);
-
- if (id === '1.0' || id === '1.1' || id === '1.2') {
- if (this.version) this.version = id;else this.options.version = id;
- delete this.options.schema;
- } else if (id && typeof id === 'string') {
- this.options.schema = id;
- }
-
- if (Array.isArray(customTags)) this.options.customTags = customTags;
- const opt = Object.assign({}, this.getDefaults(), this.options);
- this.schema = new Schema$1.Schema(opt);
- }
-
- parse(node, prevDoc) {
- if (this.options.keepCstNodes) this.cstNode = node;
- if (this.options.keepNodeTypes) this.type = 'DOCUMENT';
- const {
- directives = [],
- contents = [],
- directivesEndMarker,
- error,
- valueRange
- } = node;
-
- if (error) {
- if (!error.source) error.source = this;
- this.errors.push(error);
- }
-
- parseDirectives(this, directives, prevDoc);
- if (directivesEndMarker) this.directivesEndMarker = true;
- this.range = valueRange ? [valueRange.start, valueRange.end] : null;
- this.setSchema();
- this.anchors._cstAliases = [];
- parseContents(this, contents);
- this.anchors.resolveNodes();
-
- if (this.options.prettyErrors) {
- for (const error of this.errors) if (error instanceof PlainValue$1.YAMLError) error.makePretty();
-
- for (const warn of this.warnings) if (warn instanceof PlainValue$1.YAMLError) warn.makePretty();
- }
-
- return this;
- }
-
- listNonDefaultTags() {
- return listTagNames(this.contents).filter(t => t.indexOf(Schema$1.Schema.defaultPrefix) !== 0);
- }
-
- setTagPrefix(handle, prefix) {
- if (handle[0] !== '!' || handle[handle.length - 1] !== '!') throw new Error('Handle must start and end with !');
-
- if (prefix) {
- const prev = this.tagPrefixes.find(p => p.handle === handle);
- if (prev) prev.prefix = prefix;else this.tagPrefixes.push({
- handle,
- prefix
- });
- } else {
- this.tagPrefixes = this.tagPrefixes.filter(p => p.handle !== handle);
- }
- }
-
- toJSON(arg, onAnchor) {
- const {
- keepBlobsInJSON,
- mapAsMap,
- maxAliasCount
- } = this.options;
- const keep = keepBlobsInJSON && (typeof arg !== 'string' || !(this.contents instanceof resolveSeq.Scalar));
- const ctx = {
- doc: this,
- indentStep: ' ',
- keep,
- mapAsMap: keep && !!mapAsMap,
- maxAliasCount,
- stringify: stringify$2 // Requiring directly in Pair would create circular dependencies
-
- };
- const anchorNames = Object.keys(this.anchors.map);
- if (anchorNames.length > 0) ctx.anchors = new Map(anchorNames.map(name => [this.anchors.map[name], {
- alias: [],
- aliasCount: 0,
- count: 1
- }]));
- const res = resolveSeq.toJSON(this.contents, arg, ctx);
- if (typeof onAnchor === 'function' && ctx.anchors) for (const {
- count,
- res
- } of ctx.anchors.values()) onAnchor(res, count);
- return res;
- }
-
- toString() {
- if (this.errors.length > 0) throw new Error('Document with errors cannot be stringified');
- const indentSize = this.options.indent;
-
- if (!Number.isInteger(indentSize) || indentSize <= 0) {
- const s = JSON.stringify(indentSize);
- throw new Error(`"indent" option must be a positive integer, not ${s}`);
- }
-
- this.setSchema();
- const lines = [];
- let hasDirectives = false;
-
- if (this.version) {
- let vd = '%YAML 1.2';
-
- if (this.schema.name === 'yaml-1.1') {
- if (this.version === '1.0') vd = '%YAML:1.0';else if (this.version === '1.1') vd = '%YAML 1.1';
- }
-
- lines.push(vd);
- hasDirectives = true;
- }
-
- const tagNames = this.listNonDefaultTags();
- this.tagPrefixes.forEach(({
- handle,
- prefix
- }) => {
- if (tagNames.some(t => t.indexOf(prefix) === 0)) {
- lines.push(`%TAG ${handle} ${prefix}`);
- hasDirectives = true;
- }
- });
- if (hasDirectives || this.directivesEndMarker) lines.push('---');
-
- if (this.commentBefore) {
- if (hasDirectives || !this.directivesEndMarker) lines.unshift('');
- lines.unshift(this.commentBefore.replace(/^/gm, '#'));
- }
-
- const ctx = {
- anchors: Object.create(null),
- doc: this,
- indent: '',
- indentStep: ' '.repeat(indentSize),
- stringify: stringify$2 // Requiring directly in nodes would create circular dependencies
-
- };
- let chompKeep = false;
- let contentComment = null;
-
- if (this.contents) {
- if (this.contents instanceof resolveSeq.Node) {
- if (this.contents.spaceBefore && (hasDirectives || this.directivesEndMarker)) lines.push('');
- if (this.contents.commentBefore) lines.push(this.contents.commentBefore.replace(/^/gm, '#')); // top-level block scalars need to be indented if followed by a comment
-
- ctx.forceBlockIndent = !!this.comment;
- contentComment = this.contents.comment;
- }
-
- const onChompKeep = contentComment ? null : () => chompKeep = true;
- const body = stringify$2(this.contents, ctx, () => contentComment = null, onChompKeep);
- lines.push(resolveSeq.addComment(body, '', contentComment));
- } else if (this.contents !== undefined) {
- lines.push(stringify$2(this.contents, ctx));
- }
-
- if (this.comment) {
- if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') lines.push('');
- lines.push(this.comment.replace(/^/gm, '#'));
- }
-
- return lines.join('\n') + '\n';
- }
-
-}
-
-PlainValue$1._defineProperty(Document$2, "defaults", documentOptions);
-
-Document9b4560a1.Document = Document$2;
-Document9b4560a1.defaultOptions = defaultOptions$1;
-Document9b4560a1.scalarOptions = scalarOptions;
-
-var parseCst = parseCst$1;
-var Document$1 = Document9b4560a1;
-var Schema = Schema88e323a7;
-var PlainValue = PlainValueEc8e588e;
-var warnings = warnings1000a372;
-
-
-function createNode(value, wrapScalars = true, tag) {
- if (tag === undefined && typeof wrapScalars === 'string') {
- tag = wrapScalars;
- wrapScalars = true;
- }
-
- const options = Object.assign({}, Document$1.Document.defaults[Document$1.defaultOptions.version], Document$1.defaultOptions);
- const schema = new Schema.Schema(options);
- return schema.createNode(value, wrapScalars, tag);
-}
-
-class Document extends Document$1.Document {
- constructor(options) {
- super(Object.assign({}, Document$1.defaultOptions, options));
- }
-
-}
-
-function parseAllDocuments(src, options) {
- const stream = [];
- let prev;
-
- for (const cstDoc of parseCst.parse(src)) {
- const doc = new Document(options);
- doc.parse(cstDoc, prev);
- stream.push(doc);
- prev = doc;
- }
-
- return stream;
-}
-
-function parseDocument(src, options) {
- const cst = parseCst.parse(src);
- const doc = new Document(options).parse(cst[0]);
-
- if (cst.length > 1) {
- const errMsg = 'Source contains multiple documents; please use YAML.parseAllDocuments()';
- doc.errors.unshift(new PlainValue.YAMLSemanticError(cst[1], errMsg));
- }
-
- return doc;
-}
-
-function parse$g(src, options) {
- const doc = parseDocument(src, options);
- doc.warnings.forEach(warning => warnings.warn(warning));
- if (doc.errors.length > 0) throw doc.errors[0];
- return doc.toJSON();
-}
-
-function stringify$1(value, options) {
- const doc = new Document(options);
- doc.contents = value;
- return String(doc);
-}
-
-const YAML = {
- createNode,
- defaultOptions: Document$1.defaultOptions,
- Document,
- parse: parse$g,
- parseAllDocuments,
- parseCST: parseCst.parse,
- parseDocument,
- scalarOptions: Document$1.scalarOptions,
- stringify: stringify$1
-};
-
-dist$1.YAML = YAML;
-
-var yaml$1 = dist$1.YAML;
-
-var importCwd = {exports: {}};
-
-var importFrom$1 = {exports: {}};
-
-var resolveFrom$2 = {exports: {}};
-
-const path$i = path__default;
-const Module = require$$0__default$3;
-const fs$i = fs__default;
-
-const resolveFrom$1 = (fromDirectory, moduleId, silent) => {
- if (typeof fromDirectory !== 'string') {
- throw new TypeError(`Expected \`fromDir\` to be of type \`string\`, got \`${typeof fromDirectory}\``);
- }
-
- if (typeof moduleId !== 'string') {
- throw new TypeError(`Expected \`moduleId\` to be of type \`string\`, got \`${typeof moduleId}\``);
- }
-
- try {
- fromDirectory = fs$i.realpathSync(fromDirectory);
- } catch (error) {
- if (error.code === 'ENOENT') {
- fromDirectory = path$i.resolve(fromDirectory);
- } else if (silent) {
- return;
- } else {
- throw error;
- }
- }
-
- const fromFile = path$i.join(fromDirectory, 'noop.js');
-
- const resolveFileName = () => Module._resolveFilename(moduleId, {
- id: fromFile,
- filename: fromFile,
- paths: Module._nodeModulePaths(fromDirectory)
- });
-
- if (silent) {
- try {
- return resolveFileName();
- } catch (error) {
- return;
- }
- }
-
- return resolveFileName();
-};
-
-resolveFrom$2.exports = (fromDirectory, moduleId) => resolveFrom$1(fromDirectory, moduleId);
-resolveFrom$2.exports.silent = (fromDirectory, moduleId) => resolveFrom$1(fromDirectory, moduleId, true);
-
-const resolveFrom = resolveFrom$2.exports;
-
-importFrom$1.exports = (fromDirectory, moduleId) => eval('require')(resolveFrom(fromDirectory, moduleId));
-
-importFrom$1.exports.silent = (fromDirectory, moduleId) => {
- try {
- return eval('require')(resolveFrom(fromDirectory, moduleId));
- } catch (_) {}
-};
-
-const importFrom = importFrom$1.exports;
-
-importCwd.exports = moduleId => importFrom(process.cwd(), moduleId);
-importCwd.exports.silent = moduleId => importFrom.silent(process.cwd(), moduleId);
-
-const req$1 = importCwd.exports;
-
-/**
- * Load Options
- *
- * @private
- * @method options
- *
- * @param {Object} config PostCSS Config
- *
- * @return {Object} options PostCSS Options
- */
-const options = (config, file) => {
- if (config.parser && typeof config.parser === 'string') {
- try {
- config.parser = req$1(config.parser);
- } catch (err) {
- throw new Error(`Loading PostCSS Parser failed: ${err.message}\n\n(@${file})`)
- }
- }
-
- if (config.syntax && typeof config.syntax === 'string') {
- try {
- config.syntax = req$1(config.syntax);
- } catch (err) {
- throw new Error(`Loading PostCSS Syntax failed: ${err.message}\n\n(@${file})`)
- }
- }
-
- if (config.stringifier && typeof config.stringifier === 'string') {
- try {
- config.stringifier = req$1(config.stringifier);
- } catch (err) {
- throw new Error(`Loading PostCSS Stringifier failed: ${err.message}\n\n(@${file})`)
- }
- }
-
- if (config.plugins) {
- delete config.plugins;
- }
-
- return config
-};
-
-var options_1 = options;
-
-const req = importCwd.exports;
-
-/**
- * Plugin Loader
- *
- * @private
- * @method load
- *
- * @param {String} plugin PostCSS Plugin Name
- * @param {Object} options PostCSS Plugin Options
- *
- * @return {Function} PostCSS Plugin
- */
-const load$1 = (plugin, options, file) => {
- try {
- if (
- options === null ||
- options === undefined ||
- Object.keys(options).length === 0
- ) {
- return req(plugin)
- } else {
- return req(plugin)(options)
- }
- } catch (err) {
- throw new Error(`Loading PostCSS Plugin failed: ${err.message}\n\n(@${file})`)
- }
-};
-
-/**
- * Load Plugins
- *
- * @private
- * @method plugins
- *
- * @param {Object} config PostCSS Config Plugins
- *
- * @return {Array} plugins PostCSS Plugins
- */
-const plugins = (config, file) => {
- let plugins = [];
-
- if (Array.isArray(config.plugins)) {
- plugins = config.plugins.filter(Boolean);
- } else {
- plugins = Object.keys(config.plugins)
- .filter((plugin) => {
- return config.plugins[plugin] !== false ? plugin : ''
- })
- .map((plugin) => {
- return load$1(plugin, config.plugins[plugin], file)
- });
- }
-
- if (plugins.length && plugins.length > 0) {
- plugins.forEach((plugin, i) => {
- if (plugin.default) {
- plugin = plugin.default;
- }
-
- if (plugin.postcss === true) {
- plugin = plugin();
- } else if (plugin.postcss) {
- plugin = plugin.postcss;
- }
-
- if (
- // eslint-disable-next-line
- !(
- (typeof plugin === 'object' && Array.isArray(plugin.plugins)) ||
- (typeof plugin === 'object' && plugin.postcssPlugin) ||
- (typeof plugin === 'function')
- )
- ) {
- throw new TypeError(`Invalid PostCSS Plugin found at: plugins[${i}]\n\n(@${file})`)
- }
- });
- }
-
- return plugins
-};
-
-var plugins_1 = plugins;
-
-const resolve$2 = path__default.resolve;
-
-const config$1 = dist$2;
-const yaml = yaml$1;
-
-const loadOptions = options_1;
-const loadPlugins = plugins_1;
-
-/* istanbul ignore next */
-const interopRequireDefault = (obj) => obj && obj.__esModule ? obj : { default: obj };
-
-/**
- * Process the result from cosmiconfig
- *
- * @param {Object} ctx Config Context
- * @param {Object} result Cosmiconfig result
- *
- * @return {Object} PostCSS Config
- */
-const processResult = (ctx, result) => {
- const file = result.filepath || '';
- let config = interopRequireDefault(result.config).default || {};
-
- if (typeof config === 'function') {
- config = config(ctx);
- } else {
- config = Object.assign({}, config, ctx);
- }
-
- if (!config.plugins) {
- config.plugins = [];
- }
-
- return {
- plugins: loadPlugins(config, file),
- options: loadOptions(config, file),
- file: file
- }
-};
-
-/**
- * Builds the Config Context
- *
- * @param {Object} ctx Config Context
- *
- * @return {Object} Config Context
- */
-const createContext = (ctx) => {
- /**
- * @type {Object}
- *
- * @prop {String} cwd=process.cwd() Config search start location
- * @prop {String} env=process.env.NODE_ENV Config Enviroment, will be set to `development` by `postcss-load-config` if `process.env.NODE_ENV` is `undefined`
- */
- ctx = Object.assign({
- cwd: process.cwd(),
- env: process.env.NODE_ENV
- }, ctx);
-
- if (!ctx.env) {
- process.env.NODE_ENV = 'development';
- }
-
- return ctx
-};
-
-const addTypeScriptLoader = (options = {}, loader) => {
- const moduleName = 'postcss';
-
- return {
- ...options,
- searchPlaces: [
- ...(options.searchPlaces || []),
- 'package.json',
- `.${moduleName}rc`,
- `.${moduleName}rc.json`,
- `.${moduleName}rc.yaml`,
- `.${moduleName}rc.yml`,
- `.${moduleName}rc.ts`,
- `.${moduleName}rc.js`,
- `.${moduleName}rc.cjs`,
- `${moduleName}.config.ts`,
- `${moduleName}.config.js`,
- `${moduleName}.config.cjs`
- ],
- loaders: {
- ...options.loaders,
- '.yaml': (filepath, content) => yaml.parse(content),
- '.yml': (filepath, content) => yaml.parse(content),
- '.ts': loader
- }
- }
-};
-
-const withTypeScriptLoader = (rcFunc) => {
- return (ctx, path, options) => {
- return rcFunc(ctx, path, addTypeScriptLoader(options, (configFile) => {
- let registerer = { enabled () {} };
-
- try {
- // Register TypeScript compiler instance
- registerer = require('ts-node').register();
-
- return commonjsRequire(configFile)
- } catch (err) {
- if (err.code === 'MODULE_NOT_FOUND') {
- throw new Error(
- `'ts-node' is required for the TypeScript configuration files. Make sure it is installed\nError: ${err.message}`
- )
- }
-
- throw err
- } finally {
- registerer.enabled(false);
- }
- }))
- }
-};
-
-/**
- * Load Config
- *
- * @method rc
- *
- * @param {Object} ctx Config Context
- * @param {String} path Config Path
- * @param {Object} options Config Options
- *
- * @return {Promise} config PostCSS Config
- */
-const rc = withTypeScriptLoader((ctx, path, options) => {
- /**
- * @type {Object} The full Config Context
- */
- ctx = createContext(ctx);
-
- /**
- * @type {String} `process.cwd()`
- */
- path = path ? resolve$2(path) : process.cwd();
-
- return config$1.lilconfig('postcss', options)
- .search(path)
- .then((result) => {
- if (!result) {
- throw new Error(`No PostCSS Config found in: ${path}`)
- }
-
- return processResult(ctx, result)
- })
-});
-
-rc.sync = withTypeScriptLoader((ctx, path, options) => {
- /**
- * @type {Object} The full Config Context
- */
- ctx = createContext(ctx);
-
- /**
- * @type {String} `process.cwd()`
- */
- path = path ? resolve$2(path) : process.cwd();
-
- const result = config$1.lilconfigSync('postcss', options).search(path);
-
- if (!result) {
- throw new Error(`No PostCSS Config found in: ${path}`)
- }
-
- return processResult(ctx, result)
-});
-
-/**
- * Autoload Config for PostCSS
- *
- * @author Michael Ciniawsky @michael-ciniawsky <michael.ciniawsky@gmail.com>
- * @license MIT
- *
- * @module postcss-load-config
- * @version 2.1.0
- *
- * @requires comsiconfig
- * @requires ./options
- * @requires ./plugins
- */
-var src$1 = rc;
-
-// Helper since Typescript can't detect readonly arrays with Array.isArray
-function isArray$3(arg) {
- return Array.isArray(arg);
-}
-function ensureArray$1(thing) {
- if (isArray$3(thing))
- return thing;
- if (thing == null)
- return [];
- return [thing];
-}
-
-const normalizePath$3 = function normalizePath(filename) {
- return filename.split(path$t.win32.sep).join(path$t.posix.sep);
-};
-
-function getMatcherString$1(id, resolutionBase) {
- if (resolutionBase === false || path$t.isAbsolute(id) || id.startsWith('*')) {
- return id;
- }
- // resolve('') is valid and will default to process.cwd()
- const basePath = normalizePath$3(path$t.resolve(resolutionBase || ''))
- // escape all possible (posix + win) path characters that might interfere with regex
- .replace(/[-^$*+?.()|[\]{}]/g, '\\$&');
- // Note that we use posix.join because:
- // 1. the basePath has been normalized to use /
- // 2. the incoming glob (id) matcher, also uses /
- // otherwise Node will force backslash (\) on windows
- return path$t.posix.join(basePath, id);
-}
-const createFilter$1 = function createFilter(include, exclude, options) {
- const resolutionBase = options && options.resolve;
- const getMatcher = (id) => id instanceof RegExp
- ? id
- : {
- test: (what) => {
- // this refactor is a tad overly verbose but makes for easy debugging
- const pattern = getMatcherString$1(id, resolutionBase);
- const fn = picomatch$3(pattern, { dot: true });
- const result = fn(what);
- return result;
- }
- };
- const includeMatchers = ensureArray$1(include).map(getMatcher);
- const excludeMatchers = ensureArray$1(exclude).map(getMatcher);
- return function result(id) {
- if (typeof id !== 'string')
- return false;
- if (/\0/.test(id))
- return false;
- const pathId = normalizePath$3(id);
- for (let i = 0; i < excludeMatchers.length; ++i) {
- const matcher = excludeMatchers[i];
- if (matcher.test(pathId))
- return false;
- }
- for (let i = 0; i < includeMatchers.length; ++i) {
- const matcher = includeMatchers[i];
- if (matcher.test(pathId))
- return true;
- }
- return !includeMatchers.length;
- };
-};
-
-const reservedWords$2 = 'break case class catch const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield enum await implements package protected static interface private public';
-const builtins$1 = 'arguments Infinity NaN undefined null true false eval uneval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Symbol Error EvalError InternalError RangeError ReferenceError SyntaxError TypeError URIError Number Math Date String RegExp Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array Map Set WeakMap WeakSet SIMD ArrayBuffer DataView JSON Promise Generator GeneratorFunction Reflect Proxy Intl';
-const forbiddenIdentifiers$1 = new Set(`${reservedWords$2} ${builtins$1}`.split(' '));
-forbiddenIdentifiers$1.add('');
-const makeLegalIdentifier$1 = function makeLegalIdentifier(str) {
- let identifier = str
- .replace(/-(\w)/g, (_, letter) => letter.toUpperCase())
- .replace(/[^$_a-zA-Z0-9]/g, '_');
- if (/\d/.test(identifier[0]) || forbiddenIdentifiers$1.has(identifier)) {
- identifier = `_${identifier}`;
- }
- return identifier || '_';
-};
-
-function stringify(obj) {
- return (JSON.stringify(obj) || 'undefined').replace(/[\u2028\u2029]/g, (char) => `\\u${`000${char.charCodeAt(0).toString(16)}`.slice(-4)}`);
-}
-function serializeArray(arr, indent, baseIndent) {
- let output = '[';
- const separator = indent ? `\n${baseIndent}${indent}` : '';
- for (let i = 0; i < arr.length; i++) {
- const key = arr[i];
- output += `${i > 0 ? ',' : ''}${separator}${serialize(key, indent, baseIndent + indent)}`;
- }
- return `${output}${indent ? `\n${baseIndent}` : ''}]`;
-}
-function serializeObject(obj, indent, baseIndent) {
- let output = '{';
- const separator = indent ? `\n${baseIndent}${indent}` : '';
- const entries = Object.entries(obj);
- for (let i = 0; i < entries.length; i++) {
- const [key, value] = entries[i];
- const stringKey = makeLegalIdentifier$1(key) === key ? key : stringify(key);
- output += `${i > 0 ? ',' : ''}${separator}${stringKey}:${indent ? ' ' : ''}${serialize(value, indent, baseIndent + indent)}`;
- }
- return `${output}${indent ? `\n${baseIndent}` : ''}}`;
-}
-function serialize(obj, indent, baseIndent) {
- if (obj === Infinity)
- return 'Infinity';
- if (obj === -Infinity)
- return '-Infinity';
- if (obj === 0 && 1 / obj === -Infinity)
- return '-0';
- if (obj instanceof Date)
- return `new Date(${obj.getTime()})`;
- if (obj instanceof RegExp)
- return obj.toString();
- if (obj !== obj)
- return 'NaN'; // eslint-disable-line no-self-compare
- if (Array.isArray(obj))
- return serializeArray(obj, indent, baseIndent);
- if (obj === null)
- return 'null';
- if (typeof obj === 'object')
- return serializeObject(obj, indent, baseIndent);
- return stringify(obj);
-}
-const dataToEsm = function dataToEsm(data, options = {}) {
- const t = options.compact ? '' : 'indent' in options ? options.indent : '\t';
- const _ = options.compact ? '' : ' ';
- const n = options.compact ? '' : '\n';
- const declarationType = options.preferConst ? 'const' : 'var';
- if (options.namedExports === false ||
- typeof data !== 'object' ||
- Array.isArray(data) ||
- data instanceof Date ||
- data instanceof RegExp ||
- data === null) {
- const code = serialize(data, options.compact ? null : t, '');
- const magic = _ || (/^[{[\-\/]/.test(code) ? '' : ' '); // eslint-disable-line no-useless-escape
- return `export default${magic}${code};`;
- }
- let namedExportCode = '';
- const defaultExportRows = [];
- for (const [key, value] of Object.entries(data)) {
- if (key === makeLegalIdentifier$1(key)) {
- if (options.objectShorthand)
- defaultExportRows.push(key);
- else
- defaultExportRows.push(`${key}:${_}${key}`);
- namedExportCode += `export ${declarationType} ${key}${_}=${_}${serialize(value, options.compact ? null : t, '')};${n}`;
- }
- else {
- defaultExportRows.push(`${stringify(key)}:${_}${serialize(value, options.compact ? null : t, '')}`);
- }
- }
- return `${namedExportCode}export default${_}{${n}${t}${defaultExportRows.join(`,${n}${t}`)}${n}};${n}`;
-};
-
-const cssLangs = `\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\?)`;
-const cssLangRE = new RegExp(cssLangs);
-const cssModuleRE = new RegExp(`\\.module${cssLangs}`);
-const directRequestRE = /(\?|&)direct\b/;
-const commonjsProxyRE = /\?commonjs-proxy/;
-const inlineRE = /(\?|&)inline\b/;
-const usedRE = /(\?|&)used\b/;
-const isCSSRequest = (request) => cssLangRE.test(request);
-const isDirectCSSRequest = (request) => cssLangRE.test(request) && directRequestRE.test(request);
-const isDirectRequest = (request) => directRequestRE.test(request);
-const cssModulesCache = new WeakMap();
-const chunkToEmittedCssFileMap = new WeakMap();
-const removedPureCssFilesCache = new WeakMap();
-const postcssConfigCache = new WeakMap();
-/**
- * Plugin applied before user plugins
- */
-function cssPlugin(config) {
- let server;
- let moduleCache;
- const resolveUrl = config.createResolver({
- preferRelative: true,
- tryIndex: false,
- extensions: []
- });
- const atImportResolvers = createCSSResolvers(config);
- return {
- name: 'vite:css',
- configureServer(_server) {
- server = _server;
- },
- buildStart() {
- // Ensure a new cache for every build (i.e. rebuilding in watch mode)
- moduleCache = new Map();
- cssModulesCache.set(config, moduleCache);
- removedPureCssFilesCache.set(config, new Map());
- },
- async transform(raw, id) {
- if (!isCSSRequest(id) || commonjsProxyRE.test(id) || isURLRequest(id)) {
- return;
- }
- const urlReplacer = async (url, importer) => {
- if (checkPublicFile(url, config)) {
- return config.base + url.slice(1);
- }
- const resolved = await resolveUrl(url, importer);
- if (resolved) {
- return fileToUrl(resolved, config, this);
- }
- return url;
- };
- const { code: css, modules, deps } = await compileCSS(id, raw, config, urlReplacer, atImportResolvers, server);
- if (modules) {
- moduleCache.set(id, modules);
- }
- // track deps for build watch mode
- if (config.command === 'build' && config.build.watch && deps) {
- for (const file of deps) {
- this.addWatchFile(file);
- }
- }
- // dev
- if (server) {
- // server only logic for handling CSS @import dependency hmr
- const { moduleGraph } = server;
- const thisModule = moduleGraph.getModuleById(id);
- if (thisModule) {
- // CSS modules cannot self-accept since it exports values
- const isSelfAccepting = !modules;
- if (deps) {
- // record deps in the module graph so edits to @import css can trigger
- // main import to hot update
- const depModules = new Set();
- for (const file of deps) {
- depModules.add(isCSSRequest(file)
- ? moduleGraph.createFileOnlyEntry(file)
- : await moduleGraph.ensureEntryFromUrl((await fileToUrl(file, config, this)).replace(config.base, '/')));
- }
- moduleGraph.updateModuleInfo(thisModule, depModules,
- // The root CSS proxy module is self-accepting and should not
- // have an explicit accept list
- new Set(), isSelfAccepting);
- for (const file of deps) {
- this.addWatchFile(file);
- }
- }
- else {
- thisModule.isSelfAccepting = isSelfAccepting;
- }
- }
- }
- return {
- code: css,
- // TODO CSS source map
- map: { mappings: '' }
- };
- }
- };
-}
-/**
- * Plugin applied after user plugins
- */
-function cssPostPlugin(config) {
- // styles initialization in buildStart causes a styling loss in watch
- const styles = new Map();
- let pureCssChunks;
- // when there are multiple rollup outputs and extracting CSS, only emit once,
- // since output formats have no effect on the generated CSS.
- let outputToExtractedCSSMap;
- let hasEmitted = false;
- return {
- name: 'vite:css-post',
- buildStart() {
- // Ensure new caches for every build (i.e. rebuilding in watch mode)
- pureCssChunks = new Set();
- outputToExtractedCSSMap = new Map();
- hasEmitted = false;
- },
- async transform(css, id, ssr) {
- if (!isCSSRequest(id) || commonjsProxyRE.test(id) || isURLRequest(id)) {
- return;
- }
- const inlined = inlineRE.test(id);
- const modules = cssModulesCache.get(config).get(id);
- const modulesCode = modules && dataToEsm(modules, { namedExports: true, preferConst: true });
- if (config.command === 'serve') {
- if (isDirectCSSRequest(id)) {
- return css;
- }
- else {
- // server only
- if (ssr) {
- return modulesCode || `export default ${JSON.stringify(css)}`;
- }
- if (inlined) {
- return `export default ${JSON.stringify(css)}`;
- }
- return [
- `import { updateStyle, removeStyle } from ${JSON.stringify(path__default.posix.join(config.base, CLIENT_PUBLIC_PATH))}`,
- `const id = ${JSON.stringify(id)}`,
- `const css = ${JSON.stringify(css)}`,
- `updateStyle(id, css)`,
- // css modules exports change on edit so it can't self accept
- `${modulesCode || `import.meta.hot.accept()\nexport default css`}`,
- `import.meta.hot.prune(() => removeStyle(id))`
- ].join('\n');
- }
- }
- // build CSS handling ----------------------------------------------------
- // record css
- if (!inlined) {
- styles.set(id, css);
- }
- else {
- css = await minifyCSS(css, config);
- }
- return {
- code: modulesCode ||
- (usedRE.test(id)
- ? `export default ${JSON.stringify(css)}`
- : `export default ''`),
- map: { mappings: '' },
- // avoid the css module from being tree-shaken so that we can retrieve
- // it in renderChunk()
- moduleSideEffects: inlined ? false : 'no-treeshake'
- };
- },
- async renderChunk(code, chunk, opts) {
- let chunkCSS = '';
- let isPureCssChunk = true;
- const ids = Object.keys(chunk.modules);
- for (const id of ids) {
- if (!isCSSRequest(id) ||
- cssModuleRE.test(id) ||
- commonjsProxyRE.test(id)) {
- isPureCssChunk = false;
- }
- if (styles.has(id)) {
- chunkCSS += styles.get(id);
- }
- }
- if (!chunkCSS) {
- return null;
- }
- // resolve asset URL placeholders to their built file URLs and perform
- // minification if necessary
- const processChunkCSS = async (css, { inlined, minify }) => {
- // replace asset url references with resolved url.
- const isRelativeBase = config.base === '' || config.base.startsWith('.');
- css = css.replace(assetUrlRE, (_, fileHash, postfix = '') => {
- const filename = getAssetFilename(fileHash, config) + postfix;
- registerAssetToChunk(chunk, filename);
- if (!isRelativeBase || inlined) {
- // absolute base or relative base but inlined (injected as style tag into
- // index.html) use the base as-is
- return config.base + filename;
- }
- else {
- // relative base + extracted CSS - asset file will be in the same dir
- return `./${path__default.posix.basename(filename)}`;
- }
- });
- // only external @imports should exist at this point - and they need to
- // be hoisted to the top of the CSS chunk per spec (#1845)
- if (css.includes('@import')) {
- css = await hoistAtImports(css);
- }
- if (minify && config.build.minify) {
- css = await minifyCSS(css, config);
- }
- return css;
- };
- if (config.build.cssCodeSplit) {
- if (isPureCssChunk) {
- // this is a shared CSS-only chunk that is empty.
- pureCssChunks.add(chunk.fileName);
- }
- if (opts.format === 'es' || opts.format === 'cjs') {
- chunkCSS = await processChunkCSS(chunkCSS, {
- inlined: false,
- minify: true
- });
- // emit corresponding css file
- const fileHandle = this.emitFile({
- name: chunk.name + '.css',
- type: 'asset',
- source: chunkCSS
- });
- chunkToEmittedCssFileMap.set(chunk, new Set([this.getFileName(fileHandle)]));
- }
- else if (!config.build.ssr) {
- // legacy build, inline css
- chunkCSS = await processChunkCSS(chunkCSS, {
- inlined: true,
- minify: true
- });
- const style = `__vite_style__`;
- const injectCode = `var ${style} = document.createElement('style');` +
- `${style}.innerHTML = ${JSON.stringify(chunkCSS)};` +
- `document.head.appendChild(${style});`;
- if (config.build.sourcemap) {
- const s = new MagicString(code);
- s.prepend(injectCode);
- return {
- code: s.toString(),
- map: s.generateMap({ hires: true })
- };
- }
- else {
- return { code: injectCode + code };
- }
- }
- }
- else {
- // non-split extracted CSS will be minified together
- chunkCSS = await processChunkCSS(chunkCSS, {
- inlined: false,
- minify: false
- });
- outputToExtractedCSSMap.set(opts, (outputToExtractedCSSMap.get(opts) || '') + chunkCSS);
- }
- return null;
- },
- async generateBundle(opts, bundle) {
- // remove empty css chunks and their imports
- if (pureCssChunks.size) {
- const emptyChunkFiles = [...pureCssChunks]
- .map((file) => path__default.basename(file))
- .join('|')
- .replace(/\./g, '\\.');
- const emptyChunkRE = new RegExp(opts.format === 'es'
- ? `\\bimport\\s*"[^"]*(?:${emptyChunkFiles})";\n?`
- : `\\brequire\\(\\s*"[^"]*(?:${emptyChunkFiles})"\\);\n?`, 'g');
- for (const file in bundle) {
- const chunk = bundle[file];
- if (chunk.type === 'chunk') {
- // remove pure css chunk from other chunk's imports,
- // and also register the emitted CSS files under the importer
- // chunks instead.
- chunk.imports = chunk.imports.filter((file) => {
- if (pureCssChunks.has(file)) {
- const css = chunkToEmittedCssFileMap.get(bundle[file]);
- if (css) {
- let existing = chunkToEmittedCssFileMap.get(chunk);
- if (!existing) {
- existing = new Set();
- }
- css.forEach((file) => existing.add(file));
- chunkToEmittedCssFileMap.set(chunk, existing);
- }
- return false;
- }
- return true;
- });
- chunk.code = chunk.code.replace(emptyChunkRE,
- // remove css import while preserving source map location
- (m) => `/* empty css ${''.padEnd(m.length - 15)}*/`);
- }
- }
- const removedPureCssFiles = removedPureCssFilesCache.get(config);
- pureCssChunks.forEach((fileName) => {
- removedPureCssFiles.set(fileName, bundle[fileName]);
- delete bundle[fileName];
- });
- }
- let extractedCss = outputToExtractedCSSMap.get(opts);
- if (extractedCss && !hasEmitted) {
- hasEmitted = true;
- // minify css
- if (config.build.minify) {
- extractedCss = await minifyCSS(extractedCss, config);
- }
- this.emitFile({
- name: 'style.css',
- type: 'asset',
- source: extractedCss
- });
- }
- }
- };
-}
-function createCSSResolvers(config) {
- let cssResolve;
- let sassResolve;
- let lessResolve;
- return {
- get css() {
- return (cssResolve ||
- (cssResolve = config.createResolver({
- extensions: ['.css'],
- mainFields: ['style'],
- tryIndex: false,
- preferRelative: true
- })));
- },
- get sass() {
- return (sassResolve ||
- (sassResolve = config.createResolver({
- extensions: ['.scss', '.sass', '.css'],
- mainFields: ['sass', 'style'],
- tryIndex: true,
- tryPrefix: '_',
- preferRelative: true
- })));
- },
- get less() {
- return (lessResolve ||
- (lessResolve = config.createResolver({
- extensions: ['.less', '.css'],
- mainFields: ['less', 'style'],
- tryIndex: false,
- preferRelative: true
- })));
- }
- };
-}
-function getCssResolversKeys(resolvers) {
- return Object.keys(resolvers);
-}
-async function compileCSS(id, code, config, urlReplacer, atImportResolvers, server) {
- var _a;
- const { modules: modulesOptions, preprocessorOptions } = config.css || {};
- const isModule = modulesOptions !== false && cssModuleRE.test(id);
- // although at serve time it can work without processing, we do need to
- // crawl them in order to register watch dependencies.
- const needInlineImport = code.includes('@import');
- const hasUrl = cssUrlRE.test(code) || cssImageSetRE.test(code);
- const postcssConfig = await resolvePostcssConfig(config);
- const lang = (_a = id.match(cssLangRE)) === null || _a === void 0 ? void 0 : _a[1];
- // 1. plain css that needs no processing
- if (lang === 'css' &&
- !postcssConfig &&
- !isModule &&
- !needInlineImport &&
- !hasUrl) {
- return { code };
- }
- let map;
- let modules;
- const deps = new Set();
- // 2. pre-processors: sass etc.
- if (isPreProcessor(lang)) {
- const preProcessor = preProcessors[lang];
- let opts = (preprocessorOptions && preprocessorOptions[lang]) || {};
- // support @import from node dependencies by default
- switch (lang) {
- case "scss" /* scss */:
- case "sass" /* sass */:
- opts = {
- includePaths: ['node_modules'],
- alias: config.resolve.alias,
- ...opts
- };
- break;
- case "less" /* less */:
- case "styl" /* styl */:
- case "stylus" /* stylus */:
- opts = {
- paths: ['node_modules'],
- alias: config.resolve.alias,
- ...opts
- };
- }
- // important: set this for relative import resolving
- opts.filename = cleanUrl(id);
- const preprocessResult = await preProcessor(code, config.root, opts, atImportResolvers);
- if (preprocessResult.errors.length) {
- throw preprocessResult.errors[0];
- }
- code = preprocessResult.code;
- map = preprocessResult.map;
- if (preprocessResult.deps) {
- preprocessResult.deps.forEach((dep) => {
- // sometimes sass registers the file itself as a dep
- if (normalizePath$4(dep) !== normalizePath$4(opts.filename)) {
- deps.add(dep);
- }
- });
- }
- }
- // 3. postcss
- const postcssOptions = (postcssConfig && postcssConfig.options) || {};
- const postcssPlugins = postcssConfig && postcssConfig.plugins ? postcssConfig.plugins.slice() : [];
- if (needInlineImport) {
- postcssPlugins.unshift((await Promise.resolve().then(function () { return require('./dep-e39b05d6.js'); }).then(function (n) { return n.index; })).default({
- async resolve(id, basedir) {
- const resolved = await atImportResolvers.css(id, path__default.join(basedir, '*'));
- if (resolved) {
- return path__default.resolve(resolved);
- }
- return id;
- }
- }));
- }
- postcssPlugins.push(UrlRewritePostcssPlugin({
- replacer: urlReplacer
- }));
- if (isModule) {
- postcssPlugins.unshift((await Promise.resolve().then(function () { return require('./dep-dab866a6.js'); }).then(function (n) { return n.index; })).default({
- ...modulesOptions,
- getJSON(cssFileName, _modules, outputFileName) {
- modules = _modules;
- if (modulesOptions && typeof modulesOptions.getJSON === 'function') {
- modulesOptions.getJSON(cssFileName, _modules, outputFileName);
- }
- },
- async resolve(id) {
- for (const key of getCssResolversKeys(atImportResolvers)) {
- const resolved = await atImportResolvers[key](id);
- if (resolved) {
- return path__default.resolve(resolved);
- }
- }
- return id;
- }
- }));
- }
- if (!postcssPlugins.length) {
- return {
- code,
- map
- };
- }
- // postcss is an unbundled dep and should be lazy imported
- const postcssResult = await (await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('postcss')); }))
- .default(postcssPlugins)
- .process(code, {
- ...postcssOptions,
- to: id,
- from: id,
- map: {
- inline: false,
- annotation: false,
- prev: map
- }
- });
- // record CSS dependencies from @imports
- for (const message of postcssResult.messages) {
- if (message.type === 'dependency') {
- deps.add(message.file);
- }
- else if (message.type === 'dir-dependency') {
- // https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#3-dependencies
- const { dir, glob: globPattern = '**' } = message;
- const pattern = normalizePath$4(path__default.resolve(path__default.dirname(id), dir)) + `/` + globPattern;
- const files = out.sync(pattern, {
- ignore: ['**/node_modules/**']
- });
- for (let i = 0; i < files.length; i++) {
- deps.add(files[i]);
- }
- if (server) {
- // register glob importers so we can trigger updates on file add/remove
- if (!(id in server._globImporters)) {
- server._globImporters[id] = {
- module: server.moduleGraph.getModuleById(id),
- importGlobs: []
- };
- }
- server._globImporters[id].importGlobs.push({
- base: config.root,
- pattern
- });
- }
- }
- else if (message.type === 'warning') {
- let msg = `[vite:css] ${message.text}`;
- if (message.line && message.column) {
- msg += `\n${generateCodeFrame(code, {
- line: message.line,
- column: message.column
- })}`;
- }
- config.logger.warn(source.yellow(msg));
- }
- }
- return {
- ast: postcssResult,
- code: postcssResult.css,
- map: postcssResult.map,
- modules,
- deps
- };
-}
-async function resolvePostcssConfig(config) {
- var _a;
- let result = postcssConfigCache.get(config);
- if (result !== undefined) {
- return result;
- }
- // inline postcss config via vite config
- const inlineOptions = (_a = config.css) === null || _a === void 0 ? void 0 : _a.postcss;
- if (isObject$3(inlineOptions)) {
- const options = { ...inlineOptions };
- delete options.plugins;
- result = {
- options,
- plugins: inlineOptions.plugins || []
- };
- }
- else {
- try {
- const searchPath = typeof inlineOptions === 'string' ? inlineOptions : config.root;
- // @ts-ignore
- result = await src$1({}, searchPath);
- }
- catch (e) {
- if (!/No PostCSS Config found/.test(e.message)) {
- throw e;
- }
- result = null;
- }
- }
- postcssConfigCache.set(config, result);
- return result;
-}
-// https://drafts.csswg.org/css-syntax-3/#identifier-code-point
-const cssUrlRE = /(?<=^|[^\w\-\u0080-\uffff])url\(\s*('[^']+'|"[^"]+"|[^'")]+)\s*\)/;
-const cssImageSetRE = /image-set\(([^)]+)\)/;
-const UrlRewritePostcssPlugin = (opts) => {
- if (!opts) {
- throw new Error('base or replace is required');
- }
- return {
- postcssPlugin: 'vite-url-rewrite',
- Once(root) {
- const promises = [];
- root.walkDecls((declaration) => {
- const isCssUrl = cssUrlRE.test(declaration.value);
- const isCssImageSet = cssImageSetRE.test(declaration.value);
- if (isCssUrl || isCssImageSet) {
- const replacerForDeclaration = (rawUrl) => {
- var _a;
- const importer = (_a = declaration.source) === null || _a === void 0 ? void 0 : _a.input.file;
- return opts.replacer(rawUrl, importer);
- };
- const rewriterToUse = isCssUrl ? rewriteCssUrls : rewriteCssImageSet;
- promises.push(rewriterToUse(declaration.value, replacerForDeclaration).then((url) => {
- declaration.value = url;
- }));
- }
- });
- if (promises.length) {
- return Promise.all(promises);
- }
- }
- };
-};
-UrlRewritePostcssPlugin.postcss = true;
-function rewriteCssUrls(css, replacer) {
- return asyncReplace(css, cssUrlRE, async (match) => {
- const [matched, rawUrl] = match;
- return await doUrlReplace(rawUrl, matched, replacer);
- });
-}
-function rewriteCssImageSet(css, replacer) {
- return asyncReplace(css, cssImageSetRE, async (match) => {
- const [matched, rawUrl] = match;
- const url = await processSrcSet(rawUrl, ({ url }) => doUrlReplace(url, matched, replacer));
- return `image-set(${url})`;
- });
-}
-async function doUrlReplace(rawUrl, matched, replacer) {
- let wrap = '';
- const first = rawUrl[0];
- if (first === `"` || first === `'`) {
- wrap = first;
- rawUrl = rawUrl.slice(1, -1);
- }
- if (isExternalUrl(rawUrl) || isDataUrl(rawUrl) || rawUrl.startsWith('#')) {
- return matched;
- }
- return `url(${wrap}${await replacer(rawUrl)}${wrap})`;
-}
-async function minifyCSS(css, config) {
- const { code, warnings } = await esbuild.transform(css, {
- loader: 'css',
- minify: true,
- target: config.build.cssTarget || undefined
- });
- if (warnings.length) {
- const msgs = await esbuild.formatMessages(warnings, { kind: 'warning' });
- config.logger.warn(source.yellow(`warnings when minifying css:\n${msgs.join('\n')}`));
- }
- return code;
-}
-// #1845
-// CSS @import can only appear at top of the file. We need to hoist all @import
-// to top when multiple files are concatenated.
-async function hoistAtImports(css) {
- const postcss = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('postcss')); });
- return (await postcss.default([AtImportHoistPlugin]).process(css)).css;
-}
-const AtImportHoistPlugin = () => {
- return {
- postcssPlugin: 'vite-hoist-at-imports',
- Once(root) {
- const imports = [];
- root.walkAtRules((rule) => {
- if (rule.name === 'import') {
- // record in reverse so that can simply prepend to preserve order
- imports.unshift(rule);
- }
- });
- imports.forEach((i) => root.prepend(i));
- }
- };
-};
-AtImportHoistPlugin.postcss = true;
-const loadedPreprocessors = {};
-function loadPreprocessor(lang, root) {
- var _a, _b;
- if (lang in loadedPreprocessors) {
- return loadedPreprocessors[lang];
- }
- try {
- // Search for the preprocessor in the root directory first, and fall back
- // to the default require paths.
- const fallbackPaths = ((_b = (_a = require.resolve).paths) === null || _b === void 0 ? void 0 : _b.call(_a, lang)) || [];
- const resolved = require.resolve(lang, { paths: [root, ...fallbackPaths] });
- return (loadedPreprocessors[lang] = require(resolved));
- }
- catch (e) {
- throw new Error(`Preprocessor dependency "${lang}" not found. Did you install it?`);
- }
-}
-// .scss/.sass processor
-const scss = async (source, root, options, resolvers) => {
- const render = loadPreprocessor("sass" /* sass */, root).render;
- const internalImporter = (url, importer, done) => {
- resolvers.sass(url, importer).then((resolved) => {
- if (resolved) {
- rebaseUrls(resolved, options.filename, options.alias)
- .then(done)
- .catch(done);
- }
- else {
- done(null);
- }
- });
- };
- const importer = [internalImporter];
- if (options.importer) {
- Array.isArray(options.importer)
- ? importer.push(...options.importer)
- : importer.push(options.importer);
- }
- const finalOptions = {
- ...options,
- data: await getSource(source, options.filename, options.additionalData),
- file: options.filename,
- outFile: options.filename,
- importer
- };
- try {
- const result = await new Promise((resolve, reject) => {
- render(finalOptions, (err, res) => {
- if (err) {
- reject(err);
- }
- else {
- resolve(res);
- }
- });
- });
- const deps = result.stats.includedFiles;
- return {
- code: result.css.toString(),
- errors: [],
- deps
- };
- }
- catch (e) {
- // normalize SASS error
- e.id = e.file;
- e.frame = e.formatted;
- return { code: '', errors: [e], deps: [] };
- }
-};
-const sass = (source, root, options, aliasResolver) => scss(source, root, {
- ...options,
- indentedSyntax: true
-}, aliasResolver);
-/**
- * relative url() inside \@imported sass and less files must be rebased to use
- * root file as base.
- */
-async function rebaseUrls(file, rootFile, alias) {
- file = path__default.resolve(file); // ensure os-specific flashes
- // in the same dir, no need to rebase
- const fileDir = path__default.dirname(file);
- const rootDir = path__default.dirname(rootFile);
- if (fileDir === rootDir) {
- return { file };
- }
- // no url()
- const content = fs__default.readFileSync(file, 'utf-8');
- if (!cssUrlRE.test(content)) {
- return { file };
- }
- const rebased = await rewriteCssUrls(content, (url) => {
- if (url.startsWith('/'))
- return url;
- // match alias, no need to rewrite
- for (const { find } of alias) {
- const matches = typeof find === 'string' ? url.startsWith(find) : find.test(url);
- if (matches) {
- return url;
- }
- }
- const absolute = path__default.resolve(fileDir, url);
- const relative = path__default.relative(rootDir, absolute);
- return normalizePath$4(relative);
- });
- return {
- file,
- contents: rebased
- };
-}
-// .less
-const less = async (source, root, options, resolvers) => {
- const nodeLess = loadPreprocessor("less" /* less */, root);
- const viteResolverPlugin = createViteLessPlugin(nodeLess, options.filename, options.alias, resolvers);
- source = await getSource(source, options.filename, options.additionalData);
- let result;
- try {
- result = await nodeLess.render(source, {
- ...options,
- plugins: [viteResolverPlugin, ...(options.plugins || [])]
- });
- }
- catch (e) {
- const error = e;
- // normalize error info
- const normalizedError = new Error(error.message || error.type);
- normalizedError.loc = {
- file: error.filename || options.filename,
- line: error.line,
- column: error.column
- };
- return { code: '', errors: [normalizedError], deps: [] };
- }
- return {
- code: result.css.toString(),
- deps: result.imports,
- errors: []
- };
-};
-/**
- * Less manager, lazy initialized
- */
-let ViteLessManager;
-function createViteLessPlugin(less, rootFile, alias, resolvers) {
- if (!ViteLessManager) {
- ViteLessManager = class ViteManager extends less.FileManager {
- constructor(rootFile, resolvers, alias) {
- super();
- this.rootFile = rootFile;
- this.resolvers = resolvers;
- this.alias = alias;
- }
- supports() {
- return true;
- }
- supportsSync() {
- return false;
- }
- async loadFile(filename, dir, opts, env) {
- const resolved = await this.resolvers.less(filename, path__default.join(dir, '*'));
- if (resolved) {
- const result = await rebaseUrls(resolved, this.rootFile, this.alias);
- let contents;
- if (result && 'contents' in result) {
- contents = result.contents;
- }
- else {
- contents = fs__default.readFileSync(resolved, 'utf-8');
- }
- return {
- filename: path__default.resolve(resolved),
- contents
- };
- }
- else {
- return super.loadFile(filename, dir, opts, env);
- }
- }
- };
- }
- return {
- install(_, pluginManager) {
- pluginManager.addFileManager(new ViteLessManager(rootFile, resolvers, alias));
- },
- minVersion: [3, 0, 0]
- };
-}
-// .styl
-const styl = async (source, root, options) => {
- var _a;
- const nodeStylus = loadPreprocessor("stylus" /* stylus */, root);
- // Get source with preprocessor options.additionalData. Make sure a new line separator
- // is added to avoid any render error, as added stylus content may not have semi-colon separators
- source = await getSource(source, options.filename, options.additionalData, '\n');
- // Get preprocessor options.imports dependencies as stylus
- // does not return them with its builtin `.deps()` method
- const importsDeps = ((_a = options.imports) !== null && _a !== void 0 ? _a : []).map((dep) => path__default.resolve(dep));
- try {
- const ref = nodeStylus(source, options);
- // if (map) ref.set('sourcemap', { inline: false, comment: false })
- const result = ref.render();
- // Concat imports deps with computed deps
- const deps = [...ref.deps(), ...importsDeps];
- return { code: result, errors: [], deps };
- }
- catch (e) {
- return { code: '', errors: [e], deps: [] };
- }
-};
-function getSource(source, filename, additionalData, sep = '') {
- if (!additionalData)
- return source;
- if (typeof additionalData === 'function') {
- return additionalData(source, filename);
- }
- return additionalData + sep + source;
-}
-const preProcessors = Object.freeze({
- ["less" /* less */]: less,
- ["sass" /* sass */]: sass,
- ["scss" /* scss */]: scss,
- ["styl" /* styl */]: styl,
- ["stylus" /* stylus */]: styl
-});
-function isPreProcessor(lang) {
- return lang && lang in preProcessors;
-}
-
-/* es-module-lexer 0.9.2 */
-const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];function parse$f(E,g="@"){if(!B)return init.then(()=>parse$f(E));const I=E.length+1,w=(B.__heap_base.value||B.__heap_base)+4*I-B.memory.buffer.byteLength;w>0&&B.memory.grow(Math.ceil(w/65536));const D=B.sa(I-1);if((A?C:Q)(E,new Uint16Array(B.memory.buffer,D,I)),!B.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,B.e()).split("\n").length}:${B.e()-E.lastIndexOf("\n",B.e()-1)}`),{idx:B.e()});const k=[],L=[];for(;B.ri();){const A=B.is(),Q=B.ie(),C=B.ai(),g=B.id(),I=B.ss(),w=B.se();let D;B.ip()&&(D=o(E.slice(-1===g?A-1:A,-1===g?Q+1:Q))),k.push({n:D,s:A,e:Q,ss:I,se:w,d:g,a:C});}for(;B.re();){const A=E.slice(B.es(),B.ee()),Q=A[0];L.push('"'===Q||"'"===Q?o(A):A);}function o(A){try{return (0, eval)(A)}catch(A){}}return [k,L,!!B.f()]}function Q(A,Q){const C=A.length;let B=0;for(;B<C;){const C=A.charCodeAt(B);Q[B++]=(255&C)<<8|C>>>8;}}function C(A,Q){const C=A.length;let B=0;for(;B<C;)Q[B]=A.charCodeAt(B++);}let B;const init=WebAssembly.compile((E="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Sw0AQQEgAnRBMXENAQsgAEH4/wNxQShGDQAgAEFGakH//wNxQQZJDQACQCAAQaV/aiICQQNLDQAgAkEBRw0BCyAAQYV/akH//wNxQQRJIQELIAELiwEBAn8CQEEAKALkCCICLwEAIgNB4QBHDQBBACACQQRqNgLkCEEBECchAkEAKALkCCEAAkACQCACQSJGDQAgAkEnRg0AIAIQKhpBACgC5AghAQwBCyACEBhBAEEAKALkCEECaiIBNgLkCAtBARAnIQNBACgC5AghAgsCQCACIABGDQAgACABEAILIAMLcgEEf0EAKALkCCEAQQAoAugIIQECQAJAA0AgAEECaiECIAAgAU8NAQJAAkAgAi8BACIDQaR/ag4CAQQACyACIQAgA0F2ag4EAgEBAgELIABBBGohAAwACwtBACACNgLkCBAeQQAPC0EAIAI2AuQIQd0AC0kBAX9BACEHAkAgAC8BCiAGRw0AIAAvAQggBUcNACAALwEGIARHDQAgAC8BBCADRw0AIAAvAQIgAkcNACAALwEAIAFGIQcLIAcLUwEBf0EAIQgCQCAALwEMIAdHDQAgAC8BCiAGRw0AIAAvAQggBUcNACAALwEGIARHDQAgAC8BBCADRw0AIAAvAQIgAkcNACAALwEAIAFGIQgLIAgLCx8CAEGACAsCAAAAQYQICxABAAAAAgAAAAAEAABwOAAA","undefined"!=typeof Buffer?Buffer.from(E,"base64"):Uint8Array.from(atob(E),A=>A.charCodeAt(0)))).then(WebAssembly.instantiate).then(({exports:A})=>{B=A;});var E;
-
-async function transformImportGlob(source, pos, importer, importIndex, root, normalizeUrl, preload = true) {
- const isEager = source.slice(pos, pos + 21) === 'import.meta.globEager';
- const isEagerDefault = isEager && source.slice(pos + 21, pos + 28) === 'Default';
- const err = (msg) => {
- const e = new Error(`Invalid glob import syntax: ${msg}`);
- e.pos = pos;
- return e;
- };
- importer = cleanUrl(importer);
- const importerBasename = path__default.basename(importer);
- let [pattern, endIndex] = lexGlobPattern(source, pos);
- if (!pattern.startsWith('.') && !pattern.startsWith('/')) {
- throw err(`pattern must start with "." or "/" (relative to project root)`);
- }
- let base;
- let parentDepth = 0;
- const isAbsolute = pattern.startsWith('/');
- if (isAbsolute) {
- base = path__default.resolve(root);
- pattern = pattern.slice(1);
- }
- else {
- base = path__default.dirname(importer);
- while (pattern.startsWith('../')) {
- pattern = pattern.slice(3);
- base = path__default.resolve(base, '../');
- parentDepth++;
- }
- if (pattern.startsWith('./')) {
- pattern = pattern.slice(2);
- }
- }
- const files = out.sync(pattern, {
- cwd: base,
- ignore: ['**/node_modules/**']
- });
- const imports = [];
- let importsString = ``;
- let entries = ``;
- for (let i = 0; i < files.length; i++) {
- // skip importer itself
- if (files[i] === importerBasename)
- continue;
- const file = isAbsolute
- ? `/${files[i]}`
- : parentDepth
- ? `${'../'.repeat(parentDepth)}${files[i]}`
- : `./${files[i]}`;
- let importee = file;
- if (normalizeUrl) {
- [importee] = await normalizeUrl(file, pos);
- }
- imports.push(importee);
- const identifier = `__glob_${importIndex}_${i}`;
- if (isEager) {
- importsString += `import ${isEagerDefault ? `` : `* as `}${identifier} from ${JSON.stringify(importee)};`;
- entries += ` ${JSON.stringify(file)}: ${identifier},`;
- }
- else {
- let imp = `import(${JSON.stringify(importee)})`;
- if (!normalizeUrl && preload) {
- imp =
- `(${isModernFlag}` +
- `? ${preloadMethod}(()=>${imp},"${preloadMarker}")` +
- `: ${imp})`;
- }
- entries += ` ${JSON.stringify(file)}: () => ${imp},`;
- }
- }
- return {
- imports,
- importsString,
- exp: `{${entries}}`,
- endIndex,
- isEager,
- pattern,
- base
- };
-}
-function lexGlobPattern(code, pos) {
- let state = 0 /* inCall */;
- let pattern = '';
- let i = code.indexOf(`(`, pos) + 1;
- outer: for (; i < code.length; i++) {
- const char = code.charAt(i);
- switch (state) {
- case 0 /* inCall */:
- if (char === `'`) {
- state = 1 /* inSingleQuoteString */;
- }
- else if (char === `"`) {
- state = 2 /* inDoubleQuoteString */;
- }
- else if (char === '`') {
- state = 3 /* inTemplateString */;
- }
- else if (/\s/.test(char)) {
- continue;
- }
- else {
- error$3(i);
- }
- break;
- case 1 /* inSingleQuoteString */:
- if (char === `'`) {
- break outer;
- }
- else {
- pattern += char;
- }
- break;
- case 2 /* inDoubleQuoteString */:
- if (char === `"`) {
- break outer;
- }
- else {
- pattern += char;
- }
- break;
- case 3 /* inTemplateString */:
- if (char === '`') {
- break outer;
- }
- else {
- pattern += char;
- }
- break;
- default:
- throw new Error('unknown import.meta.glob lexer state');
- }
- }
- return [pattern, code.indexOf(`)`, i) + 1];
-}
-function error$3(pos) {
- const err = new Error(`import.meta.glob() can only accept string literals.`);
- err.pos = pos;
- throw err;
-}
-
-/**
- * A flag for injected helpers. This flag will be set to `false` if the output
- * target is not native es - so that injected helper logic can be conditionally
- * dropped.
- */
-const isModernFlag = `__VITE_IS_MODERN__`;
-const preloadMethod = `__vitePreload`;
-const preloadMarker = `__VITE_PRELOAD__`;
-const preloadBaseMarker = `__VITE_PRELOAD_BASE__`;
-const preloadHelperId = 'vite/preload-helper';
-const preloadMarkerRE = new RegExp(`"${preloadMarker}"`, 'g');
-/**
- * Helper for preloading CSS and direct imports of async chunks in parallel to
- * the async chunk itself.
- */
-function detectScriptRel() {
- // @ts-ignore
- const relList = document.createElement('link').relList;
- // @ts-ignore
- return relList && relList.supports && relList.supports('modulepreload')
- ? 'modulepreload'
- : 'preload';
-}
-function preload(baseModule, deps) {
- // @ts-ignore
- if (!__VITE_IS_MODERN__ || !deps || deps.length === 0) {
- return baseModule();
- }
- return Promise.all(deps.map((dep) => {
- // @ts-ignore
- dep = `${base}${dep}`;
- // @ts-ignore
- if (dep in seen)
- return;
- // @ts-ignore
- seen[dep] = true;
- const isCss = dep.endsWith('.css');
- const cssSelector = isCss ? '[rel="stylesheet"]' : '';
- // @ts-ignore check if the file is already preloaded by SSR markup
- if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) {
- return;
- }
- // @ts-ignore
- const link = document.createElement('link');
- // @ts-ignore
- link.rel = isCss ? 'stylesheet' : scriptRel;
- if (!isCss) {
- link.as = 'script';
- link.crossOrigin = '';
- }
- link.href = dep;
- // @ts-ignore
- document.head.appendChild(link);
- if (isCss) {
- return new Promise((res, rej) => {
- link.addEventListener('load', res);
- link.addEventListener('error', rej);
- });
- }
- })).then(() => baseModule());
-}
-/**
- * Build only. During serve this is performed as part of ./importAnalysis.
- */
-function buildImportAnalysisPlugin(config) {
- const ssr = !!config.build.ssr;
- const insertPreload = !(ssr || !!config.build.lib);
- const scriptRel = config.build.polyfillModulePreload
- ? `'modulepreload'`
- : `(${detectScriptRel.toString()})()`;
- const preloadCode = `const scriptRel = ${scriptRel};const seen = {};const base = '${preloadBaseMarker}';export const ${preloadMethod} = ${preload.toString()}`;
- return {
- name: 'vite:build-import-analysis',
- resolveId(id) {
- if (id === preloadHelperId) {
- return id;
- }
- },
- load(id) {
- if (id === preloadHelperId) {
- return preloadCode.replace(preloadBaseMarker, config.base);
- }
- },
- async transform(source, importer) {
- if (importer.includes('node_modules') &&
- !source.includes('import.meta.glob')) {
- return;
- }
- await init;
- let imports = [];
- try {
- imports = parse$f(source)[0];
- }
- catch (e) {
- this.error(e, e.idx);
- }
- if (!imports.length) {
- return null;
- }
- let s;
- const str = () => s || (s = new MagicString(source));
- let needPreloadHelper = false;
- for (let index = 0; index < imports.length; index++) {
- const { s: start, e: end, ss: expStart, n: specifier, d: dynamicIndex } = imports[index];
- // import.meta.glob
- if (source.slice(start, end) === 'import.meta' &&
- source.slice(end, end + 5) === '.glob') {
- const { importsString, exp, endIndex, isEager } = await transformImportGlob(source, start, importer, index, config.root, undefined, insertPreload);
- str().prepend(importsString);
- str().overwrite(expStart, endIndex, exp);
- if (!isEager) {
- needPreloadHelper = true;
- }
- continue;
- }
- if (dynamicIndex > -1 && insertPreload) {
- needPreloadHelper = true;
- const dynamicEnd = source.indexOf(`)`, end) + 1;
- const original = source.slice(dynamicIndex, dynamicEnd);
- const replacement = `${preloadMethod}(() => ${original},${isModernFlag}?"${preloadMarker}":void 0)`;
- str().overwrite(dynamicIndex, dynamicEnd, replacement);
- }
- // Differentiate CSS imports that use the default export from those that
- // do not by injecting a ?used query - this allows us to avoid including
- // the CSS string when unnecessary (esbuild has trouble treeshaking
- // them)
- if (specifier &&
- isCSSRequest(specifier) &&
- source.slice(expStart, start).includes('from') &&
- // edge case for package names ending with .css (e.g normalize.css)
- !(bareImportRE.test(specifier) && !specifier.includes('/'))) {
- const url = specifier.replace(/\?|$/, (m) => `?used${m ? '&' : ''}`);
- str().overwrite(start, end, dynamicIndex > -1 ? `'${url}'` : url);
- }
- }
- if (needPreloadHelper &&
- insertPreload &&
- !source.includes(`const ${preloadMethod} =`)) {
- str().prepend(`import { ${preloadMethod} } from "${preloadHelperId}";`);
- }
- if (s) {
- return {
- code: s.toString(),
- map: config.build.sourcemap ? s.generateMap({ hires: true }) : null
- };
- }
- },
- renderChunk(code, _, { format }) {
- // make sure we only perform the preload logic in modern builds.
- if (code.indexOf(isModernFlag) > -1) {
- const re = new RegExp(isModernFlag, 'g');
- const isModern = String(format === 'es');
- if (config.build.sourcemap) {
- const s = new MagicString(code);
- let match;
- while ((match = re.exec(code))) {
- s.overwrite(match.index, match.index + isModernFlag.length, isModern);
- }
- return {
- code: s.toString(),
- map: s.generateMap({ hires: true })
- };
- }
- else {
- return code.replace(re, isModern);
- }
- }
- return null;
- },
- generateBundle({ format }, bundle) {
- if (format !== 'es' || ssr) {
- return;
- }
- for (const file in bundle) {
- const chunk = bundle[file];
- // can't use chunk.dynamicImports.length here since some modules e.g.
- // dynamic import to constant json may get inlined.
- if (chunk.type === 'chunk' && chunk.code.indexOf(preloadMarker) > -1) {
- const code = chunk.code;
- let imports;
- try {
- imports = parse$f(code)[0].filter((i) => i.d > -1);
- }
- catch (e) {
- this.error(e, e.idx);
- }
- if (imports.length) {
- const s = new MagicString(code);
- for (let index = 0; index < imports.length; index++) {
- const { s: start, e: end, d: dynamicIndex } = imports[index];
- // check the chunk being imported
- const url = code.slice(start, end);
- const deps = new Set();
- let hasRemovedPureCssChunk = false;
- if (url[0] === `"` && url[url.length - 1] === `"`) {
- const ownerFilename = chunk.fileName;
- // literal import - trace direct imports and add to deps
- const analyzed = new Set();
- const addDeps = (filename) => {
- if (filename === ownerFilename)
- return;
- if (analyzed.has(filename))
- return;
- analyzed.add(filename);
- const chunk = bundle[filename];
- if (chunk) {
- deps.add(chunk.fileName);
- const cssFiles = chunkToEmittedCssFileMap.get(chunk);
- if (cssFiles) {
- cssFiles.forEach((file) => {
- deps.add(file);
- });
- }
- chunk.imports.forEach(addDeps);
- }
- else {
- const removedPureCssFiles = removedPureCssFilesCache.get(config);
- const chunk = removedPureCssFiles.get(filename);
- if (chunk) {
- const cssFiles = chunkToEmittedCssFileMap.get(chunk);
- if (cssFiles && cssFiles.size > 0) {
- cssFiles.forEach((file) => {
- deps.add(file);
- });
- hasRemovedPureCssChunk = true;
- }
- s.overwrite(dynamicIndex, end + 1, 'Promise.resolve({})');
- }
- }
- };
- const normalizedFile = path__default.posix.join(path__default.posix.dirname(chunk.fileName), url.slice(1, -1));
- addDeps(normalizedFile);
- }
- let markPos = code.indexOf(preloadMarker, end);
- // fix issue #3051
- if (markPos === -1 && imports.length === 1) {
- markPos = code.indexOf(preloadMarker);
- }
- if (markPos > 0) {
- s.overwrite(markPos - 1, markPos + preloadMarker.length + 1,
- // the dep list includes the main chunk, so only need to
- // preload when there are actual other deps.
- deps.size > 1 ||
- // main chunk is removed
- (hasRemovedPureCssChunk && deps.size > 0)
- ? `[${[...deps].map((d) => JSON.stringify(d)).join(',')}]`
- : `[]`);
- }
- }
- chunk.code = s.toString();
- // TODO source map
- }
- // there may still be markers due to inlined dynamic imports, remove
- // all the markers regardless
- chunk.code = chunk.code.replace(preloadMarkerRE, 'void 0');
- }
- }
- }
- };
-}
-
-const modulePreloadPolyfillId = 'vite/modulepreload-polyfill';
-function modulePreloadPolyfillPlugin(config) {
- const skip = config.build.ssr;
- let polyfillString;
- return {
- name: 'vite:modulepreload-polyfill',
- resolveId(id) {
- if (id === modulePreloadPolyfillId) {
- return id;
- }
- },
- load(id) {
- if (id === modulePreloadPolyfillId) {
- if (skip) {
- return '';
- }
- if (!polyfillString) {
- polyfillString =
- `const p = ${polyfill.toString()};` + `${isModernFlag}&&p();`;
- }
- return polyfillString;
- }
- }
- };
-}
-function polyfill() {
- const relList = document.createElement('link').relList;
- if (relList && relList.supports && relList.supports('modulepreload')) {
- return;
- }
- for (const link of document.querySelectorAll('link[rel="modulepreload"]')) {
- processPreload(link);
- }
- new MutationObserver((mutations) => {
- for (const mutation of mutations) {
- if (mutation.type !== 'childList') {
- continue;
- }
- for (const node of mutation.addedNodes) {
- if (node.tagName === 'LINK' && node.rel === 'modulepreload')
- processPreload(node);
- }
- }
- }).observe(document, { childList: true, subtree: true });
- function getFetchOpts(script) {
- const fetchOpts = {};
- if (script.integrity)
- fetchOpts.integrity = script.integrity;
- if (script.referrerpolicy)
- fetchOpts.referrerPolicy = script.referrerpolicy;
- if (script.crossorigin === 'use-credentials')
- fetchOpts.credentials = 'include';
- else if (script.crossorigin === 'anonymous')
- fetchOpts.credentials = 'omit';
- else
- fetchOpts.credentials = 'same-origin';
- return fetchOpts;
- }
- function processPreload(link) {
- if (link.ep)
- // ep marker = processed
- return;
- link.ep = true;
- // prepopulate the load record
- const fetchOpts = getFetchOpts(link);
- fetch(link.href, fetchOpts);
- }
-}
-
-const htmlProxyRE = /\?html-proxy&index=(\d+)\.js$/;
-const isHTMLProxy = (id) => htmlProxyRE.test(id);
-// HTML Proxy Caches are stored by config -> filePath -> index
-const htmlProxyMap = new WeakMap();
-function htmlInlineScriptProxyPlugin(config) {
- return {
- name: 'vite:html-inline-script-proxy',
- resolveId(id) {
- if (htmlProxyRE.test(id)) {
- return id;
- }
- },
- buildStart() {
- htmlProxyMap.set(config, new Map());
- },
- load(id) {
- const proxyMatch = id.match(htmlProxyRE);
- if (proxyMatch) {
- const index = Number(proxyMatch[1]);
- const file = cleanUrl(id);
- const url = file.replace(normalizePath$4(config.root), '');
- const result = htmlProxyMap.get(config).get(url)[index];
- if (result) {
- return result;
- }
- else {
- throw new Error(`No matching HTML proxy module found from ${id}`);
- }
- }
- }
- };
-}
-/** Add script to cache */
-function addToHTMLProxyCache(config, filePath, index, code) {
- if (!htmlProxyMap.get(config)) {
- htmlProxyMap.set(config, new Map());
- }
- if (!htmlProxyMap.get(config).get(filePath)) {
- htmlProxyMap.get(config).set(filePath, []);
- }
- htmlProxyMap.get(config).get(filePath)[index] = code;
-}
-// this extends the config in @vue/compiler-sfc with <link href>
-const assetAttrsConfig = {
- link: ['href'],
- video: ['src', 'poster'],
- source: ['src', 'srcset'],
- img: ['src', 'srcset'],
- image: ['xlink:href', 'href'],
- use: ['xlink:href', 'href']
-};
-const isAsyncScriptMap = new WeakMap();
-async function traverseHtml(html, filePath, visitor) {
- // lazy load compiler
- const { parse, transform } = await Promise.resolve().then(function () { return require('./dep-a5b4350d.js'); }).then(function (n) { return n.compilerDom_cjs; });
- // @vue/compiler-core doesn't like lowercase doctypes
- html = html.replace(/<!doctype\s/i, '<!DOCTYPE ');
- try {
- const ast = parse(html, { comments: true });
- transform(ast, {
- nodeTransforms: [visitor]
- });
- }
- catch (e) {
- const parseError = {
- loc: filePath,
- frame: '',
- ...formatParseError(e, filePath, html)
- };
- throw new Error(`Unable to parse ${JSON.stringify(parseError.loc)}\n${parseError.frame}`);
- }
-}
-function getScriptInfo(node) {
- let src;
- let isModule = false;
- let isAsync = false;
- for (let i = 0; i < node.props.length; i++) {
- const p = node.props[i];
- if (p.type === 6 /* ATTRIBUTE */) {
- if (p.name === 'src') {
- src = p;
- }
- else if (p.name === 'type' && p.value && p.value.content === 'module') {
- isModule = true;
- }
- else if (p.name === 'async') {
- isAsync = true;
- }
- }
- }
- return { src, isModule, isAsync };
-}
-function formatParseError(e, id, html) {
- // normalize the error to rollup format
- if (e.loc) {
- e.frame = generateCodeFrame(html, e.loc.start.offset);
- e.loc = {
- file: id,
- line: e.loc.start.line,
- column: e.loc.start.column
- };
- }
- return e;
-}
-/**
- * Compiles index.html into an entry js module
- */
-function buildHtmlPlugin(config) {
- const [preHooks, postHooks] = resolveHtmlTransforms(config.plugins);
- const processedHtml = new Map();
- const isExcludedUrl = (url) => url.startsWith('#') ||
- isExternalUrl(url) ||
- isDataUrl(url) ||
- checkPublicFile(url, config);
- return {
- name: 'vite:build-html',
- buildStart() {
- isAsyncScriptMap.set(config, new Map());
- },
- async transform(html, id) {
- if (id.endsWith('.html')) {
- const publicPath = `/${slash$3(path__default.relative(config.root, id))}`;
- // pre-transform
- html = await applyHtmlTransforms(html, preHooks, {
- path: publicPath,
- filename: id
- });
- let js = '';
- const s = new MagicString(html);
- const assetUrls = [];
- let inlineModuleIndex = -1;
- let everyScriptIsAsync = true;
- let someScriptsAreAsync = false;
- let someScriptsAreDefer = false;
- await traverseHtml(html, id, (node) => {
- if (node.type !== 1 /* ELEMENT */) {
- return;
- }
- let shouldRemove = false;
- // script tags
- if (node.tag === 'script') {
- const { src, isModule, isAsync } = getScriptInfo(node);
- const url = src && src.value && src.value.content;
- if (url && checkPublicFile(url, config)) {
- // referencing public dir url, prefix with base
- s.overwrite(src.value.loc.start.offset, src.value.loc.end.offset, `"${config.base + url.slice(1)}"`);
- }
- if (isModule) {
- inlineModuleIndex++;
- if (url && !isExcludedUrl(url)) {
- // <script type="module" src="..."/>
- // add it as an import
- js += `\nimport ${JSON.stringify(url)}`;
- shouldRemove = true;
- }
- else if (node.children.length) {
- const contents = node.children
- .map((child) => child.content || '')
- .join('');
- // <script type="module">...</script>
- const filePath = id.replace(normalizePath$4(config.root), '')
- addToHTMLProxyCache(config, filePath, inlineModuleIndex, contents);
- js += `\nimport "${id}?html-proxy&index=${inlineModuleIndex}.js"`;
- shouldRemove = true;
- }
- everyScriptIsAsync && (everyScriptIsAsync = isAsync);
- someScriptsAreAsync || (someScriptsAreAsync = isAsync);
- someScriptsAreDefer || (someScriptsAreDefer = !isAsync);
- }
- }
- // For asset references in index.html, also generate an import
- // statement for each - this will be handled by the asset plugin
- const assetAttrs = assetAttrsConfig[node.tag];
- if (assetAttrs) {
- for (const p of node.props) {
- if (p.type === 6 /* ATTRIBUTE */ &&
- p.value &&
- assetAttrs.includes(p.name)) {
- const url = p.value.content;
- if (!isExcludedUrl(url)) {
- if (node.tag === 'link' && isCSSRequest(url)) {
- // CSS references, convert to import
- js += `\nimport ${JSON.stringify(url)}`;
- shouldRemove = true;
- }
- else {
- assetUrls.push(p);
- }
- }
- else if (checkPublicFile(url, config)) {
- s.overwrite(p.value.loc.start.offset, p.value.loc.end.offset, `"${config.base + url.slice(1)}"`);
- }
- }
- }
- }
- if (shouldRemove) {
- // remove the script tag from the html. we are going to inject new
- // ones in the end.
- s.remove(node.loc.start.offset, node.loc.end.offset);
- }
- });
- isAsyncScriptMap.get(config).set(id, everyScriptIsAsync);
- if (someScriptsAreAsync && someScriptsAreDefer) {
- config.logger.warn(`\nMixed async and defer script modules in ${id}, output script will fallback to defer. Every script, including inline ones, need to be marked as async for your output script to be async.`);
- }
- // for each encountered asset url, rewrite original html so that it
- // references the post-build location.
- for (const attr of assetUrls) {
- const value = attr.value;
- try {
- const url = attr.name === 'srcset'
- ? await processSrcSet(value.content, ({ url }) => urlToBuiltUrl(url, id, config, this))
- : await urlToBuiltUrl(value.content, id, config, this);
- s.overwrite(value.loc.start.offset, value.loc.end.offset, `"${url}"`);
- }
- catch (e) {
- // #1885 preload may be pointing to urls that do not exist
- // locally on disk
- if (e.code !== 'ENOENT') {
- throw e;
- }
- }
- }
- processedHtml.set(id, s.toString());
- // inject module preload polyfill only when configured and needed
- if (config.build.polyfillModulePreload &&
- (someScriptsAreAsync || someScriptsAreDefer)) {
- js = `import "${modulePreloadPolyfillId}";\n${js}`;
- }
- return js;
- }
- },
- async generateBundle(options, bundle) {
- const analyzedChunk = new Map();
- const getImportedChunks = (chunk, seen = new Set()) => {
- const chunks = [];
- chunk.imports.forEach((file) => {
- const importee = bundle[file];
- if ((importee === null || importee === void 0 ? void 0 : importee.type) === 'chunk' && !seen.has(file)) {
- seen.add(file);
- // post-order traversal
- chunks.push(...getImportedChunks(importee, seen));
- chunks.push(importee);
- }
- });
- return chunks;
- };
- const toScriptTag = (chunk, isAsync) => ({
- tag: 'script',
- attrs: {
- ...(isAsync ? { async: true } : {}),
- type: 'module',
- crossorigin: true,
- src: toPublicPath(chunk.fileName, config)
- }
- });
- const toPreloadTag = (chunk) => ({
- tag: 'link',
- attrs: {
- rel: 'modulepreload',
- href: toPublicPath(chunk.fileName, config)
- }
- });
- const getCssTagsForChunk = (chunk, seen = new Set()) => {
- const tags = [];
- if (!analyzedChunk.has(chunk)) {
- analyzedChunk.set(chunk, 1);
- chunk.imports.forEach((file) => {
- const importee = bundle[file];
- if ((importee === null || importee === void 0 ? void 0 : importee.type) === 'chunk') {
- tags.push(...getCssTagsForChunk(importee, seen));
- }
- });
- }
- const cssFiles = chunkToEmittedCssFileMap.get(chunk);
- if (cssFiles) {
- cssFiles.forEach((file) => {
- if (!seen.has(file)) {
- seen.add(file);
- tags.push({
- tag: 'link',
- attrs: {
- rel: 'stylesheet',
- href: toPublicPath(file, config)
- }
- });
- }
- });
- }
- return tags;
- };
- for (const [id, html] of processedHtml) {
- const isAsync = isAsyncScriptMap.get(config).get(id);
- // resolve asset url references
- let result = html.replace(assetUrlRE, (_, fileHash, postfix = '') => {
- return config.base + getAssetFilename(fileHash, config) + postfix;
- });
- // find corresponding entry chunk
- const chunk = Object.values(bundle).find((chunk) => chunk.type === 'chunk' &&
- chunk.isEntry &&
- chunk.facadeModuleId === id);
- let canInlineEntry = false;
- // inject chunk asset links
- if (chunk) {
- // an entry chunk can be inlined if
- // - it's an ES module (e.g. not generated by the legacy plugin)
- // - it contains no meaningful code other than import statements
- if (options.format === 'es' && isEntirelyImport(chunk.code)) {
- canInlineEntry = true;
- }
- // when not inlined, inject <script> for entry and modulepreload its dependencies
- // when inlined, discard entry chunk and inject <script> for everything in post-order
- const imports = getImportedChunks(chunk);
- const assetTags = canInlineEntry
- ? imports.map((chunk) => toScriptTag(chunk, isAsync))
- : [toScriptTag(chunk, isAsync), ...imports.map(toPreloadTag)];
- assetTags.push(...getCssTagsForChunk(chunk));
- result = injectToHead(result, assetTags);
- }
- // inject css link when cssCodeSplit is false
- if (!config.build.cssCodeSplit) {
- const cssChunk = Object.values(bundle).find((chunk) => chunk.type === 'asset' && chunk.name === 'style.css');
- if (cssChunk) {
- result = injectToHead(result, [
- {
- tag: 'link',
- attrs: {
- rel: 'stylesheet',
- href: toPublicPath(cssChunk.fileName, config)
- }
- }
- ]);
- }
- }
- const shortEmitName = path__default.posix.relative(config.root, id);
- result = await applyHtmlTransforms(result, postHooks, {
- path: '/' + shortEmitName,
- filename: id,
- bundle,
- chunk
- });
- if (chunk && canInlineEntry) {
- // all imports from entry have been inlined to html, prevent rollup from outputting it
- delete bundle[chunk.fileName];
- }
- this.emitFile({
- type: 'asset',
- fileName: shortEmitName,
- source: result
- });
- }
- }
- };
-}
-function resolveHtmlTransforms(plugins) {
- const preHooks = [];
- const postHooks = [];
- for (const plugin of plugins) {
- const hook = plugin.transformIndexHtml;
- if (hook) {
- if (typeof hook === 'function') {
- postHooks.push(hook);
- }
- else if (hook.enforce === 'pre') {
- preHooks.push(hook.transform);
- }
- else {
- postHooks.push(hook.transform);
- }
- }
- }
- return [preHooks, postHooks];
-}
-async function applyHtmlTransforms(html, hooks, ctx) {
- const headTags = [];
- const headPrependTags = [];
- const bodyTags = [];
- const bodyPrependTags = [];
- for (const hook of hooks) {
- const res = await hook(html, ctx);
- if (!res) {
- continue;
- }
- if (typeof res === 'string') {
- html = res;
- }
- else {
- let tags;
- if (Array.isArray(res)) {
- tags = res;
- }
- else {
- html = res.html || html;
- tags = res.tags;
- }
- for (const tag of tags) {
- if (tag.injectTo === 'body') {
- bodyTags.push(tag);
- }
- else if (tag.injectTo === 'body-prepend') {
- bodyPrependTags.push(tag);
- }
- else if (tag.injectTo === 'head') {
- headTags.push(tag);
- }
- else {
- headPrependTags.push(tag);
- }
- }
- }
- }
- // inject tags
- if (headPrependTags.length) {
- html = injectToHead(html, headPrependTags, true);
- }
- if (headTags.length) {
- html = injectToHead(html, headTags);
- }
- if (bodyPrependTags.length) {
- html = injectToBody(html, bodyPrependTags, true);
- }
- if (bodyTags.length) {
- html = injectToBody(html, bodyTags);
- }
- return html;
-}
-const importRE = /\bimport\s*("[^"]*[^\\]"|'[^']*[^\\]');*/g;
-const commentRE$1 = /\/\*[\s\S]*?\*\/|\/\/.*$/gm;
-function isEntirelyImport(code) {
- // only consider "side-effect" imports, which match <script type=module> semantics exactly
- // the regexes will remove too little in some exotic cases, but false-negatives are alright
- return !code.replace(importRE, '').replace(commentRE$1, '').trim().length;
-}
-function toPublicPath(filename, config) {
- return isExternalUrl(filename) ? filename : config.base + filename;
-}
-const headInjectRE = /([ \t]*)<\/head>/;
-const headPrependInjectRE = /([ \t]*)<head[^>]*>/;
-const doctypePrependInjectRE = /<!doctype html>/i;
-function injectToHead(html, tags, prepend = false) {
- if (prepend) {
- // inject after head or doctype
- if (headPrependInjectRE.test(html)) {
- return html.replace(headPrependInjectRE, (match, p1) => `${match}\n${serializeTags(tags, incrementIndent(p1))}`);
- }
- else if (doctypePrependInjectRE.test(html)) {
- return html.replace(doctypePrependInjectRE, `$&\n${serializeTags(tags)}`);
- }
- }
- else {
- // inject before head close
- if (headInjectRE.test(html)) {
- // respect indentation of head tag
- return html.replace(headInjectRE, (match, p1) => `${serializeTags(tags, incrementIndent(p1))}${match}`);
- }
- }
- // if no <head> tag is present, just prepend
- return serializeTags(tags) + html;
-}
-const bodyInjectRE = /([ \t]*)<\/body>/;
-const bodyPrependInjectRE = /([ \t]*)<body[^>]*>/;
-function injectToBody(html, tags, prepend = false) {
- if (prepend) {
- // inject after body open
- if (bodyPrependInjectRE.test(html)) {
- return html.replace(bodyPrependInjectRE, (match, p1) => `${match}\n${serializeTags(tags, incrementIndent(p1))}`);
- }
- // if no body, prepend
- return serializeTags(tags) + html;
- }
- else {
- // inject before body close
- if (bodyInjectRE.test(html)) {
- return html.replace(bodyInjectRE, (match, p1) => `${serializeTags(tags, incrementIndent(p1))}${match}`);
- }
- // if no body, append
- return html + `\n` + serializeTags(tags);
- }
-}
-const unaryTags = new Set(['link', 'meta', 'base']);
-function serializeTag({ tag, attrs, children }, indent = '') {
- if (unaryTags.has(tag)) {
- return `<${tag}${serializeAttrs(attrs)}>`;
- }
- else {
- return `<${tag}${serializeAttrs(attrs)}>${serializeTags(children, incrementIndent(indent))}</${tag}>`;
- }
-}
-function serializeTags(tags, indent = '') {
- if (typeof tags === 'string') {
- return tags;
- }
- else if (tags && tags.length) {
- return tags.map((tag) => `${indent}${serializeTag(tag, indent)}\n`).join('');
- }
- return '';
-}
-function serializeAttrs(attrs) {
- let res = '';
- for (const key in attrs) {
- if (typeof attrs[key] === 'boolean') {
- res += attrs[key] ? ` ${key}` : ``;
- }
- else {
- res += ` ${key}=${JSON.stringify(attrs[key])}`;
- }
- }
- return res;
-}
-function incrementIndent(indent = '') {
- return `${indent}${indent[0] === '\t' ? '\t' : ' '}`;
-}
-
-var __defProp = Object.defineProperty;
-var __defProps = Object.defineProperties;
-var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols = Object.getOwnPropertySymbols;
-var __hasOwnProp = Object.prototype.hasOwnProperty;
-var __propIsEnum = Object.prototype.propertyIsEnumerable;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues = (a, b) => {
- for (var prop in b || (b = {}))
- if (__hasOwnProp.call(b, prop))
- __defNormalProp(a, prop, b[prop]);
- if (__getOwnPropSymbols)
- for (var prop of __getOwnPropSymbols(b)) {
- if (__propIsEnum.call(b, prop))
- __defNormalProp(a, prop, b[prop]);
- }
- return a;
-};
-var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
-typeof require !== "undefined" ? require : (x) => {
- throw new Error('Dynamic require of "' + x + '" is not supported');
-};
-async function find(filename) {
- let dir = path__default.dirname(path__default.resolve(filename));
- while (dir) {
- const tsconfig = await tsconfigInDir(dir);
- if (tsconfig) {
- return tsconfig;
- } else {
- const parent = path__default.dirname(dir);
- if (parent === dir) {
- break;
- } else {
- dir = parent;
- }
- }
- }
- throw new Error(`no tsconfig file found for ${filename}`);
-}
-async function tsconfigInDir(dir) {
- const tsconfig = path__default.join(dir, "tsconfig.json");
- try {
- const stat = await fs$r.promises.stat(tsconfig);
- if (stat.isFile() || stat.isFIFO()) {
- return tsconfig;
- }
- } catch (e) {
- if (e.code !== "ENOENT") {
- throw e;
- }
- }
-}
-
-// src/to-json.ts
-function toJson(tsconfigJson) {
- const stripped = stripDanglingComma(stripJsonComments(stripBom(tsconfigJson)));
- if (stripped.trim() === "") {
- return "{}";
- } else {
- return stripped;
- }
-}
-function stripDanglingComma(pseudoJson) {
- let insideString = false;
- let offset = 0;
- let result = "";
- let danglingCommaPos = null;
- for (let i = 0; i < pseudoJson.length; i++) {
- const currentCharacter = pseudoJson[i];
- if (currentCharacter === '"') {
- const escaped = isEscaped(pseudoJson, i);
- if (!escaped) {
- insideString = !insideString;
- }
- }
- if (insideString) {
- danglingCommaPos = null;
- continue;
- }
- if (currentCharacter === ",") {
- danglingCommaPos = i;
- continue;
- }
- if (danglingCommaPos) {
- if (currentCharacter === "}" || currentCharacter === "]") {
- result += pseudoJson.slice(offset, danglingCommaPos) + " ";
- offset = danglingCommaPos + 1;
- danglingCommaPos = null;
- } else if (!currentCharacter.match(/\s/)) {
- danglingCommaPos = null;
- }
- }
- }
- return result + pseudoJson.substring(offset);
-}
-function isEscaped(jsonString, quotePosition) {
- let index = quotePosition - 1;
- let backslashCount = 0;
- while (jsonString[index] === "\\") {
- index -= 1;
- backslashCount += 1;
- }
- return Boolean(backslashCount % 2);
-}
-function strip(string, start, end) {
- return string.slice(start, end).replace(/\S/g, " ");
-}
-var singleComment = Symbol("singleComment");
-var multiComment = Symbol("multiComment");
-function stripJsonComments(jsonString) {
- let isInsideString = false;
- let isInsideComment = false;
- let offset = 0;
- let result = "";
- for (let index = 0; index < jsonString.length; index++) {
- const currentCharacter = jsonString[index];
- const nextCharacter = jsonString[index + 1];
- if (!isInsideComment && currentCharacter === '"') {
- const escaped = isEscaped(jsonString, index);
- if (!escaped) {
- isInsideString = !isInsideString;
- }
- }
- if (isInsideString) {
- continue;
- }
- if (!isInsideComment && currentCharacter + nextCharacter === "//") {
- result += jsonString.slice(offset, index);
- offset = index;
- isInsideComment = singleComment;
- index++;
- } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === "\r\n") {
- index++;
- isInsideComment = false;
- result += strip(jsonString, offset, index);
- offset = index;
- } else if (isInsideComment === singleComment && currentCharacter === "\n") {
- isInsideComment = false;
- result += strip(jsonString, offset, index);
- offset = index;
- } else if (!isInsideComment && currentCharacter + nextCharacter === "/*") {
- result += jsonString.slice(offset, index);
- offset = index;
- isInsideComment = multiComment;
- index++;
- } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === "*/") {
- index++;
- isInsideComment = false;
- result += strip(jsonString, offset, index + 1);
- offset = index + 1;
- }
- }
- return result + (isInsideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset));
-}
-function stripBom(string) {
- if (string.charCodeAt(0) === 65279) {
- return string.slice(1);
- }
- return string;
-}
-var POSIX_SEP_RE = new RegExp("\\" + path__default.posix.sep, "g");
-var NATIVE_SEP_RE = new RegExp("\\" + path__default.sep, "g");
-var PATTERN_REGEX_CACHE = new Map();
-var GLOB_ALL_PATTERN = `**/*`;
-new Function("path", "return import(path).then(m => m.default)");
-async function resolveTSConfig(filename) {
- const basename = path__default.basename(filename);
- if (basename !== "tsconfig.json") {
- return;
- }
- const tsconfig = path__default.resolve(filename);
- try {
- const stat = await fs$r.promises.stat(tsconfig);
- if (stat.isFile() || stat.isFIFO()) {
- return tsconfig;
- }
- } catch (e) {
- if (e.code !== "ENOENT") {
- throw e;
- }
- }
- throw new Error(`no tsconfig file found for ${filename}`);
-}
-function posix2native(filename) {
- return path__default.posix.sep !== path__default.sep && filename.includes(path__default.posix.sep) ? filename.replace(POSIX_SEP_RE, path__default.sep) : filename;
-}
-function native2posix(filename) {
- return path__default.posix.sep !== path__default.sep && filename.includes(path__default.sep) ? filename.replace(NATIVE_SEP_RE, path__default.posix.sep) : filename;
-}
-function resolve2posix(dir, filename) {
- if (path__default.sep === path__default.posix.sep) {
- return dir ? path__default.resolve(dir, filename) : path__default.resolve(filename);
- }
- return native2posix(dir ? path__default.resolve(posix2native(dir), posix2native(filename)) : path__default.resolve(posix2native(filename)));
-}
-function resolveReferencedTSConfigFiles(result) {
- const dir = path__default.dirname(result.tsconfigFile);
- return result.tsconfig.references.map((ref) => {
- const refPath = ref.path.endsWith(".json") ? ref.path : path__default.join(ref.path, "tsconfig.json");
- return resolve2posix(dir, refPath);
- });
-}
-function resolveSolutionTSConfig(filename, result) {
- if (result.referenced && [".ts", ".tsx"].some((ext) => filename.endsWith(ext)) && !isIncluded(filename, result)) {
- const solutionTSConfig = result.referenced.find((referenced) => isIncluded(filename, referenced));
- if (solutionTSConfig) {
- return __spreadProps(__spreadValues({}, solutionTSConfig), {
- solution: result
- });
- }
- }
- return result;
-}
-function isIncluded(filename, result) {
- const dir = native2posix(path__default.dirname(result.tsconfigFile));
- const files = (result.tsconfig.files || []).map((file) => resolve2posix(dir, file));
- const absoluteFilename = resolve2posix(null, filename);
- if (files.includes(filename)) {
- return true;
- }
- const isIncluded2 = isGlobMatch(absoluteFilename, dir, result.tsconfig.include || (result.tsconfig.files ? [] : [GLOB_ALL_PATTERN]));
- if (isIncluded2) {
- const isExcluded = isGlobMatch(absoluteFilename, dir, result.tsconfig.exclude || []);
- return !isExcluded;
- }
- return false;
-}
-function isGlobMatch(filename, dir, patterns) {
- return patterns.some((pattern) => {
- let lastWildcardIndex = pattern.length;
- let hasWildcard = false;
- for (let i = pattern.length - 1; i > -1; i--) {
- if (pattern[i] === "*" || pattern[i] === "?") {
- lastWildcardIndex = i;
- hasWildcard = true;
- break;
- }
- }
- if (lastWildcardIndex < pattern.length - 1 && !filename.endsWith(pattern.slice(lastWildcardIndex + 1))) {
- return false;
- }
- if (pattern.endsWith("*") && !(filename.endsWith(".ts") || filename.endsWith(".tsx"))) {
- return false;
- }
- if (pattern === GLOB_ALL_PATTERN) {
- return filename.startsWith(`${dir}/`);
- }
- const resolvedPattern = resolve2posix(dir, pattern);
- let firstWildcardIndex = -1;
- for (let i = 0; i < resolvedPattern.length; i++) {
- if (resolvedPattern[i] === "*" || resolvedPattern[i] === "?") {
- firstWildcardIndex = i;
- hasWildcard = true;
- break;
- }
- }
- if (firstWildcardIndex > 1 && !filename.startsWith(resolvedPattern.slice(0, firstWildcardIndex - 1))) {
- return false;
- }
- if (!hasWildcard) {
- return filename === resolvedPattern;
- }
- if (PATTERN_REGEX_CACHE.has(resolvedPattern)) {
- return PATTERN_REGEX_CACHE.get(resolvedPattern).test(filename);
- }
- const regex = pattern2regex(resolvedPattern);
- PATTERN_REGEX_CACHE.set(resolvedPattern, regex);
- return regex.test(filename);
- });
-}
-function pattern2regex(resolvedPattern) {
- let regexStr = "^";
- for (let i = 0; i < resolvedPattern.length; i++) {
- const char = resolvedPattern[i];
- if (char === "?") {
- regexStr += "[^\\/]";
- continue;
- }
- if (char === "*") {
- if (resolvedPattern[i + 1] === "*" && resolvedPattern[i + 2] === "/") {
- i += 2;
- regexStr += "(?:[^\\/]*\\/)*";
- continue;
- }
- regexStr += "[^\\/]*";
- continue;
- }
- if ("/.+^${}()|[]\\".includes(char)) {
- regexStr += `\\`;
- }
- regexStr += char;
- }
- if (resolvedPattern.endsWith("*")) {
- regexStr += "\\.tsx?";
- }
- regexStr += "$";
- return new RegExp(regexStr);
-}
-
-// src/parse.ts
-async function parse$e(filename, options) {
- const cache = options == null ? void 0 : options.cache;
- if (cache == null ? void 0 : cache.has(filename)) {
- return cache.get(filename);
- }
- let tsconfigFile;
- if (options == null ? void 0 : options.resolveWithEmptyIfConfigNotFound) {
- try {
- tsconfigFile = await resolveTSConfig(filename) || await find(filename);
- } catch (e) {
- const notFoundResult = {
- tsconfigFile: "no_tsconfig_file_found",
- tsconfig: {}
- };
- cache == null ? void 0 : cache.set(filename, notFoundResult);
- return notFoundResult;
- }
- } else {
- tsconfigFile = await resolveTSConfig(filename) || await find(filename);
- }
- let result;
- if (cache == null ? void 0 : cache.has(tsconfigFile)) {
- result = cache.get(tsconfigFile);
- } else {
- result = await parseFile$1(tsconfigFile, cache);
- await Promise.all([parseExtends(result, cache), parseReferences(result, cache)]);
- cache == null ? void 0 : cache.set(tsconfigFile, result);
- }
- result = resolveSolutionTSConfig(filename, result);
- cache == null ? void 0 : cache.set(filename, result);
- return result;
-}
-async function parseFile$1(tsconfigFile, cache) {
- if (cache == null ? void 0 : cache.has(tsconfigFile)) {
- return cache.get(tsconfigFile);
- }
- try {
- const tsconfigJson = await fs$r.promises.readFile(tsconfigFile, "utf-8");
- const json = toJson(tsconfigJson);
- const result = {
- tsconfigFile,
- tsconfig: normalizeTSConfig(JSON.parse(json), path__default.dirname(tsconfigFile))
- };
- cache == null ? void 0 : cache.set(tsconfigFile, result);
- return result;
- } catch (e) {
- throw new TSConfckParseError(`parsing ${tsconfigFile} failed: ${e}`, "PARSE_FILE", tsconfigFile, e);
- }
-}
-function normalizeTSConfig(tsconfig, dir) {
- var _a;
- if (((_a = tsconfig.compilerOptions) == null ? void 0 : _a.baseUrl) && !path__default.isAbsolute(tsconfig.compilerOptions.baseUrl)) {
- tsconfig.compilerOptions.baseUrl = resolve2posix(dir, tsconfig.compilerOptions.baseUrl);
- }
- return tsconfig;
-}
-async function parseReferences(result, cache) {
- if (!result.tsconfig.references) {
- return;
- }
- const referencedFiles = resolveReferencedTSConfigFiles(result);
- const referenced = await Promise.all(referencedFiles.map((file) => parseFile$1(file, cache)));
- await Promise.all(referenced.map((ref) => parseExtends(ref, cache)));
- result.referenced = referenced;
-}
-async function parseExtends(result, cache) {
- if (!result.tsconfig.extends) {
- return;
- }
- const extended = [
- { tsconfigFile: result.tsconfigFile, tsconfig: JSON.parse(JSON.stringify(result.tsconfig)) }
- ];
- while (extended[extended.length - 1].tsconfig.extends) {
- const extending = extended[extended.length - 1];
- const extendedTSConfigFile = resolveExtends(extending.tsconfig.extends, extending.tsconfigFile);
- if (extended.some((x) => x.tsconfigFile === extendedTSConfigFile)) {
- const circle = extended.concat({ tsconfigFile: extendedTSConfigFile, tsconfig: null }).map((e) => e.tsconfigFile).join(" -> ");
- throw new TSConfckParseError(`Circular dependency in "extends": ${circle}`, "EXTENDS_CIRCULAR", result.tsconfigFile);
- }
- extended.push(await parseFile$1(extendedTSConfigFile, cache));
- }
- result.extended = extended;
- for (const ext of result.extended.slice(1)) {
- extendTSConfig(result, ext);
- }
-}
-function resolveExtends(extended, from) {
- try {
- return require$$0$7.createRequire(from).resolve(extended);
- } catch (e) {
- throw new TSConfckParseError(`failed to resolve "extends":"${extended}" in ${from}`, "EXTENDS_RESOLVE", from, e);
- }
-}
-var EXTENDABLE_KEYS = [
- "compilerOptions",
- "files",
- "include",
- "exclude",
- "watchOptions",
- "compileOnSave",
- "typeAcquisition",
- "buildOptions"
-];
-function extendTSConfig(extending, extended) {
- const extendingConfig = extending.tsconfig;
- const extendedConfig = extended.tsconfig;
- const relativePath = native2posix(path__default.relative(path__default.dirname(extending.tsconfigFile), path__default.dirname(extended.tsconfigFile)));
- for (const key of Object.keys(extendedConfig).filter((key2) => EXTENDABLE_KEYS.includes(key2))) {
- if (key === "compilerOptions") {
- if (!extendingConfig.compilerOptions) {
- extendingConfig.compilerOptions = {};
- }
- for (const option of Object.keys(extendedConfig.compilerOptions)) {
- if (Object.prototype.hasOwnProperty.call(extendingConfig.compilerOptions, option)) {
- continue;
- }
- extendingConfig.compilerOptions[option] = rebaseRelative(option, extendedConfig.compilerOptions[option], relativePath);
- }
- } else if (extendingConfig[key] === void 0) {
- if (key === "watchOptions") {
- extendingConfig.watchOptions = {};
- for (const option of Object.keys(extendedConfig.watchOptions)) {
- extendingConfig.watchOptions[option] = rebaseRelative(option, extendedConfig.watchOptions[option], relativePath);
- }
- } else {
- extendingConfig[key] = rebaseRelative(key, extendedConfig[key], relativePath);
- }
- }
- }
-}
-var REBASE_KEYS = [
- "files",
- "include",
- "exclude",
- "baseUrl",
- "rootDir",
- "rootDirs",
- "typeRoots",
- "outDir",
- "outFile",
- "declarationDir",
- "excludeDirectories",
- "excludeFiles"
-];
-function rebaseRelative(key, value, prependPath) {
- if (!REBASE_KEYS.includes(key)) {
- return value;
- }
- if (Array.isArray(value)) {
- return value.map((x) => rebasePath(x, prependPath));
- } else {
- return rebasePath(value, prependPath);
- }
-}
-function rebasePath(value, prependPath) {
- if (path__default.isAbsolute(value)) {
- return value;
- } else {
- return path__default.posix.normalize(path__default.posix.join(prependPath, value));
- }
-}
-var TSConfckParseError = class extends Error {
- constructor(message, code, tsconfigFile, cause) {
- super(message);
- Object.setPrototypeOf(this, TSConfckParseError.prototype);
- this.name = TSConfckParseError.name;
- this.code = code;
- this.cause = cause;
- this.tsconfigFile = tsconfigFile;
- }
-};
-
-const debug$e = createDebugger('vite:esbuild');
-let server;
-async function transformWithEsbuild(code, filename, options, inMap) {
- var _a, _b, _c;
- let loader = options === null || options === void 0 ? void 0 : options.loader;
- if (!loader) {
- // if the id ends with a valid ext, use it (e.g. vue blocks)
- // otherwise, cleanup the query before checking the ext
- const ext = path__default
- .extname(/\.\w+$/.test(filename) ? filename : cleanUrl(filename))
- .slice(1);
- if (ext === 'cjs' || ext === 'mjs') {
- loader = 'js';
- }
- else {
- loader = ext;
- }
- }
- let tsconfigRaw = options === null || options === void 0 ? void 0 : options.tsconfigRaw;
- // if options provide tsconfigraw in string, it takes highest precedence
- if (typeof tsconfigRaw !== 'string') {
- // these fields would affect the compilation result
- // https://esbuild.github.io/content-types/#tsconfig-json
- const meaningfulFields = [
- 'jsxFactory',
- 'jsxFragmentFactory',
- 'useDefineForClassFields',
- 'importsNotUsedAsValues'
- ];
- const compilerOptionsForFile = {};
- if (loader === 'ts' || loader === 'tsx') {
- const loadedTsconfig = await loadTsconfigJsonForFile(filename);
- const loadedCompilerOptions = (_a = loadedTsconfig.compilerOptions) !== null && _a !== void 0 ? _a : {};
- for (const field of meaningfulFields) {
- if (field in loadedCompilerOptions) {
- // @ts-ignore TypeScript can't tell they are of the same type
- compilerOptionsForFile[field] = loadedCompilerOptions[field];
- }
- }
- // align with TypeScript 4.3
- // https://github.com/microsoft/TypeScript/pull/42663
- if (((_b = loadedCompilerOptions.target) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'esnext') {
- compilerOptionsForFile.useDefineForClassFields =
- (_c = loadedCompilerOptions.useDefineForClassFields) !== null && _c !== void 0 ? _c : true;
- }
- }
- tsconfigRaw = {
- ...tsconfigRaw,
- compilerOptions: {
- ...compilerOptionsForFile,
- ...tsconfigRaw === null || tsconfigRaw === void 0 ? void 0 : tsconfigRaw.compilerOptions
- }
- };
- }
- const resolvedOptions = {
- sourcemap: true,
- // ensure source file name contains full query
- sourcefile: filename,
- ...options,
- loader,
- tsconfigRaw
- };
- delete resolvedOptions.include;
- delete resolvedOptions.exclude;
- delete resolvedOptions.jsxInject;
- try {
- const result = await esbuild.transform(code, resolvedOptions);
- let map;
- if (inMap && resolvedOptions.sourcemap) {
- const nextMap = JSON.parse(result.map);
- nextMap.sourcesContent = [];
- map = combineSourcemaps(filename, [
- nextMap,
- inMap
- ]);
- }
- else {
- map = resolvedOptions.sourcemap
- ? JSON.parse(result.map)
- : { mappings: '' };
- }
- if (Array.isArray(map.sources)) {
- map.sources = map.sources.map((it) => toUpperCaseDriveLetter(it));
- }
- return {
- ...result,
- map
- };
- }
- catch (e) {
- debug$e(`esbuild error with options used: `, resolvedOptions);
- // patch error information
- if (e.errors) {
- e.frame = '';
- e.errors.forEach((m) => {
- e.frame += `\n` + prettifyMessage(m, code);
- });
- e.loc = e.errors[0].location;
- }
- throw e;
- }
-}
-function esbuildPlugin(options = {}) {
- const filter = createFilter$1(options.include || /\.(tsx?|jsx)$/, options.exclude || /\.js$/);
- return {
- name: 'vite:esbuild',
- configureServer(_server) {
- server = _server;
- server.watcher
- .on('add', reloadOnTsconfigChange)
- .on('change', reloadOnTsconfigChange)
- .on('unlink', reloadOnTsconfigChange);
- },
- async transform(code, id) {
- if (filter(id) || filter(cleanUrl(id))) {
- const result = await transformWithEsbuild(code, id, options);
- if (result.warnings.length) {
- result.warnings.forEach((m) => {
- this.warn(prettifyMessage(m, code));
- });
- }
- if (options.jsxInject && /\.(?:j|t)sx\b/.test(id)) {
- result.code = options.jsxInject + ';' + result.code;
- }
- return {
- code: result.code,
- map: result.map
- };
- }
- }
- };
-}
-const rollupToEsbuildFormatMap = {
- es: 'esm',
- cjs: 'cjs',
- iife: 'iife'
-};
-const buildEsbuildPlugin = (config) => {
- return {
- name: 'vite:esbuild-transpile',
- async renderChunk(code, chunk, opts) {
- // @ts-ignore injected by @vitejs/plugin-legacy
- if (opts.__vite_skip_esbuild__) {
- return null;
- }
- const target = config.build.target;
- const minify = config.build.minify === 'esbuild' &&
- // Do not minify ES lib output since that would remove pure annotations
- // and break tree-shaking
- // https://github.com/vuejs/vue-next/issues/2860#issuecomment-926882793
- !(config.build.lib && opts.format === 'es');
- if ((!target || target === 'esnext') && !minify) {
- return null;
- }
- const res = await transformWithEsbuild(code, chunk.fileName, {
- target: target || undefined,
- ...(minify
- ? {
- minify,
- treeShaking: true,
- format: rollupToEsbuildFormatMap[opts.format]
- }
- : undefined)
- });
- return res;
- }
- };
-};
-function prettifyMessage(m, code) {
- let res = source.yellow(m.text);
- if (m.location) {
- const lines = code.split(/\r?\n/g);
- const line = Number(m.location.line);
- const column = Number(m.location.column);
- const offset = lines
- .slice(0, line - 1)
- .map((l) => l.length)
- .reduce((total, l) => total + l + 1, 0) + column;
- res += `\n` + generateCodeFrame(code, offset, offset + 1);
- }
- return res + `\n`;
-}
-const tsconfigCache = new Map();
-async function loadTsconfigJsonForFile(filename) {
- try {
- const result = await parse$e(filename, {
- cache: tsconfigCache,
- resolveWithEmptyIfConfigNotFound: true
- });
- // tsconfig could be out of root, make sure it is watched on dev
- if (server && result.tsconfigFile !== 'no_tsconfig_file_found') {
- ensureWatchedFile(server.watcher, result.tsconfigFile, server.config.root);
- }
- return result.tsconfig;
- }
- catch (e) {
- if (e instanceof TSConfckParseError) {
- // tsconfig could be out of root, make sure it is watched on dev
- if (server && e.tsconfigFile) {
- ensureWatchedFile(server.watcher, e.tsconfigFile, server.config.root);
- }
- }
- throw e;
- }
-}
-function reloadOnTsconfigChange(changedFile) {
- // any tsconfig.json that's added in the workspace could be closer to a code file than a previously cached one
- // any json file in the tsconfig cache could have been used to compile ts
- if (path__default.basename(changedFile) === 'tsconfig.json' ||
- (changedFile.endsWith('.json') && tsconfigCache.has(changedFile))) {
- server.config.logger.info(`changed tsconfig file detected: ${changedFile} - Clearing cache and forcing full-reload to ensure typescript is compiled with updated config values.`, { clear: server.config.clearScreen, timestamp: true });
- // clear tsconfig cache so that recompile works with up2date configs
- tsconfigCache.clear();
- // clear module graph to remove code compiled with outdated config
- server.moduleGraph.invalidateAll();
- // force full reload
- server.ws.send({
- type: 'full-reload',
- path: '*'
- });
- }
-}
-
-var dist = {};
-
-var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(dist, "__esModule", { value: true });
-var Worker_1 = dist.Worker = void 0;
-const os_1 = __importDefault(require$$0__default$1);
-const worker_threads_1 = require$$1__default;
-class Worker {
- constructor(fn, options = {}) {
- this.code = genWorkerCode(fn);
- this.max = options.max || Math.max(1, os_1.default.cpus().length - 1);
- this.pool = [];
- this.idlePool = [];
- this.queue = [];
- }
- async run(...args) {
- const worker = await this._getAvailableWorker();
- return new Promise((resolve, reject) => {
- worker.currentResolve = resolve;
- worker.currentReject = reject;
- worker.postMessage(args);
- });
- }
- stop() {
- this.pool.forEach((w) => w.unref());
- this.queue.forEach(([_, reject]) => reject(new Error('Main worker pool stopped before a worker was available.')));
- this.pool = [];
- this.idlePool = [];
- this.queue = [];
- }
- async _getAvailableWorker() {
- // has idle one?
- if (this.idlePool.length) {
- return this.idlePool.shift();
- }
- // can spawn more?
- if (this.pool.length < this.max) {
- const worker = new worker_threads_1.Worker(this.code, { eval: true });
- worker.on('message', (res) => {
- worker.currentResolve && worker.currentResolve(res);
- worker.currentResolve = null;
- this._assignDoneWorker(worker);
- });
- worker.on('error', (err) => {
- worker.currentReject && worker.currentReject(err);
- worker.currentReject = null;
- });
- worker.on('exit', (code) => {
- const i = this.pool.indexOf(worker);
- if (i > -1)
- this.pool.splice(i, 1);
- if (code !== 0 && worker.currentReject) {
- worker.currentReject(new Error(`Wroker stopped with non-0 exit code ${code}`));
- worker.currentReject = null;
- }
- });
- this.pool.push(worker);
- return worker;
- }
- // no one is available, we have to wait
- let resolve;
- let reject;
- const onWorkerAvailablePromise = new Promise((r, rj) => {
- resolve = r;
- reject = rj;
- });
- this.queue.push([resolve, reject]);
- return onWorkerAvailablePromise;
- }
- _assignDoneWorker(worker) {
- // someone's waiting already?
- if (this.queue.length) {
- const [resolve] = this.queue.shift();
- resolve(worker);
- return;
- }
- // take a rest.
- this.idlePool.push(worker);
- }
-}
-Worker_1 = dist.Worker = Worker;
-function genWorkerCode(fn) {
- return `
-const doWork = ${fn.toString()}
-
-const { parentPort } = require('worker_threads')
-
-parentPort.on('message', async (args) => {
- const res = await doWork(...args)
- parentPort.postMessage(res)
-})
- `;
-}
-
-function terserPlugin(config) {
- const worker = new Worker_1((basedir, code, options) => {
- // when vite is linked, the worker thread won't share the same resolve
- // root with vite itself, so we have to pass in the basedir and resolve
- // terser first.
- // eslint-disable-next-line node/no-restricted-require
- const terserPath = require.resolve('../terser', {
- paths: [basedir]
- });
- return require(terserPath).minify(code, options);
- });
- return {
- name: 'vite:terser',
- async renderChunk(code, _chunk, outputOptions) {
- // Do not minify ES lib output since that would remove pure annotations
- // and break tree-shaking
- if (config.build.lib && outputOptions.format === 'es') {
- return null;
- }
- const res = await worker.run(__dirname, code, {
- safari10: true,
- ...config.build.terserOptions,
- sourceMap: !!outputOptions.sourcemap,
- module: outputOptions.format.startsWith('es'),
- toplevel: outputOptions.format === 'cjs'
- });
- return {
- code: res.code,
- map: res.map
- };
- },
- closeBundle() {
- worker.stop();
- }
- };
-}
-
-function manifestPlugin(config) {
- const manifest = {};
- let outputCount;
- return {
- name: 'vite:manifest',
- buildStart() {
- outputCount = 0;
- },
- generateBundle({ format }, bundle) {
- var _a;
- function getChunkName(chunk) {
- if (chunk.facadeModuleId) {
- let name = normalizePath$4(path__default.relative(config.root, chunk.facadeModuleId));
- if (format === 'system' && !chunk.name.includes('-legacy')) {
- const ext = path__default.extname(name);
- name = name.slice(0, -ext.length) + `-legacy` + ext;
- }
- return name;
- }
- else {
- return `_` + path__default.basename(chunk.fileName);
- }
- }
- function getInternalImports(imports) {
- const filteredImports = [];
- for (const file of imports) {
- if (bundle[file] === undefined) {
- continue;
- }
- filteredImports.push(getChunkName(bundle[file]));
- }
- return filteredImports;
- }
- function createChunk(chunk) {
- const manifestChunk = {
- file: chunk.fileName
- };
- if (chunk.facadeModuleId) {
- manifestChunk.src = getChunkName(chunk);
- }
- if (chunk.isEntry) {
- manifestChunk.isEntry = true;
- }
- if (chunk.isDynamicEntry) {
- manifestChunk.isDynamicEntry = true;
- }
- if (chunk.imports.length) {
- const internalImports = getInternalImports(chunk.imports);
- if (internalImports.length > 0) {
- manifestChunk.imports = internalImports;
- }
- }
- if (chunk.dynamicImports.length) {
- const internalImports = getInternalImports(chunk.dynamicImports);
- if (internalImports.length > 0) {
- manifestChunk.dynamicImports = internalImports;
- }
- }
- const cssFiles = chunkToEmittedCssFileMap.get(chunk);
- if (cssFiles) {
- manifestChunk.css = [...cssFiles];
- }
- const assets = chunkToEmittedAssetsMap.get(chunk);
- if (assets)
- [(manifestChunk.assets = [...assets])];
- return manifestChunk;
- }
- for (const file in bundle) {
- const chunk = bundle[file];
- if (chunk.type === 'chunk') {
- manifest[getChunkName(chunk)] = createChunk(chunk);
- }
- }
- outputCount++;
- const output = (_a = config.build.rollupOptions) === null || _a === void 0 ? void 0 : _a.output;
- const outputLength = Array.isArray(output) ? output.length : 1;
- if (outputCount >= outputLength) {
- this.emitFile({
- fileName: `manifest.json`,
- type: 'asset',
- source: JSON.stringify(manifest, null, 2)
- });
- }
- }
- };
-}
-
-function walk$2(ast, { enter, leave }) {
- return visit(ast, null, enter, leave);
-}
-
-let should_skip = false;
-let should_remove = false;
-let replacement = null;
-const context = {
- skip: () => should_skip = true,
- remove: () => should_remove = true,
- replace: (node) => replacement = node
-};
-
-function replace(parent, prop, index, node) {
- if (parent) {
- if (index !== null) {
- parent[prop][index] = node;
- } else {
- parent[prop] = node;
- }
- }
-}
-
-function remove(parent, prop, index) {
- if (parent) {
- if (index !== null) {
- parent[prop].splice(index, 1);
- } else {
- delete parent[prop];
- }
- }
-}
-
-function visit(
- node,
- parent,
- enter,
- leave,
- prop,
- index
-) {
- if (node) {
- if (enter) {
- const _should_skip = should_skip;
- const _should_remove = should_remove;
- const _replacement = replacement;
- should_skip = false;
- should_remove = false;
- replacement = null;
-
- enter.call(context, node, parent, prop, index);
-
- if (replacement) {
- node = replacement;
- replace(parent, prop, index, node);
- }
-
- if (should_remove) {
- remove(parent, prop, index);
- }
-
- const skipped = should_skip;
- const removed = should_remove;
-
- should_skip = _should_skip;
- should_remove = _should_remove;
- replacement = _replacement;
-
- if (skipped) return node;
- if (removed) return null;
- }
-
- for (const key in node) {
- const value = (node )[key];
-
- if (typeof value !== 'object') {
- continue;
- }
-
- else if (Array.isArray(value)) {
- for (let j = 0, k = 0; j < value.length; j += 1, k += 1) {
- if (value[j] !== null && typeof value[j].type === 'string') {
- if (!visit(value[j], node, enter, leave, key, k)) {
- // removed
- j--;
- }
- }
- }
- }
-
- else if (value !== null && typeof value.type === 'string') {
- visit(value, node, enter, leave, key, null);
- }
- }
-
- if (leave) {
- const _replacement = replacement;
- const _should_remove = should_remove;
- replacement = null;
- should_remove = false;
-
- leave.call(context, node, parent, prop, index);
-
- if (replacement) {
- node = replacement;
- replace(parent, prop, index, node);
- }
-
- if (should_remove) {
- remove(parent, prop, index);
- }
-
- const removed = should_remove;
-
- replacement = _replacement;
- should_remove = _should_remove;
-
- if (removed) return null;
- }
- }
-
- return node;
-}
-
-const extractors = {
- ArrayPattern(names, param) {
- for (const element of param.elements) {
- if (element)
- extractors[element.type](names, element);
- }
- },
- AssignmentPattern(names, param) {
- extractors[param.left.type](names, param.left);
- },
- Identifier(names, param) {
- names.push(param.name);
- },
- MemberExpression() { },
- ObjectPattern(names, param) {
- for (const prop of param.properties) {
- // @ts-ignore Typescript reports that this is not a valid type
- if (prop.type === 'RestElement') {
- extractors.RestElement(names, prop);
- }
- else {
- extractors[prop.value.type](names, prop.value);
- }
- }
- },
- RestElement(names, param) {
- extractors[param.argument.type](names, param.argument);
- }
-};
-const extractAssignedNames = function extractAssignedNames(param) {
- const names = [];
- extractors[param.type](names, param);
- return names;
-};
-
-const blockDeclarations = {
- const: true,
- let: true
-};
-class Scope$1 {
- constructor(options = {}) {
- this.parent = options.parent;
- this.isBlockScope = !!options.block;
- this.declarations = Object.create(null);
- if (options.params) {
- options.params.forEach((param) => {
- extractAssignedNames(param).forEach((name) => {
- this.declarations[name] = true;
- });
- });
- }
- }
- addDeclaration(node, isBlockDeclaration, isVar) {
- if (!isBlockDeclaration && this.isBlockScope) {
- // it's a `var` or function node, and this
- // is a block scope, so we need to go up
- this.parent.addDeclaration(node, isBlockDeclaration, isVar);
- }
- else if (node.id) {
- extractAssignedNames(node.id).forEach((name) => {
- this.declarations[name] = true;
- });
- }
- }
- contains(name) {
- return this.declarations[name] || (this.parent ? this.parent.contains(name) : false);
- }
-}
-const attachScopes = function attachScopes(ast, propertyName = 'scope') {
- let scope = new Scope$1();
- walk$2(ast, {
- enter(n, parent) {
- const node = n;
- // function foo () {...}
- // class Foo {...}
- if (/(Function|Class)Declaration/.test(node.type)) {
- scope.addDeclaration(node, false, false);
- }
- // var foo = 1
- if (node.type === 'VariableDeclaration') {
- const { kind } = node;
- const isBlockDeclaration = blockDeclarations[kind];
- // don't add const/let declarations in the body of a for loop #113
- const parentType = parent ? parent.type : '';
- if (!(isBlockDeclaration && /ForOfStatement/.test(parentType))) {
- node.declarations.forEach((declaration) => {
- scope.addDeclaration(declaration, isBlockDeclaration, true);
- });
- }
- }
- let newScope;
- // create new function scope
- if (/Function/.test(node.type)) {
- const func = node;
- newScope = new Scope$1({
- parent: scope,
- block: false,
- params: func.params
- });
- // named function expressions - the name is considered
- // part of the function's scope
- if (func.type === 'FunctionExpression' && func.id) {
- newScope.addDeclaration(func, false, false);
- }
- }
- // create new block scope
- if (node.type === 'BlockStatement' && !/Function/.test(parent.type)) {
- newScope = new Scope$1({
- parent: scope,
- block: true
- });
- }
- // catch clause has its own block scope
- if (node.type === 'CatchClause') {
- newScope = new Scope$1({
- parent: scope,
- params: node.param ? [node.param] : [],
- block: true
- });
- }
- if (newScope) {
- Object.defineProperty(node, propertyName, {
- value: newScope,
- configurable: true
- });
- scope = newScope;
- }
- },
- leave(n) {
- const node = n;
- if (node[propertyName])
- scope = scope.parent;
- }
- });
- return scope;
-};
-
-// Helper since Typescript can't detect readonly arrays with Array.isArray
-function isArray$2(arg) {
- return Array.isArray(arg);
-}
-function ensureArray(thing) {
- if (isArray$2(thing))
- return thing;
- if (thing == null)
- return [];
- return [thing];
-}
-
-function getMatcherString(id, resolutionBase) {
- if (resolutionBase === false) {
- return id;
- }
- // resolve('') is valid and will default to process.cwd()
- const basePath = path$t.resolve(resolutionBase || '')
- .split(path$t.sep)
- .join('/')
- // escape all possible (posix + win) path characters that might interfere with regex
- .replace(/[-^$*+?.()|[\]{}]/g, '\\$&');
- // Note that we use posix.join because:
- // 1. the basePath has been normalized to use /
- // 2. the incoming glob (id) matcher, also uses /
- // otherwise Node will force backslash (\) on windows
- return path$t.posix.join(basePath, id);
-}
-const createFilter = function createFilter(include, exclude, options) {
- const resolutionBase = options && options.resolve;
- const getMatcher = (id) => id instanceof RegExp
- ? id
- : {
- test: (what) => {
- // this refactor is a tad overly verbose but makes for easy debugging
- const pattern = getMatcherString(id, resolutionBase);
- const fn = picomatch$3(pattern, { dot: true });
- const result = fn(what);
- return result;
- }
- };
- const includeMatchers = ensureArray(include).map(getMatcher);
- const excludeMatchers = ensureArray(exclude).map(getMatcher);
- return function result(id) {
- if (typeof id !== 'string')
- return false;
- if (/\0/.test(id))
- return false;
- const pathId = id.split(path$t.sep).join('/');
- for (let i = 0; i < excludeMatchers.length; ++i) {
- const matcher = excludeMatchers[i];
- if (matcher.test(pathId))
- return false;
- }
- for (let i = 0; i < includeMatchers.length; ++i) {
- const matcher = includeMatchers[i];
- if (matcher.test(pathId))
- return true;
- }
- return !includeMatchers.length;
- };
-};
-
-const reservedWords$1 = 'break case class catch const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield enum await implements package protected static interface private public';
-const builtins = 'arguments Infinity NaN undefined null true false eval uneval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Symbol Error EvalError InternalError RangeError ReferenceError SyntaxError TypeError URIError Number Math Date String RegExp Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array Map Set WeakMap WeakSet SIMD ArrayBuffer DataView JSON Promise Generator GeneratorFunction Reflect Proxy Intl';
-const forbiddenIdentifiers = new Set(`${reservedWords$1} ${builtins}`.split(' '));
-forbiddenIdentifiers.add('');
-const makeLegalIdentifier = function makeLegalIdentifier(str) {
- let identifier = str
- .replace(/-(\w)/g, (_, letter) => letter.toUpperCase())
- .replace(/[^$_a-zA-Z0-9]/g, '_');
- if (/\d/.test(identifier[0]) || forbiddenIdentifiers.has(identifier)) {
- identifier = `_${identifier}`;
- }
- return identifier || '_';
-};
-
-var path$h = path__default;
-
-var commondir = function (basedir, relfiles) {
- if (relfiles) {
- var files = relfiles.map(function (r) {
- return path$h.resolve(basedir, r);
- });
- }
- else {
- var files = basedir;
- }
-
- var res = files.slice(1).reduce(function (ps, file) {
- if (!file.match(/^([A-Za-z]:)?\/|\\/)) {
- throw new Error('relative path without a basedir');
- }
-
- var xs = file.split(/\/+|\\+/);
- for (
- var i = 0;
- ps[i] === xs[i] && i < Math.min(ps.length, xs.length);
- i++
- );
- return ps.slice(0, i);
- }, files[0].split(/\/+|\\+/));
- // Windows correctly handles paths with forward-slashes
- return res.length > 1 ? res.join('/') : '/'
-};
-
-var old$1 = {};
-
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// 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.
-
-var pathModule = path__default;
-var isWindows$3 = process.platform === 'win32';
-var fs$h = fs__default;
-
-// JavaScript implementation of realpath, ported from node pre-v6
-
-var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);
-
-function rethrow() {
- // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and
- // is fairly slow to generate.
- var callback;
- if (DEBUG) {
- var backtrace = new Error;
- callback = debugCallback;
- } else
- callback = missingCallback;
-
- return callback;
-
- function debugCallback(err) {
- if (err) {
- backtrace.message = err.message;
- err = backtrace;
- missingCallback(err);
- }
- }
-
- function missingCallback(err) {
- if (err) {
- if (process.throwDeprecation)
- throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
- else if (!process.noDeprecation) {
- var msg = 'fs: missing callback ' + (err.stack || err.message);
- if (process.traceDeprecation)
- console.trace(msg);
- else
- console.error(msg);
- }
- }
- }
-}
-
-function maybeCallback(cb) {
- return typeof cb === 'function' ? cb : rethrow();
-}
-
-// Regexp that finds the next partion of a (partial) path
-// result is [base_with_slash, base], e.g. ['somedir/', 'somedir']
-if (isWindows$3) {
- var nextPartRe = /(.*?)(?:[\/\\]+|$)/g;
-} else {
- var nextPartRe = /(.*?)(?:[\/]+|$)/g;
-}
-
-// Regex to find the device root, including trailing slash. E.g. 'c:\\'.
-if (isWindows$3) {
- var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/;
-} else {
- var splitRootRe = /^[\/]*/;
-}
-
-old$1.realpathSync = function realpathSync(p, cache) {
- // make p is absolute
- p = pathModule.resolve(p);
-
- if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
- return cache[p];
- }
-
- var original = p,
- seenLinks = {},
- knownHard = {};
-
- // current character position in p
- var pos;
- // the partial path so far, including a trailing slash if any
- var current;
- // the partial path without a trailing slash (except when pointing at a root)
- var base;
- // the partial path scanned in the previous round, with slash
- var previous;
-
- start();
-
- function start() {
- // Skip over roots
- var m = splitRootRe.exec(p);
- pos = m[0].length;
- current = m[0];
- base = m[0];
- previous = '';
-
- // On windows, check that the root exists. On unix there is no need.
- if (isWindows$3 && !knownHard[base]) {
- fs$h.lstatSync(base);
- knownHard[base] = true;
- }
- }
-
- // walk down the path, swapping out linked pathparts for their real
- // values
- // NB: p.length changes.
- while (pos < p.length) {
- // find the next part
- nextPartRe.lastIndex = pos;
- var result = nextPartRe.exec(p);
- previous = current;
- current += result[0];
- base = previous + result[1];
- pos = nextPartRe.lastIndex;
-
- // continue if not a symlink
- if (knownHard[base] || (cache && cache[base] === base)) {
- continue;
- }
-
- var resolvedLink;
- if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
- // some known symbolic link. no need to stat again.
- resolvedLink = cache[base];
- } else {
- var stat = fs$h.lstatSync(base);
- if (!stat.isSymbolicLink()) {
- knownHard[base] = true;
- if (cache) cache[base] = base;
- continue;
- }
-
- // read the link if it wasn't read before
- // dev/ino always return 0 on windows, so skip the check.
- var linkTarget = null;
- if (!isWindows$3) {
- var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
- if (seenLinks.hasOwnProperty(id)) {
- linkTarget = seenLinks[id];
- }
- }
- if (linkTarget === null) {
- fs$h.statSync(base);
- linkTarget = fs$h.readlinkSync(base);
- }
- resolvedLink = pathModule.resolve(previous, linkTarget);
- // track this, if given a cache.
- if (cache) cache[base] = resolvedLink;
- if (!isWindows$3) seenLinks[id] = linkTarget;
- }
-
- // resolve the link, then start over
- p = pathModule.resolve(resolvedLink, p.slice(pos));
- start();
- }
-
- if (cache) cache[original] = p;
-
- return p;
-};
-
-
-old$1.realpath = function realpath(p, cache, cb) {
- if (typeof cb !== 'function') {
- cb = maybeCallback(cache);
- cache = null;
- }
-
- // make p is absolute
- p = pathModule.resolve(p);
-
- if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
- return process.nextTick(cb.bind(null, null, cache[p]));
- }
-
- var original = p,
- seenLinks = {},
- knownHard = {};
-
- // current character position in p
- var pos;
- // the partial path so far, including a trailing slash if any
- var current;
- // the partial path without a trailing slash (except when pointing at a root)
- var base;
- // the partial path scanned in the previous round, with slash
- var previous;
-
- start();
-
- function start() {
- // Skip over roots
- var m = splitRootRe.exec(p);
- pos = m[0].length;
- current = m[0];
- base = m[0];
- previous = '';
-
- // On windows, check that the root exists. On unix there is no need.
- if (isWindows$3 && !knownHard[base]) {
- fs$h.lstat(base, function(err) {
- if (err) return cb(err);
- knownHard[base] = true;
- LOOP();
- });
- } else {
- process.nextTick(LOOP);
- }
- }
-
- // walk down the path, swapping out linked pathparts for their real
- // values
- function LOOP() {
- // stop if scanned past end of path
- if (pos >= p.length) {
- if (cache) cache[original] = p;
- return cb(null, p);
- }
-
- // find the next part
- nextPartRe.lastIndex = pos;
- var result = nextPartRe.exec(p);
- previous = current;
- current += result[0];
- base = previous + result[1];
- pos = nextPartRe.lastIndex;
-
- // continue if not a symlink
- if (knownHard[base] || (cache && cache[base] === base)) {
- return process.nextTick(LOOP);
- }
-
- if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
- // known symbolic link. no need to stat again.
- return gotResolvedLink(cache[base]);
- }
-
- return fs$h.lstat(base, gotStat);
- }
-
- function gotStat(err, stat) {
- if (err) return cb(err);
-
- // if not a symlink, skip to the next path part
- if (!stat.isSymbolicLink()) {
- knownHard[base] = true;
- if (cache) cache[base] = base;
- return process.nextTick(LOOP);
- }
-
- // stat & read the link if not read before
- // call gotTarget as soon as the link target is known
- // dev/ino always return 0 on windows, so skip the check.
- if (!isWindows$3) {
- var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
- if (seenLinks.hasOwnProperty(id)) {
- return gotTarget(null, seenLinks[id], base);
- }
- }
- fs$h.stat(base, function(err) {
- if (err) return cb(err);
-
- fs$h.readlink(base, function(err, target) {
- if (!isWindows$3) seenLinks[id] = target;
- gotTarget(err, target);
- });
- });
- }
-
- function gotTarget(err, target, base) {
- if (err) return cb(err);
-
- var resolvedLink = pathModule.resolve(previous, target);
- if (cache) cache[base] = resolvedLink;
- gotResolvedLink(resolvedLink);
- }
-
- function gotResolvedLink(resolvedLink) {
- // resolve the link, then start over
- p = pathModule.resolve(resolvedLink, p.slice(pos));
- start();
- }
-};
-
-var fs_realpath = realpath$2;
-realpath$2.realpath = realpath$2;
-realpath$2.sync = realpathSync;
-realpath$2.realpathSync = realpathSync;
-realpath$2.monkeypatch = monkeypatch;
-realpath$2.unmonkeypatch = unmonkeypatch;
-
-var fs$g = fs__default;
-var origRealpath = fs$g.realpath;
-var origRealpathSync = fs$g.realpathSync;
-
-var version$1 = process.version;
-var ok = /^v[0-5]\./.test(version$1);
-var old = old$1;
-
-function newError (er) {
- return er && er.syscall === 'realpath' && (
- er.code === 'ELOOP' ||
- er.code === 'ENOMEM' ||
- er.code === 'ENAMETOOLONG'
- )
-}
-
-function realpath$2 (p, cache, cb) {
- if (ok) {
- return origRealpath(p, cache, cb)
- }
-
- if (typeof cache === 'function') {
- cb = cache;
- cache = null;
- }
- origRealpath(p, cache, function (er, result) {
- if (newError(er)) {
- old.realpath(p, cache, cb);
- } else {
- cb(er, result);
- }
- });
-}
-
-function realpathSync (p, cache) {
- if (ok) {
- return origRealpathSync(p, cache)
- }
-
- try {
- return origRealpathSync(p, cache)
- } catch (er) {
- if (newError(er)) {
- return old.realpathSync(p, cache)
- } else {
- throw er
- }
- }
-}
-
-function monkeypatch () {
- fs$g.realpath = realpath$2;
- fs$g.realpathSync = realpathSync;
-}
-
-function unmonkeypatch () {
- fs$g.realpath = origRealpath;
- fs$g.realpathSync = origRealpathSync;
-}
-
-var concatMap$1 = function (xs, fn) {
- var res = [];
- for (var i = 0; i < xs.length; i++) {
- var x = fn(xs[i], i);
- if (isArray$1(x)) res.push.apply(res, x);
- else res.push(x);
- }
- return res;
-};
-
-var isArray$1 = Array.isArray || function (xs) {
- return Object.prototype.toString.call(xs) === '[object Array]';
-};
-
-var balancedMatch = balanced$1;
-function balanced$1(a, b, str) {
- if (a instanceof RegExp) a = maybeMatch(a, str);
- if (b instanceof RegExp) b = maybeMatch(b, str);
-
- var r = range(a, b, str);
-
- return r && {
- start: r[0],
- end: r[1],
- pre: str.slice(0, r[0]),
- body: str.slice(r[0] + a.length, r[1]),
- post: str.slice(r[1] + b.length)
- };
-}
-
-function maybeMatch(reg, str) {
- var m = str.match(reg);
- return m ? m[0] : null;
-}
-
-balanced$1.range = range;
-function range(a, b, str) {
- var begs, beg, left, right, result;
- var ai = str.indexOf(a);
- var bi = str.indexOf(b, ai + 1);
- var i = ai;
-
- if (ai >= 0 && bi > 0) {
- if(a===b) {
- return [ai, bi];
- }
- begs = [];
- left = str.length;
-
- while (i >= 0 && !result) {
- if (i == ai) {
- begs.push(i);
- ai = str.indexOf(a, i + 1);
- } else if (begs.length == 1) {
- result = [ begs.pop(), bi ];
- } else {
- beg = begs.pop();
- if (beg < left) {
- left = beg;
- right = bi;
- }
-
- bi = str.indexOf(b, i + 1);
- }
-
- i = ai < bi && ai >= 0 ? ai : bi;
- }
-
- if (begs.length) {
- result = [ left, right ];
- }
- }
-
- return result;
-}
-
-var concatMap = concatMap$1;
-var balanced = balancedMatch;
-
-var braceExpansion = expandTop;
-
-var escSlash = '\0SLASH'+Math.random()+'\0';
-var escOpen = '\0OPEN'+Math.random()+'\0';
-var escClose = '\0CLOSE'+Math.random()+'\0';
-var escComma = '\0COMMA'+Math.random()+'\0';
-var escPeriod = '\0PERIOD'+Math.random()+'\0';
-
-function numeric(str) {
- return parseInt(str, 10) == str
- ? parseInt(str, 10)
- : str.charCodeAt(0);
-}
-
-function escapeBraces(str) {
- return str.split('\\\\').join(escSlash)
- .split('\\{').join(escOpen)
- .split('\\}').join(escClose)
- .split('\\,').join(escComma)
- .split('\\.').join(escPeriod);
-}
-
-function unescapeBraces(str) {
- return str.split(escSlash).join('\\')
- .split(escOpen).join('{')
- .split(escClose).join('}')
- .split(escComma).join(',')
- .split(escPeriod).join('.');
-}
-
-
-// Basically just str.split(","), but handling cases
-// where we have nested braced sections, which should be
-// treated as individual members, like {a,{b,c},d}
-function parseCommaParts(str) {
- if (!str)
- return [''];
-
- var parts = [];
- var m = balanced('{', '}', str);
-
- if (!m)
- return str.split(',');
-
- var pre = m.pre;
- var body = m.body;
- var post = m.post;
- var p = pre.split(',');
-
- p[p.length-1] += '{' + body + '}';
- var postParts = parseCommaParts(post);
- if (post.length) {
- p[p.length-1] += postParts.shift();
- p.push.apply(p, postParts);
- }
-
- parts.push.apply(parts, p);
-
- return parts;
-}
-
-function expandTop(str) {
- if (!str)
- return [];
-
- // I don't know why Bash 4.3 does this, but it does.
- // Anything starting with {} will have the first two bytes preserved
- // but *only* at the top level, so {},a}b will not expand to anything,
- // but a{},b}c will be expanded to [a}c,abc].
- // One could argue that this is a bug in Bash, but since the goal of
- // this module is to match Bash's rules, we escape a leading {}
- if (str.substr(0, 2) === '{}') {
- str = '\\{\\}' + str.substr(2);
- }
-
- return expand$1(escapeBraces(str), true).map(unescapeBraces);
-}
-
-function embrace(str) {
- return '{' + str + '}';
-}
-function isPadded(el) {
- return /^-?0\d/.test(el);
-}
-
-function lte(i, y) {
- return i <= y;
-}
-function gte(i, y) {
- return i >= y;
-}
-
-function expand$1(str, isTop) {
- var expansions = [];
-
- var m = balanced('{', '}', str);
- if (!m || /\$$/.test(m.pre)) return [str];
-
- var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
- var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
- var isSequence = isNumericSequence || isAlphaSequence;
- var isOptions = m.body.indexOf(',') >= 0;
- if (!isSequence && !isOptions) {
- // {a},b}
- if (m.post.match(/,.*\}/)) {
- str = m.pre + '{' + m.body + escClose + m.post;
- return expand$1(str);
- }
- return [str];
- }
-
- var n;
- if (isSequence) {
- n = m.body.split(/\.\./);
- } else {
- n = parseCommaParts(m.body);
- if (n.length === 1) {
- // x{{a,b}}y ==> x{a}y x{b}y
- n = expand$1(n[0], false).map(embrace);
- if (n.length === 1) {
- var post = m.post.length
- ? expand$1(m.post, false)
- : [''];
- return post.map(function(p) {
- return m.pre + n[0] + p;
- });
- }
- }
- }
-
- // at this point, n is the parts, and we know it's not a comma set
- // with a single entry.
-
- // no need to expand pre, since it is guaranteed to be free of brace-sets
- var pre = m.pre;
- var post = m.post.length
- ? expand$1(m.post, false)
- : [''];
-
- var N;
-
- if (isSequence) {
- var x = numeric(n[0]);
- var y = numeric(n[1]);
- var width = Math.max(n[0].length, n[1].length);
- var incr = n.length == 3
- ? Math.abs(numeric(n[2]))
- : 1;
- var test = lte;
- var reverse = y < x;
- if (reverse) {
- incr *= -1;
- test = gte;
- }
- var pad = n.some(isPadded);
-
- N = [];
-
- for (var i = x; test(i, y); i += incr) {
- var c;
- if (isAlphaSequence) {
- c = String.fromCharCode(i);
- if (c === '\\')
- c = '';
- } else {
- c = String(i);
- if (pad) {
- var need = width - c.length;
- if (need > 0) {
- var z = new Array(need + 1).join('0');
- if (i < 0)
- c = '-' + z + c.slice(1);
- else
- c = z + c;
- }
- }
- }
- N.push(c);
- }
- } else {
- N = concatMap(n, function(el) { return expand$1(el, false) });
- }
-
- for (var j = 0; j < N.length; j++) {
- for (var k = 0; k < post.length; k++) {
- var expansion = pre + N[j] + post[k];
- if (!isTop || isSequence || expansion)
- expansions.push(expansion);
- }
- }
-
- return expansions;
-}
-
-var minimatch_1 = minimatch$3;
-minimatch$3.Minimatch = Minimatch$1;
-
-var path$g = { sep: '/' };
-try {
- path$g = require('path');
-} catch (er) {}
-
-var GLOBSTAR$1 = minimatch$3.GLOBSTAR = Minimatch$1.GLOBSTAR = {};
-var expand = braceExpansion;
-
-var plTypes = {
- '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},
- '?': { open: '(?:', close: ')?' },
- '+': { open: '(?:', close: ')+' },
- '*': { open: '(?:', close: ')*' },
- '@': { open: '(?:', close: ')' }
-};
-
-// any single thing other than /
-// don't need to escape / when using new RegExp()
-var qmark = '[^/]';
-
-// * => any number of characters
-var star = qmark + '*?';
-
-// ** when dots are allowed. Anything goes, except .. and .
-// not (^ or / followed by one or two dots followed by $ or /),
-// followed by anything, any number of times.
-var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?';
-
-// not a ^ or / followed by a dot,
-// followed by anything, any number of times.
-var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?';
-
-// characters that need to be escaped in RegExp.
-var reSpecials = charSet('().*{}+?[]^$\\!');
-
-// "abc" -> { a:true, b:true, c:true }
-function charSet (s) {
- return s.split('').reduce(function (set, c) {
- set[c] = true;
- return set
- }, {})
-}
-
-// normalizes slashes.
-var slashSplit = /\/+/;
-
-minimatch$3.filter = filter;
-function filter (pattern, options) {
- options = options || {};
- return function (p, i, list) {
- return minimatch$3(p, pattern, options)
- }
-}
-
-function ext (a, b) {
- a = a || {};
- b = b || {};
- var t = {};
- Object.keys(b).forEach(function (k) {
- t[k] = b[k];
- });
- Object.keys(a).forEach(function (k) {
- t[k] = a[k];
- });
- return t
-}
-
-minimatch$3.defaults = function (def) {
- if (!def || !Object.keys(def).length) return minimatch$3
-
- var orig = minimatch$3;
-
- var m = function minimatch (p, pattern, options) {
- return orig.minimatch(p, pattern, ext(def, options))
- };
-
- m.Minimatch = function Minimatch (pattern, options) {
- return new orig.Minimatch(pattern, ext(def, options))
- };
-
- return m
-};
-
-Minimatch$1.defaults = function (def) {
- if (!def || !Object.keys(def).length) return Minimatch$1
- return minimatch$3.defaults(def).Minimatch
-};
-
-function minimatch$3 (p, pattern, options) {
- if (typeof pattern !== 'string') {
- throw new TypeError('glob pattern string required')
- }
-
- if (!options) options = {};
-
- // shortcut: comments match nothing.
- if (!options.nocomment && pattern.charAt(0) === '#') {
- return false
- }
-
- // "" only matches ""
- if (pattern.trim() === '') return p === ''
-
- return new Minimatch$1(pattern, options).match(p)
-}
-
-function Minimatch$1 (pattern, options) {
- if (!(this instanceof Minimatch$1)) {
- return new Minimatch$1(pattern, options)
- }
-
- if (typeof pattern !== 'string') {
- throw new TypeError('glob pattern string required')
- }
-
- if (!options) options = {};
- pattern = pattern.trim();
-
- // windows support: need to use /, not \
- if (path$g.sep !== '/') {
- pattern = pattern.split(path$g.sep).join('/');
- }
-
- this.options = options;
- this.set = [];
- this.pattern = pattern;
- this.regexp = null;
- this.negate = false;
- this.comment = false;
- this.empty = false;
-
- // make the set of regexps etc.
- this.make();
-}
-
-Minimatch$1.prototype.debug = function () {};
-
-Minimatch$1.prototype.make = make;
-function make () {
- // don't do it more than once.
- if (this._made) return
-
- var pattern = this.pattern;
- var options = this.options;
-
- // empty patterns and comments match nothing.
- if (!options.nocomment && pattern.charAt(0) === '#') {
- this.comment = true;
- return
- }
- if (!pattern) {
- this.empty = true;
- return
- }
-
- // step 1: figure out negation, etc.
- this.parseNegate();
-
- // step 2: expand braces
- var set = this.globSet = this.braceExpand();
-
- if (options.debug) this.debug = console.error;
-
- this.debug(this.pattern, set);
-
- // step 3: now we have a set, so turn each one into a series of path-portion
- // matching patterns.
- // These will be regexps, except in the case of "**", which is
- // set to the GLOBSTAR object for globstar behavior,
- // and will not contain any / characters
- set = this.globParts = set.map(function (s) {
- return s.split(slashSplit)
- });
-
- this.debug(this.pattern, set);
-
- // glob --> regexps
- set = set.map(function (s, si, set) {
- return s.map(this.parse, this)
- }, this);
-
- this.debug(this.pattern, set);
-
- // filter out everything that didn't compile properly.
- set = set.filter(function (s) {
- return s.indexOf(false) === -1
- });
-
- this.debug(this.pattern, set);
-
- this.set = set;
-}
-
-Minimatch$1.prototype.parseNegate = parseNegate;
-function parseNegate () {
- var pattern = this.pattern;
- var negate = false;
- var options = this.options;
- var negateOffset = 0;
-
- if (options.nonegate) return
-
- for (var i = 0, l = pattern.length
- ; i < l && pattern.charAt(i) === '!'
- ; i++) {
- negate = !negate;
- negateOffset++;
- }
-
- if (negateOffset) this.pattern = pattern.substr(negateOffset);
- this.negate = negate;
-}
-
-// Brace expansion:
-// a{b,c}d -> abd acd
-// a{b,}c -> abc ac
-// a{0..3}d -> a0d a1d a2d a3d
-// a{b,c{d,e}f}g -> abg acdfg acefg
-// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
-//
-// Invalid sets are not expanded.
-// a{2..}b -> a{2..}b
-// a{b}c -> a{b}c
-minimatch$3.braceExpand = function (pattern, options) {
- return braceExpand(pattern, options)
-};
-
-Minimatch$1.prototype.braceExpand = braceExpand;
-
-function braceExpand (pattern, options) {
- if (!options) {
- if (this instanceof Minimatch$1) {
- options = this.options;
- } else {
- options = {};
- }
- }
-
- pattern = typeof pattern === 'undefined'
- ? this.pattern : pattern;
-
- if (typeof pattern === 'undefined') {
- throw new TypeError('undefined pattern')
- }
-
- if (options.nobrace ||
- !pattern.match(/\{.*\}/)) {
- // shortcut. no need to expand.
- return [pattern]
- }
-
- return expand(pattern)
-}
-
-// parse a component of the expanded set.
-// At this point, no pattern may contain "/" in it
-// so we're going to return a 2d array, where each entry is the full
-// pattern, split on '/', and then turned into a regular expression.
-// A regexp is made at the end which joins each array with an
-// escaped /, and another full one which joins each regexp with |.
-//
-// Following the lead of Bash 4.1, note that "**" only has special meaning
-// when it is the *only* thing in a path portion. Otherwise, any series
-// of * is equivalent to a single *. Globstar behavior is enabled by
-// default, and can be disabled by setting options.noglobstar.
-Minimatch$1.prototype.parse = parse$d;
-var SUBPARSE = {};
-function parse$d (pattern, isSub) {
- if (pattern.length > 1024 * 64) {
- throw new TypeError('pattern is too long')
- }
-
- var options = this.options;
-
- // shortcuts
- if (!options.noglobstar && pattern === '**') return GLOBSTAR$1
- if (pattern === '') return ''
-
- var re = '';
- var hasMagic = !!options.nocase;
- var escaping = false;
- // ? => one single character
- var patternListStack = [];
- var negativeLists = [];
- var stateChar;
- var inClass = false;
- var reClassStart = -1;
- var classStart = -1;
- // . and .. never match anything that doesn't start with .,
- // even when options.dot is set.
- var patternStart = pattern.charAt(0) === '.' ? '' // anything
- // not (start or / followed by . or .. followed by / or end)
- : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
- : '(?!\\.)';
- var self = this;
-
- function clearStateChar () {
- if (stateChar) {
- // we had some state-tracking character
- // that wasn't consumed by this pass.
- switch (stateChar) {
- case '*':
- re += star;
- hasMagic = true;
- break
- case '?':
- re += qmark;
- hasMagic = true;
- break
- default:
- re += '\\' + stateChar;
- break
- }
- self.debug('clearStateChar %j %j', stateChar, re);
- stateChar = false;
- }
- }
-
- for (var i = 0, len = pattern.length, c
- ; (i < len) && (c = pattern.charAt(i))
- ; i++) {
- this.debug('%s\t%s %s %j', pattern, i, re, c);
-
- // skip over any that are escaped.
- if (escaping && reSpecials[c]) {
- re += '\\' + c;
- escaping = false;
- continue
- }
-
- switch (c) {
- case '/':
- // completely not allowed, even escaped.
- // Should already be path-split by now.
- return false
-
- case '\\':
- clearStateChar();
- escaping = true;
- continue
-
- // the various stateChar values
- // for the "extglob" stuff.
- case '?':
- case '*':
- case '+':
- case '@':
- case '!':
- this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c);
-
- // all of those are literals inside a class, except that
- // the glob [!a] means [^a] in regexp
- if (inClass) {
- this.debug(' in class');
- if (c === '!' && i === classStart + 1) c = '^';
- re += c;
- continue
- }
-
- // if we already have a stateChar, then it means
- // that there was something like ** or +? in there.
- // Handle the stateChar, then proceed with this one.
- self.debug('call clearStateChar %j', stateChar);
- clearStateChar();
- stateChar = c;
- // if extglob is disabled, then +(asdf|foo) isn't a thing.
- // just clear the statechar *now*, rather than even diving into
- // the patternList stuff.
- if (options.noext) clearStateChar();
- continue
-
- case '(':
- if (inClass) {
- re += '(';
- continue
- }
-
- if (!stateChar) {
- re += '\\(';
- continue
- }
-
- patternListStack.push({
- type: stateChar,
- start: i - 1,
- reStart: re.length,
- open: plTypes[stateChar].open,
- close: plTypes[stateChar].close
- });
- // negation is (?:(?!js)[^/]*)
- re += stateChar === '!' ? '(?:(?!(?:' : '(?:';
- this.debug('plType %j %j', stateChar, re);
- stateChar = false;
- continue
-
- case ')':
- if (inClass || !patternListStack.length) {
- re += '\\)';
- continue
- }
-
- clearStateChar();
- hasMagic = true;
- var pl = patternListStack.pop();
- // negation is (?:(?!js)[^/]*)
- // The others are (?:<pattern>)<type>
- re += pl.close;
- if (pl.type === '!') {
- negativeLists.push(pl);
- }
- pl.reEnd = re.length;
- continue
-
- case '|':
- if (inClass || !patternListStack.length || escaping) {
- re += '\\|';
- escaping = false;
- continue
- }
-
- clearStateChar();
- re += '|';
- continue
-
- // these are mostly the same in regexp and glob
- case '[':
- // swallow any state-tracking char before the [
- clearStateChar();
-
- if (inClass) {
- re += '\\' + c;
- continue
- }
-
- inClass = true;
- classStart = i;
- reClassStart = re.length;
- re += c;
- continue
-
- case ']':
- // a right bracket shall lose its special
- // meaning and represent itself in
- // a bracket expression if it occurs
- // first in the list. -- POSIX.2 2.8.3.2
- if (i === classStart + 1 || !inClass) {
- re += '\\' + c;
- escaping = false;
- continue
- }
-
- // handle the case where we left a class open.
- // "[z-a]" is valid, equivalent to "\[z-a\]"
- if (inClass) {
- // split where the last [ was, make sure we don't have
- // an invalid re. if so, re-walk the contents of the
- // would-be class to re-translate any characters that
- // were passed through as-is
- // TODO: It would probably be faster to determine this
- // without a try/catch and a new RegExp, but it's tricky
- // to do safely. For now, this is safe and works.
- var cs = pattern.substring(classStart + 1, i);
- try {
- } catch (er) {
- // not a valid class!
- var sp = this.parse(cs, SUBPARSE);
- re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]';
- hasMagic = hasMagic || sp[1];
- inClass = false;
- continue
- }
- }
-
- // finish up the class.
- hasMagic = true;
- inClass = false;
- re += c;
- continue
-
- default:
- // swallow any state char that wasn't consumed
- clearStateChar();
-
- if (escaping) {
- // no need
- escaping = false;
- } else if (reSpecials[c]
- && !(c === '^' && inClass)) {
- re += '\\';
- }
-
- re += c;
-
- } // switch
- } // for
-
- // handle the case where we left a class open.
- // "[abc" is valid, equivalent to "\[abc"
- if (inClass) {
- // split where the last [ was, and escape it
- // this is a huge pita. We now have to re-walk
- // the contents of the would-be class to re-translate
- // any characters that were passed through as-is
- cs = pattern.substr(classStart + 1);
- sp = this.parse(cs, SUBPARSE);
- re = re.substr(0, reClassStart) + '\\[' + sp[0];
- hasMagic = hasMagic || sp[1];
- }
-
- // handle the case where we had a +( thing at the *end*
- // of the pattern.
- // each pattern list stack adds 3 chars, and we need to go through
- // and escape any | chars that were passed through as-is for the regexp.
- // Go through and escape them, taking care not to double-escape any
- // | chars that were already escaped.
- for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
- var tail = re.slice(pl.reStart + pl.open.length);
- this.debug('setting tail', re, pl);
- // maybe some even number of \, then maybe 1 \, followed by a |
- tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) {
- if (!$2) {
- // the | isn't already escaped, so escape it.
- $2 = '\\';
- }
-
- // need to escape all those slashes *again*, without escaping the
- // one that we need for escaping the | character. As it works out,
- // escaping an even number of slashes can be done by simply repeating
- // it exactly after itself. That's why this trick works.
- //
- // I am sorry that you have to see this.
- return $1 + $1 + $2 + '|'
- });
-
- this.debug('tail=%j\n %s', tail, tail, pl, re);
- var t = pl.type === '*' ? star
- : pl.type === '?' ? qmark
- : '\\' + pl.type;
-
- hasMagic = true;
- re = re.slice(0, pl.reStart) + t + '\\(' + tail;
- }
-
- // handle trailing things that only matter at the very end.
- clearStateChar();
- if (escaping) {
- // trailing \\
- re += '\\\\';
- }
-
- // only need to apply the nodot start if the re starts with
- // something that could conceivably capture a dot
- var addPatternStart = false;
- switch (re.charAt(0)) {
- case '.':
- case '[':
- case '(': addPatternStart = true;
- }
-
- // Hack to work around lack of negative lookbehind in JS
- // A pattern like: *.!(x).!(y|z) needs to ensure that a name
- // like 'a.xyz.yz' doesn't match. So, the first negative
- // lookahead, has to look ALL the way ahead, to the end of
- // the pattern.
- for (var n = negativeLists.length - 1; n > -1; n--) {
- var nl = negativeLists[n];
-
- var nlBefore = re.slice(0, nl.reStart);
- var nlFirst = re.slice(nl.reStart, nl.reEnd - 8);
- var nlLast = re.slice(nl.reEnd - 8, nl.reEnd);
- var nlAfter = re.slice(nl.reEnd);
-
- nlLast += nlAfter;
-
- // Handle nested stuff like *(*.js|!(*.json)), where open parens
- // mean that we should *not* include the ) in the bit that is considered
- // "after" the negated section.
- var openParensBefore = nlBefore.split('(').length - 1;
- var cleanAfter = nlAfter;
- for (i = 0; i < openParensBefore; i++) {
- cleanAfter = cleanAfter.replace(/\)[+*?]?/, '');
- }
- nlAfter = cleanAfter;
-
- var dollar = '';
- if (nlAfter === '' && isSub !== SUBPARSE) {
- dollar = '$';
- }
- var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast;
- re = newRe;
- }
-
- // if the re is not "" at this point, then we need to make sure
- // it doesn't match against an empty path part.
- // Otherwise a/* will match a/, which it should not.
- if (re !== '' && hasMagic) {
- re = '(?=.)' + re;
- }
-
- if (addPatternStart) {
- re = patternStart + re;
- }
-
- // parsing just a piece of a larger pattern.
- if (isSub === SUBPARSE) {
- return [re, hasMagic]
- }
-
- // skip the regexp for non-magical patterns
- // unescape anything in it, though, so that it'll be
- // an exact match against a file etc.
- if (!hasMagic) {
- return globUnescape(pattern)
- }
-
- var flags = options.nocase ? 'i' : '';
- try {
- var regExp = new RegExp('^' + re + '$', flags);
- } catch (er) {
- // If it was an invalid regular expression, then it can't match
- // anything. This trick looks for a character after the end of
- // the string, which is of course impossible, except in multi-line
- // mode, but it's not a /m regex.
- return new RegExp('$.')
- }
-
- regExp._glob = pattern;
- regExp._src = re;
-
- return regExp
-}
-
-minimatch$3.makeRe = function (pattern, options) {
- return new Minimatch$1(pattern, options || {}).makeRe()
-};
-
-Minimatch$1.prototype.makeRe = makeRe;
-function makeRe () {
- if (this.regexp || this.regexp === false) return this.regexp
-
- // at this point, this.set is a 2d array of partial
- // pattern strings, or "**".
- //
- // It's better to use .match(). This function shouldn't
- // be used, really, but it's pretty convenient sometimes,
- // when you just want to work with a regex.
- var set = this.set;
-
- if (!set.length) {
- this.regexp = false;
- return this.regexp
- }
- var options = this.options;
-
- var twoStar = options.noglobstar ? star
- : options.dot ? twoStarDot
- : twoStarNoDot;
- var flags = options.nocase ? 'i' : '';
-
- var re = set.map(function (pattern) {
- return pattern.map(function (p) {
- return (p === GLOBSTAR$1) ? twoStar
- : (typeof p === 'string') ? regExpEscape(p)
- : p._src
- }).join('\\\/')
- }).join('|');
-
- // must match entire pattern
- // ending in a * or ** will make it less strict.
- re = '^(?:' + re + ')$';
-
- // can match anything, as long as it's not this.
- if (this.negate) re = '^(?!' + re + ').*$';
-
- try {
- this.regexp = new RegExp(re, flags);
- } catch (ex) {
- this.regexp = false;
- }
- return this.regexp
-}
-
-minimatch$3.match = function (list, pattern, options) {
- options = options || {};
- var mm = new Minimatch$1(pattern, options);
- list = list.filter(function (f) {
- return mm.match(f)
- });
- if (mm.options.nonull && !list.length) {
- list.push(pattern);
- }
- return list
-};
-
-Minimatch$1.prototype.match = match;
-function match (f, partial) {
- this.debug('match', f, this.pattern);
- // short-circuit in the case of busted things.
- // comments, etc.
- if (this.comment) return false
- if (this.empty) return f === ''
-
- if (f === '/' && partial) return true
-
- var options = this.options;
-
- // windows: need to use /, not \
- if (path$g.sep !== '/') {
- f = f.split(path$g.sep).join('/');
- }
-
- // treat the test path as a set of pathparts.
- f = f.split(slashSplit);
- this.debug(this.pattern, 'split', f);
-
- // just ONE of the pattern sets in this.set needs to match
- // in order for it to be valid. If negating, then just one
- // match means that we have failed.
- // Either way, return on the first hit.
-
- var set = this.set;
- this.debug(this.pattern, 'set', set);
-
- // Find the basename of the path by looking for the last non-empty segment
- var filename;
- var i;
- for (i = f.length - 1; i >= 0; i--) {
- filename = f[i];
- if (filename) break
- }
-
- for (i = 0; i < set.length; i++) {
- var pattern = set[i];
- var file = f;
- if (options.matchBase && pattern.length === 1) {
- file = [filename];
- }
- var hit = this.matchOne(file, pattern, partial);
- if (hit) {
- if (options.flipNegate) return true
- return !this.negate
- }
- }
-
- // didn't get any hits. this is success if it's a negative
- // pattern, failure otherwise.
- if (options.flipNegate) return false
- return this.negate
-}
-
-// set partial to true to test if, for example,
-// "/a/b" matches the start of "/*/b/*/d"
-// Partial means, if you run out of file before you run
-// out of pattern, then that's fine, as long as all
-// the parts match.
-Minimatch$1.prototype.matchOne = function (file, pattern, partial) {
- var options = this.options;
-
- this.debug('matchOne',
- { 'this': this, file: file, pattern: pattern });
-
- this.debug('matchOne', file.length, pattern.length);
-
- for (var fi = 0,
- pi = 0,
- fl = file.length,
- pl = pattern.length
- ; (fi < fl) && (pi < pl)
- ; fi++, pi++) {
- this.debug('matchOne loop');
- var p = pattern[pi];
- var f = file[fi];
-
- this.debug(pattern, p, f);
-
- // should be impossible.
- // some invalid regexp stuff in the set.
- if (p === false) return false
-
- if (p === GLOBSTAR$1) {
- this.debug('GLOBSTAR', [pattern, p, f]);
-
- // "**"
- // a/**/b/**/c would match the following:
- // a/b/x/y/z/c
- // a/x/y/z/b/c
- // a/b/x/b/x/c
- // a/b/c
- // To do this, take the rest of the pattern after
- // the **, and see if it would match the file remainder.
- // If so, return success.
- // If not, the ** "swallows" a segment, and try again.
- // This is recursively awful.
- //
- // a/**/b/**/c matching a/b/x/y/z/c
- // - a matches a
- // - doublestar
- // - matchOne(b/x/y/z/c, b/**/c)
- // - b matches b
- // - doublestar
- // - matchOne(x/y/z/c, c) -> no
- // - matchOne(y/z/c, c) -> no
- // - matchOne(z/c, c) -> no
- // - matchOne(c, c) yes, hit
- var fr = fi;
- var pr = pi + 1;
- if (pr === pl) {
- this.debug('** at the end');
- // a ** at the end will just swallow the rest.
- // We have found a match.
- // however, it will not swallow /.x, unless
- // options.dot is set.
- // . and .. are *never* matched by **, for explosively
- // exponential reasons.
- for (; fi < fl; fi++) {
- if (file[fi] === '.' || file[fi] === '..' ||
- (!options.dot && file[fi].charAt(0) === '.')) return false
- }
- return true
- }
-
- // ok, let's see if we can swallow whatever we can.
- while (fr < fl) {
- var swallowee = file[fr];
-
- this.debug('\nglobstar while', file, fr, pattern, pr, swallowee);
-
- // XXX remove this slice. Just pass the start index.
- if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
- this.debug('globstar found match!', fr, fl, swallowee);
- // found a match.
- return true
- } else {
- // can't swallow "." or ".." ever.
- // can only swallow ".foo" when explicitly asked.
- if (swallowee === '.' || swallowee === '..' ||
- (!options.dot && swallowee.charAt(0) === '.')) {
- this.debug('dot detected!', file, fr, pattern, pr);
- break
- }
-
- // ** swallows a segment, and continue.
- this.debug('globstar swallow a segment, and continue');
- fr++;
- }
- }
-
- // no match was found.
- // However, in partial mode, we can't say this is necessarily over.
- // If there's more *pattern* left, then
- if (partial) {
- // ran out of file
- this.debug('\n>>> no match, partial?', file, fr, pattern, pr);
- if (fr === fl) return true
- }
- return false
- }
-
- // something other than **
- // non-magic patterns just have to match exactly
- // patterns with magic have been turned into regexps.
- var hit;
- if (typeof p === 'string') {
- if (options.nocase) {
- hit = f.toLowerCase() === p.toLowerCase();
- } else {
- hit = f === p;
- }
- this.debug('string match', p, f, hit);
- } else {
- hit = f.match(p);
- this.debug('pattern match', p, f, hit);
- }
-
- if (!hit) return false
- }
-
- // Note: ending in / means that we'll get a final ""
- // at the end of the pattern. This can only match a
- // corresponding "" at the end of the file.
- // If the file ends in /, then it can only match a
- // a pattern that ends in /, unless the pattern just
- // doesn't have any more for it. But, a/b/ should *not*
- // match "a/b/*", even though "" matches against the
- // [^/]*? pattern, except in partial mode, where it might
- // simply not be reached yet.
- // However, a/b/ should still satisfy a/*
-
- // now either we fell off the end of the pattern, or we're done.
- if (fi === fl && pi === pl) {
- // ran out of pattern and filename at the same time.
- // an exact hit!
- return true
- } else if (fi === fl) {
- // ran out of file, but still had pattern left.
- // this is ok if we're doing the match as part of
- // a glob fs traversal.
- return partial
- } else if (pi === pl) {
- // ran out of pattern, still have file left.
- // this is only acceptable if we're on the very last
- // empty segment of a file with a trailing slash.
- // a/* should match a/b/
- var emptyFileEnd = (fi === fl - 1) && (file[fi] === '');
- return emptyFileEnd
- }
-
- // should be unreachable.
- throw new Error('wtf?')
-};
-
-// replace stuff like \* with *
-function globUnescape (s) {
- return s.replace(/\\(.)/g, '$1')
-}
-
-function regExpEscape (s) {
- return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
-}
-
-var inherits$1 = {exports: {}};
-
-var inherits_browser = {exports: {}};
-
-if (typeof Object.create === 'function') {
- // implementation from standard node.js 'util' module
- inherits_browser.exports = function inherits(ctor, superCtor) {
- if (superCtor) {
- ctor.super_ = superCtor;
- ctor.prototype = Object.create(superCtor.prototype, {
- constructor: {
- value: ctor,
- enumerable: false,
- writable: true,
- configurable: true
- }
- });
- }
- };
-} else {
- // old school shim for old browsers
- inherits_browser.exports = function inherits(ctor, superCtor) {
- if (superCtor) {
- ctor.super_ = superCtor;
- var TempCtor = function () {};
- TempCtor.prototype = superCtor.prototype;
- ctor.prototype = new TempCtor();
- ctor.prototype.constructor = ctor;
- }
- };
-}
-
-try {
- var util$6 = require('util');
- /* istanbul ignore next */
- if (typeof util$6.inherits !== 'function') throw '';
- inherits$1.exports = util$6.inherits;
-} catch (e) {
- /* istanbul ignore next */
- inherits$1.exports = inherits_browser.exports;
-}
-
-var pathIsAbsolute = {exports: {}};
-
-function posix(path) {
- return path.charAt(0) === '/';
-}
-
-function win32(path) {
- // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56
- var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
- var result = splitDeviceRe.exec(path);
- var device = result[1] || '';
- var isUnc = Boolean(device && device.charAt(1) !== ':');
-
- // UNC paths are always absolute
- return Boolean(result[2] || isUnc);
-}
-
-pathIsAbsolute.exports = process.platform === 'win32' ? win32 : posix;
-pathIsAbsolute.exports.posix = posix;
-pathIsAbsolute.exports.win32 = win32;
-
-var common$6 = {};
-
-common$6.setopts = setopts$2;
-common$6.ownProp = ownProp$2;
-common$6.makeAbs = makeAbs;
-common$6.finish = finish;
-common$6.mark = mark;
-common$6.isIgnored = isIgnored$2;
-common$6.childrenIgnored = childrenIgnored$2;
-
-function ownProp$2 (obj, field) {
- return Object.prototype.hasOwnProperty.call(obj, field)
-}
-
-var fs$f = fs__default;
-var path$f = path__default;
-var minimatch$2 = minimatch_1;
-var isAbsolute$2 = pathIsAbsolute.exports;
-var Minimatch = minimatch$2.Minimatch;
-
-function alphasort (a, b) {
- return a.localeCompare(b, 'en')
-}
-
-function setupIgnores (self, options) {
- self.ignore = options.ignore || [];
-
- if (!Array.isArray(self.ignore))
- self.ignore = [self.ignore];
-
- if (self.ignore.length) {
- self.ignore = self.ignore.map(ignoreMap);
- }
-}
-
-// ignore patterns are always in dot:true mode.
-function ignoreMap (pattern) {
- var gmatcher = null;
- if (pattern.slice(-3) === '/**') {
- var gpattern = pattern.replace(/(\/\*\*)+$/, '');
- gmatcher = new Minimatch(gpattern, { dot: true });
- }
-
- return {
- matcher: new Minimatch(pattern, { dot: true }),
- gmatcher: gmatcher
- }
-}
-
-function setopts$2 (self, pattern, options) {
- if (!options)
- options = {};
-
- // base-matching: just use globstar for that.
- if (options.matchBase && -1 === pattern.indexOf("/")) {
- if (options.noglobstar) {
- throw new Error("base matching requires globstar")
- }
- pattern = "**/" + pattern;
- }
-
- self.silent = !!options.silent;
- self.pattern = pattern;
- self.strict = options.strict !== false;
- self.realpath = !!options.realpath;
- self.realpathCache = options.realpathCache || Object.create(null);
- self.follow = !!options.follow;
- self.dot = !!options.dot;
- self.mark = !!options.mark;
- self.nodir = !!options.nodir;
- if (self.nodir)
- self.mark = true;
- self.sync = !!options.sync;
- self.nounique = !!options.nounique;
- self.nonull = !!options.nonull;
- self.nosort = !!options.nosort;
- self.nocase = !!options.nocase;
- self.stat = !!options.stat;
- self.noprocess = !!options.noprocess;
- self.absolute = !!options.absolute;
- self.fs = options.fs || fs$f;
-
- self.maxLength = options.maxLength || Infinity;
- self.cache = options.cache || Object.create(null);
- self.statCache = options.statCache || Object.create(null);
- self.symlinks = options.symlinks || Object.create(null);
-
- setupIgnores(self, options);
-
- self.changedCwd = false;
- var cwd = process.cwd();
- if (!ownProp$2(options, "cwd"))
- self.cwd = cwd;
- else {
- self.cwd = path$f.resolve(options.cwd);
- self.changedCwd = self.cwd !== cwd;
- }
-
- self.root = options.root || path$f.resolve(self.cwd, "/");
- self.root = path$f.resolve(self.root);
- if (process.platform === "win32")
- self.root = self.root.replace(/\\/g, "/");
-
- // TODO: is an absolute `cwd` supposed to be resolved against `root`?
- // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test')
- self.cwdAbs = isAbsolute$2(self.cwd) ? self.cwd : makeAbs(self, self.cwd);
- if (process.platform === "win32")
- self.cwdAbs = self.cwdAbs.replace(/\\/g, "/");
- self.nomount = !!options.nomount;
-
- // disable comments and negation in Minimatch.
- // Note that they are not supported in Glob itself anyway.
- options.nonegate = true;
- options.nocomment = true;
-
- self.minimatch = new Minimatch(pattern, options);
- self.options = self.minimatch.options;
-}
-
-function finish (self) {
- var nou = self.nounique;
- var all = nou ? [] : Object.create(null);
-
- for (var i = 0, l = self.matches.length; i < l; i ++) {
- var matches = self.matches[i];
- if (!matches || Object.keys(matches).length === 0) {
- if (self.nonull) {
- // do like the shell, and spit out the literal glob
- var literal = self.minimatch.globSet[i];
- if (nou)
- all.push(literal);
- else
- all[literal] = true;
- }
- } else {
- // had matches
- var m = Object.keys(matches);
- if (nou)
- all.push.apply(all, m);
- else
- m.forEach(function (m) {
- all[m] = true;
- });
- }
- }
-
- if (!nou)
- all = Object.keys(all);
-
- if (!self.nosort)
- all = all.sort(alphasort);
-
- // at *some* point we statted all of these
- if (self.mark) {
- for (var i = 0; i < all.length; i++) {
- all[i] = self._mark(all[i]);
- }
- if (self.nodir) {
- all = all.filter(function (e) {
- var notDir = !(/\/$/.test(e));
- var c = self.cache[e] || self.cache[makeAbs(self, e)];
- if (notDir && c)
- notDir = c !== 'DIR' && !Array.isArray(c);
- return notDir
- });
- }
- }
-
- if (self.ignore.length)
- all = all.filter(function(m) {
- return !isIgnored$2(self, m)
- });
-
- self.found = all;
-}
-
-function mark (self, p) {
- var abs = makeAbs(self, p);
- var c = self.cache[abs];
- var m = p;
- if (c) {
- var isDir = c === 'DIR' || Array.isArray(c);
- var slash = p.slice(-1) === '/';
-
- if (isDir && !slash)
- m += '/';
- else if (!isDir && slash)
- m = m.slice(0, -1);
-
- if (m !== p) {
- var mabs = makeAbs(self, m);
- self.statCache[mabs] = self.statCache[abs];
- self.cache[mabs] = self.cache[abs];
- }
- }
-
- return m
-}
-
-// lotta situps...
-function makeAbs (self, f) {
- var abs = f;
- if (f.charAt(0) === '/') {
- abs = path$f.join(self.root, f);
- } else if (isAbsolute$2(f) || f === '') {
- abs = f;
- } else if (self.changedCwd) {
- abs = path$f.resolve(self.cwd, f);
- } else {
- abs = path$f.resolve(f);
- }
-
- if (process.platform === 'win32')
- abs = abs.replace(/\\/g, '/');
-
- return abs
-}
-
-
-// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
-// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
-function isIgnored$2 (self, path) {
- if (!self.ignore.length)
- return false
-
- return self.ignore.some(function(item) {
- return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
- })
-}
-
-function childrenIgnored$2 (self, path) {
- if (!self.ignore.length)
- return false
-
- return self.ignore.some(function(item) {
- return !!(item.gmatcher && item.gmatcher.match(path))
- })
-}
-
-var sync$3 = globSync$1;
-globSync$1.GlobSync = GlobSync$1;
-
-var rp$1 = fs_realpath;
-var minimatch$1 = minimatch_1;
-var path$e = path__default;
-var assert$3 = require$$5__default;
-var isAbsolute$1 = pathIsAbsolute.exports;
-var common$5 = common$6;
-var setopts$1 = common$5.setopts;
-var ownProp$1 = common$5.ownProp;
-var childrenIgnored$1 = common$5.childrenIgnored;
-var isIgnored$1 = common$5.isIgnored;
-
-function globSync$1 (pattern, options) {
- if (typeof options === 'function' || arguments.length === 3)
- throw new TypeError('callback provided to sync glob\n'+
- 'See: https://github.com/isaacs/node-glob/issues/167')
-
- return new GlobSync$1(pattern, options).found
-}
-
-function GlobSync$1 (pattern, options) {
- if (!pattern)
- throw new Error('must provide pattern')
-
- if (typeof options === 'function' || arguments.length === 3)
- throw new TypeError('callback provided to sync glob\n'+
- 'See: https://github.com/isaacs/node-glob/issues/167')
-
- if (!(this instanceof GlobSync$1))
- return new GlobSync$1(pattern, options)
-
- setopts$1(this, pattern, options);
-
- if (this.noprocess)
- return this
-
- var n = this.minimatch.set.length;
- this.matches = new Array(n);
- for (var i = 0; i < n; i ++) {
- this._process(this.minimatch.set[i], i, false);
- }
- this._finish();
-}
-
-GlobSync$1.prototype._finish = function () {
- assert$3(this instanceof GlobSync$1);
- if (this.realpath) {
- var self = this;
- this.matches.forEach(function (matchset, index) {
- var set = self.matches[index] = Object.create(null);
- for (var p in matchset) {
- try {
- p = self._makeAbs(p);
- var real = rp$1.realpathSync(p, self.realpathCache);
- set[real] = true;
- } catch (er) {
- if (er.syscall === 'stat')
- set[self._makeAbs(p)] = true;
- else
- throw er
- }
- }
- });
- }
- common$5.finish(this);
-};
-
-
-GlobSync$1.prototype._process = function (pattern, index, inGlobStar) {
- assert$3(this instanceof GlobSync$1);
-
- // Get the first [n] parts of pattern that are all strings.
- var n = 0;
- while (typeof pattern[n] === 'string') {
- n ++;
- }
- // now n is the index of the first one that is *not* a string.
-
- // See if there's anything else
- var prefix;
- switch (n) {
- // if not, then this is rather simple
- case pattern.length:
- this._processSimple(pattern.join('/'), index);
- return
-
- case 0:
- // pattern *starts* with some non-trivial item.
- // going to readdir(cwd), but not include the prefix in matches.
- prefix = null;
- break
-
- default:
- // pattern has some string bits in the front.
- // whatever it starts with, whether that's 'absolute' like /foo/bar,
- // or 'relative' like '../baz'
- prefix = pattern.slice(0, n).join('/');
- break
- }
-
- var remain = pattern.slice(n);
-
- // get the list of entries.
- var read;
- if (prefix === null)
- read = '.';
- else if (isAbsolute$1(prefix) || isAbsolute$1(pattern.join('/'))) {
- if (!prefix || !isAbsolute$1(prefix))
- prefix = '/' + prefix;
- read = prefix;
- } else
- read = prefix;
-
- var abs = this._makeAbs(read);
-
- //if ignored, skip processing
- if (childrenIgnored$1(this, read))
- return
-
- var isGlobStar = remain[0] === minimatch$1.GLOBSTAR;
- if (isGlobStar)
- this._processGlobStar(prefix, read, abs, remain, index, inGlobStar);
- else
- this._processReaddir(prefix, read, abs, remain, index, inGlobStar);
-};
-
-
-GlobSync$1.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
- var entries = this._readdir(abs, inGlobStar);
-
- // if the abs isn't a dir, then nothing can match!
- if (!entries)
- return
-
- // It will only match dot entries if it starts with a dot, or if
- // dot is set. Stuff like @(.foo|.bar) isn't allowed.
- var pn = remain[0];
- var negate = !!this.minimatch.negate;
- var rawGlob = pn._glob;
- var dotOk = this.dot || rawGlob.charAt(0) === '.';
-
- var matchedEntries = [];
- for (var i = 0; i < entries.length; i++) {
- var e = entries[i];
- if (e.charAt(0) !== '.' || dotOk) {
- var m;
- if (negate && !prefix) {
- m = !e.match(pn);
- } else {
- m = e.match(pn);
- }
- if (m)
- matchedEntries.push(e);
- }
- }
-
- var len = matchedEntries.length;
- // If there are no matched entries, then nothing matches.
- if (len === 0)
- return
-
- // if this is the last remaining pattern bit, then no need for
- // an additional stat *unless* the user has specified mark or
- // stat explicitly. We know they exist, since readdir returned
- // them.
-
- if (remain.length === 1 && !this.mark && !this.stat) {
- if (!this.matches[index])
- this.matches[index] = Object.create(null);
-
- for (var i = 0; i < len; i ++) {
- var e = matchedEntries[i];
- if (prefix) {
- if (prefix.slice(-1) !== '/')
- e = prefix + '/' + e;
- else
- e = prefix + e;
- }
-
- if (e.charAt(0) === '/' && !this.nomount) {
- e = path$e.join(this.root, e);
- }
- this._emitMatch(index, e);
- }
- // This was the last one, and no stats were needed
- return
- }
-
- // now test all matched entries as stand-ins for that part
- // of the pattern.
- remain.shift();
- for (var i = 0; i < len; i ++) {
- var e = matchedEntries[i];
- var newPattern;
- if (prefix)
- newPattern = [prefix, e];
- else
- newPattern = [e];
- this._process(newPattern.concat(remain), index, inGlobStar);
- }
-};
-
-
-GlobSync$1.prototype._emitMatch = function (index, e) {
- if (isIgnored$1(this, e))
- return
-
- var abs = this._makeAbs(e);
-
- if (this.mark)
- e = this._mark(e);
-
- if (this.absolute) {
- e = abs;
- }
-
- if (this.matches[index][e])
- return
-
- if (this.nodir) {
- var c = this.cache[abs];
- if (c === 'DIR' || Array.isArray(c))
- return
- }
-
- this.matches[index][e] = true;
-
- if (this.stat)
- this._stat(e);
-};
-
-
-GlobSync$1.prototype._readdirInGlobStar = function (abs) {
- // follow all symlinked directories forever
- // just proceed as if this is a non-globstar situation
- if (this.follow)
- return this._readdir(abs, false)
-
- var entries;
- var lstat;
- try {
- lstat = this.fs.lstatSync(abs);
- } catch (er) {
- if (er.code === 'ENOENT') {
- // lstat failed, doesn't exist
- return null
- }
- }
-
- var isSym = lstat && lstat.isSymbolicLink();
- this.symlinks[abs] = isSym;
-
- // If it's not a symlink or a dir, then it's definitely a regular file.
- // don't bother doing a readdir in that case.
- if (!isSym && lstat && !lstat.isDirectory())
- this.cache[abs] = 'FILE';
- else
- entries = this._readdir(abs, false);
-
- return entries
-};
-
-GlobSync$1.prototype._readdir = function (abs, inGlobStar) {
-
- if (inGlobStar && !ownProp$1(this.symlinks, abs))
- return this._readdirInGlobStar(abs)
-
- if (ownProp$1(this.cache, abs)) {
- var c = this.cache[abs];
- if (!c || c === 'FILE')
- return null
-
- if (Array.isArray(c))
- return c
- }
-
- try {
- return this._readdirEntries(abs, this.fs.readdirSync(abs))
- } catch (er) {
- this._readdirError(abs, er);
- return null
- }
-};
-
-GlobSync$1.prototype._readdirEntries = function (abs, entries) {
- // if we haven't asked to stat everything, then just
- // assume that everything in there exists, so we can avoid
- // having to stat it a second time.
- if (!this.mark && !this.stat) {
- for (var i = 0; i < entries.length; i ++) {
- var e = entries[i];
- if (abs === '/')
- e = abs + e;
- else
- e = abs + '/' + e;
- this.cache[e] = true;
- }
- }
-
- this.cache[abs] = entries;
-
- // mark and cache dir-ness
- return entries
-};
-
-GlobSync$1.prototype._readdirError = function (f, er) {
- // handle errors, and cache the information
- switch (er.code) {
- case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
- case 'ENOTDIR': // totally normal. means it *does* exist.
- var abs = this._makeAbs(f);
- this.cache[abs] = 'FILE';
- if (abs === this.cwdAbs) {
- var error = new Error(er.code + ' invalid cwd ' + this.cwd);
- error.path = this.cwd;
- error.code = er.code;
- throw error
- }
- break
-
- case 'ENOENT': // not terribly unusual
- case 'ELOOP':
- case 'ENAMETOOLONG':
- case 'UNKNOWN':
- this.cache[this._makeAbs(f)] = false;
- break
-
- default: // some unusual error. Treat as failure.
- this.cache[this._makeAbs(f)] = false;
- if (this.strict)
- throw er
- if (!this.silent)
- console.error('glob error', er);
- break
- }
-};
-
-GlobSync$1.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
-
- var entries = this._readdir(abs, inGlobStar);
-
- // no entries means not a dir, so it can never have matches
- // foo.txt/** doesn't match foo.txt
- if (!entries)
- return
-
- // test without the globstar, and with every child both below
- // and replacing the globstar.
- var remainWithoutGlobStar = remain.slice(1);
- var gspref = prefix ? [ prefix ] : [];
- var noGlobStar = gspref.concat(remainWithoutGlobStar);
-
- // the noGlobStar pattern exits the inGlobStar state
- this._process(noGlobStar, index, false);
-
- var len = entries.length;
- var isSym = this.symlinks[abs];
-
- // If it's a symlink, and we're in a globstar, then stop
- if (isSym && inGlobStar)
- return
-
- for (var i = 0; i < len; i++) {
- var e = entries[i];
- if (e.charAt(0) === '.' && !this.dot)
- continue
-
- // these two cases enter the inGlobStar state
- var instead = gspref.concat(entries[i], remainWithoutGlobStar);
- this._process(instead, index, true);
-
- var below = gspref.concat(entries[i], remain);
- this._process(below, index, true);
- }
-};
-
-GlobSync$1.prototype._processSimple = function (prefix, index) {
- // XXX review this. Shouldn't it be doing the mounting etc
- // before doing stat? kinda weird?
- var exists = this._stat(prefix);
-
- if (!this.matches[index])
- this.matches[index] = Object.create(null);
-
- // If it doesn't exist, then just mark the lack of results
- if (!exists)
- return
-
- if (prefix && isAbsolute$1(prefix) && !this.nomount) {
- var trail = /[\/\\]$/.test(prefix);
- if (prefix.charAt(0) === '/') {
- prefix = path$e.join(this.root, prefix);
- } else {
- prefix = path$e.resolve(this.root, prefix);
- if (trail)
- prefix += '/';
- }
- }
-
- if (process.platform === 'win32')
- prefix = prefix.replace(/\\/g, '/');
-
- // Mark this as a match
- this._emitMatch(index, prefix);
-};
-
-// Returns either 'DIR', 'FILE', or false
-GlobSync$1.prototype._stat = function (f) {
- var abs = this._makeAbs(f);
- var needDir = f.slice(-1) === '/';
-
- if (f.length > this.maxLength)
- return false
-
- if (!this.stat && ownProp$1(this.cache, abs)) {
- var c = this.cache[abs];
-
- if (Array.isArray(c))
- c = 'DIR';
-
- // It exists, but maybe not how we need it
- if (!needDir || c === 'DIR')
- return c
-
- if (needDir && c === 'FILE')
- return false
-
- // otherwise we have to stat, because maybe c=true
- // if we know it exists, but not what it is.
- }
- var stat = this.statCache[abs];
- if (!stat) {
- var lstat;
- try {
- lstat = this.fs.lstatSync(abs);
- } catch (er) {
- if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
- this.statCache[abs] = false;
- return false
- }
- }
-
- if (lstat && lstat.isSymbolicLink()) {
- try {
- stat = this.fs.statSync(abs);
- } catch (er) {
- stat = lstat;
- }
- } else {
- stat = lstat;
- }
- }
-
- this.statCache[abs] = stat;
-
- var c = true;
- if (stat)
- c = stat.isDirectory() ? 'DIR' : 'FILE';
-
- this.cache[abs] = this.cache[abs] || c;
-
- if (needDir && c === 'FILE')
- return false
-
- return c
-};
-
-GlobSync$1.prototype._mark = function (p) {
- return common$5.mark(this, p)
-};
-
-GlobSync$1.prototype._makeAbs = function (f) {
- return common$5.makeAbs(this, f)
-};
-
-// Returns a wrapper function that returns a wrapped callback
-// The wrapper function should do some stuff, and return a
-// presumably different callback function.
-// This makes sure that own properties are retained, so that
-// decorations and such are not lost along the way.
-var wrappy_1 = wrappy$2;
-function wrappy$2 (fn, cb) {
- if (fn && cb) return wrappy$2(fn)(cb)
-
- if (typeof fn !== 'function')
- throw new TypeError('need wrapper function')
-
- Object.keys(fn).forEach(function (k) {
- wrapper[k] = fn[k];
- });
-
- return wrapper
-
- function wrapper() {
- var args = new Array(arguments.length);
- for (var i = 0; i < args.length; i++) {
- args[i] = arguments[i];
- }
- var ret = fn.apply(this, args);
- var cb = args[args.length-1];
- if (typeof ret === 'function' && ret !== cb) {
- Object.keys(cb).forEach(function (k) {
- ret[k] = cb[k];
- });
- }
- return ret
- }
-}
-
-var once$3 = {exports: {}};
-
-var wrappy$1 = wrappy_1;
-once$3.exports = wrappy$1(once$2);
-once$3.exports.strict = wrappy$1(onceStrict);
-
-once$2.proto = once$2(function () {
- Object.defineProperty(Function.prototype, 'once', {
- value: function () {
- return once$2(this)
- },
- configurable: true
- });
-
- Object.defineProperty(Function.prototype, 'onceStrict', {
- value: function () {
- return onceStrict(this)
- },
- configurable: true
- });
-});
-
-function once$2 (fn) {
- var f = function () {
- if (f.called) return f.value
- f.called = true;
- return f.value = fn.apply(this, arguments)
- };
- f.called = false;
- return f
-}
-
-function onceStrict (fn) {
- var f = function () {
- if (f.called)
- throw new Error(f.onceError)
- f.called = true;
- return f.value = fn.apply(this, arguments)
- };
- var name = fn.name || 'Function wrapped with `once`';
- f.onceError = name + " shouldn't be called more than once";
- f.called = false;
- return f
-}
-
-var wrappy = wrappy_1;
-var reqs = Object.create(null);
-var once$1 = once$3.exports;
-
-var inflight_1 = wrappy(inflight$1);
-
-function inflight$1 (key, cb) {
- if (reqs[key]) {
- reqs[key].push(cb);
- return null
- } else {
- reqs[key] = [cb];
- return makeres(key)
- }
-}
-
-function makeres (key) {
- return once$1(function RES () {
- var cbs = reqs[key];
- var len = cbs.length;
- var args = slice(arguments);
-
- // XXX It's somewhat ambiguous whether a new callback added in this
- // pass should be queued for later execution if something in the
- // list of callbacks throws, or if it should just be discarded.
- // However, it's such an edge case that it hardly matters, and either
- // choice is likely as surprising as the other.
- // As it happens, we do go ahead and schedule it for later execution.
- try {
- for (var i = 0; i < len; i++) {
- cbs[i].apply(null, args);
- }
- } finally {
- if (cbs.length > len) {
- // added more in the interim.
- // de-zalgo, just in case, but don't call again.
- cbs.splice(0, len);
- process.nextTick(function () {
- RES.apply(null, args);
- });
- } else {
- delete reqs[key];
- }
- }
- })
-}
-
-function slice (args) {
- var length = args.length;
- var array = [];
-
- for (var i = 0; i < length; i++) array[i] = args[i];
- return array
-}
-
-// Approach:
-//
-// 1. Get the minimatch set
-// 2. For each pattern in the set, PROCESS(pattern, false)
-// 3. Store matches per-set, then uniq them
-//
-// PROCESS(pattern, inGlobStar)
-// Get the first [n] items from pattern that are all strings
-// Join these together. This is PREFIX.
-// If there is no more remaining, then stat(PREFIX) and
-// add to matches if it succeeds. END.
-//
-// If inGlobStar and PREFIX is symlink and points to dir
-// set ENTRIES = []
-// else readdir(PREFIX) as ENTRIES
-// If fail, END
-//
-// with ENTRIES
-// If pattern[n] is GLOBSTAR
-// // handle the case where the globstar match is empty
-// // by pruning it out, and testing the resulting pattern
-// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
-// // handle other cases.
-// for ENTRY in ENTRIES (not dotfiles)
-// // attach globstar + tail onto the entry
-// // Mark that this entry is a globstar match
-// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
-//
-// else // not globstar
-// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
-// Test ENTRY against pattern[n]
-// If fails, continue
-// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
-//
-// Caveat:
-// Cache all stats and readdirs results to minimize syscall. Since all
-// we ever care about is existence and directory-ness, we can just keep
-// `true` for files, and [children,...] for directories, or `false` for
-// things that don't exist.
-
-var glob_1 = glob;
-
-var rp = fs_realpath;
-var minimatch = minimatch_1;
-var inherits = inherits$1.exports;
-var EE$1 = require$$0__default$5.EventEmitter;
-var path$d = path__default;
-var assert$2 = require$$5__default;
-var isAbsolute = pathIsAbsolute.exports;
-var globSync = sync$3;
-var common$4 = common$6;
-var setopts = common$4.setopts;
-var ownProp = common$4.ownProp;
-var inflight = inflight_1;
-var childrenIgnored = common$4.childrenIgnored;
-var isIgnored = common$4.isIgnored;
-
-var once = once$3.exports;
-
-function glob (pattern, options, cb) {
- if (typeof options === 'function') cb = options, options = {};
- if (!options) options = {};
-
- if (options.sync) {
- if (cb)
- throw new TypeError('callback provided to sync glob')
- return globSync(pattern, options)
- }
-
- return new Glob(pattern, options, cb)
-}
-
-glob.sync = globSync;
-var GlobSync = glob.GlobSync = globSync.GlobSync;
-
-// old api surface
-glob.glob = glob;
-
-function extend (origin, add) {
- if (add === null || typeof add !== 'object') {
- return origin
- }
-
- var keys = Object.keys(add);
- var i = keys.length;
- while (i--) {
- origin[keys[i]] = add[keys[i]];
- }
- return origin
-}
-
-glob.hasMagic = function (pattern, options_) {
- var options = extend({}, options_);
- options.noprocess = true;
-
- var g = new Glob(pattern, options);
- var set = g.minimatch.set;
-
- if (!pattern)
- return false
-
- if (set.length > 1)
- return true
-
- for (var j = 0; j < set[0].length; j++) {
- if (typeof set[0][j] !== 'string')
- return true
- }
-
- return false
-};
-
-glob.Glob = Glob;
-inherits(Glob, EE$1);
-function Glob (pattern, options, cb) {
- if (typeof options === 'function') {
- cb = options;
- options = null;
- }
-
- if (options && options.sync) {
- if (cb)
- throw new TypeError('callback provided to sync glob')
- return new GlobSync(pattern, options)
- }
-
- if (!(this instanceof Glob))
- return new Glob(pattern, options, cb)
-
- setopts(this, pattern, options);
- this._didRealPath = false;
-
- // process each pattern in the minimatch set
- var n = this.minimatch.set.length;
-
- // The matches are stored as {<filename>: true,...} so that
- // duplicates are automagically pruned.
- // Later, we do an Object.keys() on these.
- // Keep them as a list so we can fill in when nonull is set.
- this.matches = new Array(n);
-
- if (typeof cb === 'function') {
- cb = once(cb);
- this.on('error', cb);
- this.on('end', function (matches) {
- cb(null, matches);
- });
- }
-
- var self = this;
- this._processing = 0;
-
- this._emitQueue = [];
- this._processQueue = [];
- this.paused = false;
-
- if (this.noprocess)
- return this
-
- if (n === 0)
- return done()
-
- var sync = true;
- for (var i = 0; i < n; i ++) {
- this._process(this.minimatch.set[i], i, false, done);
- }
- sync = false;
-
- function done () {
- --self._processing;
- if (self._processing <= 0) {
- if (sync) {
- process.nextTick(function () {
- self._finish();
- });
- } else {
- self._finish();
- }
- }
- }
-}
-
-Glob.prototype._finish = function () {
- assert$2(this instanceof Glob);
- if (this.aborted)
- return
-
- if (this.realpath && !this._didRealpath)
- return this._realpath()
-
- common$4.finish(this);
- this.emit('end', this.found);
-};
-
-Glob.prototype._realpath = function () {
- if (this._didRealpath)
- return
-
- this._didRealpath = true;
-
- var n = this.matches.length;
- if (n === 0)
- return this._finish()
-
- var self = this;
- for (var i = 0; i < this.matches.length; i++)
- this._realpathSet(i, next);
-
- function next () {
- if (--n === 0)
- self._finish();
- }
-};
-
-Glob.prototype._realpathSet = function (index, cb) {
- var matchset = this.matches[index];
- if (!matchset)
- return cb()
-
- var found = Object.keys(matchset);
- var self = this;
- var n = found.length;
-
- if (n === 0)
- return cb()
-
- var set = this.matches[index] = Object.create(null);
- found.forEach(function (p, i) {
- // If there's a problem with the stat, then it means that
- // one or more of the links in the realpath couldn't be
- // resolved. just return the abs value in that case.
- p = self._makeAbs(p);
- rp.realpath(p, self.realpathCache, function (er, real) {
- if (!er)
- set[real] = true;
- else if (er.syscall === 'stat')
- set[p] = true;
- else
- self.emit('error', er); // srsly wtf right here
-
- if (--n === 0) {
- self.matches[index] = set;
- cb();
- }
- });
- });
-};
-
-Glob.prototype._mark = function (p) {
- return common$4.mark(this, p)
-};
-
-Glob.prototype._makeAbs = function (f) {
- return common$4.makeAbs(this, f)
-};
-
-Glob.prototype.abort = function () {
- this.aborted = true;
- this.emit('abort');
-};
-
-Glob.prototype.pause = function () {
- if (!this.paused) {
- this.paused = true;
- this.emit('pause');
- }
-};
-
-Glob.prototype.resume = function () {
- if (this.paused) {
- this.emit('resume');
- this.paused = false;
- if (this._emitQueue.length) {
- var eq = this._emitQueue.slice(0);
- this._emitQueue.length = 0;
- for (var i = 0; i < eq.length; i ++) {
- var e = eq[i];
- this._emitMatch(e[0], e[1]);
- }
- }
- if (this._processQueue.length) {
- var pq = this._processQueue.slice(0);
- this._processQueue.length = 0;
- for (var i = 0; i < pq.length; i ++) {
- var p = pq[i];
- this._processing--;
- this._process(p[0], p[1], p[2], p[3]);
- }
- }
- }
-};
-
-Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
- assert$2(this instanceof Glob);
- assert$2(typeof cb === 'function');
-
- if (this.aborted)
- return
-
- this._processing++;
- if (this.paused) {
- this._processQueue.push([pattern, index, inGlobStar, cb]);
- return
- }
-
- //console.error('PROCESS %d', this._processing, pattern)
-
- // Get the first [n] parts of pattern that are all strings.
- var n = 0;
- while (typeof pattern[n] === 'string') {
- n ++;
- }
- // now n is the index of the first one that is *not* a string.
-
- // see if there's anything else
- var prefix;
- switch (n) {
- // if not, then this is rather simple
- case pattern.length:
- this._processSimple(pattern.join('/'), index, cb);
- return
-
- case 0:
- // pattern *starts* with some non-trivial item.
- // going to readdir(cwd), but not include the prefix in matches.
- prefix = null;
- break
-
- default:
- // pattern has some string bits in the front.
- // whatever it starts with, whether that's 'absolute' like /foo/bar,
- // or 'relative' like '../baz'
- prefix = pattern.slice(0, n).join('/');
- break
- }
-
- var remain = pattern.slice(n);
-
- // get the list of entries.
- var read;
- if (prefix === null)
- read = '.';
- else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
- if (!prefix || !isAbsolute(prefix))
- prefix = '/' + prefix;
- read = prefix;
- } else
- read = prefix;
-
- var abs = this._makeAbs(read);
-
- //if ignored, skip _processing
- if (childrenIgnored(this, read))
- return cb()
-
- var isGlobStar = remain[0] === minimatch.GLOBSTAR;
- if (isGlobStar)
- this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb);
- else
- this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb);
-};
-
-Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
- var self = this;
- this._readdir(abs, inGlobStar, function (er, entries) {
- return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
- });
-};
-
-Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
-
- // if the abs isn't a dir, then nothing can match!
- if (!entries)
- return cb()
-
- // It will only match dot entries if it starts with a dot, or if
- // dot is set. Stuff like @(.foo|.bar) isn't allowed.
- var pn = remain[0];
- var negate = !!this.minimatch.negate;
- var rawGlob = pn._glob;
- var dotOk = this.dot || rawGlob.charAt(0) === '.';
-
- var matchedEntries = [];
- for (var i = 0; i < entries.length; i++) {
- var e = entries[i];
- if (e.charAt(0) !== '.' || dotOk) {
- var m;
- if (negate && !prefix) {
- m = !e.match(pn);
- } else {
- m = e.match(pn);
- }
- if (m)
- matchedEntries.push(e);
- }
- }
-
- //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
-
- var len = matchedEntries.length;
- // If there are no matched entries, then nothing matches.
- if (len === 0)
- return cb()
-
- // if this is the last remaining pattern bit, then no need for
- // an additional stat *unless* the user has specified mark or
- // stat explicitly. We know they exist, since readdir returned
- // them.
-
- if (remain.length === 1 && !this.mark && !this.stat) {
- if (!this.matches[index])
- this.matches[index] = Object.create(null);
-
- for (var i = 0; i < len; i ++) {
- var e = matchedEntries[i];
- if (prefix) {
- if (prefix !== '/')
- e = prefix + '/' + e;
- else
- e = prefix + e;
- }
-
- if (e.charAt(0) === '/' && !this.nomount) {
- e = path$d.join(this.root, e);
- }
- this._emitMatch(index, e);
- }
- // This was the last one, and no stats were needed
- return cb()
- }
-
- // now test all matched entries as stand-ins for that part
- // of the pattern.
- remain.shift();
- for (var i = 0; i < len; i ++) {
- var e = matchedEntries[i];
- if (prefix) {
- if (prefix !== '/')
- e = prefix + '/' + e;
- else
- e = prefix + e;
- }
- this._process([e].concat(remain), index, inGlobStar, cb);
- }
- cb();
-};
-
-Glob.prototype._emitMatch = function (index, e) {
- if (this.aborted)
- return
-
- if (isIgnored(this, e))
- return
-
- if (this.paused) {
- this._emitQueue.push([index, e]);
- return
- }
-
- var abs = isAbsolute(e) ? e : this._makeAbs(e);
-
- if (this.mark)
- e = this._mark(e);
-
- if (this.absolute)
- e = abs;
-
- if (this.matches[index][e])
- return
-
- if (this.nodir) {
- var c = this.cache[abs];
- if (c === 'DIR' || Array.isArray(c))
- return
- }
-
- this.matches[index][e] = true;
-
- var st = this.statCache[abs];
- if (st)
- this.emit('stat', e, st);
-
- this.emit('match', e);
-};
-
-Glob.prototype._readdirInGlobStar = function (abs, cb) {
- if (this.aborted)
- return
-
- // follow all symlinked directories forever
- // just proceed as if this is a non-globstar situation
- if (this.follow)
- return this._readdir(abs, false, cb)
-
- var lstatkey = 'lstat\0' + abs;
- var self = this;
- var lstatcb = inflight(lstatkey, lstatcb_);
-
- if (lstatcb)
- self.fs.lstat(abs, lstatcb);
-
- function lstatcb_ (er, lstat) {
- if (er && er.code === 'ENOENT')
- return cb()
-
- var isSym = lstat && lstat.isSymbolicLink();
- self.symlinks[abs] = isSym;
-
- // If it's not a symlink or a dir, then it's definitely a regular file.
- // don't bother doing a readdir in that case.
- if (!isSym && lstat && !lstat.isDirectory()) {
- self.cache[abs] = 'FILE';
- cb();
- } else
- self._readdir(abs, false, cb);
- }
-};
-
-Glob.prototype._readdir = function (abs, inGlobStar, cb) {
- if (this.aborted)
- return
-
- cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb);
- if (!cb)
- return
-
- //console.error('RD %j %j', +inGlobStar, abs)
- if (inGlobStar && !ownProp(this.symlinks, abs))
- return this._readdirInGlobStar(abs, cb)
-
- if (ownProp(this.cache, abs)) {
- var c = this.cache[abs];
- if (!c || c === 'FILE')
- return cb()
-
- if (Array.isArray(c))
- return cb(null, c)
- }
-
- var self = this;
- self.fs.readdir(abs, readdirCb(this, abs, cb));
-};
-
-function readdirCb (self, abs, cb) {
- return function (er, entries) {
- if (er)
- self._readdirError(abs, er, cb);
- else
- self._readdirEntries(abs, entries, cb);
- }
-}
-
-Glob.prototype._readdirEntries = function (abs, entries, cb) {
- if (this.aborted)
- return
-
- // if we haven't asked to stat everything, then just
- // assume that everything in there exists, so we can avoid
- // having to stat it a second time.
- if (!this.mark && !this.stat) {
- for (var i = 0; i < entries.length; i ++) {
- var e = entries[i];
- if (abs === '/')
- e = abs + e;
- else
- e = abs + '/' + e;
- this.cache[e] = true;
- }
- }
-
- this.cache[abs] = entries;
- return cb(null, entries)
-};
-
-Glob.prototype._readdirError = function (f, er, cb) {
- if (this.aborted)
- return
-
- // handle errors, and cache the information
- switch (er.code) {
- case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
- case 'ENOTDIR': // totally normal. means it *does* exist.
- var abs = this._makeAbs(f);
- this.cache[abs] = 'FILE';
- if (abs === this.cwdAbs) {
- var error = new Error(er.code + ' invalid cwd ' + this.cwd);
- error.path = this.cwd;
- error.code = er.code;
- this.emit('error', error);
- this.abort();
- }
- break
-
- case 'ENOENT': // not terribly unusual
- case 'ELOOP':
- case 'ENAMETOOLONG':
- case 'UNKNOWN':
- this.cache[this._makeAbs(f)] = false;
- break
-
- default: // some unusual error. Treat as failure.
- this.cache[this._makeAbs(f)] = false;
- if (this.strict) {
- this.emit('error', er);
- // If the error is handled, then we abort
- // if not, we threw out of here
- this.abort();
- }
- if (!this.silent)
- console.error('glob error', er);
- break
- }
-
- return cb()
-};
-
-Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
- var self = this;
- this._readdir(abs, inGlobStar, function (er, entries) {
- self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb);
- });
-};
-
-
-Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
- //console.error('pgs2', prefix, remain[0], entries)
-
- // no entries means not a dir, so it can never have matches
- // foo.txt/** doesn't match foo.txt
- if (!entries)
- return cb()
-
- // test without the globstar, and with every child both below
- // and replacing the globstar.
- var remainWithoutGlobStar = remain.slice(1);
- var gspref = prefix ? [ prefix ] : [];
- var noGlobStar = gspref.concat(remainWithoutGlobStar);
-
- // the noGlobStar pattern exits the inGlobStar state
- this._process(noGlobStar, index, false, cb);
-
- var isSym = this.symlinks[abs];
- var len = entries.length;
-
- // If it's a symlink, and we're in a globstar, then stop
- if (isSym && inGlobStar)
- return cb()
-
- for (var i = 0; i < len; i++) {
- var e = entries[i];
- if (e.charAt(0) === '.' && !this.dot)
- continue
-
- // these two cases enter the inGlobStar state
- var instead = gspref.concat(entries[i], remainWithoutGlobStar);
- this._process(instead, index, true, cb);
-
- var below = gspref.concat(entries[i], remain);
- this._process(below, index, true, cb);
- }
-
- cb();
-};
-
-Glob.prototype._processSimple = function (prefix, index, cb) {
- // XXX review this. Shouldn't it be doing the mounting etc
- // before doing stat? kinda weird?
- var self = this;
- this._stat(prefix, function (er, exists) {
- self._processSimple2(prefix, index, er, exists, cb);
- });
-};
-Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
-
- //console.error('ps2', prefix, exists)
-
- if (!this.matches[index])
- this.matches[index] = Object.create(null);
-
- // If it doesn't exist, then just mark the lack of results
- if (!exists)
- return cb()
-
- if (prefix && isAbsolute(prefix) && !this.nomount) {
- var trail = /[\/\\]$/.test(prefix);
- if (prefix.charAt(0) === '/') {
- prefix = path$d.join(this.root, prefix);
- } else {
- prefix = path$d.resolve(this.root, prefix);
- if (trail)
- prefix += '/';
- }
- }
-
- if (process.platform === 'win32')
- prefix = prefix.replace(/\\/g, '/');
-
- // Mark this as a match
- this._emitMatch(index, prefix);
- cb();
-};
-
-// Returns either 'DIR', 'FILE', or false
-Glob.prototype._stat = function (f, cb) {
- var abs = this._makeAbs(f);
- var needDir = f.slice(-1) === '/';
-
- if (f.length > this.maxLength)
- return cb()
-
- if (!this.stat && ownProp(this.cache, abs)) {
- var c = this.cache[abs];
-
- if (Array.isArray(c))
- c = 'DIR';
-
- // It exists, but maybe not how we need it
- if (!needDir || c === 'DIR')
- return cb(null, c)
-
- if (needDir && c === 'FILE')
- return cb()
-
- // otherwise we have to stat, because maybe c=true
- // if we know it exists, but not what it is.
- }
- var stat = this.statCache[abs];
- if (stat !== undefined) {
- if (stat === false)
- return cb(null, stat)
- else {
- var type = stat.isDirectory() ? 'DIR' : 'FILE';
- if (needDir && type === 'FILE')
- return cb()
- else
- return cb(null, type, stat)
- }
- }
-
- var self = this;
- var statcb = inflight('stat\0' + abs, lstatcb_);
- if (statcb)
- self.fs.lstat(abs, statcb);
-
- function lstatcb_ (er, lstat) {
- if (lstat && lstat.isSymbolicLink()) {
- // If it's a symlink, then treat it as the target, unless
- // the target does not exist, then treat it as a file.
- return self.fs.stat(abs, function (er, stat) {
- if (er)
- self._stat2(f, abs, null, lstat, cb);
- else
- self._stat2(f, abs, er, stat, cb);
- })
- } else {
- self._stat2(f, abs, er, lstat, cb);
- }
- }
-};
-
-Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
- if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
- this.statCache[abs] = false;
- return cb()
- }
-
- var needDir = f.slice(-1) === '/';
- this.statCache[abs] = stat;
-
- if (abs.slice(-1) === '/' && stat && !stat.isDirectory())
- return cb(null, false, stat)
-
- var c = true;
- if (stat)
- c = stat.isDirectory() ? 'DIR' : 'FILE';
- this.cache[abs] = this.cache[abs] || c;
-
- if (needDir && c === 'FILE')
- return cb()
-
- return cb(null, c, stat)
-};
-
-// @ts-check
-/** @typedef { import('estree').BaseNode} BaseNode */
-
-/** @typedef {{
- skip: () => void;
- remove: () => void;
- replace: (node: BaseNode) => void;
-}} WalkerContext */
-
-class WalkerBase {
- constructor() {
- /** @type {boolean} */
- this.should_skip = false;
-
- /** @type {boolean} */
- this.should_remove = false;
-
- /** @type {BaseNode | null} */
- this.replacement = null;
-
- /** @type {WalkerContext} */
- this.context = {
- skip: () => (this.should_skip = true),
- remove: () => (this.should_remove = true),
- replace: (node) => (this.replacement = node)
- };
- }
-
- /**
- *
- * @param {any} parent
- * @param {string} prop
- * @param {number} index
- * @param {BaseNode} node
- */
- replace(parent, prop, index, node) {
- if (parent) {
- if (index !== null) {
- parent[prop][index] = node;
- } else {
- parent[prop] = node;
- }
- }
- }
-
- /**
- *
- * @param {any} parent
- * @param {string} prop
- * @param {number} index
- */
- remove(parent, prop, index) {
- if (parent) {
- if (index !== null) {
- parent[prop].splice(index, 1);
- } else {
- delete parent[prop];
- }
- }
- }
-}
-
-// @ts-check
-
-/** @typedef { import('estree').BaseNode} BaseNode */
-/** @typedef { import('./walker.js').WalkerContext} WalkerContext */
-
-/** @typedef {(
- * this: WalkerContext,
- * node: BaseNode,
- * parent: BaseNode,
- * key: string,
- * index: number
- * ) => void} SyncHandler */
-
-class SyncWalker extends WalkerBase {
- /**
- *
- * @param {SyncHandler} enter
- * @param {SyncHandler} leave
- */
- constructor(enter, leave) {
- super();
-
- /** @type {SyncHandler} */
- this.enter = enter;
-
- /** @type {SyncHandler} */
- this.leave = leave;
- }
-
- /**
- *
- * @param {BaseNode} node
- * @param {BaseNode} parent
- * @param {string} [prop]
- * @param {number} [index]
- * @returns {BaseNode}
- */
- visit(node, parent, prop, index) {
- if (node) {
- if (this.enter) {
- const _should_skip = this.should_skip;
- const _should_remove = this.should_remove;
- const _replacement = this.replacement;
- this.should_skip = false;
- this.should_remove = false;
- this.replacement = null;
-
- this.enter.call(this.context, node, parent, prop, index);
-
- if (this.replacement) {
- node = this.replacement;
- this.replace(parent, prop, index, node);
- }
-
- if (this.should_remove) {
- this.remove(parent, prop, index);
- }
-
- const skipped = this.should_skip;
- const removed = this.should_remove;
-
- this.should_skip = _should_skip;
- this.should_remove = _should_remove;
- this.replacement = _replacement;
-
- if (skipped) return node;
- if (removed) return null;
- }
-
- for (const key in node) {
- const value = node[key];
-
- if (typeof value !== "object") {
- continue;
- } else if (Array.isArray(value)) {
- for (let i = 0; i < value.length; i += 1) {
- if (value[i] !== null && typeof value[i].type === 'string') {
- if (!this.visit(value[i], node, key, i)) {
- // removed
- i--;
- }
- }
- }
- } else if (value !== null && typeof value.type === "string") {
- this.visit(value, node, key, null);
- }
- }
-
- if (this.leave) {
- const _replacement = this.replacement;
- const _should_remove = this.should_remove;
- this.replacement = null;
- this.should_remove = false;
-
- this.leave.call(this.context, node, parent, prop, index);
-
- if (this.replacement) {
- node = this.replacement;
- this.replace(parent, prop, index, node);
- }
-
- if (this.should_remove) {
- this.remove(parent, prop, index);
- }
-
- const removed = this.should_remove;
-
- this.replacement = _replacement;
- this.should_remove = _should_remove;
-
- if (removed) return null;
- }
- }
-
- return node;
- }
-}
-
-// @ts-check
-
-/** @typedef { import('estree').BaseNode} BaseNode */
-/** @typedef { import('./sync.js').SyncHandler} SyncHandler */
-/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */
-
-/**
- *
- * @param {BaseNode} ast
- * @param {{
- * enter?: SyncHandler
- * leave?: SyncHandler
- * }} walker
- * @returns {BaseNode}
- */
-function walk$1(ast, { enter, leave }) {
- const instance = new SyncWalker(enter, leave);
- return instance.visit(ast, null);
-}
-
-function isReference(node, parent) {
- if (node.type === 'MemberExpression') {
- return !node.computed && isReference(node.object, node);
- }
- if (node.type === 'Identifier') {
- if (!parent)
- return true;
- switch (parent.type) {
- // disregard `bar` in `foo.bar`
- case 'MemberExpression': return parent.computed || node === parent.object;
- // disregard the `foo` in `class {foo(){}}` but keep it in `class {[foo](){}}`
- case 'MethodDefinition': return parent.computed;
- // disregard the `foo` in `class {foo=bar}` but keep it in `class {[foo]=bar}` and `class {bar=foo}`
- case 'FieldDefinition': return parent.computed || node === parent.value;
- // disregard the `bar` in `{ bar: foo }`, but keep it in `{ [bar]: foo }`
- case 'Property': return parent.computed || node === parent.value;
- // disregard the `bar` in `export { foo as bar }` or
- // the foo in `import { foo as bar }`
- case 'ExportSpecifier':
- case 'ImportSpecifier': return node === parent.local;
- // disregard the `foo` in `foo: while (...) { ... break foo; ... continue foo;}`
- case 'LabeledStatement':
- case 'BreakStatement':
- case 'ContinueStatement': return false;
- default: return true;
- }
- }
- return false;
-}
-
-var peerDependencies = {
- rollup: "^2.38.3"
-};
-
-function tryParse(parse, code, id) {
- try {
- return parse(code, { allowReturnOutsideFunction: true });
- } catch (err) {
- err.message += ` in ${id}`;
- throw err;
- }
-}
-
-const firstpassGlobal = /\b(?:require|module|exports|global)\b/;
-
-const firstpassNoGlobal = /\b(?:require|module|exports)\b/;
-
-function hasCjsKeywords(code, ignoreGlobal) {
- const firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal;
- return firstpass.test(code);
-}
-
-/* eslint-disable no-underscore-dangle */
-
-function analyzeTopLevelStatements(parse, code, id) {
- const ast = tryParse(parse, code, id);
-
- let isEsModule = false;
- let hasDefaultExport = false;
- let hasNamedExports = false;
-
- for (const node of ast.body) {
- switch (node.type) {
- case 'ExportDefaultDeclaration':
- isEsModule = true;
- hasDefaultExport = true;
- break;
- case 'ExportNamedDeclaration':
- isEsModule = true;
- if (node.declaration) {
- hasNamedExports = true;
- } else {
- for (const specifier of node.specifiers) {
- if (specifier.exported.name === 'default') {
- hasDefaultExport = true;
- } else {
- hasNamedExports = true;
- }
- }
- }
- break;
- case 'ExportAllDeclaration':
- isEsModule = true;
- if (node.exported && node.exported.name === 'default') {
- hasDefaultExport = true;
- } else {
- hasNamedExports = true;
- }
- break;
- case 'ImportDeclaration':
- isEsModule = true;
- break;
- }
- }
-
- return { isEsModule, hasDefaultExport, hasNamedExports, ast };
-}
-
-const isWrappedId = (id, suffix) => id.endsWith(suffix);
-const wrapId = (id, suffix) => `\0${id}${suffix}`;
-const unwrapId = (wrappedId, suffix) => wrappedId.slice(1, -suffix.length);
-
-const PROXY_SUFFIX = '?commonjs-proxy';
-const REQUIRE_SUFFIX = '?commonjs-require';
-const EXTERNAL_SUFFIX = '?commonjs-external';
-const EXPORTS_SUFFIX = '?commonjs-exports';
-const MODULE_SUFFIX = '?commonjs-module';
-
-const DYNAMIC_REGISTER_SUFFIX = '?commonjs-dynamic-register';
-const DYNAMIC_JSON_PREFIX = '\0commonjs-dynamic-json:';
-const DYNAMIC_PACKAGES_ID = '\0commonjs-dynamic-packages';
-
-const HELPERS_ID = '\0commonjsHelpers.js';
-
-// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers.
-// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled.
-// This will no longer be necessary once Rollup switches to ES6 output, likely
-// in Rollup 3
-
-const HELPERS = `
-export var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
-
-export function getDefaultExportFromCjs (x) {
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
-}
-
-export function getDefaultExportFromNamespaceIfPresent (n) {
- return n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n;
-}
-
-export function getDefaultExportFromNamespaceIfNotNamed (n) {
- return n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n;
-}
-
-export function getAugmentedNamespace(n) {
- if (n.__esModule) return n;
- var a = Object.defineProperty({}, '__esModule', {value: true});
- Object.keys(n).forEach(function (k) {
- var d = Object.getOwnPropertyDescriptor(n, k);
- Object.defineProperty(a, k, d.get ? d : {
- enumerable: true,
- get: function () {
- return n[k];
- }
- });
- });
- return a;
-}
-`;
-
-const FAILED_REQUIRE_ERROR = `throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');`;
-
-const HELPER_NON_DYNAMIC = `
-export function commonjsRequire (path) {
- ${FAILED_REQUIRE_ERROR}
-}
-`;
-
-const getDynamicHelpers = (ignoreDynamicRequires) => `
-export function createModule(modulePath) {
- return {
- path: modulePath,
- exports: {},
- require: function (path, base) {
- return commonjsRequire(path, base == null ? modulePath : base);
- }
- };
-}
-
-export function commonjsRegister (path, loader) {
- DYNAMIC_REQUIRE_LOADERS[path] = loader;
-}
-
-export function commonjsRegisterOrShort (path, to) {
- const resolvedPath = commonjsResolveImpl(path, null, true);
- if (resolvedPath !== null && DYNAMIC_REQUIRE_CACHE[resolvedPath]) {
- DYNAMIC_REQUIRE_CACHE[path] = DYNAMIC_REQUIRE_CACHE[resolvedPath];
- } else {
- DYNAMIC_REQUIRE_SHORTS[path] = to;
- }
-}
-
-const DYNAMIC_REQUIRE_LOADERS = Object.create(null);
-const DYNAMIC_REQUIRE_CACHE = Object.create(null);
-const DYNAMIC_REQUIRE_SHORTS = Object.create(null);
-const DEFAULT_PARENT_MODULE = {
- id: '<' + 'rollup>', exports: {}, parent: undefined, filename: null, loaded: false, children: [], paths: []
-};
-const CHECKED_EXTENSIONS = ['', '.js', '.json'];
-
-function normalize (path) {
- path = path.replace(/\\\\/g, '/');
- const parts = path.split('/');
- const slashed = parts[0] === '';
- for (let i = 1; i < parts.length; i++) {
- if (parts[i] === '.' || parts[i] === '') {
- parts.splice(i--, 1);
- }
- }
- for (let i = 1; i < parts.length; i++) {
- if (parts[i] !== '..') continue;
- if (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') {
- parts.splice(--i, 2);
- i--;
- }
- }
- path = parts.join('/');
- if (slashed && path[0] !== '/')
- path = '/' + path;
- else if (path.length === 0)
- path = '.';
- return path;
-}
-
-function join () {
- if (arguments.length === 0)
- return '.';
- let joined;
- for (let i = 0; i < arguments.length; ++i) {
- let arg = arguments[i];
- if (arg.length > 0) {
- if (joined === undefined)
- joined = arg;
- else
- joined += '/' + arg;
- }
- }
- if (joined === undefined)
- return '.';
-
- return joined;
-}
-
-function isPossibleNodeModulesPath (modulePath) {
- let c0 = modulePath[0];
- if (c0 === '/' || c0 === '\\\\') return false;
- let c1 = modulePath[1], c2 = modulePath[2];
- if ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\')) ||
- (c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\'))) return false;
- if (c1 === ':' && (c2 === '/' || c2 === '\\\\'))
- return false;
- return true;
-}
-
-function dirname (path) {
- if (path.length === 0)
- return '.';
-
- let i = path.length - 1;
- while (i > 0) {
- const c = path.charCodeAt(i);
- if ((c === 47 || c === 92) && i !== path.length - 1)
- break;
- i--;
- }
-
- if (i > 0)
- return path.substr(0, i);
-
- if (path.chartCodeAt(0) === 47 || path.chartCodeAt(0) === 92)
- return path.charAt(0);
-
- return '.';
-}
-
-export function commonjsResolveImpl (path, originalModuleDir, testCache) {
- const shouldTryNodeModules = isPossibleNodeModulesPath(path);
- path = normalize(path);
- let relPath;
- if (path[0] === '/') {
- originalModuleDir = '/';
- }
- while (true) {
- if (!shouldTryNodeModules) {
- relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;
- } else if (originalModuleDir) {
- relPath = normalize(originalModuleDir + '/node_modules/' + path);
- } else {
- relPath = normalize(join('node_modules', path));
- }
-
- if (relPath.endsWith('/..')) {
- break; // Travelled too far up, avoid infinite loop
- }
-
- for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {
- const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];
- if (DYNAMIC_REQUIRE_CACHE[resolvedPath]) {
- return resolvedPath;
- }
- if (DYNAMIC_REQUIRE_SHORTS[resolvedPath]) {
- return resolvedPath;
- }
- if (DYNAMIC_REQUIRE_LOADERS[resolvedPath]) {
- return resolvedPath;
- }
- }
- if (!shouldTryNodeModules) break;
- const nextDir = normalize(originalModuleDir + '/..');
- if (nextDir === originalModuleDir) break;
- originalModuleDir = nextDir;
- }
- return null;
-}
-
-export function commonjsResolve (path, originalModuleDir) {
- const resolvedPath = commonjsResolveImpl(path, originalModuleDir);
- if (resolvedPath !== null) {
- return resolvedPath;
- }
- return require.resolve(path);
-}
-
-export function commonjsRequire (path, originalModuleDir) {
- let resolvedPath = commonjsResolveImpl(path, originalModuleDir, true);
- if (resolvedPath !== null) {
- let cachedModule = DYNAMIC_REQUIRE_CACHE[resolvedPath];
- if (cachedModule) return cachedModule.exports;
- let shortTo = DYNAMIC_REQUIRE_SHORTS[resolvedPath];
- if (shortTo) {
- cachedModule = DYNAMIC_REQUIRE_CACHE[shortTo];
- if (cachedModule)
- return cachedModule.exports;
- resolvedPath = commonjsResolveImpl(shortTo, null, true);
- }
- const loader = DYNAMIC_REQUIRE_LOADERS[resolvedPath];
- if (loader) {
- DYNAMIC_REQUIRE_CACHE[resolvedPath] = cachedModule = {
- id: resolvedPath,
- filename: resolvedPath,
- path: dirname(resolvedPath),
- exports: {},
- parent: DEFAULT_PARENT_MODULE,
- loaded: false,
- children: [],
- paths: [],
- require: function (path, base) {
- return commonjsRequire(path, (base === undefined || base === null) ? cachedModule.path : base);
- }
- };
- try {
- loader.call(commonjsGlobal, cachedModule, cachedModule.exports);
- } catch (error) {
- delete DYNAMIC_REQUIRE_CACHE[resolvedPath];
- throw error;
- }
- cachedModule.loaded = true;
- return cachedModule.exports;
- };
- }
- ${ignoreDynamicRequires ? 'return require(path);' : FAILED_REQUIRE_ERROR}
-}
-
-commonjsRequire.cache = DYNAMIC_REQUIRE_CACHE;
-commonjsRequire.resolve = commonjsResolve;
-`;
-
-function getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires) {
- return `${HELPERS}${
- isDynamicRequireModulesEnabled ? getDynamicHelpers(ignoreDynamicRequires) : HELPER_NON_DYNAMIC
- }`;
-}
-
-/* eslint-disable import/prefer-default-export */
-
-function deconflict(scopes, globals, identifier) {
- let i = 1;
- let deconflicted = makeLegalIdentifier(identifier);
- const hasConflicts = () =>
- scopes.some((scope) => scope.contains(deconflicted)) || globals.has(deconflicted);
-
- while (hasConflicts()) {
- deconflicted = makeLegalIdentifier(`${identifier}_${i}`);
- i += 1;
- }
-
- for (const scope of scopes) {
- scope.declarations[deconflicted] = true;
- }
-
- return deconflicted;
-}
-
-function getName(id) {
- const name = makeLegalIdentifier(path$t.basename(id, path$t.extname(id)));
- if (name !== 'index') {
- return name;
- }
- return makeLegalIdentifier(path$t.basename(path$t.dirname(id)));
-}
-
-function normalizePathSlashes(path) {
- return path.replace(/\\/g, '/');
-}
-
-const VIRTUAL_PATH_BASE = '/$$rollup_base$$';
-const getVirtualPathForDynamicRequirePath = (path, commonDir) => {
- const normalizedPath = normalizePathSlashes(path);
- return normalizedPath.startsWith(commonDir)
- ? VIRTUAL_PATH_BASE + normalizedPath.slice(commonDir.length)
- : normalizedPath;
-};
-
-function getPackageEntryPoint(dirPath) {
- let entryPoint = 'index.js';
-
- try {
- if (fs$r.existsSync(path$t.join(dirPath, 'package.json'))) {
- entryPoint =
- JSON.parse(fs$r.readFileSync(path$t.join(dirPath, 'package.json'), { encoding: 'utf8' })).main ||
- entryPoint;
- }
- } catch (ignored) {
- // ignored
- }
-
- return entryPoint;
-}
-
-function getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir) {
- let code = `const commonjsRegisterOrShort = require('${HELPERS_ID}?commonjsRegisterOrShort');`;
- for (const dir of dynamicRequireModuleDirPaths) {
- const entryPoint = getPackageEntryPoint(dir);
-
- code += `\ncommonjsRegisterOrShort(${JSON.stringify(
- getVirtualPathForDynamicRequirePath(dir, commonDir)
- )}, ${JSON.stringify(getVirtualPathForDynamicRequirePath(path$t.join(dir, entryPoint), commonDir))});`;
- }
- return code;
-}
-
-function getDynamicPackagesEntryIntro(
- dynamicRequireModuleDirPaths,
- dynamicRequireModuleSet
-) {
- let dynamicImports = Array.from(
- dynamicRequireModuleSet,
- (dynamicId) => `require(${JSON.stringify(wrapId(dynamicId, DYNAMIC_REGISTER_SUFFIX))});`
- ).join('\n');
-
- if (dynamicRequireModuleDirPaths.length) {
- dynamicImports += `require(${JSON.stringify(
- wrapId(DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX)
- )});`;
- }
-
- return dynamicImports;
-}
-
-function isDynamicModuleImport(id, dynamicRequireModuleSet) {
- const normalizedPath = normalizePathSlashes(id);
- return dynamicRequireModuleSet.has(normalizedPath) && !normalizedPath.endsWith('.json');
-}
-
-function isDirectory(path) {
- try {
- if (fs$r.statSync(path).isDirectory()) return true;
- } catch (ignored) {
- // Nothing to do here
- }
- return false;
-}
-
-function getDynamicRequirePaths(patterns) {
- const dynamicRequireModuleSet = new Set();
- for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) {
- const isNegated = pattern.startsWith('!');
- const modifySet = Set.prototype[isNegated ? 'delete' : 'add'].bind(dynamicRequireModuleSet);
- for (const path of glob_1.sync(isNegated ? pattern.substr(1) : pattern)) {
- modifySet(normalizePathSlashes(path$t.resolve(path)));
- if (isDirectory(path)) {
- modifySet(normalizePathSlashes(path$t.resolve(path$t.join(path, getPackageEntryPoint(path)))));
- }
- }
- }
- const dynamicRequireModuleDirPaths = Array.from(dynamicRequireModuleSet.values()).filter((path) =>
- isDirectory(path)
- );
- return { dynamicRequireModuleSet, dynamicRequireModuleDirPaths };
-}
-
-function getCommonJSMetaPromise(commonJSMetaPromises, id) {
- let commonJSMetaPromise = commonJSMetaPromises.get(id);
- if (commonJSMetaPromise) return commonJSMetaPromise.promise;
-
- const promise = new Promise((resolve) => {
- commonJSMetaPromise = {
- resolve,
- promise: null
- };
- commonJSMetaPromises.set(id, commonJSMetaPromise);
- });
- commonJSMetaPromise.promise = promise;
-
- return promise;
-}
-
-function setCommonJSMetaPromise(commonJSMetaPromises, id, commonjsMeta) {
- const commonJSMetaPromise = commonJSMetaPromises.get(id);
- if (commonJSMetaPromise) {
- if (commonJSMetaPromise.resolve) {
- commonJSMetaPromise.resolve(commonjsMeta);
- commonJSMetaPromise.resolve = null;
- }
- } else {
- commonJSMetaPromises.set(id, { promise: Promise.resolve(commonjsMeta), resolve: null });
- }
-}
-
-// e.g. id === "commonjsHelpers?commonjsRegister"
-function getSpecificHelperProxy(id) {
- return `export {${id.split('?')[1]} as default} from "${HELPERS_ID}";`;
-}
-
-function getUnknownRequireProxy(id, requireReturnsDefault) {
- if (requireReturnsDefault === true || id.endsWith('.json')) {
- return `export {default} from ${JSON.stringify(id)};`;
- }
- const name = getName(id);
- const exported =
- requireReturnsDefault === 'auto'
- ? `import {getDefaultExportFromNamespaceIfNotNamed} from "${HELPERS_ID}"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfNotNamed(${name});`
- : requireReturnsDefault === 'preferred'
- ? `import {getDefaultExportFromNamespaceIfPresent} from "${HELPERS_ID}"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfPresent(${name});`
- : !requireReturnsDefault
- ? `import {getAugmentedNamespace} from "${HELPERS_ID}"; export default /*@__PURE__*/getAugmentedNamespace(${name});`
- : `export default ${name};`;
- return `import * as ${name} from ${JSON.stringify(id)}; ${exported}`;
-}
-
-function getDynamicJsonProxy(id, commonDir) {
- const normalizedPath = normalizePathSlashes(id.slice(DYNAMIC_JSON_PREFIX.length));
- return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\ncommonjsRegister(${JSON.stringify(
- getVirtualPathForDynamicRequirePath(normalizedPath, commonDir)
- )}, function (module, exports) {
- module.exports = require(${JSON.stringify(normalizedPath)});
-});`;
-}
-
-function getDynamicRequireProxy(normalizedPath, commonDir) {
- return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\ncommonjsRegister(${JSON.stringify(
- getVirtualPathForDynamicRequirePath(normalizedPath, commonDir)
- )}, function (module, exports) {
- ${fs$r.readFileSync(normalizedPath, { encoding: 'utf8' })}
-});`;
-}
-
-async function getStaticRequireProxy(
- id,
- requireReturnsDefault,
- esModulesWithDefaultExport,
- esModulesWithNamedExports,
- commonJsMetaPromises
-) {
- const name = getName(id);
- const commonjsMeta = await getCommonJSMetaPromise(commonJsMetaPromises, id);
- if (commonjsMeta && commonjsMeta.isCommonJS) {
- return `export { __moduleExports as default } from ${JSON.stringify(id)};`;
- } else if (commonjsMeta === null) {
- return getUnknownRequireProxy(id, requireReturnsDefault);
- } else if (!requireReturnsDefault) {
- return `import { getAugmentedNamespace } from "${HELPERS_ID}"; import * as ${name} from ${JSON.stringify(
- id
- )}; export default /*@__PURE__*/getAugmentedNamespace(${name});`;
- } else if (
- requireReturnsDefault !== true &&
- (requireReturnsDefault === 'namespace' ||
- !esModulesWithDefaultExport.has(id) ||
- (requireReturnsDefault === 'auto' && esModulesWithNamedExports.has(id)))
- ) {
- return `import * as ${name} from ${JSON.stringify(id)}; export default ${name};`;
- }
- return `export { default } from ${JSON.stringify(id)};`;
-}
-
-/* eslint-disable no-param-reassign, no-undefined */
-
-function getCandidatesForExtension(resolved, extension) {
- return [resolved + extension, `${resolved}${path$t.sep}index${extension}`];
-}
-
-function getCandidates(resolved, extensions) {
- return extensions.reduce(
- (paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)),
- [resolved]
- );
-}
-
-function getResolveId(extensions) {
- function resolveExtensions(importee, importer) {
- // not our problem
- if (importee[0] !== '.' || !importer) return undefined;
-
- const resolved = path$t.resolve(path$t.dirname(importer), importee);
- const candidates = getCandidates(resolved, extensions);
-
- for (let i = 0; i < candidates.length; i += 1) {
- try {
- const stats = fs$r.statSync(candidates[i]);
- if (stats.isFile()) return { id: candidates[i] };
- } catch (err) {
- /* noop */
- }
- }
-
- return undefined;
- }
-
- return function resolveId(importee, rawImporter) {
- if (isWrappedId(importee, MODULE_SUFFIX) || isWrappedId(importee, EXPORTS_SUFFIX)) {
- return importee;
- }
-
- const importer =
- rawImporter && isWrappedId(rawImporter, DYNAMIC_REGISTER_SUFFIX)
- ? unwrapId(rawImporter, DYNAMIC_REGISTER_SUFFIX)
- : rawImporter;
-
- // Except for exports, proxies are only importing resolved ids,
- // no need to resolve again
- if (importer && isWrappedId(importer, PROXY_SUFFIX)) {
- return importee;
- }
-
- const isProxyModule = isWrappedId(importee, PROXY_SUFFIX);
- const isRequiredModule = isWrappedId(importee, REQUIRE_SUFFIX);
- let isModuleRegistration = false;
-
- if (isProxyModule) {
- importee = unwrapId(importee, PROXY_SUFFIX);
- } else if (isRequiredModule) {
- importee = unwrapId(importee, REQUIRE_SUFFIX);
-
- isModuleRegistration = isWrappedId(importee, DYNAMIC_REGISTER_SUFFIX);
- if (isModuleRegistration) {
- importee = unwrapId(importee, DYNAMIC_REGISTER_SUFFIX);
- }
- }
-
- if (
- importee.startsWith(HELPERS_ID) ||
- importee === DYNAMIC_PACKAGES_ID ||
- importee.startsWith(DYNAMIC_JSON_PREFIX)
- ) {
- return importee;
- }
-
- if (importee.startsWith('\0')) {
- return null;
- }
-
- return this.resolve(importee, importer, {
- skipSelf: true,
- custom: { 'node-resolve': { isRequire: isProxyModule || isRequiredModule } }
- }).then((resolved) => {
- if (!resolved) {
- resolved = resolveExtensions(importee, importer);
- }
- if (resolved && isProxyModule) {
- resolved.id = wrapId(resolved.id, resolved.external ? EXTERNAL_SUFFIX : PROXY_SUFFIX);
- resolved.external = false;
- } else if (resolved && isModuleRegistration) {
- resolved.id = wrapId(resolved.id, DYNAMIC_REGISTER_SUFFIX);
- } else if (!resolved && (isProxyModule || isRequiredModule)) {
- return { id: wrapId(importee, EXTERNAL_SUFFIX), external: false };
- }
- return resolved;
- });
- };
-}
-
-function validateRollupVersion(rollupVersion, peerDependencyVersion) {
- const [major, minor] = rollupVersion.split('.').map(Number);
- const versionRegexp = /\^(\d+\.\d+)\.\d+/g;
- let minMajor = Infinity;
- let minMinor = Infinity;
- let foundVersion;
- // eslint-disable-next-line no-cond-assign
- while ((foundVersion = versionRegexp.exec(peerDependencyVersion))) {
- const [foundMajor, foundMinor] = foundVersion[1].split('.').map(Number);
- if (foundMajor < minMajor) {
- minMajor = foundMajor;
- minMinor = foundMinor;
- }
- }
- if (major < minMajor || (major === minMajor && minor < minMinor)) {
- throw new Error(
- `Insufficient Rollup version: "@rollup/plugin-commonjs" requires at least rollup@${minMajor}.${minMinor} but found rollup@${rollupVersion}.`
- );
- }
-}
-
-const operators = {
- '==': (x) => equals(x.left, x.right, false),
-
- '!=': (x) => not(operators['=='](x)),
-
- '===': (x) => equals(x.left, x.right, true),
-
- '!==': (x) => not(operators['==='](x)),
-
- '!': (x) => isFalsy(x.argument),
-
- '&&': (x) => isTruthy(x.left) && isTruthy(x.right),
-
- '||': (x) => isTruthy(x.left) || isTruthy(x.right)
-};
-
-function not(value) {
- return value === null ? value : !value;
-}
-
-function equals(a, b, strict) {
- if (a.type !== b.type) return null;
- // eslint-disable-next-line eqeqeq
- if (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value;
- return null;
-}
-
-function isTruthy(node) {
- if (!node) return false;
- if (node.type === 'Literal') return !!node.value;
- if (node.type === 'ParenthesizedExpression') return isTruthy(node.expression);
- if (node.operator in operators) return operators[node.operator](node);
- return null;
-}
-
-function isFalsy(node) {
- return not(isTruthy(node));
-}
-
-function getKeypath(node) {
- const parts = [];
-
- while (node.type === 'MemberExpression') {
- if (node.computed) return null;
-
- parts.unshift(node.property.name);
- // eslint-disable-next-line no-param-reassign
- node = node.object;
- }
-
- if (node.type !== 'Identifier') return null;
-
- const { name } = node;
- parts.unshift(name);
-
- return { name, keypath: parts.join('.') };
-}
-
-const KEY_COMPILED_ESM = '__esModule';
-
-function isDefineCompiledEsm(node) {
- const definedProperty =
- getDefinePropertyCallName(node, 'exports') || getDefinePropertyCallName(node, 'module.exports');
- if (definedProperty && definedProperty.key === KEY_COMPILED_ESM) {
- return isTruthy(definedProperty.value);
- }
- return false;
-}
-
-function getDefinePropertyCallName(node, targetName) {
- const {
- callee: { object, property }
- } = node;
- if (!object || object.type !== 'Identifier' || object.name !== 'Object') return;
- if (!property || property.type !== 'Identifier' || property.name !== 'defineProperty') return;
- if (node.arguments.length !== 3) return;
-
- const targetNames = targetName.split('.');
- const [target, key, value] = node.arguments;
- if (targetNames.length === 1) {
- if (target.type !== 'Identifier' || target.name !== targetNames[0]) {
- return;
- }
- }
-
- if (targetNames.length === 2) {
- if (
- target.type !== 'MemberExpression' ||
- target.object.name !== targetNames[0] ||
- target.property.name !== targetNames[1]
- ) {
- return;
- }
- }
-
- if (value.type !== 'ObjectExpression' || !value.properties) return;
-
- const valueProperty = value.properties.find((p) => p.key && p.key.name === 'value');
- if (!valueProperty || !valueProperty.value) return;
-
- // eslint-disable-next-line consistent-return
- return { key: key.value, value: valueProperty.value };
-}
-
-function isShorthandProperty(parent) {
- return parent && parent.type === 'Property' && parent.shorthand;
-}
-
-function hasDefineEsmProperty(node) {
- return node.properties.some((property) => {
- if (
- property.type === 'Property' &&
- property.key.type === 'Identifier' &&
- property.key.name === '__esModule' &&
- isTruthy(property.value)
- ) {
- return true;
- }
- return false;
- });
-}
-
-function wrapCode(magicString, uses, moduleName, exportsName) {
- const args = [];
- const passedArgs = [];
- if (uses.module) {
- args.push('module');
- passedArgs.push(moduleName);
- }
- if (uses.exports) {
- args.push('exports');
- passedArgs.push(exportsName);
- }
- magicString
- .trim()
- .prepend(`(function (${args.join(', ')}) {\n`)
- .append(`\n}(${passedArgs.join(', ')}));`);
-}
-
-function rewriteExportsAndGetExportsBlock(
- magicString,
- moduleName,
- exportsName,
- wrapped,
- moduleExportsAssignments,
- firstTopLevelModuleExportsAssignment,
- exportsAssignmentsByName,
- topLevelAssignments,
- defineCompiledEsmExpressions,
- deconflictedExportNames,
- code,
- HELPERS_NAME,
- exportMode,
- detectWrappedDefault,
- defaultIsModuleExports
-) {
- const exports = [];
- const exportDeclarations = [];
-
- if (exportMode === 'replace') {
- getExportsForReplacedModuleExports(
- magicString,
- exports,
- exportDeclarations,
- moduleExportsAssignments,
- firstTopLevelModuleExportsAssignment,
- exportsName
- );
- } else {
- exports.push(`${exportsName} as __moduleExports`);
- if (wrapped) {
- getExportsWhenWrapping(
- exportDeclarations,
- exportsName,
- detectWrappedDefault,
- HELPERS_NAME,
- defaultIsModuleExports
- );
- } else {
- getExports(
- magicString,
- exports,
- exportDeclarations,
- moduleExportsAssignments,
- exportsAssignmentsByName,
- deconflictedExportNames,
- topLevelAssignments,
- moduleName,
- exportsName,
- defineCompiledEsmExpressions,
- HELPERS_NAME,
- defaultIsModuleExports
- );
- }
- }
- if (exports.length) {
- exportDeclarations.push(`export { ${exports.join(', ')} };`);
- }
-
- return `\n\n${exportDeclarations.join('\n')}`;
-}
-
-function getExportsForReplacedModuleExports(
- magicString,
- exports,
- exportDeclarations,
- moduleExportsAssignments,
- firstTopLevelModuleExportsAssignment,
- exportsName
-) {
- for (const { left } of moduleExportsAssignments) {
- magicString.overwrite(left.start, left.end, exportsName);
- }
- magicString.prependRight(firstTopLevelModuleExportsAssignment.left.start, 'var ');
- exports.push(`${exportsName} as __moduleExports`);
- exportDeclarations.push(`export default ${exportsName};`);
-}
-
-function getExportsWhenWrapping(
- exportDeclarations,
- exportsName,
- detectWrappedDefault,
- HELPERS_NAME,
- defaultIsModuleExports
-) {
- exportDeclarations.push(
- `export default ${
- detectWrappedDefault && defaultIsModuleExports === 'auto'
- ? `/*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName})`
- : defaultIsModuleExports === false
- ? `${exportsName}.default`
- : exportsName
- };`
- );
-}
-
-function getExports(
- magicString,
- exports,
- exportDeclarations,
- moduleExportsAssignments,
- exportsAssignmentsByName,
- deconflictedExportNames,
- topLevelAssignments,
- moduleName,
- exportsName,
- defineCompiledEsmExpressions,
- HELPERS_NAME,
- defaultIsModuleExports
-) {
- let deconflictedDefaultExportName;
- // Collect and rewrite module.exports assignments
- for (const { left } of moduleExportsAssignments) {
- magicString.overwrite(left.start, left.end, `${moduleName}.exports`);
- }
-
- // Collect and rewrite named exports
- for (const [exportName, { nodes }] of exportsAssignmentsByName) {
- const deconflicted = deconflictedExportNames[exportName];
- let needsDeclaration = true;
- for (const node of nodes) {
- let replacement = `${deconflicted} = ${exportsName}.${exportName}`;
- if (needsDeclaration && topLevelAssignments.has(node)) {
- replacement = `var ${replacement}`;
- needsDeclaration = false;
- }
- magicString.overwrite(node.start, node.left.end, replacement);
- }
- if (needsDeclaration) {
- magicString.prepend(`var ${deconflicted};\n`);
- }
-
- if (exportName === 'default') {
- deconflictedDefaultExportName = deconflicted;
- } else {
- exports.push(exportName === deconflicted ? exportName : `${deconflicted} as ${exportName}`);
- }
- }
-
- // Collect and rewrite exports.__esModule assignments
- let isRestorableCompiledEsm = false;
- for (const expression of defineCompiledEsmExpressions) {
- isRestorableCompiledEsm = true;
- const moduleExportsExpression =
- expression.type === 'CallExpression' ? expression.arguments[0] : expression.left.object;
- magicString.overwrite(moduleExportsExpression.start, moduleExportsExpression.end, exportsName);
- }
-
- if (!isRestorableCompiledEsm || defaultIsModuleExports === true) {
- exportDeclarations.push(`export default ${exportsName};`);
- } else if (moduleExportsAssignments.length === 0 || defaultIsModuleExports === false) {
- exports.push(`${deconflictedDefaultExportName || exportsName} as default`);
- } else {
- exportDeclarations.push(
- `export default /*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName});`
- );
- }
-}
-
-function isRequireStatement(node, scope) {
- if (!node) return false;
- if (node.type !== 'CallExpression') return false;
-
- // Weird case of `require()` or `module.require()` without arguments
- if (node.arguments.length === 0) return false;
-
- return isRequire(node.callee, scope);
-}
-
-function isRequire(node, scope) {
- return (
- (node.type === 'Identifier' && node.name === 'require' && !scope.contains('require')) ||
- (node.type === 'MemberExpression' && isModuleRequire(node, scope))
- );
-}
-
-function isModuleRequire({ object, property }, scope) {
- return (
- object.type === 'Identifier' &&
- object.name === 'module' &&
- property.type === 'Identifier' &&
- property.name === 'require' &&
- !scope.contains('module')
- );
-}
-
-function isStaticRequireStatement(node, scope) {
- if (!isRequireStatement(node, scope)) return false;
- return !hasDynamicArguments(node);
-}
-
-function hasDynamicArguments(node) {
- return (
- node.arguments.length > 1 ||
- (node.arguments[0].type !== 'Literal' &&
- (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0))
- );
-}
-
-const reservedMethod = { resolve: true, cache: true, main: true };
-
-function isNodeRequirePropertyAccess(parent) {
- return parent && parent.property && reservedMethod[parent.property.name];
-}
-
-function isIgnoredRequireStatement(requiredNode, ignoreRequire) {
- return ignoreRequire(requiredNode.arguments[0].value);
-}
-
-function getRequireStringArg(node) {
- return node.arguments[0].type === 'Literal'
- ? node.arguments[0].value
- : node.arguments[0].quasis[0].value.cooked;
-}
-
-function hasDynamicModuleForPath(source, id, dynamicRequireModuleSet) {
- if (!/^(?:\.{0,2}[/\\]|[A-Za-z]:[/\\])/.test(source)) {
- try {
- const resolvedPath = normalizePathSlashes(resolve$4.sync(source, { basedir: path$t.dirname(id) }));
- if (dynamicRequireModuleSet.has(resolvedPath)) {
- return true;
- }
- } catch (ex) {
- // Probably a node.js internal module
- return false;
- }
-
- return false;
- }
-
- for (const attemptExt of ['', '.js', '.json']) {
- const resolvedPath = normalizePathSlashes(path$t.resolve(path$t.dirname(id), source + attemptExt));
- if (dynamicRequireModuleSet.has(resolvedPath)) {
- return true;
- }
- }
-
- return false;
-}
-
-function getRequireHandlers() {
- const requiredSources = [];
- const requiredBySource = Object.create(null);
- const requiredByNode = new Map();
- const requireExpressionsWithUsedReturnValue = [];
-
- function addRequireStatement(sourceId, node, scope, usesReturnValue) {
- const required = getRequired(sourceId);
- requiredByNode.set(node, { scope, required });
- if (usesReturnValue) {
- required.nodesUsingRequired.push(node);
- requireExpressionsWithUsedReturnValue.push(node);
- }
- }
-
- function getRequired(sourceId) {
- if (!requiredBySource[sourceId]) {
- requiredSources.push(sourceId);
-
- requiredBySource[sourceId] = {
- source: sourceId,
- name: null,
- nodesUsingRequired: []
- };
- }
-
- return requiredBySource[sourceId];
- }
-
- function rewriteRequireExpressionsAndGetImportBlock(
- magicString,
- topLevelDeclarations,
- topLevelRequireDeclarators,
- reassignedNames,
- helpersName,
- dynamicRegisterSources,
- moduleName,
- exportsName,
- id,
- exportMode
- ) {
- setRemainingImportNamesAndRewriteRequires(
- requireExpressionsWithUsedReturnValue,
- requiredByNode,
- magicString
- );
- const imports = [];
- imports.push(`import * as ${helpersName} from "${HELPERS_ID}";`);
- if (exportMode === 'module') {
- imports.push(
- `import { __module as ${moduleName}, exports as ${exportsName} } from ${JSON.stringify(
- wrapId(id, MODULE_SUFFIX)
- )}`
- );
- } else if (exportMode === 'exports') {
- imports.push(
- `import { __exports as ${exportsName} } from ${JSON.stringify(wrapId(id, EXPORTS_SUFFIX))}`
- );
- }
- for (const source of dynamicRegisterSources) {
- imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`);
- }
- for (const source of requiredSources) {
- if (!source.startsWith('\0')) {
- imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`);
- }
- const { name, nodesUsingRequired } = requiredBySource[source];
- imports.push(
- `import ${nodesUsingRequired.length ? `${name} from ` : ''}${JSON.stringify(
- source.startsWith('\0') ? source : wrapId(source, PROXY_SUFFIX)
- )};`
- );
- }
- return imports.length ? `${imports.join('\n')}\n\n` : '';
- }
-
- return {
- addRequireStatement,
- requiredSources,
- rewriteRequireExpressionsAndGetImportBlock
- };
-}
-
-function setRemainingImportNamesAndRewriteRequires(
- requireExpressionsWithUsedReturnValue,
- requiredByNode,
- magicString
-) {
- let uid = 0;
- for (const requireExpression of requireExpressionsWithUsedReturnValue) {
- const { required } = requiredByNode.get(requireExpression);
- if (!required.name) {
- let potentialName;
- const isUsedName = (node) => requiredByNode.get(node).scope.contains(potentialName);
- do {
- potentialName = `require$$${uid}`;
- uid += 1;
- } while (required.nodesUsingRequired.some(isUsedName));
- required.name = potentialName;
- }
- magicString.overwrite(requireExpression.start, requireExpression.end, required.name);
- }
-}
-
-/* eslint-disable no-param-reassign, no-shadow, no-underscore-dangle, no-continue */
-
-const exportsPattern = /^(?:module\.)?exports(?:\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/;
-
-const functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/;
-
-function transformCommonjs(
- parse,
- code,
- id,
- isEsModule,
- ignoreGlobal,
- ignoreRequire,
- ignoreDynamicRequires,
- getIgnoreTryCatchRequireStatementMode,
- sourceMap,
- isDynamicRequireModulesEnabled,
- dynamicRequireModuleSet,
- disableWrap,
- commonDir,
- astCache,
- defaultIsModuleExports
-) {
- const ast = astCache || tryParse(parse, code, id);
- const magicString = new MagicString(code);
- const uses = {
- module: false,
- exports: false,
- global: false,
- require: false
- };
- let usesDynamicRequire = false;
- const virtualDynamicRequirePath =
- isDynamicRequireModulesEnabled && getVirtualPathForDynamicRequirePath(path$t.dirname(id), commonDir);
- let scope = attachScopes(ast, 'scope');
- let lexicalDepth = 0;
- let programDepth = 0;
- let currentTryBlockEnd = null;
- let shouldWrap = false;
-
- const globals = new Set();
-
- // TODO technically wrong since globals isn't populated yet, but ¯\_(ツ)_/¯
- const HELPERS_NAME = deconflict([scope], globals, 'commonjsHelpers');
- const dynamicRegisterSources = new Set();
- let hasRemovedRequire = false;
-
- const {
- addRequireStatement,
- requiredSources,
- rewriteRequireExpressionsAndGetImportBlock
- } = getRequireHandlers();
-
- // See which names are assigned to. This is necessary to prevent
- // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`,
- // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh)
- const reassignedNames = new Set();
- const topLevelDeclarations = [];
- const topLevelRequireDeclarators = new Set();
- const skippedNodes = new Set();
- const moduleAccessScopes = new Set([scope]);
- const exportsAccessScopes = new Set([scope]);
- const moduleExportsAssignments = [];
- let firstTopLevelModuleExportsAssignment = null;
- const exportsAssignmentsByName = new Map();
- const topLevelAssignments = new Set();
- const topLevelDefineCompiledEsmExpressions = [];
-
- walk$1(ast, {
- enter(node, parent) {
- if (skippedNodes.has(node)) {
- this.skip();
- return;
- }
-
- if (currentTryBlockEnd !== null && node.start > currentTryBlockEnd) {
- currentTryBlockEnd = null;
- }
-
- programDepth += 1;
- if (node.scope) ({ scope } = node);
- if (functionType.test(node.type)) lexicalDepth += 1;
- if (sourceMap) {
- magicString.addSourcemapLocation(node.start);
- magicString.addSourcemapLocation(node.end);
- }
-
- // eslint-disable-next-line default-case
- switch (node.type) {
- case 'TryStatement':
- if (currentTryBlockEnd === null) {
- currentTryBlockEnd = node.block.end;
- }
- return;
- case 'AssignmentExpression':
- if (node.left.type === 'MemberExpression') {
- const flattened = getKeypath(node.left);
- if (!flattened || scope.contains(flattened.name)) return;
-
- const exportsPatternMatch = exportsPattern.exec(flattened.keypath);
- if (!exportsPatternMatch || flattened.keypath === 'exports') return;
-
- const [, exportName] = exportsPatternMatch;
- uses[flattened.name] = true;
-
- // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` –
- if (flattened.keypath === 'module.exports') {
- moduleExportsAssignments.push(node);
- if (programDepth > 3) {
- moduleAccessScopes.add(scope);
- } else if (!firstTopLevelModuleExportsAssignment) {
- firstTopLevelModuleExportsAssignment = node;
- }
-
- if (defaultIsModuleExports === false) {
- shouldWrap = true;
- } else if (defaultIsModuleExports === 'auto') {
- if (node.right.type === 'ObjectExpression') {
- if (hasDefineEsmProperty(node.right)) {
- shouldWrap = true;
- }
- } else if (defaultIsModuleExports === false) {
- shouldWrap = true;
- }
- }
- } else if (exportName === KEY_COMPILED_ESM) {
- if (programDepth > 3) {
- shouldWrap = true;
- } else {
- topLevelDefineCompiledEsmExpressions.push(node);
- }
- } else {
- const exportsAssignments = exportsAssignmentsByName.get(exportName) || {
- nodes: [],
- scopes: new Set()
- };
- exportsAssignments.nodes.push(node);
- exportsAssignments.scopes.add(scope);
- exportsAccessScopes.add(scope);
- exportsAssignmentsByName.set(exportName, exportsAssignments);
- if (programDepth <= 3) {
- topLevelAssignments.add(node);
- }
- }
-
- skippedNodes.add(node.left);
- } else {
- for (const name of extractAssignedNames(node.left)) {
- reassignedNames.add(name);
- }
- }
- return;
- case 'CallExpression': {
- if (isDefineCompiledEsm(node)) {
- if (programDepth === 3 && parent.type === 'ExpressionStatement') {
- // skip special handling for [module.]exports until we know we render this
- skippedNodes.add(node.arguments[0]);
- topLevelDefineCompiledEsmExpressions.push(node);
- } else {
- shouldWrap = true;
- }
- return;
- }
-
- if (
- node.callee.object &&
- node.callee.object.name === 'require' &&
- node.callee.property.name === 'resolve' &&
- hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)
- ) {
- const requireNode = node.callee.object;
- magicString.appendLeft(
- node.end - 1,
- `,${JSON.stringify(
- path$t.dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath
- )}`
- );
- magicString.overwrite(
- requireNode.start,
- requireNode.end,
- `${HELPERS_NAME}.commonjsRequire`,
- {
- storeName: true
- }
- );
- return;
- }
-
- if (!isStaticRequireStatement(node, scope)) return;
- if (!isDynamicRequireModulesEnabled) {
- skippedNodes.add(node.callee);
- }
- if (!isIgnoredRequireStatement(node, ignoreRequire)) {
- skippedNodes.add(node.callee);
- const usesReturnValue = parent.type !== 'ExpressionStatement';
-
- let canConvertRequire = true;
- let shouldRemoveRequireStatement = false;
-
- if (currentTryBlockEnd !== null) {
- ({
- canConvertRequire,
- shouldRemoveRequireStatement
- } = getIgnoreTryCatchRequireStatementMode(node.arguments[0].value));
-
- if (shouldRemoveRequireStatement) {
- hasRemovedRequire = true;
- }
- }
-
- let sourceId = getRequireStringArg(node);
- const isDynamicRegister = isWrappedId(sourceId, DYNAMIC_REGISTER_SUFFIX);
- if (isDynamicRegister) {
- sourceId = unwrapId(sourceId, DYNAMIC_REGISTER_SUFFIX);
- if (sourceId.endsWith('.json')) {
- sourceId = DYNAMIC_JSON_PREFIX + sourceId;
- }
- dynamicRegisterSources.add(wrapId(sourceId, DYNAMIC_REGISTER_SUFFIX));
- } else {
- if (
- !sourceId.endsWith('.json') &&
- hasDynamicModuleForPath(sourceId, id, dynamicRequireModuleSet)
- ) {
- if (shouldRemoveRequireStatement) {
- magicString.overwrite(node.start, node.end, `undefined`);
- } else if (canConvertRequire) {
- magicString.overwrite(
- node.start,
- node.end,
- `${HELPERS_NAME}.commonjsRequire(${JSON.stringify(
- getVirtualPathForDynamicRequirePath(sourceId, commonDir)
- )}, ${JSON.stringify(
- path$t.dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath
- )})`
- );
- usesDynamicRequire = true;
- }
- return;
- }
-
- if (canConvertRequire) {
- addRequireStatement(sourceId, node, scope, usesReturnValue);
- }
- }
-
- if (usesReturnValue) {
- if (shouldRemoveRequireStatement) {
- magicString.overwrite(node.start, node.end, `undefined`);
- return;
- }
-
- if (
- parent.type === 'VariableDeclarator' &&
- !scope.parent &&
- parent.id.type === 'Identifier'
- ) {
- // This will allow us to reuse this variable name as the imported variable if it is not reassigned
- // and does not conflict with variables in other places where this is imported
- topLevelRequireDeclarators.add(parent);
- }
- } else {
- // This is a bare import, e.g. `require('foo');`
-
- if (!canConvertRequire && !shouldRemoveRequireStatement) {
- return;
- }
-
- magicString.remove(parent.start, parent.end);
- }
- }
- return;
- }
- case 'ConditionalExpression':
- case 'IfStatement':
- // skip dead branches
- if (isFalsy(node.test)) {
- skippedNodes.add(node.consequent);
- } else if (node.alternate && isTruthy(node.test)) {
- skippedNodes.add(node.alternate);
- }
- return;
- case 'Identifier': {
- const { name } = node;
- if (!(isReference(node, parent) && !scope.contains(name))) return;
- switch (name) {
- case 'require':
- if (isNodeRequirePropertyAccess(parent)) {
- if (hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)) {
- if (parent.property.name === 'cache') {
- magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {
- storeName: true
- });
- }
- }
-
- return;
- }
-
- if (isDynamicRequireModulesEnabled && isRequireStatement(parent, scope)) {
- magicString.appendLeft(
- parent.end - 1,
- `,${JSON.stringify(
- path$t.dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath
- )}`
- );
- }
- if (!ignoreDynamicRequires) {
- if (isShorthandProperty(parent)) {
- magicString.appendRight(node.end, `: ${HELPERS_NAME}.commonjsRequire`);
- } else {
- magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {
- storeName: true
- });
- }
- }
- usesDynamicRequire = true;
- return;
- case 'module':
- case 'exports':
- shouldWrap = true;
- uses[name] = true;
- return;
- case 'global':
- uses.global = true;
- if (!ignoreGlobal) {
- magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {
- storeName: true
- });
- }
- return;
- case 'define':
- magicString.overwrite(node.start, node.end, 'undefined', {
- storeName: true
- });
- return;
- default:
- globals.add(name);
- return;
- }
- }
- case 'MemberExpression':
- if (!isDynamicRequireModulesEnabled && isModuleRequire(node, scope)) {
- magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {
- storeName: true
- });
- skippedNodes.add(node.object);
- skippedNodes.add(node.property);
- }
- return;
- case 'ReturnStatement':
- // if top-level return, we need to wrap it
- if (lexicalDepth === 0) {
- shouldWrap = true;
- }
- return;
- case 'ThisExpression':
- // rewrite top-level `this` as `commonjsHelpers.commonjsGlobal`
- if (lexicalDepth === 0) {
- uses.global = true;
- if (!ignoreGlobal) {
- magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {
- storeName: true
- });
- }
- }
- return;
- case 'UnaryExpression':
- // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151)
- if (node.operator === 'typeof') {
- const flattened = getKeypath(node.argument);
- if (!flattened) return;
-
- if (scope.contains(flattened.name)) return;
-
- if (
- flattened.keypath === 'module.exports' ||
- flattened.keypath === 'module' ||
- flattened.keypath === 'exports'
- ) {
- magicString.overwrite(node.start, node.end, `'object'`, {
- storeName: false
- });
- }
- }
- return;
- case 'VariableDeclaration':
- if (!scope.parent) {
- topLevelDeclarations.push(node);
- }
- }
- },
-
- leave(node) {
- programDepth -= 1;
- if (node.scope) scope = scope.parent;
- if (functionType.test(node.type)) lexicalDepth -= 1;
- }
- });
-
- const nameBase = getName(id);
- const exportsName = deconflict([...exportsAccessScopes], globals, nameBase);
- const moduleName = deconflict([...moduleAccessScopes], globals, `${nameBase}Module`);
- const deconflictedExportNames = Object.create(null);
- for (const [exportName, { scopes }] of exportsAssignmentsByName) {
- deconflictedExportNames[exportName] = deconflict([...scopes], globals, exportName);
- }
-
- // We cannot wrap ES/mixed modules
- shouldWrap =
- !isEsModule &&
- !disableWrap &&
- (shouldWrap || (uses.exports && moduleExportsAssignments.length > 0));
- const detectWrappedDefault =
- shouldWrap &&
- (topLevelDefineCompiledEsmExpressions.length > 0 || code.indexOf('__esModule') >= 0);
-
- if (
- !(
- requiredSources.length ||
- dynamicRegisterSources.size ||
- uses.module ||
- uses.exports ||
- uses.require ||
- usesDynamicRequire ||
- hasRemovedRequire ||
- topLevelDefineCompiledEsmExpressions.length > 0
- ) &&
- (ignoreGlobal || !uses.global)
- ) {
- return { meta: { commonjs: { isCommonJS: false } } };
- }
-
- let leadingComment = '';
- if (code.startsWith('/*')) {
- const commentEnd = code.indexOf('*/', 2) + 2;
- leadingComment = `${code.slice(0, commentEnd)}\n`;
- magicString.remove(0, commentEnd).trim();
- }
-
- const exportMode = shouldWrap
- ? uses.module
- ? 'module'
- : 'exports'
- : firstTopLevelModuleExportsAssignment
- ? exportsAssignmentsByName.size === 0 && topLevelDefineCompiledEsmExpressions.length === 0
- ? 'replace'
- : 'module'
- : moduleExportsAssignments.length === 0
- ? 'exports'
- : 'module';
-
- const importBlock = rewriteRequireExpressionsAndGetImportBlock(
- magicString,
- topLevelDeclarations,
- topLevelRequireDeclarators,
- reassignedNames,
- HELPERS_NAME,
- dynamicRegisterSources,
- moduleName,
- exportsName,
- id,
- exportMode
- );
-
- const exportBlock = isEsModule
- ? ''
- : rewriteExportsAndGetExportsBlock(
- magicString,
- moduleName,
- exportsName,
- shouldWrap,
- moduleExportsAssignments,
- firstTopLevelModuleExportsAssignment,
- exportsAssignmentsByName,
- topLevelAssignments,
- topLevelDefineCompiledEsmExpressions,
- deconflictedExportNames,
- code,
- HELPERS_NAME,
- exportMode,
- detectWrappedDefault,
- defaultIsModuleExports
- );
-
- if (shouldWrap) {
- wrapCode(magicString, uses, moduleName, exportsName);
- }
-
- magicString
- .trim()
- .prepend(leadingComment + importBlock)
- .append(exportBlock);
-
- return {
- code: magicString.toString(),
- map: sourceMap ? magicString.generateMap() : null,
- syntheticNamedExports: isEsModule ? false : '__moduleExports',
- meta: { commonjs: { isCommonJS: !isEsModule } }
- };
-}
-
-function commonjs(options = {}) {
- const extensions = options.extensions || ['.js'];
- const filter = createFilter(options.include, options.exclude);
- const {
- ignoreGlobal,
- ignoreDynamicRequires,
- requireReturnsDefault: requireReturnsDefaultOption,
- esmExternals
- } = options;
- const getRequireReturnsDefault =
- typeof requireReturnsDefaultOption === 'function'
- ? requireReturnsDefaultOption
- : () => requireReturnsDefaultOption;
- let esmExternalIds;
- const isEsmExternal =
- typeof esmExternals === 'function'
- ? esmExternals
- : Array.isArray(esmExternals)
- ? ((esmExternalIds = new Set(esmExternals)), (id) => esmExternalIds.has(id))
- : () => esmExternals;
- const defaultIsModuleExports =
- typeof options.defaultIsModuleExports === 'boolean' ? options.defaultIsModuleExports : 'auto';
-
- const { dynamicRequireModuleSet, dynamicRequireModuleDirPaths } = getDynamicRequirePaths(
- options.dynamicRequireTargets
- );
- const isDynamicRequireModulesEnabled = dynamicRequireModuleSet.size > 0;
- const commonDir = isDynamicRequireModulesEnabled
- ? commondir(null, Array.from(dynamicRequireModuleSet).concat(process.cwd()))
- : null;
-
- const esModulesWithDefaultExport = new Set();
- const esModulesWithNamedExports = new Set();
- const commonJsMetaPromises = new Map();
-
- const ignoreRequire =
- typeof options.ignore === 'function'
- ? options.ignore
- : Array.isArray(options.ignore)
- ? (id) => options.ignore.includes(id)
- : () => false;
-
- const getIgnoreTryCatchRequireStatementMode = (id) => {
- const mode =
- typeof options.ignoreTryCatch === 'function'
- ? options.ignoreTryCatch(id)
- : Array.isArray(options.ignoreTryCatch)
- ? options.ignoreTryCatch.includes(id)
- : typeof options.ignoreTryCatch !== 'undefined'
- ? options.ignoreTryCatch
- : true;
-
- return {
- canConvertRequire: mode !== 'remove' && mode !== true,
- shouldRemoveRequireStatement: mode === 'remove'
- };
- };
-
- const resolveId = getResolveId(extensions);
-
- const sourceMap = options.sourceMap !== false;
-
- function transformAndCheckExports(code, id) {
- if (isDynamicRequireModulesEnabled && this.getModuleInfo(id).isEntry) {
- // eslint-disable-next-line no-param-reassign
- code =
- getDynamicPackagesEntryIntro(dynamicRequireModuleDirPaths, dynamicRequireModuleSet) + code;
- }
-
- const { isEsModule, hasDefaultExport, hasNamedExports, ast } = analyzeTopLevelStatements(
- this.parse,
- code,
- id
- );
- if (hasDefaultExport) {
- esModulesWithDefaultExport.add(id);
- }
- if (hasNamedExports) {
- esModulesWithNamedExports.add(id);
- }
-
- if (
- !dynamicRequireModuleSet.has(normalizePathSlashes(id)) &&
- (!hasCjsKeywords(code, ignoreGlobal) || (isEsModule && !options.transformMixedEsModules))
- ) {
- return { meta: { commonjs: { isCommonJS: false } } };
- }
-
- // avoid wrapping as this is a commonjsRegister call
- const disableWrap = isWrappedId(id, DYNAMIC_REGISTER_SUFFIX);
- if (disableWrap) {
- // eslint-disable-next-line no-param-reassign
- id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);
- }
-
- return transformCommonjs(
- this.parse,
- code,
- id,
- isEsModule,
- ignoreGlobal || isEsModule,
- ignoreRequire,
- ignoreDynamicRequires && !isDynamicRequireModulesEnabled,
- getIgnoreTryCatchRequireStatementMode,
- sourceMap,
- isDynamicRequireModulesEnabled,
- dynamicRequireModuleSet,
- disableWrap,
- commonDir,
- ast,
- defaultIsModuleExports
- );
- }
-
- return {
- name: 'commonjs',
-
- buildStart() {
- validateRollupVersion(this.meta.rollupVersion, peerDependencies.rollup);
- if (options.namedExports != null) {
- this.warn(
- 'The namedExports option from "@rollup/plugin-commonjs" is deprecated. Named exports are now handled automatically.'
- );
- }
- },
-
- resolveId,
-
- load(id) {
- if (id === HELPERS_ID) {
- return getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires);
- }
-
- if (id.startsWith(HELPERS_ID)) {
- return getSpecificHelperProxy(id);
- }
-
- if (isWrappedId(id, MODULE_SUFFIX)) {
- const actualId = unwrapId(id, MODULE_SUFFIX);
- let name = getName(actualId);
- let code;
- if (isDynamicRequireModulesEnabled) {
- if (['modulePath', 'commonjsRequire', 'createModule'].includes(name)) {
- name = `${name}_`;
- }
- code =
- `import {commonjsRequire, createModule} from "${HELPERS_ID}";\n` +
- `var ${name} = createModule(${JSON.stringify(
- getVirtualPathForDynamicRequirePath(path$t.dirname(actualId), commonDir)
- )});\n` +
- `export {${name} as __module}`;
- } else {
- code = `var ${name} = {exports: {}}; export {${name} as __module}`;
- }
- return {
- code,
- syntheticNamedExports: '__module',
- meta: { commonjs: { isCommonJS: false } }
- };
- }
-
- if (isWrappedId(id, EXPORTS_SUFFIX)) {
- const actualId = unwrapId(id, EXPORTS_SUFFIX);
- const name = getName(actualId);
- return {
- code: `var ${name} = {}; export {${name} as __exports}`,
- meta: { commonjs: { isCommonJS: false } }
- };
- }
-
- if (isWrappedId(id, EXTERNAL_SUFFIX)) {
- const actualId = unwrapId(id, EXTERNAL_SUFFIX);
- return getUnknownRequireProxy(
- actualId,
- isEsmExternal(actualId) ? getRequireReturnsDefault(actualId) : true
- );
- }
-
- if (id === DYNAMIC_PACKAGES_ID) {
- return getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir);
- }
-
- if (id.startsWith(DYNAMIC_JSON_PREFIX)) {
- return getDynamicJsonProxy(id, commonDir);
- }
-
- if (isDynamicModuleImport(id, dynamicRequireModuleSet)) {
- return `export default require(${JSON.stringify(normalizePathSlashes(id))});`;
- }
-
- if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {
- return getDynamicRequireProxy(
- normalizePathSlashes(unwrapId(id, DYNAMIC_REGISTER_SUFFIX)),
- commonDir
- );
- }
-
- if (isWrappedId(id, PROXY_SUFFIX)) {
- const actualId = unwrapId(id, PROXY_SUFFIX);
- return getStaticRequireProxy(
- actualId,
- getRequireReturnsDefault(actualId),
- esModulesWithDefaultExport,
- esModulesWithNamedExports,
- commonJsMetaPromises
- );
- }
-
- return null;
- },
-
- transform(code, rawId) {
- let id = rawId;
-
- if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {
- id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);
- }
-
- const extName = path$t.extname(id);
- if (
- extName !== '.cjs' &&
- id !== DYNAMIC_PACKAGES_ID &&
- !id.startsWith(DYNAMIC_JSON_PREFIX) &&
- (!filter(id) || !extensions.includes(extName))
- ) {
- return null;
- }
-
- try {
- return transformAndCheckExports.call(this, code, rawId);
- } catch (err) {
- return this.error(err, err.loc);
- }
- },
-
- moduleParsed({ id, meta: { commonjs: commonjsMeta } }) {
- if (commonjsMeta && commonjsMeta.isCommonJS != null) {
- setCommonJSMetaPromise(commonJsMetaPromises, id, commonjsMeta);
- return;
- }
- setCommonJSMetaPromise(commonJsMetaPromises, id, null);
- }
- };
-}
-
-var globby$1 = {exports: {}};
-
-var arrayUnion$1 = (...arguments_) => {
- return [...new Set([].concat(...arguments_))];
-};
-
-var dirGlob$1 = {exports: {}};
-
-var pathType$1 = {};
-
-const {promisify: promisify$6} = require$$0__default$2;
-const fs$e = fs__default;
-
-async function isType(fsStatType, statsMethodName, filePath) {
- if (typeof filePath !== 'string') {
- throw new TypeError(`Expected a string, got ${typeof filePath}`);
- }
-
- try {
- const stats = await promisify$6(fs$e[fsStatType])(filePath);
- return stats[statsMethodName]();
- } catch (error) {
- if (error.code === 'ENOENT') {
- return false;
- }
-
- throw error;
- }
-}
-
-function isTypeSync(fsStatType, statsMethodName, filePath) {
- if (typeof filePath !== 'string') {
- throw new TypeError(`Expected a string, got ${typeof filePath}`);
- }
-
- try {
- return fs$e[fsStatType](filePath)[statsMethodName]();
- } catch (error) {
- if (error.code === 'ENOENT') {
- return false;
- }
-
- throw error;
- }
-}
-
-pathType$1.isFile = isType.bind(null, 'stat', 'isFile');
-pathType$1.isDirectory = isType.bind(null, 'stat', 'isDirectory');
-pathType$1.isSymlink = isType.bind(null, 'lstat', 'isSymbolicLink');
-pathType$1.isFileSync = isTypeSync.bind(null, 'statSync', 'isFile');
-pathType$1.isDirectorySync = isTypeSync.bind(null, 'statSync', 'isDirectory');
-pathType$1.isSymlinkSync = isTypeSync.bind(null, 'lstatSync', 'isSymbolicLink');
-
-const path$c = path__default;
-const pathType = pathType$1;
-
-const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0];
-
-const getPath = (filepath, cwd) => {
- const pth = filepath[0] === '!' ? filepath.slice(1) : filepath;
- return path$c.isAbsolute(pth) ? pth : path$c.join(cwd, pth);
-};
-
-const addExtensions = (file, extensions) => {
- if (path$c.extname(file)) {
- return `**/${file}`;
- }
-
- return `**/${file}.${getExtensions(extensions)}`;
-};
-
-const getGlob = (directory, options) => {
- if (options.files && !Array.isArray(options.files)) {
- throw new TypeError(`Expected \`files\` to be of type \`Array\` but received type \`${typeof options.files}\``);
- }
-
- if (options.extensions && !Array.isArray(options.extensions)) {
- throw new TypeError(`Expected \`extensions\` to be of type \`Array\` but received type \`${typeof options.extensions}\``);
- }
-
- if (options.files && options.extensions) {
- return options.files.map(x => path$c.posix.join(directory, addExtensions(x, options.extensions)));
- }
-
- if (options.files) {
- return options.files.map(x => path$c.posix.join(directory, `**/${x}`));
- }
-
- if (options.extensions) {
- return [path$c.posix.join(directory, `**/*.${getExtensions(options.extensions)}`)];
- }
-
- return [path$c.posix.join(directory, '**')];
-};
-
-dirGlob$1.exports = async (input, options) => {
- options = {
- cwd: process.cwd(),
- ...options
- };
-
- if (typeof options.cwd !== 'string') {
- throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``);
- }
-
- const globs = await Promise.all([].concat(input).map(async x => {
- const isDirectory = await pathType.isDirectory(getPath(x, options.cwd));
- return isDirectory ? getGlob(x, options) : x;
- }));
-
- return [].concat.apply([], globs); // eslint-disable-line prefer-spread
-};
-
-dirGlob$1.exports.sync = (input, options) => {
- options = {
- cwd: process.cwd(),
- ...options
- };
-
- if (typeof options.cwd !== 'string') {
- throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``);
- }
-
- const globs = [].concat(input).map(x => pathType.isDirectorySync(getPath(x, options.cwd)) ? getGlob(x, options) : x);
-
- return [].concat.apply([], globs); // eslint-disable-line prefer-spread
-};
-
-var gitignore$1 = {exports: {}};
-
-// A simple implementation of make-array
-function makeArray (subject) {
- return Array.isArray(subject)
- ? subject
- : [subject]
-}
-
-const EMPTY = '';
-const SPACE = ' ';
-const ESCAPE = '\\';
-const REGEX_TEST_BLANK_LINE = /^\s+$/;
-const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/;
-const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/;
-const REGEX_SPLITALL_CRLF = /\r?\n/g;
-// /foo,
-// ./foo,
-// ../foo,
-// .
-// ..
-const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/;
-
-const SLASH$1 = '/';
-const KEY_IGNORE = typeof Symbol !== 'undefined'
- ? Symbol.for('node-ignore')
- /* istanbul ignore next */
- : 'node-ignore';
-
-const define = (object, key, value) =>
- Object.defineProperty(object, key, {value});
-
-const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g;
-
-// Sanitize the range of a regular expression
-// The cases are complicated, see test cases for details
-const sanitizeRange = range => range.replace(
- REGEX_REGEXP_RANGE,
- (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)
- ? match
- // Invalid range (out of order) which is ok for gitignore rules but
- // fatal for JavaScript regular expression, so eliminate it.
- : EMPTY
-);
-
-// See fixtures #59
-const cleanRangeBackSlash = slashes => {
- const {length} = slashes;
- return slashes.slice(0, length - length % 2)
-};
-
-// > If the pattern ends with a slash,
-// > it is removed for the purpose of the following description,
-// > but it would only find a match with a directory.
-// > In other words, foo/ will match a directory foo and paths underneath it,
-// > but will not match a regular file or a symbolic link foo
-// > (this is consistent with the way how pathspec works in general in Git).
-// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'
-// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call
-// you could use option `mark: true` with `glob`
-
-// '`foo/`' should not continue with the '`..`'
-const REPLACERS = [
-
- // > Trailing spaces are ignored unless they are quoted with backslash ("\")
- [
- // (a\ ) -> (a )
- // (a ) -> (a)
- // (a \ ) -> (a )
- /\\?\s+$/,
- match => match.indexOf('\\') === 0
- ? SPACE
- : EMPTY
- ],
-
- // replace (\ ) with ' '
- [
- /\\\s/g,
- () => SPACE
- ],
-
- // Escape metacharacters
- // which is written down by users but means special for regular expressions.
-
- // > There are 12 characters with special meanings:
- // > - the backslash \,
- // > - the caret ^,
- // > - the dollar sign $,
- // > - the period or dot .,
- // > - the vertical bar or pipe symbol |,
- // > - the question mark ?,
- // > - the asterisk or star *,
- // > - the plus sign +,
- // > - the opening parenthesis (,
- // > - the closing parenthesis ),
- // > - and the opening square bracket [,
- // > - the opening curly brace {,
- // > These special characters are often called "metacharacters".
- [
- /[\\$.|*+(){^]/g,
- match => `\\${match}`
- ],
-
- [
- // > a question mark (?) matches a single character
- /(?!\\)\?/g,
- () => '[^/]'
- ],
-
- // leading slash
- [
-
- // > A leading slash matches the beginning of the pathname.
- // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
- // A leading slash matches the beginning of the pathname
- /^\//,
- () => '^'
- ],
-
- // replace special metacharacter slash after the leading slash
- [
- /\//g,
- () => '\\/'
- ],
-
- [
- // > A leading "**" followed by a slash means match in all directories.
- // > For example, "**/foo" matches file or directory "foo" anywhere,
- // > the same as pattern "foo".
- // > "**/foo/bar" matches file or directory "bar" anywhere that is directly
- // > under directory "foo".
- // Notice that the '*'s have been replaced as '\\*'
- /^\^*\\\*\\\*\\\//,
-
- // '**/foo' <-> 'foo'
- () => '^(?:.*\\/)?'
- ],
-
- // starting
- [
- // there will be no leading '/'
- // (which has been replaced by section "leading slash")
- // If starts with '**', adding a '^' to the regular expression also works
- /^(?=[^^])/,
- function startingReplacer () {
- // If has a slash `/` at the beginning or middle
- return !/\/(?!$)/.test(this)
- // > Prior to 2.22.1
- // > If the pattern does not contain a slash /,
- // > Git treats it as a shell glob pattern
- // Actually, if there is only a trailing slash,
- // git also treats it as a shell glob pattern
-
- // After 2.22.1 (compatible but clearer)
- // > If there is a separator at the beginning or middle (or both)
- // > of the pattern, then the pattern is relative to the directory
- // > level of the particular .gitignore file itself.
- // > Otherwise the pattern may also match at any level below
- // > the .gitignore level.
- ? '(?:^|\\/)'
-
- // > Otherwise, Git treats the pattern as a shell glob suitable for
- // > consumption by fnmatch(3)
- : '^'
- }
- ],
-
- // two globstars
- [
- // Use lookahead assertions so that we could match more than one `'/**'`
- /\\\/\\\*\\\*(?=\\\/|$)/g,
-
- // Zero, one or several directories
- // should not use '*', or it will be replaced by the next replacer
-
- // Check if it is not the last `'/**'`
- (_, index, str) => index + 6 < str.length
-
- // case: /**/
- // > A slash followed by two consecutive asterisks then a slash matches
- // > zero or more directories.
- // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
- // '/**/'
- ? '(?:\\/[^\\/]+)*'
-
- // case: /**
- // > A trailing `"/**"` matches everything inside.
-
- // #21: everything inside but it should not include the current folder
- : '\\/.+'
- ],
-
- // intermediate wildcards
- [
- // Never replace escaped '*'
- // ignore rule '\*' will match the path '*'
-
- // 'abc.*/' -> go
- // 'abc.*' -> skip this rule
- /(^|[^\\]+)\\\*(?=.+)/g,
-
- // '*.js' matches '.js'
- // '*.js' doesn't match 'abc'
- (_, p1) => `${p1}[^\\/]*`
- ],
-
- [
- // unescape, revert step 3 except for back slash
- // For example, if a user escape a '\\*',
- // after step 3, the result will be '\\\\\\*'
- /\\\\\\(?=[$.|*+(){^])/g,
- () => ESCAPE
- ],
-
- [
- // '\\\\' -> '\\'
- /\\\\/g,
- () => ESCAPE
- ],
-
- [
- // > The range notation, e.g. [a-zA-Z],
- // > can be used to match one of the characters in a range.
-
- // `\` is escaped by step 3
- /(\\)?\[([^\]/]*?)(\\*)($|\])/g,
- (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE
- // '\\[bar]' -> '\\\\[bar\\]'
- ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}`
- : close === ']'
- ? endEscape.length % 2 === 0
- // A normal case, and it is a range notation
- // '[bar]'
- // '[bar\\\\]'
- ? `[${sanitizeRange(range)}${endEscape}]`
- // Invalid range notaton
- // '[bar\\]' -> '[bar\\\\]'
- : '[]'
- : '[]'
- ],
-
- // ending
- [
- // 'js' will not match 'js.'
- // 'ab' will not match 'abc'
- /(?:[^*])$/,
-
- // WTF!
- // https://git-scm.com/docs/gitignore
- // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)
- // which re-fixes #24, #38
-
- // > If there is a separator at the end of the pattern then the pattern
- // > will only match directories, otherwise the pattern can match both
- // > files and directories.
-
- // 'js*' will not match 'a.js'
- // 'js/' will not match 'a.js'
- // 'js' will match 'a.js' and 'a.js/'
- match => /\/$/.test(match)
- // foo/ will not match 'foo'
- ? `${match}$`
- // foo matches 'foo' and 'foo/'
- : `${match}(?=$|\\/$)`
- ],
-
- // trailing wildcard
- [
- /(\^|\\\/)?\\\*$/,
- (_, p1) => {
- const prefix = p1
- // '\^':
- // '/*' does not match EMPTY
- // '/*' does not match everything
-
- // '\\\/':
- // 'abc/*' does not match 'abc/'
- ? `${p1}[^/]+`
-
- // 'a*' matches 'a'
- // 'a*' matches 'aa'
- : '[^/]*';
-
- return `${prefix}(?=$|\\/$)`
- }
- ],
-];
-
-// A simple cache, because an ignore rule only has only one certain meaning
-const regexCache = Object.create(null);
-
-// @param {pattern}
-const makeRegex = (pattern, negative, ignorecase) => {
- const r = regexCache[pattern];
- if (r) {
- return r
- }
-
- // const replacers = negative
- // ? NEGATIVE_REPLACERS
- // : POSITIVE_REPLACERS
-
- const source = REPLACERS.reduce(
- (prev, current) => prev.replace(current[0], current[1].bind(pattern)),
- pattern
- );
-
- return regexCache[pattern] = ignorecase
- ? new RegExp(source, 'i')
- : new RegExp(source)
-};
-
-const isString = subject => typeof subject === 'string';
-
-// > A blank line matches no files, so it can serve as a separator for readability.
-const checkPattern = pattern => pattern
- && isString(pattern)
- && !REGEX_TEST_BLANK_LINE.test(pattern)
-
- // > A line starting with # serves as a comment.
- && pattern.indexOf('#') !== 0;
-
-const splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF);
-
-class IgnoreRule {
- constructor (
- origin,
- pattern,
- negative,
- regex
- ) {
- this.origin = origin;
- this.pattern = pattern;
- this.negative = negative;
- this.regex = regex;
- }
-}
-
-const createRule = (pattern, ignorecase) => {
- const origin = pattern;
- let negative = false;
-
- // > An optional prefix "!" which negates the pattern;
- if (pattern.indexOf('!') === 0) {
- negative = true;
- pattern = pattern.substr(1);
- }
-
- pattern = pattern
- // > Put a backslash ("\") in front of the first "!" for patterns that
- // > begin with a literal "!", for example, `"\!important!.txt"`.
- .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')
- // > Put a backslash ("\") in front of the first hash for patterns that
- // > begin with a hash.
- .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#');
-
- const regex = makeRegex(pattern, negative, ignorecase);
-
- return new IgnoreRule(
- origin,
- pattern,
- negative,
- regex
- )
-};
-
-const throwError = (message, Ctor) => {
- throw new Ctor(message)
-};
-
-const checkPath = (path, originalPath, doThrow) => {
- if (!isString(path)) {
- return doThrow(
- `path must be a string, but got \`${originalPath}\``,
- TypeError
- )
- }
-
- // We don't know if we should ignore EMPTY, so throw
- if (!path) {
- return doThrow(`path must not be empty`, TypeError)
- }
-
- // Check if it is a relative path
- if (checkPath.isNotRelative(path)) {
- const r = '`path.relative()`d';
- return doThrow(
- `path should be a ${r} string, but got "${originalPath}"`,
- RangeError
- )
- }
-
- return true
-};
-
-const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path);
-
-checkPath.isNotRelative = isNotRelative;
-checkPath.convert = p => p;
-
-class Ignore {
- constructor ({
- ignorecase = true
- } = {}) {
- this._rules = [];
- this._ignorecase = ignorecase;
- define(this, KEY_IGNORE, true);
- this._initCache();
- }
-
- _initCache () {
- this._ignoreCache = Object.create(null);
- this._testCache = Object.create(null);
- }
-
- _addPattern (pattern) {
- // #32
- if (pattern && pattern[KEY_IGNORE]) {
- this._rules = this._rules.concat(pattern._rules);
- this._added = true;
- return
- }
-
- if (checkPattern(pattern)) {
- const rule = createRule(pattern, this._ignorecase);
- this._added = true;
- this._rules.push(rule);
- }
- }
-
- // @param {Array<string> | string | Ignore} pattern
- add (pattern) {
- this._added = false;
-
- makeArray(
- isString(pattern)
- ? splitPattern(pattern)
- : pattern
- ).forEach(this._addPattern, this);
-
- // Some rules have just added to the ignore,
- // making the behavior changed.
- if (this._added) {
- this._initCache();
- }
-
- return this
- }
-
- // legacy
- addPattern (pattern) {
- return this.add(pattern)
- }
-
- // | ignored : unignored
- // negative | 0:0 | 0:1 | 1:0 | 1:1
- // -------- | ------- | ------- | ------- | --------
- // 0 | TEST | TEST | SKIP | X
- // 1 | TESTIF | SKIP | TEST | X
-
- // - SKIP: always skip
- // - TEST: always test
- // - TESTIF: only test if checkUnignored
- // - X: that never happen
-
- // @param {boolean} whether should check if the path is unignored,
- // setting `checkUnignored` to `false` could reduce additional
- // path matching.
-
- // @returns {TestResult} true if a file is ignored
- _testOne (path, checkUnignored) {
- let ignored = false;
- let unignored = false;
-
- this._rules.forEach(rule => {
- const {negative} = rule;
- if (
- unignored === negative && ignored !== unignored
- || negative && !ignored && !unignored && !checkUnignored
- ) {
- return
- }
-
- const matched = rule.regex.test(path);
-
- if (matched) {
- ignored = !negative;
- unignored = negative;
- }
- });
-
- return {
- ignored,
- unignored
- }
- }
-
- // @returns {TestResult}
- _test (originalPath, cache, checkUnignored, slices) {
- const path = originalPath
- // Supports nullable path
- && checkPath.convert(originalPath);
-
- checkPath(path, originalPath, throwError);
-
- return this._t(path, cache, checkUnignored, slices)
- }
-
- _t (path, cache, checkUnignored, slices) {
- if (path in cache) {
- return cache[path]
- }
-
- if (!slices) {
- // path/to/a.js
- // ['path', 'to', 'a.js']
- slices = path.split(SLASH$1);
- }
-
- slices.pop();
-
- // If the path has no parent directory, just test it
- if (!slices.length) {
- return cache[path] = this._testOne(path, checkUnignored)
- }
-
- const parent = this._t(
- slices.join(SLASH$1) + SLASH$1,
- cache,
- checkUnignored,
- slices
- );
-
- // If the path contains a parent directory, check the parent first
- return cache[path] = parent.ignored
- // > It is not possible to re-include a file if a parent directory of
- // > that file is excluded.
- ? parent
- : this._testOne(path, checkUnignored)
- }
-
- ignores (path) {
- return this._test(path, this._ignoreCache, false).ignored
- }
-
- createFilter () {
- return path => !this.ignores(path)
- }
-
- filter (paths) {
- return makeArray(paths).filter(this.createFilter())
- }
-
- // @returns {TestResult}
- test (path) {
- return this._test(path, this._testCache, true)
- }
-}
-
-const factory = options => new Ignore(options);
-
-const returnFalse = () => false;
-
-const isPathValid = path =>
- checkPath(path && checkPath.convert(path), path, returnFalse);
-
-factory.isPathValid = isPathValid;
-
-// Fixes typescript
-factory.default = factory;
-
-var ignore = factory;
-
-// Windows
-// --------------------------------------------------------------
-/* istanbul ignore if */
-if (
- // Detect `process` so that it can run in browsers.
- typeof process !== 'undefined'
- && (
- process.env && process.env.IGNORE_TEST_WIN32
- || process.platform === 'win32'
- )
-) {
- /* eslint no-control-regex: "off" */
- const makePosix = str => /^\\\\\?\\/.test(str)
- || /["<>|\u0000-\u001F]+/u.test(str)
- ? str
- : str.replace(/\\/g, '/');
-
- checkPath.convert = makePosix;
-
- // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/'
- // 'd:\\foo'
- const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i;
- checkPath.isNotRelative = path =>
- REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)
- || isNotRelative(path);
-}
-
-var slash$1 = path => {
- const isExtendedLengthPath = /^\\\\\?\\/.test(path);
- const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex
-
- if (isExtendedLengthPath || hasNonAscii) {
- return path;
- }
-
- return path.replace(/\\/g, '/');
-};
-
-const {promisify: promisify$5} = require$$0__default$2;
-const fs$d = fs__default;
-const path$b = path__default;
-const fastGlob$1 = out;
-const gitIgnore = ignore;
-const slash = slash$1;
-
-const DEFAULT_IGNORE = [
- '**/node_modules/**',
- '**/flow-typed/**',
- '**/coverage/**',
- '**/.git'
-];
-
-const readFileP = promisify$5(fs$d.readFile);
-
-const mapGitIgnorePatternTo = base => ignore => {
- if (ignore.startsWith('!')) {
- return '!' + path$b.posix.join(base, ignore.slice(1));
- }
-
- return path$b.posix.join(base, ignore);
-};
-
-const parseGitIgnore = (content, options) => {
- const base = slash(path$b.relative(options.cwd, path$b.dirname(options.fileName)));
-
- return content
- .split(/\r?\n/)
- .filter(Boolean)
- .filter(line => !line.startsWith('#'))
- .map(mapGitIgnorePatternTo(base));
-};
-
-const reduceIgnore = files => {
- const ignores = gitIgnore();
- for (const file of files) {
- ignores.add(parseGitIgnore(file.content, {
- cwd: file.cwd,
- fileName: file.filePath
- }));
- }
-
- return ignores;
-};
-
-const ensureAbsolutePathForCwd = (cwd, p) => {
- cwd = slash(cwd);
- if (path$b.isAbsolute(p)) {
- if (slash(p).startsWith(cwd)) {
- return p;
- }
-
- throw new Error(`Path ${p} is not in cwd ${cwd}`);
- }
-
- return path$b.join(cwd, p);
-};
-
-const getIsIgnoredPredecate = (ignores, cwd) => {
- return p => ignores.ignores(slash(path$b.relative(cwd, ensureAbsolutePathForCwd(cwd, p.path || p))));
-};
-
-const getFile = async (file, cwd) => {
- const filePath = path$b.join(cwd, file);
- const content = await readFileP(filePath, 'utf8');
-
- return {
- cwd,
- filePath,
- content
- };
-};
-
-const getFileSync = (file, cwd) => {
- const filePath = path$b.join(cwd, file);
- const content = fs$d.readFileSync(filePath, 'utf8');
-
- return {
- cwd,
- filePath,
- content
- };
-};
-
-const normalizeOptions = ({
- ignore = [],
- cwd = slash(process.cwd())
-} = {}) => {
- return {ignore, cwd};
-};
-
-gitignore$1.exports = async options => {
- options = normalizeOptions(options);
-
- const paths = await fastGlob$1('**/.gitignore', {
- ignore: DEFAULT_IGNORE.concat(options.ignore),
- cwd: options.cwd
- });
-
- const files = await Promise.all(paths.map(file => getFile(file, options.cwd)));
- const ignores = reduceIgnore(files);
-
- return getIsIgnoredPredecate(ignores, options.cwd);
-};
-
-gitignore$1.exports.sync = options => {
- options = normalizeOptions(options);
-
- const paths = fastGlob$1.sync('**/.gitignore', {
- ignore: DEFAULT_IGNORE.concat(options.ignore),
- cwd: options.cwd
- });
-
- const files = paths.map(file => getFileSync(file, options.cwd));
- const ignores = reduceIgnore(files);
-
- return getIsIgnoredPredecate(ignores, options.cwd);
-};
-
-const {Transform} = require$$0__default$4;
-
-class ObjectTransform extends Transform {
- constructor() {
- super({
- objectMode: true
- });
- }
-}
-
-class FilterStream$1 extends ObjectTransform {
- constructor(filter) {
- super();
- this._filter = filter;
- }
-
- _transform(data, encoding, callback) {
- if (this._filter(data)) {
- this.push(data);
- }
-
- callback();
- }
-}
-
-class UniqueStream$1 extends ObjectTransform {
- constructor() {
- super();
- this._pushed = new Set();
- }
-
- _transform(data, encoding, callback) {
- if (!this._pushed.has(data)) {
- this.push(data);
- this._pushed.add(data);
- }
-
- callback();
- }
-}
-
-var streamUtils = {
- FilterStream: FilterStream$1,
- UniqueStream: UniqueStream$1
-};
-
-const fs$c = fs__default;
-const arrayUnion = arrayUnion$1;
-const merge2 = merge2_1;
-const fastGlob = out;
-const dirGlob = dirGlob$1.exports;
-const gitignore = gitignore$1.exports;
-const {FilterStream, UniqueStream} = streamUtils;
-
-const DEFAULT_FILTER = () => false;
-
-const isNegative = pattern => pattern[0] === '!';
-
-const assertPatternsInput = patterns => {
- if (!patterns.every(pattern => typeof pattern === 'string')) {
- throw new TypeError('Patterns must be a string or an array of strings');
- }
-};
-
-const checkCwdOption = (options = {}) => {
- if (!options.cwd) {
- return;
- }
-
- let stat;
- try {
- stat = fs$c.statSync(options.cwd);
- } catch {
- return;
- }
-
- if (!stat.isDirectory()) {
- throw new Error('The `cwd` option must be a path to a directory');
- }
-};
-
-const getPathString = p => p.stats instanceof fs$c.Stats ? p.path : p;
-
-const generateGlobTasks = (patterns, taskOptions) => {
- patterns = arrayUnion([].concat(patterns));
- assertPatternsInput(patterns);
- checkCwdOption(taskOptions);
-
- const globTasks = [];
-
- taskOptions = {
- ignore: [],
- expandDirectories: true,
- ...taskOptions
- };
-
- for (const [index, pattern] of patterns.entries()) {
- if (isNegative(pattern)) {
- continue;
- }
-
- const ignore = patterns
- .slice(index)
- .filter(pattern => isNegative(pattern))
- .map(pattern => pattern.slice(1));
-
- const options = {
- ...taskOptions,
- ignore: taskOptions.ignore.concat(ignore)
- };
-
- globTasks.push({pattern, options});
- }
-
- return globTasks;
-};
-
-const globDirs = (task, fn) => {
- let options = {};
- if (task.options.cwd) {
- options.cwd = task.options.cwd;
- }
-
- if (Array.isArray(task.options.expandDirectories)) {
- options = {
- ...options,
- files: task.options.expandDirectories
- };
- } else if (typeof task.options.expandDirectories === 'object') {
- options = {
- ...options,
- ...task.options.expandDirectories
- };
- }
-
- return fn(task.pattern, options);
-};
-
-const getPattern = (task, fn) => task.options.expandDirectories ? globDirs(task, fn) : [task.pattern];
-
-const getFilterSync = options => {
- return options && options.gitignore ?
- gitignore.sync({cwd: options.cwd, ignore: options.ignore}) :
- DEFAULT_FILTER;
-};
-
-const globToTask = task => glob => {
- const {options} = task;
- if (options.ignore && Array.isArray(options.ignore) && options.expandDirectories) {
- options.ignore = dirGlob.sync(options.ignore);
- }
-
- return {
- pattern: glob,
- options
- };
-};
-
-globby$1.exports = async (patterns, options) => {
- const globTasks = generateGlobTasks(patterns, options);
-
- const getFilter = async () => {
- return options && options.gitignore ?
- gitignore({cwd: options.cwd, ignore: options.ignore}) :
- DEFAULT_FILTER;
- };
-
- const getTasks = async () => {
- const tasks = await Promise.all(globTasks.map(async task => {
- const globs = await getPattern(task, dirGlob);
- return Promise.all(globs.map(globToTask(task)));
- }));
-
- return arrayUnion(...tasks);
- };
-
- const [filter, tasks] = await Promise.all([getFilter(), getTasks()]);
- const paths = await Promise.all(tasks.map(task => fastGlob(task.pattern, task.options)));
-
- return arrayUnion(...paths).filter(path_ => !filter(getPathString(path_)));
-};
-
-globby$1.exports.sync = (patterns, options) => {
- const globTasks = generateGlobTasks(patterns, options);
-
- const tasks = [];
- for (const task of globTasks) {
- const newTask = getPattern(task, dirGlob.sync).map(globToTask(task));
- tasks.push(...newTask);
- }
-
- const filter = getFilterSync(options);
-
- let matches = [];
- for (const task of tasks) {
- matches = arrayUnion(matches, fastGlob.sync(task.pattern, task.options));
- }
-
- return matches.filter(path_ => !filter(path_));
-};
-
-globby$1.exports.stream = (patterns, options) => {
- const globTasks = generateGlobTasks(patterns, options);
-
- const tasks = [];
- for (const task of globTasks) {
- const newTask = getPattern(task, dirGlob.sync).map(globToTask(task));
- tasks.push(...newTask);
- }
-
- const filter = getFilterSync(options);
- const filterStream = new FilterStream(p => !filter(p));
- const uniqueStream = new UniqueStream();
-
- return merge2(tasks.map(task => fastGlob.stream(task.pattern, task.options)))
- .pipe(filterStream)
- .pipe(uniqueStream);
-};
-
-globby$1.exports.generateGlobTasks = generateGlobTasks;
-
-globby$1.exports.hasMagic = (patterns, options) => []
- .concat(patterns)
- .some(pattern => fastGlob.isDynamicPattern(pattern, options));
-
-globby$1.exports.gitignore = gitignore;
-
-var globby = globby$1.exports;
-
-class VariableDynamicImportError extends Error {}
-
-/* eslint-disable-next-line no-template-curly-in-string */
-const example = 'For example: import(`./foo/${bar}.js`).';
-
-function sanitizeString(str) {
- if (str.includes('*')) {
- throw new VariableDynamicImportError('A dynamic import cannot contain * characters.');
- }
- return str;
-}
-
-function templateLiteralToGlob(node) {
- let glob = '';
-
- for (let i = 0; i < node.quasis.length; i += 1) {
- glob += sanitizeString(node.quasis[i].value.raw);
- if (node.expressions[i]) {
- glob += expressionToGlob(node.expressions[i]);
- }
- }
-
- return glob;
-}
-
-function callExpressionToGlob(node) {
- const { callee } = node;
- if (
- callee.type === 'MemberExpression' &&
- callee.property.type === 'Identifier' &&
- callee.property.name === 'concat'
- ) {
- return `${expressionToGlob(callee.object)}${node.arguments.map(expressionToGlob).join('')}`;
- }
- return '*';
-}
-
-function binaryExpressionToGlob(node) {
- if (node.operator !== '+') {
- throw new VariableDynamicImportError(`${node.operator} operator is not supported.`);
- }
-
- return `${expressionToGlob(node.left)}${expressionToGlob(node.right)}`;
-}
-
-function expressionToGlob(node) {
- switch (node.type) {
- case 'TemplateLiteral':
- return templateLiteralToGlob(node);
- case 'CallExpression':
- return callExpressionToGlob(node);
- case 'BinaryExpression':
- return binaryExpressionToGlob(node);
- case 'Literal': {
- return sanitizeString(node.value);
- }
- default:
- return '*';
- }
-}
-
-function dynamicImportToGlob(node, sourceString) {
- let glob = expressionToGlob(node);
- if (!glob.includes('*')) {
- return null;
- }
- glob = glob.replace(/\*\*/g, '*');
-
- if (glob.startsWith('*')) {
- throw new VariableDynamicImportError(
- `invalid import "${sourceString}". It cannot be statically analyzed. Variable dynamic imports must start with ./ and be limited to a specific directory. ${example}`
- );
- }
-
- if (glob.startsWith('/')) {
- throw new VariableDynamicImportError(
- `invalid import "${sourceString}". Variable absolute imports are not supported, imports must start with ./ in the static part of the import. ${example}`
- );
- }
-
- if (!glob.startsWith('./') && !glob.startsWith('../')) {
- throw new VariableDynamicImportError(
- `invalid import "${sourceString}". Variable bare imports are not supported, imports must start with ./ in the static part of the import. ${example}`
- );
- }
-
- // Disallow ./*.ext
- const ownDirectoryStarExtension = /^\.\/\*\.[\w]+$/;
- if (ownDirectoryStarExtension.test(glob)) {
- throw new VariableDynamicImportError(
- `${
- `invalid import "${sourceString}". Variable imports cannot import their own directory, ` +
- 'place imports in a separate directory or make the import filename more specific. '
- }${example}`
- );
- }
-
- if (path__default.extname(glob) === '') {
- throw new VariableDynamicImportError(
- `invalid import "${sourceString}". A file extension must be included in the static part of the import. ${example}`
- );
- }
-
- return glob;
-}
-
-function dynamicImportVariables({ include, exclude, warnOnError } = {}) {
- const filter = createFilter(include, exclude);
-
- return {
- name: 'rollup-plugin-dynamic-import-variables',
-
- transform(code, id) {
- if (!filter(id)) {
- return null;
- }
-
- const parsed = this.parse(code);
-
- let dynamicImportIndex = -1;
- let ms;
-
- walk$1(parsed, {
- enter: (node) => {
- if (node.type !== 'ImportExpression') {
- return;
- }
- dynamicImportIndex += 1;
-
- try {
- // see if this is a variable dynamic import, and generate a glob expression
- const glob = dynamicImportToGlob(node.source, code.substring(node.start, node.end));
-
- if (!glob) {
- // this was not a variable dynamic import
- return;
- }
-
- // execute the glob
- const result = globby.sync(glob, { cwd: path__default.dirname(id) });
- const paths = result.map((r) =>
- r.startsWith('./') || r.startsWith('../') ? r : `./${r}`
- );
-
- // create magic string if it wasn't created already
- ms = ms || new MagicString(code);
- // unpack variable dynamic import into a function with import statements per file, rollup
- // will turn these into chunks automatically
- ms.prepend(
- `function __variableDynamicImportRuntime${dynamicImportIndex}__(path) {
- switch (path) {
-${paths.map((p) => ` case '${p}': return import('${p}');`).join('\n')}
-${` default: return new Promise(function(resolve, reject) {
- (typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(
- reject.bind(null, new Error("Unknown variable dynamic import: " + path))
- );
- })\n`} }
- }\n\n`
- );
- // call the runtime function instead of doing a dynamic import, the import specifier will
- // be evaluated at runtime and the correct import will be returned by the injected function
- ms.overwrite(
- node.start,
- node.start + 6,
- `__variableDynamicImportRuntime${dynamicImportIndex}__`
- );
- } catch (error) {
- if (error instanceof VariableDynamicImportError) {
- // TODO: line number
- if (warnOnError) {
- this.warn(error);
- } else {
- this.error(error);
- }
- } else {
- this.error(error);
- }
- }
- }
- });
-
- if (ms && dynamicImportIndex !== -1) {
- return {
- code: ms.toString(),
- map: ms.generateMap({
- file: id,
- includeContent: true,
- hires: true
- })
- };
- }
- return null;
- }
- };
-}
-
-const dataUriRE = /^([^/]+\/[^;,]+)(;base64)?,([\s\S]*)$/;
-const dataUriPrefix = `/@data-uri/`;
-/**
- * Build only, since importing from a data URI works natively.
- */
-function dataURIPlugin() {
- let resolved;
- return {
- name: 'vite:data-uri',
- buildStart() {
- resolved = {};
- },
- resolveId(id) {
- if (!dataUriRE.test(id)) {
- return null;
- }
- const uri = new require$$0$8.URL(id);
- if (uri.protocol !== 'data:') {
- return null;
- }
- const match = uri.pathname.match(dataUriRE);
- if (!match) {
- return null;
- }
- const [, mime, format, data] = match;
- if (mime !== 'text/javascript') {
- throw new Error(`data URI with non-JavaScript mime type is not supported.`);
- }
- // decode data
- const base64 = format && /base64/i.test(format.substring(1));
- const content = base64
- ? Buffer.from(data, 'base64').toString('utf-8')
- : data;
- resolved[id] = content;
- return dataUriPrefix + id;
- },
- load(id) {
- if (id.startsWith(dataUriPrefix)) {
- id = id.slice(dataUriPrefix.length);
- return resolved[id] || null;
- }
- }
- };
-}
-
-/**
- * @param {object} exports
- * @param {Set<string>} keys
- */
-function loop(exports, keys) {
- if (typeof exports === 'string') {
- return exports;
- }
-
- if (exports) {
- let idx, tmp;
- if (Array.isArray(exports)) {
- for (idx=0; idx < exports.length; idx++) {
- if (tmp = loop(exports[idx], keys)) return tmp;
- }
- } else {
- for (idx in exports) {
- if (keys.has(idx)) {
- return loop(exports[idx], keys);
- }
- }
- }
- }
-}
-
-/**
- * @param {string} name The package name
- * @param {string} entry The target entry, eg "."
- * @param {number} [condition] Unmatched condition?
- */
-function bail(name, entry, condition) {
- throw new Error(
- condition
- ? `No known conditions for "${entry}" entry in "${name}" package`
- : `Missing "${entry}" export in "${name}" package`
- );
-}
-
-/**
- * @param {string} name the package name
- * @param {string} entry the target path/import
- */
-function toName(name, entry) {
- return entry === name ? '.'
- : entry[0] === '.' ? entry
- : entry.replace(new RegExp('^' + name + '\/'), './');
-}
-
-/**
- * @param {object} pkg package.json contents
- * @param {string} [entry] entry name or import path
- * @param {object} [options]
- * @param {boolean} [options.browser]
- * @param {boolean} [options.require]
- * @param {string[]} [options.conditions]
- */
-function resolve$1(pkg, entry='.', options={}) {
- let { name, exports } = pkg;
-
- if (exports) {
- let { browser, require, conditions=[] } = options;
-
- let target = toName(name, entry);
- if (target[0] !== '.') target = './' + target;
-
- if (typeof exports === 'string') {
- return target === '.' ? exports : bail(name, target);
- }
-
- let allows = new Set(['default', ...conditions]);
- allows.add(require ? 'require' : 'import');
- allows.add(browser ? 'browser' : 'node');
-
- let key, tmp, isSingle=false;
-
- for (key in exports) {
- isSingle = key[0] !== '.';
- break;
- }
-
- if (isSingle) {
- return target === '.'
- ? loop(exports, allows) || bail(name, target, 1)
- : bail(name, target);
- }
-
- if (tmp = exports[target]) {
- return loop(tmp, allows) || bail(name, target, 1);
- }
-
- for (key in exports) {
- tmp = key[key.length - 1];
- if (tmp === '/' && target.startsWith(key)) {
- return (tmp = loop(exports[key], allows))
- ? (tmp + target.substring(key.length))
- : bail(name, target, 1);
- }
- if (tmp === '*' && target.startsWith(key.slice(0, -1))) {
- // do not trigger if no *content* to inject
- if (target.substring(key.length - 1).length > 0) {
- return (tmp = loop(exports[key], allows))
- ? tmp.replace('*', target.substring(key.length - 1))
- : bail(name, target, 1);
- }
- }
- }
-
- return bail(name, target);
- }
-}
-
-// special id for paths marked with browser: false
-// https://github.com/defunctzombie/package-browser-field-spec#ignore-a-module
-const browserExternalId = '__vite-browser-external';
-const isDebug$5 = process.env.DEBUG;
-const debug$d = createDebugger('vite:resolve-details', {
- onlyWhenFocused: true
-});
-function resolvePlugin(baseOptions) {
- const { root, isProduction, asSrc, ssrConfig, preferRelative = false } = baseOptions;
- const requireOptions = {
- ...baseOptions,
- isRequire: true
- };
- let server;
- const { target: ssrTarget, noExternal: ssrNoExternal } = ssrConfig !== null && ssrConfig !== void 0 ? ssrConfig : {};
- return {
- name: 'vite:resolve',
- configureServer(_server) {
- server = _server;
- },
- resolveId(id, importer, resolveOpts, ssr) {
- if (id.startsWith(browserExternalId)) {
- return id;
- }
- // fast path for commonjs proxy modules
- if (/\?commonjs/.test(id) || id === 'commonjsHelpers.js') {
- return;
- }
- const targetWeb = !ssr || ssrTarget === 'webworker';
- // this is passed by @rollup/plugin-commonjs
- const isRequire = resolveOpts &&
- resolveOpts.custom &&
- resolveOpts.custom['node-resolve'] &&
- resolveOpts.custom['node-resolve'].isRequire;
- const options = isRequire ? requireOptions : baseOptions;
- const preserveSymlinks = !!(server === null || server === void 0 ? void 0 : server.config.resolve.preserveSymlinks);
- let res;
- // explicit fs paths that starts with /@fs/*
- if (asSrc && id.startsWith(FS_PREFIX)) {
- const fsPath = fsPathFromId(id);
- res = tryFsResolve(fsPath, options, preserveSymlinks);
- isDebug$5 && debug$d(`[@fs] ${source.cyan(id)} -> ${source.dim(res)}`);
- // always return here even if res doesn't exist since /@fs/ is explicit
- // if the file doesn't exist it should be a 404
- return res || fsPath;
- }
- // URL
- // /foo -> /fs-root/foo
- if (asSrc && id.startsWith('/')) {
- const fsPath = path__default.resolve(root, id.slice(1));
- if ((res = tryFsResolve(fsPath, options, preserveSymlinks))) {
- isDebug$5 && debug$d(`[url] ${source.cyan(id)} -> ${source.dim(res)}`);
- return res;
- }
- }
- // relative
- if (id.startsWith('.') || (preferRelative && /^\w/.test(id))) {
- const basedir = importer ? path__default.dirname(importer) : process.cwd();
- const fsPath = path__default.resolve(basedir, id);
- // handle browser field mapping for relative imports
- const normalizedFsPath = normalizePath$4(fsPath);
- const pathFromBasedir = normalizedFsPath.slice(basedir.length);
- if (pathFromBasedir.startsWith('/node_modules/')) {
- // normalize direct imports from node_modules to bare imports, so the
- // hashing logic is shared and we avoid duplicated modules #2503
- const bareImport = pathFromBasedir.slice('/node_modules/'.length);
- if ((res = tryNodeResolve(bareImport, importer, options, targetWeb, server, ssr)) &&
- res.id.startsWith(normalizedFsPath)) {
- return res;
- }
- }
- if (targetWeb &&
- (res = tryResolveBrowserMapping(fsPath, importer, options, true, preserveSymlinks))) {
- return res;
- }
- if ((res = tryFsResolve(fsPath, options, preserveSymlinks))) {
- isDebug$5 && debug$d(`[relative] ${source.cyan(id)} -> ${source.dim(res)}`);
- const pkg = importer != null && idToPkgMap.get(importer);
- if (pkg) {
- idToPkgMap.set(res, pkg);
- return {
- id: res,
- moduleSideEffects: pkg.hasSideEffects(res)
- };
- }
- return res;
- }
- }
- // absolute fs paths
- if (path__default.isAbsolute(id) &&
- (res = tryFsResolve(id, options, preserveSymlinks))) {
- isDebug$5 && debug$d(`[fs] ${source.cyan(id)} -> ${source.dim(res)}`);
- return res;
- }
- // external
- if (isExternalUrl(id)) {
- return {
- id,
- external: true
- };
- }
- // data uri: pass through (this only happens during build and will be
- // handled by dedicated plugin)
- if (isDataUrl(id)) {
- return null;
- }
- // bare package imports, perform node resolve
- if (bareImportRE.test(id)) {
- if (asSrc &&
- server &&
- !ssr &&
- (res = tryOptimizedResolve(id, server, importer))) {
- return res;
- }
- if (targetWeb &&
- (res = tryResolveBrowserMapping(id, importer, options, false, preserveSymlinks))) {
- return res;
- }
- if ((res = tryNodeResolve(id, importer, options, targetWeb, server, ssr))) {
- return res;
- }
- // node built-ins.
- // externalize if building for SSR, otherwise redirect to empty module
- if (isBuiltin(id)) {
- if (ssr) {
- if (ssrNoExternal === true) {
- let message = `Cannot bundle Node.js built-in "${id}"`;
- if (importer) {
- message += ` imported from "${path__default.relative(process.cwd(), importer)}"`;
- }
- message += `. Consider disabling ssr.noExternal or remove the built-in dependency.`;
- this.error(message);
- }
- return {
- id,
- external: true
- };
- }
- else {
- if (!asSrc) {
- debug$d(`externalized node built-in "${id}" to empty module. ` +
- `(imported by: ${source.white.dim(importer)})`);
- }
- return isProduction
- ? browserExternalId
- : `${browserExternalId}:${id}`;
- }
- }
- }
- isDebug$5 && debug$d(`[fallthrough] ${source.dim(id)}`);
- },
- load(id) {
- if (id.startsWith(browserExternalId)) {
- return isProduction
- ? `export default {}`
- : `export default new Proxy({}, {
- get() {
- throw new Error('Module "${id.slice(browserExternalId.length + 1)}" has been externalized for browser compatibility and cannot be accessed in client code.')
- }
-})`;
- }
- }
- };
-}
-function tryFsResolve(fsPath, options, preserveSymlinks, tryIndex = true, targetWeb = true) {
- let file = fsPath;
- let postfix = '';
- let postfixIndex = fsPath.indexOf('?');
- if (postfixIndex < 0) {
- postfixIndex = fsPath.indexOf('#');
- }
- if (postfixIndex > 0) {
- file = fsPath.slice(0, postfixIndex);
- postfix = fsPath.slice(postfixIndex);
- }
- let res;
- if ((res = tryResolveFile(file, postfix, options, false, targetWeb, preserveSymlinks, options.tryPrefix, options.skipPackageJson))) {
- return res;
- }
- for (const ext of options.extensions || DEFAULT_EXTENSIONS) {
- if ((res = tryResolveFile(file + ext, postfix, options, false, targetWeb, preserveSymlinks, options.tryPrefix, options.skipPackageJson))) {
- return res;
- }
- }
- if ((res = tryResolveFile(file, postfix, options, tryIndex, targetWeb, preserveSymlinks, options.tryPrefix, options.skipPackageJson))) {
- return res;
- }
-}
-function tryResolveFile(file, postfix, options, tryIndex, targetWeb, preserveSymlinks, tryPrefix, skipPackageJson) {
- let isReadable = false;
- try {
- // #2051 if we don't have read permission on a directory, existsSync() still
- // works and will result in massively slow subsequent checks (which are
- // unnecessary in the first place)
- fs__default.accessSync(file, fs__default.constants.R_OK);
- isReadable = true;
- }
- catch (e) { }
- if (isReadable) {
- if (!fs__default.statSync(file).isDirectory()) {
- return getRealPath(file, preserveSymlinks) + postfix;
- }
- else if (tryIndex) {
- if (!skipPackageJson) {
- const pkgPath = file + '/package.json';
- if (fs__default.existsSync(pkgPath)) {
- // path points to a node package
- const pkg = loadPackageData(pkgPath);
- const resolved = resolvePackageEntry(file, pkg, options, targetWeb, preserveSymlinks);
- return resolved;
- }
- }
- const index = tryFsResolve(file + '/index', options, preserveSymlinks);
- if (index)
- return index + postfix;
- }
- }
- if (tryPrefix) {
- const prefixed = `${path__default.dirname(file)}/${tryPrefix}${path__default.basename(file)}`;
- return tryResolveFile(prefixed, postfix, options, tryIndex, targetWeb, preserveSymlinks);
- }
-}
-const idToPkgMap = new Map();
-function tryNodeResolve(id, importer, options, targetWeb, server, ssr) {
- var _a, _b, _c;
- const { root, dedupe, isBuild } = options;
- // split id by last '>' for nested selected packages, for example:
- // 'foo > bar > baz' => 'foo > bar' & 'baz'
- // 'foo' => '' & 'foo'
- const lastArrowIndex = id.lastIndexOf('>');
- const nestedRoot = id.substring(0, lastArrowIndex).trim();
- const nestedPath = id.substring(lastArrowIndex + 1).trim();
- // check for deep import, e.g. "my-lib/foo"
- const deepMatch = nestedPath.match(deepImportRE);
- const pkgId = deepMatch ? deepMatch[1] || deepMatch[2] : nestedPath;
- let basedir;
- if (dedupe && dedupe.includes(pkgId)) {
- basedir = root;
- }
- else if (importer &&
- path__default.isAbsolute(importer) &&
- fs__default.existsSync(cleanUrl(importer))) {
- basedir = path__default.dirname(importer);
- }
- else {
- basedir = root;
- }
- const preserveSymlinks = !!(server === null || server === void 0 ? void 0 : server.config.resolve.preserveSymlinks);
- // nested node module, step-by-step resolve to the basedir of the nestedPath
- if (nestedRoot) {
- basedir = nestedResolveFrom(nestedRoot, basedir, preserveSymlinks);
- }
- const pkg = resolvePackageData(pkgId, basedir, preserveSymlinks);
- if (!pkg) {
- return;
- }
- let resolved = deepMatch
- ? resolveDeepImport('.' + id.slice(pkgId.length), pkg, options, targetWeb, preserveSymlinks)
- : resolvePackageEntry(id, pkg, options, targetWeb, preserveSymlinks);
- if (!resolved) {
- return;
- }
- // link id to pkg for browser field mapping check
- idToPkgMap.set(resolved, pkg);
- if (isBuild) {
- // Resolve package side effects for build so that rollup can better
- // perform tree-shaking
- return {
- id: resolved,
- moduleSideEffects: pkg.hasSideEffects(resolved)
- };
- }
- else {
- if (!resolved.includes('node_modules') || // linked
- !server || // build
- server._isRunningOptimizer || // optimizing
- !server._optimizeDepsMetadata) {
- return { id: resolved };
- }
- // if we reach here, it's a valid dep import that hasn't been optimized.
- const isJsType = OPTIMIZABLE_ENTRY_RE.test(resolved);
- const exclude = (_a = server.config.optimizeDeps) === null || _a === void 0 ? void 0 : _a.exclude;
- if (!isJsType ||
- (importer === null || importer === void 0 ? void 0 : importer.includes('node_modules')) ||
- (exclude === null || exclude === void 0 ? void 0 : exclude.includes(pkgId)) ||
- (exclude === null || exclude === void 0 ? void 0 : exclude.includes(id)) ||
- SPECIAL_QUERY_RE.test(resolved) ||
- ssr) {
- // excluded from optimization
- // Inject a version query to npm deps so that the browser
- // can cache it without re-validation, but only do so for known js types.
- // otherwise we may introduce duplicated modules for externalized files
- // from pre-bundled deps.
- const versionHash = (_b = server._optimizeDepsMetadata) === null || _b === void 0 ? void 0 : _b.browserHash;
- if (versionHash && isJsType) {
- resolved = injectQuery(resolved, `v=${versionHash}`);
- }
- }
- else {
- // this is a missing import.
- // queue optimize-deps re-run.
- (_c = server._registerMissingImport) === null || _c === void 0 ? void 0 : _c.call(server, id, resolved, ssr);
- }
- return { id: resolved };
- }
-}
-function tryOptimizedResolve(id, server, importer) {
- const cacheDir = server.config.cacheDir;
- const depData = server._optimizeDepsMetadata;
- if (!cacheDir || !depData)
- return;
- const getOptimizedUrl = (optimizedData) => {
- return (optimizedData.file +
- `?v=${depData.browserHash}${optimizedData.needsInterop ? `&es-interop` : ``}`);
- };
- // check if id has been optimized
- const isOptimized = depData.optimized[id];
- if (isOptimized) {
- return getOptimizedUrl(isOptimized);
- }
- if (!importer)
- return;
- // further check if id is imported by nested dependency
- let resolvedSrc;
- for (const [pkgPath, optimizedData] of Object.entries(depData.optimized)) {
- // check for scenarios, e.g.
- // pkgPath => "my-lib > foo"
- // id => "foo"
- // this narrows the need to do a full resolve
- if (!pkgPath.endsWith(id))
- continue;
- // lazily initialize resolvedSrc
- if (resolvedSrc == null) {
- try {
- // this may throw errors if unable to resolve, e.g. aliased id
- resolvedSrc = normalizePath$4(resolveFrom$3(id, path__default.dirname(importer)));
- }
- catch {
- // this is best-effort only so swallow errors
- break;
- }
- }
- // match by src to correctly identify if id belongs to nested dependency
- if (optimizedData.src === resolvedSrc) {
- return getOptimizedUrl(optimizedData);
- }
- }
-}
-const packageCache = new Map();
-function resolvePackageData(id, basedir, preserveSymlinks = false) {
- const cacheKey = id + basedir;
- if (packageCache.has(cacheKey)) {
- return packageCache.get(cacheKey);
- }
- try {
- const pkgPath = resolveFrom$3(`${id}/package.json`, basedir, preserveSymlinks);
- return loadPackageData(pkgPath, cacheKey);
- }
- catch (e) {
- isDebug$5 && debug$d(`${source.red(`[failed loading package.json]`)} ${id}`);
- }
-}
-function loadPackageData(pkgPath, cacheKey = pkgPath) {
- const data = JSON.parse(fs__default.readFileSync(pkgPath, 'utf-8'));
- const pkgDir = path__default.dirname(pkgPath);
- const { sideEffects } = data;
- let hasSideEffects;
- if (typeof sideEffects === 'boolean') {
- hasSideEffects = () => sideEffects;
- }
- else if (Array.isArray(sideEffects)) {
- hasSideEffects = createFilter$1(sideEffects, null, { resolve: pkgDir });
- }
- else {
- hasSideEffects = () => true;
- }
- const pkg = {
- dir: pkgDir,
- data,
- hasSideEffects,
- webResolvedImports: {},
- nodeResolvedImports: {},
- setResolvedCache(key, entry, targetWeb) {
- if (targetWeb) {
- pkg.webResolvedImports[key] = entry;
- }
- else {
- pkg.nodeResolvedImports[key] = entry;
- }
- },
- getResolvedCache(key, targetWeb) {
- if (targetWeb) {
- return pkg.webResolvedImports[key];
- }
- else {
- return pkg.nodeResolvedImports[key];
- }
- }
- };
- packageCache.set(cacheKey, pkg);
- return pkg;
-}
-function resolvePackageEntry(id, { dir, data, setResolvedCache, getResolvedCache }, options, targetWeb, preserveSymlinks = false) {
- var _a, _b;
- const cached = getResolvedCache('.', targetWeb);
- if (cached) {
- return cached;
- }
- try {
- let entryPoint;
- // resolve exports field with highest priority
- // using https://github.com/lukeed/resolve.exports
- if (data.exports) {
- entryPoint = resolveExports(data, '.', options, targetWeb);
- }
- // if exports resolved to .mjs, still resolve other fields.
- // This is because .mjs files can technically import .cjs files which would
- // make them invalid for pure ESM environments - so if other module/browser
- // fields are present, prioritize those instead.
- if (targetWeb && (!entryPoint || entryPoint.endsWith('.mjs'))) {
- // check browser field
- // https://github.com/defunctzombie/package-browser-field-spec
- const browserEntry = typeof data.browser === 'string'
- ? data.browser
- : isObject$3(data.browser) && data.browser['.'];
- if (browserEntry) {
- // check if the package also has a "module" field.
- if (typeof data.module === 'string' && data.module !== browserEntry) {
- // if both are present, we may have a problem: some package points both
- // to ESM, with "module" targeting Node.js, while some packages points
- // "module" to browser ESM and "browser" to UMD.
- // the heuristics here is to actually read the browser entry when
- // possible and check for hints of UMD. If it is UMD, prefer "module"
- // instead; Otherwise, assume it's ESM and use it.
- const resolvedBrowserEntry = tryFsResolve(path__default.join(dir, browserEntry), options, preserveSymlinks);
- if (resolvedBrowserEntry) {
- const content = fs__default.readFileSync(resolvedBrowserEntry, 'utf-8');
- if ((/typeof exports\s*==/.test(content) &&
- /typeof module\s*==/.test(content)) ||
- /module\.exports\s*=/.test(content)) {
- // likely UMD or CJS(!!! e.g. firebase 7.x), prefer module
- entryPoint = data.module;
- }
- }
- }
- else {
- entryPoint = browserEntry;
- }
- }
- }
- if (!entryPoint || entryPoint.endsWith('.mjs')) {
- for (const field of options.mainFields || DEFAULT_MAIN_FIELDS) {
- if (typeof data[field] === 'string') {
- entryPoint = data[field];
- break;
- }
- }
- }
- entryPoint = entryPoint || data.main || 'index.js';
- // make sure we don't get scripts when looking for sass
- if (((_a = options.mainFields) === null || _a === void 0 ? void 0 : _a[0]) === 'sass' &&
- !((_b = options.extensions) === null || _b === void 0 ? void 0 : _b.includes(path__default.extname(entryPoint)))) {
- entryPoint = '';
- options.skipPackageJson = true;
- }
- // resolve object browser field in package.json
- const { browser: browserField } = data;
- if (targetWeb && isObject$3(browserField)) {
- entryPoint = mapWithBrowserField(entryPoint, browserField) || entryPoint;
- }
- entryPoint = path__default.join(dir, entryPoint);
- const resolvedEntryPoint = tryFsResolve(entryPoint, options, preserveSymlinks);
- if (resolvedEntryPoint) {
- isDebug$5 &&
- debug$d(`[package entry] ${source.cyan(id)} -> ${source.dim(resolvedEntryPoint)}`);
- setResolvedCache('.', resolvedEntryPoint, targetWeb);
- return resolvedEntryPoint;
- }
- else {
- packageEntryFailure(id);
- }
- }
- catch (e) {
- packageEntryFailure(id, e.message);
- }
-}
-function packageEntryFailure(id, details) {
- throw new Error(`Failed to resolve entry for package "${id}". ` +
- `The package may have incorrect main/module/exports specified in its package.json` +
- (details ? ': ' + details : '.'));
-}
-function resolveExports(pkg, key, options, targetWeb) {
- const conditions = [options.isProduction ? 'production' : 'development'];
- if (!options.isRequire) {
- conditions.push('module');
- }
- if (options.conditions) {
- conditions.push(...options.conditions);
- }
- return resolve$1(pkg, key, {
- browser: targetWeb,
- require: options.isRequire,
- conditions
- });
-}
-function resolveDeepImport(id, { webResolvedImports, setResolvedCache, getResolvedCache, dir, data }, options, targetWeb, preserveSymlinks) {
- const cache = getResolvedCache(id, targetWeb);
- if (cache) {
- return cache;
- }
- let relativeId = id;
- const { exports: exportsField, browser: browserField } = data;
- // map relative based on exports data
- if (exportsField) {
- if (isObject$3(exportsField) && !Array.isArray(exportsField)) {
- relativeId = resolveExports(data, relativeId, options, targetWeb);
- }
- else {
- // not exposed
- relativeId = undefined;
- }
- if (!relativeId) {
- throw new Error(`Package subpath '${relativeId}' is not defined by "exports" in ` +
- `${path__default.join(dir, 'package.json')}.`);
- }
- }
- else if (targetWeb && isObject$3(browserField)) {
- const mapped = mapWithBrowserField(relativeId, browserField);
- if (mapped) {
- relativeId = mapped;
- }
- else if (mapped === false) {
- return (webResolvedImports[id] = browserExternalId);
- }
- }
- if (relativeId) {
- const resolved = tryFsResolve(path__default.join(dir, relativeId), options, preserveSymlinks, !exportsField, // try index only if no exports field
- targetWeb);
- if (resolved) {
- isDebug$5 &&
- debug$d(`[node/deep-import] ${source.cyan(id)} -> ${source.dim(resolved)}`);
- setResolvedCache(id, resolved, targetWeb);
- return resolved;
- }
- }
-}
-function tryResolveBrowserMapping(id, importer, options, isFilePath, preserveSymlinks) {
- let res;
- const pkg = importer && idToPkgMap.get(importer);
- if (pkg && isObject$3(pkg.data.browser)) {
- const mapId = isFilePath ? './' + slash$3(path__default.relative(pkg.dir, id)) : id;
- const browserMappedPath = mapWithBrowserField(mapId, pkg.data.browser);
- if (browserMappedPath) {
- const fsPath = path__default.join(pkg.dir, browserMappedPath);
- if ((res = tryFsResolve(fsPath, options, preserveSymlinks))) {
- isDebug$5 &&
- debug$d(`[browser mapped] ${source.cyan(id)} -> ${source.dim(res)}`);
- idToPkgMap.set(res, pkg);
- return {
- id: res,
- moduleSideEffects: pkg.hasSideEffects(res)
- };
- }
- }
- else if (browserMappedPath === false) {
- return browserExternalId;
- }
- }
-}
-/**
- * given a relative path in pkg dir,
- * return a relative path in pkg dir,
- * mapped with the "map" object
- *
- * - Returning `undefined` means there is no browser mapping for this id
- * - Returning `false` means this id is explicitly externalized for browser
- */
-function mapWithBrowserField(relativePathInPkgDir, map) {
- const normalizedPath = path__default.posix.normalize(relativePathInPkgDir);
- for (const key in map) {
- const normalizedKey = path__default.posix.normalize(key);
- if (normalizedPath === normalizedKey ||
- equalWithoutSuffix(normalizedPath, normalizedKey, '.js') ||
- equalWithoutSuffix(normalizedPath, normalizedKey, '/index.js')) {
- return map[key];
- }
- }
-}
-function equalWithoutSuffix(path, key, suffix) {
- return key.endsWith(suffix) && key.slice(0, -suffix.length) === path;
-}
-function getRealPath(resolved, preserveSymlinks) {
- resolved = ensureVolumeInPath(resolved);
- if (!preserveSymlinks && browserExternalId !== resolved) {
- resolved = fs__default.realpathSync(resolved);
- }
- return normalizePath$4(resolved);
-}
-
-const debug$c = createDebugger('vite:ssr-external');
-/**
- * Heuristics for determining whether a dependency should be externalized for
- * server-side rendering.
- */
-function resolveSSRExternal(config, knownImports, ssrExternals = new Set(), seen = new Set()) {
- var _a, _b, _c, _d;
- if (((_a = config.ssr) === null || _a === void 0 ? void 0 : _a.noExternal) === true) {
- return [];
- }
- const { root } = config;
- const pkgContent = lookupFile(root, ['package.json']);
- if (!pkgContent) {
- return [];
- }
- const pkg = JSON.parse(pkgContent);
- const importedDeps = knownImports.map(getNpmPackageName).filter(isDefined);
- const deps = unique([
- ...importedDeps,
- ...Object.keys(pkg.devDependencies || {}),
- ...Object.keys(pkg.dependencies || {})
- ]);
- const resolveOptions = {
- root,
- isProduction: false,
- isBuild: true
- };
- const depsToTrace = new Set();
- for (const id of deps) {
- if (seen.has(id)) {
- continue;
- }
- seen.add(id);
- let entry;
- let requireEntry;
- try {
- entry = (_b = tryNodeResolve(id, undefined, resolveOptions, true, undefined, true)) === null || _b === void 0 ? void 0 : _b.id;
- // normalizePath required for windows. tryNodeResolve uses normalizePath
- // which returns with '/', require.resolve returns with '\\'
- requireEntry = normalizePath$4(require.resolve(id, { paths: [root] }));
- }
- catch (e) {
- // resolve failed, assume include
- debug$c(`Failed to resolve entries for package "${id}"\n`, e);
- continue;
- }
- if (!entry) {
- // no esm entry but has require entry (is this even possible?)
- ssrExternals.add(id);
- continue;
- }
- if (!entry.includes('node_modules')) {
- // entry is not a node dep, possibly linked - don't externalize
- // instead, trace its dependencies.
- depsToTrace.add(id);
- continue;
- }
- if (entry !== requireEntry) {
- // has separate esm/require entry, assume require entry is cjs
- ssrExternals.add(id);
- }
- else {
- // node resolve and esm resolve resolves to the same file.
- if (!/\.m?js$/.test(entry)) {
- // entry is not js, cannot externalize
- continue;
- }
- if (pkg.type === "module" || entry.endsWith('.mjs')) {
- ssrExternals.add(id);
- continue;
- }
- // check if the entry is cjs
- const content = fs__default.readFileSync(entry, 'utf-8');
- if (/\bmodule\.exports\b|\bexports[.\[]|\brequire\s*\(/.test(content)) {
- ssrExternals.add(id);
- }
- }
- }
- for (const id of depsToTrace) {
- const depRoot = path__default.dirname(resolveFrom$3(`${id}/package.json`, root, !!config.resolve.preserveSymlinks));
- resolveSSRExternal({
- ...config,
- root: depRoot
- }, knownImports, ssrExternals, seen);
- }
- if ((_c = config.ssr) === null || _c === void 0 ? void 0 : _c.external) {
- config.ssr.external.forEach((id) => ssrExternals.add(id));
- }
- let externals = [...ssrExternals];
- if ((_d = config.ssr) === null || _d === void 0 ? void 0 : _d.noExternal) {
- const filter = createFilter$1(undefined, config.ssr.noExternal, {
- resolve: false
- });
- externals = externals.filter((id) => filter(id));
- }
- return externals.filter((id) => id !== 'vite');
-}
-function shouldExternalizeForSSR(id, externals) {
- const should = externals.some((e) => {
- if (id === e) {
- return true;
- }
- // deep imports, check ext before externalizing - only externalize
- // extension-less imports and explicit .js imports
- if (id.startsWith(e + '/') && (!path__default.extname(id) || id.endsWith('.js'))) {
- return true;
- }
- });
- return should;
-}
-function getNpmPackageName(importPath) {
- const parts = importPath.split('/');
- if (parts[0].startsWith('@')) {
- if (!parts[1])
- return null;
- return `${parts[0]}/${parts[1]}`;
- }
- else {
- return parts[0];
- }
-}
-
-function ssrManifestPlugin(config) {
- // module id => preload assets mapping
- const ssrManifest = {};
- const base = config.base;
- return {
- name: 'vite:ssr-manifest',
- generateBundle(_options, bundle) {
- for (const file in bundle) {
- const chunk = bundle[file];
- if (chunk.type === 'chunk') {
- // links for certain entry chunks are already generated in static HTML
- // in those cases we only need to record info for non-entry chunks
- const cssFiles = chunk.isEntry
- ? null
- : chunkToEmittedCssFileMap.get(chunk);
- const assetFiles = chunkToEmittedAssetsMap.get(chunk);
- for (const id in chunk.modules) {
- const normalizedId = normalizePath$3(path$t.relative(config.root, id));
- const mappedChunks = ssrManifest[normalizedId] || (ssrManifest[normalizedId] = []);
- if (!chunk.isEntry) {
- mappedChunks.push(base + chunk.fileName);
- }
- if (cssFiles) {
- cssFiles.forEach((file) => {
- mappedChunks.push(base + file);
- });
- }
- if (assetFiles) {
- assetFiles.forEach((file) => {
- mappedChunks.push(base + file);
- });
- }
- }
- }
- }
- this.emitFile({
- fileName: 'ssr-manifest.json',
- type: 'asset',
- source: JSON.stringify(ssrManifest, null, 2)
- });
- }
- };
-}
-
-// Reserved word lists for various dialects of the language
-
-var reservedWords = {
- 3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",
- 5: "class enum extends super const export import",
- 6: "enum",
- strict: "implements interface let package private protected public static yield",
- strictBind: "eval arguments"
-};
-
-// And the keywords
-
-var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";
-
-var keywords = {
- 5: ecma5AndLessKeywords,
- "5module": ecma5AndLessKeywords + " export import",
- 6: ecma5AndLessKeywords + " const class extends export import super"
-};
-
-var keywordRelationalOperator = /^in(stanceof)?$/;
-
-// ## Character categories
-
-// Big ugly regular expressions that match characters in the
-// whitespace, identifier, and identifier-start categories. These
-// are only applied when a character is found to actually have a
-// code point above 128.
-// Generated by `bin/generate-identifier-regex.js`.
-var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
-var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
-
-var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
-var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
-
-nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
-
-// These are a run-length and offset encoded representation of the
-// >0xffff code points that are a valid part of identifiers. The
-// offset starts at 0x10000, and each pair of numbers represents an
-// offset to the next range, and then a size of the range. They were
-// generated by bin/generate-identifier-regex.js
-
-// eslint-disable-next-line comma-spacing
-var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938];
-
-// eslint-disable-next-line comma-spacing
-var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239];
-
-// This has a complexity linear to the value of the code. The
-// assumption is that looking up astral identifier characters is
-// rare.
-function isInAstralSet(code, set) {
- var pos = 0x10000;
- for (var i = 0; i < set.length; i += 2) {
- pos += set[i];
- if (pos > code) { return false }
- pos += set[i + 1];
- if (pos >= code) { return true }
- }
-}
-
-// Test whether a given character code starts an identifier.
-
-function isIdentifierStart(code, astral) {
- if (code < 65) { return code === 36 }
- if (code < 91) { return true }
- if (code < 97) { return code === 95 }
- if (code < 123) { return true }
- if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }
- if (astral === false) { return false }
- return isInAstralSet(code, astralIdentifierStartCodes)
-}
-
-// Test whether a given character is part of an identifier.
-
-function isIdentifierChar(code, astral) {
- if (code < 48) { return code === 36 }
- if (code < 58) { return true }
- if (code < 65) { return false }
- if (code < 91) { return true }
- if (code < 97) { return code === 95 }
- if (code < 123) { return true }
- if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }
- if (astral === false) { return false }
- return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)
-}
-
-// ## Token types
-
-// The assignment of fine-grained, information-carrying type objects
-// allows the tokenizer to store the information it has about a
-// token in a way that is very cheap for the parser to look up.
-
-// All token type variables start with an underscore, to make them
-// easy to recognize.
-
-// The `beforeExpr` property is used to disambiguate between regular
-// expressions and divisions. It is set on all token types that can
-// be followed by an expression (thus, a slash after them would be a
-// regular expression).
-//
-// The `startsExpr` property is used to check if the token ends a
-// `yield` expression. It is set on all token types that either can
-// directly start an expression (like a quotation mark) or can
-// continue an expression (like the body of a string).
-//
-// `isLoop` marks a keyword as starting a loop, which is important
-// to know when parsing a label, in order to allow or disallow
-// continue jumps to that label.
-
-var TokenType = function TokenType(label, conf) {
- if ( conf === void 0 ) conf = {};
-
- this.label = label;
- this.keyword = conf.keyword;
- this.beforeExpr = !!conf.beforeExpr;
- this.startsExpr = !!conf.startsExpr;
- this.isLoop = !!conf.isLoop;
- this.isAssign = !!conf.isAssign;
- this.prefix = !!conf.prefix;
- this.postfix = !!conf.postfix;
- this.binop = conf.binop || null;
- this.updateContext = null;
-};
-
-function binop(name, prec) {
- return new TokenType(name, {beforeExpr: true, binop: prec})
-}
-var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};
-
-// Map keyword names to token types.
-
-var keywords$1 = {};
-
-// Succinct definitions of keyword token types
-function kw(name, options) {
- if ( options === void 0 ) options = {};
-
- options.keyword = name;
- return keywords$1[name] = new TokenType(name, options)
-}
-
-var types = {
- num: new TokenType("num", startsExpr),
- regexp: new TokenType("regexp", startsExpr),
- string: new TokenType("string", startsExpr),
- name: new TokenType("name", startsExpr),
- privateId: new TokenType("privateId", startsExpr),
- eof: new TokenType("eof"),
-
- // Punctuation token types.
- bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}),
- bracketR: new TokenType("]"),
- braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}),
- braceR: new TokenType("}"),
- parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}),
- parenR: new TokenType(")"),
- comma: new TokenType(",", beforeExpr),
- semi: new TokenType(";", beforeExpr),
- colon: new TokenType(":", beforeExpr),
- dot: new TokenType("."),
- question: new TokenType("?", beforeExpr),
- questionDot: new TokenType("?."),
- arrow: new TokenType("=>", beforeExpr),
- template: new TokenType("template"),
- invalidTemplate: new TokenType("invalidTemplate"),
- ellipsis: new TokenType("...", beforeExpr),
- backQuote: new TokenType("`", startsExpr),
- dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}),
-
- // Operators. These carry several kinds of properties to help the
- // parser use them properly (the presence of these properties is
- // what categorizes them as operators).
- //
- // `binop`, when present, specifies that this operator is a binary
- // operator, and will refer to its precedence.
- //
- // `prefix` and `postfix` mark the operator as a prefix or postfix
- // unary operator.
- //
- // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as
- // binary operators with a very low precedence, that should result
- // in AssignmentExpression nodes.
-
- eq: new TokenType("=", {beforeExpr: true, isAssign: true}),
- assign: new TokenType("_=", {beforeExpr: true, isAssign: true}),
- incDec: new TokenType("++/--", {prefix: true, postfix: true, startsExpr: true}),
- prefix: new TokenType("!/~", {beforeExpr: true, prefix: true, startsExpr: true}),
- logicalOR: binop("||", 1),
- logicalAND: binop("&&", 2),
- bitwiseOR: binop("|", 3),
- bitwiseXOR: binop("^", 4),
- bitwiseAND: binop("&", 5),
- equality: binop("==/!=/===/!==", 6),
- relational: binop("</>/<=/>=", 7),
- bitShift: binop("<</>>/>>>", 8),
- plusMin: new TokenType("+/-", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),
- modulo: binop("%", 10),
- star: binop("*", 10),
- slash: binop("/", 10),
- starstar: new TokenType("**", {beforeExpr: true}),
- coalesce: binop("??", 1),
-
- // Keyword token types.
- _break: kw("break"),
- _case: kw("case", beforeExpr),
- _catch: kw("catch"),
- _continue: kw("continue"),
- _debugger: kw("debugger"),
- _default: kw("default", beforeExpr),
- _do: kw("do", {isLoop: true, beforeExpr: true}),
- _else: kw("else", beforeExpr),
- _finally: kw("finally"),
- _for: kw("for", {isLoop: true}),
- _function: kw("function", startsExpr),
- _if: kw("if"),
- _return: kw("return", beforeExpr),
- _switch: kw("switch"),
- _throw: kw("throw", beforeExpr),
- _try: kw("try"),
- _var: kw("var"),
- _const: kw("const"),
- _while: kw("while", {isLoop: true}),
- _with: kw("with"),
- _new: kw("new", {beforeExpr: true, startsExpr: true}),
- _this: kw("this", startsExpr),
- _super: kw("super", startsExpr),
- _class: kw("class", startsExpr),
- _extends: kw("extends", beforeExpr),
- _export: kw("export"),
- _import: kw("import", startsExpr),
- _null: kw("null", startsExpr),
- _true: kw("true", startsExpr),
- _false: kw("false", startsExpr),
- _in: kw("in", {beforeExpr: true, binop: 7}),
- _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}),
- _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}),
- _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}),
- _delete: kw("delete", {beforeExpr: true, prefix: true, startsExpr: true})
-};
-
-// Matches a whole line break (where CRLF is considered a single
-// line break). Used to count lines.
-
-var lineBreak = /\r\n?|\n|\u2028|\u2029/;
-var lineBreakG = new RegExp(lineBreak.source, "g");
-
-function isNewLine(code) {
- return code === 10 || code === 13 || code === 0x2028 || code === 0x2029
-}
-
-var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;
-
-var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
-
-var ref = Object.prototype;
-var hasOwnProperty$1 = ref.hasOwnProperty;
-var toString$1 = ref.toString;
-
-// Checks if an object has a property.
-
-function has$1(obj, propName) {
- return hasOwnProperty$1.call(obj, propName)
-}
-
-var isArray = Array.isArray || (function (obj) { return (
- toString$1.call(obj) === "[object Array]"
-); });
-
-function wordsRegexp(words) {
- return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$")
-}
-
-// These are used when `options.locations` is on, for the
-// `startLoc` and `endLoc` properties.
-
-var Position = function Position(line, col) {
- this.line = line;
- this.column = col;
-};
-
-Position.prototype.offset = function offset (n) {
- return new Position(this.line, this.column + n)
-};
-
-var SourceLocation = function SourceLocation(p, start, end) {
- this.start = start;
- this.end = end;
- if (p.sourceFile !== null) { this.source = p.sourceFile; }
-};
-
-// The `getLineInfo` function is mostly useful when the
-// `locations` option is off (for performance reasons) and you
-// want to find the line/column position for a given character
-// offset. `input` should be the code string that the offset refers
-// into.
-
-function getLineInfo(input, offset) {
- for (var line = 1, cur = 0;;) {
- lineBreakG.lastIndex = cur;
- var match = lineBreakG.exec(input);
- if (match && match.index < offset) {
- ++line;
- cur = match.index + match[0].length;
- } else {
- return new Position(line, offset - cur)
- }
- }
-}
-
-// A second argument must be given to configure the parser process.
-// These options are recognized (only `ecmaVersion` is required):
-
-var defaultOptions = {
- // `ecmaVersion` indicates the ECMAScript version to parse. Must be
- // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10
- // (2019), 11 (2020), 12 (2021), 13 (2022), or `"latest"` (the
- // latest version the library supports). This influences support
- // for strict mode, the set of reserved words, and support for
- // new syntax features.
- ecmaVersion: null,
- // `sourceType` indicates the mode the code should be parsed in.
- // Can be either `"script"` or `"module"`. This influences global
- // strict mode and parsing of `import` and `export` declarations.
- sourceType: "script",
- // `onInsertedSemicolon` can be a callback that will be called
- // when a semicolon is automatically inserted. It will be passed
- // the position of the comma as an offset, and if `locations` is
- // enabled, it is given the location as a `{line, column}` object
- // as second argument.
- onInsertedSemicolon: null,
- // `onTrailingComma` is similar to `onInsertedSemicolon`, but for
- // trailing commas.
- onTrailingComma: null,
- // By default, reserved words are only enforced if ecmaVersion >= 5.
- // Set `allowReserved` to a boolean value to explicitly turn this on
- // an off. When this option has the value "never", reserved words
- // and keywords can also not be used as property names.
- allowReserved: null,
- // When enabled, a return at the top level is not considered an
- // error.
- allowReturnOutsideFunction: false,
- // When enabled, import/export statements are not constrained to
- // appearing at the top of the program, and an import.meta expression
- // in a script isn't considered an error.
- allowImportExportEverywhere: false,
- // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.
- // When enabled, await identifiers are allowed to appear at the top-level scope,
- // but they are still not allowed in non-async functions.
- allowAwaitOutsideFunction: null,
- // When enabled, super identifiers are not constrained to
- // appearing in methods and do not raise an error when they appear elsewhere.
- allowSuperOutsideMethod: null,
- // When enabled, hashbang directive in the beginning of file
- // is allowed and treated as a line comment.
- allowHashBang: false,
- // When `locations` is on, `loc` properties holding objects with
- // `start` and `end` properties in `{line, column}` form (with
- // line being 1-based and column 0-based) will be attached to the
- // nodes.
- locations: false,
- // A function can be passed as `onToken` option, which will
- // cause Acorn to call that function with object in the same
- // format as tokens returned from `tokenizer().getToken()`. Note
- // that you are not allowed to call the parser from the
- // callback—that will corrupt its internal state.
- onToken: null,
- // A function can be passed as `onComment` option, which will
- // cause Acorn to call that function with `(block, text, start,
- // end)` parameters whenever a comment is skipped. `block` is a
- // boolean indicating whether this is a block (`/* */`) comment,
- // `text` is the content of the comment, and `start` and `end` are
- // character offsets that denote the start and end of the comment.
- // When the `locations` option is on, two more parameters are
- // passed, the full `{line, column}` locations of the start and
- // end of the comments. Note that you are not allowed to call the
- // parser from the callback—that will corrupt its internal state.
- onComment: null,
- // Nodes have their start and end characters offsets recorded in
- // `start` and `end` properties (directly on the node, rather than
- // the `loc` object, which holds line/column data. To also add a
- // [semi-standardized][range] `range` property holding a `[start,
- // end]` array with the same numbers, set the `ranges` option to
- // `true`.
- //
- // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
- ranges: false,
- // It is possible to parse multiple files into a single AST by
- // passing the tree produced by parsing the first file as
- // `program` option in subsequent parses. This will add the
- // toplevel forms of the parsed file to the `Program` (top) node
- // of an existing parse tree.
- program: null,
- // When `locations` is on, you can pass this to record the source
- // file in every node's `loc` object.
- sourceFile: null,
- // This value, if given, is stored in every node, whether
- // `locations` is on or off.
- directSourceFile: null,
- // When enabled, parenthesized expressions are represented by
- // (non-standard) ParenthesizedExpression nodes
- preserveParens: false
-};
-
-// Interpret and default an options object
-
-var warnedAboutEcmaVersion = false;
-
-function getOptions(opts) {
- var options = {};
-
- for (var opt in defaultOptions)
- { options[opt] = opts && has$1(opts, opt) ? opts[opt] : defaultOptions[opt]; }
-
- if (options.ecmaVersion === "latest") {
- options.ecmaVersion = 1e8;
- } else if (options.ecmaVersion == null) {
- if (!warnedAboutEcmaVersion && typeof console === "object" && console.warn) {
- warnedAboutEcmaVersion = true;
- console.warn("Since Acorn 8.0.0, options.ecmaVersion is required.\nDefaulting to 2020, but this will stop working in the future.");
- }
- options.ecmaVersion = 11;
- } else if (options.ecmaVersion >= 2015) {
- options.ecmaVersion -= 2009;
- }
-
- if (options.allowReserved == null)
- { options.allowReserved = options.ecmaVersion < 5; }
-
- if (isArray(options.onToken)) {
- var tokens = options.onToken;
- options.onToken = function (token) { return tokens.push(token); };
- }
- if (isArray(options.onComment))
- { options.onComment = pushComment(options, options.onComment); }
-
- return options
-}
-
-function pushComment(options, array) {
- return function(block, text, start, end, startLoc, endLoc) {
- var comment = {
- type: block ? "Block" : "Line",
- value: text,
- start: start,
- end: end
- };
- if (options.locations)
- { comment.loc = new SourceLocation(this, startLoc, endLoc); }
- if (options.ranges)
- { comment.range = [start, end]; }
- array.push(comment);
- }
-}
-
-// Each scope gets a bitset that may contain these flags
-var
- SCOPE_TOP = 1,
- SCOPE_FUNCTION = 2,
- SCOPE_ASYNC = 4,
- SCOPE_GENERATOR = 8,
- SCOPE_ARROW = 16,
- SCOPE_SIMPLE_CATCH = 32,
- SCOPE_SUPER = 64,
- SCOPE_DIRECT_SUPER = 128,
- SCOPE_CLASS_STATIC_BLOCK = 256,
- SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;
-
-function functionFlags(async, generator) {
- return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)
-}
-
-// Used in checkLVal* and declareName to determine the type of a binding
-var
- BIND_NONE = 0, // Not a binding
- BIND_VAR = 1, // Var-style binding
- BIND_LEXICAL = 2, // Let- or const-style binding
- BIND_FUNCTION = 3, // Function declaration
- BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding
- BIND_OUTSIDE = 5; // Special case for function names as bound inside the function
-
-var Parser = function Parser(options, input, startPos) {
- this.options = options = getOptions(options);
- this.sourceFile = options.sourceFile;
- this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]);
- var reserved = "";
- if (options.allowReserved !== true) {
- reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];
- if (options.sourceType === "module") { reserved += " await"; }
- }
- this.reservedWords = wordsRegexp(reserved);
- var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict;
- this.reservedWordsStrict = wordsRegexp(reservedStrict);
- this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind);
- this.input = String(input);
-
- // Used to signal to callers of `readWord1` whether the word
- // contained any escape sequences. This is needed because words with
- // escape sequences must not be interpreted as keywords.
- this.containsEsc = false;
-
- // Set up token state
-
- // The current position of the tokenizer in the input.
- if (startPos) {
- this.pos = startPos;
- this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1;
- this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;
- } else {
- this.pos = this.lineStart = 0;
- this.curLine = 1;
- }
-
- // Properties of the current token:
- // Its type
- this.type = types.eof;
- // For tokens that include more information than their type, the value
- this.value = null;
- // Its start and end offset
- this.start = this.end = this.pos;
- // And, if locations are used, the {line, column} object
- // corresponding to those offsets
- this.startLoc = this.endLoc = this.curPosition();
-
- // Position information for the previous token
- this.lastTokEndLoc = this.lastTokStartLoc = null;
- this.lastTokStart = this.lastTokEnd = this.pos;
-
- // The context stack is used to superficially track syntactic
- // context to predict whether a regular expression is allowed in a
- // given position.
- this.context = this.initialContext();
- this.exprAllowed = true;
-
- // Figure out if it's a module code.
- this.inModule = options.sourceType === "module";
- this.strict = this.inModule || this.strictDirective(this.pos);
-
- // Used to signify the start of a potential arrow function
- this.potentialArrowAt = -1;
- this.potentialArrowInForAwait = false;
-
- // Positions to delayed-check that yield/await does not exist in default parameters.
- this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;
- // Labels in scope.
- this.labels = [];
- // Thus-far undefined exports.
- this.undefinedExports = Object.create(null);
-
- // If enabled, skip leading hashbang line.
- if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!")
- { this.skipLineComment(2); }
-
- // Scope tracking for duplicate variable names (see scope.js)
- this.scopeStack = [];
- this.enterScope(SCOPE_TOP);
-
- // For RegExp validation
- this.regexpState = null;
-
- // The stack of private names.
- // Each element has two properties: 'declared' and 'used'.
- // When it exited from the outermost class definition, all used private names must be declared.
- this.privateNameStack = [];
-};
-
-var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };
-
-Parser.prototype.parse = function parse () {
- var node = this.options.program || this.startNode();
- this.nextToken();
- return this.parseTopLevel(node)
-};
-
-prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };
-prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };
-prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };
-prototypeAccessors.canAwait.get = function () {
- for (var i = this.scopeStack.length - 1; i >= 0; i--) {
- var scope = this.scopeStack[i];
- if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }
- if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }
- }
- return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction
-};
-prototypeAccessors.allowSuper.get = function () {
- var ref = this.currentThisScope();
- var flags = ref.flags;
- var inClassFieldInit = ref.inClassFieldInit;
- return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod
-};
-prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };
-prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };
-prototypeAccessors.allowNewDotTarget.get = function () {
- var ref = this.currentThisScope();
- var flags = ref.flags;
- var inClassFieldInit = ref.inClassFieldInit;
- return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit
-};
-prototypeAccessors.inClassStaticBlock.get = function () {
- return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0
-};
-
-Parser.extend = function extend () {
- var plugins = [], len = arguments.length;
- while ( len-- ) plugins[ len ] = arguments[ len ];
-
- var cls = this;
- for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }
- return cls
-};
-
-Parser.parse = function parse (input, options) {
- return new this(options, input).parse()
-};
-
-Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {
- var parser = new this(options, input, pos);
- parser.nextToken();
- return parser.parseExpression()
-};
-
-Parser.tokenizer = function tokenizer (input, options) {
- return new this(options, input)
-};
-
-Object.defineProperties( Parser.prototype, prototypeAccessors );
-
-var pp = Parser.prototype;
-
-// ## Parser utilities
-
-var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/;
-pp.strictDirective = function(start) {
- for (;;) {
- // Try to find string literal.
- skipWhiteSpace.lastIndex = start;
- start += skipWhiteSpace.exec(this.input)[0].length;
- var match = literal.exec(this.input.slice(start));
- if (!match) { return false }
- if ((match[1] || match[2]) === "use strict") {
- skipWhiteSpace.lastIndex = start + match[0].length;
- var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;
- var next = this.input.charAt(end);
- return next === ";" || next === "}" ||
- (lineBreak.test(spaceAfter[0]) &&
- !(/[(`.[+\-/*%<>=,?^&]/.test(next) || next === "!" && this.input.charAt(end + 1) === "="))
- }
- start += match[0].length;
-
- // Skip semicolon, if any.
- skipWhiteSpace.lastIndex = start;
- start += skipWhiteSpace.exec(this.input)[0].length;
- if (this.input[start] === ";")
- { start++; }
- }
-};
-
-// Predicate that tests whether the next token is of the given
-// type, and if yes, consumes it as a side effect.
-
-pp.eat = function(type) {
- if (this.type === type) {
- this.next();
- return true
- } else {
- return false
- }
-};
-
-// Tests whether parsed token is a contextual keyword.
-
-pp.isContextual = function(name) {
- return this.type === types.name && this.value === name && !this.containsEsc
-};
-
-// Consumes contextual keyword if possible.
-
-pp.eatContextual = function(name) {
- if (!this.isContextual(name)) { return false }
- this.next();
- return true
-};
-
-// Asserts that following token is given contextual keyword.
-
-pp.expectContextual = function(name) {
- if (!this.eatContextual(name)) { this.unexpected(); }
-};
-
-// Test whether a semicolon can be inserted at the current position.
-
-pp.canInsertSemicolon = function() {
- return this.type === types.eof ||
- this.type === types.braceR ||
- lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
-};
-
-pp.insertSemicolon = function() {
- if (this.canInsertSemicolon()) {
- if (this.options.onInsertedSemicolon)
- { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }
- return true
- }
-};
-
-// Consume a semicolon, or, failing that, see if we are allowed to
-// pretend that there is a semicolon at this position.
-
-pp.semicolon = function() {
- if (!this.eat(types.semi) && !this.insertSemicolon()) { this.unexpected(); }
-};
-
-pp.afterTrailingComma = function(tokType, notNext) {
- if (this.type === tokType) {
- if (this.options.onTrailingComma)
- { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }
- if (!notNext)
- { this.next(); }
- return true
- }
-};
-
-// Expect a token of a given type. If found, consume it, otherwise,
-// raise an unexpected token error.
-
-pp.expect = function(type) {
- this.eat(type) || this.unexpected();
-};
-
-// Raise an unexpected token error.
-
-pp.unexpected = function(pos) {
- this.raise(pos != null ? pos : this.start, "Unexpected token");
-};
-
-function DestructuringErrors() {
- this.shorthandAssign =
- this.trailingComma =
- this.parenthesizedAssign =
- this.parenthesizedBind =
- this.doubleProto =
- -1;
-}
-
-pp.checkPatternErrors = function(refDestructuringErrors, isAssign) {
- if (!refDestructuringErrors) { return }
- if (refDestructuringErrors.trailingComma > -1)
- { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); }
- var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;
- if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); }
-};
-
-pp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {
- if (!refDestructuringErrors) { return false }
- var shorthandAssign = refDestructuringErrors.shorthandAssign;
- var doubleProto = refDestructuringErrors.doubleProto;
- if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }
- if (shorthandAssign >= 0)
- { this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); }
- if (doubleProto >= 0)
- { this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); }
-};
-
-pp.checkYieldAwaitInDefaultParams = function() {
- if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))
- { this.raise(this.yieldPos, "Yield expression cannot be a default value"); }
- if (this.awaitPos)
- { this.raise(this.awaitPos, "Await expression cannot be a default value"); }
-};
-
-pp.isSimpleAssignTarget = function(expr) {
- if (expr.type === "ParenthesizedExpression")
- { return this.isSimpleAssignTarget(expr.expression) }
- return expr.type === "Identifier" || expr.type === "MemberExpression"
-};
-
-var pp$1 = Parser.prototype;
-
-// ### Statement parsing
-
-// Parse a program. Initializes the parser, reads any number of
-// statements, and wraps them in a Program node. Optionally takes a
-// `program` argument. If present, the statements will be appended
-// to its body instead of creating a new node.
-
-pp$1.parseTopLevel = function(node) {
- var exports = Object.create(null);
- if (!node.body) { node.body = []; }
- while (this.type !== types.eof) {
- var stmt = this.parseStatement(null, true, exports);
- node.body.push(stmt);
- }
- if (this.inModule)
- { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)
- {
- var name = list[i];
-
- this.raiseRecoverable(this.undefinedExports[name].start, ("Export '" + name + "' is not defined"));
- } }
- this.adaptDirectivePrologue(node.body);
- this.next();
- node.sourceType = this.options.sourceType;
- return this.finishNode(node, "Program")
-};
-
-var loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"};
-
-pp$1.isLet = function(context) {
- if (this.options.ecmaVersion < 6 || !this.isContextual("let")) { return false }
- skipWhiteSpace.lastIndex = this.pos;
- var skip = skipWhiteSpace.exec(this.input);
- var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
- // For ambiguous cases, determine if a LexicalDeclaration (or only a
- // Statement) is allowed here. If context is not empty then only a Statement
- // is allowed. However, `let [` is an explicit negative lookahead for
- // ExpressionStatement, so special-case it first.
- if (nextCh === 91 || nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '[', '/', astral
- if (context) { return false }
-
- if (nextCh === 123) { return true } // '{'
- if (isIdentifierStart(nextCh, true)) {
- var pos = next + 1;
- while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }
- if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }
- var ident = this.input.slice(next, pos);
- if (!keywordRelationalOperator.test(ident)) { return true }
- }
- return false
-};
-
-// check 'async [no LineTerminator here] function'
-// - 'async /*foo*/ function' is OK.
-// - 'async /*\n*/ function' is invalid.
-pp$1.isAsyncFunction = function() {
- if (this.options.ecmaVersion < 8 || !this.isContextual("async"))
- { return false }
-
- skipWhiteSpace.lastIndex = this.pos;
- var skip = skipWhiteSpace.exec(this.input);
- var next = this.pos + skip[0].length, after;
- return !lineBreak.test(this.input.slice(this.pos, next)) &&
- this.input.slice(next, next + 8) === "function" &&
- (next + 8 === this.input.length ||
- !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))
-};
-
-// Parse a single statement.
-//
-// If expecting a statement and finding a slash operator, parse a
-// regular expression literal. This is to handle cases like
-// `if (foo) /blah/.exec(foo)`, where looking at the previous token
-// does not help.
-
-pp$1.parseStatement = function(context, topLevel, exports) {
- var starttype = this.type, node = this.startNode(), kind;
-
- if (this.isLet(context)) {
- starttype = types._var;
- kind = "let";
- }
-
- // Most types of statements are recognized by the keyword they
- // start with. Many are trivial to parse, some require a bit of
- // complexity.
-
- switch (starttype) {
- case types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword)
- case types._debugger: return this.parseDebuggerStatement(node)
- case types._do: return this.parseDoStatement(node)
- case types._for: return this.parseForStatement(node)
- case types._function:
- // Function as sole body of either an if statement or a labeled statement
- // works, but not when it is part of a labeled statement that is the sole
- // body of an if statement.
- if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) { this.unexpected(); }
- return this.parseFunctionStatement(node, false, !context)
- case types._class:
- if (context) { this.unexpected(); }
- return this.parseClass(node, true)
- case types._if: return this.parseIfStatement(node)
- case types._return: return this.parseReturnStatement(node)
- case types._switch: return this.parseSwitchStatement(node)
- case types._throw: return this.parseThrowStatement(node)
- case types._try: return this.parseTryStatement(node)
- case types._const: case types._var:
- kind = kind || this.value;
- if (context && kind !== "var") { this.unexpected(); }
- return this.parseVarStatement(node, kind)
- case types._while: return this.parseWhileStatement(node)
- case types._with: return this.parseWithStatement(node)
- case types.braceL: return this.parseBlock(true, node)
- case types.semi: return this.parseEmptyStatement(node)
- case types._export:
- case types._import:
- if (this.options.ecmaVersion > 10 && starttype === types._import) {
- skipWhiteSpace.lastIndex = this.pos;
- var skip = skipWhiteSpace.exec(this.input);
- var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
- if (nextCh === 40 || nextCh === 46) // '(' or '.'
- { return this.parseExpressionStatement(node, this.parseExpression()) }
- }
-
- if (!this.options.allowImportExportEverywhere) {
- if (!topLevel)
- { this.raise(this.start, "'import' and 'export' may only appear at the top level"); }
- if (!this.inModule)
- { this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); }
- }
- return starttype === types._import ? this.parseImport(node) : this.parseExport(node, exports)
-
- // If the statement does not start with a statement keyword or a
- // brace, it's an ExpressionStatement or LabeledStatement. We
- // simply start parsing an expression, and afterwards, if the
- // next token is a colon and the expression was a simple
- // Identifier node, we switch to interpreting it as a label.
- default:
- if (this.isAsyncFunction()) {
- if (context) { this.unexpected(); }
- this.next();
- return this.parseFunctionStatement(node, true, !context)
- }
-
- var maybeName = this.value, expr = this.parseExpression();
- if (starttype === types.name && expr.type === "Identifier" && this.eat(types.colon))
- { return this.parseLabeledStatement(node, maybeName, expr, context) }
- else { return this.parseExpressionStatement(node, expr) }
- }
-};
-
-pp$1.parseBreakContinueStatement = function(node, keyword) {
- var isBreak = keyword === "break";
- this.next();
- if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; }
- else if (this.type !== types.name) { this.unexpected(); }
- else {
- node.label = this.parseIdent();
- this.semicolon();
- }
-
- // Verify that there is an actual destination to break or
- // continue to.
- var i = 0;
- for (; i < this.labels.length; ++i) {
- var lab = this.labels[i];
- if (node.label == null || lab.name === node.label.name) {
- if (lab.kind != null && (isBreak || lab.kind === "loop")) { break }
- if (node.label && isBreak) { break }
- }
- }
- if (i === this.labels.length) { this.raise(node.start, "Unsyntactic " + keyword); }
- return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement")
-};
-
-pp$1.parseDebuggerStatement = function(node) {
- this.next();
- this.semicolon();
- return this.finishNode(node, "DebuggerStatement")
-};
-
-pp$1.parseDoStatement = function(node) {
- this.next();
- this.labels.push(loopLabel);
- node.body = this.parseStatement("do");
- this.labels.pop();
- this.expect(types._while);
- node.test = this.parseParenExpression();
- if (this.options.ecmaVersion >= 6)
- { this.eat(types.semi); }
- else
- { this.semicolon(); }
- return this.finishNode(node, "DoWhileStatement")
-};
-
-// Disambiguating between a `for` and a `for`/`in` or `for`/`of`
-// loop is non-trivial. Basically, we have to parse the init `var`
-// statement or expression, disallowing the `in` operator (see
-// the second parameter to `parseExpression`), and then check
-// whether the next token is `in` or `of`. When there is no init
-// part (semicolon immediately after the opening parenthesis), it
-// is a regular `for` loop.
-
-pp$1.parseForStatement = function(node) {
- this.next();
- var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual("await")) ? this.lastTokStart : -1;
- this.labels.push(loopLabel);
- this.enterScope(0);
- this.expect(types.parenL);
- if (this.type === types.semi) {
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- return this.parseFor(node, null)
- }
- var isLet = this.isLet();
- if (this.type === types._var || this.type === types._const || isLet) {
- var init$1 = this.startNode(), kind = isLet ? "let" : this.value;
- this.next();
- this.parseVar(init$1, true, kind);
- this.finishNode(init$1, "VariableDeclaration");
- if ((this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1) {
- if (this.options.ecmaVersion >= 9) {
- if (this.type === types._in) {
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- } else { node.await = awaitAt > -1; }
- }
- return this.parseForIn(node, init$1)
- }
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- return this.parseFor(node, init$1)
- }
- var startsWithLet = this.isContextual("let"), isForOf = false;
- var refDestructuringErrors = new DestructuringErrors;
- var init = this.parseExpression(awaitAt > -1 ? "await" : true, refDestructuringErrors);
- if (this.type === types._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual("of"))) {
- if (this.options.ecmaVersion >= 9) {
- if (this.type === types._in) {
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- } else { node.await = awaitAt > -1; }
- }
- if (startsWithLet && isForOf) { this.raise(init.start, "The left-hand side of a for-of loop may not start with 'let'."); }
- this.toAssignable(init, false, refDestructuringErrors);
- this.checkLValPattern(init);
- return this.parseForIn(node, init)
- } else {
- this.checkExpressionErrors(refDestructuringErrors, true);
- }
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- return this.parseFor(node, init)
-};
-
-pp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) {
- this.next();
- return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)
-};
-
-pp$1.parseIfStatement = function(node) {
- this.next();
- node.test = this.parseParenExpression();
- // allow function declarations in branches, but only in non-strict mode
- node.consequent = this.parseStatement("if");
- node.alternate = this.eat(types._else) ? this.parseStatement("if") : null;
- return this.finishNode(node, "IfStatement")
-};
-
-pp$1.parseReturnStatement = function(node) {
- if (!this.inFunction && !this.options.allowReturnOutsideFunction)
- { this.raise(this.start, "'return' outside of function"); }
- this.next();
-
- // In `return` (and `break`/`continue`), the keywords with
- // optional arguments, we eagerly look for a semicolon or the
- // possibility to insert one.
-
- if (this.eat(types.semi) || this.insertSemicolon()) { node.argument = null; }
- else { node.argument = this.parseExpression(); this.semicolon(); }
- return this.finishNode(node, "ReturnStatement")
-};
-
-pp$1.parseSwitchStatement = function(node) {
- this.next();
- node.discriminant = this.parseParenExpression();
- node.cases = [];
- this.expect(types.braceL);
- this.labels.push(switchLabel);
- this.enterScope(0);
-
- // Statements under must be grouped (by label) in SwitchCase
- // nodes. `cur` is used to keep the node that we are currently
- // adding statements to.
-
- var cur;
- for (var sawDefault = false; this.type !== types.braceR;) {
- if (this.type === types._case || this.type === types._default) {
- var isCase = this.type === types._case;
- if (cur) { this.finishNode(cur, "SwitchCase"); }
- node.cases.push(cur = this.startNode());
- cur.consequent = [];
- this.next();
- if (isCase) {
- cur.test = this.parseExpression();
- } else {
- if (sawDefault) { this.raiseRecoverable(this.lastTokStart, "Multiple default clauses"); }
- sawDefault = true;
- cur.test = null;
- }
- this.expect(types.colon);
- } else {
- if (!cur) { this.unexpected(); }
- cur.consequent.push(this.parseStatement(null));
- }
- }
- this.exitScope();
- if (cur) { this.finishNode(cur, "SwitchCase"); }
- this.next(); // Closing brace
- this.labels.pop();
- return this.finishNode(node, "SwitchStatement")
-};
-
-pp$1.parseThrowStatement = function(node) {
- this.next();
- if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))
- { this.raise(this.lastTokEnd, "Illegal newline after throw"); }
- node.argument = this.parseExpression();
- this.semicolon();
- return this.finishNode(node, "ThrowStatement")
-};
-
-// Reused empty array added for node fields that are always empty.
-
-var empty = [];
-
-pp$1.parseTryStatement = function(node) {
- this.next();
- node.block = this.parseBlock();
- node.handler = null;
- if (this.type === types._catch) {
- var clause = this.startNode();
- this.next();
- if (this.eat(types.parenL)) {
- clause.param = this.parseBindingAtom();
- var simple = clause.param.type === "Identifier";
- this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);
- this.checkLValPattern(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);
- this.expect(types.parenR);
- } else {
- if (this.options.ecmaVersion < 10) { this.unexpected(); }
- clause.param = null;
- this.enterScope(0);
- }
- clause.body = this.parseBlock(false);
- this.exitScope();
- node.handler = this.finishNode(clause, "CatchClause");
- }
- node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;
- if (!node.handler && !node.finalizer)
- { this.raise(node.start, "Missing catch or finally clause"); }
- return this.finishNode(node, "TryStatement")
-};
-
-pp$1.parseVarStatement = function(node, kind) {
- this.next();
- this.parseVar(node, false, kind);
- this.semicolon();
- return this.finishNode(node, "VariableDeclaration")
-};
-
-pp$1.parseWhileStatement = function(node) {
- this.next();
- node.test = this.parseParenExpression();
- this.labels.push(loopLabel);
- node.body = this.parseStatement("while");
- this.labels.pop();
- return this.finishNode(node, "WhileStatement")
-};
-
-pp$1.parseWithStatement = function(node) {
- if (this.strict) { this.raise(this.start, "'with' in strict mode"); }
- this.next();
- node.object = this.parseParenExpression();
- node.body = this.parseStatement("with");
- return this.finishNode(node, "WithStatement")
-};
-
-pp$1.parseEmptyStatement = function(node) {
- this.next();
- return this.finishNode(node, "EmptyStatement")
-};
-
-pp$1.parseLabeledStatement = function(node, maybeName, expr, context) {
- for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)
- {
- var label = list[i$1];
-
- if (label.name === maybeName)
- { this.raise(expr.start, "Label '" + maybeName + "' is already declared");
- } }
- var kind = this.type.isLoop ? "loop" : this.type === types._switch ? "switch" : null;
- for (var i = this.labels.length - 1; i >= 0; i--) {
- var label$1 = this.labels[i];
- if (label$1.statementStart === node.start) {
- // Update information about previous labels on this node
- label$1.statementStart = this.start;
- label$1.kind = kind;
- } else { break }
- }
- this.labels.push({name: maybeName, kind: kind, statementStart: this.start});
- node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label");
- this.labels.pop();
- node.label = expr;
- return this.finishNode(node, "LabeledStatement")
-};
-
-pp$1.parseExpressionStatement = function(node, expr) {
- node.expression = expr;
- this.semicolon();
- return this.finishNode(node, "ExpressionStatement")
-};
-
-// Parse a semicolon-enclosed block of statements, handling `"use
-// strict"` declarations when `allowStrict` is true (used for
-// function bodies).
-
-pp$1.parseBlock = function(createNewLexicalScope, node, exitStrict) {
- if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;
- if ( node === void 0 ) node = this.startNode();
-
- node.body = [];
- this.expect(types.braceL);
- if (createNewLexicalScope) { this.enterScope(0); }
- while (this.type !== types.braceR) {
- var stmt = this.parseStatement(null);
- node.body.push(stmt);
- }
- if (exitStrict) { this.strict = false; }
- this.next();
- if (createNewLexicalScope) { this.exitScope(); }
- return this.finishNode(node, "BlockStatement")
-};
-
-// Parse a regular `for` loop. The disambiguation code in
-// `parseStatement` will already have parsed the init statement or
-// expression.
-
-pp$1.parseFor = function(node, init) {
- node.init = init;
- this.expect(types.semi);
- node.test = this.type === types.semi ? null : this.parseExpression();
- this.expect(types.semi);
- node.update = this.type === types.parenR ? null : this.parseExpression();
- this.expect(types.parenR);
- node.body = this.parseStatement("for");
- this.exitScope();
- this.labels.pop();
- return this.finishNode(node, "ForStatement")
-};
-
-// Parse a `for`/`in` and `for`/`of` loop, which are almost
-// same from parser's perspective.
-
-pp$1.parseForIn = function(node, init) {
- var isForIn = this.type === types._in;
- this.next();
-
- if (
- init.type === "VariableDeclaration" &&
- init.declarations[0].init != null &&
- (
- !isForIn ||
- this.options.ecmaVersion < 8 ||
- this.strict ||
- init.kind !== "var" ||
- init.declarations[0].id.type !== "Identifier"
- )
- ) {
- this.raise(
- init.start,
- ((isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer")
- );
- }
- node.left = init;
- node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();
- this.expect(types.parenR);
- node.body = this.parseStatement("for");
- this.exitScope();
- this.labels.pop();
- return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement")
-};
-
-// Parse a list of variable declarations.
-
-pp$1.parseVar = function(node, isFor, kind) {
- node.declarations = [];
- node.kind = kind;
- for (;;) {
- var decl = this.startNode();
- this.parseVarId(decl, kind);
- if (this.eat(types.eq)) {
- decl.init = this.parseMaybeAssign(isFor);
- } else if (kind === "const" && !(this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) {
- this.unexpected();
- } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === types._in || this.isContextual("of")))) {
- this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value");
- } else {
- decl.init = null;
- }
- node.declarations.push(this.finishNode(decl, "VariableDeclarator"));
- if (!this.eat(types.comma)) { break }
- }
- return node
-};
-
-pp$1.parseVarId = function(decl, kind) {
- decl.id = this.parseBindingAtom();
- this.checkLValPattern(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false);
-};
-
-var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;
-
-// Parse a function declaration or literal (depending on the
-// `statement & FUNC_STATEMENT`).
-
-// Remove `allowExpressionBody` for 7.0.0, as it is only called with false
-pp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {
- this.initFunction(node);
- if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {
- if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT))
- { this.unexpected(); }
- node.generator = this.eat(types.star);
- }
- if (this.options.ecmaVersion >= 8)
- { node.async = !!isAsync; }
-
- if (statement & FUNC_STATEMENT) {
- node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent();
- if (node.id && !(statement & FUNC_HANGING_STATEMENT))
- // If it is a regular function declaration in sloppy mode, then it is
- // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding
- // mode depends on properties of the current scope (see
- // treatFunctionsAsVar).
- { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }
- }
-
- var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
- this.yieldPos = 0;
- this.awaitPos = 0;
- this.awaitIdentPos = 0;
- this.enterScope(functionFlags(node.async, node.generator));
-
- if (!(statement & FUNC_STATEMENT))
- { node.id = this.type === types.name ? this.parseIdent() : null; }
-
- this.parseFunctionParams(node);
- this.parseFunctionBody(node, allowExpressionBody, false, forInit);
-
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- this.awaitIdentPos = oldAwaitIdentPos;
- return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression")
-};
-
-pp$1.parseFunctionParams = function(node) {
- this.expect(types.parenL);
- node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);
- this.checkYieldAwaitInDefaultParams();
-};
-
-// Parse a class declaration or literal (depending on the
-// `isStatement` parameter).
-
-pp$1.parseClass = function(node, isStatement) {
- this.next();
-
- // ecma-262 14.6 Class Definitions
- // A class definition is always strict mode code.
- var oldStrict = this.strict;
- this.strict = true;
-
- this.parseClassId(node, isStatement);
- this.parseClassSuper(node);
- var privateNameMap = this.enterClassBody();
- var classBody = this.startNode();
- var hadConstructor = false;
- classBody.body = [];
- this.expect(types.braceL);
- while (this.type !== types.braceR) {
- var element = this.parseClassElement(node.superClass !== null);
- if (element) {
- classBody.body.push(element);
- if (element.type === "MethodDefinition" && element.kind === "constructor") {
- if (hadConstructor) { this.raise(element.start, "Duplicate constructor in the same class"); }
- hadConstructor = true;
- } else if (element.key && element.key.type === "PrivateIdentifier" && isPrivateNameConflicted(privateNameMap, element)) {
- this.raiseRecoverable(element.key.start, ("Identifier '#" + (element.key.name) + "' has already been declared"));
- }
- }
- }
- this.strict = oldStrict;
- this.next();
- node.body = this.finishNode(classBody, "ClassBody");
- this.exitClassBody();
- return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression")
-};
-
-pp$1.parseClassElement = function(constructorAllowsSuper) {
- if (this.eat(types.semi)) { return null }
-
- var ecmaVersion = this.options.ecmaVersion;
- var node = this.startNode();
- var keyName = "";
- var isGenerator = false;
- var isAsync = false;
- var kind = "method";
- var isStatic = false;
-
- if (this.eatContextual("static")) {
- // Parse static init block
- if (ecmaVersion >= 13 && this.eat(types.braceL)) {
- this.parseClassStaticBlock(node);
- return node
- }
- if (this.isClassElementNameStart() || this.type === types.star) {
- isStatic = true;
- } else {
- keyName = "static";
- }
- }
- node.static = isStatic;
- if (!keyName && ecmaVersion >= 8 && this.eatContextual("async")) {
- if ((this.isClassElementNameStart() || this.type === types.star) && !this.canInsertSemicolon()) {
- isAsync = true;
- } else {
- keyName = "async";
- }
- }
- if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types.star)) {
- isGenerator = true;
- }
- if (!keyName && !isAsync && !isGenerator) {
- var lastValue = this.value;
- if (this.eatContextual("get") || this.eatContextual("set")) {
- if (this.isClassElementNameStart()) {
- kind = lastValue;
- } else {
- keyName = lastValue;
- }
- }
- }
-
- // Parse element name
- if (keyName) {
- // 'async', 'get', 'set', or 'static' were not a keyword contextually.
- // The last token is any of those. Make it the element name.
- node.computed = false;
- node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);
- node.key.name = keyName;
- this.finishNode(node.key, "Identifier");
- } else {
- this.parseClassElementName(node);
- }
-
- // Parse element value
- if (ecmaVersion < 13 || this.type === types.parenL || kind !== "method" || isGenerator || isAsync) {
- var isConstructor = !node.static && checkKeyName(node, "constructor");
- var allowsDirectSuper = isConstructor && constructorAllowsSuper;
- // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.
- if (isConstructor && kind !== "method") { this.raise(node.key.start, "Constructor can't have get/set modifier"); }
- node.kind = isConstructor ? "constructor" : kind;
- this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);
- } else {
- this.parseClassField(node);
- }
-
- return node
-};
-
-pp$1.isClassElementNameStart = function() {
- return (
- this.type === types.name ||
- this.type === types.privateId ||
- this.type === types.num ||
- this.type === types.string ||
- this.type === types.bracketL ||
- this.type.keyword
- )
-};
-
-pp$1.parseClassElementName = function(element) {
- if (this.type === types.privateId) {
- if (this.value === "constructor") {
- this.raise(this.start, "Classes can't have an element named '#constructor'");
- }
- element.computed = false;
- element.key = this.parsePrivateIdent();
- } else {
- this.parsePropertyName(element);
- }
-};
-
-pp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {
- // Check key and flags
- var key = method.key;
- if (method.kind === "constructor") {
- if (isGenerator) { this.raise(key.start, "Constructor can't be a generator"); }
- if (isAsync) { this.raise(key.start, "Constructor can't be an async method"); }
- } else if (method.static && checkKeyName(method, "prototype")) {
- this.raise(key.start, "Classes may not have a static property named prototype");
- }
-
- // Parse value
- var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);
-
- // Check value
- if (method.kind === "get" && value.params.length !== 0)
- { this.raiseRecoverable(value.start, "getter should have no params"); }
- if (method.kind === "set" && value.params.length !== 1)
- { this.raiseRecoverable(value.start, "setter should have exactly one param"); }
- if (method.kind === "set" && value.params[0].type === "RestElement")
- { this.raiseRecoverable(value.params[0].start, "Setter cannot use rest params"); }
-
- return this.finishNode(method, "MethodDefinition")
-};
-
-pp$1.parseClassField = function(field) {
- if (checkKeyName(field, "constructor")) {
- this.raise(field.key.start, "Classes can't have a field named 'constructor'");
- } else if (field.static && checkKeyName(field, "prototype")) {
- this.raise(field.key.start, "Classes can't have a static field named 'prototype'");
- }
-
- if (this.eat(types.eq)) {
- // To raise SyntaxError if 'arguments' exists in the initializer.
- var scope = this.currentThisScope();
- var inClassFieldInit = scope.inClassFieldInit;
- scope.inClassFieldInit = true;
- field.value = this.parseMaybeAssign();
- scope.inClassFieldInit = inClassFieldInit;
- } else {
- field.value = null;
- }
- this.semicolon();
-
- return this.finishNode(field, "PropertyDefinition")
-};
-
-pp$1.parseClassStaticBlock = function(node) {
- node.body = [];
-
- var oldLabels = this.labels;
- this.labels = [];
- this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);
- while (this.type !== types.braceR) {
- var stmt = this.parseStatement(null);
- node.body.push(stmt);
- }
- this.next();
- this.exitScope();
- this.labels = oldLabels;
-
- return this.finishNode(node, "StaticBlock")
-};
-
-pp$1.parseClassId = function(node, isStatement) {
- if (this.type === types.name) {
- node.id = this.parseIdent();
- if (isStatement)
- { this.checkLValSimple(node.id, BIND_LEXICAL, false); }
- } else {
- if (isStatement === true)
- { this.unexpected(); }
- node.id = null;
- }
-};
-
-pp$1.parseClassSuper = function(node) {
- node.superClass = this.eat(types._extends) ? this.parseExprSubscripts(false) : null;
-};
-
-pp$1.enterClassBody = function() {
- var element = {declared: Object.create(null), used: []};
- this.privateNameStack.push(element);
- return element.declared
-};
-
-pp$1.exitClassBody = function() {
- var ref = this.privateNameStack.pop();
- var declared = ref.declared;
- var used = ref.used;
- var len = this.privateNameStack.length;
- var parent = len === 0 ? null : this.privateNameStack[len - 1];
- for (var i = 0; i < used.length; ++i) {
- var id = used[i];
- if (!has$1(declared, id.name)) {
- if (parent) {
- parent.used.push(id);
- } else {
- this.raiseRecoverable(id.start, ("Private field '#" + (id.name) + "' must be declared in an enclosing class"));
- }
- }
- }
-};
-
-function isPrivateNameConflicted(privateNameMap, element) {
- var name = element.key.name;
- var curr = privateNameMap[name];
-
- var next = "true";
- if (element.type === "MethodDefinition" && (element.kind === "get" || element.kind === "set")) {
- next = (element.static ? "s" : "i") + element.kind;
- }
-
- // `class { get #a(){}; static set #a(_){} }` is also conflict.
- if (
- curr === "iget" && next === "iset" ||
- curr === "iset" && next === "iget" ||
- curr === "sget" && next === "sset" ||
- curr === "sset" && next === "sget"
- ) {
- privateNameMap[name] = "true";
- return false
- } else if (!curr) {
- privateNameMap[name] = next;
- return false
- } else {
- return true
- }
-}
-
-function checkKeyName(node, name) {
- var computed = node.computed;
- var key = node.key;
- return !computed && (
- key.type === "Identifier" && key.name === name ||
- key.type === "Literal" && key.value === name
- )
-}
-
-// Parses module export declaration.
-
-pp$1.parseExport = function(node, exports) {
- this.next();
- // export * from '...'
- if (this.eat(types.star)) {
- if (this.options.ecmaVersion >= 11) {
- if (this.eatContextual("as")) {
- node.exported = this.parseIdent(true);
- this.checkExport(exports, node.exported.name, this.lastTokStart);
- } else {
- node.exported = null;
- }
- }
- this.expectContextual("from");
- if (this.type !== types.string) { this.unexpected(); }
- node.source = this.parseExprAtom();
- this.semicolon();
- return this.finishNode(node, "ExportAllDeclaration")
- }
- if (this.eat(types._default)) { // export default ...
- this.checkExport(exports, "default", this.lastTokStart);
- var isAsync;
- if (this.type === types._function || (isAsync = this.isAsyncFunction())) {
- var fNode = this.startNode();
- this.next();
- if (isAsync) { this.next(); }
- node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);
- } else if (this.type === types._class) {
- var cNode = this.startNode();
- node.declaration = this.parseClass(cNode, "nullableID");
- } else {
- node.declaration = this.parseMaybeAssign();
- this.semicolon();
- }
- return this.finishNode(node, "ExportDefaultDeclaration")
- }
- // export var|const|let|function|class ...
- if (this.shouldParseExportStatement()) {
- node.declaration = this.parseStatement(null);
- if (node.declaration.type === "VariableDeclaration")
- { this.checkVariableExport(exports, node.declaration.declarations); }
- else
- { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); }
- node.specifiers = [];
- node.source = null;
- } else { // export { x, y as z } [from '...']
- node.declaration = null;
- node.specifiers = this.parseExportSpecifiers(exports);
- if (this.eatContextual("from")) {
- if (this.type !== types.string) { this.unexpected(); }
- node.source = this.parseExprAtom();
- } else {
- for (var i = 0, list = node.specifiers; i < list.length; i += 1) {
- // check for keywords used as local names
- var spec = list[i];
-
- this.checkUnreserved(spec.local);
- // check if export is defined
- this.checkLocalExport(spec.local);
- }
-
- node.source = null;
- }
- this.semicolon();
- }
- return this.finishNode(node, "ExportNamedDeclaration")
-};
-
-pp$1.checkExport = function(exports, name, pos) {
- if (!exports) { return }
- if (has$1(exports, name))
- { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); }
- exports[name] = true;
-};
-
-pp$1.checkPatternExport = function(exports, pat) {
- var type = pat.type;
- if (type === "Identifier")
- { this.checkExport(exports, pat.name, pat.start); }
- else if (type === "ObjectPattern")
- { for (var i = 0, list = pat.properties; i < list.length; i += 1)
- {
- var prop = list[i];
-
- this.checkPatternExport(exports, prop);
- } }
- else if (type === "ArrayPattern")
- { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {
- var elt = list$1[i$1];
-
- if (elt) { this.checkPatternExport(exports, elt); }
- } }
- else if (type === "Property")
- { this.checkPatternExport(exports, pat.value); }
- else if (type === "AssignmentPattern")
- { this.checkPatternExport(exports, pat.left); }
- else if (type === "RestElement")
- { this.checkPatternExport(exports, pat.argument); }
- else if (type === "ParenthesizedExpression")
- { this.checkPatternExport(exports, pat.expression); }
-};
-
-pp$1.checkVariableExport = function(exports, decls) {
- if (!exports) { return }
- for (var i = 0, list = decls; i < list.length; i += 1)
- {
- var decl = list[i];
-
- this.checkPatternExport(exports, decl.id);
- }
-};
-
-pp$1.shouldParseExportStatement = function() {
- return this.type.keyword === "var" ||
- this.type.keyword === "const" ||
- this.type.keyword === "class" ||
- this.type.keyword === "function" ||
- this.isLet() ||
- this.isAsyncFunction()
-};
-
-// Parses a comma-separated list of module exports.
-
-pp$1.parseExportSpecifiers = function(exports) {
- var nodes = [], first = true;
- // export { x, y as z } [from '...']
- this.expect(types.braceL);
- while (!this.eat(types.braceR)) {
- if (!first) {
- this.expect(types.comma);
- if (this.afterTrailingComma(types.braceR)) { break }
- } else { first = false; }
-
- var node = this.startNode();
- node.local = this.parseIdent(true);
- node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local;
- this.checkExport(exports, node.exported.name, node.exported.start);
- nodes.push(this.finishNode(node, "ExportSpecifier"));
- }
- return nodes
-};
-
-// Parses import declaration.
-
-pp$1.parseImport = function(node) {
- this.next();
- // import '...'
- if (this.type === types.string) {
- node.specifiers = empty;
- node.source = this.parseExprAtom();
- } else {
- node.specifiers = this.parseImportSpecifiers();
- this.expectContextual("from");
- node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected();
- }
- this.semicolon();
- return this.finishNode(node, "ImportDeclaration")
-};
-
-// Parses a comma-separated list of module imports.
-
-pp$1.parseImportSpecifiers = function() {
- var nodes = [], first = true;
- if (this.type === types.name) {
- // import defaultObj, { x, y as z } from '...'
- var node = this.startNode();
- node.local = this.parseIdent();
- this.checkLValSimple(node.local, BIND_LEXICAL);
- nodes.push(this.finishNode(node, "ImportDefaultSpecifier"));
- if (!this.eat(types.comma)) { return nodes }
- }
- if (this.type === types.star) {
- var node$1 = this.startNode();
- this.next();
- this.expectContextual("as");
- node$1.local = this.parseIdent();
- this.checkLValSimple(node$1.local, BIND_LEXICAL);
- nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier"));
- return nodes
- }
- this.expect(types.braceL);
- while (!this.eat(types.braceR)) {
- if (!first) {
- this.expect(types.comma);
- if (this.afterTrailingComma(types.braceR)) { break }
- } else { first = false; }
-
- var node$2 = this.startNode();
- node$2.imported = this.parseIdent(true);
- if (this.eatContextual("as")) {
- node$2.local = this.parseIdent();
- } else {
- this.checkUnreserved(node$2.imported);
- node$2.local = node$2.imported;
- }
- this.checkLValSimple(node$2.local, BIND_LEXICAL);
- nodes.push(this.finishNode(node$2, "ImportSpecifier"));
- }
- return nodes
-};
-
-// Set `ExpressionStatement#directive` property for directive prologues.
-pp$1.adaptDirectivePrologue = function(statements) {
- for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {
- statements[i].directive = statements[i].expression.raw.slice(1, -1);
- }
-};
-pp$1.isDirectiveCandidate = function(statement) {
- return (
- statement.type === "ExpressionStatement" &&
- statement.expression.type === "Literal" &&
- typeof statement.expression.value === "string" &&
- // Reject parenthesized strings.
- (this.input[statement.start] === "\"" || this.input[statement.start] === "'")
- )
-};
-
-var pp$2 = Parser.prototype;
-
-// Convert existing expression atom to assignable pattern
-// if possible.
-
-pp$2.toAssignable = function(node, isBinding, refDestructuringErrors) {
- if (this.options.ecmaVersion >= 6 && node) {
- switch (node.type) {
- case "Identifier":
- if (this.inAsync && node.name === "await")
- { this.raise(node.start, "Cannot use 'await' as identifier inside an async function"); }
- break
-
- case "ObjectPattern":
- case "ArrayPattern":
- case "AssignmentPattern":
- case "RestElement":
- break
-
- case "ObjectExpression":
- node.type = "ObjectPattern";
- if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
- for (var i = 0, list = node.properties; i < list.length; i += 1) {
- var prop = list[i];
-
- this.toAssignable(prop, isBinding);
- // Early error:
- // AssignmentRestProperty[Yield, Await] :
- // `...` DestructuringAssignmentTarget[Yield, Await]
- //
- // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.
- if (
- prop.type === "RestElement" &&
- (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern")
- ) {
- this.raise(prop.argument.start, "Unexpected token");
- }
- }
- break
-
- case "Property":
- // AssignmentProperty has type === "Property"
- if (node.kind !== "init") { this.raise(node.key.start, "Object pattern can't contain getter or setter"); }
- this.toAssignable(node.value, isBinding);
- break
-
- case "ArrayExpression":
- node.type = "ArrayPattern";
- if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
- this.toAssignableList(node.elements, isBinding);
- break
-
- case "SpreadElement":
- node.type = "RestElement";
- this.toAssignable(node.argument, isBinding);
- if (node.argument.type === "AssignmentPattern")
- { this.raise(node.argument.start, "Rest elements cannot have a default value"); }
- break
-
- case "AssignmentExpression":
- if (node.operator !== "=") { this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); }
- node.type = "AssignmentPattern";
- delete node.operator;
- this.toAssignable(node.left, isBinding);
- break
-
- case "ParenthesizedExpression":
- this.toAssignable(node.expression, isBinding, refDestructuringErrors);
- break
-
- case "ChainExpression":
- this.raiseRecoverable(node.start, "Optional chaining cannot appear in left-hand side");
- break
-
- case "MemberExpression":
- if (!isBinding) { break }
-
- default:
- this.raise(node.start, "Assigning to rvalue");
- }
- } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
- return node
-};
-
-// Convert list of expression atoms to binding list.
-
-pp$2.toAssignableList = function(exprList, isBinding) {
- var end = exprList.length;
- for (var i = 0; i < end; i++) {
- var elt = exprList[i];
- if (elt) { this.toAssignable(elt, isBinding); }
- }
- if (end) {
- var last = exprList[end - 1];
- if (this.options.ecmaVersion === 6 && isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier")
- { this.unexpected(last.argument.start); }
- }
- return exprList
-};
-
-// Parses spread element.
-
-pp$2.parseSpread = function(refDestructuringErrors) {
- var node = this.startNode();
- this.next();
- node.argument = this.parseMaybeAssign(false, refDestructuringErrors);
- return this.finishNode(node, "SpreadElement")
-};
-
-pp$2.parseRestBinding = function() {
- var node = this.startNode();
- this.next();
-
- // RestElement inside of a function parameter must be an identifier
- if (this.options.ecmaVersion === 6 && this.type !== types.name)
- { this.unexpected(); }
-
- node.argument = this.parseBindingAtom();
-
- return this.finishNode(node, "RestElement")
-};
-
-// Parses lvalue (assignable) atom.
-
-pp$2.parseBindingAtom = function() {
- if (this.options.ecmaVersion >= 6) {
- switch (this.type) {
- case types.bracketL:
- var node = this.startNode();
- this.next();
- node.elements = this.parseBindingList(types.bracketR, true, true);
- return this.finishNode(node, "ArrayPattern")
-
- case types.braceL:
- return this.parseObj(true)
- }
- }
- return this.parseIdent()
-};
-
-pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) {
- var elts = [], first = true;
- while (!this.eat(close)) {
- if (first) { first = false; }
- else { this.expect(types.comma); }
- if (allowEmpty && this.type === types.comma) {
- elts.push(null);
- } else if (allowTrailingComma && this.afterTrailingComma(close)) {
- break
- } else if (this.type === types.ellipsis) {
- var rest = this.parseRestBinding();
- this.parseBindingListItem(rest);
- elts.push(rest);
- if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
- this.expect(close);
- break
- } else {
- var elem = this.parseMaybeDefault(this.start, this.startLoc);
- this.parseBindingListItem(elem);
- elts.push(elem);
- }
- }
- return elts
-};
-
-pp$2.parseBindingListItem = function(param) {
- return param
-};
-
-// Parses assignment pattern around given atom if possible.
-
-pp$2.parseMaybeDefault = function(startPos, startLoc, left) {
- left = left || this.parseBindingAtom();
- if (this.options.ecmaVersion < 6 || !this.eat(types.eq)) { return left }
- var node = this.startNodeAt(startPos, startLoc);
- node.left = left;
- node.right = this.parseMaybeAssign();
- return this.finishNode(node, "AssignmentPattern")
-};
-
-// The following three functions all verify that a node is an lvalue —
-// something that can be bound, or assigned to. In order to do so, they perform
-// a variety of checks:
-//
-// - Check that none of the bound/assigned-to identifiers are reserved words.
-// - Record name declarations for bindings in the appropriate scope.
-// - Check duplicate argument names, if checkClashes is set.
-//
-// If a complex binding pattern is encountered (e.g., object and array
-// destructuring), the entire pattern is recursively checked.
-//
-// There are three versions of checkLVal*() appropriate for different
-// circumstances:
-//
-// - checkLValSimple() shall be used if the syntactic construct supports
-// nothing other than identifiers and member expressions. Parenthesized
-// expressions are also correctly handled. This is generally appropriate for
-// constructs for which the spec says
-//
-// > It is a Syntax Error if AssignmentTargetType of [the production] is not
-// > simple.
-//
-// It is also appropriate for checking if an identifier is valid and not
-// defined elsewhere, like import declarations or function/class identifiers.
-//
-// Examples where this is used include:
-// a += …;
-// import a from '…';
-// where a is the node to be checked.
-//
-// - checkLValPattern() shall be used if the syntactic construct supports
-// anything checkLValSimple() supports, as well as object and array
-// destructuring patterns. This is generally appropriate for constructs for
-// which the spec says
-//
-// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor
-// > an ArrayLiteral and AssignmentTargetType of [the production] is not
-// > simple.
-//
-// Examples where this is used include:
-// (a = …);
-// const a = …;
-// try { … } catch (a) { … }
-// where a is the node to be checked.
-//
-// - checkLValInnerPattern() shall be used if the syntactic construct supports
-// anything checkLValPattern() supports, as well as default assignment
-// patterns, rest elements, and other constructs that may appear within an
-// object or array destructuring pattern.
-//
-// As a special case, function parameters also use checkLValInnerPattern(),
-// as they also support defaults and rest constructs.
-//
-// These functions deliberately support both assignment and binding constructs,
-// as the logic for both is exceedingly similar. If the node is the target of
-// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it
-// should be set to the appropriate BIND_* constant, like BIND_VAR or
-// BIND_LEXICAL.
-//
-// If the function is called with a non-BIND_NONE bindingType, then
-// additionally a checkClashes object may be specified to allow checking for
-// duplicate argument names. checkClashes is ignored if the provided construct
-// is an assignment (i.e., bindingType is BIND_NONE).
-
-pp$2.checkLValSimple = function(expr, bindingType, checkClashes) {
- if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
- var isBind = bindingType !== BIND_NONE;
-
- switch (expr.type) {
- case "Identifier":
- if (this.strict && this.reservedWordsStrictBind.test(expr.name))
- { this.raiseRecoverable(expr.start, (isBind ? "Binding " : "Assigning to ") + expr.name + " in strict mode"); }
- if (isBind) {
- if (bindingType === BIND_LEXICAL && expr.name === "let")
- { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); }
- if (checkClashes) {
- if (has$1(checkClashes, expr.name))
- { this.raiseRecoverable(expr.start, "Argument name clash"); }
- checkClashes[expr.name] = true;
- }
- if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }
- }
- break
-
- case "ChainExpression":
- this.raiseRecoverable(expr.start, "Optional chaining cannot appear in left-hand side");
- break
-
- case "MemberExpression":
- if (isBind) { this.raiseRecoverable(expr.start, "Binding member expression"); }
- break
-
- case "ParenthesizedExpression":
- if (isBind) { this.raiseRecoverable(expr.start, "Binding parenthesized expression"); }
- return this.checkLValSimple(expr.expression, bindingType, checkClashes)
-
- default:
- this.raise(expr.start, (isBind ? "Binding" : "Assigning to") + " rvalue");
- }
-};
-
-pp$2.checkLValPattern = function(expr, bindingType, checkClashes) {
- if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
- switch (expr.type) {
- case "ObjectPattern":
- for (var i = 0, list = expr.properties; i < list.length; i += 1) {
- var prop = list[i];
-
- this.checkLValInnerPattern(prop, bindingType, checkClashes);
- }
- break
-
- case "ArrayPattern":
- for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {
- var elem = list$1[i$1];
-
- if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }
- }
- break
-
- default:
- this.checkLValSimple(expr, bindingType, checkClashes);
- }
-};
-
-pp$2.checkLValInnerPattern = function(expr, bindingType, checkClashes) {
- if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
- switch (expr.type) {
- case "Property":
- // AssignmentProperty has type === "Property"
- this.checkLValInnerPattern(expr.value, bindingType, checkClashes);
- break
-
- case "AssignmentPattern":
- this.checkLValPattern(expr.left, bindingType, checkClashes);
- break
-
- case "RestElement":
- this.checkLValPattern(expr.argument, bindingType, checkClashes);
- break
-
- default:
- this.checkLValPattern(expr, bindingType, checkClashes);
- }
-};
-
-// The algorithm used to determine whether a regexp can appear at a
-
-var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {
- this.token = token;
- this.isExpr = !!isExpr;
- this.preserveSpace = !!preserveSpace;
- this.override = override;
- this.generator = !!generator;
-};
-
-var types$1 = {
- b_stat: new TokContext("{", false),
- b_expr: new TokContext("{", true),
- b_tmpl: new TokContext("${", false),
- p_stat: new TokContext("(", false),
- p_expr: new TokContext("(", true),
- q_tmpl: new TokContext("`", true, true, function (p) { return p.tryReadTemplateToken(); }),
- f_stat: new TokContext("function", false),
- f_expr: new TokContext("function", true),
- f_expr_gen: new TokContext("function", true, false, null, true),
- f_gen: new TokContext("function", false, false, null, true)
-};
-
-var pp$3 = Parser.prototype;
-
-pp$3.initialContext = function() {
- return [types$1.b_stat]
-};
-
-pp$3.curContext = function() {
- return this.context[this.context.length - 1]
-};
-
-pp$3.braceIsBlock = function(prevType) {
- var parent = this.curContext();
- if (parent === types$1.f_expr || parent === types$1.f_stat)
- { return true }
- if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr))
- { return !parent.isExpr }
-
- // The check for `tt.name && exprAllowed` detects whether we are
- // after a `yield` or `of` construct. See the `updateContext` for
- // `tt.name`.
- if (prevType === types._return || prevType === types.name && this.exprAllowed)
- { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }
- if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow)
- { return true }
- if (prevType === types.braceL)
- { return parent === types$1.b_stat }
- if (prevType === types._var || prevType === types._const || prevType === types.name)
- { return false }
- return !this.exprAllowed
-};
-
-pp$3.inGeneratorContext = function() {
- for (var i = this.context.length - 1; i >= 1; i--) {
- var context = this.context[i];
- if (context.token === "function")
- { return context.generator }
- }
- return false
-};
-
-pp$3.updateContext = function(prevType) {
- var update, type = this.type;
- if (type.keyword && prevType === types.dot)
- { this.exprAllowed = false; }
- else if (update = type.updateContext)
- { update.call(this, prevType); }
- else
- { this.exprAllowed = type.beforeExpr; }
-};
-
-// Used to handle egde case when token context could not be inferred correctly in tokenize phase
-pp$3.overrideContext = function(tokenCtx) {
- if (this.curContext() !== tokenCtx) {
- this.context[this.context.length - 1] = tokenCtx;
- }
-};
-
-// Token-specific context update code
-
-types.parenR.updateContext = types.braceR.updateContext = function() {
- if (this.context.length === 1) {
- this.exprAllowed = true;
- return
- }
- var out = this.context.pop();
- if (out === types$1.b_stat && this.curContext().token === "function") {
- out = this.context.pop();
- }
- this.exprAllowed = !out.isExpr;
-};
-
-types.braceL.updateContext = function(prevType) {
- this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr);
- this.exprAllowed = true;
-};
-
-types.dollarBraceL.updateContext = function() {
- this.context.push(types$1.b_tmpl);
- this.exprAllowed = true;
-};
-
-types.parenL.updateContext = function(prevType) {
- var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;
- this.context.push(statementParens ? types$1.p_stat : types$1.p_expr);
- this.exprAllowed = true;
-};
-
-types.incDec.updateContext = function() {
- // tokExprAllowed stays unchanged
-};
-
-types._function.updateContext = types._class.updateContext = function(prevType) {
- if (prevType.beforeExpr && prevType !== types._else &&
- !(prevType === types.semi && this.curContext() !== types$1.p_stat) &&
- !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&
- !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat))
- { this.context.push(types$1.f_expr); }
- else
- { this.context.push(types$1.f_stat); }
- this.exprAllowed = false;
-};
-
-types.backQuote.updateContext = function() {
- if (this.curContext() === types$1.q_tmpl)
- { this.context.pop(); }
- else
- { this.context.push(types$1.q_tmpl); }
- this.exprAllowed = false;
-};
-
-types.star.updateContext = function(prevType) {
- if (prevType === types._function) {
- var index = this.context.length - 1;
- if (this.context[index] === types$1.f_expr)
- { this.context[index] = types$1.f_expr_gen; }
- else
- { this.context[index] = types$1.f_gen; }
- }
- this.exprAllowed = true;
-};
-
-types.name.updateContext = function(prevType) {
- var allowed = false;
- if (this.options.ecmaVersion >= 6 && prevType !== types.dot) {
- if (this.value === "of" && !this.exprAllowed ||
- this.value === "yield" && this.inGeneratorContext())
- { allowed = true; }
- }
- this.exprAllowed = allowed;
-};
-
-// A recursive descent parser operates by defining functions for all
-
-var pp$4 = Parser.prototype;
-
-// Check if property name clashes with already added.
-// Object/class getters and setters are not allowed to clash —
-// either with each other or with an init property — and in
-// strict mode, init properties are also not allowed to be repeated.
-
-pp$4.checkPropClash = function(prop, propHash, refDestructuringErrors) {
- if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement")
- { return }
- if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))
- { return }
- var key = prop.key;
- var name;
- switch (key.type) {
- case "Identifier": name = key.name; break
- case "Literal": name = String(key.value); break
- default: return
- }
- var kind = prop.kind;
- if (this.options.ecmaVersion >= 6) {
- if (name === "__proto__" && kind === "init") {
- if (propHash.proto) {
- if (refDestructuringErrors) {
- if (refDestructuringErrors.doubleProto < 0)
- { refDestructuringErrors.doubleProto = key.start; }
- // Backwards-compat kludge. Can be removed in version 6.0
- } else { this.raiseRecoverable(key.start, "Redefinition of __proto__ property"); }
- }
- propHash.proto = true;
- }
- return
- }
- name = "$" + name;
- var other = propHash[name];
- if (other) {
- var redefinition;
- if (kind === "init") {
- redefinition = this.strict && other.init || other.get || other.set;
- } else {
- redefinition = other.init || other[kind];
- }
- if (redefinition)
- { this.raiseRecoverable(key.start, "Redefinition of property"); }
- } else {
- other = propHash[name] = {
- init: false,
- get: false,
- set: false
- };
- }
- other[kind] = true;
-};
-
-// ### Expression parsing
-
-// These nest, from the most general expression type at the top to
-// 'atomic', nondivisible expression types at the bottom. Most of
-// the functions will simply let the function(s) below them parse,
-// and, *if* the syntactic construct they handle is present, wrap
-// the AST node that the inner parser gave them in another node.
-
-// Parse a full expression. The optional arguments are used to
-// forbid the `in` operator (in for loops initalization expressions)
-// and provide reference for storing '=' operator inside shorthand
-// property assignment in contexts where both object expression
-// and object pattern might appear (so it's possible to raise
-// delayed syntax error at correct position).
-
-pp$4.parseExpression = function(forInit, refDestructuringErrors) {
- var startPos = this.start, startLoc = this.startLoc;
- var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);
- if (this.type === types.comma) {
- var node = this.startNodeAt(startPos, startLoc);
- node.expressions = [expr];
- while (this.eat(types.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }
- return this.finishNode(node, "SequenceExpression")
- }
- return expr
-};
-
-// Parse an assignment expression. This includes applications of
-// operators like `+=`.
-
-pp$4.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {
- if (this.isContextual("yield")) {
- if (this.inGenerator) { return this.parseYield(forInit) }
- // The tokenizer will assume an expression is allowed after
- // `yield`, but this isn't that kind of yield
- else { this.exprAllowed = false; }
- }
-
- var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1;
- if (refDestructuringErrors) {
- oldParenAssign = refDestructuringErrors.parenthesizedAssign;
- oldTrailingComma = refDestructuringErrors.trailingComma;
- refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;
- } else {
- refDestructuringErrors = new DestructuringErrors;
- ownDestructuringErrors = true;
- }
-
- var startPos = this.start, startLoc = this.startLoc;
- if (this.type === types.parenL || this.type === types.name) {
- this.potentialArrowAt = this.start;
- this.potentialArrowInForAwait = forInit === "await";
- }
- var left = this.parseMaybeConditional(forInit, refDestructuringErrors);
- if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }
- if (this.type.isAssign) {
- var node = this.startNodeAt(startPos, startLoc);
- node.operator = this.value;
- if (this.type === types.eq)
- { left = this.toAssignable(left, false, refDestructuringErrors); }
- if (!ownDestructuringErrors) {
- refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;
- }
- if (refDestructuringErrors.shorthandAssign >= left.start)
- { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly
- if (this.type === types.eq)
- { this.checkLValPattern(left); }
- else
- { this.checkLValSimple(left); }
- node.left = left;
- this.next();
- node.right = this.parseMaybeAssign(forInit);
- return this.finishNode(node, "AssignmentExpression")
- } else {
- if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }
- }
- if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }
- if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }
- return left
-};
-
-// Parse a ternary conditional (`?:`) operator.
-
-pp$4.parseMaybeConditional = function(forInit, refDestructuringErrors) {
- var startPos = this.start, startLoc = this.startLoc;
- var expr = this.parseExprOps(forInit, refDestructuringErrors);
- if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
- if (this.eat(types.question)) {
- var node = this.startNodeAt(startPos, startLoc);
- node.test = expr;
- node.consequent = this.parseMaybeAssign();
- this.expect(types.colon);
- node.alternate = this.parseMaybeAssign(forInit);
- return this.finishNode(node, "ConditionalExpression")
- }
- return expr
-};
-
-// Start the precedence parser.
-
-pp$4.parseExprOps = function(forInit, refDestructuringErrors) {
- var startPos = this.start, startLoc = this.startLoc;
- var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);
- if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
- return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)
-};
-
-// Parse binary operators with the operator precedence parsing
-// algorithm. `left` is the left-hand side of the operator.
-// `minPrec` provides context that allows the function to stop and
-// defer further parser to one of its callers when it encounters an
-// operator that has a lower precedence than the set it is parsing.
-
-pp$4.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {
- var prec = this.type.binop;
- if (prec != null && (!forInit || this.type !== types._in)) {
- if (prec > minPrec) {
- var logical = this.type === types.logicalOR || this.type === types.logicalAND;
- var coalesce = this.type === types.coalesce;
- if (coalesce) {
- // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.
- // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.
- prec = types.logicalAND.binop;
- }
- var op = this.value;
- this.next();
- var startPos = this.start, startLoc = this.startLoc;
- var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);
- var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);
- if ((logical && this.type === types.coalesce) || (coalesce && (this.type === types.logicalOR || this.type === types.logicalAND))) {
- this.raiseRecoverable(this.start, "Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses");
- }
- return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)
- }
- }
- return left
-};
-
-pp$4.buildBinary = function(startPos, startLoc, left, right, op, logical) {
- var node = this.startNodeAt(startPos, startLoc);
- node.left = left;
- node.operator = op;
- node.right = right;
- return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression")
-};
-
-// Parse unary operators, both prefix and postfix.
-
-pp$4.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {
- var startPos = this.start, startLoc = this.startLoc, expr;
- if (this.isContextual("await") && this.canAwait) {
- expr = this.parseAwait(forInit);
- sawUnary = true;
- } else if (this.type.prefix) {
- var node = this.startNode(), update = this.type === types.incDec;
- node.operator = this.value;
- node.prefix = true;
- this.next();
- node.argument = this.parseMaybeUnary(null, true, update, forInit);
- this.checkExpressionErrors(refDestructuringErrors, true);
- if (update) { this.checkLValSimple(node.argument); }
- else if (this.strict && node.operator === "delete" &&
- node.argument.type === "Identifier")
- { this.raiseRecoverable(node.start, "Deleting local variable in strict mode"); }
- else if (node.operator === "delete" && isPrivateFieldAccess(node.argument))
- { this.raiseRecoverable(node.start, "Private fields can not be deleted"); }
- else { sawUnary = true; }
- expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");
- } else {
- expr = this.parseExprSubscripts(refDestructuringErrors, forInit);
- if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
- while (this.type.postfix && !this.canInsertSemicolon()) {
- var node$1 = this.startNodeAt(startPos, startLoc);
- node$1.operator = this.value;
- node$1.prefix = false;
- node$1.argument = expr;
- this.checkLValSimple(expr);
- this.next();
- expr = this.finishNode(node$1, "UpdateExpression");
- }
- }
-
- if (!incDec && this.eat(types.starstar)) {
- if (sawUnary)
- { this.unexpected(this.lastTokStart); }
- else
- { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), "**", false) }
- } else {
- return expr
- }
-};
-
-function isPrivateFieldAccess(node) {
- return (
- node.type === "MemberExpression" && node.property.type === "PrivateIdentifier" ||
- node.type === "ChainExpression" && isPrivateFieldAccess(node.expression)
- )
-}
-
-// Parse call, dot, and `[]`-subscript expressions.
-
-pp$4.parseExprSubscripts = function(refDestructuringErrors, forInit) {
- var startPos = this.start, startLoc = this.startLoc;
- var expr = this.parseExprAtom(refDestructuringErrors, forInit);
- if (expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")")
- { return expr }
- var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);
- if (refDestructuringErrors && result.type === "MemberExpression") {
- if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }
- if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }
- if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }
- }
- return result
-};
-
-pp$4.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {
- var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" &&
- this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&
- this.potentialArrowAt === base.start;
- var optionalChained = false;
-
- while (true) {
- var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);
-
- if (element.optional) { optionalChained = true; }
- if (element === base || element.type === "ArrowFunctionExpression") {
- if (optionalChained) {
- var chainNode = this.startNodeAt(startPos, startLoc);
- chainNode.expression = element;
- element = this.finishNode(chainNode, "ChainExpression");
- }
- return element
- }
-
- base = element;
- }
-};
-
-pp$4.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {
- var optionalSupported = this.options.ecmaVersion >= 11;
- var optional = optionalSupported && this.eat(types.questionDot);
- if (noCalls && optional) { this.raise(this.lastTokStart, "Optional chaining cannot appear in the callee of new expressions"); }
-
- var computed = this.eat(types.bracketL);
- if (computed || (optional && this.type !== types.parenL && this.type !== types.backQuote) || this.eat(types.dot)) {
- var node = this.startNodeAt(startPos, startLoc);
- node.object = base;
- if (computed) {
- node.property = this.parseExpression();
- this.expect(types.bracketR);
- } else if (this.type === types.privateId && base.type !== "Super") {
- node.property = this.parsePrivateIdent();
- } else {
- node.property = this.parseIdent(this.options.allowReserved !== "never");
- }
- node.computed = !!computed;
- if (optionalSupported) {
- node.optional = optional;
- }
- base = this.finishNode(node, "MemberExpression");
- } else if (!noCalls && this.eat(types.parenL)) {
- var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
- this.yieldPos = 0;
- this.awaitPos = 0;
- this.awaitIdentPos = 0;
- var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);
- if (maybeAsyncArrow && !optional && !this.canInsertSemicolon() && this.eat(types.arrow)) {
- this.checkPatternErrors(refDestructuringErrors, false);
- this.checkYieldAwaitInDefaultParams();
- if (this.awaitIdentPos > 0)
- { this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function"); }
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- this.awaitIdentPos = oldAwaitIdentPos;
- return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)
- }
- this.checkExpressionErrors(refDestructuringErrors, true);
- this.yieldPos = oldYieldPos || this.yieldPos;
- this.awaitPos = oldAwaitPos || this.awaitPos;
- this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;
- var node$1 = this.startNodeAt(startPos, startLoc);
- node$1.callee = base;
- node$1.arguments = exprList;
- if (optionalSupported) {
- node$1.optional = optional;
- }
- base = this.finishNode(node$1, "CallExpression");
- } else if (this.type === types.backQuote) {
- if (optional || optionalChained) {
- this.raise(this.start, "Optional chaining cannot appear in the tag of tagged template expressions");
- }
- var node$2 = this.startNodeAt(startPos, startLoc);
- node$2.tag = base;
- node$2.quasi = this.parseTemplate({isTagged: true});
- base = this.finishNode(node$2, "TaggedTemplateExpression");
- }
- return base
-};
-
-// Parse an atomic expression — either a single token that is an
-// expression, an expression started by a keyword like `function` or
-// `new`, or an expression wrapped in punctuation like `()`, `[]`,
-// or `{}`.
-
-pp$4.parseExprAtom = function(refDestructuringErrors, forInit) {
- // If a division operator appears in an expression position, the
- // tokenizer got confused, and we force it to read a regexp instead.
- if (this.type === types.slash) { this.readRegexp(); }
-
- var node, canBeArrow = this.potentialArrowAt === this.start;
- switch (this.type) {
- case types._super:
- if (!this.allowSuper)
- { this.raise(this.start, "'super' keyword outside a method"); }
- node = this.startNode();
- this.next();
- if (this.type === types.parenL && !this.allowDirectSuper)
- { this.raise(node.start, "super() call outside constructor of a subclass"); }
- // The `super` keyword can appear at below:
- // SuperProperty:
- // super [ Expression ]
- // super . IdentifierName
- // SuperCall:
- // super ( Arguments )
- if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL)
- { this.unexpected(); }
- return this.finishNode(node, "Super")
-
- case types._this:
- node = this.startNode();
- this.next();
- return this.finishNode(node, "ThisExpression")
-
- case types.name:
- var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;
- var id = this.parseIdent(false);
- if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types._function)) {
- this.overrideContext(types$1.f_expr);
- return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)
- }
- if (canBeArrow && !this.canInsertSemicolon()) {
- if (this.eat(types.arrow))
- { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }
- if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types.name && !containsEsc &&
- (!this.potentialArrowInForAwait || this.value !== "of" || this.containsEsc)) {
- id = this.parseIdent(false);
- if (this.canInsertSemicolon() || !this.eat(types.arrow))
- { this.unexpected(); }
- return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)
- }
- }
- return id
-
- case types.regexp:
- var value = this.value;
- node = this.parseLiteral(value.value);
- node.regex = {pattern: value.pattern, flags: value.flags};
- return node
-
- case types.num: case types.string:
- return this.parseLiteral(this.value)
-
- case types._null: case types._true: case types._false:
- node = this.startNode();
- node.value = this.type === types._null ? null : this.type === types._true;
- node.raw = this.type.keyword;
- this.next();
- return this.finishNode(node, "Literal")
-
- case types.parenL:
- var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);
- if (refDestructuringErrors) {
- if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))
- { refDestructuringErrors.parenthesizedAssign = start; }
- if (refDestructuringErrors.parenthesizedBind < 0)
- { refDestructuringErrors.parenthesizedBind = start; }
- }
- return expr
-
- case types.bracketL:
- node = this.startNode();
- this.next();
- node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors);
- return this.finishNode(node, "ArrayExpression")
-
- case types.braceL:
- this.overrideContext(types$1.b_expr);
- return this.parseObj(false, refDestructuringErrors)
-
- case types._function:
- node = this.startNode();
- this.next();
- return this.parseFunction(node, 0)
-
- case types._class:
- return this.parseClass(this.startNode(), false)
-
- case types._new:
- return this.parseNew()
-
- case types.backQuote:
- return this.parseTemplate()
-
- case types._import:
- if (this.options.ecmaVersion >= 11) {
- return this.parseExprImport()
- } else {
- return this.unexpected()
- }
-
- default:
- this.unexpected();
- }
-};
-
-pp$4.parseExprImport = function() {
- var node = this.startNode();
-
- // Consume `import` as an identifier for `import.meta`.
- // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.
- if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword import"); }
- var meta = this.parseIdent(true);
-
- switch (this.type) {
- case types.parenL:
- return this.parseDynamicImport(node)
- case types.dot:
- node.meta = meta;
- return this.parseImportMeta(node)
- default:
- this.unexpected();
- }
-};
-
-pp$4.parseDynamicImport = function(node) {
- this.next(); // skip `(`
-
- // Parse node.source.
- node.source = this.parseMaybeAssign();
-
- // Verify ending.
- if (!this.eat(types.parenR)) {
- var errorPos = this.start;
- if (this.eat(types.comma) && this.eat(types.parenR)) {
- this.raiseRecoverable(errorPos, "Trailing comma is not allowed in import()");
- } else {
- this.unexpected(errorPos);
- }
- }
-
- return this.finishNode(node, "ImportExpression")
-};
-
-pp$4.parseImportMeta = function(node) {
- this.next(); // skip `.`
-
- var containsEsc = this.containsEsc;
- node.property = this.parseIdent(true);
-
- if (node.property.name !== "meta")
- { this.raiseRecoverable(node.property.start, "The only valid meta property for import is 'import.meta'"); }
- if (containsEsc)
- { this.raiseRecoverable(node.start, "'import.meta' must not contain escaped characters"); }
- if (this.options.sourceType !== "module" && !this.options.allowImportExportEverywhere)
- { this.raiseRecoverable(node.start, "Cannot use 'import.meta' outside a module"); }
-
- return this.finishNode(node, "MetaProperty")
-};
-
-pp$4.parseLiteral = function(value) {
- var node = this.startNode();
- node.value = value;
- node.raw = this.input.slice(this.start, this.end);
- if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, ""); }
- this.next();
- return this.finishNode(node, "Literal")
-};
-
-pp$4.parseParenExpression = function() {
- this.expect(types.parenL);
- var val = this.parseExpression();
- this.expect(types.parenR);
- return val
-};
-
-pp$4.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {
- var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;
- if (this.options.ecmaVersion >= 6) {
- this.next();
-
- var innerStartPos = this.start, innerStartLoc = this.startLoc;
- var exprList = [], first = true, lastIsComma = false;
- var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;
- this.yieldPos = 0;
- this.awaitPos = 0;
- // Do not save awaitIdentPos to allow checking awaits nested in parameters
- while (this.type !== types.parenR) {
- first ? first = false : this.expect(types.comma);
- if (allowTrailingComma && this.afterTrailingComma(types.parenR, true)) {
- lastIsComma = true;
- break
- } else if (this.type === types.ellipsis) {
- spreadStart = this.start;
- exprList.push(this.parseParenItem(this.parseRestBinding()));
- if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
- break
- } else {
- exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));
- }
- }
- var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;
- this.expect(types.parenR);
-
- if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {
- this.checkPatternErrors(refDestructuringErrors, false);
- this.checkYieldAwaitInDefaultParams();
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- return this.parseParenArrowList(startPos, startLoc, exprList, forInit)
- }
-
- if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }
- if (spreadStart) { this.unexpected(spreadStart); }
- this.checkExpressionErrors(refDestructuringErrors, true);
- this.yieldPos = oldYieldPos || this.yieldPos;
- this.awaitPos = oldAwaitPos || this.awaitPos;
-
- if (exprList.length > 1) {
- val = this.startNodeAt(innerStartPos, innerStartLoc);
- val.expressions = exprList;
- this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);
- } else {
- val = exprList[0];
- }
- } else {
- val = this.parseParenExpression();
- }
-
- if (this.options.preserveParens) {
- var par = this.startNodeAt(startPos, startLoc);
- par.expression = val;
- return this.finishNode(par, "ParenthesizedExpression")
- } else {
- return val
- }
-};
-
-pp$4.parseParenItem = function(item) {
- return item
-};
-
-pp$4.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {
- return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, forInit)
-};
-
-// New's precedence is slightly tricky. It must allow its argument to
-// be a `[]` or dot subscript expression, but not a call — at least,
-// not without wrapping it in parentheses. Thus, it uses the noCalls
-// argument to parseSubscripts to prevent it from consuming the
-// argument list.
-
-var empty$1 = [];
-
-pp$4.parseNew = function() {
- if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword new"); }
- var node = this.startNode();
- var meta = this.parseIdent(true);
- if (this.options.ecmaVersion >= 6 && this.eat(types.dot)) {
- node.meta = meta;
- var containsEsc = this.containsEsc;
- node.property = this.parseIdent(true);
- if (node.property.name !== "target")
- { this.raiseRecoverable(node.property.start, "The only valid meta property for new is 'new.target'"); }
- if (containsEsc)
- { this.raiseRecoverable(node.start, "'new.target' must not contain escaped characters"); }
- if (!this.allowNewDotTarget)
- { this.raiseRecoverable(node.start, "'new.target' can only be used in functions and class static block"); }
- return this.finishNode(node, "MetaProperty")
- }
- var startPos = this.start, startLoc = this.startLoc, isImport = this.type === types._import;
- node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true, false);
- if (isImport && node.callee.type === "ImportExpression") {
- this.raise(startPos, "Cannot use new with import()");
- }
- if (this.eat(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false); }
- else { node.arguments = empty$1; }
- return this.finishNode(node, "NewExpression")
-};
-
-// Parse template expression.
-
-pp$4.parseTemplateElement = function(ref) {
- var isTagged = ref.isTagged;
-
- var elem = this.startNode();
- if (this.type === types.invalidTemplate) {
- if (!isTagged) {
- this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal");
- }
- elem.value = {
- raw: this.value,
- cooked: null
- };
- } else {
- elem.value = {
- raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"),
- cooked: this.value
- };
- }
- this.next();
- elem.tail = this.type === types.backQuote;
- return this.finishNode(elem, "TemplateElement")
-};
-
-pp$4.parseTemplate = function(ref) {
- if ( ref === void 0 ) ref = {};
- var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;
-
- var node = this.startNode();
- this.next();
- node.expressions = [];
- var curElt = this.parseTemplateElement({isTagged: isTagged});
- node.quasis = [curElt];
- while (!curElt.tail) {
- if (this.type === types.eof) { this.raise(this.pos, "Unterminated template literal"); }
- this.expect(types.dollarBraceL);
- node.expressions.push(this.parseExpression());
- this.expect(types.braceR);
- node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));
- }
- this.next();
- return this.finishNode(node, "TemplateLiteral")
-};
-
-pp$4.isAsyncProp = function(prop) {
- return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" &&
- (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) &&
- !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
-};
-
-// Parse an object literal or binding pattern.
-
-pp$4.parseObj = function(isPattern, refDestructuringErrors) {
- var node = this.startNode(), first = true, propHash = {};
- node.properties = [];
- this.next();
- while (!this.eat(types.braceR)) {
- if (!first) {
- this.expect(types.comma);
- if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types.braceR)) { break }
- } else { first = false; }
-
- var prop = this.parseProperty(isPattern, refDestructuringErrors);
- if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }
- node.properties.push(prop);
- }
- return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression")
-};
-
-pp$4.parseProperty = function(isPattern, refDestructuringErrors) {
- var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;
- if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) {
- if (isPattern) {
- prop.argument = this.parseIdent(false);
- if (this.type === types.comma) {
- this.raise(this.start, "Comma is not permitted after the rest element");
- }
- return this.finishNode(prop, "RestElement")
- }
- // To disallow parenthesized identifier via `this.toAssignable()`.
- if (this.type === types.parenL && refDestructuringErrors) {
- if (refDestructuringErrors.parenthesizedAssign < 0) {
- refDestructuringErrors.parenthesizedAssign = this.start;
- }
- if (refDestructuringErrors.parenthesizedBind < 0) {
- refDestructuringErrors.parenthesizedBind = this.start;
- }
- }
- // Parse argument.
- prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);
- // To disallow trailing comma via `this.toAssignable()`.
- if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {
- refDestructuringErrors.trailingComma = this.start;
- }
- // Finish
- return this.finishNode(prop, "SpreadElement")
- }
- if (this.options.ecmaVersion >= 6) {
- prop.method = false;
- prop.shorthand = false;
- if (isPattern || refDestructuringErrors) {
- startPos = this.start;
- startLoc = this.startLoc;
- }
- if (!isPattern)
- { isGenerator = this.eat(types.star); }
- }
- var containsEsc = this.containsEsc;
- this.parsePropertyName(prop);
- if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {
- isAsync = true;
- isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);
- this.parsePropertyName(prop, refDestructuringErrors);
- } else {
- isAsync = false;
- }
- this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);
- return this.finishNode(prop, "Property")
-};
-
-pp$4.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {
- if ((isGenerator || isAsync) && this.type === types.colon)
- { this.unexpected(); }
-
- if (this.eat(types.colon)) {
- prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);
- prop.kind = "init";
- } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) {
- if (isPattern) { this.unexpected(); }
- prop.kind = "init";
- prop.method = true;
- prop.value = this.parseMethod(isGenerator, isAsync);
- } else if (!isPattern && !containsEsc &&
- this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" &&
- (prop.key.name === "get" || prop.key.name === "set") &&
- (this.type !== types.comma && this.type !== types.braceR && this.type !== types.eq)) {
- if (isGenerator || isAsync) { this.unexpected(); }
- prop.kind = prop.key.name;
- this.parsePropertyName(prop);
- prop.value = this.parseMethod(false);
- var paramCount = prop.kind === "get" ? 0 : 1;
- if (prop.value.params.length !== paramCount) {
- var start = prop.value.start;
- if (prop.kind === "get")
- { this.raiseRecoverable(start, "getter should have no params"); }
- else
- { this.raiseRecoverable(start, "setter should have exactly one param"); }
- } else {
- if (prop.kind === "set" && prop.value.params[0].type === "RestElement")
- { this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params"); }
- }
- } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {
- if (isGenerator || isAsync) { this.unexpected(); }
- this.checkUnreserved(prop.key);
- if (prop.key.name === "await" && !this.awaitIdentPos)
- { this.awaitIdentPos = startPos; }
- prop.kind = "init";
- if (isPattern) {
- prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));
- } else if (this.type === types.eq && refDestructuringErrors) {
- if (refDestructuringErrors.shorthandAssign < 0)
- { refDestructuringErrors.shorthandAssign = this.start; }
- prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));
- } else {
- prop.value = this.copyNode(prop.key);
- }
- prop.shorthand = true;
- } else { this.unexpected(); }
-};
-
-pp$4.parsePropertyName = function(prop) {
- if (this.options.ecmaVersion >= 6) {
- if (this.eat(types.bracketL)) {
- prop.computed = true;
- prop.key = this.parseMaybeAssign();
- this.expect(types.bracketR);
- return prop.key
- } else {
- prop.computed = false;
- }
- }
- return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never")
-};
-
-// Initialize empty function node.
-
-pp$4.initFunction = function(node) {
- node.id = null;
- if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }
- if (this.options.ecmaVersion >= 8) { node.async = false; }
-};
-
-// Parse object or class method.
-
-pp$4.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {
- var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
- this.initFunction(node);
- if (this.options.ecmaVersion >= 6)
- { node.generator = isGenerator; }
- if (this.options.ecmaVersion >= 8)
- { node.async = !!isAsync; }
-
- this.yieldPos = 0;
- this.awaitPos = 0;
- this.awaitIdentPos = 0;
- this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));
-
- this.expect(types.parenL);
- node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);
- this.checkYieldAwaitInDefaultParams();
- this.parseFunctionBody(node, false, true, false);
-
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- this.awaitIdentPos = oldAwaitIdentPos;
- return this.finishNode(node, "FunctionExpression")
-};
-
-// Parse arrow function expression with given parameters.
-
-pp$4.parseArrowExpression = function(node, params, isAsync, forInit) {
- var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
- this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);
- this.initFunction(node);
- if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }
-
- this.yieldPos = 0;
- this.awaitPos = 0;
- this.awaitIdentPos = 0;
-
- node.params = this.toAssignableList(params, true);
- this.parseFunctionBody(node, true, false, forInit);
-
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- this.awaitIdentPos = oldAwaitIdentPos;
- return this.finishNode(node, "ArrowFunctionExpression")
-};
-
-// Parse function body and check parameters.
-
-pp$4.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {
- var isExpression = isArrowFunction && this.type !== types.braceL;
- var oldStrict = this.strict, useStrict = false;
-
- if (isExpression) {
- node.body = this.parseMaybeAssign(forInit);
- node.expression = true;
- this.checkParams(node, false);
- } else {
- var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);
- if (!oldStrict || nonSimple) {
- useStrict = this.strictDirective(this.end);
- // If this is a strict mode function, verify that argument names
- // are not repeated, and it does not try to bind the words `eval`
- // or `arguments`.
- if (useStrict && nonSimple)
- { this.raiseRecoverable(node.start, "Illegal 'use strict' directive in function with non-simple parameter list"); }
- }
- // Start a new scope with regard to labels and the `inFunction`
- // flag (restore them to their old value afterwards).
- var oldLabels = this.labels;
- this.labels = [];
- if (useStrict) { this.strict = true; }
-
- // Add the params to varDeclaredNames to ensure that an error is thrown
- // if a let/const declaration in the function clashes with one of the params.
- this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));
- // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'
- if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }
- node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);
- node.expression = false;
- this.adaptDirectivePrologue(node.body.body);
- this.labels = oldLabels;
- }
- this.exitScope();
-};
-
-pp$4.isSimpleParamList = function(params) {
- for (var i = 0, list = params; i < list.length; i += 1)
- {
- var param = list[i];
-
- if (param.type !== "Identifier") { return false
- } }
- return true
-};
-
-// Checks function params for various disallowed patterns such as using "eval"
-// or "arguments" and duplicate parameters.
-
-pp$4.checkParams = function(node, allowDuplicates) {
- var nameHash = Object.create(null);
- for (var i = 0, list = node.params; i < list.length; i += 1)
- {
- var param = list[i];
-
- this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);
- }
-};
-
-// Parses a comma-separated list of expressions, and returns them as
-// an array. `close` is the token type that ends the list, and
-// `allowEmpty` can be turned on to allow subsequent commas with
-// nothing in between them to be parsed as `null` (which is needed
-// for array literals).
-
-pp$4.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {
- var elts = [], first = true;
- while (!this.eat(close)) {
- if (!first) {
- this.expect(types.comma);
- if (allowTrailingComma && this.afterTrailingComma(close)) { break }
- } else { first = false; }
-
- var elt = (void 0);
- if (allowEmpty && this.type === types.comma)
- { elt = null; }
- else if (this.type === types.ellipsis) {
- elt = this.parseSpread(refDestructuringErrors);
- if (refDestructuringErrors && this.type === types.comma && refDestructuringErrors.trailingComma < 0)
- { refDestructuringErrors.trailingComma = this.start; }
- } else {
- elt = this.parseMaybeAssign(false, refDestructuringErrors);
- }
- elts.push(elt);
- }
- return elts
-};
-
-pp$4.checkUnreserved = function(ref) {
- var start = ref.start;
- var end = ref.end;
- var name = ref.name;
-
- if (this.inGenerator && name === "yield")
- { this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator"); }
- if (this.inAsync && name === "await")
- { this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function"); }
- if (this.currentThisScope().inClassFieldInit && name === "arguments")
- { this.raiseRecoverable(start, "Cannot use 'arguments' in class field initializer"); }
- if (this.inClassStaticBlock && (name === "arguments" || name === "await"))
- { this.raise(start, ("Cannot use " + name + " in class static initialization block")); }
- if (this.keywords.test(name))
- { this.raise(start, ("Unexpected keyword '" + name + "'")); }
- if (this.options.ecmaVersion < 6 &&
- this.input.slice(start, end).indexOf("\\") !== -1) { return }
- var re = this.strict ? this.reservedWordsStrict : this.reservedWords;
- if (re.test(name)) {
- if (!this.inAsync && name === "await")
- { this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function"); }
- this.raiseRecoverable(start, ("The keyword '" + name + "' is reserved"));
- }
-};
-
-// Parse the next token as an identifier. If `liberal` is true (used
-// when parsing properties), it will also convert keywords into
-// identifiers.
-
-pp$4.parseIdent = function(liberal, isBinding) {
- var node = this.startNode();
- if (this.type === types.name) {
- node.name = this.value;
- } else if (this.type.keyword) {
- node.name = this.type.keyword;
-
- // To fix https://github.com/acornjs/acorn/issues/575
- // `class` and `function` keywords push new context into this.context.
- // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.
- // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword
- if ((node.name === "class" || node.name === "function") &&
- (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {
- this.context.pop();
- }
- } else {
- this.unexpected();
- }
- this.next(!!liberal);
- this.finishNode(node, "Identifier");
- if (!liberal) {
- this.checkUnreserved(node);
- if (node.name === "await" && !this.awaitIdentPos)
- { this.awaitIdentPos = node.start; }
- }
- return node
-};
-
-pp$4.parsePrivateIdent = function() {
- var node = this.startNode();
- if (this.type === types.privateId) {
- node.name = this.value;
- } else {
- this.unexpected();
- }
- this.next();
- this.finishNode(node, "PrivateIdentifier");
-
- // For validating existence
- if (this.privateNameStack.length === 0) {
- this.raise(node.start, ("Private field '#" + (node.name) + "' must be declared in an enclosing class"));
- } else {
- this.privateNameStack[this.privateNameStack.length - 1].used.push(node);
- }
-
- return node
-};
-
-// Parses yield expression inside generator.
-
-pp$4.parseYield = function(forInit) {
- if (!this.yieldPos) { this.yieldPos = this.start; }
-
- var node = this.startNode();
- this.next();
- if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) {
- node.delegate = false;
- node.argument = null;
- } else {
- node.delegate = this.eat(types.star);
- node.argument = this.parseMaybeAssign(forInit);
- }
- return this.finishNode(node, "YieldExpression")
-};
-
-pp$4.parseAwait = function(forInit) {
- if (!this.awaitPos) { this.awaitPos = this.start; }
-
- var node = this.startNode();
- this.next();
- node.argument = this.parseMaybeUnary(null, true, false, forInit);
- return this.finishNode(node, "AwaitExpression")
-};
-
-var pp$5 = Parser.prototype;
-
-// This function is used to raise exceptions on parse errors. It
-// takes an offset integer (into the current `input`) to indicate
-// the location of the error, attaches the position to the end
-// of the error message, and then raises a `SyntaxError` with that
-// message.
-
-pp$5.raise = function(pos, message) {
- var loc = getLineInfo(this.input, pos);
- message += " (" + loc.line + ":" + loc.column + ")";
- var err = new SyntaxError(message);
- err.pos = pos; err.loc = loc; err.raisedAt = this.pos;
- throw err
-};
-
-pp$5.raiseRecoverable = pp$5.raise;
-
-pp$5.curPosition = function() {
- if (this.options.locations) {
- return new Position(this.curLine, this.pos - this.lineStart)
- }
-};
-
-var pp$6 = Parser.prototype;
-
-var Scope = function Scope(flags) {
- this.flags = flags;
- // A list of var-declared names in the current lexical scope
- this.var = [];
- // A list of lexically-declared names in the current lexical scope
- this.lexical = [];
- // A list of lexically-declared FunctionDeclaration names in the current lexical scope
- this.functions = [];
- // A switch to disallow the identifier reference 'arguments'
- this.inClassFieldInit = false;
-};
-
-// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.
-
-pp$6.enterScope = function(flags) {
- this.scopeStack.push(new Scope(flags));
-};
-
-pp$6.exitScope = function() {
- this.scopeStack.pop();
-};
-
-// The spec says:
-// > At the top level of a function, or script, function declarations are
-// > treated like var declarations rather than like lexical declarations.
-pp$6.treatFunctionsAsVarInScope = function(scope) {
- return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)
-};
-
-pp$6.declareName = function(name, bindingType, pos) {
- var redeclared = false;
- if (bindingType === BIND_LEXICAL) {
- var scope = this.currentScope();
- redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;
- scope.lexical.push(name);
- if (this.inModule && (scope.flags & SCOPE_TOP))
- { delete this.undefinedExports[name]; }
- } else if (bindingType === BIND_SIMPLE_CATCH) {
- var scope$1 = this.currentScope();
- scope$1.lexical.push(name);
- } else if (bindingType === BIND_FUNCTION) {
- var scope$2 = this.currentScope();
- if (this.treatFunctionsAsVar)
- { redeclared = scope$2.lexical.indexOf(name) > -1; }
- else
- { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }
- scope$2.functions.push(name);
- } else {
- for (var i = this.scopeStack.length - 1; i >= 0; --i) {
- var scope$3 = this.scopeStack[i];
- if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||
- !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {
- redeclared = true;
- break
- }
- scope$3.var.push(name);
- if (this.inModule && (scope$3.flags & SCOPE_TOP))
- { delete this.undefinedExports[name]; }
- if (scope$3.flags & SCOPE_VAR) { break }
- }
- }
- if (redeclared) { this.raiseRecoverable(pos, ("Identifier '" + name + "' has already been declared")); }
-};
-
-pp$6.checkLocalExport = function(id) {
- // scope.functions must be empty as Module code is always strict.
- if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&
- this.scopeStack[0].var.indexOf(id.name) === -1) {
- this.undefinedExports[id.name] = id;
- }
-};
-
-pp$6.currentScope = function() {
- return this.scopeStack[this.scopeStack.length - 1]
-};
-
-pp$6.currentVarScope = function() {
- for (var i = this.scopeStack.length - 1;; i--) {
- var scope = this.scopeStack[i];
- if (scope.flags & SCOPE_VAR) { return scope }
- }
-};
-
-// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.
-pp$6.currentThisScope = function() {
- for (var i = this.scopeStack.length - 1;; i--) {
- var scope = this.scopeStack[i];
- if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }
- }
-};
-
-var Node = function Node(parser, pos, loc) {
- this.type = "";
- this.start = pos;
- this.end = 0;
- if (parser.options.locations)
- { this.loc = new SourceLocation(parser, loc); }
- if (parser.options.directSourceFile)
- { this.sourceFile = parser.options.directSourceFile; }
- if (parser.options.ranges)
- { this.range = [pos, 0]; }
-};
-
-// Start an AST node, attaching a start offset.
-
-var pp$7 = Parser.prototype;
-
-pp$7.startNode = function() {
- return new Node(this, this.start, this.startLoc)
-};
-
-pp$7.startNodeAt = function(pos, loc) {
- return new Node(this, pos, loc)
-};
-
-// Finish an AST node, adding `type` and `end` properties.
-
-function finishNodeAt(node, type, pos, loc) {
- node.type = type;
- node.end = pos;
- if (this.options.locations)
- { node.loc.end = loc; }
- if (this.options.ranges)
- { node.range[1] = pos; }
- return node
-}
-
-pp$7.finishNode = function(node, type) {
- return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)
-};
-
-// Finish node at given position
-
-pp$7.finishNodeAt = function(node, type, pos, loc) {
- return finishNodeAt.call(this, node, type, pos, loc)
-};
-
-pp$7.copyNode = function(node) {
- var newNode = new Node(this, node.start, this.startLoc);
- for (var prop in node) { newNode[prop] = node[prop]; }
- return newNode
-};
-
-// This file contains Unicode properties extracted from the ECMAScript
-// specification. The lists are extracted like so:
-// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)
-
-// #table-binary-unicode-properties
-var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS";
-var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";
-var ecma11BinaryProperties = ecma10BinaryProperties;
-var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict";
-var unicodeBinaryProperties = {
- 9: ecma9BinaryProperties,
- 10: ecma10BinaryProperties,
- 11: ecma11BinaryProperties,
- 12: ecma12BinaryProperties
-};
-
-// #table-unicode-general-category-values
-var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu";
-
-// #table-unicode-script-values
-var ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb";
-var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd";
-var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";
-var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi";
-var unicodeScriptValues = {
- 9: ecma9ScriptValues,
- 10: ecma10ScriptValues,
- 11: ecma11ScriptValues,
- 12: ecma12ScriptValues
-};
-
-var data = {};
-function buildUnicodeData(ecmaVersion) {
- var d = data[ecmaVersion] = {
- binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + " " + unicodeGeneralCategoryValues),
- nonBinary: {
- General_Category: wordsRegexp(unicodeGeneralCategoryValues),
- Script: wordsRegexp(unicodeScriptValues[ecmaVersion])
- }
- };
- d.nonBinary.Script_Extensions = d.nonBinary.Script;
-
- d.nonBinary.gc = d.nonBinary.General_Category;
- d.nonBinary.sc = d.nonBinary.Script;
- d.nonBinary.scx = d.nonBinary.Script_Extensions;
-}
-buildUnicodeData(9);
-buildUnicodeData(10);
-buildUnicodeData(11);
-buildUnicodeData(12);
-
-var pp$8 = Parser.prototype;
-
-var RegExpValidationState = function RegExpValidationState(parser) {
- this.parser = parser;
- this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : "");
- this.unicodeProperties = data[parser.options.ecmaVersion >= 12 ? 12 : parser.options.ecmaVersion];
- this.source = "";
- this.flags = "";
- this.start = 0;
- this.switchU = false;
- this.switchN = false;
- this.pos = 0;
- this.lastIntValue = 0;
- this.lastStringValue = "";
- this.lastAssertionIsQuantifiable = false;
- this.numCapturingParens = 0;
- this.maxBackReference = 0;
- this.groupNames = [];
- this.backReferenceNames = [];
-};
-
-RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {
- var unicode = flags.indexOf("u") !== -1;
- this.start = start | 0;
- this.source = pattern + "";
- this.flags = flags;
- this.switchU = unicode && this.parser.options.ecmaVersion >= 6;
- this.switchN = unicode && this.parser.options.ecmaVersion >= 9;
-};
-
-RegExpValidationState.prototype.raise = function raise (message) {
- this.parser.raiseRecoverable(this.start, ("Invalid regular expression: /" + (this.source) + "/: " + message));
-};
-
-// If u flag is given, this returns the code point at the index (it combines a surrogate pair).
-// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).
-RegExpValidationState.prototype.at = function at (i, forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- var s = this.source;
- var l = s.length;
- if (i >= l) {
- return -1
- }
- var c = s.charCodeAt(i);
- if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {
- return c
- }
- var next = s.charCodeAt(i + 1);
- return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c
-};
-
-RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- var s = this.source;
- var l = s.length;
- if (i >= l) {
- return l
- }
- var c = s.charCodeAt(i), next;
- if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||
- (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {
- return i + 1
- }
- return i + 2
-};
-
-RegExpValidationState.prototype.current = function current (forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- return this.at(this.pos, forceU)
-};
-
-RegExpValidationState.prototype.lookahead = function lookahead (forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- return this.at(this.nextIndex(this.pos, forceU), forceU)
-};
-
-RegExpValidationState.prototype.advance = function advance (forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- this.pos = this.nextIndex(this.pos, forceU);
-};
-
-RegExpValidationState.prototype.eat = function eat (ch, forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- if (this.current(forceU) === ch) {
- this.advance(forceU);
- return true
- }
- return false
-};
-
-function codePointToString(ch) {
- if (ch <= 0xFFFF) { return String.fromCharCode(ch) }
- ch -= 0x10000;
- return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)
-}
-
-/**
- * Validate the flags part of a given RegExpLiteral.
- *
- * @param {RegExpValidationState} state The state to validate RegExp.
- * @returns {void}
- */
-pp$8.validateRegExpFlags = function(state) {
- var validFlags = state.validFlags;
- var flags = state.flags;
-
- for (var i = 0; i < flags.length; i++) {
- var flag = flags.charAt(i);
- if (validFlags.indexOf(flag) === -1) {
- this.raise(state.start, "Invalid regular expression flag");
- }
- if (flags.indexOf(flag, i + 1) > -1) {
- this.raise(state.start, "Duplicate regular expression flag");
- }
- }
-};
-
-/**
- * Validate the pattern part of a given RegExpLiteral.
- *
- * @param {RegExpValidationState} state The state to validate RegExp.
- * @returns {void}
- */
-pp$8.validateRegExpPattern = function(state) {
- this.regexp_pattern(state);
-
- // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of
- // parsing contains a |GroupName|, reparse with the goal symbol
- // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*
- // exception if _P_ did not conform to the grammar, if any elements of _P_
- // were not matched by the parse, or if any Early Error conditions exist.
- if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {
- state.switchN = true;
- this.regexp_pattern(state);
- }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern
-pp$8.regexp_pattern = function(state) {
- state.pos = 0;
- state.lastIntValue = 0;
- state.lastStringValue = "";
- state.lastAssertionIsQuantifiable = false;
- state.numCapturingParens = 0;
- state.maxBackReference = 0;
- state.groupNames.length = 0;
- state.backReferenceNames.length = 0;
-
- this.regexp_disjunction(state);
-
- if (state.pos !== state.source.length) {
- // Make the same messages as V8.
- if (state.eat(0x29 /* ) */)) {
- state.raise("Unmatched ')'");
- }
- if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {
- state.raise("Lone quantifier brackets");
- }
- }
- if (state.maxBackReference > state.numCapturingParens) {
- state.raise("Invalid escape");
- }
- for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {
- var name = list[i];
-
- if (state.groupNames.indexOf(name) === -1) {
- state.raise("Invalid named capture referenced");
- }
- }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction
-pp$8.regexp_disjunction = function(state) {
- this.regexp_alternative(state);
- while (state.eat(0x7C /* | */)) {
- this.regexp_alternative(state);
- }
-
- // Make the same message as V8.
- if (this.regexp_eatQuantifier(state, true)) {
- state.raise("Nothing to repeat");
- }
- if (state.eat(0x7B /* { */)) {
- state.raise("Lone quantifier brackets");
- }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative
-pp$8.regexp_alternative = function(state) {
- while (state.pos < state.source.length && this.regexp_eatTerm(state))
- { }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term
-pp$8.regexp_eatTerm = function(state) {
- if (this.regexp_eatAssertion(state)) {
- // Handle `QuantifiableAssertion Quantifier` alternative.
- // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion
- // is a QuantifiableAssertion.
- if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {
- // Make the same message as V8.
- if (state.switchU) {
- state.raise("Invalid quantifier");
- }
- }
- return true
- }
-
- if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {
- this.regexp_eatQuantifier(state);
- return true
- }
-
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion
-pp$8.regexp_eatAssertion = function(state) {
- var start = state.pos;
- state.lastAssertionIsQuantifiable = false;
-
- // ^, $
- if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {
- return true
- }
-
- // \b \B
- if (state.eat(0x5C /* \ */)) {
- if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {
- return true
- }
- state.pos = start;
- }
-
- // Lookahead / Lookbehind
- if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {
- var lookbehind = false;
- if (this.options.ecmaVersion >= 9) {
- lookbehind = state.eat(0x3C /* < */);
- }
- if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {
- this.regexp_disjunction(state);
- if (!state.eat(0x29 /* ) */)) {
- state.raise("Unterminated group");
- }
- state.lastAssertionIsQuantifiable = !lookbehind;
- return true
- }
- }
-
- state.pos = start;
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier
-pp$8.regexp_eatQuantifier = function(state, noError) {
- if ( noError === void 0 ) noError = false;
-
- if (this.regexp_eatQuantifierPrefix(state, noError)) {
- state.eat(0x3F /* ? */);
- return true
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix
-pp$8.regexp_eatQuantifierPrefix = function(state, noError) {
- return (
- state.eat(0x2A /* * */) ||
- state.eat(0x2B /* + */) ||
- state.eat(0x3F /* ? */) ||
- this.regexp_eatBracedQuantifier(state, noError)
- )
-};
-pp$8.regexp_eatBracedQuantifier = function(state, noError) {
- var start = state.pos;
- if (state.eat(0x7B /* { */)) {
- var min = 0, max = -1;
- if (this.regexp_eatDecimalDigits(state)) {
- min = state.lastIntValue;
- if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {
- max = state.lastIntValue;
- }
- if (state.eat(0x7D /* } */)) {
- // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term
- if (max !== -1 && max < min && !noError) {
- state.raise("numbers out of order in {} quantifier");
- }
- return true
- }
- }
- if (state.switchU && !noError) {
- state.raise("Incomplete quantifier");
- }
- state.pos = start;
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom
-pp$8.regexp_eatAtom = function(state) {
- return (
- this.regexp_eatPatternCharacters(state) ||
- state.eat(0x2E /* . */) ||
- this.regexp_eatReverseSolidusAtomEscape(state) ||
- this.regexp_eatCharacterClass(state) ||
- this.regexp_eatUncapturingGroup(state) ||
- this.regexp_eatCapturingGroup(state)
- )
-};
-pp$8.regexp_eatReverseSolidusAtomEscape = function(state) {
- var start = state.pos;
- if (state.eat(0x5C /* \ */)) {
- if (this.regexp_eatAtomEscape(state)) {
- return true
- }
- state.pos = start;
- }
- return false
-};
-pp$8.regexp_eatUncapturingGroup = function(state) {
- var start = state.pos;
- if (state.eat(0x28 /* ( */)) {
- if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {
- this.regexp_disjunction(state);
- if (state.eat(0x29 /* ) */)) {
- return true
- }
- state.raise("Unterminated group");
- }
- state.pos = start;
- }
- return false
-};
-pp$8.regexp_eatCapturingGroup = function(state) {
- if (state.eat(0x28 /* ( */)) {
- if (this.options.ecmaVersion >= 9) {
- this.regexp_groupSpecifier(state);
- } else if (state.current() === 0x3F /* ? */) {
- state.raise("Invalid group");
- }
- this.regexp_disjunction(state);
- if (state.eat(0x29 /* ) */)) {
- state.numCapturingParens += 1;
- return true
- }
- state.raise("Unterminated group");
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom
-pp$8.regexp_eatExtendedAtom = function(state) {
- return (
- state.eat(0x2E /* . */) ||
- this.regexp_eatReverseSolidusAtomEscape(state) ||
- this.regexp_eatCharacterClass(state) ||
- this.regexp_eatUncapturingGroup(state) ||
- this.regexp_eatCapturingGroup(state) ||
- this.regexp_eatInvalidBracedQuantifier(state) ||
- this.regexp_eatExtendedPatternCharacter(state)
- )
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier
-pp$8.regexp_eatInvalidBracedQuantifier = function(state) {
- if (this.regexp_eatBracedQuantifier(state, true)) {
- state.raise("Nothing to repeat");
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter
-pp$8.regexp_eatSyntaxCharacter = function(state) {
- var ch = state.current();
- if (isSyntaxCharacter(ch)) {
- state.lastIntValue = ch;
- state.advance();
- return true
- }
- return false
-};
-function isSyntaxCharacter(ch) {
- return (
- ch === 0x24 /* $ */ ||
- ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||
- ch === 0x2E /* . */ ||
- ch === 0x3F /* ? */ ||
- ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||
- ch >= 0x7B /* { */ && ch <= 0x7D /* } */
- )
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter
-// But eat eager.
-pp$8.regexp_eatPatternCharacters = function(state) {
- var start = state.pos;
- var ch = 0;
- while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {
- state.advance();
- }
- return state.pos !== start
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter
-pp$8.regexp_eatExtendedPatternCharacter = function(state) {
- var ch = state.current();
- if (
- ch !== -1 &&
- ch !== 0x24 /* $ */ &&
- !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&
- ch !== 0x2E /* . */ &&
- ch !== 0x3F /* ? */ &&
- ch !== 0x5B /* [ */ &&
- ch !== 0x5E /* ^ */ &&
- ch !== 0x7C /* | */
- ) {
- state.advance();
- return true
- }
- return false
-};
-
-// GroupSpecifier ::
-// [empty]
-// `?` GroupName
-pp$8.regexp_groupSpecifier = function(state) {
- if (state.eat(0x3F /* ? */)) {
- if (this.regexp_eatGroupName(state)) {
- if (state.groupNames.indexOf(state.lastStringValue) !== -1) {
- state.raise("Duplicate capture group name");
- }
- state.groupNames.push(state.lastStringValue);
- return
- }
- state.raise("Invalid group");
- }
-};
-
-// GroupName ::
-// `<` RegExpIdentifierName `>`
-// Note: this updates `state.lastStringValue` property with the eaten name.
-pp$8.regexp_eatGroupName = function(state) {
- state.lastStringValue = "";
- if (state.eat(0x3C /* < */)) {
- if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {
- return true
- }
- state.raise("Invalid capture group name");
- }
- return false
-};
-
-// RegExpIdentifierName ::
-// RegExpIdentifierStart
-// RegExpIdentifierName RegExpIdentifierPart
-// Note: this updates `state.lastStringValue` property with the eaten name.
-pp$8.regexp_eatRegExpIdentifierName = function(state) {
- state.lastStringValue = "";
- if (this.regexp_eatRegExpIdentifierStart(state)) {
- state.lastStringValue += codePointToString(state.lastIntValue);
- while (this.regexp_eatRegExpIdentifierPart(state)) {
- state.lastStringValue += codePointToString(state.lastIntValue);
- }
- return true
- }
- return false
-};
-
-// RegExpIdentifierStart ::
-// UnicodeIDStart
-// `$`
-// `_`
-// `\` RegExpUnicodeEscapeSequence[+U]
-pp$8.regexp_eatRegExpIdentifierStart = function(state) {
- var start = state.pos;
- var forceU = this.options.ecmaVersion >= 11;
- var ch = state.current(forceU);
- state.advance(forceU);
-
- if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
- ch = state.lastIntValue;
- }
- if (isRegExpIdentifierStart(ch)) {
- state.lastIntValue = ch;
- return true
- }
-
- state.pos = start;
- return false
-};
-function isRegExpIdentifierStart(ch) {
- return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */
-}
-
-// RegExpIdentifierPart ::
-// UnicodeIDContinue
-// `$`
-// `_`
-// `\` RegExpUnicodeEscapeSequence[+U]
-// <ZWNJ>
-// <ZWJ>
-pp$8.regexp_eatRegExpIdentifierPart = function(state) {
- var start = state.pos;
- var forceU = this.options.ecmaVersion >= 11;
- var ch = state.current(forceU);
- state.advance(forceU);
-
- if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
- ch = state.lastIntValue;
- }
- if (isRegExpIdentifierPart(ch)) {
- state.lastIntValue = ch;
- return true
- }
-
- state.pos = start;
- return false
-};
-function isRegExpIdentifierPart(ch) {
- return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape
-pp$8.regexp_eatAtomEscape = function(state) {
- if (
- this.regexp_eatBackReference(state) ||
- this.regexp_eatCharacterClassEscape(state) ||
- this.regexp_eatCharacterEscape(state) ||
- (state.switchN && this.regexp_eatKGroupName(state))
- ) {
- return true
- }
- if (state.switchU) {
- // Make the same message as V8.
- if (state.current() === 0x63 /* c */) {
- state.raise("Invalid unicode escape");
- }
- state.raise("Invalid escape");
- }
- return false
-};
-pp$8.regexp_eatBackReference = function(state) {
- var start = state.pos;
- if (this.regexp_eatDecimalEscape(state)) {
- var n = state.lastIntValue;
- if (state.switchU) {
- // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape
- if (n > state.maxBackReference) {
- state.maxBackReference = n;
- }
- return true
- }
- if (n <= state.numCapturingParens) {
- return true
- }
- state.pos = start;
- }
- return false
-};
-pp$8.regexp_eatKGroupName = function(state) {
- if (state.eat(0x6B /* k */)) {
- if (this.regexp_eatGroupName(state)) {
- state.backReferenceNames.push(state.lastStringValue);
- return true
- }
- state.raise("Invalid named reference");
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape
-pp$8.regexp_eatCharacterEscape = function(state) {
- return (
- this.regexp_eatControlEscape(state) ||
- this.regexp_eatCControlLetter(state) ||
- this.regexp_eatZero(state) ||
- this.regexp_eatHexEscapeSequence(state) ||
- this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||
- (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||
- this.regexp_eatIdentityEscape(state)
- )
-};
-pp$8.regexp_eatCControlLetter = function(state) {
- var start = state.pos;
- if (state.eat(0x63 /* c */)) {
- if (this.regexp_eatControlLetter(state)) {
- return true
- }
- state.pos = start;
- }
- return false
-};
-pp$8.regexp_eatZero = function(state) {
- if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {
- state.lastIntValue = 0;
- state.advance();
- return true
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape
-pp$8.regexp_eatControlEscape = function(state) {
- var ch = state.current();
- if (ch === 0x74 /* t */) {
- state.lastIntValue = 0x09; /* \t */
- state.advance();
- return true
- }
- if (ch === 0x6E /* n */) {
- state.lastIntValue = 0x0A; /* \n */
- state.advance();
- return true
- }
- if (ch === 0x76 /* v */) {
- state.lastIntValue = 0x0B; /* \v */
- state.advance();
- return true
- }
- if (ch === 0x66 /* f */) {
- state.lastIntValue = 0x0C; /* \f */
- state.advance();
- return true
- }
- if (ch === 0x72 /* r */) {
- state.lastIntValue = 0x0D; /* \r */
- state.advance();
- return true
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter
-pp$8.regexp_eatControlLetter = function(state) {
- var ch = state.current();
- if (isControlLetter(ch)) {
- state.lastIntValue = ch % 0x20;
- state.advance();
- return true
- }
- return false
-};
-function isControlLetter(ch) {
- return (
- (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||
- (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)
- )
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence
-pp$8.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- var start = state.pos;
- var switchU = forceU || state.switchU;
-
- if (state.eat(0x75 /* u */)) {
- if (this.regexp_eatFixedHexDigits(state, 4)) {
- var lead = state.lastIntValue;
- if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {
- var leadSurrogateEnd = state.pos;
- if (state.eat(0x5C /* \ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {
- var trail = state.lastIntValue;
- if (trail >= 0xDC00 && trail <= 0xDFFF) {
- state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
- return true
- }
- }
- state.pos = leadSurrogateEnd;
- state.lastIntValue = lead;
- }
- return true
- }
- if (
- switchU &&
- state.eat(0x7B /* { */) &&
- this.regexp_eatHexDigits(state) &&
- state.eat(0x7D /* } */) &&
- isValidUnicode(state.lastIntValue)
- ) {
- return true
- }
- if (switchU) {
- state.raise("Invalid unicode escape");
- }
- state.pos = start;
- }
-
- return false
-};
-function isValidUnicode(ch) {
- return ch >= 0 && ch <= 0x10FFFF
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape
-pp$8.regexp_eatIdentityEscape = function(state) {
- if (state.switchU) {
- if (this.regexp_eatSyntaxCharacter(state)) {
- return true
- }
- if (state.eat(0x2F /* / */)) {
- state.lastIntValue = 0x2F; /* / */
- return true
- }
- return false
- }
-
- var ch = state.current();
- if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {
- state.lastIntValue = ch;
- state.advance();
- return true
- }
-
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape
-pp$8.regexp_eatDecimalEscape = function(state) {
- state.lastIntValue = 0;
- var ch = state.current();
- if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {
- do {
- state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
- state.advance();
- } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)
- return true
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape
-pp$8.regexp_eatCharacterClassEscape = function(state) {
- var ch = state.current();
-
- if (isCharacterClassEscape(ch)) {
- state.lastIntValue = -1;
- state.advance();
- return true
- }
-
- if (
- state.switchU &&
- this.options.ecmaVersion >= 9 &&
- (ch === 0x50 /* P */ || ch === 0x70 /* p */)
- ) {
- state.lastIntValue = -1;
- state.advance();
- if (
- state.eat(0x7B /* { */) &&
- this.regexp_eatUnicodePropertyValueExpression(state) &&
- state.eat(0x7D /* } */)
- ) {
- return true
- }
- state.raise("Invalid property name");
- }
-
- return false
-};
-function isCharacterClassEscape(ch) {
- return (
- ch === 0x64 /* d */ ||
- ch === 0x44 /* D */ ||
- ch === 0x73 /* s */ ||
- ch === 0x53 /* S */ ||
- ch === 0x77 /* w */ ||
- ch === 0x57 /* W */
- )
-}
-
-// UnicodePropertyValueExpression ::
-// UnicodePropertyName `=` UnicodePropertyValue
-// LoneUnicodePropertyNameOrValue
-pp$8.regexp_eatUnicodePropertyValueExpression = function(state) {
- var start = state.pos;
-
- // UnicodePropertyName `=` UnicodePropertyValue
- if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {
- var name = state.lastStringValue;
- if (this.regexp_eatUnicodePropertyValue(state)) {
- var value = state.lastStringValue;
- this.regexp_validateUnicodePropertyNameAndValue(state, name, value);
- return true
- }
- }
- state.pos = start;
-
- // LoneUnicodePropertyNameOrValue
- if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {
- var nameOrValue = state.lastStringValue;
- this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);
- return true
- }
- return false
-};
-pp$8.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {
- if (!has$1(state.unicodeProperties.nonBinary, name))
- { state.raise("Invalid property name"); }
- if (!state.unicodeProperties.nonBinary[name].test(value))
- { state.raise("Invalid property value"); }
-};
-pp$8.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {
- if (!state.unicodeProperties.binary.test(nameOrValue))
- { state.raise("Invalid property name"); }
-};
-
-// UnicodePropertyName ::
-// UnicodePropertyNameCharacters
-pp$8.regexp_eatUnicodePropertyName = function(state) {
- var ch = 0;
- state.lastStringValue = "";
- while (isUnicodePropertyNameCharacter(ch = state.current())) {
- state.lastStringValue += codePointToString(ch);
- state.advance();
- }
- return state.lastStringValue !== ""
-};
-function isUnicodePropertyNameCharacter(ch) {
- return isControlLetter(ch) || ch === 0x5F /* _ */
-}
-
-// UnicodePropertyValue ::
-// UnicodePropertyValueCharacters
-pp$8.regexp_eatUnicodePropertyValue = function(state) {
- var ch = 0;
- state.lastStringValue = "";
- while (isUnicodePropertyValueCharacter(ch = state.current())) {
- state.lastStringValue += codePointToString(ch);
- state.advance();
- }
- return state.lastStringValue !== ""
-};
-function isUnicodePropertyValueCharacter(ch) {
- return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)
-}
-
-// LoneUnicodePropertyNameOrValue ::
-// UnicodePropertyValueCharacters
-pp$8.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {
- return this.regexp_eatUnicodePropertyValue(state)
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass
-pp$8.regexp_eatCharacterClass = function(state) {
- if (state.eat(0x5B /* [ */)) {
- state.eat(0x5E /* ^ */);
- this.regexp_classRanges(state);
- if (state.eat(0x5D /* ] */)) {
- return true
- }
- // Unreachable since it threw "unterminated regular expression" error before.
- state.raise("Unterminated character class");
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges
-// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges
-// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash
-pp$8.regexp_classRanges = function(state) {
- while (this.regexp_eatClassAtom(state)) {
- var left = state.lastIntValue;
- if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {
- var right = state.lastIntValue;
- if (state.switchU && (left === -1 || right === -1)) {
- state.raise("Invalid character class");
- }
- if (left !== -1 && right !== -1 && left > right) {
- state.raise("Range out of order in character class");
- }
- }
- }
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom
-// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash
-pp$8.regexp_eatClassAtom = function(state) {
- var start = state.pos;
-
- if (state.eat(0x5C /* \ */)) {
- if (this.regexp_eatClassEscape(state)) {
- return true
- }
- if (state.switchU) {
- // Make the same message as V8.
- var ch$1 = state.current();
- if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {
- state.raise("Invalid class escape");
- }
- state.raise("Invalid escape");
- }
- state.pos = start;
- }
-
- var ch = state.current();
- if (ch !== 0x5D /* ] */) {
- state.lastIntValue = ch;
- state.advance();
- return true
- }
-
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape
-pp$8.regexp_eatClassEscape = function(state) {
- var start = state.pos;
-
- if (state.eat(0x62 /* b */)) {
- state.lastIntValue = 0x08; /* <BS> */
- return true
- }
-
- if (state.switchU && state.eat(0x2D /* - */)) {
- state.lastIntValue = 0x2D; /* - */
- return true
- }
-
- if (!state.switchU && state.eat(0x63 /* c */)) {
- if (this.regexp_eatClassControlLetter(state)) {
- return true
- }
- state.pos = start;
- }
-
- return (
- this.regexp_eatCharacterClassEscape(state) ||
- this.regexp_eatCharacterEscape(state)
- )
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter
-pp$8.regexp_eatClassControlLetter = function(state) {
- var ch = state.current();
- if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {
- state.lastIntValue = ch % 0x20;
- state.advance();
- return true
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
-pp$8.regexp_eatHexEscapeSequence = function(state) {
- var start = state.pos;
- if (state.eat(0x78 /* x */)) {
- if (this.regexp_eatFixedHexDigits(state, 2)) {
- return true
- }
- if (state.switchU) {
- state.raise("Invalid escape");
- }
- state.pos = start;
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits
-pp$8.regexp_eatDecimalDigits = function(state) {
- var start = state.pos;
- var ch = 0;
- state.lastIntValue = 0;
- while (isDecimalDigit(ch = state.current())) {
- state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
- state.advance();
- }
- return state.pos !== start
-};
-function isDecimalDigit(ch) {
- return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits
-pp$8.regexp_eatHexDigits = function(state) {
- var start = state.pos;
- var ch = 0;
- state.lastIntValue = 0;
- while (isHexDigit(ch = state.current())) {
- state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
- state.advance();
- }
- return state.pos !== start
-};
-function isHexDigit(ch) {
- return (
- (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||
- (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||
- (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)
- )
-}
-function hexToInt(ch) {
- if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {
- return 10 + (ch - 0x41 /* A */)
- }
- if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {
- return 10 + (ch - 0x61 /* a */)
- }
- return ch - 0x30 /* 0 */
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence
-// Allows only 0-377(octal) i.e. 0-255(decimal).
-pp$8.regexp_eatLegacyOctalEscapeSequence = function(state) {
- if (this.regexp_eatOctalDigit(state)) {
- var n1 = state.lastIntValue;
- if (this.regexp_eatOctalDigit(state)) {
- var n2 = state.lastIntValue;
- if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {
- state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;
- } else {
- state.lastIntValue = n1 * 8 + n2;
- }
- } else {
- state.lastIntValue = n1;
- }
- return true
- }
- return false
-};
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit
-pp$8.regexp_eatOctalDigit = function(state) {
- var ch = state.current();
- if (isOctalDigit(ch)) {
- state.lastIntValue = ch - 0x30; /* 0 */
- state.advance();
- return true
- }
- state.lastIntValue = 0;
- return false
-};
-function isOctalDigit(ch) {
- return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */
-}
-
-// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits
-// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit
-// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
-pp$8.regexp_eatFixedHexDigits = function(state, length) {
- var start = state.pos;
- state.lastIntValue = 0;
- for (var i = 0; i < length; ++i) {
- var ch = state.current();
- if (!isHexDigit(ch)) {
- state.pos = start;
- return false
- }
- state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
- state.advance();
- }
- return true
-};
-
-// Object type used to represent tokens. Note that normally, tokens
-// simply exist as properties on the parser object. This is only
-// used for the onToken callback and the external tokenizer.
-
-var Token = function Token(p) {
- this.type = p.type;
- this.value = p.value;
- this.start = p.start;
- this.end = p.end;
- if (p.options.locations)
- { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }
- if (p.options.ranges)
- { this.range = [p.start, p.end]; }
-};
-
-// ## Tokenizer
-
-var pp$9 = Parser.prototype;
-
-// Move to the next token
-
-pp$9.next = function(ignoreEscapeSequenceInKeyword) {
- if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)
- { this.raiseRecoverable(this.start, "Escape sequence in keyword " + this.type.keyword); }
- if (this.options.onToken)
- { this.options.onToken(new Token(this)); }
-
- this.lastTokEnd = this.end;
- this.lastTokStart = this.start;
- this.lastTokEndLoc = this.endLoc;
- this.lastTokStartLoc = this.startLoc;
- this.nextToken();
-};
-
-pp$9.getToken = function() {
- this.next();
- return new Token(this)
-};
-
-// If we're in an ES6 environment, make parsers iterable
-if (typeof Symbol !== "undefined")
- { pp$9[Symbol.iterator] = function() {
- var this$1$1 = this;
-
- return {
- next: function () {
- var token = this$1$1.getToken();
- return {
- done: token.type === types.eof,
- value: token
- }
- }
- }
- }; }
-
-// Toggle strict mode. Re-reads the next number or string to please
-// pedantic tests (`"use strict"; 010;` should fail).
-
-// Read a single token, updating the parser object's token-related
-// properties.
-
-pp$9.nextToken = function() {
- var curContext = this.curContext();
- if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }
-
- this.start = this.pos;
- if (this.options.locations) { this.startLoc = this.curPosition(); }
- if (this.pos >= this.input.length) { return this.finishToken(types.eof) }
-
- if (curContext.override) { return curContext.override(this) }
- else { this.readToken(this.fullCharCodeAtPos()); }
-};
-
-pp$9.readToken = function(code) {
- // Identifier or keyword. '\uXXXX' sequences are allowed in
- // identifiers, so '\' also dispatches to that.
- if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */)
- { return this.readWord() }
-
- return this.getTokenFromCode(code)
-};
-
-pp$9.fullCharCodeAtPos = function() {
- var code = this.input.charCodeAt(this.pos);
- if (code <= 0xd7ff || code >= 0xdc00) { return code }
- var next = this.input.charCodeAt(this.pos + 1);
- return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00
-};
-
-pp$9.skipBlockComment = function() {
- var startLoc = this.options.onComment && this.curPosition();
- var start = this.pos, end = this.input.indexOf("*/", this.pos += 2);
- if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); }
- this.pos = end + 2;
- if (this.options.locations) {
- lineBreakG.lastIndex = start;
- var match;
- while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {
- ++this.curLine;
- this.lineStart = match.index + match[0].length;
- }
- }
- if (this.options.onComment)
- { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,
- startLoc, this.curPosition()); }
-};
-
-pp$9.skipLineComment = function(startSkip) {
- var start = this.pos;
- var startLoc = this.options.onComment && this.curPosition();
- var ch = this.input.charCodeAt(this.pos += startSkip);
- while (this.pos < this.input.length && !isNewLine(ch)) {
- ch = this.input.charCodeAt(++this.pos);
- }
- if (this.options.onComment)
- { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,
- startLoc, this.curPosition()); }
-};
-
-// Called at the start of the parse and after every token. Skips
-// whitespace and comments, and.
-
-pp$9.skipSpace = function() {
- loop: while (this.pos < this.input.length) {
- var ch = this.input.charCodeAt(this.pos);
- switch (ch) {
- case 32: case 160: // ' '
- ++this.pos;
- break
- case 13:
- if (this.input.charCodeAt(this.pos + 1) === 10) {
- ++this.pos;
- }
- case 10: case 8232: case 8233:
- ++this.pos;
- if (this.options.locations) {
- ++this.curLine;
- this.lineStart = this.pos;
- }
- break
- case 47: // '/'
- switch (this.input.charCodeAt(this.pos + 1)) {
- case 42: // '*'
- this.skipBlockComment();
- break
- case 47:
- this.skipLineComment(2);
- break
- default:
- break loop
- }
- break
- default:
- if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {
- ++this.pos;
- } else {
- break loop
- }
- }
- }
-};
-
-// Called at the end of every token. Sets `end`, `val`, and
-// maintains `context` and `exprAllowed`, and skips the space after
-// the token, so that the next one's `start` will point at the
-// right position.
-
-pp$9.finishToken = function(type, val) {
- this.end = this.pos;
- if (this.options.locations) { this.endLoc = this.curPosition(); }
- var prevType = this.type;
- this.type = type;
- this.value = val;
-
- this.updateContext(prevType);
-};
-
-// ### Token reading
-
-// This is the function that is called to fetch the next token. It
-// is somewhat obscure, because it works in character codes rather
-// than characters, and because operator parsing has been inlined
-// into it.
-//
-// All in the name of speed.
-//
-pp$9.readToken_dot = function() {
- var next = this.input.charCodeAt(this.pos + 1);
- if (next >= 48 && next <= 57) { return this.readNumber(true) }
- var next2 = this.input.charCodeAt(this.pos + 2);
- if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'
- this.pos += 3;
- return this.finishToken(types.ellipsis)
- } else {
- ++this.pos;
- return this.finishToken(types.dot)
- }
-};
-
-pp$9.readToken_slash = function() { // '/'
- var next = this.input.charCodeAt(this.pos + 1);
- if (this.exprAllowed) { ++this.pos; return this.readRegexp() }
- if (next === 61) { return this.finishOp(types.assign, 2) }
- return this.finishOp(types.slash, 1)
-};
-
-pp$9.readToken_mult_modulo_exp = function(code) { // '%*'
- var next = this.input.charCodeAt(this.pos + 1);
- var size = 1;
- var tokentype = code === 42 ? types.star : types.modulo;
-
- // exponentiation operator ** and **=
- if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {
- ++size;
- tokentype = types.starstar;
- next = this.input.charCodeAt(this.pos + 2);
- }
-
- if (next === 61) { return this.finishOp(types.assign, size + 1) }
- return this.finishOp(tokentype, size)
-};
-
-pp$9.readToken_pipe_amp = function(code) { // '|&'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === code) {
- if (this.options.ecmaVersion >= 12) {
- var next2 = this.input.charCodeAt(this.pos + 2);
- if (next2 === 61) { return this.finishOp(types.assign, 3) }
- }
- return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2)
- }
- if (next === 61) { return this.finishOp(types.assign, 2) }
- return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1)
-};
-
-pp$9.readToken_caret = function() { // '^'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === 61) { return this.finishOp(types.assign, 2) }
- return this.finishOp(types.bitwiseXOR, 1)
-};
-
-pp$9.readToken_plus_min = function(code) { // '+-'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === code) {
- if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&
- (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {
- // A `-->` line comment
- this.skipLineComment(3);
- this.skipSpace();
- return this.nextToken()
- }
- return this.finishOp(types.incDec, 2)
- }
- if (next === 61) { return this.finishOp(types.assign, 2) }
- return this.finishOp(types.plusMin, 1)
-};
-
-pp$9.readToken_lt_gt = function(code) { // '<>'
- var next = this.input.charCodeAt(this.pos + 1);
- var size = 1;
- if (next === code) {
- size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;
- if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) }
- return this.finishOp(types.bitShift, size)
- }
- if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&
- this.input.charCodeAt(this.pos + 3) === 45) {
- // `<!--`, an XML-style comment that should be interpreted as a line comment
- this.skipLineComment(4);
- this.skipSpace();
- return this.nextToken()
- }
- if (next === 61) { size = 2; }
- return this.finishOp(types.relational, size)
-};
-
-pp$9.readToken_eq_excl = function(code) { // '=!'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === 61) { return this.finishOp(types.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }
- if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'
- this.pos += 2;
- return this.finishToken(types.arrow)
- }
- return this.finishOp(code === 61 ? types.eq : types.prefix, 1)
-};
-
-pp$9.readToken_question = function() { // '?'
- var ecmaVersion = this.options.ecmaVersion;
- if (ecmaVersion >= 11) {
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === 46) {
- var next2 = this.input.charCodeAt(this.pos + 2);
- if (next2 < 48 || next2 > 57) { return this.finishOp(types.questionDot, 2) }
- }
- if (next === 63) {
- if (ecmaVersion >= 12) {
- var next2$1 = this.input.charCodeAt(this.pos + 2);
- if (next2$1 === 61) { return this.finishOp(types.assign, 3) }
- }
- return this.finishOp(types.coalesce, 2)
- }
- }
- return this.finishOp(types.question, 1)
-};
-
-pp$9.readToken_numberSign = function() { // '#'
- var ecmaVersion = this.options.ecmaVersion;
- var code = 35; // '#'
- if (ecmaVersion >= 13) {
- ++this.pos;
- code = this.fullCharCodeAtPos();
- if (isIdentifierStart(code, true) || code === 92 /* '\' */) {
- return this.finishToken(types.privateId, this.readWord1())
- }
- }
-
- this.raise(this.pos, "Unexpected character '" + codePointToString$1(code) + "'");
-};
-
-pp$9.getTokenFromCode = function(code) {
- switch (code) {
- // The interpretation of a dot depends on whether it is followed
- // by a digit or another two dots.
- case 46: // '.'
- return this.readToken_dot()
-
- // Punctuation tokens.
- case 40: ++this.pos; return this.finishToken(types.parenL)
- case 41: ++this.pos; return this.finishToken(types.parenR)
- case 59: ++this.pos; return this.finishToken(types.semi)
- case 44: ++this.pos; return this.finishToken(types.comma)
- case 91: ++this.pos; return this.finishToken(types.bracketL)
- case 93: ++this.pos; return this.finishToken(types.bracketR)
- case 123: ++this.pos; return this.finishToken(types.braceL)
- case 125: ++this.pos; return this.finishToken(types.braceR)
- case 58: ++this.pos; return this.finishToken(types.colon)
-
- case 96: // '`'
- if (this.options.ecmaVersion < 6) { break }
- ++this.pos;
- return this.finishToken(types.backQuote)
-
- case 48: // '0'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number
- if (this.options.ecmaVersion >= 6) {
- if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number
- if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number
- }
-
- // Anything else beginning with a digit is an integer, octal
- // number, or float.
- case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9
- return this.readNumber(false)
-
- // Quotes produce strings.
- case 34: case 39: // '"', "'"
- return this.readString(code)
-
- // Operators are parsed inline in tiny state machines. '=' (61) is
- // often referred to. `finishOp` simply skips the amount of
- // characters it is given as second argument, and returns a token
- // of the type given by its first argument.
-
- case 47: // '/'
- return this.readToken_slash()
-
- case 37: case 42: // '%*'
- return this.readToken_mult_modulo_exp(code)
-
- case 124: case 38: // '|&'
- return this.readToken_pipe_amp(code)
-
- case 94: // '^'
- return this.readToken_caret()
-
- case 43: case 45: // '+-'
- return this.readToken_plus_min(code)
-
- case 60: case 62: // '<>'
- return this.readToken_lt_gt(code)
-
- case 61: case 33: // '=!'
- return this.readToken_eq_excl(code)
-
- case 63: // '?'
- return this.readToken_question()
-
- case 126: // '~'
- return this.finishOp(types.prefix, 1)
-
- case 35: // '#'
- return this.readToken_numberSign()
- }
-
- this.raise(this.pos, "Unexpected character '" + codePointToString$1(code) + "'");
-};
-
-pp$9.finishOp = function(type, size) {
- var str = this.input.slice(this.pos, this.pos + size);
- this.pos += size;
- return this.finishToken(type, str)
-};
-
-pp$9.readRegexp = function() {
- var escaped, inClass, start = this.pos;
- for (;;) {
- if (this.pos >= this.input.length) { this.raise(start, "Unterminated regular expression"); }
- var ch = this.input.charAt(this.pos);
- if (lineBreak.test(ch)) { this.raise(start, "Unterminated regular expression"); }
- if (!escaped) {
- if (ch === "[") { inClass = true; }
- else if (ch === "]" && inClass) { inClass = false; }
- else if (ch === "/" && !inClass) { break }
- escaped = ch === "\\";
- } else { escaped = false; }
- ++this.pos;
- }
- var pattern = this.input.slice(start, this.pos);
- ++this.pos;
- var flagsStart = this.pos;
- var flags = this.readWord1();
- if (this.containsEsc) { this.unexpected(flagsStart); }
-
- // Validate pattern
- var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));
- state.reset(start, pattern, flags);
- this.validateRegExpFlags(state);
- this.validateRegExpPattern(state);
-
- // Create Literal#value property value.
- var value = null;
- try {
- value = new RegExp(pattern, flags);
- } catch (e) {
- // ESTree requires null if it failed to instantiate RegExp object.
- // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral
- }
-
- return this.finishToken(types.regexp, {pattern: pattern, flags: flags, value: value})
-};
-
-// Read an integer in the given radix. Return null if zero digits
-// were read, the integer value otherwise. When `len` is given, this
-// will return `null` unless the integer has exactly `len` digits.
-
-pp$9.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {
- // `len` is used for character escape sequences. In that case, disallow separators.
- var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;
-
- // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)
- // and isn't fraction part nor exponent part. In that case, if the first digit
- // is zero then disallow separators.
- var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;
-
- var start = this.pos, total = 0, lastCode = 0;
- for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {
- var code = this.input.charCodeAt(this.pos), val = (void 0);
-
- if (allowSeparators && code === 95) {
- if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, "Numeric separator is not allowed in legacy octal numeric literals"); }
- if (lastCode === 95) { this.raiseRecoverable(this.pos, "Numeric separator must be exactly one underscore"); }
- if (i === 0) { this.raiseRecoverable(this.pos, "Numeric separator is not allowed at the first of digits"); }
- lastCode = code;
- continue
- }
-
- if (code >= 97) { val = code - 97 + 10; } // a
- else if (code >= 65) { val = code - 65 + 10; } // A
- else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9
- else { val = Infinity; }
- if (val >= radix) { break }
- lastCode = code;
- total = total * radix + val;
- }
-
- if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, "Numeric separator is not allowed at the last of digits"); }
- if (this.pos === start || len != null && this.pos - start !== len) { return null }
-
- return total
-};
-
-function stringToNumber(str, isLegacyOctalNumericLiteral) {
- if (isLegacyOctalNumericLiteral) {
- return parseInt(str, 8)
- }
-
- // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.
- return parseFloat(str.replace(/_/g, ""))
-}
-
-function stringToBigInt(str) {
- if (typeof BigInt !== "function") {
- return null
- }
-
- // `BigInt(value)` throws syntax error if the string contains numeric separators.
- return BigInt(str.replace(/_/g, ""))
-}
-
-pp$9.readRadixNumber = function(radix) {
- var start = this.pos;
- this.pos += 2; // 0x
- var val = this.readInt(radix);
- if (val == null) { this.raise(this.start + 2, "Expected number in radix " + radix); }
- if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {
- val = stringToBigInt(this.input.slice(start, this.pos));
- ++this.pos;
- } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
- return this.finishToken(types.num, val)
-};
-
-// Read an integer, octal integer, or floating-point number.
-
-pp$9.readNumber = function(startsWithDot) {
- var start = this.pos;
- if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, "Invalid number"); }
- var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;
- if (octal && this.strict) { this.raise(start, "Invalid number"); }
- var next = this.input.charCodeAt(this.pos);
- if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {
- var val$1 = stringToBigInt(this.input.slice(start, this.pos));
- ++this.pos;
- if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
- return this.finishToken(types.num, val$1)
- }
- if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }
- if (next === 46 && !octal) { // '.'
- ++this.pos;
- this.readInt(10);
- next = this.input.charCodeAt(this.pos);
- }
- if ((next === 69 || next === 101) && !octal) { // 'eE'
- next = this.input.charCodeAt(++this.pos);
- if (next === 43 || next === 45) { ++this.pos; } // '+-'
- if (this.readInt(10) === null) { this.raise(start, "Invalid number"); }
- }
- if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-
- var val = stringToNumber(this.input.slice(start, this.pos), octal);
- return this.finishToken(types.num, val)
-};
-
-// Read a string value, interpreting backslash-escapes.
-
-pp$9.readCodePoint = function() {
- var ch = this.input.charCodeAt(this.pos), code;
-
- if (ch === 123) { // '{'
- if (this.options.ecmaVersion < 6) { this.unexpected(); }
- var codePos = ++this.pos;
- code = this.readHexChar(this.input.indexOf("}", this.pos) - this.pos);
- ++this.pos;
- if (code > 0x10FFFF) { this.invalidStringToken(codePos, "Code point out of bounds"); }
- } else {
- code = this.readHexChar(4);
- }
- return code
-};
-
-function codePointToString$1(code) {
- // UTF-16 Decoding
- if (code <= 0xFFFF) { return String.fromCharCode(code) }
- code -= 0x10000;
- return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)
-}
-
-pp$9.readString = function(quote) {
- var out = "", chunkStart = ++this.pos;
- for (;;) {
- if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated string constant"); }
- var ch = this.input.charCodeAt(this.pos);
- if (ch === quote) { break }
- if (ch === 92) { // '\'
- out += this.input.slice(chunkStart, this.pos);
- out += this.readEscapedChar(false);
- chunkStart = this.pos;
- } else if (ch === 0x2028 || ch === 0x2029) {
- if (this.options.ecmaVersion < 10) { this.raise(this.start, "Unterminated string constant"); }
- ++this.pos;
- if (this.options.locations) {
- this.curLine++;
- this.lineStart = this.pos;
- }
- } else {
- if (isNewLine(ch)) { this.raise(this.start, "Unterminated string constant"); }
- ++this.pos;
- }
- }
- out += this.input.slice(chunkStart, this.pos++);
- return this.finishToken(types.string, out)
-};
-
-// Reads template string tokens.
-
-var INVALID_TEMPLATE_ESCAPE_ERROR = {};
-
-pp$9.tryReadTemplateToken = function() {
- this.inTemplateElement = true;
- try {
- this.readTmplToken();
- } catch (err) {
- if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {
- this.readInvalidTemplateToken();
- } else {
- throw err
- }
- }
-
- this.inTemplateElement = false;
-};
-
-pp$9.invalidStringToken = function(position, message) {
- if (this.inTemplateElement && this.options.ecmaVersion >= 9) {
- throw INVALID_TEMPLATE_ESCAPE_ERROR
- } else {
- this.raise(position, message);
- }
-};
-
-pp$9.readTmplToken = function() {
- var out = "", chunkStart = this.pos;
- for (;;) {
- if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated template"); }
- var ch = this.input.charCodeAt(this.pos);
- if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'
- if (this.pos === this.start && (this.type === types.template || this.type === types.invalidTemplate)) {
- if (ch === 36) {
- this.pos += 2;
- return this.finishToken(types.dollarBraceL)
- } else {
- ++this.pos;
- return this.finishToken(types.backQuote)
- }
- }
- out += this.input.slice(chunkStart, this.pos);
- return this.finishToken(types.template, out)
- }
- if (ch === 92) { // '\'
- out += this.input.slice(chunkStart, this.pos);
- out += this.readEscapedChar(true);
- chunkStart = this.pos;
- } else if (isNewLine(ch)) {
- out += this.input.slice(chunkStart, this.pos);
- ++this.pos;
- switch (ch) {
- case 13:
- if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }
- case 10:
- out += "\n";
- break
- default:
- out += String.fromCharCode(ch);
- break
- }
- if (this.options.locations) {
- ++this.curLine;
- this.lineStart = this.pos;
- }
- chunkStart = this.pos;
- } else {
- ++this.pos;
- }
- }
-};
-
-// Reads a template token to search for the end, without validating any escape sequences
-pp$9.readInvalidTemplateToken = function() {
- for (; this.pos < this.input.length; this.pos++) {
- switch (this.input[this.pos]) {
- case "\\":
- ++this.pos;
- break
-
- case "$":
- if (this.input[this.pos + 1] !== "{") {
- break
- }
- // falls through
-
- case "`":
- return this.finishToken(types.invalidTemplate, this.input.slice(this.start, this.pos))
-
- // no default
- }
- }
- this.raise(this.start, "Unterminated template");
-};
-
-// Used to read escaped characters
-
-pp$9.readEscapedChar = function(inTemplate) {
- var ch = this.input.charCodeAt(++this.pos);
- ++this.pos;
- switch (ch) {
- case 110: return "\n" // 'n' -> '\n'
- case 114: return "\r" // 'r' -> '\r'
- case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'
- case 117: return codePointToString$1(this.readCodePoint()) // 'u'
- case 116: return "\t" // 't' -> '\t'
- case 98: return "\b" // 'b' -> '\b'
- case 118: return "\u000b" // 'v' -> '\u000b'
- case 102: return "\f" // 'f' -> '\f'
- case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\r\n'
- case 10: // ' \n'
- if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }
- return ""
- case 56:
- case 57:
- if (this.strict) {
- this.invalidStringToken(
- this.pos - 1,
- "Invalid escape sequence"
- );
- }
- if (inTemplate) {
- var codePos = this.pos - 1;
-
- this.invalidStringToken(
- codePos,
- "Invalid escape sequence in template string"
- );
-
- return null
- }
- default:
- if (ch >= 48 && ch <= 55) {
- var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];
- var octal = parseInt(octalStr, 8);
- if (octal > 255) {
- octalStr = octalStr.slice(0, -1);
- octal = parseInt(octalStr, 8);
- }
- this.pos += octalStr.length - 1;
- ch = this.input.charCodeAt(this.pos);
- if ((octalStr !== "0" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {
- this.invalidStringToken(
- this.pos - 1 - octalStr.length,
- inTemplate
- ? "Octal literal in template string"
- : "Octal literal in strict mode"
- );
- }
- return String.fromCharCode(octal)
- }
- if (isNewLine(ch)) {
- // Unicode new line characters after \ get removed from output in both
- // template literals and strings
- return ""
- }
- return String.fromCharCode(ch)
- }
-};
-
-// Used to read character escape sequences ('\x', '\u', '\U').
-
-pp$9.readHexChar = function(len) {
- var codePos = this.pos;
- var n = this.readInt(16, len);
- if (n === null) { this.invalidStringToken(codePos, "Bad character escape sequence"); }
- return n
-};
-
-// Read an identifier, and return it as a string. Sets `this.containsEsc`
-// to whether the word contained a '\u' escape.
-//
-// Incrementally adds only escaped chars, adding other chunks as-is
-// as a micro-optimization.
-
-pp$9.readWord1 = function() {
- this.containsEsc = false;
- var word = "", first = true, chunkStart = this.pos;
- var astral = this.options.ecmaVersion >= 6;
- while (this.pos < this.input.length) {
- var ch = this.fullCharCodeAtPos();
- if (isIdentifierChar(ch, astral)) {
- this.pos += ch <= 0xffff ? 1 : 2;
- } else if (ch === 92) { // "\"
- this.containsEsc = true;
- word += this.input.slice(chunkStart, this.pos);
- var escStart = this.pos;
- if (this.input.charCodeAt(++this.pos) !== 117) // "u"
- { this.invalidStringToken(this.pos, "Expecting Unicode escape sequence \\uXXXX"); }
- ++this.pos;
- var esc = this.readCodePoint();
- if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))
- { this.invalidStringToken(escStart, "Invalid Unicode escape"); }
- word += codePointToString$1(esc);
- chunkStart = this.pos;
- } else {
- break
- }
- first = false;
- }
- return word + this.input.slice(chunkStart, this.pos)
-};
-
-// Read an identifier or keyword token. Will check for reserved
-// words when necessary.
-
-pp$9.readWord = function() {
- var word = this.readWord1();
- var type = types.name;
- if (this.keywords.test(word)) {
- type = keywords$1[word];
- }
- return this.finishToken(type, word)
-};
-
-// Acorn is a tiny, fast JavaScript parser written in JavaScript.
-
-var version = "8.5.0";
-
-Parser.acorn = {
- Parser: Parser,
- version: version,
- defaultOptions: defaultOptions,
- Position: Position,
- SourceLocation: SourceLocation,
- getLineInfo: getLineInfo,
- Node: Node,
- TokenType: TokenType,
- tokTypes: types,
- keywordTypes: keywords$1,
- TokContext: TokContext,
- tokContexts: types$1,
- isIdentifierChar: isIdentifierChar,
- isIdentifierStart: isIdentifierStart,
- Token: Token,
- isNewLine: isNewLine,
- lineBreak: lineBreak,
- lineBreakG: lineBreakG,
- nonASCIIwhitespace: nonASCIIwhitespace
-};
-
-// The main exported interface (under `self.acorn` when in the
-// browser) is a `parse` function that takes a code string and
-// returns an abstract syntax tree as specified by [Mozilla parser
-// API][api].
-//
-// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
-
-function parse$c(input, options) {
- return Parser.parse(input, options)
-}
-
-// This function tries to parse a single expression at a given
-// offset in a string. Useful for parsing mixed-language formats
-// that embed JavaScript expressions.
-
-function parseExpressionAt(input, pos, options) {
- return Parser.parseExpressionAt(input, pos, options)
-}
-
-// Acorn is organized as a tokenizer and a recursive-descent parser.
-// The `tokenizer` export provides an interface to the tokenizer.
-
-function tokenizer(input, options) {
- return Parser.tokenizer(input, options)
-}
-
-var acorn$1 = {
- __proto__: null,
- Node: Node,
- Parser: Parser,
- Position: Position,
- SourceLocation: SourceLocation,
- TokContext: TokContext,
- Token: Token,
- TokenType: TokenType,
- defaultOptions: defaultOptions,
- getLineInfo: getLineInfo,
- isIdentifierChar: isIdentifierChar,
- isIdentifierStart: isIdentifierStart,
- isNewLine: isNewLine,
- keywordTypes: keywords$1,
- lineBreak: lineBreak,
- lineBreakG: lineBreakG,
- nonASCIIwhitespace: nonASCIIwhitespace,
- parse: parse$c,
- parseExpressionAt: parseExpressionAt,
- tokContexts: types$1,
- tokTypes: types,
- tokenizer: tokenizer,
- version: version
-};
-
-var acorn = {exports: {}};
-
-(function (module, exports) {
-(function (global, factory) {
- factory(exports) ;
-}(commonjsGlobal, (function (exports) {
- // Reserved word lists for various dialects of the language
-
- var reservedWords = {
- 3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",
- 5: "class enum extends super const export import",
- 6: "enum",
- strict: "implements interface let package private protected public static yield",
- strictBind: "eval arguments"
- };
-
- // And the keywords
-
- var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";
-
- var keywords = {
- 5: ecma5AndLessKeywords,
- "5module": ecma5AndLessKeywords + " export import",
- 6: ecma5AndLessKeywords + " const class extends export import super"
- };
-
- var keywordRelationalOperator = /^in(stanceof)?$/;
-
- // ## Character categories
-
- // Big ugly regular expressions that match characters in the
- // whitespace, identifier, and identifier-start categories. These
- // are only applied when a character is found to actually have a
- // code point above 128.
- // Generated by `bin/generate-identifier-regex.js`.
- var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
- var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
-
- var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
- var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
-
- nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
-
- // These are a run-length and offset encoded representation of the
- // >0xffff code points that are a valid part of identifiers. The
- // offset starts at 0x10000, and each pair of numbers represents an
- // offset to the next range, and then a size of the range. They were
- // generated by bin/generate-identifier-regex.js
-
- // eslint-disable-next-line comma-spacing
- var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938];
-
- // eslint-disable-next-line comma-spacing
- var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239];
-
- // This has a complexity linear to the value of the code. The
- // assumption is that looking up astral identifier characters is
- // rare.
- function isInAstralSet(code, set) {
- var pos = 0x10000;
- for (var i = 0; i < set.length; i += 2) {
- pos += set[i];
- if (pos > code) { return false }
- pos += set[i + 1];
- if (pos >= code) { return true }
- }
- }
-
- // Test whether a given character code starts an identifier.
-
- function isIdentifierStart(code, astral) {
- if (code < 65) { return code === 36 }
- if (code < 91) { return true }
- if (code < 97) { return code === 95 }
- if (code < 123) { return true }
- if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }
- if (astral === false) { return false }
- return isInAstralSet(code, astralIdentifierStartCodes)
- }
-
- // Test whether a given character is part of an identifier.
-
- function isIdentifierChar(code, astral) {
- if (code < 48) { return code === 36 }
- if (code < 58) { return true }
- if (code < 65) { return false }
- if (code < 91) { return true }
- if (code < 97) { return code === 95 }
- if (code < 123) { return true }
- if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }
- if (astral === false) { return false }
- return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)
- }
-
- // ## Token types
-
- // The assignment of fine-grained, information-carrying type objects
- // allows the tokenizer to store the information it has about a
- // token in a way that is very cheap for the parser to look up.
-
- // All token type variables start with an underscore, to make them
- // easy to recognize.
-
- // The `beforeExpr` property is used to disambiguate between regular
- // expressions and divisions. It is set on all token types that can
- // be followed by an expression (thus, a slash after them would be a
- // regular expression).
- //
- // The `startsExpr` property is used to check if the token ends a
- // `yield` expression. It is set on all token types that either can
- // directly start an expression (like a quotation mark) or can
- // continue an expression (like the body of a string).
- //
- // `isLoop` marks a keyword as starting a loop, which is important
- // to know when parsing a label, in order to allow or disallow
- // continue jumps to that label.
-
- var TokenType = function TokenType(label, conf) {
- if ( conf === void 0 ) conf = {};
-
- this.label = label;
- this.keyword = conf.keyword;
- this.beforeExpr = !!conf.beforeExpr;
- this.startsExpr = !!conf.startsExpr;
- this.isLoop = !!conf.isLoop;
- this.isAssign = !!conf.isAssign;
- this.prefix = !!conf.prefix;
- this.postfix = !!conf.postfix;
- this.binop = conf.binop || null;
- this.updateContext = null;
- };
-
- function binop(name, prec) {
- return new TokenType(name, {beforeExpr: true, binop: prec})
- }
- var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};
-
- // Map keyword names to token types.
-
- var keywords$1 = {};
-
- // Succinct definitions of keyword token types
- function kw(name, options) {
- if ( options === void 0 ) options = {};
-
- options.keyword = name;
- return keywords$1[name] = new TokenType(name, options)
- }
-
- var types = {
- num: new TokenType("num", startsExpr),
- regexp: new TokenType("regexp", startsExpr),
- string: new TokenType("string", startsExpr),
- name: new TokenType("name", startsExpr),
- privateId: new TokenType("privateId", startsExpr),
- eof: new TokenType("eof"),
-
- // Punctuation token types.
- bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}),
- bracketR: new TokenType("]"),
- braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}),
- braceR: new TokenType("}"),
- parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}),
- parenR: new TokenType(")"),
- comma: new TokenType(",", beforeExpr),
- semi: new TokenType(";", beforeExpr),
- colon: new TokenType(":", beforeExpr),
- dot: new TokenType("."),
- question: new TokenType("?", beforeExpr),
- questionDot: new TokenType("?."),
- arrow: new TokenType("=>", beforeExpr),
- template: new TokenType("template"),
- invalidTemplate: new TokenType("invalidTemplate"),
- ellipsis: new TokenType("...", beforeExpr),
- backQuote: new TokenType("`", startsExpr),
- dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}),
-
- // Operators. These carry several kinds of properties to help the
- // parser use them properly (the presence of these properties is
- // what categorizes them as operators).
- //
- // `binop`, when present, specifies that this operator is a binary
- // operator, and will refer to its precedence.
- //
- // `prefix` and `postfix` mark the operator as a prefix or postfix
- // unary operator.
- //
- // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as
- // binary operators with a very low precedence, that should result
- // in AssignmentExpression nodes.
-
- eq: new TokenType("=", {beforeExpr: true, isAssign: true}),
- assign: new TokenType("_=", {beforeExpr: true, isAssign: true}),
- incDec: new TokenType("++/--", {prefix: true, postfix: true, startsExpr: true}),
- prefix: new TokenType("!/~", {beforeExpr: true, prefix: true, startsExpr: true}),
- logicalOR: binop("||", 1),
- logicalAND: binop("&&", 2),
- bitwiseOR: binop("|", 3),
- bitwiseXOR: binop("^", 4),
- bitwiseAND: binop("&", 5),
- equality: binop("==/!=/===/!==", 6),
- relational: binop("</>/<=/>=", 7),
- bitShift: binop("<</>>/>>>", 8),
- plusMin: new TokenType("+/-", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),
- modulo: binop("%", 10),
- star: binop("*", 10),
- slash: binop("/", 10),
- starstar: new TokenType("**", {beforeExpr: true}),
- coalesce: binop("??", 1),
-
- // Keyword token types.
- _break: kw("break"),
- _case: kw("case", beforeExpr),
- _catch: kw("catch"),
- _continue: kw("continue"),
- _debugger: kw("debugger"),
- _default: kw("default", beforeExpr),
- _do: kw("do", {isLoop: true, beforeExpr: true}),
- _else: kw("else", beforeExpr),
- _finally: kw("finally"),
- _for: kw("for", {isLoop: true}),
- _function: kw("function", startsExpr),
- _if: kw("if"),
- _return: kw("return", beforeExpr),
- _switch: kw("switch"),
- _throw: kw("throw", beforeExpr),
- _try: kw("try"),
- _var: kw("var"),
- _const: kw("const"),
- _while: kw("while", {isLoop: true}),
- _with: kw("with"),
- _new: kw("new", {beforeExpr: true, startsExpr: true}),
- _this: kw("this", startsExpr),
- _super: kw("super", startsExpr),
- _class: kw("class", startsExpr),
- _extends: kw("extends", beforeExpr),
- _export: kw("export"),
- _import: kw("import", startsExpr),
- _null: kw("null", startsExpr),
- _true: kw("true", startsExpr),
- _false: kw("false", startsExpr),
- _in: kw("in", {beforeExpr: true, binop: 7}),
- _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}),
- _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}),
- _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}),
- _delete: kw("delete", {beforeExpr: true, prefix: true, startsExpr: true})
- };
-
- // Matches a whole line break (where CRLF is considered a single
- // line break). Used to count lines.
-
- var lineBreak = /\r\n?|\n|\u2028|\u2029/;
- var lineBreakG = new RegExp(lineBreak.source, "g");
-
- function isNewLine(code) {
- return code === 10 || code === 13 || code === 0x2028 || code === 0x2029
- }
-
- var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;
-
- var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
-
- var ref = Object.prototype;
- var hasOwnProperty = ref.hasOwnProperty;
- var toString = ref.toString;
-
- // Checks if an object has a property.
-
- function has(obj, propName) {
- return hasOwnProperty.call(obj, propName)
- }
-
- var isArray = Array.isArray || (function (obj) { return (
- toString.call(obj) === "[object Array]"
- ); });
-
- function wordsRegexp(words) {
- return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$")
- }
-
- // These are used when `options.locations` is on, for the
- // `startLoc` and `endLoc` properties.
-
- var Position = function Position(line, col) {
- this.line = line;
- this.column = col;
- };
-
- Position.prototype.offset = function offset (n) {
- return new Position(this.line, this.column + n)
- };
-
- var SourceLocation = function SourceLocation(p, start, end) {
- this.start = start;
- this.end = end;
- if (p.sourceFile !== null) { this.source = p.sourceFile; }
- };
-
- // The `getLineInfo` function is mostly useful when the
- // `locations` option is off (for performance reasons) and you
- // want to find the line/column position for a given character
- // offset. `input` should be the code string that the offset refers
- // into.
-
- function getLineInfo(input, offset) {
- for (var line = 1, cur = 0;;) {
- lineBreakG.lastIndex = cur;
- var match = lineBreakG.exec(input);
- if (match && match.index < offset) {
- ++line;
- cur = match.index + match[0].length;
- } else {
- return new Position(line, offset - cur)
- }
- }
- }
-
- // A second argument must be given to configure the parser process.
- // These options are recognized (only `ecmaVersion` is required):
-
- var defaultOptions = {
- // `ecmaVersion` indicates the ECMAScript version to parse. Must be
- // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10
- // (2019), 11 (2020), 12 (2021), 13 (2022), or `"latest"` (the
- // latest version the library supports). This influences support
- // for strict mode, the set of reserved words, and support for
- // new syntax features.
- ecmaVersion: null,
- // `sourceType` indicates the mode the code should be parsed in.
- // Can be either `"script"` or `"module"`. This influences global
- // strict mode and parsing of `import` and `export` declarations.
- sourceType: "script",
- // `onInsertedSemicolon` can be a callback that will be called
- // when a semicolon is automatically inserted. It will be passed
- // the position of the comma as an offset, and if `locations` is
- // enabled, it is given the location as a `{line, column}` object
- // as second argument.
- onInsertedSemicolon: null,
- // `onTrailingComma` is similar to `onInsertedSemicolon`, but for
- // trailing commas.
- onTrailingComma: null,
- // By default, reserved words are only enforced if ecmaVersion >= 5.
- // Set `allowReserved` to a boolean value to explicitly turn this on
- // an off. When this option has the value "never", reserved words
- // and keywords can also not be used as property names.
- allowReserved: null,
- // When enabled, a return at the top level is not considered an
- // error.
- allowReturnOutsideFunction: false,
- // When enabled, import/export statements are not constrained to
- // appearing at the top of the program, and an import.meta expression
- // in a script isn't considered an error.
- allowImportExportEverywhere: false,
- // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.
- // When enabled, await identifiers are allowed to appear at the top-level scope,
- // but they are still not allowed in non-async functions.
- allowAwaitOutsideFunction: null,
- // When enabled, super identifiers are not constrained to
- // appearing in methods and do not raise an error when they appear elsewhere.
- allowSuperOutsideMethod: null,
- // When enabled, hashbang directive in the beginning of file
- // is allowed and treated as a line comment.
- allowHashBang: false,
- // When `locations` is on, `loc` properties holding objects with
- // `start` and `end` properties in `{line, column}` form (with
- // line being 1-based and column 0-based) will be attached to the
- // nodes.
- locations: false,
- // A function can be passed as `onToken` option, which will
- // cause Acorn to call that function with object in the same
- // format as tokens returned from `tokenizer().getToken()`. Note
- // that you are not allowed to call the parser from the
- // callback—that will corrupt its internal state.
- onToken: null,
- // A function can be passed as `onComment` option, which will
- // cause Acorn to call that function with `(block, text, start,
- // end)` parameters whenever a comment is skipped. `block` is a
- // boolean indicating whether this is a block (`/* */`) comment,
- // `text` is the content of the comment, and `start` and `end` are
- // character offsets that denote the start and end of the comment.
- // When the `locations` option is on, two more parameters are
- // passed, the full `{line, column}` locations of the start and
- // end of the comments. Note that you are not allowed to call the
- // parser from the callback—that will corrupt its internal state.
- onComment: null,
- // Nodes have their start and end characters offsets recorded in
- // `start` and `end` properties (directly on the node, rather than
- // the `loc` object, which holds line/column data. To also add a
- // [semi-standardized][range] `range` property holding a `[start,
- // end]` array with the same numbers, set the `ranges` option to
- // `true`.
- //
- // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
- ranges: false,
- // It is possible to parse multiple files into a single AST by
- // passing the tree produced by parsing the first file as
- // `program` option in subsequent parses. This will add the
- // toplevel forms of the parsed file to the `Program` (top) node
- // of an existing parse tree.
- program: null,
- // When `locations` is on, you can pass this to record the source
- // file in every node's `loc` object.
- sourceFile: null,
- // This value, if given, is stored in every node, whether
- // `locations` is on or off.
- directSourceFile: null,
- // When enabled, parenthesized expressions are represented by
- // (non-standard) ParenthesizedExpression nodes
- preserveParens: false
- };
-
- // Interpret and default an options object
-
- var warnedAboutEcmaVersion = false;
-
- function getOptions(opts) {
- var options = {};
-
- for (var opt in defaultOptions)
- { options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]; }
-
- if (options.ecmaVersion === "latest") {
- options.ecmaVersion = 1e8;
- } else if (options.ecmaVersion == null) {
- if (!warnedAboutEcmaVersion && typeof console === "object" && console.warn) {
- warnedAboutEcmaVersion = true;
- console.warn("Since Acorn 8.0.0, options.ecmaVersion is required.\nDefaulting to 2020, but this will stop working in the future.");
- }
- options.ecmaVersion = 11;
- } else if (options.ecmaVersion >= 2015) {
- options.ecmaVersion -= 2009;
- }
-
- if (options.allowReserved == null)
- { options.allowReserved = options.ecmaVersion < 5; }
-
- if (isArray(options.onToken)) {
- var tokens = options.onToken;
- options.onToken = function (token) { return tokens.push(token); };
- }
- if (isArray(options.onComment))
- { options.onComment = pushComment(options, options.onComment); }
-
- return options
- }
-
- function pushComment(options, array) {
- return function(block, text, start, end, startLoc, endLoc) {
- var comment = {
- type: block ? "Block" : "Line",
- value: text,
- start: start,
- end: end
- };
- if (options.locations)
- { comment.loc = new SourceLocation(this, startLoc, endLoc); }
- if (options.ranges)
- { comment.range = [start, end]; }
- array.push(comment);
- }
- }
-
- // Each scope gets a bitset that may contain these flags
- var
- SCOPE_TOP = 1,
- SCOPE_FUNCTION = 2,
- SCOPE_ASYNC = 4,
- SCOPE_GENERATOR = 8,
- SCOPE_ARROW = 16,
- SCOPE_SIMPLE_CATCH = 32,
- SCOPE_SUPER = 64,
- SCOPE_DIRECT_SUPER = 128,
- SCOPE_CLASS_STATIC_BLOCK = 256,
- SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;
-
- function functionFlags(async, generator) {
- return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)
- }
-
- // Used in checkLVal* and declareName to determine the type of a binding
- var
- BIND_NONE = 0, // Not a binding
- BIND_VAR = 1, // Var-style binding
- BIND_LEXICAL = 2, // Let- or const-style binding
- BIND_FUNCTION = 3, // Function declaration
- BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding
- BIND_OUTSIDE = 5; // Special case for function names as bound inside the function
-
- var Parser = function Parser(options, input, startPos) {
- this.options = options = getOptions(options);
- this.sourceFile = options.sourceFile;
- this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]);
- var reserved = "";
- if (options.allowReserved !== true) {
- reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];
- if (options.sourceType === "module") { reserved += " await"; }
- }
- this.reservedWords = wordsRegexp(reserved);
- var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict;
- this.reservedWordsStrict = wordsRegexp(reservedStrict);
- this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind);
- this.input = String(input);
-
- // Used to signal to callers of `readWord1` whether the word
- // contained any escape sequences. This is needed because words with
- // escape sequences must not be interpreted as keywords.
- this.containsEsc = false;
-
- // Set up token state
-
- // The current position of the tokenizer in the input.
- if (startPos) {
- this.pos = startPos;
- this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1;
- this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;
- } else {
- this.pos = this.lineStart = 0;
- this.curLine = 1;
- }
-
- // Properties of the current token:
- // Its type
- this.type = types.eof;
- // For tokens that include more information than their type, the value
- this.value = null;
- // Its start and end offset
- this.start = this.end = this.pos;
- // And, if locations are used, the {line, column} object
- // corresponding to those offsets
- this.startLoc = this.endLoc = this.curPosition();
-
- // Position information for the previous token
- this.lastTokEndLoc = this.lastTokStartLoc = null;
- this.lastTokStart = this.lastTokEnd = this.pos;
-
- // The context stack is used to superficially track syntactic
- // context to predict whether a regular expression is allowed in a
- // given position.
- this.context = this.initialContext();
- this.exprAllowed = true;
-
- // Figure out if it's a module code.
- this.inModule = options.sourceType === "module";
- this.strict = this.inModule || this.strictDirective(this.pos);
-
- // Used to signify the start of a potential arrow function
- this.potentialArrowAt = -1;
- this.potentialArrowInForAwait = false;
-
- // Positions to delayed-check that yield/await does not exist in default parameters.
- this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;
- // Labels in scope.
- this.labels = [];
- // Thus-far undefined exports.
- this.undefinedExports = Object.create(null);
-
- // If enabled, skip leading hashbang line.
- if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!")
- { this.skipLineComment(2); }
-
- // Scope tracking for duplicate variable names (see scope.js)
- this.scopeStack = [];
- this.enterScope(SCOPE_TOP);
-
- // For RegExp validation
- this.regexpState = null;
-
- // The stack of private names.
- // Each element has two properties: 'declared' and 'used'.
- // When it exited from the outermost class definition, all used private names must be declared.
- this.privateNameStack = [];
- };
-
- var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };
-
- Parser.prototype.parse = function parse () {
- var node = this.options.program || this.startNode();
- this.nextToken();
- return this.parseTopLevel(node)
- };
-
- prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };
- prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };
- prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };
- prototypeAccessors.canAwait.get = function () {
- for (var i = this.scopeStack.length - 1; i >= 0; i--) {
- var scope = this.scopeStack[i];
- if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }
- if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }
- }
- return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction
- };
- prototypeAccessors.allowSuper.get = function () {
- var ref = this.currentThisScope();
- var flags = ref.flags;
- var inClassFieldInit = ref.inClassFieldInit;
- return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod
- };
- prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };
- prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };
- prototypeAccessors.allowNewDotTarget.get = function () {
- var ref = this.currentThisScope();
- var flags = ref.flags;
- var inClassFieldInit = ref.inClassFieldInit;
- return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit
- };
- prototypeAccessors.inClassStaticBlock.get = function () {
- return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0
- };
-
- Parser.extend = function extend () {
- var plugins = [], len = arguments.length;
- while ( len-- ) plugins[ len ] = arguments[ len ];
-
- var cls = this;
- for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }
- return cls
- };
-
- Parser.parse = function parse (input, options) {
- return new this(options, input).parse()
- };
-
- Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {
- var parser = new this(options, input, pos);
- parser.nextToken();
- return parser.parseExpression()
- };
-
- Parser.tokenizer = function tokenizer (input, options) {
- return new this(options, input)
- };
-
- Object.defineProperties( Parser.prototype, prototypeAccessors );
-
- var pp = Parser.prototype;
-
- // ## Parser utilities
-
- var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/;
- pp.strictDirective = function(start) {
- for (;;) {
- // Try to find string literal.
- skipWhiteSpace.lastIndex = start;
- start += skipWhiteSpace.exec(this.input)[0].length;
- var match = literal.exec(this.input.slice(start));
- if (!match) { return false }
- if ((match[1] || match[2]) === "use strict") {
- skipWhiteSpace.lastIndex = start + match[0].length;
- var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;
- var next = this.input.charAt(end);
- return next === ";" || next === "}" ||
- (lineBreak.test(spaceAfter[0]) &&
- !(/[(`.[+\-/*%<>=,?^&]/.test(next) || next === "!" && this.input.charAt(end + 1) === "="))
- }
- start += match[0].length;
-
- // Skip semicolon, if any.
- skipWhiteSpace.lastIndex = start;
- start += skipWhiteSpace.exec(this.input)[0].length;
- if (this.input[start] === ";")
- { start++; }
- }
- };
-
- // Predicate that tests whether the next token is of the given
- // type, and if yes, consumes it as a side effect.
-
- pp.eat = function(type) {
- if (this.type === type) {
- this.next();
- return true
- } else {
- return false
- }
- };
-
- // Tests whether parsed token is a contextual keyword.
-
- pp.isContextual = function(name) {
- return this.type === types.name && this.value === name && !this.containsEsc
- };
-
- // Consumes contextual keyword if possible.
-
- pp.eatContextual = function(name) {
- if (!this.isContextual(name)) { return false }
- this.next();
- return true
- };
-
- // Asserts that following token is given contextual keyword.
-
- pp.expectContextual = function(name) {
- if (!this.eatContextual(name)) { this.unexpected(); }
- };
-
- // Test whether a semicolon can be inserted at the current position.
-
- pp.canInsertSemicolon = function() {
- return this.type === types.eof ||
- this.type === types.braceR ||
- lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
- };
-
- pp.insertSemicolon = function() {
- if (this.canInsertSemicolon()) {
- if (this.options.onInsertedSemicolon)
- { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }
- return true
- }
- };
-
- // Consume a semicolon, or, failing that, see if we are allowed to
- // pretend that there is a semicolon at this position.
-
- pp.semicolon = function() {
- if (!this.eat(types.semi) && !this.insertSemicolon()) { this.unexpected(); }
- };
-
- pp.afterTrailingComma = function(tokType, notNext) {
- if (this.type === tokType) {
- if (this.options.onTrailingComma)
- { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }
- if (!notNext)
- { this.next(); }
- return true
- }
- };
-
- // Expect a token of a given type. If found, consume it, otherwise,
- // raise an unexpected token error.
-
- pp.expect = function(type) {
- this.eat(type) || this.unexpected();
- };
-
- // Raise an unexpected token error.
-
- pp.unexpected = function(pos) {
- this.raise(pos != null ? pos : this.start, "Unexpected token");
- };
-
- function DestructuringErrors() {
- this.shorthandAssign =
- this.trailingComma =
- this.parenthesizedAssign =
- this.parenthesizedBind =
- this.doubleProto =
- -1;
- }
-
- pp.checkPatternErrors = function(refDestructuringErrors, isAssign) {
- if (!refDestructuringErrors) { return }
- if (refDestructuringErrors.trailingComma > -1)
- { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); }
- var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;
- if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); }
- };
-
- pp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {
- if (!refDestructuringErrors) { return false }
- var shorthandAssign = refDestructuringErrors.shorthandAssign;
- var doubleProto = refDestructuringErrors.doubleProto;
- if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }
- if (shorthandAssign >= 0)
- { this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); }
- if (doubleProto >= 0)
- { this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); }
- };
-
- pp.checkYieldAwaitInDefaultParams = function() {
- if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))
- { this.raise(this.yieldPos, "Yield expression cannot be a default value"); }
- if (this.awaitPos)
- { this.raise(this.awaitPos, "Await expression cannot be a default value"); }
- };
-
- pp.isSimpleAssignTarget = function(expr) {
- if (expr.type === "ParenthesizedExpression")
- { return this.isSimpleAssignTarget(expr.expression) }
- return expr.type === "Identifier" || expr.type === "MemberExpression"
- };
-
- var pp$1 = Parser.prototype;
-
- // ### Statement parsing
-
- // Parse a program. Initializes the parser, reads any number of
- // statements, and wraps them in a Program node. Optionally takes a
- // `program` argument. If present, the statements will be appended
- // to its body instead of creating a new node.
-
- pp$1.parseTopLevel = function(node) {
- var exports = Object.create(null);
- if (!node.body) { node.body = []; }
- while (this.type !== types.eof) {
- var stmt = this.parseStatement(null, true, exports);
- node.body.push(stmt);
- }
- if (this.inModule)
- { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)
- {
- var name = list[i];
-
- this.raiseRecoverable(this.undefinedExports[name].start, ("Export '" + name + "' is not defined"));
- } }
- this.adaptDirectivePrologue(node.body);
- this.next();
- node.sourceType = this.options.sourceType;
- return this.finishNode(node, "Program")
- };
-
- var loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"};
-
- pp$1.isLet = function(context) {
- if (this.options.ecmaVersion < 6 || !this.isContextual("let")) { return false }
- skipWhiteSpace.lastIndex = this.pos;
- var skip = skipWhiteSpace.exec(this.input);
- var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
- // For ambiguous cases, determine if a LexicalDeclaration (or only a
- // Statement) is allowed here. If context is not empty then only a Statement
- // is allowed. However, `let [` is an explicit negative lookahead for
- // ExpressionStatement, so special-case it first.
- if (nextCh === 91 || nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '[', '/', astral
- if (context) { return false }
-
- if (nextCh === 123) { return true } // '{'
- if (isIdentifierStart(nextCh, true)) {
- var pos = next + 1;
- while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }
- if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }
- var ident = this.input.slice(next, pos);
- if (!keywordRelationalOperator.test(ident)) { return true }
- }
- return false
- };
-
- // check 'async [no LineTerminator here] function'
- // - 'async /*foo*/ function' is OK.
- // - 'async /*\n*/ function' is invalid.
- pp$1.isAsyncFunction = function() {
- if (this.options.ecmaVersion < 8 || !this.isContextual("async"))
- { return false }
-
- skipWhiteSpace.lastIndex = this.pos;
- var skip = skipWhiteSpace.exec(this.input);
- var next = this.pos + skip[0].length, after;
- return !lineBreak.test(this.input.slice(this.pos, next)) &&
- this.input.slice(next, next + 8) === "function" &&
- (next + 8 === this.input.length ||
- !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))
- };
-
- // Parse a single statement.
- //
- // If expecting a statement and finding a slash operator, parse a
- // regular expression literal. This is to handle cases like
- // `if (foo) /blah/.exec(foo)`, where looking at the previous token
- // does not help.
-
- pp$1.parseStatement = function(context, topLevel, exports) {
- var starttype = this.type, node = this.startNode(), kind;
-
- if (this.isLet(context)) {
- starttype = types._var;
- kind = "let";
- }
-
- // Most types of statements are recognized by the keyword they
- // start with. Many are trivial to parse, some require a bit of
- // complexity.
-
- switch (starttype) {
- case types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword)
- case types._debugger: return this.parseDebuggerStatement(node)
- case types._do: return this.parseDoStatement(node)
- case types._for: return this.parseForStatement(node)
- case types._function:
- // Function as sole body of either an if statement or a labeled statement
- // works, but not when it is part of a labeled statement that is the sole
- // body of an if statement.
- if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) { this.unexpected(); }
- return this.parseFunctionStatement(node, false, !context)
- case types._class:
- if (context) { this.unexpected(); }
- return this.parseClass(node, true)
- case types._if: return this.parseIfStatement(node)
- case types._return: return this.parseReturnStatement(node)
- case types._switch: return this.parseSwitchStatement(node)
- case types._throw: return this.parseThrowStatement(node)
- case types._try: return this.parseTryStatement(node)
- case types._const: case types._var:
- kind = kind || this.value;
- if (context && kind !== "var") { this.unexpected(); }
- return this.parseVarStatement(node, kind)
- case types._while: return this.parseWhileStatement(node)
- case types._with: return this.parseWithStatement(node)
- case types.braceL: return this.parseBlock(true, node)
- case types.semi: return this.parseEmptyStatement(node)
- case types._export:
- case types._import:
- if (this.options.ecmaVersion > 10 && starttype === types._import) {
- skipWhiteSpace.lastIndex = this.pos;
- var skip = skipWhiteSpace.exec(this.input);
- var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
- if (nextCh === 40 || nextCh === 46) // '(' or '.'
- { return this.parseExpressionStatement(node, this.parseExpression()) }
- }
-
- if (!this.options.allowImportExportEverywhere) {
- if (!topLevel)
- { this.raise(this.start, "'import' and 'export' may only appear at the top level"); }
- if (!this.inModule)
- { this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); }
- }
- return starttype === types._import ? this.parseImport(node) : this.parseExport(node, exports)
-
- // If the statement does not start with a statement keyword or a
- // brace, it's an ExpressionStatement or LabeledStatement. We
- // simply start parsing an expression, and afterwards, if the
- // next token is a colon and the expression was a simple
- // Identifier node, we switch to interpreting it as a label.
- default:
- if (this.isAsyncFunction()) {
- if (context) { this.unexpected(); }
- this.next();
- return this.parseFunctionStatement(node, true, !context)
- }
-
- var maybeName = this.value, expr = this.parseExpression();
- if (starttype === types.name && expr.type === "Identifier" && this.eat(types.colon))
- { return this.parseLabeledStatement(node, maybeName, expr, context) }
- else { return this.parseExpressionStatement(node, expr) }
- }
- };
-
- pp$1.parseBreakContinueStatement = function(node, keyword) {
- var isBreak = keyword === "break";
- this.next();
- if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; }
- else if (this.type !== types.name) { this.unexpected(); }
- else {
- node.label = this.parseIdent();
- this.semicolon();
- }
-
- // Verify that there is an actual destination to break or
- // continue to.
- var i = 0;
- for (; i < this.labels.length; ++i) {
- var lab = this.labels[i];
- if (node.label == null || lab.name === node.label.name) {
- if (lab.kind != null && (isBreak || lab.kind === "loop")) { break }
- if (node.label && isBreak) { break }
- }
- }
- if (i === this.labels.length) { this.raise(node.start, "Unsyntactic " + keyword); }
- return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement")
- };
-
- pp$1.parseDebuggerStatement = function(node) {
- this.next();
- this.semicolon();
- return this.finishNode(node, "DebuggerStatement")
- };
-
- pp$1.parseDoStatement = function(node) {
- this.next();
- this.labels.push(loopLabel);
- node.body = this.parseStatement("do");
- this.labels.pop();
- this.expect(types._while);
- node.test = this.parseParenExpression();
- if (this.options.ecmaVersion >= 6)
- { this.eat(types.semi); }
- else
- { this.semicolon(); }
- return this.finishNode(node, "DoWhileStatement")
- };
-
- // Disambiguating between a `for` and a `for`/`in` or `for`/`of`
- // loop is non-trivial. Basically, we have to parse the init `var`
- // statement or expression, disallowing the `in` operator (see
- // the second parameter to `parseExpression`), and then check
- // whether the next token is `in` or `of`. When there is no init
- // part (semicolon immediately after the opening parenthesis), it
- // is a regular `for` loop.
-
- pp$1.parseForStatement = function(node) {
- this.next();
- var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual("await")) ? this.lastTokStart : -1;
- this.labels.push(loopLabel);
- this.enterScope(0);
- this.expect(types.parenL);
- if (this.type === types.semi) {
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- return this.parseFor(node, null)
- }
- var isLet = this.isLet();
- if (this.type === types._var || this.type === types._const || isLet) {
- var init$1 = this.startNode(), kind = isLet ? "let" : this.value;
- this.next();
- this.parseVar(init$1, true, kind);
- this.finishNode(init$1, "VariableDeclaration");
- if ((this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1) {
- if (this.options.ecmaVersion >= 9) {
- if (this.type === types._in) {
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- } else { node.await = awaitAt > -1; }
- }
- return this.parseForIn(node, init$1)
- }
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- return this.parseFor(node, init$1)
- }
- var startsWithLet = this.isContextual("let"), isForOf = false;
- var refDestructuringErrors = new DestructuringErrors;
- var init = this.parseExpression(awaitAt > -1 ? "await" : true, refDestructuringErrors);
- if (this.type === types._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual("of"))) {
- if (this.options.ecmaVersion >= 9) {
- if (this.type === types._in) {
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- } else { node.await = awaitAt > -1; }
- }
- if (startsWithLet && isForOf) { this.raise(init.start, "The left-hand side of a for-of loop may not start with 'let'."); }
- this.toAssignable(init, false, refDestructuringErrors);
- this.checkLValPattern(init);
- return this.parseForIn(node, init)
- } else {
- this.checkExpressionErrors(refDestructuringErrors, true);
- }
- if (awaitAt > -1) { this.unexpected(awaitAt); }
- return this.parseFor(node, init)
- };
-
- pp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) {
- this.next();
- return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)
- };
-
- pp$1.parseIfStatement = function(node) {
- this.next();
- node.test = this.parseParenExpression();
- // allow function declarations in branches, but only in non-strict mode
- node.consequent = this.parseStatement("if");
- node.alternate = this.eat(types._else) ? this.parseStatement("if") : null;
- return this.finishNode(node, "IfStatement")
- };
-
- pp$1.parseReturnStatement = function(node) {
- if (!this.inFunction && !this.options.allowReturnOutsideFunction)
- { this.raise(this.start, "'return' outside of function"); }
- this.next();
-
- // In `return` (and `break`/`continue`), the keywords with
- // optional arguments, we eagerly look for a semicolon or the
- // possibility to insert one.
-
- if (this.eat(types.semi) || this.insertSemicolon()) { node.argument = null; }
- else { node.argument = this.parseExpression(); this.semicolon(); }
- return this.finishNode(node, "ReturnStatement")
- };
-
- pp$1.parseSwitchStatement = function(node) {
- this.next();
- node.discriminant = this.parseParenExpression();
- node.cases = [];
- this.expect(types.braceL);
- this.labels.push(switchLabel);
- this.enterScope(0);
-
- // Statements under must be grouped (by label) in SwitchCase
- // nodes. `cur` is used to keep the node that we are currently
- // adding statements to.
-
- var cur;
- for (var sawDefault = false; this.type !== types.braceR;) {
- if (this.type === types._case || this.type === types._default) {
- var isCase = this.type === types._case;
- if (cur) { this.finishNode(cur, "SwitchCase"); }
- node.cases.push(cur = this.startNode());
- cur.consequent = [];
- this.next();
- if (isCase) {
- cur.test = this.parseExpression();
- } else {
- if (sawDefault) { this.raiseRecoverable(this.lastTokStart, "Multiple default clauses"); }
- sawDefault = true;
- cur.test = null;
- }
- this.expect(types.colon);
- } else {
- if (!cur) { this.unexpected(); }
- cur.consequent.push(this.parseStatement(null));
- }
- }
- this.exitScope();
- if (cur) { this.finishNode(cur, "SwitchCase"); }
- this.next(); // Closing brace
- this.labels.pop();
- return this.finishNode(node, "SwitchStatement")
- };
-
- pp$1.parseThrowStatement = function(node) {
- this.next();
- if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))
- { this.raise(this.lastTokEnd, "Illegal newline after throw"); }
- node.argument = this.parseExpression();
- this.semicolon();
- return this.finishNode(node, "ThrowStatement")
- };
-
- // Reused empty array added for node fields that are always empty.
-
- var empty = [];
-
- pp$1.parseTryStatement = function(node) {
- this.next();
- node.block = this.parseBlock();
- node.handler = null;
- if (this.type === types._catch) {
- var clause = this.startNode();
- this.next();
- if (this.eat(types.parenL)) {
- clause.param = this.parseBindingAtom();
- var simple = clause.param.type === "Identifier";
- this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);
- this.checkLValPattern(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);
- this.expect(types.parenR);
- } else {
- if (this.options.ecmaVersion < 10) { this.unexpected(); }
- clause.param = null;
- this.enterScope(0);
- }
- clause.body = this.parseBlock(false);
- this.exitScope();
- node.handler = this.finishNode(clause, "CatchClause");
- }
- node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;
- if (!node.handler && !node.finalizer)
- { this.raise(node.start, "Missing catch or finally clause"); }
- return this.finishNode(node, "TryStatement")
- };
-
- pp$1.parseVarStatement = function(node, kind) {
- this.next();
- this.parseVar(node, false, kind);
- this.semicolon();
- return this.finishNode(node, "VariableDeclaration")
- };
-
- pp$1.parseWhileStatement = function(node) {
- this.next();
- node.test = this.parseParenExpression();
- this.labels.push(loopLabel);
- node.body = this.parseStatement("while");
- this.labels.pop();
- return this.finishNode(node, "WhileStatement")
- };
-
- pp$1.parseWithStatement = function(node) {
- if (this.strict) { this.raise(this.start, "'with' in strict mode"); }
- this.next();
- node.object = this.parseParenExpression();
- node.body = this.parseStatement("with");
- return this.finishNode(node, "WithStatement")
- };
-
- pp$1.parseEmptyStatement = function(node) {
- this.next();
- return this.finishNode(node, "EmptyStatement")
- };
-
- pp$1.parseLabeledStatement = function(node, maybeName, expr, context) {
- for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)
- {
- var label = list[i$1];
-
- if (label.name === maybeName)
- { this.raise(expr.start, "Label '" + maybeName + "' is already declared");
- } }
- var kind = this.type.isLoop ? "loop" : this.type === types._switch ? "switch" : null;
- for (var i = this.labels.length - 1; i >= 0; i--) {
- var label$1 = this.labels[i];
- if (label$1.statementStart === node.start) {
- // Update information about previous labels on this node
- label$1.statementStart = this.start;
- label$1.kind = kind;
- } else { break }
- }
- this.labels.push({name: maybeName, kind: kind, statementStart: this.start});
- node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label");
- this.labels.pop();
- node.label = expr;
- return this.finishNode(node, "LabeledStatement")
- };
-
- pp$1.parseExpressionStatement = function(node, expr) {
- node.expression = expr;
- this.semicolon();
- return this.finishNode(node, "ExpressionStatement")
- };
-
- // Parse a semicolon-enclosed block of statements, handling `"use
- // strict"` declarations when `allowStrict` is true (used for
- // function bodies).
-
- pp$1.parseBlock = function(createNewLexicalScope, node, exitStrict) {
- if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;
- if ( node === void 0 ) node = this.startNode();
-
- node.body = [];
- this.expect(types.braceL);
- if (createNewLexicalScope) { this.enterScope(0); }
- while (this.type !== types.braceR) {
- var stmt = this.parseStatement(null);
- node.body.push(stmt);
- }
- if (exitStrict) { this.strict = false; }
- this.next();
- if (createNewLexicalScope) { this.exitScope(); }
- return this.finishNode(node, "BlockStatement")
- };
-
- // Parse a regular `for` loop. The disambiguation code in
- // `parseStatement` will already have parsed the init statement or
- // expression.
-
- pp$1.parseFor = function(node, init) {
- node.init = init;
- this.expect(types.semi);
- node.test = this.type === types.semi ? null : this.parseExpression();
- this.expect(types.semi);
- node.update = this.type === types.parenR ? null : this.parseExpression();
- this.expect(types.parenR);
- node.body = this.parseStatement("for");
- this.exitScope();
- this.labels.pop();
- return this.finishNode(node, "ForStatement")
- };
-
- // Parse a `for`/`in` and `for`/`of` loop, which are almost
- // same from parser's perspective.
-
- pp$1.parseForIn = function(node, init) {
- var isForIn = this.type === types._in;
- this.next();
-
- if (
- init.type === "VariableDeclaration" &&
- init.declarations[0].init != null &&
- (
- !isForIn ||
- this.options.ecmaVersion < 8 ||
- this.strict ||
- init.kind !== "var" ||
- init.declarations[0].id.type !== "Identifier"
- )
- ) {
- this.raise(
- init.start,
- ((isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer")
- );
- }
- node.left = init;
- node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();
- this.expect(types.parenR);
- node.body = this.parseStatement("for");
- this.exitScope();
- this.labels.pop();
- return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement")
- };
-
- // Parse a list of variable declarations.
-
- pp$1.parseVar = function(node, isFor, kind) {
- node.declarations = [];
- node.kind = kind;
- for (;;) {
- var decl = this.startNode();
- this.parseVarId(decl, kind);
- if (this.eat(types.eq)) {
- decl.init = this.parseMaybeAssign(isFor);
- } else if (kind === "const" && !(this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) {
- this.unexpected();
- } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === types._in || this.isContextual("of")))) {
- this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value");
- } else {
- decl.init = null;
- }
- node.declarations.push(this.finishNode(decl, "VariableDeclarator"));
- if (!this.eat(types.comma)) { break }
- }
- return node
- };
-
- pp$1.parseVarId = function(decl, kind) {
- decl.id = this.parseBindingAtom();
- this.checkLValPattern(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false);
- };
-
- var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;
-
- // Parse a function declaration or literal (depending on the
- // `statement & FUNC_STATEMENT`).
-
- // Remove `allowExpressionBody` for 7.0.0, as it is only called with false
- pp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {
- this.initFunction(node);
- if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {
- if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT))
- { this.unexpected(); }
- node.generator = this.eat(types.star);
- }
- if (this.options.ecmaVersion >= 8)
- { node.async = !!isAsync; }
-
- if (statement & FUNC_STATEMENT) {
- node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent();
- if (node.id && !(statement & FUNC_HANGING_STATEMENT))
- // If it is a regular function declaration in sloppy mode, then it is
- // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding
- // mode depends on properties of the current scope (see
- // treatFunctionsAsVar).
- { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }
- }
-
- var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
- this.yieldPos = 0;
- this.awaitPos = 0;
- this.awaitIdentPos = 0;
- this.enterScope(functionFlags(node.async, node.generator));
-
- if (!(statement & FUNC_STATEMENT))
- { node.id = this.type === types.name ? this.parseIdent() : null; }
-
- this.parseFunctionParams(node);
- this.parseFunctionBody(node, allowExpressionBody, false, forInit);
-
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- this.awaitIdentPos = oldAwaitIdentPos;
- return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression")
- };
-
- pp$1.parseFunctionParams = function(node) {
- this.expect(types.parenL);
- node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);
- this.checkYieldAwaitInDefaultParams();
- };
-
- // Parse a class declaration or literal (depending on the
- // `isStatement` parameter).
-
- pp$1.parseClass = function(node, isStatement) {
- this.next();
-
- // ecma-262 14.6 Class Definitions
- // A class definition is always strict mode code.
- var oldStrict = this.strict;
- this.strict = true;
-
- this.parseClassId(node, isStatement);
- this.parseClassSuper(node);
- var privateNameMap = this.enterClassBody();
- var classBody = this.startNode();
- var hadConstructor = false;
- classBody.body = [];
- this.expect(types.braceL);
- while (this.type !== types.braceR) {
- var element = this.parseClassElement(node.superClass !== null);
- if (element) {
- classBody.body.push(element);
- if (element.type === "MethodDefinition" && element.kind === "constructor") {
- if (hadConstructor) { this.raise(element.start, "Duplicate constructor in the same class"); }
- hadConstructor = true;
- } else if (element.key && element.key.type === "PrivateIdentifier" && isPrivateNameConflicted(privateNameMap, element)) {
- this.raiseRecoverable(element.key.start, ("Identifier '#" + (element.key.name) + "' has already been declared"));
- }
- }
- }
- this.strict = oldStrict;
- this.next();
- node.body = this.finishNode(classBody, "ClassBody");
- this.exitClassBody();
- return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression")
- };
-
- pp$1.parseClassElement = function(constructorAllowsSuper) {
- if (this.eat(types.semi)) { return null }
-
- var ecmaVersion = this.options.ecmaVersion;
- var node = this.startNode();
- var keyName = "";
- var isGenerator = false;
- var isAsync = false;
- var kind = "method";
- var isStatic = false;
-
- if (this.eatContextual("static")) {
- // Parse static init block
- if (ecmaVersion >= 13 && this.eat(types.braceL)) {
- this.parseClassStaticBlock(node);
- return node
- }
- if (this.isClassElementNameStart() || this.type === types.star) {
- isStatic = true;
- } else {
- keyName = "static";
- }
- }
- node.static = isStatic;
- if (!keyName && ecmaVersion >= 8 && this.eatContextual("async")) {
- if ((this.isClassElementNameStart() || this.type === types.star) && !this.canInsertSemicolon()) {
- isAsync = true;
- } else {
- keyName = "async";
- }
- }
- if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types.star)) {
- isGenerator = true;
- }
- if (!keyName && !isAsync && !isGenerator) {
- var lastValue = this.value;
- if (this.eatContextual("get") || this.eatContextual("set")) {
- if (this.isClassElementNameStart()) {
- kind = lastValue;
- } else {
- keyName = lastValue;
- }
- }
- }
-
- // Parse element name
- if (keyName) {
- // 'async', 'get', 'set', or 'static' were not a keyword contextually.
- // The last token is any of those. Make it the element name.
- node.computed = false;
- node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);
- node.key.name = keyName;
- this.finishNode(node.key, "Identifier");
- } else {
- this.parseClassElementName(node);
- }
-
- // Parse element value
- if (ecmaVersion < 13 || this.type === types.parenL || kind !== "method" || isGenerator || isAsync) {
- var isConstructor = !node.static && checkKeyName(node, "constructor");
- var allowsDirectSuper = isConstructor && constructorAllowsSuper;
- // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.
- if (isConstructor && kind !== "method") { this.raise(node.key.start, "Constructor can't have get/set modifier"); }
- node.kind = isConstructor ? "constructor" : kind;
- this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);
- } else {
- this.parseClassField(node);
- }
-
- return node
- };
-
- pp$1.isClassElementNameStart = function() {
- return (
- this.type === types.name ||
- this.type === types.privateId ||
- this.type === types.num ||
- this.type === types.string ||
- this.type === types.bracketL ||
- this.type.keyword
- )
- };
-
- pp$1.parseClassElementName = function(element) {
- if (this.type === types.privateId) {
- if (this.value === "constructor") {
- this.raise(this.start, "Classes can't have an element named '#constructor'");
- }
- element.computed = false;
- element.key = this.parsePrivateIdent();
- } else {
- this.parsePropertyName(element);
- }
- };
-
- pp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {
- // Check key and flags
- var key = method.key;
- if (method.kind === "constructor") {
- if (isGenerator) { this.raise(key.start, "Constructor can't be a generator"); }
- if (isAsync) { this.raise(key.start, "Constructor can't be an async method"); }
- } else if (method.static && checkKeyName(method, "prototype")) {
- this.raise(key.start, "Classes may not have a static property named prototype");
- }
-
- // Parse value
- var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);
-
- // Check value
- if (method.kind === "get" && value.params.length !== 0)
- { this.raiseRecoverable(value.start, "getter should have no params"); }
- if (method.kind === "set" && value.params.length !== 1)
- { this.raiseRecoverable(value.start, "setter should have exactly one param"); }
- if (method.kind === "set" && value.params[0].type === "RestElement")
- { this.raiseRecoverable(value.params[0].start, "Setter cannot use rest params"); }
-
- return this.finishNode(method, "MethodDefinition")
- };
-
- pp$1.parseClassField = function(field) {
- if (checkKeyName(field, "constructor")) {
- this.raise(field.key.start, "Classes can't have a field named 'constructor'");
- } else if (field.static && checkKeyName(field, "prototype")) {
- this.raise(field.key.start, "Classes can't have a static field named 'prototype'");
- }
-
- if (this.eat(types.eq)) {
- // To raise SyntaxError if 'arguments' exists in the initializer.
- var scope = this.currentThisScope();
- var inClassFieldInit = scope.inClassFieldInit;
- scope.inClassFieldInit = true;
- field.value = this.parseMaybeAssign();
- scope.inClassFieldInit = inClassFieldInit;
- } else {
- field.value = null;
- }
- this.semicolon();
-
- return this.finishNode(field, "PropertyDefinition")
- };
-
- pp$1.parseClassStaticBlock = function(node) {
- node.body = [];
-
- var oldLabels = this.labels;
- this.labels = [];
- this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);
- while (this.type !== types.braceR) {
- var stmt = this.parseStatement(null);
- node.body.push(stmt);
- }
- this.next();
- this.exitScope();
- this.labels = oldLabels;
-
- return this.finishNode(node, "StaticBlock")
- };
-
- pp$1.parseClassId = function(node, isStatement) {
- if (this.type === types.name) {
- node.id = this.parseIdent();
- if (isStatement)
- { this.checkLValSimple(node.id, BIND_LEXICAL, false); }
- } else {
- if (isStatement === true)
- { this.unexpected(); }
- node.id = null;
- }
- };
-
- pp$1.parseClassSuper = function(node) {
- node.superClass = this.eat(types._extends) ? this.parseExprSubscripts(false) : null;
- };
-
- pp$1.enterClassBody = function() {
- var element = {declared: Object.create(null), used: []};
- this.privateNameStack.push(element);
- return element.declared
- };
-
- pp$1.exitClassBody = function() {
- var ref = this.privateNameStack.pop();
- var declared = ref.declared;
- var used = ref.used;
- var len = this.privateNameStack.length;
- var parent = len === 0 ? null : this.privateNameStack[len - 1];
- for (var i = 0; i < used.length; ++i) {
- var id = used[i];
- if (!has(declared, id.name)) {
- if (parent) {
- parent.used.push(id);
- } else {
- this.raiseRecoverable(id.start, ("Private field '#" + (id.name) + "' must be declared in an enclosing class"));
- }
- }
- }
- };
-
- function isPrivateNameConflicted(privateNameMap, element) {
- var name = element.key.name;
- var curr = privateNameMap[name];
-
- var next = "true";
- if (element.type === "MethodDefinition" && (element.kind === "get" || element.kind === "set")) {
- next = (element.static ? "s" : "i") + element.kind;
- }
-
- // `class { get #a(){}; static set #a(_){} }` is also conflict.
- if (
- curr === "iget" && next === "iset" ||
- curr === "iset" && next === "iget" ||
- curr === "sget" && next === "sset" ||
- curr === "sset" && next === "sget"
- ) {
- privateNameMap[name] = "true";
- return false
- } else if (!curr) {
- privateNameMap[name] = next;
- return false
- } else {
- return true
- }
- }
-
- function checkKeyName(node, name) {
- var computed = node.computed;
- var key = node.key;
- return !computed && (
- key.type === "Identifier" && key.name === name ||
- key.type === "Literal" && key.value === name
- )
- }
-
- // Parses module export declaration.
-
- pp$1.parseExport = function(node, exports) {
- this.next();
- // export * from '...'
- if (this.eat(types.star)) {
- if (this.options.ecmaVersion >= 11) {
- if (this.eatContextual("as")) {
- node.exported = this.parseIdent(true);
- this.checkExport(exports, node.exported.name, this.lastTokStart);
- } else {
- node.exported = null;
- }
- }
- this.expectContextual("from");
- if (this.type !== types.string) { this.unexpected(); }
- node.source = this.parseExprAtom();
- this.semicolon();
- return this.finishNode(node, "ExportAllDeclaration")
- }
- if (this.eat(types._default)) { // export default ...
- this.checkExport(exports, "default", this.lastTokStart);
- var isAsync;
- if (this.type === types._function || (isAsync = this.isAsyncFunction())) {
- var fNode = this.startNode();
- this.next();
- if (isAsync) { this.next(); }
- node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);
- } else if (this.type === types._class) {
- var cNode = this.startNode();
- node.declaration = this.parseClass(cNode, "nullableID");
- } else {
- node.declaration = this.parseMaybeAssign();
- this.semicolon();
- }
- return this.finishNode(node, "ExportDefaultDeclaration")
- }
- // export var|const|let|function|class ...
- if (this.shouldParseExportStatement()) {
- node.declaration = this.parseStatement(null);
- if (node.declaration.type === "VariableDeclaration")
- { this.checkVariableExport(exports, node.declaration.declarations); }
- else
- { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); }
- node.specifiers = [];
- node.source = null;
- } else { // export { x, y as z } [from '...']
- node.declaration = null;
- node.specifiers = this.parseExportSpecifiers(exports);
- if (this.eatContextual("from")) {
- if (this.type !== types.string) { this.unexpected(); }
- node.source = this.parseExprAtom();
- } else {
- for (var i = 0, list = node.specifiers; i < list.length; i += 1) {
- // check for keywords used as local names
- var spec = list[i];
-
- this.checkUnreserved(spec.local);
- // check if export is defined
- this.checkLocalExport(spec.local);
- }
-
- node.source = null;
- }
- this.semicolon();
- }
- return this.finishNode(node, "ExportNamedDeclaration")
- };
-
- pp$1.checkExport = function(exports, name, pos) {
- if (!exports) { return }
- if (has(exports, name))
- { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); }
- exports[name] = true;
- };
-
- pp$1.checkPatternExport = function(exports, pat) {
- var type = pat.type;
- if (type === "Identifier")
- { this.checkExport(exports, pat.name, pat.start); }
- else if (type === "ObjectPattern")
- { for (var i = 0, list = pat.properties; i < list.length; i += 1)
- {
- var prop = list[i];
-
- this.checkPatternExport(exports, prop);
- } }
- else if (type === "ArrayPattern")
- { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {
- var elt = list$1[i$1];
-
- if (elt) { this.checkPatternExport(exports, elt); }
- } }
- else if (type === "Property")
- { this.checkPatternExport(exports, pat.value); }
- else if (type === "AssignmentPattern")
- { this.checkPatternExport(exports, pat.left); }
- else if (type === "RestElement")
- { this.checkPatternExport(exports, pat.argument); }
- else if (type === "ParenthesizedExpression")
- { this.checkPatternExport(exports, pat.expression); }
- };
-
- pp$1.checkVariableExport = function(exports, decls) {
- if (!exports) { return }
- for (var i = 0, list = decls; i < list.length; i += 1)
- {
- var decl = list[i];
-
- this.checkPatternExport(exports, decl.id);
- }
- };
-
- pp$1.shouldParseExportStatement = function() {
- return this.type.keyword === "var" ||
- this.type.keyword === "const" ||
- this.type.keyword === "class" ||
- this.type.keyword === "function" ||
- this.isLet() ||
- this.isAsyncFunction()
- };
-
- // Parses a comma-separated list of module exports.
-
- pp$1.parseExportSpecifiers = function(exports) {
- var nodes = [], first = true;
- // export { x, y as z } [from '...']
- this.expect(types.braceL);
- while (!this.eat(types.braceR)) {
- if (!first) {
- this.expect(types.comma);
- if (this.afterTrailingComma(types.braceR)) { break }
- } else { first = false; }
-
- var node = this.startNode();
- node.local = this.parseIdent(true);
- node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local;
- this.checkExport(exports, node.exported.name, node.exported.start);
- nodes.push(this.finishNode(node, "ExportSpecifier"));
- }
- return nodes
- };
-
- // Parses import declaration.
-
- pp$1.parseImport = function(node) {
- this.next();
- // import '...'
- if (this.type === types.string) {
- node.specifiers = empty;
- node.source = this.parseExprAtom();
- } else {
- node.specifiers = this.parseImportSpecifiers();
- this.expectContextual("from");
- node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected();
- }
- this.semicolon();
- return this.finishNode(node, "ImportDeclaration")
- };
-
- // Parses a comma-separated list of module imports.
-
- pp$1.parseImportSpecifiers = function() {
- var nodes = [], first = true;
- if (this.type === types.name) {
- // import defaultObj, { x, y as z } from '...'
- var node = this.startNode();
- node.local = this.parseIdent();
- this.checkLValSimple(node.local, BIND_LEXICAL);
- nodes.push(this.finishNode(node, "ImportDefaultSpecifier"));
- if (!this.eat(types.comma)) { return nodes }
- }
- if (this.type === types.star) {
- var node$1 = this.startNode();
- this.next();
- this.expectContextual("as");
- node$1.local = this.parseIdent();
- this.checkLValSimple(node$1.local, BIND_LEXICAL);
- nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier"));
- return nodes
- }
- this.expect(types.braceL);
- while (!this.eat(types.braceR)) {
- if (!first) {
- this.expect(types.comma);
- if (this.afterTrailingComma(types.braceR)) { break }
- } else { first = false; }
-
- var node$2 = this.startNode();
- node$2.imported = this.parseIdent(true);
- if (this.eatContextual("as")) {
- node$2.local = this.parseIdent();
- } else {
- this.checkUnreserved(node$2.imported);
- node$2.local = node$2.imported;
- }
- this.checkLValSimple(node$2.local, BIND_LEXICAL);
- nodes.push(this.finishNode(node$2, "ImportSpecifier"));
- }
- return nodes
- };
-
- // Set `ExpressionStatement#directive` property for directive prologues.
- pp$1.adaptDirectivePrologue = function(statements) {
- for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {
- statements[i].directive = statements[i].expression.raw.slice(1, -1);
- }
- };
- pp$1.isDirectiveCandidate = function(statement) {
- return (
- statement.type === "ExpressionStatement" &&
- statement.expression.type === "Literal" &&
- typeof statement.expression.value === "string" &&
- // Reject parenthesized strings.
- (this.input[statement.start] === "\"" || this.input[statement.start] === "'")
- )
- };
-
- var pp$2 = Parser.prototype;
-
- // Convert existing expression atom to assignable pattern
- // if possible.
-
- pp$2.toAssignable = function(node, isBinding, refDestructuringErrors) {
- if (this.options.ecmaVersion >= 6 && node) {
- switch (node.type) {
- case "Identifier":
- if (this.inAsync && node.name === "await")
- { this.raise(node.start, "Cannot use 'await' as identifier inside an async function"); }
- break
-
- case "ObjectPattern":
- case "ArrayPattern":
- case "AssignmentPattern":
- case "RestElement":
- break
-
- case "ObjectExpression":
- node.type = "ObjectPattern";
- if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
- for (var i = 0, list = node.properties; i < list.length; i += 1) {
- var prop = list[i];
-
- this.toAssignable(prop, isBinding);
- // Early error:
- // AssignmentRestProperty[Yield, Await] :
- // `...` DestructuringAssignmentTarget[Yield, Await]
- //
- // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.
- if (
- prop.type === "RestElement" &&
- (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern")
- ) {
- this.raise(prop.argument.start, "Unexpected token");
- }
- }
- break
-
- case "Property":
- // AssignmentProperty has type === "Property"
- if (node.kind !== "init") { this.raise(node.key.start, "Object pattern can't contain getter or setter"); }
- this.toAssignable(node.value, isBinding);
- break
-
- case "ArrayExpression":
- node.type = "ArrayPattern";
- if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
- this.toAssignableList(node.elements, isBinding);
- break
-
- case "SpreadElement":
- node.type = "RestElement";
- this.toAssignable(node.argument, isBinding);
- if (node.argument.type === "AssignmentPattern")
- { this.raise(node.argument.start, "Rest elements cannot have a default value"); }
- break
-
- case "AssignmentExpression":
- if (node.operator !== "=") { this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); }
- node.type = "AssignmentPattern";
- delete node.operator;
- this.toAssignable(node.left, isBinding);
- break
-
- case "ParenthesizedExpression":
- this.toAssignable(node.expression, isBinding, refDestructuringErrors);
- break
-
- case "ChainExpression":
- this.raiseRecoverable(node.start, "Optional chaining cannot appear in left-hand side");
- break
-
- case "MemberExpression":
- if (!isBinding) { break }
-
- default:
- this.raise(node.start, "Assigning to rvalue");
- }
- } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
- return node
- };
-
- // Convert list of expression atoms to binding list.
-
- pp$2.toAssignableList = function(exprList, isBinding) {
- var end = exprList.length;
- for (var i = 0; i < end; i++) {
- var elt = exprList[i];
- if (elt) { this.toAssignable(elt, isBinding); }
- }
- if (end) {
- var last = exprList[end - 1];
- if (this.options.ecmaVersion === 6 && isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier")
- { this.unexpected(last.argument.start); }
- }
- return exprList
- };
-
- // Parses spread element.
-
- pp$2.parseSpread = function(refDestructuringErrors) {
- var node = this.startNode();
- this.next();
- node.argument = this.parseMaybeAssign(false, refDestructuringErrors);
- return this.finishNode(node, "SpreadElement")
- };
-
- pp$2.parseRestBinding = function() {
- var node = this.startNode();
- this.next();
-
- // RestElement inside of a function parameter must be an identifier
- if (this.options.ecmaVersion === 6 && this.type !== types.name)
- { this.unexpected(); }
-
- node.argument = this.parseBindingAtom();
-
- return this.finishNode(node, "RestElement")
- };
-
- // Parses lvalue (assignable) atom.
-
- pp$2.parseBindingAtom = function() {
- if (this.options.ecmaVersion >= 6) {
- switch (this.type) {
- case types.bracketL:
- var node = this.startNode();
- this.next();
- node.elements = this.parseBindingList(types.bracketR, true, true);
- return this.finishNode(node, "ArrayPattern")
-
- case types.braceL:
- return this.parseObj(true)
- }
- }
- return this.parseIdent()
- };
-
- pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) {
- var elts = [], first = true;
- while (!this.eat(close)) {
- if (first) { first = false; }
- else { this.expect(types.comma); }
- if (allowEmpty && this.type === types.comma) {
- elts.push(null);
- } else if (allowTrailingComma && this.afterTrailingComma(close)) {
- break
- } else if (this.type === types.ellipsis) {
- var rest = this.parseRestBinding();
- this.parseBindingListItem(rest);
- elts.push(rest);
- if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
- this.expect(close);
- break
- } else {
- var elem = this.parseMaybeDefault(this.start, this.startLoc);
- this.parseBindingListItem(elem);
- elts.push(elem);
- }
- }
- return elts
- };
-
- pp$2.parseBindingListItem = function(param) {
- return param
- };
-
- // Parses assignment pattern around given atom if possible.
-
- pp$2.parseMaybeDefault = function(startPos, startLoc, left) {
- left = left || this.parseBindingAtom();
- if (this.options.ecmaVersion < 6 || !this.eat(types.eq)) { return left }
- var node = this.startNodeAt(startPos, startLoc);
- node.left = left;
- node.right = this.parseMaybeAssign();
- return this.finishNode(node, "AssignmentPattern")
- };
-
- // The following three functions all verify that a node is an lvalue —
- // something that can be bound, or assigned to. In order to do so, they perform
- // a variety of checks:
- //
- // - Check that none of the bound/assigned-to identifiers are reserved words.
- // - Record name declarations for bindings in the appropriate scope.
- // - Check duplicate argument names, if checkClashes is set.
- //
- // If a complex binding pattern is encountered (e.g., object and array
- // destructuring), the entire pattern is recursively checked.
- //
- // There are three versions of checkLVal*() appropriate for different
- // circumstances:
- //
- // - checkLValSimple() shall be used if the syntactic construct supports
- // nothing other than identifiers and member expressions. Parenthesized
- // expressions are also correctly handled. This is generally appropriate for
- // constructs for which the spec says
- //
- // > It is a Syntax Error if AssignmentTargetType of [the production] is not
- // > simple.
- //
- // It is also appropriate for checking if an identifier is valid and not
- // defined elsewhere, like import declarations or function/class identifiers.
- //
- // Examples where this is used include:
- // a += …;
- // import a from '…';
- // where a is the node to be checked.
- //
- // - checkLValPattern() shall be used if the syntactic construct supports
- // anything checkLValSimple() supports, as well as object and array
- // destructuring patterns. This is generally appropriate for constructs for
- // which the spec says
- //
- // > It is a Syntax Error if [the production] is neither an ObjectLiteral nor
- // > an ArrayLiteral and AssignmentTargetType of [the production] is not
- // > simple.
- //
- // Examples where this is used include:
- // (a = …);
- // const a = …;
- // try { … } catch (a) { … }
- // where a is the node to be checked.
- //
- // - checkLValInnerPattern() shall be used if the syntactic construct supports
- // anything checkLValPattern() supports, as well as default assignment
- // patterns, rest elements, and other constructs that may appear within an
- // object or array destructuring pattern.
- //
- // As a special case, function parameters also use checkLValInnerPattern(),
- // as they also support defaults and rest constructs.
- //
- // These functions deliberately support both assignment and binding constructs,
- // as the logic for both is exceedingly similar. If the node is the target of
- // an assignment, then bindingType should be set to BIND_NONE. Otherwise, it
- // should be set to the appropriate BIND_* constant, like BIND_VAR or
- // BIND_LEXICAL.
- //
- // If the function is called with a non-BIND_NONE bindingType, then
- // additionally a checkClashes object may be specified to allow checking for
- // duplicate argument names. checkClashes is ignored if the provided construct
- // is an assignment (i.e., bindingType is BIND_NONE).
-
- pp$2.checkLValSimple = function(expr, bindingType, checkClashes) {
- if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
- var isBind = bindingType !== BIND_NONE;
-
- switch (expr.type) {
- case "Identifier":
- if (this.strict && this.reservedWordsStrictBind.test(expr.name))
- { this.raiseRecoverable(expr.start, (isBind ? "Binding " : "Assigning to ") + expr.name + " in strict mode"); }
- if (isBind) {
- if (bindingType === BIND_LEXICAL && expr.name === "let")
- { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); }
- if (checkClashes) {
- if (has(checkClashes, expr.name))
- { this.raiseRecoverable(expr.start, "Argument name clash"); }
- checkClashes[expr.name] = true;
- }
- if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }
- }
- break
-
- case "ChainExpression":
- this.raiseRecoverable(expr.start, "Optional chaining cannot appear in left-hand side");
- break
-
- case "MemberExpression":
- if (isBind) { this.raiseRecoverable(expr.start, "Binding member expression"); }
- break
-
- case "ParenthesizedExpression":
- if (isBind) { this.raiseRecoverable(expr.start, "Binding parenthesized expression"); }
- return this.checkLValSimple(expr.expression, bindingType, checkClashes)
-
- default:
- this.raise(expr.start, (isBind ? "Binding" : "Assigning to") + " rvalue");
- }
- };
-
- pp$2.checkLValPattern = function(expr, bindingType, checkClashes) {
- if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
- switch (expr.type) {
- case "ObjectPattern":
- for (var i = 0, list = expr.properties; i < list.length; i += 1) {
- var prop = list[i];
-
- this.checkLValInnerPattern(prop, bindingType, checkClashes);
- }
- break
-
- case "ArrayPattern":
- for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {
- var elem = list$1[i$1];
-
- if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }
- }
- break
-
- default:
- this.checkLValSimple(expr, bindingType, checkClashes);
- }
- };
-
- pp$2.checkLValInnerPattern = function(expr, bindingType, checkClashes) {
- if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
- switch (expr.type) {
- case "Property":
- // AssignmentProperty has type === "Property"
- this.checkLValInnerPattern(expr.value, bindingType, checkClashes);
- break
-
- case "AssignmentPattern":
- this.checkLValPattern(expr.left, bindingType, checkClashes);
- break
-
- case "RestElement":
- this.checkLValPattern(expr.argument, bindingType, checkClashes);
- break
-
- default:
- this.checkLValPattern(expr, bindingType, checkClashes);
- }
- };
-
- // The algorithm used to determine whether a regexp can appear at a
-
- var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {
- this.token = token;
- this.isExpr = !!isExpr;
- this.preserveSpace = !!preserveSpace;
- this.override = override;
- this.generator = !!generator;
- };
-
- var types$1 = {
- b_stat: new TokContext("{", false),
- b_expr: new TokContext("{", true),
- b_tmpl: new TokContext("${", false),
- p_stat: new TokContext("(", false),
- p_expr: new TokContext("(", true),
- q_tmpl: new TokContext("`", true, true, function (p) { return p.tryReadTemplateToken(); }),
- f_stat: new TokContext("function", false),
- f_expr: new TokContext("function", true),
- f_expr_gen: new TokContext("function", true, false, null, true),
- f_gen: new TokContext("function", false, false, null, true)
- };
-
- var pp$3 = Parser.prototype;
-
- pp$3.initialContext = function() {
- return [types$1.b_stat]
- };
-
- pp$3.curContext = function() {
- return this.context[this.context.length - 1]
- };
-
- pp$3.braceIsBlock = function(prevType) {
- var parent = this.curContext();
- if (parent === types$1.f_expr || parent === types$1.f_stat)
- { return true }
- if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr))
- { return !parent.isExpr }
-
- // The check for `tt.name && exprAllowed` detects whether we are
- // after a `yield` or `of` construct. See the `updateContext` for
- // `tt.name`.
- if (prevType === types._return || prevType === types.name && this.exprAllowed)
- { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }
- if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow)
- { return true }
- if (prevType === types.braceL)
- { return parent === types$1.b_stat }
- if (prevType === types._var || prevType === types._const || prevType === types.name)
- { return false }
- return !this.exprAllowed
- };
-
- pp$3.inGeneratorContext = function() {
- for (var i = this.context.length - 1; i >= 1; i--) {
- var context = this.context[i];
- if (context.token === "function")
- { return context.generator }
- }
- return false
- };
-
- pp$3.updateContext = function(prevType) {
- var update, type = this.type;
- if (type.keyword && prevType === types.dot)
- { this.exprAllowed = false; }
- else if (update = type.updateContext)
- { update.call(this, prevType); }
- else
- { this.exprAllowed = type.beforeExpr; }
- };
-
- // Used to handle egde case when token context could not be inferred correctly in tokenize phase
- pp$3.overrideContext = function(tokenCtx) {
- if (this.curContext() !== tokenCtx) {
- this.context[this.context.length - 1] = tokenCtx;
- }
- };
-
- // Token-specific context update code
-
- types.parenR.updateContext = types.braceR.updateContext = function() {
- if (this.context.length === 1) {
- this.exprAllowed = true;
- return
- }
- var out = this.context.pop();
- if (out === types$1.b_stat && this.curContext().token === "function") {
- out = this.context.pop();
- }
- this.exprAllowed = !out.isExpr;
- };
-
- types.braceL.updateContext = function(prevType) {
- this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr);
- this.exprAllowed = true;
- };
-
- types.dollarBraceL.updateContext = function() {
- this.context.push(types$1.b_tmpl);
- this.exprAllowed = true;
- };
-
- types.parenL.updateContext = function(prevType) {
- var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;
- this.context.push(statementParens ? types$1.p_stat : types$1.p_expr);
- this.exprAllowed = true;
- };
-
- types.incDec.updateContext = function() {
- // tokExprAllowed stays unchanged
- };
-
- types._function.updateContext = types._class.updateContext = function(prevType) {
- if (prevType.beforeExpr && prevType !== types._else &&
- !(prevType === types.semi && this.curContext() !== types$1.p_stat) &&
- !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&
- !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat))
- { this.context.push(types$1.f_expr); }
- else
- { this.context.push(types$1.f_stat); }
- this.exprAllowed = false;
- };
-
- types.backQuote.updateContext = function() {
- if (this.curContext() === types$1.q_tmpl)
- { this.context.pop(); }
- else
- { this.context.push(types$1.q_tmpl); }
- this.exprAllowed = false;
- };
-
- types.star.updateContext = function(prevType) {
- if (prevType === types._function) {
- var index = this.context.length - 1;
- if (this.context[index] === types$1.f_expr)
- { this.context[index] = types$1.f_expr_gen; }
- else
- { this.context[index] = types$1.f_gen; }
- }
- this.exprAllowed = true;
- };
-
- types.name.updateContext = function(prevType) {
- var allowed = false;
- if (this.options.ecmaVersion >= 6 && prevType !== types.dot) {
- if (this.value === "of" && !this.exprAllowed ||
- this.value === "yield" && this.inGeneratorContext())
- { allowed = true; }
- }
- this.exprAllowed = allowed;
- };
-
- // A recursive descent parser operates by defining functions for all
-
- var pp$4 = Parser.prototype;
-
- // Check if property name clashes with already added.
- // Object/class getters and setters are not allowed to clash —
- // either with each other or with an init property — and in
- // strict mode, init properties are also not allowed to be repeated.
-
- pp$4.checkPropClash = function(prop, propHash, refDestructuringErrors) {
- if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement")
- { return }
- if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))
- { return }
- var key = prop.key;
- var name;
- switch (key.type) {
- case "Identifier": name = key.name; break
- case "Literal": name = String(key.value); break
- default: return
- }
- var kind = prop.kind;
- if (this.options.ecmaVersion >= 6) {
- if (name === "__proto__" && kind === "init") {
- if (propHash.proto) {
- if (refDestructuringErrors) {
- if (refDestructuringErrors.doubleProto < 0)
- { refDestructuringErrors.doubleProto = key.start; }
- // Backwards-compat kludge. Can be removed in version 6.0
- } else { this.raiseRecoverable(key.start, "Redefinition of __proto__ property"); }
- }
- propHash.proto = true;
- }
- return
- }
- name = "$" + name;
- var other = propHash[name];
- if (other) {
- var redefinition;
- if (kind === "init") {
- redefinition = this.strict && other.init || other.get || other.set;
- } else {
- redefinition = other.init || other[kind];
- }
- if (redefinition)
- { this.raiseRecoverable(key.start, "Redefinition of property"); }
- } else {
- other = propHash[name] = {
- init: false,
- get: false,
- set: false
- };
- }
- other[kind] = true;
- };
-
- // ### Expression parsing
-
- // These nest, from the most general expression type at the top to
- // 'atomic', nondivisible expression types at the bottom. Most of
- // the functions will simply let the function(s) below them parse,
- // and, *if* the syntactic construct they handle is present, wrap
- // the AST node that the inner parser gave them in another node.
-
- // Parse a full expression. The optional arguments are used to
- // forbid the `in` operator (in for loops initalization expressions)
- // and provide reference for storing '=' operator inside shorthand
- // property assignment in contexts where both object expression
- // and object pattern might appear (so it's possible to raise
- // delayed syntax error at correct position).
-
- pp$4.parseExpression = function(forInit, refDestructuringErrors) {
- var startPos = this.start, startLoc = this.startLoc;
- var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);
- if (this.type === types.comma) {
- var node = this.startNodeAt(startPos, startLoc);
- node.expressions = [expr];
- while (this.eat(types.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }
- return this.finishNode(node, "SequenceExpression")
- }
- return expr
- };
-
- // Parse an assignment expression. This includes applications of
- // operators like `+=`.
-
- pp$4.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {
- if (this.isContextual("yield")) {
- if (this.inGenerator) { return this.parseYield(forInit) }
- // The tokenizer will assume an expression is allowed after
- // `yield`, but this isn't that kind of yield
- else { this.exprAllowed = false; }
- }
-
- var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1;
- if (refDestructuringErrors) {
- oldParenAssign = refDestructuringErrors.parenthesizedAssign;
- oldTrailingComma = refDestructuringErrors.trailingComma;
- refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;
- } else {
- refDestructuringErrors = new DestructuringErrors;
- ownDestructuringErrors = true;
- }
-
- var startPos = this.start, startLoc = this.startLoc;
- if (this.type === types.parenL || this.type === types.name) {
- this.potentialArrowAt = this.start;
- this.potentialArrowInForAwait = forInit === "await";
- }
- var left = this.parseMaybeConditional(forInit, refDestructuringErrors);
- if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }
- if (this.type.isAssign) {
- var node = this.startNodeAt(startPos, startLoc);
- node.operator = this.value;
- if (this.type === types.eq)
- { left = this.toAssignable(left, false, refDestructuringErrors); }
- if (!ownDestructuringErrors) {
- refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;
- }
- if (refDestructuringErrors.shorthandAssign >= left.start)
- { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly
- if (this.type === types.eq)
- { this.checkLValPattern(left); }
- else
- { this.checkLValSimple(left); }
- node.left = left;
- this.next();
- node.right = this.parseMaybeAssign(forInit);
- return this.finishNode(node, "AssignmentExpression")
- } else {
- if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }
- }
- if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }
- if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }
- return left
- };
-
- // Parse a ternary conditional (`?:`) operator.
-
- pp$4.parseMaybeConditional = function(forInit, refDestructuringErrors) {
- var startPos = this.start, startLoc = this.startLoc;
- var expr = this.parseExprOps(forInit, refDestructuringErrors);
- if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
- if (this.eat(types.question)) {
- var node = this.startNodeAt(startPos, startLoc);
- node.test = expr;
- node.consequent = this.parseMaybeAssign();
- this.expect(types.colon);
- node.alternate = this.parseMaybeAssign(forInit);
- return this.finishNode(node, "ConditionalExpression")
- }
- return expr
- };
-
- // Start the precedence parser.
-
- pp$4.parseExprOps = function(forInit, refDestructuringErrors) {
- var startPos = this.start, startLoc = this.startLoc;
- var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);
- if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
- return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)
- };
-
- // Parse binary operators with the operator precedence parsing
- // algorithm. `left` is the left-hand side of the operator.
- // `minPrec` provides context that allows the function to stop and
- // defer further parser to one of its callers when it encounters an
- // operator that has a lower precedence than the set it is parsing.
-
- pp$4.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {
- var prec = this.type.binop;
- if (prec != null && (!forInit || this.type !== types._in)) {
- if (prec > minPrec) {
- var logical = this.type === types.logicalOR || this.type === types.logicalAND;
- var coalesce = this.type === types.coalesce;
- if (coalesce) {
- // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.
- // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.
- prec = types.logicalAND.binop;
- }
- var op = this.value;
- this.next();
- var startPos = this.start, startLoc = this.startLoc;
- var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);
- var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);
- if ((logical && this.type === types.coalesce) || (coalesce && (this.type === types.logicalOR || this.type === types.logicalAND))) {
- this.raiseRecoverable(this.start, "Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses");
- }
- return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)
- }
- }
- return left
- };
-
- pp$4.buildBinary = function(startPos, startLoc, left, right, op, logical) {
- var node = this.startNodeAt(startPos, startLoc);
- node.left = left;
- node.operator = op;
- node.right = right;
- return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression")
- };
-
- // Parse unary operators, both prefix and postfix.
-
- pp$4.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {
- var startPos = this.start, startLoc = this.startLoc, expr;
- if (this.isContextual("await") && this.canAwait) {
- expr = this.parseAwait(forInit);
- sawUnary = true;
- } else if (this.type.prefix) {
- var node = this.startNode(), update = this.type === types.incDec;
- node.operator = this.value;
- node.prefix = true;
- this.next();
- node.argument = this.parseMaybeUnary(null, true, update, forInit);
- this.checkExpressionErrors(refDestructuringErrors, true);
- if (update) { this.checkLValSimple(node.argument); }
- else if (this.strict && node.operator === "delete" &&
- node.argument.type === "Identifier")
- { this.raiseRecoverable(node.start, "Deleting local variable in strict mode"); }
- else if (node.operator === "delete" && isPrivateFieldAccess(node.argument))
- { this.raiseRecoverable(node.start, "Private fields can not be deleted"); }
- else { sawUnary = true; }
- expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");
- } else {
- expr = this.parseExprSubscripts(refDestructuringErrors, forInit);
- if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
- while (this.type.postfix && !this.canInsertSemicolon()) {
- var node$1 = this.startNodeAt(startPos, startLoc);
- node$1.operator = this.value;
- node$1.prefix = false;
- node$1.argument = expr;
- this.checkLValSimple(expr);
- this.next();
- expr = this.finishNode(node$1, "UpdateExpression");
- }
- }
-
- if (!incDec && this.eat(types.starstar)) {
- if (sawUnary)
- { this.unexpected(this.lastTokStart); }
- else
- { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), "**", false) }
- } else {
- return expr
- }
- };
-
- function isPrivateFieldAccess(node) {
- return (
- node.type === "MemberExpression" && node.property.type === "PrivateIdentifier" ||
- node.type === "ChainExpression" && isPrivateFieldAccess(node.expression)
- )
- }
-
- // Parse call, dot, and `[]`-subscript expressions.
-
- pp$4.parseExprSubscripts = function(refDestructuringErrors, forInit) {
- var startPos = this.start, startLoc = this.startLoc;
- var expr = this.parseExprAtom(refDestructuringErrors, forInit);
- if (expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")")
- { return expr }
- var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);
- if (refDestructuringErrors && result.type === "MemberExpression") {
- if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }
- if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }
- if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }
- }
- return result
- };
-
- pp$4.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {
- var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" &&
- this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&
- this.potentialArrowAt === base.start;
- var optionalChained = false;
-
- while (true) {
- var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);
-
- if (element.optional) { optionalChained = true; }
- if (element === base || element.type === "ArrowFunctionExpression") {
- if (optionalChained) {
- var chainNode = this.startNodeAt(startPos, startLoc);
- chainNode.expression = element;
- element = this.finishNode(chainNode, "ChainExpression");
- }
- return element
- }
-
- base = element;
- }
- };
-
- pp$4.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {
- var optionalSupported = this.options.ecmaVersion >= 11;
- var optional = optionalSupported && this.eat(types.questionDot);
- if (noCalls && optional) { this.raise(this.lastTokStart, "Optional chaining cannot appear in the callee of new expressions"); }
-
- var computed = this.eat(types.bracketL);
- if (computed || (optional && this.type !== types.parenL && this.type !== types.backQuote) || this.eat(types.dot)) {
- var node = this.startNodeAt(startPos, startLoc);
- node.object = base;
- if (computed) {
- node.property = this.parseExpression();
- this.expect(types.bracketR);
- } else if (this.type === types.privateId && base.type !== "Super") {
- node.property = this.parsePrivateIdent();
- } else {
- node.property = this.parseIdent(this.options.allowReserved !== "never");
- }
- node.computed = !!computed;
- if (optionalSupported) {
- node.optional = optional;
- }
- base = this.finishNode(node, "MemberExpression");
- } else if (!noCalls && this.eat(types.parenL)) {
- var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
- this.yieldPos = 0;
- this.awaitPos = 0;
- this.awaitIdentPos = 0;
- var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);
- if (maybeAsyncArrow && !optional && !this.canInsertSemicolon() && this.eat(types.arrow)) {
- this.checkPatternErrors(refDestructuringErrors, false);
- this.checkYieldAwaitInDefaultParams();
- if (this.awaitIdentPos > 0)
- { this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function"); }
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- this.awaitIdentPos = oldAwaitIdentPos;
- return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)
- }
- this.checkExpressionErrors(refDestructuringErrors, true);
- this.yieldPos = oldYieldPos || this.yieldPos;
- this.awaitPos = oldAwaitPos || this.awaitPos;
- this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;
- var node$1 = this.startNodeAt(startPos, startLoc);
- node$1.callee = base;
- node$1.arguments = exprList;
- if (optionalSupported) {
- node$1.optional = optional;
- }
- base = this.finishNode(node$1, "CallExpression");
- } else if (this.type === types.backQuote) {
- if (optional || optionalChained) {
- this.raise(this.start, "Optional chaining cannot appear in the tag of tagged template expressions");
- }
- var node$2 = this.startNodeAt(startPos, startLoc);
- node$2.tag = base;
- node$2.quasi = this.parseTemplate({isTagged: true});
- base = this.finishNode(node$2, "TaggedTemplateExpression");
- }
- return base
- };
-
- // Parse an atomic expression — either a single token that is an
- // expression, an expression started by a keyword like `function` or
- // `new`, or an expression wrapped in punctuation like `()`, `[]`,
- // or `{}`.
-
- pp$4.parseExprAtom = function(refDestructuringErrors, forInit) {
- // If a division operator appears in an expression position, the
- // tokenizer got confused, and we force it to read a regexp instead.
- if (this.type === types.slash) { this.readRegexp(); }
-
- var node, canBeArrow = this.potentialArrowAt === this.start;
- switch (this.type) {
- case types._super:
- if (!this.allowSuper)
- { this.raise(this.start, "'super' keyword outside a method"); }
- node = this.startNode();
- this.next();
- if (this.type === types.parenL && !this.allowDirectSuper)
- { this.raise(node.start, "super() call outside constructor of a subclass"); }
- // The `super` keyword can appear at below:
- // SuperProperty:
- // super [ Expression ]
- // super . IdentifierName
- // SuperCall:
- // super ( Arguments )
- if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL)
- { this.unexpected(); }
- return this.finishNode(node, "Super")
-
- case types._this:
- node = this.startNode();
- this.next();
- return this.finishNode(node, "ThisExpression")
-
- case types.name:
- var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;
- var id = this.parseIdent(false);
- if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types._function)) {
- this.overrideContext(types$1.f_expr);
- return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)
- }
- if (canBeArrow && !this.canInsertSemicolon()) {
- if (this.eat(types.arrow))
- { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }
- if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types.name && !containsEsc &&
- (!this.potentialArrowInForAwait || this.value !== "of" || this.containsEsc)) {
- id = this.parseIdent(false);
- if (this.canInsertSemicolon() || !this.eat(types.arrow))
- { this.unexpected(); }
- return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)
- }
- }
- return id
-
- case types.regexp:
- var value = this.value;
- node = this.parseLiteral(value.value);
- node.regex = {pattern: value.pattern, flags: value.flags};
- return node
-
- case types.num: case types.string:
- return this.parseLiteral(this.value)
-
- case types._null: case types._true: case types._false:
- node = this.startNode();
- node.value = this.type === types._null ? null : this.type === types._true;
- node.raw = this.type.keyword;
- this.next();
- return this.finishNode(node, "Literal")
-
- case types.parenL:
- var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);
- if (refDestructuringErrors) {
- if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))
- { refDestructuringErrors.parenthesizedAssign = start; }
- if (refDestructuringErrors.parenthesizedBind < 0)
- { refDestructuringErrors.parenthesizedBind = start; }
- }
- return expr
-
- case types.bracketL:
- node = this.startNode();
- this.next();
- node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors);
- return this.finishNode(node, "ArrayExpression")
-
- case types.braceL:
- this.overrideContext(types$1.b_expr);
- return this.parseObj(false, refDestructuringErrors)
-
- case types._function:
- node = this.startNode();
- this.next();
- return this.parseFunction(node, 0)
-
- case types._class:
- return this.parseClass(this.startNode(), false)
-
- case types._new:
- return this.parseNew()
-
- case types.backQuote:
- return this.parseTemplate()
-
- case types._import:
- if (this.options.ecmaVersion >= 11) {
- return this.parseExprImport()
- } else {
- return this.unexpected()
- }
-
- default:
- this.unexpected();
- }
- };
-
- pp$4.parseExprImport = function() {
- var node = this.startNode();
-
- // Consume `import` as an identifier for `import.meta`.
- // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.
- if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword import"); }
- var meta = this.parseIdent(true);
-
- switch (this.type) {
- case types.parenL:
- return this.parseDynamicImport(node)
- case types.dot:
- node.meta = meta;
- return this.parseImportMeta(node)
- default:
- this.unexpected();
- }
- };
-
- pp$4.parseDynamicImport = function(node) {
- this.next(); // skip `(`
-
- // Parse node.source.
- node.source = this.parseMaybeAssign();
-
- // Verify ending.
- if (!this.eat(types.parenR)) {
- var errorPos = this.start;
- if (this.eat(types.comma) && this.eat(types.parenR)) {
- this.raiseRecoverable(errorPos, "Trailing comma is not allowed in import()");
- } else {
- this.unexpected(errorPos);
- }
- }
-
- return this.finishNode(node, "ImportExpression")
- };
-
- pp$4.parseImportMeta = function(node) {
- this.next(); // skip `.`
-
- var containsEsc = this.containsEsc;
- node.property = this.parseIdent(true);
-
- if (node.property.name !== "meta")
- { this.raiseRecoverable(node.property.start, "The only valid meta property for import is 'import.meta'"); }
- if (containsEsc)
- { this.raiseRecoverable(node.start, "'import.meta' must not contain escaped characters"); }
- if (this.options.sourceType !== "module" && !this.options.allowImportExportEverywhere)
- { this.raiseRecoverable(node.start, "Cannot use 'import.meta' outside a module"); }
-
- return this.finishNode(node, "MetaProperty")
- };
-
- pp$4.parseLiteral = function(value) {
- var node = this.startNode();
- node.value = value;
- node.raw = this.input.slice(this.start, this.end);
- if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, ""); }
- this.next();
- return this.finishNode(node, "Literal")
- };
-
- pp$4.parseParenExpression = function() {
- this.expect(types.parenL);
- var val = this.parseExpression();
- this.expect(types.parenR);
- return val
- };
-
- pp$4.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {
- var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;
- if (this.options.ecmaVersion >= 6) {
- this.next();
-
- var innerStartPos = this.start, innerStartLoc = this.startLoc;
- var exprList = [], first = true, lastIsComma = false;
- var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;
- this.yieldPos = 0;
- this.awaitPos = 0;
- // Do not save awaitIdentPos to allow checking awaits nested in parameters
- while (this.type !== types.parenR) {
- first ? first = false : this.expect(types.comma);
- if (allowTrailingComma && this.afterTrailingComma(types.parenR, true)) {
- lastIsComma = true;
- break
- } else if (this.type === types.ellipsis) {
- spreadStart = this.start;
- exprList.push(this.parseParenItem(this.parseRestBinding()));
- if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
- break
- } else {
- exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));
- }
- }
- var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;
- this.expect(types.parenR);
-
- if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {
- this.checkPatternErrors(refDestructuringErrors, false);
- this.checkYieldAwaitInDefaultParams();
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- return this.parseParenArrowList(startPos, startLoc, exprList, forInit)
- }
-
- if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }
- if (spreadStart) { this.unexpected(spreadStart); }
- this.checkExpressionErrors(refDestructuringErrors, true);
- this.yieldPos = oldYieldPos || this.yieldPos;
- this.awaitPos = oldAwaitPos || this.awaitPos;
-
- if (exprList.length > 1) {
- val = this.startNodeAt(innerStartPos, innerStartLoc);
- val.expressions = exprList;
- this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);
- } else {
- val = exprList[0];
- }
- } else {
- val = this.parseParenExpression();
- }
-
- if (this.options.preserveParens) {
- var par = this.startNodeAt(startPos, startLoc);
- par.expression = val;
- return this.finishNode(par, "ParenthesizedExpression")
- } else {
- return val
- }
- };
-
- pp$4.parseParenItem = function(item) {
- return item
- };
-
- pp$4.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {
- return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, forInit)
- };
-
- // New's precedence is slightly tricky. It must allow its argument to
- // be a `[]` or dot subscript expression, but not a call — at least,
- // not without wrapping it in parentheses. Thus, it uses the noCalls
- // argument to parseSubscripts to prevent it from consuming the
- // argument list.
-
- var empty$1 = [];
-
- pp$4.parseNew = function() {
- if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword new"); }
- var node = this.startNode();
- var meta = this.parseIdent(true);
- if (this.options.ecmaVersion >= 6 && this.eat(types.dot)) {
- node.meta = meta;
- var containsEsc = this.containsEsc;
- node.property = this.parseIdent(true);
- if (node.property.name !== "target")
- { this.raiseRecoverable(node.property.start, "The only valid meta property for new is 'new.target'"); }
- if (containsEsc)
- { this.raiseRecoverable(node.start, "'new.target' must not contain escaped characters"); }
- if (!this.allowNewDotTarget)
- { this.raiseRecoverable(node.start, "'new.target' can only be used in functions and class static block"); }
- return this.finishNode(node, "MetaProperty")
- }
- var startPos = this.start, startLoc = this.startLoc, isImport = this.type === types._import;
- node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true, false);
- if (isImport && node.callee.type === "ImportExpression") {
- this.raise(startPos, "Cannot use new with import()");
- }
- if (this.eat(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false); }
- else { node.arguments = empty$1; }
- return this.finishNode(node, "NewExpression")
- };
-
- // Parse template expression.
-
- pp$4.parseTemplateElement = function(ref) {
- var isTagged = ref.isTagged;
-
- var elem = this.startNode();
- if (this.type === types.invalidTemplate) {
- if (!isTagged) {
- this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal");
- }
- elem.value = {
- raw: this.value,
- cooked: null
- };
- } else {
- elem.value = {
- raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"),
- cooked: this.value
- };
- }
- this.next();
- elem.tail = this.type === types.backQuote;
- return this.finishNode(elem, "TemplateElement")
- };
-
- pp$4.parseTemplate = function(ref) {
- if ( ref === void 0 ) ref = {};
- var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;
-
- var node = this.startNode();
- this.next();
- node.expressions = [];
- var curElt = this.parseTemplateElement({isTagged: isTagged});
- node.quasis = [curElt];
- while (!curElt.tail) {
- if (this.type === types.eof) { this.raise(this.pos, "Unterminated template literal"); }
- this.expect(types.dollarBraceL);
- node.expressions.push(this.parseExpression());
- this.expect(types.braceR);
- node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));
- }
- this.next();
- return this.finishNode(node, "TemplateLiteral")
- };
-
- pp$4.isAsyncProp = function(prop) {
- return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" &&
- (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) &&
- !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
- };
-
- // Parse an object literal or binding pattern.
-
- pp$4.parseObj = function(isPattern, refDestructuringErrors) {
- var node = this.startNode(), first = true, propHash = {};
- node.properties = [];
- this.next();
- while (!this.eat(types.braceR)) {
- if (!first) {
- this.expect(types.comma);
- if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types.braceR)) { break }
- } else { first = false; }
-
- var prop = this.parseProperty(isPattern, refDestructuringErrors);
- if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }
- node.properties.push(prop);
- }
- return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression")
- };
-
- pp$4.parseProperty = function(isPattern, refDestructuringErrors) {
- var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;
- if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) {
- if (isPattern) {
- prop.argument = this.parseIdent(false);
- if (this.type === types.comma) {
- this.raise(this.start, "Comma is not permitted after the rest element");
- }
- return this.finishNode(prop, "RestElement")
- }
- // To disallow parenthesized identifier via `this.toAssignable()`.
- if (this.type === types.parenL && refDestructuringErrors) {
- if (refDestructuringErrors.parenthesizedAssign < 0) {
- refDestructuringErrors.parenthesizedAssign = this.start;
- }
- if (refDestructuringErrors.parenthesizedBind < 0) {
- refDestructuringErrors.parenthesizedBind = this.start;
- }
- }
- // Parse argument.
- prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);
- // To disallow trailing comma via `this.toAssignable()`.
- if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {
- refDestructuringErrors.trailingComma = this.start;
- }
- // Finish
- return this.finishNode(prop, "SpreadElement")
- }
- if (this.options.ecmaVersion >= 6) {
- prop.method = false;
- prop.shorthand = false;
- if (isPattern || refDestructuringErrors) {
- startPos = this.start;
- startLoc = this.startLoc;
- }
- if (!isPattern)
- { isGenerator = this.eat(types.star); }
- }
- var containsEsc = this.containsEsc;
- this.parsePropertyName(prop);
- if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {
- isAsync = true;
- isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);
- this.parsePropertyName(prop, refDestructuringErrors);
- } else {
- isAsync = false;
- }
- this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);
- return this.finishNode(prop, "Property")
- };
-
- pp$4.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {
- if ((isGenerator || isAsync) && this.type === types.colon)
- { this.unexpected(); }
-
- if (this.eat(types.colon)) {
- prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);
- prop.kind = "init";
- } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) {
- if (isPattern) { this.unexpected(); }
- prop.kind = "init";
- prop.method = true;
- prop.value = this.parseMethod(isGenerator, isAsync);
- } else if (!isPattern && !containsEsc &&
- this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" &&
- (prop.key.name === "get" || prop.key.name === "set") &&
- (this.type !== types.comma && this.type !== types.braceR && this.type !== types.eq)) {
- if (isGenerator || isAsync) { this.unexpected(); }
- prop.kind = prop.key.name;
- this.parsePropertyName(prop);
- prop.value = this.parseMethod(false);
- var paramCount = prop.kind === "get" ? 0 : 1;
- if (prop.value.params.length !== paramCount) {
- var start = prop.value.start;
- if (prop.kind === "get")
- { this.raiseRecoverable(start, "getter should have no params"); }
- else
- { this.raiseRecoverable(start, "setter should have exactly one param"); }
- } else {
- if (prop.kind === "set" && prop.value.params[0].type === "RestElement")
- { this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params"); }
- }
- } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {
- if (isGenerator || isAsync) { this.unexpected(); }
- this.checkUnreserved(prop.key);
- if (prop.key.name === "await" && !this.awaitIdentPos)
- { this.awaitIdentPos = startPos; }
- prop.kind = "init";
- if (isPattern) {
- prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));
- } else if (this.type === types.eq && refDestructuringErrors) {
- if (refDestructuringErrors.shorthandAssign < 0)
- { refDestructuringErrors.shorthandAssign = this.start; }
- prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));
- } else {
- prop.value = this.copyNode(prop.key);
- }
- prop.shorthand = true;
- } else { this.unexpected(); }
- };
-
- pp$4.parsePropertyName = function(prop) {
- if (this.options.ecmaVersion >= 6) {
- if (this.eat(types.bracketL)) {
- prop.computed = true;
- prop.key = this.parseMaybeAssign();
- this.expect(types.bracketR);
- return prop.key
- } else {
- prop.computed = false;
- }
- }
- return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never")
- };
-
- // Initialize empty function node.
-
- pp$4.initFunction = function(node) {
- node.id = null;
- if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }
- if (this.options.ecmaVersion >= 8) { node.async = false; }
- };
-
- // Parse object or class method.
-
- pp$4.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {
- var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
- this.initFunction(node);
- if (this.options.ecmaVersion >= 6)
- { node.generator = isGenerator; }
- if (this.options.ecmaVersion >= 8)
- { node.async = !!isAsync; }
-
- this.yieldPos = 0;
- this.awaitPos = 0;
- this.awaitIdentPos = 0;
- this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));
-
- this.expect(types.parenL);
- node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);
- this.checkYieldAwaitInDefaultParams();
- this.parseFunctionBody(node, false, true, false);
-
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- this.awaitIdentPos = oldAwaitIdentPos;
- return this.finishNode(node, "FunctionExpression")
- };
-
- // Parse arrow function expression with given parameters.
-
- pp$4.parseArrowExpression = function(node, params, isAsync, forInit) {
- var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
- this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);
- this.initFunction(node);
- if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }
-
- this.yieldPos = 0;
- this.awaitPos = 0;
- this.awaitIdentPos = 0;
-
- node.params = this.toAssignableList(params, true);
- this.parseFunctionBody(node, true, false, forInit);
-
- this.yieldPos = oldYieldPos;
- this.awaitPos = oldAwaitPos;
- this.awaitIdentPos = oldAwaitIdentPos;
- return this.finishNode(node, "ArrowFunctionExpression")
- };
-
- // Parse function body and check parameters.
-
- pp$4.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {
- var isExpression = isArrowFunction && this.type !== types.braceL;
- var oldStrict = this.strict, useStrict = false;
-
- if (isExpression) {
- node.body = this.parseMaybeAssign(forInit);
- node.expression = true;
- this.checkParams(node, false);
- } else {
- var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);
- if (!oldStrict || nonSimple) {
- useStrict = this.strictDirective(this.end);
- // If this is a strict mode function, verify that argument names
- // are not repeated, and it does not try to bind the words `eval`
- // or `arguments`.
- if (useStrict && nonSimple)
- { this.raiseRecoverable(node.start, "Illegal 'use strict' directive in function with non-simple parameter list"); }
- }
- // Start a new scope with regard to labels and the `inFunction`
- // flag (restore them to their old value afterwards).
- var oldLabels = this.labels;
- this.labels = [];
- if (useStrict) { this.strict = true; }
-
- // Add the params to varDeclaredNames to ensure that an error is thrown
- // if a let/const declaration in the function clashes with one of the params.
- this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));
- // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'
- if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }
- node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);
- node.expression = false;
- this.adaptDirectivePrologue(node.body.body);
- this.labels = oldLabels;
- }
- this.exitScope();
- };
-
- pp$4.isSimpleParamList = function(params) {
- for (var i = 0, list = params; i < list.length; i += 1)
- {
- var param = list[i];
-
- if (param.type !== "Identifier") { return false
- } }
- return true
- };
-
- // Checks function params for various disallowed patterns such as using "eval"
- // or "arguments" and duplicate parameters.
-
- pp$4.checkParams = function(node, allowDuplicates) {
- var nameHash = Object.create(null);
- for (var i = 0, list = node.params; i < list.length; i += 1)
- {
- var param = list[i];
-
- this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);
- }
- };
-
- // Parses a comma-separated list of expressions, and returns them as
- // an array. `close` is the token type that ends the list, and
- // `allowEmpty` can be turned on to allow subsequent commas with
- // nothing in between them to be parsed as `null` (which is needed
- // for array literals).
-
- pp$4.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {
- var elts = [], first = true;
- while (!this.eat(close)) {
- if (!first) {
- this.expect(types.comma);
- if (allowTrailingComma && this.afterTrailingComma(close)) { break }
- } else { first = false; }
-
- var elt = (void 0);
- if (allowEmpty && this.type === types.comma)
- { elt = null; }
- else if (this.type === types.ellipsis) {
- elt = this.parseSpread(refDestructuringErrors);
- if (refDestructuringErrors && this.type === types.comma && refDestructuringErrors.trailingComma < 0)
- { refDestructuringErrors.trailingComma = this.start; }
- } else {
- elt = this.parseMaybeAssign(false, refDestructuringErrors);
- }
- elts.push(elt);
- }
- return elts
- };
-
- pp$4.checkUnreserved = function(ref) {
- var start = ref.start;
- var end = ref.end;
- var name = ref.name;
-
- if (this.inGenerator && name === "yield")
- { this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator"); }
- if (this.inAsync && name === "await")
- { this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function"); }
- if (this.currentThisScope().inClassFieldInit && name === "arguments")
- { this.raiseRecoverable(start, "Cannot use 'arguments' in class field initializer"); }
- if (this.inClassStaticBlock && (name === "arguments" || name === "await"))
- { this.raise(start, ("Cannot use " + name + " in class static initialization block")); }
- if (this.keywords.test(name))
- { this.raise(start, ("Unexpected keyword '" + name + "'")); }
- if (this.options.ecmaVersion < 6 &&
- this.input.slice(start, end).indexOf("\\") !== -1) { return }
- var re = this.strict ? this.reservedWordsStrict : this.reservedWords;
- if (re.test(name)) {
- if (!this.inAsync && name === "await")
- { this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function"); }
- this.raiseRecoverable(start, ("The keyword '" + name + "' is reserved"));
- }
- };
-
- // Parse the next token as an identifier. If `liberal` is true (used
- // when parsing properties), it will also convert keywords into
- // identifiers.
-
- pp$4.parseIdent = function(liberal, isBinding) {
- var node = this.startNode();
- if (this.type === types.name) {
- node.name = this.value;
- } else if (this.type.keyword) {
- node.name = this.type.keyword;
-
- // To fix https://github.com/acornjs/acorn/issues/575
- // `class` and `function` keywords push new context into this.context.
- // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.
- // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword
- if ((node.name === "class" || node.name === "function") &&
- (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {
- this.context.pop();
- }
- } else {
- this.unexpected();
- }
- this.next(!!liberal);
- this.finishNode(node, "Identifier");
- if (!liberal) {
- this.checkUnreserved(node);
- if (node.name === "await" && !this.awaitIdentPos)
- { this.awaitIdentPos = node.start; }
- }
- return node
- };
-
- pp$4.parsePrivateIdent = function() {
- var node = this.startNode();
- if (this.type === types.privateId) {
- node.name = this.value;
- } else {
- this.unexpected();
- }
- this.next();
- this.finishNode(node, "PrivateIdentifier");
-
- // For validating existence
- if (this.privateNameStack.length === 0) {
- this.raise(node.start, ("Private field '#" + (node.name) + "' must be declared in an enclosing class"));
- } else {
- this.privateNameStack[this.privateNameStack.length - 1].used.push(node);
- }
-
- return node
- };
-
- // Parses yield expression inside generator.
-
- pp$4.parseYield = function(forInit) {
- if (!this.yieldPos) { this.yieldPos = this.start; }
-
- var node = this.startNode();
- this.next();
- if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) {
- node.delegate = false;
- node.argument = null;
- } else {
- node.delegate = this.eat(types.star);
- node.argument = this.parseMaybeAssign(forInit);
- }
- return this.finishNode(node, "YieldExpression")
- };
-
- pp$4.parseAwait = function(forInit) {
- if (!this.awaitPos) { this.awaitPos = this.start; }
-
- var node = this.startNode();
- this.next();
- node.argument = this.parseMaybeUnary(null, true, false, forInit);
- return this.finishNode(node, "AwaitExpression")
- };
-
- var pp$5 = Parser.prototype;
-
- // This function is used to raise exceptions on parse errors. It
- // takes an offset integer (into the current `input`) to indicate
- // the location of the error, attaches the position to the end
- // of the error message, and then raises a `SyntaxError` with that
- // message.
-
- pp$5.raise = function(pos, message) {
- var loc = getLineInfo(this.input, pos);
- message += " (" + loc.line + ":" + loc.column + ")";
- var err = new SyntaxError(message);
- err.pos = pos; err.loc = loc; err.raisedAt = this.pos;
- throw err
- };
-
- pp$5.raiseRecoverable = pp$5.raise;
-
- pp$5.curPosition = function() {
- if (this.options.locations) {
- return new Position(this.curLine, this.pos - this.lineStart)
- }
- };
-
- var pp$6 = Parser.prototype;
-
- var Scope = function Scope(flags) {
- this.flags = flags;
- // A list of var-declared names in the current lexical scope
- this.var = [];
- // A list of lexically-declared names in the current lexical scope
- this.lexical = [];
- // A list of lexically-declared FunctionDeclaration names in the current lexical scope
- this.functions = [];
- // A switch to disallow the identifier reference 'arguments'
- this.inClassFieldInit = false;
- };
-
- // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.
-
- pp$6.enterScope = function(flags) {
- this.scopeStack.push(new Scope(flags));
- };
-
- pp$6.exitScope = function() {
- this.scopeStack.pop();
- };
-
- // The spec says:
- // > At the top level of a function, or script, function declarations are
- // > treated like var declarations rather than like lexical declarations.
- pp$6.treatFunctionsAsVarInScope = function(scope) {
- return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)
- };
-
- pp$6.declareName = function(name, bindingType, pos) {
- var redeclared = false;
- if (bindingType === BIND_LEXICAL) {
- var scope = this.currentScope();
- redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;
- scope.lexical.push(name);
- if (this.inModule && (scope.flags & SCOPE_TOP))
- { delete this.undefinedExports[name]; }
- } else if (bindingType === BIND_SIMPLE_CATCH) {
- var scope$1 = this.currentScope();
- scope$1.lexical.push(name);
- } else if (bindingType === BIND_FUNCTION) {
- var scope$2 = this.currentScope();
- if (this.treatFunctionsAsVar)
- { redeclared = scope$2.lexical.indexOf(name) > -1; }
- else
- { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }
- scope$2.functions.push(name);
- } else {
- for (var i = this.scopeStack.length - 1; i >= 0; --i) {
- var scope$3 = this.scopeStack[i];
- if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||
- !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {
- redeclared = true;
- break
- }
- scope$3.var.push(name);
- if (this.inModule && (scope$3.flags & SCOPE_TOP))
- { delete this.undefinedExports[name]; }
- if (scope$3.flags & SCOPE_VAR) { break }
- }
- }
- if (redeclared) { this.raiseRecoverable(pos, ("Identifier '" + name + "' has already been declared")); }
- };
-
- pp$6.checkLocalExport = function(id) {
- // scope.functions must be empty as Module code is always strict.
- if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&
- this.scopeStack[0].var.indexOf(id.name) === -1) {
- this.undefinedExports[id.name] = id;
- }
- };
-
- pp$6.currentScope = function() {
- return this.scopeStack[this.scopeStack.length - 1]
- };
-
- pp$6.currentVarScope = function() {
- for (var i = this.scopeStack.length - 1;; i--) {
- var scope = this.scopeStack[i];
- if (scope.flags & SCOPE_VAR) { return scope }
- }
- };
-
- // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.
- pp$6.currentThisScope = function() {
- for (var i = this.scopeStack.length - 1;; i--) {
- var scope = this.scopeStack[i];
- if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }
- }
- };
-
- var Node = function Node(parser, pos, loc) {
- this.type = "";
- this.start = pos;
- this.end = 0;
- if (parser.options.locations)
- { this.loc = new SourceLocation(parser, loc); }
- if (parser.options.directSourceFile)
- { this.sourceFile = parser.options.directSourceFile; }
- if (parser.options.ranges)
- { this.range = [pos, 0]; }
- };
-
- // Start an AST node, attaching a start offset.
-
- var pp$7 = Parser.prototype;
-
- pp$7.startNode = function() {
- return new Node(this, this.start, this.startLoc)
- };
-
- pp$7.startNodeAt = function(pos, loc) {
- return new Node(this, pos, loc)
- };
-
- // Finish an AST node, adding `type` and `end` properties.
-
- function finishNodeAt(node, type, pos, loc) {
- node.type = type;
- node.end = pos;
- if (this.options.locations)
- { node.loc.end = loc; }
- if (this.options.ranges)
- { node.range[1] = pos; }
- return node
- }
-
- pp$7.finishNode = function(node, type) {
- return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)
- };
-
- // Finish node at given position
-
- pp$7.finishNodeAt = function(node, type, pos, loc) {
- return finishNodeAt.call(this, node, type, pos, loc)
- };
-
- pp$7.copyNode = function(node) {
- var newNode = new Node(this, node.start, this.startLoc);
- for (var prop in node) { newNode[prop] = node[prop]; }
- return newNode
- };
-
- // This file contains Unicode properties extracted from the ECMAScript
- // specification. The lists are extracted like so:
- // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)
-
- // #table-binary-unicode-properties
- var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS";
- var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";
- var ecma11BinaryProperties = ecma10BinaryProperties;
- var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict";
- var unicodeBinaryProperties = {
- 9: ecma9BinaryProperties,
- 10: ecma10BinaryProperties,
- 11: ecma11BinaryProperties,
- 12: ecma12BinaryProperties
- };
-
- // #table-unicode-general-category-values
- var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu";
-
- // #table-unicode-script-values
- var ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb";
- var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd";
- var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";
- var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi";
- var unicodeScriptValues = {
- 9: ecma9ScriptValues,
- 10: ecma10ScriptValues,
- 11: ecma11ScriptValues,
- 12: ecma12ScriptValues
- };
-
- var data = {};
- function buildUnicodeData(ecmaVersion) {
- var d = data[ecmaVersion] = {
- binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + " " + unicodeGeneralCategoryValues),
- nonBinary: {
- General_Category: wordsRegexp(unicodeGeneralCategoryValues),
- Script: wordsRegexp(unicodeScriptValues[ecmaVersion])
- }
- };
- d.nonBinary.Script_Extensions = d.nonBinary.Script;
-
- d.nonBinary.gc = d.nonBinary.General_Category;
- d.nonBinary.sc = d.nonBinary.Script;
- d.nonBinary.scx = d.nonBinary.Script_Extensions;
- }
- buildUnicodeData(9);
- buildUnicodeData(10);
- buildUnicodeData(11);
- buildUnicodeData(12);
-
- var pp$8 = Parser.prototype;
-
- var RegExpValidationState = function RegExpValidationState(parser) {
- this.parser = parser;
- this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : "");
- this.unicodeProperties = data[parser.options.ecmaVersion >= 12 ? 12 : parser.options.ecmaVersion];
- this.source = "";
- this.flags = "";
- this.start = 0;
- this.switchU = false;
- this.switchN = false;
- this.pos = 0;
- this.lastIntValue = 0;
- this.lastStringValue = "";
- this.lastAssertionIsQuantifiable = false;
- this.numCapturingParens = 0;
- this.maxBackReference = 0;
- this.groupNames = [];
- this.backReferenceNames = [];
- };
-
- RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {
- var unicode = flags.indexOf("u") !== -1;
- this.start = start | 0;
- this.source = pattern + "";
- this.flags = flags;
- this.switchU = unicode && this.parser.options.ecmaVersion >= 6;
- this.switchN = unicode && this.parser.options.ecmaVersion >= 9;
- };
-
- RegExpValidationState.prototype.raise = function raise (message) {
- this.parser.raiseRecoverable(this.start, ("Invalid regular expression: /" + (this.source) + "/: " + message));
- };
-
- // If u flag is given, this returns the code point at the index (it combines a surrogate pair).
- // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).
- RegExpValidationState.prototype.at = function at (i, forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- var s = this.source;
- var l = s.length;
- if (i >= l) {
- return -1
- }
- var c = s.charCodeAt(i);
- if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {
- return c
- }
- var next = s.charCodeAt(i + 1);
- return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c
- };
-
- RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- var s = this.source;
- var l = s.length;
- if (i >= l) {
- return l
- }
- var c = s.charCodeAt(i), next;
- if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||
- (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {
- return i + 1
- }
- return i + 2
- };
-
- RegExpValidationState.prototype.current = function current (forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- return this.at(this.pos, forceU)
- };
-
- RegExpValidationState.prototype.lookahead = function lookahead (forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- return this.at(this.nextIndex(this.pos, forceU), forceU)
- };
-
- RegExpValidationState.prototype.advance = function advance (forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- this.pos = this.nextIndex(this.pos, forceU);
- };
-
- RegExpValidationState.prototype.eat = function eat (ch, forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- if (this.current(forceU) === ch) {
- this.advance(forceU);
- return true
- }
- return false
- };
-
- function codePointToString(ch) {
- if (ch <= 0xFFFF) { return String.fromCharCode(ch) }
- ch -= 0x10000;
- return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)
- }
-
- /**
- * Validate the flags part of a given RegExpLiteral.
- *
- * @param {RegExpValidationState} state The state to validate RegExp.
- * @returns {void}
- */
- pp$8.validateRegExpFlags = function(state) {
- var validFlags = state.validFlags;
- var flags = state.flags;
-
- for (var i = 0; i < flags.length; i++) {
- var flag = flags.charAt(i);
- if (validFlags.indexOf(flag) === -1) {
- this.raise(state.start, "Invalid regular expression flag");
- }
- if (flags.indexOf(flag, i + 1) > -1) {
- this.raise(state.start, "Duplicate regular expression flag");
- }
- }
- };
-
- /**
- * Validate the pattern part of a given RegExpLiteral.
- *
- * @param {RegExpValidationState} state The state to validate RegExp.
- * @returns {void}
- */
- pp$8.validateRegExpPattern = function(state) {
- this.regexp_pattern(state);
-
- // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of
- // parsing contains a |GroupName|, reparse with the goal symbol
- // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*
- // exception if _P_ did not conform to the grammar, if any elements of _P_
- // were not matched by the parse, or if any Early Error conditions exist.
- if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {
- state.switchN = true;
- this.regexp_pattern(state);
- }
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern
- pp$8.regexp_pattern = function(state) {
- state.pos = 0;
- state.lastIntValue = 0;
- state.lastStringValue = "";
- state.lastAssertionIsQuantifiable = false;
- state.numCapturingParens = 0;
- state.maxBackReference = 0;
- state.groupNames.length = 0;
- state.backReferenceNames.length = 0;
-
- this.regexp_disjunction(state);
-
- if (state.pos !== state.source.length) {
- // Make the same messages as V8.
- if (state.eat(0x29 /* ) */)) {
- state.raise("Unmatched ')'");
- }
- if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {
- state.raise("Lone quantifier brackets");
- }
- }
- if (state.maxBackReference > state.numCapturingParens) {
- state.raise("Invalid escape");
- }
- for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {
- var name = list[i];
-
- if (state.groupNames.indexOf(name) === -1) {
- state.raise("Invalid named capture referenced");
- }
- }
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction
- pp$8.regexp_disjunction = function(state) {
- this.regexp_alternative(state);
- while (state.eat(0x7C /* | */)) {
- this.regexp_alternative(state);
- }
-
- // Make the same message as V8.
- if (this.regexp_eatQuantifier(state, true)) {
- state.raise("Nothing to repeat");
- }
- if (state.eat(0x7B /* { */)) {
- state.raise("Lone quantifier brackets");
- }
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative
- pp$8.regexp_alternative = function(state) {
- while (state.pos < state.source.length && this.regexp_eatTerm(state))
- { }
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term
- pp$8.regexp_eatTerm = function(state) {
- if (this.regexp_eatAssertion(state)) {
- // Handle `QuantifiableAssertion Quantifier` alternative.
- // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion
- // is a QuantifiableAssertion.
- if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {
- // Make the same message as V8.
- if (state.switchU) {
- state.raise("Invalid quantifier");
- }
- }
- return true
- }
-
- if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {
- this.regexp_eatQuantifier(state);
- return true
- }
-
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion
- pp$8.regexp_eatAssertion = function(state) {
- var start = state.pos;
- state.lastAssertionIsQuantifiable = false;
-
- // ^, $
- if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {
- return true
- }
-
- // \b \B
- if (state.eat(0x5C /* \ */)) {
- if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {
- return true
- }
- state.pos = start;
- }
-
- // Lookahead / Lookbehind
- if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {
- var lookbehind = false;
- if (this.options.ecmaVersion >= 9) {
- lookbehind = state.eat(0x3C /* < */);
- }
- if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {
- this.regexp_disjunction(state);
- if (!state.eat(0x29 /* ) */)) {
- state.raise("Unterminated group");
- }
- state.lastAssertionIsQuantifiable = !lookbehind;
- return true
- }
- }
-
- state.pos = start;
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier
- pp$8.regexp_eatQuantifier = function(state, noError) {
- if ( noError === void 0 ) noError = false;
-
- if (this.regexp_eatQuantifierPrefix(state, noError)) {
- state.eat(0x3F /* ? */);
- return true
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix
- pp$8.regexp_eatQuantifierPrefix = function(state, noError) {
- return (
- state.eat(0x2A /* * */) ||
- state.eat(0x2B /* + */) ||
- state.eat(0x3F /* ? */) ||
- this.regexp_eatBracedQuantifier(state, noError)
- )
- };
- pp$8.regexp_eatBracedQuantifier = function(state, noError) {
- var start = state.pos;
- if (state.eat(0x7B /* { */)) {
- var min = 0, max = -1;
- if (this.regexp_eatDecimalDigits(state)) {
- min = state.lastIntValue;
- if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {
- max = state.lastIntValue;
- }
- if (state.eat(0x7D /* } */)) {
- // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term
- if (max !== -1 && max < min && !noError) {
- state.raise("numbers out of order in {} quantifier");
- }
- return true
- }
- }
- if (state.switchU && !noError) {
- state.raise("Incomplete quantifier");
- }
- state.pos = start;
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom
- pp$8.regexp_eatAtom = function(state) {
- return (
- this.regexp_eatPatternCharacters(state) ||
- state.eat(0x2E /* . */) ||
- this.regexp_eatReverseSolidusAtomEscape(state) ||
- this.regexp_eatCharacterClass(state) ||
- this.regexp_eatUncapturingGroup(state) ||
- this.regexp_eatCapturingGroup(state)
- )
- };
- pp$8.regexp_eatReverseSolidusAtomEscape = function(state) {
- var start = state.pos;
- if (state.eat(0x5C /* \ */)) {
- if (this.regexp_eatAtomEscape(state)) {
- return true
- }
- state.pos = start;
- }
- return false
- };
- pp$8.regexp_eatUncapturingGroup = function(state) {
- var start = state.pos;
- if (state.eat(0x28 /* ( */)) {
- if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {
- this.regexp_disjunction(state);
- if (state.eat(0x29 /* ) */)) {
- return true
- }
- state.raise("Unterminated group");
- }
- state.pos = start;
- }
- return false
- };
- pp$8.regexp_eatCapturingGroup = function(state) {
- if (state.eat(0x28 /* ( */)) {
- if (this.options.ecmaVersion >= 9) {
- this.regexp_groupSpecifier(state);
- } else if (state.current() === 0x3F /* ? */) {
- state.raise("Invalid group");
- }
- this.regexp_disjunction(state);
- if (state.eat(0x29 /* ) */)) {
- state.numCapturingParens += 1;
- return true
- }
- state.raise("Unterminated group");
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom
- pp$8.regexp_eatExtendedAtom = function(state) {
- return (
- state.eat(0x2E /* . */) ||
- this.regexp_eatReverseSolidusAtomEscape(state) ||
- this.regexp_eatCharacterClass(state) ||
- this.regexp_eatUncapturingGroup(state) ||
- this.regexp_eatCapturingGroup(state) ||
- this.regexp_eatInvalidBracedQuantifier(state) ||
- this.regexp_eatExtendedPatternCharacter(state)
- )
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier
- pp$8.regexp_eatInvalidBracedQuantifier = function(state) {
- if (this.regexp_eatBracedQuantifier(state, true)) {
- state.raise("Nothing to repeat");
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter
- pp$8.regexp_eatSyntaxCharacter = function(state) {
- var ch = state.current();
- if (isSyntaxCharacter(ch)) {
- state.lastIntValue = ch;
- state.advance();
- return true
- }
- return false
- };
- function isSyntaxCharacter(ch) {
- return (
- ch === 0x24 /* $ */ ||
- ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||
- ch === 0x2E /* . */ ||
- ch === 0x3F /* ? */ ||
- ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||
- ch >= 0x7B /* { */ && ch <= 0x7D /* } */
- )
- }
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter
- // But eat eager.
- pp$8.regexp_eatPatternCharacters = function(state) {
- var start = state.pos;
- var ch = 0;
- while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {
- state.advance();
- }
- return state.pos !== start
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter
- pp$8.regexp_eatExtendedPatternCharacter = function(state) {
- var ch = state.current();
- if (
- ch !== -1 &&
- ch !== 0x24 /* $ */ &&
- !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&
- ch !== 0x2E /* . */ &&
- ch !== 0x3F /* ? */ &&
- ch !== 0x5B /* [ */ &&
- ch !== 0x5E /* ^ */ &&
- ch !== 0x7C /* | */
- ) {
- state.advance();
- return true
- }
- return false
- };
-
- // GroupSpecifier ::
- // [empty]
- // `?` GroupName
- pp$8.regexp_groupSpecifier = function(state) {
- if (state.eat(0x3F /* ? */)) {
- if (this.regexp_eatGroupName(state)) {
- if (state.groupNames.indexOf(state.lastStringValue) !== -1) {
- state.raise("Duplicate capture group name");
- }
- state.groupNames.push(state.lastStringValue);
- return
- }
- state.raise("Invalid group");
- }
- };
-
- // GroupName ::
- // `<` RegExpIdentifierName `>`
- // Note: this updates `state.lastStringValue` property with the eaten name.
- pp$8.regexp_eatGroupName = function(state) {
- state.lastStringValue = "";
- if (state.eat(0x3C /* < */)) {
- if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {
- return true
- }
- state.raise("Invalid capture group name");
- }
- return false
- };
-
- // RegExpIdentifierName ::
- // RegExpIdentifierStart
- // RegExpIdentifierName RegExpIdentifierPart
- // Note: this updates `state.lastStringValue` property with the eaten name.
- pp$8.regexp_eatRegExpIdentifierName = function(state) {
- state.lastStringValue = "";
- if (this.regexp_eatRegExpIdentifierStart(state)) {
- state.lastStringValue += codePointToString(state.lastIntValue);
- while (this.regexp_eatRegExpIdentifierPart(state)) {
- state.lastStringValue += codePointToString(state.lastIntValue);
- }
- return true
- }
- return false
- };
-
- // RegExpIdentifierStart ::
- // UnicodeIDStart
- // `$`
- // `_`
- // `\` RegExpUnicodeEscapeSequence[+U]
- pp$8.regexp_eatRegExpIdentifierStart = function(state) {
- var start = state.pos;
- var forceU = this.options.ecmaVersion >= 11;
- var ch = state.current(forceU);
- state.advance(forceU);
-
- if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
- ch = state.lastIntValue;
- }
- if (isRegExpIdentifierStart(ch)) {
- state.lastIntValue = ch;
- return true
- }
-
- state.pos = start;
- return false
- };
- function isRegExpIdentifierStart(ch) {
- return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */
- }
-
- // RegExpIdentifierPart ::
- // UnicodeIDContinue
- // `$`
- // `_`
- // `\` RegExpUnicodeEscapeSequence[+U]
- // <ZWNJ>
- // <ZWJ>
- pp$8.regexp_eatRegExpIdentifierPart = function(state) {
- var start = state.pos;
- var forceU = this.options.ecmaVersion >= 11;
- var ch = state.current(forceU);
- state.advance(forceU);
-
- if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
- ch = state.lastIntValue;
- }
- if (isRegExpIdentifierPart(ch)) {
- state.lastIntValue = ch;
- return true
- }
-
- state.pos = start;
- return false
- };
- function isRegExpIdentifierPart(ch) {
- return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */
- }
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape
- pp$8.regexp_eatAtomEscape = function(state) {
- if (
- this.regexp_eatBackReference(state) ||
- this.regexp_eatCharacterClassEscape(state) ||
- this.regexp_eatCharacterEscape(state) ||
- (state.switchN && this.regexp_eatKGroupName(state))
- ) {
- return true
- }
- if (state.switchU) {
- // Make the same message as V8.
- if (state.current() === 0x63 /* c */) {
- state.raise("Invalid unicode escape");
- }
- state.raise("Invalid escape");
- }
- return false
- };
- pp$8.regexp_eatBackReference = function(state) {
- var start = state.pos;
- if (this.regexp_eatDecimalEscape(state)) {
- var n = state.lastIntValue;
- if (state.switchU) {
- // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape
- if (n > state.maxBackReference) {
- state.maxBackReference = n;
- }
- return true
- }
- if (n <= state.numCapturingParens) {
- return true
- }
- state.pos = start;
- }
- return false
- };
- pp$8.regexp_eatKGroupName = function(state) {
- if (state.eat(0x6B /* k */)) {
- if (this.regexp_eatGroupName(state)) {
- state.backReferenceNames.push(state.lastStringValue);
- return true
- }
- state.raise("Invalid named reference");
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape
- pp$8.regexp_eatCharacterEscape = function(state) {
- return (
- this.regexp_eatControlEscape(state) ||
- this.regexp_eatCControlLetter(state) ||
- this.regexp_eatZero(state) ||
- this.regexp_eatHexEscapeSequence(state) ||
- this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||
- (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||
- this.regexp_eatIdentityEscape(state)
- )
- };
- pp$8.regexp_eatCControlLetter = function(state) {
- var start = state.pos;
- if (state.eat(0x63 /* c */)) {
- if (this.regexp_eatControlLetter(state)) {
- return true
- }
- state.pos = start;
- }
- return false
- };
- pp$8.regexp_eatZero = function(state) {
- if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {
- state.lastIntValue = 0;
- state.advance();
- return true
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape
- pp$8.regexp_eatControlEscape = function(state) {
- var ch = state.current();
- if (ch === 0x74 /* t */) {
- state.lastIntValue = 0x09; /* \t */
- state.advance();
- return true
- }
- if (ch === 0x6E /* n */) {
- state.lastIntValue = 0x0A; /* \n */
- state.advance();
- return true
- }
- if (ch === 0x76 /* v */) {
- state.lastIntValue = 0x0B; /* \v */
- state.advance();
- return true
- }
- if (ch === 0x66 /* f */) {
- state.lastIntValue = 0x0C; /* \f */
- state.advance();
- return true
- }
- if (ch === 0x72 /* r */) {
- state.lastIntValue = 0x0D; /* \r */
- state.advance();
- return true
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter
- pp$8.regexp_eatControlLetter = function(state) {
- var ch = state.current();
- if (isControlLetter(ch)) {
- state.lastIntValue = ch % 0x20;
- state.advance();
- return true
- }
- return false
- };
- function isControlLetter(ch) {
- return (
- (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||
- (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)
- )
- }
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence
- pp$8.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {
- if ( forceU === void 0 ) forceU = false;
-
- var start = state.pos;
- var switchU = forceU || state.switchU;
-
- if (state.eat(0x75 /* u */)) {
- if (this.regexp_eatFixedHexDigits(state, 4)) {
- var lead = state.lastIntValue;
- if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {
- var leadSurrogateEnd = state.pos;
- if (state.eat(0x5C /* \ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {
- var trail = state.lastIntValue;
- if (trail >= 0xDC00 && trail <= 0xDFFF) {
- state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
- return true
- }
- }
- state.pos = leadSurrogateEnd;
- state.lastIntValue = lead;
- }
- return true
- }
- if (
- switchU &&
- state.eat(0x7B /* { */) &&
- this.regexp_eatHexDigits(state) &&
- state.eat(0x7D /* } */) &&
- isValidUnicode(state.lastIntValue)
- ) {
- return true
- }
- if (switchU) {
- state.raise("Invalid unicode escape");
- }
- state.pos = start;
- }
-
- return false
- };
- function isValidUnicode(ch) {
- return ch >= 0 && ch <= 0x10FFFF
- }
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape
- pp$8.regexp_eatIdentityEscape = function(state) {
- if (state.switchU) {
- if (this.regexp_eatSyntaxCharacter(state)) {
- return true
- }
- if (state.eat(0x2F /* / */)) {
- state.lastIntValue = 0x2F; /* / */
- return true
- }
- return false
- }
-
- var ch = state.current();
- if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {
- state.lastIntValue = ch;
- state.advance();
- return true
- }
-
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape
- pp$8.regexp_eatDecimalEscape = function(state) {
- state.lastIntValue = 0;
- var ch = state.current();
- if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {
- do {
- state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
- state.advance();
- } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)
- return true
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape
- pp$8.regexp_eatCharacterClassEscape = function(state) {
- var ch = state.current();
-
- if (isCharacterClassEscape(ch)) {
- state.lastIntValue = -1;
- state.advance();
- return true
- }
-
- if (
- state.switchU &&
- this.options.ecmaVersion >= 9 &&
- (ch === 0x50 /* P */ || ch === 0x70 /* p */)
- ) {
- state.lastIntValue = -1;
- state.advance();
- if (
- state.eat(0x7B /* { */) &&
- this.regexp_eatUnicodePropertyValueExpression(state) &&
- state.eat(0x7D /* } */)
- ) {
- return true
- }
- state.raise("Invalid property name");
- }
-
- return false
- };
- function isCharacterClassEscape(ch) {
- return (
- ch === 0x64 /* d */ ||
- ch === 0x44 /* D */ ||
- ch === 0x73 /* s */ ||
- ch === 0x53 /* S */ ||
- ch === 0x77 /* w */ ||
- ch === 0x57 /* W */
- )
- }
-
- // UnicodePropertyValueExpression ::
- // UnicodePropertyName `=` UnicodePropertyValue
- // LoneUnicodePropertyNameOrValue
- pp$8.regexp_eatUnicodePropertyValueExpression = function(state) {
- var start = state.pos;
-
- // UnicodePropertyName `=` UnicodePropertyValue
- if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {
- var name = state.lastStringValue;
- if (this.regexp_eatUnicodePropertyValue(state)) {
- var value = state.lastStringValue;
- this.regexp_validateUnicodePropertyNameAndValue(state, name, value);
- return true
- }
- }
- state.pos = start;
-
- // LoneUnicodePropertyNameOrValue
- if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {
- var nameOrValue = state.lastStringValue;
- this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);
- return true
- }
- return false
- };
- pp$8.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {
- if (!has(state.unicodeProperties.nonBinary, name))
- { state.raise("Invalid property name"); }
- if (!state.unicodeProperties.nonBinary[name].test(value))
- { state.raise("Invalid property value"); }
- };
- pp$8.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {
- if (!state.unicodeProperties.binary.test(nameOrValue))
- { state.raise("Invalid property name"); }
- };
-
- // UnicodePropertyName ::
- // UnicodePropertyNameCharacters
- pp$8.regexp_eatUnicodePropertyName = function(state) {
- var ch = 0;
- state.lastStringValue = "";
- while (isUnicodePropertyNameCharacter(ch = state.current())) {
- state.lastStringValue += codePointToString(ch);
- state.advance();
- }
- return state.lastStringValue !== ""
- };
- function isUnicodePropertyNameCharacter(ch) {
- return isControlLetter(ch) || ch === 0x5F /* _ */
- }
-
- // UnicodePropertyValue ::
- // UnicodePropertyValueCharacters
- pp$8.regexp_eatUnicodePropertyValue = function(state) {
- var ch = 0;
- state.lastStringValue = "";
- while (isUnicodePropertyValueCharacter(ch = state.current())) {
- state.lastStringValue += codePointToString(ch);
- state.advance();
- }
- return state.lastStringValue !== ""
- };
- function isUnicodePropertyValueCharacter(ch) {
- return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)
- }
-
- // LoneUnicodePropertyNameOrValue ::
- // UnicodePropertyValueCharacters
- pp$8.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {
- return this.regexp_eatUnicodePropertyValue(state)
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass
- pp$8.regexp_eatCharacterClass = function(state) {
- if (state.eat(0x5B /* [ */)) {
- state.eat(0x5E /* ^ */);
- this.regexp_classRanges(state);
- if (state.eat(0x5D /* ] */)) {
- return true
- }
- // Unreachable since it threw "unterminated regular expression" error before.
- state.raise("Unterminated character class");
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges
- // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges
- // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash
- pp$8.regexp_classRanges = function(state) {
- while (this.regexp_eatClassAtom(state)) {
- var left = state.lastIntValue;
- if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {
- var right = state.lastIntValue;
- if (state.switchU && (left === -1 || right === -1)) {
- state.raise("Invalid character class");
- }
- if (left !== -1 && right !== -1 && left > right) {
- state.raise("Range out of order in character class");
- }
- }
- }
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom
- // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash
- pp$8.regexp_eatClassAtom = function(state) {
- var start = state.pos;
-
- if (state.eat(0x5C /* \ */)) {
- if (this.regexp_eatClassEscape(state)) {
- return true
- }
- if (state.switchU) {
- // Make the same message as V8.
- var ch$1 = state.current();
- if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {
- state.raise("Invalid class escape");
- }
- state.raise("Invalid escape");
- }
- state.pos = start;
- }
-
- var ch = state.current();
- if (ch !== 0x5D /* ] */) {
- state.lastIntValue = ch;
- state.advance();
- return true
- }
-
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape
- pp$8.regexp_eatClassEscape = function(state) {
- var start = state.pos;
-
- if (state.eat(0x62 /* b */)) {
- state.lastIntValue = 0x08; /* <BS> */
- return true
- }
-
- if (state.switchU && state.eat(0x2D /* - */)) {
- state.lastIntValue = 0x2D; /* - */
- return true
- }
-
- if (!state.switchU && state.eat(0x63 /* c */)) {
- if (this.regexp_eatClassControlLetter(state)) {
- return true
- }
- state.pos = start;
- }
-
- return (
- this.regexp_eatCharacterClassEscape(state) ||
- this.regexp_eatCharacterEscape(state)
- )
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter
- pp$8.regexp_eatClassControlLetter = function(state) {
- var ch = state.current();
- if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {
- state.lastIntValue = ch % 0x20;
- state.advance();
- return true
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
- pp$8.regexp_eatHexEscapeSequence = function(state) {
- var start = state.pos;
- if (state.eat(0x78 /* x */)) {
- if (this.regexp_eatFixedHexDigits(state, 2)) {
- return true
- }
- if (state.switchU) {
- state.raise("Invalid escape");
- }
- state.pos = start;
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits
- pp$8.regexp_eatDecimalDigits = function(state) {
- var start = state.pos;
- var ch = 0;
- state.lastIntValue = 0;
- while (isDecimalDigit(ch = state.current())) {
- state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
- state.advance();
- }
- return state.pos !== start
- };
- function isDecimalDigit(ch) {
- return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */
- }
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits
- pp$8.regexp_eatHexDigits = function(state) {
- var start = state.pos;
- var ch = 0;
- state.lastIntValue = 0;
- while (isHexDigit(ch = state.current())) {
- state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
- state.advance();
- }
- return state.pos !== start
- };
- function isHexDigit(ch) {
- return (
- (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||
- (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||
- (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)
- )
- }
- function hexToInt(ch) {
- if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {
- return 10 + (ch - 0x41 /* A */)
- }
- if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {
- return 10 + (ch - 0x61 /* a */)
- }
- return ch - 0x30 /* 0 */
- }
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence
- // Allows only 0-377(octal) i.e. 0-255(decimal).
- pp$8.regexp_eatLegacyOctalEscapeSequence = function(state) {
- if (this.regexp_eatOctalDigit(state)) {
- var n1 = state.lastIntValue;
- if (this.regexp_eatOctalDigit(state)) {
- var n2 = state.lastIntValue;
- if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {
- state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;
- } else {
- state.lastIntValue = n1 * 8 + n2;
- }
- } else {
- state.lastIntValue = n1;
- }
- return true
- }
- return false
- };
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit
- pp$8.regexp_eatOctalDigit = function(state) {
- var ch = state.current();
- if (isOctalDigit(ch)) {
- state.lastIntValue = ch - 0x30; /* 0 */
- state.advance();
- return true
- }
- state.lastIntValue = 0;
- return false
- };
- function isOctalDigit(ch) {
- return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */
- }
-
- // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits
- // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit
- // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
- pp$8.regexp_eatFixedHexDigits = function(state, length) {
- var start = state.pos;
- state.lastIntValue = 0;
- for (var i = 0; i < length; ++i) {
- var ch = state.current();
- if (!isHexDigit(ch)) {
- state.pos = start;
- return false
- }
- state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
- state.advance();
- }
- return true
- };
-
- // Object type used to represent tokens. Note that normally, tokens
- // simply exist as properties on the parser object. This is only
- // used for the onToken callback and the external tokenizer.
-
- var Token = function Token(p) {
- this.type = p.type;
- this.value = p.value;
- this.start = p.start;
- this.end = p.end;
- if (p.options.locations)
- { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }
- if (p.options.ranges)
- { this.range = [p.start, p.end]; }
- };
-
- // ## Tokenizer
-
- var pp$9 = Parser.prototype;
-
- // Move to the next token
-
- pp$9.next = function(ignoreEscapeSequenceInKeyword) {
- if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)
- { this.raiseRecoverable(this.start, "Escape sequence in keyword " + this.type.keyword); }
- if (this.options.onToken)
- { this.options.onToken(new Token(this)); }
-
- this.lastTokEnd = this.end;
- this.lastTokStart = this.start;
- this.lastTokEndLoc = this.endLoc;
- this.lastTokStartLoc = this.startLoc;
- this.nextToken();
- };
-
- pp$9.getToken = function() {
- this.next();
- return new Token(this)
- };
-
- // If we're in an ES6 environment, make parsers iterable
- if (typeof Symbol !== "undefined")
- { pp$9[Symbol.iterator] = function() {
- var this$1$1 = this;
-
- return {
- next: function () {
- var token = this$1$1.getToken();
- return {
- done: token.type === types.eof,
- value: token
- }
- }
- }
- }; }
-
- // Toggle strict mode. Re-reads the next number or string to please
- // pedantic tests (`"use strict"; 010;` should fail).
-
- // Read a single token, updating the parser object's token-related
- // properties.
-
- pp$9.nextToken = function() {
- var curContext = this.curContext();
- if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }
-
- this.start = this.pos;
- if (this.options.locations) { this.startLoc = this.curPosition(); }
- if (this.pos >= this.input.length) { return this.finishToken(types.eof) }
-
- if (curContext.override) { return curContext.override(this) }
- else { this.readToken(this.fullCharCodeAtPos()); }
- };
-
- pp$9.readToken = function(code) {
- // Identifier or keyword. '\uXXXX' sequences are allowed in
- // identifiers, so '\' also dispatches to that.
- if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */)
- { return this.readWord() }
-
- return this.getTokenFromCode(code)
- };
-
- pp$9.fullCharCodeAtPos = function() {
- var code = this.input.charCodeAt(this.pos);
- if (code <= 0xd7ff || code >= 0xdc00) { return code }
- var next = this.input.charCodeAt(this.pos + 1);
- return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00
- };
-
- pp$9.skipBlockComment = function() {
- var startLoc = this.options.onComment && this.curPosition();
- var start = this.pos, end = this.input.indexOf("*/", this.pos += 2);
- if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); }
- this.pos = end + 2;
- if (this.options.locations) {
- lineBreakG.lastIndex = start;
- var match;
- while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {
- ++this.curLine;
- this.lineStart = match.index + match[0].length;
- }
- }
- if (this.options.onComment)
- { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,
- startLoc, this.curPosition()); }
- };
-
- pp$9.skipLineComment = function(startSkip) {
- var start = this.pos;
- var startLoc = this.options.onComment && this.curPosition();
- var ch = this.input.charCodeAt(this.pos += startSkip);
- while (this.pos < this.input.length && !isNewLine(ch)) {
- ch = this.input.charCodeAt(++this.pos);
- }
- if (this.options.onComment)
- { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,
- startLoc, this.curPosition()); }
- };
-
- // Called at the start of the parse and after every token. Skips
- // whitespace and comments, and.
-
- pp$9.skipSpace = function() {
- loop: while (this.pos < this.input.length) {
- var ch = this.input.charCodeAt(this.pos);
- switch (ch) {
- case 32: case 160: // ' '
- ++this.pos;
- break
- case 13:
- if (this.input.charCodeAt(this.pos + 1) === 10) {
- ++this.pos;
- }
- case 10: case 8232: case 8233:
- ++this.pos;
- if (this.options.locations) {
- ++this.curLine;
- this.lineStart = this.pos;
- }
- break
- case 47: // '/'
- switch (this.input.charCodeAt(this.pos + 1)) {
- case 42: // '*'
- this.skipBlockComment();
- break
- case 47:
- this.skipLineComment(2);
- break
- default:
- break loop
- }
- break
- default:
- if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {
- ++this.pos;
- } else {
- break loop
- }
- }
- }
- };
-
- // Called at the end of every token. Sets `end`, `val`, and
- // maintains `context` and `exprAllowed`, and skips the space after
- // the token, so that the next one's `start` will point at the
- // right position.
-
- pp$9.finishToken = function(type, val) {
- this.end = this.pos;
- if (this.options.locations) { this.endLoc = this.curPosition(); }
- var prevType = this.type;
- this.type = type;
- this.value = val;
-
- this.updateContext(prevType);
- };
-
- // ### Token reading
-
- // This is the function that is called to fetch the next token. It
- // is somewhat obscure, because it works in character codes rather
- // than characters, and because operator parsing has been inlined
- // into it.
- //
- // All in the name of speed.
- //
- pp$9.readToken_dot = function() {
- var next = this.input.charCodeAt(this.pos + 1);
- if (next >= 48 && next <= 57) { return this.readNumber(true) }
- var next2 = this.input.charCodeAt(this.pos + 2);
- if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'
- this.pos += 3;
- return this.finishToken(types.ellipsis)
- } else {
- ++this.pos;
- return this.finishToken(types.dot)
- }
- };
-
- pp$9.readToken_slash = function() { // '/'
- var next = this.input.charCodeAt(this.pos + 1);
- if (this.exprAllowed) { ++this.pos; return this.readRegexp() }
- if (next === 61) { return this.finishOp(types.assign, 2) }
- return this.finishOp(types.slash, 1)
- };
-
- pp$9.readToken_mult_modulo_exp = function(code) { // '%*'
- var next = this.input.charCodeAt(this.pos + 1);
- var size = 1;
- var tokentype = code === 42 ? types.star : types.modulo;
-
- // exponentiation operator ** and **=
- if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {
- ++size;
- tokentype = types.starstar;
- next = this.input.charCodeAt(this.pos + 2);
- }
-
- if (next === 61) { return this.finishOp(types.assign, size + 1) }
- return this.finishOp(tokentype, size)
- };
-
- pp$9.readToken_pipe_amp = function(code) { // '|&'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === code) {
- if (this.options.ecmaVersion >= 12) {
- var next2 = this.input.charCodeAt(this.pos + 2);
- if (next2 === 61) { return this.finishOp(types.assign, 3) }
- }
- return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2)
- }
- if (next === 61) { return this.finishOp(types.assign, 2) }
- return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1)
- };
-
- pp$9.readToken_caret = function() { // '^'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === 61) { return this.finishOp(types.assign, 2) }
- return this.finishOp(types.bitwiseXOR, 1)
- };
-
- pp$9.readToken_plus_min = function(code) { // '+-'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === code) {
- if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&
- (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {
- // A `-->` line comment
- this.skipLineComment(3);
- this.skipSpace();
- return this.nextToken()
- }
- return this.finishOp(types.incDec, 2)
- }
- if (next === 61) { return this.finishOp(types.assign, 2) }
- return this.finishOp(types.plusMin, 1)
- };
-
- pp$9.readToken_lt_gt = function(code) { // '<>'
- var next = this.input.charCodeAt(this.pos + 1);
- var size = 1;
- if (next === code) {
- size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;
- if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) }
- return this.finishOp(types.bitShift, size)
- }
- if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&
- this.input.charCodeAt(this.pos + 3) === 45) {
- // `<!--`, an XML-style comment that should be interpreted as a line comment
- this.skipLineComment(4);
- this.skipSpace();
- return this.nextToken()
- }
- if (next === 61) { size = 2; }
- return this.finishOp(types.relational, size)
- };
-
- pp$9.readToken_eq_excl = function(code) { // '=!'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === 61) { return this.finishOp(types.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }
- if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'
- this.pos += 2;
- return this.finishToken(types.arrow)
- }
- return this.finishOp(code === 61 ? types.eq : types.prefix, 1)
- };
-
- pp$9.readToken_question = function() { // '?'
- var ecmaVersion = this.options.ecmaVersion;
- if (ecmaVersion >= 11) {
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === 46) {
- var next2 = this.input.charCodeAt(this.pos + 2);
- if (next2 < 48 || next2 > 57) { return this.finishOp(types.questionDot, 2) }
- }
- if (next === 63) {
- if (ecmaVersion >= 12) {
- var next2$1 = this.input.charCodeAt(this.pos + 2);
- if (next2$1 === 61) { return this.finishOp(types.assign, 3) }
- }
- return this.finishOp(types.coalesce, 2)
- }
- }
- return this.finishOp(types.question, 1)
- };
-
- pp$9.readToken_numberSign = function() { // '#'
- var ecmaVersion = this.options.ecmaVersion;
- var code = 35; // '#'
- if (ecmaVersion >= 13) {
- ++this.pos;
- code = this.fullCharCodeAtPos();
- if (isIdentifierStart(code, true) || code === 92 /* '\' */) {
- return this.finishToken(types.privateId, this.readWord1())
- }
- }
-
- this.raise(this.pos, "Unexpected character '" + codePointToString$1(code) + "'");
- };
-
- pp$9.getTokenFromCode = function(code) {
- switch (code) {
- // The interpretation of a dot depends on whether it is followed
- // by a digit or another two dots.
- case 46: // '.'
- return this.readToken_dot()
-
- // Punctuation tokens.
- case 40: ++this.pos; return this.finishToken(types.parenL)
- case 41: ++this.pos; return this.finishToken(types.parenR)
- case 59: ++this.pos; return this.finishToken(types.semi)
- case 44: ++this.pos; return this.finishToken(types.comma)
- case 91: ++this.pos; return this.finishToken(types.bracketL)
- case 93: ++this.pos; return this.finishToken(types.bracketR)
- case 123: ++this.pos; return this.finishToken(types.braceL)
- case 125: ++this.pos; return this.finishToken(types.braceR)
- case 58: ++this.pos; return this.finishToken(types.colon)
-
- case 96: // '`'
- if (this.options.ecmaVersion < 6) { break }
- ++this.pos;
- return this.finishToken(types.backQuote)
-
- case 48: // '0'
- var next = this.input.charCodeAt(this.pos + 1);
- if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number
- if (this.options.ecmaVersion >= 6) {
- if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number
- if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number
- }
-
- // Anything else beginning with a digit is an integer, octal
- // number, or float.
- case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9
- return this.readNumber(false)
-
- // Quotes produce strings.
- case 34: case 39: // '"', "'"
- return this.readString(code)
-
- // Operators are parsed inline in tiny state machines. '=' (61) is
- // often referred to. `finishOp` simply skips the amount of
- // characters it is given as second argument, and returns a token
- // of the type given by its first argument.
-
- case 47: // '/'
- return this.readToken_slash()
-
- case 37: case 42: // '%*'
- return this.readToken_mult_modulo_exp(code)
-
- case 124: case 38: // '|&'
- return this.readToken_pipe_amp(code)
-
- case 94: // '^'
- return this.readToken_caret()
-
- case 43: case 45: // '+-'
- return this.readToken_plus_min(code)
-
- case 60: case 62: // '<>'
- return this.readToken_lt_gt(code)
-
- case 61: case 33: // '=!'
- return this.readToken_eq_excl(code)
-
- case 63: // '?'
- return this.readToken_question()
-
- case 126: // '~'
- return this.finishOp(types.prefix, 1)
-
- case 35: // '#'
- return this.readToken_numberSign()
- }
-
- this.raise(this.pos, "Unexpected character '" + codePointToString$1(code) + "'");
- };
-
- pp$9.finishOp = function(type, size) {
- var str = this.input.slice(this.pos, this.pos + size);
- this.pos += size;
- return this.finishToken(type, str)
- };
-
- pp$9.readRegexp = function() {
- var escaped, inClass, start = this.pos;
- for (;;) {
- if (this.pos >= this.input.length) { this.raise(start, "Unterminated regular expression"); }
- var ch = this.input.charAt(this.pos);
- if (lineBreak.test(ch)) { this.raise(start, "Unterminated regular expression"); }
- if (!escaped) {
- if (ch === "[") { inClass = true; }
- else if (ch === "]" && inClass) { inClass = false; }
- else if (ch === "/" && !inClass) { break }
- escaped = ch === "\\";
- } else { escaped = false; }
- ++this.pos;
- }
- var pattern = this.input.slice(start, this.pos);
- ++this.pos;
- var flagsStart = this.pos;
- var flags = this.readWord1();
- if (this.containsEsc) { this.unexpected(flagsStart); }
-
- // Validate pattern
- var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));
- state.reset(start, pattern, flags);
- this.validateRegExpFlags(state);
- this.validateRegExpPattern(state);
-
- // Create Literal#value property value.
- var value = null;
- try {
- value = new RegExp(pattern, flags);
- } catch (e) {
- // ESTree requires null if it failed to instantiate RegExp object.
- // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral
- }
-
- return this.finishToken(types.regexp, {pattern: pattern, flags: flags, value: value})
- };
-
- // Read an integer in the given radix. Return null if zero digits
- // were read, the integer value otherwise. When `len` is given, this
- // will return `null` unless the integer has exactly `len` digits.
-
- pp$9.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {
- // `len` is used for character escape sequences. In that case, disallow separators.
- var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;
-
- // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)
- // and isn't fraction part nor exponent part. In that case, if the first digit
- // is zero then disallow separators.
- var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;
-
- var start = this.pos, total = 0, lastCode = 0;
- for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {
- var code = this.input.charCodeAt(this.pos), val = (void 0);
-
- if (allowSeparators && code === 95) {
- if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, "Numeric separator is not allowed in legacy octal numeric literals"); }
- if (lastCode === 95) { this.raiseRecoverable(this.pos, "Numeric separator must be exactly one underscore"); }
- if (i === 0) { this.raiseRecoverable(this.pos, "Numeric separator is not allowed at the first of digits"); }
- lastCode = code;
- continue
- }
-
- if (code >= 97) { val = code - 97 + 10; } // a
- else if (code >= 65) { val = code - 65 + 10; } // A
- else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9
- else { val = Infinity; }
- if (val >= radix) { break }
- lastCode = code;
- total = total * radix + val;
- }
-
- if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, "Numeric separator is not allowed at the last of digits"); }
- if (this.pos === start || len != null && this.pos - start !== len) { return null }
-
- return total
- };
-
- function stringToNumber(str, isLegacyOctalNumericLiteral) {
- if (isLegacyOctalNumericLiteral) {
- return parseInt(str, 8)
- }
-
- // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.
- return parseFloat(str.replace(/_/g, ""))
- }
-
- function stringToBigInt(str) {
- if (typeof BigInt !== "function") {
- return null
- }
-
- // `BigInt(value)` throws syntax error if the string contains numeric separators.
- return BigInt(str.replace(/_/g, ""))
- }
-
- pp$9.readRadixNumber = function(radix) {
- var start = this.pos;
- this.pos += 2; // 0x
- var val = this.readInt(radix);
- if (val == null) { this.raise(this.start + 2, "Expected number in radix " + radix); }
- if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {
- val = stringToBigInt(this.input.slice(start, this.pos));
- ++this.pos;
- } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
- return this.finishToken(types.num, val)
- };
-
- // Read an integer, octal integer, or floating-point number.
-
- pp$9.readNumber = function(startsWithDot) {
- var start = this.pos;
- if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, "Invalid number"); }
- var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;
- if (octal && this.strict) { this.raise(start, "Invalid number"); }
- var next = this.input.charCodeAt(this.pos);
- if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {
- var val$1 = stringToBigInt(this.input.slice(start, this.pos));
- ++this.pos;
- if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
- return this.finishToken(types.num, val$1)
- }
- if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }
- if (next === 46 && !octal) { // '.'
- ++this.pos;
- this.readInt(10);
- next = this.input.charCodeAt(this.pos);
- }
- if ((next === 69 || next === 101) && !octal) { // 'eE'
- next = this.input.charCodeAt(++this.pos);
- if (next === 43 || next === 45) { ++this.pos; } // '+-'
- if (this.readInt(10) === null) { this.raise(start, "Invalid number"); }
- }
- if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-
- var val = stringToNumber(this.input.slice(start, this.pos), octal);
- return this.finishToken(types.num, val)
- };
-
- // Read a string value, interpreting backslash-escapes.
-
- pp$9.readCodePoint = function() {
- var ch = this.input.charCodeAt(this.pos), code;
-
- if (ch === 123) { // '{'
- if (this.options.ecmaVersion < 6) { this.unexpected(); }
- var codePos = ++this.pos;
- code = this.readHexChar(this.input.indexOf("}", this.pos) - this.pos);
- ++this.pos;
- if (code > 0x10FFFF) { this.invalidStringToken(codePos, "Code point out of bounds"); }
- } else {
- code = this.readHexChar(4);
- }
- return code
- };
-
- function codePointToString$1(code) {
- // UTF-16 Decoding
- if (code <= 0xFFFF) { return String.fromCharCode(code) }
- code -= 0x10000;
- return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)
- }
-
- pp$9.readString = function(quote) {
- var out = "", chunkStart = ++this.pos;
- for (;;) {
- if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated string constant"); }
- var ch = this.input.charCodeAt(this.pos);
- if (ch === quote) { break }
- if (ch === 92) { // '\'
- out += this.input.slice(chunkStart, this.pos);
- out += this.readEscapedChar(false);
- chunkStart = this.pos;
- } else if (ch === 0x2028 || ch === 0x2029) {
- if (this.options.ecmaVersion < 10) { this.raise(this.start, "Unterminated string constant"); }
- ++this.pos;
- if (this.options.locations) {
- this.curLine++;
- this.lineStart = this.pos;
- }
- } else {
- if (isNewLine(ch)) { this.raise(this.start, "Unterminated string constant"); }
- ++this.pos;
- }
- }
- out += this.input.slice(chunkStart, this.pos++);
- return this.finishToken(types.string, out)
- };
-
- // Reads template string tokens.
-
- var INVALID_TEMPLATE_ESCAPE_ERROR = {};
-
- pp$9.tryReadTemplateToken = function() {
- this.inTemplateElement = true;
- try {
- this.readTmplToken();
- } catch (err) {
- if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {
- this.readInvalidTemplateToken();
- } else {
- throw err
- }
- }
-
- this.inTemplateElement = false;
- };
-
- pp$9.invalidStringToken = function(position, message) {
- if (this.inTemplateElement && this.options.ecmaVersion >= 9) {
- throw INVALID_TEMPLATE_ESCAPE_ERROR
- } else {
- this.raise(position, message);
- }
- };
-
- pp$9.readTmplToken = function() {
- var out = "", chunkStart = this.pos;
- for (;;) {
- if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated template"); }
- var ch = this.input.charCodeAt(this.pos);
- if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'
- if (this.pos === this.start && (this.type === types.template || this.type === types.invalidTemplate)) {
- if (ch === 36) {
- this.pos += 2;
- return this.finishToken(types.dollarBraceL)
- } else {
- ++this.pos;
- return this.finishToken(types.backQuote)
- }
- }
- out += this.input.slice(chunkStart, this.pos);
- return this.finishToken(types.template, out)
- }
- if (ch === 92) { // '\'
- out += this.input.slice(chunkStart, this.pos);
- out += this.readEscapedChar(true);
- chunkStart = this.pos;
- } else if (isNewLine(ch)) {
- out += this.input.slice(chunkStart, this.pos);
- ++this.pos;
- switch (ch) {
- case 13:
- if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }
- case 10:
- out += "\n";
- break
- default:
- out += String.fromCharCode(ch);
- break
- }
- if (this.options.locations) {
- ++this.curLine;
- this.lineStart = this.pos;
- }
- chunkStart = this.pos;
- } else {
- ++this.pos;
- }
- }
- };
-
- // Reads a template token to search for the end, without validating any escape sequences
- pp$9.readInvalidTemplateToken = function() {
- for (; this.pos < this.input.length; this.pos++) {
- switch (this.input[this.pos]) {
- case "\\":
- ++this.pos;
- break
-
- case "$":
- if (this.input[this.pos + 1] !== "{") {
- break
- }
- // falls through
-
- case "`":
- return this.finishToken(types.invalidTemplate, this.input.slice(this.start, this.pos))
-
- // no default
- }
- }
- this.raise(this.start, "Unterminated template");
- };
-
- // Used to read escaped characters
-
- pp$9.readEscapedChar = function(inTemplate) {
- var ch = this.input.charCodeAt(++this.pos);
- ++this.pos;
- switch (ch) {
- case 110: return "\n" // 'n' -> '\n'
- case 114: return "\r" // 'r' -> '\r'
- case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'
- case 117: return codePointToString$1(this.readCodePoint()) // 'u'
- case 116: return "\t" // 't' -> '\t'
- case 98: return "\b" // 'b' -> '\b'
- case 118: return "\u000b" // 'v' -> '\u000b'
- case 102: return "\f" // 'f' -> '\f'
- case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\r\n'
- case 10: // ' \n'
- if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }
- return ""
- case 56:
- case 57:
- if (this.strict) {
- this.invalidStringToken(
- this.pos - 1,
- "Invalid escape sequence"
- );
- }
- if (inTemplate) {
- var codePos = this.pos - 1;
-
- this.invalidStringToken(
- codePos,
- "Invalid escape sequence in template string"
- );
-
- return null
- }
- default:
- if (ch >= 48 && ch <= 55) {
- var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];
- var octal = parseInt(octalStr, 8);
- if (octal > 255) {
- octalStr = octalStr.slice(0, -1);
- octal = parseInt(octalStr, 8);
- }
- this.pos += octalStr.length - 1;
- ch = this.input.charCodeAt(this.pos);
- if ((octalStr !== "0" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {
- this.invalidStringToken(
- this.pos - 1 - octalStr.length,
- inTemplate
- ? "Octal literal in template string"
- : "Octal literal in strict mode"
- );
- }
- return String.fromCharCode(octal)
- }
- if (isNewLine(ch)) {
- // Unicode new line characters after \ get removed from output in both
- // template literals and strings
- return ""
- }
- return String.fromCharCode(ch)
- }
- };
-
- // Used to read character escape sequences ('\x', '\u', '\U').
-
- pp$9.readHexChar = function(len) {
- var codePos = this.pos;
- var n = this.readInt(16, len);
- if (n === null) { this.invalidStringToken(codePos, "Bad character escape sequence"); }
- return n
- };
-
- // Read an identifier, and return it as a string. Sets `this.containsEsc`
- // to whether the word contained a '\u' escape.
- //
- // Incrementally adds only escaped chars, adding other chunks as-is
- // as a micro-optimization.
-
- pp$9.readWord1 = function() {
- this.containsEsc = false;
- var word = "", first = true, chunkStart = this.pos;
- var astral = this.options.ecmaVersion >= 6;
- while (this.pos < this.input.length) {
- var ch = this.fullCharCodeAtPos();
- if (isIdentifierChar(ch, astral)) {
- this.pos += ch <= 0xffff ? 1 : 2;
- } else if (ch === 92) { // "\"
- this.containsEsc = true;
- word += this.input.slice(chunkStart, this.pos);
- var escStart = this.pos;
- if (this.input.charCodeAt(++this.pos) !== 117) // "u"
- { this.invalidStringToken(this.pos, "Expecting Unicode escape sequence \\uXXXX"); }
- ++this.pos;
- var esc = this.readCodePoint();
- if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))
- { this.invalidStringToken(escStart, "Invalid Unicode escape"); }
- word += codePointToString$1(esc);
- chunkStart = this.pos;
- } else {
- break
- }
- first = false;
- }
- return word + this.input.slice(chunkStart, this.pos)
- };
-
- // Read an identifier or keyword token. Will check for reserved
- // words when necessary.
-
- pp$9.readWord = function() {
- var word = this.readWord1();
- var type = types.name;
- if (this.keywords.test(word)) {
- type = keywords$1[word];
- }
- return this.finishToken(type, word)
- };
-
- // Acorn is a tiny, fast JavaScript parser written in JavaScript.
-
- var version = "8.5.0";
-
- Parser.acorn = {
- Parser: Parser,
- version: version,
- defaultOptions: defaultOptions,
- Position: Position,
- SourceLocation: SourceLocation,
- getLineInfo: getLineInfo,
- Node: Node,
- TokenType: TokenType,
- tokTypes: types,
- keywordTypes: keywords$1,
- TokContext: TokContext,
- tokContexts: types$1,
- isIdentifierChar: isIdentifierChar,
- isIdentifierStart: isIdentifierStart,
- Token: Token,
- isNewLine: isNewLine,
- lineBreak: lineBreak,
- lineBreakG: lineBreakG,
- nonASCIIwhitespace: nonASCIIwhitespace
- };
-
- // The main exported interface (under `self.acorn` when in the
- // browser) is a `parse` function that takes a code string and
- // returns an abstract syntax tree as specified by [Mozilla parser
- // API][api].
- //
- // [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
-
- function parse(input, options) {
- return Parser.parse(input, options)
- }
-
- // This function tries to parse a single expression at a given
- // offset in a string. Useful for parsing mixed-language formats
- // that embed JavaScript expressions.
-
- function parseExpressionAt(input, pos, options) {
- return Parser.parseExpressionAt(input, pos, options)
- }
-
- // Acorn is organized as a tokenizer and a recursive-descent parser.
- // The `tokenizer` export provides an interface to the tokenizer.
-
- function tokenizer(input, options) {
- return Parser.tokenizer(input, options)
- }
-
- exports.Node = Node;
- exports.Parser = Parser;
- exports.Position = Position;
- exports.SourceLocation = SourceLocation;
- exports.TokContext = TokContext;
- exports.Token = Token;
- exports.TokenType = TokenType;
- exports.defaultOptions = defaultOptions;
- exports.getLineInfo = getLineInfo;
- exports.isIdentifierChar = isIdentifierChar;
- exports.isIdentifierStart = isIdentifierStart;
- exports.isNewLine = isNewLine;
- exports.keywordTypes = keywords$1;
- exports.lineBreak = lineBreak;
- exports.lineBreakG = lineBreakG;
- exports.nonASCIIwhitespace = nonASCIIwhitespace;
- exports.parse = parse;
- exports.parseExpressionAt = parseExpressionAt;
- exports.tokContexts = types$1;
- exports.tokTypes = types;
- exports.tokenizer = tokenizer;
- exports.version = version;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-})));
-}(acorn, acorn.exports));
-
-const getPrototype = Object.getPrototypeOf || (o => o.__proto__);
-
-const getAcorn = Parser => {
- if (Parser.acorn) return Parser.acorn
-
- const acorn$1 = acorn.exports;
-
- if (acorn$1.version.indexOf("6.") != 0 && acorn$1.version.indexOf("6.0.") == 0 && acorn$1.version.indexOf("7.") != 0) {
- throw new Error(`acorn-private-class-elements requires acorn@^6.1.0 or acorn@7.0.0, not ${acorn$1.version}`)
- }
-
- // Make sure `Parser` comes from the same acorn as we `require`d,
- // otherwise the comparisons fail.
- for (let cur = Parser; cur && cur !== acorn$1.Parser; cur = getPrototype(cur)) {
- if (cur !== acorn$1.Parser) {
- throw new Error("acorn-private-class-elements does not support mixing different acorn copies")
- }
- }
- return acorn$1
-};
-
-var acornPrivateClassElements = function(Parser) {
- // Only load this plugin once.
- if (Parser.prototype.parsePrivateName) {
- return Parser
- }
-
- const acorn = getAcorn(Parser);
-
- Parser = class extends Parser {
- _branch() {
- this.__branch = this.__branch || new Parser({ecmaVersion: this.options.ecmaVersion}, this.input);
- this.__branch.end = this.end;
- this.__branch.pos = this.pos;
- this.__branch.type = this.type;
- this.__branch.value = this.value;
- this.__branch.containsEsc = this.containsEsc;
- return this.__branch
- }
-
- parsePrivateClassElementName(element) {
- element.computed = false;
- element.key = this.parsePrivateName();
- if (element.key.name == "constructor") this.raise(element.key.start, "Classes may not have a private element named constructor");
- const accept = {get: "set", set: "get"}[element.kind];
- const privateBoundNames = this._privateBoundNames;
- if (Object.prototype.hasOwnProperty.call(privateBoundNames, element.key.name) && privateBoundNames[element.key.name] !== accept) {
- this.raise(element.start, "Duplicate private element");
- }
- privateBoundNames[element.key.name] = element.kind || true;
- delete this._unresolvedPrivateNames[element.key.name];
- return element.key
- }
-
- parsePrivateName() {
- const node = this.startNode();
- node.name = this.value;
- this.next();
- this.finishNode(node, "PrivateIdentifier");
- if (this.options.allowReserved == "never") this.checkUnreserved(node);
- return node
- }
-
- // Parse # token
- getTokenFromCode(code) {
- if (code === 35) {
- ++this.pos;
- const word = this.readWord1();
- return this.finishToken(this.privateIdentifierToken, word)
- }
- return super.getTokenFromCode(code)
- }
-
- // Manage stacks and check for undeclared private names
- parseClass(node, isStatement) {
- const oldOuterPrivateBoundNames = this._outerPrivateBoundNames;
- this._outerPrivateBoundNames = this._privateBoundNames;
- this._privateBoundNames = Object.create(this._privateBoundNames || null);
- const oldOuterUnresolvedPrivateNames = this._outerUnresolvedPrivateNames;
- this._outerUnresolvedPrivateNames = this._unresolvedPrivateNames;
- this._unresolvedPrivateNames = Object.create(null);
-
- const _return = super.parseClass(node, isStatement);
-
- const unresolvedPrivateNames = this._unresolvedPrivateNames;
- this._privateBoundNames = this._outerPrivateBoundNames;
- this._outerPrivateBoundNames = oldOuterPrivateBoundNames;
- this._unresolvedPrivateNames = this._outerUnresolvedPrivateNames;
- this._outerUnresolvedPrivateNames = oldOuterUnresolvedPrivateNames;
- if (!this._unresolvedPrivateNames) {
- const names = Object.keys(unresolvedPrivateNames);
- if (names.length) {
- names.sort((n1, n2) => unresolvedPrivateNames[n1] - unresolvedPrivateNames[n2]);
- this.raise(unresolvedPrivateNames[names[0]], "Usage of undeclared private name");
- }
- } else Object.assign(this._unresolvedPrivateNames, unresolvedPrivateNames);
- return _return
- }
-
- // Class heritage is evaluated with outer private environment
- parseClassSuper(node) {
- const privateBoundNames = this._privateBoundNames;
- this._privateBoundNames = this._outerPrivateBoundNames;
- const unresolvedPrivateNames = this._unresolvedPrivateNames;
- this._unresolvedPrivateNames = this._outerUnresolvedPrivateNames;
- const _return = super.parseClassSuper(node);
- this._privateBoundNames = privateBoundNames;
- this._unresolvedPrivateNames = unresolvedPrivateNames;
- return _return
- }
-
- // Parse private element access
- parseSubscript(base, startPos, startLoc, _noCalls, _maybeAsyncArrow, _optionalChained) {
- const optionalSupported = this.options.ecmaVersion >= 11 && acorn.tokTypes.questionDot;
- const branch = this._branch();
- if (!(
- (branch.eat(acorn.tokTypes.dot) || (optionalSupported && branch.eat(acorn.tokTypes.questionDot))) &&
- branch.type == this.privateIdentifierToken
- )) {
- return super.parseSubscript.apply(this, arguments)
- }
- let optional = false;
- if (!this.eat(acorn.tokTypes.dot)) {
- this.expect(acorn.tokTypes.questionDot);
- optional = true;
- }
- let node = this.startNodeAt(startPos, startLoc);
- node.object = base;
- node.computed = false;
- if (optionalSupported) {
- node.optional = optional;
- }
- if (this.type == this.privateIdentifierToken) {
- if (base.type == "Super") {
- this.raise(this.start, "Cannot access private element on super");
- }
- node.property = this.parsePrivateName();
- if (!this._privateBoundNames || !this._privateBoundNames[node.property.name]) {
- if (!this._unresolvedPrivateNames) {
- this.raise(node.property.start, "Usage of undeclared private name");
- }
- this._unresolvedPrivateNames[node.property.name] = node.property.start;
- }
- } else {
- node.property = this.parseIdent(true);
- }
- return this.finishNode(node, "MemberExpression")
- }
-
- // Prohibit delete of private class elements
- parseMaybeUnary(refDestructuringErrors, sawUnary) {
- const _return = super.parseMaybeUnary(refDestructuringErrors, sawUnary);
- if (_return.operator == "delete") {
- if (_return.argument.type == "MemberExpression" && _return.argument.property.type == "PrivateIdentifier") {
- this.raise(_return.start, "Private elements may not be deleted");
- }
- }
- return _return
- }
- };
- Parser.prototype.privateIdentifierToken = new acorn.TokenType("privateIdentifier");
- return Parser
-};
-
-const privateClassElements$1 = acornPrivateClassElements;
-
-var acornClassFields = function(Parser) {
- const acorn$1 = Parser.acorn || acorn.exports;
- const tt = acorn$1.tokTypes;
-
- Parser = privateClassElements$1(Parser);
- return class extends Parser {
- _maybeParseFieldValue(field) {
- if (this.eat(tt.eq)) {
- const oldInFieldValue = this._inFieldValue;
- this._inFieldValue = true;
- if (this.type === tt.name && this.value === "await" && (this.inAsync || this.options.allowAwaitOutsideFunction)) {
- field.value = this.parseAwait();
- } else field.value = this.parseExpression();
- this._inFieldValue = oldInFieldValue;
- } else field.value = null;
- }
-
- // Parse fields
- parseClassElement(_constructorAllowsSuper) {
- if (this.options.ecmaVersion >= 8 && (this.type == tt.name || this.type.keyword || this.type == this.privateIdentifierToken || this.type == tt.bracketL || this.type == tt.string || this.type == tt.num)) {
- const branch = this._branch();
- if (branch.type == tt.bracketL) {
- let count = 0;
- do {
- if (branch.eat(tt.bracketL)) ++count;
- else if (branch.eat(tt.bracketR)) --count;
- else branch.next();
- } while (count > 0)
- } else branch.next(true);
- let isField = branch.type == tt.eq || branch.type == tt.semi;
- if (!isField && branch.canInsertSemicolon()) {
- isField = branch.type != tt.parenL;
- }
- if (isField) {
- const node = this.startNode();
- if (this.type == this.privateIdentifierToken) {
- this.parsePrivateClassElementName(node);
- } else {
- this.parsePropertyName(node);
- }
- if ((node.key.type === "Identifier" && node.key.name === "constructor") ||
- (node.key.type === "Literal" && node.key.value === "constructor")) {
- this.raise(node.key.start, "Classes may not have a field called constructor");
- }
- this.enterScope(64 | 2 | 1); // See acorn's scopeflags.js
- this._maybeParseFieldValue(node);
- this.exitScope();
- this.finishNode(node, "PropertyDefinition");
- this.semicolon();
- return node
- }
- }
-
- return super.parseClassElement.apply(this, arguments)
- }
-
- // Prohibit arguments in class field initializers
- parseIdent(liberal, isBinding) {
- const ident = super.parseIdent(liberal, isBinding);
- if (this._inFieldValue && ident.name == "arguments") this.raise(ident.start, "A class field initializer may not contain arguments");
- return ident
- }
- }
-};
-
-const privateClassElements = acornPrivateClassElements;
-
-var acornStaticClassFeatures = function(Parser) {
- const ExtendedParser = privateClassElements(Parser);
-
- const acorn$1 = Parser.acorn || acorn.exports;
- const tt = acorn$1.tokTypes;
-
- return class extends ExtendedParser {
- _maybeParseFieldValue(field) {
- if (this.eat(tt.eq)) {
- const oldInFieldValue = this._inStaticFieldScope;
- this._inStaticFieldScope = this.currentThisScope();
- field.value = this.parseExpression();
- this._inStaticFieldScope = oldInFieldValue;
- } else field.value = null;
- }
-
- // Parse fields
- parseClassElement(_constructorAllowsSuper) {
- if (this.options.ecmaVersion < 8 || !this.isContextual("static")) {
- return super.parseClassElement.apply(this, arguments)
- }
-
- const branch = this._branch();
- branch.next();
- if ([tt.name, tt.bracketL, tt.string, tt.num, this.privateIdentifierToken].indexOf(branch.type) == -1 && !branch.type.keyword) {
- return super.parseClassElement.apply(this, arguments)
- }
- if (branch.type == tt.bracketL) {
- let count = 0;
- do {
- if (branch.eat(tt.bracketL)) ++count;
- else if (branch.eat(tt.bracketR)) --count;
- else branch.next();
- } while (count > 0)
- } else branch.next();
- if (branch.type != tt.eq && !branch.canInsertSemicolon() && branch.type != tt.semi) {
- return super.parseClassElement.apply(this, arguments)
- }
-
- const node = this.startNode();
- node.static = this.eatContextual("static");
- if (this.type == this.privateIdentifierToken) {
- this.parsePrivateClassElementName(node);
- } else {
- this.parsePropertyName(node);
- }
- if ((node.key.type === "Identifier" && node.key.name === "constructor") ||
- (node.key.type === "Literal" && !node.computed && node.key.value === "constructor")) {
- this.raise(node.key.start, "Classes may not have a field called constructor");
- }
- if ((node.key.name || node.key.value) === "prototype" && !node.computed) {
- this.raise(node.key.start, "Classes may not have a static property named prototype");
- }
-
- this.enterScope(64 | 2 | 1); // See acorn's scopeflags.js
- this._maybeParseFieldValue(node);
- this.exitScope();
- this.finishNode(node, "PropertyDefinition");
- this.semicolon();
- return node
- }
-
- // Parse private static methods
- parsePropertyName(prop) {
- if (prop.static && this.type == this.privateIdentifierToken) {
- this.parsePrivateClassElementName(prop);
- } else {
- super.parsePropertyName(prop);
- }
- }
-
- // Prohibit arguments in class field initializers
- parseIdent(liberal, isBinding) {
- const ident = super.parseIdent(liberal, isBinding);
- if (this._inStaticFieldScope && this.currentThisScope() === this._inStaticFieldScope && ident.name == "arguments") {
- this.raise(ident.start, "A static class field initializer may not contain arguments");
- }
- return ident
- }
- }
-};
-
-var ansiRegex$1 = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
-
-const ansiRegex = ansiRegex$1;
-
-var stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
-
-function prepareError(err) {
- // only copy the information we need and avoid serializing unnecessary
- // properties, since some errors may attach full objects (e.g. PostCSS)
- return {
- message: stripAnsi(err.message),
- stack: stripAnsi(cleanStack(err.stack || '')),
- id: err.id,
- frame: stripAnsi(err.frame || ''),
- plugin: err.plugin,
- pluginCode: err.pluginCode,
- loc: err.loc
- };
-}
-function buildErrorMessage(err, args = [], includeStack = true) {
- if (err.plugin)
- args.push(` Plugin: ${source.magenta(err.plugin)}`);
- if (err.id)
- args.push(` File: ${source.cyan(err.id)}`);
- if (err.frame)
- args.push(source.yellow(pad$1(err.frame)));
- if (includeStack && err.stack)
- args.push(pad$1(cleanStack(err.stack)));
- return args.join('\n');
-}
-function cleanStack(stack) {
- return stack
- .split(/\n/g)
- .filter((l) => /^\s*at/.test(l))
- .join('\n');
-}
-function logError(server, err) {
- const msg = buildErrorMessage(err, [
- source.red(`Internal server error: ${err.message}`)
- ]);
- server.config.logger.error(msg, {
- clear: true,
- timestamp: true,
- error: err
- });
- server.ws.send({
- type: 'error',
- err: prepareError(err)
- });
-}
-function errorMiddleware(server, allowNext = false) {
- // note the 4 args must be kept for connect to treat this as error middleware
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return function viteErrorMiddleware(err, _req, res, next) {
- logError(server, err);
- if (allowNext) {
- next();
- }
- else {
- if (err instanceof AccessRestrictedError) {
- res.statusCode = 403;
- res.write(renderErrorHTML(err.message));
- res.end();
- }
- res.statusCode = 500;
- res.end();
- }
- };
-}
-class AccessRestrictedError extends Error {
- constructor(msg) {
- super(msg);
- }
-}
-function renderErrorHTML(msg) {
- // to have syntax highlighting and autocompletion in IDE
- const html = String.raw;
- return html `
- <body>
- <h1>403 Restricted</h1>
- <p>${msg.replace(/\n/g, '<br/>')}</p>
- <style>
- body {
- padding: 1em 2em;
- }
- </style>
- </body>
- `;
-}
-
-/**
- * This file is refactored into TypeScript based on
- * https://github.com/preactjs/wmr/blob/main/packages/wmr/src/lib/rollup-plugin-container.js
- */
-let parser = Parser.extend(acornClassFields, acornStaticClassFeatures);
-async function createPluginContainer({ plugins, logger, root, build: { rollupOptions } }, watcher) {
- const isDebug = process.env.DEBUG;
- const seenResolves = {};
- const debugResolve = createDebugger('vite:resolve');
- const debugPluginResolve = createDebugger('vite:plugin-resolve', {
- onlyWhenFocused: 'vite:plugin'
- });
- const debugPluginTransform = createDebugger('vite:plugin-transform', {
- onlyWhenFocused: 'vite:plugin'
- });
- // ---------------------------------------------------------------------------
- const MODULES = new Map();
- const watchFiles = new Set();
- // get rollup version
- const rollupPkgPath = path$t.resolve(require.resolve('rollup'), '../../package.json');
- const minimalContext = {
- meta: {
- rollupVersion: JSON.parse(fs__default.readFileSync(rollupPkgPath, 'utf-8'))
- .version,
- watchMode: true
- }
- };
- function warnIncompatibleMethod(method, plugin) {
- logger.warn(source.cyan(`[plugin:${plugin}] `) +
- source.yellow(`context method ${source.bold(`${method}()`)} is not supported in serve mode. This plugin is likely not vite-compatible.`));
- }
- // we should create a new context for each async hook pipeline so that the
- // active plugin in that pipeline can be tracked in a concurrency-safe manner.
- // using a class to make creating new contexts more efficient
- class Context {
- constructor(initialPlugin) {
- this.meta = minimalContext.meta;
- this.ssr = false;
- this._activeId = null;
- this._activeCode = null;
- this._addedImports = null;
- this._activePlugin = initialPlugin || null;
- }
- parse(code, opts = {}) {
- return parser.parse(code, {
- sourceType: 'module',
- ecmaVersion: 'latest',
- locations: true,
- ...opts
- });
- }
- async resolve(id, importer, options) {
- let skips;
- if ((options === null || options === void 0 ? void 0 : options.skipSelf) && this._activePlugin) {
- skips = new Set(this._resolveSkips);
- skips.add(this._activePlugin);
- }
- let out = await container.resolveId(id, importer, skips, this.ssr);
- if (typeof out === 'string')
- out = { id: out };
- return out;
- }
- getModuleInfo(id) {
- let mod = MODULES.get(id);
- if (mod)
- return mod.info;
- mod = {
- /** @type {import('rollup').ModuleInfo} */
- // @ts-ignore-next
- info: {}
- };
- MODULES.set(id, mod);
- return mod.info;
- }
- getModuleIds() {
- return MODULES.keys();
- }
- addWatchFile(id) {
- watchFiles.add(id);
- (this._addedImports || (this._addedImports = new Set())).add(id);
- if (watcher)
- ensureWatchedFile(watcher, id, root);
- }
- getWatchFiles() {
- return [...watchFiles];
- }
- emitFile(assetOrFile) {
- warnIncompatibleMethod(`emitFile`, this._activePlugin.name);
- return '';
- }
- setAssetSource() {
- warnIncompatibleMethod(`setAssetSource`, this._activePlugin.name);
- }
- getFileName() {
- warnIncompatibleMethod(`getFileName`, this._activePlugin.name);
- return '';
- }
- warn(e, position) {
- const err = formatError(e, position, this);
- const msg = buildErrorMessage(err, [source.yellow(`warning: ${err.message}`)], false);
- logger.warn(msg, {
- clear: true,
- timestamp: true
- });
- }
- error(e, position) {
- // error thrown here is caught by the transform middleware and passed on
- // the the error middleware.
- throw formatError(e, position, this);
- }
- }
- function formatError(e, position, ctx) {
- const err = (typeof e === 'string' ? new Error(e) : e);
- if (ctx._activePlugin)
- err.plugin = ctx._activePlugin.name;
- if (ctx._activeId && !err.id)
- err.id = ctx._activeId;
- if (ctx._activeCode) {
- err.pluginCode = ctx._activeCode;
- const pos = position != null
- ? position
- : err.pos != null
- ? err.pos
- : // some rollup plugins, e.g. json, sets position instead of pos
- err.position;
- if (pos != null) {
- let errLocation;
- try {
- errLocation = numberToPos(ctx._activeCode, pos);
- }
- catch (err2) {
- logger.error(source.red(`Error in error handler:\n${err2.stack || err2.message}\n`),
- // print extra newline to separate the two errors
- { error: err2 });
- throw err;
- }
- err.loc = err.loc || {
- file: err.id,
- ...errLocation
- };
- err.frame = err.frame || generateCodeFrame(ctx._activeCode, pos);
- }
- else if (err.loc) {
- // css preprocessors may report errors in an included file
- if (!err.frame) {
- let code = ctx._activeCode;
- if (err.loc.file) {
- err.id = normalizePath$4(err.loc.file);
- try {
- code = fs__default.readFileSync(err.loc.file, 'utf-8');
- }
- catch { }
- }
- err.frame = generateCodeFrame(code, err.loc);
- }
- }
- else if (err.line && err.column) {
- err.loc = {
- file: err.id,
- line: err.line,
- column: err.column
- };
- err.frame = err.frame || generateCodeFrame(ctx._activeCode, err.loc);
- }
- }
- return err;
- }
- class TransformContext extends Context {
- constructor(filename, code, inMap) {
- super();
- this.originalSourcemap = null;
- this.sourcemapChain = [];
- this.combinedMap = null;
- this.filename = filename;
- this.originalCode = code;
- if (inMap) {
- this.sourcemapChain.push(inMap);
- }
- }
- _getCombinedSourcemap(createIfNull = false) {
- let combinedMap = this.combinedMap;
- for (let m of this.sourcemapChain) {
- if (typeof m === 'string')
- m = JSON.parse(m);
- if (!('version' in m)) {
- // empty, nullified source map
- combinedMap = this.combinedMap = null;
- this.sourcemapChain.length = 0;
- break;
- }
- if (!combinedMap) {
- combinedMap = m;
- }
- else {
- combinedMap = combineSourcemaps(this.filename, [
- {
- ...m,
- sourcesContent: combinedMap.sourcesContent
- },
- combinedMap
- ]);
- }
- }
- if (!combinedMap) {
- return createIfNull
- ? new MagicString(this.originalCode).generateMap({
- includeContent: true,
- hires: true,
- source: this.filename
- })
- : null;
- }
- if (combinedMap !== this.combinedMap) {
- this.combinedMap = combinedMap;
- this.sourcemapChain.length = 0;
- }
- return this.combinedMap;
- }
- getCombinedSourcemap() {
- return this._getCombinedSourcemap(true);
- }
- }
- let closed = false;
- const container = {
- options: await (async () => {
- let options = rollupOptions;
- for (const plugin of plugins) {
- if (!plugin.options)
- continue;
- options =
- (await plugin.options.call(minimalContext, options)) || options;
- }
- if (options.acornInjectPlugins) {
- parser = Parser.extend(...[acornClassFields, acornStaticClassFeatures].concat(options.acornInjectPlugins));
- }
- return {
- acorn: acorn$1,
- acornInjectPlugins: [],
- ...options
- };
- })(),
- async buildStart() {
- await Promise.all(plugins.map((plugin) => {
- if (plugin.buildStart) {
- return plugin.buildStart.call(new Context(plugin), container.options);
- }
- }));
- },
- async resolveId(rawId, importer = path$t.join(root, 'index.html'), skips, ssr) {
- const ctx = new Context();
- ctx.ssr = !!ssr;
- ctx._resolveSkips = skips;
- const resolveStart = isDebug ? perf_hooks.performance.now() : 0;
- let id = null;
- const partial = {};
- for (const plugin of plugins) {
- if (!plugin.resolveId)
- continue;
- if (skips === null || skips === void 0 ? void 0 : skips.has(plugin))
- continue;
- ctx._activePlugin = plugin;
- const pluginResolveStart = isDebug ? perf_hooks.performance.now() : 0;
- const result = await plugin.resolveId.call(ctx, rawId, importer, {}, ssr);
- if (!result)
- continue;
- if (typeof result === 'string') {
- id = result;
- }
- else {
- id = result.id;
- Object.assign(partial, result);
- }
- isDebug &&
- debugPluginResolve(timeFrom(pluginResolveStart), plugin.name, prettifyUrl(id, root));
- // resolveId() is hookFirst - first non-null result is returned.
- break;
- }
- if (isDebug && rawId !== id && !rawId.startsWith(FS_PREFIX)) {
- const key = rawId + id;
- // avoid spamming
- if (!seenResolves[key]) {
- seenResolves[key] = true;
- debugResolve(`${timeFrom(resolveStart)} ${source.cyan(rawId)} -> ${source.dim(id)}`);
- }
- }
- if (id) {
- partial.id = isExternalUrl(id) ? id : normalizePath$4(id);
- return partial;
- }
- else {
- return null;
- }
- },
- async load(id, ssr) {
- const ctx = new Context();
- ctx.ssr = !!ssr;
- for (const plugin of plugins) {
- if (!plugin.load)
- continue;
- ctx._activePlugin = plugin;
- const result = await plugin.load.call(ctx, id, ssr);
- if (result != null) {
- return result;
- }
- }
- return null;
- },
- async transform(code, id, inMap, ssr) {
- const ctx = new TransformContext(id, code, inMap);
- ctx.ssr = !!ssr;
- for (const plugin of plugins) {
- if (!plugin.transform)
- continue;
- ctx._activePlugin = plugin;
- ctx._activeId = id;
- ctx._activeCode = code;
- const start = isDebug ? perf_hooks.performance.now() : 0;
- let result;
- try {
- result = await plugin.transform.call(ctx, code, id, ssr);
- }
- catch (e) {
- ctx.error(e);
- }
- if (!result)
- continue;
- isDebug &&
- debugPluginTransform(timeFrom(start), plugin.name, prettifyUrl(id, root));
- if (isObject$3(result)) {
- code = result.code || '';
- if (result.map)
- ctx.sourcemapChain.push(result.map);
- }
- else {
- code = result;
- }
- }
- return {
- code,
- map: ctx._getCombinedSourcemap()
- };
- },
- async close() {
- if (closed)
- return;
- const ctx = new Context();
- await Promise.all(plugins.map((p) => p.buildEnd && p.buildEnd.call(ctx)));
- await Promise.all(plugins.map((p) => p.closeBundle && p.closeBundle.call(ctx)));
- closed = true;
- }
- };
- return container;
-}
-
-const debug$b = createDebugger('vite:deps');
-const htmlTypesRE = /\.(html|vue|svelte|astro)$/;
-// A simple regex to detect import sources. This is only used on
-// <script lang="ts"> blocks in vue (setup only) or svelte files, since
-// seemingly unused imports are dropped by esbuild when transpiling TS which
-// prevents it from crawling further.
-// We can't use es-module-lexer because it can't handle TS, and don't want to
-// use Acorn because it's slow. Luckily this doesn't have to be bullet proof
-// since even missed imports can be caught at runtime, and false positives will
-// simply be ignored.
-const importsRE = /(?<!\/\/.*)(?<=^|;|\*\/)\s*import(?!\s+type)(?:[\w*{}\n\r\t, ]+from\s*)?\s*("[^"]+"|'[^']+')\s*(?=$|;|\/\/|\/\*)/gm;
-async function scanImports(config) {
- var _a, _b, _c;
- const start = perf_hooks.performance.now();
- let entries = [];
- const explicitEntryPatterns = config.optimizeDeps.entries;
- const buildInput = (_a = config.build.rollupOptions) === null || _a === void 0 ? void 0 : _a.input;
- if (explicitEntryPatterns) {
- entries = await globEntries(explicitEntryPatterns, config);
- }
- else if (buildInput) {
- const resolvePath = (p) => path__default.resolve(config.root, p);
- if (typeof buildInput === 'string') {
- entries = [resolvePath(buildInput)];
- }
- else if (Array.isArray(buildInput)) {
- entries = buildInput.map(resolvePath);
- }
- else if (isObject$3(buildInput)) {
- entries = Object.values(buildInput).map(resolvePath);
- }
- else {
- throw new Error('invalid rollupOptions.input value.');
- }
- }
- else {
- entries = await globEntries('**/*.html', config);
- }
- // Non-supported entry file types and virtual files should not be scanned for
- // dependencies.
- entries = entries.filter((entry) => (JS_TYPES_RE.test(entry) || htmlTypesRE.test(entry)) &&
- fs__default.existsSync(entry));
- if (!entries.length) {
- if (!explicitEntryPatterns && !config.optimizeDeps.include) {
- config.logger.warn(source.yellow('(!) Could not auto-determine entry point from rollupOptions or html files ' +
- 'and there are no explicit optimizeDeps.include patterns. ' +
- 'Skipping dependency pre-bundling.'));
- }
- return { deps: {}, missing: {} };
- }
- else {
- debug$b(`Crawling dependencies using entries:\n ${entries.join('\n ')}`);
- }
- const deps = {};
- const missing = {};
- const container = await createPluginContainer(config);
- const plugin = esbuildScanPlugin(config, container, deps, missing, entries);
- const { plugins = [], ...esbuildOptions } = (_c = (_b = config.optimizeDeps) === null || _b === void 0 ? void 0 : _b.esbuildOptions) !== null && _c !== void 0 ? _c : {};
- await Promise.all(entries.map((entry) => esbuild.build({
- absWorkingDir: process.cwd(),
- write: false,
- entryPoints: [entry],
- bundle: true,
- format: 'esm',
- logLevel: 'error',
- plugins: [...plugins, plugin],
- ...esbuildOptions
- })));
- debug$b(`Scan completed in ${(perf_hooks.performance.now() - start).toFixed(2)}ms:`, deps);
- return {
- deps,
- missing
- };
-}
-function globEntries(pattern, config) {
- return out(pattern, {
- cwd: config.root,
- ignore: [
- '**/node_modules/**',
- `**/${config.build.outDir}/**`,
- `**/__tests__/**`
- ],
- absolute: true
- });
-}
-const scriptModuleRE = /(<script\b[^>]*type\s*=\s*(?:"module"|'module')[^>]*>)(.*?)<\/script>/gims;
-const scriptRE = /(<script\b(?:\s[^>]*>|>))(.*?)<\/script>/gims;
-const commentRE = /<!--(.|[\r\n])*?-->/;
-const srcRE = /\bsrc\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
-const typeRE = /\btype\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
-const langRE = /\blang\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
-function esbuildScanPlugin(config, container, depImports, missing, entries) {
- var _a, _b;
- const seen = new Map();
- const resolve = async (id, importer) => {
- const key = id + (importer && path__default.dirname(importer));
- if (seen.has(key)) {
- return seen.get(key);
- }
- const resolved = await container.resolveId(id, importer && normalizePath$4(importer));
- const res = resolved === null || resolved === void 0 ? void 0 : resolved.id;
- seen.set(key, res);
- return res;
- };
- const include = (_a = config.optimizeDeps) === null || _a === void 0 ? void 0 : _a.include;
- const exclude = [
- ...(((_b = config.optimizeDeps) === null || _b === void 0 ? void 0 : _b.exclude) || []),
- '@vite/client',
- '@vite/env'
- ];
- const externalUnlessEntry = ({ path }) => ({
- path,
- external: !entries.includes(path)
- });
- return {
- name: 'vite:dep-scan',
- setup(build) {
- // external urls
- build.onResolve({ filter: externalRE }, ({ path }) => ({
- path,
- external: true
- }));
- // data urls
- build.onResolve({ filter: dataUrlRE }, ({ path }) => ({
- path,
- external: true
- }));
- // html types: extract script contents -----------------------------------
- build.onResolve({ filter: htmlTypesRE }, async ({ path, importer }) => {
- return {
- path: await resolve(path, importer),
- namespace: 'html'
- };
- });
- // extract scripts inside HTML-like files and treat it as a js module
- build.onLoad({ filter: htmlTypesRE, namespace: 'html' }, async ({ path }) => {
- let raw = fs__default.readFileSync(path, 'utf-8');
- // Avoid matching the content of the comment
- raw = raw.replace(commentRE, '<!---->');
- const isHtml = path.endsWith('.html');
- const regex = isHtml ? scriptModuleRE : scriptRE;
- regex.lastIndex = 0;
- let js = '';
- let loader = 'js';
- let match;
- while ((match = regex.exec(raw))) {
- const [, openTag, content] = match;
- const srcMatch = openTag.match(srcRE);
- const typeMatch = openTag.match(typeRE);
- const langMatch = openTag.match(langRE);
- const type = typeMatch && (typeMatch[1] || typeMatch[2] || typeMatch[3]);
- const lang = langMatch && (langMatch[1] || langMatch[2] || langMatch[3]);
- // skip type="application/ld+json" and other non-JS types
- if (type &&
- !(type.includes('javascript') ||
- type.includes('ecmascript') ||
- type === 'module')) {
- continue;
- }
- if (lang === 'ts' || lang === 'tsx' || lang === 'jsx') {
- loader = lang;
- }
- if (srcMatch) {
- const src = srcMatch[1] || srcMatch[2] || srcMatch[3];
- js += `import ${JSON.stringify(src)}\n`;
- }
- else if (content.trim()) {
- js += content + '\n';
- }
- }
- // empty singleline & multiline comments to avoid matching comments
- const code = js
- .replace(multilineCommentsRE, '/* */')
- .replace(singlelineCommentsRE, '');
- if (loader.startsWith('ts') &&
- (path.endsWith('.svelte') ||
- (path.endsWith('.vue') && /<script\s+setup/.test(raw)))) {
- // when using TS + (Vue + <script setup>) or Svelte, imports may seem
- // unused to esbuild and dropped in the build output, which prevents
- // esbuild from crawling further.
- // the solution is to add `import 'x'` for every source to force
- // esbuild to keep crawling due to potential side effects.
- let m;
- while ((m = importsRE.exec(code)) != null) {
- // This is necessary to avoid infinite loops with zero-width matches
- if (m.index === importsRE.lastIndex) {
- importsRE.lastIndex++;
- }
- js += `\nimport ${m[1]}`;
- }
- }
- // This will trigger incorrectly if `export default` is contained
- // anywhere in a string. Svelte and Astro files can't have
- // `export default` as code so we know if it's encountered it's a
- // false positive (e.g. contained in a string)
- if (!path.endsWith('.vue') || !js.includes('export default')) {
- js += '\nexport default {}';
- }
- if (js.includes('import.meta.glob')) {
- return {
- // transformGlob already transforms to js
- loader: 'js',
- contents: await transformGlob(js, path, config.root, loader)
- };
- }
- return {
- loader,
- contents: js
- };
- });
- // bare imports: record and externalize ----------------------------------
- build.onResolve({
- // avoid matching windows volume
- filter: /^[\w@][^:]/
- }, async ({ path: id, importer }) => {
- if (exclude === null || exclude === void 0 ? void 0 : exclude.some((e) => e === id || id.startsWith(e + '/'))) {
- return externalUnlessEntry({ path: id });
- }
- if (depImports[id]) {
- return externalUnlessEntry({ path: id });
- }
- const resolved = await resolve(id, importer);
- if (resolved) {
- if (shouldExternalizeDep(resolved, id)) {
- return externalUnlessEntry({ path: id });
- }
- if (resolved.includes('node_modules') || (include === null || include === void 0 ? void 0 : include.includes(id))) {
- // dependency or forced included, externalize and stop crawling
- if (OPTIMIZABLE_ENTRY_RE.test(resolved)) {
- depImports[id] = resolved;
- }
- return externalUnlessEntry({ path: id });
- }
- else {
- const namespace = htmlTypesRE.test(resolved) ? 'html' : undefined;
- // linked package, keep crawling
- return {
- path: path__default.resolve(resolved),
- namespace
- };
- }
- }
- else {
- missing[id] = normalizePath$4(importer);
- }
- });
- // Externalized file types -----------------------------------------------
- // these are done on raw ids using esbuild's native regex filter so it
- // should be faster than doing it in the catch-all via js
- // they are done after the bare import resolve because a package name
- // may end with these extensions
- // css & json
- build.onResolve({
- filter: /\.(css|less|sass|scss|styl|stylus|pcss|postcss|json)$/
- }, externalUnlessEntry);
- // known asset types
- build.onResolve({
- filter: new RegExp(`\\.(${KNOWN_ASSET_TYPES.join('|')})$`)
- }, externalUnlessEntry);
- // known vite query types: ?worker, ?raw
- build.onResolve({ filter: SPECIAL_QUERY_RE }, ({ path }) => ({
- path,
- external: true
- }));
- // catch all -------------------------------------------------------------
- build.onResolve({
- filter: /.*/
- }, async ({ path: id, importer }) => {
- // use vite resolver to support urls and omitted extensions
- const resolved = await resolve(id, importer);
- if (resolved) {
- if (shouldExternalizeDep(resolved, id)) {
- return externalUnlessEntry({ path: id });
- }
- const namespace = htmlTypesRE.test(resolved) ? 'html' : undefined;
- return {
- path: path__default.resolve(cleanUrl(resolved)),
- namespace
- };
- }
- else {
- // resolve failed... probably unsupported type
- return externalUnlessEntry({ path: id });
- }
- });
- // for jsx/tsx, we need to access the content and check for
- // presence of import.meta.glob, since it results in import relationships
- // but isn't crawled by esbuild.
- build.onLoad({ filter: JS_TYPES_RE }, ({ path: id }) => {
- let ext = path__default.extname(id).slice(1);
- if (ext === 'mjs')
- ext = 'js';
- let contents = fs__default.readFileSync(id, 'utf-8');
- if (ext.endsWith('x') && config.esbuild && config.esbuild.jsxInject) {
- contents = config.esbuild.jsxInject + `\n` + contents;
- }
- if (contents.includes('import.meta.glob')) {
- return transformGlob(contents, id, config.root, ext).then((contents) => ({
- loader: ext,
- contents
- }));
- }
- return {
- loader: ext,
- contents
- };
- });
- }
- };
-}
-async function transformGlob(source, importer, root, loader) {
- // transform the content first since es-module-lexer can't handle non-js
- if (loader !== 'js') {
- source = (await esbuild.transform(source, { loader })).code;
- }
- await init;
- const imports = parse$f(source)[0];
- const s = new MagicString(source);
- for (let index = 0; index < imports.length; index++) {
- const { s: start, e: end, ss: expStart } = imports[index];
- const url = source.slice(start, end);
- if (url !== 'import.meta')
- continue;
- if (source.slice(end, end + 5) !== '.glob')
- continue;
- const { importsString, exp, endIndex } = await transformImportGlob(source, start, normalizePath$4(importer), index, root);
- s.prepend(importsString);
- s.overwrite(expStart, endIndex, exp);
- }
- return s.toString();
-}
-function shouldExternalizeDep(resolvedId, rawId) {
- // not a valid file path
- if (!path__default.isAbsolute(resolvedId)) {
- return true;
- }
- // virtual id
- if (resolvedId === rawId || resolvedId.includes('\0')) {
- return true;
- }
- // resolved is not a scannable type
- if (!JS_TYPES_RE.test(resolvedId) && !htmlTypesRE.test(resolvedId)) {
- return true;
- }
- return false;
-}
-
-/**
- * Convert `new URL('./foo.png', import.meta.url)` to its resolved built URL
- *
- * Supports template string with dynamic segments:
- * ```
- * new URL(`./dir/${name}.png`, import.meta.url)
- * // transformed to
- * import.meta.globEager('./dir/**.png')[`./dir/${name}.png`].default
- * ```
- */
-function assetImportMetaUrlPlugin(config) {
- return {
- name: 'vite:asset-import-meta-url',
- async transform(code, id, ssr) {
- if (code.includes('new URL') && code.includes(`import.meta.url`)) {
- const importMetaUrlRE = /\bnew\s+URL\s*\(\s*('[^']+'|"[^"]+"|`[^`]+`)\s*,\s*import\.meta\.url\s*\)/g;
- const noCommentsCode = code
- .replace(multilineCommentsRE, (m) => ' '.repeat(m.length))
- .replace(singlelineCommentsRE, (m) => ' '.repeat(m.length));
- let s = null;
- let match;
- while ((match = importMetaUrlRE.exec(noCommentsCode))) {
- const { 0: exp, 1: rawUrl, index } = match;
- if (ssr) {
- this.error(`\`new URL(url, import.meta.url)\` is not supported in SSR.`, index);
- }
- if (!s)
- s = new MagicString(code);
- // potential dynamic template string
- if (rawUrl[0] === '`' && /\$\{/.test(rawUrl)) {
- const ast = this.parse(rawUrl);
- const templateLiteral = ast.body[0].expression;
- if (templateLiteral.expressions.length) {
- const pattern = buildGlobPattern(templateLiteral);
- // Note: native import.meta.url is not supported in the baseline
- // target so we use the global location here. It can be
- // window.location or self.location in case it is used in a Web Worker.
- // @see https://developer.mozilla.org/en-US/docs/Web/API/Window/self
- s.overwrite(index, index + exp.length, `new URL(import.meta.globEagerDefault(${JSON.stringify(pattern)})[${rawUrl}], self.location)`);
- continue;
- }
- }
- const url = rawUrl.slice(1, -1);
- const file = path__default.resolve(path__default.dirname(id), url);
- const builtUrl = await fileToUrl(file, config, this);
- s.overwrite(index, index + exp.length, `new URL(${JSON.stringify(builtUrl)}, self.location)`);
- }
- if (s) {
- return {
- code: s.toString(),
- map: config.build.sourcemap ? s.generateMap({ hires: true }) : null
- };
- }
- }
- return null;
- }
- };
-}
-function buildGlobPattern(ast) {
- let pattern = '';
- let lastElementIndex = -1;
- for (const exp of ast.expressions) {
- for (let i = lastElementIndex + 1; i < ast.quasis.length; i++) {
- const el = ast.quasis[i];
- if (el.end < exp.start) {
- pattern += el.value.raw;
- lastElementIndex = i;
- }
- }
- pattern += '**';
- }
- for (let i = lastElementIndex + 1; i < ast.quasis.length; i++) {
- pattern += ast.quasis[i].value.raw;
- }
- return pattern;
-}
-
-/**
- * A plugin to provide build load fallback for arbitrary request with queries.
- */
-function loadFallbackPlugin() {
- return {
- name: 'vite:load-fallback',
- async load(id) {
- try {
- return fs$r.promises.readFile(cleanUrl(id), 'utf-8');
- }
- catch (e) {
- return fs$r.promises.readFile(id, 'utf-8');
- }
- }
- };
-}
-
-function resolveBuildOptions(raw) {
- const resolved = {
- target: 'modules',
- polyfillModulePreload: true,
- outDir: 'dist',
- assetsDir: 'assets',
- assetsInlineLimit: 4096,
- cssCodeSplit: !(raw === null || raw === void 0 ? void 0 : raw.lib),
- cssTarget: false,
- sourcemap: false,
- rollupOptions: {},
- minify: (raw === null || raw === void 0 ? void 0 : raw.ssr) ? false : 'esbuild',
- terserOptions: {},
- write: true,
- emptyOutDir: null,
- manifest: false,
- lib: false,
- ssr: false,
- ssrManifest: false,
- reportCompressedSize: true,
- // brotliSize: true,
- chunkSizeWarningLimit: 500,
- watch: null,
- ...raw,
- commonjsOptions: {
- include: [/node_modules/],
- extensions: ['.js', '.cjs'],
- ...raw === null || raw === void 0 ? void 0 : raw.commonjsOptions
- },
- dynamicImportVarsOptions: {
- warnOnError: true,
- exclude: [/node_modules/],
- ...raw === null || raw === void 0 ? void 0 : raw.dynamicImportVarsOptions
- }
- };
- // handle special build targets
- if (resolved.target === 'modules') {
- // Support browserslist
- // "defaults and supports es6-module and supports es6-module-dynamic-import",
- resolved.target = [
- 'es2019',
- 'edge88',
- 'firefox78',
- 'chrome87',
- 'safari13.1'
- ];
- }
- else if (resolved.target === 'esnext' && resolved.minify === 'terser') {
- // esnext + terser: limit to es2019 so it can be minified by terser
- resolved.target = 'es2019';
- }
- if (!resolved.cssTarget) {
- resolved.cssTarget = resolved.target;
- }
- // normalize false string into actual false
- if (resolved.minify === 'false') {
- resolved.minify = false;
- }
- if (resolved.minify === true) {
- resolved.minify = 'esbuild';
- }
- return resolved;
-}
-function resolveBuildPlugins(config) {
- const options = config.build;
- return {
- pre: [
- buildHtmlPlugin(config),
- commonjs(options.commonjsOptions),
- dataURIPlugin(),
- dynamicImportVariables(options.dynamicImportVarsOptions),
- assetImportMetaUrlPlugin(config),
- ...(options.rollupOptions.plugins
- ? options.rollupOptions.plugins.filter((p) => !!p)
- : [])
- ],
- post: [
- buildImportAnalysisPlugin(config),
- buildEsbuildPlugin(config),
- ...(options.minify === 'terser' ? [terserPlugin(config)] : []),
- ...(options.manifest ? [manifestPlugin(config)] : []),
- ...(options.ssrManifest ? [ssrManifestPlugin(config)] : []),
- buildReporterPlugin(config),
- loadFallbackPlugin()
- ]
- };
-}
-/**
- * Track parallel build calls and only stop the esbuild service when all
- * builds are done. (#1098)
- */
-let parallelCallCounts = 0;
-// we use a separate counter to track since the call may error before the
-// bundle is even pushed.
-const parallelBuilds = [];
-/**
- * Bundles the app for production.
- * Returns a Promise containing the build result.
- */
-async function build(inlineConfig = {}) {
- parallelCallCounts++;
- try {
- return await doBuild(inlineConfig);
- }
- finally {
- parallelCallCounts--;
- if (parallelCallCounts <= 0) {
- await Promise.all(parallelBuilds.map((bundle) => bundle.close()));
- parallelBuilds.length = 0;
- }
- }
-}
-async function doBuild(inlineConfig = {}) {
- var _a, _b, _c, _d;
- const config = await resolveConfig(inlineConfig, 'build', 'production');
- const options = config.build;
- const ssr = !!options.ssr;
- const libOptions = options.lib;
- config.logger.info(source.cyan(`vite v${require('../../../package.json').version} ${source.green(`building ${ssr ? `SSR bundle ` : ``}for ${config.mode}...`)}`));
- const resolve = (p) => path__default.resolve(config.root, p);
- const input = libOptions
- ? resolve(libOptions.entry)
- : typeof options.ssr === 'string'
- ? resolve(options.ssr)
- : ((_a = options.rollupOptions) === null || _a === void 0 ? void 0 : _a.input) || resolve('index.html');
- if (ssr && typeof input === 'string' && input.endsWith('.html')) {
- throw new Error(`rollupOptions.input should not be an html file when building for SSR. ` +
- `Please specify a dedicated SSR entry.`);
- }
- const outDir = resolve(options.outDir);
- // inject ssr arg to plugin load/transform hooks
- const plugins = (ssr ? config.plugins.map((p) => injectSsrFlagToHooks(p)) : config.plugins);
- // inject ssrExternal if present
- const userExternal = (_b = options.rollupOptions) === null || _b === void 0 ? void 0 : _b.external;
- let external = userExternal;
- if (ssr) {
- // see if we have cached deps data available
- let knownImports;
- if (config.cacheDir) {
- const dataPath = path__default.join(config.cacheDir, '_metadata.json');
- try {
- const data = JSON.parse(fs__default.readFileSync(dataPath, 'utf-8'));
- knownImports = Object.keys(data.optimized);
- }
- catch (e) { }
- }
- if (!knownImports) {
- // no dev deps optimization data, do a fresh scan
- knownImports = Object.keys((await scanImports(config)).deps);
- }
- external = resolveExternal(resolveSSRExternal(config, knownImports), userExternal);
- }
- const rollup = require('rollup');
- const rollupOptions = {
- input,
- preserveEntrySignatures: ssr
- ? 'allow-extension'
- : libOptions
- ? 'strict'
- : false,
- ...options.rollupOptions,
- plugins,
- external,
- onwarn(warning, warn) {
- onRollupWarning(warning, warn, config);
- }
- };
- const outputBuildError = (e) => {
- let msg = source.red((e.plugin ? `[${e.plugin}] ` : '') + e.message);
- if (e.id) {
- msg += `\nfile: ${source.cyan(e.id + (e.loc ? `:${e.loc.line}:${e.loc.column}` : ''))}`;
- }
- if (e.frame) {
- msg += `\n` + source.yellow(e.frame);
- }
- config.logger.error(msg, { error: e });
- };
- try {
- const buildOutputOptions = (output = {}) => {
- return {
- dir: outDir,
- format: ssr ? 'cjs' : 'es',
- exports: ssr ? 'named' : 'auto',
- sourcemap: options.sourcemap,
- name: libOptions ? libOptions.name : undefined,
- entryFileNames: ssr
- ? `[name].js`
- : libOptions
- ? resolveLibFilename(libOptions, output.format || 'es', config.root)
- : path__default.posix.join(options.assetsDir, `[name].[hash].js`),
- chunkFileNames: libOptions
- ? `[name].js`
- : path__default.posix.join(options.assetsDir, `[name].[hash].js`),
- assetFileNames: libOptions
- ? `[name].[ext]`
- : path__default.posix.join(options.assetsDir, `[name].[hash].[ext]`),
- // #764 add `Symbol.toStringTag` when build es module into cjs chunk
- // #1048 add `Symbol.toStringTag` for module default export
- namespaceToStringTag: true,
- inlineDynamicImports: ssr && typeof input === 'string',
- manualChunks: !ssr &&
- !libOptions &&
- (output === null || output === void 0 ? void 0 : output.format) !== 'umd' &&
- (output === null || output === void 0 ? void 0 : output.format) !== 'iife'
- ? createMoveToVendorChunkFn()
- : undefined,
- ...output
- };
- };
- // resolve lib mode outputs
- const outputs = resolveBuildOutputs((_c = options.rollupOptions) === null || _c === void 0 ? void 0 : _c.output, libOptions, config.logger);
- // watch file changes with rollup
- if (config.build.watch) {
- config.logger.info(source.cyanBright(`\nwatching for file changes...`));
- const output = [];
- if (Array.isArray(outputs)) {
- for (const resolvedOutput of outputs) {
- output.push(buildOutputOptions(resolvedOutput));
- }
- }
- else {
- output.push(buildOutputOptions(outputs));
- }
- const watcherOptions = config.build.watch;
- const watcher = rollup.watch({
- ...rollupOptions,
- output,
- watch: {
- ...watcherOptions,
- chokidar: {
- ignored: [
- '**/node_modules/**',
- '**/.git/**',
- ...(((_d = watcherOptions === null || watcherOptions === void 0 ? void 0 : watcherOptions.chokidar) === null || _d === void 0 ? void 0 : _d.ignored) || [])
- ],
- ignoreInitial: true,
- ignorePermissionErrors: true,
- ...watcherOptions.chokidar
- }
- }
- });
- watcher.on('event', (event) => {
- if (event.code === 'BUNDLE_START') {
- config.logger.info(source.cyanBright(`\nbuild started...`));
- if (options.write) {
- prepareOutDir(outDir, options.emptyOutDir, config);
- }
- }
- else if (event.code === 'BUNDLE_END') {
- event.result.close();
- config.logger.info(source.cyanBright(`built in ${event.duration}ms.`));
- }
- else if (event.code === 'ERROR') {
- outputBuildError(event.error);
- }
- });
- // stop watching
- watcher.close();
- return watcher;
- }
- // write or generate files with rollup
- const bundle = await rollup.rollup(rollupOptions);
- parallelBuilds.push(bundle);
- const generate = (output = {}) => {
- return bundle[options.write ? 'write' : 'generate'](buildOutputOptions(output));
- };
- if (options.write) {
- prepareOutDir(outDir, options.emptyOutDir, config);
- }
- if (Array.isArray(outputs)) {
- const res = [];
- for (const output of outputs) {
- res.push(await generate(output));
- }
- return res;
- }
- else {
- return await generate(outputs);
- }
- }
- catch (e) {
- outputBuildError(e);
- throw e;
- }
-}
-function prepareOutDir(outDir, emptyOutDir, config) {
- if (fs__default.existsSync(outDir)) {
- if (emptyOutDir == null &&
- !normalizePath$4(outDir).startsWith(config.root + '/')) {
- // warn if outDir is outside of root
- config.logger.warn(source.yellow(`\n${source.bold(`(!)`)} outDir ${source.white.dim(outDir)} is not inside project root and will not be emptied.\n` +
- `Use --emptyOutDir to override.\n`));
- }
- else if (emptyOutDir !== false) {
- emptyDir(outDir, ['.git']);
- }
- }
- if (config.publicDir && fs__default.existsSync(config.publicDir)) {
- copyDir(config.publicDir, outDir);
- }
-}
-function getPkgName(root) {
- const { name } = JSON.parse(lookupFile(root, ['package.json']) || `{}`);
- return (name === null || name === void 0 ? void 0 : name.startsWith('@')) ? name.split('/')[1] : name;
-}
-function createMoveToVendorChunkFn(config) {
- const cache = new Map();
- return (id, { getModuleInfo }) => {
- if (id.includes('node_modules') &&
- !isCSSRequest(id) &&
- staticImportedByEntry(id, getModuleInfo, cache)) {
- return 'vendor';
- }
- };
-}
-function staticImportedByEntry(id, getModuleInfo, cache, importStack = []) {
- if (cache.has(id)) {
- return cache.get(id);
- }
- if (importStack.includes(id)) {
- // circular deps!
- cache.set(id, false);
- return false;
- }
- const mod = getModuleInfo(id);
- if (!mod) {
- cache.set(id, false);
- return false;
- }
- if (mod.isEntry) {
- cache.set(id, true);
- return true;
- }
- const someImporterIs = mod.importers.some((importer) => staticImportedByEntry(importer, getModuleInfo, cache, importStack.concat(id)));
- cache.set(id, someImporterIs);
- return someImporterIs;
-}
-function resolveLibFilename(libOptions, format, root) {
- if (typeof libOptions.fileName === 'function') {
- return libOptions.fileName(format);
- }
- const name = libOptions.fileName || getPkgName(root);
- if (!name)
- throw new Error('Name in package.json is required if option "build.lib.fileName" is not provided.');
- return `${name}.${format}.js`;
-}
-function resolveBuildOutputs(outputs, libOptions, logger) {
- if (libOptions) {
- const formats = libOptions.formats || ['es', 'umd'];
- if ((formats.includes('umd') || formats.includes('iife')) &&
- !libOptions.name) {
- throw new Error(`Option "build.lib.name" is required when output formats ` +
- `include "umd" or "iife".`);
- }
- if (!outputs) {
- return formats.map((format) => ({ format }));
- }
- else if (!Array.isArray(outputs)) {
- return formats.map((format) => ({ ...outputs, format }));
- }
- else if (libOptions.formats) {
- // user explicitly specifying own output array
- logger.warn(source.yellow(`"build.lib.formats" will be ignored because ` +
- `"build.rollupOptions.output" is already an array format`));
- }
- }
- return outputs;
-}
-const warningIgnoreList = [`CIRCULAR_DEPENDENCY`, `THIS_IS_UNDEFINED`];
-const dynamicImportWarningIgnoreList = [
- `Unsupported expression`,
- `statically analyzed`
-];
-function onRollupWarning(warning, warn, config) {
- var _a;
- if (warning.code === 'UNRESOLVED_IMPORT') {
- const id = warning.source;
- const importer = warning.importer;
- // throw unless it's commonjs external...
- if (!importer || !/\?commonjs-external$/.test(importer)) {
- throw new Error(`[vite]: Rollup failed to resolve import "${id}" from "${importer}".\n` +
- `This is most likely unintended because it can break your application at runtime.\n` +
- `If you do want to externalize this module explicitly add it to\n` +
- `\`build.rollupOptions.external\``);
- }
- }
- if (warning.plugin === 'rollup-plugin-dynamic-import-variables' &&
- dynamicImportWarningIgnoreList.some((msg) => warning.message.includes(msg))) {
- return;
- }
- if (!warningIgnoreList.includes(warning.code)) {
- const userOnWarn = (_a = config.build.rollupOptions) === null || _a === void 0 ? void 0 : _a.onwarn;
- if (userOnWarn) {
- userOnWarn(warning, warn);
- }
- else if (warning.code === 'PLUGIN_WARNING') {
- config.logger.warn(`${source.bold.yellow(`[plugin:${warning.plugin}]`)} ${source.yellow(warning.message)}`);
- }
- else {
- warn(warning);
- }
- }
-}
-function resolveExternal(ssrExternals, user) {
- return ((id, parentId, isResolved) => {
- if (shouldExternalizeForSSR(id, ssrExternals)) {
- return true;
- }
- if (user) {
- if (typeof user === 'function') {
- return user(id, parentId, isResolved);
- }
- else if (Array.isArray(user)) {
- return user.some((test) => isExternal(id, test));
- }
- else {
- return isExternal(id, user);
- }
- }
- });
-}
-function isExternal(id, test) {
- if (typeof test === 'string') {
- return id === test;
- }
- else {
- return test.test(id);
- }
-}
-function injectSsrFlagToHooks(p) {
- const { resolveId, load, transform } = p;
- return {
- ...p,
- resolveId: wrapSsrHook(resolveId),
- load: wrapSsrHook(load),
- transform: wrapSsrHook(transform)
- };
-}
-function wrapSsrHook(fn) {
- if (!fn)
- return;
- return function (...args) {
- return fn.call(this, ...args, true);
- };
-}
-
-var build$1 = {
- __proto__: null,
- resolveBuildOptions: resolveBuildOptions,
- resolveBuildPlugins: resolveBuildPlugins,
- build: build,
- resolveLibFilename: resolveLibFilename,
- onRollupWarning: onRollupWarning
-};
-
-var src = {exports: {}};
-
-var browser = {exports: {}};
-
-var debug$a = {exports: {}};
-
-/**
- * Helpers.
- */
-
-var s = 1000;
-var m = s * 60;
-var h = m * 60;
-var d = h * 24;
-var y = d * 365.25;
-
-/**
- * Parse or format the given `val`.
- *
- * Options:
- *
- * - `long` verbose formatting [false]
- *
- * @param {String|Number} val
- * @param {Object} [options]
- * @throws {Error} throw an error if val is not a non-empty string or a number
- * @return {String|Number}
- * @api public
- */
-
-var ms = function(val, options) {
- options = options || {};
- var type = typeof val;
- if (type === 'string' && val.length > 0) {
- return parse$b(val);
- } else if (type === 'number' && isNaN(val) === false) {
- return options.long ? fmtLong(val) : fmtShort(val);
- }
- throw new Error(
- 'val is not a non-empty string or a valid number. val=' +
- JSON.stringify(val)
- );
-};
-
-/**
- * Parse the given `str` and return milliseconds.
- *
- * @param {String} str
- * @return {Number}
- * @api private
- */
-
-function parse$b(str) {
- str = String(str);
- if (str.length > 100) {
- return;
- }
- var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
- str
- );
- if (!match) {
- return;
- }
- var n = parseFloat(match[1]);
- var type = (match[2] || 'ms').toLowerCase();
- switch (type) {
- case 'years':
- case 'year':
- case 'yrs':
- case 'yr':
- case 'y':
- return n * y;
- case 'days':
- case 'day':
- case 'd':
- return n * d;
- case 'hours':
- case 'hour':
- case 'hrs':
- case 'hr':
- case 'h':
- return n * h;
- case 'minutes':
- case 'minute':
- case 'mins':
- case 'min':
- case 'm':
- return n * m;
- case 'seconds':
- case 'second':
- case 'secs':
- case 'sec':
- case 's':
- return n * s;
- case 'milliseconds':
- case 'millisecond':
- case 'msecs':
- case 'msec':
- case 'ms':
- return n;
- default:
- return undefined;
- }
-}
-
-/**
- * Short format for `ms`.
- *
- * @param {Number} ms
- * @return {String}
- * @api private
- */
-
-function fmtShort(ms) {
- if (ms >= d) {
- return Math.round(ms / d) + 'd';
- }
- if (ms >= h) {
- return Math.round(ms / h) + 'h';
- }
- if (ms >= m) {
- return Math.round(ms / m) + 'm';
- }
- if (ms >= s) {
- return Math.round(ms / s) + 's';
- }
- return ms + 'ms';
-}
-
-/**
- * Long format for `ms`.
- *
- * @param {Number} ms
- * @return {String}
- * @api private
- */
-
-function fmtLong(ms) {
- return plural(ms, d, 'day') ||
- plural(ms, h, 'hour') ||
- plural(ms, m, 'minute') ||
- plural(ms, s, 'second') ||
- ms + ' ms';
-}
-
-/**
- * Pluralization helper.
- */
-
-function plural(ms, n, name) {
- if (ms < n) {
- return;
- }
- if (ms < n * 1.5) {
- return Math.floor(ms / n) + ' ' + name;
- }
- return Math.ceil(ms / n) + ' ' + name + 's';
-}
-
-(function (module, exports) {
-/**
- * This is the common logic for both the Node.js and web browser
- * implementations of `debug()`.
- *
- * Expose `debug()` as the module.
- */
-
-exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
-exports.coerce = coerce;
-exports.disable = disable;
-exports.enable = enable;
-exports.enabled = enabled;
-exports.humanize = ms;
-
-/**
- * The currently active debug mode names, and names to skip.
- */
-
-exports.names = [];
-exports.skips = [];
-
-/**
- * Map of special "%n" handling functions, for the debug "format" argument.
- *
- * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
- */
-
-exports.formatters = {};
-
-/**
- * Previous log timestamp.
- */
-
-var prevTime;
-
-/**
- * Select a color.
- * @param {String} namespace
- * @return {Number}
- * @api private
- */
-
-function selectColor(namespace) {
- var hash = 0, i;
-
- for (i in namespace) {
- hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
- hash |= 0; // Convert to 32bit integer
- }
-
- return exports.colors[Math.abs(hash) % exports.colors.length];
-}
-
-/**
- * Create a debugger with the given `namespace`.
- *
- * @param {String} namespace
- * @return {Function}
- * @api public
- */
-
-function createDebug(namespace) {
-
- function debug() {
- // disabled?
- if (!debug.enabled) return;
-
- var self = debug;
-
- // set `diff` timestamp
- var curr = +new Date();
- var ms = curr - (prevTime || curr);
- self.diff = ms;
- self.prev = prevTime;
- self.curr = curr;
- prevTime = curr;
-
- // turn the `arguments` into a proper Array
- var args = new Array(arguments.length);
- for (var i = 0; i < args.length; i++) {
- args[i] = arguments[i];
- }
-
- args[0] = exports.coerce(args[0]);
-
- if ('string' !== typeof args[0]) {
- // anything else let's inspect with %O
- args.unshift('%O');
- }
-
- // apply any `formatters` transformations
- var index = 0;
- args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
- // if we encounter an escaped % then don't increase the array index
- if (match === '%%') return match;
- index++;
- var formatter = exports.formatters[format];
- if ('function' === typeof formatter) {
- var val = args[index];
- match = formatter.call(self, val);
-
- // now we need to remove `args[index]` since it's inlined in the `format`
- args.splice(index, 1);
- index--;
- }
- return match;
- });
-
- // apply env-specific formatting (colors, etc.)
- exports.formatArgs.call(self, args);
-
- var logFn = debug.log || exports.log || console.log.bind(console);
- logFn.apply(self, args);
- }
-
- debug.namespace = namespace;
- debug.enabled = exports.enabled(namespace);
- debug.useColors = exports.useColors();
- debug.color = selectColor(namespace);
-
- // env-specific initialization logic for debug instances
- if ('function' === typeof exports.init) {
- exports.init(debug);
- }
-
- return debug;
-}
-
-/**
- * Enables a debug mode by namespaces. This can include modes
- * separated by a colon and wildcards.
- *
- * @param {String} namespaces
- * @api public
- */
-
-function enable(namespaces) {
- exports.save(namespaces);
-
- exports.names = [];
- exports.skips = [];
-
- var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
- var len = split.length;
-
- for (var i = 0; i < len; i++) {
- if (!split[i]) continue; // ignore empty strings
- namespaces = split[i].replace(/\*/g, '.*?');
- if (namespaces[0] === '-') {
- exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
- } else {
- exports.names.push(new RegExp('^' + namespaces + '$'));
- }
- }
-}
-
-/**
- * Disable debug output.
- *
- * @api public
- */
-
-function disable() {
- exports.enable('');
-}
-
-/**
- * Returns true if the given mode name is enabled, false otherwise.
- *
- * @param {String} name
- * @return {Boolean}
- * @api public
- */
-
-function enabled(name) {
- var i, len;
- for (i = 0, len = exports.skips.length; i < len; i++) {
- if (exports.skips[i].test(name)) {
- return false;
- }
- }
- for (i = 0, len = exports.names.length; i < len; i++) {
- if (exports.names[i].test(name)) {
- return true;
- }
- }
- return false;
-}
-
-/**
- * Coerce `val`.
- *
- * @param {Mixed} val
- * @return {Mixed}
- * @api private
- */
-
-function coerce(val) {
- if (val instanceof Error) return val.stack || val.message;
- return val;
-}
-}(debug$a, debug$a.exports));
-
-/**
- * This is the web browser implementation of `debug()`.
- *
- * Expose `debug()` as the module.
- */
-
-(function (module, exports) {
-exports = module.exports = debug$a.exports;
-exports.log = log;
-exports.formatArgs = formatArgs;
-exports.save = save;
-exports.load = load;
-exports.useColors = useColors;
-exports.storage = 'undefined' != typeof chrome
- && 'undefined' != typeof chrome.storage
- ? chrome.storage.local
- : localstorage();
-
-/**
- * Colors.
- */
-
-exports.colors = [
- 'lightseagreen',
- 'forestgreen',
- 'goldenrod',
- 'dodgerblue',
- 'darkorchid',
- 'crimson'
-];
-
-/**
- * Currently only WebKit-based Web Inspectors, Firefox >= v31,
- * and the Firebug extension (any Firefox version) are known
- * to support "%c" CSS customizations.
- *
- * TODO: add a `localStorage` variable to explicitly enable/disable colors
- */
-
-function useColors() {
- // NB: In an Electron preload script, document will be defined but not fully
- // initialized. Since we know we're in Chrome, we'll just detect this case
- // explicitly
- if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
- return true;
- }
-
- // is webkit? http://stackoverflow.com/a/16459606/376773
- // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
- return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
- // is firebug? http://stackoverflow.com/a/398120/376773
- (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
- // is firefox >= v31?
- // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
- (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
- // double check webkit in userAgent just in case we are in a worker
- (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
-}
-
-/**
- * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
- */
-
-exports.formatters.j = function(v) {
- try {
- return JSON.stringify(v);
- } catch (err) {
- return '[UnexpectedJSONParseError]: ' + err.message;
- }
-};
-
-
-/**
- * Colorize log arguments if enabled.
- *
- * @api public
- */
-
-function formatArgs(args) {
- var useColors = this.useColors;
-
- args[0] = (useColors ? '%c' : '')
- + this.namespace
- + (useColors ? ' %c' : ' ')
- + args[0]
- + (useColors ? '%c ' : ' ')
- + '+' + exports.humanize(this.diff);
-
- if (!useColors) return;
-
- var c = 'color: ' + this.color;
- args.splice(1, 0, c, 'color: inherit');
-
- // the final "%c" is somewhat tricky, because there could be other
- // arguments passed either before or after the %c, so we need to
- // figure out the correct index to insert the CSS into
- var index = 0;
- var lastC = 0;
- args[0].replace(/%[a-zA-Z%]/g, function(match) {
- if ('%%' === match) return;
- index++;
- if ('%c' === match) {
- // we only are interested in the *last* %c
- // (the user may have provided their own)
- lastC = index;
- }
- });
-
- args.splice(lastC, 0, c);
-}
-
-/**
- * Invokes `console.log()` when available.
- * No-op when `console.log` is not a "function".
- *
- * @api public
- */
-
-function log() {
- // this hackery is required for IE8/9, where
- // the `console.log` function doesn't have 'apply'
- return 'object' === typeof console
- && console.log
- && Function.prototype.apply.call(console.log, console, arguments);
-}
-
-/**
- * Save `namespaces`.
- *
- * @param {String} namespaces
- * @api private
- */
-
-function save(namespaces) {
- try {
- if (null == namespaces) {
- exports.storage.removeItem('debug');
- } else {
- exports.storage.debug = namespaces;
- }
- } catch(e) {}
-}
-
-/**
- * Load `namespaces`.
- *
- * @return {String} returns the previously persisted debug modes
- * @api private
- */
-
-function load() {
- var r;
- try {
- r = exports.storage.debug;
- } catch(e) {}
-
- // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
- if (!r && typeof process !== 'undefined' && 'env' in process) {
- r = process.env.DEBUG;
- }
-
- return r;
-}
-
-/**
- * Enable namespaces listed in `localStorage.debug` initially.
- */
-
-exports.enable(load());
-
-/**
- * Localstorage attempts to return the localstorage.
- *
- * This is necessary because safari throws
- * when a user disables cookies/localstorage
- * and you attempt to access it.
- *
- * @return {LocalStorage}
- * @api private
- */
-
-function localstorage() {
- try {
- return window.localStorage;
- } catch (e) {}
-}
-}(browser, browser.exports));
-
-var node = {exports: {}};
-
-/**
- * Module dependencies.
- */
-
-(function (module, exports) {
-var tty = require$$0__default;
-var util = require$$0__default$2;
-
-/**
- * This is the Node.js implementation of `debug()`.
- *
- * Expose `debug()` as the module.
- */
-
-exports = module.exports = debug$a.exports;
-exports.init = init;
-exports.log = log;
-exports.formatArgs = formatArgs;
-exports.save = save;
-exports.load = load;
-exports.useColors = useColors;
-
-/**
- * Colors.
- */
-
-exports.colors = [6, 2, 3, 4, 5, 1];
-
-/**
- * Build up the default `inspectOpts` object from the environment variables.
- *
- * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
- */
-
-exports.inspectOpts = Object.keys(process.env).filter(function (key) {
- return /^debug_/i.test(key);
-}).reduce(function (obj, key) {
- // camel-case
- var prop = key
- .substring(6)
- .toLowerCase()
- .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });
-
- // coerce string value into JS value
- var val = process.env[key];
- if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
- else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
- else if (val === 'null') val = null;
- else val = Number(val);
-
- obj[prop] = val;
- return obj;
-}, {});
-
-/**
- * The file descriptor to write the `debug()` calls to.
- * Set the `DEBUG_FD` env variable to override with another value. i.e.:
- *
- * $ DEBUG_FD=3 node script.js 3>debug.log
- */
-
-var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
-
-if (1 !== fd && 2 !== fd) {
- util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')();
-}
-
-var stream = 1 === fd ? process.stdout :
- 2 === fd ? process.stderr :
- createWritableStdioStream(fd);
-
-/**
- * Is stdout a TTY? Colored output is enabled when `true`.
- */
-
-function useColors() {
- return 'colors' in exports.inspectOpts
- ? Boolean(exports.inspectOpts.colors)
- : tty.isatty(fd);
-}
-
-/**
- * Map %o to `util.inspect()`, all on a single line.
- */
-
-exports.formatters.o = function(v) {
- this.inspectOpts.colors = this.useColors;
- return util.inspect(v, this.inspectOpts)
- .split('\n').map(function(str) {
- return str.trim()
- }).join(' ');
-};
-
-/**
- * Map %o to `util.inspect()`, allowing multiple lines if needed.
- */
-
-exports.formatters.O = function(v) {
- this.inspectOpts.colors = this.useColors;
- return util.inspect(v, this.inspectOpts);
-};
-
-/**
- * Adds ANSI color escape codes if enabled.
- *
- * @api public
- */
-
-function formatArgs(args) {
- var name = this.namespace;
- var useColors = this.useColors;
-
- if (useColors) {
- var c = this.color;
- var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m';
-
- args[0] = prefix + args[0].split('\n').join('\n' + prefix);
- args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
- } else {
- args[0] = new Date().toUTCString()
- + ' ' + name + ' ' + args[0];
- }
-}
-
-/**
- * Invokes `util.format()` with the specified arguments and writes to `stream`.
- */
-
-function log() {
- return stream.write(util.format.apply(util, arguments) + '\n');
-}
-
-/**
- * Save `namespaces`.
- *
- * @param {String} namespaces
- * @api private
- */
-
-function save(namespaces) {
- if (null == namespaces) {
- // If you set a process.env field to null or undefined, it gets cast to the
- // string 'null' or 'undefined'. Just delete instead.
- delete process.env.DEBUG;
- } else {
- process.env.DEBUG = namespaces;
- }
-}
-
-/**
- * Load `namespaces`.
- *
- * @return {String} returns the previously persisted debug modes
- * @api private
- */
-
-function load() {
- return process.env.DEBUG;
-}
-
-/**
- * Copied from `node/src/node.js`.
- *
- * XXX: It's lame that node doesn't expose this API out-of-the-box. It also
- * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
- */
-
-function createWritableStdioStream (fd) {
- var stream;
- var tty_wrap = process.binding('tty_wrap');
-
- // Note stream._type is used for test-module-load-list.js
-
- switch (tty_wrap.guessHandleType(fd)) {
- case 'TTY':
- stream = new tty.WriteStream(fd);
- stream._type = 'tty';
-
- // Hack to have stream not keep the event loop alive.
- // See https://github.com/joyent/node/issues/1726
- if (stream._handle && stream._handle.unref) {
- stream._handle.unref();
- }
- break;
-
- case 'FILE':
- var fs = fs__default;
- stream = new fs.SyncWriteStream(fd, { autoClose: false });
- stream._type = 'fs';
- break;
-
- case 'PIPE':
- case 'TCP':
- var net = require$$3__default;
- stream = new net.Socket({
- fd: fd,
- readable: false,
- writable: true
- });
-
- // FIXME Should probably have an option in net.Socket to create a
- // stream from an existing fd which is writable only. But for now
- // we'll just add this hack and set the `readable` member to false.
- // Test: ./node test/fixtures/echo.js < /etc/passwd
- stream.readable = false;
- stream.read = null;
- stream._type = 'pipe';
-
- // FIXME Hack to have stream not keep the event loop alive.
- // See https://github.com/joyent/node/issues/1726
- if (stream._handle && stream._handle.unref) {
- stream._handle.unref();
- }
- break;
-
- default:
- // Probably an error on in uv_guess_handle()
- throw new Error('Implement me. Unknown stream file type!');
- }
-
- // For supporting legacy API we put the FD here.
- stream.fd = fd;
-
- stream._isStdio = true;
-
- return stream;
-}
-
-/**
- * Init logic for `debug` instances.
- *
- * Create a new `inspectOpts` object in case `useColors` is set
- * differently for a particular `debug` instance.
- */
-
-function init (debug) {
- debug.inspectOpts = {};
-
- var keys = Object.keys(exports.inspectOpts);
- for (var i = 0; i < keys.length; i++) {
- debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
- }
-}
-
-/**
- * Enable namespaces listed in `process.env.DEBUG` initially.
- */
-
-exports.enable(load());
-}(node, node.exports));
-
-/**
- * Detect Electron renderer process, which is node, but we should
- * treat as a browser.
- */
-
-if (typeof process !== 'undefined' && process.type === 'renderer') {
- src.exports = browser.exports;
-} else {
- src.exports = node.exports;
-}
-
-/*!
- * encodeurl
- * Copyright(c) 2016 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-var encodeurl = encodeUrl$1;
-
-/**
- * RegExp to match non-URL code points, *after* encoding (i.e. not including "%")
- * and including invalid escape sequences.
- * @private
- */
-
-var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g;
-
-/**
- * RegExp to match unmatched surrogate pair.
- * @private
- */
-
-var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g;
-
-/**
- * String to replace unmatched surrogate pair with.
- * @private
- */
-
-var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2';
-
-/**
- * Encode a URL to a percent-encoded form, excluding already-encoded sequences.
- *
- * This function will take an already-encoded URL and encode all the non-URL
- * code points. This function will not encode the "%" character unless it is
- * not part of a valid sequence (`%20` will be left as-is, but `%foo` will
- * be encoded as `%25foo`).
- *
- * This encode is meant to be "safe" and does not throw errors. It will try as
- * hard as it can to properly encode the given URL, including replacing any raw,
- * unpaired surrogate pairs with the Unicode replacement character prior to
- * encoding.
- *
- * @param {string} url
- * @return {string}
- * @public
- */
-
-function encodeUrl$1 (url) {
- return String(url)
- .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)
- .replace(ENCODE_CHARS_REGEXP, encodeURI)
-}
-
-/*!
- * escape-html
- * Copyright(c) 2012-2013 TJ Holowaychuk
- * Copyright(c) 2015 Andreas Lubbe
- * Copyright(c) 2015 Tiancheng "Timothy" Gu
- * MIT Licensed
- */
-
-/**
- * Module variables.
- * @private
- */
-
-var matchHtmlRegExp = /["'&<>]/;
-
-/**
- * Module exports.
- * @public
- */
-
-var escapeHtml_1 = escapeHtml$1;
-
-/**
- * Escape special characters in the given string of html.
- *
- * @param {string} string The string to escape for inserting into HTML
- * @return {string}
- * @public
- */
-
-function escapeHtml$1(string) {
- var str = '' + string;
- var match = matchHtmlRegExp.exec(str);
-
- if (!match) {
- return str;
- }
-
- var escape;
- var html = '';
- var index = 0;
- var lastIndex = 0;
-
- for (index = match.index; index < str.length; index++) {
- switch (str.charCodeAt(index)) {
- case 34: // "
- escape = '&quot;';
- break;
- case 38: // &
- escape = '&amp;';
- break;
- case 39: // '
- escape = '&#39;';
- break;
- case 60: // <
- escape = '&lt;';
- break;
- case 62: // >
- escape = '&gt;';
- break;
- default:
- continue;
- }
-
- if (lastIndex !== index) {
- html += str.substring(lastIndex, index);
- }
-
- lastIndex = index + 1;
- html += escape;
- }
-
- return lastIndex !== index
- ? html + str.substring(lastIndex, index)
- : html;
-}
-
-var onFinished$2 = {exports: {}};
-
-/*!
- * ee-first
- * Copyright(c) 2014 Jonathan Ong
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-var eeFirst = first$1;
-
-/**
- * Get the first event in a set of event emitters and event pairs.
- *
- * @param {array} stuff
- * @param {function} done
- * @public
- */
-
-function first$1(stuff, done) {
- if (!Array.isArray(stuff))
- throw new TypeError('arg must be an array of [ee, events...] arrays')
-
- var cleanups = [];
-
- for (var i = 0; i < stuff.length; i++) {
- var arr = stuff[i];
-
- if (!Array.isArray(arr) || arr.length < 2)
- throw new TypeError('each array member must be [ee, events...]')
-
- var ee = arr[0];
-
- for (var j = 1; j < arr.length; j++) {
- var event = arr[j];
- var fn = listener(event, callback);
-
- // listen to the event
- ee.on(event, fn);
- // push this listener to the list of cleanups
- cleanups.push({
- ee: ee,
- event: event,
- fn: fn,
- });
- }
- }
-
- function callback() {
- cleanup();
- done.apply(null, arguments);
- }
-
- function cleanup() {
- var x;
- for (var i = 0; i < cleanups.length; i++) {
- x = cleanups[i];
- x.ee.removeListener(x.event, x.fn);
- }
- }
-
- function thunk(fn) {
- done = fn;
- }
-
- thunk.cancel = cleanup;
-
- return thunk
-}
-
-/**
- * Create the event listener.
- * @private
- */
-
-function listener(event, done) {
- return function onevent(arg1) {
- var args = new Array(arguments.length);
- var ee = this;
- var err = event === 'error'
- ? arg1
- : null;
-
- // copy args to prevent arguments escaping scope
- for (var i = 0; i < args.length; i++) {
- args[i] = arguments[i];
- }
-
- done(err, ee, event, args);
- }
-}
-
-/*!
- * on-finished
- * Copyright(c) 2013 Jonathan Ong
- * Copyright(c) 2014 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-onFinished$2.exports = onFinished$1;
-onFinished$2.exports.isFinished = isFinished$1;
-
-/**
- * Module dependencies.
- * @private
- */
-
-var first = eeFirst;
-
-/**
- * Variables.
- * @private
- */
-
-/* istanbul ignore next */
-var defer$2 = typeof setImmediate === 'function'
- ? setImmediate
- : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)); };
-
-/**
- * Invoke callback when the response has finished, useful for
- * cleaning up resources afterwards.
- *
- * @param {object} msg
- * @param {function} listener
- * @return {object}
- * @public
- */
-
-function onFinished$1(msg, listener) {
- if (isFinished$1(msg) !== false) {
- defer$2(listener, null, msg);
- return msg
- }
-
- // attach the listener to the message
- attachListener(msg, listener);
-
- return msg
-}
-
-/**
- * Determine if message is already finished.
- *
- * @param {object} msg
- * @return {boolean}
- * @public
- */
-
-function isFinished$1(msg) {
- var socket = msg.socket;
-
- if (typeof msg.finished === 'boolean') {
- // OutgoingMessage
- return Boolean(msg.finished || (socket && !socket.writable))
- }
-
- if (typeof msg.complete === 'boolean') {
- // IncomingMessage
- return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))
- }
-
- // don't know
- return undefined
-}
-
-/**
- * Attach a finished listener to the message.
- *
- * @param {object} msg
- * @param {function} callback
- * @private
- */
-
-function attachFinishedListener(msg, callback) {
- var eeMsg;
- var eeSocket;
- var finished = false;
-
- function onFinish(error) {
- eeMsg.cancel();
- eeSocket.cancel();
-
- finished = true;
- callback(error);
- }
-
- // finished on first message event
- eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish);
-
- function onSocket(socket) {
- // remove listener
- msg.removeListener('socket', onSocket);
-
- if (finished) return
- if (eeMsg !== eeSocket) return
-
- // finished on first socket event
- eeSocket = first([[socket, 'error', 'close']], onFinish);
- }
-
- if (msg.socket) {
- // socket already assigned
- onSocket(msg.socket);
- return
- }
-
- // wait for socket to be assigned
- msg.on('socket', onSocket);
-
- if (msg.socket === undefined) {
- // node.js 0.8 patch
- patchAssignSocket(msg, onSocket);
- }
-}
-
-/**
- * Attach the listener to the message.
- *
- * @param {object} msg
- * @return {function}
- * @private
- */
-
-function attachListener(msg, listener) {
- var attached = msg.__onFinished;
-
- // create a private single listener with queue
- if (!attached || !attached.queue) {
- attached = msg.__onFinished = createListener(msg);
- attachFinishedListener(msg, attached);
- }
-
- attached.queue.push(listener);
-}
-
-/**
- * Create listener on message.
- *
- * @param {object} msg
- * @return {function}
- * @private
- */
-
-function createListener(msg) {
- function listener(err) {
- if (msg.__onFinished === listener) msg.__onFinished = null;
- if (!listener.queue) return
-
- var queue = listener.queue;
- listener.queue = null;
-
- for (var i = 0; i < queue.length; i++) {
- queue[i](err, msg);
- }
- }
-
- listener.queue = [];
-
- return listener
-}
-
-/**
- * Patch ServerResponse.prototype.assignSocket for node.js 0.8.
- *
- * @param {ServerResponse} res
- * @param {function} callback
- * @private
- */
-
-function patchAssignSocket(res, callback) {
- var assignSocket = res.assignSocket;
-
- if (typeof assignSocket !== 'function') return
-
- // res.on('socket', callback) is broken in 0.8
- res.assignSocket = function _assignSocket(socket) {
- assignSocket.call(this, socket);
- callback(socket);
- };
-}
-
-var parseurl$1 = {exports: {}};
-
-/*!
- * parseurl
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2014-2017 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- * @private
- */
-
-var url$3 = require$$0__default$6;
-var parse$a = url$3.parse;
-var Url = url$3.Url;
-
-/**
- * Module exports.
- * @public
- */
-
-parseurl$1.exports = parseurl;
-parseurl$1.exports.original = originalurl;
-
-/**
- * Parse the `req` url with memoization.
- *
- * @param {ServerRequest} req
- * @return {Object}
- * @public
- */
-
-function parseurl (req) {
- var url = req.url;
-
- if (url === undefined) {
- // URL is undefined
- return undefined
- }
-
- var parsed = req._parsedUrl;
-
- if (fresh(url, parsed)) {
- // Return cached URL parse
- return parsed
- }
-
- // Parse the URL
- parsed = fastparse(url);
- parsed._raw = url;
-
- return (req._parsedUrl = parsed)
-}
-/**
- * Parse the `req` original url with fallback and memoization.
- *
- * @param {ServerRequest} req
- * @return {Object}
- * @public
- */
-
-function originalurl (req) {
- var url = req.originalUrl;
-
- if (typeof url !== 'string') {
- // Fallback
- return parseurl(req)
- }
-
- var parsed = req._parsedOriginalUrl;
-
- if (fresh(url, parsed)) {
- // Return cached URL parse
- return parsed
- }
-
- // Parse the URL
- parsed = fastparse(url);
- parsed._raw = url;
-
- return (req._parsedOriginalUrl = parsed)
-}
-/**
- * Parse the `str` url with fast-path short-cut.
- *
- * @param {string} str
- * @return {Object}
- * @private
- */
-
-function fastparse (str) {
- if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {
- return parse$a(str)
- }
-
- var pathname = str;
- var query = null;
- var search = null;
-
- // This takes the regexp from https://github.com/joyent/node/pull/7878
- // Which is /^(\/[^?#\s]*)(\?[^#\s]*)?$/
- // And unrolls it into a for loop
- for (var i = 1; i < str.length; i++) {
- switch (str.charCodeAt(i)) {
- case 0x3f: /* ? */
- if (search === null) {
- pathname = str.substring(0, i);
- query = str.substring(i + 1);
- search = str.substring(i);
- }
- break
- case 0x09: /* \t */
- case 0x0a: /* \n */
- case 0x0c: /* \f */
- case 0x0d: /* \r */
- case 0x20: /* */
- case 0x23: /* # */
- case 0xa0:
- case 0xfeff:
- return parse$a(str)
- }
- }
-
- var url = Url !== undefined
- ? new Url()
- : {};
-
- url.path = str;
- url.href = str;
- url.pathname = pathname;
-
- if (search !== null) {
- url.query = query;
- url.search = search;
- }
-
- return url
-}
-
-/**
- * Determine if parsed is still fresh for url.
- *
- * @param {string} url
- * @param {object} parsedUrl
- * @return {boolean}
- * @private
- */
-
-function fresh (url, parsedUrl) {
- return typeof parsedUrl === 'object' &&
- parsedUrl !== null &&
- (Url === undefined || parsedUrl instanceof Url) &&
- parsedUrl._raw === url
-}
-
-var require$$0$3 = {
- "100": "Continue",
- "101": "Switching Protocols",
- "102": "Processing",
- "103": "Early Hints",
- "200": "OK",
- "201": "Created",
- "202": "Accepted",
- "203": "Non-Authoritative Information",
- "204": "No Content",
- "205": "Reset Content",
- "206": "Partial Content",
- "207": "Multi-Status",
- "208": "Already Reported",
- "226": "IM Used",
- "300": "Multiple Choices",
- "301": "Moved Permanently",
- "302": "Found",
- "303": "See Other",
- "304": "Not Modified",
- "305": "Use Proxy",
- "306": "(Unused)",
- "307": "Temporary Redirect",
- "308": "Permanent Redirect",
- "400": "Bad Request",
- "401": "Unauthorized",
- "402": "Payment Required",
- "403": "Forbidden",
- "404": "Not Found",
- "405": "Method Not Allowed",
- "406": "Not Acceptable",
- "407": "Proxy Authentication Required",
- "408": "Request Timeout",
- "409": "Conflict",
- "410": "Gone",
- "411": "Length Required",
- "412": "Precondition Failed",
- "413": "Payload Too Large",
- "414": "URI Too Long",
- "415": "Unsupported Media Type",
- "416": "Range Not Satisfiable",
- "417": "Expectation Failed",
- "418": "I'm a teapot",
- "421": "Misdirected Request",
- "422": "Unprocessable Entity",
- "423": "Locked",
- "424": "Failed Dependency",
- "425": "Unordered Collection",
- "426": "Upgrade Required",
- "428": "Precondition Required",
- "429": "Too Many Requests",
- "431": "Request Header Fields Too Large",
- "451": "Unavailable For Legal Reasons",
- "500": "Internal Server Error",
- "501": "Not Implemented",
- "502": "Bad Gateway",
- "503": "Service Unavailable",
- "504": "Gateway Timeout",
- "505": "HTTP Version Not Supported",
- "506": "Variant Also Negotiates",
- "507": "Insufficient Storage",
- "508": "Loop Detected",
- "509": "Bandwidth Limit Exceeded",
- "510": "Not Extended",
- "511": "Network Authentication Required"
-};
-
-/*!
- * statuses
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2016 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- * @private
- */
-
-var codes = require$$0$3;
-
-/**
- * Module exports.
- * @public
- */
-
-var statuses$1 = status;
-
-// status code to message map
-status.STATUS_CODES = codes;
-
-// array of status codes
-status.codes = populateStatusesMap(status, codes);
-
-// status codes for redirects
-status.redirect = {
- 300: true,
- 301: true,
- 302: true,
- 303: true,
- 305: true,
- 307: true,
- 308: true
-};
-
-// status codes for empty bodies
-status.empty = {
- 204: true,
- 205: true,
- 304: true
-};
-
-// status codes for when you should retry the request
-status.retry = {
- 502: true,
- 503: true,
- 504: true
-};
-
-/**
- * Populate the statuses map for given codes.
- * @private
- */
-
-function populateStatusesMap (statuses, codes) {
- var arr = [];
-
- Object.keys(codes).forEach(function forEachCode (code) {
- var message = codes[code];
- var status = Number(code);
-
- // Populate properties
- statuses[status] = message;
- statuses[message] = status;
- statuses[message.toLowerCase()] = status;
-
- // Add to array
- arr.push(status);
- });
-
- return arr
-}
-
-/**
- * Get the status code.
- *
- * Given a number, this will throw if it is not a known status
- * code, otherwise the code will be returned. Given a string,
- * the string will be parsed for a number and return the code
- * if valid, otherwise will lookup the code assuming this is
- * the status message.
- *
- * @param {string|number} code
- * @returns {number}
- * @public
- */
-
-function status (code) {
- if (typeof code === 'number') {
- if (!status[code]) throw new Error('invalid status code: ' + code)
- return code
- }
-
- if (typeof code !== 'string') {
- throw new TypeError('code must be a number or string')
- }
-
- // '403'
- var n = parseInt(code, 10);
- if (!isNaN(n)) {
- if (!status[n]) throw new Error('invalid status code: ' + n)
- return n
- }
-
- n = status[code.toLowerCase()];
- if (!n) throw new Error('invalid status message: "' + code + '"')
- return n
-}
-
-/*!
- * unpipe
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-var unpipe_1 = unpipe$1;
-
-/**
- * Determine if there are Node.js pipe-like data listeners.
- * @private
- */
-
-function hasPipeDataListeners(stream) {
- var listeners = stream.listeners('data');
-
- for (var i = 0; i < listeners.length; i++) {
- if (listeners[i].name === 'ondata') {
- return true
- }
- }
-
- return false
-}
-
-/**
- * Unpipe a stream from all destinations.
- *
- * @param {object} stream
- * @public
- */
-
-function unpipe$1(stream) {
- if (!stream) {
- throw new TypeError('argument stream is required')
- }
-
- if (typeof stream.unpipe === 'function') {
- // new-style
- stream.unpipe();
- return
- }
-
- // Node.js 0.8 hack
- if (!hasPipeDataListeners(stream)) {
- return
- }
-
- var listener;
- var listeners = stream.listeners('close');
-
- for (var i = 0; i < listeners.length; i++) {
- listener = listeners[i];
-
- if (listener.name !== 'cleanup' && listener.name !== 'onclose') {
- continue
- }
-
- // invoke the listener
- listener.call(stream);
- }
-}
-
-/*!
- * finalhandler
- * Copyright(c) 2014-2017 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- * @private
- */
-
-var debug$9 = src.exports('finalhandler');
-var encodeUrl = encodeurl;
-var escapeHtml = escapeHtml_1;
-var onFinished = onFinished$2.exports;
-var parseUrl$1 = parseurl$1.exports;
-var statuses = statuses$1;
-var unpipe = unpipe_1;
-
-/**
- * Module variables.
- * @private
- */
-
-var DOUBLE_SPACE_REGEXP = /\x20{2}/g;
-var NEWLINE_REGEXP = /\n/g;
-
-/* istanbul ignore next */
-var defer$1 = typeof setImmediate === 'function'
- ? setImmediate
- : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)); };
-var isFinished = onFinished.isFinished;
-
-/**
- * Create a minimal HTML document.
- *
- * @param {string} message
- * @private
- */
-
-function createHtmlDocument (message) {
- var body = escapeHtml(message)
- .replace(NEWLINE_REGEXP, '<br>')
- .replace(DOUBLE_SPACE_REGEXP, ' &nbsp;');
-
- return '<!DOCTYPE html>\n' +
- '<html lang="en">\n' +
- '<head>\n' +
- '<meta charset="utf-8">\n' +
- '<title>Error</title>\n' +
- '</head>\n' +
- '<body>\n' +
- '<pre>' + body + '</pre>\n' +
- '</body>\n' +
- '</html>\n'
-}
-
-/**
- * Module exports.
- * @public
- */
-
-var finalhandler_1 = finalhandler$1;
-
-/**
- * Create a function to handle the final response.
- *
- * @param {Request} req
- * @param {Response} res
- * @param {Object} [options]
- * @return {Function}
- * @public
- */
-
-function finalhandler$1 (req, res, options) {
- var opts = options || {};
-
- // get environment
- var env = opts.env || process.env.NODE_ENV || 'development';
-
- // get error callback
- var onerror = opts.onerror;
-
- return function (err) {
- var headers;
- var msg;
- var status;
-
- // ignore 404 on in-flight response
- if (!err && headersSent(res)) {
- debug$9('cannot 404 after headers sent');
- return
- }
-
- // unhandled error
- if (err) {
- // respect status code from error
- status = getErrorStatusCode(err);
-
- if (status === undefined) {
- // fallback to status code on response
- status = getResponseStatusCode(res);
- } else {
- // respect headers from error
- headers = getErrorHeaders(err);
- }
-
- // get error message
- msg = getErrorMessage(err, status, env);
- } else {
- // not found
- status = 404;
- msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req));
- }
-
- debug$9('default %s', status);
-
- // schedule onerror callback
- if (err && onerror) {
- defer$1(onerror, err, req, res);
- }
-
- // cannot actually respond
- if (headersSent(res)) {
- debug$9('cannot %d after headers sent', status);
- req.socket.destroy();
- return
- }
-
- // send response
- send$2(req, res, status, headers, msg);
- }
-}
-
-/**
- * Get headers from Error object.
- *
- * @param {Error} err
- * @return {object}
- * @private
- */
-
-function getErrorHeaders (err) {
- if (!err.headers || typeof err.headers !== 'object') {
- return undefined
- }
-
- var headers = Object.create(null);
- var keys = Object.keys(err.headers);
-
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- headers[key] = err.headers[key];
- }
-
- return headers
-}
-
-/**
- * Get message from Error object, fallback to status message.
- *
- * @param {Error} err
- * @param {number} status
- * @param {string} env
- * @return {string}
- * @private
- */
-
-function getErrorMessage (err, status, env) {
- var msg;
-
- if (env !== 'production') {
- // use err.stack, which typically includes err.message
- msg = err.stack;
-
- // fallback to err.toString() when possible
- if (!msg && typeof err.toString === 'function') {
- msg = err.toString();
- }
- }
-
- return msg || statuses[status]
-}
-
-/**
- * Get status code from Error object.
- *
- * @param {Error} err
- * @return {number}
- * @private
- */
-
-function getErrorStatusCode (err) {
- // check err.status
- if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {
- return err.status
- }
-
- // check err.statusCode
- if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {
- return err.statusCode
- }
-
- return undefined
-}
-
-/**
- * Get resource name for the request.
- *
- * This is typically just the original pathname of the request
- * but will fallback to "resource" is that cannot be determined.
- *
- * @param {IncomingMessage} req
- * @return {string}
- * @private
- */
-
-function getResourceName (req) {
- try {
- return parseUrl$1.original(req).pathname
- } catch (e) {
- return 'resource'
- }
-}
-
-/**
- * Get status code from response.
- *
- * @param {OutgoingMessage} res
- * @return {number}
- * @private
- */
-
-function getResponseStatusCode (res) {
- var status = res.statusCode;
-
- // default status code to 500 if outside valid range
- if (typeof status !== 'number' || status < 400 || status > 599) {
- status = 500;
- }
-
- return status
-}
-
-/**
- * Determine if the response headers have been sent.
- *
- * @param {object} res
- * @returns {boolean}
- * @private
- */
-
-function headersSent (res) {
- return typeof res.headersSent !== 'boolean'
- ? Boolean(res._header)
- : res.headersSent
-}
-
-/**
- * Send response.
- *
- * @param {IncomingMessage} req
- * @param {OutgoingMessage} res
- * @param {number} status
- * @param {object} headers
- * @param {string} message
- * @private
- */
-
-function send$2 (req, res, status, headers, message) {
- function write () {
- // response body
- var body = createHtmlDocument(message);
-
- // response status
- res.statusCode = status;
- res.statusMessage = statuses[status];
-
- // response headers
- setHeaders(res, headers);
-
- // security headers
- res.setHeader('Content-Security-Policy', "default-src 'none'");
- res.setHeader('X-Content-Type-Options', 'nosniff');
-
- // standard headers
- res.setHeader('Content-Type', 'text/html; charset=utf-8');
- res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'));
-
- if (req.method === 'HEAD') {
- res.end();
- return
- }
-
- res.end(body, 'utf8');
- }
-
- if (isFinished(req)) {
- write();
- return
- }
-
- // unpipe everything from the request
- unpipe(req);
-
- // flush the request
- onFinished(req, write);
- req.resume();
-}
-
-/**
- * Set response headers from an object.
- *
- * @param {OutgoingMessage} res
- * @param {object} headers
- * @private
- */
-
-function setHeaders (res, headers) {
- if (!headers) {
- return
- }
-
- var keys = Object.keys(headers);
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- res.setHeader(key, headers[key]);
- }
-}
-
-var utilsMerge = {exports: {}};
-
-/**
- * Merge object b with object a.
- *
- * var a = { foo: 'bar' }
- * , b = { bar: 'baz' };
- *
- * merge(a, b);
- * // => { foo: 'bar', bar: 'baz' }
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object}
- * @api public
- */
-
-(function (module, exports) {
-module.exports = function(a, b){
- if (a && b) {
- for (var key in b) {
- a[key] = b[key];
- }
- }
- return a;
-};
-}(utilsMerge));
-
-/*!
- * connect
- * Copyright(c) 2010 Sencha Inc.
- * Copyright(c) 2011 TJ Holowaychuk
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- * @private
- */
-
-var debug$8 = src.exports('connect:dispatcher');
-var EventEmitter$3 = require$$0__default$5.EventEmitter;
-var finalhandler = finalhandler_1;
-var http$4 = require$$1__default$1;
-var merge = utilsMerge.exports;
-var parseUrl = parseurl$1.exports;
-
-/**
- * Module exports.
- * @public
- */
-
-var connect = createServer$1;
-
-/**
- * Module variables.
- * @private
- */
-
-var env$1 = process.env.NODE_ENV || 'development';
-var proto = {};
-
-/* istanbul ignore next */
-var defer = typeof setImmediate === 'function'
- ? setImmediate
- : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)); };
-
-/**
- * Create a new connect server.
- *
- * @return {function}
- * @public
- */
-
-function createServer$1() {
- function app(req, res, next){ app.handle(req, res, next); }
- merge(app, proto);
- merge(app, EventEmitter$3.prototype);
- app.route = '/';
- app.stack = [];
- return app;
-}
-
-/**
- * Utilize the given middleware `handle` to the given `route`,
- * defaulting to _/_. This "route" is the mount-point for the
- * middleware, when given a value other than _/_ the middleware
- * is only effective when that segment is present in the request's
- * pathname.
- *
- * For example if we were to mount a function at _/admin_, it would
- * be invoked on _/admin_, and _/admin/settings_, however it would
- * not be invoked for _/_, or _/posts_.
- *
- * @param {String|Function|Server} route, callback or server
- * @param {Function|Server} callback or server
- * @return {Server} for chaining
- * @public
- */
-
-proto.use = function use(route, fn) {
- var handle = fn;
- var path = route;
-
- // default route to '/'
- if (typeof route !== 'string') {
- handle = route;
- path = '/';
- }
-
- // wrap sub-apps
- if (typeof handle.handle === 'function') {
- var server = handle;
- server.route = path;
- handle = function (req, res, next) {
- server.handle(req, res, next);
- };
- }
-
- // wrap vanilla http.Servers
- if (handle instanceof http$4.Server) {
- handle = handle.listeners('request')[0];
- }
-
- // strip trailing slash
- if (path[path.length - 1] === '/') {
- path = path.slice(0, -1);
- }
-
- // add the middleware
- debug$8('use %s %s', path || '/', handle.name || 'anonymous');
- this.stack.push({ route: path, handle: handle });
-
- return this;
-};
-
-/**
- * Handle server requests, punting them down
- * the middleware stack.
- *
- * @private
- */
-
-proto.handle = function handle(req, res, out) {
- var index = 0;
- var protohost = getProtohost(req.url) || '';
- var removed = '';
- var slashAdded = false;
- var stack = this.stack;
-
- // final function handler
- var done = out || finalhandler(req, res, {
- env: env$1,
- onerror: logerror
- });
-
- // store the original URL
- req.originalUrl = req.originalUrl || req.url;
-
- function next(err) {
- if (slashAdded) {
- req.url = req.url.substr(1);
- slashAdded = false;
- }
-
- if (removed.length !== 0) {
- req.url = protohost + removed + req.url.substr(protohost.length);
- removed = '';
- }
-
- // next callback
- var layer = stack[index++];
-
- // all done
- if (!layer) {
- defer(done, err);
- return;
- }
-
- // route data
- var path = parseUrl(req).pathname || '/';
- var route = layer.route;
-
- // skip this layer if the route doesn't match
- if (path.toLowerCase().substr(0, route.length) !== route.toLowerCase()) {
- return next(err);
- }
-
- // skip if route match does not border "/", ".", or end
- var c = path.length > route.length && path[route.length];
- if (c && c !== '/' && c !== '.') {
- return next(err);
- }
-
- // trim off the part of the url that matches the route
- if (route.length !== 0 && route !== '/') {
- removed = route;
- req.url = protohost + req.url.substr(protohost.length + removed.length);
-
- // ensure leading slash
- if (!protohost && req.url[0] !== '/') {
- req.url = '/' + req.url;
- slashAdded = true;
- }
- }
-
- // call the layer handle
- call(layer.handle, route, err, req, res, next);
- }
-
- next();
-};
-
-/**
- * Listen for connections.
- *
- * This method takes the same arguments
- * as node's `http.Server#listen()`.
- *
- * HTTP and HTTPS:
- *
- * If you run your application both as HTTP
- * and HTTPS you may wrap them individually,
- * since your Connect "server" is really just
- * a JavaScript `Function`.
- *
- * var connect = require('connect')
- * , http = require('http')
- * , https = require('https');
- *
- * var app = connect();
- *
- * http.createServer(app).listen(80);
- * https.createServer(options, app).listen(443);
- *
- * @return {http.Server}
- * @api public
- */
-
-proto.listen = function listen() {
- var server = http$4.createServer(this);
- return server.listen.apply(server, arguments);
-};
-
-/**
- * Invoke a route handle.
- * @private
- */
-
-function call(handle, route, err, req, res, next) {
- var arity = handle.length;
- var error = err;
- var hasError = Boolean(err);
-
- debug$8('%s %s : %s', handle.name || '<anonymous>', route, req.originalUrl);
-
- try {
- if (hasError && arity === 4) {
- // error-handling middleware
- handle(err, req, res, next);
- return;
- } else if (!hasError && arity < 4) {
- // request-handling middleware
- handle(req, res, next);
- return;
- }
- } catch (e) {
- // replace the error
- error = e;
- }
-
- // continue
- next(error);
-}
-
-/**
- * Log error using console.error.
- *
- * @param {Error} err
- * @private
- */
-
-function logerror(err) {
- if (env$1 !== 'test') console.error(err.stack || err.toString());
-}
-
-/**
- * Get get protocol + host for a URL.
- *
- * @param {string} url
- * @private
- */
-
-function getProtohost(url) {
- if (url.length === 0 || url[0] === '/') {
- return undefined;
- }
-
- var fqdnIndex = url.indexOf('://');
-
- return fqdnIndex !== -1 && url.lastIndexOf('?', fqdnIndex) === -1
- ? url.substr(0, url.indexOf('/', 3 + fqdnIndex))
- : undefined;
-}
-
-var lib$1 = {exports: {}};
-
-/*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/
-/* eslint-disable no-unused-vars */
-var getOwnPropertySymbols = Object.getOwnPropertySymbols;
-var hasOwnProperty = Object.prototype.hasOwnProperty;
-var propIsEnumerable = Object.prototype.propertyIsEnumerable;
-
-function toObject(val) {
- if (val === null || val === undefined) {
- throw new TypeError('Object.assign cannot be called with null or undefined');
- }
-
- return Object(val);
-}
-
-function shouldUseNative() {
- try {
- if (!Object.assign) {
- return false;
- }
-
- // Detect buggy property enumeration order in older V8 versions.
-
- // https://bugs.chromium.org/p/v8/issues/detail?id=4118
- var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
- test1[5] = 'de';
- if (Object.getOwnPropertyNames(test1)[0] === '5') {
- return false;
- }
-
- // https://bugs.chromium.org/p/v8/issues/detail?id=3056
- var test2 = {};
- for (var i = 0; i < 10; i++) {
- test2['_' + String.fromCharCode(i)] = i;
- }
- var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
- return test2[n];
- });
- if (order2.join('') !== '0123456789') {
- return false;
- }
-
- // https://bugs.chromium.org/p/v8/issues/detail?id=3056
- var test3 = {};
- 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
- test3[letter] = letter;
- });
- if (Object.keys(Object.assign({}, test3)).join('') !==
- 'abcdefghijklmnopqrst') {
- return false;
- }
-
- return true;
- } catch (err) {
- // We don't expect any of the above to throw, but better to be safe.
- return false;
- }
-}
-
-var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
- var from;
- var to = toObject(target);
- var symbols;
-
- for (var s = 1; s < arguments.length; s++) {
- from = Object(arguments[s]);
-
- for (var key in from) {
- if (hasOwnProperty.call(from, key)) {
- to[key] = from[key];
- }
- }
-
- if (getOwnPropertySymbols) {
- symbols = getOwnPropertySymbols(from);
- for (var i = 0; i < symbols.length; i++) {
- if (propIsEnumerable.call(from, symbols[i])) {
- to[symbols[i]] = from[symbols[i]];
- }
- }
- }
- }
-
- return to;
-};
-
-var vary$2 = {exports: {}};
-
-/*!
- * vary
- * Copyright(c) 2014-2017 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- */
-
-vary$2.exports = vary$1;
-vary$2.exports.append = append;
-
-/**
- * RegExp to match field-name in RFC 7230 sec 3.2
- *
- * field-name = token
- * token = 1*tchar
- * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
- * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
- * / DIGIT / ALPHA
- * ; any VCHAR, except delimiters
- */
-
-var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
-
-/**
- * Append a field to a vary header.
- *
- * @param {String} header
- * @param {String|Array} field
- * @return {String}
- * @public
- */
-
-function append (header, field) {
- if (typeof header !== 'string') {
- throw new TypeError('header argument is required')
- }
-
- if (!field) {
- throw new TypeError('field argument is required')
- }
-
- // get fields array
- var fields = !Array.isArray(field)
- ? parse$9(String(field))
- : field;
-
- // assert on invalid field names
- for (var j = 0; j < fields.length; j++) {
- if (!FIELD_NAME_REGEXP.test(fields[j])) {
- throw new TypeError('field argument contains an invalid header name')
- }
- }
-
- // existing, unspecified vary
- if (header === '*') {
- return header
- }
-
- // enumerate current values
- var val = header;
- var vals = parse$9(header.toLowerCase());
-
- // unspecified vary
- if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {
- return '*'
- }
-
- for (var i = 0; i < fields.length; i++) {
- var fld = fields[i].toLowerCase();
-
- // append value (case-preserving)
- if (vals.indexOf(fld) === -1) {
- vals.push(fld);
- val = val
- ? val + ', ' + fields[i]
- : fields[i];
- }
- }
-
- return val
-}
-
-/**
- * Parse a vary header into an array.
- *
- * @param {String} header
- * @return {Array}
- * @private
- */
-
-function parse$9 (header) {
- var end = 0;
- var list = [];
- var start = 0;
-
- // gather tokens
- for (var i = 0, len = header.length; i < len; i++) {
- switch (header.charCodeAt(i)) {
- case 0x20: /* */
- if (start === end) {
- start = end = i + 1;
- }
- break
- case 0x2c: /* , */
- list.push(header.substring(start, end));
- start = end = i + 1;
- break
- default:
- end = i + 1;
- break
- }
- }
-
- // final token
- list.push(header.substring(start, end));
-
- return list
-}
-
-/**
- * Mark that a request is varied on a header field.
- *
- * @param {Object} res
- * @param {String|Array} field
- * @public
- */
-
-function vary$1 (res, field) {
- if (!res || !res.getHeader || !res.setHeader) {
- // quack quack
- throw new TypeError('res argument is required')
- }
-
- // get existing header
- var val = res.getHeader('Vary') || '';
- var header = Array.isArray(val)
- ? val.join(', ')
- : String(val);
-
- // set new header
- if ((val = append(header, field))) {
- res.setHeader('Vary', val);
- }
-}
-
-(function () {
-
- var assign = objectAssign;
- var vary = vary$2.exports;
-
- var defaults = {
- origin: '*',
- methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
- preflightContinue: false,
- optionsSuccessStatus: 204
- };
-
- function isString(s) {
- return typeof s === 'string' || s instanceof String;
- }
-
- function isOriginAllowed(origin, allowedOrigin) {
- if (Array.isArray(allowedOrigin)) {
- for (var i = 0; i < allowedOrigin.length; ++i) {
- if (isOriginAllowed(origin, allowedOrigin[i])) {
- return true;
- }
- }
- return false;
- } else if (isString(allowedOrigin)) {
- return origin === allowedOrigin;
- } else if (allowedOrigin instanceof RegExp) {
- return allowedOrigin.test(origin);
- } else {
- return !!allowedOrigin;
- }
- }
-
- function configureOrigin(options, req) {
- var requestOrigin = req.headers.origin,
- headers = [],
- isAllowed;
-
- if (!options.origin || options.origin === '*') {
- // allow any origin
- headers.push([{
- key: 'Access-Control-Allow-Origin',
- value: '*'
- }]);
- } else if (isString(options.origin)) {
- // fixed origin
- headers.push([{
- key: 'Access-Control-Allow-Origin',
- value: options.origin
- }]);
- headers.push([{
- key: 'Vary',
- value: 'Origin'
- }]);
- } else {
- isAllowed = isOriginAllowed(requestOrigin, options.origin);
- // reflect origin
- headers.push([{
- key: 'Access-Control-Allow-Origin',
- value: isAllowed ? requestOrigin : false
- }]);
- headers.push([{
- key: 'Vary',
- value: 'Origin'
- }]);
- }
-
- return headers;
- }
-
- function configureMethods(options) {
- var methods = options.methods;
- if (methods.join) {
- methods = options.methods.join(','); // .methods is an array, so turn it into a string
- }
- return {
- key: 'Access-Control-Allow-Methods',
- value: methods
- };
- }
-
- function configureCredentials(options) {
- if (options.credentials === true) {
- return {
- key: 'Access-Control-Allow-Credentials',
- value: 'true'
- };
- }
- return null;
- }
-
- function configureAllowedHeaders(options, req) {
- var allowedHeaders = options.allowedHeaders || options.headers;
- var headers = [];
-
- if (!allowedHeaders) {
- allowedHeaders = req.headers['access-control-request-headers']; // .headers wasn't specified, so reflect the request headers
- headers.push([{
- key: 'Vary',
- value: 'Access-Control-Request-Headers'
- }]);
- } else if (allowedHeaders.join) {
- allowedHeaders = allowedHeaders.join(','); // .headers is an array, so turn it into a string
- }
- if (allowedHeaders && allowedHeaders.length) {
- headers.push([{
- key: 'Access-Control-Allow-Headers',
- value: allowedHeaders
- }]);
- }
-
- return headers;
- }
-
- function configureExposedHeaders(options) {
- var headers = options.exposedHeaders;
- if (!headers) {
- return null;
- } else if (headers.join) {
- headers = headers.join(','); // .headers is an array, so turn it into a string
- }
- if (headers && headers.length) {
- return {
- key: 'Access-Control-Expose-Headers',
- value: headers
- };
- }
- return null;
- }
-
- function configureMaxAge(options) {
- var maxAge = (typeof options.maxAge === 'number' || options.maxAge) && options.maxAge.toString();
- if (maxAge && maxAge.length) {
- return {
- key: 'Access-Control-Max-Age',
- value: maxAge
- };
- }
- return null;
- }
-
- function applyHeaders(headers, res) {
- for (var i = 0, n = headers.length; i < n; i++) {
- var header = headers[i];
- if (header) {
- if (Array.isArray(header)) {
- applyHeaders(header, res);
- } else if (header.key === 'Vary' && header.value) {
- vary(res, header.value);
- } else if (header.value) {
- res.setHeader(header.key, header.value);
- }
- }
- }
- }
-
- function cors(options, req, res, next) {
- var headers = [],
- method = req.method && req.method.toUpperCase && req.method.toUpperCase();
-
- if (method === 'OPTIONS') {
- // preflight
- headers.push(configureOrigin(options, req));
- headers.push(configureCredentials(options));
- headers.push(configureMethods(options));
- headers.push(configureAllowedHeaders(options, req));
- headers.push(configureMaxAge(options));
- headers.push(configureExposedHeaders(options));
- applyHeaders(headers, res);
-
- if (options.preflightContinue) {
- next();
- } else {
- // Safari (and potentially other browsers) need content-length 0,
- // for 204 or they just hang waiting for a body
- res.statusCode = options.optionsSuccessStatus;
- res.setHeader('Content-Length', '0');
- res.end();
- }
- } else {
- // actual response
- headers.push(configureOrigin(options, req));
- headers.push(configureCredentials(options));
- headers.push(configureExposedHeaders(options));
- applyHeaders(headers, res);
- next();
- }
- }
-
- function middlewareWrapper(o) {
- // if options are static (either via defaults or custom options passed in), wrap in a function
- var optionsCallback = null;
- if (typeof o === 'function') {
- optionsCallback = o;
- } else {
- optionsCallback = function (req, cb) {
- cb(null, o);
- };
- }
-
- return function corsMiddleware(req, res, next) {
- optionsCallback(req, function (err, options) {
- if (err) {
- next(err);
- } else {
- var corsOptions = assign({}, defaults, options);
- var originCallback = null;
- if (corsOptions.origin && typeof corsOptions.origin === 'function') {
- originCallback = corsOptions.origin;
- } else if (corsOptions.origin) {
- originCallback = function (origin, cb) {
- cb(null, corsOptions.origin);
- };
- }
-
- if (originCallback) {
- originCallback(req.headers.origin, function (err2, origin) {
- if (err2 || !origin) {
- next(err2);
- } else {
- corsOptions.origin = origin;
- cors(corsOptions, req, res, next);
- }
- });
- } else {
- next();
- }
- }
- });
- };
- }
-
- // can pass either an options hash, an options delegate, or nothing
- lib$1.exports = middlewareWrapper;
-
-}());
-
-var corsMiddleware = lib$1.exports;
-
-var chokidar = {};
-
-const fs$b = fs__default;
-const { Readable } = require$$0__default$4;
-const sysPath$3 = path__default;
-const { promisify: promisify$4 } = require$$0__default$2;
-const picomatch$1 = picomatch$3;
-
-const readdir$1 = promisify$4(fs$b.readdir);
-const stat$3 = promisify$4(fs$b.stat);
-const lstat$2 = promisify$4(fs$b.lstat);
-const realpath$1 = promisify$4(fs$b.realpath);
-
-/**
- * @typedef {Object} EntryInfo
- * @property {String} path
- * @property {String} fullPath
- * @property {fs.Stats=} stats
- * @property {fs.Dirent=} dirent
- * @property {String} basename
- */
-
-const BANG$2 = '!';
-const RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';
-const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);
-const FILE_TYPE = 'files';
-const DIR_TYPE = 'directories';
-const FILE_DIR_TYPE = 'files_directories';
-const EVERYTHING_TYPE = 'all';
-const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE];
-
-const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code);
-const [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10));
-const wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5));
-
-const normalizeFilter = filter => {
- if (filter === undefined) return;
- if (typeof filter === 'function') return filter;
-
- if (typeof filter === 'string') {
- const glob = picomatch$1(filter.trim());
- return entry => glob(entry.basename);
- }
-
- if (Array.isArray(filter)) {
- const positive = [];
- const negative = [];
- for (const item of filter) {
- const trimmed = item.trim();
- if (trimmed.charAt(0) === BANG$2) {
- negative.push(picomatch$1(trimmed.slice(1)));
- } else {
- positive.push(picomatch$1(trimmed));
- }
- }
-
- if (negative.length > 0) {
- if (positive.length > 0) {
- return entry =>
- positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename));
- }
- return entry => !negative.some(f => f(entry.basename));
- }
- return entry => positive.some(f => f(entry.basename));
- }
-};
-
-class ReaddirpStream extends Readable {
- static get defaultOptions() {
- return {
- root: '.',
- /* eslint-disable no-unused-vars */
- fileFilter: (path) => true,
- directoryFilter: (path) => true,
- /* eslint-enable no-unused-vars */
- type: FILE_TYPE,
- lstat: false,
- depth: 2147483648,
- alwaysStat: false
- };
- }
-
- constructor(options = {}) {
- super({
- objectMode: true,
- autoDestroy: true,
- highWaterMark: options.highWaterMark || 4096
- });
- const opts = { ...ReaddirpStream.defaultOptions, ...options };
- const { root, type } = opts;
-
- this._fileFilter = normalizeFilter(opts.fileFilter);
- this._directoryFilter = normalizeFilter(opts.directoryFilter);
-
- const statMethod = opts.lstat ? lstat$2 : stat$3;
- // Use bigint stats if it's windows and stat() supports options (node 10+).
- if (wantBigintFsStats) {
- this._stat = path => statMethod(path, { bigint: true });
- } else {
- this._stat = statMethod;
- }
-
- this._maxDepth = opts.depth;
- this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);
- this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);
- this._wantsEverything = type === EVERYTHING_TYPE;
- this._root = sysPath$3.resolve(root);
- this._isDirent = ('Dirent' in fs$b) && !opts.alwaysStat;
- this._statsProp = this._isDirent ? 'dirent' : 'stats';
- this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };
-
- // Launch stream with one parent, the root dir.
- this.parents = [this._exploreDir(root, 1)];
- this.reading = false;
- this.parent = undefined;
- }
-
- async _read(batch) {
- if (this.reading) return;
- this.reading = true;
-
- try {
- while (!this.destroyed && batch > 0) {
- const { path, depth, files = [] } = this.parent || {};
-
- if (files.length > 0) {
- const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path));
- for (const entry of await Promise.all(slice)) {
- if (this.destroyed) return;
-
- const entryType = await this._getEntryType(entry);
- if (entryType === 'directory' && this._directoryFilter(entry)) {
- if (depth <= this._maxDepth) {
- this.parents.push(this._exploreDir(entry.fullPath, depth + 1));
- }
-
- if (this._wantsDir) {
- this.push(entry);
- batch--;
- }
- } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) {
- if (this._wantsFile) {
- this.push(entry);
- batch--;
- }
- }
- }
- } else {
- const parent = this.parents.pop();
- if (!parent) {
- this.push(null);
- break;
- }
- this.parent = await parent;
- if (this.destroyed) return;
- }
- }
- } catch (error) {
- this.destroy(error);
- } finally {
- this.reading = false;
- }
- }
-
- async _exploreDir(path, depth) {
- let files;
- try {
- files = await readdir$1(path, this._rdOptions);
- } catch (error) {
- this._onError(error);
- }
- return { files, depth, path };
- }
-
- async _formatEntry(dirent, path) {
- let entry;
- try {
- const basename = this._isDirent ? dirent.name : dirent;
- const fullPath = sysPath$3.resolve(sysPath$3.join(path, basename));
- entry = { path: sysPath$3.relative(this._root, fullPath), fullPath, basename };
- entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);
- } catch (err) {
- this._onError(err);
- }
- return entry;
- }
-
- _onError(err) {
- if (isNormalFlowError(err) && !this.destroyed) {
- this.emit('warn', err);
- } else {
- this.destroy(err);
- }
- }
-
- async _getEntryType(entry) {
- // entry may be undefined, because a warning or an error were emitted
- // and the statsProp is undefined
- const stats = entry && entry[this._statsProp];
- if (!stats) {
- return;
- }
- if (stats.isFile()) {
- return 'file';
- }
- if (stats.isDirectory()) {
- return 'directory';
- }
- if (stats && stats.isSymbolicLink()) {
- const full = entry.fullPath;
- try {
- const entryRealPath = await realpath$1(full);
- const entryRealPathStats = await lstat$2(entryRealPath);
- if (entryRealPathStats.isFile()) {
- return 'file';
- }
- if (entryRealPathStats.isDirectory()) {
- const len = entryRealPath.length;
- if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath$3.sep) {
- const recursiveError = new Error(
- `Circular symlink detected: "${full}" points to "${entryRealPath}"`
- );
- recursiveError.code = RECURSIVE_ERROR_CODE;
- return this._onError(recursiveError);
- }
- return 'directory';
- }
- } catch (error) {
- this._onError(error);
- }
- }
- }
-
- _includeAsFile(entry) {
- const stats = entry && entry[this._statsProp];
-
- return stats && this._wantsEverything && !stats.isDirectory();
- }
-}
-
-/**
- * @typedef {Object} ReaddirpArguments
- * @property {Function=} fileFilter
- * @property {Function=} directoryFilter
- * @property {String=} type
- * @property {Number=} depth
- * @property {String=} root
- * @property {Boolean=} lstat
- * @property {Boolean=} bigint
- */
-
-/**
- * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.
- * @param {String} root Root directory
- * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth
- */
-const readdirp$1 = (root, options = {}) => {
- let type = options.entryType || options.type;
- if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility
- if (type) options.type = type;
- if (!root) {
- throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');
- } else if (typeof root !== 'string') {
- throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');
- } else if (type && !ALL_TYPES.includes(type)) {
- throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);
- }
-
- options.root = root;
- return new ReaddirpStream(options);
-};
-
-const readdirpPromise = (root, options = {}) => {
- return new Promise((resolve, reject) => {
- const files = [];
- readdirp$1(root, options)
- .on('data', entry => files.push(entry))
- .on('end', () => resolve(files))
- .on('error', error => reject(error));
- });
-};
-
-readdirp$1.promise = readdirpPromise;
-readdirp$1.ReaddirpStream = ReaddirpStream;
-readdirp$1.default = readdirp$1;
-
-var readdirp_1 = readdirp$1;
-
-var anymatch$2 = {exports: {}};
-
-/*!
- * normalize-path <https://github.com/jonschlinkert/normalize-path>
- *
- * Copyright (c) 2014-2018, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-var normalizePath$2 = function(path, stripTrailing) {
- if (typeof path !== 'string') {
- throw new TypeError('expected path to be a string');
- }
-
- if (path === '\\' || path === '/') return '/';
-
- var len = path.length;
- if (len <= 1) return path;
-
- // ensure that win32 namespaces has two leading slashes, so that the path is
- // handled properly by the win32 version of path.parse() after being normalized
- // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces
- var prefix = '';
- if (len > 4 && path[3] === '\\') {
- var ch = path[2];
- if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') {
- path = path.slice(2);
- prefix = '//';
- }
- }
-
- var segs = path.split(/[/\\]+/);
- if (stripTrailing !== false && segs[segs.length - 1] === '') {
- segs.pop();
- }
- return prefix + segs.join('/');
-};
-
-Object.defineProperty(anymatch$2.exports, "__esModule", { value: true });
-
-const picomatch = picomatch$3;
-const normalizePath$1 = normalizePath$2;
-
-/**
- * @typedef {(testString: string) => boolean} AnymatchFn
- * @typedef {string|RegExp|AnymatchFn} AnymatchPattern
- * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher
- */
-const BANG$1 = '!';
-const DEFAULT_OPTIONS = {returnIndex: false};
-const arrify$1 = (item) => Array.isArray(item) ? item : [item];
-
-/**
- * @param {AnymatchPattern} matcher
- * @param {object} options
- * @returns {AnymatchFn}
- */
-const createPattern = (matcher, options) => {
- if (typeof matcher === 'function') {
- return matcher;
- }
- if (typeof matcher === 'string') {
- const glob = picomatch(matcher, options);
- return (string) => matcher === string || glob(string);
- }
- if (matcher instanceof RegExp) {
- return (string) => matcher.test(string);
- }
- return (string) => false;
-};
-
-/**
- * @param {Array<Function>} patterns
- * @param {Array<Function>} negPatterns
- * @param {String|Array} args
- * @param {Boolean} returnIndex
- * @returns {boolean|number}
- */
-const matchPatterns = (patterns, negPatterns, args, returnIndex) => {
- const isList = Array.isArray(args);
- const _path = isList ? args[0] : args;
- if (!isList && typeof _path !== 'string') {
- throw new TypeError('anymatch: second argument must be a string: got ' +
- Object.prototype.toString.call(_path))
- }
- const path = normalizePath$1(_path);
-
- for (let index = 0; index < negPatterns.length; index++) {
- const nglob = negPatterns[index];
- if (nglob(path)) {
- return returnIndex ? -1 : false;
- }
- }
-
- const applied = isList && [path].concat(args.slice(1));
- for (let index = 0; index < patterns.length; index++) {
- const pattern = patterns[index];
- if (isList ? pattern(...applied) : pattern(path)) {
- return returnIndex ? index : true;
- }
- }
-
- return returnIndex ? -1 : false;
-};
-
-/**
- * @param {AnymatchMatcher} matchers
- * @param {Array|string} testString
- * @param {object} options
- * @returns {boolean|number|Function}
- */
-const anymatch$1 = (matchers, testString, options = DEFAULT_OPTIONS) => {
- if (matchers == null) {
- throw new TypeError('anymatch: specify first argument');
- }
- const opts = typeof options === 'boolean' ? {returnIndex: options} : options;
- const returnIndex = opts.returnIndex || false;
-
- // Early cache for matchers.
- const mtchers = arrify$1(matchers);
- const negatedGlobs = mtchers
- .filter(item => typeof item === 'string' && item.charAt(0) === BANG$1)
- .map(item => item.slice(1))
- .map(item => picomatch(item, opts));
- const patterns = mtchers
- .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG$1))
- .map(matcher => createPattern(matcher, opts));
-
- if (testString == null) {
- return (testString, ri = false) => {
- const returnIndex = typeof ri === 'boolean' ? ri : false;
- return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
- }
- }
-
- return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
-};
-
-anymatch$1.default = anymatch$1;
-anymatch$2.exports = anymatch$1;
-
-var require$$0$2 = [
- "3dm",
- "3ds",
- "3g2",
- "3gp",
- "7z",
- "a",
- "aac",
- "adp",
- "ai",
- "aif",
- "aiff",
- "alz",
- "ape",
- "apk",
- "appimage",
- "ar",
- "arj",
- "asf",
- "au",
- "avi",
- "bak",
- "baml",
- "bh",
- "bin",
- "bk",
- "bmp",
- "btif",
- "bz2",
- "bzip2",
- "cab",
- "caf",
- "cgm",
- "class",
- "cmx",
- "cpio",
- "cr2",
- "cur",
- "dat",
- "dcm",
- "deb",
- "dex",
- "djvu",
- "dll",
- "dmg",
- "dng",
- "doc",
- "docm",
- "docx",
- "dot",
- "dotm",
- "dra",
- "DS_Store",
- "dsk",
- "dts",
- "dtshd",
- "dvb",
- "dwg",
- "dxf",
- "ecelp4800",
- "ecelp7470",
- "ecelp9600",
- "egg",
- "eol",
- "eot",
- "epub",
- "exe",
- "f4v",
- "fbs",
- "fh",
- "fla",
- "flac",
- "flatpak",
- "fli",
- "flv",
- "fpx",
- "fst",
- "fvt",
- "g3",
- "gh",
- "gif",
- "graffle",
- "gz",
- "gzip",
- "h261",
- "h263",
- "h264",
- "icns",
- "ico",
- "ief",
- "img",
- "ipa",
- "iso",
- "jar",
- "jpeg",
- "jpg",
- "jpgv",
- "jpm",
- "jxr",
- "key",
- "ktx",
- "lha",
- "lib",
- "lvp",
- "lz",
- "lzh",
- "lzma",
- "lzo",
- "m3u",
- "m4a",
- "m4v",
- "mar",
- "mdi",
- "mht",
- "mid",
- "midi",
- "mj2",
- "mka",
- "mkv",
- "mmr",
- "mng",
- "mobi",
- "mov",
- "movie",
- "mp3",
- "mp4",
- "mp4a",
- "mpeg",
- "mpg",
- "mpga",
- "mxu",
- "nef",
- "npx",
- "numbers",
- "nupkg",
- "o",
- "odp",
- "ods",
- "odt",
- "oga",
- "ogg",
- "ogv",
- "otf",
- "ott",
- "pages",
- "pbm",
- "pcx",
- "pdb",
- "pdf",
- "pea",
- "pgm",
- "pic",
- "png",
- "pnm",
- "pot",
- "potm",
- "potx",
- "ppa",
- "ppam",
- "ppm",
- "pps",
- "ppsm",
- "ppsx",
- "ppt",
- "pptm",
- "pptx",
- "psd",
- "pya",
- "pyc",
- "pyo",
- "pyv",
- "qt",
- "rar",
- "ras",
- "raw",
- "resources",
- "rgb",
- "rip",
- "rlc",
- "rmf",
- "rmvb",
- "rpm",
- "rtf",
- "rz",
- "s3m",
- "s7z",
- "scpt",
- "sgi",
- "shar",
- "snap",
- "sil",
- "sketch",
- "slk",
- "smv",
- "snk",
- "so",
- "stl",
- "suo",
- "sub",
- "swf",
- "tar",
- "tbz",
- "tbz2",
- "tga",
- "tgz",
- "thmx",
- "tif",
- "tiff",
- "tlz",
- "ttc",
- "ttf",
- "txz",
- "udf",
- "uvh",
- "uvi",
- "uvm",
- "uvp",
- "uvs",
- "uvu",
- "viv",
- "vob",
- "war",
- "wav",
- "wax",
- "wbmp",
- "wdp",
- "weba",
- "webm",
- "webp",
- "whl",
- "wim",
- "wm",
- "wma",
- "wmv",
- "wmx",
- "woff",
- "woff2",
- "wrm",
- "wvx",
- "xbm",
- "xif",
- "xla",
- "xlam",
- "xls",
- "xlsb",
- "xlsm",
- "xlsx",
- "xlt",
- "xltm",
- "xltx",
- "xm",
- "xmind",
- "xpi",
- "xpm",
- "xwd",
- "xz",
- "z",
- "zip",
- "zipx"
-];
-
-var binaryExtensions$1 = require$$0$2;
-
-const path$a = path__default;
-const binaryExtensions = binaryExtensions$1;
-
-const extensions = new Set(binaryExtensions);
-
-var isBinaryPath$1 = filePath => extensions.has(path$a.extname(filePath).slice(1).toLowerCase());
-
-var constants$1 = {};
-
-(function (exports) {
-
-const {sep} = path__default;
-const {platform} = process;
-const os = require$$0__default$1;
-
-exports.EV_ALL = 'all';
-exports.EV_READY = 'ready';
-exports.EV_ADD = 'add';
-exports.EV_CHANGE = 'change';
-exports.EV_ADD_DIR = 'addDir';
-exports.EV_UNLINK = 'unlink';
-exports.EV_UNLINK_DIR = 'unlinkDir';
-exports.EV_RAW = 'raw';
-exports.EV_ERROR = 'error';
-
-exports.STR_DATA = 'data';
-exports.STR_END = 'end';
-exports.STR_CLOSE = 'close';
-
-exports.FSEVENT_CREATED = 'created';
-exports.FSEVENT_MODIFIED = 'modified';
-exports.FSEVENT_DELETED = 'deleted';
-exports.FSEVENT_MOVED = 'moved';
-exports.FSEVENT_CLONED = 'cloned';
-exports.FSEVENT_UNKNOWN = 'unknown';
-exports.FSEVENT_TYPE_FILE = 'file';
-exports.FSEVENT_TYPE_DIRECTORY = 'directory';
-exports.FSEVENT_TYPE_SYMLINK = 'symlink';
-
-exports.KEY_LISTENERS = 'listeners';
-exports.KEY_ERR = 'errHandlers';
-exports.KEY_RAW = 'rawEmitters';
-exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];
-
-exports.DOT_SLASH = `.${sep}`;
-
-exports.BACK_SLASH_RE = /\\/g;
-exports.DOUBLE_SLASH_RE = /\/\//;
-exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/;
-exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/;
-exports.REPLACER_RE = /^\.[/\\]/;
-
-exports.SLASH = '/';
-exports.SLASH_SLASH = '//';
-exports.BRACE_START = '{';
-exports.BANG = '!';
-exports.ONE_DOT = '.';
-exports.TWO_DOTS = '..';
-exports.STAR = '*';
-exports.GLOBSTAR = '**';
-exports.ROOT_GLOBSTAR = '/**/*';
-exports.SLASH_GLOBSTAR = '/**';
-exports.DIR_SUFFIX = 'Dir';
-exports.ANYMATCH_OPTS = {dot: true};
-exports.STRING_TYPE = 'string';
-exports.FUNCTION_TYPE = 'function';
-exports.EMPTY_STR = '';
-exports.EMPTY_FN = () => {};
-exports.IDENTITY_FN = val => val;
-
-exports.isWindows = platform === 'win32';
-exports.isMacos = platform === 'darwin';
-exports.isLinux = platform === 'linux';
-exports.isIBMi = os.type() === 'OS400';
-}(constants$1));
-
-const fs$a = fs__default;
-const sysPath$2 = path__default;
-const { promisify: promisify$3 } = require$$0__default$2;
-const isBinaryPath = isBinaryPath$1;
-const {
- isWindows: isWindows$2,
- isLinux,
- EMPTY_FN: EMPTY_FN$2,
- EMPTY_STR: EMPTY_STR$1,
- KEY_LISTENERS,
- KEY_ERR,
- KEY_RAW,
- HANDLER_KEYS,
- EV_CHANGE: EV_CHANGE$2,
- EV_ADD: EV_ADD$2,
- EV_ADD_DIR: EV_ADD_DIR$2,
- EV_ERROR: EV_ERROR$2,
- STR_DATA: STR_DATA$1,
- STR_END: STR_END$2,
- BRACE_START: BRACE_START$1,
- STAR
-} = constants$1;
-
-const THROTTLE_MODE_WATCH = 'watch';
-
-const open$1 = promisify$3(fs$a.open);
-const stat$2 = promisify$3(fs$a.stat);
-const lstat$1 = promisify$3(fs$a.lstat);
-const close = promisify$3(fs$a.close);
-const fsrealpath = promisify$3(fs$a.realpath);
-
-const statMethods$1 = { lstat: lstat$1, stat: stat$2 };
-
-// TODO: emit errors properly. Example: EMFILE on Macos.
-const foreach = (val, fn) => {
- if (val instanceof Set) {
- val.forEach(fn);
- } else {
- fn(val);
- }
-};
-
-const addAndConvert = (main, prop, item) => {
- let container = main[prop];
- if (!(container instanceof Set)) {
- main[prop] = container = new Set([container]);
- }
- container.add(item);
-};
-
-const clearItem = cont => key => {
- const set = cont[key];
- if (set instanceof Set) {
- set.clear();
- } else {
- delete cont[key];
- }
-};
-
-const delFromSet = (main, prop, item) => {
- const container = main[prop];
- if (container instanceof Set) {
- container.delete(item);
- } else if (container === item) {
- delete main[prop];
- }
-};
-
-const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;
-
-/**
- * @typedef {String} Path
- */
-
-// fs_watch helpers
-
-// object to hold per-process fs_watch instances
-// (may be shared across chokidar FSWatcher instances)
-
-/**
- * @typedef {Object} FsWatchContainer
- * @property {Set} listeners
- * @property {Set} errHandlers
- * @property {Set} rawEmitters
- * @property {fs.FSWatcher=} watcher
- * @property {Boolean=} watcherUnusable
- */
-
-/**
- * @type {Map<String,FsWatchContainer>}
- */
-const FsWatchInstances = new Map();
-
-/**
- * Instantiates the fs_watch interface
- * @param {String} path to be watched
- * @param {Object} options to be passed to fs_watch
- * @param {Function} listener main event handler
- * @param {Function} errHandler emits info about errors
- * @param {Function} emitRaw emits raw event data
- * @returns {fs.FSWatcher} new fsevents instance
- */
-function createFsWatchInstance(path, options, listener, errHandler, emitRaw) {
- const handleEvent = (rawEvent, evPath) => {
- listener(path);
- emitRaw(rawEvent, evPath, {watchedPath: path});
-
- // emit based on events occurring for files from a directory's watcher in
- // case the file's watcher misses it (and rely on throttling to de-dupe)
- if (evPath && path !== evPath) {
- fsWatchBroadcast(
- sysPath$2.resolve(path, evPath), KEY_LISTENERS, sysPath$2.join(path, evPath)
- );
- }
- };
- try {
- return fs$a.watch(path, options, handleEvent);
- } catch (error) {
- errHandler(error);
- }
-}
-
-/**
- * Helper for passing fs_watch event data to a collection of listeners
- * @param {Path} fullPath absolute path bound to fs_watch instance
- * @param {String} type listener type
- * @param {*=} val1 arguments to be passed to listeners
- * @param {*=} val2
- * @param {*=} val3
- */
-const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {
- const cont = FsWatchInstances.get(fullPath);
- if (!cont) return;
- foreach(cont[type], (listener) => {
- listener(val1, val2, val3);
- });
-};
-
-/**
- * Instantiates the fs_watch interface or binds listeners
- * to an existing one covering the same file system entry
- * @param {String} path
- * @param {String} fullPath absolute path
- * @param {Object} options to be passed to fs_watch
- * @param {Object} handlers container for event listener functions
- */
-const setFsWatchListener = (path, fullPath, options, handlers) => {
- const {listener, errHandler, rawEmitter} = handlers;
- let cont = FsWatchInstances.get(fullPath);
-
- /** @type {fs.FSWatcher=} */
- let watcher;
- if (!options.persistent) {
- watcher = createFsWatchInstance(
- path, options, listener, errHandler, rawEmitter
- );
- return watcher.close.bind(watcher);
- }
- if (cont) {
- addAndConvert(cont, KEY_LISTENERS, listener);
- addAndConvert(cont, KEY_ERR, errHandler);
- addAndConvert(cont, KEY_RAW, rawEmitter);
- } else {
- watcher = createFsWatchInstance(
- path,
- options,
- fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),
- errHandler, // no need to use broadcast here
- fsWatchBroadcast.bind(null, fullPath, KEY_RAW)
- );
- if (!watcher) return;
- watcher.on(EV_ERROR$2, async (error) => {
- const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);
- cont.watcherUnusable = true; // documented since Node 10.4.1
- // Workaround for https://github.com/joyent/node/issues/4337
- if (isWindows$2 && error.code === 'EPERM') {
- try {
- const fd = await open$1(path, 'r');
- await close(fd);
- broadcastErr(error);
- } catch (err) {}
- } else {
- broadcastErr(error);
- }
- });
- cont = {
- listeners: listener,
- errHandlers: errHandler,
- rawEmitters: rawEmitter,
- watcher
- };
- FsWatchInstances.set(fullPath, cont);
- }
- // const index = cont.listeners.indexOf(listener);
-
- // removes this instance's listeners and closes the underlying fs_watch
- // instance if there are no more listeners left
- return () => {
- delFromSet(cont, KEY_LISTENERS, listener);
- delFromSet(cont, KEY_ERR, errHandler);
- delFromSet(cont, KEY_RAW, rawEmitter);
- if (isEmptySet(cont.listeners)) {
- // Check to protect against issue gh-730.
- // if (cont.watcherUnusable) {
- cont.watcher.close();
- // }
- FsWatchInstances.delete(fullPath);
- HANDLER_KEYS.forEach(clearItem(cont));
- cont.watcher = undefined;
- Object.freeze(cont);
- }
- };
-};
-
-// fs_watchFile helpers
-
-// object to hold per-process fs_watchFile instances
-// (may be shared across chokidar FSWatcher instances)
-const FsWatchFileInstances = new Map();
-
-/**
- * Instantiates the fs_watchFile interface or binds listeners
- * to an existing one covering the same file system entry
- * @param {String} path to be watched
- * @param {String} fullPath absolute path
- * @param {Object} options options to be passed to fs_watchFile
- * @param {Object} handlers container for event listener functions
- * @returns {Function} closer
- */
-const setFsWatchFileListener = (path, fullPath, options, handlers) => {
- const {listener, rawEmitter} = handlers;
- let cont = FsWatchFileInstances.get(fullPath);
-
- const copts = cont && cont.options;
- if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {
- fs$a.unwatchFile(fullPath);
- cont = undefined;
- }
-
- /* eslint-enable no-unused-vars, prefer-destructuring */
-
- if (cont) {
- addAndConvert(cont, KEY_LISTENERS, listener);
- addAndConvert(cont, KEY_RAW, rawEmitter);
- } else {
- // TODO
- // listeners.add(listener);
- // rawEmitters.add(rawEmitter);
- cont = {
- listeners: listener,
- rawEmitters: rawEmitter,
- options,
- watcher: fs$a.watchFile(fullPath, options, (curr, prev) => {
- foreach(cont.rawEmitters, (rawEmitter) => {
- rawEmitter(EV_CHANGE$2, fullPath, {curr, prev});
- });
- const currmtime = curr.mtimeMs;
- if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {
- foreach(cont.listeners, (listener) => listener(path, curr));
- }
- })
- };
- FsWatchFileInstances.set(fullPath, cont);
- }
- // const index = cont.listeners.indexOf(listener);
-
- // Removes this instance's listeners and closes the underlying fs_watchFile
- // instance if there are no more listeners left.
- return () => {
- delFromSet(cont, KEY_LISTENERS, listener);
- delFromSet(cont, KEY_RAW, rawEmitter);
- if (isEmptySet(cont.listeners)) {
- FsWatchFileInstances.delete(fullPath);
- fs$a.unwatchFile(fullPath);
- cont.options = cont.watcher = undefined;
- Object.freeze(cont);
- }
- };
-};
-
-/**
- * @mixin
- */
-class NodeFsHandler$1 {
-
-/**
- * @param {import("../index").FSWatcher} fsW
- */
-constructor(fsW) {
- this.fsw = fsW;
- this._boundHandleError = (error) => fsW._handleError(error);
-}
-
-/**
- * Watch file for changes with fs_watchFile or fs_watch.
- * @param {String} path to file or dir
- * @param {Function} listener on fs change
- * @returns {Function} closer for the watcher instance
- */
-_watchWithNodeFs(path, listener) {
- const opts = this.fsw.options;
- const directory = sysPath$2.dirname(path);
- const basename = sysPath$2.basename(path);
- const parent = this.fsw._getWatchedDir(directory);
- parent.add(basename);
- const absolutePath = sysPath$2.resolve(path);
- const options = {persistent: opts.persistent};
- if (!listener) listener = EMPTY_FN$2;
-
- let closer;
- if (opts.usePolling) {
- options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?
- opts.binaryInterval : opts.interval;
- closer = setFsWatchFileListener(path, absolutePath, options, {
- listener,
- rawEmitter: this.fsw._emitRaw
- });
- } else {
- closer = setFsWatchListener(path, absolutePath, options, {
- listener,
- errHandler: this._boundHandleError,
- rawEmitter: this.fsw._emitRaw
- });
- }
- return closer;
-}
-
-/**
- * Watch a file and emit add event if warranted.
- * @param {Path} file Path
- * @param {fs.Stats} stats result of fs_stat
- * @param {Boolean} initialAdd was the file added at watch instantiation?
- * @returns {Function} closer for the watcher instance
- */
-_handleFile(file, stats, initialAdd) {
- if (this.fsw.closed) {
- return;
- }
- const dirname = sysPath$2.dirname(file);
- const basename = sysPath$2.basename(file);
- const parent = this.fsw._getWatchedDir(dirname);
- // stats is always present
- let prevStats = stats;
-
- // if the file is already being watched, do nothing
- if (parent.has(basename)) return;
-
- const listener = async (path, newStats) => {
- if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;
- if (!newStats || newStats.mtimeMs === 0) {
- try {
- const newStats = await stat$2(file);
- if (this.fsw.closed) return;
- // Check that change event was not fired because of changed only accessTime.
- const at = newStats.atimeMs;
- const mt = newStats.mtimeMs;
- if (!at || at <= mt || mt !== prevStats.mtimeMs) {
- this.fsw._emit(EV_CHANGE$2, file, newStats);
- }
- if (isLinux && prevStats.ino !== newStats.ino) {
- this.fsw._closeFile(path);
- prevStats = newStats;
- this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));
- } else {
- prevStats = newStats;
- }
- } catch (error) {
- // Fix issues where mtime is null but file is still present
- this.fsw._remove(dirname, basename);
- }
- // add is about to be emitted if file not already tracked in parent
- } else if (parent.has(basename)) {
- // Check that change event was not fired because of changed only accessTime.
- const at = newStats.atimeMs;
- const mt = newStats.mtimeMs;
- if (!at || at <= mt || mt !== prevStats.mtimeMs) {
- this.fsw._emit(EV_CHANGE$2, file, newStats);
- }
- prevStats = newStats;
- }
- };
- // kick off the watcher
- const closer = this._watchWithNodeFs(file, listener);
-
- // emit an add event if we're supposed to
- if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {
- if (!this.fsw._throttle(EV_ADD$2, file, 0)) return;
- this.fsw._emit(EV_ADD$2, file, stats);
- }
-
- return closer;
-}
-
-/**
- * Handle symlinks encountered while reading a dir.
- * @param {Object} entry returned by readdirp
- * @param {String} directory path of dir being read
- * @param {String} path of this item
- * @param {String} item basename of this item
- * @returns {Promise<Boolean>} true if no more processing is needed for this entry.
- */
-async _handleSymlink(entry, directory, path, item) {
- if (this.fsw.closed) {
- return;
- }
- const full = entry.fullPath;
- const dir = this.fsw._getWatchedDir(directory);
-
- if (!this.fsw.options.followSymlinks) {
- // watch symlink directly (don't follow) and detect changes
- this.fsw._incrReadyCount();
- const linkPath = await fsrealpath(path);
- if (this.fsw.closed) return;
- if (dir.has(item)) {
- if (this.fsw._symlinkPaths.get(full) !== linkPath) {
- this.fsw._symlinkPaths.set(full, linkPath);
- this.fsw._emit(EV_CHANGE$2, path, entry.stats);
- }
- } else {
- dir.add(item);
- this.fsw._symlinkPaths.set(full, linkPath);
- this.fsw._emit(EV_ADD$2, path, entry.stats);
- }
- this.fsw._emitReady();
- return true;
- }
-
- // don't follow the same symlink more than once
- if (this.fsw._symlinkPaths.has(full)) {
- return true;
- }
-
- this.fsw._symlinkPaths.set(full, true);
-}
-
-_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {
- // Normalize the directory name on Windows
- directory = sysPath$2.join(directory, EMPTY_STR$1);
-
- if (!wh.hasGlob) {
- throttler = this.fsw._throttle('readdir', directory, 1000);
- if (!throttler) return;
- }
-
- const previous = this.fsw._getWatchedDir(wh.path);
- const current = new Set();
-
- let stream = this.fsw._readdirp(directory, {
- fileFilter: entry => wh.filterPath(entry),
- directoryFilter: entry => wh.filterDir(entry),
- depth: 0
- }).on(STR_DATA$1, async (entry) => {
- if (this.fsw.closed) {
- stream = undefined;
- return;
- }
- const item = entry.path;
- let path = sysPath$2.join(directory, item);
- current.add(item);
-
- if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {
- return;
- }
-
- if (this.fsw.closed) {
- stream = undefined;
- return;
- }
- // Files that present in current directory snapshot
- // but absent in previous are added to watch list and
- // emit `add` event.
- if (item === target || !target && !previous.has(item)) {
- this.fsw._incrReadyCount();
-
- // ensure relativeness of path is preserved in case of watcher reuse
- path = sysPath$2.join(dir, sysPath$2.relative(dir, path));
-
- this._addToNodeFs(path, initialAdd, wh, depth + 1);
- }
- }).on(EV_ERROR$2, this._boundHandleError);
-
- return new Promise(resolve =>
- stream.once(STR_END$2, () => {
- if (this.fsw.closed) {
- stream = undefined;
- return;
- }
- const wasThrottled = throttler ? throttler.clear() : false;
-
- resolve();
-
- // Files that absent in current directory snapshot
- // but present in previous emit `remove` event
- // and are removed from @watched[directory].
- previous.getChildren().filter((item) => {
- return item !== directory &&
- !current.has(item) &&
- // in case of intersecting globs;
- // a path may have been filtered out of this readdir, but
- // shouldn't be removed because it matches a different glob
- (!wh.hasGlob || wh.filterPath({
- fullPath: sysPath$2.resolve(directory, item)
- }));
- }).forEach((item) => {
- this.fsw._remove(directory, item);
- });
-
- stream = undefined;
-
- // one more time for any missed in case changes came in extremely quickly
- if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);
- })
- );
-}
-
-/**
- * Read directory to add / remove files from `@watched` list and re-read it on change.
- * @param {String} dir fs path
- * @param {fs.Stats} stats
- * @param {Boolean} initialAdd
- * @param {Number} depth relative to user-supplied path
- * @param {String} target child path targeted for watch
- * @param {Object} wh Common watch helpers for this path
- * @param {String} realpath
- * @returns {Promise<Function>} closer for the watcher instance.
- */
-async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {
- const parentDir = this.fsw._getWatchedDir(sysPath$2.dirname(dir));
- const tracked = parentDir.has(sysPath$2.basename(dir));
- if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {
- if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR$2, dir, stats);
- }
-
- // ensure dir is tracked (harmless if redundant)
- parentDir.add(sysPath$2.basename(dir));
- this.fsw._getWatchedDir(dir);
- let throttler;
- let closer;
-
- const oDepth = this.fsw.options.depth;
- if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {
- if (!target) {
- await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);
- if (this.fsw.closed) return;
- }
-
- closer = this._watchWithNodeFs(dir, (dirPath, stats) => {
- // if current directory is removed, do nothing
- if (stats && stats.mtimeMs === 0) return;
-
- this._handleRead(dirPath, false, wh, target, dir, depth, throttler);
- });
- }
- return closer;
-}
-
-/**
- * Handle added file, directory, or glob pattern.
- * Delegates call to _handleFile / _handleDir after checks.
- * @param {String} path to file or ir
- * @param {Boolean} initialAdd was the file added at watch instantiation?
- * @param {Object} priorWh depth relative to user-supplied path
- * @param {Number} depth Child path actually targeted for watch
- * @param {String=} target Child path actually targeted for watch
- * @returns {Promise}
- */
-async _addToNodeFs(path, initialAdd, priorWh, depth, target) {
- const ready = this.fsw._emitReady;
- if (this.fsw._isIgnored(path) || this.fsw.closed) {
- ready();
- return false;
- }
-
- const wh = this.fsw._getWatchHelpers(path, depth);
- if (!wh.hasGlob && priorWh) {
- wh.hasGlob = priorWh.hasGlob;
- wh.globFilter = priorWh.globFilter;
- wh.filterPath = entry => priorWh.filterPath(entry);
- wh.filterDir = entry => priorWh.filterDir(entry);
- }
-
- // evaluate what is at the path we're being asked to watch
- try {
- const stats = await statMethods$1[wh.statMethod](wh.watchPath);
- if (this.fsw.closed) return;
- if (this.fsw._isIgnored(wh.watchPath, stats)) {
- ready();
- return false;
- }
-
- const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START$1);
- let closer;
- if (stats.isDirectory()) {
- const absPath = sysPath$2.resolve(path);
- const targetPath = follow ? await fsrealpath(path) : path;
- if (this.fsw.closed) return;
- closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);
- if (this.fsw.closed) return;
- // preserve this symlink's target path
- if (absPath !== targetPath && targetPath !== undefined) {
- this.fsw._symlinkPaths.set(absPath, targetPath);
- }
- } else if (stats.isSymbolicLink()) {
- const targetPath = follow ? await fsrealpath(path) : path;
- if (this.fsw.closed) return;
- const parent = sysPath$2.dirname(wh.watchPath);
- this.fsw._getWatchedDir(parent).add(wh.watchPath);
- this.fsw._emit(EV_ADD$2, wh.watchPath, stats);
- closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);
- if (this.fsw.closed) return;
-
- // preserve this symlink's target path
- if (targetPath !== undefined) {
- this.fsw._symlinkPaths.set(sysPath$2.resolve(path), targetPath);
- }
- } else {
- closer = this._handleFile(wh.watchPath, stats, initialAdd);
- }
- ready();
-
- this.fsw._addPathCloser(path, closer);
- return false;
-
- } catch (error) {
- if (this.fsw._handleError(error)) {
- ready();
- return path;
- }
- }
-}
-
-}
-
-var nodefsHandler = NodeFsHandler$1;
-
-var fseventsHandler = {exports: {}};
-
-const fs$9 = fs__default;
-const sysPath$1 = path__default;
-const { promisify: promisify$2 } = require$$0__default$2;
-
-let fsevents;
-try {
- fsevents = eval('require')('fsevents');
-} catch (error) {
- if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);
-}
-
-if (fsevents) {
- // TODO: real check
- const mtch = process.version.match(/v(\d+)\.(\d+)/);
- if (mtch && mtch[1] && mtch[2]) {
- const maj = Number.parseInt(mtch[1], 10);
- const min = Number.parseInt(mtch[2], 10);
- if (maj === 8 && min < 16) {
- fsevents = undefined;
- }
- }
-}
-
-const {
- EV_ADD: EV_ADD$1,
- EV_CHANGE: EV_CHANGE$1,
- EV_ADD_DIR: EV_ADD_DIR$1,
- EV_UNLINK: EV_UNLINK$1,
- EV_ERROR: EV_ERROR$1,
- STR_DATA,
- STR_END: STR_END$1,
- FSEVENT_CREATED,
- FSEVENT_MODIFIED,
- FSEVENT_DELETED,
- FSEVENT_MOVED,
- // FSEVENT_CLONED,
- FSEVENT_UNKNOWN,
- FSEVENT_TYPE_FILE,
- FSEVENT_TYPE_DIRECTORY,
- FSEVENT_TYPE_SYMLINK,
-
- ROOT_GLOBSTAR,
- DIR_SUFFIX,
- DOT_SLASH,
- FUNCTION_TYPE: FUNCTION_TYPE$1,
- EMPTY_FN: EMPTY_FN$1,
- IDENTITY_FN
-} = constants$1;
-
-const Depth = (value) => isNaN(value) ? {} : {depth: value};
-
-const stat$1 = promisify$2(fs$9.stat);
-const lstat = promisify$2(fs$9.lstat);
-const realpath = promisify$2(fs$9.realpath);
-
-const statMethods = { stat: stat$1, lstat };
-
-/**
- * @typedef {String} Path
- */
-
-/**
- * @typedef {Object} FsEventsWatchContainer
- * @property {Set<Function>} listeners
- * @property {Function} rawEmitter
- * @property {{stop: Function}} watcher
- */
-
-// fsevents instance helper functions
-/**
- * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)
- * @type {Map<Path,FsEventsWatchContainer>}
- */
-const FSEventsWatchers = new Map();
-
-// Threshold of duplicate path prefixes at which to start
-// consolidating going forward
-const consolidateThreshhold = 10;
-
-const wrongEventFlags = new Set([
- 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912
-]);
-
-/**
- * Instantiates the fsevents interface
- * @param {Path} path path to be watched
- * @param {Function} callback called when fsevents is bound and ready
- * @returns {{stop: Function}} new fsevents instance
- */
-const createFSEventsInstance = (path, callback) => {
- const stop = fsevents.watch(path, callback);
- return {stop};
-};
-
-/**
- * Instantiates the fsevents interface or binds listeners to an existing one covering
- * the same file tree.
- * @param {Path} path - to be watched
- * @param {Path} realPath - real path for symlinks
- * @param {Function} listener - called when fsevents emits events
- * @param {Function} rawEmitter - passes data to listeners of the 'raw' event
- * @returns {Function} closer
- */
-function setFSEventsListener(path, realPath, listener, rawEmitter) {
- let watchPath = sysPath$1.extname(realPath) ? sysPath$1.dirname(realPath) : realPath;
-
- const parentPath = sysPath$1.dirname(watchPath);
- let cont = FSEventsWatchers.get(watchPath);
-
- // If we've accumulated a substantial number of paths that
- // could have been consolidated by watching one directory
- // above the current one, create a watcher on the parent
- // path instead, so that we do consolidate going forward.
- if (couldConsolidate(parentPath)) {
- watchPath = parentPath;
- }
-
- const resolvedPath = sysPath$1.resolve(path);
- const hasSymlink = resolvedPath !== realPath;
-
- const filteredListener = (fullPath, flags, info) => {
- if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);
- if (
- fullPath === resolvedPath ||
- !fullPath.indexOf(resolvedPath + sysPath$1.sep)
- ) listener(fullPath, flags, info);
- };
-
- // check if there is already a watcher on a parent path
- // modifies `watchPath` to the parent path when it finds a match
- let watchedParent = false;
- for (const watchedPath of FSEventsWatchers.keys()) {
- if (realPath.indexOf(sysPath$1.resolve(watchedPath) + sysPath$1.sep) === 0) {
- watchPath = watchedPath;
- cont = FSEventsWatchers.get(watchPath);
- watchedParent = true;
- break;
- }
- }
-
- if (cont || watchedParent) {
- cont.listeners.add(filteredListener);
- } else {
- cont = {
- listeners: new Set([filteredListener]),
- rawEmitter,
- watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {
- if (!cont.listeners.size) return;
- const info = fsevents.getInfo(fullPath, flags);
- cont.listeners.forEach(list => {
- list(fullPath, flags, info);
- });
-
- cont.rawEmitter(info.event, fullPath, info);
- })
- };
- FSEventsWatchers.set(watchPath, cont);
- }
-
- // removes this instance's listeners and closes the underlying fsevents
- // instance if there are no more listeners left
- return () => {
- const lst = cont.listeners;
-
- lst.delete(filteredListener);
- if (!lst.size) {
- FSEventsWatchers.delete(watchPath);
- if (cont.watcher) return cont.watcher.stop().then(() => {
- cont.rawEmitter = cont.watcher = undefined;
- Object.freeze(cont);
- });
- }
- };
-}
-
-// Decide whether or not we should start a new higher-level
-// parent watcher
-const couldConsolidate = (path) => {
- let count = 0;
- for (const watchPath of FSEventsWatchers.keys()) {
- if (watchPath.indexOf(path) === 0) {
- count++;
- if (count >= consolidateThreshhold) {
- return true;
- }
- }
- }
-
- return false;
-};
-
-// returns boolean indicating whether fsevents can be used
-const canUse = () => fsevents && FSEventsWatchers.size < 128;
-
-// determines subdirectory traversal levels from root to path
-const calcDepth = (path, root) => {
- let i = 0;
- while (!path.indexOf(root) && (path = sysPath$1.dirname(path)) !== root) i++;
- return i;
-};
-
-// returns boolean indicating whether the fsevents' event info has the same type
-// as the one returned by fs.stat
-const sameTypes = (info, stats) => (
- info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||
- info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||
- info.type === FSEVENT_TYPE_FILE && stats.isFile()
-);
-
-/**
- * @mixin
- */
-class FsEventsHandler$1 {
-
-/**
- * @param {import('../index').FSWatcher} fsw
- */
-constructor(fsw) {
- this.fsw = fsw;
-}
-checkIgnored(path, stats) {
- const ipaths = this.fsw._ignoredPaths;
- if (this.fsw._isIgnored(path, stats)) {
- ipaths.add(path);
- if (stats && stats.isDirectory()) {
- ipaths.add(path + ROOT_GLOBSTAR);
- }
- return true;
- }
-
- ipaths.delete(path);
- ipaths.delete(path + ROOT_GLOBSTAR);
-}
-
-addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {
- const event = watchedDir.has(item) ? EV_CHANGE$1 : EV_ADD$1;
- this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);
-}
-
-async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {
- try {
- const stats = await stat$1(path);
- if (this.fsw.closed) return;
- if (sameTypes(info, stats)) {
- this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
- } else {
- this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts);
- }
- } catch (error) {
- if (error.code === 'EACCES') {
- this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
- } else {
- this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts);
- }
- }
-}
-
-handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {
- if (this.fsw.closed || this.checkIgnored(path)) return;
-
- if (event === EV_UNLINK$1) {
- const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY;
- // suppress unlink events on never before seen files
- if (isDirectory || watchedDir.has(item)) {
- this.fsw._remove(parent, item, isDirectory);
- }
- } else {
- if (event === EV_ADD$1) {
- // track new directories
- if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);
-
- if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {
- // push symlinks back to the top of the stack to get handled
- const curDepth = opts.depth === undefined ?
- undefined : calcDepth(fullPath, realPath) + 1;
- return this._addToFsEvents(path, false, true, curDepth);
- }
-
- // track new paths
- // (other than symlinks being followed, which will be tracked soon)
- this.fsw._getWatchedDir(parent).add(item);
- }
- /**
- * @type {'add'|'addDir'|'unlink'|'unlinkDir'}
- */
- const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;
- this.fsw._emit(eventName, path);
- if (eventName === EV_ADD_DIR$1) this._addToFsEvents(path, false, true);
- }
-}
-
-/**
- * Handle symlinks encountered during directory scan
- * @param {String} watchPath - file/dir path to be watched with fsevents
- * @param {String} realPath - real path (in case of symlinks)
- * @param {Function} transform - path transformer
- * @param {Function} globFilter - path filter in case a glob pattern was provided
- * @returns {Function} closer for the watcher instance
-*/
-_watchWithFsEvents(watchPath, realPath, transform, globFilter) {
- if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;
- const opts = this.fsw.options;
- const watchCallback = async (fullPath, flags, info) => {
- if (this.fsw.closed) return;
- if (
- opts.depth !== undefined &&
- calcDepth(fullPath, realPath) > opts.depth
- ) return;
- const path = transform(sysPath$1.join(
- watchPath, sysPath$1.relative(watchPath, fullPath)
- ));
- if (globFilter && !globFilter(path)) return;
- // ensure directories are tracked
- const parent = sysPath$1.dirname(path);
- const item = sysPath$1.basename(path);
- const watchedDir = this.fsw._getWatchedDir(
- info.type === FSEVENT_TYPE_DIRECTORY ? path : parent
- );
-
- // correct for wrong events emitted
- if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {
- if (typeof opts.ignored === FUNCTION_TYPE$1) {
- let stats;
- try {
- stats = await stat$1(path);
- } catch (error) {}
- if (this.fsw.closed) return;
- if (this.checkIgnored(path, stats)) return;
- if (sameTypes(info, stats)) {
- this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
- } else {
- this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts);
- }
- } else {
- this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);
- }
- } else {
- switch (info.event) {
- case FSEVENT_CREATED:
- case FSEVENT_MODIFIED:
- return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
- case FSEVENT_DELETED:
- case FSEVENT_MOVED:
- return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);
- }
- }
- };
-
- const closer = setFSEventsListener(
- watchPath,
- realPath,
- watchCallback,
- this.fsw._emitRaw
- );
-
- this.fsw._emitReady();
- return closer;
-}
-
-/**
- * Handle symlinks encountered during directory scan
- * @param {String} linkPath path to symlink
- * @param {String} fullPath absolute path to the symlink
- * @param {Function} transform pre-existing path transformer
- * @param {Number} curDepth level of subdirectories traversed to where symlink is
- * @returns {Promise<void>}
- */
-async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {
- // don't follow the same symlink more than once
- if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;
-
- this.fsw._symlinkPaths.set(fullPath, true);
- this.fsw._incrReadyCount();
-
- try {
- const linkTarget = await realpath(linkPath);
- if (this.fsw.closed) return;
- if (this.fsw._isIgnored(linkTarget)) {
- return this.fsw._emitReady();
- }
-
- this.fsw._incrReadyCount();
-
- // add the linkTarget for watching with a wrapper for transform
- // that causes emitted paths to incorporate the link's path
- this._addToFsEvents(linkTarget || linkPath, (path) => {
- let aliasedPath = linkPath;
- if (linkTarget && linkTarget !== DOT_SLASH) {
- aliasedPath = path.replace(linkTarget, linkPath);
- } else if (path !== DOT_SLASH) {
- aliasedPath = sysPath$1.join(linkPath, path);
- }
- return transform(aliasedPath);
- }, false, curDepth);
- } catch(error) {
- if (this.fsw._handleError(error)) {
- return this.fsw._emitReady();
- }
- }
-}
-
-/**
- *
- * @param {Path} newPath
- * @param {fs.Stats} stats
- */
-emitAdd(newPath, stats, processPath, opts, forceAdd) {
- const pp = processPath(newPath);
- const isDir = stats.isDirectory();
- const dirObj = this.fsw._getWatchedDir(sysPath$1.dirname(pp));
- const base = sysPath$1.basename(pp);
-
- // ensure empty dirs get tracked
- if (isDir) this.fsw._getWatchedDir(pp);
- if (dirObj.has(base)) return;
- dirObj.add(base);
-
- if (!opts.ignoreInitial || forceAdd === true) {
- this.fsw._emit(isDir ? EV_ADD_DIR$1 : EV_ADD$1, pp, stats);
- }
-}
-
-initWatch(realPath, path, wh, processPath) {
- if (this.fsw.closed) return;
- const closer = this._watchWithFsEvents(
- wh.watchPath,
- sysPath$1.resolve(realPath || wh.watchPath),
- processPath,
- wh.globFilter
- );
- this.fsw._addPathCloser(path, closer);
-}
-
-/**
- * Handle added path with fsevents
- * @param {String} path file/dir path or glob pattern
- * @param {Function|Boolean=} transform converts working path to what the user expects
- * @param {Boolean=} forceAdd ensure add is emitted
- * @param {Number=} priorDepth Level of subdirectories already traversed.
- * @returns {Promise<void>}
- */
-async _addToFsEvents(path, transform, forceAdd, priorDepth) {
- if (this.fsw.closed) {
- return;
- }
- const opts = this.fsw.options;
- const processPath = typeof transform === FUNCTION_TYPE$1 ? transform : IDENTITY_FN;
-
- const wh = this.fsw._getWatchHelpers(path);
-
- // evaluate what is at the path we're being asked to watch
- try {
- const stats = await statMethods[wh.statMethod](wh.watchPath);
- if (this.fsw.closed) return;
- if (this.fsw._isIgnored(wh.watchPath, stats)) {
- throw null;
- }
- if (stats.isDirectory()) {
- // emit addDir unless this is a glob parent
- if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);
-
- // don't recurse further if it would exceed depth setting
- if (priorDepth && priorDepth > opts.depth) return;
-
- // scan the contents of the dir
- this.fsw._readdirp(wh.watchPath, {
- fileFilter: entry => wh.filterPath(entry),
- directoryFilter: entry => wh.filterDir(entry),
- ...Depth(opts.depth - (priorDepth || 0))
- }).on(STR_DATA, (entry) => {
- // need to check filterPath on dirs b/c filterDir is less restrictive
- if (this.fsw.closed) {
- return;
- }
- if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;
-
- const joinedPath = sysPath$1.join(wh.watchPath, entry.path);
- const {fullPath} = entry;
-
- if (wh.followSymlinks && entry.stats.isSymbolicLink()) {
- // preserve the current depth here since it can't be derived from
- // real paths past the symlink
- const curDepth = opts.depth === undefined ?
- undefined : calcDepth(joinedPath, sysPath$1.resolve(wh.watchPath)) + 1;
-
- this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);
- } else {
- this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);
- }
- }).on(EV_ERROR$1, EMPTY_FN$1).on(STR_END$1, () => {
- this.fsw._emitReady();
- });
- } else {
- this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);
- this.fsw._emitReady();
- }
- } catch (error) {
- if (!error || this.fsw._handleError(error)) {
- // TODO: Strange thing: "should not choke on an ignored watch path" will be failed without 2 ready calls -__-
- this.fsw._emitReady();
- this.fsw._emitReady();
- }
- }
-
- if (opts.persistent && forceAdd !== true) {
- if (typeof transform === FUNCTION_TYPE$1) {
- // realpath has already been resolved
- this.initWatch(undefined, path, wh, processPath);
- } else {
- let realPath;
- try {
- realPath = await realpath(wh.watchPath);
- } catch (e) {}
- this.initWatch(realPath, path, wh, processPath);
- }
- }
-}
-
-}
-
-fseventsHandler.exports = FsEventsHandler$1;
-fseventsHandler.exports.canUse = canUse;
-
-const { EventEmitter: EventEmitter$2 } = require$$0__default$5;
-const fs$8 = fs__default;
-const sysPath = path__default;
-const { promisify: promisify$1 } = require$$0__default$2;
-const readdirp = readdirp_1;
-const anymatch = anymatch$2.exports.default;
-const globParent = globParent$2;
-const isGlob = isGlob$2;
-const braces = braces_1;
-const normalizePath = normalizePath$2;
-
-const NodeFsHandler = nodefsHandler;
-const FsEventsHandler = fseventsHandler.exports;
-const {
- EV_ALL,
- EV_READY,
- EV_ADD,
- EV_CHANGE,
- EV_UNLINK,
- EV_ADD_DIR,
- EV_UNLINK_DIR,
- EV_RAW,
- EV_ERROR,
-
- STR_CLOSE,
- STR_END,
-
- BACK_SLASH_RE,
- DOUBLE_SLASH_RE,
- SLASH_OR_BACK_SLASH_RE,
- DOT_RE,
- REPLACER_RE,
-
- SLASH,
- SLASH_SLASH,
- BRACE_START,
- BANG,
- ONE_DOT,
- TWO_DOTS,
- GLOBSTAR,
- SLASH_GLOBSTAR,
- ANYMATCH_OPTS,
- STRING_TYPE,
- FUNCTION_TYPE,
- EMPTY_STR,
- EMPTY_FN,
-
- isWindows: isWindows$1,
- isMacos,
- isIBMi
-} = constants$1;
-
-const stat = promisify$1(fs$8.stat);
-const readdir = promisify$1(fs$8.readdir);
-
-/**
- * @typedef {String} Path
- * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName
- * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType
- */
-
-/**
- *
- * @typedef {Object} WatchHelpers
- * @property {Boolean} followSymlinks
- * @property {'stat'|'lstat'} statMethod
- * @property {Path} path
- * @property {Path} watchPath
- * @property {Function} entryPath
- * @property {Boolean} hasGlob
- * @property {Object} globFilter
- * @property {Function} filterPath
- * @property {Function} filterDir
- */
-
-const arrify = (value = []) => Array.isArray(value) ? value : [value];
-const flatten = (list, result = []) => {
- list.forEach(item => {
- if (Array.isArray(item)) {
- flatten(item, result);
- } else {
- result.push(item);
- }
- });
- return result;
-};
-
-const unifyPaths = (paths_) => {
- /**
- * @type {Array<String>}
- */
- const paths = flatten(arrify(paths_));
- if (!paths.every(p => typeof p === STRING_TYPE)) {
- throw new TypeError(`Non-string provided as watch path: ${paths}`);
- }
- return paths.map(normalizePathToUnix);
-};
-
-// If SLASH_SLASH occurs at the beginning of path, it is not replaced
-// because "//StoragePC/DrivePool/Movies" is a valid network path
-const toUnix = (string) => {
- let str = string.replace(BACK_SLASH_RE, SLASH);
- let prepend = false;
- if (str.startsWith(SLASH_SLASH)) {
- prepend = true;
- }
- while (str.match(DOUBLE_SLASH_RE)) {
- str = str.replace(DOUBLE_SLASH_RE, SLASH);
- }
- if (prepend) {
- str = SLASH + str;
- }
- return str;
-};
-
-// Our version of upath.normalize
-// TODO: this is not equal to path-normalize module - investigate why
-const normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));
-
-const normalizeIgnored = (cwd = EMPTY_STR) => (path) => {
- if (typeof path !== STRING_TYPE) return path;
- return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));
-};
-
-const getAbsolutePath = (path, cwd) => {
- if (sysPath.isAbsolute(path)) {
- return path;
- }
- if (path.startsWith(BANG)) {
- return BANG + sysPath.join(cwd, path.slice(1));
- }
- return sysPath.join(cwd, path);
-};
-
-const undef = (opts, key) => opts[key] === undefined;
-
-/**
- * Directory entry.
- * @property {Path} path
- * @property {Set<Path>} items
- */
-class DirEntry {
- /**
- * @param {Path} dir
- * @param {Function} removeWatcher
- */
- constructor(dir, removeWatcher) {
- this.path = dir;
- this._removeWatcher = removeWatcher;
- /** @type {Set<Path>} */
- this.items = new Set();
- }
-
- add(item) {
- const {items} = this;
- if (!items) return;
- if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);
- }
-
- async remove(item) {
- const {items} = this;
- if (!items) return;
- items.delete(item);
- if (items.size > 0) return;
-
- const dir = this.path;
- try {
- await readdir(dir);
- } catch (err) {
- if (this._removeWatcher) {
- this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));
- }
- }
- }
-
- has(item) {
- const {items} = this;
- if (!items) return;
- return items.has(item);
- }
-
- /**
- * @returns {Array<String>}
- */
- getChildren() {
- const {items} = this;
- if (!items) return;
- return [...items.values()];
- }
-
- dispose() {
- this.items.clear();
- delete this.path;
- delete this._removeWatcher;
- delete this.items;
- Object.freeze(this);
- }
-}
-
-const STAT_METHOD_F = 'stat';
-const STAT_METHOD_L = 'lstat';
-class WatchHelper {
- constructor(path, watchPath, follow, fsw) {
- this.fsw = fsw;
- this.path = path = path.replace(REPLACER_RE, EMPTY_STR);
- this.watchPath = watchPath;
- this.fullWatchPath = sysPath.resolve(watchPath);
- this.hasGlob = watchPath !== path;
- /** @type {object|boolean} */
- if (path === EMPTY_STR) this.hasGlob = false;
- this.globSymlink = this.hasGlob && follow ? undefined : false;
- this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;
- this.dirParts = this.getDirParts(path);
- this.dirParts.forEach((parts) => {
- if (parts.length > 1) parts.pop();
- });
- this.followSymlinks = follow;
- this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;
- }
-
- checkGlobSymlink(entry) {
- // only need to resolve once
- // first entry should always have entry.parentDir === EMPTY_STR
- if (this.globSymlink === undefined) {
- this.globSymlink = entry.fullParentDir === this.fullWatchPath ?
- false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};
- }
-
- if (this.globSymlink) {
- return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);
- }
-
- return entry.fullPath;
- }
-
- entryPath(entry) {
- return sysPath.join(this.watchPath,
- sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))
- );
- }
-
- filterPath(entry) {
- const {stats} = entry;
- if (stats && stats.isSymbolicLink()) return this.filterDir(entry);
- const resolvedPath = this.entryPath(entry);
- const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ?
- this.globFilter(resolvedPath) : true;
- return matchesGlob &&
- this.fsw._isntIgnored(resolvedPath, stats) &&
- this.fsw._hasReadPermissions(stats);
- }
-
- getDirParts(path) {
- if (!this.hasGlob) return [];
- const parts = [];
- const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path];
- expandedPath.forEach((path) => {
- parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));
- });
- return parts;
- }
-
- filterDir(entry) {
- if (this.hasGlob) {
- const entryParts = this.getDirParts(this.checkGlobSymlink(entry));
- let globstar = false;
- this.unmatchedGlob = !this.dirParts.some((parts) => {
- return parts.every((part, i) => {
- if (part === GLOBSTAR) globstar = true;
- return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);
- });
- });
- }
- return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);
- }
-}
-
-/**
- * Watches files & directories for changes. Emitted events:
- * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`
- *
- * new FSWatcher()
- * .add(directories)
- * .on('add', path => log('File', path, 'was added'))
- */
-class FSWatcher extends EventEmitter$2 {
-// Not indenting methods for history sake; for now.
-constructor(_opts) {
- super();
-
- const opts = {};
- if (_opts) Object.assign(opts, _opts); // for frozen objects
-
- /** @type {Map<String, DirEntry>} */
- this._watched = new Map();
- /** @type {Map<String, Array>} */
- this._closers = new Map();
- /** @type {Set<String>} */
- this._ignoredPaths = new Set();
-
- /** @type {Map<ThrottleType, Map>} */
- this._throttled = new Map();
-
- /** @type {Map<Path, String|Boolean>} */
- this._symlinkPaths = new Map();
-
- this._streams = new Set();
- this.closed = false;
-
- // Set up default options.
- if (undef(opts, 'persistent')) opts.persistent = true;
- if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;
- if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;
- if (undef(opts, 'interval')) opts.interval = 100;
- if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;
- if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;
- opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;
-
- // Enable fsevents on OS X when polling isn't explicitly enabled.
- if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;
-
- // If we can't use fsevents, ensure the options reflect it's disabled.
- const canUseFsEvents = FsEventsHandler.canUse();
- if (!canUseFsEvents) opts.useFsEvents = false;
-
- // Use polling on Mac if not using fsevents.
- // Other platforms use non-polling fs_watch.
- if (undef(opts, 'usePolling') && !opts.useFsEvents) {
- opts.usePolling = isMacos;
- }
-
- // Always default to polling on IBM i because fs.watch() is not available on IBM i.
- if(isIBMi) {
- opts.usePolling = true;
- }
-
- // Global override (useful for end-developers that need to force polling for all
- // instances of chokidar, regardless of usage/dependency depth)
- const envPoll = process.env.CHOKIDAR_USEPOLLING;
- if (envPoll !== undefined) {
- const envLower = envPoll.toLowerCase();
-
- if (envLower === 'false' || envLower === '0') {
- opts.usePolling = false;
- } else if (envLower === 'true' || envLower === '1') {
- opts.usePolling = true;
- } else {
- opts.usePolling = !!envLower;
- }
- }
- const envInterval = process.env.CHOKIDAR_INTERVAL;
- if (envInterval) {
- opts.interval = Number.parseInt(envInterval, 10);
- }
-
- // Editor atomic write normalization enabled by default with fs.watch
- if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;
- if (opts.atomic) this._pendingUnlinks = new Map();
-
- if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;
-
- if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;
- if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};
- const awf = opts.awaitWriteFinish;
- if (awf) {
- if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;
- if (!awf.pollInterval) awf.pollInterval = 100;
- this._pendingWrites = new Map();
- }
- if (opts.ignored) opts.ignored = arrify(opts.ignored);
-
- let readyCalls = 0;
- this._emitReady = () => {
- readyCalls++;
- if (readyCalls >= this._readyCount) {
- this._emitReady = EMPTY_FN;
- this._readyEmitted = true;
- // use process.nextTick to allow time for listener to be bound
- process.nextTick(() => this.emit(EV_READY));
- }
- };
- this._emitRaw = (...args) => this.emit(EV_RAW, ...args);
- this._readyEmitted = false;
- this.options = opts;
-
- // Initialize with proper watcher.
- if (opts.useFsEvents) {
- this._fsEventsHandler = new FsEventsHandler(this);
- } else {
- this._nodeFsHandler = new NodeFsHandler(this);
- }
-
- // You’re frozen when your heart’s not open.
- Object.freeze(opts);
-}
-
-// Public methods
-
-/**
- * Adds paths to be watched on an existing FSWatcher instance
- * @param {Path|Array<Path>} paths_
- * @param {String=} _origAdd private; for handling non-existent paths to be watched
- * @param {Boolean=} _internal private; indicates a non-user add
- * @returns {FSWatcher} for chaining
- */
-add(paths_, _origAdd, _internal) {
- const {cwd, disableGlobbing} = this.options;
- this.closed = false;
- let paths = unifyPaths(paths_);
- if (cwd) {
- paths = paths.map((path) => {
- const absPath = getAbsolutePath(path, cwd);
-
- // Check `path` instead of `absPath` because the cwd portion can't be a glob
- if (disableGlobbing || !isGlob(path)) {
- return absPath;
- }
- return normalizePath(absPath);
- });
- }
-
- // set aside negated glob strings
- paths = paths.filter((path) => {
- if (path.startsWith(BANG)) {
- this._ignoredPaths.add(path.slice(1));
- return false;
- }
-
- // if a path is being added that was previously ignored, stop ignoring it
- this._ignoredPaths.delete(path);
- this._ignoredPaths.delete(path + SLASH_GLOBSTAR);
-
- // reset the cached userIgnored anymatch fn
- // to make ignoredPaths changes effective
- this._userIgnored = undefined;
-
- return true;
- });
-
- if (this.options.useFsEvents && this._fsEventsHandler) {
- if (!this._readyCount) this._readyCount = paths.length;
- if (this.options.persistent) this._readyCount *= 2;
- paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));
- } else {
- if (!this._readyCount) this._readyCount = 0;
- this._readyCount += paths.length;
- Promise.all(
- paths.map(async path => {
- const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);
- if (res) this._emitReady();
- return res;
- })
- ).then(results => {
- if (this.closed) return;
- results.filter(item => item).forEach(item => {
- this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));
- });
- });
- }
-
- return this;
-}
-
-/**
- * Close watchers or start ignoring events from specified paths.
- * @param {Path|Array<Path>} paths_ - string or array of strings, file/directory paths and/or globs
- * @returns {FSWatcher} for chaining
-*/
-unwatch(paths_) {
- if (this.closed) return this;
- const paths = unifyPaths(paths_);
- const {cwd} = this.options;
-
- paths.forEach((path) => {
- // convert to absolute path unless relative path already matches
- if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {
- if (cwd) path = sysPath.join(cwd, path);
- path = sysPath.resolve(path);
- }
-
- this._closePath(path);
-
- this._ignoredPaths.add(path);
- if (this._watched.has(path)) {
- this._ignoredPaths.add(path + SLASH_GLOBSTAR);
- }
-
- // reset the cached userIgnored anymatch fn
- // to make ignoredPaths changes effective
- this._userIgnored = undefined;
- });
-
- return this;
-}
-
-/**
- * Close watchers and remove all listeners from watched paths.
- * @returns {Promise<void>}.
-*/
-close() {
- if (this.closed) return this._closePromise;
- this.closed = true;
-
- // Memory management.
- this.removeAllListeners();
- const closers = [];
- this._closers.forEach(closerList => closerList.forEach(closer => {
- const promise = closer();
- if (promise instanceof Promise) closers.push(promise);
- }));
- this._streams.forEach(stream => stream.destroy());
- this._userIgnored = undefined;
- this._readyCount = 0;
- this._readyEmitted = false;
- this._watched.forEach(dirent => dirent.dispose());
- ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {
- this[`_${key}`].clear();
- });
-
- this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();
- return this._closePromise;
-}
-
-/**
- * Expose list of watched paths
- * @returns {Object} for chaining
-*/
-getWatched() {
- const watchList = {};
- this._watched.forEach((entry, dir) => {
- const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;
- watchList[key || ONE_DOT] = entry.getChildren().sort();
- });
- return watchList;
-}
-
-emitWithAll(event, args) {
- this.emit(...args);
- if (event !== EV_ERROR) this.emit(EV_ALL, ...args);
-}
-
-// Common helpers
-// --------------
-
-/**
- * Normalize and emit events.
- * Calling _emit DOES NOT MEAN emit() would be called!
- * @param {EventName} event Type of event
- * @param {Path} path File or directory path
- * @param {*=} val1 arguments to be passed with event
- * @param {*=} val2
- * @param {*=} val3
- * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag
- */
-async _emit(event, path, val1, val2, val3) {
- if (this.closed) return;
-
- const opts = this.options;
- if (isWindows$1) path = sysPath.normalize(path);
- if (opts.cwd) path = sysPath.relative(opts.cwd, path);
- /** @type Array<any> */
- const args = [event, path];
- if (val3 !== undefined) args.push(val1, val2, val3);
- else if (val2 !== undefined) args.push(val1, val2);
- else if (val1 !== undefined) args.push(val1);
-
- const awf = opts.awaitWriteFinish;
- let pw;
- if (awf && (pw = this._pendingWrites.get(path))) {
- pw.lastChange = new Date();
- return this;
- }
-
- if (opts.atomic) {
- if (event === EV_UNLINK) {
- this._pendingUnlinks.set(path, args);
- setTimeout(() => {
- this._pendingUnlinks.forEach((entry, path) => {
- this.emit(...entry);
- this.emit(EV_ALL, ...entry);
- this._pendingUnlinks.delete(path);
- });
- }, typeof opts.atomic === 'number' ? opts.atomic : 100);
- return this;
- }
- if (event === EV_ADD && this._pendingUnlinks.has(path)) {
- event = args[0] = EV_CHANGE;
- this._pendingUnlinks.delete(path);
- }
- }
-
- if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {
- const awfEmit = (err, stats) => {
- if (err) {
- event = args[0] = EV_ERROR;
- args[1] = err;
- this.emitWithAll(event, args);
- } else if (stats) {
- // if stats doesn't exist the file must have been deleted
- if (args.length > 2) {
- args[2] = stats;
- } else {
- args.push(stats);
- }
- this.emitWithAll(event, args);
- }
- };
-
- this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);
- return this;
- }
-
- if (event === EV_CHANGE) {
- const isThrottled = !this._throttle(EV_CHANGE, path, 50);
- if (isThrottled) return this;
- }
-
- if (opts.alwaysStat && val1 === undefined &&
- (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)
- ) {
- const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;
- let stats;
- try {
- stats = await stat(fullPath);
- } catch (err) {}
- // Suppress event when fs_stat fails, to avoid sending undefined 'stat'
- if (!stats || this.closed) return;
- args.push(stats);
- }
- this.emitWithAll(event, args);
-
- return this;
-}
-
-/**
- * Common handler for errors
- * @param {Error} error
- * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag
- */
-_handleError(error) {
- const code = error && error.code;
- if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&
- (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))
- ) {
- this.emit(EV_ERROR, error);
- }
- return error || this.closed;
-}
-
-/**
- * Helper utility for throttling
- * @param {ThrottleType} actionType type being throttled
- * @param {Path} path being acted upon
- * @param {Number} timeout duration of time to suppress duplicate actions
- * @returns {Object|false} tracking object or false if action should be suppressed
- */
-_throttle(actionType, path, timeout) {
- if (!this._throttled.has(actionType)) {
- this._throttled.set(actionType, new Map());
- }
-
- /** @type {Map<Path, Object>} */
- const action = this._throttled.get(actionType);
- /** @type {Object} */
- const actionPath = action.get(path);
-
- if (actionPath) {
- actionPath.count++;
- return false;
- }
-
- let timeoutObject;
- const clear = () => {
- const item = action.get(path);
- const count = item ? item.count : 0;
- action.delete(path);
- clearTimeout(timeoutObject);
- if (item) clearTimeout(item.timeoutObject);
- return count;
- };
- timeoutObject = setTimeout(clear, timeout);
- const thr = {timeoutObject, clear, count: 0};
- action.set(path, thr);
- return thr;
-}
-
-_incrReadyCount() {
- return this._readyCount++;
-}
-
-/**
- * Awaits write operation to finish.
- * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.
- * @param {Path} path being acted upon
- * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished
- * @param {EventName} event
- * @param {Function} awfEmit Callback to be called when ready for event to be emitted.
- */
-_awaitWriteFinish(path, threshold, event, awfEmit) {
- let timeoutHandler;
-
- let fullPath = path;
- if (this.options.cwd && !sysPath.isAbsolute(path)) {
- fullPath = sysPath.join(this.options.cwd, path);
- }
-
- const now = new Date();
-
- const awaitWriteFinish = (prevStat) => {
- fs$8.stat(fullPath, (err, curStat) => {
- if (err || !this._pendingWrites.has(path)) {
- if (err && err.code !== 'ENOENT') awfEmit(err);
- return;
- }
-
- const now = Number(new Date());
-
- if (prevStat && curStat.size !== prevStat.size) {
- this._pendingWrites.get(path).lastChange = now;
- }
- const pw = this._pendingWrites.get(path);
- const df = now - pw.lastChange;
-
- if (df >= threshold) {
- this._pendingWrites.delete(path);
- awfEmit(undefined, curStat);
- } else {
- timeoutHandler = setTimeout(
- awaitWriteFinish,
- this.options.awaitWriteFinish.pollInterval,
- curStat
- );
- }
- });
- };
-
- if (!this._pendingWrites.has(path)) {
- this._pendingWrites.set(path, {
- lastChange: now,
- cancelWait: () => {
- this._pendingWrites.delete(path);
- clearTimeout(timeoutHandler);
- return event;
- }
- });
- timeoutHandler = setTimeout(
- awaitWriteFinish,
- this.options.awaitWriteFinish.pollInterval
- );
- }
-}
-
-_getGlobIgnored() {
- return [...this._ignoredPaths.values()];
-}
-
-/**
- * Determines whether user has asked to ignore this path.
- * @param {Path} path filepath or dir
- * @param {fs.Stats=} stats result of fs.stat
- * @returns {Boolean}
- */
-_isIgnored(path, stats) {
- if (this.options.atomic && DOT_RE.test(path)) return true;
- if (!this._userIgnored) {
- const {cwd} = this.options;
- const ign = this.options.ignored;
-
- const ignored = ign && ign.map(normalizeIgnored(cwd));
- const paths = arrify(ignored)
- .filter((path) => typeof path === STRING_TYPE && !isGlob(path))
- .map((path) => path + SLASH_GLOBSTAR);
- const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);
- this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);
- }
-
- return this._userIgnored([path, stats]);
-}
-
-_isntIgnored(path, stat) {
- return !this._isIgnored(path, stat);
-}
-
-/**
- * Provides a set of common helpers and properties relating to symlink and glob handling.
- * @param {Path} path file, directory, or glob pattern being watched
- * @param {Number=} depth at any depth > 0, this isn't a glob
- * @returns {WatchHelper} object containing helpers for this path
- */
-_getWatchHelpers(path, depth) {
- const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);
- const follow = this.options.followSymlinks;
-
- return new WatchHelper(path, watchPath, follow, this);
-}
-
-// Directory helpers
-// -----------------
-
-/**
- * Provides directory tracking objects
- * @param {String} directory path of the directory
- * @returns {DirEntry} the directory's tracking object
- */
-_getWatchedDir(directory) {
- if (!this._boundRemove) this._boundRemove = this._remove.bind(this);
- const dir = sysPath.resolve(directory);
- if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));
- return this._watched.get(dir);
-}
-
-// File helpers
-// ------------
-
-/**
- * Check for read permissions.
- * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405
- * @param {fs.Stats} stats - object, result of fs_stat
- * @returns {Boolean} indicates whether the file can be read
-*/
-_hasReadPermissions(stats) {
- if (this.options.ignorePermissionErrors) return true;
-
- // stats.mode may be bigint
- const md = stats && Number.parseInt(stats.mode, 10);
- const st = md & 0o777;
- const it = Number.parseInt(st.toString(8)[0], 10);
- return Boolean(4 & it);
-}
-
-/**
- * Handles emitting unlink events for
- * files and directories, and via recursion, for
- * files and directories within directories that are unlinked
- * @param {String} directory within which the following item is located
- * @param {String} item base path of item/directory
- * @returns {void}
-*/
-_remove(directory, item, isDirectory) {
- // if what is being deleted is a directory, get that directory's paths
- // for recursive deleting and cleaning of watched object
- // if it is not a directory, nestedDirectoryChildren will be empty array
- const path = sysPath.join(directory, item);
- const fullPath = sysPath.resolve(path);
- isDirectory = isDirectory != null
- ? isDirectory
- : this._watched.has(path) || this._watched.has(fullPath);
-
- // prevent duplicate handling in case of arriving here nearly simultaneously
- // via multiple paths (such as _handleFile and _handleDir)
- if (!this._throttle('remove', path, 100)) return;
-
- // if the only watched file is removed, watch for its return
- if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {
- this.add(directory, item, true);
- }
-
- // This will create a new entry in the watched object in either case
- // so we got to do the directory check beforehand
- const wp = this._getWatchedDir(path);
- const nestedDirectoryChildren = wp.getChildren();
-
- // Recursively remove children directories / files.
- nestedDirectoryChildren.forEach(nested => this._remove(path, nested));
-
- // Check if item was on the watched list and remove it
- const parent = this._getWatchedDir(directory);
- const wasTracked = parent.has(item);
- parent.remove(item);
-
- // Fixes issue #1042 -> Relative paths were detected and added as symlinks
- // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),
- // but never removed from the map in case the path was deleted.
- // This leads to an incorrect state if the path was recreated:
- // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553
- if (this._symlinkPaths.has(fullPath)) {
- this._symlinkPaths.delete(fullPath);
- }
-
- // If we wait for this file to be fully written, cancel the wait.
- let relPath = path;
- if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);
- if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {
- const event = this._pendingWrites.get(relPath).cancelWait();
- if (event === EV_ADD) return;
- }
-
- // The Entry will either be a directory that just got removed
- // or a bogus entry to a file, in either case we have to remove it
- this._watched.delete(path);
- this._watched.delete(fullPath);
- const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK;
- if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);
-
- // Avoid conflicts if we later create another file with the same name
- if (!this.options.useFsEvents) {
- this._closePath(path);
- }
-}
-
-/**
- * Closes all watchers for a path
- * @param {Path} path
- */
-_closePath(path) {
- this._closeFile(path);
- const dir = sysPath.dirname(path);
- this._getWatchedDir(dir).remove(sysPath.basename(path));
-}
-
-/**
- * Closes only file-specific watchers
- * @param {Path} path
- */
-_closeFile(path) {
- const closers = this._closers.get(path);
- if (!closers) return;
- closers.forEach(closer => closer());
- this._closers.delete(path);
-}
-
-/**
- *
- * @param {Path} path
- * @param {Function} closer
- */
-_addPathCloser(path, closer) {
- if (!closer) return;
- let list = this._closers.get(path);
- if (!list) {
- list = [];
- this._closers.set(path, list);
- }
- list.push(closer);
-}
-
-_readdirp(root, opts) {
- if (this.closed) return;
- const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};
- let stream = readdirp(root, options);
- this._streams.add(stream);
- stream.once(STR_CLOSE, () => {
- stream = undefined;
- });
- stream.once(STR_END, () => {
- if (stream) {
- this._streams.delete(stream);
- stream = undefined;
- }
- });
- return stream;
-}
-
-}
-
-// Export FSWatcher class
-chokidar.FSWatcher = FSWatcher;
-
-/**
- * Instantiates watcher with paths to be tracked.
- * @param {String|Array<String>} paths file/directory paths and/or globs
- * @param {Object=} options chokidar opts
- * @returns an instance of FSWatcher for chaining.
- */
-const watch = (paths, options) => {
- const watcher = new FSWatcher(options);
- watcher.add(paths);
- return watcher;
-};
-
-chokidar.watch = watch;
-
-async function resolveHttpServer({ proxy }, app, httpsOptions) {
- if (!httpsOptions) {
- return require('http').createServer(app);
- }
- if (proxy) {
- // #484 fallback to http1 when proxy is needed.
- return require('https').createServer(httpsOptions, app);
- }
- else {
- return require('http2').createSecureServer({
- ...httpsOptions,
- allowHTTP1: true
- }, app);
- }
-}
-async function resolveHttpsConfig(config) {
- if (!config.server.https)
- return undefined;
- const httpsOption = isObject$3(config.server.https) ? config.server.https : {};
- const { ca, cert, key, pfx } = httpsOption;
- Object.assign(httpsOption, {
- ca: readFileIfExists(ca),
- cert: readFileIfExists(cert),
- key: readFileIfExists(key),
- pfx: readFileIfExists(pfx)
- });
- if (!httpsOption.key || !httpsOption.cert) {
- httpsOption.cert = httpsOption.key = await getCertificate(config);
- }
- return httpsOption;
-}
-function readFileIfExists(value) {
- if (typeof value === 'string') {
- try {
- return fs__default.readFileSync(path__default.resolve(value));
- }
- catch (e) {
- return value;
- }
- }
- return value;
-}
-/**
- * https://github.com/webpack/webpack-dev-server/blob/master/lib/utils/createCertificate.js
- *
- * Copyright JS Foundation and other contributors
- * This source code is licensed under the MIT license found in the
- * LICENSE file at
- * https://github.com/webpack/webpack-dev-server/blob/master/LICENSE
- */
-async function createCertificate() {
- const { generate } = await Promise.resolve().then(function () { return require('./dep-34d2edc0.js'); }).then(function (n) { return n.index; });
- const pems = generate(null, {
- algorithm: 'sha256',
- days: 30,
- keySize: 2048,
- extensions: [
- // {
- // name: 'basicConstraints',
- // cA: true,
- // },
- {
- name: 'keyUsage',
- keyCertSign: true,
- digitalSignature: true,
- nonRepudiation: true,
- keyEncipherment: true,
- dataEncipherment: true
- },
- {
- name: 'extKeyUsage',
- serverAuth: true,
- clientAuth: true,
- codeSigning: true,
- timeStamping: true
- },
- {
- name: 'subjectAltName',
- altNames: [
- {
- // type 2 is DNS
- type: 2,
- value: 'localhost'
- },
- {
- type: 2,
- value: 'localhost.localdomain'
- },
- {
- type: 2,
- value: 'lvh.me'
- },
- {
- type: 2,
- value: '*.lvh.me'
- },
- {
- type: 2,
- value: '[::1]'
- },
- {
- // type 7 is IP
- type: 7,
- ip: '127.0.0.1'
- },
- {
- type: 7,
- ip: 'fe80::1'
- }
- ]
- }
- ]
- });
- return pems.private + pems.cert;
-}
-async function getCertificate(config) {
- if (!config.cacheDir)
- return await createCertificate();
- const cachePath = path__default.join(config.cacheDir, '_cert.pem');
- try {
- const [stat, content] = await Promise.all([
- fs$r.promises.stat(cachePath),
- fs$r.promises.readFile(cachePath, 'utf8')
- ]);
- if (Date.now() - stat.ctime.valueOf() > 30 * 24 * 60 * 60 * 1000) {
- throw new Error('cache is outdated.');
- }
- return content;
- }
- catch {
- const content = await createCertificate();
- fs$r.promises
- .mkdir(config.cacheDir, { recursive: true })
- .then(() => fs$r.promises.writeFile(cachePath, content))
- .catch(() => { });
- return content;
- }
-}
-async function httpServerStart(httpServer, serverOptions) {
- return new Promise((resolve, reject) => {
- let { port, strictPort, host, logger } = serverOptions;
- const onError = (e) => {
- if (e.code === 'EADDRINUSE') {
- if (strictPort) {
- httpServer.removeListener('error', onError);
- reject(new Error(`Port ${port} is already in use`));
- }
- else {
- logger.info(`Port ${port} is in use, trying another one...`);
- httpServer.listen(++port, host);
- }
- }
- else {
- httpServer.removeListener('error', onError);
- reject(e);
- }
- };
- httpServer.on('error', onError);
- httpServer.listen(port, host, () => {
- httpServer.removeListener('error', onError);
- resolve(port);
- });
- });
-}
-
-var bufferUtil$1 = {exports: {}};
-
-var constants = {
- BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'],
- GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',
- kStatusCode: Symbol('status-code'),
- kWebSocket: Symbol('websocket'),
- EMPTY_BUFFER: Buffer.alloc(0),
- NOOP: () => {}
-};
-
-const { EMPTY_BUFFER: EMPTY_BUFFER$3 } = constants;
-
-/**
- * Merges an array of buffers into a new buffer.
- *
- * @param {Buffer[]} list The array of buffers to concat
- * @param {Number} totalLength The total length of buffers in the list
- * @return {Buffer} The resulting buffer
- * @public
- */
-function concat$1(list, totalLength) {
- if (list.length === 0) return EMPTY_BUFFER$3;
- if (list.length === 1) return list[0];
-
- const target = Buffer.allocUnsafe(totalLength);
- let offset = 0;
-
- for (let i = 0; i < list.length; i++) {
- const buf = list[i];
- target.set(buf, offset);
- offset += buf.length;
- }
-
- if (offset < totalLength) return target.slice(0, offset);
-
- return target;
-}
-
-/**
- * Masks a buffer using the given mask.
- *
- * @param {Buffer} source The buffer to mask
- * @param {Buffer} mask The mask to use
- * @param {Buffer} output The buffer where to store the result
- * @param {Number} offset The offset at which to start writing
- * @param {Number} length The number of bytes to mask.
- * @public
- */
-function _mask(source, mask, output, offset, length) {
- for (let i = 0; i < length; i++) {
- output[offset + i] = source[i] ^ mask[i & 3];
- }
-}
-
-/**
- * Unmasks a buffer using the given mask.
- *
- * @param {Buffer} buffer The buffer to unmask
- * @param {Buffer} mask The mask to use
- * @public
- */
-function _unmask(buffer, mask) {
- // Required until https://github.com/nodejs/node/issues/9006 is resolved.
- const length = buffer.length;
- for (let i = 0; i < length; i++) {
- buffer[i] ^= mask[i & 3];
- }
-}
-
-/**
- * Converts a buffer to an `ArrayBuffer`.
- *
- * @param {Buffer} buf The buffer to convert
- * @return {ArrayBuffer} Converted buffer
- * @public
- */
-function toArrayBuffer$1(buf) {
- if (buf.byteLength === buf.buffer.byteLength) {
- return buf.buffer;
- }
-
- return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
-}
-
-/**
- * Converts `data` to a `Buffer`.
- *
- * @param {*} data The data to convert
- * @return {Buffer} The buffer
- * @throws {TypeError}
- * @public
- */
-function toBuffer$3(data) {
- toBuffer$3.readOnly = true;
-
- if (Buffer.isBuffer(data)) return data;
-
- let buf;
-
- if (data instanceof ArrayBuffer) {
- buf = Buffer.from(data);
- } else if (ArrayBuffer.isView(data)) {
- buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
- } else {
- buf = Buffer.from(data);
- toBuffer$3.readOnly = false;
- }
-
- return buf;
-}
-
-try {
- const bufferUtil = require('bufferutil');
- const bu = bufferUtil.BufferUtil || bufferUtil;
-
- bufferUtil$1.exports = {
- concat: concat$1,
- mask(source, mask, output, offset, length) {
- if (length < 48) _mask(source, mask, output, offset, length);
- else bu.mask(source, mask, output, offset, length);
- },
- toArrayBuffer: toArrayBuffer$1,
- toBuffer: toBuffer$3,
- unmask(buffer, mask) {
- if (buffer.length < 32) _unmask(buffer, mask);
- else bu.unmask(buffer, mask);
- }
- };
-} catch (e) /* istanbul ignore next */ {
- bufferUtil$1.exports = {
- concat: concat$1,
- mask: _mask,
- toArrayBuffer: toArrayBuffer$1,
- toBuffer: toBuffer$3,
- unmask: _unmask
- };
-}
-
-const kDone = Symbol('kDone');
-const kRun = Symbol('kRun');
-
-/**
- * A very simple job queue with adjustable concurrency. Adapted from
- * https://github.com/STRML/async-limiter
- */
-class Limiter$1 {
- /**
- * Creates a new `Limiter`.
- *
- * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed
- * to run concurrently
- */
- constructor(concurrency) {
- this[kDone] = () => {
- this.pending--;
- this[kRun]();
- };
- this.concurrency = concurrency || Infinity;
- this.jobs = [];
- this.pending = 0;
- }
-
- /**
- * Adds a job to the queue.
- *
- * @param {Function} job The job to run
- * @public
- */
- add(job) {
- this.jobs.push(job);
- this[kRun]();
- }
-
- /**
- * Removes a job from the queue and runs it if possible.
- *
- * @private
- */
- [kRun]() {
- if (this.pending === this.concurrency) return;
-
- if (this.jobs.length) {
- const job = this.jobs.shift();
-
- this.pending++;
- job(this[kDone]);
- }
- }
-}
-
-var limiter = Limiter$1;
-
-const zlib$1 = require$$0__default$7;
-
-const bufferUtil = bufferUtil$1.exports;
-const Limiter = limiter;
-const { kStatusCode: kStatusCode$2, NOOP: NOOP$1 } = constants;
-
-const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);
-const kPerMessageDeflate = Symbol('permessage-deflate');
-const kTotalLength = Symbol('total-length');
-const kCallback = Symbol('callback');
-const kBuffers = Symbol('buffers');
-const kError = Symbol('error');
-
-//
-// We limit zlib concurrency, which prevents severe memory fragmentation
-// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913
-// and https://github.com/websockets/ws/issues/1202
-//
-// Intentionally global; it's the global thread pool that's an issue.
-//
-let zlibLimiter;
-
-/**
- * permessage-deflate implementation.
- */
-class PerMessageDeflate$4 {
- /**
- * Creates a PerMessageDeflate instance.
- *
- * @param {Object} [options] Configuration options
- * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept
- * disabling of server context takeover
- * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/
- * acknowledge disabling of client context takeover
- * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the
- * use of a custom server window size
- * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support
- * for, or request, a custom client window size
- * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on
- * deflate
- * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on
- * inflate
- * @param {Number} [options.threshold=1024] Size (in bytes) below which
- * messages should not be compressed
- * @param {Number} [options.concurrencyLimit=10] The number of concurrent
- * calls to zlib
- * @param {Boolean} [isServer=false] Create the instance in either server or
- * client mode
- * @param {Number} [maxPayload=0] The maximum allowed message length
- */
- constructor(options, isServer, maxPayload) {
- this._maxPayload = maxPayload | 0;
- this._options = options || {};
- this._threshold =
- this._options.threshold !== undefined ? this._options.threshold : 1024;
- this._isServer = !!isServer;
- this._deflate = null;
- this._inflate = null;
-
- this.params = null;
-
- if (!zlibLimiter) {
- const concurrency =
- this._options.concurrencyLimit !== undefined
- ? this._options.concurrencyLimit
- : 10;
- zlibLimiter = new Limiter(concurrency);
- }
- }
-
- /**
- * @type {String}
- */
- static get extensionName() {
- return 'permessage-deflate';
- }
-
- /**
- * Create an extension negotiation offer.
- *
- * @return {Object} Extension parameters
- * @public
- */
- offer() {
- const params = {};
-
- if (this._options.serverNoContextTakeover) {
- params.server_no_context_takeover = true;
- }
- if (this._options.clientNoContextTakeover) {
- params.client_no_context_takeover = true;
- }
- if (this._options.serverMaxWindowBits) {
- params.server_max_window_bits = this._options.serverMaxWindowBits;
- }
- if (this._options.clientMaxWindowBits) {
- params.client_max_window_bits = this._options.clientMaxWindowBits;
- } else if (this._options.clientMaxWindowBits == null) {
- params.client_max_window_bits = true;
- }
-
- return params;
- }
-
- /**
- * Accept an extension negotiation offer/response.
- *
- * @param {Array} configurations The extension negotiation offers/reponse
- * @return {Object} Accepted configuration
- * @public
- */
- accept(configurations) {
- configurations = this.normalizeParams(configurations);
-
- this.params = this._isServer
- ? this.acceptAsServer(configurations)
- : this.acceptAsClient(configurations);
-
- return this.params;
- }
-
- /**
- * Releases all resources used by the extension.
- *
- * @public
- */
- cleanup() {
- if (this._inflate) {
- this._inflate.close();
- this._inflate = null;
- }
-
- if (this._deflate) {
- const callback = this._deflate[kCallback];
-
- this._deflate.close();
- this._deflate = null;
-
- if (callback) {
- callback(
- new Error(
- 'The deflate stream was closed while data was being processed'
- )
- );
- }
- }
- }
-
- /**
- * Accept an extension negotiation offer.
- *
- * @param {Array} offers The extension negotiation offers
- * @return {Object} Accepted configuration
- * @private
- */
- acceptAsServer(offers) {
- const opts = this._options;
- const accepted = offers.find((params) => {
- if (
- (opts.serverNoContextTakeover === false &&
- params.server_no_context_takeover) ||
- (params.server_max_window_bits &&
- (opts.serverMaxWindowBits === false ||
- (typeof opts.serverMaxWindowBits === 'number' &&
- opts.serverMaxWindowBits > params.server_max_window_bits))) ||
- (typeof opts.clientMaxWindowBits === 'number' &&
- !params.client_max_window_bits)
- ) {
- return false;
- }
-
- return true;
- });
-
- if (!accepted) {
- throw new Error('None of the extension offers can be accepted');
- }
-
- if (opts.serverNoContextTakeover) {
- accepted.server_no_context_takeover = true;
- }
- if (opts.clientNoContextTakeover) {
- accepted.client_no_context_takeover = true;
- }
- if (typeof opts.serverMaxWindowBits === 'number') {
- accepted.server_max_window_bits = opts.serverMaxWindowBits;
- }
- if (typeof opts.clientMaxWindowBits === 'number') {
- accepted.client_max_window_bits = opts.clientMaxWindowBits;
- } else if (
- accepted.client_max_window_bits === true ||
- opts.clientMaxWindowBits === false
- ) {
- delete accepted.client_max_window_bits;
- }
-
- return accepted;
- }
-
- /**
- * Accept the extension negotiation response.
- *
- * @param {Array} response The extension negotiation response
- * @return {Object} Accepted configuration
- * @private
- */
- acceptAsClient(response) {
- const params = response[0];
-
- if (
- this._options.clientNoContextTakeover === false &&
- params.client_no_context_takeover
- ) {
- throw new Error('Unexpected parameter "client_no_context_takeover"');
- }
-
- if (!params.client_max_window_bits) {
- if (typeof this._options.clientMaxWindowBits === 'number') {
- params.client_max_window_bits = this._options.clientMaxWindowBits;
- }
- } else if (
- this._options.clientMaxWindowBits === false ||
- (typeof this._options.clientMaxWindowBits === 'number' &&
- params.client_max_window_bits > this._options.clientMaxWindowBits)
- ) {
- throw new Error(
- 'Unexpected or invalid parameter "client_max_window_bits"'
- );
- }
-
- return params;
- }
-
- /**
- * Normalize parameters.
- *
- * @param {Array} configurations The extension negotiation offers/reponse
- * @return {Array} The offers/response with normalized parameters
- * @private
- */
- normalizeParams(configurations) {
- configurations.forEach((params) => {
- Object.keys(params).forEach((key) => {
- let value = params[key];
-
- if (value.length > 1) {
- throw new Error(`Parameter "${key}" must have only a single value`);
- }
-
- value = value[0];
-
- if (key === 'client_max_window_bits') {
- if (value !== true) {
- const num = +value;
- if (!Number.isInteger(num) || num < 8 || num > 15) {
- throw new TypeError(
- `Invalid value for parameter "${key}": ${value}`
- );
- }
- value = num;
- } else if (!this._isServer) {
- throw new TypeError(
- `Invalid value for parameter "${key}": ${value}`
- );
- }
- } else if (key === 'server_max_window_bits') {
- const num = +value;
- if (!Number.isInteger(num) || num < 8 || num > 15) {
- throw new TypeError(
- `Invalid value for parameter "${key}": ${value}`
- );
- }
- value = num;
- } else if (
- key === 'client_no_context_takeover' ||
- key === 'server_no_context_takeover'
- ) {
- if (value !== true) {
- throw new TypeError(
- `Invalid value for parameter "${key}": ${value}`
- );
- }
- } else {
- throw new Error(`Unknown parameter "${key}"`);
- }
-
- params[key] = value;
- });
- });
-
- return configurations;
- }
-
- /**
- * Decompress data. Concurrency limited.
- *
- * @param {Buffer} data Compressed data
- * @param {Boolean} fin Specifies whether or not this is the last fragment
- * @param {Function} callback Callback
- * @public
- */
- decompress(data, fin, callback) {
- zlibLimiter.add((done) => {
- this._decompress(data, fin, (err, result) => {
- done();
- callback(err, result);
- });
- });
- }
-
- /**
- * Compress data. Concurrency limited.
- *
- * @param {Buffer} data Data to compress
- * @param {Boolean} fin Specifies whether or not this is the last fragment
- * @param {Function} callback Callback
- * @public
- */
- compress(data, fin, callback) {
- zlibLimiter.add((done) => {
- this._compress(data, fin, (err, result) => {
- done();
- callback(err, result);
- });
- });
- }
-
- /**
- * Decompress data.
- *
- * @param {Buffer} data Compressed data
- * @param {Boolean} fin Specifies whether or not this is the last fragment
- * @param {Function} callback Callback
- * @private
- */
- _decompress(data, fin, callback) {
- const endpoint = this._isServer ? 'client' : 'server';
-
- if (!this._inflate) {
- const key = `${endpoint}_max_window_bits`;
- const windowBits =
- typeof this.params[key] !== 'number'
- ? zlib$1.Z_DEFAULT_WINDOWBITS
- : this.params[key];
-
- this._inflate = zlib$1.createInflateRaw({
- ...this._options.zlibInflateOptions,
- windowBits
- });
- this._inflate[kPerMessageDeflate] = this;
- this._inflate[kTotalLength] = 0;
- this._inflate[kBuffers] = [];
- this._inflate.on('error', inflateOnError);
- this._inflate.on('data', inflateOnData);
- }
-
- this._inflate[kCallback] = callback;
-
- this._inflate.write(data);
- if (fin) this._inflate.write(TRAILER);
-
- this._inflate.flush(() => {
- const err = this._inflate[kError];
-
- if (err) {
- this._inflate.close();
- this._inflate = null;
- callback(err);
- return;
- }
-
- const data = bufferUtil.concat(
- this._inflate[kBuffers],
- this._inflate[kTotalLength]
- );
-
- if (this._inflate._readableState.endEmitted) {
- this._inflate.close();
- this._inflate = null;
- } else {
- this._inflate[kTotalLength] = 0;
- this._inflate[kBuffers] = [];
-
- if (fin && this.params[`${endpoint}_no_context_takeover`]) {
- this._inflate.reset();
- }
- }
-
- callback(null, data);
- });
- }
-
- /**
- * Compress data.
- *
- * @param {Buffer} data Data to compress
- * @param {Boolean} fin Specifies whether or not this is the last fragment
- * @param {Function} callback Callback
- * @private
- */
- _compress(data, fin, callback) {
- const endpoint = this._isServer ? 'server' : 'client';
-
- if (!this._deflate) {
- const key = `${endpoint}_max_window_bits`;
- const windowBits =
- typeof this.params[key] !== 'number'
- ? zlib$1.Z_DEFAULT_WINDOWBITS
- : this.params[key];
-
- this._deflate = zlib$1.createDeflateRaw({
- ...this._options.zlibDeflateOptions,
- windowBits
- });
-
- this._deflate[kTotalLength] = 0;
- this._deflate[kBuffers] = [];
-
- //
- // An `'error'` event is emitted, only on Node.js < 10.0.0, if the
- // `zlib.DeflateRaw` instance is closed while data is being processed.
- // This can happen if `PerMessageDeflate#cleanup()` is called at the wrong
- // time due to an abnormal WebSocket closure.
- //
- this._deflate.on('error', NOOP$1);
- this._deflate.on('data', deflateOnData);
- }
-
- this._deflate[kCallback] = callback;
-
- this._deflate.write(data);
- this._deflate.flush(zlib$1.Z_SYNC_FLUSH, () => {
- if (!this._deflate) {
- //
- // The deflate stream was closed while data was being processed.
- //
- return;
- }
-
- let data = bufferUtil.concat(
- this._deflate[kBuffers],
- this._deflate[kTotalLength]
- );
-
- if (fin) data = data.slice(0, data.length - 4);
-
- //
- // Ensure that the callback will not be called again in
- // `PerMessageDeflate#cleanup()`.
- //
- this._deflate[kCallback] = null;
-
- this._deflate[kTotalLength] = 0;
- this._deflate[kBuffers] = [];
-
- if (fin && this.params[`${endpoint}_no_context_takeover`]) {
- this._deflate.reset();
- }
-
- callback(null, data);
- });
- }
-}
-
-var permessageDeflate = PerMessageDeflate$4;
-
-/**
- * The listener of the `zlib.DeflateRaw` stream `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function deflateOnData(chunk) {
- this[kBuffers].push(chunk);
- this[kTotalLength] += chunk.length;
-}
-
-/**
- * The listener of the `zlib.InflateRaw` stream `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function inflateOnData(chunk) {
- this[kTotalLength] += chunk.length;
-
- if (
- this[kPerMessageDeflate]._maxPayload < 1 ||
- this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload
- ) {
- this[kBuffers].push(chunk);
- return;
- }
-
- this[kError] = new RangeError('Max payload size exceeded');
- this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';
- this[kError][kStatusCode$2] = 1009;
- this.removeListener('data', inflateOnData);
- this.reset();
-}
-
-/**
- * The listener of the `zlib.InflateRaw` stream `'error'` event.
- *
- * @param {Error} err The emitted error
- * @private
- */
-function inflateOnError(err) {
- //
- // There is no need to call `Zlib#close()` as the handle is automatically
- // closed when an error is emitted.
- //
- this[kPerMessageDeflate]._inflate = null;
- err[kStatusCode$2] = 1007;
- this[kCallback](err);
-}
-
-var validation = {exports: {}};
-
-/**
- * Checks if a status code is allowed in a close frame.
- *
- * @param {Number} code The status code
- * @return {Boolean} `true` if the status code is valid, else `false`
- * @public
- */
-function isValidStatusCode$2(code) {
- return (
- (code >= 1000 &&
- code <= 1014 &&
- code !== 1004 &&
- code !== 1005 &&
- code !== 1006) ||
- (code >= 3000 && code <= 4999)
- );
-}
-
-/**
- * Checks if a given buffer contains only correct UTF-8.
- * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by
- * Markus Kuhn.
- *
- * @param {Buffer} buf The buffer to check
- * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`
- * @public
- */
-function _isValidUTF8(buf) {
- const len = buf.length;
- let i = 0;
-
- while (i < len) {
- if ((buf[i] & 0x80) === 0) {
- // 0xxxxxxx
- i++;
- } else if ((buf[i] & 0xe0) === 0xc0) {
- // 110xxxxx 10xxxxxx
- if (
- i + 1 === len ||
- (buf[i + 1] & 0xc0) !== 0x80 ||
- (buf[i] & 0xfe) === 0xc0 // Overlong
- ) {
- return false;
- }
-
- i += 2;
- } else if ((buf[i] & 0xf0) === 0xe0) {
- // 1110xxxx 10xxxxxx 10xxxxxx
- if (
- i + 2 >= len ||
- (buf[i + 1] & 0xc0) !== 0x80 ||
- (buf[i + 2] & 0xc0) !== 0x80 ||
- (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong
- (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)
- ) {
- return false;
- }
-
- i += 3;
- } else if ((buf[i] & 0xf8) === 0xf0) {
- // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- if (
- i + 3 >= len ||
- (buf[i + 1] & 0xc0) !== 0x80 ||
- (buf[i + 2] & 0xc0) !== 0x80 ||
- (buf[i + 3] & 0xc0) !== 0x80 ||
- (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong
- (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||
- buf[i] > 0xf4 // > U+10FFFF
- ) {
- return false;
- }
-
- i += 4;
- } else {
- return false;
- }
- }
-
- return true;
-}
-
-try {
- let isValidUTF8 = require('utf-8-validate');
-
- /* istanbul ignore if */
- if (typeof isValidUTF8 === 'object') {
- isValidUTF8 = isValidUTF8.Validation.isValidUTF8; // utf-8-validate@<3.0.0
- }
-
- validation.exports = {
- isValidStatusCode: isValidStatusCode$2,
- isValidUTF8(buf) {
- return buf.length < 150 ? _isValidUTF8(buf) : isValidUTF8(buf);
- }
- };
-} catch (e) /* istanbul ignore next */ {
- validation.exports = {
- isValidStatusCode: isValidStatusCode$2,
- isValidUTF8: _isValidUTF8
- };
-}
-
-const { Writable: Writable$1 } = require$$0__default$4;
-
-const PerMessageDeflate$3 = permessageDeflate;
-const {
- BINARY_TYPES: BINARY_TYPES$1,
- EMPTY_BUFFER: EMPTY_BUFFER$2,
- kStatusCode: kStatusCode$1,
- kWebSocket: kWebSocket$2
-} = constants;
-const { concat, toArrayBuffer, unmask } = bufferUtil$1.exports;
-const { isValidStatusCode: isValidStatusCode$1, isValidUTF8 } = validation.exports;
-
-const GET_INFO = 0;
-const GET_PAYLOAD_LENGTH_16 = 1;
-const GET_PAYLOAD_LENGTH_64 = 2;
-const GET_MASK = 3;
-const GET_DATA = 4;
-const INFLATING = 5;
-
-/**
- * HyBi Receiver implementation.
- *
- * @extends Writable
- */
-class Receiver$1 extends Writable$1 {
- /**
- * Creates a Receiver instance.
- *
- * @param {String} [binaryType=nodebuffer] The type for binary data
- * @param {Object} [extensions] An object containing the negotiated extensions
- * @param {Boolean} [isServer=false] Specifies whether to operate in client or
- * server mode
- * @param {Number} [maxPayload=0] The maximum allowed message length
- */
- constructor(binaryType, extensions, isServer, maxPayload) {
- super();
-
- this._binaryType = binaryType || BINARY_TYPES$1[0];
- this[kWebSocket$2] = undefined;
- this._extensions = extensions || {};
- this._isServer = !!isServer;
- this._maxPayload = maxPayload | 0;
-
- this._bufferedBytes = 0;
- this._buffers = [];
-
- this._compressed = false;
- this._payloadLength = 0;
- this._mask = undefined;
- this._fragmented = 0;
- this._masked = false;
- this._fin = false;
- this._opcode = 0;
-
- this._totalPayloadLength = 0;
- this._messageLength = 0;
- this._fragments = [];
-
- this._state = GET_INFO;
- this._loop = false;
- }
-
- /**
- * Implements `Writable.prototype._write()`.
- *
- * @param {Buffer} chunk The chunk of data to write
- * @param {String} encoding The character encoding of `chunk`
- * @param {Function} cb Callback
- * @private
- */
- _write(chunk, encoding, cb) {
- if (this._opcode === 0x08 && this._state == GET_INFO) return cb();
-
- this._bufferedBytes += chunk.length;
- this._buffers.push(chunk);
- this.startLoop(cb);
- }
-
- /**
- * Consumes `n` bytes from the buffered data.
- *
- * @param {Number} n The number of bytes to consume
- * @return {Buffer} The consumed bytes
- * @private
- */
- consume(n) {
- this._bufferedBytes -= n;
-
- if (n === this._buffers[0].length) return this._buffers.shift();
-
- if (n < this._buffers[0].length) {
- const buf = this._buffers[0];
- this._buffers[0] = buf.slice(n);
- return buf.slice(0, n);
- }
-
- const dst = Buffer.allocUnsafe(n);
-
- do {
- const buf = this._buffers[0];
- const offset = dst.length - n;
-
- if (n >= buf.length) {
- dst.set(this._buffers.shift(), offset);
- } else {
- dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);
- this._buffers[0] = buf.slice(n);
- }
-
- n -= buf.length;
- } while (n > 0);
-
- return dst;
- }
-
- /**
- * Starts the parsing loop.
- *
- * @param {Function} cb Callback
- * @private
- */
- startLoop(cb) {
- let err;
- this._loop = true;
-
- do {
- switch (this._state) {
- case GET_INFO:
- err = this.getInfo();
- break;
- case GET_PAYLOAD_LENGTH_16:
- err = this.getPayloadLength16();
- break;
- case GET_PAYLOAD_LENGTH_64:
- err = this.getPayloadLength64();
- break;
- case GET_MASK:
- this.getMask();
- break;
- case GET_DATA:
- err = this.getData(cb);
- break;
- default:
- // `INFLATING`
- this._loop = false;
- return;
- }
- } while (this._loop);
-
- cb(err);
- }
-
- /**
- * Reads the first two bytes of a frame.
- *
- * @return {(RangeError|undefined)} A possible error
- * @private
- */
- getInfo() {
- if (this._bufferedBytes < 2) {
- this._loop = false;
- return;
- }
-
- const buf = this.consume(2);
-
- if ((buf[0] & 0x30) !== 0x00) {
- this._loop = false;
- return error$2(
- RangeError,
- 'RSV2 and RSV3 must be clear',
- true,
- 1002,
- 'WS_ERR_UNEXPECTED_RSV_2_3'
- );
- }
-
- const compressed = (buf[0] & 0x40) === 0x40;
-
- if (compressed && !this._extensions[PerMessageDeflate$3.extensionName]) {
- this._loop = false;
- return error$2(
- RangeError,
- 'RSV1 must be clear',
- true,
- 1002,
- 'WS_ERR_UNEXPECTED_RSV_1'
- );
- }
-
- this._fin = (buf[0] & 0x80) === 0x80;
- this._opcode = buf[0] & 0x0f;
- this._payloadLength = buf[1] & 0x7f;
-
- if (this._opcode === 0x00) {
- if (compressed) {
- this._loop = false;
- return error$2(
- RangeError,
- 'RSV1 must be clear',
- true,
- 1002,
- 'WS_ERR_UNEXPECTED_RSV_1'
- );
- }
-
- if (!this._fragmented) {
- this._loop = false;
- return error$2(
- RangeError,
- 'invalid opcode 0',
- true,
- 1002,
- 'WS_ERR_INVALID_OPCODE'
- );
- }
-
- this._opcode = this._fragmented;
- } else if (this._opcode === 0x01 || this._opcode === 0x02) {
- if (this._fragmented) {
- this._loop = false;
- return error$2(
- RangeError,
- `invalid opcode ${this._opcode}`,
- true,
- 1002,
- 'WS_ERR_INVALID_OPCODE'
- );
- }
-
- this._compressed = compressed;
- } else if (this._opcode > 0x07 && this._opcode < 0x0b) {
- if (!this._fin) {
- this._loop = false;
- return error$2(
- RangeError,
- 'FIN must be set',
- true,
- 1002,
- 'WS_ERR_EXPECTED_FIN'
- );
- }
-
- if (compressed) {
- this._loop = false;
- return error$2(
- RangeError,
- 'RSV1 must be clear',
- true,
- 1002,
- 'WS_ERR_UNEXPECTED_RSV_1'
- );
- }
-
- if (this._payloadLength > 0x7d) {
- this._loop = false;
- return error$2(
- RangeError,
- `invalid payload length ${this._payloadLength}`,
- true,
- 1002,
- 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'
- );
- }
- } else {
- this._loop = false;
- return error$2(
- RangeError,
- `invalid opcode ${this._opcode}`,
- true,
- 1002,
- 'WS_ERR_INVALID_OPCODE'
- );
- }
-
- if (!this._fin && !this._fragmented) this._fragmented = this._opcode;
- this._masked = (buf[1] & 0x80) === 0x80;
-
- if (this._isServer) {
- if (!this._masked) {
- this._loop = false;
- return error$2(
- RangeError,
- 'MASK must be set',
- true,
- 1002,
- 'WS_ERR_EXPECTED_MASK'
- );
- }
- } else if (this._masked) {
- this._loop = false;
- return error$2(
- RangeError,
- 'MASK must be clear',
- true,
- 1002,
- 'WS_ERR_UNEXPECTED_MASK'
- );
- }
-
- if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;
- else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;
- else return this.haveLength();
- }
-
- /**
- * Gets extended payload length (7+16).
- *
- * @return {(RangeError|undefined)} A possible error
- * @private
- */
- getPayloadLength16() {
- if (this._bufferedBytes < 2) {
- this._loop = false;
- return;
- }
-
- this._payloadLength = this.consume(2).readUInt16BE(0);
- return this.haveLength();
- }
-
- /**
- * Gets extended payload length (7+64).
- *
- * @return {(RangeError|undefined)} A possible error
- * @private
- */
- getPayloadLength64() {
- if (this._bufferedBytes < 8) {
- this._loop = false;
- return;
- }
-
- const buf = this.consume(8);
- const num = buf.readUInt32BE(0);
-
- //
- // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned
- // if payload length is greater than this number.
- //
- if (num > Math.pow(2, 53 - 32) - 1) {
- this._loop = false;
- return error$2(
- RangeError,
- 'Unsupported WebSocket frame: payload length > 2^53 - 1',
- false,
- 1009,
- 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'
- );
- }
-
- this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);
- return this.haveLength();
- }
-
- /**
- * Payload length has been read.
- *
- * @return {(RangeError|undefined)} A possible error
- * @private
- */
- haveLength() {
- if (this._payloadLength && this._opcode < 0x08) {
- this._totalPayloadLength += this._payloadLength;
- if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {
- this._loop = false;
- return error$2(
- RangeError,
- 'Max payload size exceeded',
- false,
- 1009,
- 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'
- );
- }
- }
-
- if (this._masked) this._state = GET_MASK;
- else this._state = GET_DATA;
- }
-
- /**
- * Reads mask bytes.
- *
- * @private
- */
- getMask() {
- if (this._bufferedBytes < 4) {
- this._loop = false;
- return;
- }
-
- this._mask = this.consume(4);
- this._state = GET_DATA;
- }
-
- /**
- * Reads data bytes.
- *
- * @param {Function} cb Callback
- * @return {(Error|RangeError|undefined)} A possible error
- * @private
- */
- getData(cb) {
- let data = EMPTY_BUFFER$2;
-
- if (this._payloadLength) {
- if (this._bufferedBytes < this._payloadLength) {
- this._loop = false;
- return;
- }
-
- data = this.consume(this._payloadLength);
- if (this._masked) unmask(data, this._mask);
- }
-
- if (this._opcode > 0x07) return this.controlMessage(data);
-
- if (this._compressed) {
- this._state = INFLATING;
- this.decompress(data, cb);
- return;
- }
-
- if (data.length) {
- //
- // This message is not compressed so its lenght is the sum of the payload
- // length of all fragments.
- //
- this._messageLength = this._totalPayloadLength;
- this._fragments.push(data);
- }
-
- return this.dataMessage();
- }
-
- /**
- * Decompresses data.
- *
- * @param {Buffer} data Compressed data
- * @param {Function} cb Callback
- * @private
- */
- decompress(data, cb) {
- const perMessageDeflate = this._extensions[PerMessageDeflate$3.extensionName];
-
- perMessageDeflate.decompress(data, this._fin, (err, buf) => {
- if (err) return cb(err);
-
- if (buf.length) {
- this._messageLength += buf.length;
- if (this._messageLength > this._maxPayload && this._maxPayload > 0) {
- return cb(
- error$2(
- RangeError,
- 'Max payload size exceeded',
- false,
- 1009,
- 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'
- )
- );
- }
-
- this._fragments.push(buf);
- }
-
- const er = this.dataMessage();
- if (er) return cb(er);
-
- this.startLoop(cb);
- });
- }
-
- /**
- * Handles a data message.
- *
- * @return {(Error|undefined)} A possible error
- * @private
- */
- dataMessage() {
- if (this._fin) {
- const messageLength = this._messageLength;
- const fragments = this._fragments;
-
- this._totalPayloadLength = 0;
- this._messageLength = 0;
- this._fragmented = 0;
- this._fragments = [];
-
- if (this._opcode === 2) {
- let data;
-
- if (this._binaryType === 'nodebuffer') {
- data = concat(fragments, messageLength);
- } else if (this._binaryType === 'arraybuffer') {
- data = toArrayBuffer(concat(fragments, messageLength));
- } else {
- data = fragments;
- }
-
- this.emit('message', data);
- } else {
- const buf = concat(fragments, messageLength);
-
- if (!isValidUTF8(buf)) {
- this._loop = false;
- return error$2(
- Error,
- 'invalid UTF-8 sequence',
- true,
- 1007,
- 'WS_ERR_INVALID_UTF8'
- );
- }
-
- this.emit('message', buf.toString());
- }
- }
-
- this._state = GET_INFO;
- }
-
- /**
- * Handles a control message.
- *
- * @param {Buffer} data Data to handle
- * @return {(Error|RangeError|undefined)} A possible error
- * @private
- */
- controlMessage(data) {
- if (this._opcode === 0x08) {
- this._loop = false;
-
- if (data.length === 0) {
- this.emit('conclude', 1005, '');
- this.end();
- } else if (data.length === 1) {
- return error$2(
- RangeError,
- 'invalid payload length 1',
- true,
- 1002,
- 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'
- );
- } else {
- const code = data.readUInt16BE(0);
-
- if (!isValidStatusCode$1(code)) {
- return error$2(
- RangeError,
- `invalid status code ${code}`,
- true,
- 1002,
- 'WS_ERR_INVALID_CLOSE_CODE'
- );
- }
-
- const buf = data.slice(2);
-
- if (!isValidUTF8(buf)) {
- return error$2(
- Error,
- 'invalid UTF-8 sequence',
- true,
- 1007,
- 'WS_ERR_INVALID_UTF8'
- );
- }
-
- this.emit('conclude', code, buf.toString());
- this.end();
- }
- } else if (this._opcode === 0x09) {
- this.emit('ping', data);
- } else {
- this.emit('pong', data);
- }
-
- this._state = GET_INFO;
- }
-}
-
-var receiver = Receiver$1;
-
-/**
- * Builds an error object.
- *
- * @param {function(new:Error|RangeError)} ErrorCtor The error constructor
- * @param {String} message The error message
- * @param {Boolean} prefix Specifies whether or not to add a default prefix to
- * `message`
- * @param {Number} statusCode The status code
- * @param {String} errorCode The exposed error code
- * @return {(Error|RangeError)} The error
- * @private
- */
-function error$2(ErrorCtor, message, prefix, statusCode, errorCode) {
- const err = new ErrorCtor(
- prefix ? `Invalid WebSocket frame: ${message}` : message
- );
-
- Error.captureStackTrace(err, error$2);
- err.code = errorCode;
- err[kStatusCode$1] = statusCode;
- return err;
-}
-
-/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^net|tls$" }] */
-const { randomFillSync } = require$$1__default$2;
-
-const PerMessageDeflate$2 = permessageDeflate;
-const { EMPTY_BUFFER: EMPTY_BUFFER$1 } = constants;
-const { isValidStatusCode } = validation.exports;
-const { mask: applyMask, toBuffer: toBuffer$2 } = bufferUtil$1.exports;
-
-const mask = Buffer.alloc(4);
-
-/**
- * HyBi Sender implementation.
- */
-class Sender$1 {
- /**
- * Creates a Sender instance.
- *
- * @param {(net.Socket|tls.Socket)} socket The connection socket
- * @param {Object} [extensions] An object containing the negotiated extensions
- */
- constructor(socket, extensions) {
- this._extensions = extensions || {};
- this._socket = socket;
-
- this._firstFragment = true;
- this._compress = false;
-
- this._bufferedBytes = 0;
- this._deflating = false;
- this._queue = [];
- }
-
- /**
- * Frames a piece of data according to the HyBi WebSocket protocol.
- *
- * @param {Buffer} data The data to frame
- * @param {Object} options Options object
- * @param {Number} options.opcode The opcode
- * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be
- * modified
- * @param {Boolean} [options.fin=false] Specifies whether or not to set the
- * FIN bit
- * @param {Boolean} [options.mask=false] Specifies whether or not to mask
- * `data`
- * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the
- * RSV1 bit
- * @return {Buffer[]} The framed data as a list of `Buffer` instances
- * @public
- */
- static frame(data, options) {
- const merge = options.mask && options.readOnly;
- let offset = options.mask ? 6 : 2;
- let payloadLength = data.length;
-
- if (data.length >= 65536) {
- offset += 8;
- payloadLength = 127;
- } else if (data.length > 125) {
- offset += 2;
- payloadLength = 126;
- }
-
- const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);
-
- target[0] = options.fin ? options.opcode | 0x80 : options.opcode;
- if (options.rsv1) target[0] |= 0x40;
-
- target[1] = payloadLength;
-
- if (payloadLength === 126) {
- target.writeUInt16BE(data.length, 2);
- } else if (payloadLength === 127) {
- target.writeUInt32BE(0, 2);
- target.writeUInt32BE(data.length, 6);
- }
-
- if (!options.mask) return [target, data];
-
- randomFillSync(mask, 0, 4);
-
- target[1] |= 0x80;
- target[offset - 4] = mask[0];
- target[offset - 3] = mask[1];
- target[offset - 2] = mask[2];
- target[offset - 1] = mask[3];
-
- if (merge) {
- applyMask(data, mask, target, offset, data.length);
- return [target];
- }
-
- applyMask(data, mask, data, 0, data.length);
- return [target, data];
- }
-
- /**
- * Sends a close message to the other peer.
- *
- * @param {Number} [code] The status code component of the body
- * @param {String} [data] The message component of the body
- * @param {Boolean} [mask=false] Specifies whether or not to mask the message
- * @param {Function} [cb] Callback
- * @public
- */
- close(code, data, mask, cb) {
- let buf;
-
- if (code === undefined) {
- buf = EMPTY_BUFFER$1;
- } else if (typeof code !== 'number' || !isValidStatusCode(code)) {
- throw new TypeError('First argument must be a valid error code number');
- } else if (data === undefined || data === '') {
- buf = Buffer.allocUnsafe(2);
- buf.writeUInt16BE(code, 0);
- } else {
- const length = Buffer.byteLength(data);
-
- if (length > 123) {
- throw new RangeError('The message must not be greater than 123 bytes');
- }
-
- buf = Buffer.allocUnsafe(2 + length);
- buf.writeUInt16BE(code, 0);
- buf.write(data, 2);
- }
-
- if (this._deflating) {
- this.enqueue([this.doClose, buf, mask, cb]);
- } else {
- this.doClose(buf, mask, cb);
- }
- }
-
- /**
- * Frames and sends a close message.
- *
- * @param {Buffer} data The message to send
- * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
- * @param {Function} [cb] Callback
- * @private
- */
- doClose(data, mask, cb) {
- this.sendFrame(
- Sender$1.frame(data, {
- fin: true,
- rsv1: false,
- opcode: 0x08,
- mask,
- readOnly: false
- }),
- cb
- );
- }
-
- /**
- * Sends a ping message to the other peer.
- *
- * @param {*} data The message to send
- * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
- * @param {Function} [cb] Callback
- * @public
- */
- ping(data, mask, cb) {
- const buf = toBuffer$2(data);
-
- if (buf.length > 125) {
- throw new RangeError('The data size must not be greater than 125 bytes');
- }
-
- if (this._deflating) {
- this.enqueue([this.doPing, buf, mask, toBuffer$2.readOnly, cb]);
- } else {
- this.doPing(buf, mask, toBuffer$2.readOnly, cb);
- }
- }
-
- /**
- * Frames and sends a ping message.
- *
- * @param {Buffer} data The message to send
- * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
- * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified
- * @param {Function} [cb] Callback
- * @private
- */
- doPing(data, mask, readOnly, cb) {
- this.sendFrame(
- Sender$1.frame(data, {
- fin: true,
- rsv1: false,
- opcode: 0x09,
- mask,
- readOnly
- }),
- cb
- );
- }
-
- /**
- * Sends a pong message to the other peer.
- *
- * @param {*} data The message to send
- * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
- * @param {Function} [cb] Callback
- * @public
- */
- pong(data, mask, cb) {
- const buf = toBuffer$2(data);
-
- if (buf.length > 125) {
- throw new RangeError('The data size must not be greater than 125 bytes');
- }
-
- if (this._deflating) {
- this.enqueue([this.doPong, buf, mask, toBuffer$2.readOnly, cb]);
- } else {
- this.doPong(buf, mask, toBuffer$2.readOnly, cb);
- }
- }
-
- /**
- * Frames and sends a pong message.
- *
- * @param {Buffer} data The message to send
- * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
- * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified
- * @param {Function} [cb] Callback
- * @private
- */
- doPong(data, mask, readOnly, cb) {
- this.sendFrame(
- Sender$1.frame(data, {
- fin: true,
- rsv1: false,
- opcode: 0x0a,
- mask,
- readOnly
- }),
- cb
- );
- }
-
- /**
- * Sends a data message to the other peer.
- *
- * @param {*} data The message to send
- * @param {Object} options Options object
- * @param {Boolean} [options.compress=false] Specifies whether or not to
- * compress `data`
- * @param {Boolean} [options.binary=false] Specifies whether `data` is binary
- * or text
- * @param {Boolean} [options.fin=false] Specifies whether the fragment is the
- * last one
- * @param {Boolean} [options.mask=false] Specifies whether or not to mask
- * `data`
- * @param {Function} [cb] Callback
- * @public
- */
- send(data, options, cb) {
- const buf = toBuffer$2(data);
- const perMessageDeflate = this._extensions[PerMessageDeflate$2.extensionName];
- let opcode = options.binary ? 2 : 1;
- let rsv1 = options.compress;
-
- if (this._firstFragment) {
- this._firstFragment = false;
- if (rsv1 && perMessageDeflate) {
- rsv1 = buf.length >= perMessageDeflate._threshold;
- }
- this._compress = rsv1;
- } else {
- rsv1 = false;
- opcode = 0;
- }
-
- if (options.fin) this._firstFragment = true;
-
- if (perMessageDeflate) {
- const opts = {
- fin: options.fin,
- rsv1,
- opcode,
- mask: options.mask,
- readOnly: toBuffer$2.readOnly
- };
-
- if (this._deflating) {
- this.enqueue([this.dispatch, buf, this._compress, opts, cb]);
- } else {
- this.dispatch(buf, this._compress, opts, cb);
- }
- } else {
- this.sendFrame(
- Sender$1.frame(buf, {
- fin: options.fin,
- rsv1: false,
- opcode,
- mask: options.mask,
- readOnly: toBuffer$2.readOnly
- }),
- cb
- );
- }
- }
-
- /**
- * Dispatches a data message.
- *
- * @param {Buffer} data The message to send
- * @param {Boolean} [compress=false] Specifies whether or not to compress
- * `data`
- * @param {Object} options Options object
- * @param {Number} options.opcode The opcode
- * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be
- * modified
- * @param {Boolean} [options.fin=false] Specifies whether or not to set the
- * FIN bit
- * @param {Boolean} [options.mask=false] Specifies whether or not to mask
- * `data`
- * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the
- * RSV1 bit
- * @param {Function} [cb] Callback
- * @private
- */
- dispatch(data, compress, options, cb) {
- if (!compress) {
- this.sendFrame(Sender$1.frame(data, options), cb);
- return;
- }
-
- const perMessageDeflate = this._extensions[PerMessageDeflate$2.extensionName];
-
- this._bufferedBytes += data.length;
- this._deflating = true;
- perMessageDeflate.compress(data, options.fin, (_, buf) => {
- if (this._socket.destroyed) {
- const err = new Error(
- 'The socket was closed while data was being compressed'
- );
-
- if (typeof cb === 'function') cb(err);
-
- for (let i = 0; i < this._queue.length; i++) {
- const callback = this._queue[i][4];
-
- if (typeof callback === 'function') callback(err);
- }
-
- return;
- }
-
- this._bufferedBytes -= data.length;
- this._deflating = false;
- options.readOnly = false;
- this.sendFrame(Sender$1.frame(buf, options), cb);
- this.dequeue();
- });
- }
-
- /**
- * Executes queued send operations.
- *
- * @private
- */
- dequeue() {
- while (!this._deflating && this._queue.length) {
- const params = this._queue.shift();
-
- this._bufferedBytes -= params[1].length;
- Reflect.apply(params[0], this, params.slice(1));
- }
- }
-
- /**
- * Enqueues a send operation.
- *
- * @param {Array} params Send operation parameters.
- * @private
- */
- enqueue(params) {
- this._bufferedBytes += params[1].length;
- this._queue.push(params);
- }
-
- /**
- * Sends a frame.
- *
- * @param {Buffer[]} list The frame to send
- * @param {Function} [cb] Callback
- * @private
- */
- sendFrame(list, cb) {
- if (list.length === 2) {
- this._socket.cork();
- this._socket.write(list[0]);
- this._socket.write(list[1], cb);
- this._socket.uncork();
- } else {
- this._socket.write(list[0], cb);
- }
- }
-}
-
-var sender = Sender$1;
-
-/**
- * Class representing an event.
- *
- * @private
- */
-class Event {
- /**
- * Create a new `Event`.
- *
- * @param {String} type The name of the event
- * @param {Object} target A reference to the target to which the event was
- * dispatched
- */
- constructor(type, target) {
- this.target = target;
- this.type = type;
- }
-}
-
-/**
- * Class representing a message event.
- *
- * @extends Event
- * @private
- */
-class MessageEvent extends Event {
- /**
- * Create a new `MessageEvent`.
- *
- * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data
- * @param {WebSocket} target A reference to the target to which the event was
- * dispatched
- */
- constructor(data, target) {
- super('message', target);
-
- this.data = data;
- }
-}
-
-/**
- * Class representing a close event.
- *
- * @extends Event
- * @private
- */
-class CloseEvent extends Event {
- /**
- * Create a new `CloseEvent`.
- *
- * @param {Number} code The status code explaining why the connection is being
- * closed
- * @param {String} reason A human-readable string explaining why the
- * connection is closing
- * @param {WebSocket} target A reference to the target to which the event was
- * dispatched
- */
- constructor(code, reason, target) {
- super('close', target);
-
- this.wasClean = target._closeFrameReceived && target._closeFrameSent;
- this.reason = reason;
- this.code = code;
- }
-}
-
-/**
- * Class representing an open event.
- *
- * @extends Event
- * @private
- */
-class OpenEvent extends Event {
- /**
- * Create a new `OpenEvent`.
- *
- * @param {WebSocket} target A reference to the target to which the event was
- * dispatched
- */
- constructor(target) {
- super('open', target);
- }
-}
-
-/**
- * Class representing an error event.
- *
- * @extends Event
- * @private
- */
-class ErrorEvent extends Event {
- /**
- * Create a new `ErrorEvent`.
- *
- * @param {Object} error The error that generated this event
- * @param {WebSocket} target A reference to the target to which the event was
- * dispatched
- */
- constructor(error, target) {
- super('error', target);
-
- this.message = error.message;
- this.error = error;
- }
-}
-
-/**
- * This provides methods for emulating the `EventTarget` interface. It's not
- * meant to be used directly.
- *
- * @mixin
- */
-const EventTarget = {
- /**
- * Register an event listener.
- *
- * @param {String} type A string representing the event type to listen for
- * @param {Function} listener The listener to add
- * @param {Object} [options] An options object specifies characteristics about
- * the event listener
- * @param {Boolean} [options.once=false] A `Boolean`` indicating that the
- * listener should be invoked at most once after being added. If `true`,
- * the listener would be automatically removed when invoked.
- * @public
- */
- addEventListener(type, listener, options) {
- if (typeof listener !== 'function') return;
-
- function onMessage(data) {
- listener.call(this, new MessageEvent(data, this));
- }
-
- function onClose(code, message) {
- listener.call(this, new CloseEvent(code, message, this));
- }
-
- function onError(error) {
- listener.call(this, new ErrorEvent(error, this));
- }
-
- function onOpen() {
- listener.call(this, new OpenEvent(this));
- }
-
- const method = options && options.once ? 'once' : 'on';
-
- if (type === 'message') {
- onMessage._listener = listener;
- this[method](type, onMessage);
- } else if (type === 'close') {
- onClose._listener = listener;
- this[method](type, onClose);
- } else if (type === 'error') {
- onError._listener = listener;
- this[method](type, onError);
- } else if (type === 'open') {
- onOpen._listener = listener;
- this[method](type, onOpen);
- } else {
- this[method](type, listener);
- }
- },
-
- /**
- * Remove an event listener.
- *
- * @param {String} type A string representing the event type to remove
- * @param {Function} listener The listener to remove
- * @public
- */
- removeEventListener(type, listener) {
- const listeners = this.listeners(type);
-
- for (let i = 0; i < listeners.length; i++) {
- if (listeners[i] === listener || listeners[i]._listener === listener) {
- this.removeListener(type, listeners[i]);
- }
- }
- }
-};
-
-var eventTarget = EventTarget;
-
-//
-// Allowed token characters:
-//
-// '!', '#', '$', '%', '&', ''', '*', '+', '-',
-// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'
-//
-// tokenChars[32] === 0 // ' '
-// tokenChars[33] === 1 // '!'
-// tokenChars[34] === 0 // '"'
-// ...
-//
-// prettier-ignore
-const tokenChars = [
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
- 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127
-];
-
-/**
- * Adds an offer to the map of extension offers or a parameter to the map of
- * parameters.
- *
- * @param {Object} dest The map of extension offers or parameters
- * @param {String} name The extension or parameter name
- * @param {(Object|Boolean|String)} elem The extension parameters or the
- * parameter value
- * @private
- */
-function push(dest, name, elem) {
- if (dest[name] === undefined) dest[name] = [elem];
- else dest[name].push(elem);
-}
-
-/**
- * Parses the `Sec-WebSocket-Extensions` header into an object.
- *
- * @param {String} header The field value of the header
- * @return {Object} The parsed object
- * @public
- */
-function parse$8(header) {
- const offers = Object.create(null);
-
- if (header === undefined || header === '') return offers;
-
- let params = Object.create(null);
- let mustUnescape = false;
- let isEscaping = false;
- let inQuotes = false;
- let extensionName;
- let paramName;
- let start = -1;
- let end = -1;
- let i = 0;
-
- for (; i < header.length; i++) {
- const code = header.charCodeAt(i);
-
- if (extensionName === undefined) {
- if (end === -1 && tokenChars[code] === 1) {
- if (start === -1) start = i;
- } else if (code === 0x20 /* ' ' */ || code === 0x09 /* '\t' */) {
- if (end === -1 && start !== -1) end = i;
- } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {
- if (start === -1) {
- throw new SyntaxError(`Unexpected character at index ${i}`);
- }
-
- if (end === -1) end = i;
- const name = header.slice(start, end);
- if (code === 0x2c) {
- push(offers, name, params);
- params = Object.create(null);
- } else {
- extensionName = name;
- }
-
- start = end = -1;
- } else {
- throw new SyntaxError(`Unexpected character at index ${i}`);
- }
- } else if (paramName === undefined) {
- if (end === -1 && tokenChars[code] === 1) {
- if (start === -1) start = i;
- } else if (code === 0x20 || code === 0x09) {
- if (end === -1 && start !== -1) end = i;
- } else if (code === 0x3b || code === 0x2c) {
- if (start === -1) {
- throw new SyntaxError(`Unexpected character at index ${i}`);
- }
-
- if (end === -1) end = i;
- push(params, header.slice(start, end), true);
- if (code === 0x2c) {
- push(offers, extensionName, params);
- params = Object.create(null);
- extensionName = undefined;
- }
-
- start = end = -1;
- } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {
- paramName = header.slice(start, i);
- start = end = -1;
- } else {
- throw new SyntaxError(`Unexpected character at index ${i}`);
- }
- } else {
- //
- // The value of a quoted-string after unescaping must conform to the
- // token ABNF, so only token characters are valid.
- // Ref: https://tools.ietf.org/html/rfc6455#section-9.1
- //
- if (isEscaping) {
- if (tokenChars[code] !== 1) {
- throw new SyntaxError(`Unexpected character at index ${i}`);
- }
- if (start === -1) start = i;
- else if (!mustUnescape) mustUnescape = true;
- isEscaping = false;
- } else if (inQuotes) {
- if (tokenChars[code] === 1) {
- if (start === -1) start = i;
- } else if (code === 0x22 /* '"' */ && start !== -1) {
- inQuotes = false;
- end = i;
- } else if (code === 0x5c /* '\' */) {
- isEscaping = true;
- } else {
- throw new SyntaxError(`Unexpected character at index ${i}`);
- }
- } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {
- inQuotes = true;
- } else if (end === -1 && tokenChars[code] === 1) {
- if (start === -1) start = i;
- } else if (start !== -1 && (code === 0x20 || code === 0x09)) {
- if (end === -1) end = i;
- } else if (code === 0x3b || code === 0x2c) {
- if (start === -1) {
- throw new SyntaxError(`Unexpected character at index ${i}`);
- }
-
- if (end === -1) end = i;
- let value = header.slice(start, end);
- if (mustUnescape) {
- value = value.replace(/\\/g, '');
- mustUnescape = false;
- }
- push(params, paramName, value);
- if (code === 0x2c) {
- push(offers, extensionName, params);
- params = Object.create(null);
- extensionName = undefined;
- }
-
- paramName = undefined;
- start = end = -1;
- } else {
- throw new SyntaxError(`Unexpected character at index ${i}`);
- }
- }
- }
-
- if (start === -1 || inQuotes) {
- throw new SyntaxError('Unexpected end of input');
- }
-
- if (end === -1) end = i;
- const token = header.slice(start, end);
- if (extensionName === undefined) {
- push(offers, token, params);
- } else {
- if (paramName === undefined) {
- push(params, token, true);
- } else if (mustUnescape) {
- push(params, paramName, token.replace(/\\/g, ''));
- } else {
- push(params, paramName, token);
- }
- push(offers, extensionName, params);
- }
-
- return offers;
-}
-
-/**
- * Builds the `Sec-WebSocket-Extensions` header field value.
- *
- * @param {Object} extensions The map of extensions and parameters to format
- * @return {String} A string representing the given object
- * @public
- */
-function format$3(extensions) {
- return Object.keys(extensions)
- .map((extension) => {
- let configurations = extensions[extension];
- if (!Array.isArray(configurations)) configurations = [configurations];
- return configurations
- .map((params) => {
- return [extension]
- .concat(
- Object.keys(params).map((k) => {
- let values = params[k];
- if (!Array.isArray(values)) values = [values];
- return values
- .map((v) => (v === true ? k : `${k}=${v}`))
- .join('; ');
- })
- )
- .join('; ');
- })
- .join(', ');
- })
- .join(', ');
-}
-
-var extension = { format: format$3, parse: parse$8 };
-
-/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Readable$" }] */
-
-const EventEmitter$1 = require$$0__default$5;
-const https$2 = require$$1__default$3;
-const http$3 = require$$1__default$1;
-const net = require$$3__default;
-const tls = require$$4__default;
-const { randomBytes, createHash: createHash$1 } = require$$1__default$2;
-const { URL: URL$2 } = require$$0__default$6;
-
-const PerMessageDeflate$1 = permessageDeflate;
-const Receiver = receiver;
-const Sender = sender;
-const {
- BINARY_TYPES,
- EMPTY_BUFFER,
- GUID: GUID$1,
- kStatusCode,
- kWebSocket: kWebSocket$1,
- NOOP
-} = constants;
-const { addEventListener, removeEventListener } = eventTarget;
-const { format: format$2, parse: parse$7 } = extension;
-const { toBuffer: toBuffer$1 } = bufferUtil$1.exports;
-
-const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
-const protocolVersions = [8, 13];
-const closeTimeout = 30 * 1000;
-
-/**
- * Class representing a WebSocket.
- *
- * @extends EventEmitter
- */
-class WebSocket$2 extends EventEmitter$1 {
- /**
- * Create a new `WebSocket`.
- *
- * @param {(String|URL)} address The URL to which to connect
- * @param {(String|String[])} [protocols] The subprotocols
- * @param {Object} [options] Connection options
- */
- constructor(address, protocols, options) {
- super();
-
- this._binaryType = BINARY_TYPES[0];
- this._closeCode = 1006;
- this._closeFrameReceived = false;
- this._closeFrameSent = false;
- this._closeMessage = '';
- this._closeTimer = null;
- this._extensions = {};
- this._protocol = '';
- this._readyState = WebSocket$2.CONNECTING;
- this._receiver = null;
- this._sender = null;
- this._socket = null;
-
- if (address !== null) {
- this._bufferedAmount = 0;
- this._isServer = false;
- this._redirects = 0;
-
- if (Array.isArray(protocols)) {
- protocols = protocols.join(', ');
- } else if (typeof protocols === 'object' && protocols !== null) {
- options = protocols;
- protocols = undefined;
- }
-
- initAsClient(this, address, protocols, options);
- } else {
- this._isServer = true;
- }
- }
-
- /**
- * This deviates from the WHATWG interface since ws doesn't support the
- * required default "blob" type (instead we define a custom "nodebuffer"
- * type).
- *
- * @type {String}
- */
- get binaryType() {
- return this._binaryType;
- }
-
- set binaryType(type) {
- if (!BINARY_TYPES.includes(type)) return;
-
- this._binaryType = type;
-
- //
- // Allow to change `binaryType` on the fly.
- //
- if (this._receiver) this._receiver._binaryType = type;
- }
-
- /**
- * @type {Number}
- */
- get bufferedAmount() {
- if (!this._socket) return this._bufferedAmount;
-
- return this._socket._writableState.length + this._sender._bufferedBytes;
- }
-
- /**
- * @type {String}
- */
- get extensions() {
- return Object.keys(this._extensions).join();
- }
-
- /**
- * @type {Function}
- */
- /* istanbul ignore next */
- get onclose() {
- return undefined;
- }
-
- /* istanbul ignore next */
- set onclose(listener) {}
-
- /**
- * @type {Function}
- */
- /* istanbul ignore next */
- get onerror() {
- return undefined;
- }
-
- /* istanbul ignore next */
- set onerror(listener) {}
-
- /**
- * @type {Function}
- */
- /* istanbul ignore next */
- get onopen() {
- return undefined;
- }
-
- /* istanbul ignore next */
- set onopen(listener) {}
-
- /**
- * @type {Function}
- */
- /* istanbul ignore next */
- get onmessage() {
- return undefined;
- }
-
- /* istanbul ignore next */
- set onmessage(listener) {}
-
- /**
- * @type {String}
- */
- get protocol() {
- return this._protocol;
- }
-
- /**
- * @type {Number}
- */
- get readyState() {
- return this._readyState;
- }
-
- /**
- * @type {String}
- */
- get url() {
- return this._url;
- }
-
- /**
- * Set up the socket and the internal resources.
- *
- * @param {(net.Socket|tls.Socket)} socket The network socket between the
- * server and client
- * @param {Buffer} head The first packet of the upgraded stream
- * @param {Number} [maxPayload=0] The maximum allowed message size
- * @private
- */
- setSocket(socket, head, maxPayload) {
- const receiver = new Receiver(
- this.binaryType,
- this._extensions,
- this._isServer,
- maxPayload
- );
-
- this._sender = new Sender(socket, this._extensions);
- this._receiver = receiver;
- this._socket = socket;
-
- receiver[kWebSocket$1] = this;
- socket[kWebSocket$1] = this;
-
- receiver.on('conclude', receiverOnConclude);
- receiver.on('drain', receiverOnDrain);
- receiver.on('error', receiverOnError);
- receiver.on('message', receiverOnMessage);
- receiver.on('ping', receiverOnPing);
- receiver.on('pong', receiverOnPong);
-
- socket.setTimeout(0);
- socket.setNoDelay();
-
- if (head.length > 0) socket.unshift(head);
-
- socket.on('close', socketOnClose);
- socket.on('data', socketOnData);
- socket.on('end', socketOnEnd);
- socket.on('error', socketOnError$1);
-
- this._readyState = WebSocket$2.OPEN;
- this.emit('open');
- }
-
- /**
- * Emit the `'close'` event.
- *
- * @private
- */
- emitClose() {
- if (!this._socket) {
- this._readyState = WebSocket$2.CLOSED;
- this.emit('close', this._closeCode, this._closeMessage);
- return;
- }
-
- if (this._extensions[PerMessageDeflate$1.extensionName]) {
- this._extensions[PerMessageDeflate$1.extensionName].cleanup();
- }
-
- this._receiver.removeAllListeners();
- this._readyState = WebSocket$2.CLOSED;
- this.emit('close', this._closeCode, this._closeMessage);
- }
-
- /**
- * Start a closing handshake.
- *
- * +----------+ +-----------+ +----------+
- * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -
- * | +----------+ +-----------+ +----------+ |
- * +----------+ +-----------+ |
- * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING
- * +----------+ +-----------+ |
- * | | | +---+ |
- * +------------------------+-->|fin| - - - -
- * | +---+ | +---+
- * - - - - -|fin|<---------------------+
- * +---+
- *
- * @param {Number} [code] Status code explaining why the connection is closing
- * @param {String} [data] A string explaining why the connection is closing
- * @public
- */
- close(code, data) {
- if (this.readyState === WebSocket$2.CLOSED) return;
- if (this.readyState === WebSocket$2.CONNECTING) {
- const msg = 'WebSocket was closed before the connection was established';
- return abortHandshake$1(this, this._req, msg);
- }
-
- if (this.readyState === WebSocket$2.CLOSING) {
- if (
- this._closeFrameSent &&
- (this._closeFrameReceived || this._receiver._writableState.errorEmitted)
- ) {
- this._socket.end();
- }
-
- return;
- }
-
- this._readyState = WebSocket$2.CLOSING;
- this._sender.close(code, data, !this._isServer, (err) => {
- //
- // This error is handled by the `'error'` listener on the socket. We only
- // want to know if the close frame has been sent here.
- //
- if (err) return;
-
- this._closeFrameSent = true;
-
- if (
- this._closeFrameReceived ||
- this._receiver._writableState.errorEmitted
- ) {
- this._socket.end();
- }
- });
-
- //
- // Specify a timeout for the closing handshake to complete.
- //
- this._closeTimer = setTimeout(
- this._socket.destroy.bind(this._socket),
- closeTimeout
- );
- }
-
- /**
- * Send a ping.
- *
- * @param {*} [data] The data to send
- * @param {Boolean} [mask] Indicates whether or not to mask `data`
- * @param {Function} [cb] Callback which is executed when the ping is sent
- * @public
- */
- ping(data, mask, cb) {
- if (this.readyState === WebSocket$2.CONNECTING) {
- throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
- }
-
- if (typeof data === 'function') {
- cb = data;
- data = mask = undefined;
- } else if (typeof mask === 'function') {
- cb = mask;
- mask = undefined;
- }
-
- if (typeof data === 'number') data = data.toString();
-
- if (this.readyState !== WebSocket$2.OPEN) {
- sendAfterClose(this, data, cb);
- return;
- }
-
- if (mask === undefined) mask = !this._isServer;
- this._sender.ping(data || EMPTY_BUFFER, mask, cb);
- }
-
- /**
- * Send a pong.
- *
- * @param {*} [data] The data to send
- * @param {Boolean} [mask] Indicates whether or not to mask `data`
- * @param {Function} [cb] Callback which is executed when the pong is sent
- * @public
- */
- pong(data, mask, cb) {
- if (this.readyState === WebSocket$2.CONNECTING) {
- throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
- }
-
- if (typeof data === 'function') {
- cb = data;
- data = mask = undefined;
- } else if (typeof mask === 'function') {
- cb = mask;
- mask = undefined;
- }
-
- if (typeof data === 'number') data = data.toString();
-
- if (this.readyState !== WebSocket$2.OPEN) {
- sendAfterClose(this, data, cb);
- return;
- }
-
- if (mask === undefined) mask = !this._isServer;
- this._sender.pong(data || EMPTY_BUFFER, mask, cb);
- }
-
- /**
- * Send a data message.
- *
- * @param {*} data The message to send
- * @param {Object} [options] Options object
- * @param {Boolean} [options.compress] Specifies whether or not to compress
- * `data`
- * @param {Boolean} [options.binary] Specifies whether `data` is binary or
- * text
- * @param {Boolean} [options.fin=true] Specifies whether the fragment is the
- * last one
- * @param {Boolean} [options.mask] Specifies whether or not to mask `data`
- * @param {Function} [cb] Callback which is executed when data is written out
- * @public
- */
- send(data, options, cb) {
- if (this.readyState === WebSocket$2.CONNECTING) {
- throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
- }
-
- if (typeof options === 'function') {
- cb = options;
- options = {};
- }
-
- if (typeof data === 'number') data = data.toString();
-
- if (this.readyState !== WebSocket$2.OPEN) {
- sendAfterClose(this, data, cb);
- return;
- }
-
- const opts = {
- binary: typeof data !== 'string',
- mask: !this._isServer,
- compress: true,
- fin: true,
- ...options
- };
-
- if (!this._extensions[PerMessageDeflate$1.extensionName]) {
- opts.compress = false;
- }
-
- this._sender.send(data || EMPTY_BUFFER, opts, cb);
- }
-
- /**
- * Forcibly close the connection.
- *
- * @public
- */
- terminate() {
- if (this.readyState === WebSocket$2.CLOSED) return;
- if (this.readyState === WebSocket$2.CONNECTING) {
- const msg = 'WebSocket was closed before the connection was established';
- return abortHandshake$1(this, this._req, msg);
- }
-
- if (this._socket) {
- this._readyState = WebSocket$2.CLOSING;
- this._socket.destroy();
- }
- }
-}
-
-/**
- * @constant {Number} CONNECTING
- * @memberof WebSocket
- */
-Object.defineProperty(WebSocket$2, 'CONNECTING', {
- enumerable: true,
- value: readyStates.indexOf('CONNECTING')
-});
-
-/**
- * @constant {Number} CONNECTING
- * @memberof WebSocket.prototype
- */
-Object.defineProperty(WebSocket$2.prototype, 'CONNECTING', {
- enumerable: true,
- value: readyStates.indexOf('CONNECTING')
-});
-
-/**
- * @constant {Number} OPEN
- * @memberof WebSocket
- */
-Object.defineProperty(WebSocket$2, 'OPEN', {
- enumerable: true,
- value: readyStates.indexOf('OPEN')
-});
-
-/**
- * @constant {Number} OPEN
- * @memberof WebSocket.prototype
- */
-Object.defineProperty(WebSocket$2.prototype, 'OPEN', {
- enumerable: true,
- value: readyStates.indexOf('OPEN')
-});
-
-/**
- * @constant {Number} CLOSING
- * @memberof WebSocket
- */
-Object.defineProperty(WebSocket$2, 'CLOSING', {
- enumerable: true,
- value: readyStates.indexOf('CLOSING')
-});
-
-/**
- * @constant {Number} CLOSING
- * @memberof WebSocket.prototype
- */
-Object.defineProperty(WebSocket$2.prototype, 'CLOSING', {
- enumerable: true,
- value: readyStates.indexOf('CLOSING')
-});
-
-/**
- * @constant {Number} CLOSED
- * @memberof WebSocket
- */
-Object.defineProperty(WebSocket$2, 'CLOSED', {
- enumerable: true,
- value: readyStates.indexOf('CLOSED')
-});
-
-/**
- * @constant {Number} CLOSED
- * @memberof WebSocket.prototype
- */
-Object.defineProperty(WebSocket$2.prototype, 'CLOSED', {
- enumerable: true,
- value: readyStates.indexOf('CLOSED')
-});
-
-[
- 'binaryType',
- 'bufferedAmount',
- 'extensions',
- 'protocol',
- 'readyState',
- 'url'
-].forEach((property) => {
- Object.defineProperty(WebSocket$2.prototype, property, { enumerable: true });
-});
-
-//
-// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.
-// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface
-//
-['open', 'error', 'close', 'message'].forEach((method) => {
- Object.defineProperty(WebSocket$2.prototype, `on${method}`, {
- enumerable: true,
- get() {
- const listeners = this.listeners(method);
- for (let i = 0; i < listeners.length; i++) {
- if (listeners[i]._listener) return listeners[i]._listener;
- }
-
- return undefined;
- },
- set(listener) {
- const listeners = this.listeners(method);
- for (let i = 0; i < listeners.length; i++) {
- //
- // Remove only the listeners added via `addEventListener`.
- //
- if (listeners[i]._listener) this.removeListener(method, listeners[i]);
- }
- this.addEventListener(method, listener);
- }
- });
-});
-
-WebSocket$2.prototype.addEventListener = addEventListener;
-WebSocket$2.prototype.removeEventListener = removeEventListener;
-
-var websocket = WebSocket$2;
-
-/**
- * Initialize a WebSocket client.
- *
- * @param {WebSocket} websocket The client to initialize
- * @param {(String|URL)} address The URL to which to connect
- * @param {String} [protocols] The subprotocols
- * @param {Object} [options] Connection options
- * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable
- * permessage-deflate
- * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the
- * handshake request
- * @param {Number} [options.protocolVersion=13] Value of the
- * `Sec-WebSocket-Version` header
- * @param {String} [options.origin] Value of the `Origin` or
- * `Sec-WebSocket-Origin` header
- * @param {Number} [options.maxPayload=104857600] The maximum allowed message
- * size
- * @param {Boolean} [options.followRedirects=false] Whether or not to follow
- * redirects
- * @param {Number} [options.maxRedirects=10] The maximum number of redirects
- * allowed
- * @private
- */
-function initAsClient(websocket, address, protocols, options) {
- const opts = {
- protocolVersion: protocolVersions[1],
- maxPayload: 100 * 1024 * 1024,
- perMessageDeflate: true,
- followRedirects: false,
- maxRedirects: 10,
- ...options,
- createConnection: undefined,
- socketPath: undefined,
- hostname: undefined,
- protocol: undefined,
- timeout: undefined,
- method: undefined,
- host: undefined,
- path: undefined,
- port: undefined
- };
-
- if (!protocolVersions.includes(opts.protocolVersion)) {
- throw new RangeError(
- `Unsupported protocol version: ${opts.protocolVersion} ` +
- `(supported versions: ${protocolVersions.join(', ')})`
- );
- }
-
- let parsedUrl;
-
- if (address instanceof URL$2) {
- parsedUrl = address;
- websocket._url = address.href;
- } else {
- parsedUrl = new URL$2(address);
- websocket._url = address;
- }
-
- const isUnixSocket = parsedUrl.protocol === 'ws+unix:';
-
- if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {
- throw new Error(`Invalid URL: ${websocket.url}`);
- }
-
- const isSecure =
- parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';
- const defaultPort = isSecure ? 443 : 80;
- const key = randomBytes(16).toString('base64');
- const get = isSecure ? https$2.get : http$3.get;
- let perMessageDeflate;
-
- opts.createConnection = isSecure ? tlsConnect : netConnect;
- opts.defaultPort = opts.defaultPort || defaultPort;
- opts.port = parsedUrl.port || defaultPort;
- opts.host = parsedUrl.hostname.startsWith('[')
- ? parsedUrl.hostname.slice(1, -1)
- : parsedUrl.hostname;
- opts.headers = {
- 'Sec-WebSocket-Version': opts.protocolVersion,
- 'Sec-WebSocket-Key': key,
- Connection: 'Upgrade',
- Upgrade: 'websocket',
- ...opts.headers
- };
- opts.path = parsedUrl.pathname + parsedUrl.search;
- opts.timeout = opts.handshakeTimeout;
-
- if (opts.perMessageDeflate) {
- perMessageDeflate = new PerMessageDeflate$1(
- opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},
- false,
- opts.maxPayload
- );
- opts.headers['Sec-WebSocket-Extensions'] = format$2({
- [PerMessageDeflate$1.extensionName]: perMessageDeflate.offer()
- });
- }
- if (protocols) {
- opts.headers['Sec-WebSocket-Protocol'] = protocols;
- }
- if (opts.origin) {
- if (opts.protocolVersion < 13) {
- opts.headers['Sec-WebSocket-Origin'] = opts.origin;
- } else {
- opts.headers.Origin = opts.origin;
- }
- }
- if (parsedUrl.username || parsedUrl.password) {
- opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;
- }
-
- if (isUnixSocket) {
- const parts = opts.path.split(':');
-
- opts.socketPath = parts[0];
- opts.path = parts[1];
- }
-
- let req = (websocket._req = get(opts));
-
- if (opts.timeout) {
- req.on('timeout', () => {
- abortHandshake$1(websocket, req, 'Opening handshake has timed out');
- });
- }
-
- req.on('error', (err) => {
- if (req === null || req.aborted) return;
-
- req = websocket._req = null;
- websocket._readyState = WebSocket$2.CLOSING;
- websocket.emit('error', err);
- websocket.emitClose();
- });
-
- req.on('response', (res) => {
- const location = res.headers.location;
- const statusCode = res.statusCode;
-
- if (
- location &&
- opts.followRedirects &&
- statusCode >= 300 &&
- statusCode < 400
- ) {
- if (++websocket._redirects > opts.maxRedirects) {
- abortHandshake$1(websocket, req, 'Maximum redirects exceeded');
- return;
- }
-
- req.abort();
-
- const addr = new URL$2(location, address);
-
- initAsClient(websocket, addr, protocols, options);
- } else if (!websocket.emit('unexpected-response', req, res)) {
- abortHandshake$1(
- websocket,
- req,
- `Unexpected server response: ${res.statusCode}`
- );
- }
- });
-
- req.on('upgrade', (res, socket, head) => {
- websocket.emit('upgrade', res);
-
- //
- // The user may have closed the connection from a listener of the `upgrade`
- // event.
- //
- if (websocket.readyState !== WebSocket$2.CONNECTING) return;
-
- req = websocket._req = null;
-
- const digest = createHash$1('sha1')
- .update(key + GUID$1)
- .digest('base64');
-
- if (res.headers['sec-websocket-accept'] !== digest) {
- abortHandshake$1(websocket, socket, 'Invalid Sec-WebSocket-Accept header');
- return;
- }
-
- const serverProt = res.headers['sec-websocket-protocol'];
- const protList = (protocols || '').split(/, */);
- let protError;
-
- if (!protocols && serverProt) {
- protError = 'Server sent a subprotocol but none was requested';
- } else if (protocols && !serverProt) {
- protError = 'Server sent no subprotocol';
- } else if (serverProt && !protList.includes(serverProt)) {
- protError = 'Server sent an invalid subprotocol';
- }
-
- if (protError) {
- abortHandshake$1(websocket, socket, protError);
- return;
- }
-
- if (serverProt) websocket._protocol = serverProt;
-
- const secWebSocketExtensions = res.headers['sec-websocket-extensions'];
-
- if (secWebSocketExtensions !== undefined) {
- if (!perMessageDeflate) {
- const message =
- 'Server sent a Sec-WebSocket-Extensions header but no extension ' +
- 'was requested';
- abortHandshake$1(websocket, socket, message);
- return;
- }
-
- let extensions;
-
- try {
- extensions = parse$7(secWebSocketExtensions);
- } catch (err) {
- const message = 'Invalid Sec-WebSocket-Extensions header';
- abortHandshake$1(websocket, socket, message);
- return;
- }
-
- const extensionNames = Object.keys(extensions);
-
- if (extensionNames.length) {
- if (
- extensionNames.length !== 1 ||
- extensionNames[0] !== PerMessageDeflate$1.extensionName
- ) {
- const message =
- 'Server indicated an extension that was not requested';
- abortHandshake$1(websocket, socket, message);
- return;
- }
-
- try {
- perMessageDeflate.accept(extensions[PerMessageDeflate$1.extensionName]);
- } catch (err) {
- const message = 'Invalid Sec-WebSocket-Extensions header';
- abortHandshake$1(websocket, socket, message);
- return;
- }
-
- websocket._extensions[PerMessageDeflate$1.extensionName] =
- perMessageDeflate;
- }
- }
-
- websocket.setSocket(socket, head, opts.maxPayload);
- });
-}
-
-/**
- * Create a `net.Socket` and initiate a connection.
- *
- * @param {Object} options Connection options
- * @return {net.Socket} The newly created socket used to start the connection
- * @private
- */
-function netConnect(options) {
- options.path = options.socketPath;
- return net.connect(options);
-}
-
-/**
- * Create a `tls.TLSSocket` and initiate a connection.
- *
- * @param {Object} options Connection options
- * @return {tls.TLSSocket} The newly created socket used to start the connection
- * @private
- */
-function tlsConnect(options) {
- options.path = undefined;
-
- if (!options.servername && options.servername !== '') {
- options.servername = net.isIP(options.host) ? '' : options.host;
- }
-
- return tls.connect(options);
-}
-
-/**
- * Abort the handshake and emit an error.
- *
- * @param {WebSocket} websocket The WebSocket instance
- * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to
- * abort or the socket to destroy
- * @param {String} message The error message
- * @private
- */
-function abortHandshake$1(websocket, stream, message) {
- websocket._readyState = WebSocket$2.CLOSING;
-
- const err = new Error(message);
- Error.captureStackTrace(err, abortHandshake$1);
-
- if (stream.setHeader) {
- stream.abort();
-
- if (stream.socket && !stream.socket.destroyed) {
- //
- // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if
- // called after the request completed. See
- // https://github.com/websockets/ws/issues/1869.
- //
- stream.socket.destroy();
- }
-
- stream.once('abort', websocket.emitClose.bind(websocket));
- websocket.emit('error', err);
- } else {
- stream.destroy(err);
- stream.once('error', websocket.emit.bind(websocket, 'error'));
- stream.once('close', websocket.emitClose.bind(websocket));
- }
-}
-
-/**
- * Handle cases where the `ping()`, `pong()`, or `send()` methods are called
- * when the `readyState` attribute is `CLOSING` or `CLOSED`.
- *
- * @param {WebSocket} websocket The WebSocket instance
- * @param {*} [data] The data to send
- * @param {Function} [cb] Callback
- * @private
- */
-function sendAfterClose(websocket, data, cb) {
- if (data) {
- const length = toBuffer$1(data).length;
-
- //
- // The `_bufferedAmount` property is used only when the peer is a client and
- // the opening handshake fails. Under these circumstances, in fact, the
- // `setSocket()` method is not called, so the `_socket` and `_sender`
- // properties are set to `null`.
- //
- if (websocket._socket) websocket._sender._bufferedBytes += length;
- else websocket._bufferedAmount += length;
- }
-
- if (cb) {
- const err = new Error(
- `WebSocket is not open: readyState ${websocket.readyState} ` +
- `(${readyStates[websocket.readyState]})`
- );
- cb(err);
- }
-}
-
-/**
- * The listener of the `Receiver` `'conclude'` event.
- *
- * @param {Number} code The status code
- * @param {String} reason The reason for closing
- * @private
- */
-function receiverOnConclude(code, reason) {
- const websocket = this[kWebSocket$1];
-
- websocket._closeFrameReceived = true;
- websocket._closeMessage = reason;
- websocket._closeCode = code;
-
- if (websocket._socket[kWebSocket$1] === undefined) return;
-
- websocket._socket.removeListener('data', socketOnData);
- process.nextTick(resume, websocket._socket);
-
- if (code === 1005) websocket.close();
- else websocket.close(code, reason);
-}
-
-/**
- * The listener of the `Receiver` `'drain'` event.
- *
- * @private
- */
-function receiverOnDrain() {
- this[kWebSocket$1]._socket.resume();
-}
-
-/**
- * The listener of the `Receiver` `'error'` event.
- *
- * @param {(RangeError|Error)} err The emitted error
- * @private
- */
-function receiverOnError(err) {
- const websocket = this[kWebSocket$1];
-
- if (websocket._socket[kWebSocket$1] !== undefined) {
- websocket._socket.removeListener('data', socketOnData);
-
- //
- // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See
- // https://github.com/websockets/ws/issues/1940.
- //
- process.nextTick(resume, websocket._socket);
-
- websocket.close(err[kStatusCode]);
- }
-
- websocket.emit('error', err);
-}
-
-/**
- * The listener of the `Receiver` `'finish'` event.
- *
- * @private
- */
-function receiverOnFinish() {
- this[kWebSocket$1].emitClose();
-}
-
-/**
- * The listener of the `Receiver` `'message'` event.
- *
- * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message
- * @private
- */
-function receiverOnMessage(data) {
- this[kWebSocket$1].emit('message', data);
-}
-
-/**
- * The listener of the `Receiver` `'ping'` event.
- *
- * @param {Buffer} data The data included in the ping frame
- * @private
- */
-function receiverOnPing(data) {
- const websocket = this[kWebSocket$1];
-
- websocket.pong(data, !websocket._isServer, NOOP);
- websocket.emit('ping', data);
-}
-
-/**
- * The listener of the `Receiver` `'pong'` event.
- *
- * @param {Buffer} data The data included in the pong frame
- * @private
- */
-function receiverOnPong(data) {
- this[kWebSocket$1].emit('pong', data);
-}
-
-/**
- * Resume a readable stream
- *
- * @param {Readable} stream The readable stream
- * @private
- */
-function resume(stream) {
- stream.resume();
-}
-
-/**
- * The listener of the `net.Socket` `'close'` event.
- *
- * @private
- */
-function socketOnClose() {
- const websocket = this[kWebSocket$1];
-
- this.removeListener('close', socketOnClose);
- this.removeListener('data', socketOnData);
- this.removeListener('end', socketOnEnd);
-
- websocket._readyState = WebSocket$2.CLOSING;
-
- let chunk;
-
- //
- // The close frame might not have been received or the `'end'` event emitted,
- // for example, if the socket was destroyed due to an error. Ensure that the
- // `receiver` stream is closed after writing any remaining buffered data to
- // it. If the readable side of the socket is in flowing mode then there is no
- // buffered data as everything has been already written and `readable.read()`
- // will return `null`. If instead, the socket is paused, any possible buffered
- // data will be read as a single chunk.
- //
- if (
- !this._readableState.endEmitted &&
- !websocket._closeFrameReceived &&
- !websocket._receiver._writableState.errorEmitted &&
- (chunk = websocket._socket.read()) !== null
- ) {
- websocket._receiver.write(chunk);
- }
-
- websocket._receiver.end();
-
- this[kWebSocket$1] = undefined;
-
- clearTimeout(websocket._closeTimer);
-
- if (
- websocket._receiver._writableState.finished ||
- websocket._receiver._writableState.errorEmitted
- ) {
- websocket.emitClose();
- } else {
- websocket._receiver.on('error', receiverOnFinish);
- websocket._receiver.on('finish', receiverOnFinish);
- }
-}
-
-/**
- * The listener of the `net.Socket` `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function socketOnData(chunk) {
- if (!this[kWebSocket$1]._receiver.write(chunk)) {
- this.pause();
- }
-}
-
-/**
- * The listener of the `net.Socket` `'end'` event.
- *
- * @private
- */
-function socketOnEnd() {
- const websocket = this[kWebSocket$1];
-
- websocket._readyState = WebSocket$2.CLOSING;
- websocket._receiver.end();
- this.end();
-}
-
-/**
- * The listener of the `net.Socket` `'error'` event.
- *
- * @private
- */
-function socketOnError$1() {
- const websocket = this[kWebSocket$1];
-
- this.removeListener('error', socketOnError$1);
- this.on('error', NOOP);
-
- if (websocket) {
- websocket._readyState = WebSocket$2.CLOSING;
- this.destroy();
- }
-}
-
-const { Duplex } = require$$0__default$4;
-
-/**
- * Emits the `'close'` event on a stream.
- *
- * @param {Duplex} stream The stream.
- * @private
- */
-function emitClose$1(stream) {
- stream.emit('close');
-}
-
-/**
- * The listener of the `'end'` event.
- *
- * @private
- */
-function duplexOnEnd() {
- if (!this.destroyed && this._writableState.finished) {
- this.destroy();
- }
-}
-
-/**
- * The listener of the `'error'` event.
- *
- * @param {Error} err The error
- * @private
- */
-function duplexOnError(err) {
- this.removeListener('error', duplexOnError);
- this.destroy();
- if (this.listenerCount('error') === 0) {
- // Do not suppress the throwing behavior.
- this.emit('error', err);
- }
-}
-
-/**
- * Wraps a `WebSocket` in a duplex stream.
- *
- * @param {WebSocket} ws The `WebSocket` to wrap
- * @param {Object} [options] The options for the `Duplex` constructor
- * @return {Duplex} The duplex stream
- * @public
- */
-function createWebSocketStream(ws, options) {
- let resumeOnReceiverDrain = true;
- let terminateOnDestroy = true;
-
- function receiverOnDrain() {
- if (resumeOnReceiverDrain) ws._socket.resume();
- }
-
- if (ws.readyState === ws.CONNECTING) {
- ws.once('open', function open() {
- ws._receiver.removeAllListeners('drain');
- ws._receiver.on('drain', receiverOnDrain);
- });
- } else {
- ws._receiver.removeAllListeners('drain');
- ws._receiver.on('drain', receiverOnDrain);
- }
-
- const duplex = new Duplex({
- ...options,
- autoDestroy: false,
- emitClose: false,
- objectMode: false,
- writableObjectMode: false
- });
-
- ws.on('message', function message(msg) {
- if (!duplex.push(msg)) {
- resumeOnReceiverDrain = false;
- ws._socket.pause();
- }
- });
-
- ws.once('error', function error(err) {
- if (duplex.destroyed) return;
-
- // Prevent `ws.terminate()` from being called by `duplex._destroy()`.
- //
- // - If the `'error'` event is emitted before the `'open'` event, then
- // `ws.terminate()` is a noop as no socket is assigned.
- // - Otherwise, the error is re-emitted by the listener of the `'error'`
- // event of the `Receiver` object. The listener already closes the
- // connection by calling `ws.close()`. This allows a close frame to be
- // sent to the other peer. If `ws.terminate()` is called right after this,
- // then the close frame might not be sent.
- terminateOnDestroy = false;
- duplex.destroy(err);
- });
-
- ws.once('close', function close() {
- if (duplex.destroyed) return;
-
- duplex.push(null);
- });
-
- duplex._destroy = function (err, callback) {
- if (ws.readyState === ws.CLOSED) {
- callback(err);
- process.nextTick(emitClose$1, duplex);
- return;
- }
-
- let called = false;
-
- ws.once('error', function error(err) {
- called = true;
- callback(err);
- });
-
- ws.once('close', function close() {
- if (!called) callback(err);
- process.nextTick(emitClose$1, duplex);
- });
-
- if (terminateOnDestroy) ws.terminate();
- };
-
- duplex._final = function (callback) {
- if (ws.readyState === ws.CONNECTING) {
- ws.once('open', function open() {
- duplex._final(callback);
- });
- return;
- }
-
- // If the value of the `_socket` property is `null` it means that `ws` is a
- // client websocket and the handshake failed. In fact, when this happens, a
- // socket is never assigned to the websocket. Wait for the `'error'` event
- // that will be emitted by the websocket.
- if (ws._socket === null) return;
-
- if (ws._socket._writableState.finished) {
- callback();
- if (duplex._readableState.endEmitted) duplex.destroy();
- } else {
- ws._socket.once('finish', function finish() {
- // `duplex` is not destroyed here because the `'end'` event will be
- // emitted on `duplex` after this `'finish'` event. The EOF signaling
- // `null` chunk is, in fact, pushed when the websocket emits `'close'`.
- callback();
- });
- ws.close();
- }
- };
-
- duplex._read = function () {
- if (ws.readyState === ws.OPEN && !resumeOnReceiverDrain) {
- resumeOnReceiverDrain = true;
- if (!ws._receiver._writableState.needDrain) ws._socket.resume();
- }
- };
-
- duplex._write = function (chunk, encoding, callback) {
- if (ws.readyState === ws.CONNECTING) {
- ws.once('open', function open() {
- duplex._write(chunk, encoding, callback);
- });
- return;
- }
-
- ws.send(chunk, callback);
- };
-
- duplex.on('end', duplexOnEnd);
- duplex.on('error', duplexOnError);
- return duplex;
-}
-
-var stream$2 = createWebSocketStream;
-
-/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^net|tls|https$" }] */
-
-const EventEmitter = require$$0__default$5;
-const http$2 = require$$1__default$1;
-const { createHash } = require$$1__default$2;
-
-const PerMessageDeflate = permessageDeflate;
-const WebSocket$1 = websocket;
-const { format: format$1, parse: parse$6 } = extension;
-const { GUID, kWebSocket } = constants;
-
-const keyRegex = /^[+/0-9A-Za-z]{22}==$/;
-
-const RUNNING = 0;
-const CLOSING = 1;
-const CLOSED = 2;
-
-/**
- * Class representing a WebSocket server.
- *
- * @extends EventEmitter
- */
-class WebSocketServer extends EventEmitter {
- /**
- * Create a `WebSocketServer` instance.
- *
- * @param {Object} options Configuration options
- * @param {Number} [options.backlog=511] The maximum length of the queue of
- * pending connections
- * @param {Boolean} [options.clientTracking=true] Specifies whether or not to
- * track clients
- * @param {Function} [options.handleProtocols] A hook to handle protocols
- * @param {String} [options.host] The hostname where to bind the server
- * @param {Number} [options.maxPayload=104857600] The maximum allowed message
- * size
- * @param {Boolean} [options.noServer=false] Enable no server mode
- * @param {String} [options.path] Accept only connections matching this path
- * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable
- * permessage-deflate
- * @param {Number} [options.port] The port where to bind the server
- * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S
- * server to use
- * @param {Function} [options.verifyClient] A hook to reject connections
- * @param {Function} [callback] A listener for the `listening` event
- */
- constructor(options, callback) {
- super();
-
- options = {
- maxPayload: 100 * 1024 * 1024,
- perMessageDeflate: false,
- handleProtocols: null,
- clientTracking: true,
- verifyClient: null,
- noServer: false,
- backlog: null, // use default (511 as implemented in net.js)
- server: null,
- host: null,
- path: null,
- port: null,
- ...options
- };
-
- if (
- (options.port == null && !options.server && !options.noServer) ||
- (options.port != null && (options.server || options.noServer)) ||
- (options.server && options.noServer)
- ) {
- throw new TypeError(
- 'One and only one of the "port", "server", or "noServer" options ' +
- 'must be specified'
- );
- }
-
- if (options.port != null) {
- this._server = http$2.createServer((req, res) => {
- const body = http$2.STATUS_CODES[426];
-
- res.writeHead(426, {
- 'Content-Length': body.length,
- 'Content-Type': 'text/plain'
- });
- res.end(body);
- });
- this._server.listen(
- options.port,
- options.host,
- options.backlog,
- callback
- );
- } else if (options.server) {
- this._server = options.server;
- }
-
- if (this._server) {
- const emitConnection = this.emit.bind(this, 'connection');
-
- this._removeListeners = addListeners$1(this._server, {
- listening: this.emit.bind(this, 'listening'),
- error: this.emit.bind(this, 'error'),
- upgrade: (req, socket, head) => {
- this.handleUpgrade(req, socket, head, emitConnection);
- }
- });
- }
-
- if (options.perMessageDeflate === true) options.perMessageDeflate = {};
- if (options.clientTracking) this.clients = new Set();
- this.options = options;
- this._state = RUNNING;
- }
-
- /**
- * Returns the bound address, the address family name, and port of the server
- * as reported by the operating system if listening on an IP socket.
- * If the server is listening on a pipe or UNIX domain socket, the name is
- * returned as a string.
- *
- * @return {(Object|String|null)} The address of the server
- * @public
- */
- address() {
- if (this.options.noServer) {
- throw new Error('The server is operating in "noServer" mode');
- }
-
- if (!this._server) return null;
- return this._server.address();
- }
-
- /**
- * Close the server.
- *
- * @param {Function} [cb] Callback
- * @public
- */
- close(cb) {
- if (cb) this.once('close', cb);
-
- if (this._state === CLOSED) {
- process.nextTick(emitClose, this);
- return;
- }
-
- if (this._state === CLOSING) return;
- this._state = CLOSING;
-
- //
- // Terminate all associated clients.
- //
- if (this.clients) {
- for (const client of this.clients) client.terminate();
- }
-
- const server = this._server;
-
- if (server) {
- this._removeListeners();
- this._removeListeners = this._server = null;
-
- //
- // Close the http server if it was internally created.
- //
- if (this.options.port != null) {
- server.close(emitClose.bind(undefined, this));
- return;
- }
- }
-
- process.nextTick(emitClose, this);
- }
-
- /**
- * See if a given request should be handled by this server instance.
- *
- * @param {http.IncomingMessage} req Request object to inspect
- * @return {Boolean} `true` if the request is valid, else `false`
- * @public
- */
- shouldHandle(req) {
- if (this.options.path) {
- const index = req.url.indexOf('?');
- const pathname = index !== -1 ? req.url.slice(0, index) : req.url;
-
- if (pathname !== this.options.path) return false;
- }
-
- return true;
- }
-
- /**
- * Handle a HTTP Upgrade request.
- *
- * @param {http.IncomingMessage} req The request object
- * @param {(net.Socket|tls.Socket)} socket The network socket between the
- * server and client
- * @param {Buffer} head The first packet of the upgraded stream
- * @param {Function} cb Callback
- * @public
- */
- handleUpgrade(req, socket, head, cb) {
- socket.on('error', socketOnError);
-
- const key =
- req.headers['sec-websocket-key'] !== undefined
- ? req.headers['sec-websocket-key'].trim()
- : false;
- const version = +req.headers['sec-websocket-version'];
- const extensions = {};
-
- if (
- req.method !== 'GET' ||
- req.headers.upgrade.toLowerCase() !== 'websocket' ||
- !key ||
- !keyRegex.test(key) ||
- (version !== 8 && version !== 13) ||
- !this.shouldHandle(req)
- ) {
- return abortHandshake(socket, 400);
- }
-
- if (this.options.perMessageDeflate) {
- const perMessageDeflate = new PerMessageDeflate(
- this.options.perMessageDeflate,
- true,
- this.options.maxPayload
- );
-
- try {
- const offers = parse$6(req.headers['sec-websocket-extensions']);
-
- if (offers[PerMessageDeflate.extensionName]) {
- perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
- extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
- }
- } catch (err) {
- return abortHandshake(socket, 400);
- }
- }
-
- //
- // Optionally call external client verification handler.
- //
- if (this.options.verifyClient) {
- const info = {
- origin:
- req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],
- secure: !!(req.socket.authorized || req.socket.encrypted),
- req
- };
-
- if (this.options.verifyClient.length === 2) {
- this.options.verifyClient(info, (verified, code, message, headers) => {
- if (!verified) {
- return abortHandshake(socket, code || 401, message, headers);
- }
-
- this.completeUpgrade(key, extensions, req, socket, head, cb);
- });
- return;
- }
-
- if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);
- }
-
- this.completeUpgrade(key, extensions, req, socket, head, cb);
- }
-
- /**
- * Upgrade the connection to WebSocket.
- *
- * @param {String} key The value of the `Sec-WebSocket-Key` header
- * @param {Object} extensions The accepted extensions
- * @param {http.IncomingMessage} req The request object
- * @param {(net.Socket|tls.Socket)} socket The network socket between the
- * server and client
- * @param {Buffer} head The first packet of the upgraded stream
- * @param {Function} cb Callback
- * @throws {Error} If called more than once with the same socket
- * @private
- */
- completeUpgrade(key, extensions, req, socket, head, cb) {
- //
- // Destroy the socket if the client has already sent a FIN packet.
- //
- if (!socket.readable || !socket.writable) return socket.destroy();
-
- if (socket[kWebSocket]) {
- throw new Error(
- 'server.handleUpgrade() was called more than once with the same ' +
- 'socket, possibly due to a misconfiguration'
- );
- }
-
- if (this._state > RUNNING) return abortHandshake(socket, 503);
-
- const digest = createHash('sha1')
- .update(key + GUID)
- .digest('base64');
-
- const headers = [
- 'HTTP/1.1 101 Switching Protocols',
- 'Upgrade: websocket',
- 'Connection: Upgrade',
- `Sec-WebSocket-Accept: ${digest}`
- ];
-
- const ws = new WebSocket$1(null);
- let protocol = req.headers['sec-websocket-protocol'];
-
- if (protocol) {
- protocol = protocol.split(',').map(trim);
-
- //
- // Optionally call external protocol selection handler.
- //
- if (this.options.handleProtocols) {
- protocol = this.options.handleProtocols(protocol, req);
- } else {
- protocol = protocol[0];
- }
-
- if (protocol) {
- headers.push(`Sec-WebSocket-Protocol: ${protocol}`);
- ws._protocol = protocol;
- }
- }
-
- if (extensions[PerMessageDeflate.extensionName]) {
- const params = extensions[PerMessageDeflate.extensionName].params;
- const value = format$1({
- [PerMessageDeflate.extensionName]: [params]
- });
- headers.push(`Sec-WebSocket-Extensions: ${value}`);
- ws._extensions = extensions;
- }
-
- //
- // Allow external modification/inspection of handshake headers.
- //
- this.emit('headers', headers, req);
-
- socket.write(headers.concat('\r\n').join('\r\n'));
- socket.removeListener('error', socketOnError);
-
- ws.setSocket(socket, head, this.options.maxPayload);
-
- if (this.clients) {
- this.clients.add(ws);
- ws.on('close', () => this.clients.delete(ws));
- }
-
- cb(ws, req);
- }
-}
-
-var websocketServer = WebSocketServer;
-
-/**
- * Add event listeners on an `EventEmitter` using a map of <event, listener>
- * pairs.
- *
- * @param {EventEmitter} server The event emitter
- * @param {Object.<String, Function>} map The listeners to add
- * @return {Function} A function that will remove the added listeners when
- * called
- * @private
- */
-function addListeners$1(server, map) {
- for (const event of Object.keys(map)) server.on(event, map[event]);
-
- return function removeListeners() {
- for (const event of Object.keys(map)) {
- server.removeListener(event, map[event]);
- }
- };
-}
-
-/**
- * Emit a `'close'` event on an `EventEmitter`.
- *
- * @param {EventEmitter} server The event emitter
- * @private
- */
-function emitClose(server) {
- server._state = CLOSED;
- server.emit('close');
-}
-
-/**
- * Handle premature socket errors.
- *
- * @private
- */
-function socketOnError() {
- this.destroy();
-}
-
-/**
- * Close the connection when preconditions are not fulfilled.
- *
- * @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request
- * @param {Number} code The HTTP response status code
- * @param {String} [message] The HTTP response body
- * @param {Object} [headers] Additional HTTP response headers
- * @private
- */
-function abortHandshake(socket, code, message, headers) {
- if (socket.writable) {
- message = message || http$2.STATUS_CODES[code];
- headers = {
- Connection: 'close',
- 'Content-Type': 'text/html',
- 'Content-Length': Buffer.byteLength(message),
- ...headers
- };
-
- socket.write(
- `HTTP/1.1 ${code} ${http$2.STATUS_CODES[code]}\r\n` +
- Object.keys(headers)
- .map((h) => `${h}: ${headers[h]}`)
- .join('\r\n') +
- '\r\n\r\n' +
- message
- );
- }
-
- socket.removeListener('error', socketOnError);
- socket.destroy();
-}
-
-/**
- * Remove whitespace characters from both ends of a string.
- *
- * @param {String} str The string
- * @return {String} A new string representing `str` stripped of whitespace
- * characters from both its beginning and end
- * @private
- */
-function trim(str) {
- return str.trim();
-}
-
-const WebSocket = websocket;
-
-WebSocket.createWebSocketStream = stream$2;
-WebSocket.Server = websocketServer;
-WebSocket.Receiver = receiver;
-WebSocket.Sender = sender;
-
-var ws = WebSocket;
-
-const HMR_HEADER = 'vite-hmr';
-function createWebSocketServer(server, config, httpsOptions) {
- let wss;
- let httpsServer = undefined;
- const hmr = isObject$3(config.server.hmr) && config.server.hmr;
- const wsServer = (hmr && hmr.server) || server;
- if (wsServer) {
- wss = new ws.Server({ noServer: true });
- wsServer.on('upgrade', (req, socket, head) => {
- if (req.headers['sec-websocket-protocol'] === HMR_HEADER) {
- wss.handleUpgrade(req, socket, head, (ws) => {
- wss.emit('connection', ws, req);
- });
- }
- });
- }
- else {
- const websocketServerOptions = {};
- const port = (hmr && hmr.port) || 24678;
- if (httpsOptions) {
- // if we're serving the middlewares over https, the ws library doesn't support automatically creating an https server, so we need to do it ourselves
- // create an inline https server and mount the websocket server to it
- httpsServer = require$$1$3.createServer(httpsOptions, (req, res) => {
- const statusCode = 426;
- const body = require$$1$2.STATUS_CODES[statusCode];
- if (!body)
- throw new Error(`No body text found for the ${statusCode} status code`);
- res.writeHead(statusCode, {
- 'Content-Length': body.length,
- 'Content-Type': 'text/plain'
- });
- res.end(body);
- });
- httpsServer.listen(port);
- websocketServerOptions.server = httpsServer;
- }
- else {
- // we don't need to serve over https, just let ws handle its own server
- websocketServerOptions.port = port;
- }
- // vite dev server in middleware mode
- wss = new ws.Server(websocketServerOptions);
- }
- wss.on('connection', (socket) => {
- socket.send(JSON.stringify({ type: 'connected' }));
- if (bufferedError) {
- socket.send(JSON.stringify(bufferedError));
- bufferedError = null;
- }
- });
- wss.on('error', (e) => {
- if (e.code !== 'EADDRINUSE') {
- config.logger.error(source.red(`WebSocket server error:\n${e.stack || e.message}`), { error: e });
- }
- });
- // On page reloads, if a file fails to compile and returns 500, the server
- // sends the error payload before the client connection is established.
- // If we have no open clients, buffer the error and send it to the next
- // connected client.
- let bufferedError = null;
- return {
- on: wss.on.bind(wss),
- off: wss.off.bind(wss),
- send(payload) {
- if (payload.type === 'error' && !wss.clients.size) {
- bufferedError = payload;
- return;
- }
- const stringified = JSON.stringify(payload);
- wss.clients.forEach((client) => {
- if (client.readyState === ws.OPEN) {
- client.send(stringified);
- }
- });
- },
- close() {
- return new Promise((resolve, reject) => {
- wss.close((err) => {
- if (err) {
- reject(err);
- }
- else {
- if (httpsServer) {
- httpsServer.close((err) => {
- if (err) {
- reject(err);
- }
- else {
- resolve();
- }
- });
- }
- else {
- resolve();
- }
- }
- });
- });
- }
- };
-}
-
-// this middleware is only active when (config.base !== '/')
-function baseMiddleware({ config }) {
- const base = config.base;
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return function viteBaseMiddleware(req, res, next) {
- var _a;
- const url = req.url;
- const parsed = require$$0$8.parse(url);
- const path = parsed.pathname || '/';
- if (path.startsWith(base)) {
- // rewrite url to remove base.. this ensures that other middleware does
- // not need to consider base being prepended or not
- req.url = url.replace(base, '/');
- return next();
- }
- // skip redirect and error fallback on middleware mode, #4057
- if (config.server.middlewareMode) {
- return next();
- }
- if (path === '/' || path === '/index.html') {
- // redirect root visit to based url
- res.writeHead(302, {
- Location: base
- });
- res.end();
- return;
- }
- else if ((_a = req.headers.accept) === null || _a === void 0 ? void 0 : _a.includes('text/html')) {
- // non-based page visit
- const redirectPath = base + url.slice(1);
- res.writeHead(404, {
- 'Content-Type': 'text/html'
- });
- res.end(`The server is configured with a public base URL of ${base} - ` +
- `did you mean to visit <a href="${redirectPath}">${redirectPath}</a> instead?`);
- return;
- }
- next();
- };
-}
-
-var httpProxy$2 = {exports: {}};
-
-var eventemitter3 = {exports: {}};
-
-(function (module) {
-
-var has = Object.prototype.hasOwnProperty
- , prefix = '~';
-
-/**
- * Constructor to create a storage for our `EE` objects.
- * An `Events` instance is a plain object whose properties are event names.
- *
- * @constructor
- * @private
- */
-function Events() {}
-
-//
-// We try to not inherit from `Object.prototype`. In some engines creating an
-// instance in this way is faster than calling `Object.create(null)` directly.
-// If `Object.create(null)` is not supported we prefix the event names with a
-// character to make sure that the built-in object properties are not
-// overridden or used as an attack vector.
-//
-if (Object.create) {
- Events.prototype = Object.create(null);
-
- //
- // This hack is needed because the `__proto__` property is still inherited in
- // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
- //
- if (!new Events().__proto__) prefix = false;
-}
-
-/**
- * Representation of a single event listener.
- *
- * @param {Function} fn The listener function.
- * @param {*} context The context to invoke the listener with.
- * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
- * @constructor
- * @private
- */
-function EE(fn, context, once) {
- this.fn = fn;
- this.context = context;
- this.once = once || false;
-}
-
-/**
- * Add a listener for a given event.
- *
- * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
- * @param {(String|Symbol)} event The event name.
- * @param {Function} fn The listener function.
- * @param {*} context The context to invoke the listener with.
- * @param {Boolean} once Specify if the listener is a one-time listener.
- * @returns {EventEmitter}
- * @private
- */
-function addListener(emitter, event, fn, context, once) {
- if (typeof fn !== 'function') {
- throw new TypeError('The listener must be a function');
- }
-
- var listener = new EE(fn, context || emitter, once)
- , evt = prefix ? prefix + event : event;
-
- if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
- else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
- else emitter._events[evt] = [emitter._events[evt], listener];
-
- return emitter;
-}
-
-/**
- * Clear event by name.
- *
- * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
- * @param {(String|Symbol)} evt The Event name.
- * @private
- */
-function clearEvent(emitter, evt) {
- if (--emitter._eventsCount === 0) emitter._events = new Events();
- else delete emitter._events[evt];
-}
-
-/**
- * Minimal `EventEmitter` interface that is molded against the Node.js
- * `EventEmitter` interface.
- *
- * @constructor
- * @public
- */
-function EventEmitter() {
- this._events = new Events();
- this._eventsCount = 0;
-}
-
-/**
- * Return an array listing the events for which the emitter has registered
- * listeners.
- *
- * @returns {Array}
- * @public
- */
-EventEmitter.prototype.eventNames = function eventNames() {
- var names = []
- , events
- , name;
-
- if (this._eventsCount === 0) return names;
-
- for (name in (events = this._events)) {
- if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
- }
-
- if (Object.getOwnPropertySymbols) {
- return names.concat(Object.getOwnPropertySymbols(events));
- }
-
- return names;
-};
-
-/**
- * Return the listeners registered for a given event.
- *
- * @param {(String|Symbol)} event The event name.
- * @returns {Array} The registered listeners.
- * @public
- */
-EventEmitter.prototype.listeners = function listeners(event) {
- var evt = prefix ? prefix + event : event
- , handlers = this._events[evt];
-
- if (!handlers) return [];
- if (handlers.fn) return [handlers.fn];
-
- for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
- ee[i] = handlers[i].fn;
- }
-
- return ee;
-};
-
-/**
- * Return the number of listeners listening to a given event.
- *
- * @param {(String|Symbol)} event The event name.
- * @returns {Number} The number of listeners.
- * @public
- */
-EventEmitter.prototype.listenerCount = function listenerCount(event) {
- var evt = prefix ? prefix + event : event
- , listeners = this._events[evt];
-
- if (!listeners) return 0;
- if (listeners.fn) return 1;
- return listeners.length;
-};
-
-/**
- * Calls each of the listeners registered for a given event.
- *
- * @param {(String|Symbol)} event The event name.
- * @returns {Boolean} `true` if the event had listeners, else `false`.
- * @public
- */
-EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
- var evt = prefix ? prefix + event : event;
-
- if (!this._events[evt]) return false;
-
- var listeners = this._events[evt]
- , len = arguments.length
- , args
- , i;
-
- if (listeners.fn) {
- if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
-
- switch (len) {
- case 1: return listeners.fn.call(listeners.context), true;
- case 2: return listeners.fn.call(listeners.context, a1), true;
- case 3: return listeners.fn.call(listeners.context, a1, a2), true;
- case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
- case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
- case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
- }
-
- for (i = 1, args = new Array(len -1); i < len; i++) {
- args[i - 1] = arguments[i];
- }
-
- listeners.fn.apply(listeners.context, args);
- } else {
- var length = listeners.length
- , j;
-
- for (i = 0; i < length; i++) {
- if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
-
- switch (len) {
- case 1: listeners[i].fn.call(listeners[i].context); break;
- case 2: listeners[i].fn.call(listeners[i].context, a1); break;
- case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
- case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
- default:
- if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
- args[j - 1] = arguments[j];
- }
-
- listeners[i].fn.apply(listeners[i].context, args);
- }
- }
- }
-
- return true;
-};
-
-/**
- * Add a listener for a given event.
- *
- * @param {(String|Symbol)} event The event name.
- * @param {Function} fn The listener function.
- * @param {*} [context=this] The context to invoke the listener with.
- * @returns {EventEmitter} `this`.
- * @public
- */
-EventEmitter.prototype.on = function on(event, fn, context) {
- return addListener(this, event, fn, context, false);
-};
-
-/**
- * Add a one-time listener for a given event.
- *
- * @param {(String|Symbol)} event The event name.
- * @param {Function} fn The listener function.
- * @param {*} [context=this] The context to invoke the listener with.
- * @returns {EventEmitter} `this`.
- * @public
- */
-EventEmitter.prototype.once = function once(event, fn, context) {
- return addListener(this, event, fn, context, true);
-};
-
-/**
- * Remove the listeners of a given event.
- *
- * @param {(String|Symbol)} event The event name.
- * @param {Function} fn Only remove the listeners that match this function.
- * @param {*} context Only remove the listeners that have this context.
- * @param {Boolean} once Only remove one-time listeners.
- * @returns {EventEmitter} `this`.
- * @public
- */
-EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
- var evt = prefix ? prefix + event : event;
-
- if (!this._events[evt]) return this;
- if (!fn) {
- clearEvent(this, evt);
- return this;
- }
-
- var listeners = this._events[evt];
-
- if (listeners.fn) {
- if (
- listeners.fn === fn &&
- (!once || listeners.once) &&
- (!context || listeners.context === context)
- ) {
- clearEvent(this, evt);
- }
- } else {
- for (var i = 0, events = [], length = listeners.length; i < length; i++) {
- if (
- listeners[i].fn !== fn ||
- (once && !listeners[i].once) ||
- (context && listeners[i].context !== context)
- ) {
- events.push(listeners[i]);
- }
- }
-
- //
- // Reset the array, or remove it completely if we have no more listeners.
- //
- if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
- else clearEvent(this, evt);
- }
-
- return this;
-};
-
-/**
- * Remove all listeners, or those of the specified event.
- *
- * @param {(String|Symbol)} [event] The event name.
- * @returns {EventEmitter} `this`.
- * @public
- */
-EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
- var evt;
-
- if (event) {
- evt = prefix ? prefix + event : event;
- if (this._events[evt]) clearEvent(this, evt);
- } else {
- this._events = new Events();
- this._eventsCount = 0;
- }
-
- return this;
-};
-
-//
-// Alias methods names because people roll like that.
-//
-EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
-EventEmitter.prototype.addListener = EventEmitter.prototype.on;
-
-//
-// Expose the prefix.
-//
-EventEmitter.prefixed = prefix;
-
-//
-// Allow `EventEmitter` to be imported as module namespace.
-//
-EventEmitter.EventEmitter = EventEmitter;
-
-//
-// Expose the module.
-//
-{
- module.exports = EventEmitter;
-}
-}(eventemitter3));
-
-var common$3 = {};
-
-/**
- * Check if we're required to add a port number.
- *
- * @see https://url.spec.whatwg.org/#default-port
- * @param {Number|String} port Port number we need to check
- * @param {String} protocol Protocol we need to check against.
- * @returns {Boolean} Is it a default port for the given protocol
- * @api private
- */
-var requiresPort = function required(port, protocol) {
- protocol = protocol.split(':')[0];
- port = +port;
-
- if (!port) return false;
-
- switch (protocol) {
- case 'http':
- case 'ws':
- return port !== 80;
-
- case 'https':
- case 'wss':
- return port !== 443;
-
- case 'ftp':
- return port !== 21;
-
- case 'gopher':
- return port !== 70;
-
- case 'file':
- return false;
- }
-
- return port !== 0;
-};
-
-(function (exports) {
-var common = exports,
- url = require$$0__default$6,
- extend = require$$0__default$2._extend,
- required = requiresPort;
-
-var upgradeHeader = /(^|,)\s*upgrade\s*($|,)/i,
- isSSL = /^https|wss/;
-
-/**
- * Simple Regex for testing if protocol is https
- */
-common.isSSL = isSSL;
-/**
- * Copies the right headers from `options` and `req` to
- * `outgoing` which is then used to fire the proxied
- * request.
- *
- * Examples:
- *
- * common.setupOutgoing(outgoing, options, req)
- * // => { host: ..., hostname: ...}
- *
- * @param {Object} Outgoing Base object to be filled with required properties
- * @param {Object} Options Config object passed to the proxy
- * @param {ClientRequest} Req Request Object
- * @param {String} Forward String to select forward or target
- * 
- * @return {Object} Outgoing Object with all required properties set
- *
- * @api private
- */
-
-common.setupOutgoing = function(outgoing, options, req, forward) {
- outgoing.port = options[forward || 'target'].port ||
- (isSSL.test(options[forward || 'target'].protocol) ? 443 : 80);
-
- ['host', 'hostname', 'socketPath', 'pfx', 'key',
- 'passphrase', 'cert', 'ca', 'ciphers', 'secureProtocol'].forEach(
- function(e) { outgoing[e] = options[forward || 'target'][e]; }
- );
-
- outgoing.method = options.method || req.method;
- outgoing.headers = extend({}, req.headers);
-
- if (options.headers){
- extend(outgoing.headers, options.headers);
- }
-
- if (options.auth) {
- outgoing.auth = options.auth;
- }
-
- if (options.ca) {
- outgoing.ca = options.ca;
- }
-
- if (isSSL.test(options[forward || 'target'].protocol)) {
- outgoing.rejectUnauthorized = (typeof options.secure === "undefined") ? true : options.secure;
- }
-
-
- outgoing.agent = options.agent || false;
- outgoing.localAddress = options.localAddress;
-
- //
- // Remark: If we are false and not upgrading, set the connection: close. This is the right thing to do
- // as node core doesn't handle this COMPLETELY properly yet.
- //
- if (!outgoing.agent) {
- outgoing.headers = outgoing.headers || {};
- if (typeof outgoing.headers.connection !== 'string'
- || !upgradeHeader.test(outgoing.headers.connection)
- ) { outgoing.headers.connection = 'close'; }
- }
-
-
- // the final path is target path + relative path requested by user:
- var target = options[forward || 'target'];
- var targetPath = target && options.prependPath !== false
- ? (target.path || '')
- : '';
-
- //
- // Remark: Can we somehow not use url.parse as a perf optimization?
- //
- var outgoingPath = !options.toProxy
- ? (url.parse(req.url).path || '')
- : req.url;
-
- //
- // Remark: ignorePath will just straight up ignore whatever the request's
- // path is. This can be labeled as FOOT-GUN material if you do not know what
- // you are doing and are using conflicting options.
- //
- outgoingPath = !options.ignorePath ? outgoingPath : '';
-
- outgoing.path = common.urlJoin(targetPath, outgoingPath);
-
- if (options.changeOrigin) {
- outgoing.headers.host =
- required(outgoing.port, options[forward || 'target'].protocol) && !hasPort(outgoing.host)
- ? outgoing.host + ':' + outgoing.port
- : outgoing.host;
- }
- return outgoing;
-};
-
-/**
- * Set the proper configuration for sockets,
- * set no delay and set keep alive, also set
- * the timeout to 0.
- *
- * Examples:
- *
- * common.setupSocket(socket)
- * // => Socket
- *
- * @param {Socket} Socket instance to setup
- * 
- * @return {Socket} Return the configured socket.
- *
- * @api private
- */
-
-common.setupSocket = function(socket) {
- socket.setTimeout(0);
- socket.setNoDelay(true);
-
- socket.setKeepAlive(true, 0);
-
- return socket;
-};
-
-/**
- * Get the port number from the host. Or guess it based on the connection type.
- *
- * @param {Request} req Incoming HTTP request.
- *
- * @return {String} The port number.
- *
- * @api private
- */
-common.getPort = function(req) {
- var res = req.headers.host ? req.headers.host.match(/:(\d+)/) : '';
-
- return res ?
- res[1] :
- common.hasEncryptedConnection(req) ? '443' : '80';
-};
-
-/**
- * Check if the request has an encrypted connection.
- *
- * @param {Request} req Incoming HTTP request.
- *
- * @return {Boolean} Whether the connection is encrypted or not.
- *
- * @api private
- */
-common.hasEncryptedConnection = function(req) {
- return Boolean(req.connection.encrypted || req.connection.pair);
-};
-
-/**
- * OS-agnostic join (doesn't break on URLs like path.join does on Windows)>
- *
- * @return {String} The generated path.
- *
- * @api private
- */
-
-common.urlJoin = function() {
- //
- // We do not want to mess with the query string. All we want to touch is the path.
- //
- var args = Array.prototype.slice.call(arguments),
- lastIndex = args.length - 1,
- last = args[lastIndex],
- lastSegs = last.split('?'),
- retSegs;
-
- args[lastIndex] = lastSegs.shift();
-
- //
- // Join all strings, but remove empty strings so we don't get extra slashes from
- // joining e.g. ['', 'am']
- //
- retSegs = [
- args.filter(Boolean).join('/')
- .replace(/\/+/g, '/')
- .replace('http:/', 'http://')
- .replace('https:/', 'https://')
- ];
-
- // Only join the query string if it exists so we don't have trailing a '?'
- // on every request
-
- // Handle case where there could be multiple ? in the URL.
- retSegs.push.apply(retSegs, lastSegs);
-
- return retSegs.join('?')
-};
-
-/**
- * Rewrites or removes the domain of a cookie header
- *
- * @param {String|Array} Header
- * @param {Object} Config, mapping of domain to rewritten domain.
- * '*' key to match any domain, null value to remove the domain.
- *
- * @api private
- */
-common.rewriteCookieProperty = function rewriteCookieProperty(header, config, property) {
- if (Array.isArray(header)) {
- return header.map(function (headerElement) {
- return rewriteCookieProperty(headerElement, config, property);
- });
- }
- return header.replace(new RegExp("(;\\s*" + property + "=)([^;]+)", 'i'), function(match, prefix, previousValue) {
- var newValue;
- if (previousValue in config) {
- newValue = config[previousValue];
- } else if ('*' in config) {
- newValue = config['*'];
- } else {
- //no match, return previous value
- return match;
- }
- if (newValue) {
- //replace value
- return prefix + newValue;
- } else {
- //remove value
- return '';
- }
- });
-};
-
-/**
- * Check the host and see if it potentially has a port in it (keep it simple)
- *
- * @returns {Boolean} Whether we have one or not
- *
- * @api private
- */
-function hasPort(host) {
- return !!~host.indexOf(':');
-}}(common$3));
-
-var url$2 = require$$0__default$6,
- common$2 = common$3;
-
-
-var redirectRegex = /^201|30(1|2|7|8)$/;
-
-/*!
- * Array of passes.
- *
- * A `pass` is just a function that is executed on `req, res, options`
- * so that you can easily add new checks while still keeping the base
- * flexible.
- */
-
-var webOutgoing = { // <--
-
- /**
- * If is a HTTP 1.0 request, remove chunk headers
- *
- * @param {ClientRequest} Req Request object
- * @param {IncomingMessage} Res Response object
- * @param {proxyResponse} Res Response object from the proxy request
- *
- * @api private
- */
- removeChunked: function removeChunked(req, res, proxyRes) {
- if (req.httpVersion === '1.0') {
- delete proxyRes.headers['transfer-encoding'];
- }
- },
-
- /**
- * If is a HTTP 1.0 request, set the correct connection header
- * or if connection header not present, then use `keep-alive`
- *
- * @param {ClientRequest} Req Request object
- * @param {IncomingMessage} Res Response object
- * @param {proxyResponse} Res Response object from the proxy request
- *
- * @api private
- */
- setConnection: function setConnection(req, res, proxyRes) {
- if (req.httpVersion === '1.0') {
- proxyRes.headers.connection = req.headers.connection || 'close';
- } else if (req.httpVersion !== '2.0' && !proxyRes.headers.connection) {
- proxyRes.headers.connection = req.headers.connection || 'keep-alive';
- }
- },
-
- setRedirectHostRewrite: function setRedirectHostRewrite(req, res, proxyRes, options) {
- if ((options.hostRewrite || options.autoRewrite || options.protocolRewrite)
- && proxyRes.headers['location']
- && redirectRegex.test(proxyRes.statusCode)) {
- var target = url$2.parse(options.target);
- var u = url$2.parse(proxyRes.headers['location']);
-
- // make sure the redirected host matches the target host before rewriting
- if (target.host != u.host) {
- return;
- }
-
- if (options.hostRewrite) {
- u.host = options.hostRewrite;
- } else if (options.autoRewrite) {
- u.host = req.headers['host'];
- }
- if (options.protocolRewrite) {
- u.protocol = options.protocolRewrite;
- }
-
- proxyRes.headers['location'] = u.format();
- }
- },
- /**
- * Copy headers from proxyResponse to response
- * set each header in response object.
- *
- * @param {ClientRequest} Req Request object
- * @param {IncomingMessage} Res Response object
- * @param {proxyResponse} Res Response object from the proxy request
- * @param {Object} Options options.cookieDomainRewrite: Config to rewrite cookie domain
- *
- * @api private
- */
- writeHeaders: function writeHeaders(req, res, proxyRes, options) {
- var rewriteCookieDomainConfig = options.cookieDomainRewrite,
- rewriteCookiePathConfig = options.cookiePathRewrite,
- preserveHeaderKeyCase = options.preserveHeaderKeyCase,
- rawHeaderKeyMap,
- setHeader = function(key, header) {
- if (header == undefined) return;
- if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {
- header = common$2.rewriteCookieProperty(header, rewriteCookieDomainConfig, 'domain');
- }
- if (rewriteCookiePathConfig && key.toLowerCase() === 'set-cookie') {
- header = common$2.rewriteCookieProperty(header, rewriteCookiePathConfig, 'path');
- }
- res.setHeader(String(key).trim(), header);
- };
-
- if (typeof rewriteCookieDomainConfig === 'string') { //also test for ''
- rewriteCookieDomainConfig = { '*': rewriteCookieDomainConfig };
- }
-
- if (typeof rewriteCookiePathConfig === 'string') { //also test for ''
- rewriteCookiePathConfig = { '*': rewriteCookiePathConfig };
- }
-
- // message.rawHeaders is added in: v0.11.6
- // https://nodejs.org/api/http.html#http_message_rawheaders
- if (preserveHeaderKeyCase && proxyRes.rawHeaders != undefined) {
- rawHeaderKeyMap = {};
- for (var i = 0; i < proxyRes.rawHeaders.length; i += 2) {
- var key = proxyRes.rawHeaders[i];
- rawHeaderKeyMap[key.toLowerCase()] = key;
- }
- }
-
- Object.keys(proxyRes.headers).forEach(function(key) {
- var header = proxyRes.headers[key];
- if (preserveHeaderKeyCase && rawHeaderKeyMap) {
- key = rawHeaderKeyMap[key] || key;
- }
- setHeader(key, header);
- });
- },
-
- /**
- * Set the statusCode from the proxyResponse
- *
- * @param {ClientRequest} Req Request object
- * @param {IncomingMessage} Res Response object
- * @param {proxyResponse} Res Response object from the proxy request
- *
- * @api private
- */
- writeStatusCode: function writeStatusCode(req, res, proxyRes) {
- // From Node.js docs: response.writeHead(statusCode[, statusMessage][, headers])
- if(proxyRes.statusMessage) {
- res.statusCode = proxyRes.statusCode;
- res.statusMessage = proxyRes.statusMessage;
- } else {
- res.statusCode = proxyRes.statusCode;
- }
- }
-
-};
-
-var followRedirects$1 = {exports: {}};
-
-var debug$7;
-
-var debug_1 = function () {
- if (!debug$7) {
- try {
- /* eslint global-require: off */
- debug$7 = require("debug")("follow-redirects");
- }
- catch (error) { /* */ }
- if (typeof debug$7 !== "function") {
- debug$7 = function () { /* */ };
- }
- }
- debug$7.apply(null, arguments);
-};
-
-var url$1 = require$$0__default$6;
-var URL$1 = url$1.URL;
-var http$1 = require$$1__default$1;
-var https$1 = require$$1__default$3;
-var Writable = require$$0__default$4.Writable;
-var assert$1 = require$$5__default;
-var debug$6 = debug_1;
-
-// Create handlers that pass events from native requests
-var events = ["abort", "aborted", "connect", "error", "socket", "timeout"];
-var eventHandlers = Object.create(null);
-events.forEach(function (event) {
- eventHandlers[event] = function (arg1, arg2, arg3) {
- this._redirectable.emit(event, arg1, arg2, arg3);
- };
-});
-
-// Error types with codes
-var RedirectionError = createErrorType(
- "ERR_FR_REDIRECTION_FAILURE",
- ""
-);
-var TooManyRedirectsError = createErrorType(
- "ERR_FR_TOO_MANY_REDIRECTS",
- "Maximum number of redirects exceeded"
-);
-var MaxBodyLengthExceededError = createErrorType(
- "ERR_FR_MAX_BODY_LENGTH_EXCEEDED",
- "Request body larger than maxBodyLength limit"
-);
-var WriteAfterEndError = createErrorType(
- "ERR_STREAM_WRITE_AFTER_END",
- "write after end"
-);
-
-// An HTTP(S) request that can be redirected
-function RedirectableRequest(options, responseCallback) {
- // Initialize the request
- Writable.call(this);
- this._sanitizeOptions(options);
- this._options = options;
- this._ended = false;
- this._ending = false;
- this._redirectCount = 0;
- this._redirects = [];
- this._requestBodyLength = 0;
- this._requestBodyBuffers = [];
-
- // Attach a callback if passed
- if (responseCallback) {
- this.on("response", responseCallback);
- }
-
- // React to responses of native requests
- var self = this;
- this._onNativeResponse = function (response) {
- self._processResponse(response);
- };
-
- // Perform the first request
- this._performRequest();
-}
-RedirectableRequest.prototype = Object.create(Writable.prototype);
-
-RedirectableRequest.prototype.abort = function () {
- abortRequest(this._currentRequest);
- this.emit("abort");
-};
-
-// Writes buffered data to the current native request
-RedirectableRequest.prototype.write = function (data, encoding, callback) {
- // Writing is not allowed if end has been called
- if (this._ending) {
- throw new WriteAfterEndError();
- }
-
- // Validate input and shift parameters if necessary
- if (!(typeof data === "string" || typeof data === "object" && ("length" in data))) {
- throw new TypeError("data should be a string, Buffer or Uint8Array");
- }
- if (typeof encoding === "function") {
- callback = encoding;
- encoding = null;
- }
-
- // Ignore empty buffers, since writing them doesn't invoke the callback
- // https://github.com/nodejs/node/issues/22066
- if (data.length === 0) {
- if (callback) {
- callback();
- }
- return;
- }
- // Only write when we don't exceed the maximum body length
- if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {
- this._requestBodyLength += data.length;
- this._requestBodyBuffers.push({ data: data, encoding: encoding });
- this._currentRequest.write(data, encoding, callback);
- }
- // Error when we exceed the maximum body length
- else {
- this.emit("error", new MaxBodyLengthExceededError());
- this.abort();
- }
-};
-
-// Ends the current native request
-RedirectableRequest.prototype.end = function (data, encoding, callback) {
- // Shift parameters if necessary
- if (typeof data === "function") {
- callback = data;
- data = encoding = null;
- }
- else if (typeof encoding === "function") {
- callback = encoding;
- encoding = null;
- }
-
- // Write data if needed and end
- if (!data) {
- this._ended = this._ending = true;
- this._currentRequest.end(null, null, callback);
- }
- else {
- var self = this;
- var currentRequest = this._currentRequest;
- this.write(data, encoding, function () {
- self._ended = true;
- currentRequest.end(null, null, callback);
- });
- this._ending = true;
- }
-};
-
-// Sets a header value on the current native request
-RedirectableRequest.prototype.setHeader = function (name, value) {
- this._options.headers[name] = value;
- this._currentRequest.setHeader(name, value);
-};
-
-// Clears a header value on the current native request
-RedirectableRequest.prototype.removeHeader = function (name) {
- delete this._options.headers[name];
- this._currentRequest.removeHeader(name);
-};
-
-// Global timeout for all underlying requests
-RedirectableRequest.prototype.setTimeout = function (msecs, callback) {
- var self = this;
-
- // Destroys the socket on timeout
- function destroyOnTimeout(socket) {
- socket.setTimeout(msecs);
- socket.removeListener("timeout", socket.destroy);
- socket.addListener("timeout", socket.destroy);
- }
-
- // Sets up a timer to trigger a timeout event
- function startTimer(socket) {
- if (self._timeout) {
- clearTimeout(self._timeout);
- }
- self._timeout = setTimeout(function () {
- self.emit("timeout");
- clearTimer();
- }, msecs);
- destroyOnTimeout(socket);
- }
-
- // Stops a timeout from triggering
- function clearTimer() {
- if (self._timeout) {
- clearTimeout(self._timeout);
- self._timeout = null;
- }
- if (callback) {
- self.removeListener("timeout", callback);
- }
- if (!self.socket) {
- self._currentRequest.removeListener("socket", startTimer);
- }
- }
-
- // Attach callback if passed
- if (callback) {
- this.on("timeout", callback);
- }
-
- // Start the timer if or when the socket is opened
- if (this.socket) {
- startTimer(this.socket);
- }
- else {
- this._currentRequest.once("socket", startTimer);
- }
-
- // Clean up on events
- this.on("socket", destroyOnTimeout);
- this.once("response", clearTimer);
- this.once("error", clearTimer);
-
- return this;
-};
-
-// Proxy all other public ClientRequest methods
-[
- "flushHeaders", "getHeader",
- "setNoDelay", "setSocketKeepAlive",
-].forEach(function (method) {
- RedirectableRequest.prototype[method] = function (a, b) {
- return this._currentRequest[method](a, b);
- };
-});
-
-// Proxy all public ClientRequest properties
-["aborted", "connection", "socket"].forEach(function (property) {
- Object.defineProperty(RedirectableRequest.prototype, property, {
- get: function () { return this._currentRequest[property]; },
- });
-});
-
-RedirectableRequest.prototype._sanitizeOptions = function (options) {
- // Ensure headers are always present
- if (!options.headers) {
- options.headers = {};
- }
-
- // Since http.request treats host as an alias of hostname,
- // but the url module interprets host as hostname plus port,
- // eliminate the host property to avoid confusion.
- if (options.host) {
- // Use hostname if set, because it has precedence
- if (!options.hostname) {
- options.hostname = options.host;
- }
- delete options.host;
- }
-
- // Complete the URL object when necessary
- if (!options.pathname && options.path) {
- var searchPos = options.path.indexOf("?");
- if (searchPos < 0) {
- options.pathname = options.path;
- }
- else {
- options.pathname = options.path.substring(0, searchPos);
- options.search = options.path.substring(searchPos);
- }
- }
-};
-
-
-// Executes the next native request (initial or redirect)
-RedirectableRequest.prototype._performRequest = function () {
- // Load the native protocol
- var protocol = this._options.protocol;
- var nativeProtocol = this._options.nativeProtocols[protocol];
- if (!nativeProtocol) {
- this.emit("error", new TypeError("Unsupported protocol " + protocol));
- return;
- }
-
- // If specified, use the agent corresponding to the protocol
- // (HTTP and HTTPS use different types of agents)
- if (this._options.agents) {
- var scheme = protocol.substr(0, protocol.length - 1);
- this._options.agent = this._options.agents[scheme];
- }
-
- // Create the native request
- var request = this._currentRequest =
- nativeProtocol.request(this._options, this._onNativeResponse);
- this._currentUrl = url$1.format(this._options);
-
- // Set up event handlers
- request._redirectable = this;
- for (var e = 0; e < events.length; e++) {
- request.on(events[e], eventHandlers[events[e]]);
- }
-
- // End a redirected request
- // (The first request must be ended explicitly with RedirectableRequest#end)
- if (this._isRedirect) {
- // Write the request entity and end.
- var i = 0;
- var self = this;
- var buffers = this._requestBodyBuffers;
- (function writeNext(error) {
- // Only write if this request has not been redirected yet
- /* istanbul ignore else */
- if (request === self._currentRequest) {
- // Report any write errors
- /* istanbul ignore if */
- if (error) {
- self.emit("error", error);
- }
- // Write the next buffer if there are still left
- else if (i < buffers.length) {
- var buffer = buffers[i++];
- /* istanbul ignore else */
- if (!request.finished) {
- request.write(buffer.data, buffer.encoding, writeNext);
- }
- }
- // End the request if `end` has been called on us
- else if (self._ended) {
- request.end();
- }
- }
- }());
- }
-};
-
-// Processes a response from the current native request
-RedirectableRequest.prototype._processResponse = function (response) {
- // Store the redirected response
- var statusCode = response.statusCode;
- if (this._options.trackRedirects) {
- this._redirects.push({
- url: this._currentUrl,
- headers: response.headers,
- statusCode: statusCode,
- });
- }
-
- // RFC7231§6.4: The 3xx (Redirection) class of status code indicates
- // that further action needs to be taken by the user agent in order to
- // fulfill the request. If a Location header field is provided,
- // the user agent MAY automatically redirect its request to the URI
- // referenced by the Location field value,
- // even if the specific status code is not understood.
- var location = response.headers.location;
- if (location && this._options.followRedirects !== false &&
- statusCode >= 300 && statusCode < 400) {
- // Abort the current request
- abortRequest(this._currentRequest);
- // Discard the remainder of the response to avoid waiting for data
- response.destroy();
-
- // RFC7231§6.4: A client SHOULD detect and intervene
- // in cyclical redirections (i.e., "infinite" redirection loops).
- if (++this._redirectCount > this._options.maxRedirects) {
- this.emit("error", new TooManyRedirectsError());
- return;
- }
-
- // RFC7231§6.4: Automatic redirection needs to done with
- // care for methods not known to be safe, […]
- // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change
- // the request method from POST to GET for the subsequent request.
- if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" ||
- // RFC7231§6.4.4: The 303 (See Other) status code indicates that
- // the server is redirecting the user agent to a different resource […]
- // A user agent can perform a retrieval request targeting that URI
- // (a GET or HEAD request if using HTTP) […]
- (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {
- this._options.method = "GET";
- // Drop a possible entity and headers related to it
- this._requestBodyBuffers = [];
- removeMatchingHeaders(/^content-/i, this._options.headers);
- }
-
- // Drop the Host header, as the redirect might lead to a different host
- var previousHostName = removeMatchingHeaders(/^host$/i, this._options.headers) ||
- url$1.parse(this._currentUrl).hostname;
-
- // Create the redirected request
- var redirectUrl = url$1.resolve(this._currentUrl, location);
- debug$6("redirecting to", redirectUrl);
- this._isRedirect = true;
- var redirectUrlParts = url$1.parse(redirectUrl);
- Object.assign(this._options, redirectUrlParts);
-
- // Drop the Authorization header if redirecting to another host
- if (redirectUrlParts.hostname !== previousHostName) {
- removeMatchingHeaders(/^authorization$/i, this._options.headers);
- }
-
- // Evaluate the beforeRedirect callback
- if (typeof this._options.beforeRedirect === "function") {
- var responseDetails = { headers: response.headers };
- try {
- this._options.beforeRedirect.call(null, this._options, responseDetails);
- }
- catch (err) {
- this.emit("error", err);
- return;
- }
- this._sanitizeOptions(this._options);
- }
-
- // Perform the redirected request
- try {
- this._performRequest();
- }
- catch (cause) {
- var error = new RedirectionError("Redirected request failed: " + cause.message);
- error.cause = cause;
- this.emit("error", error);
- }
- }
- else {
- // The response is not a redirect; return it as-is
- response.responseUrl = this._currentUrl;
- response.redirects = this._redirects;
- this.emit("response", response);
-
- // Clean up
- this._requestBodyBuffers = [];
- }
-};
-
-// Wraps the key/value object of protocols with redirect functionality
-function wrap(protocols) {
- // Default settings
- var exports = {
- maxRedirects: 21,
- maxBodyLength: 10 * 1024 * 1024,
- };
-
- // Wrap each protocol
- var nativeProtocols = {};
- Object.keys(protocols).forEach(function (scheme) {
- var protocol = scheme + ":";
- var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];
- var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);
-
- // Executes a request, following redirects
- function request(input, options, callback) {
- // Parse parameters
- if (typeof input === "string") {
- var urlStr = input;
- try {
- input = urlToOptions(new URL$1(urlStr));
- }
- catch (err) {
- /* istanbul ignore next */
- input = url$1.parse(urlStr);
- }
- }
- else if (URL$1 && (input instanceof URL$1)) {
- input = urlToOptions(input);
- }
- else {
- callback = options;
- options = input;
- input = { protocol: protocol };
- }
- if (typeof options === "function") {
- callback = options;
- options = null;
- }
-
- // Set defaults
- options = Object.assign({
- maxRedirects: exports.maxRedirects,
- maxBodyLength: exports.maxBodyLength,
- }, input, options);
- options.nativeProtocols = nativeProtocols;
-
- assert$1.equal(options.protocol, protocol, "protocol mismatch");
- debug$6("options", options);
- return new RedirectableRequest(options, callback);
- }
-
- // Executes a GET request, following redirects
- function get(input, options, callback) {
- var wrappedRequest = wrappedProtocol.request(input, options, callback);
- wrappedRequest.end();
- return wrappedRequest;
- }
-
- // Expose the properties on the wrapped protocol
- Object.defineProperties(wrappedProtocol, {
- request: { value: request, configurable: true, enumerable: true, writable: true },
- get: { value: get, configurable: true, enumerable: true, writable: true },
- });
- });
- return exports;
-}
-
-/* istanbul ignore next */
-function noop$2() { /* empty */ }
-
-// from https://github.com/nodejs/node/blob/master/lib/internal/url.js
-function urlToOptions(urlObject) {
- var options = {
- protocol: urlObject.protocol,
- hostname: urlObject.hostname.startsWith("[") ?
- /* istanbul ignore next */
- urlObject.hostname.slice(1, -1) :
- urlObject.hostname,
- hash: urlObject.hash,
- search: urlObject.search,
- pathname: urlObject.pathname,
- path: urlObject.pathname + urlObject.search,
- href: urlObject.href,
- };
- if (urlObject.port !== "") {
- options.port = Number(urlObject.port);
- }
- return options;
-}
-
-function removeMatchingHeaders(regex, headers) {
- var lastValue;
- for (var header in headers) {
- if (regex.test(header)) {
- lastValue = headers[header];
- delete headers[header];
- }
- }
- return lastValue;
-}
-
-function createErrorType(code, defaultMessage) {
- function CustomError(message) {
- Error.captureStackTrace(this, this.constructor);
- this.message = message || defaultMessage;
- }
- CustomError.prototype = new Error();
- CustomError.prototype.constructor = CustomError;
- CustomError.prototype.name = "Error [" + code + "]";
- CustomError.prototype.code = code;
- return CustomError;
-}
-
-function abortRequest(request) {
- for (var e = 0; e < events.length; e++) {
- request.removeListener(events[e], eventHandlers[events[e]]);
- }
- request.on("error", noop$2);
- request.abort();
-}
-
-// Exports
-followRedirects$1.exports = wrap({ http: http$1, https: https$1 });
-followRedirects$1.exports.wrap = wrap;
-
-var httpNative = require$$1__default$1,
- httpsNative = require$$1__default$3,
- web_o = webOutgoing,
- common$1 = common$3,
- followRedirects = followRedirects$1.exports;
-
-web_o = Object.keys(web_o).map(function(pass) {
- return web_o[pass];
-});
-
-var nativeAgents = { http: httpNative, https: httpsNative };
-
-/*!
- * Array of passes.
- *
- * A `pass` is just a function that is executed on `req, res, options`
- * so that you can easily add new checks while still keeping the base
- * flexible.
- */
-
-
-var webIncoming = {
-
- /**
- * Sets `content-length` to '0' if request is of DELETE type.
- *
- * @param {ClientRequest} Req Request object
- * @param {IncomingMessage} Res Response object
- * @param {Object} Options Config object passed to the proxy
- *
- * @api private
- */
-
- deleteLength: function deleteLength(req, res, options) {
- if((req.method === 'DELETE' || req.method === 'OPTIONS')
- && !req.headers['content-length']) {
- req.headers['content-length'] = '0';
- delete req.headers['transfer-encoding'];
- }
- },
-
- /**
- * Sets timeout in request socket if it was specified in options.
- *
- * @param {ClientRequest} Req Request object
- * @param {IncomingMessage} Res Response object
- * @param {Object} Options Config object passed to the proxy
- *
- * @api private
- */
-
- timeout: function timeout(req, res, options) {
- if(options.timeout) {
- req.socket.setTimeout(options.timeout);
- }
- },
-
- /**
- * Sets `x-forwarded-*` headers if specified in config.
- *
- * @param {ClientRequest} Req Request object
- * @param {IncomingMessage} Res Response object
- * @param {Object} Options Config object passed to the proxy
- *
- * @api private
- */
-
- XHeaders: function XHeaders(req, res, options) {
- if(!options.xfwd) return;
-
- var encrypted = req.isSpdy || common$1.hasEncryptedConnection(req);
- var values = {
- for : req.connection.remoteAddress || req.socket.remoteAddress,
- port : common$1.getPort(req),
- proto: encrypted ? 'https' : 'http'
- };
-
- ['for', 'port', 'proto'].forEach(function(header) {
- req.headers['x-forwarded-' + header] =
- (req.headers['x-forwarded-' + header] || '') +
- (req.headers['x-forwarded-' + header] ? ',' : '') +
- values[header];
- });
-
- req.headers['x-forwarded-host'] = req.headers['x-forwarded-host'] || req.headers['host'] || '';
- },
-
- /**
- * Does the actual proxying. If `forward` is enabled fires up
- * a ForwardStream, same happens for ProxyStream. The request
- * just dies otherwise.
- *
- * @param {ClientRequest} Req Request object
- * @param {IncomingMessage} Res Response object
- * @param {Object} Options Config object passed to the proxy
- *
- * @api private
- */
-
- stream: function stream(req, res, options, _, server, clb) {
-
- // And we begin!
- server.emit('start', req, res, options.target || options.forward);
-
- var agents = options.followRedirects ? followRedirects : nativeAgents;
- var http = agents.http;
- var https = agents.https;
-
- if(options.forward) {
- // If forward enable, so just pipe the request
- var forwardReq = (options.forward.protocol === 'https:' ? https : http).request(
- common$1.setupOutgoing(options.ssl || {}, options, req, 'forward')
- );
-
- // error handler (e.g. ECONNRESET, ECONNREFUSED)
- // Handle errors on incoming request as well as it makes sense to
- var forwardError = createErrorHandler(forwardReq, options.forward);
- req.on('error', forwardError);
- forwardReq.on('error', forwardError);
-
- (options.buffer || req).pipe(forwardReq);
- if(!options.target) { return res.end(); }
- }
-
- // Request initalization
- var proxyReq = (options.target.protocol === 'https:' ? https : http).request(
- common$1.setupOutgoing(options.ssl || {}, options, req)
- );
-
- // Enable developers to modify the proxyReq before headers are sent
- proxyReq.on('socket', function(socket) {
- if(server && !proxyReq.getHeader('expect')) {
- server.emit('proxyReq', proxyReq, req, res, options);
- }
- });
-
- // allow outgoing socket to timeout so that we could
- // show an error page at the initial request
- if(options.proxyTimeout) {
- proxyReq.setTimeout(options.proxyTimeout, function() {
- proxyReq.abort();
- });
- }
-
- // Ensure we abort proxy if request is aborted
- req.on('aborted', function () {
- proxyReq.abort();
- });
-
- // handle errors in proxy and incoming request, just like for forward proxy
- var proxyError = createErrorHandler(proxyReq, options.target);
- req.on('error', proxyError);
- proxyReq.on('error', proxyError);
-
- function createErrorHandler(proxyReq, url) {
- return function proxyError(err) {
- if (req.socket.destroyed && err.code === 'ECONNRESET') {
- server.emit('econnreset', err, req, res, url);
- return proxyReq.abort();
- }
-
- if (clb) {
- clb(err, req, res, url);
- } else {
- server.emit('error', err, req, res, url);
- }
- }
- }
-
- (options.buffer || req).pipe(proxyReq);
-
- proxyReq.on('response', function(proxyRes) {
- if(server) { server.emit('proxyRes', proxyRes, req, res); }
-
- if(!res.headersSent && !options.selfHandleResponse) {
- for(var i=0; i < web_o.length; i++) {
- if(web_o[i](req, res, proxyRes, options)) { break; }
- }
- }
-
- if (!res.finished) {
- // Allow us to listen when the proxy has completed
- proxyRes.on('end', function () {
- if (server) server.emit('end', req, res, proxyRes);
- });
- // We pipe to the response unless its expected to be handled by the user
- if (!options.selfHandleResponse) proxyRes.pipe(res);
- } else {
- if (server) server.emit('end', req, res, proxyRes);
- }
- });
- }
-
-};
-
-var http = require$$1__default$1,
- https = require$$1__default$3,
- common = common$3;
-
-/*!
- * Array of passes.
- *
- * A `pass` is just a function that is executed on `req, socket, options`
- * so that you can easily add new checks while still keeping the base
- * flexible.
- */
-
-/*
- * Websockets Passes
- *
- */
-
-
-var wsIncoming = {
- /**
- * WebSocket requests must have the `GET` method and
- * the `upgrade:websocket` header
- *
- * @param {ClientRequest} Req Request object
- * @param {Socket} Websocket
- *
- * @api private
- */
-
- checkMethodAndHeader : function checkMethodAndHeader(req, socket) {
- if (req.method !== 'GET' || !req.headers.upgrade) {
- socket.destroy();
- return true;
- }
-
- if (req.headers.upgrade.toLowerCase() !== 'websocket') {
- socket.destroy();
- return true;
- }
- },
-
- /**
- * Sets `x-forwarded-*` headers if specified in config.
- *
- * @param {ClientRequest} Req Request object
- * @param {Socket} Websocket
- * @param {Object} Options Config object passed to the proxy
- *
- * @api private
- */
-
- XHeaders : function XHeaders(req, socket, options) {
- if(!options.xfwd) return;
-
- var values = {
- for : req.connection.remoteAddress || req.socket.remoteAddress,
- port : common.getPort(req),
- proto: common.hasEncryptedConnection(req) ? 'wss' : 'ws'
- };
-
- ['for', 'port', 'proto'].forEach(function(header) {
- req.headers['x-forwarded-' + header] =
- (req.headers['x-forwarded-' + header] || '') +
- (req.headers['x-forwarded-' + header] ? ',' : '') +
- values[header];
- });
- },
-
- /**
- * Does the actual proxying. Make the request and upgrade it
- * send the Switching Protocols request and pipe the sockets.
- *
- * @param {ClientRequest} Req Request object
- * @param {Socket} Websocket
- * @param {Object} Options Config object passed to the proxy
- *
- * @api private
- */
- stream : function stream(req, socket, options, head, server, clb) {
-
- var createHttpHeader = function(line, headers) {
- return Object.keys(headers).reduce(function (head, key) {
- var value = headers[key];
-
- if (!Array.isArray(value)) {
- head.push(key + ': ' + value);
- return head;
- }
-
- for (var i = 0; i < value.length; i++) {
- head.push(key + ': ' + value[i]);
- }
- return head;
- }, [line])
- .join('\r\n') + '\r\n\r\n';
- };
-
- common.setupSocket(socket);
-
- if (head && head.length) socket.unshift(head);
-
-
- var proxyReq = (common.isSSL.test(options.target.protocol) ? https : http).request(
- common.setupOutgoing(options.ssl || {}, options, req)
- );
-
- // Enable developers to modify the proxyReq before headers are sent
- if (server) { server.emit('proxyReqWs', proxyReq, req, socket, options, head); }
-
- // Error Handler
- proxyReq.on('error', onOutgoingError);
- proxyReq.on('response', function (res) {
- // if upgrade event isn't going to happen, close the socket
- if (!res.upgrade) {
- socket.write(createHttpHeader('HTTP/' + res.httpVersion + ' ' + res.statusCode + ' ' + res.statusMessage, res.headers));
- res.pipe(socket);
- }
- });
-
- proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) {
- proxySocket.on('error', onOutgoingError);
-
- // Allow us to listen when the websocket has completed
- proxySocket.on('end', function () {
- server.emit('close', proxyRes, proxySocket, proxyHead);
- });
-
- // The pipe below will end proxySocket if socket closes cleanly, but not
- // if it errors (eg, vanishes from the net and starts returning
- // EHOSTUNREACH). We need to do that explicitly.
- socket.on('error', function () {
- proxySocket.end();
- });
-
- common.setupSocket(proxySocket);
-
- if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead);
-
- //
- // Remark: Handle writing the headers to the socket when switching protocols
- // Also handles when a header is an array
- //
- socket.write(createHttpHeader('HTTP/1.1 101 Switching Protocols', proxyRes.headers));
-
- proxySocket.pipe(socket).pipe(proxySocket);
-
- server.emit('open', proxySocket);
- server.emit('proxySocket', proxySocket); //DEPRECATED.
- });
-
- return proxyReq.end(); // XXX: CHECK IF THIS IS THIS CORRECT
-
- function onOutgoingError(err) {
- if (clb) {
- clb(err, req, socket);
- } else {
- server.emit('error', err, req, socket);
- }
- socket.end();
- }
- }
-};
-
-(function (module) {
-var httpProxy = module.exports,
- extend = require$$0__default$2._extend,
- parse_url = require$$0__default$6.parse,
- EE3 = eventemitter3.exports,
- http = require$$1__default$1,
- https = require$$1__default$3,
- web = webIncoming,
- ws = wsIncoming;
-
-httpProxy.Server = ProxyServer;
-
-/**
- * Returns a function that creates the loader for
- * either `ws` or `web`'s passes.
- *
- * Examples:
- *
- * httpProxy.createRightProxy('ws')
- * // => [Function]
- *
- * @param {String} Type Either 'ws' or 'web'
- * 
- * @return {Function} Loader Function that when called returns an iterator for the right passes
- *
- * @api private
- */
-
-function createRightProxy(type) {
-
- return function(options) {
- return function(req, res /*, [head], [opts] */) {
- var passes = (type === 'ws') ? this.wsPasses : this.webPasses,
- args = [].slice.call(arguments),
- cntr = args.length - 1,
- head, cbl;
-
- /* optional args parse begin */
- if(typeof args[cntr] === 'function') {
- cbl = args[cntr];
-
- cntr--;
- }
-
- var requestOptions = options;
- if(
- !(args[cntr] instanceof Buffer) &&
- args[cntr] !== res
- ) {
- //Copy global options
- requestOptions = extend({}, options);
- //Overwrite with request options
- extend(requestOptions, args[cntr]);
-
- cntr--;
- }
-
- if(args[cntr] instanceof Buffer) {
- head = args[cntr];
- }
-
- /* optional args parse end */
-
- ['target', 'forward'].forEach(function(e) {
- if (typeof requestOptions[e] === 'string')
- requestOptions[e] = parse_url(requestOptions[e]);
- });
-
- if (!requestOptions.target && !requestOptions.forward) {
- return this.emit('error', new Error('Must provide a proper URL as target'));
- }
-
- for(var i=0; i < passes.length; i++) {
- /**
- * Call of passes functions
- * pass(req, res, options, head)
- *
- * In WebSockets case the `res` variable
- * refer to the connection socket
- * pass(req, socket, options, head)
- */
- if(passes[i](req, res, requestOptions, head, this, cbl)) { // passes can return a truthy value to halt the loop
- break;
- }
- }
- };
- };
-}
-httpProxy.createRightProxy = createRightProxy;
-
-function ProxyServer(options) {
- EE3.call(this);
-
- options = options || {};
- options.prependPath = options.prependPath === false ? false : true;
-
- this.web = this.proxyRequest = createRightProxy('web')(options);
- this.ws = this.proxyWebsocketRequest = createRightProxy('ws')(options);
- this.options = options;
-
- this.webPasses = Object.keys(web).map(function(pass) {
- return web[pass];
- });
-
- this.wsPasses = Object.keys(ws).map(function(pass) {
- return ws[pass];
- });
-
- this.on('error', this.onError, this);
-
-}
-
-require$$0__default$2.inherits(ProxyServer, EE3);
-
-ProxyServer.prototype.onError = function (err) {
- //
- // Remark: Replicate node core behavior using EE3
- // so we force people to handle their own errors
- //
- if(this.listeners('error').length === 1) {
- throw err;
- }
-};
-
-ProxyServer.prototype.listen = function(port, hostname) {
- var self = this,
- closure = function(req, res) { self.web(req, res); };
-
- this._server = this.options.ssl ?
- https.createServer(this.options.ssl, closure) :
- http.createServer(closure);
-
- if(this.options.ws) {
- this._server.on('upgrade', function(req, socket, head) { self.ws(req, socket, head); });
- }
-
- this._server.listen(port, hostname);
-
- return this;
-};
-
-ProxyServer.prototype.close = function(callback) {
- var self = this;
- if (this._server) {
- this._server.close(done);
- }
-
- // Wrap callback to nullify server after all open connections are closed.
- function done() {
- self._server = null;
- if (callback) {
- callback.apply(null, arguments);
- }
- }};
-
-ProxyServer.prototype.before = function(type, passName, callback) {
- if (type !== 'ws' && type !== 'web') {
- throw new Error('type must be `web` or `ws`');
- }
- var passes = (type === 'ws') ? this.wsPasses : this.webPasses,
- i = false;
-
- passes.forEach(function(v, idx) {
- if(v.name === passName) i = idx;
- });
-
- if(i === false) throw new Error('No such pass');
-
- passes.splice(i, 0, callback);
-};
-ProxyServer.prototype.after = function(type, passName, callback) {
- if (type !== 'ws' && type !== 'web') {
- throw new Error('type must be `web` or `ws`');
- }
- var passes = (type === 'ws') ? this.wsPasses : this.webPasses,
- i = false;
-
- passes.forEach(function(v, idx) {
- if(v.name === passName) i = idx;
- });
-
- if(i === false) throw new Error('No such pass');
-
- passes.splice(i++, 0, callback);
-};
-}(httpProxy$2));
-
-// Use explicit /index.js to help browserify negociation in require '/lib/http-proxy' (!)
-var ProxyServer = httpProxy$2.exports.Server;
-
-
-/**
- * Creates the proxy server.
- *
- * Examples:
- *
- * httpProxy.createProxyServer({ .. }, 8000)
- * // => '{ web: [Function], ws: [Function] ... }'
- *
- * @param {Object} Options Config object passed to the proxy
- *
- * @return {Object} Proxy Proxy object with handlers for `ws` and `web` requests
- *
- * @api public
- */
-
-
-function createProxyServer(options) {
- /*
- * `options` is needed and it must have the following layout:
- *
- * {
- * target : <url string to be parsed with the url module>
- * forward: <url string to be parsed with the url module>
- * agent : <object to be passed to http(s).request>
- * ssl : <object to be passed to https.createServer()>
- * ws : <true/false, if you want to proxy websockets>
- * xfwd : <true/false, adds x-forward headers>
- * secure : <true/false, verify SSL certificate>
- * toProxy: <true/false, explicitly specify if we are proxying to another proxy>
- * prependPath: <true/false, Default: true - specify whether you want to prepend the target's path to the proxy path>
- * ignorePath: <true/false, Default: false - specify whether you want to ignore the proxy path of the incoming request>
- * localAddress : <Local interface string to bind for outgoing connections>
- * changeOrigin: <true/false, Default: false - changes the origin of the host header to the target URL>
- * preserveHeaderKeyCase: <true/false, Default: false - specify whether you want to keep letter case of response header key >
- * auth : Basic authentication i.e. 'user:password' to compute an Authorization header.
- * hostRewrite: rewrites the location hostname on (201/301/302/307/308) redirects, Default: null.
- * autoRewrite: rewrites the location host/port on (201/301/302/307/308) redirects based on requested host/port. Default: false.
- * protocolRewrite: rewrites the location protocol on (201/301/302/307/308) redirects to 'http' or 'https'. Default: null.
- * }
- *
- * NOTE: `options.ws` and `options.ssl` are optional.
- * `options.target and `options.forward` cannot be
- * both missing
- * }
- */
-
- return new ProxyServer(options);
-}
-
-
-ProxyServer.createProxyServer = createProxyServer;
-ProxyServer.createServer = createProxyServer;
-ProxyServer.createProxy = createProxyServer;
-
-
-
-
-/**
- * Export the proxy "Server" as the main export.
- */
-var httpProxy$1 = ProxyServer;
-
-/*!
- * Caron dimonio, con occhi di bragia
- * loro accennando, tutte le raccoglie;
- * batte col remo qualunque s’adagia
- *
- * Charon the demon, with the eyes of glede,
- * Beckoning to them, collects them all together,
- * Beats with his oar whoever lags behind
- *
- * Dante - The Divine Comedy (Canto III)
- */
-
-var httpProxy = httpProxy$1;
-
-const debug$5 = createDebugger('vite:proxy');
-function proxyMiddleware(httpServer, config) {
- const options = config.server.proxy;
- // lazy require only when proxy is used
- const proxies = {};
- Object.keys(options).forEach((context) => {
- let opts = options[context];
- if (typeof opts === 'string') {
- opts = { target: opts, changeOrigin: true };
- }
- const proxy = httpProxy.createProxyServer(opts);
- proxy.on('error', (err) => {
- config.logger.error(`${source.red(`http proxy error:`)}\n${err.stack}`, {
- timestamp: true,
- error: err
- });
- });
- if (opts.configure) {
- opts.configure(proxy, opts);
- }
- // clone before saving because http-proxy mutates the options
- proxies[context] = [proxy, { ...opts }];
- });
- if (httpServer) {
- httpServer.on('upgrade', (req, socket, head) => {
- var _a;
- const url = req.url;
- for (const context in proxies) {
- if (doesProxyContextMatchUrl(context, url)) {
- const [proxy, opts] = proxies[context];
- if ((opts.ws || ((_a = opts.target) === null || _a === void 0 ? void 0 : _a.toString().startsWith('ws:'))) &&
- req.headers['sec-websocket-protocol'] !== HMR_HEADER) {
- if (opts.rewrite) {
- req.url = opts.rewrite(url);
- }
- debug$5(`${req.url} -> ws ${opts.target}`);
- proxy.ws(req, socket, head);
- return;
- }
- }
- }
- });
- }
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return function viteProxyMiddleware(req, res, next) {
- const url = req.url;
- for (const context in proxies) {
- if (doesProxyContextMatchUrl(context, url)) {
- const [proxy, opts] = proxies[context];
- const options = {};
- if (opts.bypass) {
- const bypassResult = opts.bypass(req, res, opts);
- if (typeof bypassResult === 'string') {
- req.url = bypassResult;
- debug$5(`bypass: ${req.url} -> ${bypassResult}`);
- return next();
- }
- else if (isObject$3(bypassResult)) {
- Object.assign(options, bypassResult);
- debug$5(`bypass: ${req.url} use modified options: %O`, options);
- return next();
- }
- else if (bypassResult === false) {
- debug$5(`bypass: ${req.url} -> 404`);
- return res.end(404);
- }
- }
- debug$5(`${req.url} -> ${opts.target || opts.forward}`);
- if (opts.rewrite) {
- req.url = opts.rewrite(req.url);
- }
- proxy.web(req, res, options);
- return;
- }
- }
- next();
- };
-}
-function doesProxyContextMatchUrl(context, url) {
- return ((context.startsWith('^') && new RegExp(context).test(url)) ||
- url.startsWith(context));
-}
-
-var lib = {exports: {}};
-
-(function (module, exports) {
-
-var url = require$$0__default$6;
-
-module.exports = function historyApiFallback(options) {
- options = options || {};
- var logger = getLogger(options);
-
- return function(req, res, next) {
- var headers = req.headers;
- if (req.method !== 'GET') {
- logger(
- 'Not rewriting',
- req.method,
- req.url,
- 'because the method is not GET.'
- );
- return next();
- } else if (!headers || typeof headers.accept !== 'string') {
- logger(
- 'Not rewriting',
- req.method,
- req.url,
- 'because the client did not send an HTTP accept header.'
- );
- return next();
- } else if (headers.accept.indexOf('application/json') === 0) {
- logger(
- 'Not rewriting',
- req.method,
- req.url,
- 'because the client prefers JSON.'
- );
- return next();
- } else if (!acceptsHtml(headers.accept, options)) {
- logger(
- 'Not rewriting',
- req.method,
- req.url,
- 'because the client does not accept HTML.'
- );
- return next();
- }
-
- var parsedUrl = url.parse(req.url);
- var rewriteTarget;
- options.rewrites = options.rewrites || [];
- for (var i = 0; i < options.rewrites.length; i++) {
- var rewrite = options.rewrites[i];
- var match = parsedUrl.pathname.match(rewrite.from);
- if (match !== null) {
- rewriteTarget = evaluateRewriteRule(parsedUrl, match, rewrite.to, req);
-
- if(rewriteTarget.charAt(0) !== '/') {
- logger(
- 'We recommend using an absolute path for the rewrite target.',
- 'Received a non-absolute rewrite target',
- rewriteTarget,
- 'for URL',
- req.url
- );
- }
-
- logger('Rewriting', req.method, req.url, 'to', rewriteTarget);
- req.url = rewriteTarget;
- return next();
- }
- }
-
- var pathname = parsedUrl.pathname;
- if (pathname.lastIndexOf('.') > pathname.lastIndexOf('/') &&
- options.disableDotRule !== true) {
- logger(
- 'Not rewriting',
- req.method,
- req.url,
- 'because the path includes a dot (.) character.'
- );
- return next();
- }
-
- rewriteTarget = options.index || '/index.html';
- logger('Rewriting', req.method, req.url, 'to', rewriteTarget);
- req.url = rewriteTarget;
- next();
- };
-};
-
-function evaluateRewriteRule(parsedUrl, match, rule, req) {
- if (typeof rule === 'string') {
- return rule;
- } else if (typeof rule !== 'function') {
- throw new Error('Rewrite rule can only be of type string or function.');
- }
-
- return rule({
- parsedUrl: parsedUrl,
- match: match,
- request: req
- });
-}
-
-function acceptsHtml(header, options) {
- options.htmlAcceptHeaders = options.htmlAcceptHeaders || ['text/html', '*/*'];
- for (var i = 0; i < options.htmlAcceptHeaders.length; i++) {
- if (header.indexOf(options.htmlAcceptHeaders[i]) !== -1) {
- return true;
- }
- }
- return false;
-}
-
-function getLogger(options) {
- if (options && options.logger) {
- return options.logger;
- } else if (options && options.verbose) {
- return console.log.bind(console);
- }
- return function(){};
-}
-}(lib));
-
-var history = lib.exports;
-
-function spaFallbackMiddleware(root) {
- const historySpaFallbackMiddleware = history({
- logger: createDebugger('vite:spa-fallback'),
- // support /dir/ without explicit index.html
- rewrites: [
- {
- from: /\/$/,
- to({ parsedUrl }) {
- const rewritten = parsedUrl.pathname + 'index.html';
- if (fs__default.existsSync(path__default.join(root, rewritten))) {
- return rewritten;
- }
- else {
- return `/index.html`;
- }
- }
- }
- ]
- });
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return function viteSpaFallbackMiddleware(req, res, next) {
- return historySpaFallbackMiddleware(req, res, next);
- };
-}
-
-/*!
- * etag
- * Copyright(c) 2014-2016 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-var etag_1 = etag;
-
-/**
- * Module dependencies.
- * @private
- */
-
-var crypto = require$$1__default$2;
-var Stats = fs__default.Stats;
-
-/**
- * Module variables.
- * @private
- */
-
-var toString = Object.prototype.toString;
-
-/**
- * Generate an entity tag.
- *
- * @param {Buffer|string} entity
- * @return {string}
- * @private
- */
-
-function entitytag (entity) {
- if (entity.length === 0) {
- // fast-path empty
- return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"'
- }
-
- // compute hash of entity
- var hash = crypto
- .createHash('sha1')
- .update(entity, 'utf8')
- .digest('base64')
- .substring(0, 27);
-
- // compute length of entity
- var len = typeof entity === 'string'
- ? Buffer.byteLength(entity, 'utf8')
- : entity.length;
-
- return '"' + len.toString(16) + '-' + hash + '"'
-}
-
-/**
- * Create a simple ETag.
- *
- * @param {string|Buffer|Stats} entity
- * @param {object} [options]
- * @param {boolean} [options.weak]
- * @return {String}
- * @public
- */
-
-function etag (entity, options) {
- if (entity == null) {
- throw new TypeError('argument entity is required')
- }
-
- // support fs.Stats object
- var isStats = isstats(entity);
- var weak = options && typeof options.weak === 'boolean'
- ? options.weak
- : isStats;
-
- // validate argument
- if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {
- throw new TypeError('argument entity must be string, Buffer, or fs.Stats')
- }
-
- // generate entity tag
- var tag = isStats
- ? stattag(entity)
- : entitytag(entity);
-
- return weak
- ? 'W/' + tag
- : tag
-}
-
-/**
- * Determine if object is a Stats object.
- *
- * @param {object} obj
- * @return {boolean}
- * @api private
- */
-
-function isstats (obj) {
- // genuine fs.Stats
- if (typeof Stats === 'function' && obj instanceof Stats) {
- return true
- }
-
- // quack quack
- return obj && typeof obj === 'object' &&
- 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&
- 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&
- 'ino' in obj && typeof obj.ino === 'number' &&
- 'size' in obj && typeof obj.size === 'number'
-}
-
-/**
- * Generate a tag for a stat.
- *
- * @param {object} stat
- * @return {string}
- * @private
- */
-
-function stattag (stat) {
- var mtime = stat.mtime.getTime().toString(16);
- var size = stat.size.toString(16);
-
- return '"' + size + '-' + mtime + '"'
-}
-
-const isDebug$4 = process.env.DEBUG;
-const alias$1 = {
- js: 'application/javascript',
- css: 'text/css',
- html: 'text/html',
- json: 'application/json'
-};
-function send$1(req, res, content, type, etag = etag_1(content, { weak: true }), cacheControl = 'no-cache', map) {
- if (res.writableEnded) {
- return;
- }
- if (req.headers['if-none-match'] === etag) {
- res.statusCode = 304;
- return res.end();
- }
- res.setHeader('Content-Type', alias$1[type] || type);
- res.setHeader('Cache-Control', cacheControl);
- res.setHeader('Etag', etag);
- // inject source map reference
- if (map && map.mappings) {
- if (isDebug$4) {
- content += `\n/*${JSON.stringify(map, null, 2).replace(/\*\//g, '*\\/')}*/\n`;
- }
- content += genSourceMapString(map);
- }
- res.statusCode = 200;
- return res.end(content);
-}
-function genSourceMapString(map) {
- if (typeof map !== 'string') {
- map = JSON.stringify(map);
- }
- return `\n//# sourceMappingURL=data:application/json;base64,${Buffer.from(map).toString('base64')}`;
-}
-
-var convertSourceMap = {};
-
-var safeBuffer = {exports: {}};
-
-/* eslint-disable node/no-deprecated-api */
-
-(function (module, exports) {
-var buffer = require$$0__default$8;
-var Buffer = buffer.Buffer;
-
-// alternative to using Object.keys for old browsers
-function copyProps (src, dst) {
- for (var key in src) {
- dst[key] = src[key];
- }
-}
-if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
- module.exports = buffer;
-} else {
- // Copy properties from require('buffer')
- copyProps(buffer, exports);
- exports.Buffer = SafeBuffer;
-}
-
-function SafeBuffer (arg, encodingOrOffset, length) {
- return Buffer(arg, encodingOrOffset, length)
-}
-
-// Copy static methods from Buffer
-copyProps(Buffer, SafeBuffer);
-
-SafeBuffer.from = function (arg, encodingOrOffset, length) {
- if (typeof arg === 'number') {
- throw new TypeError('Argument must not be a number')
- }
- return Buffer(arg, encodingOrOffset, length)
-};
-
-SafeBuffer.alloc = function (size, fill, encoding) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- var buf = Buffer(size);
- if (fill !== undefined) {
- if (typeof encoding === 'string') {
- buf.fill(fill, encoding);
- } else {
- buf.fill(fill);
- }
- } else {
- buf.fill(0);
- }
- return buf
-};
-
-SafeBuffer.allocUnsafe = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return Buffer(size)
-};
-
-SafeBuffer.allocUnsafeSlow = function (size) {
- if (typeof size !== 'number') {
- throw new TypeError('Argument must be a number')
- }
- return buffer.SlowBuffer(size)
-};
-}(safeBuffer, safeBuffer.exports));
-
-(function (exports) {
-var fs = fs__default;
-var path = path__default;
-var SafeBuffer = safeBuffer.exports;
-
-Object.defineProperty(exports, 'commentRegex', {
- get: function getCommentRegex () {
- return /^\s*\/(?:\/|\*)[@#]\s+sourceMappingURL=data:(?:application|text)\/json;(?:charset[:=]\S+?;)?base64,(?:.*)$/mg;
- }
-});
-
-Object.defineProperty(exports, 'mapFileCommentRegex', {
- get: function getMapFileCommentRegex () {
- // Matches sourceMappingURL in either // or /* comment styles.
- return /(?:\/\/[@#][ \t]+sourceMappingURL=([^\s'"`]+?)[ \t]*$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^\*]+?)[ \t]*(?:\*\/){1}[ \t]*$)/mg;
- }
-});
-
-
-function decodeBase64(base64) {
- return (SafeBuffer.Buffer.from(base64, 'base64') || "").toString();
-}
-
-function stripComment(sm) {
- return sm.split(',').pop();
-}
-
-function readFromFileMap(sm, dir) {
- // NOTE: this will only work on the server since it attempts to read the map file
-
- var r = exports.mapFileCommentRegex.exec(sm);
-
- // for some odd reason //# .. captures in 1 and /* .. */ in 2
- var filename = r[1] || r[2];
- var filepath = path.resolve(dir, filename);
-
- try {
- return fs.readFileSync(filepath, 'utf8');
- } catch (e) {
- throw new Error('An error occurred while trying to read the map file at ' + filepath + '\n' + e);
- }
-}
-
-function Converter (sm, opts) {
- opts = opts || {};
-
- if (opts.isFileComment) sm = readFromFileMap(sm, opts.commentFileDir);
- if (opts.hasComment) sm = stripComment(sm);
- if (opts.isEncoded) sm = decodeBase64(sm);
- if (opts.isJSON || opts.isEncoded) sm = JSON.parse(sm);
-
- this.sourcemap = sm;
-}
-
-Converter.prototype.toJSON = function (space) {
- return JSON.stringify(this.sourcemap, null, space);
-};
-
-Converter.prototype.toBase64 = function () {
- var json = this.toJSON();
- return (SafeBuffer.Buffer.from(json, 'utf8') || "").toString('base64');
-};
-
-Converter.prototype.toComment = function (options) {
- var base64 = this.toBase64();
- var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
- return options && options.multiline ? '/*# ' + data + ' */' : '//# ' + data;
-};
-
-// returns copy instead of original
-Converter.prototype.toObject = function () {
- return JSON.parse(this.toJSON());
-};
-
-Converter.prototype.addProperty = function (key, value) {
- if (this.sourcemap.hasOwnProperty(key)) throw new Error('property "' + key + '" already exists on the sourcemap, use set property instead');
- return this.setProperty(key, value);
-};
-
-Converter.prototype.setProperty = function (key, value) {
- this.sourcemap[key] = value;
- return this;
-};
-
-Converter.prototype.getProperty = function (key) {
- return this.sourcemap[key];
-};
-
-exports.fromObject = function (obj) {
- return new Converter(obj);
-};
-
-exports.fromJSON = function (json) {
- return new Converter(json, { isJSON: true });
-};
-
-exports.fromBase64 = function (base64) {
- return new Converter(base64, { isEncoded: true });
-};
-
-exports.fromComment = function (comment) {
- comment = comment
- .replace(/^\/\*/g, '//')
- .replace(/\*\/$/g, '');
-
- return new Converter(comment, { isEncoded: true, hasComment: true });
-};
-
-exports.fromMapFileComment = function (comment, dir) {
- return new Converter(comment, { commentFileDir: dir, isFileComment: true, isJSON: true });
-};
-
-// Finds last sourcemap comment in file or returns null if none was found
-exports.fromSource = function (content) {
- var m = content.match(exports.commentRegex);
- return m ? exports.fromComment(m.pop()) : null;
-};
-
-// Finds last sourcemap comment in file or returns null if none was found
-exports.fromMapFileSource = function (content, dir) {
- var m = content.match(exports.mapFileCommentRegex);
- return m ? exports.fromMapFileComment(m.pop(), dir) : null;
-};
-
-exports.removeComments = function (src) {
- return src.replace(exports.commentRegex, '');
-};
-
-exports.removeMapFileComments = function (src) {
- return src.replace(exports.mapFileCommentRegex, '');
-};
-
-exports.generateMapFileComment = function (file, options) {
- var data = 'sourceMappingURL=' + file;
- return options && options.multiline ? '/*# ' + data + ' */' : '//# ' + data;
-};
-}(convertSourceMap));
-
-/**
- *
- * @param {Node} param
- * @returns {string[]}
- */
-function extract_names(param) {
- return extract_identifiers(param).map(node => node.name);
-}
-
-/**
- *
- * @param {Node} param
- * @param {Identifier[]} nodes
- * @returns {Identifier[]}
- */
-function extract_identifiers(param, nodes = []) {
- switch (param.type) {
- case 'Identifier':
- nodes.push(param);
- break;
-
- case 'MemberExpression':
- let object = param;
- while (object.type === 'MemberExpression') {
- object = /** @type {any} */ (object.object);
- }
- nodes.push(/** @type {any} */ (object));
- break;
-
- case 'ObjectPattern':
- /**
- *
- * @param {Property | RestElement} prop
- */
- const handle_prop = (prop) => {
- if (prop.type === 'RestElement') {
- extract_identifiers(prop.argument, nodes);
- } else {
- extract_identifiers(prop.value, nodes);
- }
- };
-
- param.properties.forEach(handle_prop);
- break;
-
- case 'ArrayPattern':
- /**
- *
- * @param {Node} element
- */
- const handle_element = (element) => {
- if (element) extract_identifiers(element, nodes);
- };
-
- param.elements.forEach(handle_element);
- break;
-
- case 'RestElement':
- extract_identifiers(param.argument, nodes);
- break;
-
- case 'AssignmentPattern':
- extract_identifiers(param.left, nodes);
- break;
- }
-
- return nodes;
-}
-
-const ssrModuleExportsKey = `__vite_ssr_exports__`;
-const ssrImportKey = `__vite_ssr_import__`;
-const ssrDynamicImportKey = `__vite_ssr_dynamic_import__`;
-const ssrExportAllKey = `__vite_ssr_exportAll__`;
-const ssrImportMetaKey = `__vite_ssr_import_meta__`;
-async function ssrTransform(code, inMap, url) {
- const s = new MagicString(code);
- let ast;
- try {
- ast = parser.parse(code, {
- sourceType: 'module',
- ecmaVersion: 'latest',
- locations: true
- });
- }
- catch (err) {
- if (!err.loc || !err.loc.line)
- throw err;
- const line = err.loc.line;
- throw new Error(`Parse failure: ${err.message}\nContents of line ${line}: ${code.split('\n')[line - 1]}`);
- }
- let uid = 0;
- const deps = new Set();
- const dynamicDeps = new Set();
- const idToImportMap = new Map();
- const declaredConst = new Set();
- function defineImport(node, source) {
- deps.add(source);
- const importId = `__vite_ssr_import_${uid++}__`;
- s.appendLeft(node.start, `const ${importId} = await ${ssrImportKey}(${JSON.stringify(source)});\n`);
- return importId;
- }
- function defineExport(position, name, local = name) {
- s.appendRight(position, `\nObject.defineProperty(${ssrModuleExportsKey}, "${name}", ` +
- `{ enumerable: true, configurable: true, get(){ return ${local} }});`);
- }
- // 1. check all import statements and record id -> importName map
- for (const node of ast.body) {
- // import foo from 'foo' --> foo -> __import_foo__.default
- // import { baz } from 'foo' --> baz -> __import_foo__.baz
- // import * as ok from 'foo' --> ok -> __import_foo__
- if (node.type === 'ImportDeclaration') {
- const importId = defineImport(node, node.source.value);
- for (const spec of node.specifiers) {
- if (spec.type === 'ImportSpecifier') {
- idToImportMap.set(spec.local.name, `${importId}.${spec.imported.name}`);
- }
- else if (spec.type === 'ImportDefaultSpecifier') {
- idToImportMap.set(spec.local.name, `${importId}.default`);
- }
- else {
- // namespace specifier
- idToImportMap.set(spec.local.name, importId);
- }
- }
- s.remove(node.start, node.end);
- }
- }
- // 2. check all export statements and define exports
- for (const node of ast.body) {
- // named exports
- if (node.type === 'ExportNamedDeclaration') {
- if (node.declaration) {
- if (node.declaration.type === 'FunctionDeclaration' ||
- node.declaration.type === 'ClassDeclaration') {
- // export function foo() {}
- defineExport(node.end, node.declaration.id.name);
- }
- else {
- // export const foo = 1, bar = 2
- for (const declaration of node.declaration.declarations) {
- const names = extract_names(declaration.id);
- for (const name of names) {
- defineExport(node.end, name);
- }
- }
- }
- s.remove(node.start, node.declaration.start);
- }
- else {
- s.remove(node.start, node.end);
- if (node.source) {
- // export { foo, bar } from './foo'
- const importId = defineImport(node, node.source.value);
- for (const spec of node.specifiers) {
- defineExport(node.end, spec.exported.name, `${importId}.${spec.local.name}`);
- }
- }
- else {
- // export { foo, bar }
- for (const spec of node.specifiers) {
- const local = spec.local.name;
- const binding = idToImportMap.get(local);
- defineExport(node.end, spec.exported.name, binding || local);
- }
- }
- }
- }
- // default export
- if (node.type === 'ExportDefaultDeclaration') {
- if ('id' in node.declaration && node.declaration.id) {
- // named hoistable/class exports
- // export default function foo() {}
- // export default class A {}
- const { name } = node.declaration.id;
- s.remove(node.start, node.start + 15 /* 'export default '.length */);
- s.append(`\nObject.defineProperty(${ssrModuleExportsKey}, "default", ` +
- `{ enumerable: true, value: ${name} });`);
- }
- else {
- // anonymous default exports
- s.overwrite(node.start, node.start + 14 /* 'export default'.length */, `${ssrModuleExportsKey}.default =`);
- }
- }
- // export * from './foo'
- if (node.type === 'ExportAllDeclaration') {
- if (node.exported) {
- const importId = defineImport(node, node.source.value);
- s.remove(node.start, node.end);
- defineExport(node.end, node.exported.name, `${importId}`);
- }
- else {
- const importId = defineImport(node, node.source.value);
- s.remove(node.start, node.end);
- s.appendLeft(node.end, `${ssrExportAllKey}(${importId});`);
- }
- }
- }
- // 3. convert references to import bindings & import.meta references
- walk(ast, {
- onIdentifier(id, parent, parentStack) {
- const binding = idToImportMap.get(id.name);
- if (!binding) {
- return;
- }
- if (isStaticProperty(parent) && parent.shorthand) {
- // let binding used in a property shorthand
- // { foo } -> { foo: __import_x__.foo }
- // skip for destructuring patterns
- if (!parent.inPattern ||
- isInDestructuringAssignment(parent, parentStack)) {
- s.appendLeft(id.end, `: ${binding}`);
- }
- }
- else if (parent.type === 'ClassDeclaration' &&
- id === parent.superClass) {
- if (!declaredConst.has(id.name)) {
- declaredConst.add(id.name);
- // locate the top-most node containing the class declaration
- const topNode = parentStack[1];
- s.prependRight(topNode.start, `const ${id.name} = ${binding};\n`);
- }
- }
- else {
- s.overwrite(id.start, id.end, binding);
- }
- },
- onImportMeta(node) {
- s.overwrite(node.start, node.end, ssrImportMetaKey);
- },
- onDynamicImport(node) {
- s.overwrite(node.start, node.start + 6, ssrDynamicImportKey);
- if (node.type === 'ImportExpression' && node.source.type === 'Literal') {
- dynamicDeps.add(node.source.value);
- }
- }
- });
- let map = s.generateMap({ hires: true });
- if (inMap && inMap.mappings && inMap.sources.length > 0) {
- map = combineSourcemaps(url, [
- {
- ...map,
- sources: inMap.sources,
- sourcesContent: inMap.sourcesContent
- },
- inMap
- ]);
- }
- else {
- map.sources = [url];
- map.sourcesContent = [code];
- }
- return {
- code: s.toString(),
- map,
- deps: [...deps],
- dynamicDeps: [...dynamicDeps]
- };
-}
-/**
- * Same logic from \@vue/compiler-core & \@vue/compiler-sfc
- * Except this is using acorn AST
- */
-function walk(root, { onIdentifier, onImportMeta, onDynamicImport }) {
- const parentStack = [];
- const scope = Object.create(null);
- const scopeMap = new WeakMap();
- const setScope = (node, name) => {
- let scopeIds = scopeMap.get(node);
- if (scopeIds && scopeIds.has(name)) {
- return;
- }
- if (name in scope) {
- scope[name]++;
- }
- else {
- scope[name] = 1;
- }
- if (!scopeIds) {
- scopeIds = new Set();
- scopeMap.set(node, scopeIds);
- }
- scopeIds.add(name);
- };
- walk$1(root, {
- enter(node, parent) {
- if (node.type === 'ImportDeclaration') {
- return this.skip();
- }
- parent && parentStack.push(parent);
- if (node.type === 'MetaProperty' && node.meta.name === 'import') {
- onImportMeta(node);
- }
- else if (node.type === 'ImportExpression') {
- onDynamicImport(node);
- }
- if (node.type === 'Identifier') {
- if (!scope[node.name] && isRefIdentifier(node, parent, parentStack)) {
- onIdentifier(node, parent, parentStack);
- }
- }
- else if (isFunction(node)) {
- // walk function expressions and add its arguments to known identifiers
- // so that we don't prefix them
- node.params.forEach((p) => walk$1(p.type === 'AssignmentPattern' ? p.left : p, {
- enter(child, parent) {
- if (child.type === 'Identifier' &&
- // do not record as scope variable if is a destructuring key
- !isStaticPropertyKey(child, parent) &&
- // do not record if this is a default value
- // assignment of a destructuring variable
- !(parent &&
- parent.type === 'AssignmentPattern' &&
- parent.right === child)) {
- setScope(node, child.name);
- }
- }
- }));
- }
- else if (node.type === 'Property' && parent.type === 'ObjectPattern') {
- node.inPattern = true;
- }
- else if (node.type === 'VariableDeclarator') {
- const parentFunction = findParentFunction(parentStack);
- if (parentFunction) {
- if (node.id.type === 'ObjectPattern') {
- node.id.properties.forEach((property) => {
- if (property.type === 'RestElement') {
- setScope(parentFunction, property.argument.name);
- }
- else {
- setScope(parentFunction, property.value.name);
- }
- });
- }
- else {
- setScope(parentFunction, node.id.name);
- }
- }
- }
- },
- leave(node, parent) {
- parent && parentStack.pop();
- const scopeIds = scopeMap.get(node);
- if (scopeIds) {
- scopeIds.forEach((id) => {
- scope[id]--;
- if (scope[id] === 0) {
- delete scope[id];
- }
- });
- }
- }
- });
-}
-function isRefIdentifier(id, parent, parentStack) {
- // declaration id
- if (parent.type === 'CatchClause' ||
- ((parent.type === 'VariableDeclarator' ||
- parent.type === 'ClassDeclaration') &&
- parent.id === id)) {
- return false;
- }
- if (isFunction(parent)) {
- // function declaration/expression id
- if (parent.id === id) {
- return false;
- }
- // params list
- if (parent.params.includes(id)) {
- return false;
- }
- }
- // class method name
- if (parent.type === 'MethodDefinition') {
- return false;
- }
- // property key
- // this also covers object destructuring pattern
- if (isStaticPropertyKey(id, parent) || parent.inPattern) {
- return false;
- }
- // non-assignment array destructuring pattern
- if (parent.type === 'ArrayPattern' &&
- !isInDestructuringAssignment(parent, parentStack)) {
- return false;
- }
- // member expression property
- if (parent.type === 'MemberExpression' &&
- parent.property === id &&
- !parent.computed) {
- return false;
- }
- if (parent.type === 'ExportSpecifier') {
- return false;
- }
- // is a special keyword but parsed as identifier
- if (id.name === 'arguments') {
- return false;
- }
- return true;
-}
-const isStaticProperty = (node) => node && node.type === 'Property' && !node.computed;
-const isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;
-function isFunction(node) {
- return /Function(?:Expression|Declaration)$|Method$/.test(node.type);
-}
-function findParentFunction(parentStack) {
- for (let i = parentStack.length - 1; i >= 0; i--) {
- const node = parentStack[i];
- if (isFunction(node)) {
- return node;
- }
- }
-}
-function isInDestructuringAssignment(parent, parentStack) {
- if (parent &&
- (parent.type === 'Property' || parent.type === 'ArrayPattern')) {
- let i = parentStack.length;
- while (i--) {
- const p = parentStack[i];
- if (p.type === 'AssignmentExpression') {
- return true;
- }
- else if (p.type !== 'Property' && !p.type.endsWith('Pattern')) {
- break;
- }
- }
- }
- return false;
-}
-
-const isDebug$3 = !!process.env.DEBUG;
-const debug$4 = createDebugger('vite:sourcemap', {
- onlyWhenFocused: true
-});
-async function injectSourcesContent(map, file, logger) {
- let sourceRoot;
- try {
- // The source root is undefined for virtual modules and permission errors.
- sourceRoot = await fs$r.promises.realpath(path__default.resolve(path__default.dirname(file), map.sourceRoot || ''));
- }
- catch { }
- const missingSources = [];
- map.sourcesContent = await Promise.all(map.sources.map((sourcePath) => {
- if (sourcePath) {
- sourcePath = decodeURI(sourcePath);
- if (sourceRoot) {
- sourcePath = path__default.resolve(sourceRoot, sourcePath);
- }
- return fs$r.promises.readFile(sourcePath, 'utf-8').catch(() => {
- missingSources.push(sourcePath);
- return null;
- });
- }
- return null;
- }));
- // Use this command…
- // DEBUG="vite:sourcemap" vite build
- // …to log the missing sources.
- if (missingSources.length) {
- logger.warnOnce(`Sourcemap for "${file}" points to missing source files`);
- isDebug$3 && debug$4(`Missing sources:\n ` + missingSources.join(`\n `));
- }
-}
-
-/**
- * @typedef ParsedURL
- * @type {import('.').ParsedURL}
- */
-
-/**
- * @typedef Request
- * @property {string} url
- * @property {ParsedURL} _parsedUrl
- */
-
-/**
- * @param {Request} req
- * @returns {ParsedURL|void}
- */
-function parse$5(req) {
- let raw = req.url;
- if (raw == null) return;
-
- let prev = req._parsedUrl;
- if (prev && prev.raw === raw) return prev;
-
- let pathname=raw, search='', query;
-
- if (raw.length > 1) {
- let idx = raw.indexOf('?', 1);
-
- if (idx !== -1) {
- search = raw.substring(idx);
- pathname = raw.substring(0, idx);
- if (search.length > 1) {
- query = qs__namespace.parse(search.substring(1));
- }
- }
- }
-
- return req._parsedUrl = { pathname, search, query, raw };
-}
-
-function list(dir, callback, pre='') {
- dir = path$t.resolve('.', dir);
- let arr = fs$r.readdirSync(dir);
- let i=0, abs, stats;
- for (; i < arr.length; i++) {
- abs = path$t.join(dir, arr[i]);
- stats = fs$r.statSync(abs);
- stats.isDirectory()
- ? list(abs, callback, path$t.join(pre, arr[i]))
- : callback(path$t.join(pre, arr[i]), abs, stats);
- }
-}
-
-const noop$1 = () => {};
-
-function isMatch(uri, arr) {
- for (let i=0; i < arr.length; i++) {
- if (arr[i].test(uri)) return true;
- }
-}
-
-function toAssume(uri, extns) {
- let i=0, x, len=uri.length - 1;
- if (uri.charCodeAt(len) === 47) {
- uri = uri.substring(0, len);
- }
-
- let arr=[], tmp=`${uri}/index`;
- for (; i < extns.length; i++) {
- x = extns[i] ? `.${extns[i]}` : '';
- if (uri) arr.push(uri + x);
- arr.push(tmp + x);
- }
-
- return arr;
-}
-
-function viaCache(cache, uri, extns) {
- let i=0, data, arr=toAssume(uri, extns);
- for (; i < arr.length; i++) {
- if (data = cache[arr[i]]) return data;
- }
-}
-
-function viaLocal(dir, isEtag, uri, extns) {
- let i=0, arr=toAssume(uri, extns);
- let abs, stats, name, headers;
- for (; i < arr.length; i++) {
- abs = path$t.normalize(path$t.join(dir, name=arr[i]));
- if (abs.startsWith(dir) && fs__namespace.existsSync(abs)) {
- stats = fs__namespace.statSync(abs);
- if (stats.isDirectory()) continue;
- headers = toHeaders(name, stats, isEtag);
- headers['Cache-Control'] = isEtag ? 'no-cache' : 'no-store';
- return { abs, stats, headers };
- }
- }
-}
-
-function is404(req, res) {
- return (res.statusCode=404,res.end());
-}
-
-function send(req, res, file, stats, headers) {
- let code=200, tmp, opts={};
- headers = { ...headers };
-
- for (let key in headers) {
- tmp = res.getHeader(key);
- if (tmp) headers[key] = tmp;
- }
-
- if (tmp = res.getHeader('content-type')) {
- headers['Content-Type'] = tmp;
- }
-
- if (req.headers.range) {
- code = 206;
- let [x, y] = req.headers.range.replace('bytes=', '').split('-');
- let end = opts.end = parseInt(y, 10) || stats.size - 1;
- let start = opts.start = parseInt(x, 10) || 0;
-
- if (start >= stats.size || end >= stats.size) {
- res.setHeader('Content-Range', `bytes */${stats.size}`);
- res.statusCode = 416;
- return res.end();
- }
-
- headers['Content-Range'] = `bytes ${start}-${end}/${stats.size}`;
- headers['Content-Length'] = (end - start + 1);
- headers['Accept-Ranges'] = 'bytes';
- }
-
- res.writeHead(code, headers);
- fs__namespace.createReadStream(file, opts).pipe(res);
-}
-
-function isEncoding(name, type, headers) {
- headers['Content-Encoding'] = type;
- headers['Content-Type'] = lite.getType(name.replace(/\.([^.]*)$/, '')) || '';
-}
-
-function toHeaders(name, stats, isEtag) {
- let headers = {
- 'Content-Length': stats.size,
- 'Content-Type': lite.getType(name) || '',
- 'Last-Modified': stats.mtime.toUTCString(),
- };
- if (isEtag) headers['ETag'] = `W/"${stats.size}-${stats.mtime.getTime()}"`;
- if (/\.br$/.test(name)) isEncoding(name, 'br', headers);
- if (/\.gz$/.test(name)) isEncoding(name, 'gzip', headers);
- return headers;
-}
-
-function sirv (dir, opts={}) {
- dir = path$t.resolve(dir || '.');
-
- let isNotFound = opts.onNoMatch || is404;
- let setHeaders = opts.setHeaders || noop$1;
-
- let extensions = opts.extensions || ['html', 'htm'];
- let gzips = opts.gzip && extensions.map(x => `${x}.gz`).concat('gz');
- let brots = opts.brotli && extensions.map(x => `${x}.br`).concat('br');
-
- const FILES = {};
-
- let fallback = '/';
- let isEtag = !!opts.etag;
- let isSPA = !!opts.single;
- if (typeof opts.single === 'string') {
- let idx = opts.single.lastIndexOf('.');
- fallback += !!~idx ? opts.single.substring(0, idx) : opts.single;
- }
-
- let ignores = [];
- if (opts.ignores !== false) {
- ignores.push(/[/]([A-Za-z\s\d~$._-]+\.\w+){1,}$/); // any extn
- if (opts.dotfiles) ignores.push(/\/\.\w/);
- else ignores.push(/\/\.well-known/);
- [].concat(opts.ignores || []).forEach(x => {
- ignores.push(new RegExp(x, 'i'));
- });
- }
-
- let cc = opts.maxAge != null && `public,max-age=${opts.maxAge}`;
- if (cc && opts.immutable) cc += ',immutable';
- else if (cc && opts.maxAge === 0) cc += ',must-revalidate';
-
- if (!opts.dev) {
- list(dir, (name, abs, stats) => {
- if (/\.well-known[\\+\/]/.test(name)) ; // keep
- else if (!opts.dotfiles && /(^\.|[\\+|\/+]\.)/.test(name)) return;
-
- let headers = toHeaders(name, stats, isEtag);
- if (cc) headers['Cache-Control'] = cc;
-
- FILES['/' + name.normalize().replace(/\\+/g, '/')] = { abs, stats, headers };
- });
- }
-
- let lookup = opts.dev ? viaLocal.bind(0, dir, isEtag) : viaCache.bind(0, FILES);
-
- return function (req, res, next) {
- let extns = [''];
- let pathname = parse$5(req).pathname;
- let val = req.headers['accept-encoding'] || '';
- if (gzips && val.includes('gzip')) extns.unshift(...gzips);
- if (brots && /(br|brotli)/i.test(val)) extns.unshift(...brots);
- extns.push(...extensions); // [...br, ...gz, orig, ...exts]
-
- if (pathname.indexOf('%') !== -1) {
- try { pathname = decodeURIComponent(pathname); }
- catch (err) { /* malform uri */ }
- }
-
- let data = lookup(pathname, extns) || isSPA && !isMatch(pathname, ignores) && lookup(fallback, extns);
- if (!data) return next ? next() : isNotFound(req, res);
-
- if (isEtag && req.headers['if-none-match'] === data.headers['ETag']) {
- res.writeHead(304);
- return res.end();
- }
-
- if (gzips || brots) {
- res.setHeader('Vary', 'Accept-Encoding');
- }
-
- setHeaders(res, pathname, data.stats);
- send(req, res, data.abs, data.stats, data.headers);
- };
-}
-
-const sirvOptions = {
- dev: true,
- etag: true,
- extensions: [],
- setHeaders(res, pathname) {
- // Matches js, jsx, ts, tsx.
- // The reason this is done, is that the .ts file extension is reserved
- // for the MIME type video/mp2t. In almost all cases, we can expect
- // these files to be TypeScript files, and for Vite to serve them with
- // this Content-Type.
- if (/\.[tj]sx?$/.test(pathname)) {
- res.setHeader('Content-Type', 'application/javascript');
- }
- }
-};
-function servePublicMiddleware(dir) {
- const serve = sirv(dir, sirvOptions);
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return function viteServePublicMiddleware(req, res, next) {
- // skip import request and internal requests `/@fs/ /@vite-client` etc...
- if (isImportRequest(req.url) || isInternalRequest(req.url)) {
- return next();
- }
- serve(req, res, next);
- };
-}
-function serveStaticMiddleware(dir, config) {
- const serve = sirv(dir, sirvOptions);
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return function viteServeStaticMiddleware(req, res, next) {
- // only serve the file if it's not an html request
- // so that html requests can fallthrough to our html middleware for
- // special processing
- // also skip internal requests `/@fs/ /@vite-client` etc...
- if (path__default.extname(cleanUrl(req.url)) === '.html' ||
- isInternalRequest(req.url)) {
- return next();
- }
- const url = decodeURI(req.url);
- // apply aliases to static requests as well
- let redirected;
- for (const { find, replacement } of config.resolve.alias) {
- const matches = typeof find === 'string' ? url.startsWith(find) : find.test(url);
- if (matches) {
- redirected = url.replace(find, replacement);
- break;
- }
- }
- if (redirected) {
- // dir is pre-normalized to posix style
- if (redirected.startsWith(dir)) {
- redirected = redirected.slice(dir.length);
- }
- req.url = redirected;
- }
- serve(req, res, next);
- };
-}
-function serveRawFsMiddleware(server) {
- const serveFromRoot = sirv('/', sirvOptions);
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return function viteServeRawFsMiddleware(req, res, next) {
- let url = req.url;
- // In some cases (e.g. linked monorepos) files outside of root will
- // reference assets that are also out of served root. In such cases
- // the paths are rewritten to `/@fs/` prefixed paths and must be served by
- // searching based from fs root.
- if (url.startsWith(FS_PREFIX)) {
- // restrict files outside of `fs.allow`
- ensureServingAccess(slash$3(path__default.resolve(fsPathFromId(url))), server);
- url = url.slice(FS_PREFIX.length);
- if (isWindows$4)
- url = url.replace(/^[A-Z]:/i, '');
- req.url = url;
- serveFromRoot(req, res, next);
- }
- else {
- next();
- }
- };
-}
-function isFileServingAllowed(url, server) {
- // explicitly disabled
- if (server.config.server.fs.strict === false)
- return true;
- const file = ensureLeadingSlash(normalizePath$4(cleanUrl(url)));
- if (server.moduleGraph.safeModulesPath.has(file))
- return true;
- if (server.config.server.fs.allow.some((i) => file.startsWith(i + '/')))
- return true;
- if (!server.config.server.fs.strict) {
- server.config.logger.warnOnce(`Unrestricted file system access to "${url}"`);
- server.config.logger.warnOnce(`For security concerns, accessing files outside of serving allow list will ` +
- `be restricted by default in the future version of Vite. ` +
- `Refer to https://vitejs.dev/config/#server-fs-allow for more details.`);
- return true;
- }
- return false;
-}
-function ensureServingAccess(url, server) {
- if (!isFileServingAllowed(url, server)) {
- const allow = server.config.server.fs.allow;
- throw new AccessRestrictedError(`The request url "${url}" is outside of Vite serving allow list:
-
-${allow.map((i) => `- ${i}`).join('\n')}
-
-Refer to docs https://vitejs.dev/config/#server-fs-allow for configurations and more details.`);
- }
-}
-
-const debugLoad = createDebugger('vite:load');
-const debugTransform = createDebugger('vite:transform');
-const debugCache$1 = createDebugger('vite:cache');
-const isDebug$2 = !!process.env.DEBUG;
-function transformRequest(url, server, options = {}) {
- const pending = server._pendingRequests[url];
- if (pending) {
- debugTransform(`[reuse pending] for ${prettifyUrl(url, server.config.root)}`);
- return pending;
- }
- const result = doTransform(url, server, options);
- server._pendingRequests[url] = result;
- const onDone = () => {
- server._pendingRequests[url] = null;
- };
- result.then(onDone, onDone);
- return result;
-}
-async function doTransform(url, server, options) {
- var _a, _b;
- url = removeTimestampQuery(url);
- const { config, pluginContainer, moduleGraph, watcher } = server;
- const { root, logger } = config;
- const prettyUrl = isDebug$2 ? prettifyUrl(url, root) : '';
- const ssr = !!options.ssr;
- const module = await server.moduleGraph.getModuleByUrl(url);
- // check if we have a fresh cache
- const cached = module && (ssr ? module.ssrTransformResult : module.transformResult);
- if (cached) {
- // TODO: check if the module is "partially invalidated" - i.e. an import
- // down the chain has been fully invalidated, but this current module's
- // content has not changed.
- // in this case, we can reuse its previous cached result and only update
- // its import timestamps.
- isDebug$2 && debugCache$1(`[memory] ${prettyUrl}`);
- return cached;
- }
- // resolve
- const id = ((_a = (await pluginContainer.resolveId(url))) === null || _a === void 0 ? void 0 : _a.id) || url;
- const file = cleanUrl(id);
- let code = null;
- let map = null;
- // load
- const loadStart = isDebug$2 ? perf_hooks.performance.now() : 0;
- const loadResult = await pluginContainer.load(id, ssr);
- if (loadResult == null) {
- // if this is an html request and there is no load result, skip ahead to
- // SPA fallback.
- if (options.html && !id.endsWith('.html')) {
- return null;
- }
- // try fallback loading it from fs as string
- // if the file is a binary, there should be a plugin that already loaded it
- // as string
- // only try the fallback if access is allowed, skip for out of root url
- // like /service-worker.js or /api/users
- if (options.ssr || isFileServingAllowed(file, server)) {
- try {
- code = await fs$r.promises.readFile(file, 'utf-8');
- isDebug$2 && debugLoad(`${timeFrom(loadStart)} [fs] ${prettyUrl}`);
- }
- catch (e) {
- if (e.code !== 'ENOENT') {
- throw e;
- }
- }
- }
- if (code) {
- try {
- map = (_b = (convertSourceMap.fromSource(code) ||
- convertSourceMap.fromMapFileSource(code, path__default.dirname(file)))) === null || _b === void 0 ? void 0 : _b.toObject();
- }
- catch (e) {
- logger.warn(`Failed to load source map for ${url}.`, {
- timestamp: true
- });
- }
- }
- }
- else {
- isDebug$2 && debugLoad(`${timeFrom(loadStart)} [plugin] ${prettyUrl}`);
- if (isObject$3(loadResult)) {
- code = loadResult.code;
- map = loadResult.map;
- }
- else {
- code = loadResult;
- }
- }
- if (code == null) {
- if (checkPublicFile(url, config)) {
- throw new Error(`Failed to load url ${url} (resolved id: ${id}). ` +
- `This file is in /public and will be copied as-is during build without ` +
- `going through the plugin transforms, and therefore should not be ` +
- `imported from source code. It can only be referenced via HTML tags.`);
- }
- else {
- return null;
- }
- }
- // ensure module in graph after successful load
- const mod = await moduleGraph.ensureEntryFromUrl(url);
- ensureWatchedFile(watcher, mod.file, root);
- // transform
- const transformStart = isDebug$2 ? perf_hooks.performance.now() : 0;
- const transformResult = await pluginContainer.transform(code, id, map, ssr);
- if (transformResult == null ||
- (isObject$3(transformResult) && transformResult.code == null)) {
- // no transform applied, keep code as-is
- isDebug$2 &&
- debugTransform(timeFrom(transformStart) + source.dim(` [skipped] ${prettyUrl}`));
- }
- else {
- isDebug$2 && debugTransform(`${timeFrom(transformStart)} ${prettyUrl}`);
- code = transformResult.code;
- map = transformResult.map;
- }
- if (map && mod.file) {
- map = (typeof map === 'string' ? JSON.parse(map) : map);
- if (map.mappings && !map.sourcesContent) {
- await injectSourcesContent(map, mod.file, logger);
- }
- }
- if (ssr) {
- return (mod.ssrTransformResult = await ssrTransform(code, map, url));
- }
- else {
- return (mod.transformResult = {
- code,
- map,
- etag: etag_1(code, { weak: true })
- });
- }
-}
-
-/**
- * Time (ms) Vite has to full-reload the page before returning
- * an empty response.
- */
-const NEW_DEPENDENCY_BUILD_TIMEOUT = 1000;
-const debugCache = createDebugger('vite:cache');
-const isDebug$1 = !!process.env.DEBUG;
-const knownIgnoreList = new Set(['/', '/favicon.ico']);
-function transformMiddleware(server) {
- const { config: { root, logger, cacheDir }, moduleGraph } = server;
- // determine the url prefix of files inside cache directory
- let cacheDirPrefix;
- if (cacheDir) {
- const cacheDirRelative = normalizePath$4(path__default.relative(root, cacheDir));
- if (cacheDirRelative.startsWith('../')) {
- // if the cache directory is outside root, the url prefix would be something
- // like '/@fs/absolute/path/to/node_modules/.vite'
- cacheDirPrefix = `/@fs/${normalizePath$4(cacheDir).replace(/^\//, '')}`;
- }
- else {
- // if the cache directory is inside root, the url prefix would be something
- // like '/node_modules/.vite'
- cacheDirPrefix = `/${cacheDirRelative}`;
- }
- }
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return async function viteTransformMiddleware(req, res, next) {
- var _a, _b, _c, _d, _e, _f, _g, _h;
- if (req.method !== 'GET' || knownIgnoreList.has(req.url)) {
- return next();
- }
- if (server._pendingReload &&
- // always allow vite client requests so that it can trigger page reload
- !((_a = req.url) === null || _a === void 0 ? void 0 : _a.startsWith(CLIENT_PUBLIC_PATH)) &&
- !((_b = req.url) === null || _b === void 0 ? void 0 : _b.includes('vite/dist/client'))) {
- // missing dep pending reload, hold request until reload happens
- server._pendingReload.then(() =>
- // If the refresh has not happened after timeout, Vite considers
- // something unexpected has happened. In this case, Vite
- // returns an empty response that will error.
- setTimeout(() => {
- // Don't do anything if response has already been sent
- if (res.writableEnded)
- return;
- // status code request timeout
- res.statusCode = 408;
- res.end(`<h1>[vite] Something unexpected happened while optimizing "${req.url}"<h1>` +
- `<p>The current page should have reloaded by now</p>`);
- }, NEW_DEPENDENCY_BUILD_TIMEOUT));
- return;
- }
- let url = decodeURI(removeTimestampQuery(req.url)).replace(NULL_BYTE_PLACEHOLDER, '\0');
- const withoutQuery = cleanUrl(url);
- try {
- const isSourceMap = withoutQuery.endsWith('.map');
- // since we generate source map references, handle those requests here
- if (isSourceMap) {
- const originalUrl = url.replace(/\.map($|\?)/, '$1');
- const map = (_d = (_c = (await moduleGraph.getModuleByUrl(originalUrl))) === null || _c === void 0 ? void 0 : _c.transformResult) === null || _d === void 0 ? void 0 : _d.map;
- if (map) {
- return send$1(req, res, JSON.stringify(map), 'json');
- }
- else {
- return next();
- }
- }
- // check if public dir is inside root dir
- const publicDir = normalizePath$4(server.config.publicDir);
- const rootDir = normalizePath$4(server.config.root);
- if (publicDir.startsWith(rootDir)) {
- const publicPath = `${publicDir.slice(rootDir.length)}/`;
- // warn explicit public paths
- if (url.startsWith(publicPath)) {
- logger.warn(source.yellow(`files in the public directory are served at the root path.\n` +
- `Instead of ${source.cyan(url)}, use ${source.cyan(url.replace(publicPath, '/'))}.`));
- }
- }
- if (isJSRequest(url) ||
- isImportRequest(url) ||
- isCSSRequest(url) ||
- isHTMLProxy(url)) {
- // strip ?import
- url = removeImportQuery(url);
- // Strip valid id prefix. This is prepended to resolved Ids that are
- // not valid browser import specifiers by the importAnalysis plugin.
- url = unwrapId$1(url);
- // for CSS, we need to differentiate between normal CSS requests and
- // imports
- if (isCSSRequest(url) &&
- !isDirectRequest(url) &&
- ((_e = req.headers.accept) === null || _e === void 0 ? void 0 : _e.includes('text/css'))) {
- url = injectQuery(url, 'direct');
- }
- // check if we can return 304 early
- const ifNoneMatch = req.headers['if-none-match'];
- if (ifNoneMatch &&
- ((_g = (_f = (await moduleGraph.getModuleByUrl(url))) === null || _f === void 0 ? void 0 : _f.transformResult) === null || _g === void 0 ? void 0 : _g.etag) ===
- ifNoneMatch) {
- isDebug$1 && debugCache(`[304] ${prettifyUrl(url, root)}`);
- res.statusCode = 304;
- return res.end();
- }
- // resolve, load and transform using the plugin container
- const result = await transformRequest(url, server, {
- html: (_h = req.headers.accept) === null || _h === void 0 ? void 0 : _h.includes('text/html')
- });
- if (result) {
- const type = isDirectCSSRequest(url) ? 'css' : 'js';
- const isDep = DEP_VERSION_RE.test(url) ||
- (cacheDirPrefix && url.startsWith(cacheDirPrefix));
- return send$1(req, res, result.code, type, result.etag,
- // allow browser to cache npm deps!
- isDep ? 'max-age=31536000,immutable' : 'no-cache', result.map);
- }
- }
- }
- catch (e) {
- return next(e);
- }
- next();
- };
-}
-
-function createDevHtmlTransformFn(server) {
- const [preHooks, postHooks] = resolveHtmlTransforms(server.config.plugins);
- return (url, html, originalUrl) => {
- return applyHtmlTransforms(html, [...preHooks, devHtmlHook, ...postHooks], {
- path: url,
- filename: getHtmlFilename(url, server),
- server,
- originalUrl
- });
- };
-}
-function getHtmlFilename(url, server) {
- if (url.startsWith(FS_PREFIX)) {
- return fsPathFromId(url);
- }
- else {
- return path__default.join(server.config.root, url.slice(1));
- }
-}
-const startsWithSingleSlashRE = /^\/(?!\/)/;
-const processNodeUrl = (node, s, config, htmlPath, originalUrl) => {
- var _a;
- const url = ((_a = node.value) === null || _a === void 0 ? void 0 : _a.content) || '';
- if (startsWithSingleSlashRE.test(url)) {
- // prefix with base
- s.overwrite(node.value.loc.start.offset, node.value.loc.end.offset, `"${config.base + url.slice(1)}"`);
- }
- else if (url.startsWith('.') &&
- originalUrl &&
- originalUrl !== '/' &&
- htmlPath === '/index.html') {
- // #3230 if some request url (localhost:3000/a/b) return to fallback html, the relative assets
- // path will add `/a/` prefix, it will caused 404.
- // rewrite before `./index.js` -> `localhost:3000/a/index.js`.
- // rewrite after `../index.js` -> `localhost:3000/index.js`.
- s.overwrite(node.value.loc.start.offset, node.value.loc.end.offset, `"${path__default.posix.join(path__default.posix.relative(originalUrl, '/'), url.slice(1))}"`);
- }
-};
-const devHtmlHook = async (html, { path: htmlPath, server, originalUrl }) => {
- // TODO: solve this design issue
- // Optional chain expressions can return undefined by design
- // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
- const config = server === null || server === void 0 ? void 0 : server.config;
- const base = config.base || '/';
- const s = new MagicString(html);
- let scriptModuleIndex = -1;
- const filePath = cleanUrl(htmlPath);
- await traverseHtml(html, htmlPath, (node) => {
- if (node.type !== 1 /* ELEMENT */) {
- return;
- }
- // script tags
- if (node.tag === 'script') {
- const { src, isModule } = getScriptInfo(node);
- if (isModule) {
- scriptModuleIndex++;
- }
- if (src) {
- processNodeUrl(src, s, config, htmlPath, originalUrl);
- }
- else if (isModule) {
- const url = filePath.replace(normalizePath$4(config.root), '');
- const contents = node.children
- .map((child) => child.content || '')
- .join('');
- // add HTML Proxy to Map
- addToHTMLProxyCache(config, url, scriptModuleIndex, contents);
- const modulePath = `${config.base + htmlPath.slice(1)}?html-proxy&index=${scriptModuleIndex}.js`;
- // invalidate the module so the newly cached contents will be served
- const module = server === null || server === void 0 ? void 0 : server.moduleGraph.getModuleById(modulePath);
- if (module) {
- server === null || server === void 0 ? void 0 : server.moduleGraph.invalidateModule(module);
- }
- s.overwrite(node.loc.start.offset, node.loc.end.offset, `<script type="module" src="${modulePath}"></script>`);
- }
- }
- // elements with [href/src] attrs
- const assetAttrs = assetAttrsConfig[node.tag];
- if (assetAttrs) {
- for (const p of node.props) {
- if (p.type === 6 /* ATTRIBUTE */ &&
- p.value &&
- assetAttrs.includes(p.name)) {
- processNodeUrl(p, s, config, htmlPath, originalUrl);
- }
- }
- }
- });
- html = s.toString();
- return {
- html,
- tags: [
- {
- tag: 'script',
- attrs: {
- type: 'module',
- src: path__default.posix.join(base, CLIENT_PUBLIC_PATH)
- },
- injectTo: 'head-prepend'
- }
- ]
- };
-};
-function indexHtmlMiddleware(server) {
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return async function viteIndexHtmlMiddleware(req, res, next) {
- if (res.writableEnded) {
- return next();
- }
- const url = req.url && cleanUrl(req.url);
- // spa-fallback always redirects to /index.html
- if ((url === null || url === void 0 ? void 0 : url.endsWith('.html')) && req.headers['sec-fetch-dest'] !== 'script') {
- const filename = getHtmlFilename(url, server);
- if (fs__default.existsSync(filename)) {
- try {
- let html = fs__default.readFileSync(filename, 'utf-8');
- html = await server.transformIndexHtml(url, html, req.originalUrl);
- return send$1(req, res, html, 'html');
- }
- catch (e) {
- return next(e);
- }
- }
- }
- next();
- };
-}
-
-const logTime = createDebugger('vite:time');
-function timeMiddleware(root) {
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- return function viteTimeMiddleware(req, res, next) {
- const start = perf_hooks.performance.now();
- const end = res.end;
- res.end = (...args) => {
- logTime(`${timeFrom(start)} ${prettifyUrl(req.url, root)}`);
- // @ts-ignore
- return end.call(res, ...args);
- };
- next();
- };
-}
-
-class ModuleNode {
- constructor(url) {
- /**
- * Resolved file system path + query
- */
- this.id = null;
- this.file = null;
- this.importers = new Set();
- this.importedModules = new Set();
- this.acceptedHmrDeps = new Set();
- this.isSelfAccepting = false;
- this.transformResult = null;
- this.ssrTransformResult = null;
- this.ssrModule = null;
- this.lastHMRTimestamp = 0;
- this.url = url;
- this.type = isDirectCSSRequest(url) ? 'css' : 'js';
- }
-}
-function invalidateSSRModule(mod, seen) {
- if (seen.has(mod)) {
- return;
- }
- seen.add(mod);
- mod.ssrModule = null;
- mod.importers.forEach((importer) => invalidateSSRModule(importer, seen));
-}
-class ModuleGraph {
- constructor(container) {
- this.urlToModuleMap = new Map();
- this.idToModuleMap = new Map();
- // a single file may corresponds to multiple modules with different queries
- this.fileToModulesMap = new Map();
- this.safeModulesPath = new Set();
- this.container = container;
- }
- async getModuleByUrl(rawUrl) {
- const [url] = await this.resolveUrl(rawUrl);
- return this.urlToModuleMap.get(url);
- }
- getModuleById(id) {
- return this.idToModuleMap.get(removeTimestampQuery(id));
- }
- getModulesByFile(file) {
- return this.fileToModulesMap.get(file);
- }
- onFileChange(file) {
- const mods = this.getModulesByFile(file);
- if (mods) {
- const seen = new Set();
- mods.forEach((mod) => {
- this.invalidateModule(mod, seen);
- });
- }
- }
- invalidateModule(mod, seen = new Set()) {
- mod.transformResult = null;
- mod.ssrTransformResult = null;
- invalidateSSRModule(mod, seen);
- }
- invalidateAll() {
- const seen = new Set();
- this.idToModuleMap.forEach((mod) => {
- this.invalidateModule(mod, seen);
- });
- }
- /**
- * Update the module graph based on a module's updated imports information
- * If there are dependencies that no longer have any importers, they are
- * returned as a Set.
- */
- async updateModuleInfo(mod, importedModules, acceptedModules, isSelfAccepting) {
- mod.isSelfAccepting = isSelfAccepting;
- const prevImports = mod.importedModules;
- const nextImports = (mod.importedModules = new Set());
- let noLongerImported;
- // update import graph
- for (const imported of importedModules) {
- const dep = typeof imported === 'string'
- ? await this.ensureEntryFromUrl(imported)
- : imported;
- dep.importers.add(mod);
- nextImports.add(dep);
- }
- // remove the importer from deps that were imported but no longer are.
- prevImports.forEach((dep) => {
- if (!nextImports.has(dep)) {
- dep.importers.delete(mod);
- if (!dep.importers.size) {
- (noLongerImported || (noLongerImported = new Set())).add(dep);
- }
- }
- });
- // update accepted hmr deps
- const deps = (mod.acceptedHmrDeps = new Set());
- for (const accepted of acceptedModules) {
- const dep = typeof accepted === 'string'
- ? await this.ensureEntryFromUrl(accepted)
- : accepted;
- deps.add(dep);
- }
- return noLongerImported;
- }
- async ensureEntryFromUrl(rawUrl) {
- const [url, resolvedId] = await this.resolveUrl(rawUrl);
- let mod = this.urlToModuleMap.get(url);
- if (!mod) {
- mod = new ModuleNode(url);
- this.urlToModuleMap.set(url, mod);
- mod.id = resolvedId;
- this.idToModuleMap.set(resolvedId, mod);
- const file = (mod.file = cleanUrl(resolvedId));
- let fileMappedModules = this.fileToModulesMap.get(file);
- if (!fileMappedModules) {
- fileMappedModules = new Set();
- this.fileToModulesMap.set(file, fileMappedModules);
- }
- fileMappedModules.add(mod);
- }
- return mod;
- }
- // some deps, like a css file referenced via @import, don't have its own
- // url because they are inlined into the main css import. But they still
- // need to be represented in the module graph so that they can trigger
- // hmr in the importing css file.
- createFileOnlyEntry(file) {
- file = normalizePath$4(file);
- let fileMappedModules = this.fileToModulesMap.get(file);
- if (!fileMappedModules) {
- fileMappedModules = new Set();
- this.fileToModulesMap.set(file, fileMappedModules);
- }
- const url = `${FS_PREFIX}${file}`;
- for (const m of fileMappedModules) {
- if (m.url === url || m.id === file) {
- return m;
- }
- }
- const mod = new ModuleNode(url);
- mod.file = file;
- fileMappedModules.add(mod);
- return mod;
- }
- // for incoming urls, it is important to:
- // 1. remove the HMR timestamp query (?t=xxxx)
- // 2. resolve its extension so that urls with or without extension all map to
- // the same module
- async resolveUrl(url) {
- var _a;
- url = removeImportQuery(removeTimestampQuery(url));
- const resolvedId = ((_a = (await this.container.resolveId(url))) === null || _a === void 0 ? void 0 : _a.id) || url;
- const ext = path$t.extname(cleanUrl(resolvedId));
- const { pathname, search, hash } = require$$0$8.parse(url);
- if (ext && !pathname.endsWith(ext)) {
- url = pathname + ext + (search || '') + (hash || '');
- }
- return [url, resolvedId];
- }
-}
-
-const debugHmr = createDebugger('vite:hmr');
-const normalizedClientDir = normalizePath$4(CLIENT_DIR);
-function getShortName(file, root) {
- return file.startsWith(root + '/') ? path__default.posix.relative(root, file) : file;
-}
-async function handleHMRUpdate(file, server) {
- const { ws, config, moduleGraph } = server;
- const shortFile = getShortName(file, config.root);
- const isConfig = file === config.configFile;
- const isConfigDependency = config.configFileDependencies.some((name) => file === path__default.resolve(name));
- const isEnv = config.inlineConfig.envFile !== false && file.endsWith('.env');
- if (isConfig || isConfigDependency || isEnv) {
- // auto restart server
- debugHmr(`[config change] ${source.dim(shortFile)}`);
- config.logger.info(source.green(`${path__default.relative(process.cwd(), file)} changed, restarting server...`), { clear: true, timestamp: true });
- await restartServer(server);
- return;
- }
- debugHmr(`[file change] ${source.dim(shortFile)}`);
- // (dev only) the client itself cannot be hot updated.
- if (file.startsWith(normalizedClientDir)) {
- ws.send({
- type: 'full-reload',
- path: '*'
- });
- return;
- }
- const mods = moduleGraph.getModulesByFile(file);
- // check if any plugin wants to perform custom HMR handling
- const timestamp = Date.now();
- const hmrContext = {
- file,
- timestamp,
- modules: mods ? [...mods] : [],
- read: () => readModifiedFile(file),
- server
- };
- for (const plugin of config.plugins) {
- if (plugin.handleHotUpdate) {
- const filteredModules = await plugin.handleHotUpdate(hmrContext);
- if (filteredModules) {
- hmrContext.modules = filteredModules;
- break;
- }
- }
- }
- if (!hmrContext.modules.length) {
- // html file cannot be hot updated
- if (file.endsWith('.html')) {
- config.logger.info(source.green(`page reload `) + source.dim(shortFile), {
- clear: true,
- timestamp: true
- });
- ws.send({
- type: 'full-reload',
- path: config.server.middlewareMode
- ? '*'
- : '/' + normalizePath$4(path__default.relative(config.root, file))
- });
- }
- else {
- // loaded but not in the module graph, probably not js
- debugHmr(`[no modules matched] ${source.dim(shortFile)}`);
- }
- return;
- }
- updateModules(shortFile, hmrContext.modules, timestamp, server);
-}
-function updateModules(file, modules, timestamp, { config, ws }) {
- const updates = [];
- const invalidatedModules = new Set();
- let needFullReload = false;
- for (const mod of modules) {
- invalidate(mod, timestamp, invalidatedModules);
- if (needFullReload) {
- continue;
- }
- const boundaries = new Set();
- const hasDeadEnd = propagateUpdate(mod, boundaries);
- if (hasDeadEnd) {
- needFullReload = true;
- continue;
- }
- updates.push(...[...boundaries].map(({ boundary, acceptedVia }) => ({
- type: `${boundary.type}-update`,
- timestamp,
- path: boundary.url,
- acceptedPath: acceptedVia.url
- })));
- }
- if (needFullReload) {
- config.logger.info(source.green(`page reload `) + source.dim(file), {
- clear: true,
- timestamp: true
- });
- ws.send({
- type: 'full-reload'
- });
- }
- else {
- config.logger.info(updates
- .map(({ path }) => source.green(`hmr update `) + source.dim(path))
- .join('\n'), { clear: true, timestamp: true });
- ws.send({
- type: 'update',
- updates
- });
- }
-}
-async function handleFileAddUnlink(file, server, isUnlink = false) {
- var _a;
- const modules = [...((_a = server.moduleGraph.getModulesByFile(file)) !== null && _a !== void 0 ? _a : [])];
- if (isUnlink && file in server._globImporters) {
- delete server._globImporters[file];
- }
- else {
- for (const i in server._globImporters) {
- const { module, importGlobs } = server._globImporters[i];
- for (const { base, pattern } of importGlobs) {
- if (minimatch_1(file, pattern) || minimatch_1(path__default.relative(base, file), pattern)) {
- modules.push(module);
- // We use `onFileChange` to invalidate `module.file` so that subsequent `ssrLoadModule()`
- // calls get fresh glob import results with(out) the newly added(/removed) `file`.
- server.moduleGraph.onFileChange(module.file);
- break;
- }
- }
- }
- }
- if (modules.length > 0) {
- updateModules(getShortName(file, server.config.root), modules, Date.now(), server);
- }
-}
-function propagateUpdate(node, boundaries, currentChain = [node]) {
- if (node.isSelfAccepting) {
- boundaries.add({
- boundary: node,
- acceptedVia: node
- });
- // additionally check for CSS importers, since a PostCSS plugin like
- // Tailwind JIT may register any file as a dependency to a CSS file.
- for (const importer of node.importers) {
- if (isCSSRequest(importer.url) && !currentChain.includes(importer)) {
- propagateUpdate(importer, boundaries, currentChain.concat(importer));
- }
- }
- return false;
- }
- if (!node.importers.size) {
- return true;
- }
- // #3716, #3913
- // For a non-CSS file, if all of its importers are CSS files (registered via
- // PostCSS plugins) it should be considered a dead end and force full reload.
- if (!isCSSRequest(node.url) &&
- [...node.importers].every((i) => isCSSRequest(i.url))) {
- return true;
- }
- for (const importer of node.importers) {
- const subChain = currentChain.concat(importer);
- if (importer.acceptedHmrDeps.has(node)) {
- boundaries.add({
- boundary: importer,
- acceptedVia: node
- });
- continue;
- }
- if (currentChain.includes(importer)) {
- // circular deps is considered dead end
- return true;
- }
- if (propagateUpdate(importer, boundaries, subChain)) {
- return true;
- }
- }
- return false;
-}
-function invalidate(mod, timestamp, seen) {
- if (seen.has(mod)) {
- return;
- }
- seen.add(mod);
- mod.lastHMRTimestamp = timestamp;
- mod.transformResult = null;
- mod.ssrModule = null;
- mod.ssrTransformResult = null;
- mod.importers.forEach((importer) => {
- if (!importer.acceptedHmrDeps.has(mod)) {
- invalidate(importer, timestamp, seen);
- }
- });
-}
-function handlePrunedModules(mods, { ws }) {
- // update the disposed modules' hmr timestamp
- // since if it's re-imported, it should re-apply side effects
- // and without the timestamp the browser will not re-import it!
- const t = Date.now();
- mods.forEach((mod) => {
- mod.lastHMRTimestamp = t;
- debugHmr(`[dispose] ${source.dim(mod.file)}`);
- });
- ws.send({
- type: 'prune',
- paths: [...mods].map((m) => m.url)
- });
-}
-/**
- * Lex import.meta.hot.accept() for accepted deps.
- * Since hot.accept() can only accept string literals or array of string
- * literals, we don't really need a heavy @babel/parse call on the entire source.
- *
- * @returns selfAccepts
- */
-function lexAcceptedHmrDeps(code, start, urls) {
- let state = 0 /* inCall */;
- // the state can only be 2 levels deep so no need for a stack
- let prevState = 0 /* inCall */;
- let currentDep = '';
- function addDep(index) {
- urls.add({
- url: currentDep,
- start: index - currentDep.length - 1,
- end: index + 1
- });
- currentDep = '';
- }
- for (let i = start; i < code.length; i++) {
- const char = code.charAt(i);
- switch (state) {
- case 0 /* inCall */:
- case 4 /* inArray */:
- if (char === `'`) {
- prevState = state;
- state = 1 /* inSingleQuoteString */;
- }
- else if (char === `"`) {
- prevState = state;
- state = 2 /* inDoubleQuoteString */;
- }
- else if (char === '`') {
- prevState = state;
- state = 3 /* inTemplateString */;
- }
- else if (/\s/.test(char)) {
- continue;
- }
- else {
- if (state === 0 /* inCall */) {
- if (char === `[`) {
- state = 4 /* inArray */;
- }
- else {
- // reaching here means the first arg is neither a string literal
- // nor an Array literal (direct callback) or there is no arg
- // in both case this indicates a self-accepting module
- return true; // done
- }
- }
- else if (state === 4 /* inArray */) {
- if (char === `]`) {
- return false; // done
- }
- else if (char === ',') {
- continue;
- }
- else {
- error$1(i);
- }
- }
- }
- break;
- case 1 /* inSingleQuoteString */:
- if (char === `'`) {
- addDep(i);
- if (prevState === 0 /* inCall */) {
- // accept('foo', ...)
- return false;
- }
- else {
- state = prevState;
- }
- }
- else {
- currentDep += char;
- }
- break;
- case 2 /* inDoubleQuoteString */:
- if (char === `"`) {
- addDep(i);
- if (prevState === 0 /* inCall */) {
- // accept('foo', ...)
- return false;
- }
- else {
- state = prevState;
- }
- }
- else {
- currentDep += char;
- }
- break;
- case 3 /* inTemplateString */:
- if (char === '`') {
- addDep(i);
- if (prevState === 0 /* inCall */) {
- // accept('foo', ...)
- return false;
- }
- else {
- state = prevState;
- }
- }
- else if (char === '$' && code.charAt(i + 1) === '{') {
- error$1(i);
- }
- else {
- currentDep += char;
- }
- break;
- default:
- throw new Error('unknown import.meta.hot lexer state');
- }
- }
- return false;
-}
-function error$1(pos) {
- const err = new Error(`import.meta.accept() can only accept string literals or an ` +
- `Array of string literals.`);
- err.pos = pos;
- throw err;
-}
-// vitejs/vite#610 when hot-reloading Vue files, we read immediately on file
-// change event and sometimes this can be too early and get an empty buffer.
-// Poll until the file's modified time has changed before reading again.
-async function readModifiedFile(file) {
- const content = fs__default.readFileSync(file, 'utf-8');
- if (!content) {
- const mtime = fs__default.statSync(file).mtimeMs;
- await new Promise((r) => {
- let n = 0;
- const poll = async () => {
- n++;
- const newMtime = fs__default.statSync(file).mtimeMs;
- if (newMtime !== mtime || n > 10) {
- r(0);
- }
- else {
- setTimeout(poll, 10);
- }
- };
- setTimeout(poll, 10);
- });
- return fs__default.readFileSync(file, 'utf-8');
- }
- else {
- return content;
- }
-}
-async function restartServer(server) {
- // @ts-ignore
- global.__vite_start_time = perf_hooks.performance.now();
- const { port } = server.config.server;
- await server.close();
- let newServer = null;
- try {
- newServer = await createServer(server.config.inlineConfig);
- }
- catch (err) {
- server.config.logger.error(err.message, {
- timestamp: true
- });
- return;
- }
- for (const key in newServer) {
- if (key !== 'app') {
- // @ts-ignore
- server[key] = newServer[key];
- }
- }
- if (!server.config.server.middlewareMode) {
- await server.listen(port, true);
- }
- else {
- server.config.logger.info('server restarted.', { timestamp: true });
- }
-}
-
-var isWsl$2 = {exports: {}};
-
-const fs$7 = fs__default;
-
-let isDocker$2;
-
-function hasDockerEnv() {
- try {
- fs$7.statSync('/.dockerenv');
- return true;
- } catch (_) {
- return false;
- }
-}
-
-function hasDockerCGroup() {
- try {
- return fs$7.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');
- } catch (_) {
- return false;
- }
-}
-
-var isDocker_1 = () => {
- if (isDocker$2 === undefined) {
- isDocker$2 = hasDockerEnv() || hasDockerCGroup();
- }
-
- return isDocker$2;
-};
-
-const os$4 = require$$0__default$1;
-const fs$6 = fs__default;
-const isDocker$1 = isDocker_1;
-
-const isWsl$1 = () => {
- if (process.platform !== 'linux') {
- return false;
- }
-
- if (os$4.release().toLowerCase().includes('microsoft')) {
- if (isDocker$1()) {
- return false;
- }
-
- return true;
- }
-
- try {
- return fs$6.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?
- !isDocker$1() : false;
- } catch (_) {
- return false;
- }
-};
-
-if (process.env.__IS_WSL_TEST__) {
- isWsl$2.exports = isWsl$1;
-} else {
- isWsl$2.exports = isWsl$1();
-}
-
-var defineLazyProp = (object, propertyName, fn) => {
- const define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});
-
- Object.defineProperty(object, propertyName, {
- configurable: true,
- enumerable: true,
- get() {
- const result = fn();
- define(result);
- return result;
- },
- set(value) {
- define(value);
- }
- });
-
- return object;
-};
-
-const path$9 = path__default;
-const childProcess$3 = require$$1__default$4;
-const {promises: fs$5, constants: fsConstants} = fs__default;
-const isWsl = isWsl$2.exports;
-const isDocker = isDocker_1;
-const defineLazyProperty = defineLazyProp;
-
-// Path to included `xdg-open`.
-const localXdgOpenPath = path$9.join(__dirname, 'xdg-open');
-
-const {platform, arch} = process;
-
-/**
-Get the mount point for fixed drives in WSL.
-
-@inner
-@returns {string} The mount point.
-*/
-const getWslDrivesMountPoint = (() => {
- // Default value for "root" param
- // according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config
- const defaultMountPoint = '/mnt/';
-
- let mountPoint;
-
- return async function () {
- if (mountPoint) {
- // Return memoized mount point value
- return mountPoint;
- }
-
- const configFilePath = '/etc/wsl.conf';
-
- let isConfigFileExists = false;
- try {
- await fs$5.access(configFilePath, fsConstants.F_OK);
- isConfigFileExists = true;
- } catch {}
-
- if (!isConfigFileExists) {
- return defaultMountPoint;
- }
-
- const configContent = await fs$5.readFile(configFilePath, {encoding: 'utf8'});
- const configMountPoint = /(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(configContent);
-
- if (!configMountPoint) {
- return defaultMountPoint;
- }
-
- mountPoint = configMountPoint.groups.mountPoint.trim();
- mountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;
-
- return mountPoint;
- };
-})();
-
-const pTryEach = async (array, mapper) => {
- let latestError;
-
- for (const item of array) {
- try {
- return await mapper(item); // eslint-disable-line no-await-in-loop
- } catch (error) {
- latestError = error;
- }
- }
-
- throw latestError;
-};
-
-const open = async (target, options) => {
- if (typeof target !== 'string') {
- throw new TypeError('Expected a `target`');
- }
-
- options = {
- wait: false,
- background: false,
- newInstance: false,
- allowNonzeroExitCode: false,
- ...options
- };
-
- if (Array.isArray(options.app)) {
- return pTryEach(options.app, singleApp => open(target, {
- ...options,
- app: singleApp
- }));
- }
-
- let {name: app, arguments: appArguments = []} = options.app || {};
- appArguments = [...appArguments];
-
- if (Array.isArray(app)) {
- return pTryEach(app, appName => open(target, {
- ...options,
- app: {
- name: appName,
- arguments: appArguments
- }
- }));
- }
-
- let command;
- const cliArguments = [];
- const childProcessOptions = {};
-
- if (platform === 'darwin') {
- command = 'open';
-
- if (options.wait) {
- cliArguments.push('--wait-apps');
- }
-
- if (options.background) {
- cliArguments.push('--background');
- }
-
- if (options.newInstance) {
- cliArguments.push('--new');
- }
-
- if (app) {
- cliArguments.push('-a', app);
- }
- } else if (platform === 'win32' || (isWsl && !isDocker())) {
- const mountPoint = await getWslDrivesMountPoint();
-
- command = isWsl ?
- `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe` :
- `${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`;
-
- cliArguments.push(
- '-NoProfile',
- '-NonInteractive',
- '–ExecutionPolicy',
- 'Bypass',
- '-EncodedCommand'
- );
-
- if (!isWsl) {
- childProcessOptions.windowsVerbatimArguments = true;
- }
-
- const encodedArguments = ['Start'];
-
- if (options.wait) {
- encodedArguments.push('-Wait');
- }
-
- if (app) {
- // Double quote with double quotes to ensure the inner quotes are passed through.
- // Inner quotes are delimited for PowerShell interpretation with backticks.
- encodedArguments.push(`"\`"${app}\`""`, '-ArgumentList');
- appArguments.unshift(target);
- } else {
- encodedArguments.push(`"${target}"`);
- }
-
- if (appArguments.length > 0) {
- appArguments = appArguments.map(arg => `"\`"${arg}\`""`);
- encodedArguments.push(appArguments.join(','));
- }
-
- // Using Base64-encoded command, accepted by PowerShell, to allow special characters.
- target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');
- } else {
- if (app) {
- command = app;
- } else {
- // When bundled by Webpack, there's no actual package file path and no local `xdg-open`.
- const isBundled = !__dirname || __dirname === '/';
-
- // Check if local `xdg-open` exists and is executable.
- let exeLocalXdgOpen = false;
- try {
- await fs$5.access(localXdgOpenPath, fsConstants.X_OK);
- exeLocalXdgOpen = true;
- } catch {}
-
- const useSystemXdgOpen = process.versions.electron ||
- platform === 'android' || isBundled || !exeLocalXdgOpen;
- command = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;
- }
-
- if (appArguments.length > 0) {
- cliArguments.push(...appArguments);
- }
-
- if (!options.wait) {
- // `xdg-open` will block the process unless stdio is ignored
- // and it's detached from the parent even if it's unref'd.
- childProcessOptions.stdio = 'ignore';
- childProcessOptions.detached = true;
- }
- }
-
- cliArguments.push(target);
-
- if (platform === 'darwin' && appArguments.length > 0) {
- cliArguments.push('--args', ...appArguments);
- }
-
- const subprocess = childProcess$3.spawn(command, cliArguments, childProcessOptions);
-
- if (options.wait) {
- return new Promise((resolve, reject) => {
- subprocess.once('error', reject);
-
- subprocess.once('close', exitCode => {
- if (options.allowNonzeroExitCode && exitCode > 0) {
- reject(new Error(`Exited with code ${exitCode}`));
- return;
- }
-
- resolve(subprocess);
- });
- });
- }
-
- subprocess.unref();
-
- return subprocess;
-};
-
-function detectArchBinary(binary) {
- if (typeof binary === 'string' || Array.isArray(binary)) {
- return binary;
- }
-
- const {[arch]: archBinary} = binary;
-
- if (!archBinary) {
- throw new Error(`${arch} is not supported`);
- }
-
- return archBinary;
-}
-
-function detectPlatformBinary({[platform]: platformBinary}, {wsl}) {
- if (wsl && isWsl) {
- return detectArchBinary(wsl);
- }
-
- if (!platformBinary) {
- throw new Error(`${platform} is not supported`);
- }
-
- return detectArchBinary(platformBinary);
-}
-
-const apps = {};
-
-defineLazyProperty(apps, 'chrome', () => detectPlatformBinary({
- darwin: 'google chrome',
- win32: 'chrome',
- linux: ['google-chrome', 'google-chrome-stable']
-}, {
- wsl: {
- ia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',
- x64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe']
- }
-}));
-
-defineLazyProperty(apps, 'firefox', () => detectPlatformBinary({
- darwin: 'firefox',
- win32: 'C:\\Program Files\\Mozilla Firefox\\firefox.exe',
- linux: 'firefox'
-}, {
- wsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe'
-}));
-
-defineLazyProperty(apps, 'edge', () => detectPlatformBinary({
- darwin: 'microsoft edge',
- win32: 'msedge',
- linux: 'microsoft-edge'
-}, {
- wsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'
-}));
-
-open.apps = apps;
-
-var open_1 = open;
-
-var execa$2 = {exports: {}};
-
-var crossSpawn$1 = {exports: {}};
-
-var windows$1 = isexe$3;
-isexe$3.sync = sync$2;
-
-var fs$4 = fs__default;
-
-function checkPathExt (path, options) {
- var pathext = options.pathExt !== undefined ?
- options.pathExt : process.env.PATHEXT;
-
- if (!pathext) {
- return true
- }
-
- pathext = pathext.split(';');
- if (pathext.indexOf('') !== -1) {
- return true
- }
- for (var i = 0; i < pathext.length; i++) {
- var p = pathext[i].toLowerCase();
- if (p && path.substr(-p.length).toLowerCase() === p) {
- return true
- }
- }
- return false
-}
-
-function checkStat$1 (stat, path, options) {
- if (!stat.isSymbolicLink() && !stat.isFile()) {
- return false
- }
- return checkPathExt(path, options)
-}
-
-function isexe$3 (path, options, cb) {
- fs$4.stat(path, function (er, stat) {
- cb(er, er ? false : checkStat$1(stat, path, options));
- });
-}
-
-function sync$2 (path, options) {
- return checkStat$1(fs$4.statSync(path), path, options)
-}
-
-var mode = isexe$2;
-isexe$2.sync = sync$1;
-
-var fs$3 = fs__default;
-
-function isexe$2 (path, options, cb) {
- fs$3.stat(path, function (er, stat) {
- cb(er, er ? false : checkStat(stat, options));
- });
-}
-
-function sync$1 (path, options) {
- return checkStat(fs$3.statSync(path), options)
-}
-
-function checkStat (stat, options) {
- return stat.isFile() && checkMode(stat, options)
-}
-
-function checkMode (stat, options) {
- var mod = stat.mode;
- var uid = stat.uid;
- var gid = stat.gid;
-
- var myUid = options.uid !== undefined ?
- options.uid : process.getuid && process.getuid();
- var myGid = options.gid !== undefined ?
- options.gid : process.getgid && process.getgid();
-
- var u = parseInt('100', 8);
- var g = parseInt('010', 8);
- var o = parseInt('001', 8);
- var ug = u | g;
-
- var ret = (mod & o) ||
- (mod & g) && gid === myGid ||
- (mod & u) && uid === myUid ||
- (mod & ug) && myUid === 0;
-
- return ret
-}
-
-var core$1;
-if (process.platform === 'win32' || commonjsGlobal.TESTING_WINDOWS) {
- core$1 = windows$1;
-} else {
- core$1 = mode;
-}
-
-var isexe_1 = isexe$1;
-isexe$1.sync = sync;
-
-function isexe$1 (path, options, cb) {
- if (typeof options === 'function') {
- cb = options;
- options = {};
- }
-
- if (!cb) {
- if (typeof Promise !== 'function') {
- throw new TypeError('callback not provided')
- }
-
- return new Promise(function (resolve, reject) {
- isexe$1(path, options || {}, function (er, is) {
- if (er) {
- reject(er);
- } else {
- resolve(is);
- }
- });
- })
- }
-
- core$1(path, options || {}, function (er, is) {
- // ignore EACCES because that just means we aren't allowed to run it
- if (er) {
- if (er.code === 'EACCES' || options && options.ignoreErrors) {
- er = null;
- is = false;
- }
- }
- cb(er, is);
- });
-}
-
-function sync (path, options) {
- // my kingdom for a filtered catch
- try {
- return core$1.sync(path, options || {})
- } catch (er) {
- if (options && options.ignoreErrors || er.code === 'EACCES') {
- return false
- } else {
- throw er
- }
- }
-}
-
-const isWindows = process.platform === 'win32' ||
- process.env.OSTYPE === 'cygwin' ||
- process.env.OSTYPE === 'msys';
-
-const path$8 = path__default;
-const COLON = isWindows ? ';' : ':';
-const isexe = isexe_1;
-
-const getNotFoundError = (cmd) =>
- Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' });
-
-const getPathInfo = (cmd, opt) => {
- const colon = opt.colon || COLON;
-
- // If it has a slash, then we don't bother searching the pathenv.
- // just check the file itself, and that's it.
- const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? ['']
- : (
- [
- // windows always checks the cwd first
- ...(isWindows ? [process.cwd()] : []),
- ...(opt.path || process.env.PATH ||
- /* istanbul ignore next: very unusual */ '').split(colon),
- ]
- );
- const pathExtExe = isWindows
- ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'
- : '';
- const pathExt = isWindows ? pathExtExe.split(colon) : [''];
-
- if (isWindows) {
- if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
- pathExt.unshift('');
- }
-
- return {
- pathEnv,
- pathExt,
- pathExtExe,
- }
-};
-
-const which$1 = (cmd, opt, cb) => {
- if (typeof opt === 'function') {
- cb = opt;
- opt = {};
- }
- if (!opt)
- opt = {};
-
- const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
- const found = [];
-
- const step = i => new Promise((resolve, reject) => {
- if (i === pathEnv.length)
- return opt.all && found.length ? resolve(found)
- : reject(getNotFoundError(cmd))
-
- const ppRaw = pathEnv[i];
- const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw;
-
- const pCmd = path$8.join(pathPart, cmd);
- const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd
- : pCmd;
-
- resolve(subStep(p, i, 0));
- });
-
- const subStep = (p, i, ii) => new Promise((resolve, reject) => {
- if (ii === pathExt.length)
- return resolve(step(i + 1))
- const ext = pathExt[ii];
- isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {
- if (!er && is) {
- if (opt.all)
- found.push(p + ext);
- else
- return resolve(p + ext)
- }
- return resolve(subStep(p, i, ii + 1))
- });
- });
-
- return cb ? step(0).then(res => cb(null, res), cb) : step(0)
-};
-
-const whichSync = (cmd, opt) => {
- opt = opt || {};
-
- const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
- const found = [];
-
- for (let i = 0; i < pathEnv.length; i ++) {
- const ppRaw = pathEnv[i];
- const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw;
-
- const pCmd = path$8.join(pathPart, cmd);
- const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd
- : pCmd;
-
- for (let j = 0; j < pathExt.length; j ++) {
- const cur = p + pathExt[j];
- try {
- const is = isexe.sync(cur, { pathExt: pathExtExe });
- if (is) {
- if (opt.all)
- found.push(cur);
- else
- return cur
- }
- } catch (ex) {}
- }
- }
-
- if (opt.all && found.length)
- return found
-
- if (opt.nothrow)
- return null
-
- throw getNotFoundError(cmd)
-};
-
-var which_1 = which$1;
-which$1.sync = whichSync;
-
-var pathKey$1 = {exports: {}};
-
-const pathKey = (options = {}) => {
- const environment = options.env || process.env;
- const platform = options.platform || process.platform;
-
- if (platform !== 'win32') {
- return 'PATH';
- }
-
- return Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';
-};
-
-pathKey$1.exports = pathKey;
-// TODO: Remove this for the next major release
-pathKey$1.exports.default = pathKey;
-
-const path$7 = path__default;
-const which = which_1;
-const getPathKey = pathKey$1.exports;
-
-function resolveCommandAttempt(parsed, withoutPathExt) {
- const env = parsed.options.env || process.env;
- const cwd = process.cwd();
- const hasCustomCwd = parsed.options.cwd != null;
- // Worker threads do not have process.chdir()
- const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;
-
- // If a custom `cwd` was specified, we need to change the process cwd
- // because `which` will do stat calls but does not support a custom cwd
- if (shouldSwitchCwd) {
- try {
- process.chdir(parsed.options.cwd);
- } catch (err) {
- /* Empty */
- }
- }
-
- let resolved;
-
- try {
- resolved = which.sync(parsed.command, {
- path: env[getPathKey({ env })],
- pathExt: withoutPathExt ? path$7.delimiter : undefined,
- });
- } catch (e) {
- /* Empty */
- } finally {
- if (shouldSwitchCwd) {
- process.chdir(cwd);
- }
- }
-
- // If we successfully resolved, ensure that an absolute path is returned
- // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it
- if (resolved) {
- resolved = path$7.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);
- }
-
- return resolved;
-}
-
-function resolveCommand$1(parsed) {
- return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
-}
-
-var resolveCommand_1 = resolveCommand$1;
-
-var _escape = {};
-
-// See http://www.robvanderwoude.com/escapechars.php
-const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
-
-function escapeCommand(arg) {
- // Escape meta chars
- arg = arg.replace(metaCharsRegExp, '^$1');
-
- return arg;
-}
-
-function escapeArgument(arg, doubleEscapeMetaChars) {
- // Convert to string
- arg = `${arg}`;
-
- // Algorithm below is based on https://qntm.org/cmd
-
- // Sequence of backslashes followed by a double quote:
- // double up all the backslashes and escape the double quote
- arg = arg.replace(/(\\*)"/g, '$1$1\\"');
-
- // Sequence of backslashes followed by the end of the string
- // (which will become a double quote later):
- // double up all the backslashes
- arg = arg.replace(/(\\*)$/, '$1$1');
-
- // All other backslashes occur literally
-
- // Quote the whole thing:
- arg = `"${arg}"`;
-
- // Escape meta chars
- arg = arg.replace(metaCharsRegExp, '^$1');
-
- // Double escape meta chars if necessary
- if (doubleEscapeMetaChars) {
- arg = arg.replace(metaCharsRegExp, '^$1');
- }
-
- return arg;
-}
-
-_escape.command = escapeCommand;
-_escape.argument = escapeArgument;
-
-var shebangRegex$1 = /^#!(.*)/;
-
-const shebangRegex = shebangRegex$1;
-
-var shebangCommand$1 = (string = '') => {
- const match = string.match(shebangRegex);
-
- if (!match) {
- return null;
- }
-
- const [path, argument] = match[0].replace(/#! ?/, '').split(' ');
- const binary = path.split('/').pop();
-
- if (binary === 'env') {
- return argument;
- }
-
- return argument ? `${binary} ${argument}` : binary;
-};
-
-const fs$2 = fs__default;
-const shebangCommand = shebangCommand$1;
-
-function readShebang$1(command) {
- // Read the first 150 bytes from the file
- const size = 150;
- const buffer = Buffer.alloc(size);
-
- let fd;
-
- try {
- fd = fs$2.openSync(command, 'r');
- fs$2.readSync(fd, buffer, 0, size, 0);
- fs$2.closeSync(fd);
- } catch (e) { /* Empty */ }
-
- // Attempt to extract shebang (null is returned if not a shebang)
- return shebangCommand(buffer.toString());
-}
-
-var readShebang_1 = readShebang$1;
-
-const path$6 = path__default;
-const resolveCommand = resolveCommand_1;
-const escape = _escape;
-const readShebang = readShebang_1;
-
-const isWin$2 = process.platform === 'win32';
-const isExecutableRegExp = /\.(?:com|exe)$/i;
-const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
-
-function detectShebang(parsed) {
- parsed.file = resolveCommand(parsed);
-
- const shebang = parsed.file && readShebang(parsed.file);
-
- if (shebang) {
- parsed.args.unshift(parsed.file);
- parsed.command = shebang;
-
- return resolveCommand(parsed);
- }
-
- return parsed.file;
-}
-
-function parseNonShell(parsed) {
- if (!isWin$2) {
- return parsed;
- }
-
- // Detect & add support for shebangs
- const commandFile = detectShebang(parsed);
-
- // We don't need a shell if the command filename is an executable
- const needsShell = !isExecutableRegExp.test(commandFile);
-
- // If a shell is required, use cmd.exe and take care of escaping everything correctly
- // Note that `forceShell` is an hidden option used only in tests
- if (parsed.options.forceShell || needsShell) {
- // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`
- // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument
- // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,
- // we need to double escape them
- const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);
-
- // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar)
- // This is necessary otherwise it will always fail with ENOENT in those cases
- parsed.command = path$6.normalize(parsed.command);
-
- // Escape command & arguments
- parsed.command = escape.command(parsed.command);
- parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));
-
- const shellCommand = [parsed.command].concat(parsed.args).join(' ');
-
- parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`];
- parsed.command = process.env.comspec || 'cmd.exe';
- parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
- }
-
- return parsed;
-}
-
-function parse$4(command, args, options) {
- // Normalize arguments, similar to nodejs
- if (args && !Array.isArray(args)) {
- options = args;
- args = null;
- }
-
- args = args ? args.slice(0) : []; // Clone array to avoid changing the original
- options = Object.assign({}, options); // Clone object to avoid changing the original
-
- // Build our parsed object
- const parsed = {
- command,
- args,
- options,
- file: undefined,
- original: {
- command,
- args,
- },
- };
-
- // Delegate further parsing to shell or non-shell
- return options.shell ? parsed : parseNonShell(parsed);
-}
-
-var parse_1 = parse$4;
-
-const isWin$1 = process.platform === 'win32';
-
-function notFoundError(original, syscall) {
- return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
- code: 'ENOENT',
- errno: 'ENOENT',
- syscall: `${syscall} ${original.command}`,
- path: original.command,
- spawnargs: original.args,
- });
-}
-
-function hookChildProcess(cp, parsed) {
- if (!isWin$1) {
- return;
- }
-
- const originalEmit = cp.emit;
-
- cp.emit = function (name, arg1) {
- // If emitting "exit" event and exit code is 1, we need to check if
- // the command exists and emit an "error" instead
- // See https://github.com/IndigoUnited/node-cross-spawn/issues/16
- if (name === 'exit') {
- const err = verifyENOENT(arg1, parsed);
-
- if (err) {
- return originalEmit.call(cp, 'error', err);
- }
- }
-
- return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params
- };
-}
-
-function verifyENOENT(status, parsed) {
- if (isWin$1 && status === 1 && !parsed.file) {
- return notFoundError(parsed.original, 'spawn');
- }
-
- return null;
-}
-
-function verifyENOENTSync(status, parsed) {
- if (isWin$1 && status === 1 && !parsed.file) {
- return notFoundError(parsed.original, 'spawnSync');
- }
-
- return null;
-}
-
-var enoent$1 = {
- hookChildProcess,
- verifyENOENT,
- verifyENOENTSync,
- notFoundError,
-};
-
-const cp = require$$1__default$4;
-const parse$3 = parse_1;
-const enoent = enoent$1;
-
-function spawn(command, args, options) {
- // Parse the arguments
- const parsed = parse$3(command, args, options);
-
- // Spawn the child process
- const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
-
- // Hook into child process "exit" event to emit an error if the command
- // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
- enoent.hookChildProcess(spawned, parsed);
-
- return spawned;
-}
-
-function spawnSync(command, args, options) {
- // Parse the arguments
- const parsed = parse$3(command, args, options);
-
- // Spawn the child process
- const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
-
- // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
- result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
-
- return result;
-}
-
-crossSpawn$1.exports = spawn;
-crossSpawn$1.exports.spawn = spawn;
-crossSpawn$1.exports.sync = spawnSync;
-
-crossSpawn$1.exports._parse = parse$3;
-crossSpawn$1.exports._enoent = enoent;
-
-var stripFinalNewline$1 = input => {
- const LF = typeof input === 'string' ? '\n' : '\n'.charCodeAt();
- const CR = typeof input === 'string' ? '\r' : '\r'.charCodeAt();
-
- if (input[input.length - 1] === LF) {
- input = input.slice(0, input.length - 1);
- }
-
- if (input[input.length - 1] === CR) {
- input = input.slice(0, input.length - 1);
- }
-
- return input;
-};
-
-var npmRunPath$1 = {exports: {}};
-
-(function (module) {
-const path = path__default;
-const pathKey = pathKey$1.exports;
-
-const npmRunPath = options => {
- options = {
- cwd: process.cwd(),
- path: process.env[pathKey()],
- execPath: process.execPath,
- ...options
- };
-
- let previous;
- let cwdPath = path.resolve(options.cwd);
- const result = [];
-
- while (previous !== cwdPath) {
- result.push(path.join(cwdPath, 'node_modules/.bin'));
- previous = cwdPath;
- cwdPath = path.resolve(cwdPath, '..');
- }
-
- // Ensure the running `node` binary is used
- const execPathDir = path.resolve(options.cwd, options.execPath, '..');
- result.push(execPathDir);
-
- return result.concat(options.path).join(path.delimiter);
-};
-
-module.exports = npmRunPath;
-// TODO: Remove this for the next major release
-module.exports.default = npmRunPath;
-
-module.exports.env = options => {
- options = {
- env: process.env,
- ...options
- };
-
- const env = {...options.env};
- const path = pathKey({env});
-
- options.path = env[path];
- env[path] = module.exports(options);
-
- return env;
-};
-}(npmRunPath$1));
-
-var onetime$2 = {exports: {}};
-
-var mimicFn$2 = {exports: {}};
-
-const mimicFn$1 = (to, from) => {
- for (const prop of Reflect.ownKeys(from)) {
- Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));
- }
-
- return to;
-};
-
-mimicFn$2.exports = mimicFn$1;
-// TODO: Remove this for the next major release
-mimicFn$2.exports.default = mimicFn$1;
-
-const mimicFn = mimicFn$2.exports;
-
-const calledFunctions = new WeakMap();
-
-const onetime$1 = (function_, options = {}) => {
- if (typeof function_ !== 'function') {
- throw new TypeError('Expected a function');
- }
-
- let returnValue;
- let callCount = 0;
- const functionName = function_.displayName || function_.name || '<anonymous>';
-
- const onetime = function (...arguments_) {
- calledFunctions.set(onetime, ++callCount);
-
- if (callCount === 1) {
- returnValue = function_.apply(this, arguments_);
- function_ = null;
- } else if (options.throw === true) {
- throw new Error(`Function \`${functionName}\` can only be called once`);
- }
-
- return returnValue;
- };
-
- mimicFn(onetime, function_);
- calledFunctions.set(onetime, callCount);
-
- return onetime;
-};
-
-onetime$2.exports = onetime$1;
-// TODO: Remove this for the next major release
-onetime$2.exports.default = onetime$1;
-
-onetime$2.exports.callCount = function_ => {
- if (!calledFunctions.has(function_)) {
- throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
- }
-
- return calledFunctions.get(function_);
-};
-
-var main$2 = {};
-
-var signals$2 = {};
-
-var core = {};
-
-Object.defineProperty(core,"__esModule",{value:true});core.SIGNALS=void 0;
-
-const SIGNALS=[
-{
-name:"SIGHUP",
-number:1,
-action:"terminate",
-description:"Terminal closed",
-standard:"posix"},
-
-{
-name:"SIGINT",
-number:2,
-action:"terminate",
-description:"User interruption with CTRL-C",
-standard:"ansi"},
-
-{
-name:"SIGQUIT",
-number:3,
-action:"core",
-description:"User interruption with CTRL-\\",
-standard:"posix"},
-
-{
-name:"SIGILL",
-number:4,
-action:"core",
-description:"Invalid machine instruction",
-standard:"ansi"},
-
-{
-name:"SIGTRAP",
-number:5,
-action:"core",
-description:"Debugger breakpoint",
-standard:"posix"},
-
-{
-name:"SIGABRT",
-number:6,
-action:"core",
-description:"Aborted",
-standard:"ansi"},
-
-{
-name:"SIGIOT",
-number:6,
-action:"core",
-description:"Aborted",
-standard:"bsd"},
-
-{
-name:"SIGBUS",
-number:7,
-action:"core",
-description:
-"Bus error due to misaligned, non-existing address or paging error",
-standard:"bsd"},
-
-{
-name:"SIGEMT",
-number:7,
-action:"terminate",
-description:"Command should be emulated but is not implemented",
-standard:"other"},
-
-{
-name:"SIGFPE",
-number:8,
-action:"core",
-description:"Floating point arithmetic error",
-standard:"ansi"},
-
-{
-name:"SIGKILL",
-number:9,
-action:"terminate",
-description:"Forced termination",
-standard:"posix",
-forced:true},
-
-{
-name:"SIGUSR1",
-number:10,
-action:"terminate",
-description:"Application-specific signal",
-standard:"posix"},
-
-{
-name:"SIGSEGV",
-number:11,
-action:"core",
-description:"Segmentation fault",
-standard:"ansi"},
-
-{
-name:"SIGUSR2",
-number:12,
-action:"terminate",
-description:"Application-specific signal",
-standard:"posix"},
-
-{
-name:"SIGPIPE",
-number:13,
-action:"terminate",
-description:"Broken pipe or socket",
-standard:"posix"},
-
-{
-name:"SIGALRM",
-number:14,
-action:"terminate",
-description:"Timeout or timer",
-standard:"posix"},
-
-{
-name:"SIGTERM",
-number:15,
-action:"terminate",
-description:"Termination",
-standard:"ansi"},
-
-{
-name:"SIGSTKFLT",
-number:16,
-action:"terminate",
-description:"Stack is empty or overflowed",
-standard:"other"},
-
-{
-name:"SIGCHLD",
-number:17,
-action:"ignore",
-description:"Child process terminated, paused or unpaused",
-standard:"posix"},
-
-{
-name:"SIGCLD",
-number:17,
-action:"ignore",
-description:"Child process terminated, paused or unpaused",
-standard:"other"},
-
-{
-name:"SIGCONT",
-number:18,
-action:"unpause",
-description:"Unpaused",
-standard:"posix",
-forced:true},
-
-{
-name:"SIGSTOP",
-number:19,
-action:"pause",
-description:"Paused",
-standard:"posix",
-forced:true},
-
-{
-name:"SIGTSTP",
-number:20,
-action:"pause",
-description:"Paused using CTRL-Z or \"suspend\"",
-standard:"posix"},
-
-{
-name:"SIGTTIN",
-number:21,
-action:"pause",
-description:"Background process cannot read terminal input",
-standard:"posix"},
-
-{
-name:"SIGBREAK",
-number:21,
-action:"terminate",
-description:"User interruption with CTRL-BREAK",
-standard:"other"},
-
-{
-name:"SIGTTOU",
-number:22,
-action:"pause",
-description:"Background process cannot write to terminal output",
-standard:"posix"},
-
-{
-name:"SIGURG",
-number:23,
-action:"ignore",
-description:"Socket received out-of-band data",
-standard:"bsd"},
-
-{
-name:"SIGXCPU",
-number:24,
-action:"core",
-description:"Process timed out",
-standard:"bsd"},
-
-{
-name:"SIGXFSZ",
-number:25,
-action:"core",
-description:"File too big",
-standard:"bsd"},
-
-{
-name:"SIGVTALRM",
-number:26,
-action:"terminate",
-description:"Timeout or timer",
-standard:"bsd"},
-
-{
-name:"SIGPROF",
-number:27,
-action:"terminate",
-description:"Timeout or timer",
-standard:"bsd"},
-
-{
-name:"SIGWINCH",
-number:28,
-action:"ignore",
-description:"Terminal window size changed",
-standard:"bsd"},
-
-{
-name:"SIGIO",
-number:29,
-action:"terminate",
-description:"I/O is available",
-standard:"other"},
-
-{
-name:"SIGPOLL",
-number:29,
-action:"terminate",
-description:"Watched event",
-standard:"other"},
-
-{
-name:"SIGINFO",
-number:29,
-action:"ignore",
-description:"Request for process information",
-standard:"other"},
-
-{
-name:"SIGPWR",
-number:30,
-action:"terminate",
-description:"Device running out of power",
-standard:"systemv"},
-
-{
-name:"SIGSYS",
-number:31,
-action:"core",
-description:"Invalid system call",
-standard:"other"},
-
-{
-name:"SIGUNUSED",
-number:31,
-action:"terminate",
-description:"Invalid system call",
-standard:"other"}];core.SIGNALS=SIGNALS;
-
-var realtime = {};
-
-Object.defineProperty(realtime,"__esModule",{value:true});realtime.SIGRTMAX=realtime.getRealtimeSignals=void 0;
-const getRealtimeSignals=function(){
-const length=SIGRTMAX-SIGRTMIN+1;
-return Array.from({length},getRealtimeSignal);
-};realtime.getRealtimeSignals=getRealtimeSignals;
-
-const getRealtimeSignal=function(value,index){
-return {
-name:`SIGRT${index+1}`,
-number:SIGRTMIN+index,
-action:"terminate",
-description:"Application-specific signal (realtime)",
-standard:"posix"};
-
-};
-
-const SIGRTMIN=34;
-const SIGRTMAX=64;realtime.SIGRTMAX=SIGRTMAX;
-
-Object.defineProperty(signals$2,"__esModule",{value:true});signals$2.getSignals=void 0;var _os$1=require$$0__default$1;
-
-var _core=core;
-var _realtime$1=realtime;
-
-
-
-const getSignals=function(){
-const realtimeSignals=(0, _realtime$1.getRealtimeSignals)();
-const signals=[..._core.SIGNALS,...realtimeSignals].map(normalizeSignal);
-return signals;
-};signals$2.getSignals=getSignals;
-
-
-
-
-
-
-
-const normalizeSignal=function({
-name,
-number:defaultNumber,
-description,
-action,
-forced=false,
-standard})
-{
-const{
-signals:{[name]:constantSignal}}=
-_os$1.constants;
-const supported=constantSignal!==undefined;
-const number=supported?constantSignal:defaultNumber;
-return {name,number,description,supported,action,forced,standard};
-};
-
-Object.defineProperty(main$2,"__esModule",{value:true});main$2.signalsByNumber=main$2.signalsByName=void 0;var _os=require$$0__default$1;
-
-var _signals=signals$2;
-var _realtime=realtime;
-
-
-
-const getSignalsByName=function(){
-const signals=(0, _signals.getSignals)();
-return signals.reduce(getSignalByName,{});
-};
-
-const getSignalByName=function(
-signalByNameMemo,
-{name,number,description,supported,action,forced,standard})
-{
-return {
-...signalByNameMemo,
-[name]:{name,number,description,supported,action,forced,standard}};
-
-};
-
-const signalsByName$1=getSignalsByName();main$2.signalsByName=signalsByName$1;
-
-
-
-
-const getSignalsByNumber=function(){
-const signals=(0, _signals.getSignals)();
-const length=_realtime.SIGRTMAX+1;
-const signalsA=Array.from({length},(value,number)=>
-getSignalByNumber(number,signals));
-
-return Object.assign({},...signalsA);
-};
-
-const getSignalByNumber=function(number,signals){
-const signal=findSignalByNumber(number,signals);
-
-if(signal===undefined){
-return {};
-}
-
-const{name,description,supported,action,forced,standard}=signal;
-return {
-[number]:{
-name,
-number,
-description,
-supported,
-action,
-forced,
-standard}};
-
-
-};
-
-
-
-const findSignalByNumber=function(number,signals){
-const signal=signals.find(({name})=>_os.constants.signals[name]===number);
-
-if(signal!==undefined){
-return signal;
-}
-
-return signals.find(signalA=>signalA.number===number);
-};
-
-const signalsByNumber=getSignalsByNumber();main$2.signalsByNumber=signalsByNumber;
-
-const {signalsByName} = main$2;
-
-const getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => {
- if (timedOut) {
- return `timed out after ${timeout} milliseconds`;
- }
-
- if (isCanceled) {
- return 'was canceled';
- }
-
- if (errorCode !== undefined) {
- return `failed with ${errorCode}`;
- }
-
- if (signal !== undefined) {
- return `was killed with ${signal} (${signalDescription})`;
- }
-
- if (exitCode !== undefined) {
- return `failed with exit code ${exitCode}`;
- }
-
- return 'failed';
-};
-
-const makeError$1 = ({
- stdout,
- stderr,
- all,
- error,
- signal,
- exitCode,
- command,
- escapedCommand,
- timedOut,
- isCanceled,
- killed,
- parsed: {options: {timeout}}
-}) => {
- // `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`.
- // We normalize them to `undefined`
- exitCode = exitCode === null ? undefined : exitCode;
- signal = signal === null ? undefined : signal;
- const signalDescription = signal === undefined ? undefined : signalsByName[signal].description;
-
- const errorCode = error && error.code;
-
- const prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled});
- const execaMessage = `Command ${prefix}: ${command}`;
- const isError = Object.prototype.toString.call(error) === '[object Error]';
- const shortMessage = isError ? `${execaMessage}\n${error.message}` : execaMessage;
- const message = [shortMessage, stderr, stdout].filter(Boolean).join('\n');
-
- if (isError) {
- error.originalMessage = error.message;
- error.message = message;
- } else {
- error = new Error(message);
- }
-
- error.shortMessage = shortMessage;
- error.command = command;
- error.escapedCommand = escapedCommand;
- error.exitCode = exitCode;
- error.signal = signal;
- error.signalDescription = signalDescription;
- error.stdout = stdout;
- error.stderr = stderr;
-
- if (all !== undefined) {
- error.all = all;
- }
-
- if ('bufferedData' in error) {
- delete error.bufferedData;
- }
-
- error.failed = true;
- error.timedOut = Boolean(timedOut);
- error.isCanceled = isCanceled;
- error.killed = killed && !timedOut;
-
- return error;
-};
-
-var error = makeError$1;
-
-var stdio = {exports: {}};
-
-const aliases = ['stdin', 'stdout', 'stderr'];
-
-const hasAlias = options => aliases.some(alias => options[alias] !== undefined);
-
-const normalizeStdio$1 = options => {
- if (!options) {
- return;
- }
-
- const {stdio} = options;
-
- if (stdio === undefined) {
- return aliases.map(alias => options[alias]);
- }
-
- if (hasAlias(options)) {
- throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${aliases.map(alias => `\`${alias}\``).join(', ')}`);
- }
-
- if (typeof stdio === 'string') {
- return stdio;
- }
-
- if (!Array.isArray(stdio)) {
- throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
- }
-
- const length = Math.max(stdio.length, aliases.length);
- return Array.from({length}, (value, index) => stdio[index]);
-};
-
-stdio.exports = normalizeStdio$1;
-
-// `ipc` is pushed unless it is already present
-stdio.exports.node = options => {
- const stdio = normalizeStdio$1(options);
-
- if (stdio === 'ipc') {
- return 'ipc';
- }
-
- if (stdio === undefined || typeof stdio === 'string') {
- return [stdio, stdio, stdio, 'ipc'];
- }
-
- if (stdio.includes('ipc')) {
- return stdio;
- }
-
- return [...stdio, 'ipc'];
-};
-
-var signalExit = {exports: {}};
-
-var signals$1 = {exports: {}};
-
-(function (module) {
-// This is not the set of all possible signals.
-//
-// It IS, however, the set of all signals that trigger
-// an exit on either Linux or BSD systems. Linux is a
-// superset of the signal names supported on BSD, and
-// the unknown signals just fail to register, so we can
-// catch that easily enough.
-//
-// Don't bother with SIGKILL. It's uncatchable, which
-// means that we can't fire any callbacks anyway.
-//
-// If a user does happen to register a handler on a non-
-// fatal signal like SIGWINCH or something, and then
-// exit, it'll end up firing `process.emit('exit')`, so
-// the handler will be fired anyway.
-//
-// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
-// artificially, inherently leave the process in a
-// state from which it is not safe to try and enter JS
-// listeners.
-module.exports = [
- 'SIGABRT',
- 'SIGALRM',
- 'SIGHUP',
- 'SIGINT',
- 'SIGTERM'
-];
-
-if (process.platform !== 'win32') {
- module.exports.push(
- 'SIGVTALRM',
- 'SIGXCPU',
- 'SIGXFSZ',
- 'SIGUSR2',
- 'SIGTRAP',
- 'SIGSYS',
- 'SIGQUIT',
- 'SIGIOT'
- // should detect profiler and enable/disable accordingly.
- // see #21
- // 'SIGPROF'
- );
-}
-
-if (process.platform === 'linux') {
- module.exports.push(
- 'SIGIO',
- 'SIGPOLL',
- 'SIGPWR',
- 'SIGSTKFLT',
- 'SIGUNUSED'
- );
-}
-}(signals$1));
-
-// Note: since nyc uses this module to output coverage, any lines
-// that are in the direct sync flow of nyc's outputCoverage are
-// ignored, since we can never get coverage for them.
-// grab a reference to node's real process object right away
-var process$1 = commonjsGlobal.process;
-// some kind of non-node environment, just no-op
-if (typeof process$1 !== 'object' || !process$1) {
- signalExit.exports = () => {};
-} else {
- var assert = require$$5__default;
- var signals = signals$1.exports;
- var isWin = /^win/i.test(process$1.platform);
-
- var EE = require$$0__default$5;
- /* istanbul ignore if */
- if (typeof EE !== 'function') {
- EE = EE.EventEmitter;
- }
-
- var emitter;
- if (process$1.__signal_exit_emitter__) {
- emitter = process$1.__signal_exit_emitter__;
- } else {
- emitter = process$1.__signal_exit_emitter__ = new EE();
- emitter.count = 0;
- emitter.emitted = {};
- }
-
- // Because this emitter is a global, we have to check to see if a
- // previous version of this library failed to enable infinite listeners.
- // I know what you're about to say. But literally everything about
- // signal-exit is a compromise with evil. Get used to it.
- if (!emitter.infinite) {
- emitter.setMaxListeners(Infinity);
- emitter.infinite = true;
- }
-
- signalExit.exports = function (cb, opts) {
- if (commonjsGlobal.process !== process$1) {
- return
- }
- assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler');
-
- if (loaded === false) {
- load();
- }
-
- var ev = 'exit';
- if (opts && opts.alwaysLast) {
- ev = 'afterexit';
- }
-
- var remove = function () {
- emitter.removeListener(ev, cb);
- if (emitter.listeners('exit').length === 0 &&
- emitter.listeners('afterexit').length === 0) {
- unload();
- }
- };
- emitter.on(ev, cb);
-
- return remove
- };
-
- var unload = function unload () {
- if (!loaded || commonjsGlobal.process !== process$1) {
- return
- }
- loaded = false;
-
- signals.forEach(function (sig) {
- try {
- process$1.removeListener(sig, sigListeners[sig]);
- } catch (er) {}
- });
- process$1.emit = originalProcessEmit;
- process$1.reallyExit = originalProcessReallyExit;
- emitter.count -= 1;
- };
- signalExit.exports.unload = unload;
-
- var emit = function emit (event, code, signal) {
- if (emitter.emitted[event]) {
- return
- }
- emitter.emitted[event] = true;
- emitter.emit(event, code, signal);
- };
-
- // { <signal>: <listener fn>, ... }
- var sigListeners = {};
- signals.forEach(function (sig) {
- sigListeners[sig] = function listener () {
- if (process$1 !== commonjsGlobal.process) {
- return
- }
- // If there are no other listeners, an exit is coming!
- // Simplest way: remove us and then re-send the signal.
- // We know that this will kill the process, so we can
- // safely emit now.
- var listeners = process$1.listeners(sig);
- if (listeners.length === emitter.count) {
- unload();
- emit('exit', null, sig);
- /* istanbul ignore next */
- emit('afterexit', null, sig);
- /* istanbul ignore next */
- if (isWin && sig === 'SIGHUP') {
- // "SIGHUP" throws an `ENOSYS` error on Windows,
- // so use a supported signal instead
- sig = 'SIGINT';
- }
- process$1.kill(process$1.pid, sig);
- }
- };
- });
-
- signalExit.exports.signals = function () {
- return signals
- };
-
- var loaded = false;
-
- var load = function load () {
- if (loaded || process$1 !== commonjsGlobal.process) {
- return
- }
- loaded = true;
-
- // This is the number of onSignalExit's that are in play.
- // It's important so that we can count the correct number of
- // listeners on signals, and don't wait for the other one to
- // handle it instead of us.
- emitter.count += 1;
-
- signals = signals.filter(function (sig) {
- try {
- process$1.on(sig, sigListeners[sig]);
- return true
- } catch (er) {
- return false
- }
- });
-
- process$1.emit = processEmit;
- process$1.reallyExit = processReallyExit;
- };
- signalExit.exports.load = load;
-
- var originalProcessReallyExit = process$1.reallyExit;
- var processReallyExit = function processReallyExit (code) {
- if (process$1 !== commonjsGlobal.process) {
- return
- }
- process$1.exitCode = code || 0;
- emit('exit', process$1.exitCode, null);
- /* istanbul ignore next */
- emit('afterexit', process$1.exitCode, null);
- /* istanbul ignore next */
- originalProcessReallyExit.call(process$1, process$1.exitCode);
- };
-
- var originalProcessEmit = process$1.emit;
- var processEmit = function processEmit (ev, arg) {
- if (ev === 'exit' && process$1 === commonjsGlobal.process) {
- if (arg !== undefined) {
- process$1.exitCode = arg;
- }
- var ret = originalProcessEmit.apply(this, arguments);
- emit('exit', process$1.exitCode, null);
- /* istanbul ignore next */
- emit('afterexit', process$1.exitCode, null);
- return ret
- } else {
- return originalProcessEmit.apply(this, arguments)
- }
- };
-}
-
-const os$3 = require$$0__default$1;
-const onExit = signalExit.exports;
-
-const DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5;
-
-// Monkey-patches `childProcess.kill()` to add `forceKillAfterTimeout` behavior
-const spawnedKill$1 = (kill, signal = 'SIGTERM', options = {}) => {
- const killResult = kill(signal);
- setKillTimeout(kill, signal, options, killResult);
- return killResult;
-};
-
-const setKillTimeout = (kill, signal, options, killResult) => {
- if (!shouldForceKill(signal, options, killResult)) {
- return;
- }
-
- const timeout = getForceKillAfterTimeout(options);
- const t = setTimeout(() => {
- kill('SIGKILL');
- }, timeout);
-
- // Guarded because there's no `.unref()` when `execa` is used in the renderer
- // process in Electron. This cannot be tested since we don't run tests in
- // Electron.
- // istanbul ignore else
- if (t.unref) {
- t.unref();
- }
-};
-
-const shouldForceKill = (signal, {forceKillAfterTimeout}, killResult) => {
- return isSigterm(signal) && forceKillAfterTimeout !== false && killResult;
-};
-
-const isSigterm = signal => {
- return signal === os$3.constants.signals.SIGTERM ||
- (typeof signal === 'string' && signal.toUpperCase() === 'SIGTERM');
-};
-
-const getForceKillAfterTimeout = ({forceKillAfterTimeout = true}) => {
- if (forceKillAfterTimeout === true) {
- return DEFAULT_FORCE_KILL_TIMEOUT;
- }
-
- if (!Number.isFinite(forceKillAfterTimeout) || forceKillAfterTimeout < 0) {
- throw new TypeError(`Expected the \`forceKillAfterTimeout\` option to be a non-negative integer, got \`${forceKillAfterTimeout}\` (${typeof forceKillAfterTimeout})`);
- }
-
- return forceKillAfterTimeout;
-};
-
-// `childProcess.cancel()`
-const spawnedCancel$1 = (spawned, context) => {
- const killResult = spawned.kill();
-
- if (killResult) {
- context.isCanceled = true;
- }
-};
-
-const timeoutKill = (spawned, signal, reject) => {
- spawned.kill(signal);
- reject(Object.assign(new Error('Timed out'), {timedOut: true, signal}));
-};
-
-// `timeout` option handling
-const setupTimeout$1 = (spawned, {timeout, killSignal = 'SIGTERM'}, spawnedPromise) => {
- if (timeout === 0 || timeout === undefined) {
- return spawnedPromise;
- }
-
- let timeoutId;
- const timeoutPromise = new Promise((resolve, reject) => {
- timeoutId = setTimeout(() => {
- timeoutKill(spawned, killSignal, reject);
- }, timeout);
- });
-
- const safeSpawnedPromise = spawnedPromise.finally(() => {
- clearTimeout(timeoutId);
- });
-
- return Promise.race([timeoutPromise, safeSpawnedPromise]);
-};
-
-const validateTimeout$1 = ({timeout}) => {
- if (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {
- throw new TypeError(`Expected the \`timeout\` option to be a non-negative integer, got \`${timeout}\` (${typeof timeout})`);
- }
-};
-
-// `cleanup` option handling
-const setExitHandler$1 = async (spawned, {cleanup, detached}, timedPromise) => {
- if (!cleanup || detached) {
- return timedPromise;
- }
-
- const removeExitHandler = onExit(() => {
- spawned.kill();
- });
-
- return timedPromise.finally(() => {
- removeExitHandler();
- });
-};
-
-var kill = {
- spawnedKill: spawnedKill$1,
- spawnedCancel: spawnedCancel$1,
- setupTimeout: setupTimeout$1,
- validateTimeout: validateTimeout$1,
- setExitHandler: setExitHandler$1
-};
-
-const isStream$1 = stream =>
- stream !== null &&
- typeof stream === 'object' &&
- typeof stream.pipe === 'function';
-
-isStream$1.writable = stream =>
- isStream$1(stream) &&
- stream.writable !== false &&
- typeof stream._write === 'function' &&
- typeof stream._writableState === 'object';
-
-isStream$1.readable = stream =>
- isStream$1(stream) &&
- stream.readable !== false &&
- typeof stream._read === 'function' &&
- typeof stream._readableState === 'object';
-
-isStream$1.duplex = stream =>
- isStream$1.writable(stream) &&
- isStream$1.readable(stream);
-
-isStream$1.transform = stream =>
- isStream$1.duplex(stream) &&
- typeof stream._transform === 'function';
-
-var isStream_1 = isStream$1;
-
-var getStream$2 = {exports: {}};
-
-const {PassThrough: PassThroughStream} = require$$0__default$4;
-
-var bufferStream$1 = options => {
- options = {...options};
-
- const {array} = options;
- let {encoding} = options;
- const isBuffer = encoding === 'buffer';
- let objectMode = false;
-
- if (array) {
- objectMode = !(encoding || isBuffer);
- } else {
- encoding = encoding || 'utf8';
- }
-
- if (isBuffer) {
- encoding = null;
- }
-
- const stream = new PassThroughStream({objectMode});
-
- if (encoding) {
- stream.setEncoding(encoding);
- }
-
- let length = 0;
- const chunks = [];
-
- stream.on('data', chunk => {
- chunks.push(chunk);
-
- if (objectMode) {
- length = chunks.length;
- } else {
- length += chunk.length;
- }
- });
-
- stream.getBufferedValue = () => {
- if (array) {
- return chunks;
- }
-
- return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
- };
-
- stream.getBufferedLength = () => length;
-
- return stream;
-};
-
-const {constants: BufferConstants} = require$$0__default$8;
-const stream$1 = require$$0__default$4;
-const {promisify} = require$$0__default$2;
-const bufferStream = bufferStream$1;
-
-const streamPipelinePromisified = promisify(stream$1.pipeline);
-
-class MaxBufferError extends Error {
- constructor() {
- super('maxBuffer exceeded');
- this.name = 'MaxBufferError';
- }
-}
-
-async function getStream$1(inputStream, options) {
- if (!inputStream) {
- throw new Error('Expected a stream');
- }
-
- options = {
- maxBuffer: Infinity,
- ...options
- };
-
- const {maxBuffer} = options;
- const stream = bufferStream(options);
-
- await new Promise((resolve, reject) => {
- const rejectPromise = error => {
- // Don't retrieve an oversized buffer.
- if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
- error.bufferedData = stream.getBufferedValue();
- }
-
- reject(error);
- };
-
- (async () => {
- try {
- await streamPipelinePromisified(inputStream, stream);
- resolve();
- } catch (error) {
- rejectPromise(error);
- }
- })();
-
- stream.on('data', () => {
- if (stream.getBufferedLength() > maxBuffer) {
- rejectPromise(new MaxBufferError());
- }
- });
- });
-
- return stream.getBufferedValue();
-}
-
-getStream$2.exports = getStream$1;
-getStream$2.exports.buffer = (stream, options) => getStream$1(stream, {...options, encoding: 'buffer'});
-getStream$2.exports.array = (stream, options) => getStream$1(stream, {...options, array: true});
-getStream$2.exports.MaxBufferError = MaxBufferError;
-
-const { PassThrough } = require$$0__default$4;
-
-var mergeStream$1 = function (/*streams...*/) {
- var sources = [];
- var output = new PassThrough({objectMode: true});
-
- output.setMaxListeners(0);
-
- output.add = add;
- output.isEmpty = isEmpty;
-
- output.on('unpipe', remove);
-
- Array.prototype.slice.call(arguments).forEach(add);
-
- return output
-
- function add (source) {
- if (Array.isArray(source)) {
- source.forEach(add);
- return this
- }
-
- sources.push(source);
- source.once('end', remove.bind(null, source));
- source.once('error', output.emit.bind(output, 'error'));
- source.pipe(output, {end: false});
- return this
- }
-
- function isEmpty () {
- return sources.length == 0;
- }
-
- function remove (source) {
- sources = sources.filter(function (it) { return it !== source });
- if (!sources.length && output.readable) { output.end(); }
- }
-};
-
-const isStream = isStream_1;
-const getStream = getStream$2.exports;
-const mergeStream = mergeStream$1;
-
-// `input` option
-const handleInput$1 = (spawned, input) => {
- // Checking for stdin is workaround for https://github.com/nodejs/node/issues/26852
- // @todo remove `|| spawned.stdin === undefined` once we drop support for Node.js <=12.2.0
- if (input === undefined || spawned.stdin === undefined) {
- return;
- }
-
- if (isStream(input)) {
- input.pipe(spawned.stdin);
- } else {
- spawned.stdin.end(input);
- }
-};
-
-// `all` interleaves `stdout` and `stderr`
-const makeAllStream$1 = (spawned, {all}) => {
- if (!all || (!spawned.stdout && !spawned.stderr)) {
- return;
- }
-
- const mixed = mergeStream();
-
- if (spawned.stdout) {
- mixed.add(spawned.stdout);
- }
-
- if (spawned.stderr) {
- mixed.add(spawned.stderr);
- }
-
- return mixed;
-};
-
-// On failure, `result.stdout|stderr|all` should contain the currently buffered stream
-const getBufferedData = async (stream, streamPromise) => {
- if (!stream) {
- return;
- }
-
- stream.destroy();
-
- try {
- return await streamPromise;
- } catch (error) {
- return error.bufferedData;
- }
-};
-
-const getStreamPromise = (stream, {encoding, buffer, maxBuffer}) => {
- if (!stream || !buffer) {
- return;
- }
-
- if (encoding) {
- return getStream(stream, {encoding, maxBuffer});
- }
-
- return getStream.buffer(stream, {maxBuffer});
-};
-
-// Retrieve result of child process: exit code, signal, error, streams (stdout/stderr/all)
-const getSpawnedResult$1 = async ({stdout, stderr, all}, {encoding, buffer, maxBuffer}, processDone) => {
- const stdoutPromise = getStreamPromise(stdout, {encoding, buffer, maxBuffer});
- const stderrPromise = getStreamPromise(stderr, {encoding, buffer, maxBuffer});
- const allPromise = getStreamPromise(all, {encoding, buffer, maxBuffer: maxBuffer * 2});
-
- try {
- return await Promise.all([processDone, stdoutPromise, stderrPromise, allPromise]);
- } catch (error) {
- return Promise.all([
- {error, signal: error.signal, timedOut: error.timedOut},
- getBufferedData(stdout, stdoutPromise),
- getBufferedData(stderr, stderrPromise),
- getBufferedData(all, allPromise)
- ]);
- }
-};
-
-const validateInputSync$1 = ({input}) => {
- if (isStream(input)) {
- throw new TypeError('The `input` option cannot be a stream in sync mode');
- }
-};
-
-var stream = {
- handleInput: handleInput$1,
- makeAllStream: makeAllStream$1,
- getSpawnedResult: getSpawnedResult$1,
- validateInputSync: validateInputSync$1
-};
-
-const nativePromisePrototype = (async () => {})().constructor.prototype;
-const descriptors = ['then', 'catch', 'finally'].map(property => [
- property,
- Reflect.getOwnPropertyDescriptor(nativePromisePrototype, property)
-]);
-
-// The return value is a mixin of `childProcess` and `Promise`
-const mergePromise$1 = (spawned, promise) => {
- for (const [property, descriptor] of descriptors) {
- // Starting the main `promise` is deferred to avoid consuming streams
- const value = typeof promise === 'function' ?
- (...args) => Reflect.apply(descriptor.value, promise(), args) :
- descriptor.value.bind(promise);
-
- Reflect.defineProperty(spawned, property, {...descriptor, value});
- }
-
- return spawned;
-};
-
-// Use promises instead of `child_process` events
-const getSpawnedPromise$1 = spawned => {
- return new Promise((resolve, reject) => {
- spawned.on('exit', (exitCode, signal) => {
- resolve({exitCode, signal});
- });
-
- spawned.on('error', error => {
- reject(error);
- });
-
- if (spawned.stdin) {
- spawned.stdin.on('error', error => {
- reject(error);
- });
- }
- });
-};
-
-var promise = {
- mergePromise: mergePromise$1,
- getSpawnedPromise: getSpawnedPromise$1
-};
-
-const normalizeArgs = (file, args = []) => {
- if (!Array.isArray(args)) {
- return [file];
- }
-
- return [file, ...args];
-};
-
-const NO_ESCAPE_REGEXP = /^[\w.-]+$/;
-const DOUBLE_QUOTES_REGEXP = /"/g;
-
-const escapeArg = arg => {
- if (typeof arg !== 'string' || NO_ESCAPE_REGEXP.test(arg)) {
- return arg;
- }
-
- return `"${arg.replace(DOUBLE_QUOTES_REGEXP, '\\"')}"`;
-};
-
-const joinCommand$1 = (file, args) => {
- return normalizeArgs(file, args).join(' ');
-};
-
-const getEscapedCommand$1 = (file, args) => {
- return normalizeArgs(file, args).map(arg => escapeArg(arg)).join(' ');
-};
-
-const SPACES_REGEXP = / +/g;
-
-// Handle `execa.command()`
-const parseCommand$1 = command => {
- const tokens = [];
- for (const token of command.trim().split(SPACES_REGEXP)) {
- // Allow spaces to be escaped by a backslash if not meant as a delimiter
- const previousToken = tokens[tokens.length - 1];
- if (previousToken && previousToken.endsWith('\\')) {
- // Merge previous token with current one
- tokens[tokens.length - 1] = `${previousToken.slice(0, -1)} ${token}`;
- } else {
- tokens.push(token);
- }
- }
-
- return tokens;
-};
-
-var command = {
- joinCommand: joinCommand$1,
- getEscapedCommand: getEscapedCommand$1,
- parseCommand: parseCommand$1
-};
-
-const path$5 = path__default;
-const childProcess$2 = require$$1__default$4;
-const crossSpawn = crossSpawn$1.exports;
-const stripFinalNewline = stripFinalNewline$1;
-const npmRunPath = npmRunPath$1.exports;
-const onetime = onetime$2.exports;
-const makeError = error;
-const normalizeStdio = stdio.exports;
-const {spawnedKill, spawnedCancel, setupTimeout, validateTimeout, setExitHandler} = kill;
-const {handleInput, getSpawnedResult, makeAllStream, validateInputSync} = stream;
-const {mergePromise, getSpawnedPromise} = promise;
-const {joinCommand, parseCommand, getEscapedCommand} = command;
-
-const DEFAULT_MAX_BUFFER = 1000 * 1000 * 100;
-
-const getEnv = ({env: envOption, extendEnv, preferLocal, localDir, execPath}) => {
- const env = extendEnv ? {...process.env, ...envOption} : envOption;
-
- if (preferLocal) {
- return npmRunPath.env({env, cwd: localDir, execPath});
- }
-
- return env;
-};
-
-const handleArguments = (file, args, options = {}) => {
- const parsed = crossSpawn._parse(file, args, options);
- file = parsed.command;
- args = parsed.args;
- options = parsed.options;
-
- options = {
- maxBuffer: DEFAULT_MAX_BUFFER,
- buffer: true,
- stripFinalNewline: true,
- extendEnv: true,
- preferLocal: false,
- localDir: options.cwd || process.cwd(),
- execPath: process.execPath,
- encoding: 'utf8',
- reject: true,
- cleanup: true,
- all: false,
- windowsHide: true,
- ...options
- };
-
- options.env = getEnv(options);
-
- options.stdio = normalizeStdio(options);
-
- if (process.platform === 'win32' && path$5.basename(file, '.exe') === 'cmd') {
- // #116
- args.unshift('/q');
- }
-
- return {file, args, options, parsed};
-};
-
-const handleOutput = (options, value, error) => {
- if (typeof value !== 'string' && !Buffer.isBuffer(value)) {
- // When `execa.sync()` errors, we normalize it to '' to mimic `execa()`
- return error === undefined ? undefined : '';
- }
-
- if (options.stripFinalNewline) {
- return stripFinalNewline(value);
- }
-
- return value;
-};
-
-const execa = (file, args, options) => {
- const parsed = handleArguments(file, args, options);
- const command = joinCommand(file, args);
- const escapedCommand = getEscapedCommand(file, args);
-
- validateTimeout(parsed.options);
-
- let spawned;
- try {
- spawned = childProcess$2.spawn(parsed.file, parsed.args, parsed.options);
- } catch (error) {
- // Ensure the returned error is always both a promise and a child process
- const dummySpawned = new childProcess$2.ChildProcess();
- const errorPromise = Promise.reject(makeError({
- error,
- stdout: '',
- stderr: '',
- all: '',
- command,
- escapedCommand,
- parsed,
- timedOut: false,
- isCanceled: false,
- killed: false
- }));
- return mergePromise(dummySpawned, errorPromise);
- }
-
- const spawnedPromise = getSpawnedPromise(spawned);
- const timedPromise = setupTimeout(spawned, parsed.options, spawnedPromise);
- const processDone = setExitHandler(spawned, parsed.options, timedPromise);
-
- const context = {isCanceled: false};
-
- spawned.kill = spawnedKill.bind(null, spawned.kill.bind(spawned));
- spawned.cancel = spawnedCancel.bind(null, spawned, context);
-
- const handlePromise = async () => {
- const [{error, exitCode, signal, timedOut}, stdoutResult, stderrResult, allResult] = await getSpawnedResult(spawned, parsed.options, processDone);
- const stdout = handleOutput(parsed.options, stdoutResult);
- const stderr = handleOutput(parsed.options, stderrResult);
- const all = handleOutput(parsed.options, allResult);
-
- if (error || exitCode !== 0 || signal !== null) {
- const returnedError = makeError({
- error,
- exitCode,
- signal,
- stdout,
- stderr,
- all,
- command,
- escapedCommand,
- parsed,
- timedOut,
- isCanceled: context.isCanceled,
- killed: spawned.killed
- });
-
- if (!parsed.options.reject) {
- return returnedError;
- }
-
- throw returnedError;
- }
-
- return {
- command,
- escapedCommand,
- exitCode: 0,
- stdout,
- stderr,
- all,
- failed: false,
- timedOut: false,
- isCanceled: false,
- killed: false
- };
- };
-
- const handlePromiseOnce = onetime(handlePromise);
-
- handleInput(spawned, parsed.options.input);
-
- spawned.all = makeAllStream(spawned, parsed.options);
-
- return mergePromise(spawned, handlePromiseOnce);
-};
-
-execa$2.exports = execa;
-
-execa$2.exports.sync = (file, args, options) => {
- const parsed = handleArguments(file, args, options);
- const command = joinCommand(file, args);
- const escapedCommand = getEscapedCommand(file, args);
-
- validateInputSync(parsed.options);
-
- let result;
- try {
- result = childProcess$2.spawnSync(parsed.file, parsed.args, parsed.options);
- } catch (error) {
- throw makeError({
- error,
- stdout: '',
- stderr: '',
- all: '',
- command,
- escapedCommand,
- parsed,
- timedOut: false,
- isCanceled: false,
- killed: false
- });
- }
-
- const stdout = handleOutput(parsed.options, result.stdout, result.error);
- const stderr = handleOutput(parsed.options, result.stderr, result.error);
-
- if (result.error || result.status !== 0 || result.signal !== null) {
- const error = makeError({
- stdout,
- stderr,
- error: result.error,
- signal: result.signal,
- exitCode: result.status,
- command,
- escapedCommand,
- parsed,
- timedOut: result.error && result.error.code === 'ETIMEDOUT',
- isCanceled: false,
- killed: result.signal !== null
- });
-
- if (!parsed.options.reject) {
- return error;
- }
-
- throw error;
- }
-
- return {
- command,
- escapedCommand,
- exitCode: 0,
- stdout,
- stderr,
- failed: false,
- timedOut: false,
- isCanceled: false,
- killed: false
- };
-};
-
-execa$2.exports.command = (command, options) => {
- const [file, ...args] = parseCommand(command);
- return execa(file, args, options);
-};
-
-execa$2.exports.commandSync = (command, options) => {
- const [file, ...args] = parseCommand(command);
- return execa.sync(file, args, options);
-};
-
-execa$2.exports.node = (scriptPath, args, options = {}) => {
- if (args && !Array.isArray(args) && typeof args === 'object') {
- options = args;
- args = [];
- }
-
- const stdio = normalizeStdio.node(options);
- const defaultExecArgv = process.execArgv.filter(arg => !arg.startsWith('--inspect'));
-
- const {
- nodePath = process.execPath,
- nodeOptions = defaultExecArgv
- } = options;
-
- return execa(
- nodePath,
- [
- ...nodeOptions,
- scriptPath,
- ...(Array.isArray(args) ? args : [])
- ],
- {
- ...options,
- stdin: undefined,
- stdout: undefined,
- stderr: undefined,
- stdio,
- shell: false
- }
- );
-};
-
-var execa$1 = execa$2.exports;
-
-/**
- * The following is modified based on source found in
- * https://github.com/facebook/create-react-app
- *
- * MIT Licensed
- * Copyright (c) 2015-present, Facebook, Inc.
- * https://github.com/facebook/create-react-app/blob/master/LICENSE
- *
- */
-// https://github.com/sindresorhus/open#app
-const OSX_CHROME = 'google chrome';
-/**
- * Reads the BROWSER environment variable and decides what to do with it.
- * Returns true if it opened a browser or ran a node.js script, otherwise false.
- */
-function openBrowser(url, opt, logger) {
- // The browser executable to open.
- // See https://github.com/sindresorhus/open#app for documentation.
- const browser = typeof opt === 'string' ? opt : process.env.BROWSER || '';
- if (browser.toLowerCase().endsWith('.js')) {
- return executeNodeScript(browser, url, logger);
- }
- else if (browser.toLowerCase() !== 'none') {
- return startBrowserProcess(browser, url);
- }
- return false;
-}
-function executeNodeScript(scriptPath, url, logger) {
- const extraArgs = process.argv.slice(2);
- const child = execa$1('node', [scriptPath, ...extraArgs, url], {
- stdio: 'inherit'
- });
- child.on('close', (code) => {
- if (code !== 0) {
- logger.error(source.red(`\nThe script specified as BROWSER environment variable failed.\n\n${source.cyan(scriptPath)} exited with code ${code}.`), { error: null });
- }
- });
- return true;
-}
-function startBrowserProcess(browser, url) {
- // If we're on OS X, the user hasn't specifically
- // requested a different browser, we can try opening
- // Chrome with AppleScript. This lets us reuse an
- // existing tab when possible instead of creating a new one.
- const shouldTryOpenChromeWithAppleScript = process.platform === 'darwin' && (browser === '' || browser === OSX_CHROME);
- if (shouldTryOpenChromeWithAppleScript) {
- try {
- // Try our best to reuse existing tab
- // on OS X Google Chrome with AppleScript
- require$$1$4.execSync('ps cax | grep "Google Chrome"');
- require$$1$4.execSync('osascript openChrome.applescript "' + encodeURI(url) + '"', {
- cwd: path__default.dirname(require.resolve('vite/bin/openChrome.applescript')),
- stdio: 'ignore'
- });
- return true;
- }
- catch (err) {
- // Ignore errors
- }
- }
- // Another special case: on OS X, check if BROWSER has been set to "open".
- // In this case, instead of passing the string `open` to `open` function (which won't work),
- // just ignore it (thus ensuring the intended behavior, i.e. opening the system browser):
- // https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768
- if (process.platform === 'darwin' && browser === 'open') {
- browser = undefined;
- }
- // Fallback to open
- // (It will always open new tab)
- try {
- const options = browser ? { app: { name: browser } } : {};
- open_1(url, options).catch(() => { }); // Prevent `unhandledRejection` error.
- return true;
- }
- catch (err) {
- return false;
- }
-}
-
-var chalk$1 = {exports: {}};
-
-var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
-
-var escapeStringRegexp = function (str) {
- if (typeof str !== 'string') {
- throw new TypeError('Expected a string');
- }
-
- return str.replace(matchOperatorsRe, '\\$&');
-};
-
-var ansiStyles = {exports: {}};
-
-var conversions$2 = {exports: {}};
-
-var colorName = {
- "aliceblue": [240, 248, 255],
- "antiquewhite": [250, 235, 215],
- "aqua": [0, 255, 255],
- "aquamarine": [127, 255, 212],
- "azure": [240, 255, 255],
- "beige": [245, 245, 220],
- "bisque": [255, 228, 196],
- "black": [0, 0, 0],
- "blanchedalmond": [255, 235, 205],
- "blue": [0, 0, 255],
- "blueviolet": [138, 43, 226],
- "brown": [165, 42, 42],
- "burlywood": [222, 184, 135],
- "cadetblue": [95, 158, 160],
- "chartreuse": [127, 255, 0],
- "chocolate": [210, 105, 30],
- "coral": [255, 127, 80],
- "cornflowerblue": [100, 149, 237],
- "cornsilk": [255, 248, 220],
- "crimson": [220, 20, 60],
- "cyan": [0, 255, 255],
- "darkblue": [0, 0, 139],
- "darkcyan": [0, 139, 139],
- "darkgoldenrod": [184, 134, 11],
- "darkgray": [169, 169, 169],
- "darkgreen": [0, 100, 0],
- "darkgrey": [169, 169, 169],
- "darkkhaki": [189, 183, 107],
- "darkmagenta": [139, 0, 139],
- "darkolivegreen": [85, 107, 47],
- "darkorange": [255, 140, 0],
- "darkorchid": [153, 50, 204],
- "darkred": [139, 0, 0],
- "darksalmon": [233, 150, 122],
- "darkseagreen": [143, 188, 143],
- "darkslateblue": [72, 61, 139],
- "darkslategray": [47, 79, 79],
- "darkslategrey": [47, 79, 79],
- "darkturquoise": [0, 206, 209],
- "darkviolet": [148, 0, 211],
- "deeppink": [255, 20, 147],
- "deepskyblue": [0, 191, 255],
- "dimgray": [105, 105, 105],
- "dimgrey": [105, 105, 105],
- "dodgerblue": [30, 144, 255],
- "firebrick": [178, 34, 34],
- "floralwhite": [255, 250, 240],
- "forestgreen": [34, 139, 34],
- "fuchsia": [255, 0, 255],
- "gainsboro": [220, 220, 220],
- "ghostwhite": [248, 248, 255],
- "gold": [255, 215, 0],
- "goldenrod": [218, 165, 32],
- "gray": [128, 128, 128],
- "green": [0, 128, 0],
- "greenyellow": [173, 255, 47],
- "grey": [128, 128, 128],
- "honeydew": [240, 255, 240],
- "hotpink": [255, 105, 180],
- "indianred": [205, 92, 92],
- "indigo": [75, 0, 130],
- "ivory": [255, 255, 240],
- "khaki": [240, 230, 140],
- "lavender": [230, 230, 250],
- "lavenderblush": [255, 240, 245],
- "lawngreen": [124, 252, 0],
- "lemonchiffon": [255, 250, 205],
- "lightblue": [173, 216, 230],
- "lightcoral": [240, 128, 128],
- "lightcyan": [224, 255, 255],
- "lightgoldenrodyellow": [250, 250, 210],
- "lightgray": [211, 211, 211],
- "lightgreen": [144, 238, 144],
- "lightgrey": [211, 211, 211],
- "lightpink": [255, 182, 193],
- "lightsalmon": [255, 160, 122],
- "lightseagreen": [32, 178, 170],
- "lightskyblue": [135, 206, 250],
- "lightslategray": [119, 136, 153],
- "lightslategrey": [119, 136, 153],
- "lightsteelblue": [176, 196, 222],
- "lightyellow": [255, 255, 224],
- "lime": [0, 255, 0],
- "limegreen": [50, 205, 50],
- "linen": [250, 240, 230],
- "magenta": [255, 0, 255],
- "maroon": [128, 0, 0],
- "mediumaquamarine": [102, 205, 170],
- "mediumblue": [0, 0, 205],
- "mediumorchid": [186, 85, 211],
- "mediumpurple": [147, 112, 219],
- "mediumseagreen": [60, 179, 113],
- "mediumslateblue": [123, 104, 238],
- "mediumspringgreen": [0, 250, 154],
- "mediumturquoise": [72, 209, 204],
- "mediumvioletred": [199, 21, 133],
- "midnightblue": [25, 25, 112],
- "mintcream": [245, 255, 250],
- "mistyrose": [255, 228, 225],
- "moccasin": [255, 228, 181],
- "navajowhite": [255, 222, 173],
- "navy": [0, 0, 128],
- "oldlace": [253, 245, 230],
- "olive": [128, 128, 0],
- "olivedrab": [107, 142, 35],
- "orange": [255, 165, 0],
- "orangered": [255, 69, 0],
- "orchid": [218, 112, 214],
- "palegoldenrod": [238, 232, 170],
- "palegreen": [152, 251, 152],
- "paleturquoise": [175, 238, 238],
- "palevioletred": [219, 112, 147],
- "papayawhip": [255, 239, 213],
- "peachpuff": [255, 218, 185],
- "peru": [205, 133, 63],
- "pink": [255, 192, 203],
- "plum": [221, 160, 221],
- "powderblue": [176, 224, 230],
- "purple": [128, 0, 128],
- "rebeccapurple": [102, 51, 153],
- "red": [255, 0, 0],
- "rosybrown": [188, 143, 143],
- "royalblue": [65, 105, 225],
- "saddlebrown": [139, 69, 19],
- "salmon": [250, 128, 114],
- "sandybrown": [244, 164, 96],
- "seagreen": [46, 139, 87],
- "seashell": [255, 245, 238],
- "sienna": [160, 82, 45],
- "silver": [192, 192, 192],
- "skyblue": [135, 206, 235],
- "slateblue": [106, 90, 205],
- "slategray": [112, 128, 144],
- "slategrey": [112, 128, 144],
- "snow": [255, 250, 250],
- "springgreen": [0, 255, 127],
- "steelblue": [70, 130, 180],
- "tan": [210, 180, 140],
- "teal": [0, 128, 128],
- "thistle": [216, 191, 216],
- "tomato": [255, 99, 71],
- "turquoise": [64, 224, 208],
- "violet": [238, 130, 238],
- "wheat": [245, 222, 179],
- "white": [255, 255, 255],
- "whitesmoke": [245, 245, 245],
- "yellow": [255, 255, 0],
- "yellowgreen": [154, 205, 50]
-};
-
-/* MIT license */
-
-var cssKeywords = colorName;
-
-// NOTE: conversions should only return primitive values (i.e. arrays, or
-// values that give correct `typeof` results).
-// do not use box values types (i.e. Number(), String(), etc.)
-
-var reverseKeywords = {};
-for (var key in cssKeywords) {
- if (cssKeywords.hasOwnProperty(key)) {
- reverseKeywords[cssKeywords[key]] = key;
- }
-}
-
-var convert$1 = conversions$2.exports = {
- rgb: {channels: 3, labels: 'rgb'},
- hsl: {channels: 3, labels: 'hsl'},
- hsv: {channels: 3, labels: 'hsv'},
- hwb: {channels: 3, labels: 'hwb'},
- cmyk: {channels: 4, labels: 'cmyk'},
- xyz: {channels: 3, labels: 'xyz'},
- lab: {channels: 3, labels: 'lab'},
- lch: {channels: 3, labels: 'lch'},
- hex: {channels: 1, labels: ['hex']},
- keyword: {channels: 1, labels: ['keyword']},
- ansi16: {channels: 1, labels: ['ansi16']},
- ansi256: {channels: 1, labels: ['ansi256']},
- hcg: {channels: 3, labels: ['h', 'c', 'g']},
- apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
- gray: {channels: 1, labels: ['gray']}
-};
-
-// hide .channels and .labels properties
-for (var model in convert$1) {
- if (convert$1.hasOwnProperty(model)) {
- if (!('channels' in convert$1[model])) {
- throw new Error('missing channels property: ' + model);
- }
-
- if (!('labels' in convert$1[model])) {
- throw new Error('missing channel labels property: ' + model);
- }
-
- if (convert$1[model].labels.length !== convert$1[model].channels) {
- throw new Error('channel and label counts mismatch: ' + model);
- }
-
- var channels = convert$1[model].channels;
- var labels = convert$1[model].labels;
- delete convert$1[model].channels;
- delete convert$1[model].labels;
- Object.defineProperty(convert$1[model], 'channels', {value: channels});
- Object.defineProperty(convert$1[model], 'labels', {value: labels});
- }
-}
-
-convert$1.rgb.hsl = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var min = Math.min(r, g, b);
- var max = Math.max(r, g, b);
- var delta = max - min;
- var h;
- var s;
- var l;
-
- if (max === min) {
- h = 0;
- } else if (r === max) {
- h = (g - b) / delta;
- } else if (g === max) {
- h = 2 + (b - r) / delta;
- } else if (b === max) {
- h = 4 + (r - g) / delta;
- }
-
- h = Math.min(h * 60, 360);
-
- if (h < 0) {
- h += 360;
- }
-
- l = (min + max) / 2;
-
- if (max === min) {
- s = 0;
- } else if (l <= 0.5) {
- s = delta / (max + min);
- } else {
- s = delta / (2 - max - min);
- }
-
- return [h, s * 100, l * 100];
-};
-
-convert$1.rgb.hsv = function (rgb) {
- var rdif;
- var gdif;
- var bdif;
- var h;
- var s;
-
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var v = Math.max(r, g, b);
- var diff = v - Math.min(r, g, b);
- var diffc = function (c) {
- return (v - c) / 6 / diff + 1 / 2;
- };
-
- if (diff === 0) {
- h = s = 0;
- } else {
- s = diff / v;
- rdif = diffc(r);
- gdif = diffc(g);
- bdif = diffc(b);
-
- if (r === v) {
- h = bdif - gdif;
- } else if (g === v) {
- h = (1 / 3) + rdif - bdif;
- } else if (b === v) {
- h = (2 / 3) + gdif - rdif;
- }
- if (h < 0) {
- h += 1;
- } else if (h > 1) {
- h -= 1;
- }
- }
-
- return [
- h * 360,
- s * 100,
- v * 100
- ];
-};
-
-convert$1.rgb.hwb = function (rgb) {
- var r = rgb[0];
- var g = rgb[1];
- var b = rgb[2];
- var h = convert$1.rgb.hsl(rgb)[0];
- var w = 1 / 255 * Math.min(r, Math.min(g, b));
-
- b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
-
- return [h, w * 100, b * 100];
-};
-
-convert$1.rgb.cmyk = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var c;
- var m;
- var y;
- var k;
-
- k = Math.min(1 - r, 1 - g, 1 - b);
- c = (1 - r - k) / (1 - k) || 0;
- m = (1 - g - k) / (1 - k) || 0;
- y = (1 - b - k) / (1 - k) || 0;
-
- return [c * 100, m * 100, y * 100, k * 100];
-};
-
-/**
- * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
- * */
-function comparativeDistance(x, y) {
- return (
- Math.pow(x[0] - y[0], 2) +
- Math.pow(x[1] - y[1], 2) +
- Math.pow(x[2] - y[2], 2)
- );
-}
-
-convert$1.rgb.keyword = function (rgb) {
- var reversed = reverseKeywords[rgb];
- if (reversed) {
- return reversed;
- }
-
- var currentClosestDistance = Infinity;
- var currentClosestKeyword;
-
- for (var keyword in cssKeywords) {
- if (cssKeywords.hasOwnProperty(keyword)) {
- var value = cssKeywords[keyword];
-
- // Compute comparative distance
- var distance = comparativeDistance(rgb, value);
-
- // Check if its less, if so set as closest
- if (distance < currentClosestDistance) {
- currentClosestDistance = distance;
- currentClosestKeyword = keyword;
- }
- }
- }
-
- return currentClosestKeyword;
-};
-
-convert$1.keyword.rgb = function (keyword) {
- return cssKeywords[keyword];
-};
-
-convert$1.rgb.xyz = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
-
- // assume sRGB
- r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
- g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
- b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
-
- var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
- var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
- var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
-
- return [x * 100, y * 100, z * 100];
-};
-
-convert$1.rgb.lab = function (rgb) {
- var xyz = convert$1.rgb.xyz(rgb);
- var x = xyz[0];
- var y = xyz[1];
- var z = xyz[2];
- var l;
- var a;
- var b;
-
- x /= 95.047;
- y /= 100;
- z /= 108.883;
-
- x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
-
- l = (116 * y) - 16;
- a = 500 * (x - y);
- b = 200 * (y - z);
-
- return [l, a, b];
-};
-
-convert$1.hsl.rgb = function (hsl) {
- var h = hsl[0] / 360;
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var t1;
- var t2;
- var t3;
- var rgb;
- var val;
-
- if (s === 0) {
- val = l * 255;
- return [val, val, val];
- }
-
- if (l < 0.5) {
- t2 = l * (1 + s);
- } else {
- t2 = l + s - l * s;
- }
-
- t1 = 2 * l - t2;
-
- rgb = [0, 0, 0];
- for (var i = 0; i < 3; i++) {
- t3 = h + 1 / 3 * -(i - 1);
- if (t3 < 0) {
- t3++;
- }
- if (t3 > 1) {
- t3--;
- }
-
- if (6 * t3 < 1) {
- val = t1 + (t2 - t1) * 6 * t3;
- } else if (2 * t3 < 1) {
- val = t2;
- } else if (3 * t3 < 2) {
- val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
- } else {
- val = t1;
- }
-
- rgb[i] = val * 255;
- }
-
- return rgb;
-};
-
-convert$1.hsl.hsv = function (hsl) {
- var h = hsl[0];
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var smin = s;
- var lmin = Math.max(l, 0.01);
- var sv;
- var v;
-
- l *= 2;
- s *= (l <= 1) ? l : 2 - l;
- smin *= lmin <= 1 ? lmin : 2 - lmin;
- v = (l + s) / 2;
- sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
-
- return [h, sv * 100, v * 100];
-};
-
-convert$1.hsv.rgb = function (hsv) {
- var h = hsv[0] / 60;
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
- var hi = Math.floor(h) % 6;
-
- var f = h - Math.floor(h);
- var p = 255 * v * (1 - s);
- var q = 255 * v * (1 - (s * f));
- var t = 255 * v * (1 - (s * (1 - f)));
- v *= 255;
-
- switch (hi) {
- case 0:
- return [v, t, p];
- case 1:
- return [q, v, p];
- case 2:
- return [p, v, t];
- case 3:
- return [p, q, v];
- case 4:
- return [t, p, v];
- case 5:
- return [v, p, q];
- }
-};
-
-convert$1.hsv.hsl = function (hsv) {
- var h = hsv[0];
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
- var vmin = Math.max(v, 0.01);
- var lmin;
- var sl;
- var l;
-
- l = (2 - s) * v;
- lmin = (2 - s) * vmin;
- sl = s * vmin;
- sl /= (lmin <= 1) ? lmin : 2 - lmin;
- sl = sl || 0;
- l /= 2;
-
- return [h, sl * 100, l * 100];
-};
-
-// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
-convert$1.hwb.rgb = function (hwb) {
- var h = hwb[0] / 360;
- var wh = hwb[1] / 100;
- var bl = hwb[2] / 100;
- var ratio = wh + bl;
- var i;
- var v;
- var f;
- var n;
-
- // wh + bl cant be > 1
- if (ratio > 1) {
- wh /= ratio;
- bl /= ratio;
- }
-
- i = Math.floor(6 * h);
- v = 1 - bl;
- f = 6 * h - i;
-
- if ((i & 0x01) !== 0) {
- f = 1 - f;
- }
-
- n = wh + f * (v - wh); // linear interpolation
-
- var r;
- var g;
- var b;
- switch (i) {
- default:
- case 6:
- case 0: r = v; g = n; b = wh; break;
- case 1: r = n; g = v; b = wh; break;
- case 2: r = wh; g = v; b = n; break;
- case 3: r = wh; g = n; b = v; break;
- case 4: r = n; g = wh; b = v; break;
- case 5: r = v; g = wh; b = n; break;
- }
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert$1.cmyk.rgb = function (cmyk) {
- var c = cmyk[0] / 100;
- var m = cmyk[1] / 100;
- var y = cmyk[2] / 100;
- var k = cmyk[3] / 100;
- var r;
- var g;
- var b;
-
- r = 1 - Math.min(1, c * (1 - k) + k);
- g = 1 - Math.min(1, m * (1 - k) + k);
- b = 1 - Math.min(1, y * (1 - k) + k);
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert$1.xyz.rgb = function (xyz) {
- var x = xyz[0] / 100;
- var y = xyz[1] / 100;
- var z = xyz[2] / 100;
- var r;
- var g;
- var b;
-
- r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
- g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
- b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
-
- // assume sRGB
- r = r > 0.0031308
- ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
- : r * 12.92;
-
- g = g > 0.0031308
- ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
- : g * 12.92;
-
- b = b > 0.0031308
- ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
- : b * 12.92;
-
- r = Math.min(Math.max(0, r), 1);
- g = Math.min(Math.max(0, g), 1);
- b = Math.min(Math.max(0, b), 1);
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert$1.xyz.lab = function (xyz) {
- var x = xyz[0];
- var y = xyz[1];
- var z = xyz[2];
- var l;
- var a;
- var b;
-
- x /= 95.047;
- y /= 100;
- z /= 108.883;
-
- x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
-
- l = (116 * y) - 16;
- a = 500 * (x - y);
- b = 200 * (y - z);
-
- return [l, a, b];
-};
-
-convert$1.lab.xyz = function (lab) {
- var l = lab[0];
- var a = lab[1];
- var b = lab[2];
- var x;
- var y;
- var z;
-
- y = (l + 16) / 116;
- x = a / 500 + y;
- z = y - b / 200;
-
- var y2 = Math.pow(y, 3);
- var x2 = Math.pow(x, 3);
- var z2 = Math.pow(z, 3);
- y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
- x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
- z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
-
- x *= 95.047;
- y *= 100;
- z *= 108.883;
-
- return [x, y, z];
-};
-
-convert$1.lab.lch = function (lab) {
- var l = lab[0];
- var a = lab[1];
- var b = lab[2];
- var hr;
- var h;
- var c;
-
- hr = Math.atan2(b, a);
- h = hr * 360 / 2 / Math.PI;
-
- if (h < 0) {
- h += 360;
- }
-
- c = Math.sqrt(a * a + b * b);
-
- return [l, c, h];
-};
-
-convert$1.lch.lab = function (lch) {
- var l = lch[0];
- var c = lch[1];
- var h = lch[2];
- var a;
- var b;
- var hr;
-
- hr = h / 360 * 2 * Math.PI;
- a = c * Math.cos(hr);
- b = c * Math.sin(hr);
-
- return [l, a, b];
-};
-
-convert$1.rgb.ansi16 = function (args) {
- var r = args[0];
- var g = args[1];
- var b = args[2];
- var value = 1 in arguments ? arguments[1] : convert$1.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
-
- value = Math.round(value / 50);
-
- if (value === 0) {
- return 30;
- }
-
- var ansi = 30
- + ((Math.round(b / 255) << 2)
- | (Math.round(g / 255) << 1)
- | Math.round(r / 255));
-
- if (value === 2) {
- ansi += 60;
- }
-
- return ansi;
-};
-
-convert$1.hsv.ansi16 = function (args) {
- // optimization here; we already know the value and don't need to get
- // it converted for us.
- return convert$1.rgb.ansi16(convert$1.hsv.rgb(args), args[2]);
-};
-
-convert$1.rgb.ansi256 = function (args) {
- var r = args[0];
- var g = args[1];
- var b = args[2];
-
- // we use the extended greyscale palette here, with the exception of
- // black and white. normal palette only has 4 greyscale shades.
- if (r === g && g === b) {
- if (r < 8) {
- return 16;
- }
-
- if (r > 248) {
- return 231;
- }
-
- return Math.round(((r - 8) / 247) * 24) + 232;
- }
-
- var ansi = 16
- + (36 * Math.round(r / 255 * 5))
- + (6 * Math.round(g / 255 * 5))
- + Math.round(b / 255 * 5);
-
- return ansi;
-};
-
-convert$1.ansi16.rgb = function (args) {
- var color = args % 10;
-
- // handle greyscale
- if (color === 0 || color === 7) {
- if (args > 50) {
- color += 3.5;
- }
-
- color = color / 10.5 * 255;
-
- return [color, color, color];
- }
-
- var mult = (~~(args > 50) + 1) * 0.5;
- var r = ((color & 1) * mult) * 255;
- var g = (((color >> 1) & 1) * mult) * 255;
- var b = (((color >> 2) & 1) * mult) * 255;
-
- return [r, g, b];
-};
-
-convert$1.ansi256.rgb = function (args) {
- // handle greyscale
- if (args >= 232) {
- var c = (args - 232) * 10 + 8;
- return [c, c, c];
- }
-
- args -= 16;
-
- var rem;
- var r = Math.floor(args / 36) / 5 * 255;
- var g = Math.floor((rem = args % 36) / 6) / 5 * 255;
- var b = (rem % 6) / 5 * 255;
-
- return [r, g, b];
-};
-
-convert$1.rgb.hex = function (args) {
- var integer = ((Math.round(args[0]) & 0xFF) << 16)
- + ((Math.round(args[1]) & 0xFF) << 8)
- + (Math.round(args[2]) & 0xFF);
-
- var string = integer.toString(16).toUpperCase();
- return '000000'.substring(string.length) + string;
-};
-
-convert$1.hex.rgb = function (args) {
- var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
- if (!match) {
- return [0, 0, 0];
- }
-
- var colorString = match[0];
-
- if (match[0].length === 3) {
- colorString = colorString.split('').map(function (char) {
- return char + char;
- }).join('');
- }
-
- var integer = parseInt(colorString, 16);
- var r = (integer >> 16) & 0xFF;
- var g = (integer >> 8) & 0xFF;
- var b = integer & 0xFF;
-
- return [r, g, b];
-};
-
-convert$1.rgb.hcg = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var max = Math.max(Math.max(r, g), b);
- var min = Math.min(Math.min(r, g), b);
- var chroma = (max - min);
- var grayscale;
- var hue;
-
- if (chroma < 1) {
- grayscale = min / (1 - chroma);
- } else {
- grayscale = 0;
- }
-
- if (chroma <= 0) {
- hue = 0;
- } else
- if (max === r) {
- hue = ((g - b) / chroma) % 6;
- } else
- if (max === g) {
- hue = 2 + (b - r) / chroma;
- } else {
- hue = 4 + (r - g) / chroma + 4;
- }
-
- hue /= 6;
- hue %= 1;
-
- return [hue * 360, chroma * 100, grayscale * 100];
-};
-
-convert$1.hsl.hcg = function (hsl) {
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var c = 1;
- var f = 0;
-
- if (l < 0.5) {
- c = 2.0 * s * l;
- } else {
- c = 2.0 * s * (1.0 - l);
- }
-
- if (c < 1.0) {
- f = (l - 0.5 * c) / (1.0 - c);
- }
-
- return [hsl[0], c * 100, f * 100];
-};
-
-convert$1.hsv.hcg = function (hsv) {
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
-
- var c = s * v;
- var f = 0;
-
- if (c < 1.0) {
- f = (v - c) / (1 - c);
- }
-
- return [hsv[0], c * 100, f * 100];
-};
-
-convert$1.hcg.rgb = function (hcg) {
- var h = hcg[0] / 360;
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
-
- if (c === 0.0) {
- return [g * 255, g * 255, g * 255];
- }
-
- var pure = [0, 0, 0];
- var hi = (h % 1) * 6;
- var v = hi % 1;
- var w = 1 - v;
- var mg = 0;
-
- switch (Math.floor(hi)) {
- case 0:
- pure[0] = 1; pure[1] = v; pure[2] = 0; break;
- case 1:
- pure[0] = w; pure[1] = 1; pure[2] = 0; break;
- case 2:
- pure[0] = 0; pure[1] = 1; pure[2] = v; break;
- case 3:
- pure[0] = 0; pure[1] = w; pure[2] = 1; break;
- case 4:
- pure[0] = v; pure[1] = 0; pure[2] = 1; break;
- default:
- pure[0] = 1; pure[1] = 0; pure[2] = w;
- }
-
- mg = (1.0 - c) * g;
-
- return [
- (c * pure[0] + mg) * 255,
- (c * pure[1] + mg) * 255,
- (c * pure[2] + mg) * 255
- ];
-};
-
-convert$1.hcg.hsv = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
-
- var v = c + g * (1.0 - c);
- var f = 0;
-
- if (v > 0.0) {
- f = c / v;
- }
-
- return [hcg[0], f * 100, v * 100];
-};
-
-convert$1.hcg.hsl = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
-
- var l = g * (1.0 - c) + 0.5 * c;
- var s = 0;
-
- if (l > 0.0 && l < 0.5) {
- s = c / (2 * l);
- } else
- if (l >= 0.5 && l < 1.0) {
- s = c / (2 * (1 - l));
- }
-
- return [hcg[0], s * 100, l * 100];
-};
-
-convert$1.hcg.hwb = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
- var v = c + g * (1.0 - c);
- return [hcg[0], (v - c) * 100, (1 - v) * 100];
-};
-
-convert$1.hwb.hcg = function (hwb) {
- var w = hwb[1] / 100;
- var b = hwb[2] / 100;
- var v = 1 - b;
- var c = v - w;
- var g = 0;
-
- if (c < 1) {
- g = (v - c) / (1 - c);
- }
-
- return [hwb[0], c * 100, g * 100];
-};
-
-convert$1.apple.rgb = function (apple) {
- return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
-};
-
-convert$1.rgb.apple = function (rgb) {
- return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
-};
-
-convert$1.gray.rgb = function (args) {
- return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
-};
-
-convert$1.gray.hsl = convert$1.gray.hsv = function (args) {
- return [0, 0, args[0]];
-};
-
-convert$1.gray.hwb = function (gray) {
- return [0, 100, gray[0]];
-};
-
-convert$1.gray.cmyk = function (gray) {
- return [0, 0, 0, gray[0]];
-};
-
-convert$1.gray.lab = function (gray) {
- return [gray[0], 0, 0];
-};
-
-convert$1.gray.hex = function (gray) {
- var val = Math.round(gray[0] / 100 * 255) & 0xFF;
- var integer = (val << 16) + (val << 8) + val;
-
- var string = integer.toString(16).toUpperCase();
- return '000000'.substring(string.length) + string;
-};
-
-convert$1.rgb.gray = function (rgb) {
- var val = (rgb[0] + rgb[1] + rgb[2]) / 3;
- return [val / 255 * 100];
-};
-
-var conversions$1 = conversions$2.exports;
-
-/*
- this function routes a model to all other models.
-
- all functions that are routed have a property `.conversion` attached
- to the returned synthetic function. This property is an array
- of strings, each with the steps in between the 'from' and 'to'
- color models (inclusive).
-
- conversions that are not possible simply are not included.
-*/
-
-function buildGraph() {
- var graph = {};
- // https://jsperf.com/object-keys-vs-for-in-with-closure/3
- var models = Object.keys(conversions$1);
-
- for (var len = models.length, i = 0; i < len; i++) {
- graph[models[i]] = {
- // http://jsperf.com/1-vs-infinity
- // micro-opt, but this is simple.
- distance: -1,
- parent: null
- };
- }
-
- return graph;
-}
-
-// https://en.wikipedia.org/wiki/Breadth-first_search
-function deriveBFS(fromModel) {
- var graph = buildGraph();
- var queue = [fromModel]; // unshift -> queue -> pop
-
- graph[fromModel].distance = 0;
-
- while (queue.length) {
- var current = queue.pop();
- var adjacents = Object.keys(conversions$1[current]);
-
- for (var len = adjacents.length, i = 0; i < len; i++) {
- var adjacent = adjacents[i];
- var node = graph[adjacent];
-
- if (node.distance === -1) {
- node.distance = graph[current].distance + 1;
- node.parent = current;
- queue.unshift(adjacent);
- }
- }
- }
-
- return graph;
-}
-
-function link(from, to) {
- return function (args) {
- return to(from(args));
- };
-}
-
-function wrapConversion(toModel, graph) {
- var path = [graph[toModel].parent, toModel];
- var fn = conversions$1[graph[toModel].parent][toModel];
-
- var cur = graph[toModel].parent;
- while (graph[cur].parent) {
- path.unshift(graph[cur].parent);
- fn = link(conversions$1[graph[cur].parent][cur], fn);
- cur = graph[cur].parent;
- }
-
- fn.conversion = path;
- return fn;
-}
-
-var route$1 = function (fromModel) {
- var graph = deriveBFS(fromModel);
- var conversion = {};
-
- var models = Object.keys(graph);
- for (var len = models.length, i = 0; i < len; i++) {
- var toModel = models[i];
- var node = graph[toModel];
-
- if (node.parent === null) {
- // no possible conversion, or this node is the source model.
- continue;
- }
-
- conversion[toModel] = wrapConversion(toModel, graph);
- }
-
- return conversion;
-};
-
-var conversions = conversions$2.exports;
-var route = route$1;
-
-var convert = {};
-
-var models = Object.keys(conversions);
-
-function wrapRaw(fn) {
- var wrappedFn = function (args) {
- if (args === undefined || args === null) {
- return args;
- }
-
- if (arguments.length > 1) {
- args = Array.prototype.slice.call(arguments);
- }
-
- return fn(args);
- };
-
- // preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-function wrapRounded(fn) {
- var wrappedFn = function (args) {
- if (args === undefined || args === null) {
- return args;
- }
-
- if (arguments.length > 1) {
- args = Array.prototype.slice.call(arguments);
- }
-
- var result = fn(args);
-
- // we're assuming the result is an array here.
- // see notice in conversions.js; don't use box types
- // in conversion functions.
- if (typeof result === 'object') {
- for (var len = result.length, i = 0; i < len; i++) {
- result[i] = Math.round(result[i]);
- }
- }
-
- return result;
- };
-
- // preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-models.forEach(function (fromModel) {
- convert[fromModel] = {};
-
- Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
- Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
-
- var routes = route(fromModel);
- var routeModels = Object.keys(routes);
-
- routeModels.forEach(function (toModel) {
- var fn = routes[toModel];
-
- convert[fromModel][toModel] = wrapRounded(fn);
- convert[fromModel][toModel].raw = wrapRaw(fn);
- });
-});
-
-var colorConvert = convert;
-
-(function (module) {
-const colorConvert$1 = colorConvert;
-
-const wrapAnsi16 = (fn, offset) => function () {
- const code = fn.apply(colorConvert$1, arguments);
- return `\u001B[${code + offset}m`;
-};
-
-const wrapAnsi256 = (fn, offset) => function () {
- const code = fn.apply(colorConvert$1, arguments);
- return `\u001B[${38 + offset};5;${code}m`;
-};
-
-const wrapAnsi16m = (fn, offset) => function () {
- const rgb = fn.apply(colorConvert$1, arguments);
- return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
-};
-
-function assembleStyles() {
- const codes = new Map();
- const styles = {
- modifier: {
- reset: [0, 0],
- // 21 isn't widely supported and 22 does the same thing
- bold: [1, 22],
- dim: [2, 22],
- italic: [3, 23],
- underline: [4, 24],
- inverse: [7, 27],
- hidden: [8, 28],
- strikethrough: [9, 29]
- },
- color: {
- black: [30, 39],
- red: [31, 39],
- green: [32, 39],
- yellow: [33, 39],
- blue: [34, 39],
- magenta: [35, 39],
- cyan: [36, 39],
- white: [37, 39],
- gray: [90, 39],
-
- // Bright color
- redBright: [91, 39],
- greenBright: [92, 39],
- yellowBright: [93, 39],
- blueBright: [94, 39],
- magentaBright: [95, 39],
- cyanBright: [96, 39],
- whiteBright: [97, 39]
- },
- bgColor: {
- bgBlack: [40, 49],
- bgRed: [41, 49],
- bgGreen: [42, 49],
- bgYellow: [43, 49],
- bgBlue: [44, 49],
- bgMagenta: [45, 49],
- bgCyan: [46, 49],
- bgWhite: [47, 49],
-
- // Bright color
- bgBlackBright: [100, 49],
- bgRedBright: [101, 49],
- bgGreenBright: [102, 49],
- bgYellowBright: [103, 49],
- bgBlueBright: [104, 49],
- bgMagentaBright: [105, 49],
- bgCyanBright: [106, 49],
- bgWhiteBright: [107, 49]
- }
- };
-
- // Fix humans
- styles.color.grey = styles.color.gray;
-
- for (const groupName of Object.keys(styles)) {
- const group = styles[groupName];
-
- for (const styleName of Object.keys(group)) {
- const style = group[styleName];
-
- styles[styleName] = {
- open: `\u001B[${style[0]}m`,
- close: `\u001B[${style[1]}m`
- };
-
- group[styleName] = styles[styleName];
-
- codes.set(style[0], style[1]);
- }
-
- Object.defineProperty(styles, groupName, {
- value: group,
- enumerable: false
- });
-
- Object.defineProperty(styles, 'codes', {
- value: codes,
- enumerable: false
- });
- }
-
- const ansi2ansi = n => n;
- const rgb2rgb = (r, g, b) => [r, g, b];
-
- styles.color.close = '\u001B[39m';
- styles.bgColor.close = '\u001B[49m';
-
- styles.color.ansi = {
- ansi: wrapAnsi16(ansi2ansi, 0)
- };
- styles.color.ansi256 = {
- ansi256: wrapAnsi256(ansi2ansi, 0)
- };
- styles.color.ansi16m = {
- rgb: wrapAnsi16m(rgb2rgb, 0)
- };
-
- styles.bgColor.ansi = {
- ansi: wrapAnsi16(ansi2ansi, 10)
- };
- styles.bgColor.ansi256 = {
- ansi256: wrapAnsi256(ansi2ansi, 10)
- };
- styles.bgColor.ansi16m = {
- rgb: wrapAnsi16m(rgb2rgb, 10)
- };
-
- for (let key of Object.keys(colorConvert$1)) {
- if (typeof colorConvert$1[key] !== 'object') {
- continue;
- }
-
- const suite = colorConvert$1[key];
-
- if (key === 'ansi16') {
- key = 'ansi';
- }
-
- if ('ansi16' in suite) {
- styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
- styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
- }
-
- if ('ansi256' in suite) {
- styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
- styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
- }
-
- if ('rgb' in suite) {
- styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
- styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
- }
- }
-
- return styles;
-}
-
-// Make the export immutable
-Object.defineProperty(module, 'exports', {
- enumerable: true,
- get: assembleStyles
-});
-}(ansiStyles));
-
-var hasFlag$1 = (flag, argv) => {
- argv = argv || process.argv;
- const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
- const pos = argv.indexOf(prefix + flag);
- const terminatorPos = argv.indexOf('--');
- return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
-};
-
-const os$2 = require$$0__default$1;
-const hasFlag = hasFlag$1;
-
-const env = process.env;
-
-let forceColor;
-if (hasFlag('no-color') ||
- hasFlag('no-colors') ||
- hasFlag('color=false')) {
- forceColor = false;
-} else if (hasFlag('color') ||
- hasFlag('colors') ||
- hasFlag('color=true') ||
- hasFlag('color=always')) {
- forceColor = true;
-}
-if ('FORCE_COLOR' in env) {
- forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;
-}
-
-function translateLevel(level) {
- if (level === 0) {
- return false;
- }
-
- return {
- level,
- hasBasic: true,
- has256: level >= 2,
- has16m: level >= 3
- };
-}
-
-function supportsColor(stream) {
- if (forceColor === false) {
- return 0;
- }
-
- if (hasFlag('color=16m') ||
- hasFlag('color=full') ||
- hasFlag('color=truecolor')) {
- return 3;
- }
-
- if (hasFlag('color=256')) {
- return 2;
- }
-
- if (stream && !stream.isTTY && forceColor !== true) {
- return 0;
- }
-
- const min = forceColor ? 1 : 0;
-
- if (process.platform === 'win32') {
- // Node.js 7.5.0 is the first version of Node.js to include a patch to
- // libuv that enables 256 color output on Windows. Anything earlier and it
- // won't work. However, here we target Node.js 8 at minimum as it is an LTS
- // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows
- // release that supports 256 colors. Windows 10 build 14931 is the first release
- // that supports 16m/TrueColor.
- const osRelease = os$2.release().split('.');
- if (
- Number(process.versions.node.split('.')[0]) >= 8 &&
- Number(osRelease[0]) >= 10 &&
- Number(osRelease[2]) >= 10586
- ) {
- return Number(osRelease[2]) >= 14931 ? 3 : 2;
- }
-
- return 1;
- }
-
- if ('CI' in env) {
- if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
- return 1;
- }
-
- return min;
- }
-
- if ('TEAMCITY_VERSION' in env) {
- return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
- }
-
- if (env.COLORTERM === 'truecolor') {
- return 3;
- }
-
- if ('TERM_PROGRAM' in env) {
- const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
-
- switch (env.TERM_PROGRAM) {
- case 'iTerm.app':
- return version >= 3 ? 3 : 2;
- case 'Apple_Terminal':
- return 2;
- // No default
- }
- }
-
- if (/-256(color)?$/i.test(env.TERM)) {
- return 2;
- }
-
- if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
- return 1;
- }
-
- if ('COLORTERM' in env) {
- return 1;
- }
-
- if (env.TERM === 'dumb') {
- return min;
- }
-
- return min;
-}
-
-function getSupportLevel(stream) {
- const level = supportsColor(stream);
- return translateLevel(level);
-}
-
-var supportsColor_1 = {
- supportsColor: getSupportLevel,
- stdout: getSupportLevel(process.stdout),
- stderr: getSupportLevel(process.stderr)
-};
-
-const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
-const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
-const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
-const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi;
-
-const ESCAPES = new Map([
- ['n', '\n'],
- ['r', '\r'],
- ['t', '\t'],
- ['b', '\b'],
- ['f', '\f'],
- ['v', '\v'],
- ['0', '\0'],
- ['\\', '\\'],
- ['e', '\u001B'],
- ['a', '\u0007']
-]);
-
-function unescape$1(c) {
- if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
- return String.fromCharCode(parseInt(c.slice(1), 16));
- }
-
- return ESCAPES.get(c) || c;
-}
-
-function parseArguments(name, args) {
- const results = [];
- const chunks = args.trim().split(/\s*,\s*/g);
- let matches;
-
- for (const chunk of chunks) {
- if (!isNaN(chunk)) {
- results.push(Number(chunk));
- } else if ((matches = chunk.match(STRING_REGEX))) {
- results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape$1(escape) : chr));
- } else {
- throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
- }
- }
-
- return results;
-}
-
-function parseStyle(style) {
- STYLE_REGEX.lastIndex = 0;
-
- const results = [];
- let matches;
-
- while ((matches = STYLE_REGEX.exec(style)) !== null) {
- const name = matches[1];
-
- if (matches[2]) {
- const args = parseArguments(name, matches[2]);
- results.push([name].concat(args));
- } else {
- results.push([name]);
- }
- }
-
- return results;
-}
-
-function buildStyle(chalk, styles) {
- const enabled = {};
-
- for (const layer of styles) {
- for (const style of layer.styles) {
- enabled[style[0]] = layer.inverse ? null : style.slice(1);
- }
- }
-
- let current = chalk;
- for (const styleName of Object.keys(enabled)) {
- if (Array.isArray(enabled[styleName])) {
- if (!(styleName in current)) {
- throw new Error(`Unknown Chalk style: ${styleName}`);
- }
-
- if (enabled[styleName].length > 0) {
- current = current[styleName].apply(current, enabled[styleName]);
- } else {
- current = current[styleName];
- }
- }
- }
-
- return current;
-}
-
-var templates = (chalk, tmp) => {
- const styles = [];
- const chunks = [];
- let chunk = [];
-
- // eslint-disable-next-line max-params
- tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => {
- if (escapeChar) {
- chunk.push(unescape$1(escapeChar));
- } else if (style) {
- const str = chunk.join('');
- chunk = [];
- chunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str));
- styles.push({inverse, styles: parseStyle(style)});
- } else if (close) {
- if (styles.length === 0) {
- throw new Error('Found extraneous } in Chalk template literal');
- }
-
- chunks.push(buildStyle(chalk, styles)(chunk.join('')));
- chunk = [];
- styles.pop();
- } else {
- chunk.push(chr);
- }
- });
-
- chunks.push(chunk.join(''));
-
- if (styles.length > 0) {
- const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
- throw new Error(errMsg);
- }
-
- return chunks.join('');
-};
-
-(function (module) {
-const escapeStringRegexp$1 = escapeStringRegexp;
-const ansiStyles$1 = ansiStyles.exports;
-const stdoutColor = supportsColor_1.stdout;
-
-const template = templates;
-
-const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm');
-
-// `supportsColor.level` → `ansiStyles.color[name]` mapping
-const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];
-
-// `color-convert` models to exclude from the Chalk API due to conflicts and such
-const skipModels = new Set(['gray']);
-
-const styles = Object.create(null);
-
-function applyOptions(obj, options) {
- options = options || {};
-
- // Detect level if not set manually
- const scLevel = stdoutColor ? stdoutColor.level : 0;
- obj.level = options.level === undefined ? scLevel : options.level;
- obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0;
-}
-
-function Chalk(options) {
- // We check for this.template here since calling `chalk.constructor()`
- // by itself will have a `this` of a previously constructed chalk object
- if (!this || !(this instanceof Chalk) || this.template) {
- const chalk = {};
- applyOptions(chalk, options);
-
- chalk.template = function () {
- const args = [].slice.call(arguments);
- return chalkTag.apply(null, [chalk.template].concat(args));
- };
-
- Object.setPrototypeOf(chalk, Chalk.prototype);
- Object.setPrototypeOf(chalk.template, chalk);
-
- chalk.template.constructor = Chalk;
-
- return chalk.template;
- }
-
- applyOptions(this, options);
-}
-
-// Use bright blue on Windows as the normal blue color is illegible
-if (isSimpleWindowsTerm) {
- ansiStyles$1.blue.open = '\u001B[94m';
-}
-
-for (const key of Object.keys(ansiStyles$1)) {
- ansiStyles$1[key].closeRe = new RegExp(escapeStringRegexp$1(ansiStyles$1[key].close), 'g');
-
- styles[key] = {
- get() {
- const codes = ansiStyles$1[key];
- return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key);
- }
- };
-}
-
-styles.visible = {
- get() {
- return build.call(this, this._styles || [], true, 'visible');
- }
-};
-
-ansiStyles$1.color.closeRe = new RegExp(escapeStringRegexp$1(ansiStyles$1.color.close), 'g');
-for (const model of Object.keys(ansiStyles$1.color.ansi)) {
- if (skipModels.has(model)) {
- continue;
- }
-
- styles[model] = {
- get() {
- const level = this.level;
- return function () {
- const open = ansiStyles$1.color[levelMapping[level]][model].apply(null, arguments);
- const codes = {
- open,
- close: ansiStyles$1.color.close,
- closeRe: ansiStyles$1.color.closeRe
- };
- return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);
- };
- }
- };
-}
-
-ansiStyles$1.bgColor.closeRe = new RegExp(escapeStringRegexp$1(ansiStyles$1.bgColor.close), 'g');
-for (const model of Object.keys(ansiStyles$1.bgColor.ansi)) {
- if (skipModels.has(model)) {
- continue;
- }
-
- const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
- styles[bgModel] = {
- get() {
- const level = this.level;
- return function () {
- const open = ansiStyles$1.bgColor[levelMapping[level]][model].apply(null, arguments);
- const codes = {
- open,
- close: ansiStyles$1.bgColor.close,
- closeRe: ansiStyles$1.bgColor.closeRe
- };
- return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);
- };
- }
- };
-}
-
-const proto = Object.defineProperties(() => {}, styles);
-
-function build(_styles, _empty, key) {
- const builder = function () {
- return applyStyle.apply(builder, arguments);
- };
-
- builder._styles = _styles;
- builder._empty = _empty;
-
- const self = this;
-
- Object.defineProperty(builder, 'level', {
- enumerable: true,
- get() {
- return self.level;
- },
- set(level) {
- self.level = level;
- }
- });
-
- Object.defineProperty(builder, 'enabled', {
- enumerable: true,
- get() {
- return self.enabled;
- },
- set(enabled) {
- self.enabled = enabled;
- }
- });
-
- // See below for fix regarding invisible grey/dim combination on Windows
- builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey';
-
- // `__proto__` is used because we must return a function, but there is
- // no way to create a function with a different prototype
- builder.__proto__ = proto; // eslint-disable-line no-proto
-
- return builder;
-}
-
-function applyStyle() {
- // Support varags, but simply cast to string in case there's only one arg
- const args = arguments;
- const argsLen = args.length;
- let str = String(arguments[0]);
-
- if (argsLen === 0) {
- return '';
- }
-
- if (argsLen > 1) {
- // Don't slice `arguments`, it prevents V8 optimizations
- for (let a = 1; a < argsLen; a++) {
- str += ' ' + args[a];
- }
- }
-
- if (!this.enabled || this.level <= 0 || !str) {
- return this._empty ? '' : str;
- }
-
- // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,
- // see https://github.com/chalk/chalk/issues/58
- // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.
- const originalDim = ansiStyles$1.dim.open;
- if (isSimpleWindowsTerm && this.hasGrey) {
- ansiStyles$1.dim.open = '';
- }
-
- for (const code of this._styles.slice().reverse()) {
- // Replace any instances already present with a re-opening code
- // otherwise only the part of the string until said closing code
- // will be colored, and the rest will simply be 'plain'.
- str = code.open + str.replace(code.closeRe, code.open) + code.close;
-
- // Close the styling before a linebreak and reopen
- // after next line to fix a bleed issue on macOS
- // https://github.com/chalk/chalk/pull/92
- str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`);
- }
-
- // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue
- ansiStyles$1.dim.open = originalDim;
-
- return str;
-}
-
-function chalkTag(chalk, strings) {
- if (!Array.isArray(strings)) {
- // If chalk() was called by itself or with a string,
- // return the string itself as a string.
- return [].slice.call(arguments, 1).join(' ');
- }
-
- const args = [].slice.call(arguments, 2);
- const parts = [strings.raw[0]];
-
- for (let i = 1; i < strings.length; i++) {
- parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&'));
- parts.push(String(strings.raw[i]));
- }
-
- return template(chalk, parts.join(''));
-}
-
-Object.defineProperties(Chalk.prototype, styles);
-
-module.exports = Chalk(); // eslint-disable-line new-cap
-module.exports.supportsColor = stdoutColor;
-module.exports.default = module.exports; // For TypeScript
-}(chalk$1));
-
-var shellQuote$1 = {};
-
-shellQuote$1.quote = function (xs) {
- return xs.map(function (s) {
- if (s && typeof s === 'object') {
- return s.op.replace(/(.)/g, '\\$1');
- }
- else if (/["\s]/.test(s) && !/'/.test(s)) {
- return "'" + s.replace(/(['\\])/g, '\\$1') + "'";
- }
- else if (/["'\s]/.test(s)) {
- return '"' + s.replace(/(["\\$`!])/g, '\\$1') + '"';
- }
- else {
- return String(s).replace(/([A-z]:)?([#!"$&'()*,:;<=>?@\[\\\]^`{|}])/g, '$1\\$2');
- }
- }).join(' ');
-};
-
-// '<(' is process substitution operator and
-// can be parsed the same as control operator
-var CONTROL = '(?:' + [
- '\\|\\|', '\\&\\&', ';;', '\\|\\&', '\\<\\(', '>>', '>\\&', '[&;()|<>]'
-].join('|') + ')';
-var META = '|&;()<> \\t';
-var BAREWORD = '(\\\\[\'"' + META + ']|[^\\s\'"' + META + '])+';
-var SINGLE_QUOTE = '"((\\\\"|[^"])*?)"';
-var DOUBLE_QUOTE = '\'((\\\\\'|[^\'])*?)\'';
-
-var TOKEN = '';
-for (var i = 0; i < 4; i++) {
- TOKEN += (Math.pow(16,8)*Math.random()).toString(16);
-}
-
-shellQuote$1.parse = function (s, env, opts) {
- var mapped = parse$2(s, env, opts);
- if (typeof env !== 'function') return mapped;
- return mapped.reduce(function (acc, s) {
- if (typeof s === 'object') return acc.concat(s);
- var xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));
- if (xs.length === 1) return acc.concat(xs[0]);
- return acc.concat(xs.filter(Boolean).map(function (x) {
- if (RegExp('^' + TOKEN).test(x)) {
- return JSON.parse(x.split(TOKEN)[1]);
- }
- else return x;
- }));
- }, []);
-};
-
-function parse$2 (s, env, opts) {
- var chunker = new RegExp([
- '(' + CONTROL + ')', // control chars
- '(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')*'
- ].join('|'), 'g');
- var match = s.match(chunker).filter(Boolean);
- var commented = false;
-
- if (!match) return [];
- if (!env) env = {};
- if (!opts) opts = {};
- return match.map(function (s, j) {
- if (commented) {
- return;
- }
- if (RegExp('^' + CONTROL + '$').test(s)) {
- return { op: s };
- }
-
- // Hand-written scanner/parser for Bash quoting rules:
- //
- // 1. inside single quotes, all characters are printed literally.
- // 2. inside double quotes, all characters are printed literally
- // except variables prefixed by '$' and backslashes followed by
- // either a double quote or another backslash.
- // 3. outside of any quotes, backslashes are treated as escape
- // characters and not printed (unless they are themselves escaped)
- // 4. quote context can switch mid-token if there is no whitespace
- // between the two quote contexts (e.g. all'one'"token" parses as
- // "allonetoken")
- var SQ = "'";
- var DQ = '"';
- var DS = '$';
- var BS = opts.escape || '\\';
- var quote = false;
- var esc = false;
- var out = '';
- var isGlob = false;
-
- for (var i = 0, len = s.length; i < len; i++) {
- var c = s.charAt(i);
- isGlob = isGlob || (!quote && (c === '*' || c === '?'));
- if (esc) {
- out += c;
- esc = false;
- }
- else if (quote) {
- if (c === quote) {
- quote = false;
- }
- else if (quote == SQ) {
- out += c;
- }
- else { // Double quote
- if (c === BS) {
- i += 1;
- c = s.charAt(i);
- if (c === DQ || c === BS || c === DS) {
- out += c;
- } else {
- out += BS + c;
- }
- }
- else if (c === DS) {
- out += parseEnvVar();
- }
- else {
- out += c;
- }
- }
- }
- else if (c === DQ || c === SQ) {
- quote = c;
- }
- else if (RegExp('^' + CONTROL + '$').test(c)) {
- return { op: s };
- }
- else if (RegExp('^#$').test(c)) {
- commented = true;
- if (out.length){
- return [out, { comment: s.slice(i+1) + match.slice(j+1).join(' ') }];
- }
- return [{ comment: s.slice(i+1) + match.slice(j+1).join(' ') }];
- }
- else if (c === BS) {
- esc = true;
- }
- else if (c === DS) {
- out += parseEnvVar();
- }
- else out += c;
- }
-
- if (isGlob) return {op: 'glob', pattern: out};
-
- return out;
-
- function parseEnvVar() {
- i += 1;
- var varend, varname;
- //debugger
- if (s.charAt(i) === '{') {
- i += 1;
- if (s.charAt(i) === '}') {
- throw new Error("Bad substitution: " + s.substr(i - 2, 3));
- }
- varend = s.indexOf('}', i);
- if (varend < 0) {
- throw new Error("Bad substitution: " + s.substr(i));
- }
- varname = s.substr(i, varend - i);
- i = varend;
- }
- else if (/[*@#?$!_\-]/.test(s.charAt(i))) {
- varname = s.charAt(i);
- i += 1;
- }
- else {
- varend = s.substr(i).match(/[^\w\d_]/);
- if (!varend) {
- varname = s.substr(i);
- i = s.length;
- } else {
- varname = s.substr(i, varend.index);
- i += varend.index - 1;
- }
- }
- return getVar(null, '', varname);
- }
- })
- // finalize parsed aruments
- .reduce(function(prev, arg){
- if (arg === undefined){
- return prev;
- }
- return prev.concat(arg);
- },[]);
-
- function getVar (_, pre, key) {
- var r = typeof env === 'function' ? env(key) : env[key];
- if (r === undefined && key != '')
- r = '';
- else if (r === undefined)
- r = '$';
-
- if (typeof r === 'object') {
- return pre + TOKEN + JSON.stringify(r) + TOKEN;
- }
- else return pre + r;
- }
-}
-
-var osx = {
- '/Applications/Atom.app/Contents/MacOS/Atom': 'atom',
- '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta':
- '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta',
- '/Applications/Brackets.app/Contents/MacOS/Brackets': 'brackets',
- '/Applications/Sublime Text.app/Contents/MacOS/Sublime Text':
- '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl',
- '/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2':
- '/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl',
- '/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text':
- '/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl',
- '/Applications/Visual Studio Code.app/Contents/MacOS/Electron': 'code',
- '/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron':
- 'code-insiders',
- '/Applications/AppCode.app/Contents/MacOS/appcode':
- '/Applications/AppCode.app/Contents/MacOS/appcode',
- '/Applications/CLion.app/Contents/MacOS/clion':
- '/Applications/CLion.app/Contents/MacOS/clion',
- '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea':
- '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea',
- '/Applications/PhpStorm.app/Contents/MacOS/phpstorm':
- '/Applications/PhpStorm.app/Contents/MacOS/phpstorm',
- '/Applications/PyCharm.app/Contents/MacOS/pycharm':
- '/Applications/PyCharm.app/Contents/MacOS/pycharm',
- '/Applications/PyCharm CE.app/Contents/MacOS/pycharm':
- '/Applications/PyCharm CE.app/Contents/MacOS/pycharm',
- '/Applications/RubyMine.app/Contents/MacOS/rubymine':
- '/Applications/RubyMine.app/Contents/MacOS/rubymine',
- '/Applications/WebStorm.app/Contents/MacOS/webstorm':
- '/Applications/WebStorm.app/Contents/MacOS/webstorm'
-};
-
-var linux = {
- atom: 'atom',
- Brackets: 'brackets',
- code: 'code',
- emacs: 'emacs',
- 'idea.sh': 'idea',
- 'phpstorm.sh': 'phpstorm',
- 'pycharm.sh': 'pycharm',
- 'rubymine.sh': 'rubymine',
- sublime_text: 'subl',
- vim: 'vim',
- 'webstorm.sh': 'webstorm'
-};
-
-var windows = [
- 'Brackets.exe',
- 'Code.exe',
- 'atom.exe',
- 'sublime_text.exe',
- 'notepad++.exe',
- 'clion.exe',
- 'clion64.exe',
- 'idea.exe',
- 'idea64.exe',
- 'phpstorm.exe',
- 'phpstorm64.exe',
- 'pycharm.exe',
- 'pycharm64.exe',
- 'rubymine.exe',
- 'rubymine64.exe',
- 'webstorm.exe',
- 'webstorm64.exe'
-];
-
-const path$4 = path__default;
-const shellQuote = shellQuote$1;
-const childProcess$1 = require$$1__default$4;
-
-// Map from full process name to binary that starts the process
-// We can't just re-use full process name, because it will spawn a new instance
-// of the app every time
-const COMMON_EDITORS_OSX = osx;
-const COMMON_EDITORS_LINUX = linux;
-const COMMON_EDITORS_WIN = windows;
-
-var guess = function guessEditor (specifiedEditor) {
- if (specifiedEditor) {
- return shellQuote.parse(specifiedEditor)
- }
- // We can find out which editor is currently running by:
- // `ps x` on macOS and Linux
- // `Get-Process` on Windows
- try {
- if (process.platform === 'darwin') {
- const output = childProcess$1.execSync('ps x').toString();
- const processNames = Object.keys(COMMON_EDITORS_OSX);
- for (let i = 0; i < processNames.length; i++) {
- const processName = processNames[i];
- if (output.indexOf(processName) !== -1) {
- return [COMMON_EDITORS_OSX[processName]]
- }
- }
- } else if (process.platform === 'win32') {
- const output = childProcess$1
- .execSync('powershell -Command "Get-Process | Select-Object Path"', {
- stdio: ['pipe', 'pipe', 'ignore']
- })
- .toString();
- const runningProcesses = output.split('\r\n');
- for (let i = 0; i < runningProcesses.length; i++) {
- // `Get-Process` sometimes returns empty lines
- if (!runningProcesses[i]) {
- continue
- }
-
- const fullProcessPath = runningProcesses[i].trim();
- const shortProcessName = path$4.basename(fullProcessPath);
-
- if (COMMON_EDITORS_WIN.indexOf(shortProcessName) !== -1) {
- return [fullProcessPath]
- }
- }
- } else if (process.platform === 'linux') {
- // --no-heading No header line
- // x List all processes owned by you
- // -o comm Need only names column
- const output = childProcess$1
- .execSync('ps x --no-heading -o comm --sort=comm')
- .toString();
- const processNames = Object.keys(COMMON_EDITORS_LINUX);
- for (let i = 0; i < processNames.length; i++) {
- const processName = processNames[i];
- if (output.indexOf(processName) !== -1) {
- return [COMMON_EDITORS_LINUX[processName]]
- }
- }
- }
- } catch (error) {
- // Ignore...
- }
-
- // Last resort, use old skool env vars
- if (process.env.VISUAL) {
- return [process.env.VISUAL]
- } else if (process.env.EDITOR) {
- return [process.env.EDITOR]
- }
-
- return [null]
-};
-
-const path$3 = path__default;
-
-// normalize file/line numbers into command line args for specific editors
-var getArgs = function getArgumentsForPosition (
- editor,
- fileName,
- lineNumber,
- columnNumber = 1
-) {
- const editorBasename = path$3.basename(editor).replace(/\.(exe|cmd|bat)$/i, '');
- switch (editorBasename) {
- case 'atom':
- case 'Atom':
- case 'Atom Beta':
- case 'subl':
- case 'sublime':
- case 'sublime_text':
- case 'wstorm':
- case 'charm':
- return [`${fileName}:${lineNumber}:${columnNumber}`]
- case 'notepad++':
- return ['-n' + lineNumber, fileName]
- case 'vim':
- case 'mvim':
- return [`+call cursor(${lineNumber}, ${columnNumber})`, fileName]
- case 'joe':
- return ['+' + `${lineNumber}`, fileName]
- case 'emacs':
- case 'emacsclient':
- return [`+${lineNumber}:${columnNumber}`, fileName]
- case 'rmate':
- case 'mate':
- case 'mine':
- return ['--line', lineNumber, fileName]
- case 'code':
- case 'code-insiders':
- case 'Code':
- return ['-r', '-g', `${fileName}:${lineNumber}:${columnNumber}`]
- case 'appcode':
- case 'clion':
- case 'clion64':
- case 'idea':
- case 'idea64':
- case 'phpstorm':
- case 'phpstorm64':
- case 'pycharm':
- case 'pycharm64':
- case 'rubymine':
- case 'rubymine64':
- case 'webstorm':
- case 'webstorm64':
- return ['--line', lineNumber, fileName]
- }
-
- // For all others, drop the lineNumber until we have
- // a mapping above, since providing the lineNumber incorrectly
- // can result in errors or confusing behavior.
- return [fileName]
-};
-
-/**
- * Copyright (c) 2015-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file at
- * https://github.com/facebookincubator/create-react-app/blob/master/LICENSE
- *
- * Modified by Yuxi Evan You
- */
-
-const fs$1 = fs__default;
-const os$1 = require$$0__default$1;
-const path$2 = path__default;
-const chalk = chalk$1.exports;
-const childProcess = require$$1__default$4;
-
-const guessEditor = guess;
-const getArgumentsForPosition = getArgs;
-
-function wrapErrorCallback (cb) {
- return (fileName, errorMessage) => {
- console.log();
- console.log(
- chalk.red('Could not open ' + path$2.basename(fileName) + ' in the editor.')
- );
- if (errorMessage) {
- if (errorMessage[errorMessage.length - 1] !== '.') {
- errorMessage += '.';
- }
- console.log(
- chalk.red('The editor process exited with an error: ' + errorMessage)
- );
- }
- console.log();
- if (cb) cb(fileName, errorMessage);
- }
-}
-
-function isTerminalEditor (editor) {
- switch (editor) {
- case 'vim':
- case 'emacs':
- case 'nano':
- return true
- }
- return false
-}
-
-const positionRE = /:(\d+)(:(\d+))?$/;
-function parseFile (file) {
- const fileName = file.replace(positionRE, '');
- const match = file.match(positionRE);
- const lineNumber = match && match[1];
- const columnNumber = match && match[3];
- return {
- fileName,
- lineNumber,
- columnNumber
- }
-}
-
-let _childProcess = null;
-
-function launchEditor (file, specifiedEditor, onErrorCallback) {
- const parsed = parseFile(file);
- let { fileName } = parsed;
- const { lineNumber, columnNumber } = parsed;
-
- if (!fs$1.existsSync(fileName)) {
- return
- }
-
- if (typeof specifiedEditor === 'function') {
- onErrorCallback = specifiedEditor;
- specifiedEditor = undefined;
- }
-
- onErrorCallback = wrapErrorCallback(onErrorCallback);
-
- const [editor, ...args] = guessEditor(specifiedEditor);
- if (!editor) {
- onErrorCallback(fileName, null);
- return
- }
-
- if (
- process.platform === 'linux' &&
- fileName.startsWith('/mnt/') &&
- /Microsoft/i.test(os$1.release())
- ) {
- // Assume WSL / "Bash on Ubuntu on Windows" is being used, and
- // that the file exists on the Windows file system.
- // `os.release()` is "4.4.0-43-Microsoft" in the current release
- // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364
- // When a Windows editor is specified, interop functionality can
- // handle the path translation, but only if a relative path is used.
- fileName = path$2.relative('', fileName);
- }
-
- if (lineNumber) {
- const extraArgs = getArgumentsForPosition(editor, fileName, lineNumber, columnNumber);
- args.push.apply(args, extraArgs);
- } else {
- args.push(fileName);
- }
-
- if (_childProcess && isTerminalEditor(editor)) {
- // There's an existing editor process already and it's attached
- // to the terminal, so go kill it. Otherwise two separate editor
- // instances attach to the stdin/stdout which gets confusing.
- _childProcess.kill('SIGKILL');
- }
-
- if (process.platform === 'win32') {
- // On Windows, launch the editor in a shell because spawn can only
- // launch .exe files.
- _childProcess = childProcess.spawn(
- 'cmd.exe',
- ['/C', editor].concat(args),
- { stdio: 'inherit' }
- );
- } else {
- _childProcess = childProcess.spawn(editor, args, { stdio: 'inherit' });
- }
- _childProcess.on('exit', function (errorCode) {
- _childProcess = null;
-
- if (errorCode) {
- onErrorCallback(fileName, '(code ' + errorCode + ')');
- }
- });
-
- _childProcess.on('error', function (error) {
- onErrorCallback(fileName, error.message);
- });
-}
-
-var launchEditor_1 = launchEditor;
-
-const url = require$$0__default$6;
-const path$1 = path__default;
-const launch = launchEditor_1;
-
-var launchEditorMiddleware = (specifiedEditor, srcRoot, onErrorCallback) => {
- if (typeof specifiedEditor === 'function') {
- onErrorCallback = specifiedEditor;
- specifiedEditor = undefined;
- }
-
- if (typeof srcRoot === 'function') {
- onErrorCallback = srcRoot;
- srcRoot = undefined;
- }
-
- srcRoot = srcRoot || process.cwd();
-
- return function launchEditorMiddleware (req, res, next) {
- const { file } = url.parse(req.url, true).query || {};
- if (!file) {
- res.statusCode = 500;
- res.end(`launch-editor-middleware: required query param "file" is missing.`);
- } else {
- launch(path$1.resolve(srcRoot, file), specifiedEditor, onErrorCallback);
- res.end();
- }
- }
-};
-
-const externalTypes = [
- 'css',
- // supported pre-processor types
- 'less',
- 'sass',
- 'scss',
- 'styl',
- 'stylus',
- 'pcss',
- 'postcss',
- // known SFC types
- 'vue',
- 'svelte',
- 'marko',
- 'astro',
- // JSX/TSX may be configured to be compiled differently from how esbuild
- // handles it by default, so exclude them as well
- 'jsx',
- 'tsx',
- ...KNOWN_ASSET_TYPES
-];
-function esbuildDepPlugin(qualified, exportsData, config, ssr) {
- // default resolver which prefers ESM
- const _resolve = config.createResolver({ asSrc: false });
- // cjs resolver that prefers Node
- const _resolveRequire = config.createResolver({
- asSrc: false,
- isRequire: true
- });
- const resolve = (id, importer, kind, resolveDir) => {
- let _importer;
- // explicit resolveDir - this is passed only during yarn pnp resolve for
- // entries
- if (resolveDir) {
- _importer = normalizePath$4(path__default.join(resolveDir, '*'));
- }
- else {
- // map importer ids to file paths for correct resolution
- _importer = importer in qualified ? qualified[importer] : importer;
- }
- const resolver = kind.startsWith('require') ? _resolveRequire : _resolve;
- return resolver(id, _importer, undefined, ssr);
- };
- return {
- name: 'vite:dep-pre-bundle',
- setup(build) {
- // externalize assets and commonly known non-js file types
- build.onResolve({
- filter: new RegExp(`\\.(` + externalTypes.join('|') + `)(\\?.*)?$`)
- }, async ({ path: id, importer, kind }) => {
- const resolved = await resolve(id, importer, kind);
- if (resolved) {
- return {
- path: resolved,
- external: true
- };
- }
- });
- function resolveEntry(id) {
- const flatId = flattenId(id);
- if (flatId in qualified) {
- return {
- path: flatId,
- namespace: 'dep'
- };
- }
- }
- build.onResolve({ filter: /^[\w@][^:]/ }, async ({ path: id, importer, kind }) => {
- // ensure esbuild uses our resolved entries
- let entry;
- // if this is an entry, return entry namespace resolve result
- if (!importer) {
- if ((entry = resolveEntry(id)))
- return entry;
- // check if this is aliased to an entry - also return entry namespace
- const aliased = await _resolve(id, undefined, true);
- if (aliased && (entry = resolveEntry(aliased))) {
- return entry;
- }
- }
- // use vite's own resolver
- const resolved = await resolve(id, importer, kind);
- if (resolved) {
- if (resolved.startsWith(browserExternalId)) {
- return {
- path: id,
- namespace: 'browser-external'
- };
- }
- if (isExternalUrl(resolved)) {
- return {
- path: resolved,
- external: true
- };
- }
- return {
- path: path__default.resolve(resolved)
- };
- }
- });
- // For entry files, we'll read it ourselves and construct a proxy module
- // to retain the entry's raw id instead of file path so that esbuild
- // outputs desired output file structure.
- // It is necessary to do the re-exporting to separate the virtual proxy
- // module from the actual module since the actual module may get
- // referenced via relative imports - if we don't separate the proxy and
- // the actual module, esbuild will create duplicated copies of the same
- // module!
- const root = path__default.resolve(config.root);
- build.onLoad({ filter: /.*/, namespace: 'dep' }, ({ path: id }) => {
- const entryFile = qualified[id];
- let relativePath = normalizePath$4(path__default.relative(root, entryFile));
- if (!relativePath.startsWith('./') &&
- !relativePath.startsWith('../') &&
- relativePath !== '.') {
- relativePath = `./${relativePath}`;
- }
- let contents = '';
- const data = exportsData[id];
- const [imports, exports] = data;
- if (!imports.length && !exports.length) {
- // cjs
- contents += `export default require("${relativePath}");`;
- }
- else {
- if (exports.includes('default')) {
- contents += `import d from "${relativePath}";export default d;`;
- }
- if (data.hasReExports ||
- exports.length > 1 ||
- exports[0] !== 'default') {
- contents += `\nexport * from "${relativePath}"`;
- }
- }
- let ext = path__default.extname(entryFile).slice(1);
- if (ext === 'mjs')
- ext = 'js';
- return {
- loader: ext,
- contents,
- resolveDir: root
- };
- });
- build.onLoad({ filter: /.*/, namespace: 'browser-external' }, ({ path: id }) => {
- return {
- contents: `export default new Proxy({}, {
- get() {
- throw new Error('Module "${id}" has been externalized for ` +
- `browser compatibility and cannot be accessed in client code.')
- }
-})`
- };
- });
- // yarn 2 pnp compat
- if (isRunningWithYarnPnp) {
- build.onResolve({ filter: /.*/ }, async ({ path, importer, kind, resolveDir }) => ({
- // pass along resolveDir for entries
- path: await resolve(path, importer, kind, resolveDir)
- }));
- build.onLoad({ filter: /.*/ }, async (args) => ({
- contents: await require('fs').promises.readFile(args.path),
- loader: 'default'
- }));
- }
- }
- };
-}
-
-const debug$3 = createDebugger('vite:deps');
-async function optimizeDeps(config, force = config.server.force, asCommand = false, newDeps, // missing imports encountered after server has started
-ssr) {
- var _a, _b, _c, _d;
- config = {
- ...config,
- command: 'build'
- };
- const { root, logger, cacheDir } = config;
- const log = asCommand ? logger.info : debug$3;
- if (!cacheDir) {
- log(`No cache directory. Skipping.`);
- return null;
- }
- const dataPath = path__default.join(cacheDir, '_metadata.json');
- const mainHash = getDepHash(root, config);
- const data = {
- hash: mainHash,
- browserHash: mainHash,
- optimized: {}
- };
- if (!force) {
- let prevData;
- try {
- prevData = JSON.parse(fs__default.readFileSync(dataPath, 'utf-8'));
- }
- catch (e) { }
- // hash is consistent, no need to re-bundle
- if (prevData && prevData.hash === data.hash) {
- log('Hash is consistent. Skipping. Use --force to override.');
- return prevData;
- }
- }
- if (fs__default.existsSync(cacheDir)) {
- emptyDir(cacheDir);
- }
- else {
- fs__default.mkdirSync(cacheDir, { recursive: true });
- }
- // a hint for Node.js
- // all files in the cache directory should be recognized as ES modules
- writeFile(path__default.resolve(cacheDir, 'package.json'), JSON.stringify({ type: 'module' }));
- let deps, missing;
- if (!newDeps) {
- ({ deps, missing } = await scanImports(config));
- }
- else {
- deps = newDeps;
- missing = {};
- }
- // update browser hash
- data.browserHash = require$$1.createHash('sha256')
- .update(data.hash + JSON.stringify(deps))
- .digest('hex')
- .substr(0, 8);
- const missingIds = Object.keys(missing);
- if (missingIds.length) {
- throw new Error(`The following dependencies are imported but could not be resolved:\n\n ${missingIds
- .map((id) => `${source.cyan(id)} ${source.white.dim(`(imported by ${missing[id]})`)}`)
- .join(`\n `)}\n\nAre they installed?`);
- }
- const include = (_a = config.optimizeDeps) === null || _a === void 0 ? void 0 : _a.include;
- if (include) {
- const resolve = config.createResolver({ asSrc: false });
- for (const id of include) {
- // normalize 'foo >bar` as 'foo > bar' to prevent same id being added
- // and for pretty printing
- const normalizedId = normalizeId$1(id);
- if (!deps[normalizedId]) {
- const entry = await resolve(id);
- if (entry) {
- deps[normalizedId] = entry;
- }
- else {
- throw new Error(`Failed to resolve force included dependency: ${source.cyan(id)}`);
- }
- }
- }
- }
- const qualifiedIds = Object.keys(deps);
- if (!qualifiedIds.length) {
- writeFile(dataPath, JSON.stringify(data, null, 2));
- log(`No dependencies to bundle. Skipping.\n\n\n`);
- return data;
- }
- const total = qualifiedIds.length;
- const maxListed = 5;
- const listed = Math.min(total, maxListed);
- const extra = Math.max(0, total - maxListed);
- const depsString = source.yellow(qualifiedIds.slice(0, listed).join(`\n `) +
- (extra > 0 ? `\n (...and ${extra} more)` : ``));
- if (!asCommand) {
- if (!newDeps) {
- // This is auto run on server start - let the user know that we are
- // pre-optimizing deps
- logger.info(source.greenBright(`Pre-bundling dependencies:\n ${depsString}`));
- logger.info(`(this will be run only when your dependencies or config have changed)`);
- }
- }
- else {
- logger.info(source.greenBright(`Optimizing dependencies:\n ${depsString}`));
- }
- // esbuild generates nested directory output with lowest common ancestor base
- // this is unpredictable and makes it difficult to analyze entry / output
- // mapping. So what we do here is:
- // 1. flatten all ids to eliminate slash
- // 2. in the plugin, read the entry ourselves as virtual files to retain the
- // path.
- const flatIdDeps = {};
- const idToExports = {};
- const flatIdToExports = {};
- const { plugins = [], ...esbuildOptions } = (_c = (_b = config.optimizeDeps) === null || _b === void 0 ? void 0 : _b.esbuildOptions) !== null && _c !== void 0 ? _c : {};
- await init;
- for (const id in deps) {
- const flatId = flattenId(id);
- const filePath = (flatIdDeps[flatId] = deps[id]);
- const entryContent = fs__default.readFileSync(filePath, 'utf-8');
- let exportsData;
- try {
- exportsData = parse$f(entryContent);
- }
- catch {
- debug$3(`Unable to parse dependency: ${id}. Trying again with a JSX transform.`);
- const transformed = await transformWithEsbuild(entryContent, filePath, {
- loader: 'jsx'
- });
- // Ensure that optimization won't fail by defaulting '.js' to the JSX parser.
- // This is useful for packages such as Gatsby.
- esbuildOptions.loader = {
- '.js': 'jsx',
- ...esbuildOptions.loader
- };
- exportsData = parse$f(transformed.code);
- }
- for (const { ss, se } of exportsData[0]) {
- const exp = entryContent.slice(ss, se);
- if (/export\s+\*\s+from/.test(exp)) {
- exportsData.hasReExports = true;
- }
- }
- idToExports[id] = exportsData;
- flatIdToExports[flatId] = exportsData;
- }
- const define = {
- 'process.env.NODE_ENV': JSON.stringify(config.mode)
- };
- for (const key in config.define) {
- const value = config.define[key];
- define[key] = typeof value === 'string' ? value : JSON.stringify(value);
- }
- const start = perf_hooks.performance.now();
- const result = await esbuild.build({
- absWorkingDir: process.cwd(),
- entryPoints: Object.keys(flatIdDeps),
- bundle: true,
- format: 'esm',
- target: config.build.target || undefined,
- external: (_d = config.optimizeDeps) === null || _d === void 0 ? void 0 : _d.exclude,
- logLevel: 'error',
- splitting: true,
- sourcemap: true,
- outdir: cacheDir,
- ignoreAnnotations: true,
- metafile: true,
- define,
- plugins: [
- ...plugins,
- esbuildDepPlugin(flatIdDeps, flatIdToExports, config, ssr)
- ],
- ...esbuildOptions
- });
- const meta = result.metafile;
- // the paths in `meta.outputs` are relative to `process.cwd()`
- const cacheDirOutputPath = path__default.relative(process.cwd(), cacheDir);
- for (const id in deps) {
- const entry = deps[id];
- data.optimized[id] = {
- file: normalizePath$4(path__default.resolve(cacheDir, flattenId(id) + '.js')),
- src: entry,
- needsInterop: needsInterop(id, idToExports[id], meta.outputs, cacheDirOutputPath)
- };
- }
- writeFile(dataPath, JSON.stringify(data, null, 2));
- debug$3(`deps bundled in ${(perf_hooks.performance.now() - start).toFixed(2)}ms`);
- return data;
-}
-// https://github.com/vitejs/vite/issues/1724#issuecomment-767619642
-// a list of modules that pretends to be ESM but still uses `require`.
-// this causes esbuild to wrap them as CJS even when its entry appears to be ESM.
-const KNOWN_INTEROP_IDS = new Set(['moment']);
-function needsInterop(id, exportsData, outputs, cacheDirOutputPath) {
- if (KNOWN_INTEROP_IDS.has(id)) {
- return true;
- }
- const [imports, exports] = exportsData;
- // entry has no ESM syntax - likely CJS or UMD
- if (!exports.length && !imports.length) {
- return true;
- }
- // if a peer dependency used require() on a ESM dependency, esbuild turns the
- // ESM dependency's entry chunk into a single default export... detect
- // such cases by checking exports mismatch, and force interop.
- const flatId = flattenId(id) + '.js';
- let generatedExports;
- for (const output in outputs) {
- if (normalizePath$4(output) ===
- normalizePath$4(path__default.join(cacheDirOutputPath, flatId))) {
- generatedExports = outputs[output].exports;
- break;
- }
- }
- if (!generatedExports ||
- (isSingleDefaultExport(generatedExports) && !isSingleDefaultExport(exports))) {
- return true;
- }
- return false;
-}
-function isSingleDefaultExport(exports) {
- return exports.length === 1 && exports[0] === 'default';
-}
-const lockfileFormats = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'];
-function getDepHash(root, config) {
- var _a, _b;
- let content = lookupFile(root, lockfileFormats) || '';
- // also take config into account
- // only a subset of config options that can affect dep optimization
- content += JSON.stringify({
- mode: config.mode,
- root: config.root,
- resolve: config.resolve,
- assetsInclude: config.assetsInclude,
- plugins: config.plugins.map((p) => p.name),
- optimizeDeps: {
- include: (_a = config.optimizeDeps) === null || _a === void 0 ? void 0 : _a.include,
- exclude: (_b = config.optimizeDeps) === null || _b === void 0 ? void 0 : _b.exclude
- }
- }, (_, value) => {
- if (typeof value === 'function' || value instanceof RegExp) {
- return value.toString();
- }
- return value;
- });
- return require$$1.createHash('sha256').update(content).digest('hex').substr(0, 8);
-}
-
-var index$1 = {
- __proto__: null,
- optimizeDeps: optimizeDeps
-};
-
-var sourceMapGenerator = {};
-
-var base64Vlq = {};
-
-var base64$1 = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
-
-/**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
-base64$1.encode = function (number) {
- if (0 <= number && number < intToCharMap.length) {
- return intToCharMap[number];
- }
- throw new TypeError("Must be between 0 and 63: " + number);
-};
-
-/**
- * Decode a single base 64 character code digit to an integer. Returns -1 on
- * failure.
- */
-base64$1.decode = function (charCode) {
- var bigA = 65; // 'A'
- var bigZ = 90; // 'Z'
-
- var littleA = 97; // 'a'
- var littleZ = 122; // 'z'
-
- var zero = 48; // '0'
- var nine = 57; // '9'
-
- var plus = 43; // '+'
- var slash = 47; // '/'
-
- var littleOffset = 26;
- var numberOffset = 52;
-
- // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
- if (bigA <= charCode && charCode <= bigZ) {
- return (charCode - bigA);
- }
-
- // 26 - 51: abcdefghijklmnopqrstuvwxyz
- if (littleA <= charCode && charCode <= littleZ) {
- return (charCode - littleA + littleOffset);
- }
-
- // 52 - 61: 0123456789
- if (zero <= charCode && charCode <= nine) {
- return (charCode - zero + numberOffset);
- }
-
- // 62: +
- if (charCode == plus) {
- return 62;
- }
-
- // 63: /
- if (charCode == slash) {
- return 63;
- }
-
- // Invalid base64 digit.
- return -1;
-};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-var base64 = base64$1;
-
-// A single base 64 digit can contain 6 bits of data. For the base 64 variable
-// length quantities we use in the source map spec, the first bit is the sign,
-// the next four bits are the actual value, and the 6th bit is the
-// continuation bit. The continuation bit tells us whether there are more
-// digits in this value following this digit.
-//
-// Continuation
-// | Sign
-// | |
-// V V
-// 101011
-
-var VLQ_BASE_SHIFT = 5;
-
-// binary: 100000
-var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-
-// binary: 011111
-var VLQ_BASE_MASK = VLQ_BASE - 1;
-
-// binary: 100000
-var VLQ_CONTINUATION_BIT = VLQ_BASE;
-
-/**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
-function toVLQSigned(aValue) {
- return aValue < 0
- ? ((-aValue) << 1) + 1
- : (aValue << 1) + 0;
-}
-
-/**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
- */
-function fromVLQSigned(aValue) {
- var isNegative = (aValue & 1) === 1;
- var shifted = aValue >> 1;
- return isNegative
- ? -shifted
- : shifted;
-}
-
-/**
- * Returns the base 64 VLQ encoded value.
- */
-base64Vlq.encode = function base64VLQ_encode(aValue) {
- var encoded = "";
- var digit;
-
- var vlq = toVLQSigned(aValue);
-
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- // There are still more digits in this value, so we must make sure the
- // continuation bit is marked.
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
-
- return encoded;
-};
-
-/**
- * Decodes the next base 64 VLQ value from the given string and returns the
- * value and the rest of the string via the out parameter.
- */
-base64Vlq.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
- var strLen = aStr.length;
- var result = 0;
- var shift = 0;
- var continuation, digit;
-
- do {
- if (aIndex >= strLen) {
- throw new Error("Expected more digits in base 64 VLQ value.");
- }
-
- digit = base64.decode(aStr.charCodeAt(aIndex++));
- if (digit === -1) {
- throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
- }
-
- continuation = !!(digit & VLQ_CONTINUATION_BIT);
- digit &= VLQ_BASE_MASK;
- result = result + (digit << shift);
- shift += VLQ_BASE_SHIFT;
- } while (continuation);
-
- aOutParam.value = fromVLQSigned(result);
- aOutParam.rest = aIndex;
-};
-
-var util$5 = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-(function (exports) {
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-/**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
-function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- } else {
- throw new Error('"' + aName + '" is a required argument.');
- }
-}
-exports.getArg = getArg;
-
-var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
-var dataUrlRegexp = /^data:.+\,.+$/;
-
-function urlParse(aUrl) {
- var match = aUrl.match(urlRegexp);
- if (!match) {
- return null;
- }
- return {
- scheme: match[1],
- auth: match[2],
- host: match[3],
- port: match[4],
- path: match[5]
- };
-}
-exports.urlParse = urlParse;
-
-function urlGenerate(aParsedUrl) {
- var url = '';
- if (aParsedUrl.scheme) {
- url += aParsedUrl.scheme + ':';
- }
- url += '//';
- if (aParsedUrl.auth) {
- url += aParsedUrl.auth + '@';
- }
- if (aParsedUrl.host) {
- url += aParsedUrl.host;
- }
- if (aParsedUrl.port) {
- url += ":" + aParsedUrl.port;
- }
- if (aParsedUrl.path) {
- url += aParsedUrl.path;
- }
- return url;
-}
-exports.urlGenerate = urlGenerate;
-
-/**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consecutive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
-function normalize(aPath) {
- var path = aPath;
- var url = urlParse(aPath);
- if (url) {
- if (!url.path) {
- return aPath;
- }
- path = url.path;
- }
- var isAbsolute = exports.isAbsolute(path);
-
- var parts = path.split(/\/+/);
- for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
- part = parts[i];
- if (part === '.') {
- parts.splice(i, 1);
- } else if (part === '..') {
- up++;
- } else if (up > 0) {
- if (part === '') {
- // The first part is blank if the path is absolute. Trying to go
- // above the root is a no-op. Therefore we can remove all '..' parts
- // directly after the root.
- parts.splice(i + 1, up);
- up = 0;
- } else {
- parts.splice(i, 2);
- up--;
- }
- }
- }
- path = parts.join('/');
-
- if (path === '') {
- path = isAbsolute ? '/' : '.';
- }
-
- if (url) {
- url.path = path;
- return urlGenerate(url);
- }
- return path;
-}
-exports.normalize = normalize;
-
-/**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- * first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- * is updated with the result and aRoot is returned. Otherwise the result
- * is returned.
- * - If aPath is absolute, the result is aPath.
- * - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
-function join(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
- if (aPath === "") {
- aPath = ".";
- }
- var aPathUrl = urlParse(aPath);
- var aRootUrl = urlParse(aRoot);
- if (aRootUrl) {
- aRoot = aRootUrl.path || '/';
- }
-
- // `join(foo, '//www.example.org')`
- if (aPathUrl && !aPathUrl.scheme) {
- if (aRootUrl) {
- aPathUrl.scheme = aRootUrl.scheme;
- }
- return urlGenerate(aPathUrl);
- }
-
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
- return aPath;
- }
-
- // `join('http://', 'www.example.com')`
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
- aRootUrl.host = aPath;
- return urlGenerate(aRootUrl);
- }
-
- var joined = aPath.charAt(0) === '/'
- ? aPath
- : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
-
- if (aRootUrl) {
- aRootUrl.path = joined;
- return urlGenerate(aRootUrl);
- }
- return joined;
-}
-exports.join = join;
-
-exports.isAbsolute = function (aPath) {
- return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
-};
-
-/**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
-function relative(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
-
- aRoot = aRoot.replace(/\/$/, '');
-
- // It is possible for the path to be above the root. In this case, simply
- // checking whether the root is a prefix of the path won't work. Instead, we
- // need to remove components from the root one by one, until either we find
- // a prefix that fits, or we run out of components to remove.
- var level = 0;
- while (aPath.indexOf(aRoot + '/') !== 0) {
- var index = aRoot.lastIndexOf("/");
- if (index < 0) {
- return aPath;
- }
-
- // If the only part of the root that is left is the scheme (i.e. http://,
- // file:///, etc.), one or more slashes (/), or simply nothing at all, we
- // have exhausted all components, so the path is not relative to the root.
- aRoot = aRoot.slice(0, index);
- if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
- return aPath;
- }
-
- ++level;
- }
-
- // Make sure we add a "../" for each component we removed from the root.
- return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
-}
-exports.relative = relative;
-
-var supportsNullProto = (function () {
- var obj = Object.create(null);
- return !('__proto__' in obj);
-}());
-
-function identity (s) {
- return s;
-}
-
-/**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
-function toSetString(aStr) {
- if (isProtoString(aStr)) {
- return '$' + aStr;
- }
-
- return aStr;
-}
-exports.toSetString = supportsNullProto ? identity : toSetString;
-
-function fromSetString(aStr) {
- if (isProtoString(aStr)) {
- return aStr.slice(1);
- }
-
- return aStr;
-}
-exports.fromSetString = supportsNullProto ? identity : fromSetString;
-
-function isProtoString(s) {
- if (!s) {
- return false;
- }
-
- var length = s.length;
-
- if (length < 9 /* "__proto__".length */) {
- return false;
- }
-
- if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
- s.charCodeAt(length - 2) !== 95 /* '_' */ ||
- s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 4) !== 116 /* 't' */ ||
- s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
- s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
- s.charCodeAt(length - 8) !== 95 /* '_' */ ||
- s.charCodeAt(length - 9) !== 95 /* '_' */) {
- return false;
- }
-
- for (var i = length - 10; i >= 0; i--) {
- if (s.charCodeAt(i) !== 36 /* '$' */) {
- return false;
- }
- }
-
- return true;
-}
-
-/**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
-function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
- var cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByOriginalPositions = compareByOriginalPositions;
-
-/**
- * Comparator between two mappings with deflated source and name indices where
- * the generated positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
-function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
-
-function strcmp(aStr1, aStr2) {
- if (aStr1 === aStr2) {
- return 0;
- }
-
- if (aStr1 === null) {
- return 1; // aStr2 !== null
- }
-
- if (aStr2 === null) {
- return -1; // aStr1 !== null
- }
-
- if (aStr1 > aStr2) {
- return 1;
- }
-
- return -1;
-}
-
-/**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
-function compareByGeneratedPositionsInflated(mappingA, mappingB) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-
-/**
- * Strip any JSON XSSI avoidance prefix from the string (as documented
- * in the source maps specification), and then parse the string as
- * JSON.
- */
-function parseSourceMapInput(str) {
- return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
-}
-exports.parseSourceMapInput = parseSourceMapInput;
-
-/**
- * Compute the URL of a source given the the source root, the source's
- * URL, and the source map's URL.
- */
-function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
- sourceURL = sourceURL || '';
-
- if (sourceRoot) {
- // This follows what Chrome does.
- if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
- sourceRoot += '/';
- }
- // The spec says:
- // Line 4: An optional source root, useful for relocating source
- // files on a server or removing repeated values in the
- // “sources” entry. This value is prepended to the individual
- // entries in the “source” field.
- sourceURL = sourceRoot + sourceURL;
- }
-
- // Historically, SourceMapConsumer did not take the sourceMapURL as
- // a parameter. This mode is still somewhat supported, which is why
- // this code block is conditional. However, it's preferable to pass
- // the source map URL to SourceMapConsumer, so that this function
- // can implement the source URL resolution algorithm as outlined in
- // the spec. This block is basically the equivalent of:
- // new URL(sourceURL, sourceMapURL).toString()
- // ... except it avoids using URL, which wasn't available in the
- // older releases of node still supported by this library.
- //
- // The spec says:
- // If the sources are not absolute URLs after prepending of the
- // “sourceRoot”, the sources are resolved relative to the
- // SourceMap (like resolving script src in a html document).
- if (sourceMapURL) {
- var parsed = urlParse(sourceMapURL);
- if (!parsed) {
- throw new Error("sourceMapURL could not be parsed");
- }
- if (parsed.path) {
- // Strip the last path component, but keep the "/".
- var index = parsed.path.lastIndexOf('/');
- if (index >= 0) {
- parsed.path = parsed.path.substring(0, index + 1);
- }
- }
- sourceURL = join(urlGenerate(parsed), sourceURL);
- }
-
- return normalize(sourceURL);
-}
-exports.computeSourceURL = computeSourceURL;
-}(util$5));
-
-var arraySet = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util$4 = util$5;
-var has = Object.prototype.hasOwnProperty;
-var hasNativeMap = typeof Map !== "undefined";
-
-/**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
-function ArraySet$2() {
- this._array = [];
- this._set = hasNativeMap ? new Map() : Object.create(null);
-}
-
-/**
- * Static method for creating ArraySet instances from an existing array.
- */
-ArraySet$2.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
- var set = new ArraySet$2();
- for (var i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
-};
-
-/**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
-ArraySet$2.prototype.size = function ArraySet_size() {
- return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
-};
-
-/**
- * Add the given string to this set.
- *
- * @param String aStr
- */
-ArraySet$2.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
- var sStr = hasNativeMap ? aStr : util$4.toSetString(aStr);
- var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
- var idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- if (hasNativeMap) {
- this._set.set(aStr, idx);
- } else {
- this._set[sStr] = idx;
- }
- }
-};
-
-/**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
-ArraySet$2.prototype.has = function ArraySet_has(aStr) {
- if (hasNativeMap) {
- return this._set.has(aStr);
- } else {
- var sStr = util$4.toSetString(aStr);
- return has.call(this._set, sStr);
- }
-};
-
-/**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
-ArraySet$2.prototype.indexOf = function ArraySet_indexOf(aStr) {
- if (hasNativeMap) {
- var idx = this._set.get(aStr);
- if (idx >= 0) {
- return idx;
- }
- } else {
- var sStr = util$4.toSetString(aStr);
- if (has.call(this._set, sStr)) {
- return this._set[sStr];
- }
- }
-
- throw new Error('"' + aStr + '" is not in the set.');
-};
-
-/**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
-ArraySet$2.prototype.at = function ArraySet_at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error('No element indexed by ' + aIdx);
-};
-
-/**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
-ArraySet$2.prototype.toArray = function ArraySet_toArray() {
- return this._array.slice();
-};
-
-arraySet.ArraySet = ArraySet$2;
-
-var mappingList = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util$3 = util$5;
-
-/**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
-function generatedPositionAfter(mappingA, mappingB) {
- // Optimized for most common case
- var lineA = mappingA.generatedLine;
- var lineB = mappingB.generatedLine;
- var columnA = mappingA.generatedColumn;
- var columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
- util$3.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
-}
-
-/**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a neglibable overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
-function MappingList$1() {
- this._array = [];
- this._sorted = true;
- // Serves as infimum
- this._last = {generatedLine: -1, generatedColumn: 0};
-}
-
-/**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
-MappingList$1.prototype.unsortedForEach =
- function MappingList_forEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- };
-
-/**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
-MappingList$1.prototype.add = function MappingList_add(aMapping) {
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
-};
-
-/**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
-MappingList$1.prototype.toArray = function MappingList_toArray() {
- if (!this._sorted) {
- this._array.sort(util$3.compareByGeneratedPositionsInflated);
- this._sorted = true;
- }
- return this._array;
-};
-
-mappingList.MappingList = MappingList$1;
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var base64VLQ$1 = base64Vlq;
-var util$2 = util$5;
-var ArraySet$1 = arraySet.ArraySet;
-var MappingList = mappingList.MappingList;
-
-/**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- * - file: The filename of the generated source.
- * - sourceRoot: A root for all relative URLs in this source map.
- */
-function SourceMapGenerator$1(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util$2.getArg(aArgs, 'file', null);
- this._sourceRoot = util$2.getArg(aArgs, 'sourceRoot', null);
- this._skipValidation = util$2.getArg(aArgs, 'skipValidation', false);
- this._sources = new ArraySet$1();
- this._names = new ArraySet$1();
- this._mappings = new MappingList();
- this._sourcesContents = null;
-}
-
-SourceMapGenerator$1.prototype._version = 3;
-
-/**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
-SourceMapGenerator$1.fromSourceMap =
- function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
- var sourceRoot = aSourceMapConsumer.sourceRoot;
- var generator = new SourceMapGenerator$1({
- file: aSourceMapConsumer.file,
- sourceRoot: sourceRoot
- });
- aSourceMapConsumer.eachMapping(function (mapping) {
- var newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
-
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util$2.relative(sourceRoot, newMapping.source);
- }
-
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
-
- if (mapping.name != null) {
- newMapping.name = mapping.name;
- }
- }
-
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var sourceRelative = sourceFile;
- if (sourceRoot !== null) {
- sourceRelative = util$2.relative(sourceRoot, sourceFile);
- }
-
- if (!generator._sources.has(sourceRelative)) {
- generator._sources.add(sourceRelative);
- }
-
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
- }
- });
- return generator;
- };
-
-/**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- * - generated: An object with the generated line and column positions.
- * - original: An object with the original line and column positions.
- * - source: The original source file (relative to the sourceRoot).
- * - name: An optional original token name for this mapping.
- */
-SourceMapGenerator$1.prototype.addMapping =
- function SourceMapGenerator_addMapping(aArgs) {
- var generated = util$2.getArg(aArgs, 'generated');
- var original = util$2.getArg(aArgs, 'original', null);
- var source = util$2.getArg(aArgs, 'source', null);
- var name = util$2.getArg(aArgs, 'name', null);
-
- if (!this._skipValidation) {
- this._validateMapping(generated, original, source, name);
- }
-
- if (source != null) {
- source = String(source);
- if (!this._sources.has(source)) {
- this._sources.add(source);
- }
- }
-
- if (name != null) {
- name = String(name);
- if (!this._names.has(name)) {
- this._names.add(name);
- }
- }
-
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source: source,
- name: name
- });
- };
-
-/**
- * Set the source content for a source file.
- */
-SourceMapGenerator$1.prototype.setSourceContent =
- function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
- var source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util$2.relative(this._sourceRoot, source);
- }
-
- if (aSourceContent != null) {
- // Add the source content to the _sourcesContents map.
- // Create a new _sourcesContents map if the property is null.
- if (!this._sourcesContents) {
- this._sourcesContents = Object.create(null);
- }
- this._sourcesContents[util$2.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- // Remove the source file from the _sourcesContents map.
- // If the _sourcesContents map is empty, set the property to null.
- delete this._sourcesContents[util$2.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
- }
- };
-
-/**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- * If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- * to be applied. If relative, it is relative to the SourceMapConsumer.
- * This parameter is needed when the two source maps aren't in the same
- * directory, and the source map to be applied contains relative source
- * paths. If so, those relative source paths need to be rewritten
- * relative to the SourceMapGenerator.
- */
-SourceMapGenerator$1.prototype.applySourceMap =
- function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- var sourceFile = aSourceFile;
- // If aSourceFile is omitted, we will use the file property of the SourceMap
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
- 'or the source map\'s "file" property. Both were omitted.'
- );
- }
- sourceFile = aSourceMapConsumer.file;
- }
- var sourceRoot = this._sourceRoot;
- // Make "sourceFile" relative if an absolute Url is passed.
- if (sourceRoot != null) {
- sourceFile = util$2.relative(sourceRoot, sourceFile);
- }
- // Applying the SourceMap can add and remove items from the sources and
- // the names array.
- var newSources = new ArraySet$1();
- var newNames = new ArraySet$1();
-
- // Find mappings for the "sourceFile"
- this._mappings.unsortedForEach(function (mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- // Check if it can be mapped by the source map, then update the mapping.
- var original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- // Copy mapping
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util$2.join(aSourceMapPath, mapping.source);
- }
- if (sourceRoot != null) {
- mapping.source = util$2.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
- }
- }
- }
-
- var source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
-
- var name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
-
- }, this);
- this._sources = newSources;
- this._names = newNames;
-
- // Copy sourcesContents of applied map.
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aSourceMapPath != null) {
- sourceFile = util$2.join(aSourceMapPath, sourceFile);
- }
- if (sourceRoot != null) {
- sourceFile = util$2.relative(sourceRoot, sourceFile);
- }
- this.setSourceContent(sourceFile, content);
- }
- }, this);
- };
-
-/**
- * A mapping can have one of the three levels of data:
- *
- * 1. Just the generated position.
- * 2. The Generated position, original position, and original source.
- * 3. Generated and original position, original source, as well as a name
- * token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
-SourceMapGenerator$1.prototype._validateMapping =
- function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
- aName) {
- // When aOriginal is truthy but has empty values for .line and .column,
- // it is most likely a programmer error. In this case we throw a very
- // specific error message to try to guide them the right way.
- // For example: https://github.com/Polymer/polymer-bundler/pull/519
- if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
- throw new Error(
- 'original.line and original.column are not numbers -- you probably meant to omit ' +
- 'the original mapping entirely and only map the generated position. If so, pass ' +
- 'null for the original mapping instead of an object with empty or null values.'
- );
- }
-
- if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aGenerated.line > 0 && aGenerated.column >= 0
- && !aOriginal && !aSource && !aName) {
- // Case 1.
- return;
- }
- else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aOriginal && 'line' in aOriginal && 'column' in aOriginal
- && aGenerated.line > 0 && aGenerated.column >= 0
- && aOriginal.line > 0 && aOriginal.column >= 0
- && aSource) {
- // Cases 2 and 3.
- return;
- }
- else {
- throw new Error('Invalid mapping: ' + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- }));
- }
- };
-
-/**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
-SourceMapGenerator$1.prototype._serializeMappings =
- function SourceMapGenerator_serializeMappings() {
- var previousGeneratedColumn = 0;
- var previousGeneratedLine = 1;
- var previousOriginalColumn = 0;
- var previousOriginalLine = 0;
- var previousName = 0;
- var previousSource = 0;
- var result = '';
- var next;
- var mapping;
- var nameIdx;
- var sourceIdx;
-
- var mappings = this._mappings.toArray();
- for (var i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
- next = '';
-
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- next += ';';
- previousGeneratedLine++;
- }
- }
- else {
- if (i > 0) {
- if (!util$2.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- next += ',';
- }
- }
-
- next += base64VLQ$1.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (mapping.source != null) {
- sourceIdx = this._sources.indexOf(mapping.source);
- next += base64VLQ$1.encode(sourceIdx - previousSource);
- previousSource = sourceIdx;
-
- // lines are stored 0-based in SourceMap spec version 3
- next += base64VLQ$1.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- next += base64VLQ$1.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
-
- if (mapping.name != null) {
- nameIdx = this._names.indexOf(mapping.name);
- next += base64VLQ$1.encode(nameIdx - previousName);
- previousName = nameIdx;
- }
- }
-
- result += next;
- }
-
- return result;
- };
-
-SourceMapGenerator$1.prototype._generateSourcesContent =
- function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function (source) {
- if (!this._sourcesContents) {
- return null;
- }
- if (aSourceRoot != null) {
- source = util$2.relative(aSourceRoot, source);
- }
- var key = util$2.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
- ? this._sourcesContents[key]
- : null;
- }, this);
- };
-
-/**
- * Externalize the source map.
- */
-SourceMapGenerator$1.prototype.toJSON =
- function SourceMapGenerator_toJSON() {
- var map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
- }
-
- return map;
- };
-
-/**
- * Render the source map being generated to a string.
- */
-SourceMapGenerator$1.prototype.toString =
- function SourceMapGenerator_toString() {
- return JSON.stringify(this.toJSON());
- };
-
-sourceMapGenerator.SourceMapGenerator = SourceMapGenerator$1;
-
-var sourceMapConsumer = {};
-
-var binarySearch$1 = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-(function (exports) {
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-exports.GREATEST_LOWER_BOUND = 1;
-exports.LEAST_UPPER_BOUND = 2;
-
-/**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- */
-function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
- // This function terminates when one of the following is true:
- //
- // 1. We find the exact element we are looking for.
- //
- // 2. We did not find the exact element, but we can return the index of
- // the next-closest element.
- //
- // 3. We did not find the exact element, and there is no next-closest
- // element than the one we are searching for, so we return -1.
- var mid = Math.floor((aHigh - aLow) / 2) + aLow;
- var cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- // Found the element we are looking for.
- return mid;
- }
- else if (cmp > 0) {
- // Our needle is greater than aHaystack[mid].
- if (aHigh - mid > 1) {
- // The element is in the upper half.
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // The exact needle element was not found in this haystack. Determine if
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return aHigh < aHaystack.length ? aHigh : -1;
- } else {
- return mid;
- }
- }
- else {
- // Our needle is less than aHaystack[mid].
- if (mid - aLow > 1) {
- // The element is in the lower half.
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return mid;
- } else {
- return aLow < 0 ? -1 : aLow;
- }
- }
-}
-
-/**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- * array and returns -1, 0, or 1 depending on whether the needle is less
- * than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
-exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
- if (aHaystack.length === 0) {
- return -1;
- }
-
- var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
- aCompare, aBias || exports.GREATEST_LOWER_BOUND);
- if (index < 0) {
- return -1;
- }
-
- // We have found either the exact element, or the next-closest element than
- // the one we are searching for. However, there may be more than one such
- // element. Make sure we always return the smallest of these.
- while (index - 1 >= 0) {
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
- break;
- }
- --index;
- }
-
- return index;
-};
-}(binarySearch$1));
-
-var quickSort$1 = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-// It turns out that some (most?) JavaScript engines don't self-host
-// `Array.prototype.sort`. This makes sense because C++ will likely remain
-// faster than JS when doing raw CPU-intensive sorting. However, when using a
-// custom comparator function, calling back and forth between the VM's C++ and
-// JIT'd JS is rather slow *and* loses JIT type information, resulting in
-// worse generated code for the comparator function than would be optimal. In
-// fact, when sorting with a comparator, these costs outweigh the benefits of
-// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
-// a ~3500ms mean speed-up in `bench/bench.html`.
-
-/**
- * Swap the elements indexed by `x` and `y` in the array `ary`.
- *
- * @param {Array} ary
- * The array.
- * @param {Number} x
- * The index of the first item.
- * @param {Number} y
- * The index of the second item.
- */
-function swap(ary, x, y) {
- var temp = ary[x];
- ary[x] = ary[y];
- ary[y] = temp;
-}
-
-/**
- * Returns a random integer within the range `low .. high` inclusive.
- *
- * @param {Number} low
- * The lower bound on the range.
- * @param {Number} high
- * The upper bound on the range.
- */
-function randomIntInRange(low, high) {
- return Math.round(low + (Math.random() * (high - low)));
-}
-
-/**
- * The Quick Sort algorithm.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- * @param {Number} p
- * Start index of the array
- * @param {Number} r
- * End index of the array
- */
-function doQuickSort(ary, comparator, p, r) {
- // If our lower bound is less than our upper bound, we (1) partition the
- // array into two pieces and (2) recurse on each half. If it is not, this is
- // the empty array and our base case.
-
- if (p < r) {
- // (1) Partitioning.
- //
- // The partitioning chooses a pivot between `p` and `r` and moves all
- // elements that are less than or equal to the pivot to the before it, and
- // all the elements that are greater than it after it. The effect is that
- // once partition is done, the pivot is in the exact place it will be when
- // the array is put in sorted order, and it will not need to be moved
- // again. This runs in O(n) time.
-
- // Always choose a random pivot so that an input array which is reverse
- // sorted does not cause O(n^2) running time.
- var pivotIndex = randomIntInRange(p, r);
- var i = p - 1;
-
- swap(ary, pivotIndex, r);
- var pivot = ary[r];
-
- // Immediately after `j` is incremented in this loop, the following hold
- // true:
- //
- // * Every element in `ary[p .. i]` is less than or equal to the pivot.
- //
- // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
- for (var j = p; j < r; j++) {
- if (comparator(ary[j], pivot) <= 0) {
- i += 1;
- swap(ary, i, j);
- }
- }
-
- swap(ary, i + 1, j);
- var q = i + 1;
-
- // (2) Recurse on each half.
-
- doQuickSort(ary, comparator, p, q - 1);
- doQuickSort(ary, comparator, q + 1, r);
- }
-}
-
-/**
- * Sort the given array in-place with the given comparator function.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- */
-quickSort$1.quickSort = function (ary, comparator) {
- doQuickSort(ary, comparator, 0, ary.length - 1);
-};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util$1 = util$5;
-var binarySearch = binarySearch$1;
-var ArraySet = arraySet.ArraySet;
-var base64VLQ = base64Vlq;
-var quickSort = quickSort$1.quickSort;
-
-function SourceMapConsumer$1(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util$1.parseSourceMapInput(aSourceMap);
- }
-
- return sourceMap.sections != null
- ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
- : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
-}
-
-SourceMapConsumer$1.fromSourceMap = function(aSourceMap, aSourceMapURL) {
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
-};
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-SourceMapConsumer$1.prototype._version = 3;
-
-// `__generatedMappings` and `__originalMappings` are arrays that hold the
-// parsed mapping coordinates from the source map's "mappings" attribute. They
-// are lazily instantiated, accessed via the `_generatedMappings` and
-// `_originalMappings` getters respectively, and we only parse the mappings
-// and create these arrays once queried for a source location. We jump through
-// these hoops because there can be many thousands of mappings, and parsing
-// them is expensive, so we only want to do it if we must.
-//
-// Each object in the arrays is of the form:
-//
-// {
-// generatedLine: The line number in the generated code,
-// generatedColumn: The column number in the generated code,
-// source: The path to the original source file that generated this
-// chunk of code,
-// originalLine: The line number in the original source that
-// corresponds to this chunk of generated code,
-// originalColumn: The column number in the original source that
-// corresponds to this chunk of generated code,
-// name: The name of the original symbol which generated this chunk of
-// code.
-// }
-//
-// All properties except for `generatedLine` and `generatedColumn` can be
-// `null`.
-//
-// `_generatedMappings` is ordered by the generated positions.
-//
-// `_originalMappings` is ordered by the original positions.
-
-SourceMapConsumer$1.prototype.__generatedMappings = null;
-Object.defineProperty(SourceMapConsumer$1.prototype, '_generatedMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__generatedMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__generatedMappings;
- }
-});
-
-SourceMapConsumer$1.prototype.__originalMappings = null;
-Object.defineProperty(SourceMapConsumer$1.prototype, '_originalMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__originalMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__originalMappings;
- }
-});
-
-SourceMapConsumer$1.prototype._charIsMappingSeparator =
- function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
- var c = aStr.charAt(index);
- return c === ";" || c === ",";
- };
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-SourceMapConsumer$1.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- throw new Error("Subclasses must implement _parseMappings");
- };
-
-SourceMapConsumer$1.GENERATED_ORDER = 1;
-SourceMapConsumer$1.ORIGINAL_ORDER = 2;
-
-SourceMapConsumer$1.GREATEST_LOWER_BOUND = 1;
-SourceMapConsumer$1.LEAST_UPPER_BOUND = 2;
-
-/**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- * The function that is called with each mapping.
- * @param Object aContext
- * Optional. If specified, this object will be the value of `this` every
- * time that `aCallback` is called.
- * @param aOrder
- * Either `SourceMapConsumer.GENERATED_ORDER` or
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- * iterate over the mappings sorted by the generated file's line/column
- * order or the original's source/line/column order, respectively. Defaults to
- * `SourceMapConsumer.GENERATED_ORDER`.
- */
-SourceMapConsumer$1.prototype.eachMapping =
- function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
- var context = aContext || null;
- var order = aOrder || SourceMapConsumer$1.GENERATED_ORDER;
-
- var mappings;
- switch (order) {
- case SourceMapConsumer$1.GENERATED_ORDER:
- mappings = this._generatedMappings;
- break;
- case SourceMapConsumer$1.ORIGINAL_ORDER:
- mappings = this._originalMappings;
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
-
- var sourceRoot = this.sourceRoot;
- mappings.map(function (mapping) {
- var source = mapping.source === null ? null : this._sources.at(mapping.source);
- source = util$1.computeSourceURL(sourceRoot, source, this._sourceMapURL);
- return {
- source: source,
- generatedLine: mapping.generatedLine,
- generatedColumn: mapping.generatedColumn,
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: mapping.name === null ? null : this._names.at(mapping.name)
- };
- }, this).forEach(aCallback, context);
- };
-
-/**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number is 1-based.
- * - column: Optional. the column number in the original source.
- * The column number is 0-based.
- *
- * and an array of objects is returned, each with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
-SourceMapConsumer$1.prototype.allGeneratedPositionsFor =
- function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
- var line = util$1.getArg(aArgs, 'line');
-
- // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
- // returns the index of the closest mapping less than the needle. By
- // setting needle.originalColumn to 0, we thus find the last mapping for
- // the given line, provided such a mapping exists.
- var needle = {
- source: util$1.getArg(aArgs, 'source'),
- originalLine: line,
- originalColumn: util$1.getArg(aArgs, 'column', 0)
- };
-
- needle.source = this._findSourceIndex(needle.source);
- if (needle.source < 0) {
- return [];
- }
-
- var mappings = [];
-
- var index = this._findMapping(needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util$1.compareByOriginalPositions,
- binarySearch.LEAST_UPPER_BOUND);
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (aArgs.column === undefined) {
- var originalLine = mapping.originalLine;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we found. Since
- // mappings are sorted, this is guaranteed to find all mappings for
- // the line we found.
- while (mapping && mapping.originalLine === originalLine) {
- mappings.push({
- line: util$1.getArg(mapping, 'generatedLine', null),
- column: util$1.getArg(mapping, 'generatedColumn', null),
- lastColumn: util$1.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- } else {
- var originalColumn = mapping.originalColumn;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we were searching for.
- // Since mappings are sorted, this is guaranteed to find all mappings for
- // the line we are searching for.
- while (mapping &&
- mapping.originalLine === line &&
- mapping.originalColumn == originalColumn) {
- mappings.push({
- line: util$1.getArg(mapping, 'generatedLine', null),
- column: util$1.getArg(mapping, 'generatedColumn', null),
- lastColumn: util$1.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- }
- }
-
- return mappings;
- };
-
-sourceMapConsumer.SourceMapConsumer = SourceMapConsumer$1;
-
-/**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The first parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - sources: An array of URLs to the original source files.
- * - names: An array of identifiers which can be referrenced by individual mappings.
- * - sourceRoot: Optional. The URL root from which all sources are relative.
- * - sourcesContent: Optional. An array of contents of the original source files.
- * - mappings: A string of base64 VLQs which contain the actual mappings.
- * - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- * {
- * version : 3,
- * file: "out.js",
- * sourceRoot : "",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AA,AB;;ABCDE;"
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
-function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util$1.parseSourceMapInput(aSourceMap);
- }
-
- var version = util$1.getArg(sourceMap, 'version');
- var sources = util$1.getArg(sourceMap, 'sources');
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
- // requires the array) to play nice here.
- var names = util$1.getArg(sourceMap, 'names', []);
- var sourceRoot = util$1.getArg(sourceMap, 'sourceRoot', null);
- var sourcesContent = util$1.getArg(sourceMap, 'sourcesContent', null);
- var mappings = util$1.getArg(sourceMap, 'mappings');
- var file = util$1.getArg(sourceMap, 'file', null);
-
- // Once again, Sass deviates from the spec and supplies the version as a
- // string rather than a number, so we use loose equality checking here.
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- if (sourceRoot) {
- sourceRoot = util$1.normalize(sourceRoot);
- }
-
- sources = sources
- .map(String)
- // Some source maps produce relative source paths like "./foo.js" instead of
- // "foo.js". Normalize these first so that future comparisons will succeed.
- // See bugzil.la/1090768.
- .map(util$1.normalize)
- // Always ensure that absolute sources are internally stored relative to
- // the source root, if the source root is absolute. Not doing this would
- // be particularly problematic when the source root is a prefix of the
- // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
- .map(function (source) {
- return sourceRoot && util$1.isAbsolute(sourceRoot) && util$1.isAbsolute(source)
- ? util$1.relative(sourceRoot, source)
- : source;
- });
-
- // Pass `true` below to allow duplicate names and sources. While source maps
- // are intended to be compressed and deduplicated, the TypeScript compiler
- // sometimes generates source maps with duplicates in them. See Github issue
- // #72 and bugzil.la/889492.
- this._names = ArraySet.fromArray(names.map(String), true);
- this._sources = ArraySet.fromArray(sources, true);
-
- this._absoluteSources = this._sources.toArray().map(function (s) {
- return util$1.computeSourceURL(sourceRoot, s, aSourceMapURL);
- });
-
- this.sourceRoot = sourceRoot;
- this.sourcesContent = sourcesContent;
- this._mappings = mappings;
- this._sourceMapURL = aSourceMapURL;
- this.file = file;
-}
-
-BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer$1.prototype);
-BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer$1;
-
-/**
- * Utility function to find the index of a source. Returns -1 if not
- * found.
- */
-BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util$1.relative(this.sourceRoot, relativeSource);
- }
-
- if (this._sources.has(relativeSource)) {
- return this._sources.indexOf(relativeSource);
- }
-
- // Maybe aSource is an absolute URL as returned by |sources|. In
- // this case we can't simply undo the transform.
- var i;
- for (i = 0; i < this._absoluteSources.length; ++i) {
- if (this._absoluteSources[i] == aSource) {
- return i;
- }
- }
-
- return -1;
-};
-
-/**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- * The source map that will be consumed.
- * @param String aSourceMapURL
- * The URL at which the source map can be found (optional)
- * @returns BasicSourceMapConsumer
- */
-BasicSourceMapConsumer.fromSourceMap =
- function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
- var smc = Object.create(BasicSourceMapConsumer.prototype);
-
- var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
- var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
- smc.sourceRoot = aSourceMap._sourceRoot;
- smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
- smc.sourceRoot);
- smc.file = aSourceMap._file;
- smc._sourceMapURL = aSourceMapURL;
- smc._absoluteSources = smc._sources.toArray().map(function (s) {
- return util$1.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
- });
-
- // Because we are modifying the entries (by converting string sources and
- // names to indices into the sources and names ArraySets), we have to make
- // a copy of the entry or else bad things happen. Shared mutable state
- // strikes again! See github issue #191.
-
- var generatedMappings = aSourceMap._mappings.toArray().slice();
- var destGeneratedMappings = smc.__generatedMappings = [];
- var destOriginalMappings = smc.__originalMappings = [];
-
- for (var i = 0, length = generatedMappings.length; i < length; i++) {
- var srcMapping = generatedMappings[i];
- var destMapping = new Mapping;
- destMapping.generatedLine = srcMapping.generatedLine;
- destMapping.generatedColumn = srcMapping.generatedColumn;
-
- if (srcMapping.source) {
- destMapping.source = sources.indexOf(srcMapping.source);
- destMapping.originalLine = srcMapping.originalLine;
- destMapping.originalColumn = srcMapping.originalColumn;
-
- if (srcMapping.name) {
- destMapping.name = names.indexOf(srcMapping.name);
- }
-
- destOriginalMappings.push(destMapping);
- }
-
- destGeneratedMappings.push(destMapping);
- }
-
- quickSort(smc.__originalMappings, util$1.compareByOriginalPositions);
-
- return smc;
- };
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-BasicSourceMapConsumer.prototype._version = 3;
-
-/**
- * The list of original sources.
- */
-Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
- get: function () {
- return this._absoluteSources.slice();
- }
-});
-
-/**
- * Provide the JIT with a nice shape / hidden class.
- */
-function Mapping() {
- this.generatedLine = 0;
- this.generatedColumn = 0;
- this.source = null;
- this.originalLine = null;
- this.originalColumn = null;
- this.name = null;
-}
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-BasicSourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- var generatedLine = 1;
- var previousGeneratedColumn = 0;
- var previousOriginalLine = 0;
- var previousOriginalColumn = 0;
- var previousSource = 0;
- var previousName = 0;
- var length = aStr.length;
- var index = 0;
- var cachedSegments = {};
- var temp = {};
- var originalMappings = [];
- var generatedMappings = [];
- var mapping, str, segment, end, value;
-
- while (index < length) {
- if (aStr.charAt(index) === ';') {
- generatedLine++;
- index++;
- previousGeneratedColumn = 0;
- }
- else if (aStr.charAt(index) === ',') {
- index++;
- }
- else {
- mapping = new Mapping();
- mapping.generatedLine = generatedLine;
-
- // Because each offset is encoded relative to the previous one,
- // many segments often have the same encoding. We can exploit this
- // fact by caching the parsed variable length fields of each segment,
- // allowing us to avoid a second parse if we encounter the same
- // segment again.
- for (end = index; end < length; end++) {
- if (this._charIsMappingSeparator(aStr, end)) {
- break;
- }
- }
- str = aStr.slice(index, end);
-
- segment = cachedSegments[str];
- if (segment) {
- index += str.length;
- } else {
- segment = [];
- while (index < end) {
- base64VLQ.decode(aStr, index, temp);
- value = temp.value;
- index = temp.rest;
- segment.push(value);
- }
-
- if (segment.length === 2) {
- throw new Error('Found a source, but no line and column');
- }
-
- if (segment.length === 3) {
- throw new Error('Found a source and line, but no column');
- }
-
- cachedSegments[str] = segment;
- }
-
- // Generated column.
- mapping.generatedColumn = previousGeneratedColumn + segment[0];
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (segment.length > 1) {
- // Original source.
- mapping.source = previousSource + segment[1];
- previousSource += segment[1];
-
- // Original line.
- mapping.originalLine = previousOriginalLine + segment[2];
- previousOriginalLine = mapping.originalLine;
- // Lines are stored 0-based
- mapping.originalLine += 1;
-
- // Original column.
- mapping.originalColumn = previousOriginalColumn + segment[3];
- previousOriginalColumn = mapping.originalColumn;
-
- if (segment.length > 4) {
- // Original name.
- mapping.name = previousName + segment[4];
- previousName += segment[4];
- }
- }
-
- generatedMappings.push(mapping);
- if (typeof mapping.originalLine === 'number') {
- originalMappings.push(mapping);
- }
- }
- }
-
- quickSort(generatedMappings, util$1.compareByGeneratedPositionsDeflated);
- this.__generatedMappings = generatedMappings;
-
- quickSort(originalMappings, util$1.compareByOriginalPositions);
- this.__originalMappings = originalMappings;
- };
-
-/**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
-BasicSourceMapConsumer.prototype._findMapping =
- function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
- aColumnName, aComparator, aBias) {
- // To return the position we are searching for, we must first find the
- // mapping for the given position and then return the opposite position it
- // points to. Because the mappings are sorted, we can use binary search to
- // find the best mapping.
-
- if (aNeedle[aLineName] <= 0) {
- throw new TypeError('Line must be greater than or equal to 1, got '
- + aNeedle[aLineName]);
- }
- if (aNeedle[aColumnName] < 0) {
- throw new TypeError('Column must be greater than or equal to 0, got '
- + aNeedle[aColumnName]);
- }
-
- return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
- };
-
-/**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
-BasicSourceMapConsumer.prototype.computeColumnSpans =
- function SourceMapConsumer_computeColumnSpans() {
- for (var index = 0; index < this._generatedMappings.length; ++index) {
- var mapping = this._generatedMappings[index];
-
- // Mappings do not contain a field for the last generated columnt. We
- // can come up with an optimistic estimate, however, by assuming that
- // mappings are contiguous (i.e. given two consecutive mappings, the
- // first mapping ends where the second one starts).
- if (index + 1 < this._generatedMappings.length) {
- var nextMapping = this._generatedMappings[index + 1];
-
- if (mapping.generatedLine === nextMapping.generatedLine) {
- mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
- continue;
- }
- }
-
- // The last mapping for each line spans the entire line.
- mapping.lastGeneratedColumn = Infinity;
- }
- };
-
-/**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
-BasicSourceMapConsumer.prototype.originalPositionFor =
- function SourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util$1.getArg(aArgs, 'line'),
- generatedColumn: util$1.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._generatedMappings,
- "generatedLine",
- "generatedColumn",
- util$1.compareByGeneratedPositionsDeflated,
- util$1.getArg(aArgs, 'bias', SourceMapConsumer$1.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._generatedMappings[index];
-
- if (mapping.generatedLine === needle.generatedLine) {
- var source = util$1.getArg(mapping, 'source', null);
- if (source !== null) {
- source = this._sources.at(source);
- source = util$1.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
- }
- var name = util$1.getArg(mapping, 'name', null);
- if (name !== null) {
- name = this._names.at(name);
- }
- return {
- source: source,
- line: util$1.getArg(mapping, 'originalLine', null),
- column: util$1.getArg(mapping, 'originalColumn', null),
- name: name
- };
- }
- }
-
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- };
-
-/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
-BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
- function BasicSourceMapConsumer_hasContentsOfAllSources() {
- if (!this.sourcesContent) {
- return false;
- }
- return this.sourcesContent.length >= this._sources.size() &&
- !this.sourcesContent.some(function (sc) { return sc == null; });
- };
-
-/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
-BasicSourceMapConsumer.prototype.sourceContentFor =
- function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- if (!this.sourcesContent) {
- return null;
- }
-
- var index = this._findSourceIndex(aSource);
- if (index >= 0) {
- return this.sourcesContent[index];
- }
-
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util$1.relative(this.sourceRoot, relativeSource);
- }
-
- var url;
- if (this.sourceRoot != null
- && (url = util$1.urlParse(this.sourceRoot))) {
- // XXX: file:// URIs and absolute paths lead to unexpected behavior for
- // many users. We can help them out when they expect file:// URIs to
- // behave like it would if they were running a local HTTP server. See
- // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
- var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
- if (url.scheme == "file"
- && this._sources.has(fileUriAbsPath)) {
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
- }
-
- if ((!url.path || url.path == "/")
- && this._sources.has("/" + relativeSource)) {
- return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
- }
- }
-
- // This function is used recursively from
- // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
- // don't want to throw if we can't find the source - we just want to
- // return null, so we provide a flag to exit gracefully.
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + relativeSource + '" is not in the SourceMap.');
- }
- };
-
-/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
-BasicSourceMapConsumer.prototype.generatedPositionFor =
- function SourceMapConsumer_generatedPositionFor(aArgs) {
- var source = util$1.getArg(aArgs, 'source');
- source = this._findSourceIndex(source);
- if (source < 0) {
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
-
- var needle = {
- source: source,
- originalLine: util$1.getArg(aArgs, 'line'),
- originalColumn: util$1.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util$1.compareByOriginalPositions,
- util$1.getArg(aArgs, 'bias', SourceMapConsumer$1.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (mapping.source === needle.source) {
- return {
- line: util$1.getArg(mapping, 'generatedLine', null),
- column: util$1.getArg(mapping, 'generatedColumn', null),
- lastColumn: util$1.getArg(mapping, 'lastGeneratedColumn', null)
- };
- }
- }
-
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- };
-
-sourceMapConsumer.BasicSourceMapConsumer = BasicSourceMapConsumer;
-
-/**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The first parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - file: Optional. The generated file this source map is associated with.
- * - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- * - offset: The offset into the original specified at which this section
- * begins to apply, defined as an object with a "line" and "column"
- * field.
- * - map: A source map definition. This source map could also be indexed,
- * but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- * {
- * version : 3,
- * file: "app.js",
- * sections: [{
- * offset: {line:100, column:10},
- * map: {
- * version : 3,
- * file: "section.js",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AAAA,E;;ABCDE;"
- * }
- * }],
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
-function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util$1.parseSourceMapInput(aSourceMap);
- }
-
- var version = util$1.getArg(sourceMap, 'version');
- var sections = util$1.getArg(sourceMap, 'sections');
-
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- this._sources = new ArraySet();
- this._names = new ArraySet();
-
- var lastOffset = {
- line: -1,
- column: 0
- };
- this._sections = sections.map(function (s) {
- if (s.url) {
- // The url field will require support for asynchronicity.
- // See https://github.com/mozilla/source-map/issues/16
- throw new Error('Support for url field in sections not implemented.');
- }
- var offset = util$1.getArg(s, 'offset');
- var offsetLine = util$1.getArg(offset, 'line');
- var offsetColumn = util$1.getArg(offset, 'column');
-
- if (offsetLine < lastOffset.line ||
- (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
- throw new Error('Section offsets must be ordered and non-overlapping.');
- }
- lastOffset = offset;
-
- return {
- generatedOffset: {
- // The offset fields are 0-based, but we use 1-based indices when
- // encoding/decoding from VLQ.
- generatedLine: offsetLine + 1,
- generatedColumn: offsetColumn + 1
- },
- consumer: new SourceMapConsumer$1(util$1.getArg(s, 'map'), aSourceMapURL)
- }
- });
-}
-
-IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer$1.prototype);
-IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer$1;
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-IndexedSourceMapConsumer.prototype._version = 3;
-
-/**
- * The list of original sources.
- */
-Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
- get: function () {
- var sources = [];
- for (var i = 0; i < this._sections.length; i++) {
- for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
- sources.push(this._sections[i].consumer.sources[j]);
- }
- }
- return sources;
- }
-});
-
-/**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
-IndexedSourceMapConsumer.prototype.originalPositionFor =
- function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util$1.getArg(aArgs, 'line'),
- generatedColumn: util$1.getArg(aArgs, 'column')
- };
-
- // Find the section containing the generated position we're trying to map
- // to an original position.
- var sectionIndex = binarySearch.search(needle, this._sections,
- function(needle, section) {
- var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
- if (cmp) {
- return cmp;
- }
-
- return (needle.generatedColumn -
- section.generatedOffset.generatedColumn);
- });
- var section = this._sections[sectionIndex];
-
- if (!section) {
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
-
- return section.consumer.originalPositionFor({
- line: needle.generatedLine -
- (section.generatedOffset.generatedLine - 1),
- column: needle.generatedColumn -
- (section.generatedOffset.generatedLine === needle.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- bias: aArgs.bias
- });
- };
-
-/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
-IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
- function IndexedSourceMapConsumer_hasContentsOfAllSources() {
- return this._sections.every(function (s) {
- return s.consumer.hasContentsOfAllSources();
- });
- };
-
-/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
-IndexedSourceMapConsumer.prototype.sourceContentFor =
- function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- var content = section.consumer.sourceContentFor(aSource, true);
- if (content) {
- return content;
- }
- }
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + aSource + '" is not in the SourceMap.');
- }
- };
-
-/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
-IndexedSourceMapConsumer.prototype.generatedPositionFor =
- function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- // Only consider this section if the requested source is in the list of
- // sources of the consumer.
- if (section.consumer._findSourceIndex(util$1.getArg(aArgs, 'source')) === -1) {
- continue;
- }
- var generatedPosition = section.consumer.generatedPositionFor(aArgs);
- if (generatedPosition) {
- var ret = {
- line: generatedPosition.line +
- (section.generatedOffset.generatedLine - 1),
- column: generatedPosition.column +
- (section.generatedOffset.generatedLine === generatedPosition.line
- ? section.generatedOffset.generatedColumn - 1
- : 0)
- };
- return ret;
- }
- }
-
- return {
- line: null,
- column: null
- };
- };
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-IndexedSourceMapConsumer.prototype._parseMappings =
- function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- this.__generatedMappings = [];
- this.__originalMappings = [];
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
- var sectionMappings = section.consumer._generatedMappings;
- for (var j = 0; j < sectionMappings.length; j++) {
- var mapping = sectionMappings[j];
-
- var source = section.consumer._sources.at(mapping.source);
- source = util$1.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
- this._sources.add(source);
- source = this._sources.indexOf(source);
-
- var name = null;
- if (mapping.name) {
- name = section.consumer._names.at(mapping.name);
- this._names.add(name);
- name = this._names.indexOf(name);
- }
-
- // The mappings coming from the consumer for the section have
- // generated positions relative to the start of the section, so we
- // need to offset them to be relative to the start of the concatenated
- // generated file.
- var adjustedMapping = {
- source: source,
- generatedLine: mapping.generatedLine +
- (section.generatedOffset.generatedLine - 1),
- generatedColumn: mapping.generatedColumn +
- (section.generatedOffset.generatedLine === mapping.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: name
- };
-
- this.__generatedMappings.push(adjustedMapping);
- if (typeof adjustedMapping.originalLine === 'number') {
- this.__originalMappings.push(adjustedMapping);
- }
- }
- }
-
- quickSort(this.__generatedMappings, util$1.compareByGeneratedPositionsDeflated);
- quickSort(this.__originalMappings, util$1.compareByOriginalPositions);
- };
-
-sourceMapConsumer.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var SourceMapGenerator = sourceMapGenerator.SourceMapGenerator;
-var util = util$5;
-
-// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
-// operating systems these days (capturing the result).
-var REGEX_NEWLINE = /(\r?\n)/;
-
-// Newline character code for charCodeAt() comparisons
-var NEWLINE_CODE = 10;
-
-// Private symbol for identifying `SourceNode`s when multiple versions of
-// the source-map library are loaded. This MUST NOT CHANGE across
-// versions!
-var isSourceNode = "$$$isSourceNode$$$";
-
-/**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- * generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
-function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null) this.add(aChunks);
-}
-
-/**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- * SourceMapConsumer should be relative to.
- */
-SourceNode.fromStringWithSourceMap =
- function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- // The SourceNode we want to fill with the generated code
- // and the SourceMap
- var node = new SourceNode();
-
- // All even indices of this array are one line of the generated code,
- // while all odd indices are the newlines between two adjacent lines
- // (since `REGEX_NEWLINE` captures its match).
- // Processed fragments are accessed by calling `shiftNextLine`.
- var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- var remainingLinesIndex = 0;
- var shiftNextLine = function() {
- var lineContents = getNextLine();
- // The last line of a file might not have a newline.
- var newLine = getNextLine() || "";
- return lineContents + newLine;
-
- function getNextLine() {
- return remainingLinesIndex < remainingLines.length ?
- remainingLines[remainingLinesIndex++] : undefined;
- }
- };
-
- // We need to remember the position of "remainingLines"
- var lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
- // The generate SourceNodes we need a code range.
- // To extract it current and last mapping is used.
- // Here we store the last mapping.
- var lastMapping = null;
-
- aSourceMapConsumer.eachMapping(function (mapping) {
- if (lastMapping !== null) {
- // We add the code from "lastMapping" to "mapping":
- // First check if there is a new line in between.
- if (lastGeneratedLine < mapping.generatedLine) {
- // Associate first line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
- // The remaining code is added without mapping
- } else {
- // There is no new line in between.
- // Associate the code between "lastGeneratedColumn" and
- // "mapping.generatedColumn" with "lastMapping"
- var nextLine = remainingLines[remainingLinesIndex] || '';
- var code = nextLine.substr(0, mapping.generatedColumn -
- lastGeneratedColumn);
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
- lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- // No more remaining code, continue
- lastMapping = mapping;
- return;
- }
- }
- // We add the generated code until the first mapping
- // to the SourceNode without any mapping.
- // Each line is added as separate string.
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- var nextLine = remainingLines[remainingLinesIndex] || '';
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- }
- lastMapping = mapping;
- }, this);
- // We have processed all mappings.
- if (remainingLinesIndex < remainingLines.length) {
- if (lastMapping) {
- // Associate the remaining code in the current line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- }
- // and add the remaining lines without any mapping
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
- }
-
- // Copy sourcesContent into SourceNode
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
-
- return node;
-
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === undefined) {
- node.add(code);
- } else {
- var source = aRelativePath
- ? util.join(aRelativePath, mapping.source)
- : mapping.source;
- node.add(new SourceNode(mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name));
- }
- }
- };
-
-/**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
-SourceNode.prototype.add = function SourceNode_add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function (chunk) {
- this.add(chunk);
- }, this);
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
- }
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
-};
-
-/**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
-SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (var i = aChunk.length-1; i >= 0; i--) {
- this.prepend(aChunk[i]);
- }
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
-};
-
-/**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
-SourceNode.prototype.walk = function SourceNode_walk(aFn) {
- var chunk;
- for (var i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
- }
- else {
- if (chunk !== '') {
- aFn(chunk, { source: this.source,
- line: this.line,
- column: this.column,
- name: this.name });
- }
- }
- }
-};
-
-/**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
-SourceNode.prototype.join = function SourceNode_join(aSep) {
- var newChildren;
- var i;
- var len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len-1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
- }
- return this;
-};
-
-/**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
-SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
- var lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- }
- else if (typeof lastChild === 'string') {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- }
- else {
- this.children.push(''.replace(aPattern, aReplacement));
- }
- return this;
-};
-
-/**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
-SourceNode.prototype.setSourceContent =
- function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- };
-
-/**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
-SourceNode.prototype.walkSourceContents =
- function SourceNode_walkSourceContents(aFn) {
- for (var i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
- }
- }
-
- var sources = Object.keys(this.sourceContents);
- for (var i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
- }
- };
-
-/**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
-SourceNode.prototype.toString = function SourceNode_toString() {
- var str = "";
- this.walk(function (chunk) {
- str += chunk;
- });
- return str;
-};
-
-/**
- * Returns the string representation of this source node along with a source
- * map.
- */
-SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
- var generated = {
- code: "",
- line: 1,
- column: 0
- };
- var map = new SourceMapGenerator(aArgs);
- var sourceMappingActive = false;
- var lastOriginalSource = null;
- var lastOriginalLine = null;
- var lastOriginalColumn = null;
- var lastOriginalName = null;
- this.walk(function (chunk, original) {
- generated.code += chunk;
- if (original.source !== null
- && original.line !== null
- && original.column !== null) {
- if(lastOriginalSource !== original.source
- || lastOriginalLine !== original.line
- || lastOriginalColumn !== original.column
- || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
- });
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (var idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- // Mappings end at eol
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- } else {
- generated.column++;
- }
- }
- });
- this.walkSourceContents(function (sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
-
- return { code: generated.code, map: map };
-};
-
-/*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-var SourceMapConsumer = sourceMapConsumer.SourceMapConsumer;
-
-let offset;
-try {
- new Function('throw new Error(1)')();
-}
-catch (e) {
- // in Node 12, stack traces account for the function wrapper.
- // in Node 13 and later, the function wrapper adds two lines,
- // which must be subtracted to generate a valid mapping
- const match = /:(\d+):\d+\)$/.exec(e.stack.split('\n')[1]);
- offset = match ? +match[1] - 1 : 0;
-}
-function ssrRewriteStacktrace(stack, moduleGraph) {
- return stack
- .split('\n')
- .map((line) => {
- return line.replace(/^ {4}at (?:(.+?)\s+\()?(?:(.+?):(\d+)(?::(\d+))?)\)?/, (input, varName, url, line, column) => {
- var _a;
- if (!url)
- return input;
- const mod = moduleGraph.urlToModuleMap.get(url);
- const rawSourceMap = (_a = mod === null || mod === void 0 ? void 0 : mod.ssrTransformResult) === null || _a === void 0 ? void 0 : _a.map;
- if (!rawSourceMap) {
- return input;
- }
- const consumer = new SourceMapConsumer(rawSourceMap);
- const pos = consumer.originalPositionFor({
- line: Number(line) - offset,
- column: Number(column),
- bias: SourceMapConsumer.LEAST_UPPER_BOUND
- });
- if (!pos.source) {
- return input;
- }
- const source = `${pos.source}:${pos.line || 0}:${pos.column || 0}`;
- if (!varName || varName === 'eval') {
- return ` at ${source}`;
- }
- else {
- return ` at ${varName} (${source})`;
- }
- });
- })
- .join('\n');
-}
-function rebindErrorStacktrace(e, stacktrace) {
- const { configurable, writable } = Object.getOwnPropertyDescriptor(e, 'stack');
- if (configurable) {
- Object.defineProperty(e, 'stack', {
- value: stacktrace,
- enumerable: true,
- configurable: true,
- writable: true
- });
- }
- else if (writable) {
- e.stack = stacktrace;
- }
-}
-
-const pendingModules = new Map();
-const pendingImports = new Map();
-async function ssrLoadModule(url, server, context = { global }, urlStack = []) {
- url = unwrapId$1(url);
- // when we instantiate multiple dependency modules in parallel, they may
- // point to shared modules. We need to avoid duplicate instantiation attempts
- // by register every module as pending synchronously so that all subsequent
- // request to that module are simply waiting on the same promise.
- const pending = pendingModules.get(url);
- if (pending) {
- return pending;
- }
- const modulePromise = instantiateModule(url, server, context, urlStack);
- pendingModules.set(url, modulePromise);
- modulePromise
- .catch(() => {
- pendingImports.delete(url);
- })
- .finally(() => {
- pendingModules.delete(url);
- });
- return modulePromise;
-}
-async function instantiateModule(url, server, context = { global }, urlStack = []) {
- const { moduleGraph } = server;
- const mod = await moduleGraph.ensureEntryFromUrl(url);
- if (mod.ssrModule) {
- return mod.ssrModule;
- }
- const result = mod.ssrTransformResult ||
- (await transformRequest(url, server, { ssr: true }));
- if (!result) {
- // TODO more info? is this even necessary?
- throw new Error(`failed to load module for ssr: ${url}`);
- }
- const ssrModule = {
- [Symbol.toStringTag]: 'Module'
- };
- Object.defineProperty(ssrModule, '__esModule', { value: true });
- // Tolerate circular imports by ensuring the module can be
- // referenced before it's been instantiated.
- mod.ssrModule = ssrModule;
- const ssrImportMeta = {
- // The filesystem URL, matching native Node.js modules
- url: require$$0$8.pathToFileURL(mod.file).toString()
- };
- urlStack = urlStack.concat(url);
- const isCircular = (url) => urlStack.includes(url);
- // Since dynamic imports can happen in parallel, we need to
- // account for multiple pending deps and duplicate imports.
- const pendingDeps = [];
- const ssrImport = async (dep) => {
- var _a, _b;
- if (dep[0] !== '.' && dep[0] !== '/') {
- return nodeImport(dep, mod.file, server.config);
- }
- dep = unwrapId$1(dep);
- if (!isCircular(dep) && !((_a = pendingImports.get(dep)) === null || _a === void 0 ? void 0 : _a.some(isCircular))) {
- pendingDeps.push(dep);
- if (pendingDeps.length === 1) {
- pendingImports.set(url, pendingDeps);
- }
- let val = await ssrLoadModule(dep, server, context, urlStack);
- if (pendingDeps.length === 1) {
- pendingImports.delete(url);
- }
- else {
- pendingDeps.splice(pendingDeps.indexOf(dep), 1);
- }
- return val;
- }
- return (_b = moduleGraph.urlToModuleMap.get(dep)) === null || _b === void 0 ? void 0 : _b.ssrModule;
- };
- const ssrDynamicImport = (dep) => {
- // #3087 dynamic import vars is ignored at rewrite import path,
- // so here need process relative path
- if (dep[0] === '.') {
- dep = path__default.posix.resolve(path__default.dirname(url), dep);
- }
- return ssrImport(dep);
- };
- function ssrExportAll(sourceModule) {
- for (const key in sourceModule) {
- if (key !== 'default') {
- Object.defineProperty(ssrModule, key, {
- enumerable: true,
- configurable: true,
- get() {
- return sourceModule[key];
- }
- });
- }
- }
- }
- try {
- // eslint-disable-next-line @typescript-eslint/no-empty-function
- const AsyncFunction = async function () { }.constructor;
- const initModule = new AsyncFunction(`global`, ssrModuleExportsKey, ssrImportMetaKey, ssrImportKey, ssrDynamicImportKey, ssrExportAllKey, result.code + `\n//# sourceURL=${mod.url}`);
- await initModule(context.global, ssrModule, ssrImportMeta, ssrImport, ssrDynamicImport, ssrExportAll);
- }
- catch (e) {
- const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph);
- rebindErrorStacktrace(e, stacktrace);
- server.config.logger.error(`Error when evaluating SSR module ${url}:\n${stacktrace}`, {
- timestamp: true,
- clear: server.config.clearScreen,
- error: e
- });
- throw e;
- }
- return Object.freeze(ssrModule);
-}
-// In node@12+ we can use dynamic import to load CJS and ESM
-async function nodeImport(id, importer, config) {
- let url;
- // `resolve` doesn't handle `node:` builtins, so handle them directly
- if (id.startsWith('node:') || isBuiltin(id)) {
- url = id;
- }
- else {
- url = resolve(id, importer, config.root, !!config.resolve.preserveSymlinks);
- if (usingDynamicImport) {
- url = require$$0$8.pathToFileURL(url).toString();
- }
- }
- const mod = await dynamicImport(url);
- return proxyESM(id, mod);
-}
-// rollup-style default import interop for cjs
-function proxyESM(id, mod) {
- const defaultExport = mod.__esModule
- ? mod.default
- : mod.default
- ? mod.default
- : mod;
- return new Proxy(mod, {
- get(mod, prop) {
- if (prop === 'default')
- return defaultExport;
- return mod[prop];
- }
- });
-}
-const resolveCache = new Map();
-function resolve(id, importer, root, preserveSymlinks) {
- const key = id + importer + root;
- const cached = resolveCache.get(key);
- if (cached) {
- return cached;
- }
- const resolveDir = importer && fs__default.existsSync(cleanUrl(importer))
- ? path__default.dirname(importer)
- : root;
- const resolved = resolveFrom$3(id, resolveDir, preserveSymlinks, true);
- resolveCache.set(key, resolved);
- return resolved;
-}
-
-/**
- * The amount to wait for requests to register newly found dependencies before triggering
- * a re-bundle + page reload
- */
-const debounceMs = 100;
-function createMissingImporterRegisterFn(server) {
- const { logger } = server.config;
- let knownOptimized = server._optimizeDepsMetadata.optimized;
- let currentMissing = {};
- let handle;
- let pendingResolve = null;
- async function rerun(ssr) {
- const newDeps = currentMissing;
- currentMissing = {};
- logger.info(source.yellow(`new dependencies found: ${Object.keys(newDeps).join(', ')}, updating...`), {
- timestamp: true
- });
- for (const id in knownOptimized) {
- newDeps[id] = knownOptimized[id].src;
- }
- try {
- // Nullify previous metadata so that the resolver won't
- // resolve to optimized files during the optimizer re-run
- server._isRunningOptimizer = true;
- server._optimizeDepsMetadata = null;
- const newData = (server._optimizeDepsMetadata = await optimizeDeps(server.config, true, false, newDeps, ssr));
- knownOptimized = newData.optimized;
- // update ssr externals
- server._ssrExternals = resolveSSRExternal(server.config, Object.keys(knownOptimized));
- logger.info(source.greenBright(`✨ dependencies updated, reloading page...`), { timestamp: true });
- }
- catch (e) {
- logger.error(source.red(`error while updating dependencies:\n${e.stack}`), { timestamp: true, error: e });
- }
- finally {
- server._isRunningOptimizer = false;
- pendingResolve && pendingResolve();
- server._pendingReload = pendingResolve = null;
- }
- // Cached transform results have stale imports (resolved to
- // old locations) so they need to be invalidated before the page is
- // reloaded.
- server.moduleGraph.invalidateAll();
- server.ws.send({
- type: 'full-reload',
- path: '*'
- });
- }
- return function registerMissingImport(id, resolved, ssr) {
- if (!knownOptimized[id]) {
- currentMissing[id] = resolved;
- if (handle)
- clearTimeout(handle);
- handle = setTimeout(() => rerun(ssr), debounceMs);
- server._pendingReload = new Promise((r) => {
- pendingResolve = r;
- });
- }
- };
-}
-
-// https://github.com/vitejs/vite/issues/2820#issuecomment-812495079
-const ROOT_FILES = [
- // '.git',
- // https://pnpm.js.org/workspaces/
- 'pnpm-workspace.yaml'
- // https://rushjs.io/pages/advanced/config_files/
- // 'rush.json',
- // https://nx.dev/latest/react/getting-started/nx-setup
- // 'workspace.json',
- // 'nx.json'
-];
-// npm: https://docs.npmjs.com/cli/v7/using-npm/workspaces#installing-workspaces
-// yarn: https://classic.yarnpkg.com/en/docs/workspaces/#toc-how-to-use-it
-function hasWorkspacePackageJSON(root) {
- const path = path$t.join(root, 'package.json');
- try {
- fs__default.accessSync(path, fs__default.constants.R_OK);
- }
- catch {
- return false;
- }
- const content = JSON.parse(fs__default.readFileSync(path, 'utf-8')) || {};
- return !!content.workspaces;
-}
-function hasRootFile(root) {
- return ROOT_FILES.some((file) => fs__default.existsSync(path$t.join(root, file)));
-}
-function hasPackageJSON(root) {
- const path = path$t.join(root, 'package.json');
- return fs__default.existsSync(path);
-}
-/**
- * Search up for the nearest `package.json`
- */
-function searchForPackageRoot(current, root = current) {
- if (hasPackageJSON(current))
- return current;
- const dir = path$t.dirname(current);
- // reach the fs root
- if (!dir || dir === current)
- return root;
- return searchForPackageRoot(dir, root);
-}
-/**
- * Search up for the nearest workspace root
- */
-function searchForWorkspaceRoot(current, root = searchForPackageRoot(current)) {
- if (hasRootFile(current))
- return current;
- if (hasWorkspacePackageJSON(current))
- return current;
- const dir = path$t.dirname(current);
- // reach the fs root
- if (!dir || dir === current)
- return root;
- return searchForWorkspaceRoot(dir, root);
-}
-
-async function createServer(inlineConfig = {}) {
- const config = await resolveConfig(inlineConfig, 'serve', 'development');
- const root = config.root;
- const serverConfig = config.server;
- const httpsOptions = await resolveHttpsConfig(config);
- let { middlewareMode } = serverConfig;
- if (middlewareMode === true) {
- middlewareMode = 'ssr';
- }
- const middlewares = connect();
- const httpServer = middlewareMode
- ? null
- : await resolveHttpServer(serverConfig, middlewares, httpsOptions);
- const ws = createWebSocketServer(httpServer, config, httpsOptions);
- const { ignored = [], ...watchOptions } = serverConfig.watch || {};
- const watcher = chokidar.watch(path__default.resolve(root), {
- ignored: [
- '**/node_modules/**',
- '**/.git/**',
- ...(Array.isArray(ignored) ? ignored : [ignored])
- ],
- ignoreInitial: true,
- ignorePermissionErrors: true,
- disableGlobbing: true,
- ...watchOptions
- });
- const plugins = config.plugins;
- const container = await createPluginContainer(config, watcher);
- const moduleGraph = new ModuleGraph(container);
- const closeHttpServer = createServerCloseFn(httpServer);
- // eslint-disable-next-line prefer-const
- let exitProcess;
- const server = {
- config,
- middlewares,
- get app() {
- config.logger.warn(`ViteDevServer.app is deprecated. Use ViteDevServer.middlewares instead.`);
- return middlewares;
- },
- httpServer,
- watcher,
- pluginContainer: container,
- ws,
- moduleGraph,
- transformWithEsbuild,
- transformRequest(url, options) {
- return transformRequest(url, server, options);
- },
- transformIndexHtml: null,
- ssrLoadModule(url) {
- if (!server._ssrExternals) {
- server._ssrExternals = resolveSSRExternal(config, server._optimizeDepsMetadata
- ? Object.keys(server._optimizeDepsMetadata.optimized)
- : []);
- }
- return ssrLoadModule(url, server);
- },
- ssrFixStacktrace(e) {
- if (e.stack) {
- const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph);
- rebindErrorStacktrace(e, stacktrace);
- }
- },
- listen(port, isRestart) {
- return startServer(server, port, isRestart);
- },
- async close() {
- process.off('SIGTERM', exitProcess);
- if (!middlewareMode && process.env.CI !== 'true') {
- process.stdin.off('end', exitProcess);
- }
- await Promise.all([
- watcher.close(),
- ws.close(),
- container.close(),
- closeHttpServer()
- ]);
- },
- printUrls() {
- if (httpServer) {
- printHttpServerUrls(httpServer, config);
- }
- else {
- throw new Error('cannot print server URLs in middleware mode.');
- }
- },
- _optimizeDepsMetadata: null,
- _ssrExternals: null,
- _globImporters: Object.create(null),
- _isRunningOptimizer: false,
- _registerMissingImport: null,
- _pendingReload: null,
- _pendingRequests: Object.create(null)
- };
- server.transformIndexHtml = createDevHtmlTransformFn(server);
- exitProcess = async () => {
- try {
- await server.close();
- }
- finally {
- process.exit(0);
- }
- };
- process.once('SIGTERM', exitProcess);
- if (!middlewareMode && process.env.CI !== 'true') {
- process.stdin.on('end', exitProcess);
- }
- watcher.on('change', async (file) => {
- file = normalizePath$4(file);
- // invalidate module graph cache on file change
- moduleGraph.onFileChange(file);
- if (serverConfig.hmr !== false) {
- try {
- await handleHMRUpdate(file, server);
- }
- catch (err) {
- ws.send({
- type: 'error',
- err: prepareError(err)
- });
- }
- }
- });
- watcher.on('add', (file) => {
- handleFileAddUnlink(normalizePath$4(file), server);
- });
- watcher.on('unlink', (file) => {
- handleFileAddUnlink(normalizePath$4(file), server, true);
- });
- if (!middlewareMode && httpServer) {
- httpServer.once('listening', () => {
- // update actual port since this may be different from initial value
- serverConfig.port = httpServer.address().port;
- });
- }
- // apply server configuration hooks from plugins
- const postHooks = [];
- for (const plugin of plugins) {
- if (plugin.configureServer) {
- postHooks.push(await plugin.configureServer(server));
- }
- }
- // Internal middlewares ------------------------------------------------------
- // request timer
- if (process.env.DEBUG) {
- middlewares.use(timeMiddleware(root));
- }
- // cors (enabled by default)
- const { cors } = serverConfig;
- if (cors !== false) {
- middlewares.use(corsMiddleware(typeof cors === 'boolean' ? {} : cors));
- }
- // proxy
- const { proxy } = serverConfig;
- if (proxy) {
- middlewares.use(proxyMiddleware(httpServer, config));
- }
- // base
- if (config.base !== '/') {
- middlewares.use(baseMiddleware(server));
- }
- // open in editor support
- middlewares.use('/__open-in-editor', launchEditorMiddleware());
- // hmr reconnect ping
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- middlewares.use('/__vite_ping', function viteHMRPingMiddleware(_, res) {
- res.end('pong');
- });
- // serve static files under /public
- // this applies before the transform middleware so that these files are served
- // as-is without transforms.
- if (config.publicDir) {
- middlewares.use(servePublicMiddleware(config.publicDir));
- }
- // main transform middleware
- middlewares.use(transformMiddleware(server));
- // serve static files
- middlewares.use(serveRawFsMiddleware(server));
- middlewares.use(serveStaticMiddleware(root, config));
- // spa fallback
- if (!middlewareMode || middlewareMode === 'html') {
- middlewares.use(spaFallbackMiddleware(root));
- }
- // run post config hooks
- // This is applied before the html middleware so that user middleware can
- // serve custom content instead of index.html.
- postHooks.forEach((fn) => fn && fn());
- if (!middlewareMode || middlewareMode === 'html') {
- // transform index.html
- middlewares.use(indexHtmlMiddleware(server));
- // handle 404s
- // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
- middlewares.use(function vite404Middleware(_, res) {
- res.statusCode = 404;
- res.end();
- });
- }
- // error handler
- middlewares.use(errorMiddleware(server, !!middlewareMode));
- const runOptimize = async () => {
- if (config.cacheDir) {
- server._isRunningOptimizer = true;
- try {
- server._optimizeDepsMetadata = await optimizeDeps(config);
- }
- finally {
- server._isRunningOptimizer = false;
- }
- server._registerMissingImport = createMissingImporterRegisterFn(server);
- }
- };
- if (!middlewareMode && httpServer) {
- let isOptimized = false;
- // overwrite listen to run optimizer before server start
- const listen = httpServer.listen.bind(httpServer);
- httpServer.listen = (async (port, ...args) => {
- if (!isOptimized) {
- try {
- await container.buildStart({});
- await runOptimize();
- isOptimized = true;
- }
- catch (e) {
- httpServer.emit('error', e);
- return;
- }
- }
- return listen(port, ...args);
- });
- }
- else {
- await container.buildStart({});
- await runOptimize();
- }
- return server;
-}
-async function startServer(server, inlinePort, isRestart = false) {
- const httpServer = server.httpServer;
- if (!httpServer) {
- throw new Error('Cannot call server.listen in middleware mode.');
- }
- const options = server.config.server;
- const port = inlinePort || options.port || 3000;
- const hostname = resolveHostname(options.host);
- const protocol = options.https ? 'https' : 'http';
- const info = server.config.logger.info;
- const base = server.config.base;
- const serverPort = await httpServerStart(httpServer, {
- port,
- strictPort: options.strictPort,
- host: hostname.host,
- logger: server.config.logger
- });
- // @ts-ignore
- const profileSession = global.__vite_profile_session;
- if (profileSession) {
- profileSession.post('Profiler.stop', (err, { profile }) => {
- // Write profile to disk, upload, etc.
- if (!err) {
- const outPath = path__default.resolve('./vite-profile.cpuprofile');
- fs__default.writeFileSync(outPath, JSON.stringify(profile));
- info(source.yellow(` CPU profile written to ${source.white.dim(outPath)}\n`));
- }
- else {
- throw err;
- }
- });
- }
- if (options.open && !isRestart) {
- const path = typeof options.open === 'string' ? options.open : base;
- openBrowser(path.startsWith('http')
- ? path
- : `${protocol}://${hostname.name}:${serverPort}${path}`, true, server.config.logger);
- }
- return server;
-}
-function createServerCloseFn(server) {
- if (!server) {
- return () => { };
- }
- let hasListened = false;
- const openSockets = new Set();
- server.on('connection', (socket) => {
- openSockets.add(socket);
- socket.on('close', () => {
- openSockets.delete(socket);
- });
- });
- server.once('listening', () => {
- hasListened = true;
- });
- return () => new Promise((resolve, reject) => {
- openSockets.forEach((s) => s.destroy());
- if (hasListened) {
- server.close((err) => {
- if (err) {
- reject(err);
- }
- else {
- resolve();
- }
- });
- }
- else {
- resolve();
- }
- });
-}
-function resolvedAllowDir(root, dir) {
- return ensureLeadingSlash(normalizePath$4(path__default.resolve(root, dir)));
-}
-function resolveServerOptions(root, raw) {
- var _a, _b;
- const server = raw || {};
- let allowDirs = (_a = server.fs) === null || _a === void 0 ? void 0 : _a.allow;
- if (!allowDirs) {
- allowDirs = [searchForWorkspaceRoot(root)];
- }
- allowDirs = allowDirs.map((i) => resolvedAllowDir(root, i));
- // only push client dir when vite itself is outside-of-root
- const resolvedClientDir = resolvedAllowDir(root, CLIENT_DIR);
- if (!allowDirs.some((i) => resolvedClientDir.startsWith(i))) {
- allowDirs.push(resolvedClientDir);
- }
- server.fs = {
- // TODO: make strict by default
- strict: (_b = server.fs) === null || _b === void 0 ? void 0 : _b.strict,
- allow: allowDirs
- };
- return server;
-}
-
-var index = {
- __proto__: null,
- createServer: createServer,
- resolveServerOptions: resolveServerOptions,
- searchForWorkspaceRoot: searchForWorkspaceRoot
-};
-
-const noop = () => null;
-function matches(pattern, importee) {
- if (pattern instanceof RegExp) {
- return pattern.test(importee);
- }
- if (importee.length < pattern.length) {
- return false;
- }
- if (importee === pattern) {
- return true;
- }
- const importeeStartsWithKey = importee.indexOf(pattern) === 0;
- const importeeHasSlashAfterKey = importee.substring(pattern.length)[0] === '/';
- return importeeStartsWithKey && importeeHasSlashAfterKey;
-}
-function normalizeId(id) {
- return id;
-}
-function getEntries({ entries }) {
- if (!entries) {
- return [];
- }
- if (Array.isArray(entries)) {
- return entries;
- }
- return Object.entries(entries).map(([key, value]) => {
- return { find: key, replacement: value };
- });
-}
-function getCustomResolver({ customResolver }, options) {
- if (typeof customResolver === 'function') {
- return customResolver;
- }
- if (customResolver && typeof customResolver.resolveId === 'function') {
- return customResolver.resolveId;
- }
- if (typeof options.customResolver === 'function') {
- return options.customResolver;
- }
- if (options.customResolver && typeof options.customResolver.resolveId === 'function') {
- return options.customResolver.resolveId;
- }
- return null;
-}
-function alias(options = {}) {
- const entries = getEntries(options);
- if (entries.length === 0) {
- return {
- name: 'alias',
- resolveId: noop
- };
- }
- return {
- name: 'alias',
- buildStart(inputOptions) {
- return Promise.all([...entries, options].map(({ customResolver }) => customResolver &&
- typeof customResolver === 'object' &&
- typeof customResolver.buildStart === 'function' &&
- customResolver.buildStart.call(this, inputOptions))).then(() => {
- // enforce void return value
- });
- },
- resolveId(importee, importer) {
- const importeeId = normalizeId(importee);
- const importerId = normalizeId(importer);
- // First match is supposed to be the correct one
- const matchedEntry = entries.find((entry) => matches(entry.find, importeeId));
- if (!matchedEntry || !importerId) {
- return null;
- }
- const updatedId = normalizeId(importeeId.replace(matchedEntry.find, matchedEntry.replacement));
- const customResolver = getCustomResolver(matchedEntry, options);
- if (customResolver) {
- return customResolver.call(this, updatedId, importerId, {});
- }
- return this.resolve(updatedId, importer, { skipSelf: true }).then((resolved) => {
- let finalResult = resolved;
- if (!finalResult) {
- finalResult = { id: updatedId };
- }
- return finalResult;
- });
- }
- };
-}
-
-/**
- * https://github.com/rollup/plugins/blob/master/packages/json/src/index.js
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file at
- * https://github.com/rollup/plugins/blob/master/LICENSE
- */
-// Custom json filter for vite
-const jsonExtRE = /\.json($|\?)(?!commonjs-(proxy|external))/;
-function jsonPlugin(options = {}, isBuild) {
- return {
- name: 'vite:json',
- transform(json, id) {
- if (!jsonExtRE.test(id))
- return null;
- if (SPECIAL_QUERY_RE.test(id))
- return null;
- try {
- if (options.stringify) {
- if (isBuild) {
- return {
- // during build, parse then double-stringify to remove all
- // unnecessary whitespaces to reduce bundle size.
- code: `export default JSON.parse(${JSON.stringify(JSON.stringify(JSON.parse(json)))})`,
- map: { mappings: '' }
- };
- }
- else {
- return `export default JSON.parse(${JSON.stringify(json)})`;
- }
- }
- const parsed = JSON.parse(json);
- return {
- code: dataToEsm(parsed, {
- preferConst: true,
- namedExports: options.namedExports
- }),
- map: { mappings: '' }
- };
- }
- catch (e) {
- const errorMessageList = /[\d]+/.exec(e.message);
- const position = errorMessageList && parseInt(errorMessageList[0], 10);
- const msg = position
- ? `, invalid JSON syntax found at line ${position}`
- : `.`;
- this.error(`Failed to parse JSON file` + msg, e.idx);
- }
- }
- };
-}
-
-const isDebug = !!process.env.DEBUG;
-const debug$2 = createDebugger('vite:import-analysis');
-const clientDir = normalizePath$4(CLIENT_DIR);
-const skipRE = /\.(map|json)$/;
-const canSkip = (id) => skipRE.test(id) || isDirectCSSRequest(id);
-function isExplicitImportRequired(url) {
- return !isJSRequest(cleanUrl(url)) && !isCSSRequest(url);
-}
-function markExplicitImport(url) {
- if (isExplicitImportRequired(url)) {
- return injectQuery(url, 'import');
- }
- return url;
-}
-/**
- * Server-only plugin that lexes, resolves, rewrites and analyzes url imports.
- *
- * - Imports are resolved to ensure they exist on disk
- *
- * - Lexes HMR accept calls and updates import relationships in the module graph
- *
- * - Bare module imports are resolved (by @rollup-plugin/node-resolve) to
- * absolute file paths, e.g.
- *
- * ```js
- * import 'foo'
- * ```
- * is rewritten to
- * ```js
- * import '/@fs//project/node_modules/foo/dist/foo.js'
- * ```
- *
- * - CSS imports are appended with `.js` since both the js module and the actual
- * css (referenced via <link>) may go through the transform pipeline:
- *
- * ```js
- * import './style.css'
- * ```
- * is rewritten to
- * ```js
- * import './style.css.js'
- * ```
- */
-function importAnalysisPlugin(config) {
- const { root, base } = config;
- const clientPublicPath = path__default.posix.join(base, CLIENT_PUBLIC_PATH);
- let server;
- return {
- name: 'vite:import-analysis',
- configureServer(_server) {
- server = _server;
- },
- async transform(source$1, importer, ssr) {
- const prettyImporter = prettifyUrl(importer, root);
- if (canSkip(importer)) {
- isDebug && debug$2(source.dim(`[skipped] ${prettyImporter}`));
- return null;
- }
- const start = perf_hooks.performance.now();
- await init;
- let imports = [];
- // strip UTF-8 BOM
- if (source$1.charCodeAt(0) === 0xfeff) {
- source$1 = source$1.slice(1);
- }
- try {
- imports = parse$f(source$1)[0];
- }
- catch (e) {
- const isVue = importer.endsWith('.vue');
- const maybeJSX = !isVue && isJSRequest(importer);
- const msg = isVue
- ? `Install @vitejs/plugin-vue to handle .vue files.`
- : maybeJSX
- ? `If you are using JSX, make sure to name the file with the .jsx or .tsx extension.`
- : `You may need to install appropriate plugins to handle the ${path__default.extname(importer)} file format.`;
- this.error(`Failed to parse source for import analysis because the content ` +
- `contains invalid JS syntax. ` +
- msg, e.idx);
- }
- if (!imports.length) {
- isDebug &&
- debug$2(`${timeFrom(start)} ${source.dim(`[no imports] ${prettyImporter}`)}`);
- return source$1;
- }
- let hasHMR = false;
- let isSelfAccepting = false;
- let hasEnv = false;
- let needQueryInjectHelper = false;
- let s;
- const str = () => s || (s = new MagicString(source$1));
- // vite-only server context
- const { moduleGraph } = server;
- // since we are already in the transform phase of the importer, it must
- // have been loaded so its entry is guaranteed in the module graph.
- const importerModule = moduleGraph.getModuleById(importer);
- const importedUrls = new Set();
- const staticImportedUrls = new Set();
- const acceptedUrls = new Set();
- const toAbsoluteUrl = (url) => path__default.posix.resolve(path__default.posix.dirname(importerModule.url), url);
- const normalizeUrl = async (url, pos) => {
- if (base !== '/' && url.startsWith(base)) {
- url = url.replace(base, '/');
- }
- const resolved = await this.resolve(url, importer);
- if (!resolved) {
- this.error(`Failed to resolve import "${url}" from "${path__default.relative(process.cwd(), importer)}". Does the file exist?`, pos);
- }
- const isRelative = url.startsWith('.');
- const isSelfImport = !isRelative && cleanUrl(url) === cleanUrl(importer);
- // normalize all imports into resolved URLs
- // e.g. `import 'foo'` -> `import '/@fs/.../node_modules/foo/index.js`
- if (resolved.id.startsWith(root + '/')) {
- // in root: infer short absolute path from root
- url = resolved.id.slice(root.length);
- }
- else if (fs__default.existsSync(cleanUrl(resolved.id))) {
- // exists but out of root: rewrite to absolute /@fs/ paths
- url = path__default.posix.join(FS_PREFIX + resolved.id);
- }
- else {
- url = resolved.id;
- }
- if (isExternalUrl(url)) {
- return [url, url];
- }
- // if the resolved id is not a valid browser import specifier,
- // prefix it to make it valid. We will strip this before feeding it
- // back into the transform pipeline
- if (!url.startsWith('.') && !url.startsWith('/')) {
- url =
- VALID_ID_PREFIX + resolved.id.replace('\0', NULL_BYTE_PLACEHOLDER);
- }
- // make the URL browser-valid if not SSR
- if (!ssr) {
- // mark non-js/css imports with `?import`
- url = markExplicitImport(url);
- // for relative js/css imports, or self-module virtual imports
- // (e.g. vue blocks), inherit importer's version query
- // do not do this for unknown type imports, otherwise the appended
- // query can break 3rd party plugin's extension checks.
- if ((isRelative || isSelfImport) && !/[\?&]import=?\b/.test(url)) {
- const versionMatch = importer.match(DEP_VERSION_RE);
- if (versionMatch) {
- url = injectQuery(url, versionMatch[1]);
- }
- }
- // check if the dep has been hmr updated. If yes, we need to attach
- // its last updated timestamp to force the browser to fetch the most
- // up-to-date version of this module.
- try {
- const depModule = await moduleGraph.ensureEntryFromUrl(url);
- if (depModule.lastHMRTimestamp > 0) {
- url = injectQuery(url, `t=${depModule.lastHMRTimestamp}`);
- }
- }
- catch (e) {
- // it's possible that the dep fails to resolve (non-existent import)
- // attach location to the missing import
- e.pos = pos;
- throw e;
- }
- // prepend base (dev base is guaranteed to have ending slash)
- url = base + url.replace(/^\//, '');
- }
- return [url, resolved.id];
- };
- for (let index = 0; index < imports.length; index++) {
- const { s: start, e: end, ss: expStart, se: expEnd, d: dynamicIndex,
- // #2083 User may use escape path,
- // so use imports[index].n to get the unescaped string
- // @ts-ignore
- n: specifier } = imports[index];
- const rawUrl = source$1.slice(start, end);
- // check import.meta usage
- if (rawUrl === 'import.meta') {
- const prop = source$1.slice(end, end + 4);
- if (prop === '.hot') {
- hasHMR = true;
- if (source$1.slice(end + 4, end + 11) === '.accept') {
- // further analyze accepted modules
- if (lexAcceptedHmrDeps(source$1, source$1.indexOf('(', end + 11) + 1, acceptedUrls)) {
- isSelfAccepting = true;
- }
- }
- }
- else if (prop === '.env') {
- hasEnv = true;
- }
- else if (prop === '.glo' && source$1[end + 4] === 'b') {
- // transform import.meta.glob()
- // e.g. `import.meta.glob('glob:./dir/*.js')`
- const { imports, importsString, exp, endIndex, base, pattern, isEager } = await transformImportGlob(source$1, start, importer, index, root, normalizeUrl);
- str().prepend(importsString);
- str().overwrite(expStart, endIndex, exp);
- imports.forEach((url) => {
- url = url.replace(base, '/');
- importedUrls.add(url);
- if (isEager)
- staticImportedUrls.add(url);
- });
- if (!(importerModule.file in server._globImporters)) {
- server._globImporters[importerModule.file] = {
- module: importerModule,
- importGlobs: []
- };
- }
- server._globImporters[importerModule.file].importGlobs.push({
- base,
- pattern
- });
- }
- continue;
- }
- const isDynamicImport = dynamicIndex >= 0;
- // static import or valid string in dynamic import
- // If resolvable, let's resolve it
- if (specifier) {
- // skip external / data uri
- if (isExternalUrl(specifier) || isDataUrl(specifier)) {
- continue;
- }
- // skip ssr external
- if (ssr) {
- if (server._ssrExternals &&
- shouldExternalizeForSSR(specifier, server._ssrExternals)) {
- continue;
- }
- if (isBuiltin(specifier)) {
- continue;
- }
- }
- // skip client
- if (specifier === clientPublicPath) {
- continue;
- }
- // warn imports to non-asset /public files
- if (specifier.startsWith('/') &&
- !config.assetsInclude(cleanUrl(specifier)) &&
- !specifier.endsWith('.json') &&
- checkPublicFile(specifier, config)) {
- throw new Error(`Cannot import non-asset file ${specifier} which is inside /public.` +
- `JS/CSS files inside /public are copied as-is on build and ` +
- `can only be referenced via <script src> or <link href> in html.`);
- }
- // normalize
- const [normalizedUrl, resolvedId] = await normalizeUrl(specifier, start);
- let url = normalizedUrl;
- // record as safe modules
- server === null || server === void 0 ? void 0 : server.moduleGraph.safeModulesPath.add(cleanUrl(url).slice(4 /* '/@fs'.length */));
- // rewrite
- if (url !== specifier) {
- // for optimized cjs deps, support named imports by rewriting named
- // imports to const assignments.
- if (resolvedId.endsWith(`&es-interop`)) {
- url = url.slice(0, -11);
- if (isDynamicImport) {
- // rewrite `import('package')` to expose the default directly
- str().overwrite(dynamicIndex, end + 1, `import('${url}').then(m => m.default && m.default.__esModule ? m.default : ({ ...m.default, default: m.default }))`);
- }
- else {
- const exp = source$1.slice(expStart, expEnd);
- const rewritten = transformCjsImport(exp, url, rawUrl, index);
- if (rewritten) {
- str().overwrite(expStart, expEnd, rewritten);
- }
- else {
- // #1439 export * from '...'
- str().overwrite(start, end, url);
- }
- }
- }
- else {
- str().overwrite(start, end, isDynamicImport ? `'${url}'` : url);
- }
- }
- // record for HMR import chain analysis
- // make sure to normalize away base
- const urlWithoutBase = url.replace(base, '/');
- importedUrls.add(urlWithoutBase);
- if (!isDynamicImport) {
- // for pre-transforming
- staticImportedUrls.add(urlWithoutBase);
- }
- }
- else if (!importer.startsWith(clientDir) && !ssr) {
- // check @vite-ignore which suppresses dynamic import warning
- const hasViteIgnore = /\/\*\s*@vite-ignore\s*\*\//.test(rawUrl);
- const url = rawUrl
- .replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '')
- .trim();
- if (!hasViteIgnore && !isSupportedDynamicImport(url)) {
- this.warn(`\n` +
- source.cyan(importerModule.file) +
- `\n` +
- generateCodeFrame(source$1, start) +
- `\nThe above dynamic import cannot be analyzed by vite.\n` +
- `See ${source.blue(`https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars#limitations`)} ` +
- `for supported dynamic import formats. ` +
- `If this is intended to be left as-is, you can use the ` +
- `/* @vite-ignore */ comment inside the import() call to suppress this warning.\n`);
- }
- if (!/^('.*'|".*"|`.*`)$/.test(url) ||
- isExplicitImportRequired(url.slice(1, -1))) {
- needQueryInjectHelper = true;
- str().overwrite(start, end, `__vite__injectQuery(${url}, 'import')`);
- }
- }
- }
- if (hasEnv) {
- // inject import.meta.env
- let env = `import.meta.env = ${JSON.stringify({
- ...config.env,
- SSR: !!ssr
- })};`;
- // account for user env defines
- for (const key in config.define) {
- if (key.startsWith(`import.meta.env.`)) {
- const val = config.define[key];
- env += `${key} = ${typeof val === 'string' ? val : JSON.stringify(val)};`;
- }
- }
- str().prepend(env);
- }
- if (hasHMR && !ssr) {
- debugHmr(`${isSelfAccepting
- ? `[self-accepts]`
- : acceptedUrls.size
- ? `[accepts-deps]`
- : `[detected api usage]`} ${prettyImporter}`);
- // inject hot context
- str().prepend(`import { createHotContext as __vite__createHotContext } from "${clientPublicPath}";` +
- `import.meta.hot = __vite__createHotContext(${JSON.stringify(importerModule.url)});`);
- }
- if (needQueryInjectHelper) {
- str().prepend(`import { injectQuery as __vite__injectQuery } from "${clientPublicPath}";`);
- }
- // normalize and rewrite accepted urls
- const normalizedAcceptedUrls = new Set();
- for (const { url, start, end } of acceptedUrls) {
- const [normalized] = await moduleGraph.resolveUrl(toAbsoluteUrl(markExplicitImport(url)));
- normalizedAcceptedUrls.add(normalized);
- str().overwrite(start, end, JSON.stringify(normalized));
- }
- // update the module graph for HMR analysis.
- // node CSS imports does its own graph update in the css plugin so we
- // only handle js graph updates here.
- if (!isCSSRequest(importer)) {
- // attached by pluginContainer.addWatchFile
- const pluginImports = this._addedImports;
- if (pluginImports) {
- (await Promise.all([...pluginImports].map((id) => normalizeUrl(id, 0)))).forEach(([url]) => importedUrls.add(url));
- }
- const prunedImports = await moduleGraph.updateModuleInfo(importerModule, importedUrls, normalizedAcceptedUrls, isSelfAccepting);
- if (hasHMR && prunedImports) {
- handlePrunedModules(prunedImports, server);
- }
- }
- isDebug &&
- debug$2(`${timeFrom(start)} ${source.dim(`[${importedUrls.size} imports rewritten] ${prettyImporter}`)}`);
- // pre-transform known direct imports
- if (staticImportedUrls.size) {
- staticImportedUrls.forEach((url) => {
- transformRequest(unwrapId$1(removeImportQuery(url)), server, { ssr });
- });
- }
- if (s) {
- return s.toString();
- }
- else {
- return source$1;
- }
- }
- };
-}
-/**
- * https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars#limitations
- * This is probably less accurate but is much cheaper than a full AST parse.
- */
-function isSupportedDynamicImport(url) {
- url = url.trim().slice(1, -1);
- // must be relative
- if (!url.startsWith('./') && !url.startsWith('../')) {
- return false;
- }
- // must have extension
- if (!path__default.extname(url)) {
- return false;
- }
- // must be more specific if importing from same dir
- if (url.startsWith('./${') && url.indexOf('/') === url.lastIndexOf('/')) {
- return false;
- }
- return true;
-}
-/**
- * Detect import statements to a known optimized CJS dependency and provide
- * ES named imports interop. We do this by rewriting named imports to a variable
- * assignment to the corresponding property on the `module.exports` of the cjs
- * module. Note this doesn't support dynamic re-assignments from within the cjs
- * module.
- *
- * Note that es-module-lexer treats `export * from '...'` as an import as well,
- * so, we may encounter ExportAllDeclaration here, in which case `undefined`
- * will be returned.
- *
- * Credits \@csr632 via #837
- */
-function transformCjsImport(importExp, url, rawUrl, importIndex) {
- const node = parse$c(importExp, {
- ecmaVersion: 'latest',
- sourceType: 'module'
- }).body[0];
- if (node.type === 'ImportDeclaration') {
- if (!node.specifiers.length) {
- return `import "${url}"`;
- }
- const importNames = [];
- for (const spec of node.specifiers) {
- if (spec.type === 'ImportSpecifier' &&
- spec.imported.type === 'Identifier') {
- const importedName = spec.imported.name;
- const localName = spec.local.name;
- importNames.push({ importedName, localName });
- }
- else if (spec.type === 'ImportDefaultSpecifier') {
- importNames.push({
- importedName: 'default',
- localName: spec.local.name
- });
- }
- else if (spec.type === 'ImportNamespaceSpecifier') {
- importNames.push({ importedName: '*', localName: spec.local.name });
- }
- }
- // If there is multiple import for same id in one file,
- // importIndex will prevent the cjsModuleName to be duplicate
- const cjsModuleName = makeLegalIdentifier$1(`__vite__cjsImport${importIndex}_${rawUrl}`);
- const lines = [`import ${cjsModuleName} from "${url}"`];
- importNames.forEach(({ importedName, localName }) => {
- if (importedName === '*') {
- lines.push(`const ${localName} = ${cjsModuleName}`);
- }
- else if (importedName === 'default') {
- lines.push(`const ${localName} = ${cjsModuleName}.__esModule ? ${cjsModuleName}.default : ${cjsModuleName}`);
- }
- else {
- lines.push(`const ${localName} = ${cjsModuleName}["${importedName}"]`);
- }
- });
- return lines.join('; ');
- }
-}
-
-// ids in transform are normalized to unix style
-const normalizedClientEntry = normalizePath$4(CLIENT_ENTRY);
-const normalizedEnvEntry = normalizePath$4(ENV_ENTRY);
-/**
- * some values used by the client needs to be dynamically injected by the server
- * @server-only
- */
-function clientInjectionsPlugin(config) {
- return {
- name: 'vite:client-inject',
- transform(code, id) {
- if (id === normalizedClientEntry || id === normalizedEnvEntry ||
- // Note that this is only needed for the Astro fork.
- id.includes('astro_runtime_client_hmr')) {
- let options = config.server.hmr;
- options = options && typeof options !== 'boolean' ? options : {};
- const host = options.host || null;
- const protocol = options.protocol || null;
- const timeout = options.timeout || 30000;
- const overlay = options.overlay !== false;
- let port;
- if (isObject$3(config.server.hmr)) {
- port = config.server.hmr.clientPort || config.server.hmr.port;
- }
- if (config.server.middlewareMode) {
- port = String(port || 24678);
- }
- else {
- port = String(port || options.port || config.server.port);
- }
- let hmrBase = config.base;
- if (options.path) {
- hmrBase = path__default.posix.join(hmrBase, options.path);
- }
- if (hmrBase !== '/') {
- port = path__default.posix.normalize(`${port}${hmrBase}`);
- }
- return code
- .replace(`__MODE__`, JSON.stringify(config.mode))
- .replace(`__BASE__`, JSON.stringify(config.base))
- .replace(`__DEFINES__`, serializeDefine(config.define || {}))
- .replace(`__HMR_PROTOCOL__`, JSON.stringify(protocol))
- .replace(`__HMR_HOSTNAME__`, JSON.stringify(host))
- .replace(`__HMR_PORT__`, JSON.stringify(port))
- .replace(`__HMR_TIMEOUT__`, JSON.stringify(timeout))
- .replace(`__HMR_ENABLE_OVERLAY__`, JSON.stringify(overlay));
- }
- else if (code.includes('process.env.NODE_ENV')) {
- // replace process.env.NODE_ENV
- return code.replace(/\bprocess\.env\.NODE_ENV\b/g, JSON.stringify(config.mode));
- }
- }
- };
-}
-function serializeDefine(define) {
- let res = `{`;
- for (const key in define) {
- const val = define[key];
- res += `${JSON.stringify(key)}: ${typeof val === 'string' ? `(${val})` : JSON.stringify(val)}, `;
- }
- return res + `}`;
-}
-
-const wasmHelperId = '/__vite-wasm-helper';
-const wasmHelper = async (opts = {}, url) => {
- let result;
- if (url.startsWith('data:')) {
- // @ts-ignore
- const binaryString = atob(url.replace(/^data:.*?base64,/, ''));
- const bytes = new Uint8Array(binaryString.length);
- for (let i = 0; i < binaryString.length; i++) {
- bytes[i] = binaryString.charCodeAt(i);
- }
- // @ts-ignore
- result = await WebAssembly.instantiate(bytes, opts);
- }
- else {
- // https://github.com/mdn/webassembly-examples/issues/5
- // WebAssembly.instantiateStreaming requires the server to provide the
- // correct MIME type for .wasm files, which unfortunately doesn't work for
- // a lot of static file servers, so we just work around it by getting the
- // raw buffer.
- // @ts-ignore
- const response = await fetch(url);
- const contentType = response.headers.get('Content-Type') || '';
- if (
- // @ts-ignore
- 'instantiateStreaming' in WebAssembly &&
- contentType.startsWith('application/wasm')) {
- // @ts-ignore
- result = await WebAssembly.instantiateStreaming(response, opts);
- }
- else {
- const buffer = await response.arrayBuffer();
- // @ts-ignore
- result = await WebAssembly.instantiate(buffer, opts);
- }
- }
- return result.instance.exports;
-};
-const wasmHelperCode = wasmHelper.toString();
-const wasmPlugin = (config) => {
- return {
- name: 'vite:wasm',
- resolveId(id) {
- if (id === wasmHelperId) {
- return id;
- }
- },
- async load(id) {
- if (id === wasmHelperId) {
- return `export default ${wasmHelperCode}`;
- }
- if (!id.endsWith('.wasm')) {
- return;
- }
- const url = await fileToUrl(id, config, this);
- return `
-import initWasm from "${wasmHelperId}"
-export default opts => initWasm(opts, ${JSON.stringify(url)})
-`;
- }
- };
-};
-
-function parseWorkerRequest(id) {
- const { search } = require$$0$8.parse(id);
- if (!search) {
- return null;
- }
- return Object.fromEntries(new require$$0$8.URLSearchParams(search.slice(1)));
-}
-const WorkerFileId = 'worker_file';
-function webWorkerPlugin(config) {
- const isBuild = config.command === 'build';
- return {
- name: 'vite:worker',
- load(id) {
- var _a;
- if (isBuild) {
- const parsedQuery = parseWorkerRequest(id);
- if (parsedQuery &&
- ((_a = parsedQuery.worker) !== null && _a !== void 0 ? _a : parsedQuery.sharedworker) != null) {
- return '';
- }
- }
- },
- async transform(_, id) {
- var _a;
- const query = parseWorkerRequest(id);
- if (query && query[WorkerFileId] != null) {
- return {
- code: `import '${ENV_PUBLIC_PATH}'\n` + _
- };
- }
- if (query == null ||
- (query && ((_a = query.worker) !== null && _a !== void 0 ? _a : query.sharedworker) == null)) {
- return;
- }
- let url;
- if (isBuild) {
- // bundle the file as entry to support imports
- const rollup = require('rollup');
- const bundle = await rollup.rollup({
- input: cleanUrl(id),
- plugins: await resolvePlugins({ ...config }, [], [], []),
- onwarn(warning, warn) {
- onRollupWarning(warning, warn, config);
- }
- });
- let code;
- try {
- const { output } = await bundle.generate({
- format: 'iife',
- sourcemap: config.build.sourcemap
- });
- code = output[0].code;
- }
- finally {
- await bundle.close();
- }
- const content = Buffer.from(code);
- if (query.inline != null) {
- // inline as blob data url
- return `const encodedJs = "${content.toString('base64')}";
- const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
- export default function WorkerWrapper() {
- const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
- try {
- return objURL ? new Worker(objURL) : new Worker("data:application/javascript;base64," + encodedJs, {type: "module"});
- } finally {
- objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
- }
- }`;
- }
- else {
- const basename = path__default.parse(cleanUrl(id)).name;
- const contentHash = getAssetHash(content);
- const fileName = path__default.posix.join(config.build.assetsDir, `${basename}.${contentHash}.js`);
- url = `__VITE_ASSET__${this.emitFile({
- fileName,
- type: 'asset',
- source: code
- })}__`;
- }
- }
- else {
- url = await fileToUrl(cleanUrl(id), config, this);
- url = injectQuery(url, WorkerFileId);
- }
- const workerConstructor = query.sharedworker != null ? 'SharedWorker' : 'Worker';
- const workerOptions = { type: 'module' };
- return `export default function WorkerWrapper() {
- return new ${workerConstructor}(${JSON.stringify(url)}, ${JSON.stringify(workerOptions, null, 2)})
- }`;
- }
- };
-}
-
-/**
- * A plugin to avoid an aliased AND optimized dep from being aliased in src
- */
-function preAliasPlugin() {
- let server;
- return {
- name: 'vite:pre-alias',
- configureServer(_server) {
- server = _server;
- },
- resolveId(id, importer, _, ssr) {
- if (!ssr && bareImportRE.test(id)) {
- return tryOptimizedResolve(id, server, importer);
- }
- }
- };
-}
-
-function definePlugin(config) {
- const isBuild = config.command === 'build';
- const userDefine = {};
- for (const key in config.define) {
- const val = config.define[key];
- userDefine[key] = typeof val === 'string' ? val : JSON.stringify(val);
- }
- // during dev, import.meta properties are handled by importAnalysis plugin
- const importMetaKeys = {};
- if (isBuild) {
- const env = {
- ...config.env,
- SSR: !!config.build.ssr
- };
- for (const key in env) {
- importMetaKeys[`import.meta.env.${key}`] = JSON.stringify(env[key]);
- }
- Object.assign(importMetaKeys, {
- 'import.meta.env.': `({}).`,
- 'import.meta.env': JSON.stringify(config.env),
- 'import.meta.hot': `false`
- });
- }
- const replacements = {
- 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || config.mode),
- 'global.process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || config.mode),
- 'globalThis.process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || config.mode),
- ...userDefine,
- ...importMetaKeys,
- 'process.env.': `({}).`,
- 'global.process.env.': `({}).`,
- 'globalThis.process.env.': `({}).`
- };
- const pattern = new RegExp(
- // Do not allow preceding '.', but do allow preceding '...' for spread operations
- '(?<!(?<!\\.\\.)\\.)\\b(' +
- Object.keys(replacements)
- .map((str) => {
- return str.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&');
- })
- .join('|') +
- ')\\b', 'g');
- return {
- name: 'vite:define',
- transform(code, id, ssr) {
- if (!ssr && !isBuild) {
- // for dev we inject actual global defines in the vite client to
- // avoid the transform cost.
- return;
- }
- if (
- // exclude css and static assets for performance
- isCSSRequest(id) ||
- config.assetsInclude(id)) {
- return;
- }
- if (ssr && !isBuild) {
- // ssr + dev, simple replace
- return code.replace(pattern, (_, match) => {
- return '' + replacements[match];
- });
- }
- const s = new MagicString(code);
- let hasReplaced = false;
- let match;
- while ((match = pattern.exec(code))) {
- hasReplaced = true;
- const start = match.index;
- const end = start + match[0].length;
- const replacement = '' + replacements[match[1]];
- s.overwrite(start, end, replacement);
- }
- if (!hasReplaced) {
- return null;
- }
- const result = { code: s.toString() };
- if (config.build.sourcemap) {
- result.map = s.generateMap({ hires: true });
- }
- return result;
- }
- };
-}
-
-async function resolvePlugins(config, prePlugins, normalPlugins, postPlugins) {
- const isBuild = config.command === 'build';
- const buildPlugins = isBuild
- ? (await Promise.resolve().then(function () { return build$1; })).resolveBuildPlugins(config)
- : { pre: [], post: [] };
- return [
- isBuild ? null : preAliasPlugin(),
- alias({ entries: config.resolve.alias }),
- ...prePlugins,
- config.build.polyfillModulePreload
- ? modulePreloadPolyfillPlugin(config)
- : null,
- resolvePlugin({
- ...config.resolve,
- root: config.root,
- isProduction: config.isProduction,
- isBuild,
- ssrConfig: config.ssr,
- asSrc: true
- }),
- htmlInlineScriptProxyPlugin(config),
- cssPlugin(config),
- config.esbuild !== false ? esbuildPlugin(config.esbuild) : null,
- jsonPlugin({
- namedExports: true,
- ...config.json
- }, isBuild),
- wasmPlugin(config),
- webWorkerPlugin(config),
- assetPlugin(config),
- ...normalPlugins,
- definePlugin(config),
- cssPostPlugin(config),
- ...buildPlugins.pre,
- ...postPlugins,
- ...buildPlugins.post,
- // internal server-only plugins are always applied after everything else
- ...(isBuild
- ? []
- : [clientInjectionsPlugin(config), importAnalysisPlugin(config)])
- ].filter(Boolean);
-}
-
-var main$1 = {};
-
-/* @flow */
-
-/*::
-
-type DotenvParseOptions = {
- debug?: boolean
-}
-
-// keys and values from src
-type DotenvParseOutput = { [string]: string }
-
-type DotenvConfigOptions = {
- path?: string, // path to .env file
- encoding?: string, // encoding of .env file
- debug?: string // turn on logging for debugging purposes
-}
-
-type DotenvConfigOutput = {
- parsed?: DotenvParseOutput,
- error?: Error
-}
-
-*/
-
-const fs = fs__default;
-const path = path__default;
-const os = require$$0__default$1;
-
-function log (message /*: string */) {
- console.log(`[dotenv][DEBUG] ${message}`);
-}
-
-const NEWLINE = '\n';
-const RE_INI_KEY_VAL = /^\s*([\w.-]+)\s*=\s*(.*)?\s*$/;
-const RE_NEWLINES = /\\n/g;
-const NEWLINES_MATCH = /\r\n|\n|\r/;
-
-// Parses src into an Object
-function parse$1 (src /*: string | Buffer */, options /*: ?DotenvParseOptions */) /*: DotenvParseOutput */ {
- const debug = Boolean(options && options.debug);
- const obj = {};
-
- // convert Buffers before splitting into lines and processing
- src.toString().split(NEWLINES_MATCH).forEach(function (line, idx) {
- // matching "KEY' and 'VAL' in 'KEY=VAL'
- const keyValueArr = line.match(RE_INI_KEY_VAL);
- // matched?
- if (keyValueArr != null) {
- const key = keyValueArr[1];
- // default undefined or missing values to empty string
- let val = (keyValueArr[2] || '');
- const end = val.length - 1;
- const isDoubleQuoted = val[0] === '"' && val[end] === '"';
- const isSingleQuoted = val[0] === "'" && val[end] === "'";
-
- // if single or double quoted, remove quotes
- if (isSingleQuoted || isDoubleQuoted) {
- val = val.substring(1, end);
-
- // if double quoted, expand newlines
- if (isDoubleQuoted) {
- val = val.replace(RE_NEWLINES, NEWLINE);
- }
- } else {
- // remove surrounding whitespace
- val = val.trim();
- }
-
- obj[key] = val;
- } else if (debug) {
- log(`did not match key and value when parsing line ${idx + 1}: ${line}`);
- }
- });
-
- return obj
-}
-
-function resolveHome (envPath) {
- return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath
-}
-
-// Populates process.env from .env file
-function config (options /*: ?DotenvConfigOptions */) /*: DotenvConfigOutput */ {
- let dotenvPath = path.resolve(process.cwd(), '.env');
- let encoding /*: string */ = 'utf8';
- let debug = false;
-
- if (options) {
- if (options.path != null) {
- dotenvPath = resolveHome(options.path);
- }
- if (options.encoding != null) {
- encoding = options.encoding;
- }
- if (options.debug != null) {
- debug = true;
- }
- }
-
- try {
- // specifying an encoding returns a string instead of a buffer
- const parsed = parse$1(fs.readFileSync(dotenvPath, { encoding }), { debug });
-
- Object.keys(parsed).forEach(function (key) {
- if (!Object.prototype.hasOwnProperty.call(process.env, key)) {
- process.env[key] = parsed[key];
- } else if (debug) {
- log(`"${key}" is already defined in \`process.env\` and will not be overwritten`);
- }
- });
-
- return { parsed }
- } catch (e) {
- return { error: e }
- }
-}
-
-main$1.config = config;
-main$1.parse = parse$1;
-
-var dotenvExpand = function (config) {
- // if ignoring process.env, use a blank object
- var environment = config.ignoreProcessEnv ? {} : process.env;
-
- var interpolate = function (envValue) {
- var matches = envValue.match(/(.?\${?(?:[a-zA-Z0-9_]+)?}?)/g) || [];
-
- return matches.reduce(function (newEnv, match) {
- var parts = /(.?)\${?([a-zA-Z0-9_]+)?}?/g.exec(match);
- var prefix = parts[1];
-
- var value, replacePart;
-
- if (prefix === '\\') {
- replacePart = parts[0];
- value = replacePart.replace('\\$', '$');
- } else {
- var key = parts[2];
- replacePart = parts[0].substring(prefix.length);
- // process.env value 'wins' over .env file's value
- value = environment.hasOwnProperty(key) ? environment[key] : (config.parsed[key] || '');
-
- // Resolve recursive interpolations
- value = interpolate(value);
- }
-
- return newEnv.replace(replacePart, value)
- }, envValue)
- };
-
- for (var configKey in config.parsed) {
- var value = environment.hasOwnProperty(configKey) ? environment[configKey] : config.parsed[configKey];
-
- config.parsed[configKey] = interpolate(value);
- }
-
- for (var processKey in config.parsed) {
- environment[processKey] = config.parsed[processKey];
- }
-
- return config
-};
-
-var main = dotenvExpand;
-
-const debug$1 = createDebugger('vite:config');
-/**
- * Type helper to make it easier to use vite.config.ts
- * accepts a direct {@link UserConfig} object, or a function that returns it.
- * The function receives a {@link ConfigEnv} object that exposes two properties:
- * `command` (either `'build'` or `'serve'`), and `mode`.
- */
-function defineConfig(config) {
- return config;
-}
-async function resolveConfig(inlineConfig, command, defaultMode = 'development') {
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
- let config = inlineConfig;
- let configFileDependencies = [];
- let mode = inlineConfig.mode || defaultMode;
- // some dependencies e.g. @vue/compiler-* relies on NODE_ENV for getting
- // production-specific behavior, so set it here even though we haven't
- // resolve the final mode yet
- if (mode === 'production') {
- process.env.NODE_ENV = 'production';
- }
- const configEnv = {
- mode,
- command
- };
- let { configFile } = config;
- if (configFile !== false) {
- const loadResult = await loadConfigFromFile(configEnv, configFile, config.root, config.logLevel);
- if (loadResult) {
- config = mergeConfig(loadResult.config, config);
- configFile = loadResult.path;
- configFileDependencies = loadResult.dependencies;
- }
- }
- // Define logger
- const logger = createLogger(config.logLevel, {
- allowClearScreen: config.clearScreen,
- customLogger: config.customLogger
- });
- // user config may provide an alternative mode. But --mode has a higher prority
- mode = inlineConfig.mode || config.mode || mode;
- configEnv.mode = mode;
- // resolve plugins
- const rawUserPlugins = (config.plugins || []).flat().filter((p) => {
- if (!p) {
- return false;
- }
- else if (!p.apply) {
- return true;
- }
- else if (typeof p.apply === 'function') {
- return p.apply({ ...config, mode }, configEnv);
- }
- else {
- return p.apply === command;
- }
- });
- const [prePlugins, normalPlugins, postPlugins] = sortUserPlugins(rawUserPlugins);
- // run config hooks
- const userPlugins = [...prePlugins, ...normalPlugins, ...postPlugins];
- for (const p of userPlugins) {
- if (p.config) {
- const res = await p.config(config, configEnv);
- if (res) {
- config = mergeConfig(config, res);
- }
- }
- }
- // resolve root
- const resolvedRoot = normalizePath$4(config.root ? path__default.resolve(config.root) : process.cwd());
- const clientAlias = [
- { find: /^[\/]?@vite\/env/, replacement: () => ENV_ENTRY },
- { find: /^[\/]?@vite\/client/, replacement: () => CLIENT_ENTRY }
- ];
- // resolve alias with internal client alias
- const resolvedAlias = mergeAlias(
- // @ts-ignore because @rollup/plugin-alias' type doesn't allow function
- // replacement, but its implementation does work with function values.
- clientAlias, ((_a = config.resolve) === null || _a === void 0 ? void 0 : _a.alias) || config.alias || []);
- const resolveOptions = {
- dedupe: config.dedupe,
- ...config.resolve,
- alias: resolvedAlias
- };
- // load .env files
- const envDir = config.envDir
- ? normalizePath$4(path__default.resolve(resolvedRoot, config.envDir))
- : resolvedRoot;
- const userEnv = inlineConfig.envFile !== false &&
- loadEnv(mode, envDir, resolveEnvPrefix(config));
- // Note it is possible for user to have a custom mode, e.g. `staging` where
- // production-like behavior is expected. This is indicated by NODE_ENV=production
- // loaded from `.staging.env` and set by us as VITE_USER_NODE_ENV
- const isProduction = (process.env.VITE_USER_NODE_ENV || mode) === 'production';
- if (isProduction) {
- // in case default mode was not production and is overwritten
- process.env.NODE_ENV = 'production';
- }
- // resolve public base url
- const BASE_URL = resolveBaseUrl(config.base, command === 'build', logger);
- const resolvedBuildOptions = resolveBuildOptions(config.build);
- // resolve cache directory
- const pkgPath = lookupFile(resolvedRoot, [`package.json`], true /* pathOnly */);
- const cacheDir = config.cacheDir
- ? path__default.resolve(resolvedRoot, config.cacheDir)
- : pkgPath && path__default.join(path__default.dirname(pkgPath), `node_modules/.vite`);
- const assetsFilter = config.assetsInclude
- ? createFilter$1(config.assetsInclude)
- : () => false;
- // create an internal resolver to be used in special scenarios, e.g.
- // optimizer & handling css @imports
- const createResolver = (options) => {
- let aliasContainer;
- let resolverContainer;
- return async (id, importer, aliasOnly, ssr) => {
- var _a;
- let container;
- if (aliasOnly) {
- container =
- aliasContainer ||
- (aliasContainer = await createPluginContainer({
- ...resolved,
- plugins: [alias({ entries: resolved.resolve.alias })]
- }));
- }
- else {
- container =
- resolverContainer ||
- (resolverContainer = await createPluginContainer({
- ...resolved,
- plugins: [
- alias({ entries: resolved.resolve.alias }),
- resolvePlugin({
- ...resolved.resolve,
- root: resolvedRoot,
- isProduction,
- isBuild: command === 'build',
- ssrConfig: resolved.ssr,
- asSrc: true,
- preferRelative: false,
- tryIndex: true,
- ...options
- })
- ]
- }));
- }
- return (_a = (await container.resolveId(id, importer, undefined, ssr))) === null || _a === void 0 ? void 0 : _a.id;
- };
- };
- const { publicDir } = config;
- const resolvedPublicDir = publicDir !== false && publicDir !== ''
- ? path__default.resolve(resolvedRoot, typeof publicDir === 'string' ? publicDir : 'public')
- : '';
- const resolved = {
- ...config,
- configFile: configFile ? normalizePath$4(configFile) : undefined,
- configFileDependencies,
- inlineConfig,
- root: resolvedRoot,
- base: BASE_URL,
- resolve: resolveOptions,
- publicDir: resolvedPublicDir,
- cacheDir,
- command,
- mode,
- isProduction,
- plugins: userPlugins,
- server: resolveServerOptions(resolvedRoot, config.server),
- build: resolvedBuildOptions,
- env: {
- ...userEnv,
- BASE_URL,
- MODE: mode,
- DEV: !isProduction,
- PROD: isProduction
- },
- assetsInclude(file) {
- return DEFAULT_ASSETS_RE.test(file) || assetsFilter(file);
- },
- logger,
- createResolver,
- optimizeDeps: {
- ...config.optimizeDeps,
- esbuildOptions: {
- keepNames: (_b = config.optimizeDeps) === null || _b === void 0 ? void 0 : _b.keepNames,
- preserveSymlinks: (_c = config.resolve) === null || _c === void 0 ? void 0 : _c.preserveSymlinks,
- ...(_d = config.optimizeDeps) === null || _d === void 0 ? void 0 : _d.esbuildOptions
- }
- }
- };
- resolved.plugins = await resolvePlugins(resolved, prePlugins, normalPlugins, postPlugins);
- // call configResolved hooks
- await Promise.all(userPlugins.map((p) => { var _a; return (_a = p.configResolved) === null || _a === void 0 ? void 0 : _a.call(p, resolved); }));
- if (process.env.DEBUG) {
- debug$1(`using resolved config: %O`, {
- ...resolved,
- plugins: resolved.plugins.map((p) => p.name)
- });
- }
- // TODO Deprecation warnings - remove when out of beta
- const logDeprecationWarning = (deprecatedOption, hint, error) => {
- logger.warn(source.yellow.bold(`(!) "${deprecatedOption}" option is deprecated. ${hint}${error ? `\n${error.stack}` : ''}`));
- };
- if ((_e = config.build) === null || _e === void 0 ? void 0 : _e.base) {
- logDeprecationWarning('build.base', '"base" is now a root-level config option.');
- config.base = config.build.base;
- }
- Object.defineProperty(resolvedBuildOptions, 'base', {
- enumerable: false,
- get() {
- logDeprecationWarning('build.base', '"base" is now a root-level config option.', new Error());
- return resolved.base;
- }
- });
- if (config.alias) {
- logDeprecationWarning('alias', 'Use "resolve.alias" instead.');
- }
- Object.defineProperty(resolved, 'alias', {
- enumerable: false,
- get() {
- logDeprecationWarning('alias', 'Use "resolve.alias" instead.', new Error());
- return resolved.resolve.alias;
- }
- });
- if (config.dedupe) {
- logDeprecationWarning('dedupe', 'Use "resolve.dedupe" instead.');
- }
- Object.defineProperty(resolved, 'dedupe', {
- enumerable: false,
- get() {
- logDeprecationWarning('dedupe', 'Use "resolve.dedupe" instead.', new Error());
- return resolved.resolve.dedupe;
- }
- });
- if ((_f = config.optimizeDeps) === null || _f === void 0 ? void 0 : _f.keepNames) {
- logDeprecationWarning('optimizeDeps.keepNames', 'Use "optimizeDeps.esbuildOptions.keepNames" instead.');
- }
- Object.defineProperty(resolved.optimizeDeps, 'keepNames', {
- enumerable: false,
- get() {
- var _a;
- logDeprecationWarning('optimizeDeps.keepNames', 'Use "optimizeDeps.esbuildOptions.keepNames" instead.', new Error());
- return (_a = resolved.optimizeDeps.esbuildOptions) === null || _a === void 0 ? void 0 : _a.keepNames;
- }
- });
- if ((_g = config.build) === null || _g === void 0 ? void 0 : _g.polyfillDynamicImport) {
- logDeprecationWarning('build.polyfillDynamicImport', '"polyfillDynamicImport" has been removed. Please use @vitejs/plugin-legacy if your target browsers do not support dynamic imports.');
- }
- Object.defineProperty(resolvedBuildOptions, 'polyfillDynamicImport', {
- enumerable: false,
- get() {
- logDeprecationWarning('build.polyfillDynamicImport', '"polyfillDynamicImport" has been removed. Please use @vitejs/plugin-legacy if your target browsers do not support dynamic imports.', new Error());
- return false;
- }
- });
- if ((_h = config.build) === null || _h === void 0 ? void 0 : _h.cleanCssOptions) {
- logDeprecationWarning('build.cleanCssOptions', 'Vite now uses esbuild for CSS minification.');
- }
- if (((_j = config.build) === null || _j === void 0 ? void 0 : _j.terserOptions) && config.build.minify === 'esbuild') {
- logger.warn(source.yellow(`build.terserOptions is specified but build.minify is not set to use Terser. ` +
- `Note Vite now defaults to use esbuild for minification. If you still ` +
- `prefer Terser, set build.minify to "terser".`));
- }
- return resolved;
-}
-/**
- * Resolve base. Note that some users use Vite to build for non-web targets like
- * electron or expects to deploy
- */
-function resolveBaseUrl(base = '/', isBuild, logger) {
- // #1669 special treatment for empty for same dir relative base
- if (base === '' || base === './') {
- return isBuild ? base : '/';
- }
- if (base.startsWith('.')) {
- logger.warn(source.yellow.bold(`(!) invalid "base" option: ${base}. The value can only be an absolute ` +
- `URL, ./, or an empty string.`));
- base = '/';
- }
- // external URL
- if (isExternalUrl(base)) {
- if (!isBuild) {
- // get base from full url during dev
- const parsed = require$$0$8.parse(base);
- base = parsed.pathname || '/';
- }
- }
- else {
- // ensure leading slash
- if (!base.startsWith('/')) {
- logger.warn(source.yellow.bold(`(!) "base" option should start with a slash.`));
- base = '/' + base;
- }
- }
- // ensure ending slash
- if (!base.endsWith('/')) {
- logger.warn(source.yellow.bold(`(!) "base" option should end with a slash.`));
- base += '/';
- }
- return base;
-}
-function mergeConfigRecursively(a, b, rootPath) {
- const merged = { ...a };
- for (const key in b) {
- const value = b[key];
- if (value == null) {
- continue;
- }
- const existing = merged[key];
- if (Array.isArray(existing) && Array.isArray(value)) {
- merged[key] = [...existing, ...value];
- continue;
- }
- if (isObject$3(existing) && isObject$3(value)) {
- merged[key] = mergeConfigRecursively(existing, value, rootPath ? `${rootPath}.${key}` : key);
- continue;
- }
- // fields that require special handling
- if (existing != null) {
- if (key === 'alias' && (rootPath === 'resolve' || rootPath === '')) {
- merged[key] = mergeAlias(existing, value);
- continue;
- }
- else if (key === 'assetsInclude' && rootPath === '') {
- merged[key] = [].concat(existing, value);
- continue;
- }
- else if (key === 'noExternal' && existing === true) {
- continue;
- }
- }
- merged[key] = value;
- }
- return merged;
-}
-function mergeConfig(a, b, isRoot = true) {
- return mergeConfigRecursively(a, b, isRoot ? '' : '.');
-}
-function mergeAlias(a = [], b = []) {
- return [...normalizeAlias(a), ...normalizeAlias(b)];
-}
-function normalizeAlias(o) {
- return Array.isArray(o)
- ? o.map(normalizeSingleAlias)
- : Object.keys(o).map((find) => normalizeSingleAlias({
- find,
- replacement: o[find]
- }));
-}
-// https://github.com/vitejs/vite/issues/1363
-// work around https://github.com/rollup/plugins/issues/759
-function normalizeSingleAlias({ find, replacement }) {
- if (typeof find === 'string' &&
- find.endsWith('/') &&
- replacement.endsWith('/')) {
- find = find.slice(0, find.length - 1);
- replacement = replacement.slice(0, replacement.length - 1);
- }
- return { find, replacement };
-}
-function sortUserPlugins(plugins) {
- const prePlugins = [];
- const postPlugins = [];
- const normalPlugins = [];
- if (plugins) {
- plugins.flat().forEach((p) => {
- if (p.enforce === 'pre')
- prePlugins.push(p);
- else if (p.enforce === 'post')
- postPlugins.push(p);
- else
- normalPlugins.push(p);
- });
- }
- return [prePlugins, normalPlugins, postPlugins];
-}
-async function loadConfigFromFile(configEnv, configFile, configRoot = process.cwd(), logLevel) {
- const start = perf_hooks.performance.now();
- const getTime = () => `${(perf_hooks.performance.now() - start).toFixed(2)}ms`;
- let resolvedPath;
- let isTS = false;
- let isMjs = false;
- let dependencies = [];
- // check package.json for type: "module" and set `isMjs` to true
- try {
- const pkg = lookupFile(configRoot, ['package.json']);
- if (pkg && JSON.parse(pkg).type === 'module') {
- isMjs = true;
- }
- }
- catch (e) { }
- if (configFile) {
- // explicit config path is always resolved from cwd
- resolvedPath = path__default.resolve(configFile);
- isTS = configFile.endsWith('.ts');
- if (configFile.endsWith('.mjs')) {
- isMjs = true;
- }
- }
- else {
- // implicit config file loaded from inline root (if present)
- // otherwise from cwd
- const jsconfigFile = path__default.resolve(configRoot, 'vite.config.js');
- if (fs__default.existsSync(jsconfigFile)) {
- resolvedPath = jsconfigFile;
- }
- if (!resolvedPath) {
- const mjsconfigFile = path__default.resolve(configRoot, 'vite.config.mjs');
- if (fs__default.existsSync(mjsconfigFile)) {
- resolvedPath = mjsconfigFile;
- isMjs = true;
- }
- }
- if (!resolvedPath) {
- const tsconfigFile = path__default.resolve(configRoot, 'vite.config.ts');
- if (fs__default.existsSync(tsconfigFile)) {
- resolvedPath = tsconfigFile;
- isTS = true;
- }
- }
- }
- if (!resolvedPath) {
- debug$1('no config file found.');
- return null;
- }
- try {
- let userConfig;
- if (isMjs) {
- const fileUrl = require('url').pathToFileURL(resolvedPath);
- if (isTS) {
- // before we can register loaders without requiring users to run node
- // with --experimental-loader themselves, we have to do a hack here:
- // bundle the config file w/ ts transforms first, write it to disk,
- // load it with native Node ESM, then delete the file.
- const bundled = await bundleConfigFile(resolvedPath, true);
- dependencies = bundled.dependencies;
- fs__default.writeFileSync(resolvedPath + '.js', bundled.code);
- userConfig = (await dynamicImport(`${fileUrl}.js?t=${Date.now()}`))
- .default;
- fs__default.unlinkSync(resolvedPath + '.js');
- debug$1(`TS + native esm config loaded in ${getTime()}`, fileUrl);
- }
- else {
- // using Function to avoid this from being compiled away by TS/Rollup
- // append a query so that we force reload fresh config in case of
- // server restart
- userConfig = (await dynamicImport(`${fileUrl}?t=${Date.now()}`)).default;
- debug$1(`native esm config loaded in ${getTime()}`, fileUrl);
- }
- }
- if (!userConfig && !isTS && !isMjs) {
- // 1. try to directly require the module (assuming commonjs)
- try {
- // clear cache in case of server restart
- delete require.cache[require.resolve(resolvedPath)];
- userConfig = require(resolvedPath);
- debug$1(`cjs config loaded in ${getTime()}`);
- }
- catch (e) {
- const ignored = new RegExp([
- `Cannot use import statement`,
- `Must use import to load ES Module`,
- // #1635, #2050 some Node 12.x versions don't have esm detection
- // so it throws normal syntax errors when encountering esm syntax
- `Unexpected token`,
- `Unexpected identifier`
- ].join('|'));
- if (!ignored.test(e.message)) {
- throw e;
- }
- }
- }
- if (!userConfig) {
- // 2. if we reach here, the file is ts or using es import syntax, or
- // the user has type: "module" in their package.json (#917)
- // transpile es import syntax to require syntax using rollup.
- // lazy require rollup (it's actually in dependencies)
- const bundled = await bundleConfigFile(resolvedPath);
- dependencies = bundled.dependencies;
- userConfig = await loadConfigFromBundledFile(resolvedPath, bundled.code);
- debug$1(`bundled config file loaded in ${getTime()}`);
- }
- const config = await (typeof userConfig === 'function'
- ? userConfig(configEnv)
- : userConfig);
- if (!isObject$3(config)) {
- throw new Error(`config must export or return an object.`);
- }
- return {
- path: normalizePath$4(resolvedPath),
- config,
- dependencies
- };
- }
- catch (e) {
- createLogger(logLevel).error(source.red(`failed to load config from ${resolvedPath}`), { error: e });
- throw e;
- }
-}
-async function bundleConfigFile(fileName, mjs = false) {
- const result = await esbuild.build({
- absWorkingDir: process.cwd(),
- entryPoints: [fileName],
- outfile: 'out.js',
- write: false,
- platform: 'node',
- bundle: true,
- format: mjs ? 'esm' : 'cjs',
- sourcemap: 'inline',
- metafile: true,
- plugins: [
- {
- name: 'externalize-deps',
- setup(build) {
- build.onResolve({ filter: /.*/ }, (args) => {
- const id = args.path;
- if (id[0] !== '.' && !path__default.isAbsolute(id)) {
- return {
- external: true
- };
- }
- });
- }
- },
- {
- name: 'replace-import-meta',
- setup(build) {
- build.onLoad({ filter: /\.[jt]s$/ }, async (args) => {
- const contents = await fs__default.promises.readFile(args.path, 'utf8');
- return {
- loader: args.path.endsWith('.ts') ? 'ts' : 'js',
- contents: contents
- .replace(/\bimport\.meta\.url\b/g, JSON.stringify(`file://${args.path}`))
- .replace(/\b__dirname\b/g, JSON.stringify(path__default.dirname(args.path)))
- .replace(/\b__filename\b/g, JSON.stringify(args.path))
- };
- });
- }
- }
- ]
- });
- const { text } = result.outputFiles[0];
- return {
- code: text,
- dependencies: result.metafile ? Object.keys(result.metafile.inputs) : []
- };
-}
-async function loadConfigFromBundledFile(fileName, bundledCode) {
- const extension = path__default.extname(fileName);
- const defaultLoader = require.extensions[extension];
- require.extensions[extension] = (module, filename) => {
- if (filename === fileName) {
- module._compile(bundledCode, filename);
- }
- else {
- defaultLoader(module, filename);
- }
- };
- // clear cache in case of server restart
- delete require.cache[require.resolve(fileName)];
- const raw = require(fileName);
- const config = raw.__esModule ? raw.default : raw;
- require.extensions[extension] = defaultLoader;
- return config;
-}
-function loadEnv(mode, envDir, prefixes = 'VITE_') {
- if (mode === 'local') {
- throw new Error(`"local" cannot be used as a mode name because it conflicts with ` +
- `the .local postfix for .env files.`);
- }
- prefixes = arraify(prefixes);
- const env = {};
- const envFiles = [
- /** mode local file */ `.env.${mode}.local`,
- /** mode file */ `.env.${mode}`,
- /** local file */ `.env.local`,
- /** default file */ `.env`
- ];
- // check if there are actual env variables starting with VITE_*
- // these are typically provided inline and should be prioritized
- for (const key in process.env) {
- if (prefixes.some((prefix) => key.startsWith(prefix)) &&
- env[key] === undefined) {
- env[key] = process.env[key];
- }
- }
- for (const file of envFiles) {
- const path = lookupFile(envDir, [file], true);
- if (path) {
- const parsed = main$1.parse(fs__default.readFileSync(path), {
- debug: !!process.env.DEBUG || undefined
- });
- // let environment variables use each other
- main({
- parsed,
- // prevent process.env mutation
- ignoreProcessEnv: true
- });
- // only keys that start with prefix are exposed to client
- for (const [key, value] of Object.entries(parsed)) {
- if (prefixes.some((prefix) => key.startsWith(prefix)) &&
- env[key] === undefined) {
- env[key] = value;
- }
- else if (key === 'NODE_ENV') {
- // NODE_ENV override in .env file
- process.env.VITE_USER_NODE_ENV = value;
- }
- }
- }
- }
- return env;
-}
-function resolveEnvPrefix({ envPrefix = 'VITE_' }) {
- envPrefix = arraify(envPrefix);
- if (envPrefix.some((prefix) => prefix === '')) {
- throw new Error(`envPrefix option contains value '', which could lead unexpected exposure of sensitive information.`);
- }
- return envPrefix;
-}
-
-var compression$2 = {exports: {}};
-
-var negotiator = {exports: {}};
-
-var charset = {exports: {}};
-
-/**
- * negotiator
- * Copyright(c) 2012 Isaac Z. Schlueter
- * Copyright(c) 2014 Federico Romero
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-charset.exports = preferredCharsets;
-charset.exports.preferredCharsets = preferredCharsets;
-
-/**
- * Module variables.
- * @private
- */
-
-var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
-
-/**
- * Parse the Accept-Charset header.
- * @private
- */
-
-function parseAcceptCharset(accept) {
- var accepts = accept.split(',');
-
- for (var i = 0, j = 0; i < accepts.length; i++) {
- var charset = parseCharset(accepts[i].trim(), i);
-
- if (charset) {
- accepts[j++] = charset;
- }
- }
-
- // trim accepts
- accepts.length = j;
-
- return accepts;
-}
-
-/**
- * Parse a charset from the Accept-Charset header.
- * @private
- */
-
-function parseCharset(str, i) {
- var match = simpleCharsetRegExp.exec(str);
- if (!match) return null;
-
- var charset = match[1];
- var q = 1;
- if (match[2]) {
- var params = match[2].split(';');
- for (var j = 0; j < params.length; j++) {
- var p = params[j].trim().split('=');
- if (p[0] === 'q') {
- q = parseFloat(p[1]);
- break;
- }
- }
- }
-
- return {
- charset: charset,
- q: q,
- i: i
- };
-}
-
-/**
- * Get the priority of a charset.
- * @private
- */
-
-function getCharsetPriority(charset, accepted, index) {
- var priority = {o: -1, q: 0, s: 0};
-
- for (var i = 0; i < accepted.length; i++) {
- var spec = specify$3(charset, accepted[i], index);
-
- if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
- priority = spec;
- }
- }
-
- return priority;
-}
-
-/**
- * Get the specificity of the charset.
- * @private
- */
-
-function specify$3(charset, spec, index) {
- var s = 0;
- if(spec.charset.toLowerCase() === charset.toLowerCase()){
- s |= 1;
- } else if (spec.charset !== '*' ) {
- return null
- }
-
- return {
- i: index,
- o: spec.i,
- q: spec.q,
- s: s
- }
-}
-
-/**
- * Get the preferred charsets from an Accept-Charset header.
- * @public
- */
-
-function preferredCharsets(accept, provided) {
- // RFC 2616 sec 14.2: no header = *
- var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');
-
- if (!provided) {
- // sorted list of all charsets
- return accepts
- .filter(isQuality$3)
- .sort(compareSpecs$3)
- .map(getFullCharset);
- }
-
- var priorities = provided.map(function getPriority(type, index) {
- return getCharsetPriority(type, accepts, index);
- });
-
- // sorted list of accepted charsets
- return priorities.filter(isQuality$3).sort(compareSpecs$3).map(function getCharset(priority) {
- return provided[priorities.indexOf(priority)];
- });
-}
-
-/**
- * Compare two specs.
- * @private
- */
-
-function compareSpecs$3(a, b) {
- return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
-}
-
-/**
- * Get full charset string.
- * @private
- */
-
-function getFullCharset(spec) {
- return spec.charset;
-}
-
-/**
- * Check if a spec has any quality.
- * @private
- */
-
-function isQuality$3(spec) {
- return spec.q > 0;
-}
-
-var encoding = {exports: {}};
-
-/**
- * negotiator
- * Copyright(c) 2012 Isaac Z. Schlueter
- * Copyright(c) 2014 Federico Romero
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-encoding.exports = preferredEncodings;
-encoding.exports.preferredEncodings = preferredEncodings;
-
-/**
- * Module variables.
- * @private
- */
-
-var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
-
-/**
- * Parse the Accept-Encoding header.
- * @private
- */
-
-function parseAcceptEncoding(accept) {
- var accepts = accept.split(',');
- var hasIdentity = false;
- var minQuality = 1;
-
- for (var i = 0, j = 0; i < accepts.length; i++) {
- var encoding = parseEncoding(accepts[i].trim(), i);
-
- if (encoding) {
- accepts[j++] = encoding;
- hasIdentity = hasIdentity || specify$2('identity', encoding);
- minQuality = Math.min(minQuality, encoding.q || 1);
- }
- }
-
- if (!hasIdentity) {
- /*
- * If identity doesn't explicitly appear in the accept-encoding header,
- * it's added to the list of acceptable encoding with the lowest q
- */
- accepts[j++] = {
- encoding: 'identity',
- q: minQuality,
- i: i
- };
- }
-
- // trim accepts
- accepts.length = j;
-
- return accepts;
-}
-
-/**
- * Parse an encoding from the Accept-Encoding header.
- * @private
- */
-
-function parseEncoding(str, i) {
- var match = simpleEncodingRegExp.exec(str);
- if (!match) return null;
-
- var encoding = match[1];
- var q = 1;
- if (match[2]) {
- var params = match[2].split(';');
- for (var j = 0; j < params.length; j++) {
- var p = params[j].trim().split('=');
- if (p[0] === 'q') {
- q = parseFloat(p[1]);
- break;
- }
- }
- }
-
- return {
- encoding: encoding,
- q: q,
- i: i
- };
-}
-
-/**
- * Get the priority of an encoding.
- * @private
- */
-
-function getEncodingPriority(encoding, accepted, index) {
- var priority = {o: -1, q: 0, s: 0};
-
- for (var i = 0; i < accepted.length; i++) {
- var spec = specify$2(encoding, accepted[i], index);
-
- if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
- priority = spec;
- }
- }
-
- return priority;
-}
-
-/**
- * Get the specificity of the encoding.
- * @private
- */
-
-function specify$2(encoding, spec, index) {
- var s = 0;
- if(spec.encoding.toLowerCase() === encoding.toLowerCase()){
- s |= 1;
- } else if (spec.encoding !== '*' ) {
- return null
- }
-
- return {
- i: index,
- o: spec.i,
- q: spec.q,
- s: s
- }
-}
-/**
- * Get the preferred encodings from an Accept-Encoding header.
- * @public
- */
-
-function preferredEncodings(accept, provided) {
- var accepts = parseAcceptEncoding(accept || '');
-
- if (!provided) {
- // sorted list of all encodings
- return accepts
- .filter(isQuality$2)
- .sort(compareSpecs$2)
- .map(getFullEncoding);
- }
-
- var priorities = provided.map(function getPriority(type, index) {
- return getEncodingPriority(type, accepts, index);
- });
-
- // sorted list of accepted encodings
- return priorities.filter(isQuality$2).sort(compareSpecs$2).map(function getEncoding(priority) {
- return provided[priorities.indexOf(priority)];
- });
-}
-
-/**
- * Compare two specs.
- * @private
- */
-
-function compareSpecs$2(a, b) {
- return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
-}
-
-/**
- * Get full encoding string.
- * @private
- */
-
-function getFullEncoding(spec) {
- return spec.encoding;
-}
-
-/**
- * Check if a spec has any quality.
- * @private
- */
-
-function isQuality$2(spec) {
- return spec.q > 0;
-}
-
-var language = {exports: {}};
-
-/**
- * negotiator
- * Copyright(c) 2012 Isaac Z. Schlueter
- * Copyright(c) 2014 Federico Romero
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-language.exports = preferredLanguages;
-language.exports.preferredLanguages = preferredLanguages;
-
-/**
- * Module variables.
- * @private
- */
-
-var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/;
-
-/**
- * Parse the Accept-Language header.
- * @private
- */
-
-function parseAcceptLanguage(accept) {
- var accepts = accept.split(',');
-
- for (var i = 0, j = 0; i < accepts.length; i++) {
- var language = parseLanguage(accepts[i].trim(), i);
-
- if (language) {
- accepts[j++] = language;
- }
- }
-
- // trim accepts
- accepts.length = j;
-
- return accepts;
-}
-
-/**
- * Parse a language from the Accept-Language header.
- * @private
- */
-
-function parseLanguage(str, i) {
- var match = simpleLanguageRegExp.exec(str);
- if (!match) return null;
-
- var prefix = match[1],
- suffix = match[2],
- full = prefix;
-
- if (suffix) full += "-" + suffix;
-
- var q = 1;
- if (match[3]) {
- var params = match[3].split(';');
- for (var j = 0; j < params.length; j++) {
- var p = params[j].split('=');
- if (p[0] === 'q') q = parseFloat(p[1]);
- }
- }
-
- return {
- prefix: prefix,
- suffix: suffix,
- q: q,
- i: i,
- full: full
- };
-}
-
-/**
- * Get the priority of a language.
- * @private
- */
-
-function getLanguagePriority(language, accepted, index) {
- var priority = {o: -1, q: 0, s: 0};
-
- for (var i = 0; i < accepted.length; i++) {
- var spec = specify$1(language, accepted[i], index);
-
- if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
- priority = spec;
- }
- }
-
- return priority;
-}
-
-/**
- * Get the specificity of the language.
- * @private
- */
-
-function specify$1(language, spec, index) {
- var p = parseLanguage(language);
- if (!p) return null;
- var s = 0;
- if(spec.full.toLowerCase() === p.full.toLowerCase()){
- s |= 4;
- } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {
- s |= 2;
- } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {
- s |= 1;
- } else if (spec.full !== '*' ) {
- return null
- }
-
- return {
- i: index,
- o: spec.i,
- q: spec.q,
- s: s
- }
-}
-/**
- * Get the preferred languages from an Accept-Language header.
- * @public
- */
-
-function preferredLanguages(accept, provided) {
- // RFC 2616 sec 14.4: no header = *
- var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');
-
- if (!provided) {
- // sorted list of all languages
- return accepts
- .filter(isQuality$1)
- .sort(compareSpecs$1)
- .map(getFullLanguage);
- }
-
- var priorities = provided.map(function getPriority(type, index) {
- return getLanguagePriority(type, accepts, index);
- });
-
- // sorted list of accepted languages
- return priorities.filter(isQuality$1).sort(compareSpecs$1).map(function getLanguage(priority) {
- return provided[priorities.indexOf(priority)];
- });
-}
-
-/**
- * Compare two specs.
- * @private
- */
-
-function compareSpecs$1(a, b) {
- return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
-}
-
-/**
- * Get full language string.
- * @private
- */
-
-function getFullLanguage(spec) {
- return spec.full;
-}
-
-/**
- * Check if a spec has any quality.
- * @private
- */
-
-function isQuality$1(spec) {
- return spec.q > 0;
-}
-
-var mediaType = {exports: {}};
-
-/**
- * negotiator
- * Copyright(c) 2012 Isaac Z. Schlueter
- * Copyright(c) 2014 Federico Romero
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-mediaType.exports = preferredMediaTypes;
-mediaType.exports.preferredMediaTypes = preferredMediaTypes;
-
-/**
- * Module variables.
- * @private
- */
-
-var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
-
-/**
- * Parse the Accept header.
- * @private
- */
-
-function parseAccept(accept) {
- var accepts = splitMediaTypes(accept);
-
- for (var i = 0, j = 0; i < accepts.length; i++) {
- var mediaType = parseMediaType(accepts[i].trim(), i);
-
- if (mediaType) {
- accepts[j++] = mediaType;
- }
- }
-
- // trim accepts
- accepts.length = j;
-
- return accepts;
-}
-
-/**
- * Parse a media type from the Accept header.
- * @private
- */
-
-function parseMediaType(str, i) {
- var match = simpleMediaTypeRegExp.exec(str);
- if (!match) return null;
-
- var params = Object.create(null);
- var q = 1;
- var subtype = match[2];
- var type = match[1];
-
- if (match[3]) {
- var kvps = splitParameters(match[3]).map(splitKeyValuePair);
-
- for (var j = 0; j < kvps.length; j++) {
- var pair = kvps[j];
- var key = pair[0].toLowerCase();
- var val = pair[1];
-
- // get the value, unwrapping quotes
- var value = val && val[0] === '"' && val[val.length - 1] === '"'
- ? val.substr(1, val.length - 2)
- : val;
-
- if (key === 'q') {
- q = parseFloat(value);
- break;
- }
-
- // store parameter
- params[key] = value;
- }
- }
-
- return {
- type: type,
- subtype: subtype,
- params: params,
- q: q,
- i: i
- };
-}
-
-/**
- * Get the priority of a media type.
- * @private
- */
-
-function getMediaTypePriority(type, accepted, index) {
- var priority = {o: -1, q: 0, s: 0};
-
- for (var i = 0; i < accepted.length; i++) {
- var spec = specify(type, accepted[i], index);
-
- if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
- priority = spec;
- }
- }
-
- return priority;
-}
-
-/**
- * Get the specificity of the media type.
- * @private
- */
-
-function specify(type, spec, index) {
- var p = parseMediaType(type);
- var s = 0;
-
- if (!p) {
- return null;
- }
-
- if(spec.type.toLowerCase() == p.type.toLowerCase()) {
- s |= 4;
- } else if(spec.type != '*') {
- return null;
- }
-
- if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {
- s |= 2;
- } else if(spec.subtype != '*') {
- return null;
- }
-
- var keys = Object.keys(spec.params);
- if (keys.length > 0) {
- if (keys.every(function (k) {
- return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();
- })) {
- s |= 1;
- } else {
- return null
- }
- }
-
- return {
- i: index,
- o: spec.i,
- q: spec.q,
- s: s,
- }
-}
-
-/**
- * Get the preferred media types from an Accept header.
- * @public
- */
-
-function preferredMediaTypes(accept, provided) {
- // RFC 2616 sec 14.2: no header = */*
- var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');
-
- if (!provided) {
- // sorted list of all types
- return accepts
- .filter(isQuality)
- .sort(compareSpecs)
- .map(getFullType);
- }
-
- var priorities = provided.map(function getPriority(type, index) {
- return getMediaTypePriority(type, accepts, index);
- });
-
- // sorted list of accepted types
- return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {
- return provided[priorities.indexOf(priority)];
- });
-}
-
-/**
- * Compare two specs.
- * @private
- */
-
-function compareSpecs(a, b) {
- return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
-}
-
-/**
- * Get full type string.
- * @private
- */
-
-function getFullType(spec) {
- return spec.type + '/' + spec.subtype;
-}
-
-/**
- * Check if a spec has any quality.
- * @private
- */
-
-function isQuality(spec) {
- return spec.q > 0;
-}
-
-/**
- * Count the number of quotes in a string.
- * @private
- */
-
-function quoteCount(string) {
- var count = 0;
- var index = 0;
-
- while ((index = string.indexOf('"', index)) !== -1) {
- count++;
- index++;
- }
-
- return count;
-}
-
-/**
- * Split a key value pair.
- * @private
- */
-
-function splitKeyValuePair(str) {
- var index = str.indexOf('=');
- var key;
- var val;
-
- if (index === -1) {
- key = str;
- } else {
- key = str.substr(0, index);
- val = str.substr(index + 1);
- }
-
- return [key, val];
-}
-
-/**
- * Split an Accept header into media types.
- * @private
- */
-
-function splitMediaTypes(accept) {
- var accepts = accept.split(',');
-
- for (var i = 1, j = 0; i < accepts.length; i++) {
- if (quoteCount(accepts[j]) % 2 == 0) {
- accepts[++j] = accepts[i];
- } else {
- accepts[j] += ',' + accepts[i];
- }
- }
-
- // trim accepts
- accepts.length = j + 1;
-
- return accepts;
-}
-
-/**
- * Split a string of parameters.
- * @private
- */
-
-function splitParameters(str) {
- var parameters = str.split(';');
-
- for (var i = 1, j = 0; i < parameters.length; i++) {
- if (quoteCount(parameters[j]) % 2 == 0) {
- parameters[++j] = parameters[i];
- } else {
- parameters[j] += ';' + parameters[i];
- }
- }
-
- // trim parameters
- parameters.length = j + 1;
-
- for (var i = 0; i < parameters.length; i++) {
- parameters[i] = parameters[i].trim();
- }
-
- return parameters;
-}
-
-/*!
- * negotiator
- * Copyright(c) 2012 Federico Romero
- * Copyright(c) 2012-2014 Isaac Z. Schlueter
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Cached loaded submodules.
- * @private
- */
-
-var modules = Object.create(null);
-
-/**
- * Module exports.
- * @public
- */
-
-negotiator.exports = Negotiator$1;
-negotiator.exports.Negotiator = Negotiator$1;
-
-/**
- * Create a Negotiator instance from a request.
- * @param {object} request
- * @public
- */
-
-function Negotiator$1(request) {
- if (!(this instanceof Negotiator$1)) {
- return new Negotiator$1(request);
- }
-
- this.request = request;
-}
-
-Negotiator$1.prototype.charset = function charset(available) {
- var set = this.charsets(available);
- return set && set[0];
-};
-
-Negotiator$1.prototype.charsets = function charsets(available) {
- var preferredCharsets = loadModule('charset').preferredCharsets;
- return preferredCharsets(this.request.headers['accept-charset'], available);
-};
-
-Negotiator$1.prototype.encoding = function encoding(available) {
- var set = this.encodings(available);
- return set && set[0];
-};
-
-Negotiator$1.prototype.encodings = function encodings(available) {
- var preferredEncodings = loadModule('encoding').preferredEncodings;
- return preferredEncodings(this.request.headers['accept-encoding'], available);
-};
-
-Negotiator$1.prototype.language = function language(available) {
- var set = this.languages(available);
- return set && set[0];
-};
-
-Negotiator$1.prototype.languages = function languages(available) {
- var preferredLanguages = loadModule('language').preferredLanguages;
- return preferredLanguages(this.request.headers['accept-language'], available);
-};
-
-Negotiator$1.prototype.mediaType = function mediaType(available) {
- var set = this.mediaTypes(available);
- return set && set[0];
-};
-
-Negotiator$1.prototype.mediaTypes = function mediaTypes(available) {
- var preferredMediaTypes = loadModule('mediaType').preferredMediaTypes;
- return preferredMediaTypes(this.request.headers.accept, available);
-};
-
-// Backwards compatibility
-Negotiator$1.prototype.preferredCharset = Negotiator$1.prototype.charset;
-Negotiator$1.prototype.preferredCharsets = Negotiator$1.prototype.charsets;
-Negotiator$1.prototype.preferredEncoding = Negotiator$1.prototype.encoding;
-Negotiator$1.prototype.preferredEncodings = Negotiator$1.prototype.encodings;
-Negotiator$1.prototype.preferredLanguage = Negotiator$1.prototype.language;
-Negotiator$1.prototype.preferredLanguages = Negotiator$1.prototype.languages;
-Negotiator$1.prototype.preferredMediaType = Negotiator$1.prototype.mediaType;
-Negotiator$1.prototype.preferredMediaTypes = Negotiator$1.prototype.mediaTypes;
-
-/**
- * Load the given module.
- * @private
- */
-
-function loadModule(moduleName) {
- var module = modules[moduleName];
-
- if (module !== undefined) {
- return module;
- }
-
- // This uses a switch for static require analysis
- switch (moduleName) {
- case 'charset':
- module = charset.exports;
- break;
- case 'encoding':
- module = encoding.exports;
- break;
- case 'language':
- module = language.exports;
- break;
- case 'mediaType':
- module = mediaType.exports;
- break;
- default:
- throw new Error('Cannot find module \'' + moduleName + '\'');
- }
-
- // Store to prevent invoking require()
- modules[moduleName] = module;
-
- return module;
-}
-
-var mimeTypes = {};
-
-var require$$0$1 = {
- "application/1d-interleaved-parityfec": {
- source: "iana"
-},
- "application/3gpdash-qoe-report+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/3gpp-ims+xml": {
- source: "iana",
- compressible: true
-},
- "application/3gpphal+json": {
- source: "iana",
- compressible: true
-},
- "application/3gpphalforms+json": {
- source: "iana",
- compressible: true
-},
- "application/a2l": {
- source: "iana"
-},
- "application/activemessage": {
- source: "iana"
-},
- "application/activity+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-costmap+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-costmapfilter+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-directory+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-endpointcost+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-endpointcostparams+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-endpointprop+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-endpointpropparams+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-error+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-networkmap+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-networkmapfilter+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-updatestreamcontrol+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-updatestreamparams+json": {
- source: "iana",
- compressible: true
-},
- "application/aml": {
- source: "iana"
-},
- "application/andrew-inset": {
- source: "iana",
- extensions: [
- "ez"
- ]
-},
- "application/applefile": {
- source: "iana"
-},
- "application/applixware": {
- source: "apache",
- extensions: [
- "aw"
- ]
-},
- "application/atf": {
- source: "iana"
-},
- "application/atfx": {
- source: "iana"
-},
- "application/atom+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "atom"
- ]
-},
- "application/atomcat+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "atomcat"
- ]
-},
- "application/atomdeleted+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "atomdeleted"
- ]
-},
- "application/atomicmail": {
- source: "iana"
-},
- "application/atomsvc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "atomsvc"
- ]
-},
- "application/atsc-dwd+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "dwd"
- ]
-},
- "application/atsc-dynamic-event-message": {
- source: "iana"
-},
- "application/atsc-held+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "held"
- ]
-},
- "application/atsc-rdt+json": {
- source: "iana",
- compressible: true
-},
- "application/atsc-rsat+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rsat"
- ]
-},
- "application/atxml": {
- source: "iana"
-},
- "application/auth-policy+xml": {
- source: "iana",
- compressible: true
-},
- "application/bacnet-xdd+zip": {
- source: "iana",
- compressible: false
-},
- "application/batch-smtp": {
- source: "iana"
-},
- "application/bdoc": {
- compressible: false,
- extensions: [
- "bdoc"
- ]
-},
- "application/beep+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/calendar+json": {
- source: "iana",
- compressible: true
-},
- "application/calendar+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xcs"
- ]
-},
- "application/call-completion": {
- source: "iana"
-},
- "application/cals-1840": {
- source: "iana"
-},
- "application/captive+json": {
- source: "iana",
- compressible: true
-},
- "application/cbor": {
- source: "iana"
-},
- "application/cbor-seq": {
- source: "iana"
-},
- "application/cccex": {
- source: "iana"
-},
- "application/ccmp+xml": {
- source: "iana",
- compressible: true
-},
- "application/ccxml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ccxml"
- ]
-},
- "application/cdfx+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "cdfx"
- ]
-},
- "application/cdmi-capability": {
- source: "iana",
- extensions: [
- "cdmia"
- ]
-},
- "application/cdmi-container": {
- source: "iana",
- extensions: [
- "cdmic"
- ]
-},
- "application/cdmi-domain": {
- source: "iana",
- extensions: [
- "cdmid"
- ]
-},
- "application/cdmi-object": {
- source: "iana",
- extensions: [
- "cdmio"
- ]
-},
- "application/cdmi-queue": {
- source: "iana",
- extensions: [
- "cdmiq"
- ]
-},
- "application/cdni": {
- source: "iana"
-},
- "application/cea": {
- source: "iana"
-},
- "application/cea-2018+xml": {
- source: "iana",
- compressible: true
-},
- "application/cellml+xml": {
- source: "iana",
- compressible: true
-},
- "application/cfw": {
- source: "iana"
-},
- "application/clr": {
- source: "iana"
-},
- "application/clue+xml": {
- source: "iana",
- compressible: true
-},
- "application/clue_info+xml": {
- source: "iana",
- compressible: true
-},
- "application/cms": {
- source: "iana"
-},
- "application/cnrp+xml": {
- source: "iana",
- compressible: true
-},
- "application/coap-group+json": {
- source: "iana",
- compressible: true
-},
- "application/coap-payload": {
- source: "iana"
-},
- "application/commonground": {
- source: "iana"
-},
- "application/conference-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/cose": {
- source: "iana"
-},
- "application/cose-key": {
- source: "iana"
-},
- "application/cose-key-set": {
- source: "iana"
-},
- "application/cpl+xml": {
- source: "iana",
- compressible: true
-},
- "application/csrattrs": {
- source: "iana"
-},
- "application/csta+xml": {
- source: "iana",
- compressible: true
-},
- "application/cstadata+xml": {
- source: "iana",
- compressible: true
-},
- "application/csvm+json": {
- source: "iana",
- compressible: true
-},
- "application/cu-seeme": {
- source: "apache",
- extensions: [
- "cu"
- ]
-},
- "application/cwt": {
- source: "iana"
-},
- "application/cybercash": {
- source: "iana"
-},
- "application/dart": {
- compressible: true
-},
- "application/dash+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mpd"
- ]
-},
- "application/dashdelta": {
- source: "iana"
-},
- "application/davmount+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "davmount"
- ]
-},
- "application/dca-rft": {
- source: "iana"
-},
- "application/dcd": {
- source: "iana"
-},
- "application/dec-dx": {
- source: "iana"
-},
- "application/dialog-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/dicom": {
- source: "iana"
-},
- "application/dicom+json": {
- source: "iana",
- compressible: true
-},
- "application/dicom+xml": {
- source: "iana",
- compressible: true
-},
- "application/dii": {
- source: "iana"
-},
- "application/dit": {
- source: "iana"
-},
- "application/dns": {
- source: "iana"
-},
- "application/dns+json": {
- source: "iana",
- compressible: true
-},
- "application/dns-message": {
- source: "iana"
-},
- "application/docbook+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "dbk"
- ]
-},
- "application/dots+cbor": {
- source: "iana"
-},
- "application/dskpp+xml": {
- source: "iana",
- compressible: true
-},
- "application/dssc+der": {
- source: "iana",
- extensions: [
- "dssc"
- ]
-},
- "application/dssc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xdssc"
- ]
-},
- "application/dvcs": {
- source: "iana"
-},
- "application/ecmascript": {
- source: "iana",
- compressible: true,
- extensions: [
- "es",
- "ecma"
- ]
-},
- "application/edi-consent": {
- source: "iana"
-},
- "application/edi-x12": {
- source: "iana",
- compressible: false
-},
- "application/edifact": {
- source: "iana",
- compressible: false
-},
- "application/efi": {
- source: "iana"
-},
- "application/elm+json": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/elm+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.cap+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/emergencycalldata.comment+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.control+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.deviceinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.ecall.msd": {
- source: "iana"
-},
- "application/emergencycalldata.providerinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.serviceinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.subscriberinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.veds+xml": {
- source: "iana",
- compressible: true
-},
- "application/emma+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "emma"
- ]
-},
- "application/emotionml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "emotionml"
- ]
-},
- "application/encaprtp": {
- source: "iana"
-},
- "application/epp+xml": {
- source: "iana",
- compressible: true
-},
- "application/epub+zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "epub"
- ]
-},
- "application/eshop": {
- source: "iana"
-},
- "application/exi": {
- source: "iana",
- extensions: [
- "exi"
- ]
-},
- "application/expect-ct-report+json": {
- source: "iana",
- compressible: true
-},
- "application/fastinfoset": {
- source: "iana"
-},
- "application/fastsoap": {
- source: "iana"
-},
- "application/fdt+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "fdt"
- ]
-},
- "application/fhir+json": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/fhir+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/fido.trusted-apps+json": {
- compressible: true
-},
- "application/fits": {
- source: "iana"
-},
- "application/flexfec": {
- source: "iana"
-},
- "application/font-sfnt": {
- source: "iana"
-},
- "application/font-tdpfr": {
- source: "iana",
- extensions: [
- "pfr"
- ]
-},
- "application/font-woff": {
- source: "iana",
- compressible: false
-},
- "application/framework-attributes+xml": {
- source: "iana",
- compressible: true
-},
- "application/geo+json": {
- source: "iana",
- compressible: true,
- extensions: [
- "geojson"
- ]
-},
- "application/geo+json-seq": {
- source: "iana"
-},
- "application/geopackage+sqlite3": {
- source: "iana"
-},
- "application/geoxacml+xml": {
- source: "iana",
- compressible: true
-},
- "application/gltf-buffer": {
- source: "iana"
-},
- "application/gml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "gml"
- ]
-},
- "application/gpx+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "gpx"
- ]
-},
- "application/gxf": {
- source: "apache",
- extensions: [
- "gxf"
- ]
-},
- "application/gzip": {
- source: "iana",
- compressible: false,
- extensions: [
- "gz"
- ]
-},
- "application/h224": {
- source: "iana"
-},
- "application/held+xml": {
- source: "iana",
- compressible: true
-},
- "application/hjson": {
- extensions: [
- "hjson"
- ]
-},
- "application/http": {
- source: "iana"
-},
- "application/hyperstudio": {
- source: "iana",
- extensions: [
- "stk"
- ]
-},
- "application/ibe-key-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/ibe-pkg-reply+xml": {
- source: "iana",
- compressible: true
-},
- "application/ibe-pp-data": {
- source: "iana"
-},
- "application/iges": {
- source: "iana"
-},
- "application/im-iscomposing+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/index": {
- source: "iana"
-},
- "application/index.cmd": {
- source: "iana"
-},
- "application/index.obj": {
- source: "iana"
-},
- "application/index.response": {
- source: "iana"
-},
- "application/index.vnd": {
- source: "iana"
-},
- "application/inkml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ink",
- "inkml"
- ]
-},
- "application/iotp": {
- source: "iana"
-},
- "application/ipfix": {
- source: "iana",
- extensions: [
- "ipfix"
- ]
-},
- "application/ipp": {
- source: "iana"
-},
- "application/isup": {
- source: "iana"
-},
- "application/its+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "its"
- ]
-},
- "application/java-archive": {
- source: "apache",
- compressible: false,
- extensions: [
- "jar",
- "war",
- "ear"
- ]
-},
- "application/java-serialized-object": {
- source: "apache",
- compressible: false,
- extensions: [
- "ser"
- ]
-},
- "application/java-vm": {
- source: "apache",
- compressible: false,
- extensions: [
- "class"
- ]
-},
- "application/javascript": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "js",
- "mjs"
- ]
-},
- "application/jf2feed+json": {
- source: "iana",
- compressible: true
-},
- "application/jose": {
- source: "iana"
-},
- "application/jose+json": {
- source: "iana",
- compressible: true
-},
- "application/jrd+json": {
- source: "iana",
- compressible: true
-},
- "application/jscalendar+json": {
- source: "iana",
- compressible: true
-},
- "application/json": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "json",
- "map"
- ]
-},
- "application/json-patch+json": {
- source: "iana",
- compressible: true
-},
- "application/json-seq": {
- source: "iana"
-},
- "application/json5": {
- extensions: [
- "json5"
- ]
-},
- "application/jsonml+json": {
- source: "apache",
- compressible: true,
- extensions: [
- "jsonml"
- ]
-},
- "application/jwk+json": {
- source: "iana",
- compressible: true
-},
- "application/jwk-set+json": {
- source: "iana",
- compressible: true
-},
- "application/jwt": {
- source: "iana"
-},
- "application/kpml-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/kpml-response+xml": {
- source: "iana",
- compressible: true
-},
- "application/ld+json": {
- source: "iana",
- compressible: true,
- extensions: [
- "jsonld"
- ]
-},
- "application/lgr+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "lgr"
- ]
-},
- "application/link-format": {
- source: "iana"
-},
- "application/load-control+xml": {
- source: "iana",
- compressible: true
-},
- "application/lost+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "lostxml"
- ]
-},
- "application/lostsync+xml": {
- source: "iana",
- compressible: true
-},
- "application/lpf+zip": {
- source: "iana",
- compressible: false
-},
- "application/lxf": {
- source: "iana"
-},
- "application/mac-binhex40": {
- source: "iana",
- extensions: [
- "hqx"
- ]
-},
- "application/mac-compactpro": {
- source: "apache",
- extensions: [
- "cpt"
- ]
-},
- "application/macwriteii": {
- source: "iana"
-},
- "application/mads+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mads"
- ]
-},
- "application/manifest+json": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "webmanifest"
- ]
-},
- "application/marc": {
- source: "iana",
- extensions: [
- "mrc"
- ]
-},
- "application/marcxml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mrcx"
- ]
-},
- "application/mathematica": {
- source: "iana",
- extensions: [
- "ma",
- "nb",
- "mb"
- ]
-},
- "application/mathml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mathml"
- ]
-},
- "application/mathml-content+xml": {
- source: "iana",
- compressible: true
-},
- "application/mathml-presentation+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-associated-procedure-description+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-deregister+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-envelope+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-msk+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-msk-response+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-protection-description+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-reception-report+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-register+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-register-response+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-schedule+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-user-service-description+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbox": {
- source: "iana",
- extensions: [
- "mbox"
- ]
-},
- "application/media-policy-dataset+xml": {
- source: "iana",
- compressible: true
-},
- "application/media_control+xml": {
- source: "iana",
- compressible: true
-},
- "application/mediaservercontrol+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mscml"
- ]
-},
- "application/merge-patch+json": {
- source: "iana",
- compressible: true
-},
- "application/metalink+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "metalink"
- ]
-},
- "application/metalink4+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "meta4"
- ]
-},
- "application/mets+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mets"
- ]
-},
- "application/mf4": {
- source: "iana"
-},
- "application/mikey": {
- source: "iana"
-},
- "application/mipc": {
- source: "iana"
-},
- "application/missing-blocks+cbor-seq": {
- source: "iana"
-},
- "application/mmt-aei+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "maei"
- ]
-},
- "application/mmt-usd+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "musd"
- ]
-},
- "application/mods+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mods"
- ]
-},
- "application/moss-keys": {
- source: "iana"
-},
- "application/moss-signature": {
- source: "iana"
-},
- "application/mosskey-data": {
- source: "iana"
-},
- "application/mosskey-request": {
- source: "iana"
-},
- "application/mp21": {
- source: "iana",
- extensions: [
- "m21",
- "mp21"
- ]
-},
- "application/mp4": {
- source: "iana",
- extensions: [
- "mp4s",
- "m4p"
- ]
-},
- "application/mpeg4-generic": {
- source: "iana"
-},
- "application/mpeg4-iod": {
- source: "iana"
-},
- "application/mpeg4-iod-xmt": {
- source: "iana"
-},
- "application/mrb-consumer+xml": {
- source: "iana",
- compressible: true
-},
- "application/mrb-publish+xml": {
- source: "iana",
- compressible: true
-},
- "application/msc-ivr+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/msc-mixer+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/msword": {
- source: "iana",
- compressible: false,
- extensions: [
- "doc",
- "dot"
- ]
-},
- "application/mud+json": {
- source: "iana",
- compressible: true
-},
- "application/multipart-core": {
- source: "iana"
-},
- "application/mxf": {
- source: "iana",
- extensions: [
- "mxf"
- ]
-},
- "application/n-quads": {
- source: "iana",
- extensions: [
- "nq"
- ]
-},
- "application/n-triples": {
- source: "iana",
- extensions: [
- "nt"
- ]
-},
- "application/nasdata": {
- source: "iana"
-},
- "application/news-checkgroups": {
- source: "iana",
- charset: "US-ASCII"
-},
- "application/news-groupinfo": {
- source: "iana",
- charset: "US-ASCII"
-},
- "application/news-transmission": {
- source: "iana"
-},
- "application/nlsml+xml": {
- source: "iana",
- compressible: true
-},
- "application/node": {
- source: "iana",
- extensions: [
- "cjs"
- ]
-},
- "application/nss": {
- source: "iana"
-},
- "application/oauth-authz-req+jwt": {
- source: "iana"
-},
- "application/ocsp-request": {
- source: "iana"
-},
- "application/ocsp-response": {
- source: "iana"
-},
- "application/octet-stream": {
- source: "iana",
- compressible: false,
- extensions: [
- "bin",
- "dms",
- "lrf",
- "mar",
- "so",
- "dist",
- "distz",
- "pkg",
- "bpk",
- "dump",
- "elc",
- "deploy",
- "exe",
- "dll",
- "deb",
- "dmg",
- "iso",
- "img",
- "msi",
- "msp",
- "msm",
- "buffer"
- ]
-},
- "application/oda": {
- source: "iana",
- extensions: [
- "oda"
- ]
-},
- "application/odm+xml": {
- source: "iana",
- compressible: true
-},
- "application/odx": {
- source: "iana"
-},
- "application/oebps-package+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "opf"
- ]
-},
- "application/ogg": {
- source: "iana",
- compressible: false,
- extensions: [
- "ogx"
- ]
-},
- "application/omdoc+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "omdoc"
- ]
-},
- "application/onenote": {
- source: "apache",
- extensions: [
- "onetoc",
- "onetoc2",
- "onetmp",
- "onepkg"
- ]
-},
- "application/opc-nodeset+xml": {
- source: "iana",
- compressible: true
-},
- "application/oscore": {
- source: "iana"
-},
- "application/oxps": {
- source: "iana",
- extensions: [
- "oxps"
- ]
-},
- "application/p21+zip": {
- source: "iana",
- compressible: false
-},
- "application/p2p-overlay+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "relo"
- ]
-},
- "application/parityfec": {
- source: "iana"
-},
- "application/passport": {
- source: "iana"
-},
- "application/patch-ops-error+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xer"
- ]
-},
- "application/pdf": {
- source: "iana",
- compressible: false,
- extensions: [
- "pdf"
- ]
-},
- "application/pdx": {
- source: "iana"
-},
- "application/pem-certificate-chain": {
- source: "iana"
-},
- "application/pgp-encrypted": {
- source: "iana",
- compressible: false,
- extensions: [
- "pgp"
- ]
-},
- "application/pgp-keys": {
- source: "iana"
-},
- "application/pgp-signature": {
- source: "iana",
- extensions: [
- "asc",
- "sig"
- ]
-},
- "application/pics-rules": {
- source: "apache",
- extensions: [
- "prf"
- ]
-},
- "application/pidf+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/pidf-diff+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/pkcs10": {
- source: "iana",
- extensions: [
- "p10"
- ]
-},
- "application/pkcs12": {
- source: "iana"
-},
- "application/pkcs7-mime": {
- source: "iana",
- extensions: [
- "p7m",
- "p7c"
- ]
-},
- "application/pkcs7-signature": {
- source: "iana",
- extensions: [
- "p7s"
- ]
-},
- "application/pkcs8": {
- source: "iana",
- extensions: [
- "p8"
- ]
-},
- "application/pkcs8-encrypted": {
- source: "iana"
-},
- "application/pkix-attr-cert": {
- source: "iana",
- extensions: [
- "ac"
- ]
-},
- "application/pkix-cert": {
- source: "iana",
- extensions: [
- "cer"
- ]
-},
- "application/pkix-crl": {
- source: "iana",
- extensions: [
- "crl"
- ]
-},
- "application/pkix-pkipath": {
- source: "iana",
- extensions: [
- "pkipath"
- ]
-},
- "application/pkixcmp": {
- source: "iana",
- extensions: [
- "pki"
- ]
-},
- "application/pls+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "pls"
- ]
-},
- "application/poc-settings+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/postscript": {
- source: "iana",
- compressible: true,
- extensions: [
- "ai",
- "eps",
- "ps"
- ]
-},
- "application/ppsp-tracker+json": {
- source: "iana",
- compressible: true
-},
- "application/problem+json": {
- source: "iana",
- compressible: true
-},
- "application/problem+xml": {
- source: "iana",
- compressible: true
-},
- "application/provenance+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "provx"
- ]
-},
- "application/prs.alvestrand.titrax-sheet": {
- source: "iana"
-},
- "application/prs.cww": {
- source: "iana",
- extensions: [
- "cww"
- ]
-},
- "application/prs.cyn": {
- source: "iana",
- charset: "7-BIT"
-},
- "application/prs.hpub+zip": {
- source: "iana",
- compressible: false
-},
- "application/prs.nprend": {
- source: "iana"
-},
- "application/prs.plucker": {
- source: "iana"
-},
- "application/prs.rdf-xml-crypt": {
- source: "iana"
-},
- "application/prs.xsf+xml": {
- source: "iana",
- compressible: true
-},
- "application/pskc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "pskcxml"
- ]
-},
- "application/pvd+json": {
- source: "iana",
- compressible: true
-},
- "application/qsig": {
- source: "iana"
-},
- "application/raml+yaml": {
- compressible: true,
- extensions: [
- "raml"
- ]
-},
- "application/raptorfec": {
- source: "iana"
-},
- "application/rdap+json": {
- source: "iana",
- compressible: true
-},
- "application/rdf+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rdf",
- "owl"
- ]
-},
- "application/reginfo+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rif"
- ]
-},
- "application/relax-ng-compact-syntax": {
- source: "iana",
- extensions: [
- "rnc"
- ]
-},
- "application/remote-printing": {
- source: "iana"
-},
- "application/reputon+json": {
- source: "iana",
- compressible: true
-},
- "application/resource-lists+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rl"
- ]
-},
- "application/resource-lists-diff+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rld"
- ]
-},
- "application/rfc+xml": {
- source: "iana",
- compressible: true
-},
- "application/riscos": {
- source: "iana"
-},
- "application/rlmi+xml": {
- source: "iana",
- compressible: true
-},
- "application/rls-services+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rs"
- ]
-},
- "application/route-apd+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rapd"
- ]
-},
- "application/route-s-tsid+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sls"
- ]
-},
- "application/route-usd+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rusd"
- ]
-},
- "application/rpki-ghostbusters": {
- source: "iana",
- extensions: [
- "gbr"
- ]
-},
- "application/rpki-manifest": {
- source: "iana",
- extensions: [
- "mft"
- ]
-},
- "application/rpki-publication": {
- source: "iana"
-},
- "application/rpki-roa": {
- source: "iana",
- extensions: [
- "roa"
- ]
-},
- "application/rpki-updown": {
- source: "iana"
-},
- "application/rsd+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "rsd"
- ]
-},
- "application/rss+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "rss"
- ]
-},
- "application/rtf": {
- source: "iana",
- compressible: true,
- extensions: [
- "rtf"
- ]
-},
- "application/rtploopback": {
- source: "iana"
-},
- "application/rtx": {
- source: "iana"
-},
- "application/samlassertion+xml": {
- source: "iana",
- compressible: true
-},
- "application/samlmetadata+xml": {
- source: "iana",
- compressible: true
-},
- "application/sarif+json": {
- source: "iana",
- compressible: true
-},
- "application/sarif-external-properties+json": {
- source: "iana",
- compressible: true
-},
- "application/sbe": {
- source: "iana"
-},
- "application/sbml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sbml"
- ]
-},
- "application/scaip+xml": {
- source: "iana",
- compressible: true
-},
- "application/scim+json": {
- source: "iana",
- compressible: true
-},
- "application/scvp-cv-request": {
- source: "iana",
- extensions: [
- "scq"
- ]
-},
- "application/scvp-cv-response": {
- source: "iana",
- extensions: [
- "scs"
- ]
-},
- "application/scvp-vp-request": {
- source: "iana",
- extensions: [
- "spq"
- ]
-},
- "application/scvp-vp-response": {
- source: "iana",
- extensions: [
- "spp"
- ]
-},
- "application/sdp": {
- source: "iana",
- extensions: [
- "sdp"
- ]
-},
- "application/secevent+jwt": {
- source: "iana"
-},
- "application/senml+cbor": {
- source: "iana"
-},
- "application/senml+json": {
- source: "iana",
- compressible: true
-},
- "application/senml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "senmlx"
- ]
-},
- "application/senml-etch+cbor": {
- source: "iana"
-},
- "application/senml-etch+json": {
- source: "iana",
- compressible: true
-},
- "application/senml-exi": {
- source: "iana"
-},
- "application/sensml+cbor": {
- source: "iana"
-},
- "application/sensml+json": {
- source: "iana",
- compressible: true
-},
- "application/sensml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sensmlx"
- ]
-},
- "application/sensml-exi": {
- source: "iana"
-},
- "application/sep+xml": {
- source: "iana",
- compressible: true
-},
- "application/sep-exi": {
- source: "iana"
-},
- "application/session-info": {
- source: "iana"
-},
- "application/set-payment": {
- source: "iana"
-},
- "application/set-payment-initiation": {
- source: "iana",
- extensions: [
- "setpay"
- ]
-},
- "application/set-registration": {
- source: "iana"
-},
- "application/set-registration-initiation": {
- source: "iana",
- extensions: [
- "setreg"
- ]
-},
- "application/sgml": {
- source: "iana"
-},
- "application/sgml-open-catalog": {
- source: "iana"
-},
- "application/shf+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "shf"
- ]
-},
- "application/sieve": {
- source: "iana",
- extensions: [
- "siv",
- "sieve"
- ]
-},
- "application/simple-filter+xml": {
- source: "iana",
- compressible: true
-},
- "application/simple-message-summary": {
- source: "iana"
-},
- "application/simplesymbolcontainer": {
- source: "iana"
-},
- "application/sipc": {
- source: "iana"
-},
- "application/slate": {
- source: "iana"
-},
- "application/smil": {
- source: "iana"
-},
- "application/smil+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "smi",
- "smil"
- ]
-},
- "application/smpte336m": {
- source: "iana"
-},
- "application/soap+fastinfoset": {
- source: "iana"
-},
- "application/soap+xml": {
- source: "iana",
- compressible: true
-},
- "application/sparql-query": {
- source: "iana",
- extensions: [
- "rq"
- ]
-},
- "application/sparql-results+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "srx"
- ]
-},
- "application/spirits-event+xml": {
- source: "iana",
- compressible: true
-},
- "application/sql": {
- source: "iana"
-},
- "application/srgs": {
- source: "iana",
- extensions: [
- "gram"
- ]
-},
- "application/srgs+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "grxml"
- ]
-},
- "application/sru+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sru"
- ]
-},
- "application/ssdl+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "ssdl"
- ]
-},
- "application/ssml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ssml"
- ]
-},
- "application/stix+json": {
- source: "iana",
- compressible: true
-},
- "application/swid+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "swidtag"
- ]
-},
- "application/tamp-apex-update": {
- source: "iana"
-},
- "application/tamp-apex-update-confirm": {
- source: "iana"
-},
- "application/tamp-community-update": {
- source: "iana"
-},
- "application/tamp-community-update-confirm": {
- source: "iana"
-},
- "application/tamp-error": {
- source: "iana"
-},
- "application/tamp-sequence-adjust": {
- source: "iana"
-},
- "application/tamp-sequence-adjust-confirm": {
- source: "iana"
-},
- "application/tamp-status-query": {
- source: "iana"
-},
- "application/tamp-status-response": {
- source: "iana"
-},
- "application/tamp-update": {
- source: "iana"
-},
- "application/tamp-update-confirm": {
- source: "iana"
-},
- "application/tar": {
- compressible: true
-},
- "application/taxii+json": {
- source: "iana",
- compressible: true
-},
- "application/td+json": {
- source: "iana",
- compressible: true
-},
- "application/tei+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "tei",
- "teicorpus"
- ]
-},
- "application/tetra_isi": {
- source: "iana"
-},
- "application/thraud+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "tfi"
- ]
-},
- "application/timestamp-query": {
- source: "iana"
-},
- "application/timestamp-reply": {
- source: "iana"
-},
- "application/timestamped-data": {
- source: "iana",
- extensions: [
- "tsd"
- ]
-},
- "application/tlsrpt+gzip": {
- source: "iana"
-},
- "application/tlsrpt+json": {
- source: "iana",
- compressible: true
-},
- "application/tnauthlist": {
- source: "iana"
-},
- "application/toml": {
- compressible: true,
- extensions: [
- "toml"
- ]
-},
- "application/trickle-ice-sdpfrag": {
- source: "iana"
-},
- "application/trig": {
- source: "iana",
- extensions: [
- "trig"
- ]
-},
- "application/ttml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ttml"
- ]
-},
- "application/tve-trigger": {
- source: "iana"
-},
- "application/tzif": {
- source: "iana"
-},
- "application/tzif-leap": {
- source: "iana"
-},
- "application/ubjson": {
- compressible: false,
- extensions: [
- "ubj"
- ]
-},
- "application/ulpfec": {
- source: "iana"
-},
- "application/urc-grpsheet+xml": {
- source: "iana",
- compressible: true
-},
- "application/urc-ressheet+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rsheet"
- ]
-},
- "application/urc-targetdesc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "td"
- ]
-},
- "application/urc-uisocketdesc+xml": {
- source: "iana",
- compressible: true
-},
- "application/vcard+json": {
- source: "iana",
- compressible: true
-},
- "application/vcard+xml": {
- source: "iana",
- compressible: true
-},
- "application/vemmi": {
- source: "iana"
-},
- "application/vividence.scriptfile": {
- source: "apache"
-},
- "application/vnd.1000minds.decision-model+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "1km"
- ]
-},
- "application/vnd.3gpp-prose+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp-prose-pc3ch+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp-v2x-local-service-information": {
- source: "iana"
-},
- "application/vnd.3gpp.5gnas": {
- source: "iana"
-},
- "application/vnd.3gpp.access-transfer-events+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.bsf+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.gmop+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.gtpc": {
- source: "iana"
-},
- "application/vnd.3gpp.interworking-data": {
- source: "iana"
-},
- "application/vnd.3gpp.lpp": {
- source: "iana"
-},
- "application/vnd.3gpp.mc-signalling-ear": {
- source: "iana"
-},
- "application/vnd.3gpp.mcdata-affiliation-command+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcdata-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcdata-payload": {
- source: "iana"
-},
- "application/vnd.3gpp.mcdata-service-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcdata-signalling": {
- source: "iana"
-},
- "application/vnd.3gpp.mcdata-ue-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcdata-user-profile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-affiliation-command+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-floor-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-location-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-service-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-signed+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-ue-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-ue-init-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-user-profile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-location-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-service-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-transmission-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-ue-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-user-profile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mid-call+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.ngap": {
- source: "iana"
-},
- "application/vnd.3gpp.pfcp": {
- source: "iana"
-},
- "application/vnd.3gpp.pic-bw-large": {
- source: "iana",
- extensions: [
- "plb"
- ]
-},
- "application/vnd.3gpp.pic-bw-small": {
- source: "iana",
- extensions: [
- "psb"
- ]
-},
- "application/vnd.3gpp.pic-bw-var": {
- source: "iana",
- extensions: [
- "pvb"
- ]
-},
- "application/vnd.3gpp.s1ap": {
- source: "iana"
-},
- "application/vnd.3gpp.sms": {
- source: "iana"
-},
- "application/vnd.3gpp.sms+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.srvcc-ext+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.srvcc-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.state-and-event-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.ussd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp2.bcmcsinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp2.sms": {
- source: "iana"
-},
- "application/vnd.3gpp2.tcap": {
- source: "iana",
- extensions: [
- "tcap"
- ]
-},
- "application/vnd.3lightssoftware.imagescal": {
- source: "iana"
-},
- "application/vnd.3m.post-it-notes": {
- source: "iana",
- extensions: [
- "pwn"
- ]
-},
- "application/vnd.accpac.simply.aso": {
- source: "iana",
- extensions: [
- "aso"
- ]
-},
- "application/vnd.accpac.simply.imp": {
- source: "iana",
- extensions: [
- "imp"
- ]
-},
- "application/vnd.acucobol": {
- source: "iana",
- extensions: [
- "acu"
- ]
-},
- "application/vnd.acucorp": {
- source: "iana",
- extensions: [
- "atc",
- "acutc"
- ]
-},
- "application/vnd.adobe.air-application-installer-package+zip": {
- source: "apache",
- compressible: false,
- extensions: [
- "air"
- ]
-},
- "application/vnd.adobe.flash.movie": {
- source: "iana"
-},
- "application/vnd.adobe.formscentral.fcdt": {
- source: "iana",
- extensions: [
- "fcdt"
- ]
-},
- "application/vnd.adobe.fxp": {
- source: "iana",
- extensions: [
- "fxp",
- "fxpl"
- ]
-},
- "application/vnd.adobe.partial-upload": {
- source: "iana"
-},
- "application/vnd.adobe.xdp+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xdp"
- ]
-},
- "application/vnd.adobe.xfdf": {
- source: "iana",
- extensions: [
- "xfdf"
- ]
-},
- "application/vnd.aether.imp": {
- source: "iana"
-},
- "application/vnd.afpc.afplinedata": {
- source: "iana"
-},
- "application/vnd.afpc.afplinedata-pagedef": {
- source: "iana"
-},
- "application/vnd.afpc.cmoca-cmresource": {
- source: "iana"
-},
- "application/vnd.afpc.foca-charset": {
- source: "iana"
-},
- "application/vnd.afpc.foca-codedfont": {
- source: "iana"
-},
- "application/vnd.afpc.foca-codepage": {
- source: "iana"
-},
- "application/vnd.afpc.modca": {
- source: "iana"
-},
- "application/vnd.afpc.modca-cmtable": {
- source: "iana"
-},
- "application/vnd.afpc.modca-formdef": {
- source: "iana"
-},
- "application/vnd.afpc.modca-mediummap": {
- source: "iana"
-},
- "application/vnd.afpc.modca-objectcontainer": {
- source: "iana"
-},
- "application/vnd.afpc.modca-overlay": {
- source: "iana"
-},
- "application/vnd.afpc.modca-pagesegment": {
- source: "iana"
-},
- "application/vnd.ah-barcode": {
- source: "iana"
-},
- "application/vnd.ahead.space": {
- source: "iana",
- extensions: [
- "ahead"
- ]
-},
- "application/vnd.airzip.filesecure.azf": {
- source: "iana",
- extensions: [
- "azf"
- ]
-},
- "application/vnd.airzip.filesecure.azs": {
- source: "iana",
- extensions: [
- "azs"
- ]
-},
- "application/vnd.amadeus+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.amazon.ebook": {
- source: "apache",
- extensions: [
- "azw"
- ]
-},
- "application/vnd.amazon.mobi8-ebook": {
- source: "iana"
-},
- "application/vnd.americandynamics.acc": {
- source: "iana",
- extensions: [
- "acc"
- ]
-},
- "application/vnd.amiga.ami": {
- source: "iana",
- extensions: [
- "ami"
- ]
-},
- "application/vnd.amundsen.maze+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.android.ota": {
- source: "iana"
-},
- "application/vnd.android.package-archive": {
- source: "apache",
- compressible: false,
- extensions: [
- "apk"
- ]
-},
- "application/vnd.anki": {
- source: "iana"
-},
- "application/vnd.anser-web-certificate-issue-initiation": {
- source: "iana",
- extensions: [
- "cii"
- ]
-},
- "application/vnd.anser-web-funds-transfer-initiation": {
- source: "apache",
- extensions: [
- "fti"
- ]
-},
- "application/vnd.antix.game-component": {
- source: "iana",
- extensions: [
- "atx"
- ]
-},
- "application/vnd.apache.arrow.file": {
- source: "iana"
-},
- "application/vnd.apache.arrow.stream": {
- source: "iana"
-},
- "application/vnd.apache.thrift.binary": {
- source: "iana"
-},
- "application/vnd.apache.thrift.compact": {
- source: "iana"
-},
- "application/vnd.apache.thrift.json": {
- source: "iana"
-},
- "application/vnd.api+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.aplextor.warrp+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.apothekende.reservation+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.apple.installer+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mpkg"
- ]
-},
- "application/vnd.apple.keynote": {
- source: "iana",
- extensions: [
- "key"
- ]
-},
- "application/vnd.apple.mpegurl": {
- source: "iana",
- extensions: [
- "m3u8"
- ]
-},
- "application/vnd.apple.numbers": {
- source: "iana",
- extensions: [
- "numbers"
- ]
-},
- "application/vnd.apple.pages": {
- source: "iana",
- extensions: [
- "pages"
- ]
-},
- "application/vnd.apple.pkpass": {
- compressible: false,
- extensions: [
- "pkpass"
- ]
-},
- "application/vnd.arastra.swi": {
- source: "iana"
-},
- "application/vnd.aristanetworks.swi": {
- source: "iana",
- extensions: [
- "swi"
- ]
-},
- "application/vnd.artisan+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.artsquare": {
- source: "iana"
-},
- "application/vnd.astraea-software.iota": {
- source: "iana",
- extensions: [
- "iota"
- ]
-},
- "application/vnd.audiograph": {
- source: "iana",
- extensions: [
- "aep"
- ]
-},
- "application/vnd.autopackage": {
- source: "iana"
-},
- "application/vnd.avalon+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.avistar+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.balsamiq.bmml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "bmml"
- ]
-},
- "application/vnd.balsamiq.bmpr": {
- source: "iana"
-},
- "application/vnd.banana-accounting": {
- source: "iana"
-},
- "application/vnd.bbf.usp.error": {
- source: "iana"
-},
- "application/vnd.bbf.usp.msg": {
- source: "iana"
-},
- "application/vnd.bbf.usp.msg+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.bekitzur-stech+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.bint.med-content": {
- source: "iana"
-},
- "application/vnd.biopax.rdf+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.blink-idb-value-wrapper": {
- source: "iana"
-},
- "application/vnd.blueice.multipass": {
- source: "iana",
- extensions: [
- "mpm"
- ]
-},
- "application/vnd.bluetooth.ep.oob": {
- source: "iana"
-},
- "application/vnd.bluetooth.le.oob": {
- source: "iana"
-},
- "application/vnd.bmi": {
- source: "iana",
- extensions: [
- "bmi"
- ]
-},
- "application/vnd.bpf": {
- source: "iana"
-},
- "application/vnd.bpf3": {
- source: "iana"
-},
- "application/vnd.businessobjects": {
- source: "iana",
- extensions: [
- "rep"
- ]
-},
- "application/vnd.byu.uapi+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cab-jscript": {
- source: "iana"
-},
- "application/vnd.canon-cpdl": {
- source: "iana"
-},
- "application/vnd.canon-lips": {
- source: "iana"
-},
- "application/vnd.capasystems-pg+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cendio.thinlinc.clientconf": {
- source: "iana"
-},
- "application/vnd.century-systems.tcp_stream": {
- source: "iana"
-},
- "application/vnd.chemdraw+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "cdxml"
- ]
-},
- "application/vnd.chess-pgn": {
- source: "iana"
-},
- "application/vnd.chipnuts.karaoke-mmd": {
- source: "iana",
- extensions: [
- "mmd"
- ]
-},
- "application/vnd.ciedi": {
- source: "iana"
-},
- "application/vnd.cinderella": {
- source: "iana",
- extensions: [
- "cdy"
- ]
-},
- "application/vnd.cirpack.isdn-ext": {
- source: "iana"
-},
- "application/vnd.citationstyles.style+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "csl"
- ]
-},
- "application/vnd.claymore": {
- source: "iana",
- extensions: [
- "cla"
- ]
-},
- "application/vnd.cloanto.rp9": {
- source: "iana",
- extensions: [
- "rp9"
- ]
-},
- "application/vnd.clonk.c4group": {
- source: "iana",
- extensions: [
- "c4g",
- "c4d",
- "c4f",
- "c4p",
- "c4u"
- ]
-},
- "application/vnd.cluetrust.cartomobile-config": {
- source: "iana",
- extensions: [
- "c11amc"
- ]
-},
- "application/vnd.cluetrust.cartomobile-config-pkg": {
- source: "iana",
- extensions: [
- "c11amz"
- ]
-},
- "application/vnd.coffeescript": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.document": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.document-template": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.presentation": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.presentation-template": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.spreadsheet": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.spreadsheet-template": {
- source: "iana"
-},
- "application/vnd.collection+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.collection.doc+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.collection.next+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.comicbook+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.comicbook-rar": {
- source: "iana"
-},
- "application/vnd.commerce-battelle": {
- source: "iana"
-},
- "application/vnd.commonspace": {
- source: "iana",
- extensions: [
- "csp"
- ]
-},
- "application/vnd.contact.cmsg": {
- source: "iana",
- extensions: [
- "cdbcmsg"
- ]
-},
- "application/vnd.coreos.ignition+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cosmocaller": {
- source: "iana",
- extensions: [
- "cmc"
- ]
-},
- "application/vnd.crick.clicker": {
- source: "iana",
- extensions: [
- "clkx"
- ]
-},
- "application/vnd.crick.clicker.keyboard": {
- source: "iana",
- extensions: [
- "clkk"
- ]
-},
- "application/vnd.crick.clicker.palette": {
- source: "iana",
- extensions: [
- "clkp"
- ]
-},
- "application/vnd.crick.clicker.template": {
- source: "iana",
- extensions: [
- "clkt"
- ]
-},
- "application/vnd.crick.clicker.wordbank": {
- source: "iana",
- extensions: [
- "clkw"
- ]
-},
- "application/vnd.criticaltools.wbs+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "wbs"
- ]
-},
- "application/vnd.cryptii.pipe+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.crypto-shade-file": {
- source: "iana"
-},
- "application/vnd.cryptomator.encrypted": {
- source: "iana"
-},
- "application/vnd.cryptomator.vault": {
- source: "iana"
-},
- "application/vnd.ctc-posml": {
- source: "iana",
- extensions: [
- "pml"
- ]
-},
- "application/vnd.ctct.ws+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cups-pdf": {
- source: "iana"
-},
- "application/vnd.cups-postscript": {
- source: "iana"
-},
- "application/vnd.cups-ppd": {
- source: "iana",
- extensions: [
- "ppd"
- ]
-},
- "application/vnd.cups-raster": {
- source: "iana"
-},
- "application/vnd.cups-raw": {
- source: "iana"
-},
- "application/vnd.curl": {
- source: "iana"
-},
- "application/vnd.curl.car": {
- source: "apache",
- extensions: [
- "car"
- ]
-},
- "application/vnd.curl.pcurl": {
- source: "apache",
- extensions: [
- "pcurl"
- ]
-},
- "application/vnd.cyan.dean.root+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cybank": {
- source: "iana"
-},
- "application/vnd.cyclonedx+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cyclonedx+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.d2l.coursepackage1p0+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.d3m-dataset": {
- source: "iana"
-},
- "application/vnd.d3m-problem": {
- source: "iana"
-},
- "application/vnd.dart": {
- source: "iana",
- compressible: true,
- extensions: [
- "dart"
- ]
-},
- "application/vnd.data-vision.rdz": {
- source: "iana",
- extensions: [
- "rdz"
- ]
-},
- "application/vnd.datapackage+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dataresource+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dbf": {
- source: "iana",
- extensions: [
- "dbf"
- ]
-},
- "application/vnd.debian.binary-package": {
- source: "iana"
-},
- "application/vnd.dece.data": {
- source: "iana",
- extensions: [
- "uvf",
- "uvvf",
- "uvd",
- "uvvd"
- ]
-},
- "application/vnd.dece.ttml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "uvt",
- "uvvt"
- ]
-},
- "application/vnd.dece.unspecified": {
- source: "iana",
- extensions: [
- "uvx",
- "uvvx"
- ]
-},
- "application/vnd.dece.zip": {
- source: "iana",
- extensions: [
- "uvz",
- "uvvz"
- ]
-},
- "application/vnd.denovo.fcselayout-link": {
- source: "iana",
- extensions: [
- "fe_launch"
- ]
-},
- "application/vnd.desmume.movie": {
- source: "iana"
-},
- "application/vnd.dir-bi.plate-dl-nosuffix": {
- source: "iana"
-},
- "application/vnd.dm.delegation+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dna": {
- source: "iana",
- extensions: [
- "dna"
- ]
-},
- "application/vnd.document+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dolby.mlp": {
- source: "apache",
- extensions: [
- "mlp"
- ]
-},
- "application/vnd.dolby.mobile.1": {
- source: "iana"
-},
- "application/vnd.dolby.mobile.2": {
- source: "iana"
-},
- "application/vnd.doremir.scorecloud-binary-document": {
- source: "iana"
-},
- "application/vnd.dpgraph": {
- source: "iana",
- extensions: [
- "dpg"
- ]
-},
- "application/vnd.dreamfactory": {
- source: "iana",
- extensions: [
- "dfac"
- ]
-},
- "application/vnd.drive+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ds-keypoint": {
- source: "apache",
- extensions: [
- "kpxx"
- ]
-},
- "application/vnd.dtg.local": {
- source: "iana"
-},
- "application/vnd.dtg.local.flash": {
- source: "iana"
-},
- "application/vnd.dtg.local.html": {
- source: "iana"
-},
- "application/vnd.dvb.ait": {
- source: "iana",
- extensions: [
- "ait"
- ]
-},
- "application/vnd.dvb.dvbisl+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.dvbj": {
- source: "iana"
-},
- "application/vnd.dvb.esgcontainer": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcdftnotifaccess": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcesgaccess": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcesgaccess2": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcesgpdd": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcroaming": {
- source: "iana"
-},
- "application/vnd.dvb.iptv.alfec-base": {
- source: "iana"
-},
- "application/vnd.dvb.iptv.alfec-enhancement": {
- source: "iana"
-},
- "application/vnd.dvb.notif-aggregate-root+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-container+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-generic+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-ia-msglist+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-ia-registration-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-ia-registration-response+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-init+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.pfr": {
- source: "iana"
-},
- "application/vnd.dvb.service": {
- source: "iana",
- extensions: [
- "svc"
- ]
-},
- "application/vnd.dxr": {
- source: "iana"
-},
- "application/vnd.dynageo": {
- source: "iana",
- extensions: [
- "geo"
- ]
-},
- "application/vnd.dzr": {
- source: "iana"
-},
- "application/vnd.easykaraoke.cdgdownload": {
- source: "iana"
-},
- "application/vnd.ecdis-update": {
- source: "iana"
-},
- "application/vnd.ecip.rlp": {
- source: "iana"
-},
- "application/vnd.ecowin.chart": {
- source: "iana",
- extensions: [
- "mag"
- ]
-},
- "application/vnd.ecowin.filerequest": {
- source: "iana"
-},
- "application/vnd.ecowin.fileupdate": {
- source: "iana"
-},
- "application/vnd.ecowin.series": {
- source: "iana"
-},
- "application/vnd.ecowin.seriesrequest": {
- source: "iana"
-},
- "application/vnd.ecowin.seriesupdate": {
- source: "iana"
-},
- "application/vnd.efi.img": {
- source: "iana"
-},
- "application/vnd.efi.iso": {
- source: "iana"
-},
- "application/vnd.emclient.accessrequest+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.enliven": {
- source: "iana",
- extensions: [
- "nml"
- ]
-},
- "application/vnd.enphase.envoy": {
- source: "iana"
-},
- "application/vnd.eprints.data+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.epson.esf": {
- source: "iana",
- extensions: [
- "esf"
- ]
-},
- "application/vnd.epson.msf": {
- source: "iana",
- extensions: [
- "msf"
- ]
-},
- "application/vnd.epson.quickanime": {
- source: "iana",
- extensions: [
- "qam"
- ]
-},
- "application/vnd.epson.salt": {
- source: "iana",
- extensions: [
- "slt"
- ]
-},
- "application/vnd.epson.ssf": {
- source: "iana",
- extensions: [
- "ssf"
- ]
-},
- "application/vnd.ericsson.quickcall": {
- source: "iana"
-},
- "application/vnd.espass-espass+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.eszigno3+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "es3",
- "et3"
- ]
-},
- "application/vnd.etsi.aoc+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.asic-e+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.etsi.asic-s+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.etsi.cug+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvcommand+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvdiscovery+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvprofile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvsad-bc+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvsad-cod+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvsad-npvr+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvservice+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvsync+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvueprofile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.mcid+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.mheg5": {
- source: "iana"
-},
- "application/vnd.etsi.overload-control-policy-dataset+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.pstn+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.sci+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.simservs+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.timestamp-token": {
- source: "iana"
-},
- "application/vnd.etsi.tsl+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.tsl.der": {
- source: "iana"
-},
- "application/vnd.eudora.data": {
- source: "iana"
-},
- "application/vnd.evolv.ecig.profile": {
- source: "iana"
-},
- "application/vnd.evolv.ecig.settings": {
- source: "iana"
-},
- "application/vnd.evolv.ecig.theme": {
- source: "iana"
-},
- "application/vnd.exstream-empower+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.exstream-package": {
- source: "iana"
-},
- "application/vnd.ezpix-album": {
- source: "iana",
- extensions: [
- "ez2"
- ]
-},
- "application/vnd.ezpix-package": {
- source: "iana",
- extensions: [
- "ez3"
- ]
-},
- "application/vnd.f-secure.mobile": {
- source: "iana"
-},
- "application/vnd.fastcopy-disk-image": {
- source: "iana"
-},
- "application/vnd.fdf": {
- source: "iana",
- extensions: [
- "fdf"
- ]
-},
- "application/vnd.fdsn.mseed": {
- source: "iana",
- extensions: [
- "mseed"
- ]
-},
- "application/vnd.fdsn.seed": {
- source: "iana",
- extensions: [
- "seed",
- "dataless"
- ]
-},
- "application/vnd.ffsns": {
- source: "iana"
-},
- "application/vnd.ficlab.flb+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.filmit.zfc": {
- source: "iana"
-},
- "application/vnd.fints": {
- source: "iana"
-},
- "application/vnd.firemonkeys.cloudcell": {
- source: "iana"
-},
- "application/vnd.flographit": {
- source: "iana",
- extensions: [
- "gph"
- ]
-},
- "application/vnd.fluxtime.clip": {
- source: "iana",
- extensions: [
- "ftc"
- ]
-},
- "application/vnd.font-fontforge-sfd": {
- source: "iana"
-},
- "application/vnd.framemaker": {
- source: "iana",
- extensions: [
- "fm",
- "frame",
- "maker",
- "book"
- ]
-},
- "application/vnd.frogans.fnc": {
- source: "iana",
- extensions: [
- "fnc"
- ]
-},
- "application/vnd.frogans.ltf": {
- source: "iana",
- extensions: [
- "ltf"
- ]
-},
- "application/vnd.fsc.weblaunch": {
- source: "iana",
- extensions: [
- "fsc"
- ]
-},
- "application/vnd.fujifilm.fb.docuworks": {
- source: "iana"
-},
- "application/vnd.fujifilm.fb.docuworks.binder": {
- source: "iana"
-},
- "application/vnd.fujifilm.fb.docuworks.container": {
- source: "iana"
-},
- "application/vnd.fujifilm.fb.jfi+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.fujitsu.oasys": {
- source: "iana",
- extensions: [
- "oas"
- ]
-},
- "application/vnd.fujitsu.oasys2": {
- source: "iana",
- extensions: [
- "oa2"
- ]
-},
- "application/vnd.fujitsu.oasys3": {
- source: "iana",
- extensions: [
- "oa3"
- ]
-},
- "application/vnd.fujitsu.oasysgp": {
- source: "iana",
- extensions: [
- "fg5"
- ]
-},
- "application/vnd.fujitsu.oasysprs": {
- source: "iana",
- extensions: [
- "bh2"
- ]
-},
- "application/vnd.fujixerox.art-ex": {
- source: "iana"
-},
- "application/vnd.fujixerox.art4": {
- source: "iana"
-},
- "application/vnd.fujixerox.ddd": {
- source: "iana",
- extensions: [
- "ddd"
- ]
-},
- "application/vnd.fujixerox.docuworks": {
- source: "iana",
- extensions: [
- "xdw"
- ]
-},
- "application/vnd.fujixerox.docuworks.binder": {
- source: "iana",
- extensions: [
- "xbd"
- ]
-},
- "application/vnd.fujixerox.docuworks.container": {
- source: "iana"
-},
- "application/vnd.fujixerox.hbpl": {
- source: "iana"
-},
- "application/vnd.fut-misnet": {
- source: "iana"
-},
- "application/vnd.futoin+cbor": {
- source: "iana"
-},
- "application/vnd.futoin+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.fuzzysheet": {
- source: "iana",
- extensions: [
- "fzs"
- ]
-},
- "application/vnd.genomatix.tuxedo": {
- source: "iana",
- extensions: [
- "txd"
- ]
-},
- "application/vnd.gentics.grd+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.geo+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.geocube+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.geogebra.file": {
- source: "iana",
- extensions: [
- "ggb"
- ]
-},
- "application/vnd.geogebra.slides": {
- source: "iana"
-},
- "application/vnd.geogebra.tool": {
- source: "iana",
- extensions: [
- "ggt"
- ]
-},
- "application/vnd.geometry-explorer": {
- source: "iana",
- extensions: [
- "gex",
- "gre"
- ]
-},
- "application/vnd.geonext": {
- source: "iana",
- extensions: [
- "gxt"
- ]
-},
- "application/vnd.geoplan": {
- source: "iana",
- extensions: [
- "g2w"
- ]
-},
- "application/vnd.geospace": {
- source: "iana",
- extensions: [
- "g3w"
- ]
-},
- "application/vnd.gerber": {
- source: "iana"
-},
- "application/vnd.globalplatform.card-content-mgt": {
- source: "iana"
-},
- "application/vnd.globalplatform.card-content-mgt-response": {
- source: "iana"
-},
- "application/vnd.gmx": {
- source: "iana",
- extensions: [
- "gmx"
- ]
-},
- "application/vnd.google-apps.document": {
- compressible: false,
- extensions: [
- "gdoc"
- ]
-},
- "application/vnd.google-apps.presentation": {
- compressible: false,
- extensions: [
- "gslides"
- ]
-},
- "application/vnd.google-apps.spreadsheet": {
- compressible: false,
- extensions: [
- "gsheet"
- ]
-},
- "application/vnd.google-earth.kml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "kml"
- ]
-},
- "application/vnd.google-earth.kmz": {
- source: "iana",
- compressible: false,
- extensions: [
- "kmz"
- ]
-},
- "application/vnd.gov.sk.e-form+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.gov.sk.e-form+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.gov.sk.xmldatacontainer+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.grafeq": {
- source: "iana",
- extensions: [
- "gqf",
- "gqs"
- ]
-},
- "application/vnd.gridmp": {
- source: "iana"
-},
- "application/vnd.groove-account": {
- source: "iana",
- extensions: [
- "gac"
- ]
-},
- "application/vnd.groove-help": {
- source: "iana",
- extensions: [
- "ghf"
- ]
-},
- "application/vnd.groove-identity-message": {
- source: "iana",
- extensions: [
- "gim"
- ]
-},
- "application/vnd.groove-injector": {
- source: "iana",
- extensions: [
- "grv"
- ]
-},
- "application/vnd.groove-tool-message": {
- source: "iana",
- extensions: [
- "gtm"
- ]
-},
- "application/vnd.groove-tool-template": {
- source: "iana",
- extensions: [
- "tpl"
- ]
-},
- "application/vnd.groove-vcard": {
- source: "iana",
- extensions: [
- "vcg"
- ]
-},
- "application/vnd.hal+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hal+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "hal"
- ]
-},
- "application/vnd.handheld-entertainment+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "zmm"
- ]
-},
- "application/vnd.hbci": {
- source: "iana",
- extensions: [
- "hbci"
- ]
-},
- "application/vnd.hc+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hcl-bireports": {
- source: "iana"
-},
- "application/vnd.hdt": {
- source: "iana"
-},
- "application/vnd.heroku+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hhe.lesson-player": {
- source: "iana",
- extensions: [
- "les"
- ]
-},
- "application/vnd.hp-hpgl": {
- source: "iana",
- extensions: [
- "hpgl"
- ]
-},
- "application/vnd.hp-hpid": {
- source: "iana",
- extensions: [
- "hpid"
- ]
-},
- "application/vnd.hp-hps": {
- source: "iana",
- extensions: [
- "hps"
- ]
-},
- "application/vnd.hp-jlyt": {
- source: "iana",
- extensions: [
- "jlt"
- ]
-},
- "application/vnd.hp-pcl": {
- source: "iana",
- extensions: [
- "pcl"
- ]
-},
- "application/vnd.hp-pclxl": {
- source: "iana",
- extensions: [
- "pclxl"
- ]
-},
- "application/vnd.httphone": {
- source: "iana"
-},
- "application/vnd.hydrostatix.sof-data": {
- source: "iana",
- extensions: [
- "sfd-hdstx"
- ]
-},
- "application/vnd.hyper+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hyper-item+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hyperdrive+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hzn-3d-crossword": {
- source: "iana"
-},
- "application/vnd.ibm.afplinedata": {
- source: "iana"
-},
- "application/vnd.ibm.electronic-media": {
- source: "iana"
-},
- "application/vnd.ibm.minipay": {
- source: "iana",
- extensions: [
- "mpy"
- ]
-},
- "application/vnd.ibm.modcap": {
- source: "iana",
- extensions: [
- "afp",
- "listafp",
- "list3820"
- ]
-},
- "application/vnd.ibm.rights-management": {
- source: "iana",
- extensions: [
- "irm"
- ]
-},
- "application/vnd.ibm.secure-container": {
- source: "iana",
- extensions: [
- "sc"
- ]
-},
- "application/vnd.iccprofile": {
- source: "iana",
- extensions: [
- "icc",
- "icm"
- ]
-},
- "application/vnd.ieee.1905": {
- source: "iana"
-},
- "application/vnd.igloader": {
- source: "iana",
- extensions: [
- "igl"
- ]
-},
- "application/vnd.imagemeter.folder+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.imagemeter.image+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.immervision-ivp": {
- source: "iana",
- extensions: [
- "ivp"
- ]
-},
- "application/vnd.immervision-ivu": {
- source: "iana",
- extensions: [
- "ivu"
- ]
-},
- "application/vnd.ims.imsccv1p1": {
- source: "iana"
-},
- "application/vnd.ims.imsccv1p2": {
- source: "iana"
-},
- "application/vnd.ims.imsccv1p3": {
- source: "iana"
-},
- "application/vnd.ims.lis.v2.result+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolproxy+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolproxy.id+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolsettings+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolsettings.simple+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.informedcontrol.rms+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.informix-visionary": {
- source: "iana"
-},
- "application/vnd.infotech.project": {
- source: "iana"
-},
- "application/vnd.infotech.project+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.innopath.wamp.notification": {
- source: "iana"
-},
- "application/vnd.insors.igm": {
- source: "iana",
- extensions: [
- "igm"
- ]
-},
- "application/vnd.intercon.formnet": {
- source: "iana",
- extensions: [
- "xpw",
- "xpx"
- ]
-},
- "application/vnd.intergeo": {
- source: "iana",
- extensions: [
- "i2g"
- ]
-},
- "application/vnd.intertrust.digibox": {
- source: "iana"
-},
- "application/vnd.intertrust.nncp": {
- source: "iana"
-},
- "application/vnd.intu.qbo": {
- source: "iana",
- extensions: [
- "qbo"
- ]
-},
- "application/vnd.intu.qfx": {
- source: "iana",
- extensions: [
- "qfx"
- ]
-},
- "application/vnd.iptc.g2.catalogitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.conceptitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.knowledgeitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.newsitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.newsmessage+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.packageitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.planningitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ipunplugged.rcprofile": {
- source: "iana",
- extensions: [
- "rcprofile"
- ]
-},
- "application/vnd.irepository.package+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "irp"
- ]
-},
- "application/vnd.is-xpr": {
- source: "iana",
- extensions: [
- "xpr"
- ]
-},
- "application/vnd.isac.fcs": {
- source: "iana",
- extensions: [
- "fcs"
- ]
-},
- "application/vnd.iso11783-10+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.jam": {
- source: "iana",
- extensions: [
- "jam"
- ]
-},
- "application/vnd.japannet-directory-service": {
- source: "iana"
-},
- "application/vnd.japannet-jpnstore-wakeup": {
- source: "iana"
-},
- "application/vnd.japannet-payment-wakeup": {
- source: "iana"
-},
- "application/vnd.japannet-registration": {
- source: "iana"
-},
- "application/vnd.japannet-registration-wakeup": {
- source: "iana"
-},
- "application/vnd.japannet-setstore-wakeup": {
- source: "iana"
-},
- "application/vnd.japannet-verification": {
- source: "iana"
-},
- "application/vnd.japannet-verification-wakeup": {
- source: "iana"
-},
- "application/vnd.jcp.javame.midlet-rms": {
- source: "iana",
- extensions: [
- "rms"
- ]
-},
- "application/vnd.jisp": {
- source: "iana",
- extensions: [
- "jisp"
- ]
-},
- "application/vnd.joost.joda-archive": {
- source: "iana",
- extensions: [
- "joda"
- ]
-},
- "application/vnd.jsk.isdn-ngn": {
- source: "iana"
-},
- "application/vnd.kahootz": {
- source: "iana",
- extensions: [
- "ktz",
- "ktr"
- ]
-},
- "application/vnd.kde.karbon": {
- source: "iana",
- extensions: [
- "karbon"
- ]
-},
- "application/vnd.kde.kchart": {
- source: "iana",
- extensions: [
- "chrt"
- ]
-},
- "application/vnd.kde.kformula": {
- source: "iana",
- extensions: [
- "kfo"
- ]
-},
- "application/vnd.kde.kivio": {
- source: "iana",
- extensions: [
- "flw"
- ]
-},
- "application/vnd.kde.kontour": {
- source: "iana",
- extensions: [
- "kon"
- ]
-},
- "application/vnd.kde.kpresenter": {
- source: "iana",
- extensions: [
- "kpr",
- "kpt"
- ]
-},
- "application/vnd.kde.kspread": {
- source: "iana",
- extensions: [
- "ksp"
- ]
-},
- "application/vnd.kde.kword": {
- source: "iana",
- extensions: [
- "kwd",
- "kwt"
- ]
-},
- "application/vnd.kenameaapp": {
- source: "iana",
- extensions: [
- "htke"
- ]
-},
- "application/vnd.kidspiration": {
- source: "iana",
- extensions: [
- "kia"
- ]
-},
- "application/vnd.kinar": {
- source: "iana",
- extensions: [
- "kne",
- "knp"
- ]
-},
- "application/vnd.koan": {
- source: "iana",
- extensions: [
- "skp",
- "skd",
- "skt",
- "skm"
- ]
-},
- "application/vnd.kodak-descriptor": {
- source: "iana",
- extensions: [
- "sse"
- ]
-},
- "application/vnd.las": {
- source: "iana"
-},
- "application/vnd.las.las+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.las.las+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "lasxml"
- ]
-},
- "application/vnd.laszip": {
- source: "iana"
-},
- "application/vnd.leap+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.liberty-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.llamagraphics.life-balance.desktop": {
- source: "iana",
- extensions: [
- "lbd"
- ]
-},
- "application/vnd.llamagraphics.life-balance.exchange+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "lbe"
- ]
-},
- "application/vnd.logipipe.circuit+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.loom": {
- source: "iana"
-},
- "application/vnd.lotus-1-2-3": {
- source: "iana",
- extensions: [
- "123"
- ]
-},
- "application/vnd.lotus-approach": {
- source: "iana",
- extensions: [
- "apr"
- ]
-},
- "application/vnd.lotus-freelance": {
- source: "iana",
- extensions: [
- "pre"
- ]
-},
- "application/vnd.lotus-notes": {
- source: "iana",
- extensions: [
- "nsf"
- ]
-},
- "application/vnd.lotus-organizer": {
- source: "iana",
- extensions: [
- "org"
- ]
-},
- "application/vnd.lotus-screencam": {
- source: "iana",
- extensions: [
- "scm"
- ]
-},
- "application/vnd.lotus-wordpro": {
- source: "iana",
- extensions: [
- "lwp"
- ]
-},
- "application/vnd.macports.portpkg": {
- source: "iana",
- extensions: [
- "portpkg"
- ]
-},
- "application/vnd.mapbox-vector-tile": {
- source: "iana",
- extensions: [
- "mvt"
- ]
-},
- "application/vnd.marlin.drm.actiontoken+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.marlin.drm.conftoken+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.marlin.drm.license+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.marlin.drm.mdcf": {
- source: "iana"
-},
- "application/vnd.mason+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.maxmind.maxmind-db": {
- source: "iana"
-},
- "application/vnd.mcd": {
- source: "iana",
- extensions: [
- "mcd"
- ]
-},
- "application/vnd.medcalcdata": {
- source: "iana",
- extensions: [
- "mc1"
- ]
-},
- "application/vnd.mediastation.cdkey": {
- source: "iana",
- extensions: [
- "cdkey"
- ]
-},
- "application/vnd.meridian-slingshot": {
- source: "iana"
-},
- "application/vnd.mfer": {
- source: "iana",
- extensions: [
- "mwf"
- ]
-},
- "application/vnd.mfmp": {
- source: "iana",
- extensions: [
- "mfm"
- ]
-},
- "application/vnd.micro+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.micrografx.flo": {
- source: "iana",
- extensions: [
- "flo"
- ]
-},
- "application/vnd.micrografx.igx": {
- source: "iana",
- extensions: [
- "igx"
- ]
-},
- "application/vnd.microsoft.portable-executable": {
- source: "iana"
-},
- "application/vnd.microsoft.windows.thumbnail-cache": {
- source: "iana"
-},
- "application/vnd.miele+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.mif": {
- source: "iana",
- extensions: [
- "mif"
- ]
-},
- "application/vnd.minisoft-hp3000-save": {
- source: "iana"
-},
- "application/vnd.mitsubishi.misty-guard.trustweb": {
- source: "iana"
-},
- "application/vnd.mobius.daf": {
- source: "iana",
- extensions: [
- "daf"
- ]
-},
- "application/vnd.mobius.dis": {
- source: "iana",
- extensions: [
- "dis"
- ]
-},
- "application/vnd.mobius.mbk": {
- source: "iana",
- extensions: [
- "mbk"
- ]
-},
- "application/vnd.mobius.mqy": {
- source: "iana",
- extensions: [
- "mqy"
- ]
-},
- "application/vnd.mobius.msl": {
- source: "iana",
- extensions: [
- "msl"
- ]
-},
- "application/vnd.mobius.plc": {
- source: "iana",
- extensions: [
- "plc"
- ]
-},
- "application/vnd.mobius.txf": {
- source: "iana",
- extensions: [
- "txf"
- ]
-},
- "application/vnd.mophun.application": {
- source: "iana",
- extensions: [
- "mpn"
- ]
-},
- "application/vnd.mophun.certificate": {
- source: "iana",
- extensions: [
- "mpc"
- ]
-},
- "application/vnd.motorola.flexsuite": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.adsi": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.fis": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.gotap": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.kmr": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.ttc": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.wem": {
- source: "iana"
-},
- "application/vnd.motorola.iprm": {
- source: "iana"
-},
- "application/vnd.mozilla.xul+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xul"
- ]
-},
- "application/vnd.ms-3mfdocument": {
- source: "iana"
-},
- "application/vnd.ms-artgalry": {
- source: "iana",
- extensions: [
- "cil"
- ]
-},
- "application/vnd.ms-asf": {
- source: "iana"
-},
- "application/vnd.ms-cab-compressed": {
- source: "iana",
- extensions: [
- "cab"
- ]
-},
- "application/vnd.ms-color.iccprofile": {
- source: "apache"
-},
- "application/vnd.ms-excel": {
- source: "iana",
- compressible: false,
- extensions: [
- "xls",
- "xlm",
- "xla",
- "xlc",
- "xlt",
- "xlw"
- ]
-},
- "application/vnd.ms-excel.addin.macroenabled.12": {
- source: "iana",
- extensions: [
- "xlam"
- ]
-},
- "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
- source: "iana",
- extensions: [
- "xlsb"
- ]
-},
- "application/vnd.ms-excel.sheet.macroenabled.12": {
- source: "iana",
- extensions: [
- "xlsm"
- ]
-},
- "application/vnd.ms-excel.template.macroenabled.12": {
- source: "iana",
- extensions: [
- "xltm"
- ]
-},
- "application/vnd.ms-fontobject": {
- source: "iana",
- compressible: true,
- extensions: [
- "eot"
- ]
-},
- "application/vnd.ms-htmlhelp": {
- source: "iana",
- extensions: [
- "chm"
- ]
-},
- "application/vnd.ms-ims": {
- source: "iana",
- extensions: [
- "ims"
- ]
-},
- "application/vnd.ms-lrm": {
- source: "iana",
- extensions: [
- "lrm"
- ]
-},
- "application/vnd.ms-office.activex+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ms-officetheme": {
- source: "iana",
- extensions: [
- "thmx"
- ]
-},
- "application/vnd.ms-opentype": {
- source: "apache",
- compressible: true
-},
- "application/vnd.ms-outlook": {
- compressible: false,
- extensions: [
- "msg"
- ]
-},
- "application/vnd.ms-package.obfuscated-opentype": {
- source: "apache"
-},
- "application/vnd.ms-pki.seccat": {
- source: "apache",
- extensions: [
- "cat"
- ]
-},
- "application/vnd.ms-pki.stl": {
- source: "apache",
- extensions: [
- "stl"
- ]
-},
- "application/vnd.ms-playready.initiator+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ms-powerpoint": {
- source: "iana",
- compressible: false,
- extensions: [
- "ppt",
- "pps",
- "pot"
- ]
-},
- "application/vnd.ms-powerpoint.addin.macroenabled.12": {
- source: "iana",
- extensions: [
- "ppam"
- ]
-},
- "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
- source: "iana",
- extensions: [
- "pptm"
- ]
-},
- "application/vnd.ms-powerpoint.slide.macroenabled.12": {
- source: "iana",
- extensions: [
- "sldm"
- ]
-},
- "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
- source: "iana",
- extensions: [
- "ppsm"
- ]
-},
- "application/vnd.ms-powerpoint.template.macroenabled.12": {
- source: "iana",
- extensions: [
- "potm"
- ]
-},
- "application/vnd.ms-printdevicecapabilities+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ms-printing.printticket+xml": {
- source: "apache",
- compressible: true
-},
- "application/vnd.ms-printschematicket+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ms-project": {
- source: "iana",
- extensions: [
- "mpp",
- "mpt"
- ]
-},
- "application/vnd.ms-tnef": {
- source: "iana"
-},
- "application/vnd.ms-windows.devicepairing": {
- source: "iana"
-},
- "application/vnd.ms-windows.nwprinting.oob": {
- source: "iana"
-},
- "application/vnd.ms-windows.printerpairing": {
- source: "iana"
-},
- "application/vnd.ms-windows.wsd.oob": {
- source: "iana"
-},
- "application/vnd.ms-wmdrm.lic-chlg-req": {
- source: "iana"
-},
- "application/vnd.ms-wmdrm.lic-resp": {
- source: "iana"
-},
- "application/vnd.ms-wmdrm.meter-chlg-req": {
- source: "iana"
-},
- "application/vnd.ms-wmdrm.meter-resp": {
- source: "iana"
-},
- "application/vnd.ms-word.document.macroenabled.12": {
- source: "iana",
- extensions: [
- "docm"
- ]
-},
- "application/vnd.ms-word.template.macroenabled.12": {
- source: "iana",
- extensions: [
- "dotm"
- ]
-},
- "application/vnd.ms-works": {
- source: "iana",
- extensions: [
- "wps",
- "wks",
- "wcm",
- "wdb"
- ]
-},
- "application/vnd.ms-wpl": {
- source: "iana",
- extensions: [
- "wpl"
- ]
-},
- "application/vnd.ms-xpsdocument": {
- source: "iana",
- compressible: false,
- extensions: [
- "xps"
- ]
-},
- "application/vnd.msa-disk-image": {
- source: "iana"
-},
- "application/vnd.mseq": {
- source: "iana",
- extensions: [
- "mseq"
- ]
-},
- "application/vnd.msign": {
- source: "iana"
-},
- "application/vnd.multiad.creator": {
- source: "iana"
-},
- "application/vnd.multiad.creator.cif": {
- source: "iana"
-},
- "application/vnd.music-niff": {
- source: "iana"
-},
- "application/vnd.musician": {
- source: "iana",
- extensions: [
- "mus"
- ]
-},
- "application/vnd.muvee.style": {
- source: "iana",
- extensions: [
- "msty"
- ]
-},
- "application/vnd.mynfc": {
- source: "iana",
- extensions: [
- "taglet"
- ]
-},
- "application/vnd.ncd.control": {
- source: "iana"
-},
- "application/vnd.ncd.reference": {
- source: "iana"
-},
- "application/vnd.nearst.inv+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nebumind.line": {
- source: "iana"
-},
- "application/vnd.nervana": {
- source: "iana"
-},
- "application/vnd.netfpx": {
- source: "iana"
-},
- "application/vnd.neurolanguage.nlu": {
- source: "iana",
- extensions: [
- "nlu"
- ]
-},
- "application/vnd.nimn": {
- source: "iana"
-},
- "application/vnd.nintendo.nitro.rom": {
- source: "iana"
-},
- "application/vnd.nintendo.snes.rom": {
- source: "iana"
-},
- "application/vnd.nitf": {
- source: "iana",
- extensions: [
- "ntf",
- "nitf"
- ]
-},
- "application/vnd.noblenet-directory": {
- source: "iana",
- extensions: [
- "nnd"
- ]
-},
- "application/vnd.noblenet-sealer": {
- source: "iana",
- extensions: [
- "nns"
- ]
-},
- "application/vnd.noblenet-web": {
- source: "iana",
- extensions: [
- "nnw"
- ]
-},
- "application/vnd.nokia.catalogs": {
- source: "iana"
-},
- "application/vnd.nokia.conml+wbxml": {
- source: "iana"
-},
- "application/vnd.nokia.conml+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.iptv.config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.isds-radio-presets": {
- source: "iana"
-},
- "application/vnd.nokia.landmark+wbxml": {
- source: "iana"
-},
- "application/vnd.nokia.landmark+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.landmarkcollection+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.n-gage.ac+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ac"
- ]
-},
- "application/vnd.nokia.n-gage.data": {
- source: "iana",
- extensions: [
- "ngdat"
- ]
-},
- "application/vnd.nokia.n-gage.symbian.install": {
- source: "iana",
- extensions: [
- "n-gage"
- ]
-},
- "application/vnd.nokia.ncd": {
- source: "iana"
-},
- "application/vnd.nokia.pcd+wbxml": {
- source: "iana"
-},
- "application/vnd.nokia.pcd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.radio-preset": {
- source: "iana",
- extensions: [
- "rpst"
- ]
-},
- "application/vnd.nokia.radio-presets": {
- source: "iana",
- extensions: [
- "rpss"
- ]
-},
- "application/vnd.novadigm.edm": {
- source: "iana",
- extensions: [
- "edm"
- ]
-},
- "application/vnd.novadigm.edx": {
- source: "iana",
- extensions: [
- "edx"
- ]
-},
- "application/vnd.novadigm.ext": {
- source: "iana",
- extensions: [
- "ext"
- ]
-},
- "application/vnd.ntt-local.content-share": {
- source: "iana"
-},
- "application/vnd.ntt-local.file-transfer": {
- source: "iana"
-},
- "application/vnd.ntt-local.ogw_remote-access": {
- source: "iana"
-},
- "application/vnd.ntt-local.sip-ta_remote": {
- source: "iana"
-},
- "application/vnd.ntt-local.sip-ta_tcp_stream": {
- source: "iana"
-},
- "application/vnd.oasis.opendocument.chart": {
- source: "iana",
- extensions: [
- "odc"
- ]
-},
- "application/vnd.oasis.opendocument.chart-template": {
- source: "iana",
- extensions: [
- "otc"
- ]
-},
- "application/vnd.oasis.opendocument.database": {
- source: "iana",
- extensions: [
- "odb"
- ]
-},
- "application/vnd.oasis.opendocument.formula": {
- source: "iana",
- extensions: [
- "odf"
- ]
-},
- "application/vnd.oasis.opendocument.formula-template": {
- source: "iana",
- extensions: [
- "odft"
- ]
-},
- "application/vnd.oasis.opendocument.graphics": {
- source: "iana",
- compressible: false,
- extensions: [
- "odg"
- ]
-},
- "application/vnd.oasis.opendocument.graphics-template": {
- source: "iana",
- extensions: [
- "otg"
- ]
-},
- "application/vnd.oasis.opendocument.image": {
- source: "iana",
- extensions: [
- "odi"
- ]
-},
- "application/vnd.oasis.opendocument.image-template": {
- source: "iana",
- extensions: [
- "oti"
- ]
-},
- "application/vnd.oasis.opendocument.presentation": {
- source: "iana",
- compressible: false,
- extensions: [
- "odp"
- ]
-},
- "application/vnd.oasis.opendocument.presentation-template": {
- source: "iana",
- extensions: [
- "otp"
- ]
-},
- "application/vnd.oasis.opendocument.spreadsheet": {
- source: "iana",
- compressible: false,
- extensions: [
- "ods"
- ]
-},
- "application/vnd.oasis.opendocument.spreadsheet-template": {
- source: "iana",
- extensions: [
- "ots"
- ]
-},
- "application/vnd.oasis.opendocument.text": {
- source: "iana",
- compressible: false,
- extensions: [
- "odt"
- ]
-},
- "application/vnd.oasis.opendocument.text-master": {
- source: "iana",
- extensions: [
- "odm"
- ]
-},
- "application/vnd.oasis.opendocument.text-template": {
- source: "iana",
- extensions: [
- "ott"
- ]
-},
- "application/vnd.oasis.opendocument.text-web": {
- source: "iana",
- extensions: [
- "oth"
- ]
-},
- "application/vnd.obn": {
- source: "iana"
-},
- "application/vnd.ocf+cbor": {
- source: "iana"
-},
- "application/vnd.oci.image.manifest.v1+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oftn.l10n+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.contentaccessdownload+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.contentaccessstreaming+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.cspg-hexbinary": {
- source: "iana"
-},
- "application/vnd.oipf.dae.svg+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.dae.xhtml+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.mippvcontrolmessage+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.pae.gem": {
- source: "iana"
-},
- "application/vnd.oipf.spdiscovery+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.spdlist+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.ueprofile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.userprofile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.olpc-sugar": {
- source: "iana",
- extensions: [
- "xo"
- ]
-},
- "application/vnd.oma-scws-config": {
- source: "iana"
-},
- "application/vnd.oma-scws-http-request": {
- source: "iana"
-},
- "application/vnd.oma-scws-http-response": {
- source: "iana"
-},
- "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.drm-trigger+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.imd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.ltkm": {
- source: "iana"
-},
- "application/vnd.oma.bcast.notification+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.provisioningtrigger": {
- source: "iana"
-},
- "application/vnd.oma.bcast.sgboot": {
- source: "iana"
-},
- "application/vnd.oma.bcast.sgdd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.sgdu": {
- source: "iana"
-},
- "application/vnd.oma.bcast.simple-symbol-container": {
- source: "iana"
-},
- "application/vnd.oma.bcast.smartcard-trigger+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.sprov+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.stkm": {
- source: "iana"
-},
- "application/vnd.oma.cab-address-book+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.cab-feature-handler+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.cab-pcc+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.cab-subs-invite+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.cab-user-prefs+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.dcd": {
- source: "iana"
-},
- "application/vnd.oma.dcdc": {
- source: "iana"
-},
- "application/vnd.oma.dd2+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "dd2"
- ]
-},
- "application/vnd.oma.drm.risd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.group-usage-list+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.lwm2m+cbor": {
- source: "iana"
-},
- "application/vnd.oma.lwm2m+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.lwm2m+tlv": {
- source: "iana"
-},
- "application/vnd.oma.pal+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.detailed-progress-report+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.final-report+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.groups+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.invocation-descriptor+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.optimized-progress-report+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.push": {
- source: "iana"
-},
- "application/vnd.oma.scidm.messages+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.xcap-directory+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.omads-email+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/vnd.omads-file+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/vnd.omads-folder+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/vnd.omaloc-supl-init": {
- source: "iana"
-},
- "application/vnd.onepager": {
- source: "iana"
-},
- "application/vnd.onepagertamp": {
- source: "iana"
-},
- "application/vnd.onepagertamx": {
- source: "iana"
-},
- "application/vnd.onepagertat": {
- source: "iana"
-},
- "application/vnd.onepagertatp": {
- source: "iana"
-},
- "application/vnd.onepagertatx": {
- source: "iana"
-},
- "application/vnd.openblox.game+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "obgx"
- ]
-},
- "application/vnd.openblox.game-binary": {
- source: "iana"
-},
- "application/vnd.openeye.oeb": {
- source: "iana"
-},
- "application/vnd.openofficeorg.extension": {
- source: "apache",
- extensions: [
- "oxt"
- ]
-},
- "application/vnd.openstreetmap.data+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "osm"
- ]
-},
- "application/vnd.opentimestamps.ots": {
- source: "iana"
-},
- "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawing+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
- source: "iana",
- compressible: false,
- extensions: [
- "pptx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slide": {
- source: "iana",
- extensions: [
- "sldx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
- source: "iana",
- extensions: [
- "ppsx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.template": {
- source: "iana",
- extensions: [
- "potx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
- source: "iana",
- compressible: false,
- extensions: [
- "xlsx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
- source: "iana",
- extensions: [
- "xltx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.theme+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.vmldrawing": {
- source: "iana"
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
- source: "iana",
- compressible: false,
- extensions: [
- "docx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
- source: "iana",
- extensions: [
- "dotx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-package.core-properties+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-package.relationships+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oracle.resource+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.orange.indata": {
- source: "iana"
-},
- "application/vnd.osa.netdeploy": {
- source: "iana"
-},
- "application/vnd.osgeo.mapguide.package": {
- source: "iana",
- extensions: [
- "mgp"
- ]
-},
- "application/vnd.osgi.bundle": {
- source: "iana"
-},
- "application/vnd.osgi.dp": {
- source: "iana",
- extensions: [
- "dp"
- ]
-},
- "application/vnd.osgi.subsystem": {
- source: "iana",
- extensions: [
- "esa"
- ]
-},
- "application/vnd.otps.ct-kip+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oxli.countgraph": {
- source: "iana"
-},
- "application/vnd.pagerduty+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.palm": {
- source: "iana",
- extensions: [
- "pdb",
- "pqa",
- "oprc"
- ]
-},
- "application/vnd.panoply": {
- source: "iana"
-},
- "application/vnd.paos.xml": {
- source: "iana"
-},
- "application/vnd.patentdive": {
- source: "iana"
-},
- "application/vnd.patientecommsdoc": {
- source: "iana"
-},
- "application/vnd.pawaafile": {
- source: "iana",
- extensions: [
- "paw"
- ]
-},
- "application/vnd.pcos": {
- source: "iana"
-},
- "application/vnd.pg.format": {
- source: "iana",
- extensions: [
- "str"
- ]
-},
- "application/vnd.pg.osasli": {
- source: "iana",
- extensions: [
- "ei6"
- ]
-},
- "application/vnd.piaccess.application-licence": {
- source: "iana"
-},
- "application/vnd.picsel": {
- source: "iana",
- extensions: [
- "efif"
- ]
-},
- "application/vnd.pmi.widget": {
- source: "iana",
- extensions: [
- "wg"
- ]
-},
- "application/vnd.poc.group-advertisement+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.pocketlearn": {
- source: "iana",
- extensions: [
- "plf"
- ]
-},
- "application/vnd.powerbuilder6": {
- source: "iana",
- extensions: [
- "pbd"
- ]
-},
- "application/vnd.powerbuilder6-s": {
- source: "iana"
-},
- "application/vnd.powerbuilder7": {
- source: "iana"
-},
- "application/vnd.powerbuilder7-s": {
- source: "iana"
-},
- "application/vnd.powerbuilder75": {
- source: "iana"
-},
- "application/vnd.powerbuilder75-s": {
- source: "iana"
-},
- "application/vnd.preminet": {
- source: "iana"
-},
- "application/vnd.previewsystems.box": {
- source: "iana",
- extensions: [
- "box"
- ]
-},
- "application/vnd.proteus.magazine": {
- source: "iana",
- extensions: [
- "mgz"
- ]
-},
- "application/vnd.psfs": {
- source: "iana"
-},
- "application/vnd.publishare-delta-tree": {
- source: "iana",
- extensions: [
- "qps"
- ]
-},
- "application/vnd.pvi.ptid1": {
- source: "iana",
- extensions: [
- "ptid"
- ]
-},
- "application/vnd.pwg-multiplexed": {
- source: "iana"
-},
- "application/vnd.pwg-xhtml-print+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.qualcomm.brew-app-res": {
- source: "iana"
-},
- "application/vnd.quarantainenet": {
- source: "iana"
-},
- "application/vnd.quark.quarkxpress": {
- source: "iana",
- extensions: [
- "qxd",
- "qxt",
- "qwd",
- "qwt",
- "qxl",
- "qxb"
- ]
-},
- "application/vnd.quobject-quoxdocument": {
- source: "iana"
-},
- "application/vnd.radisys.moml+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit-conf+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit-conn+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit-dialog+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit-stream+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-conf+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-base+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-fax-detect+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-group+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-speech+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-transform+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.rainstor.data": {
- source: "iana"
-},
- "application/vnd.rapid": {
- source: "iana"
-},
- "application/vnd.rar": {
- source: "iana",
- extensions: [
- "rar"
- ]
-},
- "application/vnd.realvnc.bed": {
- source: "iana",
- extensions: [
- "bed"
- ]
-},
- "application/vnd.recordare.musicxml": {
- source: "iana",
- extensions: [
- "mxl"
- ]
-},
- "application/vnd.recordare.musicxml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "musicxml"
- ]
-},
- "application/vnd.renlearn.rlprint": {
- source: "iana"
-},
- "application/vnd.resilient.logic": {
- source: "iana"
-},
- "application/vnd.restful+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.rig.cryptonote": {
- source: "iana",
- extensions: [
- "cryptonote"
- ]
-},
- "application/vnd.rim.cod": {
- source: "apache",
- extensions: [
- "cod"
- ]
-},
- "application/vnd.rn-realmedia": {
- source: "apache",
- extensions: [
- "rm"
- ]
-},
- "application/vnd.rn-realmedia-vbr": {
- source: "apache",
- extensions: [
- "rmvb"
- ]
-},
- "application/vnd.route66.link66+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "link66"
- ]
-},
- "application/vnd.rs-274x": {
- source: "iana"
-},
- "application/vnd.ruckus.download": {
- source: "iana"
-},
- "application/vnd.s3sms": {
- source: "iana"
-},
- "application/vnd.sailingtracker.track": {
- source: "iana",
- extensions: [
- "st"
- ]
-},
- "application/vnd.sar": {
- source: "iana"
-},
- "application/vnd.sbm.cid": {
- source: "iana"
-},
- "application/vnd.sbm.mid2": {
- source: "iana"
-},
- "application/vnd.scribus": {
- source: "iana"
-},
- "application/vnd.sealed.3df": {
- source: "iana"
-},
- "application/vnd.sealed.csf": {
- source: "iana"
-},
- "application/vnd.sealed.doc": {
- source: "iana"
-},
- "application/vnd.sealed.eml": {
- source: "iana"
-},
- "application/vnd.sealed.mht": {
- source: "iana"
-},
- "application/vnd.sealed.net": {
- source: "iana"
-},
- "application/vnd.sealed.ppt": {
- source: "iana"
-},
- "application/vnd.sealed.tiff": {
- source: "iana"
-},
- "application/vnd.sealed.xls": {
- source: "iana"
-},
- "application/vnd.sealedmedia.softseal.html": {
- source: "iana"
-},
- "application/vnd.sealedmedia.softseal.pdf": {
- source: "iana"
-},
- "application/vnd.seemail": {
- source: "iana",
- extensions: [
- "see"
- ]
-},
- "application/vnd.seis+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.sema": {
- source: "iana",
- extensions: [
- "sema"
- ]
-},
- "application/vnd.semd": {
- source: "iana",
- extensions: [
- "semd"
- ]
-},
- "application/vnd.semf": {
- source: "iana",
- extensions: [
- "semf"
- ]
-},
- "application/vnd.shade-save-file": {
- source: "iana"
-},
- "application/vnd.shana.informed.formdata": {
- source: "iana",
- extensions: [
- "ifm"
- ]
-},
- "application/vnd.shana.informed.formtemplate": {
- source: "iana",
- extensions: [
- "itp"
- ]
-},
- "application/vnd.shana.informed.interchange": {
- source: "iana",
- extensions: [
- "iif"
- ]
-},
- "application/vnd.shana.informed.package": {
- source: "iana",
- extensions: [
- "ipk"
- ]
-},
- "application/vnd.shootproof+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.shopkick+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.shp": {
- source: "iana"
-},
- "application/vnd.shx": {
- source: "iana"
-},
- "application/vnd.sigrok.session": {
- source: "iana"
-},
- "application/vnd.simtech-mindmapper": {
- source: "iana",
- extensions: [
- "twd",
- "twds"
- ]
-},
- "application/vnd.siren+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.smaf": {
- source: "iana",
- extensions: [
- "mmf"
- ]
-},
- "application/vnd.smart.notebook": {
- source: "iana"
-},
- "application/vnd.smart.teacher": {
- source: "iana",
- extensions: [
- "teacher"
- ]
-},
- "application/vnd.snesdev-page-table": {
- source: "iana"
-},
- "application/vnd.software602.filler.form+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "fo"
- ]
-},
- "application/vnd.software602.filler.form-xml-zip": {
- source: "iana"
-},
- "application/vnd.solent.sdkm+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sdkm",
- "sdkd"
- ]
-},
- "application/vnd.spotfire.dxp": {
- source: "iana",
- extensions: [
- "dxp"
- ]
-},
- "application/vnd.spotfire.sfs": {
- source: "iana",
- extensions: [
- "sfs"
- ]
-},
- "application/vnd.sqlite3": {
- source: "iana"
-},
- "application/vnd.sss-cod": {
- source: "iana"
-},
- "application/vnd.sss-dtf": {
- source: "iana"
-},
- "application/vnd.sss-ntf": {
- source: "iana"
-},
- "application/vnd.stardivision.calc": {
- source: "apache",
- extensions: [
- "sdc"
- ]
-},
- "application/vnd.stardivision.draw": {
- source: "apache",
- extensions: [
- "sda"
- ]
-},
- "application/vnd.stardivision.impress": {
- source: "apache",
- extensions: [
- "sdd"
- ]
-},
- "application/vnd.stardivision.math": {
- source: "apache",
- extensions: [
- "smf"
- ]
-},
- "application/vnd.stardivision.writer": {
- source: "apache",
- extensions: [
- "sdw",
- "vor"
- ]
-},
- "application/vnd.stardivision.writer-global": {
- source: "apache",
- extensions: [
- "sgl"
- ]
-},
- "application/vnd.stepmania.package": {
- source: "iana",
- extensions: [
- "smzip"
- ]
-},
- "application/vnd.stepmania.stepchart": {
- source: "iana",
- extensions: [
- "sm"
- ]
-},
- "application/vnd.street-stream": {
- source: "iana"
-},
- "application/vnd.sun.wadl+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "wadl"
- ]
-},
- "application/vnd.sun.xml.calc": {
- source: "apache",
- extensions: [
- "sxc"
- ]
-},
- "application/vnd.sun.xml.calc.template": {
- source: "apache",
- extensions: [
- "stc"
- ]
-},
- "application/vnd.sun.xml.draw": {
- source: "apache",
- extensions: [
- "sxd"
- ]
-},
- "application/vnd.sun.xml.draw.template": {
- source: "apache",
- extensions: [
- "std"
- ]
-},
- "application/vnd.sun.xml.impress": {
- source: "apache",
- extensions: [
- "sxi"
- ]
-},
- "application/vnd.sun.xml.impress.template": {
- source: "apache",
- extensions: [
- "sti"
- ]
-},
- "application/vnd.sun.xml.math": {
- source: "apache",
- extensions: [
- "sxm"
- ]
-},
- "application/vnd.sun.xml.writer": {
- source: "apache",
- extensions: [
- "sxw"
- ]
-},
- "application/vnd.sun.xml.writer.global": {
- source: "apache",
- extensions: [
- "sxg"
- ]
-},
- "application/vnd.sun.xml.writer.template": {
- source: "apache",
- extensions: [
- "stw"
- ]
-},
- "application/vnd.sus-calendar": {
- source: "iana",
- extensions: [
- "sus",
- "susp"
- ]
-},
- "application/vnd.svd": {
- source: "iana",
- extensions: [
- "svd"
- ]
-},
- "application/vnd.swiftview-ics": {
- source: "iana"
-},
- "application/vnd.sycle+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.symbian.install": {
- source: "apache",
- extensions: [
- "sis",
- "sisx"
- ]
-},
- "application/vnd.syncml+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "xsm"
- ]
-},
- "application/vnd.syncml.dm+wbxml": {
- source: "iana",
- charset: "UTF-8",
- extensions: [
- "bdm"
- ]
-},
- "application/vnd.syncml.dm+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "xdm"
- ]
-},
- "application/vnd.syncml.dm.notification": {
- source: "iana"
-},
- "application/vnd.syncml.dmddf+wbxml": {
- source: "iana"
-},
- "application/vnd.syncml.dmddf+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "ddf"
- ]
-},
- "application/vnd.syncml.dmtnds+wbxml": {
- source: "iana"
-},
- "application/vnd.syncml.dmtnds+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/vnd.syncml.ds.notification": {
- source: "iana"
-},
- "application/vnd.tableschema+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.tao.intent-module-archive": {
- source: "iana",
- extensions: [
- "tao"
- ]
-},
- "application/vnd.tcpdump.pcap": {
- source: "iana",
- extensions: [
- "pcap",
- "cap",
- "dmp"
- ]
-},
- "application/vnd.think-cell.ppttc+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.tmd.mediaflex.api+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.tml": {
- source: "iana"
-},
- "application/vnd.tmobile-livetv": {
- source: "iana",
- extensions: [
- "tmo"
- ]
-},
- "application/vnd.tri.onesource": {
- source: "iana"
-},
- "application/vnd.trid.tpt": {
- source: "iana",
- extensions: [
- "tpt"
- ]
-},
- "application/vnd.triscape.mxs": {
- source: "iana",
- extensions: [
- "mxs"
- ]
-},
- "application/vnd.trueapp": {
- source: "iana",
- extensions: [
- "tra"
- ]
-},
- "application/vnd.truedoc": {
- source: "iana"
-},
- "application/vnd.ubisoft.webplayer": {
- source: "iana"
-},
- "application/vnd.ufdl": {
- source: "iana",
- extensions: [
- "ufd",
- "ufdl"
- ]
-},
- "application/vnd.uiq.theme": {
- source: "iana",
- extensions: [
- "utz"
- ]
-},
- "application/vnd.umajin": {
- source: "iana",
- extensions: [
- "umj"
- ]
-},
- "application/vnd.unity": {
- source: "iana",
- extensions: [
- "unityweb"
- ]
-},
- "application/vnd.uoml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "uoml"
- ]
-},
- "application/vnd.uplanet.alert": {
- source: "iana"
-},
- "application/vnd.uplanet.alert-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.bearer-choice": {
- source: "iana"
-},
- "application/vnd.uplanet.bearer-choice-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.cacheop": {
- source: "iana"
-},
- "application/vnd.uplanet.cacheop-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.channel": {
- source: "iana"
-},
- "application/vnd.uplanet.channel-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.list": {
- source: "iana"
-},
- "application/vnd.uplanet.list-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.listcmd": {
- source: "iana"
-},
- "application/vnd.uplanet.listcmd-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.signal": {
- source: "iana"
-},
- "application/vnd.uri-map": {
- source: "iana"
-},
- "application/vnd.valve.source.material": {
- source: "iana"
-},
- "application/vnd.vcx": {
- source: "iana",
- extensions: [
- "vcx"
- ]
-},
- "application/vnd.vd-study": {
- source: "iana"
-},
- "application/vnd.vectorworks": {
- source: "iana"
-},
- "application/vnd.vel+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.verimatrix.vcas": {
- source: "iana"
-},
- "application/vnd.veritone.aion+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.veryant.thin": {
- source: "iana"
-},
- "application/vnd.ves.encrypted": {
- source: "iana"
-},
- "application/vnd.vidsoft.vidconference": {
- source: "iana"
-},
- "application/vnd.visio": {
- source: "iana",
- extensions: [
- "vsd",
- "vst",
- "vss",
- "vsw"
- ]
-},
- "application/vnd.visionary": {
- source: "iana",
- extensions: [
- "vis"
- ]
-},
- "application/vnd.vividence.scriptfile": {
- source: "iana"
-},
- "application/vnd.vsf": {
- source: "iana",
- extensions: [
- "vsf"
- ]
-},
- "application/vnd.wap.sic": {
- source: "iana"
-},
- "application/vnd.wap.slc": {
- source: "iana"
-},
- "application/vnd.wap.wbxml": {
- source: "iana",
- charset: "UTF-8",
- extensions: [
- "wbxml"
- ]
-},
- "application/vnd.wap.wmlc": {
- source: "iana",
- extensions: [
- "wmlc"
- ]
-},
- "application/vnd.wap.wmlscriptc": {
- source: "iana",
- extensions: [
- "wmlsc"
- ]
-},
- "application/vnd.webturbo": {
- source: "iana",
- extensions: [
- "wtb"
- ]
-},
- "application/vnd.wfa.dpp": {
- source: "iana"
-},
- "application/vnd.wfa.p2p": {
- source: "iana"
-},
- "application/vnd.wfa.wsc": {
- source: "iana"
-},
- "application/vnd.windows.devicepairing": {
- source: "iana"
-},
- "application/vnd.wmc": {
- source: "iana"
-},
- "application/vnd.wmf.bootstrap": {
- source: "iana"
-},
- "application/vnd.wolfram.mathematica": {
- source: "iana"
-},
- "application/vnd.wolfram.mathematica.package": {
- source: "iana"
-},
- "application/vnd.wolfram.player": {
- source: "iana",
- extensions: [
- "nbp"
- ]
-},
- "application/vnd.wordperfect": {
- source: "iana",
- extensions: [
- "wpd"
- ]
-},
- "application/vnd.wqd": {
- source: "iana",
- extensions: [
- "wqd"
- ]
-},
- "application/vnd.wrq-hp3000-labelled": {
- source: "iana"
-},
- "application/vnd.wt.stf": {
- source: "iana",
- extensions: [
- "stf"
- ]
-},
- "application/vnd.wv.csp+wbxml": {
- source: "iana"
-},
- "application/vnd.wv.csp+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.wv.ssp+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.xacml+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.xara": {
- source: "iana",
- extensions: [
- "xar"
- ]
-},
- "application/vnd.xfdl": {
- source: "iana",
- extensions: [
- "xfdl"
- ]
-},
- "application/vnd.xfdl.webform": {
- source: "iana"
-},
- "application/vnd.xmi+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.xmpie.cpkg": {
- source: "iana"
-},
- "application/vnd.xmpie.dpkg": {
- source: "iana"
-},
- "application/vnd.xmpie.plan": {
- source: "iana"
-},
- "application/vnd.xmpie.ppkg": {
- source: "iana"
-},
- "application/vnd.xmpie.xlim": {
- source: "iana"
-},
- "application/vnd.yamaha.hv-dic": {
- source: "iana",
- extensions: [
- "hvd"
- ]
-},
- "application/vnd.yamaha.hv-script": {
- source: "iana",
- extensions: [
- "hvs"
- ]
-},
- "application/vnd.yamaha.hv-voice": {
- source: "iana",
- extensions: [
- "hvp"
- ]
-},
- "application/vnd.yamaha.openscoreformat": {
- source: "iana",
- extensions: [
- "osf"
- ]
-},
- "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "osfpvg"
- ]
-},
- "application/vnd.yamaha.remote-setup": {
- source: "iana"
-},
- "application/vnd.yamaha.smaf-audio": {
- source: "iana",
- extensions: [
- "saf"
- ]
-},
- "application/vnd.yamaha.smaf-phrase": {
- source: "iana",
- extensions: [
- "spf"
- ]
-},
- "application/vnd.yamaha.through-ngn": {
- source: "iana"
-},
- "application/vnd.yamaha.tunnel-udpencap": {
- source: "iana"
-},
- "application/vnd.yaoweme": {
- source: "iana"
-},
- "application/vnd.yellowriver-custom-menu": {
- source: "iana",
- extensions: [
- "cmp"
- ]
-},
- "application/vnd.youtube.yt": {
- source: "iana"
-},
- "application/vnd.zul": {
- source: "iana",
- extensions: [
- "zir",
- "zirz"
- ]
-},
- "application/vnd.zzazz.deck+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "zaz"
- ]
-},
- "application/voicexml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "vxml"
- ]
-},
- "application/voucher-cms+json": {
- source: "iana",
- compressible: true
-},
- "application/vq-rtcpxr": {
- source: "iana"
-},
- "application/wasm": {
- source: "iana",
- compressible: true,
- extensions: [
- "wasm"
- ]
-},
- "application/watcherinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/webpush-options+json": {
- source: "iana",
- compressible: true
-},
- "application/whoispp-query": {
- source: "iana"
-},
- "application/whoispp-response": {
- source: "iana"
-},
- "application/widget": {
- source: "iana",
- extensions: [
- "wgt"
- ]
-},
- "application/winhlp": {
- source: "apache",
- extensions: [
- "hlp"
- ]
-},
- "application/wita": {
- source: "iana"
-},
- "application/wordperfect5.1": {
- source: "iana"
-},
- "application/wsdl+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "wsdl"
- ]
-},
- "application/wspolicy+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "wspolicy"
- ]
-},
- "application/x-7z-compressed": {
- source: "apache",
- compressible: false,
- extensions: [
- "7z"
- ]
-},
- "application/x-abiword": {
- source: "apache",
- extensions: [
- "abw"
- ]
-},
- "application/x-ace-compressed": {
- source: "apache",
- extensions: [
- "ace"
- ]
-},
- "application/x-amf": {
- source: "apache"
-},
- "application/x-apple-diskimage": {
- source: "apache",
- extensions: [
- "dmg"
- ]
-},
- "application/x-arj": {
- compressible: false,
- extensions: [
- "arj"
- ]
-},
- "application/x-authorware-bin": {
- source: "apache",
- extensions: [
- "aab",
- "x32",
- "u32",
- "vox"
- ]
-},
- "application/x-authorware-map": {
- source: "apache",
- extensions: [
- "aam"
- ]
-},
- "application/x-authorware-seg": {
- source: "apache",
- extensions: [
- "aas"
- ]
-},
- "application/x-bcpio": {
- source: "apache",
- extensions: [
- "bcpio"
- ]
-},
- "application/x-bdoc": {
- compressible: false,
- extensions: [
- "bdoc"
- ]
-},
- "application/x-bittorrent": {
- source: "apache",
- extensions: [
- "torrent"
- ]
-},
- "application/x-blorb": {
- source: "apache",
- extensions: [
- "blb",
- "blorb"
- ]
-},
- "application/x-bzip": {
- source: "apache",
- compressible: false,
- extensions: [
- "bz"
- ]
-},
- "application/x-bzip2": {
- source: "apache",
- compressible: false,
- extensions: [
- "bz2",
- "boz"
- ]
-},
- "application/x-cbr": {
- source: "apache",
- extensions: [
- "cbr",
- "cba",
- "cbt",
- "cbz",
- "cb7"
- ]
-},
- "application/x-cdlink": {
- source: "apache",
- extensions: [
- "vcd"
- ]
-},
- "application/x-cfs-compressed": {
- source: "apache",
- extensions: [
- "cfs"
- ]
-},
- "application/x-chat": {
- source: "apache",
- extensions: [
- "chat"
- ]
-},
- "application/x-chess-pgn": {
- source: "apache",
- extensions: [
- "pgn"
- ]
-},
- "application/x-chrome-extension": {
- extensions: [
- "crx"
- ]
-},
- "application/x-cocoa": {
- source: "nginx",
- extensions: [
- "cco"
- ]
-},
- "application/x-compress": {
- source: "apache"
-},
- "application/x-conference": {
- source: "apache",
- extensions: [
- "nsc"
- ]
-},
- "application/x-cpio": {
- source: "apache",
- extensions: [
- "cpio"
- ]
-},
- "application/x-csh": {
- source: "apache",
- extensions: [
- "csh"
- ]
-},
- "application/x-deb": {
- compressible: false
-},
- "application/x-debian-package": {
- source: "apache",
- extensions: [
- "deb",
- "udeb"
- ]
-},
- "application/x-dgc-compressed": {
- source: "apache",
- extensions: [
- "dgc"
- ]
-},
- "application/x-director": {
- source: "apache",
- extensions: [
- "dir",
- "dcr",
- "dxr",
- "cst",
- "cct",
- "cxt",
- "w3d",
- "fgd",
- "swa"
- ]
-},
- "application/x-doom": {
- source: "apache",
- extensions: [
- "wad"
- ]
-},
- "application/x-dtbncx+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "ncx"
- ]
-},
- "application/x-dtbook+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "dtb"
- ]
-},
- "application/x-dtbresource+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "res"
- ]
-},
- "application/x-dvi": {
- source: "apache",
- compressible: false,
- extensions: [
- "dvi"
- ]
-},
- "application/x-envoy": {
- source: "apache",
- extensions: [
- "evy"
- ]
-},
- "application/x-eva": {
- source: "apache",
- extensions: [
- "eva"
- ]
-},
- "application/x-font-bdf": {
- source: "apache",
- extensions: [
- "bdf"
- ]
-},
- "application/x-font-dos": {
- source: "apache"
-},
- "application/x-font-framemaker": {
- source: "apache"
-},
- "application/x-font-ghostscript": {
- source: "apache",
- extensions: [
- "gsf"
- ]
-},
- "application/x-font-libgrx": {
- source: "apache"
-},
- "application/x-font-linux-psf": {
- source: "apache",
- extensions: [
- "psf"
- ]
-},
- "application/x-font-pcf": {
- source: "apache",
- extensions: [
- "pcf"
- ]
-},
- "application/x-font-snf": {
- source: "apache",
- extensions: [
- "snf"
- ]
-},
- "application/x-font-speedo": {
- source: "apache"
-},
- "application/x-font-sunos-news": {
- source: "apache"
-},
- "application/x-font-type1": {
- source: "apache",
- extensions: [
- "pfa",
- "pfb",
- "pfm",
- "afm"
- ]
-},
- "application/x-font-vfont": {
- source: "apache"
-},
- "application/x-freearc": {
- source: "apache",
- extensions: [
- "arc"
- ]
-},
- "application/x-futuresplash": {
- source: "apache",
- extensions: [
- "spl"
- ]
-},
- "application/x-gca-compressed": {
- source: "apache",
- extensions: [
- "gca"
- ]
-},
- "application/x-glulx": {
- source: "apache",
- extensions: [
- "ulx"
- ]
-},
- "application/x-gnumeric": {
- source: "apache",
- extensions: [
- "gnumeric"
- ]
-},
- "application/x-gramps-xml": {
- source: "apache",
- extensions: [
- "gramps"
- ]
-},
- "application/x-gtar": {
- source: "apache",
- extensions: [
- "gtar"
- ]
-},
- "application/x-gzip": {
- source: "apache"
-},
- "application/x-hdf": {
- source: "apache",
- extensions: [
- "hdf"
- ]
-},
- "application/x-httpd-php": {
- compressible: true,
- extensions: [
- "php"
- ]
-},
- "application/x-install-instructions": {
- source: "apache",
- extensions: [
- "install"
- ]
-},
- "application/x-iso9660-image": {
- source: "apache",
- extensions: [
- "iso"
- ]
-},
- "application/x-java-archive-diff": {
- source: "nginx",
- extensions: [
- "jardiff"
- ]
-},
- "application/x-java-jnlp-file": {
- source: "apache",
- compressible: false,
- extensions: [
- "jnlp"
- ]
-},
- "application/x-javascript": {
- compressible: true
-},
- "application/x-keepass2": {
- extensions: [
- "kdbx"
- ]
-},
- "application/x-latex": {
- source: "apache",
- compressible: false,
- extensions: [
- "latex"
- ]
-},
- "application/x-lua-bytecode": {
- extensions: [
- "luac"
- ]
-},
- "application/x-lzh-compressed": {
- source: "apache",
- extensions: [
- "lzh",
- "lha"
- ]
-},
- "application/x-makeself": {
- source: "nginx",
- extensions: [
- "run"
- ]
-},
- "application/x-mie": {
- source: "apache",
- extensions: [
- "mie"
- ]
-},
- "application/x-mobipocket-ebook": {
- source: "apache",
- extensions: [
- "prc",
- "mobi"
- ]
-},
- "application/x-mpegurl": {
- compressible: false
-},
- "application/x-ms-application": {
- source: "apache",
- extensions: [
- "application"
- ]
-},
- "application/x-ms-shortcut": {
- source: "apache",
- extensions: [
- "lnk"
- ]
-},
- "application/x-ms-wmd": {
- source: "apache",
- extensions: [
- "wmd"
- ]
-},
- "application/x-ms-wmz": {
- source: "apache",
- extensions: [
- "wmz"
- ]
-},
- "application/x-ms-xbap": {
- source: "apache",
- extensions: [
- "xbap"
- ]
-},
- "application/x-msaccess": {
- source: "apache",
- extensions: [
- "mdb"
- ]
-},
- "application/x-msbinder": {
- source: "apache",
- extensions: [
- "obd"
- ]
-},
- "application/x-mscardfile": {
- source: "apache",
- extensions: [
- "crd"
- ]
-},
- "application/x-msclip": {
- source: "apache",
- extensions: [
- "clp"
- ]
-},
- "application/x-msdos-program": {
- extensions: [
- "exe"
- ]
-},
- "application/x-msdownload": {
- source: "apache",
- extensions: [
- "exe",
- "dll",
- "com",
- "bat",
- "msi"
- ]
-},
- "application/x-msmediaview": {
- source: "apache",
- extensions: [
- "mvb",
- "m13",
- "m14"
- ]
-},
- "application/x-msmetafile": {
- source: "apache",
- extensions: [
- "wmf",
- "wmz",
- "emf",
- "emz"
- ]
-},
- "application/x-msmoney": {
- source: "apache",
- extensions: [
- "mny"
- ]
-},
- "application/x-mspublisher": {
- source: "apache",
- extensions: [
- "pub"
- ]
-},
- "application/x-msschedule": {
- source: "apache",
- extensions: [
- "scd"
- ]
-},
- "application/x-msterminal": {
- source: "apache",
- extensions: [
- "trm"
- ]
-},
- "application/x-mswrite": {
- source: "apache",
- extensions: [
- "wri"
- ]
-},
- "application/x-netcdf": {
- source: "apache",
- extensions: [
- "nc",
- "cdf"
- ]
-},
- "application/x-ns-proxy-autoconfig": {
- compressible: true,
- extensions: [
- "pac"
- ]
-},
- "application/x-nzb": {
- source: "apache",
- extensions: [
- "nzb"
- ]
-},
- "application/x-perl": {
- source: "nginx",
- extensions: [
- "pl",
- "pm"
- ]
-},
- "application/x-pilot": {
- source: "nginx",
- extensions: [
- "prc",
- "pdb"
- ]
-},
- "application/x-pkcs12": {
- source: "apache",
- compressible: false,
- extensions: [
- "p12",
- "pfx"
- ]
-},
- "application/x-pkcs7-certificates": {
- source: "apache",
- extensions: [
- "p7b",
- "spc"
- ]
-},
- "application/x-pkcs7-certreqresp": {
- source: "apache",
- extensions: [
- "p7r"
- ]
-},
- "application/x-pki-message": {
- source: "iana"
-},
- "application/x-rar-compressed": {
- source: "apache",
- compressible: false,
- extensions: [
- "rar"
- ]
-},
- "application/x-redhat-package-manager": {
- source: "nginx",
- extensions: [
- "rpm"
- ]
-},
- "application/x-research-info-systems": {
- source: "apache",
- extensions: [
- "ris"
- ]
-},
- "application/x-sea": {
- source: "nginx",
- extensions: [
- "sea"
- ]
-},
- "application/x-sh": {
- source: "apache",
- compressible: true,
- extensions: [
- "sh"
- ]
-},
- "application/x-shar": {
- source: "apache",
- extensions: [
- "shar"
- ]
-},
- "application/x-shockwave-flash": {
- source: "apache",
- compressible: false,
- extensions: [
- "swf"
- ]
-},
- "application/x-silverlight-app": {
- source: "apache",
- extensions: [
- "xap"
- ]
-},
- "application/x-sql": {
- source: "apache",
- extensions: [
- "sql"
- ]
-},
- "application/x-stuffit": {
- source: "apache",
- compressible: false,
- extensions: [
- "sit"
- ]
-},
- "application/x-stuffitx": {
- source: "apache",
- extensions: [
- "sitx"
- ]
-},
- "application/x-subrip": {
- source: "apache",
- extensions: [
- "srt"
- ]
-},
- "application/x-sv4cpio": {
- source: "apache",
- extensions: [
- "sv4cpio"
- ]
-},
- "application/x-sv4crc": {
- source: "apache",
- extensions: [
- "sv4crc"
- ]
-},
- "application/x-t3vm-image": {
- source: "apache",
- extensions: [
- "t3"
- ]
-},
- "application/x-tads": {
- source: "apache",
- extensions: [
- "gam"
- ]
-},
- "application/x-tar": {
- source: "apache",
- compressible: true,
- extensions: [
- "tar"
- ]
-},
- "application/x-tcl": {
- source: "apache",
- extensions: [
- "tcl",
- "tk"
- ]
-},
- "application/x-tex": {
- source: "apache",
- extensions: [
- "tex"
- ]
-},
- "application/x-tex-tfm": {
- source: "apache",
- extensions: [
- "tfm"
- ]
-},
- "application/x-texinfo": {
- source: "apache",
- extensions: [
- "texinfo",
- "texi"
- ]
-},
- "application/x-tgif": {
- source: "apache",
- extensions: [
- "obj"
- ]
-},
- "application/x-ustar": {
- source: "apache",
- extensions: [
- "ustar"
- ]
-},
- "application/x-virtualbox-hdd": {
- compressible: true,
- extensions: [
- "hdd"
- ]
-},
- "application/x-virtualbox-ova": {
- compressible: true,
- extensions: [
- "ova"
- ]
-},
- "application/x-virtualbox-ovf": {
- compressible: true,
- extensions: [
- "ovf"
- ]
-},
- "application/x-virtualbox-vbox": {
- compressible: true,
- extensions: [
- "vbox"
- ]
-},
- "application/x-virtualbox-vbox-extpack": {
- compressible: false,
- extensions: [
- "vbox-extpack"
- ]
-},
- "application/x-virtualbox-vdi": {
- compressible: true,
- extensions: [
- "vdi"
- ]
-},
- "application/x-virtualbox-vhd": {
- compressible: true,
- extensions: [
- "vhd"
- ]
-},
- "application/x-virtualbox-vmdk": {
- compressible: true,
- extensions: [
- "vmdk"
- ]
-},
- "application/x-wais-source": {
- source: "apache",
- extensions: [
- "src"
- ]
-},
- "application/x-web-app-manifest+json": {
- compressible: true,
- extensions: [
- "webapp"
- ]
-},
- "application/x-www-form-urlencoded": {
- source: "iana",
- compressible: true
-},
- "application/x-x509-ca-cert": {
- source: "iana",
- extensions: [
- "der",
- "crt",
- "pem"
- ]
-},
- "application/x-x509-ca-ra-cert": {
- source: "iana"
-},
- "application/x-x509-next-ca-cert": {
- source: "iana"
-},
- "application/x-xfig": {
- source: "apache",
- extensions: [
- "fig"
- ]
-},
- "application/x-xliff+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "xlf"
- ]
-},
- "application/x-xpinstall": {
- source: "apache",
- compressible: false,
- extensions: [
- "xpi"
- ]
-},
- "application/x-xz": {
- source: "apache",
- extensions: [
- "xz"
- ]
-},
- "application/x-zmachine": {
- source: "apache",
- extensions: [
- "z1",
- "z2",
- "z3",
- "z4",
- "z5",
- "z6",
- "z7",
- "z8"
- ]
-},
- "application/x400-bp": {
- source: "iana"
-},
- "application/xacml+xml": {
- source: "iana",
- compressible: true
-},
- "application/xaml+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "xaml"
- ]
-},
- "application/xcap-att+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xav"
- ]
-},
- "application/xcap-caps+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xca"
- ]
-},
- "application/xcap-diff+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xdf"
- ]
-},
- "application/xcap-el+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xel"
- ]
-},
- "application/xcap-error+xml": {
- source: "iana",
- compressible: true
-},
- "application/xcap-ns+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xns"
- ]
-},
- "application/xcon-conference-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/xcon-conference-info-diff+xml": {
- source: "iana",
- compressible: true
-},
- "application/xenc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xenc"
- ]
-},
- "application/xhtml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xhtml",
- "xht"
- ]
-},
- "application/xhtml-voice+xml": {
- source: "apache",
- compressible: true
-},
- "application/xliff+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xlf"
- ]
-},
- "application/xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xml",
- "xsl",
- "xsd",
- "rng"
- ]
-},
- "application/xml-dtd": {
- source: "iana",
- compressible: true,
- extensions: [
- "dtd"
- ]
-},
- "application/xml-external-parsed-entity": {
- source: "iana"
-},
- "application/xml-patch+xml": {
- source: "iana",
- compressible: true
-},
- "application/xmpp+xml": {
- source: "iana",
- compressible: true
-},
- "application/xop+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xop"
- ]
-},
- "application/xproc+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "xpl"
- ]
-},
- "application/xslt+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xsl",
- "xslt"
- ]
-},
- "application/xspf+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "xspf"
- ]
-},
- "application/xv+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mxml",
- "xhvml",
- "xvml",
- "xvm"
- ]
-},
- "application/yang": {
- source: "iana",
- extensions: [
- "yang"
- ]
-},
- "application/yang-data+json": {
- source: "iana",
- compressible: true
-},
- "application/yang-data+xml": {
- source: "iana",
- compressible: true
-},
- "application/yang-patch+json": {
- source: "iana",
- compressible: true
-},
- "application/yang-patch+xml": {
- source: "iana",
- compressible: true
-},
- "application/yin+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "yin"
- ]
-},
- "application/zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "zip"
- ]
-},
- "application/zlib": {
- source: "iana"
-},
- "application/zstd": {
- source: "iana"
-},
- "audio/1d-interleaved-parityfec": {
- source: "iana"
-},
- "audio/32kadpcm": {
- source: "iana"
-},
- "audio/3gpp": {
- source: "iana",
- compressible: false,
- extensions: [
- "3gpp"
- ]
-},
- "audio/3gpp2": {
- source: "iana"
-},
- "audio/aac": {
- source: "iana"
-},
- "audio/ac3": {
- source: "iana"
-},
- "audio/adpcm": {
- source: "apache",
- extensions: [
- "adp"
- ]
-},
- "audio/amr": {
- source: "iana",
- extensions: [
- "amr"
- ]
-},
- "audio/amr-wb": {
- source: "iana"
-},
- "audio/amr-wb+": {
- source: "iana"
-},
- "audio/aptx": {
- source: "iana"
-},
- "audio/asc": {
- source: "iana"
-},
- "audio/atrac-advanced-lossless": {
- source: "iana"
-},
- "audio/atrac-x": {
- source: "iana"
-},
- "audio/atrac3": {
- source: "iana"
-},
- "audio/basic": {
- source: "iana",
- compressible: false,
- extensions: [
- "au",
- "snd"
- ]
-},
- "audio/bv16": {
- source: "iana"
-},
- "audio/bv32": {
- source: "iana"
-},
- "audio/clearmode": {
- source: "iana"
-},
- "audio/cn": {
- source: "iana"
-},
- "audio/dat12": {
- source: "iana"
-},
- "audio/dls": {
- source: "iana"
-},
- "audio/dsr-es201108": {
- source: "iana"
-},
- "audio/dsr-es202050": {
- source: "iana"
-},
- "audio/dsr-es202211": {
- source: "iana"
-},
- "audio/dsr-es202212": {
- source: "iana"
-},
- "audio/dv": {
- source: "iana"
-},
- "audio/dvi4": {
- source: "iana"
-},
- "audio/eac3": {
- source: "iana"
-},
- "audio/encaprtp": {
- source: "iana"
-},
- "audio/evrc": {
- source: "iana"
-},
- "audio/evrc-qcp": {
- source: "iana"
-},
- "audio/evrc0": {
- source: "iana"
-},
- "audio/evrc1": {
- source: "iana"
-},
- "audio/evrcb": {
- source: "iana"
-},
- "audio/evrcb0": {
- source: "iana"
-},
- "audio/evrcb1": {
- source: "iana"
-},
- "audio/evrcnw": {
- source: "iana"
-},
- "audio/evrcnw0": {
- source: "iana"
-},
- "audio/evrcnw1": {
- source: "iana"
-},
- "audio/evrcwb": {
- source: "iana"
-},
- "audio/evrcwb0": {
- source: "iana"
-},
- "audio/evrcwb1": {
- source: "iana"
-},
- "audio/evs": {
- source: "iana"
-},
- "audio/flexfec": {
- source: "iana"
-},
- "audio/fwdred": {
- source: "iana"
-},
- "audio/g711-0": {
- source: "iana"
-},
- "audio/g719": {
- source: "iana"
-},
- "audio/g722": {
- source: "iana"
-},
- "audio/g7221": {
- source: "iana"
-},
- "audio/g723": {
- source: "iana"
-},
- "audio/g726-16": {
- source: "iana"
-},
- "audio/g726-24": {
- source: "iana"
-},
- "audio/g726-32": {
- source: "iana"
-},
- "audio/g726-40": {
- source: "iana"
-},
- "audio/g728": {
- source: "iana"
-},
- "audio/g729": {
- source: "iana"
-},
- "audio/g7291": {
- source: "iana"
-},
- "audio/g729d": {
- source: "iana"
-},
- "audio/g729e": {
- source: "iana"
-},
- "audio/gsm": {
- source: "iana"
-},
- "audio/gsm-efr": {
- source: "iana"
-},
- "audio/gsm-hr-08": {
- source: "iana"
-},
- "audio/ilbc": {
- source: "iana"
-},
- "audio/ip-mr_v2.5": {
- source: "iana"
-},
- "audio/isac": {
- source: "apache"
-},
- "audio/l16": {
- source: "iana"
-},
- "audio/l20": {
- source: "iana"
-},
- "audio/l24": {
- source: "iana",
- compressible: false
-},
- "audio/l8": {
- source: "iana"
-},
- "audio/lpc": {
- source: "iana"
-},
- "audio/melp": {
- source: "iana"
-},
- "audio/melp1200": {
- source: "iana"
-},
- "audio/melp2400": {
- source: "iana"
-},
- "audio/melp600": {
- source: "iana"
-},
- "audio/mhas": {
- source: "iana"
-},
- "audio/midi": {
- source: "apache",
- extensions: [
- "mid",
- "midi",
- "kar",
- "rmi"
- ]
-},
- "audio/mobile-xmf": {
- source: "iana",
- extensions: [
- "mxmf"
- ]
-},
- "audio/mp3": {
- compressible: false,
- extensions: [
- "mp3"
- ]
-},
- "audio/mp4": {
- source: "iana",
- compressible: false,
- extensions: [
- "m4a",
- "mp4a"
- ]
-},
- "audio/mp4a-latm": {
- source: "iana"
-},
- "audio/mpa": {
- source: "iana"
-},
- "audio/mpa-robust": {
- source: "iana"
-},
- "audio/mpeg": {
- source: "iana",
- compressible: false,
- extensions: [
- "mpga",
- "mp2",
- "mp2a",
- "mp3",
- "m2a",
- "m3a"
- ]
-},
- "audio/mpeg4-generic": {
- source: "iana"
-},
- "audio/musepack": {
- source: "apache"
-},
- "audio/ogg": {
- source: "iana",
- compressible: false,
- extensions: [
- "oga",
- "ogg",
- "spx",
- "opus"
- ]
-},
- "audio/opus": {
- source: "iana"
-},
- "audio/parityfec": {
- source: "iana"
-},
- "audio/pcma": {
- source: "iana"
-},
- "audio/pcma-wb": {
- source: "iana"
-},
- "audio/pcmu": {
- source: "iana"
-},
- "audio/pcmu-wb": {
- source: "iana"
-},
- "audio/prs.sid": {
- source: "iana"
-},
- "audio/qcelp": {
- source: "iana"
-},
- "audio/raptorfec": {
- source: "iana"
-},
- "audio/red": {
- source: "iana"
-},
- "audio/rtp-enc-aescm128": {
- source: "iana"
-},
- "audio/rtp-midi": {
- source: "iana"
-},
- "audio/rtploopback": {
- source: "iana"
-},
- "audio/rtx": {
- source: "iana"
-},
- "audio/s3m": {
- source: "apache",
- extensions: [
- "s3m"
- ]
-},
- "audio/scip": {
- source: "iana"
-},
- "audio/silk": {
- source: "apache",
- extensions: [
- "sil"
- ]
-},
- "audio/smv": {
- source: "iana"
-},
- "audio/smv-qcp": {
- source: "iana"
-},
- "audio/smv0": {
- source: "iana"
-},
- "audio/sofa": {
- source: "iana"
-},
- "audio/sp-midi": {
- source: "iana"
-},
- "audio/speex": {
- source: "iana"
-},
- "audio/t140c": {
- source: "iana"
-},
- "audio/t38": {
- source: "iana"
-},
- "audio/telephone-event": {
- source: "iana"
-},
- "audio/tetra_acelp": {
- source: "iana"
-},
- "audio/tetra_acelp_bb": {
- source: "iana"
-},
- "audio/tone": {
- source: "iana"
-},
- "audio/tsvcis": {
- source: "iana"
-},
- "audio/uemclip": {
- source: "iana"
-},
- "audio/ulpfec": {
- source: "iana"
-},
- "audio/usac": {
- source: "iana"
-},
- "audio/vdvi": {
- source: "iana"
-},
- "audio/vmr-wb": {
- source: "iana"
-},
- "audio/vnd.3gpp.iufp": {
- source: "iana"
-},
- "audio/vnd.4sb": {
- source: "iana"
-},
- "audio/vnd.audiokoz": {
- source: "iana"
-},
- "audio/vnd.celp": {
- source: "iana"
-},
- "audio/vnd.cisco.nse": {
- source: "iana"
-},
- "audio/vnd.cmles.radio-events": {
- source: "iana"
-},
- "audio/vnd.cns.anp1": {
- source: "iana"
-},
- "audio/vnd.cns.inf1": {
- source: "iana"
-},
- "audio/vnd.dece.audio": {
- source: "iana",
- extensions: [
- "uva",
- "uvva"
- ]
-},
- "audio/vnd.digital-winds": {
- source: "iana",
- extensions: [
- "eol"
- ]
-},
- "audio/vnd.dlna.adts": {
- source: "iana"
-},
- "audio/vnd.dolby.heaac.1": {
- source: "iana"
-},
- "audio/vnd.dolby.heaac.2": {
- source: "iana"
-},
- "audio/vnd.dolby.mlp": {
- source: "iana"
-},
- "audio/vnd.dolby.mps": {
- source: "iana"
-},
- "audio/vnd.dolby.pl2": {
- source: "iana"
-},
- "audio/vnd.dolby.pl2x": {
- source: "iana"
-},
- "audio/vnd.dolby.pl2z": {
- source: "iana"
-},
- "audio/vnd.dolby.pulse.1": {
- source: "iana"
-},
- "audio/vnd.dra": {
- source: "iana",
- extensions: [
- "dra"
- ]
-},
- "audio/vnd.dts": {
- source: "iana",
- extensions: [
- "dts"
- ]
-},
- "audio/vnd.dts.hd": {
- source: "iana",
- extensions: [
- "dtshd"
- ]
-},
- "audio/vnd.dts.uhd": {
- source: "iana"
-},
- "audio/vnd.dvb.file": {
- source: "iana"
-},
- "audio/vnd.everad.plj": {
- source: "iana"
-},
- "audio/vnd.hns.audio": {
- source: "iana"
-},
- "audio/vnd.lucent.voice": {
- source: "iana",
- extensions: [
- "lvp"
- ]
-},
- "audio/vnd.ms-playready.media.pya": {
- source: "iana",
- extensions: [
- "pya"
- ]
-},
- "audio/vnd.nokia.mobile-xmf": {
- source: "iana"
-},
- "audio/vnd.nortel.vbk": {
- source: "iana"
-},
- "audio/vnd.nuera.ecelp4800": {
- source: "iana",
- extensions: [
- "ecelp4800"
- ]
-},
- "audio/vnd.nuera.ecelp7470": {
- source: "iana",
- extensions: [
- "ecelp7470"
- ]
-},
- "audio/vnd.nuera.ecelp9600": {
- source: "iana",
- extensions: [
- "ecelp9600"
- ]
-},
- "audio/vnd.octel.sbc": {
- source: "iana"
-},
- "audio/vnd.presonus.multitrack": {
- source: "iana"
-},
- "audio/vnd.qcelp": {
- source: "iana"
-},
- "audio/vnd.rhetorex.32kadpcm": {
- source: "iana"
-},
- "audio/vnd.rip": {
- source: "iana",
- extensions: [
- "rip"
- ]
-},
- "audio/vnd.rn-realaudio": {
- compressible: false
-},
- "audio/vnd.sealedmedia.softseal.mpeg": {
- source: "iana"
-},
- "audio/vnd.vmx.cvsd": {
- source: "iana"
-},
- "audio/vnd.wave": {
- compressible: false
-},
- "audio/vorbis": {
- source: "iana",
- compressible: false
-},
- "audio/vorbis-config": {
- source: "iana"
-},
- "audio/wav": {
- compressible: false,
- extensions: [
- "wav"
- ]
-},
- "audio/wave": {
- compressible: false,
- extensions: [
- "wav"
- ]
-},
- "audio/webm": {
- source: "apache",
- compressible: false,
- extensions: [
- "weba"
- ]
-},
- "audio/x-aac": {
- source: "apache",
- compressible: false,
- extensions: [
- "aac"
- ]
-},
- "audio/x-aiff": {
- source: "apache",
- extensions: [
- "aif",
- "aiff",
- "aifc"
- ]
-},
- "audio/x-caf": {
- source: "apache",
- compressible: false,
- extensions: [
- "caf"
- ]
-},
- "audio/x-flac": {
- source: "apache",
- extensions: [
- "flac"
- ]
-},
- "audio/x-m4a": {
- source: "nginx",
- extensions: [
- "m4a"
- ]
-},
- "audio/x-matroska": {
- source: "apache",
- extensions: [
- "mka"
- ]
-},
- "audio/x-mpegurl": {
- source: "apache",
- extensions: [
- "m3u"
- ]
-},
- "audio/x-ms-wax": {
- source: "apache",
- extensions: [
- "wax"
- ]
-},
- "audio/x-ms-wma": {
- source: "apache",
- extensions: [
- "wma"
- ]
-},
- "audio/x-pn-realaudio": {
- source: "apache",
- extensions: [
- "ram",
- "ra"
- ]
-},
- "audio/x-pn-realaudio-plugin": {
- source: "apache",
- extensions: [
- "rmp"
- ]
-},
- "audio/x-realaudio": {
- source: "nginx",
- extensions: [
- "ra"
- ]
-},
- "audio/x-tta": {
- source: "apache"
-},
- "audio/x-wav": {
- source: "apache",
- extensions: [
- "wav"
- ]
-},
- "audio/xm": {
- source: "apache",
- extensions: [
- "xm"
- ]
-},
- "chemical/x-cdx": {
- source: "apache",
- extensions: [
- "cdx"
- ]
-},
- "chemical/x-cif": {
- source: "apache",
- extensions: [
- "cif"
- ]
-},
- "chemical/x-cmdf": {
- source: "apache",
- extensions: [
- "cmdf"
- ]
-},
- "chemical/x-cml": {
- source: "apache",
- extensions: [
- "cml"
- ]
-},
- "chemical/x-csml": {
- source: "apache",
- extensions: [
- "csml"
- ]
-},
- "chemical/x-pdb": {
- source: "apache"
-},
- "chemical/x-xyz": {
- source: "apache",
- extensions: [
- "xyz"
- ]
-},
- "font/collection": {
- source: "iana",
- extensions: [
- "ttc"
- ]
-},
- "font/otf": {
- source: "iana",
- compressible: true,
- extensions: [
- "otf"
- ]
-},
- "font/sfnt": {
- source: "iana"
-},
- "font/ttf": {
- source: "iana",
- compressible: true,
- extensions: [
- "ttf"
- ]
-},
- "font/woff": {
- source: "iana",
- extensions: [
- "woff"
- ]
-},
- "font/woff2": {
- source: "iana",
- extensions: [
- "woff2"
- ]
-},
- "image/aces": {
- source: "iana",
- extensions: [
- "exr"
- ]
-},
- "image/apng": {
- compressible: false,
- extensions: [
- "apng"
- ]
-},
- "image/avci": {
- source: "iana"
-},
- "image/avcs": {
- source: "iana"
-},
- "image/avif": {
- source: "iana",
- compressible: false,
- extensions: [
- "avif"
- ]
-},
- "image/bmp": {
- source: "iana",
- compressible: true,
- extensions: [
- "bmp"
- ]
-},
- "image/cgm": {
- source: "iana",
- extensions: [
- "cgm"
- ]
-},
- "image/dicom-rle": {
- source: "iana",
- extensions: [
- "drle"
- ]
-},
- "image/emf": {
- source: "iana",
- extensions: [
- "emf"
- ]
-},
- "image/fits": {
- source: "iana",
- extensions: [
- "fits"
- ]
-},
- "image/g3fax": {
- source: "iana",
- extensions: [
- "g3"
- ]
-},
- "image/gif": {
- source: "iana",
- compressible: false,
- extensions: [
- "gif"
- ]
-},
- "image/heic": {
- source: "iana",
- extensions: [
- "heic"
- ]
-},
- "image/heic-sequence": {
- source: "iana",
- extensions: [
- "heics"
- ]
-},
- "image/heif": {
- source: "iana",
- extensions: [
- "heif"
- ]
-},
- "image/heif-sequence": {
- source: "iana",
- extensions: [
- "heifs"
- ]
-},
- "image/hej2k": {
- source: "iana",
- extensions: [
- "hej2"
- ]
-},
- "image/hsj2": {
- source: "iana",
- extensions: [
- "hsj2"
- ]
-},
- "image/ief": {
- source: "iana",
- extensions: [
- "ief"
- ]
-},
- "image/jls": {
- source: "iana",
- extensions: [
- "jls"
- ]
-},
- "image/jp2": {
- source: "iana",
- compressible: false,
- extensions: [
- "jp2",
- "jpg2"
- ]
-},
- "image/jpeg": {
- source: "iana",
- compressible: false,
- extensions: [
- "jpeg",
- "jpg",
- "jpe"
- ]
-},
- "image/jph": {
- source: "iana",
- extensions: [
- "jph"
- ]
-},
- "image/jphc": {
- source: "iana",
- extensions: [
- "jhc"
- ]
-},
- "image/jpm": {
- source: "iana",
- compressible: false,
- extensions: [
- "jpm"
- ]
-},
- "image/jpx": {
- source: "iana",
- compressible: false,
- extensions: [
- "jpx",
- "jpf"
- ]
-},
- "image/jxr": {
- source: "iana",
- extensions: [
- "jxr"
- ]
-},
- "image/jxra": {
- source: "iana",
- extensions: [
- "jxra"
- ]
-},
- "image/jxrs": {
- source: "iana",
- extensions: [
- "jxrs"
- ]
-},
- "image/jxs": {
- source: "iana",
- extensions: [
- "jxs"
- ]
-},
- "image/jxsc": {
- source: "iana",
- extensions: [
- "jxsc"
- ]
-},
- "image/jxsi": {
- source: "iana",
- extensions: [
- "jxsi"
- ]
-},
- "image/jxss": {
- source: "iana",
- extensions: [
- "jxss"
- ]
-},
- "image/ktx": {
- source: "iana",
- extensions: [
- "ktx"
- ]
-},
- "image/ktx2": {
- source: "iana",
- extensions: [
- "ktx2"
- ]
-},
- "image/naplps": {
- source: "iana"
-},
- "image/pjpeg": {
- compressible: false
-},
- "image/png": {
- source: "iana",
- compressible: false,
- extensions: [
- "png"
- ]
-},
- "image/prs.btif": {
- source: "iana",
- extensions: [
- "btif"
- ]
-},
- "image/prs.pti": {
- source: "iana",
- extensions: [
- "pti"
- ]
-},
- "image/pwg-raster": {
- source: "iana"
-},
- "image/sgi": {
- source: "apache",
- extensions: [
- "sgi"
- ]
-},
- "image/svg+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "svg",
- "svgz"
- ]
-},
- "image/t38": {
- source: "iana",
- extensions: [
- "t38"
- ]
-},
- "image/tiff": {
- source: "iana",
- compressible: false,
- extensions: [
- "tif",
- "tiff"
- ]
-},
- "image/tiff-fx": {
- source: "iana",
- extensions: [
- "tfx"
- ]
-},
- "image/vnd.adobe.photoshop": {
- source: "iana",
- compressible: true,
- extensions: [
- "psd"
- ]
-},
- "image/vnd.airzip.accelerator.azv": {
- source: "iana",
- extensions: [
- "azv"
- ]
-},
- "image/vnd.cns.inf2": {
- source: "iana"
-},
- "image/vnd.dece.graphic": {
- source: "iana",
- extensions: [
- "uvi",
- "uvvi",
- "uvg",
- "uvvg"
- ]
-},
- "image/vnd.djvu": {
- source: "iana",
- extensions: [
- "djvu",
- "djv"
- ]
-},
- "image/vnd.dvb.subtitle": {
- source: "iana",
- extensions: [
- "sub"
- ]
-},
- "image/vnd.dwg": {
- source: "iana",
- extensions: [
- "dwg"
- ]
-},
- "image/vnd.dxf": {
- source: "iana",
- extensions: [
- "dxf"
- ]
-},
- "image/vnd.fastbidsheet": {
- source: "iana",
- extensions: [
- "fbs"
- ]
-},
- "image/vnd.fpx": {
- source: "iana",
- extensions: [
- "fpx"
- ]
-},
- "image/vnd.fst": {
- source: "iana",
- extensions: [
- "fst"
- ]
-},
- "image/vnd.fujixerox.edmics-mmr": {
- source: "iana",
- extensions: [
- "mmr"
- ]
-},
- "image/vnd.fujixerox.edmics-rlc": {
- source: "iana",
- extensions: [
- "rlc"
- ]
-},
- "image/vnd.globalgraphics.pgb": {
- source: "iana"
-},
- "image/vnd.microsoft.icon": {
- source: "iana",
- extensions: [
- "ico"
- ]
-},
- "image/vnd.mix": {
- source: "iana"
-},
- "image/vnd.mozilla.apng": {
- source: "iana"
-},
- "image/vnd.ms-dds": {
- extensions: [
- "dds"
- ]
-},
- "image/vnd.ms-modi": {
- source: "iana",
- extensions: [
- "mdi"
- ]
-},
- "image/vnd.ms-photo": {
- source: "apache",
- extensions: [
- "wdp"
- ]
-},
- "image/vnd.net-fpx": {
- source: "iana",
- extensions: [
- "npx"
- ]
-},
- "image/vnd.pco.b16": {
- source: "iana",
- extensions: [
- "b16"
- ]
-},
- "image/vnd.radiance": {
- source: "iana"
-},
- "image/vnd.sealed.png": {
- source: "iana"
-},
- "image/vnd.sealedmedia.softseal.gif": {
- source: "iana"
-},
- "image/vnd.sealedmedia.softseal.jpg": {
- source: "iana"
-},
- "image/vnd.svf": {
- source: "iana"
-},
- "image/vnd.tencent.tap": {
- source: "iana",
- extensions: [
- "tap"
- ]
-},
- "image/vnd.valve.source.texture": {
- source: "iana",
- extensions: [
- "vtf"
- ]
-},
- "image/vnd.wap.wbmp": {
- source: "iana",
- extensions: [
- "wbmp"
- ]
-},
- "image/vnd.xiff": {
- source: "iana",
- extensions: [
- "xif"
- ]
-},
- "image/vnd.zbrush.pcx": {
- source: "iana",
- extensions: [
- "pcx"
- ]
-},
- "image/webp": {
- source: "apache",
- extensions: [
- "webp"
- ]
-},
- "image/wmf": {
- source: "iana",
- extensions: [
- "wmf"
- ]
-},
- "image/x-3ds": {
- source: "apache",
- extensions: [
- "3ds"
- ]
-},
- "image/x-cmu-raster": {
- source: "apache",
- extensions: [
- "ras"
- ]
-},
- "image/x-cmx": {
- source: "apache",
- extensions: [
- "cmx"
- ]
-},
- "image/x-freehand": {
- source: "apache",
- extensions: [
- "fh",
- "fhc",
- "fh4",
- "fh5",
- "fh7"
- ]
-},
- "image/x-icon": {
- source: "apache",
- compressible: true,
- extensions: [
- "ico"
- ]
-},
- "image/x-jng": {
- source: "nginx",
- extensions: [
- "jng"
- ]
-},
- "image/x-mrsid-image": {
- source: "apache",
- extensions: [
- "sid"
- ]
-},
- "image/x-ms-bmp": {
- source: "nginx",
- compressible: true,
- extensions: [
- "bmp"
- ]
-},
- "image/x-pcx": {
- source: "apache",
- extensions: [
- "pcx"
- ]
-},
- "image/x-pict": {
- source: "apache",
- extensions: [
- "pic",
- "pct"
- ]
-},
- "image/x-portable-anymap": {
- source: "apache",
- extensions: [
- "pnm"
- ]
-},
- "image/x-portable-bitmap": {
- source: "apache",
- extensions: [
- "pbm"
- ]
-},
- "image/x-portable-graymap": {
- source: "apache",
- extensions: [
- "pgm"
- ]
-},
- "image/x-portable-pixmap": {
- source: "apache",
- extensions: [
- "ppm"
- ]
-},
- "image/x-rgb": {
- source: "apache",
- extensions: [
- "rgb"
- ]
-},
- "image/x-tga": {
- source: "apache",
- extensions: [
- "tga"
- ]
-},
- "image/x-xbitmap": {
- source: "apache",
- extensions: [
- "xbm"
- ]
-},
- "image/x-xcf": {
- compressible: false
-},
- "image/x-xpixmap": {
- source: "apache",
- extensions: [
- "xpm"
- ]
-},
- "image/x-xwindowdump": {
- source: "apache",
- extensions: [
- "xwd"
- ]
-},
- "message/cpim": {
- source: "iana"
-},
- "message/delivery-status": {
- source: "iana"
-},
- "message/disposition-notification": {
- source: "iana",
- extensions: [
- "disposition-notification"
- ]
-},
- "message/external-body": {
- source: "iana"
-},
- "message/feedback-report": {
- source: "iana"
-},
- "message/global": {
- source: "iana",
- extensions: [
- "u8msg"
- ]
-},
- "message/global-delivery-status": {
- source: "iana",
- extensions: [
- "u8dsn"
- ]
-},
- "message/global-disposition-notification": {
- source: "iana",
- extensions: [
- "u8mdn"
- ]
-},
- "message/global-headers": {
- source: "iana",
- extensions: [
- "u8hdr"
- ]
-},
- "message/http": {
- source: "iana",
- compressible: false
-},
- "message/imdn+xml": {
- source: "iana",
- compressible: true
-},
- "message/news": {
- source: "iana"
-},
- "message/partial": {
- source: "iana",
- compressible: false
-},
- "message/rfc822": {
- source: "iana",
- compressible: true,
- extensions: [
- "eml",
- "mime"
- ]
-},
- "message/s-http": {
- source: "iana"
-},
- "message/sip": {
- source: "iana"
-},
- "message/sipfrag": {
- source: "iana"
-},
- "message/tracking-status": {
- source: "iana"
-},
- "message/vnd.si.simp": {
- source: "iana"
-},
- "message/vnd.wfa.wsc": {
- source: "iana",
- extensions: [
- "wsc"
- ]
-},
- "model/3mf": {
- source: "iana",
- extensions: [
- "3mf"
- ]
-},
- "model/e57": {
- source: "iana"
-},
- "model/gltf+json": {
- source: "iana",
- compressible: true,
- extensions: [
- "gltf"
- ]
-},
- "model/gltf-binary": {
- source: "iana",
- compressible: true,
- extensions: [
- "glb"
- ]
-},
- "model/iges": {
- source: "iana",
- compressible: false,
- extensions: [
- "igs",
- "iges"
- ]
-},
- "model/mesh": {
- source: "iana",
- compressible: false,
- extensions: [
- "msh",
- "mesh",
- "silo"
- ]
-},
- "model/mtl": {
- source: "iana",
- extensions: [
- "mtl"
- ]
-},
- "model/obj": {
- source: "iana",
- extensions: [
- "obj"
- ]
-},
- "model/step+zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "stpz"
- ]
-},
- "model/step-xml+zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "stpxz"
- ]
-},
- "model/stl": {
- source: "iana",
- extensions: [
- "stl"
- ]
-},
- "model/vnd.collada+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "dae"
- ]
-},
- "model/vnd.dwf": {
- source: "iana",
- extensions: [
- "dwf"
- ]
-},
- "model/vnd.flatland.3dml": {
- source: "iana"
-},
- "model/vnd.gdl": {
- source: "iana",
- extensions: [
- "gdl"
- ]
-},
- "model/vnd.gs-gdl": {
- source: "apache"
-},
- "model/vnd.gs.gdl": {
- source: "iana"
-},
- "model/vnd.gtw": {
- source: "iana",
- extensions: [
- "gtw"
- ]
-},
- "model/vnd.moml+xml": {
- source: "iana",
- compressible: true
-},
- "model/vnd.mts": {
- source: "iana",
- extensions: [
- "mts"
- ]
-},
- "model/vnd.opengex": {
- source: "iana",
- extensions: [
- "ogex"
- ]
-},
- "model/vnd.parasolid.transmit.binary": {
- source: "iana",
- extensions: [
- "x_b"
- ]
-},
- "model/vnd.parasolid.transmit.text": {
- source: "iana",
- extensions: [
- "x_t"
- ]
-},
- "model/vnd.pytha.pyox": {
- source: "iana"
-},
- "model/vnd.rosette.annotated-data-model": {
- source: "iana"
-},
- "model/vnd.sap.vds": {
- source: "iana",
- extensions: [
- "vds"
- ]
-},
- "model/vnd.usdz+zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "usdz"
- ]
-},
- "model/vnd.valve.source.compiled-map": {
- source: "iana",
- extensions: [
- "bsp"
- ]
-},
- "model/vnd.vtu": {
- source: "iana",
- extensions: [
- "vtu"
- ]
-},
- "model/vrml": {
- source: "iana",
- compressible: false,
- extensions: [
- "wrl",
- "vrml"
- ]
-},
- "model/x3d+binary": {
- source: "apache",
- compressible: false,
- extensions: [
- "x3db",
- "x3dbz"
- ]
-},
- "model/x3d+fastinfoset": {
- source: "iana",
- extensions: [
- "x3db"
- ]
-},
- "model/x3d+vrml": {
- source: "apache",
- compressible: false,
- extensions: [
- "x3dv",
- "x3dvz"
- ]
-},
- "model/x3d+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "x3d",
- "x3dz"
- ]
-},
- "model/x3d-vrml": {
- source: "iana",
- extensions: [
- "x3dv"
- ]
-},
- "multipart/alternative": {
- source: "iana",
- compressible: false
-},
- "multipart/appledouble": {
- source: "iana"
-},
- "multipart/byteranges": {
- source: "iana"
-},
- "multipart/digest": {
- source: "iana"
-},
- "multipart/encrypted": {
- source: "iana",
- compressible: false
-},
- "multipart/form-data": {
- source: "iana",
- compressible: false
-},
- "multipart/header-set": {
- source: "iana"
-},
- "multipart/mixed": {
- source: "iana"
-},
- "multipart/multilingual": {
- source: "iana"
-},
- "multipart/parallel": {
- source: "iana"
-},
- "multipart/related": {
- source: "iana",
- compressible: false
-},
- "multipart/report": {
- source: "iana"
-},
- "multipart/signed": {
- source: "iana",
- compressible: false
-},
- "multipart/vnd.bint.med-plus": {
- source: "iana"
-},
- "multipart/voice-message": {
- source: "iana"
-},
- "multipart/x-mixed-replace": {
- source: "iana"
-},
- "text/1d-interleaved-parityfec": {
- source: "iana"
-},
- "text/cache-manifest": {
- source: "iana",
- compressible: true,
- extensions: [
- "appcache",
- "manifest"
- ]
-},
- "text/calendar": {
- source: "iana",
- extensions: [
- "ics",
- "ifb"
- ]
-},
- "text/calender": {
- compressible: true
-},
- "text/cmd": {
- compressible: true
-},
- "text/coffeescript": {
- extensions: [
- "coffee",
- "litcoffee"
- ]
-},
- "text/cql": {
- source: "iana"
-},
- "text/cql-expression": {
- source: "iana"
-},
- "text/cql-identifier": {
- source: "iana"
-},
- "text/css": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "css"
- ]
-},
- "text/csv": {
- source: "iana",
- compressible: true,
- extensions: [
- "csv"
- ]
-},
- "text/csv-schema": {
- source: "iana"
-},
- "text/directory": {
- source: "iana"
-},
- "text/dns": {
- source: "iana"
-},
- "text/ecmascript": {
- source: "iana"
-},
- "text/encaprtp": {
- source: "iana"
-},
- "text/enriched": {
- source: "iana"
-},
- "text/fhirpath": {
- source: "iana"
-},
- "text/flexfec": {
- source: "iana"
-},
- "text/fwdred": {
- source: "iana"
-},
- "text/gff3": {
- source: "iana"
-},
- "text/grammar-ref-list": {
- source: "iana"
-},
- "text/html": {
- source: "iana",
- compressible: true,
- extensions: [
- "html",
- "htm",
- "shtml"
- ]
-},
- "text/jade": {
- extensions: [
- "jade"
- ]
-},
- "text/javascript": {
- source: "iana",
- compressible: true
-},
- "text/jcr-cnd": {
- source: "iana"
-},
- "text/jsx": {
- compressible: true,
- extensions: [
- "jsx"
- ]
-},
- "text/less": {
- compressible: true,
- extensions: [
- "less"
- ]
-},
- "text/markdown": {
- source: "iana",
- compressible: true,
- extensions: [
- "markdown",
- "md"
- ]
-},
- "text/mathml": {
- source: "nginx",
- extensions: [
- "mml"
- ]
-},
- "text/mdx": {
- compressible: true,
- extensions: [
- "mdx"
- ]
-},
- "text/mizar": {
- source: "iana"
-},
- "text/n3": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "n3"
- ]
-},
- "text/parameters": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/parityfec": {
- source: "iana"
-},
- "text/plain": {
- source: "iana",
- compressible: true,
- extensions: [
- "txt",
- "text",
- "conf",
- "def",
- "list",
- "log",
- "in",
- "ini"
- ]
-},
- "text/provenance-notation": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/prs.fallenstein.rst": {
- source: "iana"
-},
- "text/prs.lines.tag": {
- source: "iana",
- extensions: [
- "dsc"
- ]
-},
- "text/prs.prop.logic": {
- source: "iana"
-},
- "text/raptorfec": {
- source: "iana"
-},
- "text/red": {
- source: "iana"
-},
- "text/rfc822-headers": {
- source: "iana"
-},
- "text/richtext": {
- source: "iana",
- compressible: true,
- extensions: [
- "rtx"
- ]
-},
- "text/rtf": {
- source: "iana",
- compressible: true,
- extensions: [
- "rtf"
- ]
-},
- "text/rtp-enc-aescm128": {
- source: "iana"
-},
- "text/rtploopback": {
- source: "iana"
-},
- "text/rtx": {
- source: "iana"
-},
- "text/sgml": {
- source: "iana",
- extensions: [
- "sgml",
- "sgm"
- ]
-},
- "text/shaclc": {
- source: "iana"
-},
- "text/shex": {
- source: "iana",
- extensions: [
- "shex"
- ]
-},
- "text/slim": {
- extensions: [
- "slim",
- "slm"
- ]
-},
- "text/spdx": {
- source: "iana",
- extensions: [
- "spdx"
- ]
-},
- "text/strings": {
- source: "iana"
-},
- "text/stylus": {
- extensions: [
- "stylus",
- "styl"
- ]
-},
- "text/t140": {
- source: "iana"
-},
- "text/tab-separated-values": {
- source: "iana",
- compressible: true,
- extensions: [
- "tsv"
- ]
-},
- "text/troff": {
- source: "iana",
- extensions: [
- "t",
- "tr",
- "roff",
- "man",
- "me",
- "ms"
- ]
-},
- "text/turtle": {
- source: "iana",
- charset: "UTF-8",
- extensions: [
- "ttl"
- ]
-},
- "text/ulpfec": {
- source: "iana"
-},
- "text/uri-list": {
- source: "iana",
- compressible: true,
- extensions: [
- "uri",
- "uris",
- "urls"
- ]
-},
- "text/vcard": {
- source: "iana",
- compressible: true,
- extensions: [
- "vcard"
- ]
-},
- "text/vnd.a": {
- source: "iana"
-},
- "text/vnd.abc": {
- source: "iana"
-},
- "text/vnd.ascii-art": {
- source: "iana"
-},
- "text/vnd.curl": {
- source: "iana",
- extensions: [
- "curl"
- ]
-},
- "text/vnd.curl.dcurl": {
- source: "apache",
- extensions: [
- "dcurl"
- ]
-},
- "text/vnd.curl.mcurl": {
- source: "apache",
- extensions: [
- "mcurl"
- ]
-},
- "text/vnd.curl.scurl": {
- source: "apache",
- extensions: [
- "scurl"
- ]
-},
- "text/vnd.debian.copyright": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/vnd.dmclientscript": {
- source: "iana"
-},
- "text/vnd.dvb.subtitle": {
- source: "iana",
- extensions: [
- "sub"
- ]
-},
- "text/vnd.esmertec.theme-descriptor": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/vnd.ficlab.flt": {
- source: "iana"
-},
- "text/vnd.fly": {
- source: "iana",
- extensions: [
- "fly"
- ]
-},
- "text/vnd.fmi.flexstor": {
- source: "iana",
- extensions: [
- "flx"
- ]
-},
- "text/vnd.gml": {
- source: "iana"
-},
- "text/vnd.graphviz": {
- source: "iana",
- extensions: [
- "gv"
- ]
-},
- "text/vnd.hans": {
- source: "iana"
-},
- "text/vnd.hgl": {
- source: "iana"
-},
- "text/vnd.in3d.3dml": {
- source: "iana",
- extensions: [
- "3dml"
- ]
-},
- "text/vnd.in3d.spot": {
- source: "iana",
- extensions: [
- "spot"
- ]
-},
- "text/vnd.iptc.newsml": {
- source: "iana"
-},
- "text/vnd.iptc.nitf": {
- source: "iana"
-},
- "text/vnd.latex-z": {
- source: "iana"
-},
- "text/vnd.motorola.reflex": {
- source: "iana"
-},
- "text/vnd.ms-mediapackage": {
- source: "iana"
-},
- "text/vnd.net2phone.commcenter.command": {
- source: "iana"
-},
- "text/vnd.radisys.msml-basic-layout": {
- source: "iana"
-},
- "text/vnd.senx.warpscript": {
- source: "iana"
-},
- "text/vnd.si.uricatalogue": {
- source: "iana"
-},
- "text/vnd.sosi": {
- source: "iana"
-},
- "text/vnd.sun.j2me.app-descriptor": {
- source: "iana",
- charset: "UTF-8",
- extensions: [
- "jad"
- ]
-},
- "text/vnd.trolltech.linguist": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/vnd.wap.si": {
- source: "iana"
-},
- "text/vnd.wap.sl": {
- source: "iana"
-},
- "text/vnd.wap.wml": {
- source: "iana",
- extensions: [
- "wml"
- ]
-},
- "text/vnd.wap.wmlscript": {
- source: "iana",
- extensions: [
- "wmls"
- ]
-},
- "text/vtt": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "vtt"
- ]
-},
- "text/x-asm": {
- source: "apache",
- extensions: [
- "s",
- "asm"
- ]
-},
- "text/x-c": {
- source: "apache",
- extensions: [
- "c",
- "cc",
- "cxx",
- "cpp",
- "h",
- "hh",
- "dic"
- ]
-},
- "text/x-component": {
- source: "nginx",
- extensions: [
- "htc"
- ]
-},
- "text/x-fortran": {
- source: "apache",
- extensions: [
- "f",
- "for",
- "f77",
- "f90"
- ]
-},
- "text/x-gwt-rpc": {
- compressible: true
-},
- "text/x-handlebars-template": {
- extensions: [
- "hbs"
- ]
-},
- "text/x-java-source": {
- source: "apache",
- extensions: [
- "java"
- ]
-},
- "text/x-jquery-tmpl": {
- compressible: true
-},
- "text/x-lua": {
- extensions: [
- "lua"
- ]
-},
- "text/x-markdown": {
- compressible: true,
- extensions: [
- "mkd"
- ]
-},
- "text/x-nfo": {
- source: "apache",
- extensions: [
- "nfo"
- ]
-},
- "text/x-opml": {
- source: "apache",
- extensions: [
- "opml"
- ]
-},
- "text/x-org": {
- compressible: true,
- extensions: [
- "org"
- ]
-},
- "text/x-pascal": {
- source: "apache",
- extensions: [
- "p",
- "pas"
- ]
-},
- "text/x-processing": {
- compressible: true,
- extensions: [
- "pde"
- ]
-},
- "text/x-sass": {
- extensions: [
- "sass"
- ]
-},
- "text/x-scss": {
- extensions: [
- "scss"
- ]
-},
- "text/x-setext": {
- source: "apache",
- extensions: [
- "etx"
- ]
-},
- "text/x-sfv": {
- source: "apache",
- extensions: [
- "sfv"
- ]
-},
- "text/x-suse-ymp": {
- compressible: true,
- extensions: [
- "ymp"
- ]
-},
- "text/x-uuencode": {
- source: "apache",
- extensions: [
- "uu"
- ]
-},
- "text/x-vcalendar": {
- source: "apache",
- extensions: [
- "vcs"
- ]
-},
- "text/x-vcard": {
- source: "apache",
- extensions: [
- "vcf"
- ]
-},
- "text/xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xml"
- ]
-},
- "text/xml-external-parsed-entity": {
- source: "iana"
-},
- "text/yaml": {
- compressible: true,
- extensions: [
- "yaml",
- "yml"
- ]
-},
- "video/1d-interleaved-parityfec": {
- source: "iana"
-},
- "video/3gpp": {
- source: "iana",
- extensions: [
- "3gp",
- "3gpp"
- ]
-},
- "video/3gpp-tt": {
- source: "iana"
-},
- "video/3gpp2": {
- source: "iana",
- extensions: [
- "3g2"
- ]
-},
- "video/av1": {
- source: "iana"
-},
- "video/bmpeg": {
- source: "iana"
-},
- "video/bt656": {
- source: "iana"
-},
- "video/celb": {
- source: "iana"
-},
- "video/dv": {
- source: "iana"
-},
- "video/encaprtp": {
- source: "iana"
-},
- "video/ffv1": {
- source: "iana"
-},
- "video/flexfec": {
- source: "iana"
-},
- "video/h261": {
- source: "iana",
- extensions: [
- "h261"
- ]
-},
- "video/h263": {
- source: "iana",
- extensions: [
- "h263"
- ]
-},
- "video/h263-1998": {
- source: "iana"
-},
- "video/h263-2000": {
- source: "iana"
-},
- "video/h264": {
- source: "iana",
- extensions: [
- "h264"
- ]
-},
- "video/h264-rcdo": {
- source: "iana"
-},
- "video/h264-svc": {
- source: "iana"
-},
- "video/h265": {
- source: "iana"
-},
- "video/iso.segment": {
- source: "iana",
- extensions: [
- "m4s"
- ]
-},
- "video/jpeg": {
- source: "iana",
- extensions: [
- "jpgv"
- ]
-},
- "video/jpeg2000": {
- source: "iana"
-},
- "video/jpm": {
- source: "apache",
- extensions: [
- "jpm",
- "jpgm"
- ]
-},
- "video/mj2": {
- source: "iana",
- extensions: [
- "mj2",
- "mjp2"
- ]
-},
- "video/mp1s": {
- source: "iana"
-},
- "video/mp2p": {
- source: "iana"
-},
- "video/mp2t": {
- source: "iana",
- extensions: [
- "ts"
- ]
-},
- "video/mp4": {
- source: "iana",
- compressible: false,
- extensions: [
- "mp4",
- "mp4v",
- "mpg4"
- ]
-},
- "video/mp4v-es": {
- source: "iana"
-},
- "video/mpeg": {
- source: "iana",
- compressible: false,
- extensions: [
- "mpeg",
- "mpg",
- "mpe",
- "m1v",
- "m2v"
- ]
-},
- "video/mpeg4-generic": {
- source: "iana"
-},
- "video/mpv": {
- source: "iana"
-},
- "video/nv": {
- source: "iana"
-},
- "video/ogg": {
- source: "iana",
- compressible: false,
- extensions: [
- "ogv"
- ]
-},
- "video/parityfec": {
- source: "iana"
-},
- "video/pointer": {
- source: "iana"
-},
- "video/quicktime": {
- source: "iana",
- compressible: false,
- extensions: [
- "qt",
- "mov"
- ]
-},
- "video/raptorfec": {
- source: "iana"
-},
- "video/raw": {
- source: "iana"
-},
- "video/rtp-enc-aescm128": {
- source: "iana"
-},
- "video/rtploopback": {
- source: "iana"
-},
- "video/rtx": {
- source: "iana"
-},
- "video/scip": {
- source: "iana"
-},
- "video/smpte291": {
- source: "iana"
-},
- "video/smpte292m": {
- source: "iana"
-},
- "video/ulpfec": {
- source: "iana"
-},
- "video/vc1": {
- source: "iana"
-},
- "video/vc2": {
- source: "iana"
-},
- "video/vnd.cctv": {
- source: "iana"
-},
- "video/vnd.dece.hd": {
- source: "iana",
- extensions: [
- "uvh",
- "uvvh"
- ]
-},
- "video/vnd.dece.mobile": {
- source: "iana",
- extensions: [
- "uvm",
- "uvvm"
- ]
-},
- "video/vnd.dece.mp4": {
- source: "iana"
-},
- "video/vnd.dece.pd": {
- source: "iana",
- extensions: [
- "uvp",
- "uvvp"
- ]
-},
- "video/vnd.dece.sd": {
- source: "iana",
- extensions: [
- "uvs",
- "uvvs"
- ]
-},
- "video/vnd.dece.video": {
- source: "iana",
- extensions: [
- "uvv",
- "uvvv"
- ]
-},
- "video/vnd.directv.mpeg": {
- source: "iana"
-},
- "video/vnd.directv.mpeg-tts": {
- source: "iana"
-},
- "video/vnd.dlna.mpeg-tts": {
- source: "iana"
-},
- "video/vnd.dvb.file": {
- source: "iana",
- extensions: [
- "dvb"
- ]
-},
- "video/vnd.fvt": {
- source: "iana",
- extensions: [
- "fvt"
- ]
-},
- "video/vnd.hns.video": {
- source: "iana"
-},
- "video/vnd.iptvforum.1dparityfec-1010": {
- source: "iana"
-},
- "video/vnd.iptvforum.1dparityfec-2005": {
- source: "iana"
-},
- "video/vnd.iptvforum.2dparityfec-1010": {
- source: "iana"
-},
- "video/vnd.iptvforum.2dparityfec-2005": {
- source: "iana"
-},
- "video/vnd.iptvforum.ttsavc": {
- source: "iana"
-},
- "video/vnd.iptvforum.ttsmpeg2": {
- source: "iana"
-},
- "video/vnd.motorola.video": {
- source: "iana"
-},
- "video/vnd.motorola.videop": {
- source: "iana"
-},
- "video/vnd.mpegurl": {
- source: "iana",
- extensions: [
- "mxu",
- "m4u"
- ]
-},
- "video/vnd.ms-playready.media.pyv": {
- source: "iana",
- extensions: [
- "pyv"
- ]
-},
- "video/vnd.nokia.interleaved-multimedia": {
- source: "iana"
-},
- "video/vnd.nokia.mp4vr": {
- source: "iana"
-},
- "video/vnd.nokia.videovoip": {
- source: "iana"
-},
- "video/vnd.objectvideo": {
- source: "iana"
-},
- "video/vnd.radgamettools.bink": {
- source: "iana"
-},
- "video/vnd.radgamettools.smacker": {
- source: "iana"
-},
- "video/vnd.sealed.mpeg1": {
- source: "iana"
-},
- "video/vnd.sealed.mpeg4": {
- source: "iana"
-},
- "video/vnd.sealed.swf": {
- source: "iana"
-},
- "video/vnd.sealedmedia.softseal.mov": {
- source: "iana"
-},
- "video/vnd.uvvu.mp4": {
- source: "iana",
- extensions: [
- "uvu",
- "uvvu"
- ]
-},
- "video/vnd.vivo": {
- source: "iana",
- extensions: [
- "viv"
- ]
-},
- "video/vnd.youtube.yt": {
- source: "iana"
-},
- "video/vp8": {
- source: "iana"
-},
- "video/vp9": {
- source: "iana"
-},
- "video/webm": {
- source: "apache",
- compressible: false,
- extensions: [
- "webm"
- ]
-},
- "video/x-f4v": {
- source: "apache",
- extensions: [
- "f4v"
- ]
-},
- "video/x-fli": {
- source: "apache",
- extensions: [
- "fli"
- ]
-},
- "video/x-flv": {
- source: "apache",
- compressible: false,
- extensions: [
- "flv"
- ]
-},
- "video/x-m4v": {
- source: "apache",
- extensions: [
- "m4v"
- ]
-},
- "video/x-matroska": {
- source: "apache",
- compressible: false,
- extensions: [
- "mkv",
- "mk3d",
- "mks"
- ]
-},
- "video/x-mng": {
- source: "apache",
- extensions: [
- "mng"
- ]
-},
- "video/x-ms-asf": {
- source: "apache",
- extensions: [
- "asf",
- "asx"
- ]
-},
- "video/x-ms-vob": {
- source: "apache",
- extensions: [
- "vob"
- ]
-},
- "video/x-ms-wm": {
- source: "apache",
- extensions: [
- "wm"
- ]
-},
- "video/x-ms-wmv": {
- source: "apache",
- compressible: false,
- extensions: [
- "wmv"
- ]
-},
- "video/x-ms-wmx": {
- source: "apache",
- extensions: [
- "wmx"
- ]
-},
- "video/x-ms-wvx": {
- source: "apache",
- extensions: [
- "wvx"
- ]
-},
- "video/x-msvideo": {
- source: "apache",
- extensions: [
- "avi"
- ]
-},
- "video/x-sgi-movie": {
- source: "apache",
- extensions: [
- "movie"
- ]
-},
- "video/x-smv": {
- source: "apache",
- extensions: [
- "smv"
- ]
-},
- "x-conference/x-cooltalk": {
- source: "apache",
- extensions: [
- "ice"
- ]
-},
- "x-shader/x-fragment": {
- compressible: true
-},
- "x-shader/x-vertex": {
- compressible: true
-}
-};
-
-/*!
- * mime-db
- * Copyright(c) 2014 Jonathan Ong
- * MIT Licensed
- */
-
-/**
- * Module exports.
- */
-
-var mimeDb$1 = require$$0$1;
-
-/*!
- * mime-types
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-(function (exports) {
-
-/**
- * Module dependencies.
- * @private
- */
-
-var db = mimeDb$1;
-var extname = path__default.extname;
-
-/**
- * Module variables.
- * @private
- */
-
-var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
-var TEXT_TYPE_REGEXP = /^text\//i;
-
-/**
- * Module exports.
- * @public
- */
-
-exports.charset = charset;
-exports.charsets = { lookup: charset };
-exports.contentType = contentType;
-exports.extension = extension;
-exports.extensions = Object.create(null);
-exports.lookup = lookup;
-exports.types = Object.create(null);
-
-// Populate the extensions/types maps
-populateMaps(exports.extensions, exports.types);
-
-/**
- * Get the default charset for a MIME type.
- *
- * @param {string} type
- * @return {boolean|string}
- */
-
-function charset (type) {
- if (!type || typeof type !== 'string') {
- return false
- }
-
- // TODO: use media-typer
- var match = EXTRACT_TYPE_REGEXP.exec(type);
- var mime = match && db[match[1].toLowerCase()];
-
- if (mime && mime.charset) {
- return mime.charset
- }
-
- // default text/* to utf-8
- if (match && TEXT_TYPE_REGEXP.test(match[1])) {
- return 'UTF-8'
- }
-
- return false
-}
-
-/**
- * Create a full Content-Type header given a MIME type or extension.
- *
- * @param {string} str
- * @return {boolean|string}
- */
-
-function contentType (str) {
- // TODO: should this even be in this module?
- if (!str || typeof str !== 'string') {
- return false
- }
-
- var mime = str.indexOf('/') === -1
- ? exports.lookup(str)
- : str;
-
- if (!mime) {
- return false
- }
-
- // TODO: use content-type or other module
- if (mime.indexOf('charset') === -1) {
- var charset = exports.charset(mime);
- if (charset) mime += '; charset=' + charset.toLowerCase();
- }
-
- return mime
-}
-
-/**
- * Get the default extension for a MIME type.
- *
- * @param {string} type
- * @return {boolean|string}
- */
-
-function extension (type) {
- if (!type || typeof type !== 'string') {
- return false
- }
-
- // TODO: use media-typer
- var match = EXTRACT_TYPE_REGEXP.exec(type);
-
- // get extensions
- var exts = match && exports.extensions[match[1].toLowerCase()];
-
- if (!exts || !exts.length) {
- return false
- }
-
- return exts[0]
-}
-
-/**
- * Lookup the MIME type for a file path/extension.
- *
- * @param {string} path
- * @return {boolean|string}
- */
-
-function lookup (path) {
- if (!path || typeof path !== 'string') {
- return false
- }
-
- // get the extension ("ext" or ".ext" or full path)
- var extension = extname('x.' + path)
- .toLowerCase()
- .substr(1);
-
- if (!extension) {
- return false
- }
-
- return exports.types[extension] || false
-}
-
-/**
- * Populate the extensions and types maps.
- * @private
- */
-
-function populateMaps (extensions, types) {
- // source preference (least -> most)
- var preference = ['nginx', 'apache', undefined, 'iana'];
-
- Object.keys(db).forEach(function forEachMimeType (type) {
- var mime = db[type];
- var exts = mime.extensions;
-
- if (!exts || !exts.length) {
- return
- }
-
- // mime -> extensions
- extensions[type] = exts;
-
- // extension -> mime
- for (var i = 0; i < exts.length; i++) {
- var extension = exts[i];
-
- if (types[extension]) {
- var from = preference.indexOf(db[types[extension]].source);
- var to = preference.indexOf(mime.source);
-
- if (types[extension] !== 'application/octet-stream' &&
- (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
- // skip the remapping
- continue
- }
- }
-
- // set the extension -> mime
- types[extension] = type;
- }
- });
-}
-}(mimeTypes));
-
-/*!
- * accepts
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- * @private
- */
-
-var Negotiator = negotiator.exports;
-var mime = mimeTypes;
-
-/**
- * Module exports.
- * @public
- */
-
-var accepts$1 = Accepts;
-
-/**
- * Create a new Accepts object for the given req.
- *
- * @param {object} req
- * @public
- */
-
-function Accepts (req) {
- if (!(this instanceof Accepts)) {
- return new Accepts(req)
- }
-
- this.headers = req.headers;
- this.negotiator = new Negotiator(req);
-}
-
-/**
- * Check if the given `type(s)` is acceptable, returning
- * the best match when true, otherwise `undefined`, in which
- * case you should respond with 406 "Not Acceptable".
- *
- * The `type` value may be a single mime type string
- * such as "application/json", the extension name
- * such as "json" or an array `["json", "html", "text/plain"]`. When a list
- * or array is given the _best_ match, if any is returned.
- *
- * Examples:
- *
- * // Accept: text/html
- * this.types('html');
- * // => "html"
- *
- * // Accept: text/*, application/json
- * this.types('html');
- * // => "html"
- * this.types('text/html');
- * // => "text/html"
- * this.types('json', 'text');
- * // => "json"
- * this.types('application/json');
- * // => "application/json"
- *
- * // Accept: text/*, application/json
- * this.types('image/png');
- * this.types('png');
- * // => undefined
- *
- * // Accept: text/*;q=.5, application/json
- * this.types(['html', 'json']);
- * this.types('html', 'json');
- * // => "json"
- *
- * @param {String|Array} types...
- * @return {String|Array|Boolean}
- * @public
- */
-
-Accepts.prototype.type =
-Accepts.prototype.types = function (types_) {
- var types = types_;
-
- // support flattened arguments
- if (types && !Array.isArray(types)) {
- types = new Array(arguments.length);
- for (var i = 0; i < types.length; i++) {
- types[i] = arguments[i];
- }
- }
-
- // no types, return all requested types
- if (!types || types.length === 0) {
- return this.negotiator.mediaTypes()
- }
-
- // no accept header, return first given type
- if (!this.headers.accept) {
- return types[0]
- }
-
- var mimes = types.map(extToMime);
- var accepts = this.negotiator.mediaTypes(mimes.filter(validMime));
- var first = accepts[0];
-
- return first
- ? types[mimes.indexOf(first)]
- : false
-};
-
-/**
- * Return accepted encodings or best fit based on `encodings`.
- *
- * Given `Accept-Encoding: gzip, deflate`
- * an array sorted by quality is returned:
- *
- * ['gzip', 'deflate']
- *
- * @param {String|Array} encodings...
- * @return {String|Array}
- * @public
- */
-
-Accepts.prototype.encoding =
-Accepts.prototype.encodings = function (encodings_) {
- var encodings = encodings_;
-
- // support flattened arguments
- if (encodings && !Array.isArray(encodings)) {
- encodings = new Array(arguments.length);
- for (var i = 0; i < encodings.length; i++) {
- encodings[i] = arguments[i];
- }
- }
-
- // no encodings, return all requested encodings
- if (!encodings || encodings.length === 0) {
- return this.negotiator.encodings()
- }
-
- return this.negotiator.encodings(encodings)[0] || false
-};
-
-/**
- * Return accepted charsets or best fit based on `charsets`.
- *
- * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
- * an array sorted by quality is returned:
- *
- * ['utf-8', 'utf-7', 'iso-8859-1']
- *
- * @param {String|Array} charsets...
- * @return {String|Array}
- * @public
- */
-
-Accepts.prototype.charset =
-Accepts.prototype.charsets = function (charsets_) {
- var charsets = charsets_;
-
- // support flattened arguments
- if (charsets && !Array.isArray(charsets)) {
- charsets = new Array(arguments.length);
- for (var i = 0; i < charsets.length; i++) {
- charsets[i] = arguments[i];
- }
- }
-
- // no charsets, return all requested charsets
- if (!charsets || charsets.length === 0) {
- return this.negotiator.charsets()
- }
-
- return this.negotiator.charsets(charsets)[0] || false
-};
-
-/**
- * Return accepted languages or best fit based on `langs`.
- *
- * Given `Accept-Language: en;q=0.8, es, pt`
- * an array sorted by quality is returned:
- *
- * ['es', 'pt', 'en']
- *
- * @param {String|Array} langs...
- * @return {Array|String}
- * @public
- */
-
-Accepts.prototype.lang =
-Accepts.prototype.langs =
-Accepts.prototype.language =
-Accepts.prototype.languages = function (languages_) {
- var languages = languages_;
-
- // support flattened arguments
- if (languages && !Array.isArray(languages)) {
- languages = new Array(arguments.length);
- for (var i = 0; i < languages.length; i++) {
- languages[i] = arguments[i];
- }
- }
-
- // no languages, return all requested languages
- if (!languages || languages.length === 0) {
- return this.negotiator.languages()
- }
-
- return this.negotiator.languages(languages)[0] || false
-};
-
-/**
- * Convert extnames to mime.
- *
- * @param {String} type
- * @return {String}
- * @private
- */
-
-function extToMime (type) {
- return type.indexOf('/') === -1
- ? mime.lookup(type)
- : type
-}
-
-/**
- * Check if mime is valid.
- *
- * @param {String} type
- * @return {String}
- * @private
- */
-
-function validMime (type) {
- return typeof type === 'string'
-}
-
-var bytes$2 = {exports: {}};
-
-/*!
- * bytes
- * Copyright(c) 2012-2014 TJ Holowaychuk
- * Copyright(c) 2015 Jed Watson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-bytes$2.exports = bytes$1;
-bytes$2.exports.format = format;
-bytes$2.exports.parse = parse;
-
-/**
- * Module variables.
- * @private
- */
-
-var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g;
-
-var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/;
-
-var map = {
- b: 1,
- kb: 1 << 10,
- mb: 1 << 20,
- gb: 1 << 30,
- tb: ((1 << 30) * 1024)
-};
-
-var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i;
-
-/**
- * Convert the given value in bytes into a string or parse to string to an integer in bytes.
- *
- * @param {string|number} value
- * @param {{
- * case: [string],
- * decimalPlaces: [number]
- * fixedDecimals: [boolean]
- * thousandsSeparator: [string]
- * unitSeparator: [string]
- * }} [options] bytes options.
- *
- * @returns {string|number|null}
- */
-
-function bytes$1(value, options) {
- if (typeof value === 'string') {
- return parse(value);
- }
-
- if (typeof value === 'number') {
- return format(value, options);
- }
-
- return null;
-}
-
-/**
- * Format the given value in bytes into a string.
- *
- * If the value is negative, it is kept as such. If it is a float,
- * it is rounded.
- *
- * @param {number} value
- * @param {object} [options]
- * @param {number} [options.decimalPlaces=2]
- * @param {number} [options.fixedDecimals=false]
- * @param {string} [options.thousandsSeparator=]
- * @param {string} [options.unit=]
- * @param {string} [options.unitSeparator=]
- *
- * @returns {string|null}
- * @public
- */
-
-function format(value, options) {
- if (!Number.isFinite(value)) {
- return null;
- }
-
- var mag = Math.abs(value);
- var thousandsSeparator = (options && options.thousandsSeparator) || '';
- var unitSeparator = (options && options.unitSeparator) || '';
- var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;
- var fixedDecimals = Boolean(options && options.fixedDecimals);
- var unit = (options && options.unit) || '';
-
- if (!unit || !map[unit.toLowerCase()]) {
- if (mag >= map.tb) {
- unit = 'TB';
- } else if (mag >= map.gb) {
- unit = 'GB';
- } else if (mag >= map.mb) {
- unit = 'MB';
- } else if (mag >= map.kb) {
- unit = 'KB';
- } else {
- unit = 'B';
- }
- }
-
- var val = value / map[unit.toLowerCase()];
- var str = val.toFixed(decimalPlaces);
-
- if (!fixedDecimals) {
- str = str.replace(formatDecimalsRegExp, '$1');
- }
-
- if (thousandsSeparator) {
- str = str.replace(formatThousandsRegExp, thousandsSeparator);
- }
-
- return str + unitSeparator + unit;
-}
-
-/**
- * Parse the string value into an integer in bytes.
- *
- * If no unit is given, it is assumed the value is in bytes.
- *
- * @param {number|string} val
- *
- * @returns {number|null}
- * @public
- */
-
-function parse(val) {
- if (typeof val === 'number' && !isNaN(val)) {
- return val;
- }
-
- if (typeof val !== 'string') {
- return null;
- }
-
- // Test if the string passed is valid
- var results = parseRegExp.exec(val);
- var floatValue;
- var unit = 'b';
-
- if (!results) {
- // Nothing could be extracted from the given string
- floatValue = parseInt(val, 10);
- unit = 'b';
- } else {
- // Retrieve the value and the unit
- floatValue = parseFloat(results[1]);
- unit = results[4].toLowerCase();
- }
-
- return Math.floor(map[unit] * floatValue);
-}
-
-var require$$0 = {
- "application/1d-interleaved-parityfec": {
- source: "iana"
-},
- "application/3gpdash-qoe-report+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/3gpp-ims+xml": {
- source: "iana",
- compressible: true
-},
- "application/3gpphal+json": {
- source: "iana",
- compressible: true
-},
- "application/3gpphalforms+json": {
- source: "iana",
- compressible: true
-},
- "application/a2l": {
- source: "iana"
-},
- "application/ace+cbor": {
- source: "iana"
-},
- "application/activemessage": {
- source: "iana"
-},
- "application/activity+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-costmap+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-costmapfilter+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-directory+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-endpointcost+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-endpointcostparams+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-endpointprop+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-endpointpropparams+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-error+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-networkmap+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-networkmapfilter+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-updatestreamcontrol+json": {
- source: "iana",
- compressible: true
-},
- "application/alto-updatestreamparams+json": {
- source: "iana",
- compressible: true
-},
- "application/aml": {
- source: "iana"
-},
- "application/andrew-inset": {
- source: "iana",
- extensions: [
- "ez"
- ]
-},
- "application/applefile": {
- source: "iana"
-},
- "application/applixware": {
- source: "apache",
- extensions: [
- "aw"
- ]
-},
- "application/at+jwt": {
- source: "iana"
-},
- "application/atf": {
- source: "iana"
-},
- "application/atfx": {
- source: "iana"
-},
- "application/atom+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "atom"
- ]
-},
- "application/atomcat+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "atomcat"
- ]
-},
- "application/atomdeleted+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "atomdeleted"
- ]
-},
- "application/atomicmail": {
- source: "iana"
-},
- "application/atomsvc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "atomsvc"
- ]
-},
- "application/atsc-dwd+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "dwd"
- ]
-},
- "application/atsc-dynamic-event-message": {
- source: "iana"
-},
- "application/atsc-held+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "held"
- ]
-},
- "application/atsc-rdt+json": {
- source: "iana",
- compressible: true
-},
- "application/atsc-rsat+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rsat"
- ]
-},
- "application/atxml": {
- source: "iana"
-},
- "application/auth-policy+xml": {
- source: "iana",
- compressible: true
-},
- "application/bacnet-xdd+zip": {
- source: "iana",
- compressible: false
-},
- "application/batch-smtp": {
- source: "iana"
-},
- "application/bdoc": {
- compressible: false,
- extensions: [
- "bdoc"
- ]
-},
- "application/beep+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/calendar+json": {
- source: "iana",
- compressible: true
-},
- "application/calendar+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xcs"
- ]
-},
- "application/call-completion": {
- source: "iana"
-},
- "application/cals-1840": {
- source: "iana"
-},
- "application/captive+json": {
- source: "iana",
- compressible: true
-},
- "application/cbor": {
- source: "iana"
-},
- "application/cbor-seq": {
- source: "iana"
-},
- "application/cccex": {
- source: "iana"
-},
- "application/ccmp+xml": {
- source: "iana",
- compressible: true
-},
- "application/ccxml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ccxml"
- ]
-},
- "application/cdfx+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "cdfx"
- ]
-},
- "application/cdmi-capability": {
- source: "iana",
- extensions: [
- "cdmia"
- ]
-},
- "application/cdmi-container": {
- source: "iana",
- extensions: [
- "cdmic"
- ]
-},
- "application/cdmi-domain": {
- source: "iana",
- extensions: [
- "cdmid"
- ]
-},
- "application/cdmi-object": {
- source: "iana",
- extensions: [
- "cdmio"
- ]
-},
- "application/cdmi-queue": {
- source: "iana",
- extensions: [
- "cdmiq"
- ]
-},
- "application/cdni": {
- source: "iana"
-},
- "application/cea": {
- source: "iana"
-},
- "application/cea-2018+xml": {
- source: "iana",
- compressible: true
-},
- "application/cellml+xml": {
- source: "iana",
- compressible: true
-},
- "application/cfw": {
- source: "iana"
-},
- "application/clr": {
- source: "iana"
-},
- "application/clue+xml": {
- source: "iana",
- compressible: true
-},
- "application/clue_info+xml": {
- source: "iana",
- compressible: true
-},
- "application/cms": {
- source: "iana"
-},
- "application/cnrp+xml": {
- source: "iana",
- compressible: true
-},
- "application/coap-group+json": {
- source: "iana",
- compressible: true
-},
- "application/coap-payload": {
- source: "iana"
-},
- "application/commonground": {
- source: "iana"
-},
- "application/conference-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/cose": {
- source: "iana"
-},
- "application/cose-key": {
- source: "iana"
-},
- "application/cose-key-set": {
- source: "iana"
-},
- "application/cpl+xml": {
- source: "iana",
- compressible: true
-},
- "application/csrattrs": {
- source: "iana"
-},
- "application/csta+xml": {
- source: "iana",
- compressible: true
-},
- "application/cstadata+xml": {
- source: "iana",
- compressible: true
-},
- "application/csvm+json": {
- source: "iana",
- compressible: true
-},
- "application/cu-seeme": {
- source: "apache",
- extensions: [
- "cu"
- ]
-},
- "application/cwt": {
- source: "iana"
-},
- "application/cybercash": {
- source: "iana"
-},
- "application/dart": {
- compressible: true
-},
- "application/dash+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mpd"
- ]
-},
- "application/dashdelta": {
- source: "iana"
-},
- "application/davmount+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "davmount"
- ]
-},
- "application/dca-rft": {
- source: "iana"
-},
- "application/dcd": {
- source: "iana"
-},
- "application/dec-dx": {
- source: "iana"
-},
- "application/dialog-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/dicom": {
- source: "iana"
-},
- "application/dicom+json": {
- source: "iana",
- compressible: true
-},
- "application/dicom+xml": {
- source: "iana",
- compressible: true
-},
- "application/dii": {
- source: "iana"
-},
- "application/dit": {
- source: "iana"
-},
- "application/dns": {
- source: "iana"
-},
- "application/dns+json": {
- source: "iana",
- compressible: true
-},
- "application/dns-message": {
- source: "iana"
-},
- "application/docbook+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "dbk"
- ]
-},
- "application/dots+cbor": {
- source: "iana"
-},
- "application/dskpp+xml": {
- source: "iana",
- compressible: true
-},
- "application/dssc+der": {
- source: "iana",
- extensions: [
- "dssc"
- ]
-},
- "application/dssc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xdssc"
- ]
-},
- "application/dvcs": {
- source: "iana"
-},
- "application/ecmascript": {
- source: "iana",
- compressible: true,
- extensions: [
- "es",
- "ecma"
- ]
-},
- "application/edi-consent": {
- source: "iana"
-},
- "application/edi-x12": {
- source: "iana",
- compressible: false
-},
- "application/edifact": {
- source: "iana",
- compressible: false
-},
- "application/efi": {
- source: "iana"
-},
- "application/elm+json": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/elm+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.cap+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/emergencycalldata.comment+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.control+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.deviceinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.ecall.msd": {
- source: "iana"
-},
- "application/emergencycalldata.providerinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.serviceinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.subscriberinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/emergencycalldata.veds+xml": {
- source: "iana",
- compressible: true
-},
- "application/emma+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "emma"
- ]
-},
- "application/emotionml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "emotionml"
- ]
-},
- "application/encaprtp": {
- source: "iana"
-},
- "application/epp+xml": {
- source: "iana",
- compressible: true
-},
- "application/epub+zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "epub"
- ]
-},
- "application/eshop": {
- source: "iana"
-},
- "application/exi": {
- source: "iana",
- extensions: [
- "exi"
- ]
-},
- "application/expect-ct-report+json": {
- source: "iana",
- compressible: true
-},
- "application/express": {
- source: "iana",
- extensions: [
- "exp"
- ]
-},
- "application/fastinfoset": {
- source: "iana"
-},
- "application/fastsoap": {
- source: "iana"
-},
- "application/fdt+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "fdt"
- ]
-},
- "application/fhir+json": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/fhir+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/fido.trusted-apps+json": {
- compressible: true
-},
- "application/fits": {
- source: "iana"
-},
- "application/flexfec": {
- source: "iana"
-},
- "application/font-sfnt": {
- source: "iana"
-},
- "application/font-tdpfr": {
- source: "iana",
- extensions: [
- "pfr"
- ]
-},
- "application/font-woff": {
- source: "iana",
- compressible: false
-},
- "application/framework-attributes+xml": {
- source: "iana",
- compressible: true
-},
- "application/geo+json": {
- source: "iana",
- compressible: true,
- extensions: [
- "geojson"
- ]
-},
- "application/geo+json-seq": {
- source: "iana"
-},
- "application/geopackage+sqlite3": {
- source: "iana"
-},
- "application/geoxacml+xml": {
- source: "iana",
- compressible: true
-},
- "application/gltf-buffer": {
- source: "iana"
-},
- "application/gml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "gml"
- ]
-},
- "application/gpx+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "gpx"
- ]
-},
- "application/gxf": {
- source: "apache",
- extensions: [
- "gxf"
- ]
-},
- "application/gzip": {
- source: "iana",
- compressible: false,
- extensions: [
- "gz"
- ]
-},
- "application/h224": {
- source: "iana"
-},
- "application/held+xml": {
- source: "iana",
- compressible: true
-},
- "application/hjson": {
- extensions: [
- "hjson"
- ]
-},
- "application/http": {
- source: "iana"
-},
- "application/hyperstudio": {
- source: "iana",
- extensions: [
- "stk"
- ]
-},
- "application/ibe-key-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/ibe-pkg-reply+xml": {
- source: "iana",
- compressible: true
-},
- "application/ibe-pp-data": {
- source: "iana"
-},
- "application/iges": {
- source: "iana"
-},
- "application/im-iscomposing+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/index": {
- source: "iana"
-},
- "application/index.cmd": {
- source: "iana"
-},
- "application/index.obj": {
- source: "iana"
-},
- "application/index.response": {
- source: "iana"
-},
- "application/index.vnd": {
- source: "iana"
-},
- "application/inkml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ink",
- "inkml"
- ]
-},
- "application/iotp": {
- source: "iana"
-},
- "application/ipfix": {
- source: "iana",
- extensions: [
- "ipfix"
- ]
-},
- "application/ipp": {
- source: "iana"
-},
- "application/isup": {
- source: "iana"
-},
- "application/its+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "its"
- ]
-},
- "application/java-archive": {
- source: "apache",
- compressible: false,
- extensions: [
- "jar",
- "war",
- "ear"
- ]
-},
- "application/java-serialized-object": {
- source: "apache",
- compressible: false,
- extensions: [
- "ser"
- ]
-},
- "application/java-vm": {
- source: "apache",
- compressible: false,
- extensions: [
- "class"
- ]
-},
- "application/javascript": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "js",
- "mjs"
- ]
-},
- "application/jf2feed+json": {
- source: "iana",
- compressible: true
-},
- "application/jose": {
- source: "iana"
-},
- "application/jose+json": {
- source: "iana",
- compressible: true
-},
- "application/jrd+json": {
- source: "iana",
- compressible: true
-},
- "application/jscalendar+json": {
- source: "iana",
- compressible: true
-},
- "application/json": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "json",
- "map"
- ]
-},
- "application/json-patch+json": {
- source: "iana",
- compressible: true
-},
- "application/json-seq": {
- source: "iana"
-},
- "application/json5": {
- extensions: [
- "json5"
- ]
-},
- "application/jsonml+json": {
- source: "apache",
- compressible: true,
- extensions: [
- "jsonml"
- ]
-},
- "application/jwk+json": {
- source: "iana",
- compressible: true
-},
- "application/jwk-set+json": {
- source: "iana",
- compressible: true
-},
- "application/jwt": {
- source: "iana"
-},
- "application/kpml-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/kpml-response+xml": {
- source: "iana",
- compressible: true
-},
- "application/ld+json": {
- source: "iana",
- compressible: true,
- extensions: [
- "jsonld"
- ]
-},
- "application/lgr+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "lgr"
- ]
-},
- "application/link-format": {
- source: "iana"
-},
- "application/load-control+xml": {
- source: "iana",
- compressible: true
-},
- "application/lost+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "lostxml"
- ]
-},
- "application/lostsync+xml": {
- source: "iana",
- compressible: true
-},
- "application/lpf+zip": {
- source: "iana",
- compressible: false
-},
- "application/lxf": {
- source: "iana"
-},
- "application/mac-binhex40": {
- source: "iana",
- extensions: [
- "hqx"
- ]
-},
- "application/mac-compactpro": {
- source: "apache",
- extensions: [
- "cpt"
- ]
-},
- "application/macwriteii": {
- source: "iana"
-},
- "application/mads+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mads"
- ]
-},
- "application/manifest+json": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "webmanifest"
- ]
-},
- "application/marc": {
- source: "iana",
- extensions: [
- "mrc"
- ]
-},
- "application/marcxml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mrcx"
- ]
-},
- "application/mathematica": {
- source: "iana",
- extensions: [
- "ma",
- "nb",
- "mb"
- ]
-},
- "application/mathml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mathml"
- ]
-},
- "application/mathml-content+xml": {
- source: "iana",
- compressible: true
-},
- "application/mathml-presentation+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-associated-procedure-description+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-deregister+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-envelope+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-msk+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-msk-response+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-protection-description+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-reception-report+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-register+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-register-response+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-schedule+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbms-user-service-description+xml": {
- source: "iana",
- compressible: true
-},
- "application/mbox": {
- source: "iana",
- extensions: [
- "mbox"
- ]
-},
- "application/media-policy-dataset+xml": {
- source: "iana",
- compressible: true
-},
- "application/media_control+xml": {
- source: "iana",
- compressible: true
-},
- "application/mediaservercontrol+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mscml"
- ]
-},
- "application/merge-patch+json": {
- source: "iana",
- compressible: true
-},
- "application/metalink+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "metalink"
- ]
-},
- "application/metalink4+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "meta4"
- ]
-},
- "application/mets+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mets"
- ]
-},
- "application/mf4": {
- source: "iana"
-},
- "application/mikey": {
- source: "iana"
-},
- "application/mipc": {
- source: "iana"
-},
- "application/missing-blocks+cbor-seq": {
- source: "iana"
-},
- "application/mmt-aei+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "maei"
- ]
-},
- "application/mmt-usd+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "musd"
- ]
-},
- "application/mods+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mods"
- ]
-},
- "application/moss-keys": {
- source: "iana"
-},
- "application/moss-signature": {
- source: "iana"
-},
- "application/mosskey-data": {
- source: "iana"
-},
- "application/mosskey-request": {
- source: "iana"
-},
- "application/mp21": {
- source: "iana",
- extensions: [
- "m21",
- "mp21"
- ]
-},
- "application/mp4": {
- source: "iana",
- extensions: [
- "mp4s",
- "m4p"
- ]
-},
- "application/mpeg4-generic": {
- source: "iana"
-},
- "application/mpeg4-iod": {
- source: "iana"
-},
- "application/mpeg4-iod-xmt": {
- source: "iana"
-},
- "application/mrb-consumer+xml": {
- source: "iana",
- compressible: true
-},
- "application/mrb-publish+xml": {
- source: "iana",
- compressible: true
-},
- "application/msc-ivr+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/msc-mixer+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/msword": {
- source: "iana",
- compressible: false,
- extensions: [
- "doc",
- "dot"
- ]
-},
- "application/mud+json": {
- source: "iana",
- compressible: true
-},
- "application/multipart-core": {
- source: "iana"
-},
- "application/mxf": {
- source: "iana",
- extensions: [
- "mxf"
- ]
-},
- "application/n-quads": {
- source: "iana",
- extensions: [
- "nq"
- ]
-},
- "application/n-triples": {
- source: "iana",
- extensions: [
- "nt"
- ]
-},
- "application/nasdata": {
- source: "iana"
-},
- "application/news-checkgroups": {
- source: "iana",
- charset: "US-ASCII"
-},
- "application/news-groupinfo": {
- source: "iana",
- charset: "US-ASCII"
-},
- "application/news-transmission": {
- source: "iana"
-},
- "application/nlsml+xml": {
- source: "iana",
- compressible: true
-},
- "application/node": {
- source: "iana",
- extensions: [
- "cjs"
- ]
-},
- "application/nss": {
- source: "iana"
-},
- "application/oauth-authz-req+jwt": {
- source: "iana"
-},
- "application/ocsp-request": {
- source: "iana"
-},
- "application/ocsp-response": {
- source: "iana"
-},
- "application/octet-stream": {
- source: "iana",
- compressible: false,
- extensions: [
- "bin",
- "dms",
- "lrf",
- "mar",
- "so",
- "dist",
- "distz",
- "pkg",
- "bpk",
- "dump",
- "elc",
- "deploy",
- "exe",
- "dll",
- "deb",
- "dmg",
- "iso",
- "img",
- "msi",
- "msp",
- "msm",
- "buffer"
- ]
-},
- "application/oda": {
- source: "iana",
- extensions: [
- "oda"
- ]
-},
- "application/odm+xml": {
- source: "iana",
- compressible: true
-},
- "application/odx": {
- source: "iana"
-},
- "application/oebps-package+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "opf"
- ]
-},
- "application/ogg": {
- source: "iana",
- compressible: false,
- extensions: [
- "ogx"
- ]
-},
- "application/omdoc+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "omdoc"
- ]
-},
- "application/onenote": {
- source: "apache",
- extensions: [
- "onetoc",
- "onetoc2",
- "onetmp",
- "onepkg"
- ]
-},
- "application/opc-nodeset+xml": {
- source: "iana",
- compressible: true
-},
- "application/oscore": {
- source: "iana"
-},
- "application/oxps": {
- source: "iana",
- extensions: [
- "oxps"
- ]
-},
- "application/p21": {
- source: "iana"
-},
- "application/p21+zip": {
- source: "iana",
- compressible: false
-},
- "application/p2p-overlay+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "relo"
- ]
-},
- "application/parityfec": {
- source: "iana"
-},
- "application/passport": {
- source: "iana"
-},
- "application/patch-ops-error+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xer"
- ]
-},
- "application/pdf": {
- source: "iana",
- compressible: false,
- extensions: [
- "pdf"
- ]
-},
- "application/pdx": {
- source: "iana"
-},
- "application/pem-certificate-chain": {
- source: "iana"
-},
- "application/pgp-encrypted": {
- source: "iana",
- compressible: false,
- extensions: [
- "pgp"
- ]
-},
- "application/pgp-keys": {
- source: "iana"
-},
- "application/pgp-signature": {
- source: "iana",
- extensions: [
- "asc",
- "sig"
- ]
-},
- "application/pics-rules": {
- source: "apache",
- extensions: [
- "prf"
- ]
-},
- "application/pidf+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/pidf-diff+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/pkcs10": {
- source: "iana",
- extensions: [
- "p10"
- ]
-},
- "application/pkcs12": {
- source: "iana"
-},
- "application/pkcs7-mime": {
- source: "iana",
- extensions: [
- "p7m",
- "p7c"
- ]
-},
- "application/pkcs7-signature": {
- source: "iana",
- extensions: [
- "p7s"
- ]
-},
- "application/pkcs8": {
- source: "iana",
- extensions: [
- "p8"
- ]
-},
- "application/pkcs8-encrypted": {
- source: "iana"
-},
- "application/pkix-attr-cert": {
- source: "iana",
- extensions: [
- "ac"
- ]
-},
- "application/pkix-cert": {
- source: "iana",
- extensions: [
- "cer"
- ]
-},
- "application/pkix-crl": {
- source: "iana",
- extensions: [
- "crl"
- ]
-},
- "application/pkix-pkipath": {
- source: "iana",
- extensions: [
- "pkipath"
- ]
-},
- "application/pkixcmp": {
- source: "iana",
- extensions: [
- "pki"
- ]
-},
- "application/pls+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "pls"
- ]
-},
- "application/poc-settings+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/postscript": {
- source: "iana",
- compressible: true,
- extensions: [
- "ai",
- "eps",
- "ps"
- ]
-},
- "application/ppsp-tracker+json": {
- source: "iana",
- compressible: true
-},
- "application/problem+json": {
- source: "iana",
- compressible: true
-},
- "application/problem+xml": {
- source: "iana",
- compressible: true
-},
- "application/provenance+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "provx"
- ]
-},
- "application/prs.alvestrand.titrax-sheet": {
- source: "iana"
-},
- "application/prs.cww": {
- source: "iana",
- extensions: [
- "cww"
- ]
-},
- "application/prs.cyn": {
- source: "iana",
- charset: "7-BIT"
-},
- "application/prs.hpub+zip": {
- source: "iana",
- compressible: false
-},
- "application/prs.nprend": {
- source: "iana"
-},
- "application/prs.plucker": {
- source: "iana"
-},
- "application/prs.rdf-xml-crypt": {
- source: "iana"
-},
- "application/prs.xsf+xml": {
- source: "iana",
- compressible: true
-},
- "application/pskc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "pskcxml"
- ]
-},
- "application/pvd+json": {
- source: "iana",
- compressible: true
-},
- "application/qsig": {
- source: "iana"
-},
- "application/raml+yaml": {
- compressible: true,
- extensions: [
- "raml"
- ]
-},
- "application/raptorfec": {
- source: "iana"
-},
- "application/rdap+json": {
- source: "iana",
- compressible: true
-},
- "application/rdf+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rdf",
- "owl"
- ]
-},
- "application/reginfo+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rif"
- ]
-},
- "application/relax-ng-compact-syntax": {
- source: "iana",
- extensions: [
- "rnc"
- ]
-},
- "application/remote-printing": {
- source: "iana"
-},
- "application/reputon+json": {
- source: "iana",
- compressible: true
-},
- "application/resource-lists+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rl"
- ]
-},
- "application/resource-lists-diff+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rld"
- ]
-},
- "application/rfc+xml": {
- source: "iana",
- compressible: true
-},
- "application/riscos": {
- source: "iana"
-},
- "application/rlmi+xml": {
- source: "iana",
- compressible: true
-},
- "application/rls-services+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rs"
- ]
-},
- "application/route-apd+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rapd"
- ]
-},
- "application/route-s-tsid+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sls"
- ]
-},
- "application/route-usd+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rusd"
- ]
-},
- "application/rpki-ghostbusters": {
- source: "iana",
- extensions: [
- "gbr"
- ]
-},
- "application/rpki-manifest": {
- source: "iana",
- extensions: [
- "mft"
- ]
-},
- "application/rpki-publication": {
- source: "iana"
-},
- "application/rpki-roa": {
- source: "iana",
- extensions: [
- "roa"
- ]
-},
- "application/rpki-updown": {
- source: "iana"
-},
- "application/rsd+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "rsd"
- ]
-},
- "application/rss+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "rss"
- ]
-},
- "application/rtf": {
- source: "iana",
- compressible: true,
- extensions: [
- "rtf"
- ]
-},
- "application/rtploopback": {
- source: "iana"
-},
- "application/rtx": {
- source: "iana"
-},
- "application/samlassertion+xml": {
- source: "iana",
- compressible: true
-},
- "application/samlmetadata+xml": {
- source: "iana",
- compressible: true
-},
- "application/sarif+json": {
- source: "iana",
- compressible: true
-},
- "application/sarif-external-properties+json": {
- source: "iana",
- compressible: true
-},
- "application/sbe": {
- source: "iana"
-},
- "application/sbml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sbml"
- ]
-},
- "application/scaip+xml": {
- source: "iana",
- compressible: true
-},
- "application/scim+json": {
- source: "iana",
- compressible: true
-},
- "application/scvp-cv-request": {
- source: "iana",
- extensions: [
- "scq"
- ]
-},
- "application/scvp-cv-response": {
- source: "iana",
- extensions: [
- "scs"
- ]
-},
- "application/scvp-vp-request": {
- source: "iana",
- extensions: [
- "spq"
- ]
-},
- "application/scvp-vp-response": {
- source: "iana",
- extensions: [
- "spp"
- ]
-},
- "application/sdp": {
- source: "iana",
- extensions: [
- "sdp"
- ]
-},
- "application/secevent+jwt": {
- source: "iana"
-},
- "application/senml+cbor": {
- source: "iana"
-},
- "application/senml+json": {
- source: "iana",
- compressible: true
-},
- "application/senml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "senmlx"
- ]
-},
- "application/senml-etch+cbor": {
- source: "iana"
-},
- "application/senml-etch+json": {
- source: "iana",
- compressible: true
-},
- "application/senml-exi": {
- source: "iana"
-},
- "application/sensml+cbor": {
- source: "iana"
-},
- "application/sensml+json": {
- source: "iana",
- compressible: true
-},
- "application/sensml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sensmlx"
- ]
-},
- "application/sensml-exi": {
- source: "iana"
-},
- "application/sep+xml": {
- source: "iana",
- compressible: true
-},
- "application/sep-exi": {
- source: "iana"
-},
- "application/session-info": {
- source: "iana"
-},
- "application/set-payment": {
- source: "iana"
-},
- "application/set-payment-initiation": {
- source: "iana",
- extensions: [
- "setpay"
- ]
-},
- "application/set-registration": {
- source: "iana"
-},
- "application/set-registration-initiation": {
- source: "iana",
- extensions: [
- "setreg"
- ]
-},
- "application/sgml": {
- source: "iana"
-},
- "application/sgml-open-catalog": {
- source: "iana"
-},
- "application/shf+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "shf"
- ]
-},
- "application/sieve": {
- source: "iana",
- extensions: [
- "siv",
- "sieve"
- ]
-},
- "application/simple-filter+xml": {
- source: "iana",
- compressible: true
-},
- "application/simple-message-summary": {
- source: "iana"
-},
- "application/simplesymbolcontainer": {
- source: "iana"
-},
- "application/sipc": {
- source: "iana"
-},
- "application/slate": {
- source: "iana"
-},
- "application/smil": {
- source: "iana"
-},
- "application/smil+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "smi",
- "smil"
- ]
-},
- "application/smpte336m": {
- source: "iana"
-},
- "application/soap+fastinfoset": {
- source: "iana"
-},
- "application/soap+xml": {
- source: "iana",
- compressible: true
-},
- "application/sparql-query": {
- source: "iana",
- extensions: [
- "rq"
- ]
-},
- "application/sparql-results+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "srx"
- ]
-},
- "application/spirits-event+xml": {
- source: "iana",
- compressible: true
-},
- "application/sql": {
- source: "iana"
-},
- "application/srgs": {
- source: "iana",
- extensions: [
- "gram"
- ]
-},
- "application/srgs+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "grxml"
- ]
-},
- "application/sru+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sru"
- ]
-},
- "application/ssdl+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "ssdl"
- ]
-},
- "application/ssml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ssml"
- ]
-},
- "application/stix+json": {
- source: "iana",
- compressible: true
-},
- "application/swid+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "swidtag"
- ]
-},
- "application/tamp-apex-update": {
- source: "iana"
-},
- "application/tamp-apex-update-confirm": {
- source: "iana"
-},
- "application/tamp-community-update": {
- source: "iana"
-},
- "application/tamp-community-update-confirm": {
- source: "iana"
-},
- "application/tamp-error": {
- source: "iana"
-},
- "application/tamp-sequence-adjust": {
- source: "iana"
-},
- "application/tamp-sequence-adjust-confirm": {
- source: "iana"
-},
- "application/tamp-status-query": {
- source: "iana"
-},
- "application/tamp-status-response": {
- source: "iana"
-},
- "application/tamp-update": {
- source: "iana"
-},
- "application/tamp-update-confirm": {
- source: "iana"
-},
- "application/tar": {
- compressible: true
-},
- "application/taxii+json": {
- source: "iana",
- compressible: true
-},
- "application/td+json": {
- source: "iana",
- compressible: true
-},
- "application/tei+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "tei",
- "teicorpus"
- ]
-},
- "application/tetra_isi": {
- source: "iana"
-},
- "application/thraud+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "tfi"
- ]
-},
- "application/timestamp-query": {
- source: "iana"
-},
- "application/timestamp-reply": {
- source: "iana"
-},
- "application/timestamped-data": {
- source: "iana",
- extensions: [
- "tsd"
- ]
-},
- "application/tlsrpt+gzip": {
- source: "iana"
-},
- "application/tlsrpt+json": {
- source: "iana",
- compressible: true
-},
- "application/tnauthlist": {
- source: "iana"
-},
- "application/token-introspection+jwt": {
- source: "iana"
-},
- "application/toml": {
- compressible: true,
- extensions: [
- "toml"
- ]
-},
- "application/trickle-ice-sdpfrag": {
- source: "iana"
-},
- "application/trig": {
- source: "iana",
- extensions: [
- "trig"
- ]
-},
- "application/ttml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ttml"
- ]
-},
- "application/tve-trigger": {
- source: "iana"
-},
- "application/tzif": {
- source: "iana"
-},
- "application/tzif-leap": {
- source: "iana"
-},
- "application/ubjson": {
- compressible: false,
- extensions: [
- "ubj"
- ]
-},
- "application/ulpfec": {
- source: "iana"
-},
- "application/urc-grpsheet+xml": {
- source: "iana",
- compressible: true
-},
- "application/urc-ressheet+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "rsheet"
- ]
-},
- "application/urc-targetdesc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "td"
- ]
-},
- "application/urc-uisocketdesc+xml": {
- source: "iana",
- compressible: true
-},
- "application/vcard+json": {
- source: "iana",
- compressible: true
-},
- "application/vcard+xml": {
- source: "iana",
- compressible: true
-},
- "application/vemmi": {
- source: "iana"
-},
- "application/vividence.scriptfile": {
- source: "apache"
-},
- "application/vnd.1000minds.decision-model+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "1km"
- ]
-},
- "application/vnd.3gpp-prose+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp-prose-pc3ch+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp-v2x-local-service-information": {
- source: "iana"
-},
- "application/vnd.3gpp.5gnas": {
- source: "iana"
-},
- "application/vnd.3gpp.access-transfer-events+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.bsf+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.gmop+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.gtpc": {
- source: "iana"
-},
- "application/vnd.3gpp.interworking-data": {
- source: "iana"
-},
- "application/vnd.3gpp.lpp": {
- source: "iana"
-},
- "application/vnd.3gpp.mc-signalling-ear": {
- source: "iana"
-},
- "application/vnd.3gpp.mcdata-affiliation-command+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcdata-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcdata-payload": {
- source: "iana"
-},
- "application/vnd.3gpp.mcdata-service-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcdata-signalling": {
- source: "iana"
-},
- "application/vnd.3gpp.mcdata-ue-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcdata-user-profile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-affiliation-command+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-floor-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-location-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-service-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-signed+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-ue-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-ue-init-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcptt-user-profile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-location-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-service-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-transmission-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-ue-config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mcvideo-user-profile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.mid-call+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.ngap": {
- source: "iana"
-},
- "application/vnd.3gpp.pfcp": {
- source: "iana"
-},
- "application/vnd.3gpp.pic-bw-large": {
- source: "iana",
- extensions: [
- "plb"
- ]
-},
- "application/vnd.3gpp.pic-bw-small": {
- source: "iana",
- extensions: [
- "psb"
- ]
-},
- "application/vnd.3gpp.pic-bw-var": {
- source: "iana",
- extensions: [
- "pvb"
- ]
-},
- "application/vnd.3gpp.s1ap": {
- source: "iana"
-},
- "application/vnd.3gpp.sms": {
- source: "iana"
-},
- "application/vnd.3gpp.sms+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.srvcc-ext+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.srvcc-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.state-and-event-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp.ussd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp2.bcmcsinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.3gpp2.sms": {
- source: "iana"
-},
- "application/vnd.3gpp2.tcap": {
- source: "iana",
- extensions: [
- "tcap"
- ]
-},
- "application/vnd.3lightssoftware.imagescal": {
- source: "iana"
-},
- "application/vnd.3m.post-it-notes": {
- source: "iana",
- extensions: [
- "pwn"
- ]
-},
- "application/vnd.accpac.simply.aso": {
- source: "iana",
- extensions: [
- "aso"
- ]
-},
- "application/vnd.accpac.simply.imp": {
- source: "iana",
- extensions: [
- "imp"
- ]
-},
- "application/vnd.acucobol": {
- source: "iana",
- extensions: [
- "acu"
- ]
-},
- "application/vnd.acucorp": {
- source: "iana",
- extensions: [
- "atc",
- "acutc"
- ]
-},
- "application/vnd.adobe.air-application-installer-package+zip": {
- source: "apache",
- compressible: false,
- extensions: [
- "air"
- ]
-},
- "application/vnd.adobe.flash.movie": {
- source: "iana"
-},
- "application/vnd.adobe.formscentral.fcdt": {
- source: "iana",
- extensions: [
- "fcdt"
- ]
-},
- "application/vnd.adobe.fxp": {
- source: "iana",
- extensions: [
- "fxp",
- "fxpl"
- ]
-},
- "application/vnd.adobe.partial-upload": {
- source: "iana"
-},
- "application/vnd.adobe.xdp+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xdp"
- ]
-},
- "application/vnd.adobe.xfdf": {
- source: "iana",
- extensions: [
- "xfdf"
- ]
-},
- "application/vnd.aether.imp": {
- source: "iana"
-},
- "application/vnd.afpc.afplinedata": {
- source: "iana"
-},
- "application/vnd.afpc.afplinedata-pagedef": {
- source: "iana"
-},
- "application/vnd.afpc.cmoca-cmresource": {
- source: "iana"
-},
- "application/vnd.afpc.foca-charset": {
- source: "iana"
-},
- "application/vnd.afpc.foca-codedfont": {
- source: "iana"
-},
- "application/vnd.afpc.foca-codepage": {
- source: "iana"
-},
- "application/vnd.afpc.modca": {
- source: "iana"
-},
- "application/vnd.afpc.modca-cmtable": {
- source: "iana"
-},
- "application/vnd.afpc.modca-formdef": {
- source: "iana"
-},
- "application/vnd.afpc.modca-mediummap": {
- source: "iana"
-},
- "application/vnd.afpc.modca-objectcontainer": {
- source: "iana"
-},
- "application/vnd.afpc.modca-overlay": {
- source: "iana"
-},
- "application/vnd.afpc.modca-pagesegment": {
- source: "iana"
-},
- "application/vnd.ah-barcode": {
- source: "iana"
-},
- "application/vnd.ahead.space": {
- source: "iana",
- extensions: [
- "ahead"
- ]
-},
- "application/vnd.airzip.filesecure.azf": {
- source: "iana",
- extensions: [
- "azf"
- ]
-},
- "application/vnd.airzip.filesecure.azs": {
- source: "iana",
- extensions: [
- "azs"
- ]
-},
- "application/vnd.amadeus+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.amazon.ebook": {
- source: "apache",
- extensions: [
- "azw"
- ]
-},
- "application/vnd.amazon.mobi8-ebook": {
- source: "iana"
-},
- "application/vnd.americandynamics.acc": {
- source: "iana",
- extensions: [
- "acc"
- ]
-},
- "application/vnd.amiga.ami": {
- source: "iana",
- extensions: [
- "ami"
- ]
-},
- "application/vnd.amundsen.maze+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.android.ota": {
- source: "iana"
-},
- "application/vnd.android.package-archive": {
- source: "apache",
- compressible: false,
- extensions: [
- "apk"
- ]
-},
- "application/vnd.anki": {
- source: "iana"
-},
- "application/vnd.anser-web-certificate-issue-initiation": {
- source: "iana",
- extensions: [
- "cii"
- ]
-},
- "application/vnd.anser-web-funds-transfer-initiation": {
- source: "apache",
- extensions: [
- "fti"
- ]
-},
- "application/vnd.antix.game-component": {
- source: "iana",
- extensions: [
- "atx"
- ]
-},
- "application/vnd.apache.arrow.file": {
- source: "iana"
-},
- "application/vnd.apache.arrow.stream": {
- source: "iana"
-},
- "application/vnd.apache.thrift.binary": {
- source: "iana"
-},
- "application/vnd.apache.thrift.compact": {
- source: "iana"
-},
- "application/vnd.apache.thrift.json": {
- source: "iana"
-},
- "application/vnd.api+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.aplextor.warrp+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.apothekende.reservation+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.apple.installer+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mpkg"
- ]
-},
- "application/vnd.apple.keynote": {
- source: "iana",
- extensions: [
- "key"
- ]
-},
- "application/vnd.apple.mpegurl": {
- source: "iana",
- extensions: [
- "m3u8"
- ]
-},
- "application/vnd.apple.numbers": {
- source: "iana",
- extensions: [
- "numbers"
- ]
-},
- "application/vnd.apple.pages": {
- source: "iana",
- extensions: [
- "pages"
- ]
-},
- "application/vnd.apple.pkpass": {
- compressible: false,
- extensions: [
- "pkpass"
- ]
-},
- "application/vnd.arastra.swi": {
- source: "iana"
-},
- "application/vnd.aristanetworks.swi": {
- source: "iana",
- extensions: [
- "swi"
- ]
-},
- "application/vnd.artisan+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.artsquare": {
- source: "iana"
-},
- "application/vnd.astraea-software.iota": {
- source: "iana",
- extensions: [
- "iota"
- ]
-},
- "application/vnd.audiograph": {
- source: "iana",
- extensions: [
- "aep"
- ]
-},
- "application/vnd.autopackage": {
- source: "iana"
-},
- "application/vnd.avalon+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.avistar+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.balsamiq.bmml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "bmml"
- ]
-},
- "application/vnd.balsamiq.bmpr": {
- source: "iana"
-},
- "application/vnd.banana-accounting": {
- source: "iana"
-},
- "application/vnd.bbf.usp.error": {
- source: "iana"
-},
- "application/vnd.bbf.usp.msg": {
- source: "iana"
-},
- "application/vnd.bbf.usp.msg+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.bekitzur-stech+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.bint.med-content": {
- source: "iana"
-},
- "application/vnd.biopax.rdf+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.blink-idb-value-wrapper": {
- source: "iana"
-},
- "application/vnd.blueice.multipass": {
- source: "iana",
- extensions: [
- "mpm"
- ]
-},
- "application/vnd.bluetooth.ep.oob": {
- source: "iana"
-},
- "application/vnd.bluetooth.le.oob": {
- source: "iana"
-},
- "application/vnd.bmi": {
- source: "iana",
- extensions: [
- "bmi"
- ]
-},
- "application/vnd.bpf": {
- source: "iana"
-},
- "application/vnd.bpf3": {
- source: "iana"
-},
- "application/vnd.businessobjects": {
- source: "iana",
- extensions: [
- "rep"
- ]
-},
- "application/vnd.byu.uapi+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cab-jscript": {
- source: "iana"
-},
- "application/vnd.canon-cpdl": {
- source: "iana"
-},
- "application/vnd.canon-lips": {
- source: "iana"
-},
- "application/vnd.capasystems-pg+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cendio.thinlinc.clientconf": {
- source: "iana"
-},
- "application/vnd.century-systems.tcp_stream": {
- source: "iana"
-},
- "application/vnd.chemdraw+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "cdxml"
- ]
-},
- "application/vnd.chess-pgn": {
- source: "iana"
-},
- "application/vnd.chipnuts.karaoke-mmd": {
- source: "iana",
- extensions: [
- "mmd"
- ]
-},
- "application/vnd.ciedi": {
- source: "iana"
-},
- "application/vnd.cinderella": {
- source: "iana",
- extensions: [
- "cdy"
- ]
-},
- "application/vnd.cirpack.isdn-ext": {
- source: "iana"
-},
- "application/vnd.citationstyles.style+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "csl"
- ]
-},
- "application/vnd.claymore": {
- source: "iana",
- extensions: [
- "cla"
- ]
-},
- "application/vnd.cloanto.rp9": {
- source: "iana",
- extensions: [
- "rp9"
- ]
-},
- "application/vnd.clonk.c4group": {
- source: "iana",
- extensions: [
- "c4g",
- "c4d",
- "c4f",
- "c4p",
- "c4u"
- ]
-},
- "application/vnd.cluetrust.cartomobile-config": {
- source: "iana",
- extensions: [
- "c11amc"
- ]
-},
- "application/vnd.cluetrust.cartomobile-config-pkg": {
- source: "iana",
- extensions: [
- "c11amz"
- ]
-},
- "application/vnd.coffeescript": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.document": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.document-template": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.presentation": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.presentation-template": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.spreadsheet": {
- source: "iana"
-},
- "application/vnd.collabio.xodocuments.spreadsheet-template": {
- source: "iana"
-},
- "application/vnd.collection+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.collection.doc+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.collection.next+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.comicbook+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.comicbook-rar": {
- source: "iana"
-},
- "application/vnd.commerce-battelle": {
- source: "iana"
-},
- "application/vnd.commonspace": {
- source: "iana",
- extensions: [
- "csp"
- ]
-},
- "application/vnd.contact.cmsg": {
- source: "iana",
- extensions: [
- "cdbcmsg"
- ]
-},
- "application/vnd.coreos.ignition+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cosmocaller": {
- source: "iana",
- extensions: [
- "cmc"
- ]
-},
- "application/vnd.crick.clicker": {
- source: "iana",
- extensions: [
- "clkx"
- ]
-},
- "application/vnd.crick.clicker.keyboard": {
- source: "iana",
- extensions: [
- "clkk"
- ]
-},
- "application/vnd.crick.clicker.palette": {
- source: "iana",
- extensions: [
- "clkp"
- ]
-},
- "application/vnd.crick.clicker.template": {
- source: "iana",
- extensions: [
- "clkt"
- ]
-},
- "application/vnd.crick.clicker.wordbank": {
- source: "iana",
- extensions: [
- "clkw"
- ]
-},
- "application/vnd.criticaltools.wbs+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "wbs"
- ]
-},
- "application/vnd.cryptii.pipe+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.crypto-shade-file": {
- source: "iana"
-},
- "application/vnd.cryptomator.encrypted": {
- source: "iana"
-},
- "application/vnd.cryptomator.vault": {
- source: "iana"
-},
- "application/vnd.ctc-posml": {
- source: "iana",
- extensions: [
- "pml"
- ]
-},
- "application/vnd.ctct.ws+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cups-pdf": {
- source: "iana"
-},
- "application/vnd.cups-postscript": {
- source: "iana"
-},
- "application/vnd.cups-ppd": {
- source: "iana",
- extensions: [
- "ppd"
- ]
-},
- "application/vnd.cups-raster": {
- source: "iana"
-},
- "application/vnd.cups-raw": {
- source: "iana"
-},
- "application/vnd.curl": {
- source: "iana"
-},
- "application/vnd.curl.car": {
- source: "apache",
- extensions: [
- "car"
- ]
-},
- "application/vnd.curl.pcurl": {
- source: "apache",
- extensions: [
- "pcurl"
- ]
-},
- "application/vnd.cyan.dean.root+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cybank": {
- source: "iana"
-},
- "application/vnd.cyclonedx+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.cyclonedx+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.d2l.coursepackage1p0+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.d3m-dataset": {
- source: "iana"
-},
- "application/vnd.d3m-problem": {
- source: "iana"
-},
- "application/vnd.dart": {
- source: "iana",
- compressible: true,
- extensions: [
- "dart"
- ]
-},
- "application/vnd.data-vision.rdz": {
- source: "iana",
- extensions: [
- "rdz"
- ]
-},
- "application/vnd.datapackage+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dataresource+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dbf": {
- source: "iana",
- extensions: [
- "dbf"
- ]
-},
- "application/vnd.debian.binary-package": {
- source: "iana"
-},
- "application/vnd.dece.data": {
- source: "iana",
- extensions: [
- "uvf",
- "uvvf",
- "uvd",
- "uvvd"
- ]
-},
- "application/vnd.dece.ttml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "uvt",
- "uvvt"
- ]
-},
- "application/vnd.dece.unspecified": {
- source: "iana",
- extensions: [
- "uvx",
- "uvvx"
- ]
-},
- "application/vnd.dece.zip": {
- source: "iana",
- extensions: [
- "uvz",
- "uvvz"
- ]
-},
- "application/vnd.denovo.fcselayout-link": {
- source: "iana",
- extensions: [
- "fe_launch"
- ]
-},
- "application/vnd.desmume.movie": {
- source: "iana"
-},
- "application/vnd.dir-bi.plate-dl-nosuffix": {
- source: "iana"
-},
- "application/vnd.dm.delegation+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dna": {
- source: "iana",
- extensions: [
- "dna"
- ]
-},
- "application/vnd.document+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dolby.mlp": {
- source: "apache",
- extensions: [
- "mlp"
- ]
-},
- "application/vnd.dolby.mobile.1": {
- source: "iana"
-},
- "application/vnd.dolby.mobile.2": {
- source: "iana"
-},
- "application/vnd.doremir.scorecloud-binary-document": {
- source: "iana"
-},
- "application/vnd.dpgraph": {
- source: "iana",
- extensions: [
- "dpg"
- ]
-},
- "application/vnd.dreamfactory": {
- source: "iana",
- extensions: [
- "dfac"
- ]
-},
- "application/vnd.drive+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ds-keypoint": {
- source: "apache",
- extensions: [
- "kpxx"
- ]
-},
- "application/vnd.dtg.local": {
- source: "iana"
-},
- "application/vnd.dtg.local.flash": {
- source: "iana"
-},
- "application/vnd.dtg.local.html": {
- source: "iana"
-},
- "application/vnd.dvb.ait": {
- source: "iana",
- extensions: [
- "ait"
- ]
-},
- "application/vnd.dvb.dvbisl+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.dvbj": {
- source: "iana"
-},
- "application/vnd.dvb.esgcontainer": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcdftnotifaccess": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcesgaccess": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcesgaccess2": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcesgpdd": {
- source: "iana"
-},
- "application/vnd.dvb.ipdcroaming": {
- source: "iana"
-},
- "application/vnd.dvb.iptv.alfec-base": {
- source: "iana"
-},
- "application/vnd.dvb.iptv.alfec-enhancement": {
- source: "iana"
-},
- "application/vnd.dvb.notif-aggregate-root+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-container+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-generic+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-ia-msglist+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-ia-registration-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-ia-registration-response+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.notif-init+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.dvb.pfr": {
- source: "iana"
-},
- "application/vnd.dvb.service": {
- source: "iana",
- extensions: [
- "svc"
- ]
-},
- "application/vnd.dxr": {
- source: "iana"
-},
- "application/vnd.dynageo": {
- source: "iana",
- extensions: [
- "geo"
- ]
-},
- "application/vnd.dzr": {
- source: "iana"
-},
- "application/vnd.easykaraoke.cdgdownload": {
- source: "iana"
-},
- "application/vnd.ecdis-update": {
- source: "iana"
-},
- "application/vnd.ecip.rlp": {
- source: "iana"
-},
- "application/vnd.ecowin.chart": {
- source: "iana",
- extensions: [
- "mag"
- ]
-},
- "application/vnd.ecowin.filerequest": {
- source: "iana"
-},
- "application/vnd.ecowin.fileupdate": {
- source: "iana"
-},
- "application/vnd.ecowin.series": {
- source: "iana"
-},
- "application/vnd.ecowin.seriesrequest": {
- source: "iana"
-},
- "application/vnd.ecowin.seriesupdate": {
- source: "iana"
-},
- "application/vnd.efi.img": {
- source: "iana"
-},
- "application/vnd.efi.iso": {
- source: "iana"
-},
- "application/vnd.emclient.accessrequest+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.enliven": {
- source: "iana",
- extensions: [
- "nml"
- ]
-},
- "application/vnd.enphase.envoy": {
- source: "iana"
-},
- "application/vnd.eprints.data+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.epson.esf": {
- source: "iana",
- extensions: [
- "esf"
- ]
-},
- "application/vnd.epson.msf": {
- source: "iana",
- extensions: [
- "msf"
- ]
-},
- "application/vnd.epson.quickanime": {
- source: "iana",
- extensions: [
- "qam"
- ]
-},
- "application/vnd.epson.salt": {
- source: "iana",
- extensions: [
- "slt"
- ]
-},
- "application/vnd.epson.ssf": {
- source: "iana",
- extensions: [
- "ssf"
- ]
-},
- "application/vnd.ericsson.quickcall": {
- source: "iana"
-},
- "application/vnd.espass-espass+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.eszigno3+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "es3",
- "et3"
- ]
-},
- "application/vnd.etsi.aoc+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.asic-e+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.etsi.asic-s+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.etsi.cug+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvcommand+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvdiscovery+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvprofile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvsad-bc+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvsad-cod+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvsad-npvr+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvservice+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvsync+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.iptvueprofile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.mcid+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.mheg5": {
- source: "iana"
-},
- "application/vnd.etsi.overload-control-policy-dataset+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.pstn+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.sci+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.simservs+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.timestamp-token": {
- source: "iana"
-},
- "application/vnd.etsi.tsl+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.etsi.tsl.der": {
- source: "iana"
-},
- "application/vnd.eudora.data": {
- source: "iana"
-},
- "application/vnd.evolv.ecig.profile": {
- source: "iana"
-},
- "application/vnd.evolv.ecig.settings": {
- source: "iana"
-},
- "application/vnd.evolv.ecig.theme": {
- source: "iana"
-},
- "application/vnd.exstream-empower+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.exstream-package": {
- source: "iana"
-},
- "application/vnd.ezpix-album": {
- source: "iana",
- extensions: [
- "ez2"
- ]
-},
- "application/vnd.ezpix-package": {
- source: "iana",
- extensions: [
- "ez3"
- ]
-},
- "application/vnd.f-secure.mobile": {
- source: "iana"
-},
- "application/vnd.fastcopy-disk-image": {
- source: "iana"
-},
- "application/vnd.fdf": {
- source: "iana",
- extensions: [
- "fdf"
- ]
-},
- "application/vnd.fdsn.mseed": {
- source: "iana",
- extensions: [
- "mseed"
- ]
-},
- "application/vnd.fdsn.seed": {
- source: "iana",
- extensions: [
- "seed",
- "dataless"
- ]
-},
- "application/vnd.ffsns": {
- source: "iana"
-},
- "application/vnd.ficlab.flb+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.filmit.zfc": {
- source: "iana"
-},
- "application/vnd.fints": {
- source: "iana"
-},
- "application/vnd.firemonkeys.cloudcell": {
- source: "iana"
-},
- "application/vnd.flographit": {
- source: "iana",
- extensions: [
- "gph"
- ]
-},
- "application/vnd.fluxtime.clip": {
- source: "iana",
- extensions: [
- "ftc"
- ]
-},
- "application/vnd.font-fontforge-sfd": {
- source: "iana"
-},
- "application/vnd.framemaker": {
- source: "iana",
- extensions: [
- "fm",
- "frame",
- "maker",
- "book"
- ]
-},
- "application/vnd.frogans.fnc": {
- source: "iana",
- extensions: [
- "fnc"
- ]
-},
- "application/vnd.frogans.ltf": {
- source: "iana",
- extensions: [
- "ltf"
- ]
-},
- "application/vnd.fsc.weblaunch": {
- source: "iana",
- extensions: [
- "fsc"
- ]
-},
- "application/vnd.fujifilm.fb.docuworks": {
- source: "iana"
-},
- "application/vnd.fujifilm.fb.docuworks.binder": {
- source: "iana"
-},
- "application/vnd.fujifilm.fb.docuworks.container": {
- source: "iana"
-},
- "application/vnd.fujifilm.fb.jfi+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.fujitsu.oasys": {
- source: "iana",
- extensions: [
- "oas"
- ]
-},
- "application/vnd.fujitsu.oasys2": {
- source: "iana",
- extensions: [
- "oa2"
- ]
-},
- "application/vnd.fujitsu.oasys3": {
- source: "iana",
- extensions: [
- "oa3"
- ]
-},
- "application/vnd.fujitsu.oasysgp": {
- source: "iana",
- extensions: [
- "fg5"
- ]
-},
- "application/vnd.fujitsu.oasysprs": {
- source: "iana",
- extensions: [
- "bh2"
- ]
-},
- "application/vnd.fujixerox.art-ex": {
- source: "iana"
-},
- "application/vnd.fujixerox.art4": {
- source: "iana"
-},
- "application/vnd.fujixerox.ddd": {
- source: "iana",
- extensions: [
- "ddd"
- ]
-},
- "application/vnd.fujixerox.docuworks": {
- source: "iana",
- extensions: [
- "xdw"
- ]
-},
- "application/vnd.fujixerox.docuworks.binder": {
- source: "iana",
- extensions: [
- "xbd"
- ]
-},
- "application/vnd.fujixerox.docuworks.container": {
- source: "iana"
-},
- "application/vnd.fujixerox.hbpl": {
- source: "iana"
-},
- "application/vnd.fut-misnet": {
- source: "iana"
-},
- "application/vnd.futoin+cbor": {
- source: "iana"
-},
- "application/vnd.futoin+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.fuzzysheet": {
- source: "iana",
- extensions: [
- "fzs"
- ]
-},
- "application/vnd.genomatix.tuxedo": {
- source: "iana",
- extensions: [
- "txd"
- ]
-},
- "application/vnd.gentics.grd+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.geo+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.geocube+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.geogebra.file": {
- source: "iana",
- extensions: [
- "ggb"
- ]
-},
- "application/vnd.geogebra.slides": {
- source: "iana"
-},
- "application/vnd.geogebra.tool": {
- source: "iana",
- extensions: [
- "ggt"
- ]
-},
- "application/vnd.geometry-explorer": {
- source: "iana",
- extensions: [
- "gex",
- "gre"
- ]
-},
- "application/vnd.geonext": {
- source: "iana",
- extensions: [
- "gxt"
- ]
-},
- "application/vnd.geoplan": {
- source: "iana",
- extensions: [
- "g2w"
- ]
-},
- "application/vnd.geospace": {
- source: "iana",
- extensions: [
- "g3w"
- ]
-},
- "application/vnd.gerber": {
- source: "iana"
-},
- "application/vnd.globalplatform.card-content-mgt": {
- source: "iana"
-},
- "application/vnd.globalplatform.card-content-mgt-response": {
- source: "iana"
-},
- "application/vnd.gmx": {
- source: "iana",
- extensions: [
- "gmx"
- ]
-},
- "application/vnd.google-apps.document": {
- compressible: false,
- extensions: [
- "gdoc"
- ]
-},
- "application/vnd.google-apps.presentation": {
- compressible: false,
- extensions: [
- "gslides"
- ]
-},
- "application/vnd.google-apps.spreadsheet": {
- compressible: false,
- extensions: [
- "gsheet"
- ]
-},
- "application/vnd.google-earth.kml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "kml"
- ]
-},
- "application/vnd.google-earth.kmz": {
- source: "iana",
- compressible: false,
- extensions: [
- "kmz"
- ]
-},
- "application/vnd.gov.sk.e-form+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.gov.sk.e-form+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.gov.sk.xmldatacontainer+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.grafeq": {
- source: "iana",
- extensions: [
- "gqf",
- "gqs"
- ]
-},
- "application/vnd.gridmp": {
- source: "iana"
-},
- "application/vnd.groove-account": {
- source: "iana",
- extensions: [
- "gac"
- ]
-},
- "application/vnd.groove-help": {
- source: "iana",
- extensions: [
- "ghf"
- ]
-},
- "application/vnd.groove-identity-message": {
- source: "iana",
- extensions: [
- "gim"
- ]
-},
- "application/vnd.groove-injector": {
- source: "iana",
- extensions: [
- "grv"
- ]
-},
- "application/vnd.groove-tool-message": {
- source: "iana",
- extensions: [
- "gtm"
- ]
-},
- "application/vnd.groove-tool-template": {
- source: "iana",
- extensions: [
- "tpl"
- ]
-},
- "application/vnd.groove-vcard": {
- source: "iana",
- extensions: [
- "vcg"
- ]
-},
- "application/vnd.hal+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hal+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "hal"
- ]
-},
- "application/vnd.handheld-entertainment+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "zmm"
- ]
-},
- "application/vnd.hbci": {
- source: "iana",
- extensions: [
- "hbci"
- ]
-},
- "application/vnd.hc+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hcl-bireports": {
- source: "iana"
-},
- "application/vnd.hdt": {
- source: "iana"
-},
- "application/vnd.heroku+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hhe.lesson-player": {
- source: "iana",
- extensions: [
- "les"
- ]
-},
- "application/vnd.hp-hpgl": {
- source: "iana",
- extensions: [
- "hpgl"
- ]
-},
- "application/vnd.hp-hpid": {
- source: "iana",
- extensions: [
- "hpid"
- ]
-},
- "application/vnd.hp-hps": {
- source: "iana",
- extensions: [
- "hps"
- ]
-},
- "application/vnd.hp-jlyt": {
- source: "iana",
- extensions: [
- "jlt"
- ]
-},
- "application/vnd.hp-pcl": {
- source: "iana",
- extensions: [
- "pcl"
- ]
-},
- "application/vnd.hp-pclxl": {
- source: "iana",
- extensions: [
- "pclxl"
- ]
-},
- "application/vnd.httphone": {
- source: "iana"
-},
- "application/vnd.hydrostatix.sof-data": {
- source: "iana",
- extensions: [
- "sfd-hdstx"
- ]
-},
- "application/vnd.hyper+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hyper-item+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hyperdrive+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.hzn-3d-crossword": {
- source: "iana"
-},
- "application/vnd.ibm.afplinedata": {
- source: "iana"
-},
- "application/vnd.ibm.electronic-media": {
- source: "iana"
-},
- "application/vnd.ibm.minipay": {
- source: "iana",
- extensions: [
- "mpy"
- ]
-},
- "application/vnd.ibm.modcap": {
- source: "iana",
- extensions: [
- "afp",
- "listafp",
- "list3820"
- ]
-},
- "application/vnd.ibm.rights-management": {
- source: "iana",
- extensions: [
- "irm"
- ]
-},
- "application/vnd.ibm.secure-container": {
- source: "iana",
- extensions: [
- "sc"
- ]
-},
- "application/vnd.iccprofile": {
- source: "iana",
- extensions: [
- "icc",
- "icm"
- ]
-},
- "application/vnd.ieee.1905": {
- source: "iana"
-},
- "application/vnd.igloader": {
- source: "iana",
- extensions: [
- "igl"
- ]
-},
- "application/vnd.imagemeter.folder+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.imagemeter.image+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.immervision-ivp": {
- source: "iana",
- extensions: [
- "ivp"
- ]
-},
- "application/vnd.immervision-ivu": {
- source: "iana",
- extensions: [
- "ivu"
- ]
-},
- "application/vnd.ims.imsccv1p1": {
- source: "iana"
-},
- "application/vnd.ims.imsccv1p2": {
- source: "iana"
-},
- "application/vnd.ims.imsccv1p3": {
- source: "iana"
-},
- "application/vnd.ims.lis.v2.result+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolproxy+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolproxy.id+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolsettings+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ims.lti.v2.toolsettings.simple+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.informedcontrol.rms+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.informix-visionary": {
- source: "iana"
-},
- "application/vnd.infotech.project": {
- source: "iana"
-},
- "application/vnd.infotech.project+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.innopath.wamp.notification": {
- source: "iana"
-},
- "application/vnd.insors.igm": {
- source: "iana",
- extensions: [
- "igm"
- ]
-},
- "application/vnd.intercon.formnet": {
- source: "iana",
- extensions: [
- "xpw",
- "xpx"
- ]
-},
- "application/vnd.intergeo": {
- source: "iana",
- extensions: [
- "i2g"
- ]
-},
- "application/vnd.intertrust.digibox": {
- source: "iana"
-},
- "application/vnd.intertrust.nncp": {
- source: "iana"
-},
- "application/vnd.intu.qbo": {
- source: "iana",
- extensions: [
- "qbo"
- ]
-},
- "application/vnd.intu.qfx": {
- source: "iana",
- extensions: [
- "qfx"
- ]
-},
- "application/vnd.iptc.g2.catalogitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.conceptitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.knowledgeitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.newsitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.newsmessage+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.packageitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.iptc.g2.planningitem+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ipunplugged.rcprofile": {
- source: "iana",
- extensions: [
- "rcprofile"
- ]
-},
- "application/vnd.irepository.package+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "irp"
- ]
-},
- "application/vnd.is-xpr": {
- source: "iana",
- extensions: [
- "xpr"
- ]
-},
- "application/vnd.isac.fcs": {
- source: "iana",
- extensions: [
- "fcs"
- ]
-},
- "application/vnd.iso11783-10+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.jam": {
- source: "iana",
- extensions: [
- "jam"
- ]
-},
- "application/vnd.japannet-directory-service": {
- source: "iana"
-},
- "application/vnd.japannet-jpnstore-wakeup": {
- source: "iana"
-},
- "application/vnd.japannet-payment-wakeup": {
- source: "iana"
-},
- "application/vnd.japannet-registration": {
- source: "iana"
-},
- "application/vnd.japannet-registration-wakeup": {
- source: "iana"
-},
- "application/vnd.japannet-setstore-wakeup": {
- source: "iana"
-},
- "application/vnd.japannet-verification": {
- source: "iana"
-},
- "application/vnd.japannet-verification-wakeup": {
- source: "iana"
-},
- "application/vnd.jcp.javame.midlet-rms": {
- source: "iana",
- extensions: [
- "rms"
- ]
-},
- "application/vnd.jisp": {
- source: "iana",
- extensions: [
- "jisp"
- ]
-},
- "application/vnd.joost.joda-archive": {
- source: "iana",
- extensions: [
- "joda"
- ]
-},
- "application/vnd.jsk.isdn-ngn": {
- source: "iana"
-},
- "application/vnd.kahootz": {
- source: "iana",
- extensions: [
- "ktz",
- "ktr"
- ]
-},
- "application/vnd.kde.karbon": {
- source: "iana",
- extensions: [
- "karbon"
- ]
-},
- "application/vnd.kde.kchart": {
- source: "iana",
- extensions: [
- "chrt"
- ]
-},
- "application/vnd.kde.kformula": {
- source: "iana",
- extensions: [
- "kfo"
- ]
-},
- "application/vnd.kde.kivio": {
- source: "iana",
- extensions: [
- "flw"
- ]
-},
- "application/vnd.kde.kontour": {
- source: "iana",
- extensions: [
- "kon"
- ]
-},
- "application/vnd.kde.kpresenter": {
- source: "iana",
- extensions: [
- "kpr",
- "kpt"
- ]
-},
- "application/vnd.kde.kspread": {
- source: "iana",
- extensions: [
- "ksp"
- ]
-},
- "application/vnd.kde.kword": {
- source: "iana",
- extensions: [
- "kwd",
- "kwt"
- ]
-},
- "application/vnd.kenameaapp": {
- source: "iana",
- extensions: [
- "htke"
- ]
-},
- "application/vnd.kidspiration": {
- source: "iana",
- extensions: [
- "kia"
- ]
-},
- "application/vnd.kinar": {
- source: "iana",
- extensions: [
- "kne",
- "knp"
- ]
-},
- "application/vnd.koan": {
- source: "iana",
- extensions: [
- "skp",
- "skd",
- "skt",
- "skm"
- ]
-},
- "application/vnd.kodak-descriptor": {
- source: "iana",
- extensions: [
- "sse"
- ]
-},
- "application/vnd.las": {
- source: "iana"
-},
- "application/vnd.las.las+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.las.las+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "lasxml"
- ]
-},
- "application/vnd.laszip": {
- source: "iana"
-},
- "application/vnd.leap+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.liberty-request+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.llamagraphics.life-balance.desktop": {
- source: "iana",
- extensions: [
- "lbd"
- ]
-},
- "application/vnd.llamagraphics.life-balance.exchange+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "lbe"
- ]
-},
- "application/vnd.logipipe.circuit+zip": {
- source: "iana",
- compressible: false
-},
- "application/vnd.loom": {
- source: "iana"
-},
- "application/vnd.lotus-1-2-3": {
- source: "iana",
- extensions: [
- "123"
- ]
-},
- "application/vnd.lotus-approach": {
- source: "iana",
- extensions: [
- "apr"
- ]
-},
- "application/vnd.lotus-freelance": {
- source: "iana",
- extensions: [
- "pre"
- ]
-},
- "application/vnd.lotus-notes": {
- source: "iana",
- extensions: [
- "nsf"
- ]
-},
- "application/vnd.lotus-organizer": {
- source: "iana",
- extensions: [
- "org"
- ]
-},
- "application/vnd.lotus-screencam": {
- source: "iana",
- extensions: [
- "scm"
- ]
-},
- "application/vnd.lotus-wordpro": {
- source: "iana",
- extensions: [
- "lwp"
- ]
-},
- "application/vnd.macports.portpkg": {
- source: "iana",
- extensions: [
- "portpkg"
- ]
-},
- "application/vnd.mapbox-vector-tile": {
- source: "iana",
- extensions: [
- "mvt"
- ]
-},
- "application/vnd.marlin.drm.actiontoken+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.marlin.drm.conftoken+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.marlin.drm.license+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.marlin.drm.mdcf": {
- source: "iana"
-},
- "application/vnd.mason+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.maxmind.maxmind-db": {
- source: "iana"
-},
- "application/vnd.mcd": {
- source: "iana",
- extensions: [
- "mcd"
- ]
-},
- "application/vnd.medcalcdata": {
- source: "iana",
- extensions: [
- "mc1"
- ]
-},
- "application/vnd.mediastation.cdkey": {
- source: "iana",
- extensions: [
- "cdkey"
- ]
-},
- "application/vnd.meridian-slingshot": {
- source: "iana"
-},
- "application/vnd.mfer": {
- source: "iana",
- extensions: [
- "mwf"
- ]
-},
- "application/vnd.mfmp": {
- source: "iana",
- extensions: [
- "mfm"
- ]
-},
- "application/vnd.micro+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.micrografx.flo": {
- source: "iana",
- extensions: [
- "flo"
- ]
-},
- "application/vnd.micrografx.igx": {
- source: "iana",
- extensions: [
- "igx"
- ]
-},
- "application/vnd.microsoft.portable-executable": {
- source: "iana"
-},
- "application/vnd.microsoft.windows.thumbnail-cache": {
- source: "iana"
-},
- "application/vnd.miele+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.mif": {
- source: "iana",
- extensions: [
- "mif"
- ]
-},
- "application/vnd.minisoft-hp3000-save": {
- source: "iana"
-},
- "application/vnd.mitsubishi.misty-guard.trustweb": {
- source: "iana"
-},
- "application/vnd.mobius.daf": {
- source: "iana",
- extensions: [
- "daf"
- ]
-},
- "application/vnd.mobius.dis": {
- source: "iana",
- extensions: [
- "dis"
- ]
-},
- "application/vnd.mobius.mbk": {
- source: "iana",
- extensions: [
- "mbk"
- ]
-},
- "application/vnd.mobius.mqy": {
- source: "iana",
- extensions: [
- "mqy"
- ]
-},
- "application/vnd.mobius.msl": {
- source: "iana",
- extensions: [
- "msl"
- ]
-},
- "application/vnd.mobius.plc": {
- source: "iana",
- extensions: [
- "plc"
- ]
-},
- "application/vnd.mobius.txf": {
- source: "iana",
- extensions: [
- "txf"
- ]
-},
- "application/vnd.mophun.application": {
- source: "iana",
- extensions: [
- "mpn"
- ]
-},
- "application/vnd.mophun.certificate": {
- source: "iana",
- extensions: [
- "mpc"
- ]
-},
- "application/vnd.motorola.flexsuite": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.adsi": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.fis": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.gotap": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.kmr": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.ttc": {
- source: "iana"
-},
- "application/vnd.motorola.flexsuite.wem": {
- source: "iana"
-},
- "application/vnd.motorola.iprm": {
- source: "iana"
-},
- "application/vnd.mozilla.xul+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xul"
- ]
-},
- "application/vnd.ms-3mfdocument": {
- source: "iana"
-},
- "application/vnd.ms-artgalry": {
- source: "iana",
- extensions: [
- "cil"
- ]
-},
- "application/vnd.ms-asf": {
- source: "iana"
-},
- "application/vnd.ms-cab-compressed": {
- source: "iana",
- extensions: [
- "cab"
- ]
-},
- "application/vnd.ms-color.iccprofile": {
- source: "apache"
-},
- "application/vnd.ms-excel": {
- source: "iana",
- compressible: false,
- extensions: [
- "xls",
- "xlm",
- "xla",
- "xlc",
- "xlt",
- "xlw"
- ]
-},
- "application/vnd.ms-excel.addin.macroenabled.12": {
- source: "iana",
- extensions: [
- "xlam"
- ]
-},
- "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
- source: "iana",
- extensions: [
- "xlsb"
- ]
-},
- "application/vnd.ms-excel.sheet.macroenabled.12": {
- source: "iana",
- extensions: [
- "xlsm"
- ]
-},
- "application/vnd.ms-excel.template.macroenabled.12": {
- source: "iana",
- extensions: [
- "xltm"
- ]
-},
- "application/vnd.ms-fontobject": {
- source: "iana",
- compressible: true,
- extensions: [
- "eot"
- ]
-},
- "application/vnd.ms-htmlhelp": {
- source: "iana",
- extensions: [
- "chm"
- ]
-},
- "application/vnd.ms-ims": {
- source: "iana",
- extensions: [
- "ims"
- ]
-},
- "application/vnd.ms-lrm": {
- source: "iana",
- extensions: [
- "lrm"
- ]
-},
- "application/vnd.ms-office.activex+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ms-officetheme": {
- source: "iana",
- extensions: [
- "thmx"
- ]
-},
- "application/vnd.ms-opentype": {
- source: "apache",
- compressible: true
-},
- "application/vnd.ms-outlook": {
- compressible: false,
- extensions: [
- "msg"
- ]
-},
- "application/vnd.ms-package.obfuscated-opentype": {
- source: "apache"
-},
- "application/vnd.ms-pki.seccat": {
- source: "apache",
- extensions: [
- "cat"
- ]
-},
- "application/vnd.ms-pki.stl": {
- source: "apache",
- extensions: [
- "stl"
- ]
-},
- "application/vnd.ms-playready.initiator+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ms-powerpoint": {
- source: "iana",
- compressible: false,
- extensions: [
- "ppt",
- "pps",
- "pot"
- ]
-},
- "application/vnd.ms-powerpoint.addin.macroenabled.12": {
- source: "iana",
- extensions: [
- "ppam"
- ]
-},
- "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
- source: "iana",
- extensions: [
- "pptm"
- ]
-},
- "application/vnd.ms-powerpoint.slide.macroenabled.12": {
- source: "iana",
- extensions: [
- "sldm"
- ]
-},
- "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
- source: "iana",
- extensions: [
- "ppsm"
- ]
-},
- "application/vnd.ms-powerpoint.template.macroenabled.12": {
- source: "iana",
- extensions: [
- "potm"
- ]
-},
- "application/vnd.ms-printdevicecapabilities+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ms-printing.printticket+xml": {
- source: "apache",
- compressible: true
-},
- "application/vnd.ms-printschematicket+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.ms-project": {
- source: "iana",
- extensions: [
- "mpp",
- "mpt"
- ]
-},
- "application/vnd.ms-tnef": {
- source: "iana"
-},
- "application/vnd.ms-windows.devicepairing": {
- source: "iana"
-},
- "application/vnd.ms-windows.nwprinting.oob": {
- source: "iana"
-},
- "application/vnd.ms-windows.printerpairing": {
- source: "iana"
-},
- "application/vnd.ms-windows.wsd.oob": {
- source: "iana"
-},
- "application/vnd.ms-wmdrm.lic-chlg-req": {
- source: "iana"
-},
- "application/vnd.ms-wmdrm.lic-resp": {
- source: "iana"
-},
- "application/vnd.ms-wmdrm.meter-chlg-req": {
- source: "iana"
-},
- "application/vnd.ms-wmdrm.meter-resp": {
- source: "iana"
-},
- "application/vnd.ms-word.document.macroenabled.12": {
- source: "iana",
- extensions: [
- "docm"
- ]
-},
- "application/vnd.ms-word.template.macroenabled.12": {
- source: "iana",
- extensions: [
- "dotm"
- ]
-},
- "application/vnd.ms-works": {
- source: "iana",
- extensions: [
- "wps",
- "wks",
- "wcm",
- "wdb"
- ]
-},
- "application/vnd.ms-wpl": {
- source: "iana",
- extensions: [
- "wpl"
- ]
-},
- "application/vnd.ms-xpsdocument": {
- source: "iana",
- compressible: false,
- extensions: [
- "xps"
- ]
-},
- "application/vnd.msa-disk-image": {
- source: "iana"
-},
- "application/vnd.mseq": {
- source: "iana",
- extensions: [
- "mseq"
- ]
-},
- "application/vnd.msign": {
- source: "iana"
-},
- "application/vnd.multiad.creator": {
- source: "iana"
-},
- "application/vnd.multiad.creator.cif": {
- source: "iana"
-},
- "application/vnd.music-niff": {
- source: "iana"
-},
- "application/vnd.musician": {
- source: "iana",
- extensions: [
- "mus"
- ]
-},
- "application/vnd.muvee.style": {
- source: "iana",
- extensions: [
- "msty"
- ]
-},
- "application/vnd.mynfc": {
- source: "iana",
- extensions: [
- "taglet"
- ]
-},
- "application/vnd.ncd.control": {
- source: "iana"
-},
- "application/vnd.ncd.reference": {
- source: "iana"
-},
- "application/vnd.nearst.inv+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nebumind.line": {
- source: "iana"
-},
- "application/vnd.nervana": {
- source: "iana"
-},
- "application/vnd.netfpx": {
- source: "iana"
-},
- "application/vnd.neurolanguage.nlu": {
- source: "iana",
- extensions: [
- "nlu"
- ]
-},
- "application/vnd.nimn": {
- source: "iana"
-},
- "application/vnd.nintendo.nitro.rom": {
- source: "iana"
-},
- "application/vnd.nintendo.snes.rom": {
- source: "iana"
-},
- "application/vnd.nitf": {
- source: "iana",
- extensions: [
- "ntf",
- "nitf"
- ]
-},
- "application/vnd.noblenet-directory": {
- source: "iana",
- extensions: [
- "nnd"
- ]
-},
- "application/vnd.noblenet-sealer": {
- source: "iana",
- extensions: [
- "nns"
- ]
-},
- "application/vnd.noblenet-web": {
- source: "iana",
- extensions: [
- "nnw"
- ]
-},
- "application/vnd.nokia.catalogs": {
- source: "iana"
-},
- "application/vnd.nokia.conml+wbxml": {
- source: "iana"
-},
- "application/vnd.nokia.conml+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.iptv.config+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.isds-radio-presets": {
- source: "iana"
-},
- "application/vnd.nokia.landmark+wbxml": {
- source: "iana"
-},
- "application/vnd.nokia.landmark+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.landmarkcollection+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.n-gage.ac+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "ac"
- ]
-},
- "application/vnd.nokia.n-gage.data": {
- source: "iana",
- extensions: [
- "ngdat"
- ]
-},
- "application/vnd.nokia.n-gage.symbian.install": {
- source: "iana",
- extensions: [
- "n-gage"
- ]
-},
- "application/vnd.nokia.ncd": {
- source: "iana"
-},
- "application/vnd.nokia.pcd+wbxml": {
- source: "iana"
-},
- "application/vnd.nokia.pcd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.nokia.radio-preset": {
- source: "iana",
- extensions: [
- "rpst"
- ]
-},
- "application/vnd.nokia.radio-presets": {
- source: "iana",
- extensions: [
- "rpss"
- ]
-},
- "application/vnd.novadigm.edm": {
- source: "iana",
- extensions: [
- "edm"
- ]
-},
- "application/vnd.novadigm.edx": {
- source: "iana",
- extensions: [
- "edx"
- ]
-},
- "application/vnd.novadigm.ext": {
- source: "iana",
- extensions: [
- "ext"
- ]
-},
- "application/vnd.ntt-local.content-share": {
- source: "iana"
-},
- "application/vnd.ntt-local.file-transfer": {
- source: "iana"
-},
- "application/vnd.ntt-local.ogw_remote-access": {
- source: "iana"
-},
- "application/vnd.ntt-local.sip-ta_remote": {
- source: "iana"
-},
- "application/vnd.ntt-local.sip-ta_tcp_stream": {
- source: "iana"
-},
- "application/vnd.oasis.opendocument.chart": {
- source: "iana",
- extensions: [
- "odc"
- ]
-},
- "application/vnd.oasis.opendocument.chart-template": {
- source: "iana",
- extensions: [
- "otc"
- ]
-},
- "application/vnd.oasis.opendocument.database": {
- source: "iana",
- extensions: [
- "odb"
- ]
-},
- "application/vnd.oasis.opendocument.formula": {
- source: "iana",
- extensions: [
- "odf"
- ]
-},
- "application/vnd.oasis.opendocument.formula-template": {
- source: "iana",
- extensions: [
- "odft"
- ]
-},
- "application/vnd.oasis.opendocument.graphics": {
- source: "iana",
- compressible: false,
- extensions: [
- "odg"
- ]
-},
- "application/vnd.oasis.opendocument.graphics-template": {
- source: "iana",
- extensions: [
- "otg"
- ]
-},
- "application/vnd.oasis.opendocument.image": {
- source: "iana",
- extensions: [
- "odi"
- ]
-},
- "application/vnd.oasis.opendocument.image-template": {
- source: "iana",
- extensions: [
- "oti"
- ]
-},
- "application/vnd.oasis.opendocument.presentation": {
- source: "iana",
- compressible: false,
- extensions: [
- "odp"
- ]
-},
- "application/vnd.oasis.opendocument.presentation-template": {
- source: "iana",
- extensions: [
- "otp"
- ]
-},
- "application/vnd.oasis.opendocument.spreadsheet": {
- source: "iana",
- compressible: false,
- extensions: [
- "ods"
- ]
-},
- "application/vnd.oasis.opendocument.spreadsheet-template": {
- source: "iana",
- extensions: [
- "ots"
- ]
-},
- "application/vnd.oasis.opendocument.text": {
- source: "iana",
- compressible: false,
- extensions: [
- "odt"
- ]
-},
- "application/vnd.oasis.opendocument.text-master": {
- source: "iana",
- extensions: [
- "odm"
- ]
-},
- "application/vnd.oasis.opendocument.text-template": {
- source: "iana",
- extensions: [
- "ott"
- ]
-},
- "application/vnd.oasis.opendocument.text-web": {
- source: "iana",
- extensions: [
- "oth"
- ]
-},
- "application/vnd.obn": {
- source: "iana"
-},
- "application/vnd.ocf+cbor": {
- source: "iana"
-},
- "application/vnd.oci.image.manifest.v1+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oftn.l10n+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.contentaccessdownload+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.contentaccessstreaming+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.cspg-hexbinary": {
- source: "iana"
-},
- "application/vnd.oipf.dae.svg+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.dae.xhtml+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.mippvcontrolmessage+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.pae.gem": {
- source: "iana"
-},
- "application/vnd.oipf.spdiscovery+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.spdlist+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.ueprofile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oipf.userprofile+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.olpc-sugar": {
- source: "iana",
- extensions: [
- "xo"
- ]
-},
- "application/vnd.oma-scws-config": {
- source: "iana"
-},
- "application/vnd.oma-scws-http-request": {
- source: "iana"
-},
- "application/vnd.oma-scws-http-response": {
- source: "iana"
-},
- "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.drm-trigger+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.imd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.ltkm": {
- source: "iana"
-},
- "application/vnd.oma.bcast.notification+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.provisioningtrigger": {
- source: "iana"
-},
- "application/vnd.oma.bcast.sgboot": {
- source: "iana"
-},
- "application/vnd.oma.bcast.sgdd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.sgdu": {
- source: "iana"
-},
- "application/vnd.oma.bcast.simple-symbol-container": {
- source: "iana"
-},
- "application/vnd.oma.bcast.smartcard-trigger+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.sprov+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.bcast.stkm": {
- source: "iana"
-},
- "application/vnd.oma.cab-address-book+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.cab-feature-handler+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.cab-pcc+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.cab-subs-invite+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.cab-user-prefs+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.dcd": {
- source: "iana"
-},
- "application/vnd.oma.dcdc": {
- source: "iana"
-},
- "application/vnd.oma.dd2+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "dd2"
- ]
-},
- "application/vnd.oma.drm.risd+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.group-usage-list+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.lwm2m+cbor": {
- source: "iana"
-},
- "application/vnd.oma.lwm2m+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.lwm2m+tlv": {
- source: "iana"
-},
- "application/vnd.oma.pal+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.detailed-progress-report+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.final-report+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.groups+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.invocation-descriptor+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.poc.optimized-progress-report+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.push": {
- source: "iana"
-},
- "application/vnd.oma.scidm.messages+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oma.xcap-directory+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.omads-email+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/vnd.omads-file+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/vnd.omads-folder+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/vnd.omaloc-supl-init": {
- source: "iana"
-},
- "application/vnd.onepager": {
- source: "iana"
-},
- "application/vnd.onepagertamp": {
- source: "iana"
-},
- "application/vnd.onepagertamx": {
- source: "iana"
-},
- "application/vnd.onepagertat": {
- source: "iana"
-},
- "application/vnd.onepagertatp": {
- source: "iana"
-},
- "application/vnd.onepagertatx": {
- source: "iana"
-},
- "application/vnd.openblox.game+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "obgx"
- ]
-},
- "application/vnd.openblox.game-binary": {
- source: "iana"
-},
- "application/vnd.openeye.oeb": {
- source: "iana"
-},
- "application/vnd.openofficeorg.extension": {
- source: "apache",
- extensions: [
- "oxt"
- ]
-},
- "application/vnd.openstreetmap.data+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "osm"
- ]
-},
- "application/vnd.opentimestamps.ots": {
- source: "iana"
-},
- "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawing+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
- source: "iana",
- compressible: false,
- extensions: [
- "pptx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slide": {
- source: "iana",
- extensions: [
- "sldx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
- source: "iana",
- extensions: [
- "ppsx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.template": {
- source: "iana",
- extensions: [
- "potx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
- source: "iana",
- compressible: false,
- extensions: [
- "xlsx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
- source: "iana",
- extensions: [
- "xltx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.theme+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.vmldrawing": {
- source: "iana"
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
- source: "iana",
- compressible: false,
- extensions: [
- "docx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
- source: "iana",
- extensions: [
- "dotx"
- ]
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-package.core-properties+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.openxmlformats-package.relationships+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oracle.resource+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.orange.indata": {
- source: "iana"
-},
- "application/vnd.osa.netdeploy": {
- source: "iana"
-},
- "application/vnd.osgeo.mapguide.package": {
- source: "iana",
- extensions: [
- "mgp"
- ]
-},
- "application/vnd.osgi.bundle": {
- source: "iana"
-},
- "application/vnd.osgi.dp": {
- source: "iana",
- extensions: [
- "dp"
- ]
-},
- "application/vnd.osgi.subsystem": {
- source: "iana",
- extensions: [
- "esa"
- ]
-},
- "application/vnd.otps.ct-kip+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.oxli.countgraph": {
- source: "iana"
-},
- "application/vnd.pagerduty+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.palm": {
- source: "iana",
- extensions: [
- "pdb",
- "pqa",
- "oprc"
- ]
-},
- "application/vnd.panoply": {
- source: "iana"
-},
- "application/vnd.paos.xml": {
- source: "iana"
-},
- "application/vnd.patentdive": {
- source: "iana"
-},
- "application/vnd.patientecommsdoc": {
- source: "iana"
-},
- "application/vnd.pawaafile": {
- source: "iana",
- extensions: [
- "paw"
- ]
-},
- "application/vnd.pcos": {
- source: "iana"
-},
- "application/vnd.pg.format": {
- source: "iana",
- extensions: [
- "str"
- ]
-},
- "application/vnd.pg.osasli": {
- source: "iana",
- extensions: [
- "ei6"
- ]
-},
- "application/vnd.piaccess.application-licence": {
- source: "iana"
-},
- "application/vnd.picsel": {
- source: "iana",
- extensions: [
- "efif"
- ]
-},
- "application/vnd.pmi.widget": {
- source: "iana",
- extensions: [
- "wg"
- ]
-},
- "application/vnd.poc.group-advertisement+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.pocketlearn": {
- source: "iana",
- extensions: [
- "plf"
- ]
-},
- "application/vnd.powerbuilder6": {
- source: "iana",
- extensions: [
- "pbd"
- ]
-},
- "application/vnd.powerbuilder6-s": {
- source: "iana"
-},
- "application/vnd.powerbuilder7": {
- source: "iana"
-},
- "application/vnd.powerbuilder7-s": {
- source: "iana"
-},
- "application/vnd.powerbuilder75": {
- source: "iana"
-},
- "application/vnd.powerbuilder75-s": {
- source: "iana"
-},
- "application/vnd.preminet": {
- source: "iana"
-},
- "application/vnd.previewsystems.box": {
- source: "iana",
- extensions: [
- "box"
- ]
-},
- "application/vnd.proteus.magazine": {
- source: "iana",
- extensions: [
- "mgz"
- ]
-},
- "application/vnd.psfs": {
- source: "iana"
-},
- "application/vnd.publishare-delta-tree": {
- source: "iana",
- extensions: [
- "qps"
- ]
-},
- "application/vnd.pvi.ptid1": {
- source: "iana",
- extensions: [
- "ptid"
- ]
-},
- "application/vnd.pwg-multiplexed": {
- source: "iana"
-},
- "application/vnd.pwg-xhtml-print+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.qualcomm.brew-app-res": {
- source: "iana"
-},
- "application/vnd.quarantainenet": {
- source: "iana"
-},
- "application/vnd.quark.quarkxpress": {
- source: "iana",
- extensions: [
- "qxd",
- "qxt",
- "qwd",
- "qwt",
- "qxl",
- "qxb"
- ]
-},
- "application/vnd.quobject-quoxdocument": {
- source: "iana"
-},
- "application/vnd.radisys.moml+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit-conf+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit-conn+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit-dialog+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-audit-stream+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-conf+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-base+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-fax-detect+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-group+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-speech+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.radisys.msml-dialog-transform+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.rainstor.data": {
- source: "iana"
-},
- "application/vnd.rapid": {
- source: "iana"
-},
- "application/vnd.rar": {
- source: "iana",
- extensions: [
- "rar"
- ]
-},
- "application/vnd.realvnc.bed": {
- source: "iana",
- extensions: [
- "bed"
- ]
-},
- "application/vnd.recordare.musicxml": {
- source: "iana",
- extensions: [
- "mxl"
- ]
-},
- "application/vnd.recordare.musicxml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "musicxml"
- ]
-},
- "application/vnd.renlearn.rlprint": {
- source: "iana"
-},
- "application/vnd.resilient.logic": {
- source: "iana"
-},
- "application/vnd.restful+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.rig.cryptonote": {
- source: "iana",
- extensions: [
- "cryptonote"
- ]
-},
- "application/vnd.rim.cod": {
- source: "apache",
- extensions: [
- "cod"
- ]
-},
- "application/vnd.rn-realmedia": {
- source: "apache",
- extensions: [
- "rm"
- ]
-},
- "application/vnd.rn-realmedia-vbr": {
- source: "apache",
- extensions: [
- "rmvb"
- ]
-},
- "application/vnd.route66.link66+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "link66"
- ]
-},
- "application/vnd.rs-274x": {
- source: "iana"
-},
- "application/vnd.ruckus.download": {
- source: "iana"
-},
- "application/vnd.s3sms": {
- source: "iana"
-},
- "application/vnd.sailingtracker.track": {
- source: "iana",
- extensions: [
- "st"
- ]
-},
- "application/vnd.sar": {
- source: "iana"
-},
- "application/vnd.sbm.cid": {
- source: "iana"
-},
- "application/vnd.sbm.mid2": {
- source: "iana"
-},
- "application/vnd.scribus": {
- source: "iana"
-},
- "application/vnd.sealed.3df": {
- source: "iana"
-},
- "application/vnd.sealed.csf": {
- source: "iana"
-},
- "application/vnd.sealed.doc": {
- source: "iana"
-},
- "application/vnd.sealed.eml": {
- source: "iana"
-},
- "application/vnd.sealed.mht": {
- source: "iana"
-},
- "application/vnd.sealed.net": {
- source: "iana"
-},
- "application/vnd.sealed.ppt": {
- source: "iana"
-},
- "application/vnd.sealed.tiff": {
- source: "iana"
-},
- "application/vnd.sealed.xls": {
- source: "iana"
-},
- "application/vnd.sealedmedia.softseal.html": {
- source: "iana"
-},
- "application/vnd.sealedmedia.softseal.pdf": {
- source: "iana"
-},
- "application/vnd.seemail": {
- source: "iana",
- extensions: [
- "see"
- ]
-},
- "application/vnd.seis+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.sema": {
- source: "iana",
- extensions: [
- "sema"
- ]
-},
- "application/vnd.semd": {
- source: "iana",
- extensions: [
- "semd"
- ]
-},
- "application/vnd.semf": {
- source: "iana",
- extensions: [
- "semf"
- ]
-},
- "application/vnd.shade-save-file": {
- source: "iana"
-},
- "application/vnd.shana.informed.formdata": {
- source: "iana",
- extensions: [
- "ifm"
- ]
-},
- "application/vnd.shana.informed.formtemplate": {
- source: "iana",
- extensions: [
- "itp"
- ]
-},
- "application/vnd.shana.informed.interchange": {
- source: "iana",
- extensions: [
- "iif"
- ]
-},
- "application/vnd.shana.informed.package": {
- source: "iana",
- extensions: [
- "ipk"
- ]
-},
- "application/vnd.shootproof+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.shopkick+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.shp": {
- source: "iana"
-},
- "application/vnd.shx": {
- source: "iana"
-},
- "application/vnd.sigrok.session": {
- source: "iana"
-},
- "application/vnd.simtech-mindmapper": {
- source: "iana",
- extensions: [
- "twd",
- "twds"
- ]
-},
- "application/vnd.siren+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.smaf": {
- source: "iana",
- extensions: [
- "mmf"
- ]
-},
- "application/vnd.smart.notebook": {
- source: "iana"
-},
- "application/vnd.smart.teacher": {
- source: "iana",
- extensions: [
- "teacher"
- ]
-},
- "application/vnd.snesdev-page-table": {
- source: "iana"
-},
- "application/vnd.software602.filler.form+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "fo"
- ]
-},
- "application/vnd.software602.filler.form-xml-zip": {
- source: "iana"
-},
- "application/vnd.solent.sdkm+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "sdkm",
- "sdkd"
- ]
-},
- "application/vnd.spotfire.dxp": {
- source: "iana",
- extensions: [
- "dxp"
- ]
-},
- "application/vnd.spotfire.sfs": {
- source: "iana",
- extensions: [
- "sfs"
- ]
-},
- "application/vnd.sqlite3": {
- source: "iana"
-},
- "application/vnd.sss-cod": {
- source: "iana"
-},
- "application/vnd.sss-dtf": {
- source: "iana"
-},
- "application/vnd.sss-ntf": {
- source: "iana"
-},
- "application/vnd.stardivision.calc": {
- source: "apache",
- extensions: [
- "sdc"
- ]
-},
- "application/vnd.stardivision.draw": {
- source: "apache",
- extensions: [
- "sda"
- ]
-},
- "application/vnd.stardivision.impress": {
- source: "apache",
- extensions: [
- "sdd"
- ]
-},
- "application/vnd.stardivision.math": {
- source: "apache",
- extensions: [
- "smf"
- ]
-},
- "application/vnd.stardivision.writer": {
- source: "apache",
- extensions: [
- "sdw",
- "vor"
- ]
-},
- "application/vnd.stardivision.writer-global": {
- source: "apache",
- extensions: [
- "sgl"
- ]
-},
- "application/vnd.stepmania.package": {
- source: "iana",
- extensions: [
- "smzip"
- ]
-},
- "application/vnd.stepmania.stepchart": {
- source: "iana",
- extensions: [
- "sm"
- ]
-},
- "application/vnd.street-stream": {
- source: "iana"
-},
- "application/vnd.sun.wadl+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "wadl"
- ]
-},
- "application/vnd.sun.xml.calc": {
- source: "apache",
- extensions: [
- "sxc"
- ]
-},
- "application/vnd.sun.xml.calc.template": {
- source: "apache",
- extensions: [
- "stc"
- ]
-},
- "application/vnd.sun.xml.draw": {
- source: "apache",
- extensions: [
- "sxd"
- ]
-},
- "application/vnd.sun.xml.draw.template": {
- source: "apache",
- extensions: [
- "std"
- ]
-},
- "application/vnd.sun.xml.impress": {
- source: "apache",
- extensions: [
- "sxi"
- ]
-},
- "application/vnd.sun.xml.impress.template": {
- source: "apache",
- extensions: [
- "sti"
- ]
-},
- "application/vnd.sun.xml.math": {
- source: "apache",
- extensions: [
- "sxm"
- ]
-},
- "application/vnd.sun.xml.writer": {
- source: "apache",
- extensions: [
- "sxw"
- ]
-},
- "application/vnd.sun.xml.writer.global": {
- source: "apache",
- extensions: [
- "sxg"
- ]
-},
- "application/vnd.sun.xml.writer.template": {
- source: "apache",
- extensions: [
- "stw"
- ]
-},
- "application/vnd.sus-calendar": {
- source: "iana",
- extensions: [
- "sus",
- "susp"
- ]
-},
- "application/vnd.svd": {
- source: "iana",
- extensions: [
- "svd"
- ]
-},
- "application/vnd.swiftview-ics": {
- source: "iana"
-},
- "application/vnd.sycle+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.symbian.install": {
- source: "apache",
- extensions: [
- "sis",
- "sisx"
- ]
-},
- "application/vnd.syncml+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "xsm"
- ]
-},
- "application/vnd.syncml.dm+wbxml": {
- source: "iana",
- charset: "UTF-8",
- extensions: [
- "bdm"
- ]
-},
- "application/vnd.syncml.dm+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "xdm"
- ]
-},
- "application/vnd.syncml.dm.notification": {
- source: "iana"
-},
- "application/vnd.syncml.dmddf+wbxml": {
- source: "iana"
-},
- "application/vnd.syncml.dmddf+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "ddf"
- ]
-},
- "application/vnd.syncml.dmtnds+wbxml": {
- source: "iana"
-},
- "application/vnd.syncml.dmtnds+xml": {
- source: "iana",
- charset: "UTF-8",
- compressible: true
-},
- "application/vnd.syncml.ds.notification": {
- source: "iana"
-},
- "application/vnd.tableschema+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.tao.intent-module-archive": {
- source: "iana",
- extensions: [
- "tao"
- ]
-},
- "application/vnd.tcpdump.pcap": {
- source: "iana",
- extensions: [
- "pcap",
- "cap",
- "dmp"
- ]
-},
- "application/vnd.think-cell.ppttc+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.tmd.mediaflex.api+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.tml": {
- source: "iana"
-},
- "application/vnd.tmobile-livetv": {
- source: "iana",
- extensions: [
- "tmo"
- ]
-},
- "application/vnd.tri.onesource": {
- source: "iana"
-},
- "application/vnd.trid.tpt": {
- source: "iana",
- extensions: [
- "tpt"
- ]
-},
- "application/vnd.triscape.mxs": {
- source: "iana",
- extensions: [
- "mxs"
- ]
-},
- "application/vnd.trueapp": {
- source: "iana",
- extensions: [
- "tra"
- ]
-},
- "application/vnd.truedoc": {
- source: "iana"
-},
- "application/vnd.ubisoft.webplayer": {
- source: "iana"
-},
- "application/vnd.ufdl": {
- source: "iana",
- extensions: [
- "ufd",
- "ufdl"
- ]
-},
- "application/vnd.uiq.theme": {
- source: "iana",
- extensions: [
- "utz"
- ]
-},
- "application/vnd.umajin": {
- source: "iana",
- extensions: [
- "umj"
- ]
-},
- "application/vnd.unity": {
- source: "iana",
- extensions: [
- "unityweb"
- ]
-},
- "application/vnd.uoml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "uoml"
- ]
-},
- "application/vnd.uplanet.alert": {
- source: "iana"
-},
- "application/vnd.uplanet.alert-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.bearer-choice": {
- source: "iana"
-},
- "application/vnd.uplanet.bearer-choice-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.cacheop": {
- source: "iana"
-},
- "application/vnd.uplanet.cacheop-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.channel": {
- source: "iana"
-},
- "application/vnd.uplanet.channel-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.list": {
- source: "iana"
-},
- "application/vnd.uplanet.list-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.listcmd": {
- source: "iana"
-},
- "application/vnd.uplanet.listcmd-wbxml": {
- source: "iana"
-},
- "application/vnd.uplanet.signal": {
- source: "iana"
-},
- "application/vnd.uri-map": {
- source: "iana"
-},
- "application/vnd.valve.source.material": {
- source: "iana"
-},
- "application/vnd.vcx": {
- source: "iana",
- extensions: [
- "vcx"
- ]
-},
- "application/vnd.vd-study": {
- source: "iana"
-},
- "application/vnd.vectorworks": {
- source: "iana"
-},
- "application/vnd.vel+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.verimatrix.vcas": {
- source: "iana"
-},
- "application/vnd.veritone.aion+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.veryant.thin": {
- source: "iana"
-},
- "application/vnd.ves.encrypted": {
- source: "iana"
-},
- "application/vnd.vidsoft.vidconference": {
- source: "iana"
-},
- "application/vnd.visio": {
- source: "iana",
- extensions: [
- "vsd",
- "vst",
- "vss",
- "vsw"
- ]
-},
- "application/vnd.visionary": {
- source: "iana",
- extensions: [
- "vis"
- ]
-},
- "application/vnd.vividence.scriptfile": {
- source: "iana"
-},
- "application/vnd.vsf": {
- source: "iana",
- extensions: [
- "vsf"
- ]
-},
- "application/vnd.wap.sic": {
- source: "iana"
-},
- "application/vnd.wap.slc": {
- source: "iana"
-},
- "application/vnd.wap.wbxml": {
- source: "iana",
- charset: "UTF-8",
- extensions: [
- "wbxml"
- ]
-},
- "application/vnd.wap.wmlc": {
- source: "iana",
- extensions: [
- "wmlc"
- ]
-},
- "application/vnd.wap.wmlscriptc": {
- source: "iana",
- extensions: [
- "wmlsc"
- ]
-},
- "application/vnd.webturbo": {
- source: "iana",
- extensions: [
- "wtb"
- ]
-},
- "application/vnd.wfa.dpp": {
- source: "iana"
-},
- "application/vnd.wfa.p2p": {
- source: "iana"
-},
- "application/vnd.wfa.wsc": {
- source: "iana"
-},
- "application/vnd.windows.devicepairing": {
- source: "iana"
-},
- "application/vnd.wmc": {
- source: "iana"
-},
- "application/vnd.wmf.bootstrap": {
- source: "iana"
-},
- "application/vnd.wolfram.mathematica": {
- source: "iana"
-},
- "application/vnd.wolfram.mathematica.package": {
- source: "iana"
-},
- "application/vnd.wolfram.player": {
- source: "iana",
- extensions: [
- "nbp"
- ]
-},
- "application/vnd.wordperfect": {
- source: "iana",
- extensions: [
- "wpd"
- ]
-},
- "application/vnd.wqd": {
- source: "iana",
- extensions: [
- "wqd"
- ]
-},
- "application/vnd.wrq-hp3000-labelled": {
- source: "iana"
-},
- "application/vnd.wt.stf": {
- source: "iana",
- extensions: [
- "stf"
- ]
-},
- "application/vnd.wv.csp+wbxml": {
- source: "iana"
-},
- "application/vnd.wv.csp+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.wv.ssp+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.xacml+json": {
- source: "iana",
- compressible: true
-},
- "application/vnd.xara": {
- source: "iana",
- extensions: [
- "xar"
- ]
-},
- "application/vnd.xfdl": {
- source: "iana",
- extensions: [
- "xfdl"
- ]
-},
- "application/vnd.xfdl.webform": {
- source: "iana"
-},
- "application/vnd.xmi+xml": {
- source: "iana",
- compressible: true
-},
- "application/vnd.xmpie.cpkg": {
- source: "iana"
-},
- "application/vnd.xmpie.dpkg": {
- source: "iana"
-},
- "application/vnd.xmpie.plan": {
- source: "iana"
-},
- "application/vnd.xmpie.ppkg": {
- source: "iana"
-},
- "application/vnd.xmpie.xlim": {
- source: "iana"
-},
- "application/vnd.yamaha.hv-dic": {
- source: "iana",
- extensions: [
- "hvd"
- ]
-},
- "application/vnd.yamaha.hv-script": {
- source: "iana",
- extensions: [
- "hvs"
- ]
-},
- "application/vnd.yamaha.hv-voice": {
- source: "iana",
- extensions: [
- "hvp"
- ]
-},
- "application/vnd.yamaha.openscoreformat": {
- source: "iana",
- extensions: [
- "osf"
- ]
-},
- "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "osfpvg"
- ]
-},
- "application/vnd.yamaha.remote-setup": {
- source: "iana"
-},
- "application/vnd.yamaha.smaf-audio": {
- source: "iana",
- extensions: [
- "saf"
- ]
-},
- "application/vnd.yamaha.smaf-phrase": {
- source: "iana",
- extensions: [
- "spf"
- ]
-},
- "application/vnd.yamaha.through-ngn": {
- source: "iana"
-},
- "application/vnd.yamaha.tunnel-udpencap": {
- source: "iana"
-},
- "application/vnd.yaoweme": {
- source: "iana"
-},
- "application/vnd.yellowriver-custom-menu": {
- source: "iana",
- extensions: [
- "cmp"
- ]
-},
- "application/vnd.youtube.yt": {
- source: "iana"
-},
- "application/vnd.zul": {
- source: "iana",
- extensions: [
- "zir",
- "zirz"
- ]
-},
- "application/vnd.zzazz.deck+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "zaz"
- ]
-},
- "application/voicexml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "vxml"
- ]
-},
- "application/voucher-cms+json": {
- source: "iana",
- compressible: true
-},
- "application/vq-rtcpxr": {
- source: "iana"
-},
- "application/wasm": {
- source: "iana",
- compressible: true,
- extensions: [
- "wasm"
- ]
-},
- "application/watcherinfo+xml": {
- source: "iana",
- compressible: true
-},
- "application/webpush-options+json": {
- source: "iana",
- compressible: true
-},
- "application/whoispp-query": {
- source: "iana"
-},
- "application/whoispp-response": {
- source: "iana"
-},
- "application/widget": {
- source: "iana",
- extensions: [
- "wgt"
- ]
-},
- "application/winhlp": {
- source: "apache",
- extensions: [
- "hlp"
- ]
-},
- "application/wita": {
- source: "iana"
-},
- "application/wordperfect5.1": {
- source: "iana"
-},
- "application/wsdl+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "wsdl"
- ]
-},
- "application/wspolicy+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "wspolicy"
- ]
-},
- "application/x-7z-compressed": {
- source: "apache",
- compressible: false,
- extensions: [
- "7z"
- ]
-},
- "application/x-abiword": {
- source: "apache",
- extensions: [
- "abw"
- ]
-},
- "application/x-ace-compressed": {
- source: "apache",
- extensions: [
- "ace"
- ]
-},
- "application/x-amf": {
- source: "apache"
-},
- "application/x-apple-diskimage": {
- source: "apache",
- extensions: [
- "dmg"
- ]
-},
- "application/x-arj": {
- compressible: false,
- extensions: [
- "arj"
- ]
-},
- "application/x-authorware-bin": {
- source: "apache",
- extensions: [
- "aab",
- "x32",
- "u32",
- "vox"
- ]
-},
- "application/x-authorware-map": {
- source: "apache",
- extensions: [
- "aam"
- ]
-},
- "application/x-authorware-seg": {
- source: "apache",
- extensions: [
- "aas"
- ]
-},
- "application/x-bcpio": {
- source: "apache",
- extensions: [
- "bcpio"
- ]
-},
- "application/x-bdoc": {
- compressible: false,
- extensions: [
- "bdoc"
- ]
-},
- "application/x-bittorrent": {
- source: "apache",
- extensions: [
- "torrent"
- ]
-},
- "application/x-blorb": {
- source: "apache",
- extensions: [
- "blb",
- "blorb"
- ]
-},
- "application/x-bzip": {
- source: "apache",
- compressible: false,
- extensions: [
- "bz"
- ]
-},
- "application/x-bzip2": {
- source: "apache",
- compressible: false,
- extensions: [
- "bz2",
- "boz"
- ]
-},
- "application/x-cbr": {
- source: "apache",
- extensions: [
- "cbr",
- "cba",
- "cbt",
- "cbz",
- "cb7"
- ]
-},
- "application/x-cdlink": {
- source: "apache",
- extensions: [
- "vcd"
- ]
-},
- "application/x-cfs-compressed": {
- source: "apache",
- extensions: [
- "cfs"
- ]
-},
- "application/x-chat": {
- source: "apache",
- extensions: [
- "chat"
- ]
-},
- "application/x-chess-pgn": {
- source: "apache",
- extensions: [
- "pgn"
- ]
-},
- "application/x-chrome-extension": {
- extensions: [
- "crx"
- ]
-},
- "application/x-cocoa": {
- source: "nginx",
- extensions: [
- "cco"
- ]
-},
- "application/x-compress": {
- source: "apache"
-},
- "application/x-conference": {
- source: "apache",
- extensions: [
- "nsc"
- ]
-},
- "application/x-cpio": {
- source: "apache",
- extensions: [
- "cpio"
- ]
-},
- "application/x-csh": {
- source: "apache",
- extensions: [
- "csh"
- ]
-},
- "application/x-deb": {
- compressible: false
-},
- "application/x-debian-package": {
- source: "apache",
- extensions: [
- "deb",
- "udeb"
- ]
-},
- "application/x-dgc-compressed": {
- source: "apache",
- extensions: [
- "dgc"
- ]
-},
- "application/x-director": {
- source: "apache",
- extensions: [
- "dir",
- "dcr",
- "dxr",
- "cst",
- "cct",
- "cxt",
- "w3d",
- "fgd",
- "swa"
- ]
-},
- "application/x-doom": {
- source: "apache",
- extensions: [
- "wad"
- ]
-},
- "application/x-dtbncx+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "ncx"
- ]
-},
- "application/x-dtbook+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "dtb"
- ]
-},
- "application/x-dtbresource+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "res"
- ]
-},
- "application/x-dvi": {
- source: "apache",
- compressible: false,
- extensions: [
- "dvi"
- ]
-},
- "application/x-envoy": {
- source: "apache",
- extensions: [
- "evy"
- ]
-},
- "application/x-eva": {
- source: "apache",
- extensions: [
- "eva"
- ]
-},
- "application/x-font-bdf": {
- source: "apache",
- extensions: [
- "bdf"
- ]
-},
- "application/x-font-dos": {
- source: "apache"
-},
- "application/x-font-framemaker": {
- source: "apache"
-},
- "application/x-font-ghostscript": {
- source: "apache",
- extensions: [
- "gsf"
- ]
-},
- "application/x-font-libgrx": {
- source: "apache"
-},
- "application/x-font-linux-psf": {
- source: "apache",
- extensions: [
- "psf"
- ]
-},
- "application/x-font-pcf": {
- source: "apache",
- extensions: [
- "pcf"
- ]
-},
- "application/x-font-snf": {
- source: "apache",
- extensions: [
- "snf"
- ]
-},
- "application/x-font-speedo": {
- source: "apache"
-},
- "application/x-font-sunos-news": {
- source: "apache"
-},
- "application/x-font-type1": {
- source: "apache",
- extensions: [
- "pfa",
- "pfb",
- "pfm",
- "afm"
- ]
-},
- "application/x-font-vfont": {
- source: "apache"
-},
- "application/x-freearc": {
- source: "apache",
- extensions: [
- "arc"
- ]
-},
- "application/x-futuresplash": {
- source: "apache",
- extensions: [
- "spl"
- ]
-},
- "application/x-gca-compressed": {
- source: "apache",
- extensions: [
- "gca"
- ]
-},
- "application/x-glulx": {
- source: "apache",
- extensions: [
- "ulx"
- ]
-},
- "application/x-gnumeric": {
- source: "apache",
- extensions: [
- "gnumeric"
- ]
-},
- "application/x-gramps-xml": {
- source: "apache",
- extensions: [
- "gramps"
- ]
-},
- "application/x-gtar": {
- source: "apache",
- extensions: [
- "gtar"
- ]
-},
- "application/x-gzip": {
- source: "apache"
-},
- "application/x-hdf": {
- source: "apache",
- extensions: [
- "hdf"
- ]
-},
- "application/x-httpd-php": {
- compressible: true,
- extensions: [
- "php"
- ]
-},
- "application/x-install-instructions": {
- source: "apache",
- extensions: [
- "install"
- ]
-},
- "application/x-iso9660-image": {
- source: "apache",
- extensions: [
- "iso"
- ]
-},
- "application/x-iwork-keynote-sffkey": {
- extensions: [
- "key"
- ]
-},
- "application/x-iwork-numbers-sffnumbers": {
- extensions: [
- "numbers"
- ]
-},
- "application/x-iwork-pages-sffpages": {
- extensions: [
- "pages"
- ]
-},
- "application/x-java-archive-diff": {
- source: "nginx",
- extensions: [
- "jardiff"
- ]
-},
- "application/x-java-jnlp-file": {
- source: "apache",
- compressible: false,
- extensions: [
- "jnlp"
- ]
-},
- "application/x-javascript": {
- compressible: true
-},
- "application/x-keepass2": {
- extensions: [
- "kdbx"
- ]
-},
- "application/x-latex": {
- source: "apache",
- compressible: false,
- extensions: [
- "latex"
- ]
-},
- "application/x-lua-bytecode": {
- extensions: [
- "luac"
- ]
-},
- "application/x-lzh-compressed": {
- source: "apache",
- extensions: [
- "lzh",
- "lha"
- ]
-},
- "application/x-makeself": {
- source: "nginx",
- extensions: [
- "run"
- ]
-},
- "application/x-mie": {
- source: "apache",
- extensions: [
- "mie"
- ]
-},
- "application/x-mobipocket-ebook": {
- source: "apache",
- extensions: [
- "prc",
- "mobi"
- ]
-},
- "application/x-mpegurl": {
- compressible: false
-},
- "application/x-ms-application": {
- source: "apache",
- extensions: [
- "application"
- ]
-},
- "application/x-ms-shortcut": {
- source: "apache",
- extensions: [
- "lnk"
- ]
-},
- "application/x-ms-wmd": {
- source: "apache",
- extensions: [
- "wmd"
- ]
-},
- "application/x-ms-wmz": {
- source: "apache",
- extensions: [
- "wmz"
- ]
-},
- "application/x-ms-xbap": {
- source: "apache",
- extensions: [
- "xbap"
- ]
-},
- "application/x-msaccess": {
- source: "apache",
- extensions: [
- "mdb"
- ]
-},
- "application/x-msbinder": {
- source: "apache",
- extensions: [
- "obd"
- ]
-},
- "application/x-mscardfile": {
- source: "apache",
- extensions: [
- "crd"
- ]
-},
- "application/x-msclip": {
- source: "apache",
- extensions: [
- "clp"
- ]
-},
- "application/x-msdos-program": {
- extensions: [
- "exe"
- ]
-},
- "application/x-msdownload": {
- source: "apache",
- extensions: [
- "exe",
- "dll",
- "com",
- "bat",
- "msi"
- ]
-},
- "application/x-msmediaview": {
- source: "apache",
- extensions: [
- "mvb",
- "m13",
- "m14"
- ]
-},
- "application/x-msmetafile": {
- source: "apache",
- extensions: [
- "wmf",
- "wmz",
- "emf",
- "emz"
- ]
-},
- "application/x-msmoney": {
- source: "apache",
- extensions: [
- "mny"
- ]
-},
- "application/x-mspublisher": {
- source: "apache",
- extensions: [
- "pub"
- ]
-},
- "application/x-msschedule": {
- source: "apache",
- extensions: [
- "scd"
- ]
-},
- "application/x-msterminal": {
- source: "apache",
- extensions: [
- "trm"
- ]
-},
- "application/x-mswrite": {
- source: "apache",
- extensions: [
- "wri"
- ]
-},
- "application/x-netcdf": {
- source: "apache",
- extensions: [
- "nc",
- "cdf"
- ]
-},
- "application/x-ns-proxy-autoconfig": {
- compressible: true,
- extensions: [
- "pac"
- ]
-},
- "application/x-nzb": {
- source: "apache",
- extensions: [
- "nzb"
- ]
-},
- "application/x-perl": {
- source: "nginx",
- extensions: [
- "pl",
- "pm"
- ]
-},
- "application/x-pilot": {
- source: "nginx",
- extensions: [
- "prc",
- "pdb"
- ]
-},
- "application/x-pkcs12": {
- source: "apache",
- compressible: false,
- extensions: [
- "p12",
- "pfx"
- ]
-},
- "application/x-pkcs7-certificates": {
- source: "apache",
- extensions: [
- "p7b",
- "spc"
- ]
-},
- "application/x-pkcs7-certreqresp": {
- source: "apache",
- extensions: [
- "p7r"
- ]
-},
- "application/x-pki-message": {
- source: "iana"
-},
- "application/x-rar-compressed": {
- source: "apache",
- compressible: false,
- extensions: [
- "rar"
- ]
-},
- "application/x-redhat-package-manager": {
- source: "nginx",
- extensions: [
- "rpm"
- ]
-},
- "application/x-research-info-systems": {
- source: "apache",
- extensions: [
- "ris"
- ]
-},
- "application/x-sea": {
- source: "nginx",
- extensions: [
- "sea"
- ]
-},
- "application/x-sh": {
- source: "apache",
- compressible: true,
- extensions: [
- "sh"
- ]
-},
- "application/x-shar": {
- source: "apache",
- extensions: [
- "shar"
- ]
-},
- "application/x-shockwave-flash": {
- source: "apache",
- compressible: false,
- extensions: [
- "swf"
- ]
-},
- "application/x-silverlight-app": {
- source: "apache",
- extensions: [
- "xap"
- ]
-},
- "application/x-sql": {
- source: "apache",
- extensions: [
- "sql"
- ]
-},
- "application/x-stuffit": {
- source: "apache",
- compressible: false,
- extensions: [
- "sit"
- ]
-},
- "application/x-stuffitx": {
- source: "apache",
- extensions: [
- "sitx"
- ]
-},
- "application/x-subrip": {
- source: "apache",
- extensions: [
- "srt"
- ]
-},
- "application/x-sv4cpio": {
- source: "apache",
- extensions: [
- "sv4cpio"
- ]
-},
- "application/x-sv4crc": {
- source: "apache",
- extensions: [
- "sv4crc"
- ]
-},
- "application/x-t3vm-image": {
- source: "apache",
- extensions: [
- "t3"
- ]
-},
- "application/x-tads": {
- source: "apache",
- extensions: [
- "gam"
- ]
-},
- "application/x-tar": {
- source: "apache",
- compressible: true,
- extensions: [
- "tar"
- ]
-},
- "application/x-tcl": {
- source: "apache",
- extensions: [
- "tcl",
- "tk"
- ]
-},
- "application/x-tex": {
- source: "apache",
- extensions: [
- "tex"
- ]
-},
- "application/x-tex-tfm": {
- source: "apache",
- extensions: [
- "tfm"
- ]
-},
- "application/x-texinfo": {
- source: "apache",
- extensions: [
- "texinfo",
- "texi"
- ]
-},
- "application/x-tgif": {
- source: "apache",
- extensions: [
- "obj"
- ]
-},
- "application/x-ustar": {
- source: "apache",
- extensions: [
- "ustar"
- ]
-},
- "application/x-virtualbox-hdd": {
- compressible: true,
- extensions: [
- "hdd"
- ]
-},
- "application/x-virtualbox-ova": {
- compressible: true,
- extensions: [
- "ova"
- ]
-},
- "application/x-virtualbox-ovf": {
- compressible: true,
- extensions: [
- "ovf"
- ]
-},
- "application/x-virtualbox-vbox": {
- compressible: true,
- extensions: [
- "vbox"
- ]
-},
- "application/x-virtualbox-vbox-extpack": {
- compressible: false,
- extensions: [
- "vbox-extpack"
- ]
-},
- "application/x-virtualbox-vdi": {
- compressible: true,
- extensions: [
- "vdi"
- ]
-},
- "application/x-virtualbox-vhd": {
- compressible: true,
- extensions: [
- "vhd"
- ]
-},
- "application/x-virtualbox-vmdk": {
- compressible: true,
- extensions: [
- "vmdk"
- ]
-},
- "application/x-wais-source": {
- source: "apache",
- extensions: [
- "src"
- ]
-},
- "application/x-web-app-manifest+json": {
- compressible: true,
- extensions: [
- "webapp"
- ]
-},
- "application/x-www-form-urlencoded": {
- source: "iana",
- compressible: true
-},
- "application/x-x509-ca-cert": {
- source: "iana",
- extensions: [
- "der",
- "crt",
- "pem"
- ]
-},
- "application/x-x509-ca-ra-cert": {
- source: "iana"
-},
- "application/x-x509-next-ca-cert": {
- source: "iana"
-},
- "application/x-xfig": {
- source: "apache",
- extensions: [
- "fig"
- ]
-},
- "application/x-xliff+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "xlf"
- ]
-},
- "application/x-xpinstall": {
- source: "apache",
- compressible: false,
- extensions: [
- "xpi"
- ]
-},
- "application/x-xz": {
- source: "apache",
- extensions: [
- "xz"
- ]
-},
- "application/x-zmachine": {
- source: "apache",
- extensions: [
- "z1",
- "z2",
- "z3",
- "z4",
- "z5",
- "z6",
- "z7",
- "z8"
- ]
-},
- "application/x400-bp": {
- source: "iana"
-},
- "application/xacml+xml": {
- source: "iana",
- compressible: true
-},
- "application/xaml+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "xaml"
- ]
-},
- "application/xcap-att+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xav"
- ]
-},
- "application/xcap-caps+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xca"
- ]
-},
- "application/xcap-diff+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xdf"
- ]
-},
- "application/xcap-el+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xel"
- ]
-},
- "application/xcap-error+xml": {
- source: "iana",
- compressible: true
-},
- "application/xcap-ns+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xns"
- ]
-},
- "application/xcon-conference-info+xml": {
- source: "iana",
- compressible: true
-},
- "application/xcon-conference-info-diff+xml": {
- source: "iana",
- compressible: true
-},
- "application/xenc+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xenc"
- ]
-},
- "application/xhtml+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xhtml",
- "xht"
- ]
-},
- "application/xhtml-voice+xml": {
- source: "apache",
- compressible: true
-},
- "application/xliff+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xlf"
- ]
-},
- "application/xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xml",
- "xsl",
- "xsd",
- "rng"
- ]
-},
- "application/xml-dtd": {
- source: "iana",
- compressible: true,
- extensions: [
- "dtd"
- ]
-},
- "application/xml-external-parsed-entity": {
- source: "iana"
-},
- "application/xml-patch+xml": {
- source: "iana",
- compressible: true
-},
- "application/xmpp+xml": {
- source: "iana",
- compressible: true
-},
- "application/xop+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xop"
- ]
-},
- "application/xproc+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "xpl"
- ]
-},
- "application/xslt+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xsl",
- "xslt"
- ]
-},
- "application/xspf+xml": {
- source: "apache",
- compressible: true,
- extensions: [
- "xspf"
- ]
-},
- "application/xv+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "mxml",
- "xhvml",
- "xvml",
- "xvm"
- ]
-},
- "application/yang": {
- source: "iana",
- extensions: [
- "yang"
- ]
-},
- "application/yang-data+json": {
- source: "iana",
- compressible: true
-},
- "application/yang-data+xml": {
- source: "iana",
- compressible: true
-},
- "application/yang-patch+json": {
- source: "iana",
- compressible: true
-},
- "application/yang-patch+xml": {
- source: "iana",
- compressible: true
-},
- "application/yin+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "yin"
- ]
-},
- "application/zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "zip"
- ]
-},
- "application/zlib": {
- source: "iana"
-},
- "application/zstd": {
- source: "iana"
-},
- "audio/1d-interleaved-parityfec": {
- source: "iana"
-},
- "audio/32kadpcm": {
- source: "iana"
-},
- "audio/3gpp": {
- source: "iana",
- compressible: false,
- extensions: [
- "3gpp"
- ]
-},
- "audio/3gpp2": {
- source: "iana"
-},
- "audio/aac": {
- source: "iana"
-},
- "audio/ac3": {
- source: "iana"
-},
- "audio/adpcm": {
- source: "apache",
- extensions: [
- "adp"
- ]
-},
- "audio/amr": {
- source: "iana",
- extensions: [
- "amr"
- ]
-},
- "audio/amr-wb": {
- source: "iana"
-},
- "audio/amr-wb+": {
- source: "iana"
-},
- "audio/aptx": {
- source: "iana"
-},
- "audio/asc": {
- source: "iana"
-},
- "audio/atrac-advanced-lossless": {
- source: "iana"
-},
- "audio/atrac-x": {
- source: "iana"
-},
- "audio/atrac3": {
- source: "iana"
-},
- "audio/basic": {
- source: "iana",
- compressible: false,
- extensions: [
- "au",
- "snd"
- ]
-},
- "audio/bv16": {
- source: "iana"
-},
- "audio/bv32": {
- source: "iana"
-},
- "audio/clearmode": {
- source: "iana"
-},
- "audio/cn": {
- source: "iana"
-},
- "audio/dat12": {
- source: "iana"
-},
- "audio/dls": {
- source: "iana"
-},
- "audio/dsr-es201108": {
- source: "iana"
-},
- "audio/dsr-es202050": {
- source: "iana"
-},
- "audio/dsr-es202211": {
- source: "iana"
-},
- "audio/dsr-es202212": {
- source: "iana"
-},
- "audio/dv": {
- source: "iana"
-},
- "audio/dvi4": {
- source: "iana"
-},
- "audio/eac3": {
- source: "iana"
-},
- "audio/encaprtp": {
- source: "iana"
-},
- "audio/evrc": {
- source: "iana"
-},
- "audio/evrc-qcp": {
- source: "iana"
-},
- "audio/evrc0": {
- source: "iana"
-},
- "audio/evrc1": {
- source: "iana"
-},
- "audio/evrcb": {
- source: "iana"
-},
- "audio/evrcb0": {
- source: "iana"
-},
- "audio/evrcb1": {
- source: "iana"
-},
- "audio/evrcnw": {
- source: "iana"
-},
- "audio/evrcnw0": {
- source: "iana"
-},
- "audio/evrcnw1": {
- source: "iana"
-},
- "audio/evrcwb": {
- source: "iana"
-},
- "audio/evrcwb0": {
- source: "iana"
-},
- "audio/evrcwb1": {
- source: "iana"
-},
- "audio/evs": {
- source: "iana"
-},
- "audio/flexfec": {
- source: "iana"
-},
- "audio/fwdred": {
- source: "iana"
-},
- "audio/g711-0": {
- source: "iana"
-},
- "audio/g719": {
- source: "iana"
-},
- "audio/g722": {
- source: "iana"
-},
- "audio/g7221": {
- source: "iana"
-},
- "audio/g723": {
- source: "iana"
-},
- "audio/g726-16": {
- source: "iana"
-},
- "audio/g726-24": {
- source: "iana"
-},
- "audio/g726-32": {
- source: "iana"
-},
- "audio/g726-40": {
- source: "iana"
-},
- "audio/g728": {
- source: "iana"
-},
- "audio/g729": {
- source: "iana"
-},
- "audio/g7291": {
- source: "iana"
-},
- "audio/g729d": {
- source: "iana"
-},
- "audio/g729e": {
- source: "iana"
-},
- "audio/gsm": {
- source: "iana"
-},
- "audio/gsm-efr": {
- source: "iana"
-},
- "audio/gsm-hr-08": {
- source: "iana"
-},
- "audio/ilbc": {
- source: "iana"
-},
- "audio/ip-mr_v2.5": {
- source: "iana"
-},
- "audio/isac": {
- source: "apache"
-},
- "audio/l16": {
- source: "iana"
-},
- "audio/l20": {
- source: "iana"
-},
- "audio/l24": {
- source: "iana",
- compressible: false
-},
- "audio/l8": {
- source: "iana"
-},
- "audio/lpc": {
- source: "iana"
-},
- "audio/melp": {
- source: "iana"
-},
- "audio/melp1200": {
- source: "iana"
-},
- "audio/melp2400": {
- source: "iana"
-},
- "audio/melp600": {
- source: "iana"
-},
- "audio/mhas": {
- source: "iana"
-},
- "audio/midi": {
- source: "apache",
- extensions: [
- "mid",
- "midi",
- "kar",
- "rmi"
- ]
-},
- "audio/mobile-xmf": {
- source: "iana",
- extensions: [
- "mxmf"
- ]
-},
- "audio/mp3": {
- compressible: false,
- extensions: [
- "mp3"
- ]
-},
- "audio/mp4": {
- source: "iana",
- compressible: false,
- extensions: [
- "m4a",
- "mp4a"
- ]
-},
- "audio/mp4a-latm": {
- source: "iana"
-},
- "audio/mpa": {
- source: "iana"
-},
- "audio/mpa-robust": {
- source: "iana"
-},
- "audio/mpeg": {
- source: "iana",
- compressible: false,
- extensions: [
- "mpga",
- "mp2",
- "mp2a",
- "mp3",
- "m2a",
- "m3a"
- ]
-},
- "audio/mpeg4-generic": {
- source: "iana"
-},
- "audio/musepack": {
- source: "apache"
-},
- "audio/ogg": {
- source: "iana",
- compressible: false,
- extensions: [
- "oga",
- "ogg",
- "spx",
- "opus"
- ]
-},
- "audio/opus": {
- source: "iana"
-},
- "audio/parityfec": {
- source: "iana"
-},
- "audio/pcma": {
- source: "iana"
-},
- "audio/pcma-wb": {
- source: "iana"
-},
- "audio/pcmu": {
- source: "iana"
-},
- "audio/pcmu-wb": {
- source: "iana"
-},
- "audio/prs.sid": {
- source: "iana"
-},
- "audio/qcelp": {
- source: "iana"
-},
- "audio/raptorfec": {
- source: "iana"
-},
- "audio/red": {
- source: "iana"
-},
- "audio/rtp-enc-aescm128": {
- source: "iana"
-},
- "audio/rtp-midi": {
- source: "iana"
-},
- "audio/rtploopback": {
- source: "iana"
-},
- "audio/rtx": {
- source: "iana"
-},
- "audio/s3m": {
- source: "apache",
- extensions: [
- "s3m"
- ]
-},
- "audio/scip": {
- source: "iana"
-},
- "audio/silk": {
- source: "apache",
- extensions: [
- "sil"
- ]
-},
- "audio/smv": {
- source: "iana"
-},
- "audio/smv-qcp": {
- source: "iana"
-},
- "audio/smv0": {
- source: "iana"
-},
- "audio/sofa": {
- source: "iana"
-},
- "audio/sp-midi": {
- source: "iana"
-},
- "audio/speex": {
- source: "iana"
-},
- "audio/t140c": {
- source: "iana"
-},
- "audio/t38": {
- source: "iana"
-},
- "audio/telephone-event": {
- source: "iana"
-},
- "audio/tetra_acelp": {
- source: "iana"
-},
- "audio/tetra_acelp_bb": {
- source: "iana"
-},
- "audio/tone": {
- source: "iana"
-},
- "audio/tsvcis": {
- source: "iana"
-},
- "audio/uemclip": {
- source: "iana"
-},
- "audio/ulpfec": {
- source: "iana"
-},
- "audio/usac": {
- source: "iana"
-},
- "audio/vdvi": {
- source: "iana"
-},
- "audio/vmr-wb": {
- source: "iana"
-},
- "audio/vnd.3gpp.iufp": {
- source: "iana"
-},
- "audio/vnd.4sb": {
- source: "iana"
-},
- "audio/vnd.audiokoz": {
- source: "iana"
-},
- "audio/vnd.celp": {
- source: "iana"
-},
- "audio/vnd.cisco.nse": {
- source: "iana"
-},
- "audio/vnd.cmles.radio-events": {
- source: "iana"
-},
- "audio/vnd.cns.anp1": {
- source: "iana"
-},
- "audio/vnd.cns.inf1": {
- source: "iana"
-},
- "audio/vnd.dece.audio": {
- source: "iana",
- extensions: [
- "uva",
- "uvva"
- ]
-},
- "audio/vnd.digital-winds": {
- source: "iana",
- extensions: [
- "eol"
- ]
-},
- "audio/vnd.dlna.adts": {
- source: "iana"
-},
- "audio/vnd.dolby.heaac.1": {
- source: "iana"
-},
- "audio/vnd.dolby.heaac.2": {
- source: "iana"
-},
- "audio/vnd.dolby.mlp": {
- source: "iana"
-},
- "audio/vnd.dolby.mps": {
- source: "iana"
-},
- "audio/vnd.dolby.pl2": {
- source: "iana"
-},
- "audio/vnd.dolby.pl2x": {
- source: "iana"
-},
- "audio/vnd.dolby.pl2z": {
- source: "iana"
-},
- "audio/vnd.dolby.pulse.1": {
- source: "iana"
-},
- "audio/vnd.dra": {
- source: "iana",
- extensions: [
- "dra"
- ]
-},
- "audio/vnd.dts": {
- source: "iana",
- extensions: [
- "dts"
- ]
-},
- "audio/vnd.dts.hd": {
- source: "iana",
- extensions: [
- "dtshd"
- ]
-},
- "audio/vnd.dts.uhd": {
- source: "iana"
-},
- "audio/vnd.dvb.file": {
- source: "iana"
-},
- "audio/vnd.everad.plj": {
- source: "iana"
-},
- "audio/vnd.hns.audio": {
- source: "iana"
-},
- "audio/vnd.lucent.voice": {
- source: "iana",
- extensions: [
- "lvp"
- ]
-},
- "audio/vnd.ms-playready.media.pya": {
- source: "iana",
- extensions: [
- "pya"
- ]
-},
- "audio/vnd.nokia.mobile-xmf": {
- source: "iana"
-},
- "audio/vnd.nortel.vbk": {
- source: "iana"
-},
- "audio/vnd.nuera.ecelp4800": {
- source: "iana",
- extensions: [
- "ecelp4800"
- ]
-},
- "audio/vnd.nuera.ecelp7470": {
- source: "iana",
- extensions: [
- "ecelp7470"
- ]
-},
- "audio/vnd.nuera.ecelp9600": {
- source: "iana",
- extensions: [
- "ecelp9600"
- ]
-},
- "audio/vnd.octel.sbc": {
- source: "iana"
-},
- "audio/vnd.presonus.multitrack": {
- source: "iana"
-},
- "audio/vnd.qcelp": {
- source: "iana"
-},
- "audio/vnd.rhetorex.32kadpcm": {
- source: "iana"
-},
- "audio/vnd.rip": {
- source: "iana",
- extensions: [
- "rip"
- ]
-},
- "audio/vnd.rn-realaudio": {
- compressible: false
-},
- "audio/vnd.sealedmedia.softseal.mpeg": {
- source: "iana"
-},
- "audio/vnd.vmx.cvsd": {
- source: "iana"
-},
- "audio/vnd.wave": {
- compressible: false
-},
- "audio/vorbis": {
- source: "iana",
- compressible: false
-},
- "audio/vorbis-config": {
- source: "iana"
-},
- "audio/wav": {
- compressible: false,
- extensions: [
- "wav"
- ]
-},
- "audio/wave": {
- compressible: false,
- extensions: [
- "wav"
- ]
-},
- "audio/webm": {
- source: "apache",
- compressible: false,
- extensions: [
- "weba"
- ]
-},
- "audio/x-aac": {
- source: "apache",
- compressible: false,
- extensions: [
- "aac"
- ]
-},
- "audio/x-aiff": {
- source: "apache",
- extensions: [
- "aif",
- "aiff",
- "aifc"
- ]
-},
- "audio/x-caf": {
- source: "apache",
- compressible: false,
- extensions: [
- "caf"
- ]
-},
- "audio/x-flac": {
- source: "apache",
- extensions: [
- "flac"
- ]
-},
- "audio/x-m4a": {
- source: "nginx",
- extensions: [
- "m4a"
- ]
-},
- "audio/x-matroska": {
- source: "apache",
- extensions: [
- "mka"
- ]
-},
- "audio/x-mpegurl": {
- source: "apache",
- extensions: [
- "m3u"
- ]
-},
- "audio/x-ms-wax": {
- source: "apache",
- extensions: [
- "wax"
- ]
-},
- "audio/x-ms-wma": {
- source: "apache",
- extensions: [
- "wma"
- ]
-},
- "audio/x-pn-realaudio": {
- source: "apache",
- extensions: [
- "ram",
- "ra"
- ]
-},
- "audio/x-pn-realaudio-plugin": {
- source: "apache",
- extensions: [
- "rmp"
- ]
-},
- "audio/x-realaudio": {
- source: "nginx",
- extensions: [
- "ra"
- ]
-},
- "audio/x-tta": {
- source: "apache"
-},
- "audio/x-wav": {
- source: "apache",
- extensions: [
- "wav"
- ]
-},
- "audio/xm": {
- source: "apache",
- extensions: [
- "xm"
- ]
-},
- "chemical/x-cdx": {
- source: "apache",
- extensions: [
- "cdx"
- ]
-},
- "chemical/x-cif": {
- source: "apache",
- extensions: [
- "cif"
- ]
-},
- "chemical/x-cmdf": {
- source: "apache",
- extensions: [
- "cmdf"
- ]
-},
- "chemical/x-cml": {
- source: "apache",
- extensions: [
- "cml"
- ]
-},
- "chemical/x-csml": {
- source: "apache",
- extensions: [
- "csml"
- ]
-},
- "chemical/x-pdb": {
- source: "apache"
-},
- "chemical/x-xyz": {
- source: "apache",
- extensions: [
- "xyz"
- ]
-},
- "font/collection": {
- source: "iana",
- extensions: [
- "ttc"
- ]
-},
- "font/otf": {
- source: "iana",
- compressible: true,
- extensions: [
- "otf"
- ]
-},
- "font/sfnt": {
- source: "iana"
-},
- "font/ttf": {
- source: "iana",
- compressible: true,
- extensions: [
- "ttf"
- ]
-},
- "font/woff": {
- source: "iana",
- extensions: [
- "woff"
- ]
-},
- "font/woff2": {
- source: "iana",
- extensions: [
- "woff2"
- ]
-},
- "image/aces": {
- source: "iana",
- extensions: [
- "exr"
- ]
-},
- "image/apng": {
- compressible: false,
- extensions: [
- "apng"
- ]
-},
- "image/avci": {
- source: "iana"
-},
- "image/avcs": {
- source: "iana"
-},
- "image/avif": {
- source: "iana",
- compressible: false,
- extensions: [
- "avif"
- ]
-},
- "image/bmp": {
- source: "iana",
- compressible: true,
- extensions: [
- "bmp"
- ]
-},
- "image/cgm": {
- source: "iana",
- extensions: [
- "cgm"
- ]
-},
- "image/dicom-rle": {
- source: "iana",
- extensions: [
- "drle"
- ]
-},
- "image/emf": {
- source: "iana",
- extensions: [
- "emf"
- ]
-},
- "image/fits": {
- source: "iana",
- extensions: [
- "fits"
- ]
-},
- "image/g3fax": {
- source: "iana",
- extensions: [
- "g3"
- ]
-},
- "image/gif": {
- source: "iana",
- compressible: false,
- extensions: [
- "gif"
- ]
-},
- "image/heic": {
- source: "iana",
- extensions: [
- "heic"
- ]
-},
- "image/heic-sequence": {
- source: "iana",
- extensions: [
- "heics"
- ]
-},
- "image/heif": {
- source: "iana",
- extensions: [
- "heif"
- ]
-},
- "image/heif-sequence": {
- source: "iana",
- extensions: [
- "heifs"
- ]
-},
- "image/hej2k": {
- source: "iana",
- extensions: [
- "hej2"
- ]
-},
- "image/hsj2": {
- source: "iana",
- extensions: [
- "hsj2"
- ]
-},
- "image/ief": {
- source: "iana",
- extensions: [
- "ief"
- ]
-},
- "image/jls": {
- source: "iana",
- extensions: [
- "jls"
- ]
-},
- "image/jp2": {
- source: "iana",
- compressible: false,
- extensions: [
- "jp2",
- "jpg2"
- ]
-},
- "image/jpeg": {
- source: "iana",
- compressible: false,
- extensions: [
- "jpeg",
- "jpg",
- "jpe"
- ]
-},
- "image/jph": {
- source: "iana",
- extensions: [
- "jph"
- ]
-},
- "image/jphc": {
- source: "iana",
- extensions: [
- "jhc"
- ]
-},
- "image/jpm": {
- source: "iana",
- compressible: false,
- extensions: [
- "jpm"
- ]
-},
- "image/jpx": {
- source: "iana",
- compressible: false,
- extensions: [
- "jpx",
- "jpf"
- ]
-},
- "image/jxr": {
- source: "iana",
- extensions: [
- "jxr"
- ]
-},
- "image/jxra": {
- source: "iana",
- extensions: [
- "jxra"
- ]
-},
- "image/jxrs": {
- source: "iana",
- extensions: [
- "jxrs"
- ]
-},
- "image/jxs": {
- source: "iana",
- extensions: [
- "jxs"
- ]
-},
- "image/jxsc": {
- source: "iana",
- extensions: [
- "jxsc"
- ]
-},
- "image/jxsi": {
- source: "iana",
- extensions: [
- "jxsi"
- ]
-},
- "image/jxss": {
- source: "iana",
- extensions: [
- "jxss"
- ]
-},
- "image/ktx": {
- source: "iana",
- extensions: [
- "ktx"
- ]
-},
- "image/ktx2": {
- source: "iana",
- extensions: [
- "ktx2"
- ]
-},
- "image/naplps": {
- source: "iana"
-},
- "image/pjpeg": {
- compressible: false
-},
- "image/png": {
- source: "iana",
- compressible: false,
- extensions: [
- "png"
- ]
-},
- "image/prs.btif": {
- source: "iana",
- extensions: [
- "btif"
- ]
-},
- "image/prs.pti": {
- source: "iana",
- extensions: [
- "pti"
- ]
-},
- "image/pwg-raster": {
- source: "iana"
-},
- "image/sgi": {
- source: "apache",
- extensions: [
- "sgi"
- ]
-},
- "image/svg+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "svg",
- "svgz"
- ]
-},
- "image/t38": {
- source: "iana",
- extensions: [
- "t38"
- ]
-},
- "image/tiff": {
- source: "iana",
- compressible: false,
- extensions: [
- "tif",
- "tiff"
- ]
-},
- "image/tiff-fx": {
- source: "iana",
- extensions: [
- "tfx"
- ]
-},
- "image/vnd.adobe.photoshop": {
- source: "iana",
- compressible: true,
- extensions: [
- "psd"
- ]
-},
- "image/vnd.airzip.accelerator.azv": {
- source: "iana",
- extensions: [
- "azv"
- ]
-},
- "image/vnd.cns.inf2": {
- source: "iana"
-},
- "image/vnd.dece.graphic": {
- source: "iana",
- extensions: [
- "uvi",
- "uvvi",
- "uvg",
- "uvvg"
- ]
-},
- "image/vnd.djvu": {
- source: "iana",
- extensions: [
- "djvu",
- "djv"
- ]
-},
- "image/vnd.dvb.subtitle": {
- source: "iana",
- extensions: [
- "sub"
- ]
-},
- "image/vnd.dwg": {
- source: "iana",
- extensions: [
- "dwg"
- ]
-},
- "image/vnd.dxf": {
- source: "iana",
- extensions: [
- "dxf"
- ]
-},
- "image/vnd.fastbidsheet": {
- source: "iana",
- extensions: [
- "fbs"
- ]
-},
- "image/vnd.fpx": {
- source: "iana",
- extensions: [
- "fpx"
- ]
-},
- "image/vnd.fst": {
- source: "iana",
- extensions: [
- "fst"
- ]
-},
- "image/vnd.fujixerox.edmics-mmr": {
- source: "iana",
- extensions: [
- "mmr"
- ]
-},
- "image/vnd.fujixerox.edmics-rlc": {
- source: "iana",
- extensions: [
- "rlc"
- ]
-},
- "image/vnd.globalgraphics.pgb": {
- source: "iana"
-},
- "image/vnd.microsoft.icon": {
- source: "iana",
- extensions: [
- "ico"
- ]
-},
- "image/vnd.mix": {
- source: "iana"
-},
- "image/vnd.mozilla.apng": {
- source: "iana"
-},
- "image/vnd.ms-dds": {
- extensions: [
- "dds"
- ]
-},
- "image/vnd.ms-modi": {
- source: "iana",
- extensions: [
- "mdi"
- ]
-},
- "image/vnd.ms-photo": {
- source: "apache",
- extensions: [
- "wdp"
- ]
-},
- "image/vnd.net-fpx": {
- source: "iana",
- extensions: [
- "npx"
- ]
-},
- "image/vnd.pco.b16": {
- source: "iana",
- extensions: [
- "b16"
- ]
-},
- "image/vnd.radiance": {
- source: "iana"
-},
- "image/vnd.sealed.png": {
- source: "iana"
-},
- "image/vnd.sealedmedia.softseal.gif": {
- source: "iana"
-},
- "image/vnd.sealedmedia.softseal.jpg": {
- source: "iana"
-},
- "image/vnd.svf": {
- source: "iana"
-},
- "image/vnd.tencent.tap": {
- source: "iana",
- extensions: [
- "tap"
- ]
-},
- "image/vnd.valve.source.texture": {
- source: "iana",
- extensions: [
- "vtf"
- ]
-},
- "image/vnd.wap.wbmp": {
- source: "iana",
- extensions: [
- "wbmp"
- ]
-},
- "image/vnd.xiff": {
- source: "iana",
- extensions: [
- "xif"
- ]
-},
- "image/vnd.zbrush.pcx": {
- source: "iana",
- extensions: [
- "pcx"
- ]
-},
- "image/webp": {
- source: "apache",
- extensions: [
- "webp"
- ]
-},
- "image/wmf": {
- source: "iana",
- extensions: [
- "wmf"
- ]
-},
- "image/x-3ds": {
- source: "apache",
- extensions: [
- "3ds"
- ]
-},
- "image/x-cmu-raster": {
- source: "apache",
- extensions: [
- "ras"
- ]
-},
- "image/x-cmx": {
- source: "apache",
- extensions: [
- "cmx"
- ]
-},
- "image/x-freehand": {
- source: "apache",
- extensions: [
- "fh",
- "fhc",
- "fh4",
- "fh5",
- "fh7"
- ]
-},
- "image/x-icon": {
- source: "apache",
- compressible: true,
- extensions: [
- "ico"
- ]
-},
- "image/x-jng": {
- source: "nginx",
- extensions: [
- "jng"
- ]
-},
- "image/x-mrsid-image": {
- source: "apache",
- extensions: [
- "sid"
- ]
-},
- "image/x-ms-bmp": {
- source: "nginx",
- compressible: true,
- extensions: [
- "bmp"
- ]
-},
- "image/x-pcx": {
- source: "apache",
- extensions: [
- "pcx"
- ]
-},
- "image/x-pict": {
- source: "apache",
- extensions: [
- "pic",
- "pct"
- ]
-},
- "image/x-portable-anymap": {
- source: "apache",
- extensions: [
- "pnm"
- ]
-},
- "image/x-portable-bitmap": {
- source: "apache",
- extensions: [
- "pbm"
- ]
-},
- "image/x-portable-graymap": {
- source: "apache",
- extensions: [
- "pgm"
- ]
-},
- "image/x-portable-pixmap": {
- source: "apache",
- extensions: [
- "ppm"
- ]
-},
- "image/x-rgb": {
- source: "apache",
- extensions: [
- "rgb"
- ]
-},
- "image/x-tga": {
- source: "apache",
- extensions: [
- "tga"
- ]
-},
- "image/x-xbitmap": {
- source: "apache",
- extensions: [
- "xbm"
- ]
-},
- "image/x-xcf": {
- compressible: false
-},
- "image/x-xpixmap": {
- source: "apache",
- extensions: [
- "xpm"
- ]
-},
- "image/x-xwindowdump": {
- source: "apache",
- extensions: [
- "xwd"
- ]
-},
- "message/cpim": {
- source: "iana"
-},
- "message/delivery-status": {
- source: "iana"
-},
- "message/disposition-notification": {
- source: "iana",
- extensions: [
- "disposition-notification"
- ]
-},
- "message/external-body": {
- source: "iana"
-},
- "message/feedback-report": {
- source: "iana"
-},
- "message/global": {
- source: "iana",
- extensions: [
- "u8msg"
- ]
-},
- "message/global-delivery-status": {
- source: "iana",
- extensions: [
- "u8dsn"
- ]
-},
- "message/global-disposition-notification": {
- source: "iana",
- extensions: [
- "u8mdn"
- ]
-},
- "message/global-headers": {
- source: "iana",
- extensions: [
- "u8hdr"
- ]
-},
- "message/http": {
- source: "iana",
- compressible: false
-},
- "message/imdn+xml": {
- source: "iana",
- compressible: true
-},
- "message/news": {
- source: "iana"
-},
- "message/partial": {
- source: "iana",
- compressible: false
-},
- "message/rfc822": {
- source: "iana",
- compressible: true,
- extensions: [
- "eml",
- "mime"
- ]
-},
- "message/s-http": {
- source: "iana"
-},
- "message/sip": {
- source: "iana"
-},
- "message/sipfrag": {
- source: "iana"
-},
- "message/tracking-status": {
- source: "iana"
-},
- "message/vnd.si.simp": {
- source: "iana"
-},
- "message/vnd.wfa.wsc": {
- source: "iana",
- extensions: [
- "wsc"
- ]
-},
- "model/3mf": {
- source: "iana",
- extensions: [
- "3mf"
- ]
-},
- "model/e57": {
- source: "iana"
-},
- "model/gltf+json": {
- source: "iana",
- compressible: true,
- extensions: [
- "gltf"
- ]
-},
- "model/gltf-binary": {
- source: "iana",
- compressible: true,
- extensions: [
- "glb"
- ]
-},
- "model/iges": {
- source: "iana",
- compressible: false,
- extensions: [
- "igs",
- "iges"
- ]
-},
- "model/mesh": {
- source: "iana",
- compressible: false,
- extensions: [
- "msh",
- "mesh",
- "silo"
- ]
-},
- "model/mtl": {
- source: "iana",
- extensions: [
- "mtl"
- ]
-},
- "model/obj": {
- source: "iana",
- extensions: [
- "obj"
- ]
-},
- "model/step": {
- source: "iana"
-},
- "model/step+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "stpx"
- ]
-},
- "model/step+zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "stpz"
- ]
-},
- "model/step-xml+zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "stpxz"
- ]
-},
- "model/stl": {
- source: "iana",
- extensions: [
- "stl"
- ]
-},
- "model/vnd.collada+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "dae"
- ]
-},
- "model/vnd.dwf": {
- source: "iana",
- extensions: [
- "dwf"
- ]
-},
- "model/vnd.flatland.3dml": {
- source: "iana"
-},
- "model/vnd.gdl": {
- source: "iana",
- extensions: [
- "gdl"
- ]
-},
- "model/vnd.gs-gdl": {
- source: "apache"
-},
- "model/vnd.gs.gdl": {
- source: "iana"
-},
- "model/vnd.gtw": {
- source: "iana",
- extensions: [
- "gtw"
- ]
-},
- "model/vnd.moml+xml": {
- source: "iana",
- compressible: true
-},
- "model/vnd.mts": {
- source: "iana",
- extensions: [
- "mts"
- ]
-},
- "model/vnd.opengex": {
- source: "iana",
- extensions: [
- "ogex"
- ]
-},
- "model/vnd.parasolid.transmit.binary": {
- source: "iana",
- extensions: [
- "x_b"
- ]
-},
- "model/vnd.parasolid.transmit.text": {
- source: "iana",
- extensions: [
- "x_t"
- ]
-},
- "model/vnd.pytha.pyox": {
- source: "iana"
-},
- "model/vnd.rosette.annotated-data-model": {
- source: "iana"
-},
- "model/vnd.sap.vds": {
- source: "iana",
- extensions: [
- "vds"
- ]
-},
- "model/vnd.usdz+zip": {
- source: "iana",
- compressible: false,
- extensions: [
- "usdz"
- ]
-},
- "model/vnd.valve.source.compiled-map": {
- source: "iana",
- extensions: [
- "bsp"
- ]
-},
- "model/vnd.vtu": {
- source: "iana",
- extensions: [
- "vtu"
- ]
-},
- "model/vrml": {
- source: "iana",
- compressible: false,
- extensions: [
- "wrl",
- "vrml"
- ]
-},
- "model/x3d+binary": {
- source: "apache",
- compressible: false,
- extensions: [
- "x3db",
- "x3dbz"
- ]
-},
- "model/x3d+fastinfoset": {
- source: "iana",
- extensions: [
- "x3db"
- ]
-},
- "model/x3d+vrml": {
- source: "apache",
- compressible: false,
- extensions: [
- "x3dv",
- "x3dvz"
- ]
-},
- "model/x3d+xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "x3d",
- "x3dz"
- ]
-},
- "model/x3d-vrml": {
- source: "iana",
- extensions: [
- "x3dv"
- ]
-},
- "multipart/alternative": {
- source: "iana",
- compressible: false
-},
- "multipart/appledouble": {
- source: "iana"
-},
- "multipart/byteranges": {
- source: "iana"
-},
- "multipart/digest": {
- source: "iana"
-},
- "multipart/encrypted": {
- source: "iana",
- compressible: false
-},
- "multipart/form-data": {
- source: "iana",
- compressible: false
-},
- "multipart/header-set": {
- source: "iana"
-},
- "multipart/mixed": {
- source: "iana"
-},
- "multipart/multilingual": {
- source: "iana"
-},
- "multipart/parallel": {
- source: "iana"
-},
- "multipart/related": {
- source: "iana",
- compressible: false
-},
- "multipart/report": {
- source: "iana"
-},
- "multipart/signed": {
- source: "iana",
- compressible: false
-},
- "multipart/vnd.bint.med-plus": {
- source: "iana"
-},
- "multipart/voice-message": {
- source: "iana"
-},
- "multipart/x-mixed-replace": {
- source: "iana"
-},
- "text/1d-interleaved-parityfec": {
- source: "iana"
-},
- "text/cache-manifest": {
- source: "iana",
- compressible: true,
- extensions: [
- "appcache",
- "manifest"
- ]
-},
- "text/calendar": {
- source: "iana",
- extensions: [
- "ics",
- "ifb"
- ]
-},
- "text/calender": {
- compressible: true
-},
- "text/cmd": {
- compressible: true
-},
- "text/coffeescript": {
- extensions: [
- "coffee",
- "litcoffee"
- ]
-},
- "text/cql": {
- source: "iana"
-},
- "text/cql-expression": {
- source: "iana"
-},
- "text/cql-identifier": {
- source: "iana"
-},
- "text/css": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "css"
- ]
-},
- "text/csv": {
- source: "iana",
- compressible: true,
- extensions: [
- "csv"
- ]
-},
- "text/csv-schema": {
- source: "iana"
-},
- "text/directory": {
- source: "iana"
-},
- "text/dns": {
- source: "iana"
-},
- "text/ecmascript": {
- source: "iana"
-},
- "text/encaprtp": {
- source: "iana"
-},
- "text/enriched": {
- source: "iana"
-},
- "text/fhirpath": {
- source: "iana"
-},
- "text/flexfec": {
- source: "iana"
-},
- "text/fwdred": {
- source: "iana"
-},
- "text/gff3": {
- source: "iana"
-},
- "text/grammar-ref-list": {
- source: "iana"
-},
- "text/html": {
- source: "iana",
- compressible: true,
- extensions: [
- "html",
- "htm",
- "shtml"
- ]
-},
- "text/jade": {
- extensions: [
- "jade"
- ]
-},
- "text/javascript": {
- source: "iana",
- compressible: true
-},
- "text/jcr-cnd": {
- source: "iana"
-},
- "text/jsx": {
- compressible: true,
- extensions: [
- "jsx"
- ]
-},
- "text/less": {
- compressible: true,
- extensions: [
- "less"
- ]
-},
- "text/markdown": {
- source: "iana",
- compressible: true,
- extensions: [
- "markdown",
- "md"
- ]
-},
- "text/mathml": {
- source: "nginx",
- extensions: [
- "mml"
- ]
-},
- "text/mdx": {
- compressible: true,
- extensions: [
- "mdx"
- ]
-},
- "text/mizar": {
- source: "iana"
-},
- "text/n3": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "n3"
- ]
-},
- "text/parameters": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/parityfec": {
- source: "iana"
-},
- "text/plain": {
- source: "iana",
- compressible: true,
- extensions: [
- "txt",
- "text",
- "conf",
- "def",
- "list",
- "log",
- "in",
- "ini"
- ]
-},
- "text/provenance-notation": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/prs.fallenstein.rst": {
- source: "iana"
-},
- "text/prs.lines.tag": {
- source: "iana",
- extensions: [
- "dsc"
- ]
-},
- "text/prs.prop.logic": {
- source: "iana"
-},
- "text/raptorfec": {
- source: "iana"
-},
- "text/red": {
- source: "iana"
-},
- "text/rfc822-headers": {
- source: "iana"
-},
- "text/richtext": {
- source: "iana",
- compressible: true,
- extensions: [
- "rtx"
- ]
-},
- "text/rtf": {
- source: "iana",
- compressible: true,
- extensions: [
- "rtf"
- ]
-},
- "text/rtp-enc-aescm128": {
- source: "iana"
-},
- "text/rtploopback": {
- source: "iana"
-},
- "text/rtx": {
- source: "iana"
-},
- "text/sgml": {
- source: "iana",
- extensions: [
- "sgml",
- "sgm"
- ]
-},
- "text/shaclc": {
- source: "iana"
-},
- "text/shex": {
- source: "iana",
- extensions: [
- "shex"
- ]
-},
- "text/slim": {
- extensions: [
- "slim",
- "slm"
- ]
-},
- "text/spdx": {
- source: "iana",
- extensions: [
- "spdx"
- ]
-},
- "text/strings": {
- source: "iana"
-},
- "text/stylus": {
- extensions: [
- "stylus",
- "styl"
- ]
-},
- "text/t140": {
- source: "iana"
-},
- "text/tab-separated-values": {
- source: "iana",
- compressible: true,
- extensions: [
- "tsv"
- ]
-},
- "text/troff": {
- source: "iana",
- extensions: [
- "t",
- "tr",
- "roff",
- "man",
- "me",
- "ms"
- ]
-},
- "text/turtle": {
- source: "iana",
- charset: "UTF-8",
- extensions: [
- "ttl"
- ]
-},
- "text/ulpfec": {
- source: "iana"
-},
- "text/uri-list": {
- source: "iana",
- compressible: true,
- extensions: [
- "uri",
- "uris",
- "urls"
- ]
-},
- "text/vcard": {
- source: "iana",
- compressible: true,
- extensions: [
- "vcard"
- ]
-},
- "text/vnd.a": {
- source: "iana"
-},
- "text/vnd.abc": {
- source: "iana"
-},
- "text/vnd.ascii-art": {
- source: "iana"
-},
- "text/vnd.curl": {
- source: "iana",
- extensions: [
- "curl"
- ]
-},
- "text/vnd.curl.dcurl": {
- source: "apache",
- extensions: [
- "dcurl"
- ]
-},
- "text/vnd.curl.mcurl": {
- source: "apache",
- extensions: [
- "mcurl"
- ]
-},
- "text/vnd.curl.scurl": {
- source: "apache",
- extensions: [
- "scurl"
- ]
-},
- "text/vnd.debian.copyright": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/vnd.dmclientscript": {
- source: "iana"
-},
- "text/vnd.dvb.subtitle": {
- source: "iana",
- extensions: [
- "sub"
- ]
-},
- "text/vnd.esmertec.theme-descriptor": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/vnd.ficlab.flt": {
- source: "iana"
-},
- "text/vnd.fly": {
- source: "iana",
- extensions: [
- "fly"
- ]
-},
- "text/vnd.fmi.flexstor": {
- source: "iana",
- extensions: [
- "flx"
- ]
-},
- "text/vnd.gml": {
- source: "iana"
-},
- "text/vnd.graphviz": {
- source: "iana",
- extensions: [
- "gv"
- ]
-},
- "text/vnd.hans": {
- source: "iana"
-},
- "text/vnd.hgl": {
- source: "iana"
-},
- "text/vnd.in3d.3dml": {
- source: "iana",
- extensions: [
- "3dml"
- ]
-},
- "text/vnd.in3d.spot": {
- source: "iana",
- extensions: [
- "spot"
- ]
-},
- "text/vnd.iptc.newsml": {
- source: "iana"
-},
- "text/vnd.iptc.nitf": {
- source: "iana"
-},
- "text/vnd.latex-z": {
- source: "iana"
-},
- "text/vnd.motorola.reflex": {
- source: "iana"
-},
- "text/vnd.ms-mediapackage": {
- source: "iana"
-},
- "text/vnd.net2phone.commcenter.command": {
- source: "iana"
-},
- "text/vnd.radisys.msml-basic-layout": {
- source: "iana"
-},
- "text/vnd.senx.warpscript": {
- source: "iana"
-},
- "text/vnd.si.uricatalogue": {
- source: "iana"
-},
- "text/vnd.sosi": {
- source: "iana"
-},
- "text/vnd.sun.j2me.app-descriptor": {
- source: "iana",
- charset: "UTF-8",
- extensions: [
- "jad"
- ]
-},
- "text/vnd.trolltech.linguist": {
- source: "iana",
- charset: "UTF-8"
-},
- "text/vnd.wap.si": {
- source: "iana"
-},
- "text/vnd.wap.sl": {
- source: "iana"
-},
- "text/vnd.wap.wml": {
- source: "iana",
- extensions: [
- "wml"
- ]
-},
- "text/vnd.wap.wmlscript": {
- source: "iana",
- extensions: [
- "wmls"
- ]
-},
- "text/vtt": {
- source: "iana",
- charset: "UTF-8",
- compressible: true,
- extensions: [
- "vtt"
- ]
-},
- "text/x-asm": {
- source: "apache",
- extensions: [
- "s",
- "asm"
- ]
-},
- "text/x-c": {
- source: "apache",
- extensions: [
- "c",
- "cc",
- "cxx",
- "cpp",
- "h",
- "hh",
- "dic"
- ]
-},
- "text/x-component": {
- source: "nginx",
- extensions: [
- "htc"
- ]
-},
- "text/x-fortran": {
- source: "apache",
- extensions: [
- "f",
- "for",
- "f77",
- "f90"
- ]
-},
- "text/x-gwt-rpc": {
- compressible: true
-},
- "text/x-handlebars-template": {
- extensions: [
- "hbs"
- ]
-},
- "text/x-java-source": {
- source: "apache",
- extensions: [
- "java"
- ]
-},
- "text/x-jquery-tmpl": {
- compressible: true
-},
- "text/x-lua": {
- extensions: [
- "lua"
- ]
-},
- "text/x-markdown": {
- compressible: true,
- extensions: [
- "mkd"
- ]
-},
- "text/x-nfo": {
- source: "apache",
- extensions: [
- "nfo"
- ]
-},
- "text/x-opml": {
- source: "apache",
- extensions: [
- "opml"
- ]
-},
- "text/x-org": {
- compressible: true,
- extensions: [
- "org"
- ]
-},
- "text/x-pascal": {
- source: "apache",
- extensions: [
- "p",
- "pas"
- ]
-},
- "text/x-processing": {
- compressible: true,
- extensions: [
- "pde"
- ]
-},
- "text/x-sass": {
- extensions: [
- "sass"
- ]
-},
- "text/x-scss": {
- extensions: [
- "scss"
- ]
-},
- "text/x-setext": {
- source: "apache",
- extensions: [
- "etx"
- ]
-},
- "text/x-sfv": {
- source: "apache",
- extensions: [
- "sfv"
- ]
-},
- "text/x-suse-ymp": {
- compressible: true,
- extensions: [
- "ymp"
- ]
-},
- "text/x-uuencode": {
- source: "apache",
- extensions: [
- "uu"
- ]
-},
- "text/x-vcalendar": {
- source: "apache",
- extensions: [
- "vcs"
- ]
-},
- "text/x-vcard": {
- source: "apache",
- extensions: [
- "vcf"
- ]
-},
- "text/xml": {
- source: "iana",
- compressible: true,
- extensions: [
- "xml"
- ]
-},
- "text/xml-external-parsed-entity": {
- source: "iana"
-},
- "text/yaml": {
- compressible: true,
- extensions: [
- "yaml",
- "yml"
- ]
-},
- "video/1d-interleaved-parityfec": {
- source: "iana"
-},
- "video/3gpp": {
- source: "iana",
- extensions: [
- "3gp",
- "3gpp"
- ]
-},
- "video/3gpp-tt": {
- source: "iana"
-},
- "video/3gpp2": {
- source: "iana",
- extensions: [
- "3g2"
- ]
-},
- "video/av1": {
- source: "iana"
-},
- "video/bmpeg": {
- source: "iana"
-},
- "video/bt656": {
- source: "iana"
-},
- "video/celb": {
- source: "iana"
-},
- "video/dv": {
- source: "iana"
-},
- "video/encaprtp": {
- source: "iana"
-},
- "video/ffv1": {
- source: "iana"
-},
- "video/flexfec": {
- source: "iana"
-},
- "video/h261": {
- source: "iana",
- extensions: [
- "h261"
- ]
-},
- "video/h263": {
- source: "iana",
- extensions: [
- "h263"
- ]
-},
- "video/h263-1998": {
- source: "iana"
-},
- "video/h263-2000": {
- source: "iana"
-},
- "video/h264": {
- source: "iana",
- extensions: [
- "h264"
- ]
-},
- "video/h264-rcdo": {
- source: "iana"
-},
- "video/h264-svc": {
- source: "iana"
-},
- "video/h265": {
- source: "iana"
-},
- "video/iso.segment": {
- source: "iana",
- extensions: [
- "m4s"
- ]
-},
- "video/jpeg": {
- source: "iana",
- extensions: [
- "jpgv"
- ]
-},
- "video/jpeg2000": {
- source: "iana"
-},
- "video/jpm": {
- source: "apache",
- extensions: [
- "jpm",
- "jpgm"
- ]
-},
- "video/jxsv": {
- source: "iana"
-},
- "video/mj2": {
- source: "iana",
- extensions: [
- "mj2",
- "mjp2"
- ]
-},
- "video/mp1s": {
- source: "iana"
-},
- "video/mp2p": {
- source: "iana"
-},
- "video/mp2t": {
- source: "iana",
- extensions: [
- "ts"
- ]
-},
- "video/mp4": {
- source: "iana",
- compressible: false,
- extensions: [
- "mp4",
- "mp4v",
- "mpg4"
- ]
-},
- "video/mp4v-es": {
- source: "iana"
-},
- "video/mpeg": {
- source: "iana",
- compressible: false,
- extensions: [
- "mpeg",
- "mpg",
- "mpe",
- "m1v",
- "m2v"
- ]
-},
- "video/mpeg4-generic": {
- source: "iana"
-},
- "video/mpv": {
- source: "iana"
-},
- "video/nv": {
- source: "iana"
-},
- "video/ogg": {
- source: "iana",
- compressible: false,
- extensions: [
- "ogv"
- ]
-},
- "video/parityfec": {
- source: "iana"
-},
- "video/pointer": {
- source: "iana"
-},
- "video/quicktime": {
- source: "iana",
- compressible: false,
- extensions: [
- "qt",
- "mov"
- ]
-},
- "video/raptorfec": {
- source: "iana"
-},
- "video/raw": {
- source: "iana"
-},
- "video/rtp-enc-aescm128": {
- source: "iana"
-},
- "video/rtploopback": {
- source: "iana"
-},
- "video/rtx": {
- source: "iana"
-},
- "video/scip": {
- source: "iana"
-},
- "video/smpte291": {
- source: "iana"
-},
- "video/smpte292m": {
- source: "iana"
-},
- "video/ulpfec": {
- source: "iana"
-},
- "video/vc1": {
- source: "iana"
-},
- "video/vc2": {
- source: "iana"
-},
- "video/vnd.cctv": {
- source: "iana"
-},
- "video/vnd.dece.hd": {
- source: "iana",
- extensions: [
- "uvh",
- "uvvh"
- ]
-},
- "video/vnd.dece.mobile": {
- source: "iana",
- extensions: [
- "uvm",
- "uvvm"
- ]
-},
- "video/vnd.dece.mp4": {
- source: "iana"
-},
- "video/vnd.dece.pd": {
- source: "iana",
- extensions: [
- "uvp",
- "uvvp"
- ]
-},
- "video/vnd.dece.sd": {
- source: "iana",
- extensions: [
- "uvs",
- "uvvs"
- ]
-},
- "video/vnd.dece.video": {
- source: "iana",
- extensions: [
- "uvv",
- "uvvv"
- ]
-},
- "video/vnd.directv.mpeg": {
- source: "iana"
-},
- "video/vnd.directv.mpeg-tts": {
- source: "iana"
-},
- "video/vnd.dlna.mpeg-tts": {
- source: "iana"
-},
- "video/vnd.dvb.file": {
- source: "iana",
- extensions: [
- "dvb"
- ]
-},
- "video/vnd.fvt": {
- source: "iana",
- extensions: [
- "fvt"
- ]
-},
- "video/vnd.hns.video": {
- source: "iana"
-},
- "video/vnd.iptvforum.1dparityfec-1010": {
- source: "iana"
-},
- "video/vnd.iptvforum.1dparityfec-2005": {
- source: "iana"
-},
- "video/vnd.iptvforum.2dparityfec-1010": {
- source: "iana"
-},
- "video/vnd.iptvforum.2dparityfec-2005": {
- source: "iana"
-},
- "video/vnd.iptvforum.ttsavc": {
- source: "iana"
-},
- "video/vnd.iptvforum.ttsmpeg2": {
- source: "iana"
-},
- "video/vnd.motorola.video": {
- source: "iana"
-},
- "video/vnd.motorola.videop": {
- source: "iana"
-},
- "video/vnd.mpegurl": {
- source: "iana",
- extensions: [
- "mxu",
- "m4u"
- ]
-},
- "video/vnd.ms-playready.media.pyv": {
- source: "iana",
- extensions: [
- "pyv"
- ]
-},
- "video/vnd.nokia.interleaved-multimedia": {
- source: "iana"
-},
- "video/vnd.nokia.mp4vr": {
- source: "iana"
-},
- "video/vnd.nokia.videovoip": {
- source: "iana"
-},
- "video/vnd.objectvideo": {
- source: "iana"
-},
- "video/vnd.radgamettools.bink": {
- source: "iana"
-},
- "video/vnd.radgamettools.smacker": {
- source: "iana"
-},
- "video/vnd.sealed.mpeg1": {
- source: "iana"
-},
- "video/vnd.sealed.mpeg4": {
- source: "iana"
-},
- "video/vnd.sealed.swf": {
- source: "iana"
-},
- "video/vnd.sealedmedia.softseal.mov": {
- source: "iana"
-},
- "video/vnd.uvvu.mp4": {
- source: "iana",
- extensions: [
- "uvu",
- "uvvu"
- ]
-},
- "video/vnd.vivo": {
- source: "iana",
- extensions: [
- "viv"
- ]
-},
- "video/vnd.youtube.yt": {
- source: "iana"
-},
- "video/vp8": {
- source: "iana"
-},
- "video/vp9": {
- source: "iana"
-},
- "video/webm": {
- source: "apache",
- compressible: false,
- extensions: [
- "webm"
- ]
-},
- "video/x-f4v": {
- source: "apache",
- extensions: [
- "f4v"
- ]
-},
- "video/x-fli": {
- source: "apache",
- extensions: [
- "fli"
- ]
-},
- "video/x-flv": {
- source: "apache",
- compressible: false,
- extensions: [
- "flv"
- ]
-},
- "video/x-m4v": {
- source: "apache",
- extensions: [
- "m4v"
- ]
-},
- "video/x-matroska": {
- source: "apache",
- compressible: false,
- extensions: [
- "mkv",
- "mk3d",
- "mks"
- ]
-},
- "video/x-mng": {
- source: "apache",
- extensions: [
- "mng"
- ]
-},
- "video/x-ms-asf": {
- source: "apache",
- extensions: [
- "asf",
- "asx"
- ]
-},
- "video/x-ms-vob": {
- source: "apache",
- extensions: [
- "vob"
- ]
-},
- "video/x-ms-wm": {
- source: "apache",
- extensions: [
- "wm"
- ]
-},
- "video/x-ms-wmv": {
- source: "apache",
- compressible: false,
- extensions: [
- "wmv"
- ]
-},
- "video/x-ms-wmx": {
- source: "apache",
- extensions: [
- "wmx"
- ]
-},
- "video/x-ms-wvx": {
- source: "apache",
- extensions: [
- "wvx"
- ]
-},
- "video/x-msvideo": {
- source: "apache",
- extensions: [
- "avi"
- ]
-},
- "video/x-sgi-movie": {
- source: "apache",
- extensions: [
- "movie"
- ]
-},
- "video/x-smv": {
- source: "apache",
- extensions: [
- "smv"
- ]
-},
- "x-conference/x-cooltalk": {
- source: "apache",
- extensions: [
- "ice"
- ]
-},
- "x-shader/x-fragment": {
- compressible: true
-},
- "x-shader/x-vertex": {
- compressible: true
-}
-};
-
-/*!
- * mime-db
- * Copyright(c) 2014 Jonathan Ong
- * MIT Licensed
- */
-
-/**
- * Module exports.
- */
-
-var mimeDb = require$$0;
-
-/*!
- * compressible
- * Copyright(c) 2013 Jonathan Ong
- * Copyright(c) 2014 Jeremiah Senkpiel
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- * @private
- */
-
-var db = mimeDb;
-
-/**
- * Module variables.
- * @private
- */
-
-var COMPRESSIBLE_TYPE_REGEXP = /^text\/|\+(?:json|text|xml)$/i;
-var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
-
-/**
- * Module exports.
- * @public
- */
-
-var compressible_1 = compressible$1;
-
-/**
- * Checks if a type is compressible.
- *
- * @param {string} type
- * @return {Boolean} compressible
- * @public
- */
-
-function compressible$1 (type) {
- if (!type || typeof type !== 'string') {
- return false
- }
-
- // strip parameters
- var match = EXTRACT_TYPE_REGEXP.exec(type);
- var mime = match && match[1].toLowerCase();
- var data = db[mime];
-
- // return database information
- if (data && data.compressible !== undefined) {
- return data.compressible
- }
-
- // fallback to regexp or unknown
- return COMPRESSIBLE_TYPE_REGEXP.test(mime) || undefined
-}
-
-/*!
- * on-headers
- * Copyright(c) 2014 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module exports.
- * @public
- */
-
-var onHeaders_1 = onHeaders$1;
-
-/**
- * Create a replacement writeHead method.
- *
- * @param {function} prevWriteHead
- * @param {function} listener
- * @private
- */
-
-function createWriteHead (prevWriteHead, listener) {
- var fired = false;
-
- // return function with core name and argument list
- return function writeHead (statusCode) {
- // set headers from arguments
- var args = setWriteHeadHeaders.apply(this, arguments);
-
- // fire listener
- if (!fired) {
- fired = true;
- listener.call(this);
-
- // pass-along an updated status code
- if (typeof args[0] === 'number' && this.statusCode !== args[0]) {
- args[0] = this.statusCode;
- args.length = 1;
- }
- }
-
- return prevWriteHead.apply(this, args)
- }
-}
-
-/**
- * Execute a listener when a response is about to write headers.
- *
- * @param {object} res
- * @return {function} listener
- * @public
- */
-
-function onHeaders$1 (res, listener) {
- if (!res) {
- throw new TypeError('argument res is required')
- }
-
- if (typeof listener !== 'function') {
- throw new TypeError('argument listener must be a function')
- }
-
- res.writeHead = createWriteHead(res.writeHead, listener);
-}
-
-/**
- * Set headers contained in array on the response object.
- *
- * @param {object} res
- * @param {array} headers
- * @private
- */
-
-function setHeadersFromArray (res, headers) {
- for (var i = 0; i < headers.length; i++) {
- res.setHeader(headers[i][0], headers[i][1]);
- }
-}
-
-/**
- * Set headers contained in object on the response object.
- *
- * @param {object} res
- * @param {object} headers
- * @private
- */
-
-function setHeadersFromObject (res, headers) {
- var keys = Object.keys(headers);
- for (var i = 0; i < keys.length; i++) {
- var k = keys[i];
- if (k) res.setHeader(k, headers[k]);
- }
-}
-
-/**
- * Set headers and other properties on the response object.
- *
- * @param {number} statusCode
- * @private
- */
-
-function setWriteHeadHeaders (statusCode) {
- var length = arguments.length;
- var headerIndex = length > 1 && typeof arguments[1] === 'string'
- ? 2
- : 1;
-
- var headers = length >= headerIndex + 1
- ? arguments[headerIndex]
- : undefined;
-
- this.statusCode = statusCode;
-
- if (Array.isArray(headers)) {
- // handle array case
- setHeadersFromArray(this, headers);
- } else if (headers) {
- // handle object case
- setHeadersFromObject(this, headers);
- }
-
- // copy leading arguments
- var args = new Array(Math.min(length, headerIndex));
- for (var i = 0; i < args.length; i++) {
- args[i] = arguments[i];
- }
-
- return args
-}
-
-/*!
- * compression
- * Copyright(c) 2010 Sencha Inc.
- * Copyright(c) 2011 TJ Holowaychuk
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- * @private
- */
-
-var accepts = accepts$1;
-var Buffer$1 = safeBuffer.exports.Buffer;
-var bytes = bytes$2.exports;
-var compressible = compressible_1;
-var debug = src.exports('compression');
-var onHeaders = onHeaders_1;
-var vary = vary$2.exports;
-var zlib = require$$0__default$7;
-
-/**
- * Module exports.
- */
-
-compression$2.exports = compression;
-compression$2.exports.filter = shouldCompress;
-
-/**
- * Module variables.
- * @private
- */
-
-var cacheControlNoTransformRegExp = /(?:^|,)\s*?no-transform\s*?(?:,|$)/;
-
-/**
- * Compress response data with gzip / deflate.
- *
- * @param {Object} [options]
- * @return {Function} middleware
- * @public
- */
-
-function compression (options) {
- var opts = options || {};
-
- // options
- var filter = opts.filter || shouldCompress;
- var threshold = bytes.parse(opts.threshold);
-
- if (threshold == null) {
- threshold = 1024;
- }
-
- return function compression (req, res, next) {
- var ended = false;
- var length;
- var listeners = [];
- var stream;
-
- var _end = res.end;
- var _on = res.on;
- var _write = res.write;
-
- // flush
- res.flush = function flush () {
- if (stream) {
- stream.flush();
- }
- };
-
- // proxy
-
- res.write = function write (chunk, encoding) {
- if (ended) {
- return false
- }
-
- if (!this._header) {
- this._implicitHeader();
- }
-
- return stream
- ? stream.write(toBuffer(chunk, encoding))
- : _write.call(this, chunk, encoding)
- };
-
- res.end = function end (chunk, encoding) {
- if (ended) {
- return false
- }
-
- if (!this._header) {
- // estimate the length
- if (!this.getHeader('Content-Length')) {
- length = chunkLength(chunk, encoding);
- }
-
- this._implicitHeader();
- }
-
- if (!stream) {
- return _end.call(this, chunk, encoding)
- }
-
- // mark ended
- ended = true;
-
- // write Buffer for Node.js 0.8
- return chunk
- ? stream.end(toBuffer(chunk, encoding))
- : stream.end()
- };
-
- res.on = function on (type, listener) {
- if (!listeners || type !== 'drain') {
- return _on.call(this, type, listener)
- }
-
- if (stream) {
- return stream.on(type, listener)
- }
-
- // buffer listeners for future stream
- listeners.push([type, listener]);
-
- return this
- };
-
- function nocompress (msg) {
- debug('no compression: %s', msg);
- addListeners(res, _on, listeners);
- listeners = null;
- }
-
- onHeaders(res, function onResponseHeaders () {
- // determine if request is filtered
- if (!filter(req, res)) {
- nocompress('filtered');
- return
- }
-
- // determine if the entity should be transformed
- if (!shouldTransform(req, res)) {
- nocompress('no transform');
- return
- }
-
- // vary
- vary(res, 'Accept-Encoding');
-
- // content-length below threshold
- if (Number(res.getHeader('Content-Length')) < threshold || length < threshold) {
- nocompress('size below threshold');
- return
- }
-
- var encoding = res.getHeader('Content-Encoding') || 'identity';
-
- // already encoded
- if (encoding !== 'identity') {
- nocompress('already encoded');
- return
- }
-
- // head
- if (req.method === 'HEAD') {
- nocompress('HEAD request');
- return
- }
-
- // compression method
- var accept = accepts(req);
- var method = accept.encoding(['gzip', 'deflate', 'identity']);
-
- // we really don't prefer deflate
- if (method === 'deflate' && accept.encoding(['gzip'])) {
- method = accept.encoding(['gzip', 'identity']);
- }
-
- // negotiation failed
- if (!method || method === 'identity') {
- nocompress('not acceptable');
- return
- }
-
- // compression stream
- debug('%s compression', method);
- stream = method === 'gzip'
- ? zlib.createGzip(opts)
- : zlib.createDeflate(opts);
-
- // add buffered listeners to stream
- addListeners(stream, stream.on, listeners);
-
- // header fields
- res.setHeader('Content-Encoding', method);
- res.removeHeader('Content-Length');
-
- // compression
- stream.on('data', function onStreamData (chunk) {
- if (_write.call(res, chunk) === false) {
- stream.pause();
- }
- });
-
- stream.on('end', function onStreamEnd () {
- _end.call(res);
- });
-
- _on.call(res, 'drain', function onResponseDrain () {
- stream.resume();
- });
- });
-
- next();
- }
-}
-
-/**
- * Add bufferred listeners to stream
- * @private
- */
-
-function addListeners (stream, on, listeners) {
- for (var i = 0; i < listeners.length; i++) {
- on.apply(stream, listeners[i]);
- }
-}
-
-/**
- * Get the length of a given chunk
- */
-
-function chunkLength (chunk, encoding) {
- if (!chunk) {
- return 0
- }
-
- return !Buffer$1.isBuffer(chunk)
- ? Buffer$1.byteLength(chunk, encoding)
- : chunk.length
-}
-
-/**
- * Default filter function.
- * @private
- */
-
-function shouldCompress (req, res) {
- var type = res.getHeader('Content-Type');
-
- if (type === undefined || !compressible(type)) {
- debug('%s not compressible', type);
- return false
- }
-
- return true
-}
-
-/**
- * Determine if the entity should be transformed.
- * @private
- */
-
-function shouldTransform (req, res) {
- var cacheControl = res.getHeader('Cache-Control');
-
- // Don't compress for Cache-Control: no-transform
- // https://tools.ietf.org/html/rfc7234#section-5.2.2.4
- return !cacheControl ||
- !cacheControlNoTransformRegExp.test(cacheControl)
-}
-
-/**
- * Coerce arguments to Buffer
- * @private
- */
-
-function toBuffer (chunk, encoding) {
- return !Buffer$1.isBuffer(chunk)
- ? Buffer$1.from(chunk, encoding)
- : chunk
-}
-
-var compression$1 = compression$2.exports;
-
-/**
- * Starts the Vite server in preview mode, to simulate a production deployment
- * @param config - the resolved Vite config
- * @param serverOptions - what host and port to use
- * @experimental
- */
-async function preview(config, serverOptions) {
- var _a, _b;
- const app = connect();
- const httpServer = await resolveHttpServer(config.server, app, await resolveHttpsConfig(config));
- // cors
- const { cors } = config.server;
- if (cors !== false) {
- app.use(corsMiddleware(typeof cors === 'boolean' ? {} : cors));
- }
- // proxy
- if (config.server.proxy) {
- app.use(proxyMiddleware(httpServer, config));
- }
- app.use(compression$1());
- const distDir = path__default.resolve(config.root, config.build.outDir);
- app.use(config.base, sirv(distDir, {
- etag: true,
- dev: true,
- single: true
- }));
- const options = config.server;
- const hostname = resolveHostname((_a = serverOptions.host) !== null && _a !== void 0 ? _a : options.host);
- const port = (_b = serverOptions.port) !== null && _b !== void 0 ? _b : 5000;
- const protocol = options.https ? 'https' : 'http';
- const logger = config.logger;
- const base = config.base;
- const serverPort = await httpServerStart(httpServer, {
- port,
- strictPort: options.strictPort,
- host: hostname.host,
- logger
- });
- if (options.open) {
- const path = typeof options.open === 'string' ? options.open : base;
- openBrowser(path.startsWith('http')
- ? path
- : `${protocol}://${hostname.name}:${serverPort}${path}`, true, logger);
- }
- return httpServer;
-}
-
-exports.build = build;
-exports.build$1 = build$1;
-exports.commonjsGlobal = commonjsGlobal;
-exports.createLogger = createLogger;
-exports.createServer = createServer;
-exports.defineConfig = defineConfig;
-exports.getAugmentedNamespace = getAugmentedNamespace;
-exports.getDefaultExportFromCjs = getDefaultExportFromCjs;
-exports.index = index$1;
-exports.index$1 = index;
-exports.loadConfigFromFile = loadConfigFromFile;
-exports.loadEnv = loadEnv;
-exports.mergeConfig = mergeConfig;
-exports.normalizePath = normalizePath$4;
-exports.optimizeDeps = optimizeDeps;
-exports.preview = preview;
-exports.printHttpServerUrls = printHttpServerUrls;
-exports.resolveConfig = resolveConfig;
-exports.resolveEnvPrefix = resolveEnvPrefix;
-exports.resolvePackageData = resolvePackageData;
-exports.resolvePackageEntry = resolvePackageEntry;
-exports.searchForWorkspaceRoot = searchForWorkspaceRoot;
-exports.send = send$1;
-exports.sortUserPlugins = sortUserPlugins;
-exports.source = source;
-exports.transformWithEsbuild = transformWithEsbuild;
-//# sourceMappingURL=dep-35df7f96.js.map
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-35df7f96.js.map b/packages/astro/vendor/vite/dist/node/chunks/dep-35df7f96.js.map
deleted file mode 100755
index f49f5ff3c..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-35df7f96.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"dep-35df7f96.js","sources":["../../../../../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../../../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/conversions.js","../../../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/route.js","../../../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/index.js","../../../../../node_modules/.pnpm/ansi-styles@4.3.0/node_modules/ansi-styles/index.js","../../../../../node_modules/.pnpm/has-flag@4.0.0/node_modules/has-flag/index.js","../../../../../node_modules/.pnpm/supports-color@7.2.0/node_modules/supports-color/index.js","../../../../../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/source/util.js","../../../../../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/source/templates.js","../../../../../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/source/index.js","../../../../../node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js","../../../../../node_modules/.pnpm/debug@4.3.2/node_modules/debug/src/common.js","../../../../../node_modules/.pnpm/debug@4.3.2/node_modules/debug/src/browser.js","../../../../../node_modules/.pnpm/debug@4.3.2/node_modules/debug/src/node.js","../../../../../node_modules/.pnpm/debug@4.3.2/node_modules/debug/src/index.js","../../../src/node/constants.ts","../../../../../node_modules/.pnpm/builtin-modules@3.2.0/node_modules/builtin-modules/index.js","../../../../../node_modules/.pnpm/@ampproject+remapping@1.0.1/node_modules/@ampproject/remapping/dist/remapping.mjs","../../../src/node/utils.ts","../../../src/node/logger.ts","../../../src/node/plugins/reporter.ts","../../../../../node_modules/.pnpm/sourcemap-codec@1.4.8/node_modules/sourcemap-codec/dist/sourcemap-codec.es.js","../../../../../node_modules/.pnpm/magic-string@0.25.7/node_modules/magic-string/dist/magic-string.es.js","../../../../../node_modules/.pnpm/mime@2.5.2/node_modules/mime/Mime.js","../../../../../node_modules/.pnpm/mime@2.5.2/node_modules/mime/types/standard.js","../../../../../node_modules/.pnpm/mime@2.5.2/node_modules/mime/lite.js","../../../src/node/plugins/asset.ts","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/utils/array.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/utils/errno.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/utils/fs.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/utils/path.js","../../../../../node_modules/.pnpm/is-extglob@2.1.1/node_modules/is-extglob/index.js","../../../../../node_modules/.pnpm/is-glob@4.0.1/node_modules/is-glob/index.js","../../../../../node_modules/.pnpm/glob-parent@5.1.2/node_modules/glob-parent/index.js","../../../../../node_modules/.pnpm/braces@3.0.2/node_modules/braces/lib/utils.js","../../../../../node_modules/.pnpm/braces@3.0.2/node_modules/braces/lib/stringify.js","../../../../../node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js","../../../../../node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js","../../../../../node_modules/.pnpm/fill-range@7.0.1/node_modules/fill-range/index.js","../../../../../node_modules/.pnpm/braces@3.0.2/node_modules/braces/lib/compile.js","../../../../../node_modules/.pnpm/braces@3.0.2/node_modules/braces/lib/expand.js","../../../../../node_modules/.pnpm/braces@3.0.2/node_modules/braces/lib/constants.js","../../../../../node_modules/.pnpm/braces@3.0.2/node_modules/braces/lib/parse.js","../../../../../node_modules/.pnpm/braces@3.0.2/node_modules/braces/index.js","../../../../../node_modules/.pnpm/picomatch@2.3.0/node_modules/picomatch/lib/constants.js","../../../../../node_modules/.pnpm/picomatch@2.3.0/node_modules/picomatch/lib/utils.js","../../../../../node_modules/.pnpm/picomatch@2.3.0/node_modules/picomatch/lib/scan.js","../../../../../node_modules/.pnpm/picomatch@2.3.0/node_modules/picomatch/lib/parse.js","../../../../../node_modules/.pnpm/picomatch@2.3.0/node_modules/picomatch/lib/picomatch.js","../../../../../node_modules/.pnpm/picomatch@2.3.0/node_modules/picomatch/index.js","../../../../../node_modules/.pnpm/micromatch@4.0.4/node_modules/micromatch/index.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/utils/pattern.js","../../../../../node_modules/.pnpm/merge2@1.4.1/node_modules/merge2/index.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/utils/stream.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/utils/string.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/utils/index.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/managers/tasks.js","../../../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.js","../../../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/sync.js","../../../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/adapters/fs.js","../../../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.js","../../../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/index.js","../../../../../node_modules/.pnpm/queue-microtask@1.2.3/node_modules/queue-microtask/index.js","../../../../../node_modules/.pnpm/run-parallel@1.2.0/node_modules/run-parallel/index.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/constants.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/fs.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/index.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/common.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/async.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/sync.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.js","../../../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/index.js","../../../../../node_modules/.pnpm/reusify@1.0.4/node_modules/reusify/reusify.js","../../../../../node_modules/.pnpm/fastq@1.13.0/node_modules/fastq/queue.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/common.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/reader.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/async.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/async.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/stream.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/sync.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/sync.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.js","../../../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/index.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/readers/reader.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/readers/stream.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/matchers/matcher.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/matchers/partial.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/filters/deep.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/filters/entry.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/filters/error.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/transformers/entry.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/provider.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/async.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/stream.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/readers/sync.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/providers/sync.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/settings.js","../../../../../node_modules/.pnpm/fast-glob@3.2.7/node_modules/fast-glob/out/index.js","../../../../../node_modules/.pnpm/lilconfig@2.0.3/node_modules/lilconfig/dist/index.js","../../../../../node_modules/.pnpm/yaml@1.10.2/node_modules/yaml/dist/PlainValue-ec8e588e.js","../../../../../node_modules/.pnpm/yaml@1.10.2/node_modules/yaml/dist/parse-cst.js","../../../../../node_modules/.pnpm/yaml@1.10.2/node_modules/yaml/dist/resolveSeq-d03cb037.js","../../../../../node_modules/.pnpm/yaml@1.10.2/node_modules/yaml/dist/warnings-1000a372.js","../../../../../node_modules/.pnpm/yaml@1.10.2/node_modules/yaml/dist/Schema-88e323a7.js","../../../../../node_modules/.pnpm/yaml@1.10.2/node_modules/yaml/dist/Document-9b4560a1.js","../../../../../node_modules/.pnpm/yaml@1.10.2/node_modules/yaml/dist/index.js","../../../../../node_modules/.pnpm/yaml@1.10.2/node_modules/yaml/index.js","../../../../../node_modules/.pnpm/resolve-from@5.0.0/node_modules/resolve-from/index.js","../../../../../node_modules/.pnpm/import-from@3.0.0/node_modules/import-from/index.js","../../../../../node_modules/.pnpm/import-cwd@3.0.0/node_modules/import-cwd/index.js","../../../../../node_modules/.pnpm/postcss-load-config@3.1.0_ts-node@10.2.1/node_modules/postcss-load-config/src/options.js","../../../../../node_modules/.pnpm/postcss-load-config@3.1.0_ts-node@10.2.1/node_modules/postcss-load-config/src/plugins.js","../../../../../node_modules/.pnpm/postcss-load-config@3.1.0_ts-node@10.2.1/node_modules/postcss-load-config/src/index.js","../../../../../node_modules/.pnpm/@rollup+pluginutils@4.1.1/node_modules/@rollup/pluginutils/dist/es/index.js","../../../src/node/plugins/css.ts","../../../../../node_modules/.pnpm/es-module-lexer@0.9.2/node_modules/es-module-lexer/dist/lexer.js","../../../src/node/importGlob.ts","../../../src/node/plugins/importAnalysisBuild.ts","../../../src/node/plugins/modulePreloadPolyfill.ts","../../../src/node/plugins/html.ts","../../../../../node_modules/.pnpm/tsconfck@1.0.0_typescript@4.4.3/node_modules/tsconfck/dist/index.js","../../../src/node/plugins/esbuild.ts","../../../../../node_modules/.pnpm/okie@1.0.1/node_modules/okie/dist/index.js","../../../src/node/plugins/terser.ts","../../../src/node/plugins/manifest.ts","../../../../../node_modules/.pnpm/@rollup+pluginutils@3.1.0_rollup@2.57.0/node_modules/@rollup/pluginutils/dist/es/index.js","../../../../../node_modules/.pnpm/commondir@1.0.1/node_modules/commondir/index.js","../../../../../node_modules/.pnpm/fs.realpath@1.0.0/node_modules/fs.realpath/old.js","../../../../../node_modules/.pnpm/fs.realpath@1.0.0/node_modules/fs.realpath/index.js","../../../../../node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js","../../../../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js","../../../../../node_modules/.pnpm/brace-expansion@1.1.11/node_modules/brace-expansion/index.js","../../../../../node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch/minimatch.js","../../../../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js","../../../../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits.js","../../../../../node_modules/.pnpm/path-is-absolute@1.0.1/node_modules/path-is-absolute/index.js","../../../../../node_modules/.pnpm/glob@7.2.0/node_modules/glob/common.js","../../../../../node_modules/.pnpm/glob@7.2.0/node_modules/glob/sync.js","../../../../../node_modules/.pnpm/wrappy@1.0.2/node_modules/wrappy/wrappy.js","../../../../../node_modules/.pnpm/once@1.4.0/node_modules/once/once.js","../../../../../node_modules/.pnpm/inflight@1.0.6/node_modules/inflight/inflight.js","../../../../../node_modules/.pnpm/glob@7.2.0/node_modules/glob/glob.js","../../../../../node_modules/.pnpm/estree-walker@2.0.2/node_modules/estree-walker/dist/esm/estree-walker.js","../../../../../node_modules/.pnpm/is-reference@1.2.1/node_modules/is-reference/dist/is-reference.es.js","../../../../../node_modules/.pnpm/@rollup+plugin-commonjs@21.0.0_rollup@2.57.0/node_modules/@rollup/plugin-commonjs/dist/index.es.js","../../../../../node_modules/.pnpm/array-union@2.1.0/node_modules/array-union/index.js","../../../../../node_modules/.pnpm/path-type@4.0.0/node_modules/path-type/index.js","../../../../../node_modules/.pnpm/dir-glob@3.0.1/node_modules/dir-glob/index.js","../../../../../node_modules/.pnpm/ignore@5.1.8/node_modules/ignore/index.js","../../../../../node_modules/.pnpm/slash@3.0.0/node_modules/slash/index.js","../../../../../node_modules/.pnpm/globby@11.0.4/node_modules/globby/gitignore.js","../../../../../node_modules/.pnpm/globby@11.0.4/node_modules/globby/stream-utils.js","../../../../../node_modules/.pnpm/globby@11.0.4/node_modules/globby/index.js","../../../../../node_modules/.pnpm/@rollup+plugin-dynamic-import-vars@1.4.0_rollup@2.57.0/node_modules/@rollup/plugin-dynamic-import-vars/dist/index.es.js","../../../src/node/plugins/dataUri.ts","../../../../../node_modules/.pnpm/resolve.exports@1.0.2/node_modules/resolve.exports/dist/index.mjs","../../../src/node/plugins/resolve.ts","../../../src/node/ssr/ssrExternal.ts","../../../src/node/ssr/ssrManifestPlugin.ts","../../../../../node_modules/.pnpm/acorn@8.5.0/node_modules/acorn/dist/acorn.mjs","../../../../../node_modules/.pnpm/acorn@8.5.0/node_modules/acorn/dist/acorn.js","../../../../../node_modules/.pnpm/acorn-private-class-elements@1.0.0_acorn@8.5.0/node_modules/acorn-private-class-elements/index.js","../../../../../node_modules/.pnpm/acorn-class-fields@1.0.0_acorn@8.5.0/node_modules/acorn-class-fields/index.js","../../../../../node_modules/.pnpm/acorn-static-class-features@1.0.0_acorn@8.5.0/node_modules/acorn-static-class-features/index.js","../../../../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js","../../../../../node_modules/.pnpm/strip-ansi@6.0.0/node_modules/strip-ansi/index.js","../../../src/node/server/middlewares/error.ts","../../../src/node/server/pluginContainer.ts","../../../src/node/optimizer/scan.ts","../../../src/node/plugins/assetImportMetaUrl.ts","../../../src/node/plugins/loadFallback.ts","../../../src/node/build.ts","../../../../../node_modules/.pnpm/ms@2.0.0/node_modules/ms/index.js","../../../../../node_modules/.pnpm/debug@2.6.9/node_modules/debug/src/debug.js","../../../../../node_modules/.pnpm/debug@2.6.9/node_modules/debug/src/browser.js","../../../../../node_modules/.pnpm/debug@2.6.9/node_modules/debug/src/node.js","../../../../../node_modules/.pnpm/debug@2.6.9/node_modules/debug/src/index.js","../../../../../node_modules/.pnpm/encodeurl@1.0.2/node_modules/encodeurl/index.js","../../../../../node_modules/.pnpm/escape-html@1.0.3/node_modules/escape-html/index.js","../../../../../node_modules/.pnpm/ee-first@1.1.1/node_modules/ee-first/index.js","../../../../../node_modules/.pnpm/on-finished@2.3.0/node_modules/on-finished/index.js","../../../../../node_modules/.pnpm/parseurl@1.3.3/node_modules/parseurl/index.js","../../../../../node_modules/.pnpm/statuses@1.5.0/node_modules/statuses/index.js","../../../../../node_modules/.pnpm/unpipe@1.0.0/node_modules/unpipe/index.js","../../../../../node_modules/.pnpm/finalhandler@1.1.2/node_modules/finalhandler/index.js","../../../../../node_modules/.pnpm/utils-merge@1.0.1/node_modules/utils-merge/index.js","../../../../../node_modules/.pnpm/connect@3.7.0/node_modules/connect/index.js","../../../../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js","../../../../../node_modules/.pnpm/vary@1.1.2/node_modules/vary/index.js","../../../../../node_modules/.pnpm/cors@2.8.5/node_modules/cors/lib/index.js","../../../../../node_modules/.pnpm/readdirp@3.6.0/node_modules/readdirp/index.js","../../../../../node_modules/.pnpm/normalize-path@3.0.0/node_modules/normalize-path/index.js","../../../../../node_modules/.pnpm/anymatch@3.1.2/node_modules/anymatch/index.js","../../../../../node_modules/.pnpm/binary-extensions@2.2.0/node_modules/binary-extensions/index.js","../../../../../node_modules/.pnpm/is-binary-path@2.1.0/node_modules/is-binary-path/index.js","../../../../../node_modules/.pnpm/chokidar@3.5.2/node_modules/chokidar/lib/constants.js","../../../../../node_modules/.pnpm/chokidar@3.5.2/node_modules/chokidar/lib/nodefs-handler.js","../../../../../node_modules/.pnpm/chokidar@3.5.2/node_modules/chokidar/lib/fsevents-handler.js","../../../../../node_modules/.pnpm/chokidar@3.5.2/node_modules/chokidar/index.js","../../../src/node/server/http.ts","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/constants.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/buffer-util.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/limiter.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/permessage-deflate.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/validation.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/receiver.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/sender.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/event-target.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/extension.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/websocket.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/stream.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/lib/websocket-server.js","../../../../../node_modules/.pnpm/ws@7.5.5/node_modules/ws/index.js","../../../src/node/server/ws.ts","../../../src/node/server/middlewares/base.ts","../../../../../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js","../../../../../node_modules/.pnpm/requires-port@1.0.0/node_modules/requires-port/index.js","../../../../../node_modules/.pnpm/http-proxy@1.18.1_debug@4.3.2/node_modules/http-proxy/lib/http-proxy/common.js","../../../../../node_modules/.pnpm/http-proxy@1.18.1_debug@4.3.2/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js","../../../../../node_modules/.pnpm/follow-redirects@1.14.4/node_modules/follow-redirects/debug.js","../../../../../node_modules/.pnpm/follow-redirects@1.14.4/node_modules/follow-redirects/index.js","../../../../../node_modules/.pnpm/http-proxy@1.18.1_debug@4.3.2/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js","../../../../../node_modules/.pnpm/http-proxy@1.18.1_debug@4.3.2/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js","../../../../../node_modules/.pnpm/http-proxy@1.18.1_debug@4.3.2/node_modules/http-proxy/lib/http-proxy/index.js","../../../../../node_modules/.pnpm/http-proxy@1.18.1_debug@4.3.2/node_modules/http-proxy/lib/http-proxy.js","../../../../../node_modules/.pnpm/http-proxy@1.18.1_debug@4.3.2/node_modules/http-proxy/index.js","../../../src/node/server/middlewares/proxy.ts","../../../../../node_modules/.pnpm/connect-history-api-fallback@1.6.0/node_modules/connect-history-api-fallback/lib/index.js","../../../src/node/server/middlewares/spaFallback.ts","../../../../../node_modules/.pnpm/etag@1.8.1/node_modules/etag/index.js","../../../src/node/server/send.ts","../../../../../node_modules/.pnpm/safe-buffer@5.1.2/node_modules/safe-buffer/index.js","../../../../../node_modules/.pnpm/convert-source-map@1.8.0/node_modules/convert-source-map/index.js","../../../../../node_modules/.pnpm/periscopic@2.0.3/node_modules/periscopic/dist/periscopic.mjs","../../../src/node/ssr/ssrTransform.ts","../../../src/node/server/sourcemap.ts","../../../../../node_modules/.pnpm/@polka+url@1.0.0-next.20/node_modules/@polka/url/build.mjs","../../../../../node_modules/.pnpm/totalist@1.1.0/node_modules/totalist/sync/index.mjs","../../../../../node_modules/.pnpm/sirv@1.0.17/node_modules/sirv/build.mjs","../../../src/node/server/middlewares/static.ts","../../../src/node/server/transformRequest.ts","../../../src/node/server/middlewares/transform.ts","../../../src/node/server/middlewares/indexHtml.ts","../../../src/node/server/middlewares/time.ts","../../../src/node/server/moduleGraph.ts","../../../src/node/server/hmr.ts","../../../../../node_modules/.pnpm/is-docker@2.2.1/node_modules/is-docker/index.js","../../../../../node_modules/.pnpm/is-wsl@2.2.0/node_modules/is-wsl/index.js","../../../../../node_modules/.pnpm/define-lazy-prop@2.0.0/node_modules/define-lazy-prop/index.js","../../../../../node_modules/.pnpm/open@8.2.1/node_modules/open/index.js","../../../../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js","../../../../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js","../../../../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js","../../../../../node_modules/.pnpm/which@2.0.2/node_modules/which/which.js","../../../../../node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js","../../../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/util/resolveCommand.js","../../../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/util/escape.js","../../../../../node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js","../../../../../node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js","../../../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/util/readShebang.js","../../../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/parse.js","../../../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/lib/enoent.js","../../../../../node_modules/.pnpm/cross-spawn@7.0.3/node_modules/cross-spawn/index.js","../../../../../node_modules/.pnpm/strip-final-newline@2.0.0/node_modules/strip-final-newline/index.js","../../../../../node_modules/.pnpm/npm-run-path@4.0.1/node_modules/npm-run-path/index.js","../../../../../node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js","../../../../../node_modules/.pnpm/onetime@5.1.2/node_modules/onetime/index.js","../../../../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/core.js","../../../../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/realtime.js","../../../../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/signals.js","../../../../../node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/main.js","../../../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js","../../../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stdio.js","../../../../../node_modules/.pnpm/signal-exit@3.0.4/node_modules/signal-exit/signals.js","../../../../../node_modules/.pnpm/signal-exit@3.0.4/node_modules/signal-exit/index.js","../../../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/kill.js","../../../../../node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js","../../../../../node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/buffer-stream.js","../../../../../node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/index.js","../../../../../node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.js","../../../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stream.js","../../../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/promise.js","../../../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/command.js","../../../../../node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js","../../../src/node/server/openBrowser.ts","../../../../../node_modules/.pnpm/escape-string-regexp@1.0.5/node_modules/escape-string-regexp/index.js","../../../../../node_modules/.pnpm/color-name@1.1.3/node_modules/color-name/index.js","../../../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/conversions.js","../../../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/route.js","../../../../../node_modules/.pnpm/color-convert@1.9.3/node_modules/color-convert/index.js","../../../../../node_modules/.pnpm/ansi-styles@3.2.1/node_modules/ansi-styles/index.js","../../../../../node_modules/.pnpm/has-flag@3.0.0/node_modules/has-flag/index.js","../../../../../node_modules/.pnpm/supports-color@5.5.0/node_modules/supports-color/index.js","../../../../../node_modules/.pnpm/chalk@2.4.2/node_modules/chalk/templates.js","../../../../../node_modules/.pnpm/chalk@2.4.2/node_modules/chalk/index.js","../../../../../node_modules/.pnpm/shell-quote@1.7.2/node_modules/shell-quote/index.js","../../../../../node_modules/.pnpm/launch-editor@2.2.1/node_modules/launch-editor/editor-info/osx.js","../../../../../node_modules/.pnpm/launch-editor@2.2.1/node_modules/launch-editor/editor-info/linux.js","../../../../../node_modules/.pnpm/launch-editor@2.2.1/node_modules/launch-editor/editor-info/windows.js","../../../../../node_modules/.pnpm/launch-editor@2.2.1/node_modules/launch-editor/guess.js","../../../../../node_modules/.pnpm/launch-editor@2.2.1/node_modules/launch-editor/get-args.js","../../../../../node_modules/.pnpm/launch-editor@2.2.1/node_modules/launch-editor/index.js","../../../../../node_modules/.pnpm/launch-editor-middleware@2.2.1/node_modules/launch-editor-middleware/index.js","../../../src/node/optimizer/esbuildDepPlugin.ts","../../../src/node/optimizer/index.ts","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/base64.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/util.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/array-set.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/binary-search.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-node.js","../../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/source-map.js","../../../src/node/ssr/ssrStacktrace.ts","../../../src/node/ssr/ssrModuleLoader.ts","../../../src/node/optimizer/registerMissing.ts","../../../src/node/server/searchRoot.ts","../../../src/node/server/index.ts","../../../../../node_modules/.pnpm/@rollup+plugin-alias@3.1.5_rollup@2.57.0/node_modules/@rollup/plugin-alias/dist/index.es.js","../../../src/node/plugins/json.ts","../../../src/node/plugins/importAnalysis.ts","../../../src/node/plugins/clientInjections.ts","../../../src/node/plugins/wasm.ts","../../../src/node/plugins/worker.ts","../../../src/node/plugins/preAlias.ts","../../../src/node/plugins/define.ts","../../../src/node/plugins/index.ts","../../../../../node_modules/.pnpm/dotenv@10.0.0/node_modules/dotenv/lib/main.js","../../../../../node_modules/.pnpm/dotenv-expand@5.1.0/node_modules/dotenv-expand/lib/main.js","../../../src/node/config.ts","../../../../../node_modules/.pnpm/negotiator@0.6.2/node_modules/negotiator/lib/charset.js","../../../../../node_modules/.pnpm/negotiator@0.6.2/node_modules/negotiator/lib/encoding.js","../../../../../node_modules/.pnpm/negotiator@0.6.2/node_modules/negotiator/lib/language.js","../../../../../node_modules/.pnpm/negotiator@0.6.2/node_modules/negotiator/lib/mediaType.js","../../../../../node_modules/.pnpm/negotiator@0.6.2/node_modules/negotiator/index.js","../../../../../node_modules/.pnpm/mime-db@1.49.0/node_modules/mime-db/index.js","../../../../../node_modules/.pnpm/mime-types@2.1.32/node_modules/mime-types/index.js","../../../../../node_modules/.pnpm/accepts@1.3.7/node_modules/accepts/index.js","../../../../../node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js","../../../../../node_modules/.pnpm/mime-db@1.50.0/node_modules/mime-db/index.js","../../../../../node_modules/.pnpm/compressible@2.0.18/node_modules/compressible/index.js","../../../../../node_modules/.pnpm/on-headers@1.0.2/node_modules/on-headers/index.js","../../../../../node_modules/.pnpm/compression@1.7.4/node_modules/compression/index.js","../../../src/node/preview.ts"],"sourcesContent":["'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const [styleName, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","import path from 'path'\n\nexport const DEFAULT_MAIN_FIELDS = [\n 'module',\n 'jsnext:main', // moment still uses this...\n 'jsnext'\n]\n\nexport const DEFAULT_EXTENSIONS = [\n '.mjs',\n '.js',\n '.ts',\n '.jsx',\n '.tsx',\n '.json'\n]\n\nexport const JS_TYPES_RE = /\\.(?:j|t)sx?$|\\.mjs$/\n\nexport const OPTIMIZABLE_ENTRY_RE = /\\.(?:m?js|ts)$/\n\nexport const SPECIAL_QUERY_RE = /[\\?&](?:worker|sharedworker|raw|url)\\b/\n\n/**\n * Prefix for resolved fs paths, since windows paths may not be valid as URLs.\n */\nexport const FS_PREFIX = `/@fs/`\n\n/**\n * Prefix for resolved Ids that are not valid browser import specifiers\n */\nexport const VALID_ID_PREFIX = `/@id/`\n\n/**\n * Some Rollup plugins use ids that starts with the null byte \\0 to avoid\n * collisions, but it is not permitted in import URLs so we have to replace\n * them.\n */\nexport const NULL_BYTE_PLACEHOLDER = `__x00__`\n\nexport const CLIENT_PUBLIC_PATH = `/@vite/client`\nexport const ENV_PUBLIC_PATH = `/@vite/env`\n// eslint-disable-next-line node/no-missing-require\nexport const CLIENT_ENTRY = require.resolve('vite/dist/client/client.mjs')\n// eslint-disable-next-line node/no-missing-require\nexport const ENV_ENTRY = require.resolve('vite/dist/client/env.mjs')\nexport const CLIENT_DIR = path.dirname(CLIENT_ENTRY)\n\n// ** READ THIS ** before editing `KNOWN_ASSET_TYPES`.\n// If you add an asset to `KNOWN_ASSET_TYPES`, make sure to also add it\n// to the TypeScript declaration file `packages/vite/client.d.ts`.\nexport const KNOWN_ASSET_TYPES = [\n // images\n 'png',\n 'jpe?g',\n 'gif',\n 'svg',\n 'ico',\n 'webp',\n 'avif',\n\n // media\n 'mp4',\n 'webm',\n 'ogg',\n 'mp3',\n 'wav',\n 'flac',\n 'aac',\n\n // fonts\n 'woff2?',\n 'eot',\n 'ttf',\n 'otf',\n\n // other\n 'wasm',\n 'webmanifest',\n 'pdf'\n]\n\nexport const DEFAULT_ASSETS_RE = new RegExp(\n `\\\\.(` + KNOWN_ASSET_TYPES.join('|') + `)(\\\\?.*)?$`\n)\n\nexport const DEP_VERSION_RE = /[\\?&](v=[\\w\\.-]+)\\b/\n","'use strict';\nconst {builtinModules} = require('module');\n\nconst ignoreList = [\n\t'sys'\n];\n\n// eslint-disable-next-line node/no-deprecated-api\nmodule.exports = (builtinModules || Object.keys(process.binding('natives')))\n\t.filter(x => !/^_|^(internal|v8|node-inspect)\\/|\\//.test(x) && !ignoreList.includes(x))\n\t.sort();\n","var charToInteger = {};\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nfor (var i = 0; i < chars.length; i++) {\n charToInteger[chars.charCodeAt(i)] = i;\n}\nfunction decode(mappings) {\n var decoded = [];\n var line = [];\n var segment = [\n 0,\n 0,\n 0,\n 0,\n 0,\n ];\n var j = 0;\n for (var i = 0, shift = 0, value = 0; i < mappings.length; i++) {\n var c = mappings.charCodeAt(i);\n if (c === 44) { // \",\"\n segmentify(line, segment, j);\n j = 0;\n }\n else if (c === 59) { // \";\"\n segmentify(line, segment, j);\n j = 0;\n decoded.push(line);\n line = [];\n segment[0] = 0;\n }\n else {\n var integer = charToInteger[c];\n if (integer === undefined) {\n throw new Error('Invalid character (' + String.fromCharCode(c) + ')');\n }\n var hasContinuationBit = integer & 32;\n integer &= 31;\n value += integer << shift;\n if (hasContinuationBit) {\n shift += 5;\n }\n else {\n var shouldNegate = value & 1;\n value >>>= 1;\n if (shouldNegate) {\n value = value === 0 ? -0x80000000 : -value;\n }\n segment[j] += value;\n j++;\n value = shift = 0; // reset\n }\n }\n }\n segmentify(line, segment, j);\n decoded.push(line);\n return decoded;\n}\nfunction segmentify(line, segment, j) {\n // This looks ugly, but we're creating specialized arrays with a specific\n // length. This is much faster than creating a new array (which v8 expands to\n // a capacity of 17 after pushing the first item), or slicing out a subarray\n // (which is slow). Length 4 is assumed to be the most frequent, followed by\n // length 5 (since not everything will have an associated name), followed by\n // length 1 (it's probably rare for a source substring to not have an\n // associated segment data).\n if (j === 4)\n line.push([segment[0], segment[1], segment[2], segment[3]]);\n else if (j === 5)\n line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\n else if (j === 1)\n line.push([segment[0]]);\n}\nfunction encode(decoded) {\n var sourceFileIndex = 0; // second field\n var sourceCodeLine = 0; // third field\n var sourceCodeColumn = 0; // fourth field\n var nameIndex = 0; // fifth field\n var mappings = '';\n for (var i = 0; i < decoded.length; i++) {\n var line = decoded[i];\n if (i > 0)\n mappings += ';';\n if (line.length === 0)\n continue;\n var generatedCodeColumn = 0; // first field\n var lineMappings = [];\n for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {\n var segment = line_1[_i];\n var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n generatedCodeColumn = segment[0];\n if (segment.length > 1) {\n segmentMappings +=\n encodeInteger(segment[1] - sourceFileIndex) +\n encodeInteger(segment[2] - sourceCodeLine) +\n encodeInteger(segment[3] - sourceCodeColumn);\n sourceFileIndex = segment[1];\n sourceCodeLine = segment[2];\n sourceCodeColumn = segment[3];\n }\n if (segment.length === 5) {\n segmentMappings += encodeInteger(segment[4] - nameIndex);\n nameIndex = segment[4];\n }\n lineMappings.push(segmentMappings);\n }\n mappings += lineMappings.join(',');\n }\n return mappings;\n}\nfunction encodeInteger(num) {\n var result = '';\n num = num < 0 ? (-num << 1) | 1 : num << 1;\n do {\n var clamped = num & 31;\n num >>>= 5;\n if (num > 0) {\n clamped |= 32;\n }\n result += chars[clamped];\n } while (num > 0);\n return result;\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Creates a brand new (prototype-less) object with the enumerable-own\n * properties of `target`. Any enumerable-own properties from `source` which\n * are not present on `target` will be copied as well.\n */\nfunction defaults(target, source) {\n return Object.assign(Object.create(null), source, target);\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Decodes an input sourcemap into a `DecodedSourceMap` sourcemap object.\n *\n * Valid input maps include a `DecodedSourceMap`, a `RawSourceMap`, or JSON\n * representations of either type.\n */\nfunction decodeSourceMap(map) {\n if (typeof map === 'string') {\n map = JSON.parse(map);\n }\n let { mappings } = map;\n if (typeof mappings === 'string') {\n mappings = sortMappings(decode(mappings), true);\n }\n else {\n // Clone the Line so that we can sort it. We don't want to mutate an array\n // that we don't own directly.\n mappings = sortMappings(mappings, false);\n }\n return defaults({ mappings }, map);\n}\nfunction firstUnsortedSegmentLine(mappings) {\n for (let i = 0; i < mappings.length; i++) {\n const segments = mappings[i];\n for (let j = 1; j < segments.length; j++) {\n if (segments[j][0] < segments[j - 1][0]) {\n return i;\n }\n }\n }\n return mappings.length;\n}\nfunction sortMappings(mappings, owned) {\n const unosrtedIndex = firstUnsortedSegmentLine(mappings);\n if (unosrtedIndex === mappings.length)\n return mappings;\n if (!owned)\n mappings = mappings.slice();\n for (let i = unosrtedIndex; i < mappings.length; i++) {\n mappings[i] = sortSegments(mappings[i], owned);\n }\n return mappings;\n}\nfunction sortSegments(segments, owned) {\n if (!owned)\n segments = segments.slice();\n return segments.sort(segmentComparator);\n}\nfunction segmentComparator(a, b) {\n return a[0] - b[0];\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A \"leaf\" node in the sourcemap tree, representing an original, unmodified\n * source file. Recursive segment tracing ends at the `OriginalSource`.\n */\nclass OriginalSource {\n constructor(filename, content) {\n this.filename = filename;\n this.content = content;\n }\n /**\n * Tracing a `SourceMapSegment` ends when we get to an `OriginalSource`,\n * meaning this line/column location originated from this source file.\n */\n traceSegment(line, column, name) {\n return { column, line, name, source: this };\n }\n}\n\n/* istanbul ignore next */\nconst Url = (typeof URL !== 'undefined' ? URL : require('url').URL);\n// Matches \"..\", which must be preceeded by \"/\" or the start of the string, and\n// must be followed by a \"/\". We do not eat the following \"/\", so that the next\n// iteration can match on it.\nconst parentRegex = /(^|\\/)\\.\\.(?=\\/|$)/g;\nfunction isAbsoluteUrl(url) {\n try {\n return !!new Url(url);\n }\n catch (e) {\n return false;\n }\n}\n/**\n * Creates a directory name that is guaranteed to not be in `str`.\n */\nfunction uniqInStr(str) {\n let uniq = String(Math.random()).slice(2);\n while (str.indexOf(uniq) > -1) {\n /* istanbul ignore next */\n uniq += uniq;\n }\n return uniq;\n}\n/**\n * Removes the filename from the path (everything trailing the last \"/\"). This\n * is only safe to call on a path, never call with an absolute or protocol\n * relative URL.\n */\nfunction stripPathFilename(path) {\n path = normalizePath(path);\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\n/**\n * Normalizes a protocol-relative URL, but keeps it protocol relative by\n * stripping out the protocl before returning it.\n */\nfunction normalizeProtocolRelative(input, absoluteBase) {\n const { href, protocol } = new Url(input, absoluteBase);\n return href.slice(protocol.length);\n}\n/**\n * Normalizes a simple path (one that has no \"..\"s, or is absolute so \"..\"s can\n * be normalized absolutely).\n */\nfunction normalizeSimplePath(input) {\n const { href } = new Url(input, 'https://foo.com/');\n return href.slice('https://foo.com/'.length);\n}\n/**\n * Normalizes a path, ensuring that excess \"..\"s are preserved for relative\n * paths in the output.\n *\n * If the input is absolute, this will return an absolutey normalized path, but\n * it will not have a leading \"/\".\n *\n * If the input has a leading \"..\", the output will have a leading \"..\".\n *\n * If the input has a leading \".\", the output will not have a leading \".\"\n * unless there are too many \"..\"s, in which case there will be a leading \"..\".\n */\nfunction normalizePath(input) {\n // If there are no \"..\"s, we can treat this as if it were an absolute path.\n // The return won't be an absolute path, so it's easy.\n if (!parentRegex.test(input))\n return normalizeSimplePath(input);\n // We already found one \"..\". Let's see how many there are.\n let total = 1;\n while (parentRegex.test(input))\n total++;\n // If there are \"..\"s, we need to prefix the the path with the same number of\n // unique directories. This is to ensure that we \"remember\" how many parent\n // directories we are accessing. Eg, \"../../..\" must keep 3, and \"foo/../..\"\n // must keep 1.\n const uniqDirectory = `z${uniqInStr(input)}/`;\n // uniqDirectory is just a \"z\", followed by numbers, followed by a \"/\". So\n // generating a runtime regex from it is safe. We'll use this search regex to\n // strip out our uniq directory names and insert any needed \"..\"s.\n const search = new RegExp(`^(?:${uniqDirectory})*`);\n // Now we can resolve the total path. If there are excess \"..\"s, they will\n // eliminate one or more of the unique directories we prefix with.\n const relative = normalizeSimplePath(uniqDirectory.repeat(total) + input);\n // We can now count the number of unique directories that were eliminated. If\n // there were 3, and 1 was eliminated, we know we only need to add 1 \"..\". If\n // 2 were eliminated, we need to insert 2 \"..\"s. If all 3 were eliminated,\n // then we need 3, etc. This replace is guranteed to match (it may match 0 or\n // more times), and we can count the total match to see how many were eliminated.\n return relative.replace(search, (all) => {\n const leftover = all.length / uniqDirectory.length;\n return '../'.repeat(total - leftover);\n });\n}\n/**\n * Attempts to resolve `input` URL relative to `base`.\n */\nfunction resolve(input, base) {\n if (!base)\n base = '';\n // Absolute URLs are very easy to resolve right.\n if (isAbsoluteUrl(input))\n return new Url(input).href;\n if (base) {\n // Absolute URLs are easy...\n if (isAbsoluteUrl(base))\n return new Url(input, base).href;\n // If base is protocol relative, we'll resolve with it but keep the result\n // protocol relative.\n if (base.startsWith('//'))\n return normalizeProtocolRelative(input, `https:${base}`);\n }\n // Normalize input, but keep it protocol relative. We know base doesn't supply\n // a protocol, because that would have been handled above.\n if (input.startsWith('//'))\n return normalizeProtocolRelative(input, 'https://foo.com/');\n // We now know that base (if there is one) and input are paths. We've handled\n // both absolute and protocol-relative variations above.\n // Absolute paths don't need any special handling, because they cannot have\n // extra \".\" or \"..\"s. That'll all be stripped away. Input takes priority here,\n // because if input is an absolute path, base path won't affect it in any way.\n if (input.startsWith('/'))\n return '/' + normalizeSimplePath(input);\n // Since input and base are paths, we need to join them to do any further\n // processing. Paths are joined at the directory level, so we need to remove\n // the base's filename before joining. We also know that input does not have a\n // leading slash, and that the stripped base will have a trailing slash if\n // there are any directories (or it'll be empty).\n const joined = stripPathFilename(base) + input;\n // If base is an absolute path, then input will be relative to it.\n if (base.startsWith('/'))\n return '/' + normalizeSimplePath(joined);\n // We now know both base (if there is one) and input are relative paths.\n const relative = normalizePath(joined);\n // If base started with a leading \".\", or there is no base and input started\n // with a \".\", then we need to ensure that the relative path starts with a\n // \".\". We don't know if relative starts with a \"..\", though, so check before\n // prepending.\n if ((base || input).startsWith('.') && !relative.startsWith('.')) {\n return './' + relative;\n }\n return relative;\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction resolve$1(input, base) {\n // The base is always treated as a directory, if it's not empty.\n // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327\n // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401\n if (base && !base.endsWith('/'))\n base += '/';\n return resolve(input, base);\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A binary search implementation that returns the index if a match is found,\n * or the negated index of where the `needle` should be inserted.\n *\n * The `comparator` callback receives both the `item` under comparison and the\n * needle we are searching for. It must return `0` if the `item` is a match,\n * any negative number if `item` is too small (and we must search after it), or\n * any positive number if the `item` is too large (and we must search before\n * it).\n *\n * If no match is found, a negated index of where to insert the `needle` is\n * returned. This negated index is guaranteed to be less than 0. To insert an\n * item, negate it (again) and splice:\n *\n * ```js\n * const array = [1, 3];\n * const needle = 2;\n * const index = binarySearch(array, needle, (item, needle) => item - needle);\n *\n * assert.equal(index, -2);\n * assert.equal(~index, 1);\n * array.splice(~index, 0, needle);\n * assert.deepEqual(array, [1, 2, 3]);\n * ```\n */\nfunction binarySearch(haystack, needle, comparator, low, high) {\n low = Math.max(low, 0);\n while (low <= high) {\n const mid = low + ((high - low) >> 1);\n const cmp = comparator(haystack[mid], needle);\n if (cmp === 0) {\n return mid;\n }\n if (cmp < 0) {\n low = mid + 1;\n }\n else {\n high = mid - 1;\n }\n }\n return ~low;\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * FastStringArray acts like a `Set` (allowing only one occurrence of a string\n * `key`), but provides the index of the `key` in the backing array.\n *\n * This is designed to allow synchronizing a second array with the contents of\n * the backing array, like how `sourcesContent[i]` is the source content\n * associated with `source[i]`, and there are never duplicates.\n */\nclass FastStringArray {\n constructor() {\n this.indexes = Object.create(null);\n this.array = [];\n }\n /**\n * Puts `key` into the backing array, if it is not already present. Returns\n * the index of the `key` in the backing array.\n */\n put(key) {\n const { array, indexes } = this;\n // The key may or may not be present. If it is present, it's a number.\n let index = indexes[key];\n // If it's not yet present, we need to insert it and track the index in the\n // indexes.\n if (index === undefined) {\n index = indexes[key] = array.length;\n array.push(key);\n }\n return index;\n }\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * SourceMapTree represents a single sourcemap, with the ability to trace\n * mappings into its child nodes (which may themselves be SourceMapTrees).\n */\nclass SourceMapTree {\n constructor(map, sources) {\n this.map = map;\n this.sources = sources;\n this.lastLine = 0;\n this.lastColumn = 0;\n this.lastIndex = 0;\n }\n /**\n * traceMappings is only called on the root level SourceMapTree, and begins\n * the process of resolving each mapping in terms of the original source\n * files.\n */\n traceMappings() {\n const mappings = [];\n const names = new FastStringArray();\n const sources = new FastStringArray();\n const sourcesContent = [];\n const { mappings: rootMappings, names: rootNames } = this.map;\n for (let i = 0; i < rootMappings.length; i++) {\n const segments = rootMappings[i];\n const tracedSegments = [];\n let lastTraced = undefined;\n for (let j = 0; j < segments.length; j++) {\n const segment = segments[j];\n // 1-length segments only move the current generated column, there's no\n // source information to gather from it.\n if (segment.length === 1)\n continue;\n const source = this.sources[segment[1]];\n const traced = source.traceSegment(segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : '');\n if (!traced)\n continue;\n // So we traced a segment down into its original source file. Now push a\n // new segment pointing to this location.\n const { column, line, name } = traced;\n const { content, filename } = traced.source;\n // Store the source location, and ensure we keep sourcesContent up to\n // date with the sources array.\n const sourceIndex = sources.put(filename);\n sourcesContent[sourceIndex] = content;\n if (lastTraced &&\n lastTraced[1] === sourceIndex &&\n lastTraced[2] === line &&\n lastTraced[3] === column) {\n // This is a duplicate mapping pointing at the exact same starting point in the source file.\n // It doesn't provide any new information, and only bloats the sourcemap.\n continue;\n }\n // This looks like unnecessary duplication, but it noticeably increases\n // performance. If we were to push the nameIndex onto length-4 array, v8\n // would internally allocate 22 slots! That's 68 wasted bytes! Array\n // literals have the same capacity as their length, saving memory.\n if (name) {\n lastTraced = [segment[0], sourceIndex, line, column, names.put(name)];\n }\n else {\n lastTraced = [segment[0], sourceIndex, line, column];\n }\n tracedSegments.push(lastTraced);\n }\n mappings.push(tracedSegments);\n }\n // TODO: Make all sources relative to the sourceRoot.\n return defaults({\n mappings,\n names: names.array,\n sources: sources.array,\n sourcesContent,\n }, this.map);\n }\n /**\n * traceSegment is only called on children SourceMapTrees. It recurses down\n * into its own child SourceMapTrees, until we find the original source map.\n */\n traceSegment(line, column, name) {\n const { mappings, names } = this.map;\n // It's common for parent sourcemaps to have pointers to lines that have no\n // mapping (like a \"//# sourceMappingURL=\") at the end of the child file.\n if (line >= mappings.length)\n return null;\n const segments = mappings[line];\n if (segments.length === 0)\n return null;\n let low = 0;\n let high = segments.length - 1;\n if (line === this.lastLine) {\n if (column >= this.lastColumn) {\n low = this.lastIndex;\n }\n else {\n high = this.lastIndex;\n }\n }\n let index = binarySearch(segments, column, segmentComparator$1, low, high);\n this.lastLine = line;\n this.lastColumn = column;\n if (index === -1) {\n this.lastIndex = index;\n return null; // we come before any mapped segment\n }\n // If we can't find a segment that lines up to this column, we use the\n // segment before.\n if (index < 0) {\n index = ~index - 1;\n }\n this.lastIndex = index;\n const segment = segments[index];\n // 1-length segments only move the current generated column, there's no\n // source information to gather from it.\n if (segment.length === 1)\n return null;\n const source = this.sources[segment[1]];\n // So now we can recurse down, until we hit the original source file.\n return source.traceSegment(segment[2], segment[3], \n // A child map's recorded name for this segment takes precedence over the\n // parent's mapped name. Imagine a mangler changing the name over, etc.\n segment.length === 5 ? names[segment[4]] : name);\n }\n}\nfunction segmentComparator$1(segment, column) {\n return segment[0] - column;\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Removes the filename from a path.\n */\nfunction stripFilename(path) {\n if (!path)\n return '';\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction asArray(value) {\n if (Array.isArray(value))\n return value;\n return [value];\n}\n/**\n * Recursively builds a tree structure out of sourcemap files, with each node\n * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n * `OriginalSource`s and `SourceMapTree`s.\n *\n * Every sourcemap is composed of a collection of source files and mappings\n * into locations of those source files. When we generate a `SourceMapTree` for\n * the sourcemap, we attempt to load each source file's own sourcemap. If it\n * does not have an associated sourcemap, it is considered an original,\n * unmodified source file.\n */\nfunction buildSourceMapTree(input, loader, relativeRoot) {\n const maps = asArray(input).map(decodeSourceMap);\n const map = maps.pop();\n for (let i = 0; i < maps.length; i++) {\n if (maps[i].sources.length !== 1) {\n throw new Error(`Transformation map ${i} must have exactly one source file.\\n` +\n 'Did you specify these with the most recent transformation maps first?');\n }\n }\n const { sourceRoot, sources, sourcesContent } = map;\n const children = sources.map((sourceFile, i) => {\n // Each source file is loaded relative to the sourcemap's own sourceRoot,\n // which is itself relative to the sourcemap's parent.\n const uri = resolve$1(sourceFile || '', resolve$1(sourceRoot || '', stripFilename(relativeRoot)));\n // Use the provided loader callback to retrieve the file's sourcemap.\n // TODO: We should eventually support async loading of sourcemap files.\n const sourceMap = loader(uri);\n // If there is no sourcemap, then it is an unmodified source file.\n if (!sourceMap) {\n // The source file's actual contents must be included in the sourcemap\n // (done when generating the sourcemap) for it to be included as a\n // sourceContent in the output sourcemap.\n const sourceContent = sourcesContent ? sourcesContent[i] : null;\n return new OriginalSource(uri, sourceContent);\n }\n // Else, it's a real sourcemap, and we need to recurse into it to load its\n // source files.\n return buildSourceMapTree(decodeSourceMap(sourceMap), loader, uri);\n });\n let tree = new SourceMapTree(map, children);\n for (let i = maps.length - 1; i >= 0; i--) {\n tree = new SourceMapTree(maps[i], [tree]);\n }\n return tree;\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A SourceMap v3 compatible sourcemap, which only includes fields that were\n * provided to it.\n */\nclass SourceMap {\n constructor(map, options) {\n this.version = 3; // SourceMap spec says this should be first.\n if ('file' in map)\n this.file = map.file;\n this.mappings = options.decodedMappings ? map.mappings : encode(map.mappings);\n this.names = map.names;\n // TODO: We first need to make all source URIs relative to the sourceRoot\n // before we can support a sourceRoot.\n // if ('sourceRoot' in map) this.sourceRoot = map.sourceRoot;\n this.sources = map.sources;\n if (!options.excludeContent && 'sourcesContent' in map) {\n this.sourcesContent = map.sourcesContent;\n }\n }\n toString() {\n return JSON.stringify(this);\n }\n}\n\n/**\n * Copyright 2019 The AMP HTML Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Traces through all the mappings in the root sourcemap, through the sources\n * (and their sourcemaps), all the way back to the original source location.\n *\n * `loader` will be called every time we encounter a source file. If it returns\n * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n * it returns a falsey value, that source file is treated as an original,\n * unmodified source file.\n *\n * Pass `excludeContent` to exclude any self-containing source file content\n * from the output sourcemap.\n *\n * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n * VLQ encoded) mappings.\n */\nfunction remapping(input, loader, options) {\n const opts = typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };\n const graph = buildSourceMapTree(input, loader);\n return new SourceMap(graph.traceMappings(), opts);\n}\n\nexport default remapping;\n//# sourceMappingURL=remapping.mjs.map\n","import debug from 'debug'\nimport chalk from 'chalk'\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\nimport { pathToFileURL, URL } from 'url'\nimport {\n FS_PREFIX,\n DEFAULT_EXTENSIONS,\n VALID_ID_PREFIX,\n CLIENT_PUBLIC_PATH,\n ENV_PUBLIC_PATH\n} from './constants'\nimport resolve from 'resolve'\nimport builtins from 'builtin-modules'\nimport { FSWatcher } from 'chokidar'\nimport remapping from '@ampproject/remapping'\nimport {\n DecodedSourceMap,\n RawSourceMap\n} from '@ampproject/remapping/dist/types/types'\nimport { performance } from 'perf_hooks'\n\nexport function slash(p: string): string {\n return p.replace(/\\\\/g, '/')\n}\n\n// Strip valid id prefix. This is prepended to resolved Ids that are\n// not valid browser import specifiers by the importAnalysis plugin.\nexport function unwrapId(id: string): string {\n return id.startsWith(VALID_ID_PREFIX) ? id.slice(VALID_ID_PREFIX.length) : id\n}\n\nexport const flattenId = (id: string): string =>\n id.replace(/(\\s*>\\s*)/g, '__').replace(/[\\/\\.]/g, '_')\n\nexport const normalizeId = (id: string): string =>\n id.replace(/(\\s*>\\s*)/g, ' > ')\n\nexport function isBuiltin(id: string): boolean {\n return builtins.includes(id)\n}\n\nexport const bareImportRE = /^[\\w@](?!.*:\\/\\/)/\nexport const deepImportRE = /^([^@][^/]*)\\/|^(@[^/]+\\/[^/]+)\\//\n\nexport let isRunningWithYarnPnp: boolean\ntry {\n isRunningWithYarnPnp = Boolean(require('pnpapi'))\n} catch {}\n\nconst ssrExtensions = ['.js', '.cjs', '.json', '.node']\n\nexport function resolveFrom(\n id: string,\n basedir: string,\n preserveSymlinks = false,\n ssr = false\n): string {\n return resolve.sync(id, {\n basedir,\n extensions: ssr ? ssrExtensions : DEFAULT_EXTENSIONS,\n // necessary to work with pnpm\n preserveSymlinks: preserveSymlinks || isRunningWithYarnPnp || false\n })\n}\n\n/**\n * like `resolveFrom` but supports resolving `>` path in `id`,\n * for example: `foo > bar > baz`\n */\nexport function nestedResolveFrom(\n id: string,\n basedir: string,\n preserveSymlinks = false\n): string {\n const pkgs = id.split('>').map((pkg) => pkg.trim())\n try {\n for (const pkg of pkgs) {\n basedir = resolveFrom(pkg, basedir, preserveSymlinks)\n }\n } catch {}\n return basedir\n}\n\n// set in bin/vite.js\nconst filter = process.env.VITE_DEBUG_FILTER\n\nconst DEBUG = process.env.DEBUG\n\ninterface DebuggerOptions {\n onlyWhenFocused?: boolean | string\n}\n\nexport type ViteDebugScope = `vite:${string}`\n\nexport function createDebugger(\n namespace: ViteDebugScope,\n options: DebuggerOptions = {}\n): debug.Debugger['log'] {\n const log = debug(namespace)\n const { onlyWhenFocused } = options\n const focus =\n typeof onlyWhenFocused === 'string' ? onlyWhenFocused : namespace\n return (msg: string, ...args: any[]) => {\n if (filter && !msg.includes(filter)) {\n return\n }\n if (onlyWhenFocused && !DEBUG?.includes(focus)) {\n return\n }\n log(msg, ...args)\n }\n}\n\nexport const isWindows = os.platform() === 'win32'\nconst VOLUME_RE = /^[A-Z]:/i\n\nexport function normalizePath(id: string): string {\n return path.posix.normalize(isWindows ? slash(id) : id)\n}\n\nexport function fsPathFromId(id: string): string {\n const fsPath = normalizePath(id.slice(FS_PREFIX.length))\n return fsPath.startsWith('/') || fsPath.match(VOLUME_RE)\n ? fsPath\n : `/${fsPath}`\n}\n\nexport function ensureVolumeInPath(file: string): string {\n return isWindows ? path.resolve(file) : file\n}\n\nexport const queryRE = /\\?.*$/s\nexport const hashRE = /#.*$/s\n\nexport const cleanUrl = (url: string): string =>\n url.replace(hashRE, '').replace(queryRE, '')\n\nexport const externalRE = /^(https?:)?\\/\\//\nexport const isExternalUrl = (url: string): boolean => externalRE.test(url)\n\nexport const dataUrlRE = /^\\s*data:/i\nexport const isDataUrl = (url: string): boolean => dataUrlRE.test(url)\n\nconst knownJsSrcRE = /\\.((j|t)sx?|mjs|vue|marko|svelte|astro)($|\\?)/\nexport const isJSRequest = (url: string): boolean => {\n url = cleanUrl(url)\n if (knownJsSrcRE.test(url)) {\n return true\n }\n if (!path.extname(url) && !url.endsWith('/')) {\n return true\n }\n return false\n}\n\nconst importQueryRE = /(\\?|&)import=?(?:&|$)/\nconst internalPrefixes = [\n FS_PREFIX,\n VALID_ID_PREFIX,\n CLIENT_PUBLIC_PATH,\n ENV_PUBLIC_PATH\n]\nconst InternalPrefixRE = new RegExp(`^(?:${internalPrefixes.join('|')})`)\nconst trailingSeparatorRE = /[\\?&]$/\nexport const isImportRequest = (url: string): boolean => importQueryRE.test(url)\nexport const isInternalRequest = (url: string): boolean =>\n InternalPrefixRE.test(url)\n\nexport function removeImportQuery(url: string): string {\n return url.replace(importQueryRE, '$1').replace(trailingSeparatorRE, '')\n}\n\nexport function injectQuery(url: string, queryToInject: string): string {\n // encode percents for consistent behavior with pathToFileURL\n // see #2614 for details\n let resolvedUrl = new URL(url.replace(/%/g, '%25'), 'relative:///')\n if (resolvedUrl.protocol !== 'relative:') {\n resolvedUrl = pathToFileURL(url)\n }\n let { protocol, pathname, search, hash } = resolvedUrl\n if (protocol === 'file:') {\n pathname = pathname.slice(1)\n }\n pathname = decodeURIComponent(pathname)\n return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ''}${\n hash || ''\n }`\n}\n\nconst timestampRE = /\\bt=\\d{13}&?\\b/\nexport function removeTimestampQuery(url: string): string {\n return url.replace(timestampRE, '').replace(trailingSeparatorRE, '')\n}\n\nexport async function asyncReplace(\n input: string,\n re: RegExp,\n replacer: (match: RegExpExecArray) => string | Promise<string>\n): Promise<string> {\n let match: RegExpExecArray | null\n let remaining = input\n let rewritten = ''\n while ((match = re.exec(remaining))) {\n rewritten += remaining.slice(0, match.index)\n rewritten += await replacer(match)\n remaining = remaining.slice(match.index + match[0].length)\n }\n rewritten += remaining\n return rewritten\n}\n\nexport function timeFrom(start: number, subtract = 0): string {\n const time: number | string = performance.now() - start - subtract\n const timeString = (time.toFixed(2) + `ms`).padEnd(5, ' ')\n if (time < 10) {\n return chalk.green(timeString)\n } else if (time < 50) {\n return chalk.yellow(timeString)\n } else {\n return chalk.red(timeString)\n }\n}\n\n/**\n * pretty url for logging.\n */\nexport function prettifyUrl(url: string, root: string): string {\n url = removeTimestampQuery(url)\n const isAbsoluteFile = url.startsWith(root)\n if (isAbsoluteFile || url.startsWith(FS_PREFIX)) {\n let file = path.relative(root, isAbsoluteFile ? url : fsPathFromId(url))\n const seg = file.split('/')\n const npmIndex = seg.indexOf(`node_modules`)\n const isSourceMap = file.endsWith('.map')\n if (npmIndex > 0) {\n file = seg[npmIndex + 1]\n if (file.startsWith('@')) {\n file = `${file}/${seg[npmIndex + 2]}`\n }\n file = `npm: ${chalk.dim(file)}${isSourceMap ? ` (source map)` : ``}`\n }\n return chalk.dim(file)\n } else {\n return chalk.dim(url)\n }\n}\n\nexport function isObject(value: unknown): value is Record<string, any> {\n return Object.prototype.toString.call(value) === '[object Object]'\n}\n\nexport function isDefined<T>(value: T | undefined | null): value is T {\n return value != null\n}\n\nexport function lookupFile(\n dir: string,\n formats: string[],\n pathOnly = false\n): string | undefined {\n for (const format of formats) {\n const fullPath = path.join(dir, format)\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n return pathOnly ? fullPath : fs.readFileSync(fullPath, 'utf-8')\n }\n }\n const parentDir = path.dirname(dir)\n if (parentDir !== dir) {\n return lookupFile(parentDir, formats, pathOnly)\n }\n}\n\nconst splitRE = /\\r?\\n/\n\nconst range: number = 2\n\nexport function pad(source: string, n = 2): string {\n const lines = source.split(splitRE)\n return lines.map((l) => ` `.repeat(n) + l).join(`\\n`)\n}\n\nexport function posToNumber(\n source: string,\n pos: number | { line: number; column: number }\n): number {\n if (typeof pos === 'number') return pos\n const lines = source.split(splitRE)\n const { line, column } = pos\n let start = 0\n for (let i = 0; i < line - 1; i++) {\n start += lines[i].length + 1\n }\n return start + column\n}\n\nexport function numberToPos(\n source: string,\n offset: number | { line: number; column: number }\n): { line: number; column: number } {\n if (typeof offset !== 'number') return offset\n if (offset > source.length) {\n throw new Error(\n `offset is longer than source length! offset ${offset} > length ${source.length}`\n )\n }\n const lines = source.split(splitRE)\n let counted = 0\n let line = 0\n let column = 0\n for (; line < lines.length; line++) {\n const lineLength = lines[line].length + 1\n if (counted + lineLength >= offset) {\n column = offset - counted + 1\n break\n }\n counted += lineLength\n }\n return { line: line + 1, column }\n}\n\nexport function generateCodeFrame(\n source: string,\n start: number | { line: number; column: number } = 0,\n end?: number\n): string {\n start = posToNumber(source, start)\n end = end || start\n const lines = source.split(splitRE)\n let count = 0\n const res: string[] = []\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + 1\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue\n const line = j + 1\n res.push(\n `${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${\n lines[j]\n }`\n )\n const lineLength = lines[j].length\n if (j === i) {\n // push underline\n const pad = start - (count - lineLength) + 1\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n )\n res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length))\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1)\n res.push(` | ` + '^'.repeat(length))\n }\n count += lineLength + 1\n }\n }\n break\n }\n }\n return res.join('\\n')\n}\n\nexport function writeFile(\n filename: string,\n content: string | Uint8Array\n): void {\n const dir = path.dirname(filename)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.writeFileSync(filename, content)\n}\n\n/**\n * Delete every file and subdirectory. **The given directory must exist.**\n * Pass an optional `skip` array to preserve files in the root directory.\n */\nexport function emptyDir(dir: string, skip?: string[]): void {\n for (const file of fs.readdirSync(dir)) {\n if (skip?.includes(file)) {\n continue\n }\n const abs = path.resolve(dir, file)\n // baseline is Node 12 so can't use rmSync :(\n if (fs.lstatSync(abs).isDirectory()) {\n emptyDir(abs)\n fs.rmdirSync(abs)\n } else {\n fs.unlinkSync(abs)\n }\n }\n}\n\nexport function copyDir(srcDir: string, destDir: string): void {\n fs.mkdirSync(destDir, { recursive: true })\n for (const file of fs.readdirSync(srcDir)) {\n const srcFile = path.resolve(srcDir, file)\n if (srcFile === destDir) {\n continue\n }\n const destFile = path.resolve(destDir, file)\n const stat = fs.statSync(srcFile)\n if (stat.isDirectory()) {\n copyDir(srcFile, destFile)\n } else {\n fs.copyFileSync(srcFile, destFile)\n }\n }\n}\n\nexport function ensureLeadingSlash(path: string): string {\n return !path.startsWith('/') ? '/' + path : path\n}\n\nexport function ensureWatchedFile(\n watcher: FSWatcher,\n file: string | null,\n root: string\n): void {\n if (\n file &&\n // only need to watch if out of root\n !file.startsWith(root + '/') &&\n // some rollup plugins use null bytes for private resolved Ids\n !file.includes('\\0') &&\n fs.existsSync(file)\n ) {\n // resolve file to normalized system path\n watcher.add(path.resolve(file))\n }\n}\n\ninterface ImageCandidate {\n url: string\n descriptor: string\n}\nconst escapedSpaceCharacters = /( |\\\\t|\\\\n|\\\\f|\\\\r)+/g\nexport async function processSrcSet(\n srcs: string,\n replacer: (arg: ImageCandidate) => Promise<string>\n): Promise<string> {\n const imageCandidates: ImageCandidate[] = srcs\n .split(',')\n .map((s) => {\n const [url, descriptor] = s\n .replace(escapedSpaceCharacters, ' ')\n .trim()\n .split(' ', 2)\n return { url, descriptor }\n })\n .filter(({ url }) => !!url)\n\n const ret = await Promise.all(\n imageCandidates.map(async ({ url, descriptor }) => {\n return {\n url: await replacer({ url, descriptor }),\n descriptor\n }\n })\n )\n\n const url = ret.reduce((prev, { url, descriptor }, index) => {\n descriptor = descriptor || ''\n return (prev +=\n url + ` ${descriptor}${index === ret.length - 1 ? '' : ', '}`)\n }, '')\n\n return url\n}\n\n// based on https://github.com/sveltejs/svelte/blob/abf11bb02b2afbd3e4cac509a0f70e318c306364/src/compiler/utils/mapped_code.ts#L221\nconst nullSourceMap: RawSourceMap = {\n names: [],\n sources: [],\n mappings: '',\n version: 3\n}\nexport function combineSourcemaps(\n filename: string,\n sourcemapList: Array<DecodedSourceMap | RawSourceMap>\n): RawSourceMap {\n if (\n sourcemapList.length === 0 ||\n sourcemapList.every((m) => m.sources.length === 0)\n ) {\n return { ...nullSourceMap }\n }\n\n // We don't declare type here so we can convert/fake/map as RawSourceMap\n let map //: SourceMap\n let mapIndex = 1\n const useArrayInterface =\n sourcemapList.slice(0, -1).find((m) => m.sources.length !== 1) === undefined\n if (useArrayInterface) {\n map = remapping(sourcemapList, () => null, true)\n } else {\n map = remapping(\n sourcemapList[0],\n function loader(sourcefile) {\n if (sourcefile === filename && sourcemapList[mapIndex]) {\n return sourcemapList[mapIndex++]\n } else {\n return { ...nullSourceMap }\n }\n },\n true\n )\n }\n if (!map.file) {\n delete map.file\n }\n\n return map as RawSourceMap\n}\n\nexport function unique<T>(arr: T[]): T[] {\n return Array.from(new Set(arr))\n}\n\nexport interface Hostname {\n // undefined sets the default behaviour of server.listen\n host: string | undefined\n // resolve to localhost when possible\n name: string\n}\n\nexport function resolveHostname(\n optionsHost: string | boolean | undefined\n): Hostname {\n let host: string | undefined\n if (\n optionsHost === undefined ||\n optionsHost === false ||\n optionsHost === 'localhost'\n ) {\n // Use a secure default\n host = '127.0.0.1'\n } else if (optionsHost === true) {\n // If passed --host in the CLI without arguments\n host = undefined // undefined typically means 0.0.0.0 or :: (listen on all IPs)\n } else {\n host = optionsHost\n }\n\n // Set host name to localhost when possible, unless the user explicitly asked for '127.0.0.1'\n const name =\n (optionsHost !== '127.0.0.1' && host === '127.0.0.1') ||\n host === '0.0.0.0' ||\n host === '::' ||\n host === undefined\n ? 'localhost'\n : host\n\n return { host, name }\n}\n\nexport function arraify<T>(target: T | T[]): T[] {\n return Array.isArray(target) ? target : [target]\n}\n\nexport function toUpperCaseDriveLetter(pathName: string): string {\n return pathName.replace(/^\\w:/, (letter) => letter.toUpperCase())\n}\n\nexport const multilineCommentsRE = /\\/\\*(.|[\\r\\n])*?\\*\\//gm\nexport const singlelineCommentsRE = /\\/\\/.*/g\n\nexport const usingDynamicImport = typeof jest === 'undefined';\n/**\n * Dynamically import files. It will make sure it's not being compiled away by TS/Rollup.\n *\n * As a temporary workaround for Jest's lack of stable ESM support, we fallback to require\n * if we're in a Jest environment.\n * See https://github.com/vitejs/vite/pull/5197#issuecomment-938054077\n *\n * @param file File path to import.\n */\nexport const dynamicImport = usingDynamicImport ? new Function('file', 'return import(file)') : require;\n","/* eslint no-console: 0 */\n\nimport chalk from 'chalk'\nimport { AddressInfo, Server } from 'net'\nimport os from 'os'\nimport readline from 'readline'\nimport { RollupError } from 'rollup'\nimport { ResolvedConfig } from '.'\nimport { Hostname, resolveHostname } from './utils'\n\nexport type LogType = 'error' | 'warn' | 'info'\nexport type LogLevel = LogType | 'silent'\nexport interface Logger {\n info(msg: string, options?: LogOptions): void\n warn(msg: string, options?: LogOptions): void\n warnOnce(msg: string, options?: LogOptions): void\n error(msg: string, options?: LogErrorOptions): void\n clearScreen(type: LogType): void\n hasErrorLogged(error: Error | RollupError): boolean\n hasWarned: boolean\n}\n\nexport interface LogOptions {\n clear?: boolean\n timestamp?: boolean\n}\n\nexport interface LogErrorOptions extends LogOptions {\n error?: Error | RollupError | null\n}\n\nexport const LogLevels: Record<LogLevel, number> = {\n silent: 0,\n error: 1,\n warn: 2,\n info: 3\n}\n\nlet lastType: LogType | undefined\nlet lastMsg: string | undefined\nlet sameCount = 0\n\nfunction clearScreen() {\n const repeatCount = process.stdout.rows - 2\n const blank = repeatCount > 0 ? '\\n'.repeat(repeatCount) : ''\n console.log(blank)\n readline.cursorTo(process.stdout, 0, 0)\n readline.clearScreenDown(process.stdout)\n}\n\nexport interface LoggerOptions {\n prefix?: string\n allowClearScreen?: boolean\n customLogger?: Logger\n}\n\nexport function createLogger(\n level: LogLevel = 'info',\n options: LoggerOptions = {}\n): Logger {\n if (options.customLogger) {\n return options.customLogger\n }\n\n const loggedErrors = new WeakSet<Error | RollupError>()\n const { prefix = '[vite]', allowClearScreen = true } = options\n const thresh = LogLevels[level]\n const clear =\n allowClearScreen && process.stdout.isTTY && !process.env.CI\n ? clearScreen\n : () => {}\n\n function output(type: LogType, msg: string, options: LogErrorOptions = {}) {\n if (thresh >= LogLevels[type]) {\n const method = type === 'info' ? 'log' : type\n const format = () => {\n if (options.timestamp) {\n const tag =\n type === 'info'\n ? chalk.cyan.bold(prefix)\n : type === 'warn'\n ? chalk.yellow.bold(prefix)\n : chalk.red.bold(prefix)\n return `${chalk.dim(new Date().toLocaleTimeString())} ${tag} ${msg}`\n } else {\n return msg\n }\n }\n if (options.error) {\n loggedErrors.add(options.error)\n }\n if (type === lastType && msg === lastMsg) {\n sameCount++\n clear()\n console[method](format(), chalk.yellow(`(x${sameCount + 1})`))\n } else {\n sameCount = 0\n lastMsg = msg\n lastType = type\n if (options.clear) {\n clear()\n }\n console[method](format())\n }\n }\n }\n\n const warnedMessages = new Set<string>()\n\n const logger: Logger = {\n hasWarned: false,\n info(msg, opts) {\n output('info', msg, opts)\n },\n warn(msg, opts) {\n logger.hasWarned = true\n output('warn', msg, opts)\n },\n warnOnce(msg, opts) {\n if (warnedMessages.has(msg)) return\n logger.hasWarned = true\n output('warn', msg, opts)\n warnedMessages.add(msg)\n },\n error(msg, opts) {\n logger.hasWarned = true\n output('error', msg, opts)\n },\n clearScreen(type) {\n if (thresh >= LogLevels[type]) {\n clear()\n }\n },\n hasErrorLogged(error) {\n return loggedErrors.has(error)\n }\n }\n\n return logger\n}\n\nexport function printHttpServerUrls(\n server: Server,\n config: ResolvedConfig\n): void {\n const address = server.address()\n const isAddressInfo = (x: any): x is AddressInfo => x?.address\n if (isAddressInfo(address)) {\n const hostname = resolveHostname(config.server.host)\n const protocol = config.server.https ? 'https' : 'http'\n printServerUrls(\n hostname,\n protocol,\n address.port,\n config.base,\n config.logger.info\n )\n }\n}\n\nfunction printServerUrls(\n hostname: Hostname,\n protocol: string,\n port: number,\n base: string,\n info: Logger['info']\n): void {\n if (hostname.host === '127.0.0.1') {\n const url = `${protocol}://${hostname.name}:${chalk.bold(port)}${base}`\n info(` > Local: ${chalk.cyan(url)}`)\n if (hostname.name !== '127.0.0.1') {\n info(` > Network: ${chalk.dim('use `--host` to expose')}`)\n }\n } else {\n Object.values(os.networkInterfaces())\n .flatMap((nInterface) => nInterface ?? [])\n .filter((detail) => detail && detail.address && detail.family === 'IPv4')\n .map((detail) => {\n const type = detail.address.includes('127.0.0.1')\n ? 'Local: '\n : 'Network: '\n const host = detail.address.replace('127.0.0.1', hostname.name)\n const url = `${protocol}://${host}:${chalk.bold(port)}${base}`\n return ` > ${type} ${chalk.cyan(url)}`\n })\n .forEach((msg) => info(msg))\n }\n}\n","import path from 'path'\nimport chalk from 'chalk'\nimport { gzip } from 'zlib'\nimport { promisify } from 'util'\nimport { Plugin } from 'rollup'\nimport { ResolvedConfig } from '../config'\nimport { normalizePath } from '../utils'\nimport { LogLevels } from '../logger'\n\nconst enum WriteType {\n JS,\n CSS,\n ASSET,\n HTML,\n SOURCE_MAP\n}\n\nconst writeColors = {\n [WriteType.JS]: chalk.cyan,\n [WriteType.CSS]: chalk.magenta,\n [WriteType.ASSET]: chalk.green,\n [WriteType.HTML]: chalk.blue,\n [WriteType.SOURCE_MAP]: chalk.gray\n}\n\nexport function buildReporterPlugin(config: ResolvedConfig): Plugin {\n const compress = promisify(gzip)\n const chunkLimit = config.build.chunkSizeWarningLimit\n\n function isLarge(code: string | Uint8Array): boolean {\n // bail out on particularly large chunks\n return code.length / 1024 > chunkLimit\n }\n\n async function getCompressedSize(code: string | Uint8Array): Promise<string> {\n if (\n config.build.ssr ||\n !config.build.reportCompressedSize ||\n config.build.brotliSize === false\n ) {\n return ''\n }\n return ` / gzip: ${(\n (await compress(typeof code === 'string' ? code : Buffer.from(code)))\n .length / 1024\n ).toFixed(2)} KiB`\n }\n\n function printFileInfo(\n filePath: string,\n content: string | Uint8Array,\n type: WriteType,\n maxLength: number,\n compressedSize = ''\n ) {\n const outDir =\n normalizePath(\n path.relative(\n config.root,\n path.resolve(config.root, config.build.outDir)\n )\n ) + '/'\n const kibs = content.length / 1024\n const sizeColor = kibs > chunkLimit ? chalk.yellow : chalk.dim\n config.logger.info(\n `${chalk.gray(chalk.white.dim(outDir))}${writeColors[type](\n filePath.padEnd(maxLength + 2)\n )} ${sizeColor(`${kibs.toFixed(2)} KiB${compressedSize}`)}`\n )\n }\n\n const tty = process.stdout.isTTY && !process.env.CI\n const shouldLogInfo = LogLevels[config.logLevel || 'info'] >= LogLevels.info\n let hasTransformed = false\n let hasRenderedChunk = false\n let transformedCount = 0\n let chunkCount = 0\n\n const logTransform = throttle((id: string) => {\n writeLine(\n `transforming (${transformedCount}) ${chalk.dim(\n path.relative(config.root, id)\n )}`\n )\n })\n\n return {\n name: 'vite:reporter',\n\n transform(_, id) {\n transformedCount++\n if (shouldLogInfo) {\n if (!tty) {\n if (!hasTransformed) {\n config.logger.info(`transforming...`)\n }\n } else {\n if (id.includes(`?`)) return\n logTransform(id)\n }\n hasTransformed = true\n }\n return null\n },\n\n buildEnd() {\n if (shouldLogInfo) {\n if (tty) {\n process.stdout.clearLine(0)\n process.stdout.cursorTo(0)\n }\n config.logger.info(\n `${chalk.green(`✓`)} ${transformedCount} modules transformed.`\n )\n }\n },\n\n renderStart() {\n chunkCount = 0\n },\n\n renderChunk() {\n chunkCount++\n if (shouldLogInfo) {\n if (!tty) {\n if (!hasRenderedChunk) {\n config.logger.info('rendering chunks...')\n }\n } else {\n writeLine(`rendering chunks (${chunkCount})...`)\n }\n hasRenderedChunk = true\n }\n return null\n },\n\n generateBundle() {\n if (shouldLogInfo && tty) {\n process.stdout.clearLine(0)\n process.stdout.cursorTo(0)\n }\n },\n\n async writeBundle(_, output) {\n let hasLargeChunks = false\n\n if (shouldLogInfo) {\n let longest = 0\n for (const file in output) {\n const l = output[file].fileName.length\n if (l > longest) longest = l\n }\n\n // large chunks are deferred to be logged at the end so they are more\n // visible.\n const deferredLogs: (() => void)[] = []\n\n await Promise.all(\n Object.keys(output).map(async (file) => {\n const chunk = output[file]\n if (chunk.type === 'chunk') {\n const log = async () => {\n printFileInfo(\n chunk.fileName,\n chunk.code,\n WriteType.JS,\n longest,\n await getCompressedSize(chunk.code)\n )\n if (chunk.map) {\n printFileInfo(\n chunk.fileName + '.map',\n chunk.map.toString(),\n WriteType.SOURCE_MAP,\n longest\n )\n }\n }\n if (isLarge(chunk.code)) {\n hasLargeChunks = true\n deferredLogs.push(log)\n } else {\n await log()\n }\n } else if (chunk.source) {\n const isCSS = chunk.fileName.endsWith('.css')\n printFileInfo(\n chunk.fileName,\n chunk.source,\n isCSS ? WriteType.CSS : WriteType.ASSET,\n longest,\n isCSS ? await getCompressedSize(chunk.source) : undefined\n )\n }\n })\n )\n\n await Promise.all(deferredLogs.map((l) => l()))\n } else {\n hasLargeChunks = Object.keys(output).some((file) => {\n const chunk = output[file]\n return chunk.type === 'chunk' && chunk.code.length / 1024 > chunkLimit\n })\n }\n\n if (\n hasLargeChunks &&\n config.build.minify &&\n !config.build.lib &&\n !config.build.ssr\n ) {\n config.logger.warn(\n chalk.yellow(\n `\\n(!) Some chunks are larger than ${chunkLimit} KiB after minification. Consider:\\n` +\n `- Using dynamic import() to code-split the application\\n` +\n `- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/guide/en/#outputmanualchunks\\n` +\n `- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.`\n )\n )\n }\n }\n }\n}\n\nfunction writeLine(output: string) {\n process.stdout.clearLine(0)\n process.stdout.cursorTo(0)\n if (output.length < process.stdout.columns) {\n process.stdout.write(output)\n } else {\n process.stdout.write(output.substring(0, process.stdout.columns - 1))\n }\n}\n\nfunction throttle(fn: Function) {\n let timerHandle: NodeJS.Timeout | null = null\n return (...args: any[]) => {\n if (timerHandle) return\n fn(...args)\n timerHandle = setTimeout(() => {\n timerHandle = null\n }, 100)\n }\n}\n","var charToInteger = {};\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nfor (var i = 0; i < chars.length; i++) {\n charToInteger[chars.charCodeAt(i)] = i;\n}\nfunction decode(mappings) {\n var decoded = [];\n var line = [];\n var segment = [\n 0,\n 0,\n 0,\n 0,\n 0,\n ];\n var j = 0;\n for (var i = 0, shift = 0, value = 0; i < mappings.length; i++) {\n var c = mappings.charCodeAt(i);\n if (c === 44) { // \",\"\n segmentify(line, segment, j);\n j = 0;\n }\n else if (c === 59) { // \";\"\n segmentify(line, segment, j);\n j = 0;\n decoded.push(line);\n line = [];\n segment[0] = 0;\n }\n else {\n var integer = charToInteger[c];\n if (integer === undefined) {\n throw new Error('Invalid character (' + String.fromCharCode(c) + ')');\n }\n var hasContinuationBit = integer & 32;\n integer &= 31;\n value += integer << shift;\n if (hasContinuationBit) {\n shift += 5;\n }\n else {\n var shouldNegate = value & 1;\n value >>>= 1;\n if (shouldNegate) {\n value = value === 0 ? -0x80000000 : -value;\n }\n segment[j] += value;\n j++;\n value = shift = 0; // reset\n }\n }\n }\n segmentify(line, segment, j);\n decoded.push(line);\n return decoded;\n}\nfunction segmentify(line, segment, j) {\n // This looks ugly, but we're creating specialized arrays with a specific\n // length. This is much faster than creating a new array (which v8 expands to\n // a capacity of 17 after pushing the first item), or slicing out a subarray\n // (which is slow). Length 4 is assumed to be the most frequent, followed by\n // length 5 (since not everything will have an associated name), followed by\n // length 1 (it's probably rare for a source substring to not have an\n // associated segment data).\n if (j === 4)\n line.push([segment[0], segment[1], segment[2], segment[3]]);\n else if (j === 5)\n line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\n else if (j === 1)\n line.push([segment[0]]);\n}\nfunction encode(decoded) {\n var sourceFileIndex = 0; // second field\n var sourceCodeLine = 0; // third field\n var sourceCodeColumn = 0; // fourth field\n var nameIndex = 0; // fifth field\n var mappings = '';\n for (var i = 0; i < decoded.length; i++) {\n var line = decoded[i];\n if (i > 0)\n mappings += ';';\n if (line.length === 0)\n continue;\n var generatedCodeColumn = 0; // first field\n var lineMappings = [];\n for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {\n var segment = line_1[_i];\n var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n generatedCodeColumn = segment[0];\n if (segment.length > 1) {\n segmentMappings +=\n encodeInteger(segment[1] - sourceFileIndex) +\n encodeInteger(segment[2] - sourceCodeLine) +\n encodeInteger(segment[3] - sourceCodeColumn);\n sourceFileIndex = segment[1];\n sourceCodeLine = segment[2];\n sourceCodeColumn = segment[3];\n }\n if (segment.length === 5) {\n segmentMappings += encodeInteger(segment[4] - nameIndex);\n nameIndex = segment[4];\n }\n lineMappings.push(segmentMappings);\n }\n mappings += lineMappings.join(',');\n }\n return mappings;\n}\nfunction encodeInteger(num) {\n var result = '';\n num = num < 0 ? (-num << 1) | 1 : num << 1;\n do {\n var clamped = num & 31;\n num >>>= 5;\n if (num > 0) {\n clamped |= 32;\n }\n result += chars[clamped];\n } while (num > 0);\n return result;\n}\n\nexport { decode, encode };\n//# sourceMappingURL=sourcemap-codec.es.js.map\n","import { encode } from 'sourcemap-codec';\n\nvar BitSet = function BitSet(arg) {\n\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n};\n\nBitSet.prototype.add = function add (n) {\n\tthis.bits[n >> 5] |= 1 << (n & 31);\n};\n\nBitSet.prototype.has = function has (n) {\n\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n};\n\nvar Chunk = function Chunk(start, end, content) {\n\tthis.start = start;\n\tthis.end = end;\n\tthis.original = content;\n\n\tthis.intro = '';\n\tthis.outro = '';\n\n\tthis.content = content;\n\tthis.storeName = false;\n\tthis.edited = false;\n\n\t// we make these non-enumerable, for sanity while debugging\n\tObject.defineProperties(this, {\n\t\tprevious: { writable: true, value: null },\n\t\tnext: { writable: true, value: null }\n\t});\n};\n\nChunk.prototype.appendLeft = function appendLeft (content) {\n\tthis.outro += content;\n};\n\nChunk.prototype.appendRight = function appendRight (content) {\n\tthis.intro = this.intro + content;\n};\n\nChunk.prototype.clone = function clone () {\n\tvar chunk = new Chunk(this.start, this.end, this.original);\n\n\tchunk.intro = this.intro;\n\tchunk.outro = this.outro;\n\tchunk.content = this.content;\n\tchunk.storeName = this.storeName;\n\tchunk.edited = this.edited;\n\n\treturn chunk;\n};\n\nChunk.prototype.contains = function contains (index) {\n\treturn this.start < index && index < this.end;\n};\n\nChunk.prototype.eachNext = function eachNext (fn) {\n\tvar chunk = this;\n\twhile (chunk) {\n\t\tfn(chunk);\n\t\tchunk = chunk.next;\n\t}\n};\n\nChunk.prototype.eachPrevious = function eachPrevious (fn) {\n\tvar chunk = this;\n\twhile (chunk) {\n\t\tfn(chunk);\n\t\tchunk = chunk.previous;\n\t}\n};\n\nChunk.prototype.edit = function edit (content, storeName, contentOnly) {\n\tthis.content = content;\n\tif (!contentOnly) {\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\t}\n\tthis.storeName = storeName;\n\n\tthis.edited = true;\n\n\treturn this;\n};\n\nChunk.prototype.prependLeft = function prependLeft (content) {\n\tthis.outro = content + this.outro;\n};\n\nChunk.prototype.prependRight = function prependRight (content) {\n\tthis.intro = content + this.intro;\n};\n\nChunk.prototype.split = function split (index) {\n\tvar sliceIndex = index - this.start;\n\n\tvar originalBefore = this.original.slice(0, sliceIndex);\n\tvar originalAfter = this.original.slice(sliceIndex);\n\n\tthis.original = originalBefore;\n\n\tvar newChunk = new Chunk(index, this.end, originalAfter);\n\tnewChunk.outro = this.outro;\n\tthis.outro = '';\n\n\tthis.end = index;\n\n\tif (this.edited) {\n\t\t// TODO is this block necessary?...\n\t\tnewChunk.edit('', false);\n\t\tthis.content = '';\n\t} else {\n\t\tthis.content = originalBefore;\n\t}\n\n\tnewChunk.next = this.next;\n\tif (newChunk.next) { newChunk.next.previous = newChunk; }\n\tnewChunk.previous = this;\n\tthis.next = newChunk;\n\n\treturn newChunk;\n};\n\nChunk.prototype.toString = function toString () {\n\treturn this.intro + this.content + this.outro;\n};\n\nChunk.prototype.trimEnd = function trimEnd (rx) {\n\tthis.outro = this.outro.replace(rx, '');\n\tif (this.outro.length) { return true; }\n\n\tvar trimmed = this.content.replace(rx, '');\n\n\tif (trimmed.length) {\n\t\tif (trimmed !== this.content) {\n\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t}\n\t\treturn true;\n\n\t} else {\n\t\tthis.edit('', undefined, true);\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) { return true; }\n\t}\n};\n\nChunk.prototype.trimStart = function trimStart (rx) {\n\tthis.intro = this.intro.replace(rx, '');\n\tif (this.intro.length) { return true; }\n\n\tvar trimmed = this.content.replace(rx, '');\n\n\tif (trimmed.length) {\n\t\tif (trimmed !== this.content) {\n\t\t\tthis.split(this.end - trimmed.length);\n\t\t\tthis.edit('', undefined, true);\n\t\t}\n\t\treturn true;\n\n\t} else {\n\t\tthis.edit('', undefined, true);\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) { return true; }\n\t}\n};\n\nvar btoa = function () {\n\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n};\nif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\tbtoa = function (str) { return window.btoa(unescape(encodeURIComponent(str))); };\n} else if (typeof Buffer === 'function') {\n\tbtoa = function (str) { return Buffer.from(str, 'utf-8').toString('base64'); };\n}\n\nvar SourceMap = function SourceMap(properties) {\n\tthis.version = 3;\n\tthis.file = properties.file;\n\tthis.sources = properties.sources;\n\tthis.sourcesContent = properties.sourcesContent;\n\tthis.names = properties.names;\n\tthis.mappings = encode(properties.mappings);\n};\n\nSourceMap.prototype.toString = function toString () {\n\treturn JSON.stringify(this);\n};\n\nSourceMap.prototype.toUrl = function toUrl () {\n\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n};\n\nfunction guessIndent(code) {\n\tvar lines = code.split('\\n');\n\n\tvar tabbed = lines.filter(function (line) { return /^\\t+/.test(line); });\n\tvar spaced = lines.filter(function (line) { return /^ {2,}/.test(line); });\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tvar min = spaced.reduce(function (previous, current) {\n\t\tvar numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tvar fromParts = from.split(/[/\\\\]/);\n\tvar toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tvar i = fromParts.length;\n\t\twhile (i--) { fromParts[i] = '..'; }\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nvar toString = Object.prototype.toString;\n\nfunction isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tvar originalLines = source.split('\\n');\n\tvar lineOffsets = [];\n\n\tfor (var i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tvar i = 0;\n\t\tvar j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tvar m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tvar line = i - 1;\n\t\tvar column = index - lineOffsets[line];\n\t\treturn { line: line, column: column };\n\t};\n}\n\nvar Mappings = function Mappings(hires) {\n\tthis.hires = hires;\n\tthis.generatedCodeLine = 0;\n\tthis.generatedCodeColumn = 0;\n\tthis.raw = [];\n\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\tthis.pending = null;\n};\n\nMappings.prototype.addEdit = function addEdit (sourceIndex, content, loc, nameIndex) {\n\tif (content.length) {\n\t\tvar segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\tif (nameIndex >= 0) {\n\t\t\tsegment.push(nameIndex);\n\t\t}\n\t\tthis.rawSegments.push(segment);\n\t} else if (this.pending) {\n\t\tthis.rawSegments.push(this.pending);\n\t}\n\n\tthis.advance(content);\n\tthis.pending = null;\n};\n\nMappings.prototype.addUneditedChunk = function addUneditedChunk (sourceIndex, chunk, original, loc, sourcemapLocations) {\n\tvar originalCharIndex = chunk.start;\n\tvar first = true;\n\n\twhile (originalCharIndex < chunk.end) {\n\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t}\n\n\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\tloc.line += 1;\n\t\t\tloc.column = 0;\n\t\t\tthis.generatedCodeLine += 1;\n\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t\tfirst = true;\n\t\t} else {\n\t\t\tloc.column += 1;\n\t\t\tthis.generatedCodeColumn += 1;\n\t\t\tfirst = false;\n\t\t}\n\n\t\toriginalCharIndex += 1;\n\t}\n\n\tthis.pending = null;\n};\n\nMappings.prototype.advance = function advance (str) {\n\tif (!str) { return; }\n\n\tvar lines = str.split('\\n');\n\n\tif (lines.length > 1) {\n\t\tfor (var i = 0; i < lines.length - 1; i++) {\n\t\t\tthis.generatedCodeLine++;\n\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t}\n\t\tthis.generatedCodeColumn = 0;\n\t}\n\n\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n};\n\nvar n = '\\n';\n\nvar warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false\n};\n\nvar MagicString = function MagicString(string, options) {\n\tif ( options === void 0 ) options = {};\n\n\tvar chunk = new Chunk(0, string.length, string);\n\n\tObject.defineProperties(this, {\n\t\toriginal: { writable: true, value: string },\n\t\toutro: { writable: true, value: '' },\n\t\tintro: { writable: true, value: '' },\n\t\tfirstChunk: { writable: true, value: chunk },\n\t\tlastChunk: { writable: true, value: chunk },\n\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\tbyStart: { writable: true, value: {} },\n\t\tbyEnd: { writable: true, value: {} },\n\t\tfilename: { writable: true, value: options.filename },\n\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\tstoredNames: { writable: true, value: {} },\n\t\tindentStr: { writable: true, value: guessIndent(string) }\n\t});\n\n\tthis.byStart[0] = chunk;\n\tthis.byEnd[string.length] = chunk;\n};\n\nMagicString.prototype.addSourcemapLocation = function addSourcemapLocation (char) {\n\tthis.sourcemapLocations.add(char);\n};\n\nMagicString.prototype.append = function append (content) {\n\tif (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }\n\n\tthis.outro += content;\n\treturn this;\n};\n\nMagicString.prototype.appendLeft = function appendLeft (index, content) {\n\tif (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }\n\n\tthis._split(index);\n\n\tvar chunk = this.byEnd[index];\n\n\tif (chunk) {\n\t\tchunk.appendLeft(content);\n\t} else {\n\t\tthis.intro += content;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.appendRight = function appendRight (index, content) {\n\tif (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }\n\n\tthis._split(index);\n\n\tvar chunk = this.byStart[index];\n\n\tif (chunk) {\n\t\tchunk.appendRight(content);\n\t} else {\n\t\tthis.outro += content;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.clone = function clone () {\n\tvar cloned = new MagicString(this.original, { filename: this.filename });\n\n\tvar originalChunk = this.firstChunk;\n\tvar clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\twhile (originalChunk) {\n\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\tvar nextOriginalChunk = originalChunk.next;\n\t\tvar nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\tif (nextClonedChunk) {\n\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\tclonedChunk = nextClonedChunk;\n\t\t}\n\n\t\toriginalChunk = nextOriginalChunk;\n\t}\n\n\tcloned.lastChunk = clonedChunk;\n\n\tif (this.indentExclusionRanges) {\n\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t}\n\n\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\tcloned.intro = this.intro;\n\tcloned.outro = this.outro;\n\n\treturn cloned;\n};\n\nMagicString.prototype.generateDecodedMap = function generateDecodedMap (options) {\n\t\tvar this$1 = this;\n\n\toptions = options || {};\n\n\tvar sourceIndex = 0;\n\tvar names = Object.keys(this.storedNames);\n\tvar mappings = new Mappings(options.hires);\n\n\tvar locate = getLocator(this.original);\n\n\tif (this.intro) {\n\t\tmappings.advance(this.intro);\n\t}\n\n\tthis.firstChunk.eachNext(function (chunk) {\n\t\tvar loc = locate(chunk.start);\n\n\t\tif (chunk.intro.length) { mappings.advance(chunk.intro); }\n\n\t\tif (chunk.edited) {\n\t\t\tmappings.addEdit(\n\t\t\t\tsourceIndex,\n\t\t\t\tchunk.content,\n\t\t\t\tloc,\n\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t);\n\t\t} else {\n\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this$1.original, loc, this$1.sourcemapLocations);\n\t\t}\n\n\t\tif (chunk.outro.length) { mappings.advance(chunk.outro); }\n\t});\n\n\treturn {\n\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\tnames: names,\n\t\tmappings: mappings.raw\n\t};\n};\n\nMagicString.prototype.generateMap = function generateMap (options) {\n\treturn new SourceMap(this.generateDecodedMap(options));\n};\n\nMagicString.prototype.getIndentString = function getIndentString () {\n\treturn this.indentStr === null ? '\\t' : this.indentStr;\n};\n\nMagicString.prototype.indent = function indent (indentStr, options) {\n\tvar pattern = /^[^\\r\\n]/gm;\n\n\tif (isObject(indentStr)) {\n\t\toptions = indentStr;\n\t\tindentStr = undefined;\n\t}\n\n\tindentStr = indentStr !== undefined ? indentStr : this.indentStr || '\\t';\n\n\tif (indentStr === '') { return this; } // noop\n\n\toptions = options || {};\n\n\t// Process exclusion ranges\n\tvar isExcluded = {};\n\n\tif (options.exclude) {\n\t\tvar exclusions =\n\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\texclusions.forEach(function (exclusion) {\n\t\t\tfor (var i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\tisExcluded[i] = true;\n\t\t\t}\n\t\t});\n\t}\n\n\tvar shouldIndentNextCharacter = options.indentStart !== false;\n\tvar replacer = function (match) {\n\t\tif (shouldIndentNextCharacter) { return (\"\" + indentStr + match); }\n\t\tshouldIndentNextCharacter = true;\n\t\treturn match;\n\t};\n\n\tthis.intro = this.intro.replace(pattern, replacer);\n\n\tvar charIndex = 0;\n\tvar chunk = this.firstChunk;\n\n\twhile (chunk) {\n\t\tvar end = chunk.end;\n\n\t\tif (chunk.edited) {\n\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tcharIndex = chunk.start;\n\n\t\t\twhile (charIndex < end) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tvar char = this.original[charIndex];\n\n\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharIndex += 1;\n\t\t\t}\n\t\t}\n\n\t\tcharIndex = chunk.end;\n\t\tchunk = chunk.next;\n\t}\n\n\tthis.outro = this.outro.replace(pattern, replacer);\n\n\treturn this;\n};\n\nMagicString.prototype.insert = function insert () {\n\tthrow new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)');\n};\n\nMagicString.prototype.insertLeft = function insertLeft (index, content) {\n\tif (!warned.insertLeft) {\n\t\tconsole.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console\n\t\twarned.insertLeft = true;\n\t}\n\n\treturn this.appendLeft(index, content);\n};\n\nMagicString.prototype.insertRight = function insertRight (index, content) {\n\tif (!warned.insertRight) {\n\t\tconsole.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console\n\t\twarned.insertRight = true;\n\t}\n\n\treturn this.prependRight(index, content);\n};\n\nMagicString.prototype.move = function move (start, end, index) {\n\tif (index >= start && index <= end) { throw new Error('Cannot move a selection inside itself'); }\n\n\tthis._split(start);\n\tthis._split(end);\n\tthis._split(index);\n\n\tvar first = this.byStart[start];\n\tvar last = this.byEnd[end];\n\n\tvar oldLeft = first.previous;\n\tvar oldRight = last.next;\n\n\tvar newRight = this.byStart[index];\n\tif (!newRight && last === this.lastChunk) { return this; }\n\tvar newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\tif (oldLeft) { oldLeft.next = oldRight; }\n\tif (oldRight) { oldRight.previous = oldLeft; }\n\n\tif (newLeft) { newLeft.next = first; }\n\tif (newRight) { newRight.previous = last; }\n\n\tif (!first.previous) { this.firstChunk = last.next; }\n\tif (!last.next) {\n\t\tthis.lastChunk = first.previous;\n\t\tthis.lastChunk.next = null;\n\t}\n\n\tfirst.previous = newLeft;\n\tlast.next = newRight || null;\n\n\tif (!newLeft) { this.firstChunk = first; }\n\tif (!newRight) { this.lastChunk = last; }\n\treturn this;\n};\n\nMagicString.prototype.overwrite = function overwrite (start, end, content, options) {\n\tif (typeof content !== 'string') { throw new TypeError('replacement content must be a string'); }\n\n\twhile (start < 0) { start += this.original.length; }\n\twhile (end < 0) { end += this.original.length; }\n\n\tif (end > this.original.length) { throw new Error('end is out of bounds'); }\n\tif (start === end)\n\t\t{ throw new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead'); }\n\n\tthis._split(start);\n\tthis._split(end);\n\n\tif (options === true) {\n\t\tif (!warned.storeName) {\n\t\t\tconsole.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console\n\t\t\twarned.storeName = true;\n\t\t}\n\n\t\toptions = { storeName: true };\n\t}\n\tvar storeName = options !== undefined ? options.storeName : false;\n\tvar contentOnly = options !== undefined ? options.contentOnly : false;\n\n\tif (storeName) {\n\t\tvar original = this.original.slice(start, end);\n\t\tthis.storedNames[original] = true;\n\t}\n\n\tvar first = this.byStart[start];\n\tvar last = this.byEnd[end];\n\n\tif (first) {\n\t\tif (end > first.end && first.next !== this.byStart[first.end]) {\n\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t}\n\n\t\tfirst.edit(content, storeName, contentOnly);\n\n\t\tif (first !== last) {\n\t\t\tvar chunk = first.next;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tchunk.edit('', false);\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\tchunk.edit('', false);\n\t\t}\n\t} else {\n\t\t// must be inserting at the end\n\t\tvar newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\tlast.next = newChunk;\n\t\tnewChunk.previous = last;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.prepend = function prepend (content) {\n\tif (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }\n\n\tthis.intro = content + this.intro;\n\treturn this;\n};\n\nMagicString.prototype.prependLeft = function prependLeft (index, content) {\n\tif (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }\n\n\tthis._split(index);\n\n\tvar chunk = this.byEnd[index];\n\n\tif (chunk) {\n\t\tchunk.prependLeft(content);\n\t} else {\n\t\tthis.intro = content + this.intro;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.prependRight = function prependRight (index, content) {\n\tif (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }\n\n\tthis._split(index);\n\n\tvar chunk = this.byStart[index];\n\n\tif (chunk) {\n\t\tchunk.prependRight(content);\n\t} else {\n\t\tthis.outro = content + this.outro;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.remove = function remove (start, end) {\n\twhile (start < 0) { start += this.original.length; }\n\twhile (end < 0) { end += this.original.length; }\n\n\tif (start === end) { return this; }\n\n\tif (start < 0 || end > this.original.length) { throw new Error('Character is out of bounds'); }\n\tif (start > end) { throw new Error('end must be greater than start'); }\n\n\tthis._split(start);\n\tthis._split(end);\n\n\tvar chunk = this.byStart[start];\n\n\twhile (chunk) {\n\t\tchunk.intro = '';\n\t\tchunk.outro = '';\n\t\tchunk.edit('');\n\n\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.lastChar = function lastChar () {\n\tif (this.outro.length)\n\t\t{ return this.outro[this.outro.length - 1]; }\n\tvar chunk = this.lastChunk;\n\tdo {\n\t\tif (chunk.outro.length)\n\t\t\t{ return chunk.outro[chunk.outro.length - 1]; }\n\t\tif (chunk.content.length)\n\t\t\t{ return chunk.content[chunk.content.length - 1]; }\n\t\tif (chunk.intro.length)\n\t\t\t{ return chunk.intro[chunk.intro.length - 1]; }\n\t} while (chunk = chunk.previous);\n\tif (this.intro.length)\n\t\t{ return this.intro[this.intro.length - 1]; }\n\treturn '';\n};\n\nMagicString.prototype.lastLine = function lastLine () {\n\tvar lineIndex = this.outro.lastIndexOf(n);\n\tif (lineIndex !== -1)\n\t\t{ return this.outro.substr(lineIndex + 1); }\n\tvar lineStr = this.outro;\n\tvar chunk = this.lastChunk;\n\tdo {\n\t\tif (chunk.outro.length > 0) {\n\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1)\n\t\t\t\t{ return chunk.outro.substr(lineIndex + 1) + lineStr; }\n\t\t\tlineStr = chunk.outro + lineStr;\n\t\t}\n\n\t\tif (chunk.content.length > 0) {\n\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1)\n\t\t\t\t{ return chunk.content.substr(lineIndex + 1) + lineStr; }\n\t\t\tlineStr = chunk.content + lineStr;\n\t\t}\n\n\t\tif (chunk.intro.length > 0) {\n\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1)\n\t\t\t\t{ return chunk.intro.substr(lineIndex + 1) + lineStr; }\n\t\t\tlineStr = chunk.intro + lineStr;\n\t\t}\n\t} while (chunk = chunk.previous);\n\tlineIndex = this.intro.lastIndexOf(n);\n\tif (lineIndex !== -1)\n\t\t{ return this.intro.substr(lineIndex + 1) + lineStr; }\n\treturn this.intro + lineStr;\n};\n\nMagicString.prototype.slice = function slice (start, end) {\n\t\tif ( start === void 0 ) start = 0;\n\t\tif ( end === void 0 ) end = this.original.length;\n\n\twhile (start < 0) { start += this.original.length; }\n\twhile (end < 0) { end += this.original.length; }\n\n\tvar result = '';\n\n\t// find start chunk\n\tvar chunk = this.firstChunk;\n\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t// found end chunk before start\n\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\treturn result;\n\t\t}\n\n\t\tchunk = chunk.next;\n\t}\n\n\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t{ throw new Error((\"Cannot use replaced character \" + start + \" as slice start anchor.\")); }\n\n\tvar startChunk = chunk;\n\twhile (chunk) {\n\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\tresult += chunk.intro;\n\t\t}\n\n\t\tvar containsEnd = chunk.start < end && chunk.end >= end;\n\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t{ throw new Error((\"Cannot use replaced character \" + end + \" as slice end anchor.\")); }\n\n\t\tvar sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\tvar sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\tresult += chunk.outro;\n\t\t}\n\n\t\tif (containsEnd) {\n\t\t\tbreak;\n\t\t}\n\n\t\tchunk = chunk.next;\n\t}\n\n\treturn result;\n};\n\n// TODO deprecate this? not really very useful\nMagicString.prototype.snip = function snip (start, end) {\n\tvar clone = this.clone();\n\tclone.remove(0, start);\n\tclone.remove(end, clone.original.length);\n\n\treturn clone;\n};\n\nMagicString.prototype._split = function _split (index) {\n\tif (this.byStart[index] || this.byEnd[index]) { return; }\n\n\tvar chunk = this.lastSearchedChunk;\n\tvar searchForward = index > chunk.end;\n\n\twhile (chunk) {\n\t\tif (chunk.contains(index)) { return this._splitChunk(chunk, index); }\n\n\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t}\n};\n\nMagicString.prototype._splitChunk = function _splitChunk (chunk, index) {\n\tif (chunk.edited && chunk.content.length) {\n\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\tvar loc = getLocator(this.original)(index);\n\t\tthrow new Error(\n\t\t\t(\"Cannot split a chunk that has already been edited (\" + (loc.line) + \":\" + (loc.column) + \" – \\\"\" + (chunk.original) + \"\\\")\")\n\t\t);\n\t}\n\n\tvar newChunk = chunk.split(index);\n\n\tthis.byEnd[index] = chunk;\n\tthis.byStart[index] = newChunk;\n\tthis.byEnd[newChunk.end] = newChunk;\n\n\tif (chunk === this.lastChunk) { this.lastChunk = newChunk; }\n\n\tthis.lastSearchedChunk = chunk;\n\treturn true;\n};\n\nMagicString.prototype.toString = function toString () {\n\tvar str = this.intro;\n\n\tvar chunk = this.firstChunk;\n\twhile (chunk) {\n\t\tstr += chunk.toString();\n\t\tchunk = chunk.next;\n\t}\n\n\treturn str + this.outro;\n};\n\nMagicString.prototype.isEmpty = function isEmpty () {\n\tvar chunk = this.firstChunk;\n\tdo {\n\t\tif (chunk.intro.length && chunk.intro.trim() ||\n\t\t\t\tchunk.content.length && chunk.content.trim() ||\n\t\t\t\tchunk.outro.length && chunk.outro.trim())\n\t\t\t{ return false; }\n\t} while (chunk = chunk.next);\n\treturn true;\n};\n\nMagicString.prototype.length = function length () {\n\tvar chunk = this.firstChunk;\n\tvar length = 0;\n\tdo {\n\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t} while (chunk = chunk.next);\n\treturn length;\n};\n\nMagicString.prototype.trimLines = function trimLines () {\n\treturn this.trim('[\\\\r\\\\n]');\n};\n\nMagicString.prototype.trim = function trim (charType) {\n\treturn this.trimStart(charType).trimEnd(charType);\n};\n\nMagicString.prototype.trimEndAborted = function trimEndAborted (charType) {\n\tvar rx = new RegExp((charType || '\\\\s') + '+$');\n\n\tthis.outro = this.outro.replace(rx, '');\n\tif (this.outro.length) { return true; }\n\n\tvar chunk = this.lastChunk;\n\n\tdo {\n\t\tvar end = chunk.end;\n\t\tvar aborted = chunk.trimEnd(rx);\n\n\t\t// if chunk was trimmed, we have a new lastChunk\n\t\tif (chunk.end !== end) {\n\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t}\n\n\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t}\n\n\t\tif (aborted) { return true; }\n\t\tchunk = chunk.previous;\n\t} while (chunk);\n\n\treturn false;\n};\n\nMagicString.prototype.trimEnd = function trimEnd (charType) {\n\tthis.trimEndAborted(charType);\n\treturn this;\n};\nMagicString.prototype.trimStartAborted = function trimStartAborted (charType) {\n\tvar rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\tthis.intro = this.intro.replace(rx, '');\n\tif (this.intro.length) { return true; }\n\n\tvar chunk = this.firstChunk;\n\n\tdo {\n\t\tvar end = chunk.end;\n\t\tvar aborted = chunk.trimStart(rx);\n\n\t\tif (chunk.end !== end) {\n\t\t\t// special case...\n\t\t\tif (chunk === this.lastChunk) { this.lastChunk = chunk.next; }\n\n\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t}\n\n\t\tif (aborted) { return true; }\n\t\tchunk = chunk.next;\n\t} while (chunk);\n\n\treturn false;\n};\n\nMagicString.prototype.trimStart = function trimStart (charType) {\n\tthis.trimStartAborted(charType);\n\treturn this;\n};\n\nvar hasOwnProp = Object.prototype.hasOwnProperty;\n\nvar Bundle = function Bundle(options) {\n\tif ( options === void 0 ) options = {};\n\n\tthis.intro = options.intro || '';\n\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\tthis.sources = [];\n\tthis.uniqueSources = [];\n\tthis.uniqueSourceIndexByFilename = {};\n};\n\nBundle.prototype.addSource = function addSource (source) {\n\tif (source instanceof MagicString) {\n\t\treturn this.addSource({\n\t\t\tcontent: source,\n\t\t\tfilename: source.filename,\n\t\t\tseparator: this.separator\n\t\t});\n\t}\n\n\tif (!isObject(source) || !source.content) {\n\t\tthrow new Error('bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`');\n\t}\n\n\t['filename', 'indentExclusionRanges', 'separator'].forEach(function (option) {\n\t\tif (!hasOwnProp.call(source, option)) { source[option] = source.content[option]; }\n\t});\n\n\tif (source.separator === undefined) {\n\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\tsource.separator = this.separator;\n\t}\n\n\tif (source.filename) {\n\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t} else {\n\t\t\tvar uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\tthrow new Error((\"Illegal source: same filename (\" + (source.filename) + \"), different contents\"));\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.sources.push(source);\n\treturn this;\n};\n\nBundle.prototype.append = function append (str, options) {\n\tthis.addSource({\n\t\tcontent: new MagicString(str),\n\t\tseparator: (options && options.separator) || ''\n\t});\n\n\treturn this;\n};\n\nBundle.prototype.clone = function clone () {\n\tvar bundle = new Bundle({\n\t\tintro: this.intro,\n\t\tseparator: this.separator\n\t});\n\n\tthis.sources.forEach(function (source) {\n\t\tbundle.addSource({\n\t\t\tfilename: source.filename,\n\t\t\tcontent: source.content.clone(),\n\t\t\tseparator: source.separator\n\t\t});\n\t});\n\n\treturn bundle;\n};\n\nBundle.prototype.generateDecodedMap = function generateDecodedMap (options) {\n\t\tvar this$1 = this;\n\t\tif ( options === void 0 ) options = {};\n\n\tvar names = [];\n\tthis.sources.forEach(function (source) {\n\t\tObject.keys(source.content.storedNames).forEach(function (name) {\n\t\t\tif (!~names.indexOf(name)) { names.push(name); }\n\t\t});\n\t});\n\n\tvar mappings = new Mappings(options.hires);\n\n\tif (this.intro) {\n\t\tmappings.advance(this.intro);\n\t}\n\n\tthis.sources.forEach(function (source, i) {\n\t\tif (i > 0) {\n\t\t\tmappings.advance(this$1.separator);\n\t\t}\n\n\t\tvar sourceIndex = source.filename ? this$1.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\tvar magicString = source.content;\n\t\tvar locate = getLocator(magicString.original);\n\n\t\tif (magicString.intro) {\n\t\t\tmappings.advance(magicString.intro);\n\t\t}\n\n\t\tmagicString.firstChunk.eachNext(function (chunk) {\n\t\t\tvar loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) { mappings.advance(chunk.intro); }\n\n\t\t\tif (source.filename) {\n\t\t\t\tif (chunk.edited) {\n\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\tloc,\n\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\tchunk,\n\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\tloc,\n\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmappings.advance(chunk.content);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) { mappings.advance(chunk.outro); }\n\t\t});\n\n\t\tif (magicString.outro) {\n\t\t\tmappings.advance(magicString.outro);\n\t\t}\n\t});\n\n\treturn {\n\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\tsources: this.uniqueSources.map(function (source) {\n\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t}),\n\t\tsourcesContent: this.uniqueSources.map(function (source) {\n\t\t\treturn options.includeContent ? source.content : null;\n\t\t}),\n\t\tnames: names,\n\t\tmappings: mappings.raw\n\t};\n};\n\nBundle.prototype.generateMap = function generateMap (options) {\n\treturn new SourceMap(this.generateDecodedMap(options));\n};\n\nBundle.prototype.getIndentString = function getIndentString () {\n\tvar indentStringCounts = {};\n\n\tthis.sources.forEach(function (source) {\n\t\tvar indentStr = source.content.indentStr;\n\n\t\tif (indentStr === null) { return; }\n\n\t\tif (!indentStringCounts[indentStr]) { indentStringCounts[indentStr] = 0; }\n\t\tindentStringCounts[indentStr] += 1;\n\t});\n\n\treturn (\n\t\tObject.keys(indentStringCounts).sort(function (a, b) {\n\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t})[0] || '\\t'\n\t);\n};\n\nBundle.prototype.indent = function indent (indentStr) {\n\t\tvar this$1 = this;\n\n\tif (!arguments.length) {\n\t\tindentStr = this.getIndentString();\n\t}\n\n\tif (indentStr === '') { return this; } // noop\n\n\tvar trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\tthis.sources.forEach(function (source, i) {\n\t\tvar separator = source.separator !== undefined ? source.separator : this$1.separator;\n\t\tvar indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\tsource.content.indent(indentStr, {\n\t\t\texclude: source.indentExclusionRanges,\n\t\t\tindentStart: indentStart //: trailingNewline || /\\r?\\n$/.test( separator ) //true///\\r?\\n/.test( separator )\n\t\t});\n\n\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t});\n\n\tif (this.intro) {\n\t\tthis.intro =\n\t\t\tindentStr +\n\t\t\tthis.intro.replace(/^[^\\n]/gm, function (match, index) {\n\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t});\n\t}\n\n\treturn this;\n};\n\nBundle.prototype.prepend = function prepend (str) {\n\tthis.intro = str + this.intro;\n\treturn this;\n};\n\nBundle.prototype.toString = function toString () {\n\t\tvar this$1 = this;\n\n\tvar body = this.sources\n\t\t.map(function (source, i) {\n\t\t\tvar separator = source.separator !== undefined ? source.separator : this$1.separator;\n\t\t\tvar str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\treturn str;\n\t\t})\n\t\t.join('');\n\n\treturn this.intro + body;\n};\n\nBundle.prototype.isEmpty = function isEmpty () {\n\tif (this.intro.length && this.intro.trim())\n\t\t{ return false; }\n\tif (this.sources.some(function (source) { return !source.content.isEmpty(); }))\n\t\t{ return false; }\n\treturn true;\n};\n\nBundle.prototype.length = function length () {\n\treturn this.sources.reduce(function (length, source) { return length + source.content.length(); }, this.intro.length);\n};\n\nBundle.prototype.trimLines = function trimLines () {\n\treturn this.trim('[\\\\r\\\\n]');\n};\n\nBundle.prototype.trim = function trim (charType) {\n\treturn this.trimStart(charType).trimEnd(charType);\n};\n\nBundle.prototype.trimStart = function trimStart (charType) {\n\tvar rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\tthis.intro = this.intro.replace(rx, '');\n\n\tif (!this.intro) {\n\t\tvar source;\n\t\tvar i = 0;\n\n\t\tdo {\n\t\t\tsource = this.sources[i++];\n\t\t\tif (!source) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimStartAborted(charType));\n\t}\n\n\treturn this;\n};\n\nBundle.prototype.trimEnd = function trimEnd (charType) {\n\tvar rx = new RegExp((charType || '\\\\s') + '+$');\n\n\tvar source;\n\tvar i = this.sources.length - 1;\n\n\tdo {\n\t\tsource = this.sources[i--];\n\t\tif (!source) {\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tbreak;\n\t\t}\n\t} while (!source.content.trimEndAborted(charType));\n\n\treturn this;\n};\n\nexport default MagicString;\nexport { Bundle, SourceMap };\n//# sourceMappingURL=magic-string.es.js.map\n","'use strict';\n\n/**\n * @param typeMap [Object] Map of MIME type -> Array[extensions]\n * @param ...\n */\nfunction Mime() {\n this._types = Object.create(null);\n this._extensions = Object.create(null);\n\n for (let i = 0; i < arguments.length; i++) {\n this.define(arguments[i]);\n }\n\n this.define = this.define.bind(this);\n this.getType = this.getType.bind(this);\n this.getExtension = this.getExtension.bind(this);\n}\n\n/**\n * Define mimetype -> extension mappings. Each key is a mime-type that maps\n * to an array of extensions associated with the type. The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * If a type declares an extension that has already been defined, an error will\n * be thrown. To suppress this error and force the extension to be associated\n * with the new type, pass `force`=true. Alternatively, you may prefix the\n * extension with \"*\" to map the type to extension, without mapping the\n * extension to the type.\n *\n * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});\n *\n *\n * @param map (Object) type definitions\n * @param force (Boolean) if true, force overriding of existing definitions\n */\nMime.prototype.define = function(typeMap, force) {\n for (let type in typeMap) {\n let extensions = typeMap[type].map(function(t) {\n return t.toLowerCase();\n });\n type = type.toLowerCase();\n\n for (let i = 0; i < extensions.length; i++) {\n const ext = extensions[i];\n\n // '*' prefix = not the preferred type for this extension. So fixup the\n // extension, and skip it.\n if (ext[0] === '*') {\n continue;\n }\n\n if (!force && (ext in this._types)) {\n throw new Error(\n 'Attempt to change mapping for \"' + ext +\n '\" extension from \"' + this._types[ext] + '\" to \"' + type +\n '\". Pass `force=true` to allow this, otherwise remove \"' + ext +\n '\" from the list of extensions for \"' + type + '\".'\n );\n }\n\n this._types[ext] = type;\n }\n\n // Use first extension as default\n if (force || !this._extensions[type]) {\n const ext = extensions[0];\n this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);\n }\n }\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.getType = function(path) {\n path = String(path);\n let last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n let ext = last.replace(/^.*\\./, '').toLowerCase();\n\n let hasPath = last.length < path.length;\n let hasDot = ext.length < last.length - 1;\n\n return (hasDot || !hasPath) && this._types[ext] || null;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.getExtension = function(type) {\n type = /^\\s*([^;\\s]*)/.test(type) && RegExp.$1;\n return type && this._extensions[type.toLowerCase()] || null;\n};\n\nmodule.exports = Mime;\n","module.exports = {\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomdeleted+xml\":[\"atomdeleted\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/atsc-dwd+xml\":[\"dwd\"],\"application/atsc-held+xml\":[\"held\"],\"application/atsc-rsat+xml\":[\"rsat\"],\"application/bdoc\":[\"bdoc\"],\"application/calendar+xml\":[\"xcs\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdfx+xml\":[\"cdfx\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"ecma\",\"es\"],\"application/emma+xml\":[\"emma\"],\"application/emotionml+xml\":[\"emotionml\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/fdt+xml\":[\"fdt\"],\"application/font-tdpfr\":[\"pfr\"],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hjson\":[\"hjson\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/its+xml\":[\"its\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lgr+xml\":[\"lgr\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mmt-aei+xml\":[\"maei\"],\"application/mmt-usd+xml\":[\"musd\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/mrb-consumer+xml\":[\"*xdf\"],\"application/mrb-publish+xml\":[\"*xdf\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/n-quads\":[\"nq\"],\"application/n-triples\":[\"nt\"],\"application/node\":[\"cjs\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/p2p-overlay+xml\":[\"relo\"],\"application/patch-ops-error+xml\":[\"*xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/provenance+xml\":[\"provx\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\",\"owl\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/route-apd+xml\":[\"rapd\"],\"application/route-s-tsid+xml\":[\"sls\"],\"application/route-usd+xml\":[\"rusd\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/senml+xml\":[\"senmlx\"],\"application/sensml+xml\":[\"sensmlx\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/sieve\":[\"siv\",\"sieve\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/swid+xml\":[\"swidtag\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/toml\":[\"toml\"],\"application/ttml+xml\":[\"ttml\"],\"application/ubjson\":[\"ubj\"],\"application/urc-ressheet+xml\":[\"rsheet\"],\"application/urc-targetdesc+xml\":[\"td\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-att+xml\":[\"xav\"],\"application/xcap-caps+xml\":[\"xca\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xcap-el+xml\":[\"xel\"],\"application/xcap-error+xml\":[\"xer\"],\"application/xcap-ns+xml\":[\"xns\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xliff+xml\":[\"xlf\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"*xsl\",\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[\"*3gpp\"],\"audio/adpcm\":[\"adp\"],\"audio/amr\":[\"amr\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mobile-xmf\":[\"mxmf\"],\"audio/mp3\":[\"*mp3\"],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\",\"opus\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[\"*wav\"],\"audio/webm\":[\"weba\"],\"audio/xm\":[\"xm\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/aces\":[\"exr\"],\"image/apng\":[\"apng\"],\"image/avif\":[\"avif\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/dicom-rle\":[\"drle\"],\"image/emf\":[\"emf\"],\"image/fits\":[\"fits\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/heic\":[\"heic\"],\"image/heic-sequence\":[\"heics\"],\"image/heif\":[\"heif\"],\"image/heif-sequence\":[\"heifs\"],\"image/hej2k\":[\"hej2\"],\"image/hsj2\":[\"hsj2\"],\"image/ief\":[\"ief\"],\"image/jls\":[\"jls\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jph\":[\"jph\"],\"image/jphc\":[\"jhc\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/jxr\":[\"jxr\"],\"image/jxra\":[\"jxra\"],\"image/jxrs\":[\"jxrs\"],\"image/jxs\":[\"jxs\"],\"image/jxsc\":[\"jxsc\"],\"image/jxsi\":[\"jxsi\"],\"image/jxss\":[\"jxss\"],\"image/ktx\":[\"ktx\"],\"image/ktx2\":[\"ktx2\"],\"image/png\":[\"png\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/t38\":[\"t38\"],\"image/tiff\":[\"tif\",\"tiff\"],\"image/tiff-fx\":[\"tfx\"],\"image/webp\":[\"webp\"],\"image/wmf\":[\"wmf\"],\"message/disposition-notification\":[\"disposition-notification\"],\"message/global\":[\"u8msg\"],\"message/global-delivery-status\":[\"u8dsn\"],\"message/global-disposition-notification\":[\"u8mdn\"],\"message/global-headers\":[\"u8hdr\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/3mf\":[\"3mf\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/mtl\":[\"mtl\"],\"model/obj\":[\"obj\"],\"model/stl\":[\"stl\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"*x3db\",\"x3dbz\"],\"model/x3d+fastinfoset\":[\"x3db\"],\"model/x3d+vrml\":[\"*x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"model/x3d-vrml\":[\"x3dv\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/mdx\":[\"mdx\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[\"*rtf\"],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/shex\":[\"shex\"],\"text/slim\":[\"slim\",\"slm\"],\"text/spdx\":[\"spdx\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vtt\":[\"vtt\"],\"text/xml\":[\"*xml\"],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/iso.segment\":[\"m4s\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"*jpm\",\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/webm\":[\"webm\"]};","'use strict';\n\nlet Mime = require('./Mime');\nmodule.exports = new Mime(require('./types/standard'));\n","import path from 'path'\nimport { parse as parseUrl } from 'url'\nimport fs, { promises as fsp } from 'fs'\nimport mime from 'mime/lite'\nimport { Plugin } from '../plugin'\nimport { ResolvedConfig } from '../config'\nimport { cleanUrl } from '../utils'\nimport { FS_PREFIX } from '../constants'\nimport { OutputOptions, PluginContext, RenderedChunk } from 'rollup'\nimport MagicString from 'magic-string'\nimport { createHash } from 'crypto'\nimport { normalizePath } from '../utils'\n\nexport const assetUrlRE = /__VITE_ASSET__([a-z\\d]{8})__(?:\\$_(.*?)__)?/g\n\n// urls in JS must be quoted as strings, so when replacing them we need\n// a different regex\nconst assetUrlQuotedRE = /\"__VITE_ASSET__([a-z\\d]{8})__(?:\\$_(.*?)__)?\"/g\n\nconst rawRE = /(\\?|&)raw(?:&|$)/\nconst urlRE = /(\\?|&)url(?:&|$)/\n\nexport const chunkToEmittedAssetsMap = new WeakMap<RenderedChunk, Set<string>>()\n\nconst assetCache = new WeakMap<ResolvedConfig, Map<string, string>>()\n\nconst assetHashToFilenameMap = new WeakMap<\n ResolvedConfig,\n Map<string, string>\n>()\n// save hashes of the files that has been emitted in build watch\nconst emittedHashMap = new WeakMap<ResolvedConfig, Set<string>>()\n\n/**\n * Also supports loading plain strings with import text from './foo.txt?raw'\n */\nexport function assetPlugin(config: ResolvedConfig): Plugin {\n // assetHashToFilenameMap initialization in buildStart causes getAssetFilename to return undefined\n assetHashToFilenameMap.set(config, new Map())\n return {\n name: 'vite:asset',\n\n buildStart() {\n assetCache.set(config, new Map())\n emittedHashMap.set(config, new Set())\n },\n\n resolveId(id) {\n if (!config.assetsInclude(cleanUrl(id))) {\n return\n }\n // imports to absolute urls pointing to files in /public\n // will fail to resolve in the main resolver. handle them here.\n const publicFile = checkPublicFile(id, config)\n if (publicFile) {\n return id\n }\n },\n\n async load(id) {\n if (id.startsWith('\\0')) {\n // Rollup convention, this id should be handled by the\n // plugin that marked it with \\0\n return\n }\n\n // raw requests, read from disk\n if (rawRE.test(id)) {\n const file = checkPublicFile(id, config) || cleanUrl(id)\n // raw query, read file and return as string\n return `export default ${JSON.stringify(\n await fsp.readFile(file, 'utf-8')\n )}`\n }\n\n if (!config.assetsInclude(cleanUrl(id)) && !urlRE.test(id)) {\n return\n }\n\n id = id.replace(urlRE, '$1').replace(/[\\?&]$/, '')\n const url = await fileToUrl(id, config, this)\n return `export default ${JSON.stringify(url)}`\n },\n\n renderChunk(code, chunk) {\n let match: RegExpExecArray | null\n let s: MagicString | undefined\n while ((match = assetUrlQuotedRE.exec(code))) {\n s = s || (s = new MagicString(code))\n const [full, hash, postfix = ''] = match\n // some internal plugins may still need to emit chunks (e.g. worker) so\n // fallback to this.getFileName for that.\n const file = getAssetFilename(hash, config) || this.getFileName(hash)\n registerAssetToChunk(chunk, file)\n const outputFilepath = config.base + file + postfix\n s.overwrite(\n match.index,\n match.index + full.length,\n JSON.stringify(outputFilepath)\n )\n }\n if (s) {\n return {\n code: s.toString(),\n map: config.build.sourcemap ? s.generateMap({ hires: true }) : null\n }\n } else {\n return null\n }\n },\n\n generateBundle(_, bundle) {\n // do not emit assets for SSR build\n if (config.command === 'build' && config.build.ssr) {\n for (const file in bundle) {\n if (\n bundle[file].type === 'asset' &&\n !file.includes('ssr-manifest.json')\n ) {\n delete bundle[file]\n }\n }\n }\n }\n }\n}\n\nexport function registerAssetToChunk(chunk: RenderedChunk, file: string): void {\n let emitted = chunkToEmittedAssetsMap.get(chunk)\n if (!emitted) {\n emitted = new Set()\n chunkToEmittedAssetsMap.set(chunk, emitted)\n }\n emitted.add(cleanUrl(file))\n}\n\nexport function checkPublicFile(\n url: string,\n { publicDir }: ResolvedConfig\n): string | undefined {\n // note if the file is in /public, the resolver would have returned it\n // as-is so it's not going to be a fully resolved path.\n if (!publicDir || !url.startsWith('/')) {\n return\n }\n const publicFile = path.join(publicDir, cleanUrl(url))\n if (fs.existsSync(publicFile)) {\n return publicFile\n } else {\n return\n }\n}\n\nexport function fileToUrl(\n id: string,\n config: ResolvedConfig,\n ctx: PluginContext\n): string | Promise<string> {\n if (config.command === 'serve') {\n return fileToDevUrl(id, config)\n } else {\n return fileToBuiltUrl(id, config, ctx)\n }\n}\n\nfunction fileToDevUrl(id: string, config: ResolvedConfig) {\n let rtn: string\n if (checkPublicFile(id, config)) {\n // in public dir, keep the url as-is\n rtn = id\n } else if (id.startsWith(config.root)) {\n // in project root, infer short public path\n rtn = '/' + path.posix.relative(config.root, id)\n } else {\n // outside of project root, use absolute fs path\n // (this is special handled by the serve static middleware\n rtn = path.posix.join(FS_PREFIX + id)\n }\n const origin = config.server?.origin ?? ''\n return origin + config.base + rtn.replace(/^\\//, '')\n}\n\nexport function getAssetFilename(\n hash: string,\n config: ResolvedConfig\n): string | undefined {\n return assetHashToFilenameMap.get(config)?.get(hash)\n}\n\n/**\n * converts the source filepath of the asset to the output filename based on the assetFileNames option. \\\n * this function imitates the behavior of rollup.js. \\\n * https://rollupjs.org/guide/en/#outputassetfilenames\n *\n * @example\n * ```ts\n * const content = Buffer.from('text');\n * const fileName = assetFileNamesToFileName(\n * 'assets/[name].[hash][extname]',\n * '/path/to/file.txt',\n * getAssetHash(content),\n * content\n * )\n * // fileName: 'assets/file.982d9e3e.txt'\n * ```\n *\n * @param assetFileNames filename pattern. e.g. `'assets/[name].[hash][extname]'`\n * @param file filepath of the asset\n * @param contentHash hash of the asset. used for `'[hash]'` placeholder\n * @param content content of the asset. passed to `assetFileNames` if `assetFileNames` is a function\n * @returns output filename\n */\nexport function assetFileNamesToFileName(\n assetFileNames: Exclude<OutputOptions['assetFileNames'], undefined>,\n file: string,\n contentHash: string,\n content: string | Buffer\n): string {\n const basename = path.basename(file)\n\n // placeholders for `assetFileNames`\n // `hash` is slightly different from the rollup's one\n const extname = path.extname(basename)\n const ext = extname.substr(1)\n const name = basename.slice(0, -extname.length)\n const hash = contentHash\n\n if (typeof assetFileNames === 'function') {\n assetFileNames = assetFileNames({\n name: file,\n source: content,\n type: 'asset'\n })\n if (typeof assetFileNames !== 'string') {\n throw new TypeError('assetFileNames must return a string')\n }\n } else if (typeof assetFileNames !== 'string') {\n throw new TypeError('assetFileNames must be a string or a function')\n }\n\n const fileName = assetFileNames.replace(\n /\\[\\w+\\]/g,\n (placeholder: string): string => {\n switch (placeholder) {\n case '[ext]':\n return ext\n\n case '[extname]':\n return extname\n\n case '[hash]':\n return hash\n\n case '[name]':\n return name\n }\n throw new Error(\n `invalid placeholder ${placeholder} in assetFileNames \"${assetFileNames}\"`\n )\n }\n )\n\n return fileName\n}\n\n/**\n * Register an asset to be emitted as part of the bundle (if necessary)\n * and returns the resolved public URL\n */\nasync function fileToBuiltUrl(\n id: string,\n config: ResolvedConfig,\n pluginContext: PluginContext,\n skipPublicCheck = false\n): Promise<string> {\n if (!skipPublicCheck && checkPublicFile(id, config)) {\n return config.base + id.slice(1)\n }\n\n const cache = assetCache.get(config)!\n const cached = cache.get(id)\n if (cached) {\n return cached\n }\n\n const file = cleanUrl(id)\n const content = await fsp.readFile(file)\n\n let url: string\n if (\n config.build.lib ||\n (!file.endsWith('.svg') &&\n content.length < Number(config.build.assetsInlineLimit))\n ) {\n // base64 inlined as a string\n url = `data:${mime.getType(file)};base64,${content.toString('base64')}`\n } else {\n // emit as asset\n // rollup supports `import.meta.ROLLUP_FILE_URL_*`, but it generates code\n // that uses runtime url sniffing and it can be verbose when targeting\n // non-module format. It also fails to cascade the asset content change\n // into the chunk's hash, so we have to do our own content hashing here.\n // https://bundlers.tooling.report/hashing/asset-cascade/\n // https://github.com/rollup/rollup/issues/3415\n const map = assetHashToFilenameMap.get(config)!\n const contentHash = getAssetHash(content)\n const { search, hash } = parseUrl(id)\n const postfix = (search || '') + (hash || '')\n const output = config.build?.rollupOptions?.output\n const assetFileNames =\n (output && !Array.isArray(output) ? output.assetFileNames : undefined) ??\n // defaults to '<assetsDir>/[name].[hash][extname]'\n // slightly different from rollup's one ('assets/[name]-[hash][extname]')\n path.posix.join(config.build.assetsDir, '[name].[hash][extname]')\n const fileName = assetFileNamesToFileName(\n assetFileNames,\n file,\n contentHash,\n content\n )\n if (!map.has(contentHash)) {\n map.set(contentHash, fileName)\n }\n const emittedSet = emittedHashMap.get(config)!\n if (!emittedSet.has(contentHash)) {\n const name = normalizePath(path.relative(config.root, file))\n pluginContext.emitFile({\n name,\n fileName,\n type: 'asset',\n source: content\n })\n emittedSet.add(contentHash)\n }\n\n url = `__VITE_ASSET__${contentHash}__${postfix ? `$_${postfix}__` : ``}`\n }\n\n cache.set(id, url)\n return url\n}\n\nexport function getAssetHash(content: Buffer): string {\n return createHash('sha256').update(content).digest('hex').slice(0, 8)\n}\n\nexport async function urlToBuiltUrl(\n url: string,\n importer: string,\n config: ResolvedConfig,\n pluginContext: PluginContext\n): Promise<string> {\n if (checkPublicFile(url, config)) {\n return config.base + url.slice(1)\n }\n const file = url.startsWith('/')\n ? path.join(config.root, url)\n : path.join(path.dirname(importer), url)\n return fileToBuiltUrl(\n file,\n config,\n pluginContext,\n // skip public check since we just did it above\n true\n )\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n const result = [[]];\n let groupIndex = 0;\n for (const item of items) {\n if (predicate(item)) {\n groupIndex++;\n result[groupIndex] = [];\n }\n else {\n result[groupIndex].push(item);\n }\n }\n return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeLeadingDotSegment = exports.escape = exports.makeAbsolute = exports.unixify = void 0;\nconst path = require(\"path\");\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\nconst UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\())/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction escape(pattern) {\n return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escape = escape;\nfunction removeLeadingDotSegment(entry) {\n // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entry.charAt(0) === '.') {\n const secondCharactery = entry.charAt(1);\n if (secondCharactery === '/' || secondCharactery === '\\\\') {\n return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n }\n }\n return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictRegex = /\\\\(.)|(^!|\\*|[\\].+)]\\?|\\[[^\\\\\\]]+\\]|\\{[^\\\\}]+\\}|\\(\\?[:!=][^\\\\)]+\\)|\\([^|]+\\|[^\\\\)]+\\))/;\nvar relaxedRegex = /\\\\(.)|(^!|[*?{}()[\\]]|\\(\\?)/;\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var regex = strictRegex;\n var match;\n\n // optionally relax regex\n if (options && options.strict === false) {\n regex = relaxedRegex;\n }\n\n while ((match = regex.exec(str))) {\n if (match[2]) return true;\n var idx = match.index + match[0].length;\n\n // if an open bracket/brace/paren is escaped,\n // set the index to the next closing character\n var open = match[1];\n var close = open ? chars[open] : null;\n if (open && close) {\n var n = str.indexOf(close, idx);\n if (n !== -1) {\n idx = n + 1;\n }\n }\n\n str = str.slice(idx);\n }\n return false;\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\n};\n","'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n let node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n let ele = arr[i];\n Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);\n }\n return result;\n };\n flat(args);\n return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n let stringify = (node, parent = {}) => {\n let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n let invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (let child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n let walk = (node, parent = {}) => {\n let invalidBlock = utils.isInvalidBrace(parent);\n let invalidNode = node.invalid === true && options.escapeInvalid === true;\n let invalid = invalidBlock === true || invalidNode === true;\n let prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n if (node.isClose === true) {\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? (prefix + node.value) : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? (prefix + node.value) : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n let args = utils.reduce(node.nodes);\n let range = fill(...args, { ...options, wrap: false, toRegex: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (let child of node.nodes) {\n output += walk(child, node);\n }\n }\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n let result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (let item of queue) {\n if (Array.isArray(item)) {\n for (let value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;\n\n let walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n let args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n let enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n let opts = options || {};\n let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n let ast = { type: 'root', input, nodes: [] };\n let stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n let length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n let memo = {};\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let closed = true;\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n let open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n let brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n let type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n let open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n let siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n let before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n let parent = stack[stack.length - 1];\n let index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (let pattern of input) {\n let result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n output = token.close = `)${rest})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\nconst isEmptyString = val => val === '' || val === './';\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = micromatch(list, patterns, { ...options, onResult });\n\n for (let item of items) {\n if (!matches.includes(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !/\\{.*\\}/.test(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\nmodule.exports = micromatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[.*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\(.*\\|.*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\(.*\\)/;\nconst BRACE_EXPANSIONS_SYMBOLS_RE = /{.*(?:,|\\.\\.).*}/;\nfunction isStaticPattern(pattern, options = {}) {\n return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n /**\n * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n * An empty string cannot be a dynamic pattern.\n * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n */\n if (pattern === '') {\n return false;\n }\n /**\n * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n * filepath directly (without read directory).\n */\n if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n return true;\n }\n if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.braceExpansion !== false && BRACE_EXPANSIONS_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction convertToPositivePattern(pattern) {\n return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n const basename = path.basename(pattern);\n return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n return patterns.reduce((collection, pattern) => {\n return collection.concat(expandBraceExpansion(pattern));\n }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n return micromatch.braces(pattern, {\n expand: true,\n nodupes: true\n });\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n /**\n * The scan method returns an empty array in some cases.\n * See micromatch/picomatch#58 for more details.\n */\n if (parts.length === 0) {\n parts = [pattern];\n }\n /**\n * The scan method does not return an empty part for the pattern with a forward slash.\n * This is another part of micromatch/picomatch#58.\n */\n if (parts[0].startsWith('/')) {\n parts[0] = parts[0].slice(1);\n parts.unshift('');\n }\n return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n const streamsQueue = []\n const args = slice.call(arguments)\n let merging = false\n let options = args[args.length - 1]\n\n if (options && !Array.isArray(options) && options.pipe == null) {\n args.pop()\n } else {\n options = {}\n }\n\n const doEnd = options.end !== false\n const doPipeError = options.pipeError === true\n if (options.objectMode == null) {\n options.objectMode = true\n }\n if (options.highWaterMark == null) {\n options.highWaterMark = 64 * 1024\n }\n const mergedStream = PassThrough(options)\n\n function addStream () {\n for (let i = 0, len = arguments.length; i < len; i++) {\n streamsQueue.push(pauseStreams(arguments[i], options))\n }\n mergeStream()\n return this\n }\n\n function mergeStream () {\n if (merging) {\n return\n }\n merging = true\n\n let streams = streamsQueue.shift()\n if (!streams) {\n process.nextTick(endStream)\n return\n }\n if (!Array.isArray(streams)) {\n streams = [streams]\n }\n\n let pipesCount = streams.length + 1\n\n function next () {\n if (--pipesCount > 0) {\n return\n }\n merging = false\n mergeStream()\n }\n\n function pipe (stream) {\n function onend () {\n stream.removeListener('merge2UnpipeEnd', onend)\n stream.removeListener('end', onend)\n if (doPipeError) {\n stream.removeListener('error', onerror)\n }\n next()\n }\n function onerror (err) {\n mergedStream.emit('error', err)\n }\n // skip ended stream\n if (stream._readableState.endEmitted) {\n return next()\n }\n\n stream.on('merge2UnpipeEnd', onend)\n stream.on('end', onend)\n\n if (doPipeError) {\n stream.on('error', onerror)\n }\n\n stream.pipe(mergedStream, { end: false })\n // compatible for old stream\n stream.resume()\n }\n\n for (let i = 0; i < streams.length; i++) {\n pipe(streams[i])\n }\n\n next()\n }\n\n function endStream () {\n merging = false\n // emit 'queueDrain' when all streams merged.\n mergedStream.emit('queueDrain')\n if (doEnd) {\n mergedStream.end()\n }\n }\n\n mergedStream.setMaxListeners(0)\n mergedStream.add = addStream\n mergedStream.on('unpipe', function (stream) {\n stream.emit('merge2UnpipeEnd')\n })\n\n if (args.length) {\n addStream.apply(null, args)\n }\n return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n if (!Array.isArray(streams)) {\n // Backwards-compat with old-style streams\n if (!streams._readableState && streams.pipe) {\n streams = streams.pipe(PassThrough(options))\n }\n if (!streams._readableState || !streams.pause || !streams.pipe) {\n throw new Error('Only readable stream can be merged.')\n }\n streams.pause()\n } else {\n for (let i = 0, len = streams.length; i < len; i++) {\n streams[i] = pauseStreams(streams[i], options)\n }\n }\n return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n const mergedStream = merge2(streams);\n streams.forEach((stream) => {\n stream.once('error', (error) => mergedStream.emit('error', error));\n });\n mergedStream.once('close', () => propagateCloseEventToSources(streams));\n mergedStream.once('end', () => propagateCloseEventToSources(streams));\n return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(patterns, settings) {\n const positivePatterns = getPositivePatterns(patterns);\n const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);\n const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n const tasks = [];\n const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n /*\n * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n */\n if ('.' in insideCurrentDirectoryGroup) {\n tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n }\n else {\n tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n }\n return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n const positive = negative.map(utils.pattern.convertToPositivePattern);\n return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n const group = {};\n return patterns.reduce((collection, pattern) => {\n const base = utils.pattern.getBaseDirectory(pattern);\n if (base in collection) {\n collection[base].push(pattern);\n }\n else {\n collection[base] = [pattern];\n }\n return collection;\n }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n return Object.keys(positive).map((base) => {\n return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n return {\n dynamic,\n positive,\n negative,\n base,\n patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n settings.fs.lstat(path, (lstatError, lstat) => {\n if (lstatError !== null) {\n callFailureCallback(callback, lstatError);\n return;\n }\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n callSuccessCallback(callback, lstat);\n return;\n }\n settings.fs.stat(path, (statError, stat) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n callFailureCallback(callback, statError);\n return;\n }\n callSuccessCallback(callback, lstat);\n return;\n }\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n callSuccessCallback(callback, stat);\n });\n });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n const lstat = settings.fs.lstatSync(path);\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n return lstat;\n }\n try {\n const stat = settings.fs.statSync(path);\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n return stat;\n }\n catch (error) {\n if (!settings.throwErrorOnBrokenSymbolicLink) {\n return lstat;\n }\n throw error;\n }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n let results, pending, keys\n let isSync = true\n\n if (Array.isArray(tasks)) {\n results = []\n pending = tasks.length\n } else {\n keys = Object.keys(tasks)\n results = {}\n pending = keys.length\n }\n\n function done (err) {\n function end () {\n if (cb) cb(err, results)\n cb = null\n }\n if (isSync) queueMicrotask(end)\n else end()\n }\n\n function each (i, err, result) {\n results[i] = result\n if (--pending === 0 || err) {\n done(err)\n }\n }\n\n if (!pending) {\n // empty\n done(null)\n } else if (keys) {\n // object\n keys.forEach(function (key) {\n tasks[key](function (err, result) { each(key, err, result) })\n })\n } else {\n // array\n tasks.forEach(function (task, i) {\n task(function (err, result) { each(i, err, result) })\n })\n }\n\n isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n readdirWithFileTypes(directory, settings, callback);\n return;\n }\n readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const entries = dirents.map((dirent) => ({\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n }));\n if (!settings.followSymbolicLinks) {\n callSuccessCallback(callback, entries);\n return;\n }\n const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n rpl(tasks, (rplError, rplEntries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, rplEntries);\n });\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n return (done) => {\n if (!entry.dirent.isSymbolicLink()) {\n done(null, entry);\n return;\n }\n settings.fs.stat(entry.path, (statError, stats) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n done(statError);\n return;\n }\n done(null, entry);\n return;\n }\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n done(null, entry);\n });\n };\n}\nfunction readdir(directory, settings, callback) {\n settings.fs.readdir(directory, (readdirError, names) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const tasks = names.map((name) => {\n const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n return (done) => {\n fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n if (error !== null) {\n done(error);\n return;\n }\n const entry = {\n name,\n path,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n done(null, entry);\n });\n };\n });\n rpl(tasks, (rplError, entries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, entries);\n });\n });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n return readdirWithFileTypes(directory, settings);\n }\n return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n return dirents.map((dirent) => {\n const entry = {\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n };\n if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n try {\n const stats = settings.fs.statSync(entry.path);\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n }\n catch (error) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n throw error;\n }\n }\n }\n return entry;\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n const names = settings.fs.readdirSync(directory);\n return names.map((name) => {\n const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n const entry = {\n name,\n path: entryPath,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n return entry;\n });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.stats = this._getValue(this._options.stats, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n this.fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this.followSymbolicLinks,\n fs: this.fs,\n throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n var head = new Constructor()\n var tail = head\n\n function get () {\n var current = head\n\n if (current.next) {\n head = current.next\n } else {\n head = new Constructor()\n tail = head\n }\n\n current.next = null\n\n return current\n }\n\n function release (obj) {\n tail.next = obj\n tail = obj\n }\n\n return {\n get: get,\n release: release\n }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, concurrency) {\n if (typeof context === 'function') {\n concurrency = worker\n worker = context\n context = null\n }\n\n if (concurrency < 1) {\n throw new Error('fastqueue concurrency must be greater than 1')\n }\n\n var cache = reusify(Task)\n var queueHead = null\n var queueTail = null\n var _running = 0\n var errorHandler = null\n\n var self = {\n push: push,\n drain: noop,\n saturated: noop,\n pause: pause,\n paused: false,\n concurrency: concurrency,\n running: running,\n resume: resume,\n idle: idle,\n length: length,\n getQueue: getQueue,\n unshift: unshift,\n empty: noop,\n kill: kill,\n killAndDrain: killAndDrain,\n error: error\n }\n\n return self\n\n function running () {\n return _running\n }\n\n function pause () {\n self.paused = true\n }\n\n function length () {\n var current = queueHead\n var counter = 0\n\n while (current) {\n current = current.next\n counter++\n }\n\n return counter\n }\n\n function getQueue () {\n var current = queueHead\n var tasks = []\n\n while (current) {\n tasks.push(current.value)\n current = current.next\n }\n\n return tasks\n }\n\n function resume () {\n if (!self.paused) return\n self.paused = false\n for (var i = 0; i < self.concurrency; i++) {\n _running++\n release()\n }\n }\n\n function idle () {\n return _running === 0 && self.length() === 0\n }\n\n function push (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running === self.concurrency || self.paused) {\n if (queueTail) {\n queueTail.next = current\n queueTail = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function unshift (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n\n if (_running === self.concurrency || self.paused) {\n if (queueHead) {\n current.next = queueHead\n queueHead = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function release (holder) {\n if (holder) {\n cache.release(holder)\n }\n var next = queueHead\n if (next) {\n if (!self.paused) {\n if (queueTail === queueHead) {\n queueTail = null\n }\n queueHead = next.next\n next.next = null\n worker.call(context, next.value, next.worked)\n if (queueTail === null) {\n self.empty()\n }\n } else {\n _running--\n }\n } else if (--_running === 0) {\n self.drain()\n }\n }\n\n function kill () {\n queueHead = null\n queueTail = null\n self.drain = noop\n }\n\n function killAndDrain () {\n queueHead = null\n queueTail = null\n self.drain()\n self.drain = noop\n }\n\n function error (handler) {\n errorHandler = handler\n }\n}\n\nfunction noop () {}\n\nfunction Task () {\n this.value = null\n this.callback = noop\n this.next = null\n this.release = noop\n this.context = null\n this.errorHandler = null\n\n var self = this\n\n this.worked = function worked (err, result) {\n var callback = self.callback\n var errorHandler = self.errorHandler\n var val = self.value\n self.value = null\n self.callback = noop\n if (self.errorHandler) {\n errorHandler(err, val)\n }\n callback.call(self.context, err, result)\n self.release(self)\n }\n}\n\nfunction queueAsPromised (context, worker, concurrency) {\n if (typeof context === 'function') {\n concurrency = worker\n worker = context\n context = null\n }\n\n function asyncWrapper (arg, cb) {\n worker.call(this, arg)\n .then(function (res) {\n cb(null, res)\n }, cb)\n }\n\n var queue = fastqueue(context, asyncWrapper, concurrency)\n\n var pushCb = queue.push\n var unshiftCb = queue.unshift\n\n queue.push = push\n queue.unshift = unshift\n queue.drained = drained\n\n return queue\n\n function push (value) {\n var p = new Promise(function (resolve, reject) {\n pushCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function unshift (value) {\n var p = new Promise(function (resolve, reject) {\n unshiftCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function drained () {\n var previousDrain = queue.drain\n\n var p = new Promise(function (resolve) {\n queue.drain = function () {\n previousDrain()\n resolve()\n }\n })\n\n return p\n }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n if (settings.errorFilter === null) {\n return true;\n }\n return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n if (a === '') {\n return b;\n }\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n constructor(_root, _settings) {\n super(_root, _settings);\n this._settings = _settings;\n this._scandir = fsScandir.scandir;\n this._emitter = new events_1.EventEmitter();\n this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n this._isFatalError = false;\n this._isDestroyed = false;\n this._queue.drain = () => {\n if (!this._isFatalError) {\n this._emitter.emit('end');\n }\n };\n }\n read() {\n this._isFatalError = false;\n this._isDestroyed = false;\n setImmediate(() => {\n this._pushToQueue(this._root, this._settings.basePath);\n });\n return this._emitter;\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n destroy() {\n if (this._isDestroyed) {\n throw new Error('The reader is already destroyed');\n }\n this._isDestroyed = true;\n this._queue.killAndDrain();\n }\n onEntry(callback) {\n this._emitter.on('entry', callback);\n }\n onError(callback) {\n this._emitter.once('error', callback);\n }\n onEnd(callback) {\n this._emitter.once('end', callback);\n }\n _pushToQueue(directory, base) {\n const queueItem = { directory, base };\n this._queue.push(queueItem, (error) => {\n if (error !== null) {\n this._handleError(error);\n }\n });\n }\n _worker(item, done) {\n this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n if (error !== null) {\n done(error, undefined);\n return;\n }\n for (const entry of entries) {\n this._handleEntry(entry, item.base);\n }\n done(null, undefined);\n });\n }\n _handleError(error) {\n if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n return;\n }\n this._isFatalError = true;\n this._isDestroyed = true;\n this._emitter.emit('error', error);\n }\n _handleEntry(entry, base) {\n if (this._isDestroyed || this._isFatalError) {\n return;\n }\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._emitEntry(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _emitEntry(entry) {\n this._emitter.emit('entry', entry);\n }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._storage = [];\n }\n read(callback) {\n this._reader.onError((error) => {\n callFailureCallback(callback, error);\n });\n this._reader.onEntry((entry) => {\n this._storage.push(entry);\n });\n this._reader.onEnd(() => {\n callSuccessCallback(callback, this._storage);\n });\n this._reader.read();\n }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._stream = new stream_1.Readable({\n objectMode: true,\n read: () => { },\n destroy: () => {\n if (!this._reader.isDestroyed) {\n this._reader.destroy();\n }\n }\n });\n }\n read() {\n this._reader.onError((error) => {\n this._stream.emit('error', error);\n });\n this._reader.onEntry((entry) => {\n this._stream.push(entry);\n });\n this._reader.onEnd(() => {\n this._stream.push(null);\n });\n this._reader.read();\n return this._stream;\n }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n constructor() {\n super(...arguments);\n this._scandir = fsScandir.scandirSync;\n this._storage = [];\n this._queue = new Set();\n }\n read() {\n this._pushToQueue(this._root, this._settings.basePath);\n this._handleQueue();\n return this._storage;\n }\n _pushToQueue(directory, base) {\n this._queue.add({ directory, base });\n }\n _handleQueue() {\n for (const item of this._queue.values()) {\n this._handleDirectory(item.directory, item.base);\n }\n }\n _handleDirectory(directory, base) {\n try {\n const entries = this._scandir(directory, this._settings.fsScandirSettings);\n for (const entry of entries) {\n this._handleEntry(entry, base);\n }\n }\n catch (error) {\n this._handleError(error);\n }\n }\n _handleError(error) {\n if (!common.isFatalError(this._settings, error)) {\n return;\n }\n throw error;\n }\n _handleEntry(entry, base) {\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._pushToStorage(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _pushToStorage(entry) {\n this._storage.push(entry);\n }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new sync_1.default(this._root, this._settings);\n }\n read() {\n return this._reader.read();\n }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.basePath = this._getValue(this._options.basePath, undefined);\n this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n this.deepFilter = this._getValue(this._options.deepFilter, null);\n this.entryFilter = this._getValue(this._options.entryFilter, null);\n this.errorFilter = this._getValue(this._options.errorFilter, null);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.fsScandirSettings = new fsScandir.Settings({\n followSymbolicLinks: this._options.followSymbolicLinks,\n fs: this._options.fs,\n pathSegmentSeparator: this._options.pathSegmentSeparator,\n stats: this._options.stats,\n throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n return;\n }\n new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new sync_1.default(directory, settings);\n return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new stream_1.default(directory, settings);\n return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n constructor(_settings) {\n this._settings = _settings;\n this._fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n });\n }\n _getFullEntryPath(filepath) {\n return path.resolve(this._settings.cwd, filepath);\n }\n _makeEntry(stats, pattern) {\n const entry = {\n name: pattern,\n path: pattern,\n dirent: utils.fs.createDirentFromStats(pattern, stats)\n };\n if (this._settings.stats) {\n entry.stats = stats;\n }\n return entry;\n }\n _isFatalError(error) {\n return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkStream = fsWalk.walkStream;\n this._stat = fsStat.stat;\n }\n dynamic(root, options) {\n return this._walkStream(root, options);\n }\n static(patterns, options) {\n const filepaths = patterns.map(this._getFullEntryPath, this);\n const stream = new stream_1.PassThrough({ objectMode: true });\n stream._write = (index, _enc, done) => {\n return this._getEntry(filepaths[index], patterns[index], options)\n .then((entry) => {\n if (entry !== null && options.entryFilter(entry)) {\n stream.push(entry);\n }\n if (index === filepaths.length - 1) {\n stream.end();\n }\n done();\n })\n .catch(done);\n };\n for (let i = 0; i < filepaths.length; i++) {\n stream.write(i);\n }\n return stream;\n }\n _getEntry(filepath, pattern, options) {\n return this._getStat(filepath)\n .then((stats) => this._makeEntry(stats, pattern))\n .catch((error) => {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n });\n }\n _getStat(filepath) {\n return new Promise((resolve, reject) => {\n this._stat(filepath, this._fsStatSettings, (error, stats) => {\n return error === null ? resolve(stats) : reject(error);\n });\n });\n }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n constructor(_patterns, _settings, _micromatchOptions) {\n this._patterns = _patterns;\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this._storage = [];\n this._fillStorage();\n }\n _fillStorage() {\n /**\n * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).\n * So, before expand patterns with brace expansion into separated patterns.\n */\n const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns);\n for (const pattern of patterns) {\n const segments = this._getPatternSegments(pattern);\n const sections = this._splitSegmentsIntoSections(segments);\n this._storage.push({\n complete: sections.length <= 1,\n pattern,\n segments,\n sections\n });\n }\n }\n _getPatternSegments(pattern) {\n const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n return parts.map((part) => {\n const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n if (!dynamic) {\n return {\n dynamic: false,\n pattern: part\n };\n }\n return {\n dynamic: true,\n pattern: part,\n patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n };\n });\n }\n _splitSegmentsIntoSections(segments) {\n return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n match(filepath) {\n const parts = filepath.split('/');\n const levels = parts.length;\n const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n for (const pattern of patterns) {\n const section = pattern.sections[0];\n /**\n * In this case, the pattern has a globstar and we must read all directories unconditionally,\n * but only if the level has reached the end of the first group.\n *\n * fixtures/{a,b}/**\n * ^ true/false ^ always true\n */\n if (!pattern.complete && levels > section.length) {\n return true;\n }\n const match = parts.every((part, index) => {\n const segment = pattern.segments[index];\n if (segment.dynamic && segment.patternRe.test(part)) {\n return true;\n }\n if (!segment.dynamic && segment.pattern === part) {\n return true;\n }\n return false;\n });\n if (match) {\n return true;\n }\n }\n return false;\n }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n }\n getFilter(basePath, positive, negative) {\n const matcher = this._getMatcher(positive);\n const negativeRe = this._getNegativePatternsRe(negative);\n return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n }\n _getMatcher(patterns) {\n return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n }\n _getNegativePatternsRe(patterns) {\n const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n }\n _filter(basePath, entry, matcher, negativeRe) {\n if (this._isSkippedByDeep(basePath, entry.path)) {\n return false;\n }\n if (this._isSkippedSymbolicLink(entry)) {\n return false;\n }\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n return false;\n }\n return this._isSkippedByNegativePatterns(filepath, negativeRe);\n }\n _isSkippedByDeep(basePath, entryPath) {\n /**\n * Avoid unnecessary depth calculations when it doesn't matter.\n */\n if (this._settings.deep === Infinity) {\n return false;\n }\n return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n }\n _getEntryLevel(basePath, entryPath) {\n const entryPathDepth = entryPath.split('/').length;\n if (basePath === '') {\n return entryPathDepth;\n }\n const basePathDepth = basePath.split('/').length;\n return entryPathDepth - basePathDepth;\n }\n _isSkippedSymbolicLink(entry) {\n return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n }\n _isSkippedByPositivePatterns(entryPath, matcher) {\n return !this._settings.baseNameMatch && !matcher.match(entryPath);\n }\n _isSkippedByNegativePatterns(entryPath, patternsRe) {\n return !utils.pattern.matchAny(entryPath, patternsRe);\n }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this.index = new Map();\n }\n getFilter(positive, negative) {\n const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);\n const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);\n return (entry) => this._filter(entry, positiveRe, negativeRe);\n }\n _filter(entry, positiveRe, negativeRe) {\n if (this._settings.unique && this._isDuplicateEntry(entry)) {\n return false;\n }\n if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n return false;\n }\n if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) {\n return false;\n }\n const filepath = this._settings.baseNameMatch ? entry.name : entry.path;\n const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);\n if (this._settings.unique && isMatched) {\n this._createIndexRecord(entry);\n }\n return isMatched;\n }\n _isDuplicateEntry(entry) {\n return this.index.has(entry.path);\n }\n _createIndexRecord(entry) {\n this.index.set(entry.path, undefined);\n }\n _onlyFileFilter(entry) {\n return this._settings.onlyFiles && !entry.dirent.isFile();\n }\n _onlyDirectoryFilter(entry) {\n return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n }\n _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {\n if (!this._settings.absolute) {\n return false;\n }\n const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);\n return utils.pattern.matchAny(fullpath, patternsRe);\n }\n _isMatchToPatterns(entryPath, patternsRe) {\n const filepath = utils.path.removeLeadingDotSegment(entryPath);\n return utils.pattern.matchAny(filepath, patternsRe);\n }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n constructor(_settings) {\n this._settings = _settings;\n }\n getFilter() {\n return (error) => this._isNonFatalError(error);\n }\n _isNonFatalError(error) {\n return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n constructor(_settings) {\n this._settings = _settings;\n }\n getTransformer() {\n return (entry) => this._transform(entry);\n }\n _transform(entry) {\n let filepath = entry.path;\n if (this._settings.absolute) {\n filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n filepath = utils.path.unixify(filepath);\n }\n if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n filepath += '/';\n }\n if (!this._settings.objectMode) {\n return filepath;\n }\n return Object.assign(Object.assign({}, entry), { path: filepath });\n }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n constructor(_settings) {\n this._settings = _settings;\n this.errorFilter = new error_1.default(this._settings);\n this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n this.entryTransformer = new entry_2.default(this._settings);\n }\n _getRootDirectory(task) {\n return path.resolve(this._settings.cwd, task.base);\n }\n _getReaderOptions(task) {\n const basePath = task.base === '.' ? '' : task.base;\n return {\n basePath,\n pathSegmentSeparator: '/',\n concurrency: this._settings.concurrency,\n deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n errorFilter: this.errorFilter.getFilter(),\n followSymbolicLinks: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n stats: this._settings.stats,\n throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n transform: this.entryTransformer.getTransformer()\n };\n }\n _getMicromatchOptions() {\n return {\n dot: this._settings.dot,\n matchBase: this._settings.baseNameMatch,\n nobrace: !this._settings.braceExpansion,\n nocase: !this._settings.caseSensitiveMatch,\n noext: !this._settings.extglob,\n noglobstar: !this._settings.globstar,\n posix: true,\n strictSlashes: false\n };\n }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new stream_1.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = [];\n return new Promise((resolve, reject) => {\n const stream = this.api(root, task, options);\n stream.once('error', reject);\n stream.on('data', (entry) => entries.push(options.transform(entry)));\n stream.once('end', () => resolve(entries));\n });\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new stream_2.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const source = this.api(root, task, options);\n const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n source\n .once('error', (error) => destination.emit('error', error))\n .on('data', (entry) => destination.emit('data', options.transform(entry)))\n .once('end', () => destination.emit('end'));\n destination\n .once('close', () => source.destroy());\n return destination;\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkSync = fsWalk.walkSync;\n this._statSync = fsStat.statSync;\n }\n dynamic(root, options) {\n return this._walkSync(root, options);\n }\n static(patterns, options) {\n const entries = [];\n for (const pattern of patterns) {\n const filepath = this._getFullEntryPath(pattern);\n const entry = this._getEntry(filepath, pattern, options);\n if (entry === null || !options.entryFilter(entry)) {\n continue;\n }\n entries.push(entry);\n }\n return entries;\n }\n _getEntry(filepath, pattern, options) {\n try {\n const stats = this._getStat(filepath);\n return this._makeEntry(stats, pattern);\n }\n catch (error) {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n }\n }\n _getStat(filepath) {\n return this._statSync(filepath, this._fsStatSettings);\n }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new sync_1.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = this.api(root, task, options);\n return entries.map(options.transform);\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n lstatSync: fs.lstatSync,\n stat: fs.stat,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.absolute = this._getValue(this._options.absolute, false);\n this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n this.cwd = this._getValue(this._options.cwd, process.cwd());\n this.deep = this._getValue(this._options.deep, Infinity);\n this.dot = this._getValue(this._options.dot, false);\n this.extglob = this._getValue(this._options.extglob, true);\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n this.fs = this._getFileSystemMethods(this._options.fs);\n this.globstar = this._getValue(this._options.globstar, true);\n this.ignore = this._getValue(this._options.ignore, []);\n this.markDirectories = this._getValue(this._options.markDirectories, false);\n this.objectMode = this._getValue(this._options.objectMode, false);\n this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n this.stats = this._getValue(this._options.stats, false);\n this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n this.unique = this._getValue(this._options.unique, true);\n if (this.onlyDirectories) {\n this.onlyFiles = false;\n }\n if (this.stats) {\n this.objectMode = true;\n }\n }\n _getValue(option, value) {\n return option === undefined ? value : option;\n }\n _getFileSystemMethods(methods = {}) {\n return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, async_1.default, options);\n const result = await Promise.all(works);\n return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n function sync(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, sync_1.default, options);\n return utils.array.flatten(works);\n }\n FastGlob.sync = sync;\n function stream(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, stream_1.default, options);\n /**\n * The stream returned by the provider cannot work with an asynchronous iterator.\n * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n * This affects performance (+25%). I don't see best solution right now.\n */\n return utils.stream.merge(works);\n }\n FastGlob.stream = stream;\n function generateTasks(source, options) {\n assertPatternsInput(source);\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n return taskManager.generate(patterns, settings);\n }\n FastGlob.generateTasks = generateTasks;\n function isDynamicPattern(source, options) {\n assertPatternsInput(source);\n const settings = new settings_1.default(options);\n return utils.pattern.isDynamicPattern(source, settings);\n }\n FastGlob.isDynamicPattern = isDynamicPattern;\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escape(source);\n }\n FastGlob.escapePath = escapePath;\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n const tasks = taskManager.generate(patterns, settings);\n const provider = new _Provider(settings);\n return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n const source = [].concat(input);\n const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n if (!isValidSource) {\n throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n }\n}\nmodule.exports = FastGlob;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.lilconfigSync = exports.lilconfig = exports.defaultLoaders = void 0;\nconst path = require(\"path\");\nconst fs = require(\"fs\");\nconst os = require(\"os\");\nconst fsReadFileAsync = fs.promises.readFile;\nfunction getDefaultSearchPlaces(name) {\n return [\n 'package.json',\n `.${name}rc.json`,\n `.${name}rc.js`,\n `${name}.config.js`,\n `.${name}rc.cjs`,\n `${name}.config.cjs`,\n ];\n}\nfunction getSearchPaths(startDir, stopDir) {\n return startDir\n .split(path.sep)\n .reduceRight((acc, _, ind, arr) => {\n const currentPath = arr.slice(0, ind + 1).join(path.sep);\n if (!acc.passedStopDir)\n acc.searchPlaces.push(currentPath || path.sep);\n if (currentPath === stopDir)\n acc.passedStopDir = true;\n return acc;\n }, { searchPlaces: [], passedStopDir: false }).searchPlaces;\n}\nexports.defaultLoaders = Object.freeze({\n '.js': require,\n '.json': require,\n '.cjs': require,\n noExt(_, content) {\n return JSON.parse(content);\n },\n});\nfunction getExtDesc(ext) {\n return ext === 'noExt' ? 'files without extensions' : `extension \"${ext}\"`;\n}\nfunction getOptions(name, options = {}) {\n const conf = {\n stopDir: os.homedir(),\n searchPlaces: getDefaultSearchPlaces(name),\n ignoreEmptySearchPlaces: true,\n transform: (x) => x,\n packageProp: [name],\n ...options,\n loaders: { ...exports.defaultLoaders, ...options.loaders },\n };\n conf.searchPlaces.forEach(place => {\n const key = path.extname(place) || 'noExt';\n const loader = conf.loaders[key];\n if (!loader) {\n throw new Error(`No loader specified for ${getExtDesc(key)}, so searchPlaces item \"${place}\" is invalid`);\n }\n if (typeof loader !== 'function') {\n throw new Error(`loader for ${getExtDesc(key)} is not a function (type provided: \"${typeof loader}\"), so searchPlaces item \"${place}\" is invalid`);\n }\n });\n return conf;\n}\nfunction getPackageProp(props, obj) {\n if (typeof props === 'string' && props in obj)\n return obj[props];\n return ((Array.isArray(props) ? props : props.split('.')).reduce((acc, prop) => (acc === undefined ? acc : acc[prop]), obj) || null);\n}\nfunction getSearchItems(searchPlaces, searchPaths) {\n return searchPaths.reduce((acc, searchPath) => {\n searchPlaces.forEach(fileName => acc.push({\n fileName,\n filepath: path.join(searchPath, fileName),\n loaderKey: path.extname(fileName) || 'noExt',\n }));\n return acc;\n }, []);\n}\nfunction validateFilePath(filepath) {\n if (!filepath)\n throw new Error('load must pass a non-empty string');\n}\nfunction validateLoader(loader, ext) {\n if (!loader)\n throw new Error(`No loader specified for extension \"${ext}\"`);\n if (typeof loader !== 'function')\n throw new Error('loader is not a function');\n}\nfunction lilconfig(name, options) {\n const { ignoreEmptySearchPlaces, loaders, packageProp, searchPlaces, stopDir, transform, } = getOptions(name, options);\n return {\n async search(searchFrom = process.cwd()) {\n const searchPaths = getSearchPaths(searchFrom, stopDir);\n const result = {\n config: null,\n filepath: '',\n };\n const searchItems = getSearchItems(searchPlaces, searchPaths);\n for (const { fileName, filepath, loaderKey } of searchItems) {\n try {\n await fs.promises.access(filepath);\n }\n catch (_a) {\n continue;\n }\n const content = String(await fsReadFileAsync(filepath));\n const loader = loaders[loaderKey];\n if (fileName === 'package.json') {\n const pkg = loader(filepath, content);\n const maybeConfig = getPackageProp(packageProp, pkg);\n if (maybeConfig != null) {\n result.config = maybeConfig;\n result.filepath = filepath;\n break;\n }\n continue;\n }\n const isEmpty = content.trim() === '';\n if (isEmpty && ignoreEmptySearchPlaces)\n continue;\n if (isEmpty) {\n result.isEmpty = true;\n result.config = undefined;\n }\n else {\n validateLoader(loader, loaderKey);\n result.config = loader(filepath, content);\n }\n result.filepath = filepath;\n break;\n }\n if (result.filepath === '' && result.config === null)\n return transform(null);\n return transform(result);\n },\n async load(filepath) {\n validateFilePath(filepath);\n const { base, ext } = path.parse(filepath);\n const loaderKey = ext || 'noExt';\n const loader = loaders[loaderKey];\n validateLoader(loader, loaderKey);\n const content = String(await fsReadFileAsync(filepath));\n if (base === 'package.json') {\n const pkg = await loader(filepath, content);\n return transform({\n config: getPackageProp(packageProp, pkg),\n filepath,\n });\n }\n const result = {\n config: null,\n filepath,\n };\n const isEmpty = content.trim() === '';\n if (isEmpty && ignoreEmptySearchPlaces)\n return transform({\n config: undefined,\n filepath,\n isEmpty: true,\n });\n result.config = isEmpty\n ? undefined\n : await loader(filepath, content);\n return transform(isEmpty ? { ...result, isEmpty, config: undefined } : result);\n },\n };\n}\nexports.lilconfig = lilconfig;\nfunction lilconfigSync(name, options) {\n const { ignoreEmptySearchPlaces, loaders, packageProp, searchPlaces, stopDir, transform, } = getOptions(name, options);\n return {\n search(searchFrom = process.cwd()) {\n const searchPaths = getSearchPaths(searchFrom, stopDir);\n const result = {\n config: null,\n filepath: '',\n };\n const searchItems = getSearchItems(searchPlaces, searchPaths);\n for (const { fileName, filepath, loaderKey } of searchItems) {\n try {\n fs.accessSync(filepath);\n }\n catch (_a) {\n continue;\n }\n const loader = loaders[loaderKey];\n const content = String(fs.readFileSync(filepath));\n if (fileName === 'package.json') {\n const pkg = loader(filepath, content);\n const maybeConfig = getPackageProp(packageProp, pkg);\n if (maybeConfig != null) {\n result.config = maybeConfig;\n result.filepath = filepath;\n break;\n }\n continue;\n }\n const isEmpty = content.trim() === '';\n if (isEmpty && ignoreEmptySearchPlaces)\n continue;\n if (isEmpty) {\n result.isEmpty = true;\n result.config = undefined;\n }\n else {\n validateLoader(loader, loaderKey);\n result.config = loader(filepath, content);\n }\n result.filepath = filepath;\n break;\n }\n if (result.filepath === '' && result.config === null)\n return transform(null);\n return transform(result);\n },\n load(filepath) {\n validateFilePath(filepath);\n const { base, ext } = path.parse(filepath);\n const loaderKey = ext || 'noExt';\n const loader = loaders[loaderKey];\n validateLoader(loader, loaderKey);\n const content = String(fs.readFileSync(filepath));\n if (base === 'package.json') {\n const pkg = loader(filepath, content);\n return transform({\n config: getPackageProp(packageProp, pkg),\n filepath,\n });\n }\n const result = {\n config: null,\n filepath,\n };\n const isEmpty = content.trim() === '';\n if (isEmpty && ignoreEmptySearchPlaces)\n return transform({\n filepath,\n config: undefined,\n isEmpty: true,\n });\n result.config = isEmpty ? undefined : loader(filepath, content);\n return transform(isEmpty ? { ...result, isEmpty, config: undefined } : result);\n },\n };\n}\nexports.lilconfigSync = lilconfigSync;\n","'use strict';\n\nconst Char = {\n ANCHOR: '&',\n COMMENT: '#',\n TAG: '!',\n DIRECTIVES_END: '-',\n DOCUMENT_END: '.'\n};\nconst Type = {\n ALIAS: 'ALIAS',\n BLANK_LINE: 'BLANK_LINE',\n BLOCK_FOLDED: 'BLOCK_FOLDED',\n BLOCK_LITERAL: 'BLOCK_LITERAL',\n COMMENT: 'COMMENT',\n DIRECTIVE: 'DIRECTIVE',\n DOCUMENT: 'DOCUMENT',\n FLOW_MAP: 'FLOW_MAP',\n FLOW_SEQ: 'FLOW_SEQ',\n MAP: 'MAP',\n MAP_KEY: 'MAP_KEY',\n MAP_VALUE: 'MAP_VALUE',\n PLAIN: 'PLAIN',\n QUOTE_DOUBLE: 'QUOTE_DOUBLE',\n QUOTE_SINGLE: 'QUOTE_SINGLE',\n SEQ: 'SEQ',\n SEQ_ITEM: 'SEQ_ITEM'\n};\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nconst defaultTags = {\n MAP: 'tag:yaml.org,2002:map',\n SEQ: 'tag:yaml.org,2002:seq',\n STR: 'tag:yaml.org,2002:str'\n};\n\nfunction findLineStarts(src) {\n const ls = [0];\n let offset = src.indexOf('\\n');\n\n while (offset !== -1) {\n offset += 1;\n ls.push(offset);\n offset = src.indexOf('\\n', offset);\n }\n\n return ls;\n}\n\nfunction getSrcInfo(cst) {\n let lineStarts, src;\n\n if (typeof cst === 'string') {\n lineStarts = findLineStarts(cst);\n src = cst;\n } else {\n if (Array.isArray(cst)) cst = cst[0];\n\n if (cst && cst.context) {\n if (!cst.lineStarts) cst.lineStarts = findLineStarts(cst.context.src);\n lineStarts = cst.lineStarts;\n src = cst.context.src;\n }\n }\n\n return {\n lineStarts,\n src\n };\n}\n/**\n * @typedef {Object} LinePos - One-indexed position in the source\n * @property {number} line\n * @property {number} col\n */\n\n/**\n * Determine the line/col position matching a character offset.\n *\n * Accepts a source string or a CST document as the second parameter. With\n * the latter, starting indices for lines are cached in the document as\n * `lineStarts: number[]`.\n *\n * Returns a one-indexed `{ line, col }` location if found, or\n * `undefined` otherwise.\n *\n * @param {number} offset\n * @param {string|Document|Document[]} cst\n * @returns {?LinePos}\n */\n\n\nfunction getLinePos(offset, cst) {\n if (typeof offset !== 'number' || offset < 0) return null;\n const {\n lineStarts,\n src\n } = getSrcInfo(cst);\n if (!lineStarts || !src || offset > src.length) return null;\n\n for (let i = 0; i < lineStarts.length; ++i) {\n const start = lineStarts[i];\n\n if (offset < start) {\n return {\n line: i,\n col: offset - lineStarts[i - 1] + 1\n };\n }\n\n if (offset === start) return {\n line: i + 1,\n col: 1\n };\n }\n\n const line = lineStarts.length;\n return {\n line,\n col: offset - lineStarts[line - 1] + 1\n };\n}\n/**\n * Get a specified line from the source.\n *\n * Accepts a source string or a CST document as the second parameter. With\n * the latter, starting indices for lines are cached in the document as\n * `lineStarts: number[]`.\n *\n * Returns the line as a string if found, or `null` otherwise.\n *\n * @param {number} line One-indexed line number\n * @param {string|Document|Document[]} cst\n * @returns {?string}\n */\n\nfunction getLine(line, cst) {\n const {\n lineStarts,\n src\n } = getSrcInfo(cst);\n if (!lineStarts || !(line >= 1) || line > lineStarts.length) return null;\n const start = lineStarts[line - 1];\n let end = lineStarts[line]; // undefined for last line; that's ok for slice()\n\n while (end && end > start && src[end - 1] === '\\n') --end;\n\n return src.slice(start, end);\n}\n/**\n * Pretty-print the starting line from the source indicated by the range `pos`\n *\n * Trims output to `maxWidth` chars while keeping the starting column visible,\n * using `…` at either end to indicate dropped characters.\n *\n * Returns a two-line string (or `null`) with `\\n` as separator; the second line\n * will hold appropriately indented `^` marks indicating the column range.\n *\n * @param {Object} pos\n * @param {LinePos} pos.start\n * @param {LinePos} [pos.end]\n * @param {string|Document|Document[]*} cst\n * @param {number} [maxWidth=80]\n * @returns {?string}\n */\n\nfunction getPrettyContext({\n start,\n end\n}, cst, maxWidth = 80) {\n let src = getLine(start.line, cst);\n if (!src) return null;\n let {\n col\n } = start;\n\n if (src.length > maxWidth) {\n if (col <= maxWidth - 10) {\n src = src.substr(0, maxWidth - 1) + '…';\n } else {\n const halfWidth = Math.round(maxWidth / 2);\n if (src.length > col + halfWidth) src = src.substr(0, col + halfWidth - 1) + '…';\n col -= src.length - maxWidth;\n src = '…' + src.substr(1 - maxWidth);\n }\n }\n\n let errLen = 1;\n let errEnd = '';\n\n if (end) {\n if (end.line === start.line && col + (end.col - start.col) <= maxWidth + 1) {\n errLen = end.col - start.col;\n } else {\n errLen = Math.min(src.length + 1, maxWidth) - col;\n errEnd = '…';\n }\n }\n\n const offset = col > 1 ? ' '.repeat(col - 1) : '';\n const err = '^'.repeat(errLen);\n return `${src}\\n${offset}${err}${errEnd}`;\n}\n\nclass Range {\n static copy(orig) {\n return new Range(orig.start, orig.end);\n }\n\n constructor(start, end) {\n this.start = start;\n this.end = end || start;\n }\n\n isEmpty() {\n return typeof this.start !== 'number' || !this.end || this.end <= this.start;\n }\n /**\n * Set `origStart` and `origEnd` to point to the original source range for\n * this node, which may differ due to dropped CR characters.\n *\n * @param {number[]} cr - Positions of dropped CR characters\n * @param {number} offset - Starting index of `cr` from the last call\n * @returns {number} - The next offset, matching the one found for `origStart`\n */\n\n\n setOrigRange(cr, offset) {\n const {\n start,\n end\n } = this;\n\n if (cr.length === 0 || end <= cr[0]) {\n this.origStart = start;\n this.origEnd = end;\n return offset;\n }\n\n let i = offset;\n\n while (i < cr.length) {\n if (cr[i] > start) break;else ++i;\n }\n\n this.origStart = start + i;\n const nextOffset = i;\n\n while (i < cr.length) {\n // if end was at \\n, it should now be at \\r\n if (cr[i] >= end) break;else ++i;\n }\n\n this.origEnd = end + i;\n return nextOffset;\n }\n\n}\n\n/** Root class of all nodes */\n\nclass Node {\n static addStringTerminator(src, offset, str) {\n if (str[str.length - 1] === '\\n') return str;\n const next = Node.endOfWhiteSpace(src, offset);\n return next >= src.length || src[next] === '\\n' ? str + '\\n' : str;\n } // ^(---|...)\n\n\n static atDocumentBoundary(src, offset, sep) {\n const ch0 = src[offset];\n if (!ch0) return true;\n const prev = src[offset - 1];\n if (prev && prev !== '\\n') return false;\n\n if (sep) {\n if (ch0 !== sep) return false;\n } else {\n if (ch0 !== Char.DIRECTIVES_END && ch0 !== Char.DOCUMENT_END) return false;\n }\n\n const ch1 = src[offset + 1];\n const ch2 = src[offset + 2];\n if (ch1 !== ch0 || ch2 !== ch0) return false;\n const ch3 = src[offset + 3];\n return !ch3 || ch3 === '\\n' || ch3 === '\\t' || ch3 === ' ';\n }\n\n static endOfIdentifier(src, offset) {\n let ch = src[offset];\n const isVerbatim = ch === '<';\n const notOk = isVerbatim ? ['\\n', '\\t', ' ', '>'] : ['\\n', '\\t', ' ', '[', ']', '{', '}', ','];\n\n while (ch && notOk.indexOf(ch) === -1) ch = src[offset += 1];\n\n if (isVerbatim && ch === '>') offset += 1;\n return offset;\n }\n\n static endOfIndent(src, offset) {\n let ch = src[offset];\n\n while (ch === ' ') ch = src[offset += 1];\n\n return offset;\n }\n\n static endOfLine(src, offset) {\n let ch = src[offset];\n\n while (ch && ch !== '\\n') ch = src[offset += 1];\n\n return offset;\n }\n\n static endOfWhiteSpace(src, offset) {\n let ch = src[offset];\n\n while (ch === '\\t' || ch === ' ') ch = src[offset += 1];\n\n return offset;\n }\n\n static startOfLine(src, offset) {\n let ch = src[offset - 1];\n if (ch === '\\n') return offset;\n\n while (ch && ch !== '\\n') ch = src[offset -= 1];\n\n return offset + 1;\n }\n /**\n * End of indentation, or null if the line's indent level is not more\n * than `indent`\n *\n * @param {string} src\n * @param {number} indent\n * @param {number} lineStart\n * @returns {?number}\n */\n\n\n static endOfBlockIndent(src, indent, lineStart) {\n const inEnd = Node.endOfIndent(src, lineStart);\n\n if (inEnd > lineStart + indent) {\n return inEnd;\n } else {\n const wsEnd = Node.endOfWhiteSpace(src, inEnd);\n const ch = src[wsEnd];\n if (!ch || ch === '\\n') return wsEnd;\n }\n\n return null;\n }\n\n static atBlank(src, offset, endAsBlank) {\n const ch = src[offset];\n return ch === '\\n' || ch === '\\t' || ch === ' ' || endAsBlank && !ch;\n }\n\n static nextNodeIsIndented(ch, indentDiff, indicatorAsIndent) {\n if (!ch || indentDiff < 0) return false;\n if (indentDiff > 0) return true;\n return indicatorAsIndent && ch === '-';\n } // should be at line or string end, or at next non-whitespace char\n\n\n static normalizeOffset(src, offset) {\n const ch = src[offset];\n return !ch ? offset : ch !== '\\n' && src[offset - 1] === '\\n' ? offset - 1 : Node.endOfWhiteSpace(src, offset);\n } // fold single newline into space, multiple newlines to N - 1 newlines\n // presumes src[offset] === '\\n'\n\n\n static foldNewline(src, offset, indent) {\n let inCount = 0;\n let error = false;\n let fold = '';\n let ch = src[offset + 1];\n\n while (ch === ' ' || ch === '\\t' || ch === '\\n') {\n switch (ch) {\n case '\\n':\n inCount = 0;\n offset += 1;\n fold += '\\n';\n break;\n\n case '\\t':\n if (inCount <= indent) error = true;\n offset = Node.endOfWhiteSpace(src, offset + 2) - 1;\n break;\n\n case ' ':\n inCount += 1;\n offset += 1;\n break;\n }\n\n ch = src[offset + 1];\n }\n\n if (!fold) fold = ' ';\n if (ch && inCount <= indent) error = true;\n return {\n fold,\n offset,\n error\n };\n }\n\n constructor(type, props, context) {\n Object.defineProperty(this, 'context', {\n value: context || null,\n writable: true\n });\n this.error = null;\n this.range = null;\n this.valueRange = null;\n this.props = props || [];\n this.type = type;\n this.value = null;\n }\n\n getPropValue(idx, key, skipKey) {\n if (!this.context) return null;\n const {\n src\n } = this.context;\n const prop = this.props[idx];\n return prop && src[prop.start] === key ? src.slice(prop.start + (skipKey ? 1 : 0), prop.end) : null;\n }\n\n get anchor() {\n for (let i = 0; i < this.props.length; ++i) {\n const anchor = this.getPropValue(i, Char.ANCHOR, true);\n if (anchor != null) return anchor;\n }\n\n return null;\n }\n\n get comment() {\n const comments = [];\n\n for (let i = 0; i < this.props.length; ++i) {\n const comment = this.getPropValue(i, Char.COMMENT, true);\n if (comment != null) comments.push(comment);\n }\n\n return comments.length > 0 ? comments.join('\\n') : null;\n }\n\n commentHasRequiredWhitespace(start) {\n const {\n src\n } = this.context;\n if (this.header && start === this.header.end) return false;\n if (!this.valueRange) return false;\n const {\n end\n } = this.valueRange;\n return start !== end || Node.atBlank(src, end - 1);\n }\n\n get hasComment() {\n if (this.context) {\n const {\n src\n } = this.context;\n\n for (let i = 0; i < this.props.length; ++i) {\n if (src[this.props[i].start] === Char.COMMENT) return true;\n }\n }\n\n return false;\n }\n\n get hasProps() {\n if (this.context) {\n const {\n src\n } = this.context;\n\n for (let i = 0; i < this.props.length; ++i) {\n if (src[this.props[i].start] !== Char.COMMENT) return true;\n }\n }\n\n return false;\n }\n\n get includesTrailingLines() {\n return false;\n }\n\n get jsonLike() {\n const jsonLikeTypes = [Type.FLOW_MAP, Type.FLOW_SEQ, Type.QUOTE_DOUBLE, Type.QUOTE_SINGLE];\n return jsonLikeTypes.indexOf(this.type) !== -1;\n }\n\n get rangeAsLinePos() {\n if (!this.range || !this.context) return undefined;\n const start = getLinePos(this.range.start, this.context.root);\n if (!start) return undefined;\n const end = getLinePos(this.range.end, this.context.root);\n return {\n start,\n end\n };\n }\n\n get rawValue() {\n if (!this.valueRange || !this.context) return null;\n const {\n start,\n end\n } = this.valueRange;\n return this.context.src.slice(start, end);\n }\n\n get tag() {\n for (let i = 0; i < this.props.length; ++i) {\n const tag = this.getPropValue(i, Char.TAG, false);\n\n if (tag != null) {\n if (tag[1] === '<') {\n return {\n verbatim: tag.slice(2, -1)\n };\n } else {\n // eslint-disable-next-line no-unused-vars\n const [_, handle, suffix] = tag.match(/^(.*!)([^!]*)$/);\n return {\n handle,\n suffix\n };\n }\n }\n }\n\n return null;\n }\n\n get valueRangeContainsNewline() {\n if (!this.valueRange || !this.context) return false;\n const {\n start,\n end\n } = this.valueRange;\n const {\n src\n } = this.context;\n\n for (let i = start; i < end; ++i) {\n if (src[i] === '\\n') return true;\n }\n\n return false;\n }\n\n parseComment(start) {\n const {\n src\n } = this.context;\n\n if (src[start] === Char.COMMENT) {\n const end = Node.endOfLine(src, start + 1);\n const commentRange = new Range(start, end);\n this.props.push(commentRange);\n return end;\n }\n\n return start;\n }\n /**\n * Populates the `origStart` and `origEnd` values of all ranges for this\n * node. Extended by child classes to handle descendant nodes.\n *\n * @param {number[]} cr - Positions of dropped CR characters\n * @param {number} offset - Starting index of `cr` from the last call\n * @returns {number} - The next offset, matching the one found for `origStart`\n */\n\n\n setOrigRanges(cr, offset) {\n if (this.range) offset = this.range.setOrigRange(cr, offset);\n if (this.valueRange) this.valueRange.setOrigRange(cr, offset);\n this.props.forEach(prop => prop.setOrigRange(cr, offset));\n return offset;\n }\n\n toString() {\n const {\n context: {\n src\n },\n range,\n value\n } = this;\n if (value != null) return value;\n const str = src.slice(range.start, range.end);\n return Node.addStringTerminator(src, range.end, str);\n }\n\n}\n\nclass YAMLError extends Error {\n constructor(name, source, message) {\n if (!message || !(source instanceof Node)) throw new Error(`Invalid arguments for new ${name}`);\n super();\n this.name = name;\n this.message = message;\n this.source = source;\n }\n\n makePretty() {\n if (!this.source) return;\n this.nodeType = this.source.type;\n const cst = this.source.context && this.source.context.root;\n\n if (typeof this.offset === 'number') {\n this.range = new Range(this.offset, this.offset + 1);\n const start = cst && getLinePos(this.offset, cst);\n\n if (start) {\n const end = {\n line: start.line,\n col: start.col + 1\n };\n this.linePos = {\n start,\n end\n };\n }\n\n delete this.offset;\n } else {\n this.range = this.source.range;\n this.linePos = this.source.rangeAsLinePos;\n }\n\n if (this.linePos) {\n const {\n line,\n col\n } = this.linePos.start;\n this.message += ` at line ${line}, column ${col}`;\n const ctx = cst && getPrettyContext(this.linePos, cst);\n if (ctx) this.message += `:\\n\\n${ctx}\\n`;\n }\n\n delete this.source;\n }\n\n}\nclass YAMLReferenceError extends YAMLError {\n constructor(source, message) {\n super('YAMLReferenceError', source, message);\n }\n\n}\nclass YAMLSemanticError extends YAMLError {\n constructor(source, message) {\n super('YAMLSemanticError', source, message);\n }\n\n}\nclass YAMLSyntaxError extends YAMLError {\n constructor(source, message) {\n super('YAMLSyntaxError', source, message);\n }\n\n}\nclass YAMLWarning extends YAMLError {\n constructor(source, message) {\n super('YAMLWarning', source, message);\n }\n\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nclass PlainValue extends Node {\n static endOfLine(src, start, inFlow) {\n let ch = src[start];\n let offset = start;\n\n while (ch && ch !== '\\n') {\n if (inFlow && (ch === '[' || ch === ']' || ch === '{' || ch === '}' || ch === ',')) break;\n const next = src[offset + 1];\n if (ch === ':' && (!next || next === '\\n' || next === '\\t' || next === ' ' || inFlow && next === ',')) break;\n if ((ch === ' ' || ch === '\\t') && next === '#') break;\n offset += 1;\n ch = next;\n }\n\n return offset;\n }\n\n get strValue() {\n if (!this.valueRange || !this.context) return null;\n let {\n start,\n end\n } = this.valueRange;\n const {\n src\n } = this.context;\n let ch = src[end - 1];\n\n while (start < end && (ch === '\\n' || ch === '\\t' || ch === ' ')) ch = src[--end - 1];\n\n let str = '';\n\n for (let i = start; i < end; ++i) {\n const ch = src[i];\n\n if (ch === '\\n') {\n const {\n fold,\n offset\n } = Node.foldNewline(src, i, -1);\n str += fold;\n i = offset;\n } else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = src[i + 1];\n\n while (i < end && (next === ' ' || next === '\\t')) {\n i += 1;\n next = src[i + 1];\n }\n\n if (next !== '\\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch;\n } else {\n str += ch;\n }\n }\n\n const ch0 = src[start];\n\n switch (ch0) {\n case '\\t':\n {\n const msg = 'Plain value cannot start with a tab character';\n const errors = [new YAMLSemanticError(this, msg)];\n return {\n errors,\n str\n };\n }\n\n case '@':\n case '`':\n {\n const msg = `Plain value cannot start with reserved character ${ch0}`;\n const errors = [new YAMLSemanticError(this, msg)];\n return {\n errors,\n str\n };\n }\n\n default:\n return str;\n }\n }\n\n parseBlockValue(start) {\n const {\n indent,\n inFlow,\n src\n } = this.context;\n let offset = start;\n let valueEnd = start;\n\n for (let ch = src[offset]; ch === '\\n'; ch = src[offset]) {\n if (Node.atDocumentBoundary(src, offset + 1)) break;\n const end = Node.endOfBlockIndent(src, indent, offset + 1);\n if (end === null || src[end] === '#') break;\n\n if (src[end] === '\\n') {\n offset = end;\n } else {\n valueEnd = PlainValue.endOfLine(src, end, inFlow);\n offset = valueEnd;\n }\n }\n\n if (this.valueRange.isEmpty()) this.valueRange.start = start;\n this.valueRange.end = valueEnd;\n return valueEnd;\n }\n /**\n * Parses a plain value from the source\n *\n * Accepted forms are:\n * ```\n * #comment\n *\n * first line\n *\n * first line #comment\n *\n * first line\n * block\n * lines\n *\n * #comment\n * block\n * lines\n * ```\n * where block lines are empty or have an indent level greater than `indent`.\n *\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this scalar, may be `\\n`\n */\n\n\n parse(context, start) {\n this.context = context;\n const {\n inFlow,\n src\n } = context;\n let offset = start;\n const ch = src[offset];\n\n if (ch && ch !== '#' && ch !== '\\n') {\n offset = PlainValue.endOfLine(src, start, inFlow);\n }\n\n this.valueRange = new Range(start, offset);\n offset = Node.endOfWhiteSpace(src, offset);\n offset = this.parseComment(offset);\n\n if (!this.hasComment || this.valueRange.isEmpty()) {\n offset = this.parseBlockValue(offset);\n }\n\n return offset;\n }\n\n}\n\nexports.Char = Char;\nexports.Node = Node;\nexports.PlainValue = PlainValue;\nexports.Range = Range;\nexports.Type = Type;\nexports.YAMLError = YAMLError;\nexports.YAMLReferenceError = YAMLReferenceError;\nexports.YAMLSemanticError = YAMLSemanticError;\nexports.YAMLSyntaxError = YAMLSyntaxError;\nexports.YAMLWarning = YAMLWarning;\nexports._defineProperty = _defineProperty;\nexports.defaultTagPrefix = defaultTagPrefix;\nexports.defaultTags = defaultTags;\n","'use strict';\n\nvar PlainValue = require('./PlainValue-ec8e588e.js');\n\nclass BlankLine extends PlainValue.Node {\n constructor() {\n super(PlainValue.Type.BLANK_LINE);\n }\n /* istanbul ignore next */\n\n\n get includesTrailingLines() {\n // This is never called from anywhere, but if it were,\n // this is the value it should return.\n return true;\n }\n /**\n * Parses a blank line from the source\n *\n * @param {ParseContext} context\n * @param {number} start - Index of first \\n character\n * @returns {number} - Index of the character after this\n */\n\n\n parse(context, start) {\n this.context = context;\n this.range = new PlainValue.Range(start, start + 1);\n return start + 1;\n }\n\n}\n\nclass CollectionItem extends PlainValue.Node {\n constructor(type, props) {\n super(type, props);\n this.node = null;\n }\n\n get includesTrailingLines() {\n return !!this.node && this.node.includesTrailingLines;\n }\n /**\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this\n */\n\n\n parse(context, start) {\n this.context = context;\n const {\n parseNode,\n src\n } = context;\n let {\n atLineStart,\n lineStart\n } = context;\n if (!atLineStart && this.type === PlainValue.Type.SEQ_ITEM) this.error = new PlainValue.YAMLSemanticError(this, 'Sequence items must not have preceding content on the same line');\n const indent = atLineStart ? start - lineStart : context.indent;\n let offset = PlainValue.Node.endOfWhiteSpace(src, start + 1);\n let ch = src[offset];\n const inlineComment = ch === '#';\n const comments = [];\n let blankLine = null;\n\n while (ch === '\\n' || ch === '#') {\n if (ch === '#') {\n const end = PlainValue.Node.endOfLine(src, offset + 1);\n comments.push(new PlainValue.Range(offset, end));\n offset = end;\n } else {\n atLineStart = true;\n lineStart = offset + 1;\n const wsEnd = PlainValue.Node.endOfWhiteSpace(src, lineStart);\n\n if (src[wsEnd] === '\\n' && comments.length === 0) {\n blankLine = new BlankLine();\n lineStart = blankLine.parse({\n src\n }, lineStart);\n }\n\n offset = PlainValue.Node.endOfIndent(src, lineStart);\n }\n\n ch = src[offset];\n }\n\n if (PlainValue.Node.nextNodeIsIndented(ch, offset - (lineStart + indent), this.type !== PlainValue.Type.SEQ_ITEM)) {\n this.node = parseNode({\n atLineStart,\n inCollection: false,\n indent,\n lineStart,\n parent: this\n }, offset);\n } else if (ch && lineStart > start + 1) {\n offset = lineStart - 1;\n }\n\n if (this.node) {\n if (blankLine) {\n // Only blank lines preceding non-empty nodes are captured. Note that\n // this means that collection item range start indices do not always\n // increase monotonically. -- eemeli/yaml#126\n const items = context.parent.items || context.parent.contents;\n if (items) items.push(blankLine);\n }\n\n if (comments.length) Array.prototype.push.apply(this.props, comments);\n offset = this.node.range.end;\n } else {\n if (inlineComment) {\n const c = comments[0];\n this.props.push(c);\n offset = c.end;\n } else {\n offset = PlainValue.Node.endOfLine(src, start + 1);\n }\n }\n\n const end = this.node ? this.node.valueRange.end : offset;\n this.valueRange = new PlainValue.Range(start, end);\n return offset;\n }\n\n setOrigRanges(cr, offset) {\n offset = super.setOrigRanges(cr, offset);\n return this.node ? this.node.setOrigRanges(cr, offset) : offset;\n }\n\n toString() {\n const {\n context: {\n src\n },\n node,\n range,\n value\n } = this;\n if (value != null) return value;\n const str = node ? src.slice(range.start, node.range.start) + String(node) : src.slice(range.start, range.end);\n return PlainValue.Node.addStringTerminator(src, range.end, str);\n }\n\n}\n\nclass Comment extends PlainValue.Node {\n constructor() {\n super(PlainValue.Type.COMMENT);\n }\n /**\n * Parses a comment line from the source\n *\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this scalar\n */\n\n\n parse(context, start) {\n this.context = context;\n const offset = this.parseComment(start);\n this.range = new PlainValue.Range(start, offset);\n return offset;\n }\n\n}\n\nfunction grabCollectionEndComments(node) {\n let cnode = node;\n\n while (cnode instanceof CollectionItem) cnode = cnode.node;\n\n if (!(cnode instanceof Collection)) return null;\n const len = cnode.items.length;\n let ci = -1;\n\n for (let i = len - 1; i >= 0; --i) {\n const n = cnode.items[i];\n\n if (n.type === PlainValue.Type.COMMENT) {\n // Keep sufficiently indented comments with preceding node\n const {\n indent,\n lineStart\n } = n.context;\n if (indent > 0 && n.range.start >= lineStart + indent) break;\n ci = i;\n } else if (n.type === PlainValue.Type.BLANK_LINE) ci = i;else break;\n }\n\n if (ci === -1) return null;\n const ca = cnode.items.splice(ci, len - ci);\n const prevEnd = ca[0].range.start;\n\n while (true) {\n cnode.range.end = prevEnd;\n if (cnode.valueRange && cnode.valueRange.end > prevEnd) cnode.valueRange.end = prevEnd;\n if (cnode === node) break;\n cnode = cnode.context.parent;\n }\n\n return ca;\n}\nclass Collection extends PlainValue.Node {\n static nextContentHasIndent(src, offset, indent) {\n const lineStart = PlainValue.Node.endOfLine(src, offset) + 1;\n offset = PlainValue.Node.endOfWhiteSpace(src, lineStart);\n const ch = src[offset];\n if (!ch) return false;\n if (offset >= lineStart + indent) return true;\n if (ch !== '#' && ch !== '\\n') return false;\n return Collection.nextContentHasIndent(src, offset, indent);\n }\n\n constructor(firstItem) {\n super(firstItem.type === PlainValue.Type.SEQ_ITEM ? PlainValue.Type.SEQ : PlainValue.Type.MAP);\n\n for (let i = firstItem.props.length - 1; i >= 0; --i) {\n if (firstItem.props[i].start < firstItem.context.lineStart) {\n // props on previous line are assumed by the collection\n this.props = firstItem.props.slice(0, i + 1);\n firstItem.props = firstItem.props.slice(i + 1);\n const itemRange = firstItem.props[0] || firstItem.valueRange;\n firstItem.range.start = itemRange.start;\n break;\n }\n }\n\n this.items = [firstItem];\n const ec = grabCollectionEndComments(firstItem);\n if (ec) Array.prototype.push.apply(this.items, ec);\n }\n\n get includesTrailingLines() {\n return this.items.length > 0;\n }\n /**\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this\n */\n\n\n parse(context, start) {\n this.context = context;\n const {\n parseNode,\n src\n } = context; // It's easier to recalculate lineStart here rather than tracking down the\n // last context from which to read it -- eemeli/yaml#2\n\n let lineStart = PlainValue.Node.startOfLine(src, start);\n const firstItem = this.items[0]; // First-item context needs to be correct for later comment handling\n // -- eemeli/yaml#17\n\n firstItem.context.parent = this;\n this.valueRange = PlainValue.Range.copy(firstItem.valueRange);\n const indent = firstItem.range.start - firstItem.context.lineStart;\n let offset = start;\n offset = PlainValue.Node.normalizeOffset(src, offset);\n let ch = src[offset];\n let atLineStart = PlainValue.Node.endOfWhiteSpace(src, lineStart) === offset;\n let prevIncludesTrailingLines = false;\n\n while (ch) {\n while (ch === '\\n' || ch === '#') {\n if (atLineStart && ch === '\\n' && !prevIncludesTrailingLines) {\n const blankLine = new BlankLine();\n offset = blankLine.parse({\n src\n }, offset);\n this.valueRange.end = offset;\n\n if (offset >= src.length) {\n ch = null;\n break;\n }\n\n this.items.push(blankLine);\n offset -= 1; // blankLine.parse() consumes terminal newline\n } else if (ch === '#') {\n if (offset < lineStart + indent && !Collection.nextContentHasIndent(src, offset, indent)) {\n return offset;\n }\n\n const comment = new Comment();\n offset = comment.parse({\n indent,\n lineStart,\n src\n }, offset);\n this.items.push(comment);\n this.valueRange.end = offset;\n\n if (offset >= src.length) {\n ch = null;\n break;\n }\n }\n\n lineStart = offset + 1;\n offset = PlainValue.Node.endOfIndent(src, lineStart);\n\n if (PlainValue.Node.atBlank(src, offset)) {\n const wsEnd = PlainValue.Node.endOfWhiteSpace(src, offset);\n const next = src[wsEnd];\n\n if (!next || next === '\\n' || next === '#') {\n offset = wsEnd;\n }\n }\n\n ch = src[offset];\n atLineStart = true;\n }\n\n if (!ch) {\n break;\n }\n\n if (offset !== lineStart + indent && (atLineStart || ch !== ':')) {\n if (offset < lineStart + indent) {\n if (lineStart > start) offset = lineStart;\n break;\n } else if (!this.error) {\n const msg = 'All collection items must start at the same column';\n this.error = new PlainValue.YAMLSyntaxError(this, msg);\n }\n }\n\n if (firstItem.type === PlainValue.Type.SEQ_ITEM) {\n if (ch !== '-') {\n if (lineStart > start) offset = lineStart;\n break;\n }\n } else if (ch === '-' && !this.error) {\n // map key may start with -, as long as it's followed by a non-whitespace char\n const next = src[offset + 1];\n\n if (!next || next === '\\n' || next === '\\t' || next === ' ') {\n const msg = 'A collection cannot be both a mapping and a sequence';\n this.error = new PlainValue.YAMLSyntaxError(this, msg);\n }\n }\n\n const node = parseNode({\n atLineStart,\n inCollection: true,\n indent,\n lineStart,\n parent: this\n }, offset);\n if (!node) return offset; // at next document start\n\n this.items.push(node);\n this.valueRange.end = node.valueRange.end;\n offset = PlainValue.Node.normalizeOffset(src, node.range.end);\n ch = src[offset];\n atLineStart = false;\n prevIncludesTrailingLines = node.includesTrailingLines; // Need to reset lineStart and atLineStart here if preceding node's range\n // has advanced to check the current line's indentation level\n // -- eemeli/yaml#10 & eemeli/yaml#38\n\n if (ch) {\n let ls = offset - 1;\n let prev = src[ls];\n\n while (prev === ' ' || prev === '\\t') prev = src[--ls];\n\n if (prev === '\\n') {\n lineStart = ls + 1;\n atLineStart = true;\n }\n }\n\n const ec = grabCollectionEndComments(node);\n if (ec) Array.prototype.push.apply(this.items, ec);\n }\n\n return offset;\n }\n\n setOrigRanges(cr, offset) {\n offset = super.setOrigRanges(cr, offset);\n this.items.forEach(node => {\n offset = node.setOrigRanges(cr, offset);\n });\n return offset;\n }\n\n toString() {\n const {\n context: {\n src\n },\n items,\n range,\n value\n } = this;\n if (value != null) return value;\n let str = src.slice(range.start, items[0].range.start) + String(items[0]);\n\n for (let i = 1; i < items.length; ++i) {\n const item = items[i];\n const {\n atLineStart,\n indent\n } = item.context;\n if (atLineStart) for (let i = 0; i < indent; ++i) str += ' ';\n str += String(item);\n }\n\n return PlainValue.Node.addStringTerminator(src, range.end, str);\n }\n\n}\n\nclass Directive extends PlainValue.Node {\n constructor() {\n super(PlainValue.Type.DIRECTIVE);\n this.name = null;\n }\n\n get parameters() {\n const raw = this.rawValue;\n return raw ? raw.trim().split(/[ \\t]+/) : [];\n }\n\n parseName(start) {\n const {\n src\n } = this.context;\n let offset = start;\n let ch = src[offset];\n\n while (ch && ch !== '\\n' && ch !== '\\t' && ch !== ' ') ch = src[offset += 1];\n\n this.name = src.slice(start, offset);\n return offset;\n }\n\n parseParameters(start) {\n const {\n src\n } = this.context;\n let offset = start;\n let ch = src[offset];\n\n while (ch && ch !== '\\n' && ch !== '#') ch = src[offset += 1];\n\n this.valueRange = new PlainValue.Range(start, offset);\n return offset;\n }\n\n parse(context, start) {\n this.context = context;\n let offset = this.parseName(start + 1);\n offset = this.parseParameters(offset);\n offset = this.parseComment(offset);\n this.range = new PlainValue.Range(start, offset);\n return offset;\n }\n\n}\n\nclass Document extends PlainValue.Node {\n static startCommentOrEndBlankLine(src, start) {\n const offset = PlainValue.Node.endOfWhiteSpace(src, start);\n const ch = src[offset];\n return ch === '#' || ch === '\\n' ? offset : start;\n }\n\n constructor() {\n super(PlainValue.Type.DOCUMENT);\n this.directives = null;\n this.contents = null;\n this.directivesEndMarker = null;\n this.documentEndMarker = null;\n }\n\n parseDirectives(start) {\n const {\n src\n } = this.context;\n this.directives = [];\n let atLineStart = true;\n let hasDirectives = false;\n let offset = start;\n\n while (!PlainValue.Node.atDocumentBoundary(src, offset, PlainValue.Char.DIRECTIVES_END)) {\n offset = Document.startCommentOrEndBlankLine(src, offset);\n\n switch (src[offset]) {\n case '\\n':\n if (atLineStart) {\n const blankLine = new BlankLine();\n offset = blankLine.parse({\n src\n }, offset);\n\n if (offset < src.length) {\n this.directives.push(blankLine);\n }\n } else {\n offset += 1;\n atLineStart = true;\n }\n\n break;\n\n case '#':\n {\n const comment = new Comment();\n offset = comment.parse({\n src\n }, offset);\n this.directives.push(comment);\n atLineStart = false;\n }\n break;\n\n case '%':\n {\n const directive = new Directive();\n offset = directive.parse({\n parent: this,\n src\n }, offset);\n this.directives.push(directive);\n hasDirectives = true;\n atLineStart = false;\n }\n break;\n\n default:\n if (hasDirectives) {\n this.error = new PlainValue.YAMLSemanticError(this, 'Missing directives-end indicator line');\n } else if (this.directives.length > 0) {\n this.contents = this.directives;\n this.directives = [];\n }\n\n return offset;\n }\n }\n\n if (src[offset]) {\n this.directivesEndMarker = new PlainValue.Range(offset, offset + 3);\n return offset + 3;\n }\n\n if (hasDirectives) {\n this.error = new PlainValue.YAMLSemanticError(this, 'Missing directives-end indicator line');\n } else if (this.directives.length > 0) {\n this.contents = this.directives;\n this.directives = [];\n }\n\n return offset;\n }\n\n parseContents(start) {\n const {\n parseNode,\n src\n } = this.context;\n if (!this.contents) this.contents = [];\n let lineStart = start;\n\n while (src[lineStart - 1] === '-') lineStart -= 1;\n\n let offset = PlainValue.Node.endOfWhiteSpace(src, start);\n let atLineStart = lineStart === start;\n this.valueRange = new PlainValue.Range(offset);\n\n while (!PlainValue.Node.atDocumentBoundary(src, offset, PlainValue.Char.DOCUMENT_END)) {\n switch (src[offset]) {\n case '\\n':\n if (atLineStart) {\n const blankLine = new BlankLine();\n offset = blankLine.parse({\n src\n }, offset);\n\n if (offset < src.length) {\n this.contents.push(blankLine);\n }\n } else {\n offset += 1;\n atLineStart = true;\n }\n\n lineStart = offset;\n break;\n\n case '#':\n {\n const comment = new Comment();\n offset = comment.parse({\n src\n }, offset);\n this.contents.push(comment);\n atLineStart = false;\n }\n break;\n\n default:\n {\n const iEnd = PlainValue.Node.endOfIndent(src, offset);\n const context = {\n atLineStart,\n indent: -1,\n inFlow: false,\n inCollection: false,\n lineStart,\n parent: this\n };\n const node = parseNode(context, iEnd);\n if (!node) return this.valueRange.end = iEnd; // at next document start\n\n this.contents.push(node);\n offset = node.range.end;\n atLineStart = false;\n const ec = grabCollectionEndComments(node);\n if (ec) Array.prototype.push.apply(this.contents, ec);\n }\n }\n\n offset = Document.startCommentOrEndBlankLine(src, offset);\n }\n\n this.valueRange.end = offset;\n\n if (src[offset]) {\n this.documentEndMarker = new PlainValue.Range(offset, offset + 3);\n offset += 3;\n\n if (src[offset]) {\n offset = PlainValue.Node.endOfWhiteSpace(src, offset);\n\n if (src[offset] === '#') {\n const comment = new Comment();\n offset = comment.parse({\n src\n }, offset);\n this.contents.push(comment);\n }\n\n switch (src[offset]) {\n case '\\n':\n offset += 1;\n break;\n\n case undefined:\n break;\n\n default:\n this.error = new PlainValue.YAMLSyntaxError(this, 'Document end marker line cannot have a non-comment suffix');\n }\n }\n }\n\n return offset;\n }\n /**\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this\n */\n\n\n parse(context, start) {\n context.root = this;\n this.context = context;\n const {\n src\n } = context;\n let offset = src.charCodeAt(start) === 0xfeff ? start + 1 : start; // skip BOM\n\n offset = this.parseDirectives(offset);\n offset = this.parseContents(offset);\n return offset;\n }\n\n setOrigRanges(cr, offset) {\n offset = super.setOrigRanges(cr, offset);\n this.directives.forEach(node => {\n offset = node.setOrigRanges(cr, offset);\n });\n if (this.directivesEndMarker) offset = this.directivesEndMarker.setOrigRange(cr, offset);\n this.contents.forEach(node => {\n offset = node.setOrigRanges(cr, offset);\n });\n if (this.documentEndMarker) offset = this.documentEndMarker.setOrigRange(cr, offset);\n return offset;\n }\n\n toString() {\n const {\n contents,\n directives,\n value\n } = this;\n if (value != null) return value;\n let str = directives.join('');\n\n if (contents.length > 0) {\n if (directives.length > 0 || contents[0].type === PlainValue.Type.COMMENT) str += '---\\n';\n str += contents.join('');\n }\n\n if (str[str.length - 1] !== '\\n') str += '\\n';\n return str;\n }\n\n}\n\nclass Alias extends PlainValue.Node {\n /**\n * Parses an *alias from the source\n *\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this scalar\n */\n parse(context, start) {\n this.context = context;\n const {\n src\n } = context;\n let offset = PlainValue.Node.endOfIdentifier(src, start + 1);\n this.valueRange = new PlainValue.Range(start + 1, offset);\n offset = PlainValue.Node.endOfWhiteSpace(src, offset);\n offset = this.parseComment(offset);\n return offset;\n }\n\n}\n\nconst Chomp = {\n CLIP: 'CLIP',\n KEEP: 'KEEP',\n STRIP: 'STRIP'\n};\nclass BlockValue extends PlainValue.Node {\n constructor(type, props) {\n super(type, props);\n this.blockIndent = null;\n this.chomping = Chomp.CLIP;\n this.header = null;\n }\n\n get includesTrailingLines() {\n return this.chomping === Chomp.KEEP;\n }\n\n get strValue() {\n if (!this.valueRange || !this.context) return null;\n let {\n start,\n end\n } = this.valueRange;\n const {\n indent,\n src\n } = this.context;\n if (this.valueRange.isEmpty()) return '';\n let lastNewLine = null;\n let ch = src[end - 1];\n\n while (ch === '\\n' || ch === '\\t' || ch === ' ') {\n end -= 1;\n\n if (end <= start) {\n if (this.chomping === Chomp.KEEP) break;else return ''; // probably never happens\n }\n\n if (ch === '\\n') lastNewLine = end;\n ch = src[end - 1];\n }\n\n let keepStart = end + 1;\n\n if (lastNewLine) {\n if (this.chomping === Chomp.KEEP) {\n keepStart = lastNewLine;\n end = this.valueRange.end;\n } else {\n end = lastNewLine;\n }\n }\n\n const bi = indent + this.blockIndent;\n const folded = this.type === PlainValue.Type.BLOCK_FOLDED;\n let atStart = true;\n let str = '';\n let sep = '';\n let prevMoreIndented = false;\n\n for (let i = start; i < end; ++i) {\n for (let j = 0; j < bi; ++j) {\n if (src[i] !== ' ') break;\n i += 1;\n }\n\n const ch = src[i];\n\n if (ch === '\\n') {\n if (sep === '\\n') str += '\\n';else sep = '\\n';\n } else {\n const lineEnd = PlainValue.Node.endOfLine(src, i);\n const line = src.slice(i, lineEnd);\n i = lineEnd;\n\n if (folded && (ch === ' ' || ch === '\\t') && i < keepStart) {\n if (sep === ' ') sep = '\\n';else if (!prevMoreIndented && !atStart && sep === '\\n') sep = '\\n\\n';\n str += sep + line; //+ ((lineEnd < end && src[lineEnd]) || '')\n\n sep = lineEnd < end && src[lineEnd] || '';\n prevMoreIndented = true;\n } else {\n str += sep + line;\n sep = folded && i < keepStart ? ' ' : '\\n';\n prevMoreIndented = false;\n }\n\n if (atStart && line !== '') atStart = false;\n }\n }\n\n return this.chomping === Chomp.STRIP ? str : str + '\\n';\n }\n\n parseBlockHeader(start) {\n const {\n src\n } = this.context;\n let offset = start + 1;\n let bi = '';\n\n while (true) {\n const ch = src[offset];\n\n switch (ch) {\n case '-':\n this.chomping = Chomp.STRIP;\n break;\n\n case '+':\n this.chomping = Chomp.KEEP;\n break;\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n bi += ch;\n break;\n\n default:\n this.blockIndent = Number(bi) || null;\n this.header = new PlainValue.Range(start, offset);\n return offset;\n }\n\n offset += 1;\n }\n }\n\n parseBlockValue(start) {\n const {\n indent,\n src\n } = this.context;\n const explicit = !!this.blockIndent;\n let offset = start;\n let valueEnd = start;\n let minBlockIndent = 1;\n\n for (let ch = src[offset]; ch === '\\n'; ch = src[offset]) {\n offset += 1;\n if (PlainValue.Node.atDocumentBoundary(src, offset)) break;\n const end = PlainValue.Node.endOfBlockIndent(src, indent, offset); // should not include tab?\n\n if (end === null) break;\n const ch = src[end];\n const lineIndent = end - (offset + indent);\n\n if (!this.blockIndent) {\n // no explicit block indent, none yet detected\n if (src[end] !== '\\n') {\n // first line with non-whitespace content\n if (lineIndent < minBlockIndent) {\n const msg = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n this.error = new PlainValue.YAMLSemanticError(this, msg);\n }\n\n this.blockIndent = lineIndent;\n } else if (lineIndent > minBlockIndent) {\n // empty line with more whitespace\n minBlockIndent = lineIndent;\n }\n } else if (ch && ch !== '\\n' && lineIndent < this.blockIndent) {\n if (src[end] === '#') break;\n\n if (!this.error) {\n const src = explicit ? 'explicit indentation indicator' : 'first line';\n const msg = `Block scalars must not be less indented than their ${src}`;\n this.error = new PlainValue.YAMLSemanticError(this, msg);\n }\n }\n\n if (src[end] === '\\n') {\n offset = end;\n } else {\n offset = valueEnd = PlainValue.Node.endOfLine(src, end);\n }\n }\n\n if (this.chomping !== Chomp.KEEP) {\n offset = src[valueEnd] ? valueEnd + 1 : valueEnd;\n }\n\n this.valueRange = new PlainValue.Range(start + 1, offset);\n return offset;\n }\n /**\n * Parses a block value from the source\n *\n * Accepted forms are:\n * ```\n * BS\n * block\n * lines\n *\n * BS #comment\n * block\n * lines\n * ```\n * where the block style BS matches the regexp `[|>][-+1-9]*` and block lines\n * are empty or have an indent level greater than `indent`.\n *\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this block\n */\n\n\n parse(context, start) {\n this.context = context;\n const {\n src\n } = context;\n let offset = this.parseBlockHeader(start);\n offset = PlainValue.Node.endOfWhiteSpace(src, offset);\n offset = this.parseComment(offset);\n offset = this.parseBlockValue(offset);\n return offset;\n }\n\n setOrigRanges(cr, offset) {\n offset = super.setOrigRanges(cr, offset);\n return this.header ? this.header.setOrigRange(cr, offset) : offset;\n }\n\n}\n\nclass FlowCollection extends PlainValue.Node {\n constructor(type, props) {\n super(type, props);\n this.items = null;\n }\n\n prevNodeIsJsonLike(idx = this.items.length) {\n const node = this.items[idx - 1];\n return !!node && (node.jsonLike || node.type === PlainValue.Type.COMMENT && this.prevNodeIsJsonLike(idx - 1));\n }\n /**\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this\n */\n\n\n parse(context, start) {\n this.context = context;\n const {\n parseNode,\n src\n } = context;\n let {\n indent,\n lineStart\n } = context;\n let char = src[start]; // { or [\n\n this.items = [{\n char,\n offset: start\n }];\n let offset = PlainValue.Node.endOfWhiteSpace(src, start + 1);\n char = src[offset];\n\n while (char && char !== ']' && char !== '}') {\n switch (char) {\n case '\\n':\n {\n lineStart = offset + 1;\n const wsEnd = PlainValue.Node.endOfWhiteSpace(src, lineStart);\n\n if (src[wsEnd] === '\\n') {\n const blankLine = new BlankLine();\n lineStart = blankLine.parse({\n src\n }, lineStart);\n this.items.push(blankLine);\n }\n\n offset = PlainValue.Node.endOfIndent(src, lineStart);\n\n if (offset <= lineStart + indent) {\n char = src[offset];\n\n if (offset < lineStart + indent || char !== ']' && char !== '}') {\n const msg = 'Insufficient indentation in flow collection';\n this.error = new PlainValue.YAMLSemanticError(this, msg);\n }\n }\n }\n break;\n\n case ',':\n {\n this.items.push({\n char,\n offset\n });\n offset += 1;\n }\n break;\n\n case '#':\n {\n const comment = new Comment();\n offset = comment.parse({\n src\n }, offset);\n this.items.push(comment);\n }\n break;\n\n case '?':\n case ':':\n {\n const next = src[offset + 1];\n\n if (next === '\\n' || next === '\\t' || next === ' ' || next === ',' || // in-flow : after JSON-like key does not need to be followed by whitespace\n char === ':' && this.prevNodeIsJsonLike()) {\n this.items.push({\n char,\n offset\n });\n offset += 1;\n break;\n }\n }\n // fallthrough\n\n default:\n {\n const node = parseNode({\n atLineStart: false,\n inCollection: false,\n inFlow: true,\n indent: -1,\n lineStart,\n parent: this\n }, offset);\n\n if (!node) {\n // at next document start\n this.valueRange = new PlainValue.Range(start, offset);\n return offset;\n }\n\n this.items.push(node);\n offset = PlainValue.Node.normalizeOffset(src, node.range.end);\n }\n }\n\n offset = PlainValue.Node.endOfWhiteSpace(src, offset);\n char = src[offset];\n }\n\n this.valueRange = new PlainValue.Range(start, offset + 1);\n\n if (char) {\n this.items.push({\n char,\n offset\n });\n offset = PlainValue.Node.endOfWhiteSpace(src, offset + 1);\n offset = this.parseComment(offset);\n }\n\n return offset;\n }\n\n setOrigRanges(cr, offset) {\n offset = super.setOrigRanges(cr, offset);\n this.items.forEach(node => {\n if (node instanceof PlainValue.Node) {\n offset = node.setOrigRanges(cr, offset);\n } else if (cr.length === 0) {\n node.origOffset = node.offset;\n } else {\n let i = offset;\n\n while (i < cr.length) {\n if (cr[i] > node.offset) break;else ++i;\n }\n\n node.origOffset = node.offset + i;\n offset = i;\n }\n });\n return offset;\n }\n\n toString() {\n const {\n context: {\n src\n },\n items,\n range,\n value\n } = this;\n if (value != null) return value;\n const nodes = items.filter(item => item instanceof PlainValue.Node);\n let str = '';\n let prevEnd = range.start;\n nodes.forEach(node => {\n const prefix = src.slice(prevEnd, node.range.start);\n prevEnd = node.range.end;\n str += prefix + String(node);\n\n if (str[str.length - 1] === '\\n' && src[prevEnd - 1] !== '\\n' && src[prevEnd] === '\\n') {\n // Comment range does not include the terminal newline, but its\n // stringified value does. Without this fix, newlines at comment ends\n // get duplicated.\n prevEnd += 1;\n }\n });\n str += src.slice(prevEnd, range.end);\n return PlainValue.Node.addStringTerminator(src, range.end, str);\n }\n\n}\n\nclass QuoteDouble extends PlainValue.Node {\n static endOfQuote(src, offset) {\n let ch = src[offset];\n\n while (ch && ch !== '\"') {\n offset += ch === '\\\\' ? 2 : 1;\n ch = src[offset];\n }\n\n return offset + 1;\n }\n /**\n * @returns {string | { str: string, errors: YAMLSyntaxError[] }}\n */\n\n\n get strValue() {\n if (!this.valueRange || !this.context) return null;\n const errors = [];\n const {\n start,\n end\n } = this.valueRange;\n const {\n indent,\n src\n } = this.context;\n if (src[end - 1] !== '\"') errors.push(new PlainValue.YAMLSyntaxError(this, 'Missing closing \"quote')); // Using String#replace is too painful with escaped newlines preceded by\n // escaped backslashes; also, this should be faster.\n\n let str = '';\n\n for (let i = start + 1; i < end - 1; ++i) {\n const ch = src[i];\n\n if (ch === '\\n') {\n if (PlainValue.Node.atDocumentBoundary(src, i + 1)) errors.push(new PlainValue.YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values'));\n const {\n fold,\n offset,\n error\n } = PlainValue.Node.foldNewline(src, i, indent);\n str += fold;\n i = offset;\n if (error) errors.push(new PlainValue.YAMLSemanticError(this, 'Multi-line double-quoted string needs to be sufficiently indented'));\n } else if (ch === '\\\\') {\n i += 1;\n\n switch (src[i]) {\n case '0':\n str += '\\0';\n break;\n // null character\n\n case 'a':\n str += '\\x07';\n break;\n // bell character\n\n case 'b':\n str += '\\b';\n break;\n // backspace\n\n case 'e':\n str += '\\x1b';\n break;\n // escape character\n\n case 'f':\n str += '\\f';\n break;\n // form feed\n\n case 'n':\n str += '\\n';\n break;\n // line feed\n\n case 'r':\n str += '\\r';\n break;\n // carriage return\n\n case 't':\n str += '\\t';\n break;\n // horizontal tab\n\n case 'v':\n str += '\\v';\n break;\n // vertical tab\n\n case 'N':\n str += '\\u0085';\n break;\n // Unicode next line\n\n case '_':\n str += '\\u00a0';\n break;\n // Unicode non-breaking space\n\n case 'L':\n str += '\\u2028';\n break;\n // Unicode line separator\n\n case 'P':\n str += '\\u2029';\n break;\n // Unicode paragraph separator\n\n case ' ':\n str += ' ';\n break;\n\n case '\"':\n str += '\"';\n break;\n\n case '/':\n str += '/';\n break;\n\n case '\\\\':\n str += '\\\\';\n break;\n\n case '\\t':\n str += '\\t';\n break;\n\n case 'x':\n str += this.parseCharCode(i + 1, 2, errors);\n i += 2;\n break;\n\n case 'u':\n str += this.parseCharCode(i + 1, 4, errors);\n i += 4;\n break;\n\n case 'U':\n str += this.parseCharCode(i + 1, 8, errors);\n i += 8;\n break;\n\n case '\\n':\n // skip escaped newlines, but still trim the following line\n while (src[i + 1] === ' ' || src[i + 1] === '\\t') i += 1;\n\n break;\n\n default:\n errors.push(new PlainValue.YAMLSyntaxError(this, `Invalid escape sequence ${src.substr(i - 1, 2)}`));\n str += '\\\\' + src[i];\n }\n } else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = src[i + 1];\n\n while (next === ' ' || next === '\\t') {\n i += 1;\n next = src[i + 1];\n }\n\n if (next !== '\\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch;\n } else {\n str += ch;\n }\n }\n\n return errors.length > 0 ? {\n errors,\n str\n } : str;\n }\n\n parseCharCode(offset, length, errors) {\n const {\n src\n } = this.context;\n const cc = src.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n\n if (isNaN(code)) {\n errors.push(new PlainValue.YAMLSyntaxError(this, `Invalid escape sequence ${src.substr(offset - 2, length + 2)}`));\n return src.substr(offset - 2, length + 2);\n }\n\n return String.fromCodePoint(code);\n }\n /**\n * Parses a \"double quoted\" value from the source\n *\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this scalar\n */\n\n\n parse(context, start) {\n this.context = context;\n const {\n src\n } = context;\n let offset = QuoteDouble.endOfQuote(src, start + 1);\n this.valueRange = new PlainValue.Range(start, offset);\n offset = PlainValue.Node.endOfWhiteSpace(src, offset);\n offset = this.parseComment(offset);\n return offset;\n }\n\n}\n\nclass QuoteSingle extends PlainValue.Node {\n static endOfQuote(src, offset) {\n let ch = src[offset];\n\n while (ch) {\n if (ch === \"'\") {\n if (src[offset + 1] !== \"'\") break;\n ch = src[offset += 2];\n } else {\n ch = src[offset += 1];\n }\n }\n\n return offset + 1;\n }\n /**\n * @returns {string | { str: string, errors: YAMLSyntaxError[] }}\n */\n\n\n get strValue() {\n if (!this.valueRange || !this.context) return null;\n const errors = [];\n const {\n start,\n end\n } = this.valueRange;\n const {\n indent,\n src\n } = this.context;\n if (src[end - 1] !== \"'\") errors.push(new PlainValue.YAMLSyntaxError(this, \"Missing closing 'quote\"));\n let str = '';\n\n for (let i = start + 1; i < end - 1; ++i) {\n const ch = src[i];\n\n if (ch === '\\n') {\n if (PlainValue.Node.atDocumentBoundary(src, i + 1)) errors.push(new PlainValue.YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values'));\n const {\n fold,\n offset,\n error\n } = PlainValue.Node.foldNewline(src, i, indent);\n str += fold;\n i = offset;\n if (error) errors.push(new PlainValue.YAMLSemanticError(this, 'Multi-line single-quoted string needs to be sufficiently indented'));\n } else if (ch === \"'\") {\n str += ch;\n i += 1;\n if (src[i] !== \"'\") errors.push(new PlainValue.YAMLSyntaxError(this, 'Unescaped single quote? This should not happen.'));\n } else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = src[i + 1];\n\n while (next === ' ' || next === '\\t') {\n i += 1;\n next = src[i + 1];\n }\n\n if (next !== '\\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch;\n } else {\n str += ch;\n }\n }\n\n return errors.length > 0 ? {\n errors,\n str\n } : str;\n }\n /**\n * Parses a 'single quoted' value from the source\n *\n * @param {ParseContext} context\n * @param {number} start - Index of first character\n * @returns {number} - Index of the character after this scalar\n */\n\n\n parse(context, start) {\n this.context = context;\n const {\n src\n } = context;\n let offset = QuoteSingle.endOfQuote(src, start + 1);\n this.valueRange = new PlainValue.Range(start, offset);\n offset = PlainValue.Node.endOfWhiteSpace(src, offset);\n offset = this.parseComment(offset);\n return offset;\n }\n\n}\n\nfunction createNewNode(type, props) {\n switch (type) {\n case PlainValue.Type.ALIAS:\n return new Alias(type, props);\n\n case PlainValue.Type.BLOCK_FOLDED:\n case PlainValue.Type.BLOCK_LITERAL:\n return new BlockValue(type, props);\n\n case PlainValue.Type.FLOW_MAP:\n case PlainValue.Type.FLOW_SEQ:\n return new FlowCollection(type, props);\n\n case PlainValue.Type.MAP_KEY:\n case PlainValue.Type.MAP_VALUE:\n case PlainValue.Type.SEQ_ITEM:\n return new CollectionItem(type, props);\n\n case PlainValue.Type.COMMENT:\n case PlainValue.Type.PLAIN:\n return new PlainValue.PlainValue(type, props);\n\n case PlainValue.Type.QUOTE_DOUBLE:\n return new QuoteDouble(type, props);\n\n case PlainValue.Type.QUOTE_SINGLE:\n return new QuoteSingle(type, props);\n\n /* istanbul ignore next */\n\n default:\n return null;\n // should never happen\n }\n}\n/**\n * @param {boolean} atLineStart - Node starts at beginning of line\n * @param {boolean} inFlow - true if currently in a flow context\n * @param {boolean} inCollection - true if currently in a collection context\n * @param {number} indent - Current level of indentation\n * @param {number} lineStart - Start of the current line\n * @param {Node} parent - The parent of the node\n * @param {string} src - Source of the YAML document\n */\n\n\nclass ParseContext {\n static parseType(src, offset, inFlow) {\n switch (src[offset]) {\n case '*':\n return PlainValue.Type.ALIAS;\n\n case '>':\n return PlainValue.Type.BLOCK_FOLDED;\n\n case '|':\n return PlainValue.Type.BLOCK_LITERAL;\n\n case '{':\n return PlainValue.Type.FLOW_MAP;\n\n case '[':\n return PlainValue.Type.FLOW_SEQ;\n\n case '?':\n return !inFlow && PlainValue.Node.atBlank(src, offset + 1, true) ? PlainValue.Type.MAP_KEY : PlainValue.Type.PLAIN;\n\n case ':':\n return !inFlow && PlainValue.Node.atBlank(src, offset + 1, true) ? PlainValue.Type.MAP_VALUE : PlainValue.Type.PLAIN;\n\n case '-':\n return !inFlow && PlainValue.Node.atBlank(src, offset + 1, true) ? PlainValue.Type.SEQ_ITEM : PlainValue.Type.PLAIN;\n\n case '\"':\n return PlainValue.Type.QUOTE_DOUBLE;\n\n case \"'\":\n return PlainValue.Type.QUOTE_SINGLE;\n\n default:\n return PlainValue.Type.PLAIN;\n }\n }\n\n constructor(orig = {}, {\n atLineStart,\n inCollection,\n inFlow,\n indent,\n lineStart,\n parent\n } = {}) {\n PlainValue._defineProperty(this, \"parseNode\", (overlay, start) => {\n if (PlainValue.Node.atDocumentBoundary(this.src, start)) return null;\n const context = new ParseContext(this, overlay);\n const {\n props,\n type,\n valueStart\n } = context.parseProps(start);\n const node = createNewNode(type, props);\n let offset = node.parse(context, valueStart);\n node.range = new PlainValue.Range(start, offset);\n /* istanbul ignore if */\n\n if (offset <= start) {\n // This should never happen, but if it does, let's make sure to at least\n // step one character forward to avoid a busy loop.\n node.error = new Error(`Node#parse consumed no characters`);\n node.error.parseEnd = offset;\n node.error.source = node;\n node.range.end = start + 1;\n }\n\n if (context.nodeStartsCollection(node)) {\n if (!node.error && !context.atLineStart && context.parent.type === PlainValue.Type.DOCUMENT) {\n node.error = new PlainValue.YAMLSyntaxError(node, 'Block collection must not have preceding content here (e.g. directives-end indicator)');\n }\n\n const collection = new Collection(node);\n offset = collection.parse(new ParseContext(context), offset);\n collection.range = new PlainValue.Range(start, offset);\n return collection;\n }\n\n return node;\n });\n\n this.atLineStart = atLineStart != null ? atLineStart : orig.atLineStart || false;\n this.inCollection = inCollection != null ? inCollection : orig.inCollection || false;\n this.inFlow = inFlow != null ? inFlow : orig.inFlow || false;\n this.indent = indent != null ? indent : orig.indent;\n this.lineStart = lineStart != null ? lineStart : orig.lineStart;\n this.parent = parent != null ? parent : orig.parent || {};\n this.root = orig.root;\n this.src = orig.src;\n }\n\n nodeStartsCollection(node) {\n const {\n inCollection,\n inFlow,\n src\n } = this;\n if (inCollection || inFlow) return false;\n if (node instanceof CollectionItem) return true; // check for implicit key\n\n let offset = node.range.end;\n if (src[offset] === '\\n' || src[offset - 1] === '\\n') return false;\n offset = PlainValue.Node.endOfWhiteSpace(src, offset);\n return src[offset] === ':';\n } // Anchor and tag are before type, which determines the node implementation\n // class; hence this intermediate step.\n\n\n parseProps(offset) {\n const {\n inFlow,\n parent,\n src\n } = this;\n const props = [];\n let lineHasProps = false;\n offset = this.atLineStart ? PlainValue.Node.endOfIndent(src, offset) : PlainValue.Node.endOfWhiteSpace(src, offset);\n let ch = src[offset];\n\n while (ch === PlainValue.Char.ANCHOR || ch === PlainValue.Char.COMMENT || ch === PlainValue.Char.TAG || ch === '\\n') {\n if (ch === '\\n') {\n let inEnd = offset;\n let lineStart;\n\n do {\n lineStart = inEnd + 1;\n inEnd = PlainValue.Node.endOfIndent(src, lineStart);\n } while (src[inEnd] === '\\n');\n\n const indentDiff = inEnd - (lineStart + this.indent);\n const noIndicatorAsIndent = parent.type === PlainValue.Type.SEQ_ITEM && parent.context.atLineStart;\n if (src[inEnd] !== '#' && !PlainValue.Node.nextNodeIsIndented(src[inEnd], indentDiff, !noIndicatorAsIndent)) break;\n this.atLineStart = true;\n this.lineStart = lineStart;\n lineHasProps = false;\n offset = inEnd;\n } else if (ch === PlainValue.Char.COMMENT) {\n const end = PlainValue.Node.endOfLine(src, offset + 1);\n props.push(new PlainValue.Range(offset, end));\n offset = end;\n } else {\n let end = PlainValue.Node.endOfIdentifier(src, offset + 1);\n\n if (ch === PlainValue.Char.TAG && src[end] === ',' && /^[a-zA-Z0-9-]+\\.[a-zA-Z0-9-]+,\\d\\d\\d\\d(-\\d\\d){0,2}\\/\\S/.test(src.slice(offset + 1, end + 13))) {\n // Let's presume we're dealing with a YAML 1.0 domain tag here, rather\n // than an empty but 'foo.bar' private-tagged node in a flow collection\n // followed without whitespace by a plain string starting with a year\n // or date divided by something.\n end = PlainValue.Node.endOfIdentifier(src, end + 5);\n }\n\n props.push(new PlainValue.Range(offset, end));\n lineHasProps = true;\n offset = PlainValue.Node.endOfWhiteSpace(src, end);\n }\n\n ch = src[offset];\n } // '- &a : b' has an anchor on an empty node\n\n\n if (lineHasProps && ch === ':' && PlainValue.Node.atBlank(src, offset + 1, true)) offset -= 1;\n const type = ParseContext.parseType(src, offset, inFlow);\n return {\n props,\n type,\n valueStart: offset\n };\n }\n /**\n * Parses a node from the source\n * @param {ParseContext} overlay\n * @param {number} start - Index of first non-whitespace character for the node\n * @returns {?Node} - null if at a document boundary\n */\n\n\n}\n\n// Published as 'yaml/parse-cst'\nfunction parse(src) {\n const cr = [];\n\n if (src.indexOf('\\r') !== -1) {\n src = src.replace(/\\r\\n?/g, (match, offset) => {\n if (match.length > 1) cr.push(offset);\n return '\\n';\n });\n }\n\n const documents = [];\n let offset = 0;\n\n do {\n const doc = new Document();\n const context = new ParseContext({\n src\n });\n offset = doc.parse(context, offset);\n documents.push(doc);\n } while (offset < src.length);\n\n documents.setOrigRanges = () => {\n if (cr.length === 0) return false;\n\n for (let i = 1; i < cr.length; ++i) cr[i] -= i;\n\n let crOffset = 0;\n\n for (let i = 0; i < documents.length; ++i) {\n crOffset = documents[i].setOrigRanges(cr, crOffset);\n }\n\n cr.splice(0, cr.length);\n return true;\n };\n\n documents.toString = () => documents.join('...\\n');\n\n return documents;\n}\n\nexports.parse = parse;\n","'use strict';\n\nvar PlainValue = require('./PlainValue-ec8e588e.js');\n\nfunction addCommentBefore(str, indent, comment) {\n if (!comment) return str;\n const cc = comment.replace(/[\\s\\S]^/gm, `$&${indent}#`);\n return `#${cc}\\n${indent}${str}`;\n}\nfunction addComment(str, indent, comment) {\n return !comment ? str : comment.indexOf('\\n') === -1 ? `${str} #${comment}` : `${str}\\n` + comment.replace(/^/gm, `${indent || ''}#`);\n}\n\nclass Node {}\n\nfunction toJSON(value, arg, ctx) {\n if (Array.isArray(value)) return value.map((v, i) => toJSON(v, String(i), ctx));\n\n if (value && typeof value.toJSON === 'function') {\n const anchor = ctx && ctx.anchors && ctx.anchors.get(value);\n if (anchor) ctx.onCreate = res => {\n anchor.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (anchor && ctx.onCreate) ctx.onCreate(res);\n return res;\n }\n\n if ((!ctx || !ctx.keep) && typeof value === 'bigint') return Number(value);\n return value;\n}\n\nclass Scalar extends Node {\n constructor(value) {\n super();\n this.value = value;\n }\n\n toJSON(arg, ctx) {\n return ctx && ctx.keep ? this.value : toJSON(this.value, arg, ctx);\n }\n\n toString() {\n return String(this.value);\n }\n\n}\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n\n if (Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n } else {\n const o = {};\n Object.defineProperty(o, k, {\n value: v,\n writable: true,\n enumerable: true,\n configurable: true\n });\n v = o;\n }\n }\n\n return schema.createNode(v, false);\n} // null, undefined, or an empty non-string iterable (e.g. [])\n\n\nconst isEmptyPath = path => path == null || typeof path === 'object' && path[Symbol.iterator]().next().done;\nclass Collection extends Node {\n constructor(schema) {\n super();\n\n PlainValue._defineProperty(this, \"items\", []);\n\n this.schema = schema;\n }\n\n addIn(path, value) {\n if (isEmptyPath(path)) this.add(value);else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (node instanceof Collection) node.addIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n\n deleteIn([key, ...rest]) {\n if (rest.length === 0) return this.delete(key);\n const node = this.get(key, true);\n if (node instanceof Collection) return node.deleteIn(rest);else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n\n getIn([key, ...rest], keepScalar) {\n const node = this.get(key, true);\n if (rest.length === 0) return !keepScalar && node instanceof Scalar ? node.value : node;else return node instanceof Collection ? node.getIn(rest, keepScalar) : undefined;\n }\n\n hasAllNullValues() {\n return this.items.every(node => {\n if (!node || node.type !== 'PAIR') return false;\n const n = node.value;\n return n == null || n instanceof Scalar && n.value == null && !n.commentBefore && !n.comment && !n.tag;\n });\n }\n\n hasIn([key, ...rest]) {\n if (rest.length === 0) return this.has(key);\n const node = this.get(key, true);\n return node instanceof Collection ? node.hasIn(rest) : false;\n }\n\n setIn([key, ...rest], value) {\n if (rest.length === 0) {\n this.set(key, value);\n } else {\n const node = this.get(key, true);\n if (node instanceof Collection) node.setIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n } // overridden in implementations\n\n /* istanbul ignore next */\n\n\n toJSON() {\n return null;\n }\n\n toString(ctx, {\n blockItem,\n flowChars,\n isMap,\n itemIndent\n }, onComment, onChompKeep) {\n const {\n indent,\n indentStep,\n stringify\n } = ctx;\n const inFlow = this.type === PlainValue.Type.FLOW_MAP || this.type === PlainValue.Type.FLOW_SEQ || ctx.inFlow;\n if (inFlow) itemIndent += indentStep;\n const allNullValues = isMap && this.hasAllNullValues();\n ctx = Object.assign({}, ctx, {\n allNullValues,\n indent: itemIndent,\n inFlow,\n type: null\n });\n let chompKeep = false;\n let hasItemWithNewLine = false;\n const nodes = this.items.reduce((nodes, item, i) => {\n let comment;\n\n if (item) {\n if (!chompKeep && item.spaceBefore) nodes.push({\n type: 'comment',\n str: ''\n });\n if (item.commentBefore) item.commentBefore.match(/^.*$/gm).forEach(line => {\n nodes.push({\n type: 'comment',\n str: `#${line}`\n });\n });\n if (item.comment) comment = item.comment;\n if (inFlow && (!chompKeep && item.spaceBefore || item.commentBefore || item.comment || item.key && (item.key.commentBefore || item.key.comment) || item.value && (item.value.commentBefore || item.value.comment))) hasItemWithNewLine = true;\n }\n\n chompKeep = false;\n let str = stringify(item, ctx, () => comment = null, () => chompKeep = true);\n if (inFlow && !hasItemWithNewLine && str.includes('\\n')) hasItemWithNewLine = true;\n if (inFlow && i < this.items.length - 1) str += ',';\n str = addComment(str, itemIndent, comment);\n if (chompKeep && (comment || inFlow)) chompKeep = false;\n nodes.push({\n type: 'item',\n str\n });\n return nodes;\n }, []);\n let str;\n\n if (nodes.length === 0) {\n str = flowChars.start + flowChars.end;\n } else if (inFlow) {\n const {\n start,\n end\n } = flowChars;\n const strings = nodes.map(n => n.str);\n\n if (hasItemWithNewLine || strings.reduce((sum, str) => sum + str.length + 2, 2) > Collection.maxFlowStringSingleLineLength) {\n str = start;\n\n for (const s of strings) {\n str += s ? `\\n${indentStep}${indent}${s}` : '\\n';\n }\n\n str += `\\n${indent}${end}`;\n } else {\n str = `${start} ${strings.join(' ')} ${end}`;\n }\n } else {\n const strings = nodes.map(blockItem);\n str = strings.shift();\n\n for (const s of strings) str += s ? `\\n${indent}${s}` : '\\n';\n }\n\n if (this.comment) {\n str += '\\n' + this.comment.replace(/^/gm, `${indent}#`);\n if (onComment) onComment();\n } else if (chompKeep && onChompKeep) onChompKeep();\n\n return str;\n }\n\n}\n\nPlainValue._defineProperty(Collection, \"maxFlowStringSingleLineLength\", 60);\n\nfunction asItemIndex(key) {\n let idx = key instanceof Scalar ? key.value : key;\n if (idx && typeof idx === 'string') idx = Number(idx);\n return Number.isInteger(idx) && idx >= 0 ? idx : null;\n}\n\nclass YAMLSeq extends Collection {\n add(value) {\n this.items.push(value);\n }\n\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number') return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number') return undefined;\n const it = this.items[idx];\n return !keepScalar && it instanceof Scalar ? it.value : it;\n }\n\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number') throw new Error(`Expected a valid index, not ${key}.`);\n this.items[idx] = value;\n }\n\n toJSON(_, ctx) {\n const seq = [];\n if (ctx && ctx.onCreate) ctx.onCreate(seq);\n let i = 0;\n\n for (const item of this.items) seq.push(toJSON(item, String(i++), ctx));\n\n return seq;\n }\n\n toString(ctx, onComment, onChompKeep) {\n if (!ctx) return JSON.stringify(this);\n return super.toString(ctx, {\n blockItem: n => n.type === 'comment' ? n.str : `- ${n.str}`,\n flowChars: {\n start: '[',\n end: ']'\n },\n isMap: false,\n itemIndent: (ctx.indent || '') + ' '\n }, onComment, onChompKeep);\n }\n\n}\n\nconst stringifyKey = (key, jsKey, ctx) => {\n if (jsKey === null) return '';\n if (typeof jsKey !== 'object') return String(jsKey);\n if (key instanceof Node && ctx && ctx.doc) return key.toString({\n anchors: Object.create(null),\n doc: ctx.doc,\n indent: '',\n indentStep: ctx.indentStep,\n inFlow: true,\n inStringifyKey: true,\n stringify: ctx.stringify\n });\n return JSON.stringify(jsKey);\n};\n\nclass Pair extends Node {\n constructor(key, value = null) {\n super();\n this.key = key;\n this.value = value;\n this.type = Pair.Type.PAIR;\n }\n\n get commentBefore() {\n return this.key instanceof Node ? this.key.commentBefore : undefined;\n }\n\n set commentBefore(cb) {\n if (this.key == null) this.key = new Scalar(null);\n if (this.key instanceof Node) this.key.commentBefore = cb;else {\n const msg = 'Pair.commentBefore is an alias for Pair.key.commentBefore. To set it, the key must be a Node.';\n throw new Error(msg);\n }\n }\n\n addToJSMap(ctx, map) {\n const key = toJSON(this.key, '', ctx);\n\n if (map instanceof Map) {\n const value = toJSON(this.value, key, ctx);\n map.set(key, value);\n } else if (map instanceof Set) {\n map.add(key);\n } else {\n const stringKey = stringifyKey(this.key, key, ctx);\n const value = toJSON(this.value, stringKey, ctx);\n if (stringKey in map) Object.defineProperty(map, stringKey, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });else map[stringKey] = value;\n }\n\n return map;\n }\n\n toJSON(_, ctx) {\n const pair = ctx && ctx.mapAsMap ? new Map() : {};\n return this.addToJSMap(ctx, pair);\n }\n\n toString(ctx, onComment, onChompKeep) {\n if (!ctx || !ctx.doc) return JSON.stringify(this);\n const {\n indent: indentSize,\n indentSeq,\n simpleKeys\n } = ctx.doc.options;\n let {\n key,\n value\n } = this;\n let keyComment = key instanceof Node && key.comment;\n\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n\n if (key instanceof Collection) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n\n let explicitKey = !simpleKeys && (!key || keyComment || (key instanceof Node ? key instanceof Collection || key.type === PlainValue.Type.BLOCK_FOLDED || key.type === PlainValue.Type.BLOCK_LITERAL : typeof key === 'object'));\n const {\n doc,\n indent,\n indentStep,\n stringify\n } = ctx;\n ctx = Object.assign({}, ctx, {\n implicitKey: !explicitKey,\n indent: indent + indentStep\n });\n let chompKeep = false;\n let str = stringify(key, ctx, () => keyComment = null, () => chompKeep = true);\n str = addComment(str, ctx.indent, keyComment);\n\n if (!explicitKey && str.length > 1024) {\n if (simpleKeys) throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n\n if (ctx.allNullValues && !simpleKeys) {\n if (this.comment) {\n str = addComment(str, ctx.indent, this.comment);\n if (onComment) onComment();\n } else if (chompKeep && !keyComment && onChompKeep) onChompKeep();\n\n return ctx.inFlow && !explicitKey ? str : `? ${str}`;\n }\n\n str = explicitKey ? `? ${str}\\n${indent}:` : `${str}:`;\n\n if (this.comment) {\n // expected (but not strictly required) to be a single-line comment\n str = addComment(str, ctx.indent, this.comment);\n if (onComment) onComment();\n }\n\n let vcb = '';\n let valueComment = null;\n\n if (value instanceof Node) {\n if (value.spaceBefore) vcb = '\\n';\n\n if (value.commentBefore) {\n const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`);\n vcb += `\\n${cs}`;\n }\n\n valueComment = value.comment;\n } else if (value && typeof value === 'object') {\n value = doc.schema.createNode(value, true);\n }\n\n ctx.implicitKey = false;\n if (!explicitKey && !this.comment && value instanceof Scalar) ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n\n if (!indentSeq && indentSize >= 2 && !ctx.inFlow && !explicitKey && value instanceof YAMLSeq && value.type !== PlainValue.Type.FLOW_SEQ && !value.tag && !doc.anchors.getName(value)) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substr(2);\n }\n\n const valueStr = stringify(value, ctx, () => valueComment = null, () => chompKeep = true);\n let ws = ' ';\n\n if (vcb || this.comment) {\n ws = `${vcb}\\n${ctx.indent}`;\n } else if (!explicitKey && value instanceof Collection) {\n const flow = valueStr[0] === '[' || valueStr[0] === '{';\n if (!flow || valueStr.includes('\\n')) ws = `\\n${ctx.indent}`;\n } else if (valueStr[0] === '\\n') ws = '';\n\n if (chompKeep && !valueComment && onChompKeep) onChompKeep();\n return addComment(str + ws + valueStr, ctx.indent, valueComment);\n }\n\n}\n\nPlainValue._defineProperty(Pair, \"Type\", {\n PAIR: 'PAIR',\n MERGE_PAIR: 'MERGE_PAIR'\n});\n\nconst getAliasCount = (node, anchors) => {\n if (node instanceof Alias) {\n const anchor = anchors.get(node.source);\n return anchor.count * anchor.aliasCount;\n } else if (node instanceof Collection) {\n let count = 0;\n\n for (const item of node.items) {\n const c = getAliasCount(item, anchors);\n if (c > count) count = c;\n }\n\n return count;\n } else if (node instanceof Pair) {\n const kc = getAliasCount(node.key, anchors);\n const vc = getAliasCount(node.value, anchors);\n return Math.max(kc, vc);\n }\n\n return 1;\n};\n\nclass Alias extends Node {\n static stringify({\n range,\n source\n }, {\n anchors,\n doc,\n implicitKey,\n inStringifyKey\n }) {\n let anchor = Object.keys(anchors).find(a => anchors[a] === source);\n if (!anchor && inStringifyKey) anchor = doc.anchors.getName(source) || doc.anchors.newName();\n if (anchor) return `*${anchor}${implicitKey ? ' ' : ''}`;\n const msg = doc.anchors.getName(source) ? 'Alias node must be after source node' : 'Source node not found for alias node';\n throw new Error(`${msg} [${range}]`);\n }\n\n constructor(source) {\n super();\n this.source = source;\n this.type = PlainValue.Type.ALIAS;\n }\n\n set tag(t) {\n throw new Error('Alias nodes cannot have tags');\n }\n\n toJSON(arg, ctx) {\n if (!ctx) return toJSON(this.source, arg, ctx);\n const {\n anchors,\n maxAliasCount\n } = ctx;\n const anchor = anchors.get(this.source);\n /* istanbul ignore if */\n\n if (!anchor || anchor.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n if (this.cstNode) throw new PlainValue.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg);\n }\n\n if (maxAliasCount >= 0) {\n anchor.count += 1;\n if (anchor.aliasCount === 0) anchor.aliasCount = getAliasCount(this.source, anchors);\n\n if (anchor.count * anchor.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n if (this.cstNode) throw new PlainValue.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg);\n }\n }\n\n return anchor.res;\n } // Only called when stringifying an alias mapping key while constructing\n // Object output.\n\n\n toString(ctx) {\n return Alias.stringify(this, ctx);\n }\n\n}\n\nPlainValue._defineProperty(Alias, \"default\", true);\n\nfunction findPair(items, key) {\n const k = key instanceof Scalar ? key.value : key;\n\n for (const it of items) {\n if (it instanceof Pair) {\n if (it.key === key || it.key === k) return it;\n if (it.key && it.key.value === k) return it;\n }\n }\n\n return undefined;\n}\nclass YAMLMap extends Collection {\n add(pair, overwrite) {\n if (!pair) pair = new Pair(pair);else if (!(pair instanceof Pair)) pair = new Pair(pair.key || pair, pair.value);\n const prev = findPair(this.items, pair.key);\n const sortEntries = this.schema && this.schema.sortMapEntries;\n\n if (prev) {\n if (overwrite) prev.value = pair.value;else throw new Error(`Key ${pair.key} already set`);\n } else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(pair, item) < 0);\n if (i === -1) this.items.push(pair);else this.items.splice(i, 0, pair);\n } else {\n this.items.push(pair);\n }\n }\n\n delete(key) {\n const it = findPair(this.items, key);\n if (!it) return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it && it.value;\n return !keepScalar && node instanceof Scalar ? node.value : node;\n }\n\n has(key) {\n return !!findPair(this.items, key);\n }\n\n set(key, value) {\n this.add(new Pair(key, value), true);\n }\n /**\n * @param {*} arg ignored\n * @param {*} ctx Conversion context, originally set in Document#toJSON()\n * @param {Class} Type If set, forces the returned collection type\n * @returns {*} Instance of Type, Map, or Object\n */\n\n\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx && ctx.mapAsMap ? new Map() : {};\n if (ctx && ctx.onCreate) ctx.onCreate(map);\n\n for (const item of this.items) item.addToJSMap(ctx, map);\n\n return map;\n }\n\n toString(ctx, onComment, onChompKeep) {\n if (!ctx) return JSON.stringify(this);\n\n for (const item of this.items) {\n if (!(item instanceof Pair)) throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n\n return super.toString(ctx, {\n blockItem: n => n.str,\n flowChars: {\n start: '{',\n end: '}'\n },\n isMap: true,\n itemIndent: ctx.indent || ''\n }, onComment, onChompKeep);\n }\n\n}\n\nconst MERGE_KEY = '<<';\nclass Merge extends Pair {\n constructor(pair) {\n if (pair instanceof Pair) {\n let seq = pair.value;\n\n if (!(seq instanceof YAMLSeq)) {\n seq = new YAMLSeq();\n seq.items.push(pair.value);\n seq.range = pair.value.range;\n }\n\n super(pair.key, seq);\n this.range = pair.range;\n } else {\n super(new Scalar(MERGE_KEY), new YAMLSeq());\n }\n\n this.type = Pair.Type.MERGE_PAIR;\n } // If the value associated with a merge key is a single mapping node, each of\n // its key/value pairs is inserted into the current mapping, unless the key\n // already exists in it. If the value associated with the merge key is a\n // sequence, then this sequence is expected to contain mapping nodes and each\n // of these nodes is merged in turn according to its order in the sequence.\n // Keys in mapping nodes earlier in the sequence override keys specified in\n // later mapping nodes. -- http://yaml.org/type/merge.html\n\n\n addToJSMap(ctx, map) {\n for (const {\n source\n } of this.value.items) {\n if (!(source instanceof YAMLMap)) throw new Error('Merge sources must be maps');\n const srcMap = source.toJSON(null, ctx, Map);\n\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key)) map.set(key, value);\n } else if (map instanceof Set) {\n map.add(key);\n } else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n }\n\n return map;\n }\n\n toString(ctx, onComment) {\n const seq = this.value;\n if (seq.items.length > 1) return super.toString(ctx, onComment);\n this.value = seq.items[0];\n const str = super.toString(ctx, onComment);\n this.value = seq;\n return str;\n }\n\n}\n\nconst binaryOptions = {\n defaultType: PlainValue.Type.BLOCK_LITERAL,\n lineWidth: 76\n};\nconst boolOptions = {\n trueStr: 'true',\n falseStr: 'false'\n};\nconst intOptions = {\n asBigInt: false\n};\nconst nullOptions = {\n nullStr: 'null'\n};\nconst strOptions = {\n defaultType: PlainValue.Type.PLAIN,\n doubleQuoted: {\n jsonEncoding: false,\n minMultiLineLength: 40\n },\n fold: {\n lineWidth: 80,\n minContentWidth: 20\n }\n};\n\nfunction resolveScalar(str, tags, scalarFallback) {\n for (const {\n format,\n test,\n resolve\n } of tags) {\n if (test) {\n const match = str.match(test);\n\n if (match) {\n let res = resolve.apply(null, match);\n if (!(res instanceof Scalar)) res = new Scalar(res);\n if (format) res.format = format;\n return res;\n }\n }\n }\n\n if (scalarFallback) str = scalarFallback(str);\n return new Scalar(str);\n}\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted'; // presumes i+1 is at the start of a line\n// returns index of last newline in more-indented block\n\nconst consumeMoreIndentedLines = (text, i) => {\n let ch = text[i + 1];\n\n while (ch === ' ' || ch === '\\t') {\n do {\n ch = text[i += 1];\n } while (ch && ch !== '\\n');\n\n ch = text[i + 1];\n }\n\n return i;\n};\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n *\n * @param {string} text\n * @param {string} indent\n * @param {string} [mode='flow'] `'block'` prevents more-indented lines\n * from being folded; `'quoted'` allows for `\\` escapes, including escaped\n * newlines\n * @param {Object} options\n * @param {number} [options.indentAtStart] Accounts for leading contents on\n * the first line, defaulting to `indent.length`\n * @param {number} [options.lineWidth=80]\n * @param {number} [options.minContentWidth=20] Allow highly indented lines to\n * stretch the line width or indent content from the start\n * @param {function} options.onFold Called once if the text is folded\n * @param {function} options.onFold Called once if any line of text exceeds\n * lineWidth characters\n */\n\n\nfunction foldFlowLines(text, indent, mode, {\n indentAtStart,\n lineWidth = 80,\n minContentWidth = 20,\n onFold,\n onOverflow\n}) {\n if (!lineWidth || lineWidth < 0) return text;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep) return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth)) folds.push(0);else end = lineWidth - indentAtStart;\n }\n\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i);\n if (i !== -1) end = i + endStep;\n }\n\n for (let ch; ch = text[i += 1];) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n\n case 'u':\n i += 5;\n break;\n\n case 'U':\n i += 9;\n break;\n\n default:\n i += 1;\n }\n\n escEnd = i;\n }\n\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK) i = consumeMoreIndentedLines(text, i);\n end = i + endStep;\n split = undefined;\n } else {\n if (ch === ' ' && prev && prev !== ' ' && prev !== '\\n' && prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t') split = i;\n }\n\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n } else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[i += 1];\n overflow = true;\n } // Account for newline escape, but don't break preceding escape\n\n\n const j = i > escEnd + 1 ? i - 2 : escStart - 1; // Bail out if lineWidth & minContentWidth are shorter than an escape string\n\n if (escapedFolds[j]) return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n } else {\n overflow = true;\n }\n }\n }\n\n prev = ch;\n }\n\n if (overflow && onOverflow) onOverflow();\n if (folds.length === 0) return text;\n if (onFold) onFold();\n let res = text.slice(0, folds[0]);\n\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0) res = `\\n${indent}${text.slice(0, end)}`;else {\n if (mode === FOLD_QUOTED && escapedFolds[fold]) res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n\n return res;\n}\n\nconst getFoldOptions = ({\n indentAtStart\n}) => indentAtStart ? Object.assign({\n indentAtStart\n}, strOptions.fold) : strOptions.fold; // Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\n\n\nconst containsDocumentMarker = str => /^(%|---|\\.\\.\\.)/m.test(str);\n\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0) return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit) return false;\n\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit) return true;\n start = i + 1;\n if (strLen - start <= limit) return false;\n }\n }\n\n return true;\n}\n\nfunction doubleQuotedString(value, ctx) {\n const {\n implicitKey\n } = ctx;\n const {\n jsonEncoding,\n minMultiLineLength\n } = strOptions.doubleQuoted;\n const json = JSON.stringify(value);\n if (jsonEncoding) return json;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n\n if (ch === '\\\\') switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n\n case '0007':\n str += '\\\\a';\n break;\n\n case '000b':\n str += '\\\\v';\n break;\n\n case '001b':\n str += '\\\\e';\n break;\n\n case '0085':\n str += '\\\\N';\n break;\n\n case '00a0':\n str += '\\\\_';\n break;\n\n case '2028':\n str += '\\\\L';\n break;\n\n case '2029':\n str += '\\\\P';\n break;\n\n default:\n if (code.substr(0, 2) === '00') str += '\\\\x' + code.substr(2);else str += json.substr(i, 6);\n }\n\n i += 5;\n start = i + 1;\n }\n break;\n\n case 'n':\n if (implicitKey || json[i + 2] === '\"' || json.length < minMultiLineLength) {\n i += 1;\n } else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n\n while (json[i + 2] === '\\\\' && json[i + 3] === 'n' && json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n\n str += indent; // space after newline needs to be escaped to not be folded\n\n if (json[i + 2] === ' ') str += '\\\\';\n i += 1;\n start = i + 1;\n }\n\n break;\n\n default:\n i += 1;\n }\n }\n\n str = start ? str + json.slice(start) : json;\n return implicitKey ? str : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx));\n}\n\nfunction singleQuotedString(value, ctx) {\n if (ctx.implicitKey) {\n if (/\\n/.test(value)) return doubleQuotedString(value, ctx);\n } else {\n // single quoted string can't have leading or trailing whitespace around newline\n if (/[ \\t]\\n|\\n[ \\t]/.test(value)) return doubleQuotedString(value, ctx);\n }\n\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey ? res : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx));\n}\n\nfunction blockString({\n comment,\n type,\n value\n}, ctx, onComment, onChompKeep) {\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (/\\n[\\t ]+$/.test(value) || /^\\s*$/.test(value)) {\n return doubleQuotedString(value, ctx);\n }\n\n const indent = ctx.indent || (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const indentSize = indent ? '2' : '1'; // root is at -1\n\n const literal = type === PlainValue.Type.BLOCK_FOLDED ? false : type === PlainValue.Type.BLOCK_LITERAL ? true : !lineLengthOverLimit(value, strOptions.fold.lineWidth, indent.length);\n let header = literal ? '|' : '>';\n if (!value) return header + '\\n';\n let wsStart = '';\n let wsEnd = '';\n value = value.replace(/[\\n\\t ]*$/, ws => {\n const n = ws.indexOf('\\n');\n\n if (n === -1) {\n header += '-'; // strip\n } else if (value === ws || n !== ws.length - 1) {\n header += '+'; // keep\n\n if (onChompKeep) onChompKeep();\n }\n\n wsEnd = ws.replace(/\\n$/, '');\n return '';\n }).replace(/^[\\n ]*/, ws => {\n if (ws.indexOf(' ') !== -1) header += indentSize;\n const m = ws.match(/ +$/);\n\n if (m) {\n wsStart = ws.slice(0, -m[0].length);\n return m[0];\n } else {\n wsStart = ws;\n return '';\n }\n });\n if (wsEnd) wsEnd = wsEnd.replace(/\\n+(?!\\n|$)/g, `$&${indent}`);\n if (wsStart) wsStart = wsStart.replace(/\\n+/g, `$&${indent}`);\n\n if (comment) {\n header += ' #' + comment.replace(/ ?[\\r\\n]+/g, ' ');\n if (onComment) onComment();\n }\n\n if (!value) return `${header}${indentSize}\\n${indent}${wsEnd}`;\n\n if (literal) {\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `${header}\\n${indent}${wsStart}${value}${wsEnd}`;\n }\n\n value = value.replace(/\\n+/g, '\\n$&').replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ ind.line ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n const body = foldFlowLines(`${wsStart}${value}${wsEnd}`, indent, FOLD_BLOCK, strOptions.fold);\n return `${header}\\n${indent}${body}`;\n}\n\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const {\n comment,\n type,\n value\n } = item;\n const {\n actualString,\n implicitKey,\n indent,\n inFlow\n } = ctx;\n\n if (implicitKey && /[\\n[\\]{},]/.test(value) || inFlow && /[[\\]{},]/.test(value)) {\n return doubleQuotedString(value, ctx);\n }\n\n if (!value || /^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - empty string, '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || value.indexOf('\\n') === -1 ? value.indexOf('\"') !== -1 && value.indexOf(\"'\") === -1 ? singleQuotedString(value, ctx) : doubleQuotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep);\n }\n\n if (!implicitKey && !inFlow && type !== PlainValue.Type.PLAIN && value.indexOf('\\n') !== -1) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n\n if (indent === '' && containsDocumentMarker(value)) {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n\n const str = value.replace(/\\n+/g, `$&\\n${indent}`); // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n\n if (actualString) {\n const {\n tags\n } = ctx.doc.schema;\n const resolved = resolveScalar(str, tags, tags.scalarFallback).value;\n if (typeof resolved !== 'string') return doubleQuotedString(value, ctx);\n }\n\n const body = implicitKey ? str : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx));\n\n if (comment && !inFlow && (body.indexOf('\\n') !== -1 || comment.indexOf('\\n') !== -1)) {\n if (onComment) onComment();\n return addCommentBefore(body, indent, comment);\n }\n\n return body;\n}\n\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const {\n defaultType\n } = strOptions;\n const {\n implicitKey,\n inFlow\n } = ctx;\n let {\n type,\n value\n } = item;\n\n if (typeof value !== 'string') {\n value = String(value);\n item = Object.assign({}, item, {\n value\n });\n }\n\n const _stringify = _type => {\n switch (_type) {\n case PlainValue.Type.BLOCK_FOLDED:\n case PlainValue.Type.BLOCK_LITERAL:\n return blockString(item, ctx, onComment, onChompKeep);\n\n case PlainValue.Type.QUOTE_DOUBLE:\n return doubleQuotedString(value, ctx);\n\n case PlainValue.Type.QUOTE_SINGLE:\n return singleQuotedString(value, ctx);\n\n case PlainValue.Type.PLAIN:\n return plainString(item, ctx, onComment, onChompKeep);\n\n default:\n return null;\n }\n };\n\n if (type !== PlainValue.Type.QUOTE_DOUBLE && /[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f]/.test(value)) {\n // force double quotes on control characters\n type = PlainValue.Type.QUOTE_DOUBLE;\n } else if ((implicitKey || inFlow) && (type === PlainValue.Type.BLOCK_FOLDED || type === PlainValue.Type.BLOCK_LITERAL)) {\n // should not happen; blocks are not valid inside flow containers\n type = PlainValue.Type.QUOTE_DOUBLE;\n }\n\n let res = _stringify(type);\n\n if (res === null) {\n res = _stringify(defaultType);\n if (res === null) throw new Error(`Unsupported default string type ${defaultType}`);\n }\n\n return res;\n}\n\nfunction stringifyNumber({\n format,\n minFractionDigits,\n tag,\n value\n}) {\n if (typeof value === 'bigint') return String(value);\n if (!isFinite(value)) return isNaN(value) ? '.nan' : value < 0 ? '-.inf' : '.inf';\n let n = JSON.stringify(value);\n\n if (!format && minFractionDigits && (!tag || tag === 'tag:yaml.org,2002:float') && /^\\d/.test(n)) {\n let i = n.indexOf('.');\n\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n\n let d = minFractionDigits - (n.length - i - 1);\n\n while (d-- > 0) n += '0';\n }\n\n return n;\n}\n\nfunction checkFlowCollectionEnd(errors, cst) {\n let char, name;\n\n switch (cst.type) {\n case PlainValue.Type.FLOW_MAP:\n char = '}';\n name = 'flow map';\n break;\n\n case PlainValue.Type.FLOW_SEQ:\n char = ']';\n name = 'flow sequence';\n break;\n\n default:\n errors.push(new PlainValue.YAMLSemanticError(cst, 'Not a flow collection!?'));\n return;\n }\n\n let lastItem;\n\n for (let i = cst.items.length - 1; i >= 0; --i) {\n const item = cst.items[i];\n\n if (!item || item.type !== PlainValue.Type.COMMENT) {\n lastItem = item;\n break;\n }\n }\n\n if (lastItem && lastItem.char !== char) {\n const msg = `Expected ${name} to end with ${char}`;\n let err;\n\n if (typeof lastItem.offset === 'number') {\n err = new PlainValue.YAMLSemanticError(cst, msg);\n err.offset = lastItem.offset + 1;\n } else {\n err = new PlainValue.YAMLSemanticError(lastItem, msg);\n if (lastItem.range && lastItem.range.end) err.offset = lastItem.range.end - lastItem.range.start;\n }\n\n errors.push(err);\n }\n}\nfunction checkFlowCommentSpace(errors, comment) {\n const prev = comment.context.src[comment.range.start - 1];\n\n if (prev !== '\\n' && prev !== '\\t' && prev !== ' ') {\n const msg = 'Comments must be separated from other tokens by white space characters';\n errors.push(new PlainValue.YAMLSemanticError(comment, msg));\n }\n}\nfunction getLongKeyError(source, key) {\n const sk = String(key);\n const k = sk.substr(0, 8) + '...' + sk.substr(-8);\n return new PlainValue.YAMLSemanticError(source, `The \"${k}\" key is too long`);\n}\nfunction resolveComments(collection, comments) {\n for (const {\n afterKey,\n before,\n comment\n } of comments) {\n let item = collection.items[before];\n\n if (!item) {\n if (comment !== undefined) {\n if (collection.comment) collection.comment += '\\n' + comment;else collection.comment = comment;\n }\n } else {\n if (afterKey && item.value) item = item.value;\n\n if (comment === undefined) {\n if (afterKey || !item.commentBefore) item.spaceBefore = true;\n } else {\n if (item.commentBefore) item.commentBefore += '\\n' + comment;else item.commentBefore = comment;\n }\n }\n }\n}\n\n// on error, will return { str: string, errors: Error[] }\nfunction resolveString(doc, node) {\n const res = node.strValue;\n if (!res) return '';\n if (typeof res === 'string') return res;\n res.errors.forEach(error => {\n if (!error.source) error.source = node;\n doc.errors.push(error);\n });\n return res.str;\n}\n\nfunction resolveTagHandle(doc, node) {\n const {\n handle,\n suffix\n } = node.tag;\n let prefix = doc.tagPrefixes.find(p => p.handle === handle);\n\n if (!prefix) {\n const dtp = doc.getDefaults().tagPrefixes;\n if (dtp) prefix = dtp.find(p => p.handle === handle);\n if (!prefix) throw new PlainValue.YAMLSemanticError(node, `The ${handle} tag handle is non-default and was not declared.`);\n }\n\n if (!suffix) throw new PlainValue.YAMLSemanticError(node, `The ${handle} tag has no suffix.`);\n\n if (handle === '!' && (doc.version || doc.options.version) === '1.0') {\n if (suffix[0] === '^') {\n doc.warnings.push(new PlainValue.YAMLWarning(node, 'YAML 1.0 ^ tag expansion is not supported'));\n return suffix;\n }\n\n if (/[:/]/.test(suffix)) {\n // word/foo -> tag:word.yaml.org,2002:foo\n const vocab = suffix.match(/^([a-z0-9-]+)\\/(.*)/i);\n return vocab ? `tag:${vocab[1]}.yaml.org,2002:${vocab[2]}` : `tag:${suffix}`;\n }\n }\n\n return prefix.prefix + decodeURIComponent(suffix);\n}\n\nfunction resolveTagName(doc, node) {\n const {\n tag,\n type\n } = node;\n let nonSpecific = false;\n\n if (tag) {\n const {\n handle,\n suffix,\n verbatim\n } = tag;\n\n if (verbatim) {\n if (verbatim !== '!' && verbatim !== '!!') return verbatim;\n const msg = `Verbatim tags aren't resolved, so ${verbatim} is invalid.`;\n doc.errors.push(new PlainValue.YAMLSemanticError(node, msg));\n } else if (handle === '!' && !suffix) {\n nonSpecific = true;\n } else {\n try {\n return resolveTagHandle(doc, node);\n } catch (error) {\n doc.errors.push(error);\n }\n }\n }\n\n switch (type) {\n case PlainValue.Type.BLOCK_FOLDED:\n case PlainValue.Type.BLOCK_LITERAL:\n case PlainValue.Type.QUOTE_DOUBLE:\n case PlainValue.Type.QUOTE_SINGLE:\n return PlainValue.defaultTags.STR;\n\n case PlainValue.Type.FLOW_MAP:\n case PlainValue.Type.MAP:\n return PlainValue.defaultTags.MAP;\n\n case PlainValue.Type.FLOW_SEQ:\n case PlainValue.Type.SEQ:\n return PlainValue.defaultTags.SEQ;\n\n case PlainValue.Type.PLAIN:\n return nonSpecific ? PlainValue.defaultTags.STR : null;\n\n default:\n return null;\n }\n}\n\nfunction resolveByTagName(doc, node, tagName) {\n const {\n tags\n } = doc.schema;\n const matchWithTest = [];\n\n for (const tag of tags) {\n if (tag.tag === tagName) {\n if (tag.test) matchWithTest.push(tag);else {\n const res = tag.resolve(doc, node);\n return res instanceof Collection ? res : new Scalar(res);\n }\n }\n }\n\n const str = resolveString(doc, node);\n if (typeof str === 'string' && matchWithTest.length > 0) return resolveScalar(str, matchWithTest, tags.scalarFallback);\n return null;\n}\n\nfunction getFallbackTagName({\n type\n}) {\n switch (type) {\n case PlainValue.Type.FLOW_MAP:\n case PlainValue.Type.MAP:\n return PlainValue.defaultTags.MAP;\n\n case PlainValue.Type.FLOW_SEQ:\n case PlainValue.Type.SEQ:\n return PlainValue.defaultTags.SEQ;\n\n default:\n return PlainValue.defaultTags.STR;\n }\n}\n\nfunction resolveTag(doc, node, tagName) {\n try {\n const res = resolveByTagName(doc, node, tagName);\n\n if (res) {\n if (tagName && node.tag) res.tag = tagName;\n return res;\n }\n } catch (error) {\n /* istanbul ignore if */\n if (!error.source) error.source = node;\n doc.errors.push(error);\n return null;\n }\n\n try {\n const fallback = getFallbackTagName(node);\n if (!fallback) throw new Error(`The tag ${tagName} is unavailable`);\n const msg = `The tag ${tagName} is unavailable, falling back to ${fallback}`;\n doc.warnings.push(new PlainValue.YAMLWarning(node, msg));\n const res = resolveByTagName(doc, node, fallback);\n res.tag = tagName;\n return res;\n } catch (error) {\n const refError = new PlainValue.YAMLReferenceError(node, error.message);\n refError.stack = error.stack;\n doc.errors.push(refError);\n return null;\n }\n}\n\nconst isCollectionItem = node => {\n if (!node) return false;\n const {\n type\n } = node;\n return type === PlainValue.Type.MAP_KEY || type === PlainValue.Type.MAP_VALUE || type === PlainValue.Type.SEQ_ITEM;\n};\n\nfunction resolveNodeProps(errors, node) {\n const comments = {\n before: [],\n after: []\n };\n let hasAnchor = false;\n let hasTag = false;\n const props = isCollectionItem(node.context.parent) ? node.context.parent.props.concat(node.props) : node.props;\n\n for (const {\n start,\n end\n } of props) {\n switch (node.context.src[start]) {\n case PlainValue.Char.COMMENT:\n {\n if (!node.commentHasRequiredWhitespace(start)) {\n const msg = 'Comments must be separated from other tokens by white space characters';\n errors.push(new PlainValue.YAMLSemanticError(node, msg));\n }\n\n const {\n header,\n valueRange\n } = node;\n const cc = valueRange && (start > valueRange.start || header && start > header.start) ? comments.after : comments.before;\n cc.push(node.context.src.slice(start + 1, end));\n break;\n }\n // Actual anchor & tag resolution is handled by schema, here we just complain\n\n case PlainValue.Char.ANCHOR:\n if (hasAnchor) {\n const msg = 'A node can have at most one anchor';\n errors.push(new PlainValue.YAMLSemanticError(node, msg));\n }\n\n hasAnchor = true;\n break;\n\n case PlainValue.Char.TAG:\n if (hasTag) {\n const msg = 'A node can have at most one tag';\n errors.push(new PlainValue.YAMLSemanticError(node, msg));\n }\n\n hasTag = true;\n break;\n }\n }\n\n return {\n comments,\n hasAnchor,\n hasTag\n };\n}\n\nfunction resolveNodeValue(doc, node) {\n const {\n anchors,\n errors,\n schema\n } = doc;\n\n if (node.type === PlainValue.Type.ALIAS) {\n const name = node.rawValue;\n const src = anchors.getNode(name);\n\n if (!src) {\n const msg = `Aliased anchor not found: ${name}`;\n errors.push(new PlainValue.YAMLReferenceError(node, msg));\n return null;\n } // Lazy resolution for circular references\n\n\n const res = new Alias(src);\n\n anchors._cstAliases.push(res);\n\n return res;\n }\n\n const tagName = resolveTagName(doc, node);\n if (tagName) return resolveTag(doc, node, tagName);\n\n if (node.type !== PlainValue.Type.PLAIN) {\n const msg = `Failed to resolve ${node.type} node here`;\n errors.push(new PlainValue.YAMLSyntaxError(node, msg));\n return null;\n }\n\n try {\n const str = resolveString(doc, node);\n return resolveScalar(str, schema.tags, schema.tags.scalarFallback);\n } catch (error) {\n if (!error.source) error.source = node;\n errors.push(error);\n return null;\n }\n} // sets node.resolved on success\n\n\nfunction resolveNode(doc, node) {\n if (!node) return null;\n if (node.error) doc.errors.push(node.error);\n const {\n comments,\n hasAnchor,\n hasTag\n } = resolveNodeProps(doc.errors, node);\n\n if (hasAnchor) {\n const {\n anchors\n } = doc;\n const name = node.anchor;\n const prev = anchors.getNode(name); // At this point, aliases for any preceding node with the same anchor\n // name have already been resolved, so it may safely be renamed.\n\n if (prev) anchors.map[anchors.newName(name)] = prev; // During parsing, we need to store the CST node in anchors.map as\n // anchors need to be available during resolution to allow for\n // circular references.\n\n anchors.map[name] = node;\n }\n\n if (node.type === PlainValue.Type.ALIAS && (hasAnchor || hasTag)) {\n const msg = 'An alias node must not specify any properties';\n doc.errors.push(new PlainValue.YAMLSemanticError(node, msg));\n }\n\n const res = resolveNodeValue(doc, node);\n\n if (res) {\n res.range = [node.range.start, node.range.end];\n if (doc.options.keepCstNodes) res.cstNode = node;\n if (doc.options.keepNodeTypes) res.type = node.type;\n const cb = comments.before.join('\\n');\n\n if (cb) {\n res.commentBefore = res.commentBefore ? `${res.commentBefore}\\n${cb}` : cb;\n }\n\n const ca = comments.after.join('\\n');\n if (ca) res.comment = res.comment ? `${res.comment}\\n${ca}` : ca;\n }\n\n return node.resolved = res;\n}\n\nfunction resolveMap(doc, cst) {\n if (cst.type !== PlainValue.Type.MAP && cst.type !== PlainValue.Type.FLOW_MAP) {\n const msg = `A ${cst.type} node cannot be resolved as a mapping`;\n doc.errors.push(new PlainValue.YAMLSyntaxError(cst, msg));\n return null;\n }\n\n const {\n comments,\n items\n } = cst.type === PlainValue.Type.FLOW_MAP ? resolveFlowMapItems(doc, cst) : resolveBlockMapItems(doc, cst);\n const map = new YAMLMap();\n map.items = items;\n resolveComments(map, comments);\n let hasCollectionKey = false;\n\n for (let i = 0; i < items.length; ++i) {\n const {\n key: iKey\n } = items[i];\n if (iKey instanceof Collection) hasCollectionKey = true;\n\n if (doc.schema.merge && iKey && iKey.value === MERGE_KEY) {\n items[i] = new Merge(items[i]);\n const sources = items[i].value.items;\n let error = null;\n sources.some(node => {\n if (node instanceof Alias) {\n // During parsing, alias sources are CST nodes; to account for\n // circular references their resolved values can't be used here.\n const {\n type\n } = node.source;\n if (type === PlainValue.Type.MAP || type === PlainValue.Type.FLOW_MAP) return false;\n return error = 'Merge nodes aliases can only point to maps';\n }\n\n return error = 'Merge nodes can only have Alias nodes as values';\n });\n if (error) doc.errors.push(new PlainValue.YAMLSemanticError(cst, error));\n } else {\n for (let j = i + 1; j < items.length; ++j) {\n const {\n key: jKey\n } = items[j];\n\n if (iKey === jKey || iKey && jKey && Object.prototype.hasOwnProperty.call(iKey, 'value') && iKey.value === jKey.value) {\n const msg = `Map keys must be unique; \"${iKey}\" is repeated`;\n doc.errors.push(new PlainValue.YAMLSemanticError(cst, msg));\n break;\n }\n }\n }\n }\n\n if (hasCollectionKey && !doc.options.mapAsMap) {\n const warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.';\n doc.warnings.push(new PlainValue.YAMLWarning(cst, warn));\n }\n\n cst.resolved = map;\n return map;\n}\n\nconst valueHasPairComment = ({\n context: {\n lineStart,\n node,\n src\n },\n props\n}) => {\n if (props.length === 0) return false;\n const {\n start\n } = props[0];\n if (node && start > node.valueRange.start) return false;\n if (src[start] !== PlainValue.Char.COMMENT) return false;\n\n for (let i = lineStart; i < start; ++i) if (src[i] === '\\n') return false;\n\n return true;\n};\n\nfunction resolvePairComment(item, pair) {\n if (!valueHasPairComment(item)) return;\n const comment = item.getPropValue(0, PlainValue.Char.COMMENT, true);\n let found = false;\n const cb = pair.value.commentBefore;\n\n if (cb && cb.startsWith(comment)) {\n pair.value.commentBefore = cb.substr(comment.length + 1);\n found = true;\n } else {\n const cc = pair.value.comment;\n\n if (!item.node && cc && cc.startsWith(comment)) {\n pair.value.comment = cc.substr(comment.length + 1);\n found = true;\n }\n }\n\n if (found) pair.comment = comment;\n}\n\nfunction resolveBlockMapItems(doc, cst) {\n const comments = [];\n const items = [];\n let key = undefined;\n let keyStart = null;\n\n for (let i = 0; i < cst.items.length; ++i) {\n const item = cst.items[i];\n\n switch (item.type) {\n case PlainValue.Type.BLANK_LINE:\n comments.push({\n afterKey: !!key,\n before: items.length\n });\n break;\n\n case PlainValue.Type.COMMENT:\n comments.push({\n afterKey: !!key,\n before: items.length,\n comment: item.comment\n });\n break;\n\n case PlainValue.Type.MAP_KEY:\n if (key !== undefined) items.push(new Pair(key));\n if (item.error) doc.errors.push(item.error);\n key = resolveNode(doc, item.node);\n keyStart = null;\n break;\n\n case PlainValue.Type.MAP_VALUE:\n {\n if (key === undefined) key = null;\n if (item.error) doc.errors.push(item.error);\n\n if (!item.context.atLineStart && item.node && item.node.type === PlainValue.Type.MAP && !item.node.context.atLineStart) {\n const msg = 'Nested mappings are not allowed in compact mappings';\n doc.errors.push(new PlainValue.YAMLSemanticError(item.node, msg));\n }\n\n let valueNode = item.node;\n\n if (!valueNode && item.props.length > 0) {\n // Comments on an empty mapping value need to be preserved, so we\n // need to construct a minimal empty node here to use instead of the\n // missing `item.node`. -- eemeli/yaml#19\n valueNode = new PlainValue.PlainValue(PlainValue.Type.PLAIN, []);\n valueNode.context = {\n parent: item,\n src: item.context.src\n };\n const pos = item.range.start + 1;\n valueNode.range = {\n start: pos,\n end: pos\n };\n valueNode.valueRange = {\n start: pos,\n end: pos\n };\n\n if (typeof item.range.origStart === 'number') {\n const origPos = item.range.origStart + 1;\n valueNode.range.origStart = valueNode.range.origEnd = origPos;\n valueNode.valueRange.origStart = valueNode.valueRange.origEnd = origPos;\n }\n }\n\n const pair = new Pair(key, resolveNode(doc, valueNode));\n resolvePairComment(item, pair);\n items.push(pair);\n\n if (key && typeof keyStart === 'number') {\n if (item.range.start > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key));\n }\n\n key = undefined;\n keyStart = null;\n }\n break;\n\n default:\n if (key !== undefined) items.push(new Pair(key));\n key = resolveNode(doc, item);\n keyStart = item.range.start;\n if (item.error) doc.errors.push(item.error);\n\n next: for (let j = i + 1;; ++j) {\n const nextItem = cst.items[j];\n\n switch (nextItem && nextItem.type) {\n case PlainValue.Type.BLANK_LINE:\n case PlainValue.Type.COMMENT:\n continue next;\n\n case PlainValue.Type.MAP_VALUE:\n break next;\n\n default:\n {\n const msg = 'Implicit map keys need to be followed by map values';\n doc.errors.push(new PlainValue.YAMLSemanticError(item, msg));\n break next;\n }\n }\n }\n\n if (item.valueRangeContainsNewline) {\n const msg = 'Implicit map keys need to be on a single line';\n doc.errors.push(new PlainValue.YAMLSemanticError(item, msg));\n }\n\n }\n }\n\n if (key !== undefined) items.push(new Pair(key));\n return {\n comments,\n items\n };\n}\n\nfunction resolveFlowMapItems(doc, cst) {\n const comments = [];\n const items = [];\n let key = undefined;\n let explicitKey = false;\n let next = '{';\n\n for (let i = 0; i < cst.items.length; ++i) {\n const item = cst.items[i];\n\n if (typeof item.char === 'string') {\n const {\n char,\n offset\n } = item;\n\n if (char === '?' && key === undefined && !explicitKey) {\n explicitKey = true;\n next = ':';\n continue;\n }\n\n if (char === ':') {\n if (key === undefined) key = null;\n\n if (next === ':') {\n next = ',';\n continue;\n }\n } else {\n if (explicitKey) {\n if (key === undefined && char !== ',') key = null;\n explicitKey = false;\n }\n\n if (key !== undefined) {\n items.push(new Pair(key));\n key = undefined;\n\n if (char === ',') {\n next = ':';\n continue;\n }\n }\n }\n\n if (char === '}') {\n if (i === cst.items.length - 1) continue;\n } else if (char === next) {\n next = ':';\n continue;\n }\n\n const msg = `Flow map contains an unexpected ${char}`;\n const err = new PlainValue.YAMLSyntaxError(cst, msg);\n err.offset = offset;\n doc.errors.push(err);\n } else if (item.type === PlainValue.Type.BLANK_LINE) {\n comments.push({\n afterKey: !!key,\n before: items.length\n });\n } else if (item.type === PlainValue.Type.COMMENT) {\n checkFlowCommentSpace(doc.errors, item);\n comments.push({\n afterKey: !!key,\n before: items.length,\n comment: item.comment\n });\n } else if (key === undefined) {\n if (next === ',') doc.errors.push(new PlainValue.YAMLSemanticError(item, 'Separator , missing in flow map'));\n key = resolveNode(doc, item);\n } else {\n if (next !== ',') doc.errors.push(new PlainValue.YAMLSemanticError(item, 'Indicator : missing in flow map entry'));\n items.push(new Pair(key, resolveNode(doc, item)));\n key = undefined;\n explicitKey = false;\n }\n }\n\n checkFlowCollectionEnd(doc.errors, cst);\n if (key !== undefined) items.push(new Pair(key));\n return {\n comments,\n items\n };\n}\n\nfunction resolveSeq(doc, cst) {\n if (cst.type !== PlainValue.Type.SEQ && cst.type !== PlainValue.Type.FLOW_SEQ) {\n const msg = `A ${cst.type} node cannot be resolved as a sequence`;\n doc.errors.push(new PlainValue.YAMLSyntaxError(cst, msg));\n return null;\n }\n\n const {\n comments,\n items\n } = cst.type === PlainValue.Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst);\n const seq = new YAMLSeq();\n seq.items = items;\n resolveComments(seq, comments);\n\n if (!doc.options.mapAsMap && items.some(it => it instanceof Pair && it.key instanceof Collection)) {\n const warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.';\n doc.warnings.push(new PlainValue.YAMLWarning(cst, warn));\n }\n\n cst.resolved = seq;\n return seq;\n}\n\nfunction resolveBlockSeqItems(doc, cst) {\n const comments = [];\n const items = [];\n\n for (let i = 0; i < cst.items.length; ++i) {\n const item = cst.items[i];\n\n switch (item.type) {\n case PlainValue.Type.BLANK_LINE:\n comments.push({\n before: items.length\n });\n break;\n\n case PlainValue.Type.COMMENT:\n comments.push({\n comment: item.comment,\n before: items.length\n });\n break;\n\n case PlainValue.Type.SEQ_ITEM:\n if (item.error) doc.errors.push(item.error);\n items.push(resolveNode(doc, item.node));\n\n if (item.hasProps) {\n const msg = 'Sequence items cannot have tags or anchors before the - indicator';\n doc.errors.push(new PlainValue.YAMLSemanticError(item, msg));\n }\n\n break;\n\n default:\n if (item.error) doc.errors.push(item.error);\n doc.errors.push(new PlainValue.YAMLSyntaxError(item, `Unexpected ${item.type} node in sequence`));\n }\n }\n\n return {\n comments,\n items\n };\n}\n\nfunction resolveFlowSeqItems(doc, cst) {\n const comments = [];\n const items = [];\n let explicitKey = false;\n let key = undefined;\n let keyStart = null;\n let next = '[';\n let prevItem = null;\n\n for (let i = 0; i < cst.items.length; ++i) {\n const item = cst.items[i];\n\n if (typeof item.char === 'string') {\n const {\n char,\n offset\n } = item;\n\n if (char !== ':' && (explicitKey || key !== undefined)) {\n if (explicitKey && key === undefined) key = next ? items.pop() : null;\n items.push(new Pair(key));\n explicitKey = false;\n key = undefined;\n keyStart = null;\n }\n\n if (char === next) {\n next = null;\n } else if (!next && char === '?') {\n explicitKey = true;\n } else if (next !== '[' && char === ':' && key === undefined) {\n if (next === ',') {\n key = items.pop();\n\n if (key instanceof Pair) {\n const msg = 'Chaining flow sequence pairs is invalid';\n const err = new PlainValue.YAMLSemanticError(cst, msg);\n err.offset = offset;\n doc.errors.push(err);\n }\n\n if (!explicitKey && typeof keyStart === 'number') {\n const keyEnd = item.range ? item.range.start : item.offset;\n if (keyEnd > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key));\n const {\n src\n } = prevItem.context;\n\n for (let i = keyStart; i < keyEnd; ++i) if (src[i] === '\\n') {\n const msg = 'Implicit keys of flow sequence pairs need to be on a single line';\n doc.errors.push(new PlainValue.YAMLSemanticError(prevItem, msg));\n break;\n }\n }\n } else {\n key = null;\n }\n\n keyStart = null;\n explicitKey = false;\n next = null;\n } else if (next === '[' || char !== ']' || i < cst.items.length - 1) {\n const msg = `Flow sequence contains an unexpected ${char}`;\n const err = new PlainValue.YAMLSyntaxError(cst, msg);\n err.offset = offset;\n doc.errors.push(err);\n }\n } else if (item.type === PlainValue.Type.BLANK_LINE) {\n comments.push({\n before: items.length\n });\n } else if (item.type === PlainValue.Type.COMMENT) {\n checkFlowCommentSpace(doc.errors, item);\n comments.push({\n comment: item.comment,\n before: items.length\n });\n } else {\n if (next) {\n const msg = `Expected a ${next} in flow sequence`;\n doc.errors.push(new PlainValue.YAMLSemanticError(item, msg));\n }\n\n const value = resolveNode(doc, item);\n\n if (key === undefined) {\n items.push(value);\n prevItem = item;\n } else {\n items.push(new Pair(key, value));\n key = undefined;\n }\n\n keyStart = item.range.start;\n next = ',';\n }\n }\n\n checkFlowCollectionEnd(doc.errors, cst);\n if (key !== undefined) items.push(new Pair(key));\n return {\n comments,\n items\n };\n}\n\nexports.Alias = Alias;\nexports.Collection = Collection;\nexports.Merge = Merge;\nexports.Node = Node;\nexports.Pair = Pair;\nexports.Scalar = Scalar;\nexports.YAMLMap = YAMLMap;\nexports.YAMLSeq = YAMLSeq;\nexports.addComment = addComment;\nexports.binaryOptions = binaryOptions;\nexports.boolOptions = boolOptions;\nexports.findPair = findPair;\nexports.intOptions = intOptions;\nexports.isEmptyPath = isEmptyPath;\nexports.nullOptions = nullOptions;\nexports.resolveMap = resolveMap;\nexports.resolveNode = resolveNode;\nexports.resolveSeq = resolveSeq;\nexports.resolveString = resolveString;\nexports.strOptions = strOptions;\nexports.stringifyNumber = stringifyNumber;\nexports.stringifyString = stringifyString;\nexports.toJSON = toJSON;\n","'use strict';\n\nvar PlainValue = require('./PlainValue-ec8e588e.js');\nvar resolveSeq = require('./resolveSeq-d03cb037.js');\n\n/* global atob, btoa, Buffer */\nconst binary = {\n identify: value => value instanceof Uint8Array,\n // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve: (doc, node) => {\n const src = resolveSeq.resolveString(doc, node);\n\n if (typeof Buffer === 'function') {\n return Buffer.from(src, 'base64');\n } else if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n\n for (let i = 0; i < str.length; ++i) buffer[i] = str.charCodeAt(i);\n\n return buffer;\n } else {\n const msg = 'This environment does not support reading binary tags; either Buffer or atob is required';\n doc.errors.push(new PlainValue.YAMLReferenceError(node, msg));\n return null;\n }\n },\n options: resolveSeq.binaryOptions,\n stringify: ({\n comment,\n type,\n value\n }, ctx, onComment, onChompKeep) => {\n let src;\n\n if (typeof Buffer === 'function') {\n src = value instanceof Buffer ? value.toString('base64') : Buffer.from(value.buffer).toString('base64');\n } else if (typeof btoa === 'function') {\n let s = '';\n\n for (let i = 0; i < value.length; ++i) s += String.fromCharCode(value[i]);\n\n src = btoa(s);\n } else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n\n if (!type) type = resolveSeq.binaryOptions.defaultType;\n\n if (type === PlainValue.Type.QUOTE_DOUBLE) {\n value = src;\n } else {\n const {\n lineWidth\n } = resolveSeq.binaryOptions;\n const n = Math.ceil(src.length / lineWidth);\n const lines = new Array(n);\n\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = src.substr(o, lineWidth);\n }\n\n value = lines.join(type === PlainValue.Type.BLOCK_LITERAL ? '\\n' : ' ');\n }\n\n return resolveSeq.stringifyString({\n comment,\n type,\n value\n }, ctx, onComment, onChompKeep);\n }\n};\n\nfunction parsePairs(doc, cst) {\n const seq = resolveSeq.resolveSeq(doc, cst);\n\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (item instanceof resolveSeq.Pair) continue;else if (item instanceof resolveSeq.YAMLMap) {\n if (item.items.length > 1) {\n const msg = 'Each pair must have its own sequence indicator';\n throw new PlainValue.YAMLSemanticError(cst, msg);\n }\n\n const pair = item.items[0] || new resolveSeq.Pair();\n if (item.commentBefore) pair.commentBefore = pair.commentBefore ? `${item.commentBefore}\\n${pair.commentBefore}` : item.commentBefore;\n if (item.comment) pair.comment = pair.comment ? `${item.comment}\\n${pair.comment}` : item.comment;\n item = pair;\n }\n seq.items[i] = item instanceof resolveSeq.Pair ? item : new resolveSeq.Pair(item);\n }\n\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const pairs = new resolveSeq.YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n\n for (const it of iterable) {\n let key, value;\n\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n } else throw new TypeError(`Expected [key, value] tuple: ${it}`);\n } else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n } else throw new TypeError(`Expected { key: value } tuple: ${it}`);\n } else {\n key = it;\n }\n\n const pair = schema.createPair(key, value, ctx);\n pairs.items.push(pair);\n }\n\n return pairs;\n}\nconst pairs = {\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: parsePairs,\n createNode: createPairs\n};\n\nclass YAMLOMap extends resolveSeq.YAMLSeq {\n constructor() {\n super();\n\n PlainValue._defineProperty(this, \"add\", resolveSeq.YAMLMap.prototype.add.bind(this));\n\n PlainValue._defineProperty(this, \"delete\", resolveSeq.YAMLMap.prototype.delete.bind(this));\n\n PlainValue._defineProperty(this, \"get\", resolveSeq.YAMLMap.prototype.get.bind(this));\n\n PlainValue._defineProperty(this, \"has\", resolveSeq.YAMLMap.prototype.has.bind(this));\n\n PlainValue._defineProperty(this, \"set\", resolveSeq.YAMLMap.prototype.set.bind(this));\n\n this.tag = YAMLOMap.tag;\n }\n\n toJSON(_, ctx) {\n const map = new Map();\n if (ctx && ctx.onCreate) ctx.onCreate(map);\n\n for (const pair of this.items) {\n let key, value;\n\n if (pair instanceof resolveSeq.Pair) {\n key = resolveSeq.toJSON(pair.key, '', ctx);\n value = resolveSeq.toJSON(pair.value, key, ctx);\n } else {\n key = resolveSeq.toJSON(pair, '', ctx);\n }\n\n if (map.has(key)) throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n\n return map;\n }\n\n}\n\nPlainValue._defineProperty(YAMLOMap, \"tag\", 'tag:yaml.org,2002:omap');\n\nfunction parseOMap(doc, cst) {\n const pairs = parsePairs(doc, cst);\n const seenKeys = [];\n\n for (const {\n key\n } of pairs.items) {\n if (key instanceof resolveSeq.Scalar) {\n if (seenKeys.includes(key.value)) {\n const msg = 'Ordered maps must not include duplicate keys';\n throw new PlainValue.YAMLSemanticError(cst, msg);\n } else {\n seenKeys.push(key.value);\n }\n }\n }\n\n return Object.assign(new YAMLOMap(), pairs);\n}\n\nfunction createOMap(schema, iterable, ctx) {\n const pairs = createPairs(schema, iterable, ctx);\n const omap = new YAMLOMap();\n omap.items = pairs.items;\n return omap;\n}\n\nconst omap = {\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve: parseOMap,\n createNode: createOMap\n};\n\nclass YAMLSet extends resolveSeq.YAMLMap {\n constructor() {\n super();\n this.tag = YAMLSet.tag;\n }\n\n add(key) {\n const pair = key instanceof resolveSeq.Pair ? key : new resolveSeq.Pair(key);\n const prev = resolveSeq.findPair(this.items, pair.key);\n if (!prev) this.items.push(pair);\n }\n\n get(key, keepPair) {\n const pair = resolveSeq.findPair(this.items, key);\n return !keepPair && pair instanceof resolveSeq.Pair ? pair.key instanceof resolveSeq.Scalar ? pair.key.value : pair.key : pair;\n }\n\n set(key, value) {\n if (typeof value !== 'boolean') throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = resolveSeq.findPair(this.items, key);\n\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n } else if (!prev && value) {\n this.items.push(new resolveSeq.Pair(key));\n }\n }\n\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n\n toString(ctx, onComment, onChompKeep) {\n if (!ctx) return JSON.stringify(this);\n if (this.hasAllNullValues()) return super.toString(ctx, onComment, onChompKeep);else throw new Error('Set items must all have null values');\n }\n\n}\n\nPlainValue._defineProperty(YAMLSet, \"tag\", 'tag:yaml.org,2002:set');\n\nfunction parseSet(doc, cst) {\n const map = resolveSeq.resolveMap(doc, cst);\n if (!map.hasAllNullValues()) throw new PlainValue.YAMLSemanticError(cst, 'Set items must all have null values');\n return Object.assign(new YAMLSet(), map);\n}\n\nfunction createSet(schema, iterable, ctx) {\n const set = new YAMLSet();\n\n for (const value of iterable) set.items.push(schema.createPair(value, null, ctx));\n\n return set;\n}\n\nconst set = {\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n resolve: parseSet,\n createNode: createSet\n};\n\nconst parseSexagesimal = (sign, parts) => {\n const n = parts.split(':').reduce((n, p) => n * 60 + Number(p), 0);\n return sign === '-' ? -n : n;\n}; // hhhh:mm:ss.sss\n\n\nconst stringifySexagesimal = ({\n value\n}) => {\n if (isNaN(value) || !isFinite(value)) return resolveSeq.stringifyNumber(value);\n let sign = '';\n\n if (value < 0) {\n sign = '-';\n value = Math.abs(value);\n }\n\n const parts = [value % 60]; // seconds, including ms\n\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n } else {\n value = Math.round((value - parts[0]) / 60);\n parts.unshift(value % 60); // minutes\n\n if (value >= 60) {\n value = Math.round((value - parts[0]) / 60);\n parts.unshift(value); // hours\n }\n }\n\n return sign + parts.map(n => n < 10 ? '0' + String(n) : String(n)).join(':').replace(/000000\\d*$/, '') // % 60 may introduce error\n ;\n};\n\nconst intTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+)$/,\n resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*)$/,\n resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^(?:' + '([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?' + ')$'),\n resolve: (str, year, month, day, hour, minute, second, millisec, tz) => {\n if (millisec) millisec = (millisec + '00').substr(1, 3);\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec || 0);\n\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz[0], tz.slice(1));\n if (Math.abs(d) < 30) d *= 60;\n date -= 60000 * d;\n }\n\n return new Date(date);\n },\n stringify: ({\n value\n }) => value.toISOString().replace(/((T00:00)?:00)?\\.000Z$/, '')\n};\n\n/* global console, process, YAML_SILENCE_DEPRECATION_WARNINGS, YAML_SILENCE_WARNINGS */\nfunction shouldWarn(deprecation) {\n const env = typeof process !== 'undefined' && process.env || {};\n\n if (deprecation) {\n if (typeof YAML_SILENCE_DEPRECATION_WARNINGS !== 'undefined') return !YAML_SILENCE_DEPRECATION_WARNINGS;\n return !env.YAML_SILENCE_DEPRECATION_WARNINGS;\n }\n\n if (typeof YAML_SILENCE_WARNINGS !== 'undefined') return !YAML_SILENCE_WARNINGS;\n return !env.YAML_SILENCE_WARNINGS;\n}\n\nfunction warn(warning, type) {\n if (shouldWarn(false)) {\n const emit = typeof process !== 'undefined' && process.emitWarning; // This will throw in Jest if `warning` is an Error instance due to\n // https://github.com/facebook/jest/issues/2549\n\n if (emit) emit(warning, type);else {\n // eslint-disable-next-line no-console\n console.warn(type ? `${type}: ${warning}` : warning);\n }\n }\n}\nfunction warnFileDeprecation(filename) {\n if (shouldWarn(true)) {\n const path = filename.replace(/.*yaml[/\\\\]/i, '').replace(/\\.js$/, '').replace(/\\\\/g, '/');\n warn(`The endpoint 'yaml/${path}' will be removed in a future release.`, 'DeprecationWarning');\n }\n}\nconst warned = {};\nfunction warnOptionDeprecation(name, alternative) {\n if (!warned[name] && shouldWarn(true)) {\n warned[name] = true;\n let msg = `The option '${name}' will be removed in a future release`;\n msg += alternative ? `, use '${alternative}' instead.` : '.';\n warn(msg, 'DeprecationWarning');\n }\n}\n\nexports.binary = binary;\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.omap = omap;\nexports.pairs = pairs;\nexports.set = set;\nexports.timestamp = timestamp;\nexports.warn = warn;\nexports.warnFileDeprecation = warnFileDeprecation;\nexports.warnOptionDeprecation = warnOptionDeprecation;\n","'use strict';\n\nvar PlainValue = require('./PlainValue-ec8e588e.js');\nvar resolveSeq = require('./resolveSeq-d03cb037.js');\nvar warnings = require('./warnings-1000a372.js');\n\nfunction createMap(schema, obj, ctx) {\n const map = new resolveSeq.YAMLMap(schema);\n\n if (obj instanceof Map) {\n for (const [key, value] of obj) map.items.push(schema.createPair(key, value, ctx));\n } else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj)) map.items.push(schema.createPair(key, obj[key], ctx));\n }\n\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n\n return map;\n}\n\nconst map = {\n createNode: createMap,\n default: true,\n nodeClass: resolveSeq.YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve: resolveSeq.resolveMap\n};\n\nfunction createSeq(schema, obj, ctx) {\n const seq = new resolveSeq.YAMLSeq(schema);\n\n if (obj && obj[Symbol.iterator]) {\n for (const it of obj) {\n const v = schema.createNode(it, ctx.wrapScalars, null, ctx);\n seq.items.push(v);\n }\n }\n\n return seq;\n}\n\nconst seq = {\n createNode: createSeq,\n default: true,\n nodeClass: resolveSeq.YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve: resolveSeq.resolveSeq\n};\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: resolveSeq.resolveString,\n\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({\n actualString: true\n }, ctx);\n return resolveSeq.stringifyString(item, ctx, onComment, onChompKeep);\n },\n\n options: resolveSeq.strOptions\n};\n\nconst failsafe = [map, seq, string];\n\n/* global BigInt */\n\nconst intIdentify$2 = value => typeof value === 'bigint' || Number.isInteger(value);\n\nconst intResolve$1 = (src, part, radix) => resolveSeq.intOptions.asBigInt ? BigInt(src) : parseInt(part, radix);\n\nfunction intStringify$1(node, radix, prefix) {\n const {\n value\n } = node;\n if (intIdentify$2(value) && value >= 0) return prefix + value.toString(radix);\n return resolveSeq.stringifyNumber(node);\n}\n\nconst nullObj = {\n identify: value => value == null,\n createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq.Scalar(null) : null,\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => null,\n options: resolveSeq.nullOptions,\n stringify: () => resolveSeq.nullOptions.nullStr\n};\nconst boolObj = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => str[0] === 't' || str[0] === 'T',\n options: resolveSeq.boolOptions,\n stringify: ({\n value\n }) => value ? resolveSeq.boolOptions.trueStr : resolveSeq.boolOptions.falseStr\n};\nconst octObj = {\n identify: value => intIdentify$2(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o([0-7]+)$/,\n resolve: (str, oct) => intResolve$1(str, oct, 8),\n options: resolveSeq.intOptions,\n stringify: node => intStringify$1(node, 8, '0o')\n};\nconst intObj = {\n identify: intIdentify$2,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: str => intResolve$1(str, str, 10),\n options: resolveSeq.intOptions,\n stringify: resolveSeq.stringifyNumber\n};\nconst hexObj = {\n identify: value => intIdentify$2(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x([0-9a-fA-F]+)$/,\n resolve: (str, hex) => intResolve$1(str, hex, 16),\n options: resolveSeq.intOptions,\n stringify: node => intStringify$1(node, 16, '0x')\n};\nconst nanObj = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.inf|(\\.nan))$/i,\n resolve: (str, nan) => nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,\n stringify: resolveSeq.stringifyNumber\n};\nconst expObj = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify: ({\n value\n }) => Number(value).toExponential()\n};\nconst floatObj = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.([0-9]+)|[0-9]+\\.([0-9]*))$/,\n\n resolve(str, frac1, frac2) {\n const frac = frac1 || frac2;\n const node = new resolveSeq.Scalar(parseFloat(str));\n if (frac && frac[frac.length - 1] === '0') node.minFractionDigits = frac.length;\n return node;\n },\n\n stringify: resolveSeq.stringifyNumber\n};\nconst core = failsafe.concat([nullObj, boolObj, octObj, intObj, hexObj, nanObj, expObj, floatObj]);\n\n/* global BigInt */\n\nconst intIdentify$1 = value => typeof value === 'bigint' || Number.isInteger(value);\n\nconst stringifyJSON = ({\n value\n}) => JSON.stringify(value);\n\nconst json = [map, seq, {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: resolveSeq.resolveString,\n stringify: stringifyJSON\n}, {\n identify: value => value == null,\n createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq.Scalar(null) : null,\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n}, {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true|false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n}, {\n identify: intIdentify$1,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: str => resolveSeq.intOptions.asBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({\n value\n }) => intIdentify$1(value) ? value.toString() : JSON.stringify(value)\n}, {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n}];\n\njson.scalarFallback = str => {\n throw new SyntaxError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n};\n\n/* global BigInt */\n\nconst boolStringify = ({\n value\n}) => value ? resolveSeq.boolOptions.trueStr : resolveSeq.boolOptions.falseStr;\n\nconst intIdentify = value => typeof value === 'bigint' || Number.isInteger(value);\n\nfunction intResolve(sign, src, radix) {\n let str = src.replace(/_/g, '');\n\n if (resolveSeq.intOptions.asBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n\n case 8:\n str = `0o${str}`;\n break;\n\n case 16:\n str = `0x${str}`;\n break;\n }\n\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\n\nfunction intStringify(node, radix, prefix) {\n const {\n value\n } = node;\n\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n\n return resolveSeq.stringifyNumber(node);\n}\n\nconst yaml11 = failsafe.concat([{\n identify: value => value == null,\n createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq.Scalar(null) : null,\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => null,\n options: resolveSeq.nullOptions,\n stringify: () => resolveSeq.nullOptions.nullStr\n}, {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => true,\n options: resolveSeq.boolOptions,\n stringify: boolStringify\n}, {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i,\n resolve: () => false,\n options: resolveSeq.boolOptions,\n stringify: boolStringify\n}, {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^([-+]?)0b([0-1_]+)$/,\n resolve: (str, sign, bin) => intResolve(sign, bin, 2),\n stringify: node => intStringify(node, 2, '0b')\n}, {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^([-+]?)0([0-7_]+)$/,\n resolve: (str, sign, oct) => intResolve(sign, oct, 8),\n stringify: node => intStringify(node, 8, '0')\n}, {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^([-+]?)([0-9][0-9_]*)$/,\n resolve: (str, sign, abs) => intResolve(sign, abs, 10),\n stringify: resolveSeq.stringifyNumber\n}, {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^([-+]?)0x([0-9a-fA-F_]+)$/,\n resolve: (str, sign, hex) => intResolve(sign, hex, 16),\n stringify: node => intStringify(node, 16, '0x')\n}, {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.inf|(\\.nan))$/i,\n resolve: (str, nan) => nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,\n stringify: resolveSeq.stringifyNumber\n}, {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?([0-9][0-9_]*)?(\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str.replace(/_/g, '')),\n stringify: ({\n value\n }) => Number(value).toExponential()\n}, {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.([0-9_]*)$/,\n\n resolve(str, frac) {\n const node = new resolveSeq.Scalar(parseFloat(str.replace(/_/g, '')));\n\n if (frac) {\n const f = frac.replace(/_/g, '');\n if (f[f.length - 1] === '0') node.minFractionDigits = f.length;\n }\n\n return node;\n },\n\n stringify: resolveSeq.stringifyNumber\n}], warnings.binary, warnings.omap, warnings.pairs, warnings.set, warnings.intTime, warnings.floatTime, warnings.timestamp);\n\nconst schemas = {\n core,\n failsafe,\n json,\n yaml11\n};\nconst tags = {\n binary: warnings.binary,\n bool: boolObj,\n float: floatObj,\n floatExp: expObj,\n floatNaN: nanObj,\n floatTime: warnings.floatTime,\n int: intObj,\n intHex: hexObj,\n intOct: octObj,\n intTime: warnings.intTime,\n map,\n null: nullObj,\n omap: warnings.omap,\n pairs: warnings.pairs,\n seq,\n set: warnings.set,\n timestamp: warnings.timestamp\n};\n\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) || match[0];\n if (!tagObj) throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n } // TODO: deprecate/remove class check\n\n\n return tags.find(t => (t.identify && t.identify(value) || t.class && value instanceof t.class) && !t.format);\n}\n\nfunction createNode(value, tagName, ctx) {\n if (value instanceof resolveSeq.Node) return value;\n const {\n defaultPrefix,\n onTagObj,\n prevObjects,\n schema,\n wrapScalars\n } = ctx;\n if (tagName && tagName.startsWith('!!')) tagName = defaultPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n\n if (!tagObj) {\n if (typeof value.toJSON === 'function') value = value.toJSON();\n if (!value || typeof value !== 'object') return wrapScalars ? new resolveSeq.Scalar(value) : value;\n tagObj = value instanceof Map ? map : value[Symbol.iterator] ? seq : map;\n }\n\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n } // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `obj` wrapper allows for circular references to resolve.\n\n\n const obj = {\n value: undefined,\n node: undefined\n };\n\n if (value && typeof value === 'object' && prevObjects) {\n const prev = prevObjects.get(value);\n\n if (prev) {\n const alias = new resolveSeq.Alias(prev); // leaves source dirty; must be cleaned by caller\n\n ctx.aliasNodes.push(alias); // defined along with prevObjects\n\n return alias;\n }\n\n obj.value = value;\n prevObjects.set(value, obj);\n }\n\n obj.node = tagObj.createNode ? tagObj.createNode(ctx.schema, value, ctx) : wrapScalars ? new resolveSeq.Scalar(value) : value;\n if (tagName && obj.node instanceof resolveSeq.Node) obj.node.tag = tagName;\n return obj.node;\n}\n\nfunction getSchemaTags(schemas, knownTags, customTags, schemaId) {\n let tags = schemas[schemaId.replace(/\\W/g, '')]; // 'yaml-1.1' -> 'yaml11'\n\n if (!tags) {\n const keys = Object.keys(schemas).map(key => JSON.stringify(key)).join(', ');\n throw new Error(`Unknown schema \"${schemaId}\"; use one of ${keys}`);\n }\n\n if (Array.isArray(customTags)) {\n for (const tag of customTags) tags = tags.concat(tag);\n } else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n\n for (let i = 0; i < tags.length; ++i) {\n const tag = tags[i];\n\n if (typeof tag === 'string') {\n const tagObj = knownTags[tag];\n\n if (!tagObj) {\n const keys = Object.keys(knownTags).map(key => JSON.stringify(key)).join(', ');\n throw new Error(`Unknown custom tag \"${tag}\"; use one of ${keys}`);\n }\n\n tags[i] = tagObj;\n }\n }\n\n return tags;\n}\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\n\nclass Schema {\n // TODO: remove in v2\n // TODO: remove in v2\n constructor({\n customTags,\n merge,\n schema,\n sortMapEntries,\n tags: deprecatedCustomTags\n }) {\n this.merge = !!merge;\n this.name = schema;\n this.sortMapEntries = sortMapEntries === true ? sortMapEntriesByKey : sortMapEntries || null;\n if (!customTags && deprecatedCustomTags) warnings.warnOptionDeprecation('tags', 'customTags');\n this.tags = getSchemaTags(schemas, tags, customTags || deprecatedCustomTags, schema);\n }\n\n createNode(value, wrapScalars, tagName, ctx) {\n const baseCtx = {\n defaultPrefix: Schema.defaultPrefix,\n schema: this,\n wrapScalars\n };\n const createCtx = ctx ? Object.assign(ctx, baseCtx) : baseCtx;\n return createNode(value, tagName, createCtx);\n }\n\n createPair(key, value, ctx) {\n if (!ctx) ctx = {\n wrapScalars: true\n };\n const k = this.createNode(key, ctx.wrapScalars, null, ctx);\n const v = this.createNode(value, ctx.wrapScalars, null, ctx);\n return new resolveSeq.Pair(k, v);\n }\n\n}\n\nPlainValue._defineProperty(Schema, \"defaultPrefix\", PlainValue.defaultTagPrefix);\n\nPlainValue._defineProperty(Schema, \"defaultTags\", PlainValue.defaultTags);\n\nexports.Schema = Schema;\n","'use strict';\n\nvar PlainValue = require('./PlainValue-ec8e588e.js');\nvar resolveSeq = require('./resolveSeq-d03cb037.js');\nvar Schema = require('./Schema-88e323a7.js');\n\nconst defaultOptions = {\n anchorPrefix: 'a',\n customTags: null,\n indent: 2,\n indentSeq: true,\n keepCstNodes: false,\n keepNodeTypes: true,\n keepBlobsInJSON: true,\n mapAsMap: false,\n maxAliasCount: 100,\n prettyErrors: false,\n // TODO Set true in v2\n simpleKeys: false,\n version: '1.2'\n};\nconst scalarOptions = {\n get binary() {\n return resolveSeq.binaryOptions;\n },\n\n set binary(opt) {\n Object.assign(resolveSeq.binaryOptions, opt);\n },\n\n get bool() {\n return resolveSeq.boolOptions;\n },\n\n set bool(opt) {\n Object.assign(resolveSeq.boolOptions, opt);\n },\n\n get int() {\n return resolveSeq.intOptions;\n },\n\n set int(opt) {\n Object.assign(resolveSeq.intOptions, opt);\n },\n\n get null() {\n return resolveSeq.nullOptions;\n },\n\n set null(opt) {\n Object.assign(resolveSeq.nullOptions, opt);\n },\n\n get str() {\n return resolveSeq.strOptions;\n },\n\n set str(opt) {\n Object.assign(resolveSeq.strOptions, opt);\n }\n\n};\nconst documentOptions = {\n '1.0': {\n schema: 'yaml-1.1',\n merge: true,\n tagPrefixes: [{\n handle: '!',\n prefix: PlainValue.defaultTagPrefix\n }, {\n handle: '!!',\n prefix: 'tag:private.yaml.org,2002:'\n }]\n },\n 1.1: {\n schema: 'yaml-1.1',\n merge: true,\n tagPrefixes: [{\n handle: '!',\n prefix: '!'\n }, {\n handle: '!!',\n prefix: PlainValue.defaultTagPrefix\n }]\n },\n 1.2: {\n schema: 'core',\n merge: false,\n tagPrefixes: [{\n handle: '!',\n prefix: '!'\n }, {\n handle: '!!',\n prefix: PlainValue.defaultTagPrefix\n }]\n }\n};\n\nfunction stringifyTag(doc, tag) {\n if ((doc.version || doc.options.version) === '1.0') {\n const priv = tag.match(/^tag:private\\.yaml\\.org,2002:([^:/]+)$/);\n if (priv) return '!' + priv[1];\n const vocab = tag.match(/^tag:([a-zA-Z0-9-]+)\\.yaml\\.org,2002:(.*)/);\n return vocab ? `!${vocab[1]}/${vocab[2]}` : `!${tag.replace(/^tag:/, '')}`;\n }\n\n let p = doc.tagPrefixes.find(p => tag.indexOf(p.prefix) === 0);\n\n if (!p) {\n const dtp = doc.getDefaults().tagPrefixes;\n p = dtp && dtp.find(p => tag.indexOf(p.prefix) === 0);\n }\n\n if (!p) return tag[0] === '!' ? tag : `!<${tag}>`;\n const suffix = tag.substr(p.prefix.length).replace(/[!,[\\]{}]/g, ch => ({\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n })[ch]);\n return p.handle + suffix;\n}\n\nfunction getTagObject(tags, item) {\n if (item instanceof resolveSeq.Alias) return resolveSeq.Alias;\n\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0) return match.find(t => t.format === item.format) || match[0];\n }\n\n let tagObj, obj;\n\n if (item instanceof resolveSeq.Scalar) {\n obj = item.value; // TODO: deprecate/remove class check\n\n const match = tags.filter(t => t.identify && t.identify(obj) || t.class && obj instanceof t.class);\n tagObj = match.find(t => t.format === item.format) || match.find(t => !t.format);\n } else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n\n if (!tagObj) {\n const name = obj && obj.constructor ? obj.constructor.name : typeof obj;\n throw new Error(`Tag not resolved for ${name} value`);\n }\n\n return tagObj;\n} // needs to be called before value stringifier to allow for circular anchor refs\n\n\nfunction stringifyProps(node, tagObj, {\n anchors,\n doc\n}) {\n const props = [];\n const anchor = doc.anchors.getName(node);\n\n if (anchor) {\n anchors[anchor] = node;\n props.push(`&${anchor}`);\n }\n\n if (node.tag) {\n props.push(stringifyTag(doc, node.tag));\n } else if (!tagObj.default) {\n props.push(stringifyTag(doc, tagObj.tag));\n }\n\n return props.join(' ');\n}\n\nfunction stringify(item, ctx, onComment, onChompKeep) {\n const {\n anchors,\n schema\n } = ctx.doc;\n let tagObj;\n\n if (!(item instanceof resolveSeq.Node)) {\n const createCtx = {\n aliasNodes: [],\n onTagObj: o => tagObj = o,\n prevObjects: new Map()\n };\n item = schema.createNode(item, true, null, createCtx);\n\n for (const alias of createCtx.aliasNodes) {\n alias.source = alias.source.node;\n let name = anchors.getName(alias.source);\n\n if (!name) {\n name = anchors.newName();\n anchors.map[name] = alias.source;\n }\n }\n }\n\n if (item instanceof resolveSeq.Pair) return item.toString(ctx, onComment, onChompKeep);\n if (!tagObj) tagObj = getTagObject(schema.tags, item);\n const props = stringifyProps(item, tagObj, ctx);\n if (props.length > 0) ctx.indentAtStart = (ctx.indentAtStart || 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function' ? tagObj.stringify(item, ctx, onComment, onChompKeep) : item instanceof resolveSeq.Scalar ? resolveSeq.stringifyString(item, ctx, onComment, onChompKeep) : item.toString(ctx, onComment, onChompKeep);\n if (!props) return str;\n return item instanceof resolveSeq.Scalar || str[0] === '{' || str[0] === '[' ? `${props} ${str}` : `${props}\\n${ctx.indent}${str}`;\n}\n\nclass Anchors {\n static validAnchorNode(node) {\n return node instanceof resolveSeq.Scalar || node instanceof resolveSeq.YAMLSeq || node instanceof resolveSeq.YAMLMap;\n }\n\n constructor(prefix) {\n PlainValue._defineProperty(this, \"map\", Object.create(null));\n\n this.prefix = prefix;\n }\n\n createAlias(node, name) {\n this.setAnchor(node, name);\n return new resolveSeq.Alias(node);\n }\n\n createMergePair(...sources) {\n const merge = new resolveSeq.Merge();\n merge.value.items = sources.map(s => {\n if (s instanceof resolveSeq.Alias) {\n if (s.source instanceof resolveSeq.YAMLMap) return s;\n } else if (s instanceof resolveSeq.YAMLMap) {\n return this.createAlias(s);\n }\n\n throw new Error('Merge sources must be Map nodes or their Aliases');\n });\n return merge;\n }\n\n getName(node) {\n const {\n map\n } = this;\n return Object.keys(map).find(a => map[a] === node);\n }\n\n getNames() {\n return Object.keys(this.map);\n }\n\n getNode(name) {\n return this.map[name];\n }\n\n newName(prefix) {\n if (!prefix) prefix = this.prefix;\n const names = Object.keys(this.map);\n\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!names.includes(name)) return name;\n }\n } // During parsing, map & aliases contain CST nodes\n\n\n resolveNodes() {\n const {\n map,\n _cstAliases\n } = this;\n Object.keys(map).forEach(a => {\n map[a] = map[a].resolved;\n });\n\n _cstAliases.forEach(a => {\n a.source = a.source.resolved;\n });\n\n delete this._cstAliases;\n }\n\n setAnchor(node, name) {\n if (node != null && !Anchors.validAnchorNode(node)) {\n throw new Error('Anchors may only be set for Scalar, Seq and Map nodes');\n }\n\n if (name && /[\\x00-\\x19\\s,[\\]{}]/.test(name)) {\n throw new Error('Anchor names must not contain whitespace or control characters');\n }\n\n const {\n map\n } = this;\n const prev = node && Object.keys(map).find(a => map[a] === node);\n\n if (prev) {\n if (!name) {\n return prev;\n } else if (prev !== name) {\n delete map[prev];\n map[name] = node;\n }\n } else {\n if (!name) {\n if (!node) return null;\n name = this.newName();\n }\n\n map[name] = node;\n }\n\n return name;\n }\n\n}\n\nconst visit = (node, tags) => {\n if (node && typeof node === 'object') {\n const {\n tag\n } = node;\n\n if (node instanceof resolveSeq.Collection) {\n if (tag) tags[tag] = true;\n node.items.forEach(n => visit(n, tags));\n } else if (node instanceof resolveSeq.Pair) {\n visit(node.key, tags);\n visit(node.value, tags);\n } else if (node instanceof resolveSeq.Scalar) {\n if (tag) tags[tag] = true;\n }\n }\n\n return tags;\n};\n\nconst listTagNames = node => Object.keys(visit(node, {}));\n\nfunction parseContents(doc, contents) {\n const comments = {\n before: [],\n after: []\n };\n let body = undefined;\n let spaceBefore = false;\n\n for (const node of contents) {\n if (node.valueRange) {\n if (body !== undefined) {\n const msg = 'Document contains trailing content not separated by a ... or --- line';\n doc.errors.push(new PlainValue.YAMLSyntaxError(node, msg));\n break;\n }\n\n const res = resolveSeq.resolveNode(doc, node);\n\n if (spaceBefore) {\n res.spaceBefore = true;\n spaceBefore = false;\n }\n\n body = res;\n } else if (node.comment !== null) {\n const cc = body === undefined ? comments.before : comments.after;\n cc.push(node.comment);\n } else if (node.type === PlainValue.Type.BLANK_LINE) {\n spaceBefore = true;\n\n if (body === undefined && comments.before.length > 0 && !doc.commentBefore) {\n // space-separated comments at start are parsed as document comments\n doc.commentBefore = comments.before.join('\\n');\n comments.before = [];\n }\n }\n }\n\n doc.contents = body || null;\n\n if (!body) {\n doc.comment = comments.before.concat(comments.after).join('\\n') || null;\n } else {\n const cb = comments.before.join('\\n');\n\n if (cb) {\n const cbNode = body instanceof resolveSeq.Collection && body.items[0] ? body.items[0] : body;\n cbNode.commentBefore = cbNode.commentBefore ? `${cb}\\n${cbNode.commentBefore}` : cb;\n }\n\n doc.comment = comments.after.join('\\n') || null;\n }\n}\n\nfunction resolveTagDirective({\n tagPrefixes\n}, directive) {\n const [handle, prefix] = directive.parameters;\n\n if (!handle || !prefix) {\n const msg = 'Insufficient parameters given for %TAG directive';\n throw new PlainValue.YAMLSemanticError(directive, msg);\n }\n\n if (tagPrefixes.some(p => p.handle === handle)) {\n const msg = 'The %TAG directive must only be given at most once per handle in the same document.';\n throw new PlainValue.YAMLSemanticError(directive, msg);\n }\n\n return {\n handle,\n prefix\n };\n}\n\nfunction resolveYamlDirective(doc, directive) {\n let [version] = directive.parameters;\n if (directive.name === 'YAML:1.0') version = '1.0';\n\n if (!version) {\n const msg = 'Insufficient parameters given for %YAML directive';\n throw new PlainValue.YAMLSemanticError(directive, msg);\n }\n\n if (!documentOptions[version]) {\n const v0 = doc.version || doc.options.version;\n const msg = `Document will be parsed as YAML ${v0} rather than YAML ${version}`;\n doc.warnings.push(new PlainValue.YAMLWarning(directive, msg));\n }\n\n return version;\n}\n\nfunction parseDirectives(doc, directives, prevDoc) {\n const directiveComments = [];\n let hasDirectives = false;\n\n for (const directive of directives) {\n const {\n comment,\n name\n } = directive;\n\n switch (name) {\n case 'TAG':\n try {\n doc.tagPrefixes.push(resolveTagDirective(doc, directive));\n } catch (error) {\n doc.errors.push(error);\n }\n\n hasDirectives = true;\n break;\n\n case 'YAML':\n case 'YAML:1.0':\n if (doc.version) {\n const msg = 'The %YAML directive must only be given at most once per document.';\n doc.errors.push(new PlainValue.YAMLSemanticError(directive, msg));\n }\n\n try {\n doc.version = resolveYamlDirective(doc, directive);\n } catch (error) {\n doc.errors.push(error);\n }\n\n hasDirectives = true;\n break;\n\n default:\n if (name) {\n const msg = `YAML only supports %TAG and %YAML directives, and not %${name}`;\n doc.warnings.push(new PlainValue.YAMLWarning(directive, msg));\n }\n\n }\n\n if (comment) directiveComments.push(comment);\n }\n\n if (prevDoc && !hasDirectives && '1.1' === (doc.version || prevDoc.version || doc.options.version)) {\n const copyTagPrefix = ({\n handle,\n prefix\n }) => ({\n handle,\n prefix\n });\n\n doc.tagPrefixes = prevDoc.tagPrefixes.map(copyTagPrefix);\n doc.version = prevDoc.version;\n }\n\n doc.commentBefore = directiveComments.join('\\n') || null;\n}\n\nfunction assertCollection(contents) {\n if (contents instanceof resolveSeq.Collection) return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nclass Document {\n constructor(options) {\n this.anchors = new Anchors(options.anchorPrefix);\n this.commentBefore = null;\n this.comment = null;\n this.contents = null;\n this.directivesEndMarker = null;\n this.errors = [];\n this.options = options;\n this.schema = null;\n this.tagPrefixes = [];\n this.version = null;\n this.warnings = [];\n }\n\n add(value) {\n assertCollection(this.contents);\n return this.contents.add(value);\n }\n\n addIn(path, value) {\n assertCollection(this.contents);\n this.contents.addIn(path, value);\n }\n\n delete(key) {\n assertCollection(this.contents);\n return this.contents.delete(key);\n }\n\n deleteIn(path) {\n if (resolveSeq.isEmptyPath(path)) {\n if (this.contents == null) return false;\n this.contents = null;\n return true;\n }\n\n assertCollection(this.contents);\n return this.contents.deleteIn(path);\n }\n\n getDefaults() {\n return Document.defaults[this.version] || Document.defaults[this.options.version] || {};\n }\n\n get(key, keepScalar) {\n return this.contents instanceof resolveSeq.Collection ? this.contents.get(key, keepScalar) : undefined;\n }\n\n getIn(path, keepScalar) {\n if (resolveSeq.isEmptyPath(path)) return !keepScalar && this.contents instanceof resolveSeq.Scalar ? this.contents.value : this.contents;\n return this.contents instanceof resolveSeq.Collection ? this.contents.getIn(path, keepScalar) : undefined;\n }\n\n has(key) {\n return this.contents instanceof resolveSeq.Collection ? this.contents.has(key) : false;\n }\n\n hasIn(path) {\n if (resolveSeq.isEmptyPath(path)) return this.contents !== undefined;\n return this.contents instanceof resolveSeq.Collection ? this.contents.hasIn(path) : false;\n }\n\n set(key, value) {\n assertCollection(this.contents);\n this.contents.set(key, value);\n }\n\n setIn(path, value) {\n if (resolveSeq.isEmptyPath(path)) this.contents = value;else {\n assertCollection(this.contents);\n this.contents.setIn(path, value);\n }\n }\n\n setSchema(id, customTags) {\n if (!id && !customTags && this.schema) return;\n if (typeof id === 'number') id = id.toFixed(1);\n\n if (id === '1.0' || id === '1.1' || id === '1.2') {\n if (this.version) this.version = id;else this.options.version = id;\n delete this.options.schema;\n } else if (id && typeof id === 'string') {\n this.options.schema = id;\n }\n\n if (Array.isArray(customTags)) this.options.customTags = customTags;\n const opt = Object.assign({}, this.getDefaults(), this.options);\n this.schema = new Schema.Schema(opt);\n }\n\n parse(node, prevDoc) {\n if (this.options.keepCstNodes) this.cstNode = node;\n if (this.options.keepNodeTypes) this.type = 'DOCUMENT';\n const {\n directives = [],\n contents = [],\n directivesEndMarker,\n error,\n valueRange\n } = node;\n\n if (error) {\n if (!error.source) error.source = this;\n this.errors.push(error);\n }\n\n parseDirectives(this, directives, prevDoc);\n if (directivesEndMarker) this.directivesEndMarker = true;\n this.range = valueRange ? [valueRange.start, valueRange.end] : null;\n this.setSchema();\n this.anchors._cstAliases = [];\n parseContents(this, contents);\n this.anchors.resolveNodes();\n\n if (this.options.prettyErrors) {\n for (const error of this.errors) if (error instanceof PlainValue.YAMLError) error.makePretty();\n\n for (const warn of this.warnings) if (warn instanceof PlainValue.YAMLError) warn.makePretty();\n }\n\n return this;\n }\n\n listNonDefaultTags() {\n return listTagNames(this.contents).filter(t => t.indexOf(Schema.Schema.defaultPrefix) !== 0);\n }\n\n setTagPrefix(handle, prefix) {\n if (handle[0] !== '!' || handle[handle.length - 1] !== '!') throw new Error('Handle must start and end with !');\n\n if (prefix) {\n const prev = this.tagPrefixes.find(p => p.handle === handle);\n if (prev) prev.prefix = prefix;else this.tagPrefixes.push({\n handle,\n prefix\n });\n } else {\n this.tagPrefixes = this.tagPrefixes.filter(p => p.handle !== handle);\n }\n }\n\n toJSON(arg, onAnchor) {\n const {\n keepBlobsInJSON,\n mapAsMap,\n maxAliasCount\n } = this.options;\n const keep = keepBlobsInJSON && (typeof arg !== 'string' || !(this.contents instanceof resolveSeq.Scalar));\n const ctx = {\n doc: this,\n indentStep: ' ',\n keep,\n mapAsMap: keep && !!mapAsMap,\n maxAliasCount,\n stringify // Requiring directly in Pair would create circular dependencies\n\n };\n const anchorNames = Object.keys(this.anchors.map);\n if (anchorNames.length > 0) ctx.anchors = new Map(anchorNames.map(name => [this.anchors.map[name], {\n alias: [],\n aliasCount: 0,\n count: 1\n }]));\n const res = resolveSeq.toJSON(this.contents, arg, ctx);\n if (typeof onAnchor === 'function' && ctx.anchors) for (const {\n count,\n res\n } of ctx.anchors.values()) onAnchor(res, count);\n return res;\n }\n\n toString() {\n if (this.errors.length > 0) throw new Error('Document with errors cannot be stringified');\n const indentSize = this.options.indent;\n\n if (!Number.isInteger(indentSize) || indentSize <= 0) {\n const s = JSON.stringify(indentSize);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n\n this.setSchema();\n const lines = [];\n let hasDirectives = false;\n\n if (this.version) {\n let vd = '%YAML 1.2';\n\n if (this.schema.name === 'yaml-1.1') {\n if (this.version === '1.0') vd = '%YAML:1.0';else if (this.version === '1.1') vd = '%YAML 1.1';\n }\n\n lines.push(vd);\n hasDirectives = true;\n }\n\n const tagNames = this.listNonDefaultTags();\n this.tagPrefixes.forEach(({\n handle,\n prefix\n }) => {\n if (tagNames.some(t => t.indexOf(prefix) === 0)) {\n lines.push(`%TAG ${handle} ${prefix}`);\n hasDirectives = true;\n }\n });\n if (hasDirectives || this.directivesEndMarker) lines.push('---');\n\n if (this.commentBefore) {\n if (hasDirectives || !this.directivesEndMarker) lines.unshift('');\n lines.unshift(this.commentBefore.replace(/^/gm, '#'));\n }\n\n const ctx = {\n anchors: Object.create(null),\n doc: this,\n indent: '',\n indentStep: ' '.repeat(indentSize),\n stringify // Requiring directly in nodes would create circular dependencies\n\n };\n let chompKeep = false;\n let contentComment = null;\n\n if (this.contents) {\n if (this.contents instanceof resolveSeq.Node) {\n if (this.contents.spaceBefore && (hasDirectives || this.directivesEndMarker)) lines.push('');\n if (this.contents.commentBefore) lines.push(this.contents.commentBefore.replace(/^/gm, '#')); // top-level block scalars need to be indented if followed by a comment\n\n ctx.forceBlockIndent = !!this.comment;\n contentComment = this.contents.comment;\n }\n\n const onChompKeep = contentComment ? null : () => chompKeep = true;\n const body = stringify(this.contents, ctx, () => contentComment = null, onChompKeep);\n lines.push(resolveSeq.addComment(body, '', contentComment));\n } else if (this.contents !== undefined) {\n lines.push(stringify(this.contents, ctx));\n }\n\n if (this.comment) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') lines.push('');\n lines.push(this.comment.replace(/^/gm, '#'));\n }\n\n return lines.join('\\n') + '\\n';\n }\n\n}\n\nPlainValue._defineProperty(Document, \"defaults\", documentOptions);\n\nexports.Document = Document;\nexports.defaultOptions = defaultOptions;\nexports.scalarOptions = scalarOptions;\n","'use strict';\n\nvar parseCst = require('./parse-cst.js');\nvar Document$1 = require('./Document-9b4560a1.js');\nvar Schema = require('./Schema-88e323a7.js');\nvar PlainValue = require('./PlainValue-ec8e588e.js');\nvar warnings = require('./warnings-1000a372.js');\nrequire('./resolveSeq-d03cb037.js');\n\nfunction createNode(value, wrapScalars = true, tag) {\n if (tag === undefined && typeof wrapScalars === 'string') {\n tag = wrapScalars;\n wrapScalars = true;\n }\n\n const options = Object.assign({}, Document$1.Document.defaults[Document$1.defaultOptions.version], Document$1.defaultOptions);\n const schema = new Schema.Schema(options);\n return schema.createNode(value, wrapScalars, tag);\n}\n\nclass Document extends Document$1.Document {\n constructor(options) {\n super(Object.assign({}, Document$1.defaultOptions, options));\n }\n\n}\n\nfunction parseAllDocuments(src, options) {\n const stream = [];\n let prev;\n\n for (const cstDoc of parseCst.parse(src)) {\n const doc = new Document(options);\n doc.parse(cstDoc, prev);\n stream.push(doc);\n prev = doc;\n }\n\n return stream;\n}\n\nfunction parseDocument(src, options) {\n const cst = parseCst.parse(src);\n const doc = new Document(options).parse(cst[0]);\n\n if (cst.length > 1) {\n const errMsg = 'Source contains multiple documents; please use YAML.parseAllDocuments()';\n doc.errors.unshift(new PlainValue.YAMLSemanticError(cst[1], errMsg));\n }\n\n return doc;\n}\n\nfunction parse(src, options) {\n const doc = parseDocument(src, options);\n doc.warnings.forEach(warning => warnings.warn(warning));\n if (doc.errors.length > 0) throw doc.errors[0];\n return doc.toJSON();\n}\n\nfunction stringify(value, options) {\n const doc = new Document(options);\n doc.contents = value;\n return String(doc);\n}\n\nconst YAML = {\n createNode,\n defaultOptions: Document$1.defaultOptions,\n Document,\n parse,\n parseAllDocuments,\n parseCST: parseCst.parse,\n parseDocument,\n scalarOptions: Document$1.scalarOptions,\n stringify\n};\n\nexports.YAML = YAML;\n","module.exports = require('./dist').YAML\n","'use strict';\nconst path = require('path');\nconst Module = require('module');\nconst fs = require('fs');\n\nconst resolveFrom = (fromDirectory, moduleId, silent) => {\n\tif (typeof fromDirectory !== 'string') {\n\t\tthrow new TypeError(`Expected \\`fromDir\\` to be of type \\`string\\`, got \\`${typeof fromDirectory}\\``);\n\t}\n\n\tif (typeof moduleId !== 'string') {\n\t\tthrow new TypeError(`Expected \\`moduleId\\` to be of type \\`string\\`, got \\`${typeof moduleId}\\``);\n\t}\n\n\ttry {\n\t\tfromDirectory = fs.realpathSync(fromDirectory);\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\tfromDirectory = path.resolve(fromDirectory);\n\t\t} else if (silent) {\n\t\t\treturn;\n\t\t} else {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst fromFile = path.join(fromDirectory, 'noop.js');\n\n\tconst resolveFileName = () => Module._resolveFilename(moduleId, {\n\t\tid: fromFile,\n\t\tfilename: fromFile,\n\t\tpaths: Module._nodeModulePaths(fromDirectory)\n\t});\n\n\tif (silent) {\n\t\ttry {\n\t\t\treturn resolveFileName();\n\t\t} catch (error) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\treturn resolveFileName();\n};\n\nmodule.exports = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId);\nmodule.exports.silent = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId, true);\n","'use strict';\nconst resolveFrom = require('resolve-from');\n\nmodule.exports = (fromDirectory, moduleId) => require(resolveFrom(fromDirectory, moduleId));\n\nmodule.exports.silent = (fromDirectory, moduleId) => {\n\ttry {\n\t\treturn require(resolveFrom(fromDirectory, moduleId));\n\t} catch (_) {}\n};\n","'use strict';\nconst importFrom = require('import-from');\n\nmodule.exports = moduleId => importFrom(process.cwd(), moduleId);\nmodule.exports.silent = moduleId => importFrom.silent(process.cwd(), moduleId);\n","'use strict'\n\nconst req = require('import-cwd')\n\n/**\n * Load Options\n *\n * @private\n * @method options\n *\n * @param {Object} config PostCSS Config\n *\n * @return {Object} options PostCSS Options\n */\nconst options = (config, file) => {\n if (config.parser && typeof config.parser === 'string') {\n try {\n config.parser = req(config.parser)\n } catch (err) {\n throw new Error(`Loading PostCSS Parser failed: ${err.message}\\n\\n(@${file})`)\n }\n }\n\n if (config.syntax && typeof config.syntax === 'string') {\n try {\n config.syntax = req(config.syntax)\n } catch (err) {\n throw new Error(`Loading PostCSS Syntax failed: ${err.message}\\n\\n(@${file})`)\n }\n }\n\n if (config.stringifier && typeof config.stringifier === 'string') {\n try {\n config.stringifier = req(config.stringifier)\n } catch (err) {\n throw new Error(`Loading PostCSS Stringifier failed: ${err.message}\\n\\n(@${file})`)\n }\n }\n\n if (config.plugins) {\n delete config.plugins\n }\n\n return config\n}\n\nmodule.exports = options\n","'use strict'\n\nconst req = require('import-cwd')\n\n/**\n * Plugin Loader\n *\n * @private\n * @method load\n *\n * @param {String} plugin PostCSS Plugin Name\n * @param {Object} options PostCSS Plugin Options\n *\n * @return {Function} PostCSS Plugin\n */\nconst load = (plugin, options, file) => {\n try {\n if (\n options === null ||\n options === undefined ||\n Object.keys(options).length === 0\n ) {\n return req(plugin)\n } else {\n return req(plugin)(options)\n }\n } catch (err) {\n throw new Error(`Loading PostCSS Plugin failed: ${err.message}\\n\\n(@${file})`)\n }\n}\n\n/**\n * Load Plugins\n *\n * @private\n * @method plugins\n *\n * @param {Object} config PostCSS Config Plugins\n *\n * @return {Array} plugins PostCSS Plugins\n */\nconst plugins = (config, file) => {\n let plugins = []\n\n if (Array.isArray(config.plugins)) {\n plugins = config.plugins.filter(Boolean)\n } else {\n plugins = Object.keys(config.plugins)\n .filter((plugin) => {\n return config.plugins[plugin] !== false ? plugin : ''\n })\n .map((plugin) => {\n return load(plugin, config.plugins[plugin], file)\n })\n }\n\n if (plugins.length && plugins.length > 0) {\n plugins.forEach((plugin, i) => {\n if (plugin.default) {\n plugin = plugin.default\n }\n\n if (plugin.postcss === true) {\n plugin = plugin()\n } else if (plugin.postcss) {\n plugin = plugin.postcss\n }\n\n if (\n // eslint-disable-next-line\n !(\n (typeof plugin === 'object' && Array.isArray(plugin.plugins)) ||\n (typeof plugin === 'object' && plugin.postcssPlugin) ||\n (typeof plugin === 'function')\n )\n ) {\n throw new TypeError(`Invalid PostCSS Plugin found at: plugins[${i}]\\n\\n(@${file})`)\n }\n })\n }\n\n return plugins\n}\n\nmodule.exports = plugins\n","'use strict'\n\nconst resolve = require('path').resolve\n\nconst config = require('lilconfig')\nconst yaml = require('yaml')\n\nconst loadOptions = require('./options.js')\nconst loadPlugins = require('./plugins.js')\n\n/* istanbul ignore next */\nconst interopRequireDefault = (obj) => obj && obj.__esModule ? obj : { default: obj }\n\n/**\n * Process the result from cosmiconfig\n *\n * @param {Object} ctx Config Context\n * @param {Object} result Cosmiconfig result\n *\n * @return {Object} PostCSS Config\n */\nconst processResult = (ctx, result) => {\n const file = result.filepath || ''\n let config = interopRequireDefault(result.config).default || {}\n\n if (typeof config === 'function') {\n config = config(ctx)\n } else {\n config = Object.assign({}, config, ctx)\n }\n\n if (!config.plugins) {\n config.plugins = []\n }\n\n return {\n plugins: loadPlugins(config, file),\n options: loadOptions(config, file),\n file: file\n }\n}\n\n/**\n * Builds the Config Context\n *\n * @param {Object} ctx Config Context\n *\n * @return {Object} Config Context\n */\nconst createContext = (ctx) => {\n /**\n * @type {Object}\n *\n * @prop {String} cwd=process.cwd() Config search start location\n * @prop {String} env=process.env.NODE_ENV Config Enviroment, will be set to `development` by `postcss-load-config` if `process.env.NODE_ENV` is `undefined`\n */\n ctx = Object.assign({\n cwd: process.cwd(),\n env: process.env.NODE_ENV\n }, ctx)\n\n if (!ctx.env) {\n process.env.NODE_ENV = 'development'\n }\n\n return ctx\n}\n\nconst addTypeScriptLoader = (options = {}, loader) => {\n const moduleName = 'postcss'\n\n return {\n ...options,\n searchPlaces: [\n ...(options.searchPlaces || []),\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.cjs`,\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.cjs`\n ],\n loaders: {\n ...options.loaders,\n '.yaml': (filepath, content) => yaml.parse(content),\n '.yml': (filepath, content) => yaml.parse(content),\n '.ts': loader\n }\n }\n}\n\nconst withTypeScriptLoader = (rcFunc) => {\n return (ctx, path, options) => {\n return rcFunc(ctx, path, addTypeScriptLoader(options, (configFile) => {\n let registerer = { enabled () {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = require('ts-node').register()\n\n return require(configFile)\n } catch (err) {\n if (err.code === 'MODULE_NOT_FOUND') {\n throw new Error(\n `'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${err.message}`\n )\n }\n\n throw err\n } finally {\n registerer.enabled(false)\n }\n }))\n }\n}\n\n/**\n * Load Config\n *\n * @method rc\n *\n * @param {Object} ctx Config Context\n * @param {String} path Config Path\n * @param {Object} options Config Options\n *\n * @return {Promise} config PostCSS Config\n */\nconst rc = withTypeScriptLoader((ctx, path, options) => {\n /**\n * @type {Object} The full Config Context\n */\n ctx = createContext(ctx)\n\n /**\n * @type {String} `process.cwd()`\n */\n path = path ? resolve(path) : process.cwd()\n\n return config.lilconfig('postcss', options)\n .search(path)\n .then((result) => {\n if (!result) {\n throw new Error(`No PostCSS Config found in: ${path}`)\n }\n\n return processResult(ctx, result)\n })\n})\n\nrc.sync = withTypeScriptLoader((ctx, path, options) => {\n /**\n * @type {Object} The full Config Context\n */\n ctx = createContext(ctx)\n\n /**\n * @type {String} `process.cwd()`\n */\n path = path ? resolve(path) : process.cwd()\n\n const result = config.lilconfigSync('postcss', options).search(path)\n\n if (!result) {\n throw new Error(`No PostCSS Config found in: ${path}`)\n }\n\n return processResult(ctx, result)\n})\n\n/**\n * Autoload Config for PostCSS\n *\n * @author Michael Ciniawsky @michael-ciniawsky <michael.ciniawsky@gmail.com>\n * @license MIT\n *\n * @module postcss-load-config\n * @version 2.1.0\n *\n * @requires comsiconfig\n * @requires ./options\n * @requires ./plugins\n */\nmodule.exports = rc\n","import { extname, win32, posix, isAbsolute, resolve } from 'path';\nimport pm from 'picomatch';\n\nconst addExtension = function addExtension(filename, ext = '.js') {\n let result = `${filename}`;\n if (!extname(filename))\n result += ext;\n return result;\n};\n\nclass WalkerBase {constructor() { WalkerBase.prototype.__init.call(this);WalkerBase.prototype.__init2.call(this);WalkerBase.prototype.__init3.call(this);WalkerBase.prototype.__init4.call(this); }\n\t __init() {this.should_skip = false;}\n\t __init2() {this.should_remove = false;}\n\t __init3() {this.replacement = null;}\n\n\t __init4() {this.context = {\n\t\tskip: () => (this.should_skip = true),\n\t\tremove: () => (this.should_remove = true),\n\t\treplace: (node) => (this.replacement = node)\n\t};}\n\n\t replace(parent, prop, index, node) {\n\t\tif (parent) {\n\t\t\tif (index !== null) {\n\t\t\t\tparent[prop][index] = node;\n\t\t\t} else {\n\t\t\t\tparent[prop] = node;\n\t\t\t}\n\t\t}\n\t}\n\n\t remove(parent, prop, index) {\n\t\tif (parent) {\n\t\t\tif (index !== null) {\n\t\t\t\tparent[prop].splice(index, 1);\n\t\t\t} else {\n\t\t\t\tdelete parent[prop];\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass SyncWalkerClass extends WalkerBase {\n\t\n\t\n\n\tconstructor(walker) {\n\t\tsuper();\n\t\tthis.enter = walker.enter;\n\t\tthis.leave = walker.leave;\n\t}\n\n\t visit(\n\t\tnode,\n\t\tparent,\n\t\tenter,\n\t\tleave,\n\t\tprop,\n\t\tindex\n\t) {\n\t\tif (node) {\n\t\t\tif (enter) {\n\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tthis.should_skip = false;\n\t\t\t\tthis.should_remove = false;\n\t\t\t\tthis.replacement = null;\n\n\t\t\t\tenter.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\tif (skipped) return node;\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\n\t\t\tfor (const key in node) {\n\t\t\t\tconst value = (node )[key];\n\n\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\tif (!this.visit(value[i], node, enter, leave, key, i)) {\n\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\tthis.visit(value, node, enter, leave, key, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (leave) {\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tthis.replacement = null;\n\t\t\t\tthis.should_remove = false;\n\n\t\t\t\tleave.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.replacement = _replacement;\n\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\nfunction walk(ast, walker) {\n\tconst instance = new SyncWalkerClass(walker);\n\treturn instance.visit(ast, null, walker.enter, walker.leave);\n}\n\nconst extractors = {\n ArrayPattern(names, param) {\n for (const element of param.elements) {\n if (element)\n extractors[element.type](names, element);\n }\n },\n AssignmentPattern(names, param) {\n extractors[param.left.type](names, param.left);\n },\n Identifier(names, param) {\n names.push(param.name);\n },\n MemberExpression() { },\n ObjectPattern(names, param) {\n for (const prop of param.properties) {\n // @ts-ignore Typescript reports that this is not a valid type\n if (prop.type === 'RestElement') {\n extractors.RestElement(names, prop);\n }\n else {\n extractors[prop.value.type](names, prop.value);\n }\n }\n },\n RestElement(names, param) {\n extractors[param.argument.type](names, param.argument);\n }\n};\nconst extractAssignedNames = function extractAssignedNames(param) {\n const names = [];\n extractors[param.type](names, param);\n return names;\n};\n\nconst blockDeclarations = {\n const: true,\n let: true\n};\nclass Scope {\n constructor(options = {}) {\n this.parent = options.parent;\n this.isBlockScope = !!options.block;\n this.declarations = Object.create(null);\n if (options.params) {\n options.params.forEach((param) => {\n extractAssignedNames(param).forEach((name) => {\n this.declarations[name] = true;\n });\n });\n }\n }\n addDeclaration(node, isBlockDeclaration, isVar) {\n if (!isBlockDeclaration && this.isBlockScope) {\n // it's a `var` or function node, and this\n // is a block scope, so we need to go up\n this.parent.addDeclaration(node, isBlockDeclaration, isVar);\n }\n else if (node.id) {\n extractAssignedNames(node.id).forEach((name) => {\n this.declarations[name] = true;\n });\n }\n }\n contains(name) {\n return this.declarations[name] || (this.parent ? this.parent.contains(name) : false);\n }\n}\nconst attachScopes = function attachScopes(ast, propertyName = 'scope') {\n let scope = new Scope();\n walk(ast, {\n enter(n, parent) {\n const node = n;\n // function foo () {...}\n // class Foo {...}\n if (/(Function|Class)Declaration/.test(node.type)) {\n scope.addDeclaration(node, false, false);\n }\n // var foo = 1\n if (node.type === 'VariableDeclaration') {\n const { kind } = node;\n const isBlockDeclaration = blockDeclarations[kind];\n node.declarations.forEach((declaration) => {\n scope.addDeclaration(declaration, isBlockDeclaration, true);\n });\n }\n let newScope;\n // create new function scope\n if (/Function/.test(node.type)) {\n const func = node;\n newScope = new Scope({\n parent: scope,\n block: false,\n params: func.params\n });\n // named function expressions - the name is considered\n // part of the function's scope\n if (func.type === 'FunctionExpression' && func.id) {\n newScope.addDeclaration(func, false, false);\n }\n }\n // create new for scope\n if (/For(In|Of)?Statement/.test(node.type)) {\n newScope = new Scope({\n parent: scope,\n block: true\n });\n }\n // create new block scope\n if (node.type === 'BlockStatement' && !/Function/.test(parent.type)) {\n newScope = new Scope({\n parent: scope,\n block: true\n });\n }\n // catch clause has its own block scope\n if (node.type === 'CatchClause') {\n newScope = new Scope({\n parent: scope,\n params: node.param ? [node.param] : [],\n block: true\n });\n }\n if (newScope) {\n Object.defineProperty(node, propertyName, {\n value: newScope,\n configurable: true\n });\n scope = newScope;\n }\n },\n leave(n) {\n const node = n;\n if (node[propertyName])\n scope = scope.parent;\n }\n });\n return scope;\n};\n\n// Helper since Typescript can't detect readonly arrays with Array.isArray\nfunction isArray(arg) {\n return Array.isArray(arg);\n}\nfunction ensureArray(thing) {\n if (isArray(thing))\n return thing;\n if (thing == null)\n return [];\n return [thing];\n}\n\nconst normalizePath = function normalizePath(filename) {\n return filename.split(win32.sep).join(posix.sep);\n};\n\nfunction getMatcherString(id, resolutionBase) {\n if (resolutionBase === false || isAbsolute(id) || id.startsWith('*')) {\n return id;\n }\n // resolve('') is valid and will default to process.cwd()\n const basePath = normalizePath(resolve(resolutionBase || ''))\n // escape all possible (posix + win) path characters that might interfere with regex\n .replace(/[-^$*+?.()|[\\]{}]/g, '\\\\$&');\n // Note that we use posix.join because:\n // 1. the basePath has been normalized to use /\n // 2. the incoming glob (id) matcher, also uses /\n // otherwise Node will force backslash (\\) on windows\n return posix.join(basePath, id);\n}\nconst createFilter = function createFilter(include, exclude, options) {\n const resolutionBase = options && options.resolve;\n const getMatcher = (id) => id instanceof RegExp\n ? id\n : {\n test: (what) => {\n // this refactor is a tad overly verbose but makes for easy debugging\n const pattern = getMatcherString(id, resolutionBase);\n const fn = pm(pattern, { dot: true });\n const result = fn(what);\n return result;\n }\n };\n const includeMatchers = ensureArray(include).map(getMatcher);\n const excludeMatchers = ensureArray(exclude).map(getMatcher);\n return function result(id) {\n if (typeof id !== 'string')\n return false;\n if (/\\0/.test(id))\n return false;\n const pathId = normalizePath(id);\n for (let i = 0; i < excludeMatchers.length; ++i) {\n const matcher = excludeMatchers[i];\n if (matcher.test(pathId))\n return false;\n }\n for (let i = 0; i < includeMatchers.length; ++i) {\n const matcher = includeMatchers[i];\n if (matcher.test(pathId))\n return true;\n }\n return !includeMatchers.length;\n };\n};\n\nconst reservedWords = 'break case class catch const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield enum await implements package protected static interface private public';\nconst builtins = 'arguments Infinity NaN undefined null true false eval uneval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Symbol Error EvalError InternalError RangeError ReferenceError SyntaxError TypeError URIError Number Math Date String RegExp Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array Map Set WeakMap WeakSet SIMD ArrayBuffer DataView JSON Promise Generator GeneratorFunction Reflect Proxy Intl';\nconst forbiddenIdentifiers = new Set(`${reservedWords} ${builtins}`.split(' '));\nforbiddenIdentifiers.add('');\nconst makeLegalIdentifier = function makeLegalIdentifier(str) {\n let identifier = str\n .replace(/-(\\w)/g, (_, letter) => letter.toUpperCase())\n .replace(/[^$_a-zA-Z0-9]/g, '_');\n if (/\\d/.test(identifier[0]) || forbiddenIdentifiers.has(identifier)) {\n identifier = `_${identifier}`;\n }\n return identifier || '_';\n};\n\nfunction stringify(obj) {\n return (JSON.stringify(obj) || 'undefined').replace(/[\\u2028\\u2029]/g, (char) => `\\\\u${`000${char.charCodeAt(0).toString(16)}`.slice(-4)}`);\n}\nfunction serializeArray(arr, indent, baseIndent) {\n let output = '[';\n const separator = indent ? `\\n${baseIndent}${indent}` : '';\n for (let i = 0; i < arr.length; i++) {\n const key = arr[i];\n output += `${i > 0 ? ',' : ''}${separator}${serialize(key, indent, baseIndent + indent)}`;\n }\n return `${output}${indent ? `\\n${baseIndent}` : ''}]`;\n}\nfunction serializeObject(obj, indent, baseIndent) {\n let output = '{';\n const separator = indent ? `\\n${baseIndent}${indent}` : '';\n const entries = Object.entries(obj);\n for (let i = 0; i < entries.length; i++) {\n const [key, value] = entries[i];\n const stringKey = makeLegalIdentifier(key) === key ? key : stringify(key);\n output += `${i > 0 ? ',' : ''}${separator}${stringKey}:${indent ? ' ' : ''}${serialize(value, indent, baseIndent + indent)}`;\n }\n return `${output}${indent ? `\\n${baseIndent}` : ''}}`;\n}\nfunction serialize(obj, indent, baseIndent) {\n if (obj === Infinity)\n return 'Infinity';\n if (obj === -Infinity)\n return '-Infinity';\n if (obj === 0 && 1 / obj === -Infinity)\n return '-0';\n if (obj instanceof Date)\n return `new Date(${obj.getTime()})`;\n if (obj instanceof RegExp)\n return obj.toString();\n if (obj !== obj)\n return 'NaN'; // eslint-disable-line no-self-compare\n if (Array.isArray(obj))\n return serializeArray(obj, indent, baseIndent);\n if (obj === null)\n return 'null';\n if (typeof obj === 'object')\n return serializeObject(obj, indent, baseIndent);\n return stringify(obj);\n}\nconst dataToEsm = function dataToEsm(data, options = {}) {\n const t = options.compact ? '' : 'indent' in options ? options.indent : '\\t';\n const _ = options.compact ? '' : ' ';\n const n = options.compact ? '' : '\\n';\n const declarationType = options.preferConst ? 'const' : 'var';\n if (options.namedExports === false ||\n typeof data !== 'object' ||\n Array.isArray(data) ||\n data instanceof Date ||\n data instanceof RegExp ||\n data === null) {\n const code = serialize(data, options.compact ? null : t, '');\n const magic = _ || (/^[{[\\-\\/]/.test(code) ? '' : ' '); // eslint-disable-line no-useless-escape\n return `export default${magic}${code};`;\n }\n let namedExportCode = '';\n const defaultExportRows = [];\n for (const [key, value] of Object.entries(data)) {\n if (key === makeLegalIdentifier(key)) {\n if (options.objectShorthand)\n defaultExportRows.push(key);\n else\n defaultExportRows.push(`${key}:${_}${key}`);\n namedExportCode += `export ${declarationType} ${key}${_}=${_}${serialize(value, options.compact ? null : t, '')};${n}`;\n }\n else {\n defaultExportRows.push(`${stringify(key)}:${_}${serialize(value, options.compact ? null : t, '')}`);\n }\n }\n return `${namedExportCode}export default${_}{${n}${t}${defaultExportRows.join(`,${n}${t}`)}${n}};${n}`;\n};\n\n// TODO: remove this in next major\nvar index = {\n addExtension,\n attachScopes,\n createFilter,\n dataToEsm,\n extractAssignedNames,\n makeLegalIdentifier,\n normalizePath\n};\n\nexport default index;\nexport { addExtension, attachScopes, createFilter, dataToEsm, extractAssignedNames, makeLegalIdentifier, normalizePath };\n","import fs from 'fs'\nimport path from 'path'\nimport glob from 'fast-glob'\nimport {\n // createDebugger,\n isExternalUrl,\n asyncReplace,\n cleanUrl,\n generateCodeFrame,\n isDataUrl,\n isObject,\n normalizePath,\n processSrcSet\n} from '../utils'\nimport { Plugin } from '../plugin'\nimport { ResolvedConfig } from '../config'\nimport postcssrc from 'postcss-load-config'\nimport {\n NormalizedOutputOptions,\n OutputChunk,\n RenderedChunk,\n RollupError,\n SourceMap\n} from 'rollup'\nimport { dataToEsm } from '@rollup/pluginutils'\nimport chalk from 'chalk'\nimport { CLIENT_PUBLIC_PATH } from '../constants'\nimport { ResolveFn, ViteDevServer } from '../'\nimport {\n getAssetFilename,\n assetUrlRE,\n registerAssetToChunk,\n fileToUrl,\n checkPublicFile\n} from './asset'\nimport MagicString from 'magic-string'\nimport * as Postcss from 'postcss'\nimport type Sass from 'sass'\n// We need to disable check of extraneous import which is buggy for stylus,\n// and causes the CI tests fail, see: https://github.com/vitejs/vite/pull/2860\nimport type Stylus from 'stylus' // eslint-disable-line node/no-extraneous-import\nimport type Less from 'less'\nimport { Alias } from 'types/alias'\nimport type { ModuleNode } from '../server/moduleGraph'\nimport { transform, formatMessages } from 'esbuild'\n\n// const debug = createDebugger('vite:css')\n\nexport interface CSSOptions {\n /**\n * https://github.com/css-modules/postcss-modules\n */\n modules?: CSSModulesOptions | false\n preprocessorOptions?: Record<string, any>\n postcss?:\n | string\n | (Postcss.ProcessOptions & {\n plugins?: Postcss.Plugin[]\n })\n}\n\nexport interface CSSModulesOptions {\n getJSON?: (\n cssFileName: string,\n json: Record<string, string>,\n outputFileName: string\n ) => void\n scopeBehaviour?: 'global' | 'local'\n globalModulePaths?: RegExp[]\n generateScopedName?:\n | string\n | ((name: string, filename: string, css: string) => string)\n hashPrefix?: string\n /**\n * default: null\n */\n localsConvention?:\n | 'camelCase'\n | 'camelCaseOnly'\n | 'dashes'\n | 'dashesOnly'\n | null\n}\n\nconst cssLangs = `\\\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\\\?)`\nconst cssLangRE = new RegExp(cssLangs)\nconst cssModuleRE = new RegExp(`\\\\.module${cssLangs}`)\nconst directRequestRE = /(\\?|&)direct\\b/\nconst commonjsProxyRE = /\\?commonjs-proxy/\nconst inlineRE = /(\\?|&)inline\\b/\nconst usedRE = /(\\?|&)used\\b/\n\nconst enum PreprocessLang {\n less = 'less',\n sass = 'sass',\n scss = 'scss',\n styl = 'styl',\n stylus = 'stylus'\n}\nconst enum PureCssLang {\n css = 'css'\n}\ntype CssLang = keyof typeof PureCssLang | keyof typeof PreprocessLang\n\nexport const isCSSRequest = (request: string): boolean =>\n cssLangRE.test(request)\n\nexport const isDirectCSSRequest = (request: string): boolean =>\n cssLangRE.test(request) && directRequestRE.test(request)\n\nexport const isDirectRequest = (request: string): boolean =>\n directRequestRE.test(request)\n\nconst cssModulesCache = new WeakMap<\n ResolvedConfig,\n Map<string, Record<string, string>>\n>()\n\nexport const chunkToEmittedCssFileMap = new WeakMap<\n RenderedChunk,\n Set<string>\n>()\n\nexport const removedPureCssFilesCache = new WeakMap<\n ResolvedConfig,\n Map<string, RenderedChunk>\n>()\n\nconst postcssConfigCache = new WeakMap<\n ResolvedConfig,\n PostCSSConfigResult | null\n>()\n\n/**\n * Plugin applied before user plugins\n */\nexport function cssPlugin(config: ResolvedConfig): Plugin {\n let server: ViteDevServer\n let moduleCache: Map<string, Record<string, string>>\n\n const resolveUrl = config.createResolver({\n preferRelative: true,\n tryIndex: false,\n extensions: []\n })\n const atImportResolvers = createCSSResolvers(config)\n\n return {\n name: 'vite:css',\n\n configureServer(_server) {\n server = _server\n },\n\n buildStart() {\n // Ensure a new cache for every build (i.e. rebuilding in watch mode)\n moduleCache = new Map<string, Record<string, string>>()\n cssModulesCache.set(config, moduleCache)\n\n removedPureCssFilesCache.set(config, new Map<string, RenderedChunk>())\n },\n\n async transform(raw, id) {\n if (!isCSSRequest(id) || commonjsProxyRE.test(id)) {\n return\n }\n\n const urlReplacer: CssUrlReplacer = async (url, importer) => {\n if (checkPublicFile(url, config)) {\n return config.base + url.slice(1)\n }\n const resolved = await resolveUrl(url, importer)\n if (resolved) {\n return fileToUrl(resolved, config, this)\n }\n return url\n }\n\n const {\n code: css,\n modules,\n deps\n } = await compileCSS(\n id,\n raw,\n config,\n urlReplacer,\n atImportResolvers,\n server\n )\n if (modules) {\n moduleCache.set(id, modules)\n }\n\n // track deps for build watch mode\n if (config.command === 'build' && config.build.watch && deps) {\n for (const file of deps) {\n this.addWatchFile(file)\n }\n }\n\n // dev\n if (server) {\n // server only logic for handling CSS @import dependency hmr\n const { moduleGraph } = server\n const thisModule = moduleGraph.getModuleById(id)\n if (thisModule) {\n // CSS modules cannot self-accept since it exports values\n const isSelfAccepting = !modules\n if (deps) {\n // record deps in the module graph so edits to @import css can trigger\n // main import to hot update\n const depModules = new Set<string | ModuleNode>()\n for (const file of deps) {\n depModules.add(\n isCSSRequest(file)\n ? moduleGraph.createFileOnlyEntry(file)\n : await moduleGraph.ensureEntryFromUrl(\n (\n await fileToUrl(file, config, this)\n ).replace(config.base, '/')\n )\n )\n }\n moduleGraph.updateModuleInfo(\n thisModule,\n depModules,\n // The root CSS proxy module is self-accepting and should not\n // have an explicit accept list\n new Set(),\n isSelfAccepting\n )\n for (const file of deps) {\n this.addWatchFile(file)\n }\n } else {\n thisModule.isSelfAccepting = isSelfAccepting\n }\n }\n }\n\n return {\n code: css,\n // TODO CSS source map\n map: { mappings: '' }\n }\n }\n }\n}\n\n/**\n * Plugin applied after user plugins\n */\nexport function cssPostPlugin(config: ResolvedConfig): Plugin {\n // styles initialization in buildStart causes a styling loss in watch\n const styles: Map<string, string> = new Map<string, string>()\n let pureCssChunks: Set<string>\n\n // when there are multiple rollup outputs and extracting CSS, only emit once,\n // since output formats have no effect on the generated CSS.\n let outputToExtractedCSSMap: Map<NormalizedOutputOptions, string>\n let hasEmitted = false\n\n return {\n name: 'vite:css-post',\n\n buildStart() {\n // Ensure new caches for every build (i.e. rebuilding in watch mode)\n pureCssChunks = new Set<string>()\n outputToExtractedCSSMap = new Map<NormalizedOutputOptions, string>()\n hasEmitted = false\n },\n\n async transform(css, id, ssr) {\n if (!isCSSRequest(id) || commonjsProxyRE.test(id)) {\n return\n }\n\n const inlined = inlineRE.test(id)\n const modules = cssModulesCache.get(config)!.get(id)\n const modulesCode =\n modules && dataToEsm(modules, { namedExports: true, preferConst: true })\n\n if (config.command === 'serve') {\n if (isDirectCSSRequest(id)) {\n return css\n } else {\n // server only\n if (ssr) {\n return modulesCode || `export default ${JSON.stringify(css)}`\n }\n if (inlined) {\n return `export default ${JSON.stringify(css)}`\n }\n return [\n `import { updateStyle, removeStyle } from ${JSON.stringify(\n path.posix.join(config.base, CLIENT_PUBLIC_PATH)\n )}`,\n `const id = ${JSON.stringify(id)}`,\n `const css = ${JSON.stringify(css)}`,\n `updateStyle(id, css)`,\n // css modules exports change on edit so it can't self accept\n `${modulesCode || `import.meta.hot.accept()\\nexport default css`}`,\n `import.meta.hot.prune(() => removeStyle(id))`\n ].join('\\n')\n }\n }\n\n // build CSS handling ----------------------------------------------------\n\n // record css\n if (!inlined) {\n styles.set(id, css)\n } else {\n css = await minifyCSS(css, config)\n }\n\n return {\n code:\n modulesCode ||\n (usedRE.test(id)\n ? `export default ${JSON.stringify(css)}`\n : `export default ''`),\n map: { mappings: '' },\n // avoid the css module from being tree-shaken so that we can retrieve\n // it in renderChunk()\n moduleSideEffects: inlined ? false : 'no-treeshake'\n }\n },\n\n async renderChunk(code, chunk, opts) {\n let chunkCSS = ''\n let isPureCssChunk = true\n const ids = Object.keys(chunk.modules)\n for (const id of ids) {\n if (\n !isCSSRequest(id) ||\n cssModuleRE.test(id) ||\n commonjsProxyRE.test(id)\n ) {\n isPureCssChunk = false\n }\n if (styles.has(id)) {\n chunkCSS += styles.get(id)\n }\n }\n\n if (!chunkCSS) {\n return null\n }\n\n // resolve asset URL placeholders to their built file URLs and perform\n // minification if necessary\n const processChunkCSS = async (\n css: string,\n {\n inlined,\n minify\n }: {\n inlined: boolean\n minify: boolean\n }\n ) => {\n // replace asset url references with resolved url.\n const isRelativeBase = config.base === '' || config.base.startsWith('.')\n css = css.replace(assetUrlRE, (_, fileHash, postfix = '') => {\n const filename = getAssetFilename(fileHash, config) + postfix\n registerAssetToChunk(chunk, filename)\n if (!isRelativeBase || inlined) {\n // absolute base or relative base but inlined (injected as style tag into\n // index.html) use the base as-is\n return config.base + filename\n } else {\n // relative base + extracted CSS - asset file will be in the same dir\n return `./${path.posix.basename(filename)}`\n }\n })\n // only external @imports should exist at this point - and they need to\n // be hoisted to the top of the CSS chunk per spec (#1845)\n if (css.includes('@import')) {\n css = await hoistAtImports(css)\n }\n if (minify && config.build.minify) {\n css = await minifyCSS(css, config)\n }\n return css\n }\n\n if (config.build.cssCodeSplit) {\n if (isPureCssChunk) {\n // this is a shared CSS-only chunk that is empty.\n pureCssChunks.add(chunk.fileName)\n }\n if (opts.format === 'es' || opts.format === 'cjs') {\n chunkCSS = await processChunkCSS(chunkCSS, {\n inlined: false,\n minify: true\n })\n // emit corresponding css file\n const fileHandle = this.emitFile({\n name: chunk.name + '.css',\n type: 'asset',\n source: chunkCSS\n })\n chunkToEmittedCssFileMap.set(\n chunk,\n new Set([this.getFileName(fileHandle)])\n )\n } else if (!config.build.ssr) {\n // legacy build, inline css\n chunkCSS = await processChunkCSS(chunkCSS, {\n inlined: true,\n minify: true\n })\n const style = `__vite_style__`\n const injectCode =\n `var ${style} = document.createElement('style');` +\n `${style}.innerHTML = ${JSON.stringify(chunkCSS)};` +\n `document.head.appendChild(${style});`\n if (config.build.sourcemap) {\n const s = new MagicString(code)\n s.prepend(injectCode)\n return {\n code: s.toString(),\n map: s.generateMap({ hires: true })\n }\n } else {\n return { code: injectCode + code }\n }\n }\n } else {\n // non-split extracted CSS will be minified together\n chunkCSS = await processChunkCSS(chunkCSS, {\n inlined: false,\n minify: false\n })\n outputToExtractedCSSMap.set(\n opts,\n (outputToExtractedCSSMap.get(opts) || '') + chunkCSS\n )\n }\n return null\n },\n\n async generateBundle(opts, bundle) {\n // remove empty css chunks and their imports\n if (pureCssChunks.size) {\n const emptyChunkFiles = [...pureCssChunks]\n .map((file) => path.basename(file))\n .join('|')\n .replace(/\\./g, '\\\\.')\n const emptyChunkRE = new RegExp(\n opts.format === 'es'\n ? `\\\\bimport\\\\s*\"[^\"]*(?:${emptyChunkFiles})\";\\n?`\n : `\\\\brequire\\\\(\\\\s*\"[^\"]*(?:${emptyChunkFiles})\"\\\\);\\n?`,\n 'g'\n )\n for (const file in bundle) {\n const chunk = bundle[file]\n if (chunk.type === 'chunk') {\n // remove pure css chunk from other chunk's imports,\n // and also register the emitted CSS files under the importer\n // chunks instead.\n chunk.imports = chunk.imports.filter((file) => {\n if (pureCssChunks.has(file)) {\n const css = chunkToEmittedCssFileMap.get(\n bundle[file] as OutputChunk\n )\n if (css) {\n let existing = chunkToEmittedCssFileMap.get(chunk)\n if (!existing) {\n existing = new Set()\n }\n css.forEach((file) => existing!.add(file))\n chunkToEmittedCssFileMap.set(chunk, existing)\n }\n return false\n }\n return true\n })\n chunk.code = chunk.code.replace(\n emptyChunkRE,\n // remove css import while preserving source map location\n (m) => `/* empty css ${''.padEnd(m.length - 15)}*/`\n )\n }\n }\n const removedPureCssFiles = removedPureCssFilesCache.get(config)!\n pureCssChunks.forEach((fileName) => {\n removedPureCssFiles.set(fileName, bundle[fileName] as RenderedChunk)\n delete bundle[fileName]\n })\n }\n\n let extractedCss = outputToExtractedCSSMap.get(opts)\n if (extractedCss && !hasEmitted) {\n hasEmitted = true\n // minify css\n if (config.build.minify) {\n extractedCss = await minifyCSS(extractedCss, config)\n }\n this.emitFile({\n name: 'style.css',\n type: 'asset',\n source: extractedCss\n })\n }\n }\n }\n}\n\ninterface CSSAtImportResolvers {\n css: ResolveFn\n sass: ResolveFn\n less: ResolveFn\n}\n\nfunction createCSSResolvers(config: ResolvedConfig): CSSAtImportResolvers {\n let cssResolve: ResolveFn | undefined\n let sassResolve: ResolveFn | undefined\n let lessResolve: ResolveFn | undefined\n return {\n get css() {\n return (\n cssResolve ||\n (cssResolve = config.createResolver({\n extensions: ['.css'],\n mainFields: ['style'],\n tryIndex: false,\n preferRelative: true\n }))\n )\n },\n\n get sass() {\n return (\n sassResolve ||\n (sassResolve = config.createResolver({\n extensions: ['.scss', '.sass', '.css'],\n mainFields: ['sass', 'style'],\n tryIndex: true,\n tryPrefix: '_',\n preferRelative: true\n }))\n )\n },\n\n get less() {\n return (\n lessResolve ||\n (lessResolve = config.createResolver({\n extensions: ['.less', '.css'],\n mainFields: ['less', 'style'],\n tryIndex: false,\n preferRelative: true\n }))\n )\n }\n }\n}\n\nfunction getCssResolversKeys(\n resolvers: CSSAtImportResolvers\n): Array<keyof CSSAtImportResolvers> {\n return Object.keys(resolvers) as unknown as Array<keyof CSSAtImportResolvers>\n}\n\nasync function compileCSS(\n id: string,\n code: string,\n config: ResolvedConfig,\n urlReplacer: CssUrlReplacer,\n atImportResolvers: CSSAtImportResolvers,\n server?: ViteDevServer\n): Promise<{\n code: string\n map?: SourceMap\n ast?: Postcss.Result\n modules?: Record<string, string>\n deps?: Set<string>\n}> {\n const { modules: modulesOptions, preprocessorOptions } = config.css || {}\n const isModule = modulesOptions !== false && cssModuleRE.test(id)\n // although at serve time it can work without processing, we do need to\n // crawl them in order to register watch dependencies.\n const needInlineImport = code.includes('@import')\n const hasUrl = cssUrlRE.test(code) || cssImageSetRE.test(code)\n const postcssConfig = await resolvePostcssConfig(config)\n const lang = id.match(cssLangRE)?.[1] as CssLang | undefined\n\n // 1. plain css that needs no processing\n if (\n lang === 'css' &&\n !postcssConfig &&\n !isModule &&\n !needInlineImport &&\n !hasUrl\n ) {\n return { code }\n }\n\n let map: SourceMap | undefined\n let modules: Record<string, string> | undefined\n const deps = new Set<string>()\n\n // 2. pre-processors: sass etc.\n if (isPreProcessor(lang)) {\n const preProcessor = preProcessors[lang]\n let opts = (preprocessorOptions && preprocessorOptions[lang]) || {}\n // support @import from node dependencies by default\n switch (lang) {\n case PreprocessLang.scss:\n case PreprocessLang.sass:\n opts = {\n includePaths: ['node_modules'],\n alias: config.resolve.alias,\n ...opts\n }\n break\n case PreprocessLang.less:\n case PreprocessLang.styl:\n case PreprocessLang.stylus:\n opts = {\n paths: ['node_modules'],\n alias: config.resolve.alias,\n ...opts\n }\n }\n // important: set this for relative import resolving\n opts.filename = cleanUrl(id)\n const preprocessResult = await preProcessor(\n code,\n config.root,\n opts,\n atImportResolvers\n )\n if (preprocessResult.errors.length) {\n throw preprocessResult.errors[0]\n }\n\n code = preprocessResult.code\n map = preprocessResult.map as SourceMap\n if (preprocessResult.deps) {\n preprocessResult.deps.forEach((dep) => {\n // sometimes sass registers the file itself as a dep\n if (normalizePath(dep) !== normalizePath(opts.filename)) {\n deps.add(dep)\n }\n })\n }\n }\n\n // 3. postcss\n const postcssOptions = (postcssConfig && postcssConfig.options) || {}\n const postcssPlugins =\n postcssConfig && postcssConfig.plugins ? postcssConfig.plugins.slice() : []\n\n if (needInlineImport) {\n postcssPlugins.unshift(\n (await import('postcss-import')).default({\n async resolve(id, basedir) {\n const resolved = await atImportResolvers.css(\n id,\n path.join(basedir, '*')\n )\n if (resolved) {\n return path.resolve(resolved)\n }\n return id\n }\n })\n )\n }\n postcssPlugins.push(\n UrlRewritePostcssPlugin({\n replacer: urlReplacer\n }) as Postcss.Plugin\n )\n\n if (isModule) {\n postcssPlugins.unshift(\n (await import('postcss-modules')).default({\n ...modulesOptions,\n getJSON(\n cssFileName: string,\n _modules: Record<string, string>,\n outputFileName: string\n ) {\n modules = _modules\n if (modulesOptions && typeof modulesOptions.getJSON === 'function') {\n modulesOptions.getJSON(cssFileName, _modules, outputFileName)\n }\n },\n async resolve(id: string) {\n for (const key of getCssResolversKeys(atImportResolvers)) {\n const resolved = await atImportResolvers[key](id)\n if (resolved) {\n return path.resolve(resolved)\n }\n }\n\n return id\n }\n })\n )\n }\n\n if (!postcssPlugins.length) {\n return {\n code,\n map\n }\n }\n\n // postcss is an unbundled dep and should be lazy imported\n const postcssResult = await (await import('postcss'))\n .default(postcssPlugins)\n .process(code, {\n ...postcssOptions,\n to: id,\n from: id,\n map: {\n inline: false,\n annotation: false,\n prev: map\n }\n })\n\n // record CSS dependencies from @imports\n for (const message of postcssResult.messages) {\n if (message.type === 'dependency') {\n deps.add(message.file as string)\n } else if (message.type === 'dir-dependency') {\n // https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#3-dependencies\n const { dir, glob: globPattern = '**' } = message\n const pattern =\n normalizePath(path.resolve(path.dirname(id), dir)) + `/` + globPattern\n const files = glob.sync(pattern, {\n ignore: ['**/node_modules/**']\n })\n for (let i = 0; i < files.length; i++) {\n deps.add(files[i])\n }\n if (server) {\n // register glob importers so we can trigger updates on file add/remove\n if (!(id in server._globImporters)) {\n server._globImporters[id] = {\n module: server.moduleGraph.getModuleById(id)!,\n importGlobs: []\n }\n }\n server._globImporters[id].importGlobs.push({\n base: config.root,\n pattern\n })\n }\n } else if (message.type === 'warning') {\n let msg = `[vite:css] ${message.text}`\n if (message.line && message.column) {\n msg += `\\n${generateCodeFrame(code, {\n line: message.line,\n column: message.column\n })}`\n }\n config.logger.warn(chalk.yellow(msg))\n }\n }\n\n return {\n ast: postcssResult,\n code: postcssResult.css,\n map: postcssResult.map as any,\n modules,\n deps\n }\n}\n\ninterface PostCSSConfigResult {\n options: Postcss.ProcessOptions\n plugins: Postcss.Plugin[]\n}\n\nasync function resolvePostcssConfig(\n config: ResolvedConfig\n): Promise<PostCSSConfigResult | null> {\n let result = postcssConfigCache.get(config)\n if (result !== undefined) {\n return result\n }\n\n // inline postcss config via vite config\n const inlineOptions = config.css?.postcss\n if (isObject(inlineOptions)) {\n const options = { ...inlineOptions }\n\n delete options.plugins\n result = {\n options,\n plugins: inlineOptions.plugins || []\n }\n } else {\n try {\n const searchPath =\n typeof inlineOptions === 'string' ? inlineOptions : config.root\n // @ts-ignore\n result = await postcssrc({}, searchPath)\n } catch (e) {\n if (!/No PostCSS Config found/.test(e.message)) {\n throw e\n }\n result = null\n }\n }\n\n postcssConfigCache.set(config, result)\n return result\n}\n\ntype CssUrlReplacer = (\n url: string,\n importer?: string\n) => string | Promise<string>\n// https://drafts.csswg.org/css-syntax-3/#identifier-code-point\nexport const cssUrlRE =\n /(?<=^|[^\\w\\-\\u0080-\\uffff])url\\(\\s*('[^']+'|\"[^\"]+\"|[^'\")]+)\\s*\\)/\nconst cssImageSetRE = /image-set\\(([^)]+)\\)/\n\nconst UrlRewritePostcssPlugin: Postcss.PluginCreator<{\n replacer: CssUrlReplacer\n}> = (opts) => {\n if (!opts) {\n throw new Error('base or replace is required')\n }\n\n return {\n postcssPlugin: 'vite-url-rewrite',\n Once(root) {\n const promises: Promise<void>[] = []\n root.walkDecls((declaration) => {\n const isCssUrl = cssUrlRE.test(declaration.value)\n const isCssImageSet = cssImageSetRE.test(declaration.value)\n if (isCssUrl || isCssImageSet) {\n const replacerForDeclaration = (rawUrl: string) => {\n const importer = declaration.source?.input.file\n return opts.replacer(rawUrl, importer)\n }\n const rewriterToUse = isCssUrl ? rewriteCssUrls : rewriteCssImageSet\n promises.push(\n rewriterToUse(declaration.value, replacerForDeclaration).then(\n (url) => {\n declaration.value = url\n }\n )\n )\n }\n })\n if (promises.length) {\n return Promise.all(promises) as any\n }\n }\n }\n}\nUrlRewritePostcssPlugin.postcss = true\n\nfunction rewriteCssUrls(\n css: string,\n replacer: CssUrlReplacer\n): Promise<string> {\n return asyncReplace(css, cssUrlRE, async (match) => {\n const [matched, rawUrl] = match\n return await doUrlReplace(rawUrl, matched, replacer)\n })\n}\n\nfunction rewriteCssImageSet(\n css: string,\n replacer: CssUrlReplacer\n): Promise<string> {\n return asyncReplace(css, cssImageSetRE, async (match) => {\n const [matched, rawUrl] = match\n const url = await processSrcSet(rawUrl, ({ url }) =>\n doUrlReplace(url, matched, replacer)\n )\n return `image-set(${url})`\n })\n}\nasync function doUrlReplace(\n rawUrl: string,\n matched: string,\n replacer: CssUrlReplacer\n) {\n let wrap = ''\n const first = rawUrl[0]\n if (first === `\"` || first === `'`) {\n wrap = first\n rawUrl = rawUrl.slice(1, -1)\n }\n if (isExternalUrl(rawUrl) || isDataUrl(rawUrl) || rawUrl.startsWith('#')) {\n return matched\n }\n\n return `url(${wrap}${await replacer(rawUrl)}${wrap})`\n}\n\nasync function minifyCSS(css: string, config: ResolvedConfig) {\n const { code, warnings } = await transform(css, {\n loader: 'css',\n minify: true,\n target: config.build.cssTarget || undefined\n })\n if (warnings.length) {\n const msgs = await formatMessages(warnings, { kind: 'warning' })\n config.logger.warn(\n chalk.yellow(`warnings when minifying css:\\n${msgs.join('\\n')}`)\n )\n }\n return code\n}\n\n// #1845\n// CSS @import can only appear at top of the file. We need to hoist all @import\n// to top when multiple files are concatenated.\nasync function hoistAtImports(css: string) {\n const postcss = await import('postcss')\n return (await postcss.default([AtImportHoistPlugin]).process(css)).css\n}\n\nconst AtImportHoistPlugin: Postcss.PluginCreator<any> = () => {\n return {\n postcssPlugin: 'vite-hoist-at-imports',\n Once(root) {\n const imports: Postcss.AtRule[] = []\n root.walkAtRules((rule) => {\n if (rule.name === 'import') {\n // record in reverse so that can simply prepend to preserve order\n imports.unshift(rule)\n }\n })\n imports.forEach((i) => root.prepend(i))\n }\n }\n}\nAtImportHoistPlugin.postcss = true\n\n// Preprocessor support. This logic is largely replicated from @vue/compiler-sfc\n\ntype PreprocessorAdditionalData =\n | string\n | ((source: string, filename: string) => string | Promise<string>)\n\ntype StylePreprocessorOptions = {\n [key: string]: any\n additionalData?: PreprocessorAdditionalData\n filename: string\n alias: Alias[]\n}\n\ntype SassStylePreprocessorOptions = StylePreprocessorOptions & Sass.Options\n\ntype StylePreprocessor = (\n source: string,\n root: string,\n options: StylePreprocessorOptions,\n resolvers: CSSAtImportResolvers\n) => StylePreprocessorResults | Promise<StylePreprocessorResults>\n\ntype SassStylePreprocessor = (\n source: string,\n root: string,\n options: SassStylePreprocessorOptions,\n resolvers: CSSAtImportResolvers\n) => StylePreprocessorResults | Promise<StylePreprocessorResults>\n\nexport interface StylePreprocessorResults {\n code: string\n map?: object\n errors: RollupError[]\n deps: string[]\n}\n\nconst loadedPreprocessors: Partial<Record<PreprocessLang, any>> = {}\n\nfunction loadPreprocessor(lang: PreprocessLang.scss, root: string): typeof Sass\nfunction loadPreprocessor(lang: PreprocessLang.sass, root: string): typeof Sass\nfunction loadPreprocessor(lang: PreprocessLang.less, root: string): typeof Less\nfunction loadPreprocessor(\n lang: PreprocessLang.stylus,\n root: string\n): typeof Stylus\nfunction loadPreprocessor(lang: PreprocessLang, root: string): any {\n if (lang in loadedPreprocessors) {\n return loadedPreprocessors[lang]\n }\n try {\n // Search for the preprocessor in the root directory first, and fall back\n // to the default require paths.\n const fallbackPaths = require.resolve.paths?.(lang) || []\n const resolved = require.resolve(lang, { paths: [root, ...fallbackPaths] })\n return (loadedPreprocessors[lang] = require(resolved))\n } catch (e) {\n throw new Error(\n `Preprocessor dependency \"${lang}\" not found. Did you install it?`\n )\n }\n}\n\n// .scss/.sass processor\nconst scss: SassStylePreprocessor = async (\n source,\n root,\n options,\n resolvers\n) => {\n const render = loadPreprocessor(PreprocessLang.sass, root).render\n const internalImporter: Sass.Importer = (url, importer, done) => {\n resolvers.sass(url, importer).then((resolved) => {\n if (resolved) {\n rebaseUrls(resolved, options.filename, options.alias)\n .then(done)\n .catch(done)\n } else {\n done(null)\n }\n })\n }\n const importer = [internalImporter]\n if (options.importer) {\n Array.isArray(options.importer)\n ? importer.push(...options.importer)\n : importer.push(options.importer)\n }\n\n const finalOptions: Sass.Options = {\n ...options,\n data: await getSource(source, options.filename, options.additionalData),\n file: options.filename,\n outFile: options.filename,\n importer\n }\n\n try {\n const result = await new Promise<Sass.Result>((resolve, reject) => {\n render(finalOptions, (err, res) => {\n if (err) {\n reject(err)\n } else {\n resolve(res)\n }\n })\n })\n const deps = result.stats.includedFiles\n\n return {\n code: result.css.toString(),\n errors: [],\n deps\n }\n } catch (e) {\n // normalize SASS error\n e.id = e.file\n e.frame = e.formatted\n return { code: '', errors: [e], deps: [] }\n }\n}\n\nconst sass: SassStylePreprocessor = (source, root, options, aliasResolver) =>\n scss(\n source,\n root,\n {\n ...options,\n indentedSyntax: true\n },\n aliasResolver\n )\n\n/**\n * relative url() inside \\@imported sass and less files must be rebased to use\n * root file as base.\n */\nasync function rebaseUrls(\n file: string,\n rootFile: string,\n alias: Alias[]\n): Promise<Sass.ImporterReturnType> {\n file = path.resolve(file) // ensure os-specific flashes\n // in the same dir, no need to rebase\n const fileDir = path.dirname(file)\n const rootDir = path.dirname(rootFile)\n if (fileDir === rootDir) {\n return { file }\n }\n // no url()\n const content = fs.readFileSync(file, 'utf-8')\n if (!cssUrlRE.test(content)) {\n return { file }\n }\n const rebased = await rewriteCssUrls(content, (url) => {\n if (url.startsWith('/')) return url\n // match alias, no need to rewrite\n for (const { find } of alias) {\n const matches =\n typeof find === 'string' ? url.startsWith(find) : find.test(url)\n if (matches) {\n return url\n }\n }\n const absolute = path.resolve(fileDir, url)\n const relative = path.relative(rootDir, absolute)\n return normalizePath(relative)\n })\n return {\n file,\n contents: rebased\n }\n}\n\n// .less\nconst less: StylePreprocessor = async (source, root, options, resolvers) => {\n const nodeLess = loadPreprocessor(PreprocessLang.less, root)\n const viteResolverPlugin = createViteLessPlugin(\n nodeLess,\n options.filename,\n options.alias,\n resolvers\n )\n source = await getSource(source, options.filename, options.additionalData)\n\n let result: Less.RenderOutput | undefined\n try {\n result = await nodeLess.render(source, {\n ...options,\n plugins: [viteResolverPlugin, ...(options.plugins || [])]\n })\n } catch (e) {\n const error = e as Less.RenderError\n // normalize error info\n const normalizedError: RollupError = new Error(error.message || error.type)\n normalizedError.loc = {\n file: error.filename || options.filename,\n line: error.line,\n column: error.column\n }\n return { code: '', errors: [normalizedError], deps: [] }\n }\n return {\n code: result.css.toString(),\n deps: result.imports,\n errors: []\n }\n}\n\n/**\n * Less manager, lazy initialized\n */\nlet ViteLessManager: any\n\nfunction createViteLessPlugin(\n less: typeof Less,\n rootFile: string,\n alias: Alias[],\n resolvers: CSSAtImportResolvers\n): Less.Plugin {\n if (!ViteLessManager) {\n ViteLessManager = class ViteManager extends less.FileManager {\n resolvers\n rootFile\n alias\n constructor(\n rootFile: string,\n resolvers: CSSAtImportResolvers,\n alias: Alias[]\n ) {\n super()\n this.rootFile = rootFile\n this.resolvers = resolvers\n this.alias = alias\n }\n override supports() {\n return true\n }\n override supportsSync() {\n return false\n }\n override async loadFile(\n filename: string,\n dir: string,\n opts: any,\n env: any\n ): Promise<Less.FileLoadResult> {\n const resolved = await this.resolvers.less(\n filename,\n path.join(dir, '*')\n )\n if (resolved) {\n const result = await rebaseUrls(resolved, this.rootFile, this.alias)\n let contents: string\n if (result && 'contents' in result) {\n contents = result.contents\n } else {\n contents = fs.readFileSync(resolved, 'utf-8')\n }\n return {\n filename: path.resolve(resolved),\n contents\n }\n } else {\n return super.loadFile(filename, dir, opts, env)\n }\n }\n }\n }\n\n return {\n install(_, pluginManager) {\n pluginManager.addFileManager(\n new ViteLessManager(rootFile, resolvers, alias)\n )\n },\n minVersion: [3, 0, 0]\n }\n}\n\n// .styl\nconst styl: StylePreprocessor = async (source, root, options) => {\n const nodeStylus = loadPreprocessor(PreprocessLang.stylus, root)\n // Get source with preprocessor options.additionalData. Make sure a new line separator\n // is added to avoid any render error, as added stylus content may not have semi-colon separators\n source = await getSource(\n source,\n options.filename,\n options.additionalData,\n '\\n'\n )\n // Get preprocessor options.imports dependencies as stylus\n // does not return them with its builtin `.deps()` method\n const importsDeps = (options.imports ?? []).map((dep: string) =>\n path.resolve(dep)\n )\n try {\n const ref = nodeStylus(source, options)\n\n // if (map) ref.set('sourcemap', { inline: false, comment: false })\n\n const result = ref.render()\n\n // Concat imports deps with computed deps\n const deps = [...ref.deps(), ...importsDeps]\n\n return { code: result, errors: [], deps }\n } catch (e) {\n return { code: '', errors: [e], deps: [] }\n }\n}\n\nfunction getSource(\n source: string,\n filename: string,\n additionalData?: PreprocessorAdditionalData,\n sep: string = ''\n): string | Promise<string> {\n if (!additionalData) return source\n if (typeof additionalData === 'function') {\n return additionalData(source, filename)\n }\n return additionalData + sep + source\n}\n\nconst preProcessors = Object.freeze({\n [PreprocessLang.less]: less,\n [PreprocessLang.sass]: sass,\n [PreprocessLang.scss]: scss,\n [PreprocessLang.styl]: styl,\n [PreprocessLang.stylus]: styl\n})\n\nfunction isPreProcessor(lang: any): lang is PreprocessLang {\n return lang && lang in preProcessors\n}\n","/* es-module-lexer 0.9.2 */\nconst A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];export function parse(E,g=\"@\"){if(!B)return init.then(()=>parse(E));const I=E.length+1,w=(B.__heap_base.value||B.__heap_base)+4*I-B.memory.buffer.byteLength;w>0&&B.memory.grow(Math.ceil(w/65536));const D=B.sa(I-1);if((A?C:Q)(E,new Uint16Array(B.memory.buffer,D,I)),!B.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,B.e()).split(\"\\n\").length}:${B.e()-E.lastIndexOf(\"\\n\",B.e()-1)}`),{idx:B.e()});const k=[],L=[];for(;B.ri();){const A=B.is(),Q=B.ie(),C=B.ai(),g=B.id(),I=B.ss(),w=B.se();let D;B.ip()&&(D=o(E.slice(-1===g?A-1:A,-1===g?Q+1:Q))),k.push({n:D,s:A,e:Q,ss:I,se:w,d:g,a:C})}for(;B.re();){const A=E.slice(B.es(),B.ee()),Q=A[0];L.push('\"'===Q||\"'\"===Q?o(A):A)}function o(A){try{return(0,eval)(A)}catch(A){}}return[k,L,!!B.f()]}function Q(A,Q){const C=A.length;let B=0;for(;B<C;){const C=A.charCodeAt(B);Q[B++]=(255&C)<<8|C>>>8}}function C(A,Q){const C=A.length;let B=0;for(;B<C;)Q[B]=A.charCodeAt(B++)}let B;export const init=WebAssembly.compile((E=\"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Sw0AQQEgAnRBMXENAQsgAEH4/wNxQShGDQAgAEFGakH//wNxQQZJDQACQCAAQaV/aiICQQNLDQAgAkEBRw0BCyAAQYV/akH//wNxQQRJIQELIAELiwEBAn8CQEEAKALkCCICLwEAIgNB4QBHDQBBACACQQRqNgLkCEEBECchAkEAKALkCCEAAkACQCACQSJGDQAgAkEnRg0AIAIQKhpBACgC5AghAQwBCyACEBhBAEEAKALkCEECaiIBNgLkCAtBARAnIQNBACgC5AghAgsCQCACIABGDQAgACABEAILIAMLcgEEf0EAKALkCCEAQQAoAugIIQECQAJAA0AgAEECaiECIAAgAU8NAQJAAkAgAi8BACIDQaR/ag4CAQQACyACIQAgA0F2ag4EAgEBAgELIABBBGohAAwACwtBACACNgLkCBAeQQAPC0EAIAI2AuQIQd0AC0kBAX9BACEHAkAgAC8BCiAGRw0AIAAvAQggBUcNACAALwEGIARHDQAgAC8BBCADRw0AIAAvAQIgAkcNACAALwEAIAFGIQcLIAcLUwEBf0EAIQgCQCAALwEMIAdHDQAgAC8BCiAGRw0AIAAvAQggBUcNACAALwEGIARHDQAgAC8BBCADRw0AIAAvAQIgAkcNACAALwEAIAFGIQgLIAgLCx8CAEGACAsCAAAAQYQICxABAAAAAgAAAAAEAABwOAAA\",\"undefined\"!=typeof Buffer?Buffer.from(E,\"base64\"):Uint8Array.from(atob(E),A=>A.charCodeAt(0)))).then(WebAssembly.instantiate).then(({exports:A})=>{B=A});var E;","import path from 'path'\nimport glob from 'fast-glob'\nimport {\n isModernFlag,\n preloadMethod,\n preloadMarker\n} from './plugins/importAnalysisBuild'\nimport { cleanUrl } from './utils'\nimport { RollupError } from 'rollup'\n\nexport async function transformImportGlob(\n source: string,\n pos: number,\n importer: string,\n importIndex: number,\n root: string,\n normalizeUrl?: (url: string, pos: number) => Promise<[string, string]>,\n preload = true\n): Promise<{\n importsString: string\n imports: string[]\n exp: string\n endIndex: number\n isEager: boolean\n pattern: string\n base: string\n}> {\n const isEager = source.slice(pos, pos + 21) === 'import.meta.globEager'\n const isEagerDefault =\n isEager && source.slice(pos + 21, pos + 28) === 'Default'\n\n const err = (msg: string) => {\n const e = new Error(`Invalid glob import syntax: ${msg}`)\n ;(e as any).pos = pos\n return e\n }\n\n importer = cleanUrl(importer)\n const importerBasename = path.basename(importer)\n\n let [pattern, endIndex] = lexGlobPattern(source, pos)\n if (!pattern.startsWith('.') && !pattern.startsWith('/')) {\n throw err(`pattern must start with \".\" or \"/\" (relative to project root)`)\n }\n let base: string\n let parentDepth = 0\n const isAbsolute = pattern.startsWith('/')\n if (isAbsolute) {\n base = path.resolve(root)\n pattern = pattern.slice(1)\n } else {\n base = path.dirname(importer)\n while (pattern.startsWith('../')) {\n pattern = pattern.slice(3)\n base = path.resolve(base, '../')\n parentDepth++\n }\n if (pattern.startsWith('./')) {\n pattern = pattern.slice(2)\n }\n }\n const files = glob.sync(pattern, {\n cwd: base,\n ignore: ['**/node_modules/**']\n })\n const imports: string[] = []\n let importsString = ``\n let entries = ``\n for (let i = 0; i < files.length; i++) {\n // skip importer itself\n if (files[i] === importerBasename) continue\n const file = isAbsolute\n ? `/${files[i]}`\n : parentDepth\n ? `${'../'.repeat(parentDepth)}${files[i]}`\n : `./${files[i]}`\n let importee = file\n if (normalizeUrl) {\n ;[importee] = await normalizeUrl(file, pos)\n }\n imports.push(importee)\n const identifier = `__glob_${importIndex}_${i}`\n if (isEager) {\n importsString += `import ${\n isEagerDefault ? `` : `* as `\n }${identifier} from ${JSON.stringify(importee)};`\n entries += ` ${JSON.stringify(file)}: ${identifier},`\n } else {\n let imp = `import(${JSON.stringify(importee)})`\n if (!normalizeUrl && preload) {\n imp =\n `(${isModernFlag}` +\n `? ${preloadMethod}(()=>${imp},\"${preloadMarker}\")` +\n `: ${imp})`\n }\n entries += ` ${JSON.stringify(file)}: () => ${imp},`\n }\n }\n\n return {\n imports,\n importsString,\n exp: `{${entries}}`,\n endIndex,\n isEager,\n pattern,\n base\n }\n}\n\nconst enum LexerState {\n inCall,\n inSingleQuoteString,\n inDoubleQuoteString,\n inTemplateString\n}\n\nfunction lexGlobPattern(code: string, pos: number): [string, number] {\n let state = LexerState.inCall\n let pattern = ''\n\n let i = code.indexOf(`(`, pos) + 1\n outer: for (; i < code.length; i++) {\n const char = code.charAt(i)\n switch (state) {\n case LexerState.inCall:\n if (char === `'`) {\n state = LexerState.inSingleQuoteString\n } else if (char === `\"`) {\n state = LexerState.inDoubleQuoteString\n } else if (char === '`') {\n state = LexerState.inTemplateString\n } else if (/\\s/.test(char)) {\n continue\n } else {\n error(i)\n }\n break\n case LexerState.inSingleQuoteString:\n if (char === `'`) {\n break outer\n } else {\n pattern += char\n }\n break\n case LexerState.inDoubleQuoteString:\n if (char === `\"`) {\n break outer\n } else {\n pattern += char\n }\n break\n case LexerState.inTemplateString:\n if (char === '`') {\n break outer\n } else {\n pattern += char\n }\n break\n default:\n throw new Error('unknown import.meta.glob lexer state')\n }\n }\n return [pattern, code.indexOf(`)`, i) + 1]\n}\n\nfunction error(pos: number) {\n const err = new Error(\n `import.meta.glob() can only accept string literals.`\n ) as RollupError\n err.pos = pos\n throw err\n}\n","import path from 'path'\nimport { ResolvedConfig } from '../config'\nimport { Plugin } from '../plugin'\nimport MagicString from 'magic-string'\nimport { ImportSpecifier, init, parse as parseImports } from 'es-module-lexer'\nimport { OutputChunk } from 'rollup'\nimport {\n chunkToEmittedCssFileMap,\n isCSSRequest,\n removedPureCssFilesCache\n} from './css'\nimport { transformImportGlob } from '../importGlob'\nimport { bareImportRE } from '../utils'\n\n/**\n * A flag for injected helpers. This flag will be set to `false` if the output\n * target is not native es - so that injected helper logic can be conditionally\n * dropped.\n */\nexport const isModernFlag = `__VITE_IS_MODERN__`\nexport const preloadMethod = `__vitePreload`\nexport const preloadMarker = `__VITE_PRELOAD__`\nexport const preloadBaseMarker = `__VITE_PRELOAD_BASE__`\n\nconst preloadHelperId = 'vite/preload-helper'\nconst preloadMarkerRE = new RegExp(`\"${preloadMarker}\"`, 'g')\n\n/**\n * Helper for preloading CSS and direct imports of async chunks in parallel to\n * the async chunk itself.\n */\n\nfunction detectScriptRel() {\n // @ts-ignore\n const relList = document.createElement('link').relList\n // @ts-ignore\n return relList && relList.supports && relList.supports('modulepreload')\n ? 'modulepreload'\n : 'preload'\n}\n\ndeclare const scriptRel: string\nfunction preload(baseModule: () => Promise<{}>, deps?: string[]) {\n // @ts-ignore\n if (!__VITE_IS_MODERN__ || !deps || deps.length === 0) {\n return baseModule()\n }\n\n return Promise.all(\n deps.map((dep) => {\n // @ts-ignore\n dep = `${base}${dep}`\n // @ts-ignore\n if (dep in seen) return\n // @ts-ignore\n seen[dep] = true\n const isCss = dep.endsWith('.css')\n const cssSelector = isCss ? '[rel=\"stylesheet\"]' : ''\n // @ts-ignore check if the file is already preloaded by SSR markup\n if (document.querySelector(`link[href=\"${dep}\"]${cssSelector}`)) {\n return\n }\n // @ts-ignore\n const link = document.createElement('link')\n // @ts-ignore\n link.rel = isCss ? 'stylesheet' : scriptRel\n if (!isCss) {\n link.as = 'script'\n link.crossOrigin = ''\n }\n link.href = dep\n // @ts-ignore\n document.head.appendChild(link)\n if (isCss) {\n return new Promise((res, rej) => {\n link.addEventListener('load', res)\n link.addEventListener('error', rej)\n })\n }\n })\n ).then(() => baseModule())\n}\n\n/**\n * Build only. During serve this is performed as part of ./importAnalysis.\n */\nexport function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin {\n const ssr = !!config.build.ssr\n const insertPreload = !(ssr || !!config.build.lib)\n\n const scriptRel = config.build.polyfillModulePreload\n ? `'modulepreload'`\n : `(${detectScriptRel.toString()})()`\n const preloadCode = `const scriptRel = ${scriptRel};const seen = {};const base = '${preloadBaseMarker}';export const ${preloadMethod} = ${preload.toString()}`\n\n return {\n name: 'vite:build-import-analysis',\n\n resolveId(id) {\n if (id === preloadHelperId) {\n return id\n }\n },\n\n load(id) {\n if (id === preloadHelperId) {\n return preloadCode.replace(preloadBaseMarker, config.base)\n }\n },\n\n async transform(source, importer) {\n if (\n importer.includes('node_modules') &&\n !source.includes('import.meta.glob')\n ) {\n return\n }\n\n await init\n\n let imports: readonly ImportSpecifier[] = []\n try {\n imports = parseImports(source)[0]\n } catch (e: any) {\n this.error(e, e.idx)\n }\n\n if (!imports.length) {\n return null\n }\n\n let s: MagicString | undefined\n const str = () => s || (s = new MagicString(source))\n let needPreloadHelper = false\n\n for (let index = 0; index < imports.length; index++) {\n const {\n s: start,\n e: end,\n ss: expStart,\n n: specifier,\n d: dynamicIndex\n } = imports[index]\n\n // import.meta.glob\n if (\n source.slice(start, end) === 'import.meta' &&\n source.slice(end, end + 5) === '.glob'\n ) {\n const { importsString, exp, endIndex, isEager } =\n await transformImportGlob(\n source,\n start,\n importer,\n index,\n config.root,\n undefined,\n insertPreload\n )\n str().prepend(importsString)\n str().overwrite(expStart, endIndex, exp)\n if (!isEager) {\n needPreloadHelper = true\n }\n continue\n }\n\n if (dynamicIndex > -1 && insertPreload) {\n needPreloadHelper = true\n const dynamicEnd = source.indexOf(`)`, end) + 1\n const original = source.slice(dynamicIndex, dynamicEnd)\n const replacement = `${preloadMethod}(() => ${original},${isModernFlag}?\"${preloadMarker}\":void 0)`\n str().overwrite(dynamicIndex, dynamicEnd, replacement)\n }\n\n // Differentiate CSS imports that use the default export from those that\n // do not by injecting a ?used query - this allows us to avoid including\n // the CSS string when unnecessary (esbuild has trouble treeshaking\n // them)\n if (\n specifier &&\n isCSSRequest(specifier) &&\n source.slice(expStart, start).includes('from') &&\n // edge case for package names ending with .css (e.g normalize.css)\n !(bareImportRE.test(specifier) && !specifier.includes('/'))\n ) {\n const url = specifier.replace(/\\?|$/, (m) => `?used${m ? '&' : ''}`)\n str().overwrite(start, end, dynamicIndex > -1 ? `'${url}'` : url)\n }\n }\n\n if (\n needPreloadHelper &&\n insertPreload &&\n !source.includes(`const ${preloadMethod} =`)\n ) {\n str().prepend(`import { ${preloadMethod} } from \"${preloadHelperId}\";`)\n }\n\n if (s) {\n return {\n code: s.toString(),\n map: config.build.sourcemap ? s.generateMap({ hires: true }) : null\n }\n }\n },\n\n renderChunk(code, _, { format }) {\n // make sure we only perform the preload logic in modern builds.\n if (code.indexOf(isModernFlag) > -1) {\n const re = new RegExp(isModernFlag, 'g')\n const isModern = String(format === 'es')\n if (config.build.sourcemap) {\n const s = new MagicString(code)\n let match: RegExpExecArray | null\n while ((match = re.exec(code))) {\n s.overwrite(\n match.index,\n match.index + isModernFlag.length,\n isModern\n )\n }\n return {\n code: s.toString(),\n map: s.generateMap({ hires: true })\n }\n } else {\n return code.replace(re, isModern)\n }\n }\n return null\n },\n\n generateBundle({ format }, bundle) {\n if (format !== 'es' || ssr) {\n return\n }\n\n for (const file in bundle) {\n const chunk = bundle[file]\n // can't use chunk.dynamicImports.length here since some modules e.g.\n // dynamic import to constant json may get inlined.\n if (chunk.type === 'chunk' && chunk.code.indexOf(preloadMarker) > -1) {\n const code = chunk.code\n let imports: ImportSpecifier[]\n try {\n imports = parseImports(code)[0].filter((i) => i.d > -1)\n } catch (e: any) {\n this.error(e, e.idx)\n }\n\n if (imports.length) {\n const s = new MagicString(code)\n for (let index = 0; index < imports.length; index++) {\n const { s: start, e: end, d: dynamicIndex } = imports[index]\n // check the chunk being imported\n const url = code.slice(start, end)\n const deps: Set<string> = new Set()\n let hasRemovedPureCssChunk = false\n\n if (url[0] === `\"` && url[url.length - 1] === `\"`) {\n const ownerFilename = chunk.fileName\n // literal import - trace direct imports and add to deps\n const analyzed: Set<string> = new Set<string>()\n const addDeps = (filename: string) => {\n if (filename === ownerFilename) return\n if (analyzed.has(filename)) return\n analyzed.add(filename)\n const chunk = bundle[filename] as OutputChunk | undefined\n if (chunk) {\n deps.add(chunk.fileName)\n const cssFiles = chunkToEmittedCssFileMap.get(chunk)\n if (cssFiles) {\n cssFiles.forEach((file) => {\n deps.add(file)\n })\n }\n chunk.imports.forEach(addDeps)\n } else {\n const removedPureCssFiles =\n removedPureCssFilesCache.get(config)!\n const chunk = removedPureCssFiles.get(filename)\n if (chunk) {\n const cssFiles = chunkToEmittedCssFileMap.get(chunk)\n if (cssFiles && cssFiles.size > 0) {\n cssFiles.forEach((file) => {\n deps.add(file)\n })\n hasRemovedPureCssChunk = true\n }\n\n s.overwrite(dynamicIndex, end + 1, 'Promise.resolve({})')\n }\n }\n }\n const normalizedFile = path.posix.join(\n path.posix.dirname(chunk.fileName),\n url.slice(1, -1)\n )\n addDeps(normalizedFile)\n }\n\n let markPos = code.indexOf(preloadMarker, end)\n // fix issue #3051\n if (markPos === -1 && imports.length === 1) {\n markPos = code.indexOf(preloadMarker)\n }\n\n if (markPos > 0) {\n s.overwrite(\n markPos - 1,\n markPos + preloadMarker.length + 1,\n // the dep list includes the main chunk, so only need to\n // preload when there are actual other deps.\n deps.size > 1 ||\n // main chunk is removed\n (hasRemovedPureCssChunk && deps.size > 0)\n ? `[${[...deps].map((d) => JSON.stringify(d)).join(',')}]`\n : `[]`\n )\n }\n }\n chunk.code = s.toString()\n // TODO source map\n }\n\n // there may still be markers due to inlined dynamic imports, remove\n // all the markers regardless\n chunk.code = chunk.code.replace(preloadMarkerRE, 'void 0')\n }\n }\n }\n }\n}\n","import { ResolvedConfig } from '..'\nimport { Plugin } from '../plugin'\nimport { isModernFlag } from './importAnalysisBuild'\n\nexport const modulePreloadPolyfillId = 'vite/modulepreload-polyfill'\n\nexport function modulePreloadPolyfillPlugin(config: ResolvedConfig): Plugin {\n const skip = config.build.ssr\n let polyfillString: string | undefined\n\n return {\n name: 'vite:modulepreload-polyfill',\n resolveId(id) {\n if (id === modulePreloadPolyfillId) {\n return id\n }\n },\n load(id) {\n if (id === modulePreloadPolyfillId) {\n if (skip) {\n return ''\n }\n if (!polyfillString) {\n polyfillString =\n `const p = ${polyfill.toString()};` + `${isModernFlag}&&p();`\n }\n return polyfillString\n }\n }\n }\n}\n\n/**\nThe following polyfill function is meant to run in the browser and adapted from\nhttps://github.com/guybedford/es-module-shims\nMIT License\nCopyright (C) 2018-2021 Guy Bedford\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n*/\n\ndeclare const document: any\ndeclare const MutationObserver: any\ndeclare const fetch: any\n\nfunction polyfill() {\n const relList = document.createElement('link').relList\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return\n }\n\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link)\n }\n\n new MutationObserver((mutations: any) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node)\n }\n }\n }).observe(document, { childList: true, subtree: true })\n\n function getFetchOpts(script: any) {\n const fetchOpts = {} as any\n if (script.integrity) fetchOpts.integrity = script.integrity\n if (script.referrerpolicy) fetchOpts.referrerPolicy = script.referrerpolicy\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include'\n else if (script.crossorigin === 'anonymous') fetchOpts.credentials = 'omit'\n else fetchOpts.credentials = 'same-origin'\n return fetchOpts\n }\n\n function processPreload(link: any) {\n if (link.ep)\n // ep marker = processed\n return\n link.ep = true\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link)\n fetch(link.href, fetchOpts)\n }\n}\n","import path from 'path'\nimport { Plugin } from '../plugin'\nimport { ViteDevServer } from '../server'\nimport { OutputAsset, OutputBundle, OutputChunk } from 'rollup'\nimport {\n cleanUrl,\n generateCodeFrame,\n isDataUrl,\n isExternalUrl,\n processSrcSet,\n slash\n} from '../utils'\nimport { ResolvedConfig } from '../config'\nimport MagicString from 'magic-string'\nimport {\n checkPublicFile,\n assetUrlRE,\n urlToBuiltUrl,\n getAssetFilename\n} from './asset'\nimport { isCSSRequest, chunkToEmittedCssFileMap } from './css'\nimport { modulePreloadPolyfillId } from './modulePreloadPolyfill'\nimport {\n AttributeNode,\n NodeTransform,\n NodeTypes,\n ElementNode\n} from '@vue/compiler-dom'\n\nconst htmlProxyRE = /\\?html-proxy&index=(\\d+)\\.js$/\nexport const isHTMLProxy = (id: string): boolean => htmlProxyRE.test(id)\n\n// HTML Proxy Caches are stored by config -> filePath -> index\nexport const htmlProxyMap = new WeakMap<\n ResolvedConfig,\n Map<string, Array<string>>\n>()\n\nexport function htmlInlineScriptProxyPlugin(config: ResolvedConfig): Plugin {\n return {\n name: 'vite:html-inline-script-proxy',\n\n resolveId(id) {\n if (htmlProxyRE.test(id)) {\n return id\n }\n },\n\n buildStart() {\n htmlProxyMap.set(config, new Map())\n },\n\n load(id) {\n const proxyMatch = id.match(htmlProxyRE)\n if (proxyMatch) {\n const index = Number(proxyMatch[1])\n const file = cleanUrl(id)\n const url = file.replace(config.root, '')\n const result = htmlProxyMap.get(config)!.get(url)![index]\n if (result) {\n return result\n } else {\n throw new Error(`No matching HTML proxy module found from ${id}`)\n }\n }\n }\n }\n}\n\n/** Add script to cache */\nexport function addToHTMLProxyCache(\n config: ResolvedConfig,\n filePath: string,\n index: number,\n code: string\n): void {\n if (!htmlProxyMap.get(config)) {\n htmlProxyMap.set(config, new Map())\n }\n if (!htmlProxyMap.get(config)!.get(filePath)) {\n htmlProxyMap.get(config)!.set(filePath, [])\n }\n htmlProxyMap.get(config)!.get(filePath)![index] = code\n}\n\n// this extends the config in @vue/compiler-sfc with <link href>\nexport const assetAttrsConfig: Record<string, string[]> = {\n link: ['href'],\n video: ['src', 'poster'],\n source: ['src', 'srcset'],\n img: ['src', 'srcset'],\n image: ['xlink:href', 'href'],\n use: ['xlink:href', 'href']\n}\n\nexport const isAsyncScriptMap = new WeakMap<\n ResolvedConfig,\n Map<string, boolean>\n>()\n\nexport async function traverseHtml(\n html: string,\n filePath: string,\n visitor: NodeTransform\n): Promise<void> {\n // lazy load compiler\n const { parse, transform } = await import('@vue/compiler-dom')\n // @vue/compiler-core doesn't like lowercase doctypes\n html = html.replace(/<!doctype\\s/i, '<!DOCTYPE ')\n try {\n const ast = parse(html, { comments: true })\n transform(ast, {\n nodeTransforms: [visitor]\n })\n } catch (e) {\n const parseError = {\n loc: filePath,\n frame: '',\n ...formatParseError(e, filePath, html)\n }\n throw new Error(\n `Unable to parse ${JSON.stringify(parseError.loc)}\\n${parseError.frame}`\n )\n }\n}\n\nexport function getScriptInfo(node: ElementNode): {\n src: AttributeNode | undefined\n isModule: boolean\n isAsync: boolean\n} {\n let src: AttributeNode | undefined\n let isModule = false\n let isAsync = false\n for (let i = 0; i < node.props.length; i++) {\n const p = node.props[i]\n if (p.type === NodeTypes.ATTRIBUTE) {\n if (p.name === 'src') {\n src = p\n } else if (p.name === 'type' && p.value && p.value.content === 'module') {\n isModule = true\n } else if (p.name === 'async') {\n isAsync = true\n }\n }\n }\n return { src, isModule, isAsync }\n}\n\nfunction formatParseError(e: any, id: string, html: string): Error {\n // normalize the error to rollup format\n if (e.loc) {\n e.frame = generateCodeFrame(html, e.loc.start.offset)\n e.loc = {\n file: id,\n line: e.loc.start.line,\n column: e.loc.start.column\n }\n }\n return e\n}\n\n/**\n * Compiles index.html into an entry js module\n */\nexport function buildHtmlPlugin(config: ResolvedConfig): Plugin {\n const [preHooks, postHooks] = resolveHtmlTransforms(config.plugins)\n const processedHtml = new Map<string, string>()\n const isExcludedUrl = (url: string) =>\n url.startsWith('#') ||\n isExternalUrl(url) ||\n isDataUrl(url) ||\n checkPublicFile(url, config)\n\n return {\n name: 'vite:build-html',\n\n buildStart() {\n isAsyncScriptMap.set(config, new Map())\n },\n\n async transform(html, id) {\n if (id.endsWith('.html')) {\n const publicPath = `/${slash(path.relative(config.root, id))}`\n // pre-transform\n html = await applyHtmlTransforms(html, preHooks, {\n path: publicPath,\n filename: id\n })\n\n let js = ''\n const s = new MagicString(html)\n const assetUrls: AttributeNode[] = []\n let inlineModuleIndex = -1\n\n let everyScriptIsAsync = true\n let someScriptsAreAsync = false\n let someScriptsAreDefer = false\n\n await traverseHtml(html, id, (node) => {\n if (node.type !== NodeTypes.ELEMENT) {\n return\n }\n\n let shouldRemove = false\n\n // script tags\n if (node.tag === 'script') {\n const { src, isModule, isAsync } = getScriptInfo(node)\n\n const url = src && src.value && src.value.content\n if (url && checkPublicFile(url, config)) {\n // referencing public dir url, prefix with base\n s.overwrite(\n src!.value!.loc.start.offset,\n src!.value!.loc.end.offset,\n `\"${config.base + url.slice(1)}\"`\n )\n }\n\n if (isModule) {\n inlineModuleIndex++\n if (url && !isExcludedUrl(url)) {\n // <script type=\"module\" src=\"...\"/>\n // add it as an import\n js += `\\nimport ${JSON.stringify(url)}`\n shouldRemove = true\n } else if (node.children.length) {\n const contents = node.children\n .map((child: any) => child.content || '')\n .join('')\n // <script type=\"module\">...</script>\n const filePath = id.replace(config.root, '')\n addToHTMLProxyCache(\n config,\n filePath,\n inlineModuleIndex,\n contents\n )\n js += `\\nimport \"${id}?html-proxy&index=${inlineModuleIndex}.js\"`\n shouldRemove = true\n }\n\n everyScriptIsAsync &&= isAsync\n someScriptsAreAsync ||= isAsync\n someScriptsAreDefer ||= !isAsync\n }\n }\n\n // For asset references in index.html, also generate an import\n // statement for each - this will be handled by the asset plugin\n const assetAttrs = assetAttrsConfig[node.tag]\n if (assetAttrs) {\n for (const p of node.props) {\n if (\n p.type === NodeTypes.ATTRIBUTE &&\n p.value &&\n assetAttrs.includes(p.name)\n ) {\n const url = p.value.content\n if (!isExcludedUrl(url)) {\n if (node.tag === 'link' && isCSSRequest(url)) {\n // CSS references, convert to import\n js += `\\nimport ${JSON.stringify(url)}`\n shouldRemove = true\n } else {\n assetUrls.push(p)\n }\n } else if (checkPublicFile(url, config)) {\n s.overwrite(\n p.value.loc.start.offset,\n p.value.loc.end.offset,\n `\"${config.base + url.slice(1)}\"`\n )\n }\n }\n }\n }\n\n if (shouldRemove) {\n // remove the script tag from the html. we are going to inject new\n // ones in the end.\n s.remove(node.loc.start.offset, node.loc.end.offset)\n }\n })\n\n isAsyncScriptMap.get(config)!.set(id, everyScriptIsAsync)\n\n if (someScriptsAreAsync && someScriptsAreDefer) {\n config.logger.warn(\n `\\nMixed async and defer script modules in ${id}, output script will fallback to defer. Every script, including inline ones, need to be marked as async for your output script to be async.`\n )\n }\n\n // for each encountered asset url, rewrite original html so that it\n // references the post-build location.\n for (const attr of assetUrls) {\n const value = attr.value!\n try {\n const url =\n attr.name === 'srcset'\n ? await processSrcSet(value.content, ({ url }) =>\n urlToBuiltUrl(url, id, config, this)\n )\n : await urlToBuiltUrl(value.content, id, config, this)\n\n s.overwrite(\n value.loc.start.offset,\n value.loc.end.offset,\n `\"${url}\"`\n )\n } catch (e) {\n // #1885 preload may be pointing to urls that do not exist\n // locally on disk\n if (e.code !== 'ENOENT') {\n throw e\n }\n }\n }\n\n processedHtml.set(id, s.toString())\n\n // inject module preload polyfill only when configured and needed\n if (\n config.build.polyfillModulePreload &&\n (someScriptsAreAsync || someScriptsAreDefer)\n ) {\n js = `import \"${modulePreloadPolyfillId}\";\\n${js}`\n }\n\n return js\n }\n },\n\n async generateBundle(options, bundle) {\n const analyzedChunk: Map<OutputChunk, number> = new Map()\n const getImportedChunks = (\n chunk: OutputChunk,\n seen: Set<string> = new Set()\n ): OutputChunk[] => {\n const chunks: OutputChunk[] = []\n chunk.imports.forEach((file) => {\n const importee = bundle[file]\n if (importee?.type === 'chunk' && !seen.has(file)) {\n seen.add(file)\n\n // post-order traversal\n chunks.push(...getImportedChunks(importee, seen))\n chunks.push(importee)\n }\n })\n return chunks\n }\n\n const toScriptTag = (\n chunk: OutputChunk,\n isAsync: boolean\n ): HtmlTagDescriptor => ({\n tag: 'script',\n attrs: {\n ...(isAsync ? { async: true } : {}),\n type: 'module',\n crossorigin: true,\n src: toPublicPath(chunk.fileName, config)\n }\n })\n\n const toPreloadTag = (chunk: OutputChunk): HtmlTagDescriptor => ({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: toPublicPath(chunk.fileName, config)\n }\n })\n\n const getCssTagsForChunk = (\n chunk: OutputChunk,\n seen: Set<string> = new Set()\n ): HtmlTagDescriptor[] => {\n const tags: HtmlTagDescriptor[] = []\n if (!analyzedChunk.has(chunk)) {\n analyzedChunk.set(chunk, 1)\n chunk.imports.forEach((file) => {\n const importee = bundle[file]\n if (importee?.type === 'chunk') {\n tags.push(...getCssTagsForChunk(importee, seen))\n }\n })\n }\n\n const cssFiles = chunkToEmittedCssFileMap.get(chunk)\n if (cssFiles) {\n cssFiles.forEach((file) => {\n if (!seen.has(file)) {\n seen.add(file)\n tags.push({\n tag: 'link',\n attrs: {\n rel: 'stylesheet',\n href: toPublicPath(file, config)\n }\n })\n }\n })\n }\n return tags\n }\n\n for (const [id, html] of processedHtml) {\n const isAsync = isAsyncScriptMap.get(config)!.get(id)!\n\n // resolve asset url references\n let result = html.replace(assetUrlRE, (_, fileHash, postfix = '') => {\n return config.base + getAssetFilename(fileHash, config) + postfix\n })\n\n // find corresponding entry chunk\n const chunk = Object.values(bundle).find(\n (chunk) =>\n chunk.type === 'chunk' &&\n chunk.isEntry &&\n chunk.facadeModuleId === id\n ) as OutputChunk | undefined\n\n let canInlineEntry = false\n\n // inject chunk asset links\n if (chunk) {\n // an entry chunk can be inlined if\n // - it's an ES module (e.g. not generated by the legacy plugin)\n // - it contains no meaningful code other than import statements\n if (options.format === 'es' && isEntirelyImport(chunk.code)) {\n canInlineEntry = true\n }\n\n // when not inlined, inject <script> for entry and modulepreload its dependencies\n // when inlined, discard entry chunk and inject <script> for everything in post-order\n const imports = getImportedChunks(chunk)\n const assetTags = canInlineEntry\n ? imports.map((chunk) => toScriptTag(chunk, isAsync))\n : [toScriptTag(chunk, isAsync), ...imports.map(toPreloadTag)]\n\n assetTags.push(...getCssTagsForChunk(chunk))\n\n result = injectToHead(result, assetTags)\n }\n\n // inject css link when cssCodeSplit is false\n if (!config.build.cssCodeSplit) {\n const cssChunk = Object.values(bundle).find(\n (chunk) => chunk.type === 'asset' && chunk.name === 'style.css'\n ) as OutputAsset | undefined\n if (cssChunk) {\n result = injectToHead(result, [\n {\n tag: 'link',\n attrs: {\n rel: 'stylesheet',\n href: toPublicPath(cssChunk.fileName, config)\n }\n }\n ])\n }\n }\n\n const shortEmitName = path.posix.relative(config.root, id)\n result = await applyHtmlTransforms(result, postHooks, {\n path: '/' + shortEmitName,\n filename: id,\n bundle,\n chunk\n })\n\n if (chunk && canInlineEntry) {\n // all imports from entry have been inlined to html, prevent rollup from outputting it\n delete bundle[chunk.fileName]\n }\n\n this.emitFile({\n type: 'asset',\n fileName: shortEmitName,\n source: result\n })\n }\n }\n }\n}\n\nexport interface HtmlTagDescriptor {\n tag: string\n attrs?: Record<string, string | boolean | undefined>\n children?: string | HtmlTagDescriptor[]\n /**\n * default: 'head-prepend'\n */\n injectTo?: 'head' | 'body' | 'head-prepend' | 'body-prepend'\n}\n\nexport type IndexHtmlTransformResult =\n | string\n | HtmlTagDescriptor[]\n | {\n html: string\n tags: HtmlTagDescriptor[]\n }\n\nexport interface IndexHtmlTransformContext {\n /**\n * public path when served\n */\n path: string\n /**\n * filename on disk\n */\n filename: string\n server?: ViteDevServer\n bundle?: OutputBundle\n chunk?: OutputChunk\n originalUrl?: string\n}\n\nexport type IndexHtmlTransformHook = (\n html: string,\n ctx: IndexHtmlTransformContext\n) => IndexHtmlTransformResult | void | Promise<IndexHtmlTransformResult | void>\n\nexport type IndexHtmlTransform =\n | IndexHtmlTransformHook\n | {\n enforce?: 'pre' | 'post'\n transform: IndexHtmlTransformHook\n }\n\nexport function resolveHtmlTransforms(\n plugins: readonly Plugin[]\n): [IndexHtmlTransformHook[], IndexHtmlTransformHook[]] {\n const preHooks: IndexHtmlTransformHook[] = []\n const postHooks: IndexHtmlTransformHook[] = []\n\n for (const plugin of plugins) {\n const hook = plugin.transformIndexHtml\n if (hook) {\n if (typeof hook === 'function') {\n postHooks.push(hook)\n } else if (hook.enforce === 'pre') {\n preHooks.push(hook.transform)\n } else {\n postHooks.push(hook.transform)\n }\n }\n }\n\n return [preHooks, postHooks]\n}\n\nexport async function applyHtmlTransforms(\n html: string,\n hooks: IndexHtmlTransformHook[],\n ctx: IndexHtmlTransformContext\n): Promise<string> {\n const headTags: HtmlTagDescriptor[] = []\n const headPrependTags: HtmlTagDescriptor[] = []\n const bodyTags: HtmlTagDescriptor[] = []\n const bodyPrependTags: HtmlTagDescriptor[] = []\n\n for (const hook of hooks) {\n const res = await hook(html, ctx)\n if (!res) {\n continue\n }\n if (typeof res === 'string') {\n html = res\n } else {\n let tags: HtmlTagDescriptor[]\n if (Array.isArray(res)) {\n tags = res\n } else {\n html = res.html || html\n tags = res.tags\n }\n for (const tag of tags) {\n if (tag.injectTo === 'body') {\n bodyTags.push(tag)\n } else if (tag.injectTo === 'body-prepend') {\n bodyPrependTags.push(tag)\n } else if (tag.injectTo === 'head') {\n headTags.push(tag)\n } else {\n headPrependTags.push(tag)\n }\n }\n }\n }\n\n // inject tags\n if (headPrependTags.length) {\n html = injectToHead(html, headPrependTags, true)\n }\n if (headTags.length) {\n html = injectToHead(html, headTags)\n }\n if (bodyPrependTags.length) {\n html = injectToBody(html, bodyPrependTags, true)\n }\n if (bodyTags.length) {\n html = injectToBody(html, bodyTags)\n }\n\n return html\n}\n\nconst importRE = /\\bimport\\s*(\"[^\"]*[^\\\\]\"|'[^']*[^\\\\]');*/g\nconst commentRE = /\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*$/gm\nfunction isEntirelyImport(code: string) {\n // only consider \"side-effect\" imports, which match <script type=module> semantics exactly\n // the regexes will remove too little in some exotic cases, but false-negatives are alright\n return !code.replace(importRE, '').replace(commentRE, '').trim().length\n}\n\nfunction toPublicPath(filename: string, config: ResolvedConfig) {\n return isExternalUrl(filename) ? filename : config.base + filename\n}\n\nconst headInjectRE = /([ \\t]*)<\\/head>/\nconst headPrependInjectRE = /([ \\t]*)<head[^>]*>/\nconst doctypePrependInjectRE = /<!doctype html>/i\nfunction injectToHead(\n html: string,\n tags: HtmlTagDescriptor[],\n prepend = false\n) {\n if (prepend) {\n // inject after head or doctype\n if (headPrependInjectRE.test(html)) {\n return html.replace(\n headPrependInjectRE,\n (match, p1) => `${match}\\n${serializeTags(tags, incrementIndent(p1))}`\n )\n }\n else if(doctypePrependInjectRE.test(html)) {\n return html.replace(\n doctypePrependInjectRE,\n `$&\\n${serializeTags(tags)}`\n )\n }\n } else {\n // inject before head close\n if (headInjectRE.test(html)) {\n // respect indentation of head tag\n return html.replace(\n headInjectRE,\n (match, p1) => `${serializeTags(tags, incrementIndent(p1))}${match}`\n )\n }\n }\n // if no <head> tag is present, just prepend\n return serializeTags(tags) + html\n}\n\nconst bodyInjectRE = /([ \\t]*)<\\/body>/\nconst bodyPrependInjectRE = /([ \\t]*)<body[^>]*>/\nfunction injectToBody(\n html: string,\n tags: HtmlTagDescriptor[],\n prepend = false\n) {\n if (prepend) {\n // inject after body open\n if (bodyPrependInjectRE.test(html)) {\n return html.replace(\n bodyPrependInjectRE,\n (match, p1) => `${match}\\n${serializeTags(tags, incrementIndent(p1))}`\n )\n }\n // if no body, prepend\n return serializeTags(tags) + html\n } else {\n // inject before body close\n if (bodyInjectRE.test(html)) {\n return html.replace(\n bodyInjectRE,\n (match, p1) => `${serializeTags(tags, incrementIndent(p1))}${match}`\n )\n }\n // if no body, append\n return html + `\\n` + serializeTags(tags)\n }\n}\n\nconst unaryTags = new Set(['link', 'meta', 'base'])\n\nfunction serializeTag(\n { tag, attrs, children }: HtmlTagDescriptor,\n indent: string = ''\n): string {\n if (unaryTags.has(tag)) {\n return `<${tag}${serializeAttrs(attrs)}>`\n } else {\n return `<${tag}${serializeAttrs(attrs)}>${serializeTags(\n children,\n incrementIndent(indent)\n )}</${tag}>`\n }\n}\n\nfunction serializeTags(\n tags: HtmlTagDescriptor['children'],\n indent: string = ''\n): string {\n if (typeof tags === 'string') {\n return tags\n } else if (tags && tags.length) {\n return tags.map((tag) => `${indent}${serializeTag(tag, indent)}\\n`).join('')\n }\n return ''\n}\n\nfunction serializeAttrs(attrs: HtmlTagDescriptor['attrs']): string {\n let res = ''\n for (const key in attrs) {\n if (typeof attrs[key] === 'boolean') {\n res += attrs[key] ? ` ${key}` : ``\n } else {\n res += ` ${key}=${JSON.stringify(attrs[key])}`\n }\n }\n return res\n}\n\nfunction incrementIndent(indent: string = '') {\n return `${indent}${indent[0] === '\\t' ? '\\t' : ' '}`\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __require = typeof require !== \"undefined\" ? require : (x) => {\n throw new Error('Dynamic require of \"' + x + '\" is not supported');\n};\n\n// src/find.ts\nimport path from \"path\";\nimport { promises as fs } from \"fs\";\nasync function find(filename) {\n let dir = path.dirname(path.resolve(filename));\n while (dir) {\n const tsconfig = await tsconfigInDir(dir);\n if (tsconfig) {\n return tsconfig;\n } else {\n const parent = path.dirname(dir);\n if (parent === dir) {\n break;\n } else {\n dir = parent;\n }\n }\n }\n throw new Error(`no tsconfig file found for ${filename}`);\n}\nasync function tsconfigInDir(dir) {\n const tsconfig = path.join(dir, \"tsconfig.json\");\n try {\n const stat = await fs.stat(tsconfig);\n if (stat.isFile() || stat.isFIFO()) {\n return tsconfig;\n }\n } catch (e) {\n if (e.code !== \"ENOENT\") {\n throw e;\n }\n }\n}\n\n// src/to-json.ts\nfunction toJson(tsconfigJson) {\n const stripped = stripDanglingComma(stripJsonComments(stripBom(tsconfigJson)));\n if (stripped.trim() === \"\") {\n return \"{}\";\n } else {\n return stripped;\n }\n}\nfunction stripDanglingComma(pseudoJson) {\n let insideString = false;\n let offset = 0;\n let result = \"\";\n let danglingCommaPos = null;\n for (let i = 0; i < pseudoJson.length; i++) {\n const currentCharacter = pseudoJson[i];\n if (currentCharacter === '\"') {\n const escaped = isEscaped(pseudoJson, i);\n if (!escaped) {\n insideString = !insideString;\n }\n }\n if (insideString) {\n danglingCommaPos = null;\n continue;\n }\n if (currentCharacter === \",\") {\n danglingCommaPos = i;\n continue;\n }\n if (danglingCommaPos) {\n if (currentCharacter === \"}\" || currentCharacter === \"]\") {\n result += pseudoJson.slice(offset, danglingCommaPos) + \" \";\n offset = danglingCommaPos + 1;\n danglingCommaPos = null;\n } else if (!currentCharacter.match(/\\s/)) {\n danglingCommaPos = null;\n }\n }\n }\n return result + pseudoJson.substring(offset);\n}\nfunction isEscaped(jsonString, quotePosition) {\n let index = quotePosition - 1;\n let backslashCount = 0;\n while (jsonString[index] === \"\\\\\") {\n index -= 1;\n backslashCount += 1;\n }\n return Boolean(backslashCount % 2);\n}\nfunction strip(string, start, end) {\n return string.slice(start, end).replace(/\\S/g, \" \");\n}\nvar singleComment = Symbol(\"singleComment\");\nvar multiComment = Symbol(\"multiComment\");\nfunction stripJsonComments(jsonString) {\n let isInsideString = false;\n let isInsideComment = false;\n let offset = 0;\n let result = \"\";\n for (let index = 0; index < jsonString.length; index++) {\n const currentCharacter = jsonString[index];\n const nextCharacter = jsonString[index + 1];\n if (!isInsideComment && currentCharacter === '\"') {\n const escaped = isEscaped(jsonString, index);\n if (!escaped) {\n isInsideString = !isInsideString;\n }\n }\n if (isInsideString) {\n continue;\n }\n if (!isInsideComment && currentCharacter + nextCharacter === \"//\") {\n result += jsonString.slice(offset, index);\n offset = index;\n isInsideComment = singleComment;\n index++;\n } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === \"\\r\\n\") {\n index++;\n isInsideComment = false;\n result += strip(jsonString, offset, index);\n offset = index;\n } else if (isInsideComment === singleComment && currentCharacter === \"\\n\") {\n isInsideComment = false;\n result += strip(jsonString, offset, index);\n offset = index;\n } else if (!isInsideComment && currentCharacter + nextCharacter === \"/*\") {\n result += jsonString.slice(offset, index);\n offset = index;\n isInsideComment = multiComment;\n index++;\n } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === \"*/\") {\n index++;\n isInsideComment = false;\n result += strip(jsonString, offset, index + 1);\n offset = index + 1;\n }\n }\n return result + (isInsideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset));\n}\nfunction stripBom(string) {\n if (string.charCodeAt(0) === 65279) {\n return string.slice(1);\n }\n return string;\n}\n\n// src/parse.ts\nimport path3 from \"path\";\nimport { promises as fs3 } from \"fs\";\nimport { createRequire } from \"module\";\n\n// src/util.ts\nimport path2 from \"path\";\nimport { promises as fs2 } from \"fs\";\nvar POSIX_SEP_RE = new RegExp(\"\\\\\" + path2.posix.sep, \"g\");\nvar NATIVE_SEP_RE = new RegExp(\"\\\\\" + path2.sep, \"g\");\nvar PATTERN_REGEX_CACHE = new Map();\nvar GLOB_ALL_PATTERN = `**/*`;\nvar dynamicImportDefault = new Function(\"path\", \"return import(path).then(m => m.default)\");\nasync function loadTS() {\n try {\n return dynamicImportDefault(\"typescript\");\n } catch (e) {\n console.error('typescript must be installed to use \"native\" functions');\n throw e;\n }\n}\nasync function resolveTSConfig(filename) {\n const basename = path2.basename(filename);\n if (basename !== \"tsconfig.json\") {\n return;\n }\n const tsconfig = path2.resolve(filename);\n try {\n const stat = await fs2.stat(tsconfig);\n if (stat.isFile() || stat.isFIFO()) {\n return tsconfig;\n }\n } catch (e) {\n if (e.code !== \"ENOENT\") {\n throw e;\n }\n }\n throw new Error(`no tsconfig file found for ${filename}`);\n}\nfunction posix2native(filename) {\n return path2.posix.sep !== path2.sep && filename.includes(path2.posix.sep) ? filename.replace(POSIX_SEP_RE, path2.sep) : filename;\n}\nfunction native2posix(filename) {\n return path2.posix.sep !== path2.sep && filename.includes(path2.sep) ? filename.replace(NATIVE_SEP_RE, path2.posix.sep) : filename;\n}\nfunction resolve2posix(dir, filename) {\n if (path2.sep === path2.posix.sep) {\n return dir ? path2.resolve(dir, filename) : path2.resolve(filename);\n }\n return native2posix(dir ? path2.resolve(posix2native(dir), posix2native(filename)) : path2.resolve(posix2native(filename)));\n}\nfunction resolveReferencedTSConfigFiles(result) {\n const dir = path2.dirname(result.tsconfigFile);\n return result.tsconfig.references.map((ref) => {\n const refPath = ref.path.endsWith(\".json\") ? ref.path : path2.join(ref.path, \"tsconfig.json\");\n return resolve2posix(dir, refPath);\n });\n}\nfunction resolveSolutionTSConfig(filename, result) {\n if (result.referenced && [\".ts\", \".tsx\"].some((ext) => filename.endsWith(ext)) && !isIncluded(filename, result)) {\n const solutionTSConfig = result.referenced.find((referenced) => isIncluded(filename, referenced));\n if (solutionTSConfig) {\n return __spreadProps(__spreadValues({}, solutionTSConfig), {\n solution: result\n });\n }\n }\n return result;\n}\nfunction isIncluded(filename, result) {\n const dir = native2posix(path2.dirname(result.tsconfigFile));\n const files = (result.tsconfig.files || []).map((file) => resolve2posix(dir, file));\n const absoluteFilename = resolve2posix(null, filename);\n if (files.includes(filename)) {\n return true;\n }\n const isIncluded2 = isGlobMatch(absoluteFilename, dir, result.tsconfig.include || (result.tsconfig.files ? [] : [GLOB_ALL_PATTERN]));\n if (isIncluded2) {\n const isExcluded = isGlobMatch(absoluteFilename, dir, result.tsconfig.exclude || []);\n return !isExcluded;\n }\n return false;\n}\nfunction isGlobMatch(filename, dir, patterns) {\n return patterns.some((pattern) => {\n let lastWildcardIndex = pattern.length;\n let hasWildcard = false;\n for (let i = pattern.length - 1; i > -1; i--) {\n if (pattern[i] === \"*\" || pattern[i] === \"?\") {\n lastWildcardIndex = i;\n hasWildcard = true;\n break;\n }\n }\n if (lastWildcardIndex < pattern.length - 1 && !filename.endsWith(pattern.slice(lastWildcardIndex + 1))) {\n return false;\n }\n if (pattern.endsWith(\"*\") && !(filename.endsWith(\".ts\") || filename.endsWith(\".tsx\"))) {\n return false;\n }\n if (pattern === GLOB_ALL_PATTERN) {\n return filename.startsWith(`${dir}/`);\n }\n const resolvedPattern = resolve2posix(dir, pattern);\n let firstWildcardIndex = -1;\n for (let i = 0; i < resolvedPattern.length; i++) {\n if (resolvedPattern[i] === \"*\" || resolvedPattern[i] === \"?\") {\n firstWildcardIndex = i;\n hasWildcard = true;\n break;\n }\n }\n if (firstWildcardIndex > 1 && !filename.startsWith(resolvedPattern.slice(0, firstWildcardIndex - 1))) {\n return false;\n }\n if (!hasWildcard) {\n return filename === resolvedPattern;\n }\n if (PATTERN_REGEX_CACHE.has(resolvedPattern)) {\n return PATTERN_REGEX_CACHE.get(resolvedPattern).test(filename);\n }\n const regex = pattern2regex(resolvedPattern);\n PATTERN_REGEX_CACHE.set(resolvedPattern, regex);\n return regex.test(filename);\n });\n}\nfunction pattern2regex(resolvedPattern) {\n let regexStr = \"^\";\n for (let i = 0; i < resolvedPattern.length; i++) {\n const char = resolvedPattern[i];\n if (char === \"?\") {\n regexStr += \"[^\\\\/]\";\n continue;\n }\n if (char === \"*\") {\n if (resolvedPattern[i + 1] === \"*\" && resolvedPattern[i + 2] === \"/\") {\n i += 2;\n regexStr += \"(?:[^\\\\/]*\\\\/)*\";\n continue;\n }\n regexStr += \"[^\\\\/]*\";\n continue;\n }\n if (\"/.+^${}()|[]\\\\\".includes(char)) {\n regexStr += `\\\\`;\n }\n regexStr += char;\n }\n if (resolvedPattern.endsWith(\"*\")) {\n regexStr += \"\\\\.tsx?\";\n }\n regexStr += \"$\";\n return new RegExp(regexStr);\n}\n\n// src/parse.ts\nasync function parse(filename, options) {\n const cache = options == null ? void 0 : options.cache;\n if (cache == null ? void 0 : cache.has(filename)) {\n return cache.get(filename);\n }\n let tsconfigFile;\n if (options == null ? void 0 : options.resolveWithEmptyIfConfigNotFound) {\n try {\n tsconfigFile = await resolveTSConfig(filename) || await find(filename);\n } catch (e) {\n const notFoundResult = {\n tsconfigFile: \"no_tsconfig_file_found\",\n tsconfig: {}\n };\n cache == null ? void 0 : cache.set(filename, notFoundResult);\n return notFoundResult;\n }\n } else {\n tsconfigFile = await resolveTSConfig(filename) || await find(filename);\n }\n let result;\n if (cache == null ? void 0 : cache.has(tsconfigFile)) {\n result = cache.get(tsconfigFile);\n } else {\n result = await parseFile(tsconfigFile, cache);\n await Promise.all([parseExtends(result, cache), parseReferences(result, cache)]);\n cache == null ? void 0 : cache.set(tsconfigFile, result);\n }\n result = resolveSolutionTSConfig(filename, result);\n cache == null ? void 0 : cache.set(filename, result);\n return result;\n}\nasync function parseFile(tsconfigFile, cache) {\n if (cache == null ? void 0 : cache.has(tsconfigFile)) {\n return cache.get(tsconfigFile);\n }\n try {\n const tsconfigJson = await fs3.readFile(tsconfigFile, \"utf-8\");\n const json = toJson(tsconfigJson);\n const result = {\n tsconfigFile,\n tsconfig: normalizeTSConfig(JSON.parse(json), path3.dirname(tsconfigFile))\n };\n cache == null ? void 0 : cache.set(tsconfigFile, result);\n return result;\n } catch (e) {\n throw new TSConfckParseError(`parsing ${tsconfigFile} failed: ${e}`, \"PARSE_FILE\", tsconfigFile, e);\n }\n}\nfunction normalizeTSConfig(tsconfig, dir) {\n var _a;\n if (((_a = tsconfig.compilerOptions) == null ? void 0 : _a.baseUrl) && !path3.isAbsolute(tsconfig.compilerOptions.baseUrl)) {\n tsconfig.compilerOptions.baseUrl = resolve2posix(dir, tsconfig.compilerOptions.baseUrl);\n }\n return tsconfig;\n}\nasync function parseReferences(result, cache) {\n if (!result.tsconfig.references) {\n return;\n }\n const referencedFiles = resolveReferencedTSConfigFiles(result);\n const referenced = await Promise.all(referencedFiles.map((file) => parseFile(file, cache)));\n await Promise.all(referenced.map((ref) => parseExtends(ref, cache)));\n result.referenced = referenced;\n}\nasync function parseExtends(result, cache) {\n if (!result.tsconfig.extends) {\n return;\n }\n const extended = [\n { tsconfigFile: result.tsconfigFile, tsconfig: JSON.parse(JSON.stringify(result.tsconfig)) }\n ];\n while (extended[extended.length - 1].tsconfig.extends) {\n const extending = extended[extended.length - 1];\n const extendedTSConfigFile = resolveExtends(extending.tsconfig.extends, extending.tsconfigFile);\n if (extended.some((x) => x.tsconfigFile === extendedTSConfigFile)) {\n const circle = extended.concat({ tsconfigFile: extendedTSConfigFile, tsconfig: null }).map((e) => e.tsconfigFile).join(\" -> \");\n throw new TSConfckParseError(`Circular dependency in \"extends\": ${circle}`, \"EXTENDS_CIRCULAR\", result.tsconfigFile);\n }\n extended.push(await parseFile(extendedTSConfigFile, cache));\n }\n result.extended = extended;\n for (const ext of result.extended.slice(1)) {\n extendTSConfig(result, ext);\n }\n}\nfunction resolveExtends(extended, from) {\n try {\n return createRequire(from).resolve(extended);\n } catch (e) {\n throw new TSConfckParseError(`failed to resolve \"extends\":\"${extended}\" in ${from}`, \"EXTENDS_RESOLVE\", from, e);\n }\n}\nvar EXTENDABLE_KEYS = [\n \"compilerOptions\",\n \"files\",\n \"include\",\n \"exclude\",\n \"watchOptions\",\n \"compileOnSave\",\n \"typeAcquisition\",\n \"buildOptions\"\n];\nfunction extendTSConfig(extending, extended) {\n const extendingConfig = extending.tsconfig;\n const extendedConfig = extended.tsconfig;\n const relativePath = native2posix(path3.relative(path3.dirname(extending.tsconfigFile), path3.dirname(extended.tsconfigFile)));\n for (const key of Object.keys(extendedConfig).filter((key2) => EXTENDABLE_KEYS.includes(key2))) {\n if (key === \"compilerOptions\") {\n if (!extendingConfig.compilerOptions) {\n extendingConfig.compilerOptions = {};\n }\n for (const option of Object.keys(extendedConfig.compilerOptions)) {\n if (Object.prototype.hasOwnProperty.call(extendingConfig.compilerOptions, option)) {\n continue;\n }\n extendingConfig.compilerOptions[option] = rebaseRelative(option, extendedConfig.compilerOptions[option], relativePath);\n }\n } else if (extendingConfig[key] === void 0) {\n if (key === \"watchOptions\") {\n extendingConfig.watchOptions = {};\n for (const option of Object.keys(extendedConfig.watchOptions)) {\n extendingConfig.watchOptions[option] = rebaseRelative(option, extendedConfig.watchOptions[option], relativePath);\n }\n } else {\n extendingConfig[key] = rebaseRelative(key, extendedConfig[key], relativePath);\n }\n }\n }\n}\nvar REBASE_KEYS = [\n \"files\",\n \"include\",\n \"exclude\",\n \"baseUrl\",\n \"rootDir\",\n \"rootDirs\",\n \"typeRoots\",\n \"outDir\",\n \"outFile\",\n \"declarationDir\",\n \"excludeDirectories\",\n \"excludeFiles\"\n];\nfunction rebaseRelative(key, value, prependPath) {\n if (!REBASE_KEYS.includes(key)) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((x) => rebasePath(x, prependPath));\n } else {\n return rebasePath(value, prependPath);\n }\n}\nfunction rebasePath(value, prependPath) {\n if (path3.isAbsolute(value)) {\n return value;\n } else {\n return path3.posix.normalize(path3.posix.join(prependPath, value));\n }\n}\nvar TSConfckParseError = class extends Error {\n constructor(message, code, tsconfigFile, cause) {\n super(message);\n Object.setPrototypeOf(this, TSConfckParseError.prototype);\n this.name = TSConfckParseError.name;\n this.code = code;\n this.cause = cause;\n this.tsconfigFile = tsconfigFile;\n }\n};\n\n// src/find-native.ts\nimport path4 from \"path\";\nasync function findNative(filename) {\n const ts = await loadTS();\n const { findConfigFile, sys } = ts;\n const tsconfigFile = findConfigFile(path4.dirname(path4.resolve(filename)), sys.fileExists);\n if (!tsconfigFile) {\n throw new Error(`no tsconfig file found for ${filename}`);\n }\n return tsconfigFile;\n}\n\n// src/parse-native.ts\nimport path5 from \"path\";\nasync function parseNative(filename, options) {\n const cache = options == null ? void 0 : options.cache;\n if (cache == null ? void 0 : cache.has(filename)) {\n return cache.get(filename);\n }\n let tsconfigFile;\n if (options == null ? void 0 : options.resolveWithEmptyIfConfigNotFound) {\n try {\n tsconfigFile = await resolveTSConfig(filename);\n if (!tsconfigFile) {\n tsconfigFile = await findNative(filename);\n }\n } catch (e) {\n const notFoundResult = {\n tsconfigFile: \"no_tsconfig_file_found\",\n tsconfig: {},\n result: null\n };\n cache == null ? void 0 : cache.set(filename, notFoundResult);\n return notFoundResult;\n }\n } else {\n tsconfigFile = await resolveTSConfig(filename);\n if (!tsconfigFile) {\n tsconfigFile = await findNative(filename);\n }\n }\n let result;\n if (cache == null ? void 0 : cache.has(tsconfigFile)) {\n result = cache.get(tsconfigFile);\n } else {\n const ts = await loadTS();\n result = await parseFile2(tsconfigFile, ts, options);\n await parseReferences2(result, ts, options);\n cache == null ? void 0 : cache.set(tsconfigFile, result);\n }\n result = resolveSolutionTSConfig(filename, result);\n cache == null ? void 0 : cache.set(filename, result);\n return result;\n}\nasync function parseFile2(tsconfigFile, ts, options) {\n const cache = options == null ? void 0 : options.cache;\n if (cache == null ? void 0 : cache.has(tsconfigFile)) {\n return cache.get(tsconfigFile);\n }\n const posixTSConfigFile = native2posix(tsconfigFile);\n const { parseJsonConfigFileContent, readConfigFile, sys } = ts;\n const { config, error } = readConfigFile(posixTSConfigFile, sys.readFile);\n if (error) {\n throw new TSConfckParseNativeError(error, tsconfigFile, null);\n }\n const host = {\n useCaseSensitiveFileNames: false,\n readDirectory: sys.readDirectory,\n fileExists: sys.fileExists,\n readFile: sys.readFile\n };\n if (options == null ? void 0 : options.ignoreSourceFiles) {\n config.files = [];\n config.include = [];\n }\n const nativeResult = parseJsonConfigFileContent(config, host, path5.dirname(posixTSConfigFile), void 0, posixTSConfigFile);\n checkErrors(nativeResult, tsconfigFile);\n const result = {\n tsconfigFile,\n tsconfig: result2tsconfig(nativeResult, ts),\n result: nativeResult\n };\n cache == null ? void 0 : cache.set(tsconfigFile, result);\n return result;\n}\nasync function parseReferences2(result, ts, options) {\n if (!result.tsconfig.references) {\n return;\n }\n const referencedFiles = resolveReferencedTSConfigFiles(result);\n result.referenced = await Promise.all(referencedFiles.map((file) => parseFile2(file, ts, options)));\n}\nfunction checkErrors(nativeResult, tsconfigFile) {\n var _a;\n const ignoredErrorCodes = [\n 18002,\n 18003\n ];\n const criticalError = (_a = nativeResult.errors) == null ? void 0 : _a.find((error) => error.category === 1 && !ignoredErrorCodes.includes(error.code));\n if (criticalError) {\n throw new TSConfckParseNativeError(criticalError, tsconfigFile, nativeResult);\n }\n}\nfunction result2tsconfig(result, ts) {\n const tsconfig = JSON.parse(JSON.stringify(result.raw));\n const ignoredOptions = [\"configFilePath\", \"pathsBasePath\"];\n if (result.options && Object.keys(result.options).some((o) => !ignoredOptions.includes(o))) {\n tsconfig.compilerOptions = __spreadValues({}, result.options);\n for (const ignored of ignoredOptions) {\n delete tsconfig.compilerOptions[ignored];\n }\n }\n const compilerOptions = tsconfig.compilerOptions;\n if (compilerOptions) {\n if (compilerOptions.lib != null) {\n compilerOptions.lib = compilerOptions.lib.map((x) => x.replace(/^lib\\./, \"\").replace(/\\.d\\.ts$/, \"\"));\n }\n const enumProperties = [\n { name: \"importsNotUsedAsValues\", enumeration: ts.ImportsNotUsedAsValues },\n { name: \"module\", enumeration: ts.ModuleKind },\n {\n name: \"moduleResolution\",\n enumeration: { 1: \"classic\", 2: \"node\" }\n },\n {\n name: \"newLine\",\n enumeration: { 0: \"crlf\", 1: \"lf\" }\n },\n { name: \"target\", enumeration: ts.ScriptTarget }\n ];\n for (const prop of enumProperties) {\n if (compilerOptions[prop.name] != null && typeof compilerOptions[prop.name] === \"number\") {\n compilerOptions[prop.name] = prop.enumeration[compilerOptions[prop.name]].toLowerCase();\n }\n }\n }\n if (result.watchOptions) {\n tsconfig.watchOptions = __spreadValues({}, result.watchOptions);\n }\n const watchOptions = tsconfig.watchOptions;\n if (watchOptions) {\n const enumProperties = [\n { name: \"watchFile\", enumeration: ts.WatchFileKind },\n { name: \"watchDirectory\", enumeration: ts.WatchDirectoryKind },\n { name: \"fallbackPolling\", enumeration: ts.PollingWatchKind }\n ];\n for (const prop of enumProperties) {\n if (watchOptions[prop.name] != null && typeof watchOptions[prop.name] === \"number\") {\n const enumVal = prop.enumeration[watchOptions[prop.name]];\n watchOptions[prop.name] = enumVal.charAt(0).toLowerCase() + enumVal.slice(1);\n }\n }\n }\n if (tsconfig.compileOnSave === false) {\n delete tsconfig.compileOnSave;\n }\n return tsconfig;\n}\nvar TSConfckParseNativeError = class extends Error {\n constructor(diagnostic, tsconfigFile, result) {\n super(diagnostic.messageText);\n Object.setPrototypeOf(this, TSConfckParseNativeError.prototype);\n this.name = TSConfckParseNativeError.name;\n this.code = `TS ${diagnostic.code}`;\n this.diagnostic = diagnostic;\n this.result = result;\n this.tsconfigFile = tsconfigFile;\n }\n};\nexport {\n TSConfckParseError,\n TSConfckParseNativeError,\n find,\n findNative,\n parse,\n parseNative,\n toJson\n};\n//# sourceMappingURL=index.js.map\n","import path from 'path'\nimport chalk from 'chalk'\nimport { Plugin } from '../plugin'\nimport {\n transform,\n Message,\n Loader,\n TransformOptions,\n TransformResult\n} from 'esbuild'\nimport {\n cleanUrl,\n createDebugger,\n ensureWatchedFile,\n generateCodeFrame,\n toUpperCaseDriveLetter\n} from '../utils'\nimport { RawSourceMap } from '@ampproject/remapping/dist/types/types'\nimport { SourceMap } from 'rollup'\nimport { ResolvedConfig, ViteDevServer } from '..'\nimport { createFilter } from '@rollup/pluginutils'\nimport { combineSourcemaps } from '../utils'\nimport { parse, TSConfckParseError, TSConfckParseResult } from 'tsconfck'\n\nconst debug = createDebugger('vite:esbuild')\n\nlet server: ViteDevServer\n\nexport interface ESBuildOptions extends TransformOptions {\n include?: string | RegExp | string[] | RegExp[]\n exclude?: string | RegExp | string[] | RegExp[]\n jsxInject?: string\n}\n\nexport type ESBuildTransformResult = Omit<TransformResult, 'map'> & {\n map: SourceMap\n}\n\ntype TSConfigJSON = {\n extends?: string\n compilerOptions?: {\n target?: string\n jsxFactory?: string\n jsxFragmentFactory?: string\n useDefineForClassFields?: boolean\n importsNotUsedAsValues?: 'remove' | 'preserve' | 'error'\n }\n [key: string]: any\n}\ntype TSCompilerOptions = NonNullable<TSConfigJSON['compilerOptions']>\n\nexport async function transformWithEsbuild(\n code: string,\n filename: string,\n options?: TransformOptions,\n inMap?: object\n): Promise<ESBuildTransformResult> {\n let loader = options?.loader\n\n if (!loader) {\n // if the id ends with a valid ext, use it (e.g. vue blocks)\n // otherwise, cleanup the query before checking the ext\n const ext = path\n .extname(/\\.\\w+$/.test(filename) ? filename : cleanUrl(filename))\n .slice(1)\n\n if (ext === 'cjs' || ext === 'mjs') {\n loader = 'js'\n } else {\n loader = ext as Loader\n }\n }\n\n let tsconfigRaw = options?.tsconfigRaw\n\n // if options provide tsconfigraw in string, it takes highest precedence\n if (typeof tsconfigRaw !== 'string') {\n // these fields would affect the compilation result\n // https://esbuild.github.io/content-types/#tsconfig-json\n const meaningfulFields: Array<keyof TSCompilerOptions> = [\n 'jsxFactory',\n 'jsxFragmentFactory',\n 'useDefineForClassFields',\n 'importsNotUsedAsValues'\n ]\n const compilerOptionsForFile: TSCompilerOptions = {}\n if (loader === 'ts' || loader === 'tsx') {\n const loadedTsconfig = await loadTsconfigJsonForFile(filename)\n const loadedCompilerOptions = loadedTsconfig.compilerOptions ?? {}\n\n for (const field of meaningfulFields) {\n if (field in loadedCompilerOptions) {\n // @ts-ignore TypeScript can't tell they are of the same type\n compilerOptionsForFile[field] = loadedCompilerOptions[field]\n }\n }\n\n // align with TypeScript 4.3\n // https://github.com/microsoft/TypeScript/pull/42663\n if (loadedCompilerOptions.target?.toLowerCase() === 'esnext') {\n compilerOptionsForFile.useDefineForClassFields =\n loadedCompilerOptions.useDefineForClassFields ?? true\n }\n }\n\n tsconfigRaw = {\n ...tsconfigRaw,\n compilerOptions: {\n ...compilerOptionsForFile,\n ...tsconfigRaw?.compilerOptions\n }\n }\n }\n\n const resolvedOptions = {\n sourcemap: true,\n // ensure source file name contains full query\n sourcefile: filename,\n ...options,\n loader,\n tsconfigRaw\n } as ESBuildOptions\n\n delete resolvedOptions.include\n delete resolvedOptions.exclude\n delete resolvedOptions.jsxInject\n\n try {\n const result = await transform(code, resolvedOptions)\n let map: SourceMap\n if (inMap && resolvedOptions.sourcemap) {\n const nextMap = JSON.parse(result.map)\n nextMap.sourcesContent = []\n map = combineSourcemaps(filename, [\n nextMap as RawSourceMap,\n inMap as RawSourceMap\n ]) as SourceMap\n } else {\n map = resolvedOptions.sourcemap\n ? JSON.parse(result.map)\n : { mappings: '' }\n }\n if (Array.isArray(map.sources)) {\n map.sources = map.sources.map((it) => toUpperCaseDriveLetter(it))\n }\n return {\n ...result,\n map\n }\n } catch (e: any) {\n debug(`esbuild error with options used: `, resolvedOptions)\n // patch error information\n if (e.errors) {\n e.frame = ''\n e.errors.forEach((m: Message) => {\n e.frame += `\\n` + prettifyMessage(m, code)\n })\n e.loc = e.errors[0].location\n }\n throw e\n }\n}\n\nexport function esbuildPlugin(options: ESBuildOptions = {}): Plugin {\n const filter = createFilter(\n options.include || /\\.(tsx?|jsx)$/,\n options.exclude || /\\.js$/\n )\n\n return {\n name: 'vite:esbuild',\n configureServer(_server) {\n server = _server\n server.watcher\n .on('add', reloadOnTsconfigChange)\n .on('change', reloadOnTsconfigChange)\n .on('unlink', reloadOnTsconfigChange)\n },\n async transform(code, id) {\n if (filter(id) || filter(cleanUrl(id))) {\n const result = await transformWithEsbuild(code, id, options)\n if (result.warnings.length) {\n result.warnings.forEach((m) => {\n this.warn(prettifyMessage(m, code))\n })\n }\n if (options.jsxInject && /\\.(?:j|t)sx\\b/.test(id)) {\n result.code = options.jsxInject + ';' + result.code\n }\n return {\n code: result.code,\n map: result.map\n }\n }\n }\n }\n}\n\nconst rollupToEsbuildFormatMap: Record<\n string,\n TransformOptions['format'] | undefined\n> = {\n es: 'esm',\n cjs: 'cjs',\n iife: 'iife'\n}\n\nexport const buildEsbuildPlugin = (config: ResolvedConfig): Plugin => {\n return {\n name: 'vite:esbuild-transpile',\n async renderChunk(code, chunk, opts) {\n // @ts-ignore injected by @vitejs/plugin-legacy\n if (opts.__vite_skip_esbuild__) {\n return null\n }\n\n const target = config.build.target\n const minify =\n config.build.minify === 'esbuild' &&\n // Do not minify ES lib output since that would remove pure annotations\n // and break tree-shaking\n // https://github.com/vuejs/vue-next/issues/2860#issuecomment-926882793\n !(config.build.lib && opts.format === 'es')\n\n if ((!target || target === 'esnext') && !minify) {\n return null\n }\n\n const res = await transformWithEsbuild(code, chunk.fileName, {\n target: target || undefined,\n ...(minify\n ? {\n minify,\n treeShaking: true,\n format: rollupToEsbuildFormatMap[opts.format]\n }\n : undefined)\n })\n return res\n }\n }\n}\n\nfunction prettifyMessage(m: Message, code: string): string {\n let res = chalk.yellow(m.text)\n if (m.location) {\n const lines = code.split(/\\r?\\n/g)\n const line = Number(m.location.line)\n const column = Number(m.location.column)\n const offset =\n lines\n .slice(0, line - 1)\n .map((l) => l.length)\n .reduce((total, l) => total + l + 1, 0) + column\n res += `\\n` + generateCodeFrame(code, offset, offset + 1)\n }\n return res + `\\n`\n}\n\nconst tsconfigCache = new Map<string, TSConfckParseResult>()\nasync function loadTsconfigJsonForFile(\n filename: string\n): Promise<TSConfigJSON> {\n try {\n const result = await parse(filename, {\n cache: tsconfigCache,\n resolveWithEmptyIfConfigNotFound: true\n })\n // tsconfig could be out of root, make sure it is watched on dev\n if (server && result.tsconfigFile !== 'no_tsconfig_file_found') {\n ensureWatchedFile(server.watcher, result.tsconfigFile, server.config.root)\n }\n return result.tsconfig\n } catch (e) {\n if (e instanceof TSConfckParseError) {\n // tsconfig could be out of root, make sure it is watched on dev\n if (server && e.tsconfigFile) {\n ensureWatchedFile(server.watcher, e.tsconfigFile, server.config.root)\n }\n }\n throw e\n }\n}\n\nfunction reloadOnTsconfigChange(changedFile: string) {\n // any tsconfig.json that's added in the workspace could be closer to a code file than a previously cached one\n // any json file in the tsconfig cache could have been used to compile ts\n if (\n path.basename(changedFile) === 'tsconfig.json' ||\n (changedFile.endsWith('.json') && tsconfigCache.has(changedFile))\n ) {\n server.config.logger.info(\n `changed tsconfig file detected: ${changedFile} - Clearing cache and forcing full-reload to ensure typescript is compiled with updated config values.`,\n { clear: server.config.clearScreen, timestamp: true }\n )\n // clear tsconfig cache so that recompile works with up2date configs\n tsconfigCache.clear()\n // clear module graph to remove code compiled with outdated config\n server.moduleGraph.invalidateAll()\n // force full reload\n server.ws.send({\n type: 'full-reload',\n path: '*'\n })\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Worker = void 0;\nconst os_1 = __importDefault(require(\"os\"));\nconst worker_threads_1 = require(\"worker_threads\");\nclass Worker {\n constructor(fn, options = {}) {\n this.code = genWorkerCode(fn);\n this.max = options.max || Math.max(1, os_1.default.cpus().length - 1);\n this.pool = [];\n this.idlePool = [];\n this.queue = [];\n }\n async run(...args) {\n const worker = await this._getAvailableWorker();\n return new Promise((resolve, reject) => {\n worker.currentResolve = resolve;\n worker.currentReject = reject;\n worker.postMessage(args);\n });\n }\n stop() {\n this.pool.forEach((w) => w.unref());\n this.queue.forEach(([_, reject]) => reject(new Error('Main worker pool stopped before a worker was available.')));\n this.pool = [];\n this.idlePool = [];\n this.queue = [];\n }\n async _getAvailableWorker() {\n // has idle one?\n if (this.idlePool.length) {\n return this.idlePool.shift();\n }\n // can spawn more?\n if (this.pool.length < this.max) {\n const worker = new worker_threads_1.Worker(this.code, { eval: true });\n worker.on('message', (res) => {\n worker.currentResolve && worker.currentResolve(res);\n worker.currentResolve = null;\n this._assignDoneWorker(worker);\n });\n worker.on('error', (err) => {\n worker.currentReject && worker.currentReject(err);\n worker.currentReject = null;\n });\n worker.on('exit', (code) => {\n const i = this.pool.indexOf(worker);\n if (i > -1)\n this.pool.splice(i, 1);\n if (code !== 0 && worker.currentReject) {\n worker.currentReject(new Error(`Wroker stopped with non-0 exit code ${code}`));\n worker.currentReject = null;\n }\n });\n this.pool.push(worker);\n return worker;\n }\n // no one is available, we have to wait\n let resolve;\n let reject;\n const onWorkerAvailablePromise = new Promise((r, rj) => {\n resolve = r;\n reject = rj;\n });\n this.queue.push([resolve, reject]);\n return onWorkerAvailablePromise;\n }\n _assignDoneWorker(worker) {\n // someone's waiting already?\n if (this.queue.length) {\n const [resolve] = this.queue.shift();\n resolve(worker);\n return;\n }\n // take a rest.\n this.idlePool.push(worker);\n }\n}\nexports.Worker = Worker;\nfunction genWorkerCode(fn) {\n return `\nconst doWork = ${fn.toString()}\n\nconst { parentPort } = require('worker_threads')\n\nparentPort.on('message', async (args) => {\n const res = await doWork(...args)\n parentPort.postMessage(res)\n})\n `;\n}\n","import { Plugin } from '../plugin'\nimport { Worker } from 'okie'\nimport { Terser } from 'types/terser'\nimport { ResolvedConfig } from '..'\n\nexport function terserPlugin(config: ResolvedConfig): Plugin {\n const worker = new Worker(\n (basedir: string, code: string, options: Terser.MinifyOptions) => {\n // when vite is linked, the worker thread won't share the same resolve\n // root with vite itself, so we have to pass in the basedir and resolve\n // terser first.\n // eslint-disable-next-line node/no-restricted-require\n const terserPath = require.resolve('terser', {\n paths: [basedir]\n })\n return require(terserPath).minify(code, options) as Terser.MinifyOutput\n }\n )\n\n return {\n name: 'vite:terser',\n\n async renderChunk(code, _chunk, outputOptions) {\n // Do not minify ES lib output since that would remove pure annotations\n // and break tree-shaking\n if (config.build.lib && outputOptions.format === 'es') {\n return null\n }\n\n const res = await worker.run(__dirname, code, {\n safari10: true,\n ...config.build.terserOptions,\n sourceMap: !!outputOptions.sourcemap,\n module: outputOptions.format.startsWith('es'),\n toplevel: outputOptions.format === 'cjs'\n })\n return {\n code: res.code!,\n map: res.map as any\n }\n },\n\n closeBundle() {\n worker.stop()\n }\n }\n}\n","import path from 'path'\nimport { OutputChunk } from 'rollup'\nimport { ResolvedConfig } from '..'\nimport { Plugin } from '../plugin'\nimport { chunkToEmittedCssFileMap } from './css'\nimport { chunkToEmittedAssetsMap } from './asset'\nimport { normalizePath } from '../utils'\n\nexport type Manifest = Record<string, ManifestChunk>\n\nexport interface ManifestChunk {\n src?: string\n file: string\n css?: string[]\n assets?: string[]\n isEntry?: boolean\n isDynamicEntry?: boolean\n imports?: string[]\n dynamicImports?: string[]\n}\n\nexport function manifestPlugin(config: ResolvedConfig): Plugin {\n const manifest: Manifest = {}\n\n let outputCount: number\n\n return {\n name: 'vite:manifest',\n\n buildStart() {\n outputCount = 0\n },\n\n generateBundle({ format }, bundle) {\n function getChunkName(chunk: OutputChunk) {\n if (chunk.facadeModuleId) {\n let name = normalizePath(\n path.relative(config.root, chunk.facadeModuleId)\n )\n if (format === 'system' && !chunk.name.includes('-legacy')) {\n const ext = path.extname(name)\n name = name.slice(0, -ext.length) + `-legacy` + ext\n }\n return name\n } else {\n return `_` + path.basename(chunk.fileName)\n }\n }\n\n function getInternalImports(imports: string[]): string[] {\n const filteredImports: string[] = []\n\n for (const file of imports) {\n if (bundle[file] === undefined) {\n continue\n }\n\n filteredImports.push(getChunkName(bundle[file] as OutputChunk))\n }\n\n return filteredImports\n }\n\n function createChunk(chunk: OutputChunk): ManifestChunk {\n const manifestChunk: ManifestChunk = {\n file: chunk.fileName\n }\n\n if (chunk.facadeModuleId) {\n manifestChunk.src = getChunkName(chunk)\n }\n if (chunk.isEntry) {\n manifestChunk.isEntry = true\n }\n if (chunk.isDynamicEntry) {\n manifestChunk.isDynamicEntry = true\n }\n\n if (chunk.imports.length) {\n const internalImports = getInternalImports(chunk.imports)\n if (internalImports.length > 0) {\n manifestChunk.imports = internalImports\n }\n }\n\n if (chunk.dynamicImports.length) {\n const internalImports = getInternalImports(chunk.dynamicImports)\n if (internalImports.length > 0) {\n manifestChunk.dynamicImports = internalImports\n }\n }\n\n const cssFiles = chunkToEmittedCssFileMap.get(chunk)\n if (cssFiles) {\n manifestChunk.css = [...cssFiles]\n }\n\n const assets = chunkToEmittedAssetsMap.get(chunk)\n if (assets) [(manifestChunk.assets = [...assets])]\n\n return manifestChunk\n }\n\n for (const file in bundle) {\n const chunk = bundle[file]\n if (chunk.type === 'chunk') {\n manifest[getChunkName(chunk)] = createChunk(chunk)\n }\n }\n\n outputCount++\n const output = config.build.rollupOptions?.output\n const outputLength = Array.isArray(output) ? output.length : 1\n if (outputCount >= outputLength) {\n this.emitFile({\n fileName: `manifest.json`,\n type: 'asset',\n source: JSON.stringify(manifest, null, 2)\n })\n }\n }\n }\n}\n","import { extname, sep, resolve, posix } from 'path';\nimport pm from 'picomatch';\n\nconst addExtension = function addExtension(filename, ext = '.js') {\n let result = `${filename}`;\n if (!extname(filename))\n result += ext;\n return result;\n};\n\nfunction walk(ast, { enter, leave }) {\n\treturn visit(ast, null, enter, leave);\n}\n\nlet should_skip = false;\nlet should_remove = false;\nlet replacement = null;\nconst context = {\n\tskip: () => should_skip = true,\n\tremove: () => should_remove = true,\n\treplace: (node) => replacement = node\n};\n\nfunction replace(parent, prop, index, node) {\n\tif (parent) {\n\t\tif (index !== null) {\n\t\t\tparent[prop][index] = node;\n\t\t} else {\n\t\t\tparent[prop] = node;\n\t\t}\n\t}\n}\n\nfunction remove(parent, prop, index) {\n\tif (parent) {\n\t\tif (index !== null) {\n\t\t\tparent[prop].splice(index, 1);\n\t\t} else {\n\t\t\tdelete parent[prop];\n\t\t}\n\t}\n}\n\nfunction visit(\n\tnode,\n\tparent,\n\tenter,\n\tleave,\n\tprop,\n\tindex\n) {\n\tif (node) {\n\t\tif (enter) {\n\t\t\tconst _should_skip = should_skip;\n\t\t\tconst _should_remove = should_remove;\n\t\t\tconst _replacement = replacement;\n\t\t\tshould_skip = false;\n\t\t\tshould_remove = false;\n\t\t\treplacement = null;\n\n\t\t\tenter.call(context, node, parent, prop, index);\n\n\t\t\tif (replacement) {\n\t\t\t\tnode = replacement;\n\t\t\t\treplace(parent, prop, index, node);\n\t\t\t}\n\n\t\t\tif (should_remove) {\n\t\t\t\tremove(parent, prop, index);\n\t\t\t}\n\n\t\t\tconst skipped = should_skip;\n\t\t\tconst removed = should_remove;\n\n\t\t\tshould_skip = _should_skip;\n\t\t\tshould_remove = _should_remove;\n\t\t\treplacement = _replacement;\n\n\t\t\tif (skipped) return node;\n\t\t\tif (removed) return null;\n\t\t}\n\n\t\tfor (const key in node) {\n\t\t\tconst value = (node )[key];\n\n\t\t\tif (typeof value !== 'object') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\telse if (Array.isArray(value)) {\n\t\t\t\tfor (let j = 0, k = 0; j < value.length; j += 1, k += 1) {\n\t\t\t\t\tif (value[j] !== null && typeof value[j].type === 'string') {\n\t\t\t\t\t\tif (!visit(value[j], node, enter, leave, key, k)) {\n\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\tj--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if (value !== null && typeof value.type === 'string') {\n\t\t\t\tvisit(value, node, enter, leave, key, null);\n\t\t\t}\n\t\t}\n\n\t\tif (leave) {\n\t\t\tconst _replacement = replacement;\n\t\t\tconst _should_remove = should_remove;\n\t\t\treplacement = null;\n\t\t\tshould_remove = false;\n\n\t\t\tleave.call(context, node, parent, prop, index);\n\n\t\t\tif (replacement) {\n\t\t\t\tnode = replacement;\n\t\t\t\treplace(parent, prop, index, node);\n\t\t\t}\n\n\t\t\tif (should_remove) {\n\t\t\t\tremove(parent, prop, index);\n\t\t\t}\n\n\t\t\tconst removed = should_remove;\n\n\t\t\treplacement = _replacement;\n\t\t\tshould_remove = _should_remove;\n\n\t\t\tif (removed) return null;\n\t\t}\n\t}\n\n\treturn node;\n}\n\nconst extractors = {\n ArrayPattern(names, param) {\n for (const element of param.elements) {\n if (element)\n extractors[element.type](names, element);\n }\n },\n AssignmentPattern(names, param) {\n extractors[param.left.type](names, param.left);\n },\n Identifier(names, param) {\n names.push(param.name);\n },\n MemberExpression() { },\n ObjectPattern(names, param) {\n for (const prop of param.properties) {\n // @ts-ignore Typescript reports that this is not a valid type\n if (prop.type === 'RestElement') {\n extractors.RestElement(names, prop);\n }\n else {\n extractors[prop.value.type](names, prop.value);\n }\n }\n },\n RestElement(names, param) {\n extractors[param.argument.type](names, param.argument);\n }\n};\nconst extractAssignedNames = function extractAssignedNames(param) {\n const names = [];\n extractors[param.type](names, param);\n return names;\n};\n\nconst blockDeclarations = {\n const: true,\n let: true\n};\nclass Scope {\n constructor(options = {}) {\n this.parent = options.parent;\n this.isBlockScope = !!options.block;\n this.declarations = Object.create(null);\n if (options.params) {\n options.params.forEach((param) => {\n extractAssignedNames(param).forEach((name) => {\n this.declarations[name] = true;\n });\n });\n }\n }\n addDeclaration(node, isBlockDeclaration, isVar) {\n if (!isBlockDeclaration && this.isBlockScope) {\n // it's a `var` or function node, and this\n // is a block scope, so we need to go up\n this.parent.addDeclaration(node, isBlockDeclaration, isVar);\n }\n else if (node.id) {\n extractAssignedNames(node.id).forEach((name) => {\n this.declarations[name] = true;\n });\n }\n }\n contains(name) {\n return this.declarations[name] || (this.parent ? this.parent.contains(name) : false);\n }\n}\nconst attachScopes = function attachScopes(ast, propertyName = 'scope') {\n let scope = new Scope();\n walk(ast, {\n enter(n, parent) {\n const node = n;\n // function foo () {...}\n // class Foo {...}\n if (/(Function|Class)Declaration/.test(node.type)) {\n scope.addDeclaration(node, false, false);\n }\n // var foo = 1\n if (node.type === 'VariableDeclaration') {\n const { kind } = node;\n const isBlockDeclaration = blockDeclarations[kind];\n // don't add const/let declarations in the body of a for loop #113\n const parentType = parent ? parent.type : '';\n if (!(isBlockDeclaration && /ForOfStatement/.test(parentType))) {\n node.declarations.forEach((declaration) => {\n scope.addDeclaration(declaration, isBlockDeclaration, true);\n });\n }\n }\n let newScope;\n // create new function scope\n if (/Function/.test(node.type)) {\n const func = node;\n newScope = new Scope({\n parent: scope,\n block: false,\n params: func.params\n });\n // named function expressions - the name is considered\n // part of the function's scope\n if (func.type === 'FunctionExpression' && func.id) {\n newScope.addDeclaration(func, false, false);\n }\n }\n // create new block scope\n if (node.type === 'BlockStatement' && !/Function/.test(parent.type)) {\n newScope = new Scope({\n parent: scope,\n block: true\n });\n }\n // catch clause has its own block scope\n if (node.type === 'CatchClause') {\n newScope = new Scope({\n parent: scope,\n params: node.param ? [node.param] : [],\n block: true\n });\n }\n if (newScope) {\n Object.defineProperty(node, propertyName, {\n value: newScope,\n configurable: true\n });\n scope = newScope;\n }\n },\n leave(n) {\n const node = n;\n if (node[propertyName])\n scope = scope.parent;\n }\n });\n return scope;\n};\n\n// Helper since Typescript can't detect readonly arrays with Array.isArray\nfunction isArray(arg) {\n return Array.isArray(arg);\n}\nfunction ensureArray(thing) {\n if (isArray(thing))\n return thing;\n if (thing == null)\n return [];\n return [thing];\n}\n\nfunction getMatcherString(id, resolutionBase) {\n if (resolutionBase === false) {\n return id;\n }\n // resolve('') is valid and will default to process.cwd()\n const basePath = resolve(resolutionBase || '')\n .split(sep)\n .join('/')\n // escape all possible (posix + win) path characters that might interfere with regex\n .replace(/[-^$*+?.()|[\\]{}]/g, '\\\\$&');\n // Note that we use posix.join because:\n // 1. the basePath has been normalized to use /\n // 2. the incoming glob (id) matcher, also uses /\n // otherwise Node will force backslash (\\) on windows\n return posix.join(basePath, id);\n}\nconst createFilter = function createFilter(include, exclude, options) {\n const resolutionBase = options && options.resolve;\n const getMatcher = (id) => id instanceof RegExp\n ? id\n : {\n test: (what) => {\n // this refactor is a tad overly verbose but makes for easy debugging\n const pattern = getMatcherString(id, resolutionBase);\n const fn = pm(pattern, { dot: true });\n const result = fn(what);\n return result;\n }\n };\n const includeMatchers = ensureArray(include).map(getMatcher);\n const excludeMatchers = ensureArray(exclude).map(getMatcher);\n return function result(id) {\n if (typeof id !== 'string')\n return false;\n if (/\\0/.test(id))\n return false;\n const pathId = id.split(sep).join('/');\n for (let i = 0; i < excludeMatchers.length; ++i) {\n const matcher = excludeMatchers[i];\n if (matcher.test(pathId))\n return false;\n }\n for (let i = 0; i < includeMatchers.length; ++i) {\n const matcher = includeMatchers[i];\n if (matcher.test(pathId))\n return true;\n }\n return !includeMatchers.length;\n };\n};\n\nconst reservedWords = 'break case class catch const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield enum await implements package protected static interface private public';\nconst builtins = 'arguments Infinity NaN undefined null true false eval uneval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Symbol Error EvalError InternalError RangeError ReferenceError SyntaxError TypeError URIError Number Math Date String RegExp Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array Map Set WeakMap WeakSet SIMD ArrayBuffer DataView JSON Promise Generator GeneratorFunction Reflect Proxy Intl';\nconst forbiddenIdentifiers = new Set(`${reservedWords} ${builtins}`.split(' '));\nforbiddenIdentifiers.add('');\nconst makeLegalIdentifier = function makeLegalIdentifier(str) {\n let identifier = str\n .replace(/-(\\w)/g, (_, letter) => letter.toUpperCase())\n .replace(/[^$_a-zA-Z0-9]/g, '_');\n if (/\\d/.test(identifier[0]) || forbiddenIdentifiers.has(identifier)) {\n identifier = `_${identifier}`;\n }\n return identifier || '_';\n};\n\nfunction stringify(obj) {\n return (JSON.stringify(obj) || 'undefined').replace(/[\\u2028\\u2029]/g, (char) => `\\\\u${`000${char.charCodeAt(0).toString(16)}`.slice(-4)}`);\n}\nfunction serializeArray(arr, indent, baseIndent) {\n let output = '[';\n const separator = indent ? `\\n${baseIndent}${indent}` : '';\n for (let i = 0; i < arr.length; i++) {\n const key = arr[i];\n output += `${i > 0 ? ',' : ''}${separator}${serialize(key, indent, baseIndent + indent)}`;\n }\n return `${output}${indent ? `\\n${baseIndent}` : ''}]`;\n}\nfunction serializeObject(obj, indent, baseIndent) {\n let output = '{';\n const separator = indent ? `\\n${baseIndent}${indent}` : '';\n const entries = Object.entries(obj);\n for (let i = 0; i < entries.length; i++) {\n const [key, value] = entries[i];\n const stringKey = makeLegalIdentifier(key) === key ? key : stringify(key);\n output += `${i > 0 ? ',' : ''}${separator}${stringKey}:${indent ? ' ' : ''}${serialize(value, indent, baseIndent + indent)}`;\n }\n return `${output}${indent ? `\\n${baseIndent}` : ''}}`;\n}\nfunction serialize(obj, indent, baseIndent) {\n if (obj === Infinity)\n return 'Infinity';\n if (obj === -Infinity)\n return '-Infinity';\n if (obj === 0 && 1 / obj === -Infinity)\n return '-0';\n if (obj instanceof Date)\n return `new Date(${obj.getTime()})`;\n if (obj instanceof RegExp)\n return obj.toString();\n if (obj !== obj)\n return 'NaN'; // eslint-disable-line no-self-compare\n if (Array.isArray(obj))\n return serializeArray(obj, indent, baseIndent);\n if (obj === null)\n return 'null';\n if (typeof obj === 'object')\n return serializeObject(obj, indent, baseIndent);\n return stringify(obj);\n}\nconst dataToEsm = function dataToEsm(data, options = {}) {\n const t = options.compact ? '' : 'indent' in options ? options.indent : '\\t';\n const _ = options.compact ? '' : ' ';\n const n = options.compact ? '' : '\\n';\n const declarationType = options.preferConst ? 'const' : 'var';\n if (options.namedExports === false ||\n typeof data !== 'object' ||\n Array.isArray(data) ||\n data instanceof Date ||\n data instanceof RegExp ||\n data === null) {\n const code = serialize(data, options.compact ? null : t, '');\n const magic = _ || (/^[{[\\-\\/]/.test(code) ? '' : ' '); // eslint-disable-line no-useless-escape\n return `export default${magic}${code};`;\n }\n let namedExportCode = '';\n const defaultExportRows = [];\n for (const [key, value] of Object.entries(data)) {\n if (key === makeLegalIdentifier(key)) {\n if (options.objectShorthand)\n defaultExportRows.push(key);\n else\n defaultExportRows.push(`${key}:${_}${key}`);\n namedExportCode += `export ${declarationType} ${key}${_}=${_}${serialize(value, options.compact ? null : t, '')};${n}`;\n }\n else {\n defaultExportRows.push(`${stringify(key)}:${_}${serialize(value, options.compact ? null : t, '')}`);\n }\n }\n return `${namedExportCode}export default${_}{${n}${t}${defaultExportRows.join(`,${n}${t}`)}${n}};${n}`;\n};\n\n// TODO: remove this in next major\nvar index = {\n addExtension,\n attachScopes,\n createFilter,\n dataToEsm,\n extractAssignedNames,\n makeLegalIdentifier\n};\n\nexport default index;\nexport { addExtension, attachScopes, createFilter, dataToEsm, extractAssignedNames, makeLegalIdentifier };\n","var path = require('path');\n\nmodule.exports = function (basedir, relfiles) {\n if (relfiles) {\n var files = relfiles.map(function (r) {\n return path.resolve(basedir, r);\n });\n }\n else {\n var files = basedir;\n }\n \n var res = files.slice(1).reduce(function (ps, file) {\n if (!file.match(/^([A-Za-z]:)?\\/|\\\\/)) {\n throw new Error('relative path without a basedir');\n }\n \n var xs = file.split(/\\/+|\\\\+/);\n for (\n var i = 0;\n ps[i] === xs[i] && i < Math.min(ps.length, xs.length);\n i++\n );\n return ps.slice(0, i);\n }, files[0].split(/\\/+|\\\\+/));\n \n // Windows correctly handles paths with forward-slashes\n return res.length > 1 ? res.join('/') : '/'\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar pathModule = require('path');\nvar isWindows = process.platform === 'win32';\nvar fs = require('fs');\n\n// JavaScript implementation of realpath, ported from node pre-v6\n\nvar DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);\n\nfunction rethrow() {\n // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and\n // is fairly slow to generate.\n var callback;\n if (DEBUG) {\n var backtrace = new Error;\n callback = debugCallback;\n } else\n callback = missingCallback;\n\n return callback;\n\n function debugCallback(err) {\n if (err) {\n backtrace.message = err.message;\n err = backtrace;\n missingCallback(err);\n }\n }\n\n function missingCallback(err) {\n if (err) {\n if (process.throwDeprecation)\n throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs\n else if (!process.noDeprecation) {\n var msg = 'fs: missing callback ' + (err.stack || err.message);\n if (process.traceDeprecation)\n console.trace(msg);\n else\n console.error(msg);\n }\n }\n }\n}\n\nfunction maybeCallback(cb) {\n return typeof cb === 'function' ? cb : rethrow();\n}\n\nvar normalize = pathModule.normalize;\n\n// Regexp that finds the next partion of a (partial) path\n// result is [base_with_slash, base], e.g. ['somedir/', 'somedir']\nif (isWindows) {\n var nextPartRe = /(.*?)(?:[\\/\\\\]+|$)/g;\n} else {\n var nextPartRe = /(.*?)(?:[\\/]+|$)/g;\n}\n\n// Regex to find the device root, including trailing slash. E.g. 'c:\\\\'.\nif (isWindows) {\n var splitRootRe = /^(?:[a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)?[\\\\\\/]*/;\n} else {\n var splitRootRe = /^[\\/]*/;\n}\n\nexports.realpathSync = function realpathSync(p, cache) {\n // make p is absolute\n p = pathModule.resolve(p);\n\n if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {\n return cache[p];\n }\n\n var original = p,\n seenLinks = {},\n knownHard = {};\n\n // current character position in p\n var pos;\n // the partial path so far, including a trailing slash if any\n var current;\n // the partial path without a trailing slash (except when pointing at a root)\n var base;\n // the partial path scanned in the previous round, with slash\n var previous;\n\n start();\n\n function start() {\n // Skip over roots\n var m = splitRootRe.exec(p);\n pos = m[0].length;\n current = m[0];\n base = m[0];\n previous = '';\n\n // On windows, check that the root exists. On unix there is no need.\n if (isWindows && !knownHard[base]) {\n fs.lstatSync(base);\n knownHard[base] = true;\n }\n }\n\n // walk down the path, swapping out linked pathparts for their real\n // values\n // NB: p.length changes.\n while (pos < p.length) {\n // find the next part\n nextPartRe.lastIndex = pos;\n var result = nextPartRe.exec(p);\n previous = current;\n current += result[0];\n base = previous + result[1];\n pos = nextPartRe.lastIndex;\n\n // continue if not a symlink\n if (knownHard[base] || (cache && cache[base] === base)) {\n continue;\n }\n\n var resolvedLink;\n if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {\n // some known symbolic link. no need to stat again.\n resolvedLink = cache[base];\n } else {\n var stat = fs.lstatSync(base);\n if (!stat.isSymbolicLink()) {\n knownHard[base] = true;\n if (cache) cache[base] = base;\n continue;\n }\n\n // read the link if it wasn't read before\n // dev/ino always return 0 on windows, so skip the check.\n var linkTarget = null;\n if (!isWindows) {\n var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);\n if (seenLinks.hasOwnProperty(id)) {\n linkTarget = seenLinks[id];\n }\n }\n if (linkTarget === null) {\n fs.statSync(base);\n linkTarget = fs.readlinkSync(base);\n }\n resolvedLink = pathModule.resolve(previous, linkTarget);\n // track this, if given a cache.\n if (cache) cache[base] = resolvedLink;\n if (!isWindows) seenLinks[id] = linkTarget;\n }\n\n // resolve the link, then start over\n p = pathModule.resolve(resolvedLink, p.slice(pos));\n start();\n }\n\n if (cache) cache[original] = p;\n\n return p;\n};\n\n\nexports.realpath = function realpath(p, cache, cb) {\n if (typeof cb !== 'function') {\n cb = maybeCallback(cache);\n cache = null;\n }\n\n // make p is absolute\n p = pathModule.resolve(p);\n\n if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {\n return process.nextTick(cb.bind(null, null, cache[p]));\n }\n\n var original = p,\n seenLinks = {},\n knownHard = {};\n\n // current character position in p\n var pos;\n // the partial path so far, including a trailing slash if any\n var current;\n // the partial path without a trailing slash (except when pointing at a root)\n var base;\n // the partial path scanned in the previous round, with slash\n var previous;\n\n start();\n\n function start() {\n // Skip over roots\n var m = splitRootRe.exec(p);\n pos = m[0].length;\n current = m[0];\n base = m[0];\n previous = '';\n\n // On windows, check that the root exists. On unix there is no need.\n if (isWindows && !knownHard[base]) {\n fs.lstat(base, function(err) {\n if (err) return cb(err);\n knownHard[base] = true;\n LOOP();\n });\n } else {\n process.nextTick(LOOP);\n }\n }\n\n // walk down the path, swapping out linked pathparts for their real\n // values\n function LOOP() {\n // stop if scanned past end of path\n if (pos >= p.length) {\n if (cache) cache[original] = p;\n return cb(null, p);\n }\n\n // find the next part\n nextPartRe.lastIndex = pos;\n var result = nextPartRe.exec(p);\n previous = current;\n current += result[0];\n base = previous + result[1];\n pos = nextPartRe.lastIndex;\n\n // continue if not a symlink\n if (knownHard[base] || (cache && cache[base] === base)) {\n return process.nextTick(LOOP);\n }\n\n if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {\n // known symbolic link. no need to stat again.\n return gotResolvedLink(cache[base]);\n }\n\n return fs.lstat(base, gotStat);\n }\n\n function gotStat(err, stat) {\n if (err) return cb(err);\n\n // if not a symlink, skip to the next path part\n if (!stat.isSymbolicLink()) {\n knownHard[base] = true;\n if (cache) cache[base] = base;\n return process.nextTick(LOOP);\n }\n\n // stat & read the link if not read before\n // call gotTarget as soon as the link target is known\n // dev/ino always return 0 on windows, so skip the check.\n if (!isWindows) {\n var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);\n if (seenLinks.hasOwnProperty(id)) {\n return gotTarget(null, seenLinks[id], base);\n }\n }\n fs.stat(base, function(err) {\n if (err) return cb(err);\n\n fs.readlink(base, function(err, target) {\n if (!isWindows) seenLinks[id] = target;\n gotTarget(err, target);\n });\n });\n }\n\n function gotTarget(err, target, base) {\n if (err) return cb(err);\n\n var resolvedLink = pathModule.resolve(previous, target);\n if (cache) cache[base] = resolvedLink;\n gotResolvedLink(resolvedLink);\n }\n\n function gotResolvedLink(resolvedLink) {\n // resolve the link, then start over\n p = pathModule.resolve(resolvedLink, p.slice(pos));\n start();\n }\n};\n","module.exports = realpath\nrealpath.realpath = realpath\nrealpath.sync = realpathSync\nrealpath.realpathSync = realpathSync\nrealpath.monkeypatch = monkeypatch\nrealpath.unmonkeypatch = unmonkeypatch\n\nvar fs = require('fs')\nvar origRealpath = fs.realpath\nvar origRealpathSync = fs.realpathSync\n\nvar version = process.version\nvar ok = /^v[0-5]\\./.test(version)\nvar old = require('./old.js')\n\nfunction newError (er) {\n return er && er.syscall === 'realpath' && (\n er.code === 'ELOOP' ||\n er.code === 'ENOMEM' ||\n er.code === 'ENAMETOOLONG'\n )\n}\n\nfunction realpath (p, cache, cb) {\n if (ok) {\n return origRealpath(p, cache, cb)\n }\n\n if (typeof cache === 'function') {\n cb = cache\n cache = null\n }\n origRealpath(p, cache, function (er, result) {\n if (newError(er)) {\n old.realpath(p, cache, cb)\n } else {\n cb(er, result)\n }\n })\n}\n\nfunction realpathSync (p, cache) {\n if (ok) {\n return origRealpathSync(p, cache)\n }\n\n try {\n return origRealpathSync(p, cache)\n } catch (er) {\n if (newError(er)) {\n return old.realpathSync(p, cache)\n } else {\n throw er\n }\n }\n}\n\nfunction monkeypatch () {\n fs.realpath = realpath\n fs.realpathSync = realpathSync\n}\n\nfunction unmonkeypatch () {\n fs.realpath = origRealpath\n fs.realpathSync = origRealpathSync\n}\n","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = { sep: '/' }\ntry {\n path = require('path')\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === '') return p === ''\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = console.error\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern')\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long')\n }\n\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = match\nfunction match (f, partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n","'use strict';\n\nfunction posix(path) {\n\treturn path.charAt(0) === '/';\n}\n\nfunction win32(path) {\n\t// https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56\n\tvar splitDeviceRe = /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\n\tvar result = splitDeviceRe.exec(path);\n\tvar device = result[1] || '';\n\tvar isUnc = Boolean(device && device.charAt(1) !== ':');\n\n\t// UNC paths are always absolute\n\treturn Boolean(result[2] || isUnc);\n}\n\nmodule.exports = process.platform === 'win32' ? win32 : posix;\nmodule.exports.posix = posix;\nmodule.exports.win32 = win32;\n","exports.setopts = setopts\nexports.ownProp = ownProp\nexports.makeAbs = makeAbs\nexports.finish = finish\nexports.mark = mark\nexports.isIgnored = isIgnored\nexports.childrenIgnored = childrenIgnored\n\nfunction ownProp (obj, field) {\n return Object.prototype.hasOwnProperty.call(obj, field)\n}\n\nvar fs = require(\"fs\")\nvar path = require(\"path\")\nvar minimatch = require(\"minimatch\")\nvar isAbsolute = require(\"path-is-absolute\")\nvar Minimatch = minimatch.Minimatch\n\nfunction alphasort (a, b) {\n return a.localeCompare(b, 'en')\n}\n\nfunction setupIgnores (self, options) {\n self.ignore = options.ignore || []\n\n if (!Array.isArray(self.ignore))\n self.ignore = [self.ignore]\n\n if (self.ignore.length) {\n self.ignore = self.ignore.map(ignoreMap)\n }\n}\n\n// ignore patterns are always in dot:true mode.\nfunction ignoreMap (pattern) {\n var gmatcher = null\n if (pattern.slice(-3) === '/**') {\n var gpattern = pattern.replace(/(\\/\\*\\*)+$/, '')\n gmatcher = new Minimatch(gpattern, { dot: true })\n }\n\n return {\n matcher: new Minimatch(pattern, { dot: true }),\n gmatcher: gmatcher\n }\n}\n\nfunction setopts (self, pattern, options) {\n if (!options)\n options = {}\n\n // base-matching: just use globstar for that.\n if (options.matchBase && -1 === pattern.indexOf(\"/\")) {\n if (options.noglobstar) {\n throw new Error(\"base matching requires globstar\")\n }\n pattern = \"**/\" + pattern\n }\n\n self.silent = !!options.silent\n self.pattern = pattern\n self.strict = options.strict !== false\n self.realpath = !!options.realpath\n self.realpathCache = options.realpathCache || Object.create(null)\n self.follow = !!options.follow\n self.dot = !!options.dot\n self.mark = !!options.mark\n self.nodir = !!options.nodir\n if (self.nodir)\n self.mark = true\n self.sync = !!options.sync\n self.nounique = !!options.nounique\n self.nonull = !!options.nonull\n self.nosort = !!options.nosort\n self.nocase = !!options.nocase\n self.stat = !!options.stat\n self.noprocess = !!options.noprocess\n self.absolute = !!options.absolute\n self.fs = options.fs || fs\n\n self.maxLength = options.maxLength || Infinity\n self.cache = options.cache || Object.create(null)\n self.statCache = options.statCache || Object.create(null)\n self.symlinks = options.symlinks || Object.create(null)\n\n setupIgnores(self, options)\n\n self.changedCwd = false\n var cwd = process.cwd()\n if (!ownProp(options, \"cwd\"))\n self.cwd = cwd\n else {\n self.cwd = path.resolve(options.cwd)\n self.changedCwd = self.cwd !== cwd\n }\n\n self.root = options.root || path.resolve(self.cwd, \"/\")\n self.root = path.resolve(self.root)\n if (process.platform === \"win32\")\n self.root = self.root.replace(/\\\\/g, \"/\")\n\n // TODO: is an absolute `cwd` supposed to be resolved against `root`?\n // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test')\n self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd)\n if (process.platform === \"win32\")\n self.cwdAbs = self.cwdAbs.replace(/\\\\/g, \"/\")\n self.nomount = !!options.nomount\n\n // disable comments and negation in Minimatch.\n // Note that they are not supported in Glob itself anyway.\n options.nonegate = true\n options.nocomment = true\n\n self.minimatch = new Minimatch(pattern, options)\n self.options = self.minimatch.options\n}\n\nfunction finish (self) {\n var nou = self.nounique\n var all = nou ? [] : Object.create(null)\n\n for (var i = 0, l = self.matches.length; i < l; i ++) {\n var matches = self.matches[i]\n if (!matches || Object.keys(matches).length === 0) {\n if (self.nonull) {\n // do like the shell, and spit out the literal glob\n var literal = self.minimatch.globSet[i]\n if (nou)\n all.push(literal)\n else\n all[literal] = true\n }\n } else {\n // had matches\n var m = Object.keys(matches)\n if (nou)\n all.push.apply(all, m)\n else\n m.forEach(function (m) {\n all[m] = true\n })\n }\n }\n\n if (!nou)\n all = Object.keys(all)\n\n if (!self.nosort)\n all = all.sort(alphasort)\n\n // at *some* point we statted all of these\n if (self.mark) {\n for (var i = 0; i < all.length; i++) {\n all[i] = self._mark(all[i])\n }\n if (self.nodir) {\n all = all.filter(function (e) {\n var notDir = !(/\\/$/.test(e))\n var c = self.cache[e] || self.cache[makeAbs(self, e)]\n if (notDir && c)\n notDir = c !== 'DIR' && !Array.isArray(c)\n return notDir\n })\n }\n }\n\n if (self.ignore.length)\n all = all.filter(function(m) {\n return !isIgnored(self, m)\n })\n\n self.found = all\n}\n\nfunction mark (self, p) {\n var abs = makeAbs(self, p)\n var c = self.cache[abs]\n var m = p\n if (c) {\n var isDir = c === 'DIR' || Array.isArray(c)\n var slash = p.slice(-1) === '/'\n\n if (isDir && !slash)\n m += '/'\n else if (!isDir && slash)\n m = m.slice(0, -1)\n\n if (m !== p) {\n var mabs = makeAbs(self, m)\n self.statCache[mabs] = self.statCache[abs]\n self.cache[mabs] = self.cache[abs]\n }\n }\n\n return m\n}\n\n// lotta situps...\nfunction makeAbs (self, f) {\n var abs = f\n if (f.charAt(0) === '/') {\n abs = path.join(self.root, f)\n } else if (isAbsolute(f) || f === '') {\n abs = f\n } else if (self.changedCwd) {\n abs = path.resolve(self.cwd, f)\n } else {\n abs = path.resolve(f)\n }\n\n if (process.platform === 'win32')\n abs = abs.replace(/\\\\/g, '/')\n\n return abs\n}\n\n\n// Return true, if pattern ends with globstar '**', for the accompanying parent directory.\n// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents\nfunction isIgnored (self, path) {\n if (!self.ignore.length)\n return false\n\n return self.ignore.some(function(item) {\n return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))\n })\n}\n\nfunction childrenIgnored (self, path) {\n if (!self.ignore.length)\n return false\n\n return self.ignore.some(function(item) {\n return !!(item.gmatcher && item.gmatcher.match(path))\n })\n}\n","module.exports = globSync\nglobSync.GlobSync = GlobSync\n\nvar rp = require('fs.realpath')\nvar minimatch = require('minimatch')\nvar Minimatch = minimatch.Minimatch\nvar Glob = require('./glob.js').Glob\nvar util = require('util')\nvar path = require('path')\nvar assert = require('assert')\nvar isAbsolute = require('path-is-absolute')\nvar common = require('./common.js')\nvar setopts = common.setopts\nvar ownProp = common.ownProp\nvar childrenIgnored = common.childrenIgnored\nvar isIgnored = common.isIgnored\n\nfunction globSync (pattern, options) {\n if (typeof options === 'function' || arguments.length === 3)\n throw new TypeError('callback provided to sync glob\\n'+\n 'See: https://github.com/isaacs/node-glob/issues/167')\n\n return new GlobSync(pattern, options).found\n}\n\nfunction GlobSync (pattern, options) {\n if (!pattern)\n throw new Error('must provide pattern')\n\n if (typeof options === 'function' || arguments.length === 3)\n throw new TypeError('callback provided to sync glob\\n'+\n 'See: https://github.com/isaacs/node-glob/issues/167')\n\n if (!(this instanceof GlobSync))\n return new GlobSync(pattern, options)\n\n setopts(this, pattern, options)\n\n if (this.noprocess)\n return this\n\n var n = this.minimatch.set.length\n this.matches = new Array(n)\n for (var i = 0; i < n; i ++) {\n this._process(this.minimatch.set[i], i, false)\n }\n this._finish()\n}\n\nGlobSync.prototype._finish = function () {\n assert(this instanceof GlobSync)\n if (this.realpath) {\n var self = this\n this.matches.forEach(function (matchset, index) {\n var set = self.matches[index] = Object.create(null)\n for (var p in matchset) {\n try {\n p = self._makeAbs(p)\n var real = rp.realpathSync(p, self.realpathCache)\n set[real] = true\n } catch (er) {\n if (er.syscall === 'stat')\n set[self._makeAbs(p)] = true\n else\n throw er\n }\n }\n })\n }\n common.finish(this)\n}\n\n\nGlobSync.prototype._process = function (pattern, index, inGlobStar) {\n assert(this instanceof GlobSync)\n\n // Get the first [n] parts of pattern that are all strings.\n var n = 0\n while (typeof pattern[n] === 'string') {\n n ++\n }\n // now n is the index of the first one that is *not* a string.\n\n // See if there's anything else\n var prefix\n switch (n) {\n // if not, then this is rather simple\n case pattern.length:\n this._processSimple(pattern.join('/'), index)\n return\n\n case 0:\n // pattern *starts* with some non-trivial item.\n // going to readdir(cwd), but not include the prefix in matches.\n prefix = null\n break\n\n default:\n // pattern has some string bits in the front.\n // whatever it starts with, whether that's 'absolute' like /foo/bar,\n // or 'relative' like '../baz'\n prefix = pattern.slice(0, n).join('/')\n break\n }\n\n var remain = pattern.slice(n)\n\n // get the list of entries.\n var read\n if (prefix === null)\n read = '.'\n else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {\n if (!prefix || !isAbsolute(prefix))\n prefix = '/' + prefix\n read = prefix\n } else\n read = prefix\n\n var abs = this._makeAbs(read)\n\n //if ignored, skip processing\n if (childrenIgnored(this, read))\n return\n\n var isGlobStar = remain[0] === minimatch.GLOBSTAR\n if (isGlobStar)\n this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)\n else\n this._processReaddir(prefix, read, abs, remain, index, inGlobStar)\n}\n\n\nGlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {\n var entries = this._readdir(abs, inGlobStar)\n\n // if the abs isn't a dir, then nothing can match!\n if (!entries)\n return\n\n // It will only match dot entries if it starts with a dot, or if\n // dot is set. Stuff like @(.foo|.bar) isn't allowed.\n var pn = remain[0]\n var negate = !!this.minimatch.negate\n var rawGlob = pn._glob\n var dotOk = this.dot || rawGlob.charAt(0) === '.'\n\n var matchedEntries = []\n for (var i = 0; i < entries.length; i++) {\n var e = entries[i]\n if (e.charAt(0) !== '.' || dotOk) {\n var m\n if (negate && !prefix) {\n m = !e.match(pn)\n } else {\n m = e.match(pn)\n }\n if (m)\n matchedEntries.push(e)\n }\n }\n\n var len = matchedEntries.length\n // If there are no matched entries, then nothing matches.\n if (len === 0)\n return\n\n // if this is the last remaining pattern bit, then no need for\n // an additional stat *unless* the user has specified mark or\n // stat explicitly. We know they exist, since readdir returned\n // them.\n\n if (remain.length === 1 && !this.mark && !this.stat) {\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n if (prefix) {\n if (prefix.slice(-1) !== '/')\n e = prefix + '/' + e\n else\n e = prefix + e\n }\n\n if (e.charAt(0) === '/' && !this.nomount) {\n e = path.join(this.root, e)\n }\n this._emitMatch(index, e)\n }\n // This was the last one, and no stats were needed\n return\n }\n\n // now test all matched entries as stand-ins for that part\n // of the pattern.\n remain.shift()\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n var newPattern\n if (prefix)\n newPattern = [prefix, e]\n else\n newPattern = [e]\n this._process(newPattern.concat(remain), index, inGlobStar)\n }\n}\n\n\nGlobSync.prototype._emitMatch = function (index, e) {\n if (isIgnored(this, e))\n return\n\n var abs = this._makeAbs(e)\n\n if (this.mark)\n e = this._mark(e)\n\n if (this.absolute) {\n e = abs\n }\n\n if (this.matches[index][e])\n return\n\n if (this.nodir) {\n var c = this.cache[abs]\n if (c === 'DIR' || Array.isArray(c))\n return\n }\n\n this.matches[index][e] = true\n\n if (this.stat)\n this._stat(e)\n}\n\n\nGlobSync.prototype._readdirInGlobStar = function (abs) {\n // follow all symlinked directories forever\n // just proceed as if this is a non-globstar situation\n if (this.follow)\n return this._readdir(abs, false)\n\n var entries\n var lstat\n var stat\n try {\n lstat = this.fs.lstatSync(abs)\n } catch (er) {\n if (er.code === 'ENOENT') {\n // lstat failed, doesn't exist\n return null\n }\n }\n\n var isSym = lstat && lstat.isSymbolicLink()\n this.symlinks[abs] = isSym\n\n // If it's not a symlink or a dir, then it's definitely a regular file.\n // don't bother doing a readdir in that case.\n if (!isSym && lstat && !lstat.isDirectory())\n this.cache[abs] = 'FILE'\n else\n entries = this._readdir(abs, false)\n\n return entries\n}\n\nGlobSync.prototype._readdir = function (abs, inGlobStar) {\n var entries\n\n if (inGlobStar && !ownProp(this.symlinks, abs))\n return this._readdirInGlobStar(abs)\n\n if (ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n if (!c || c === 'FILE')\n return null\n\n if (Array.isArray(c))\n return c\n }\n\n try {\n return this._readdirEntries(abs, this.fs.readdirSync(abs))\n } catch (er) {\n this._readdirError(abs, er)\n return null\n }\n}\n\nGlobSync.prototype._readdirEntries = function (abs, entries) {\n // if we haven't asked to stat everything, then just\n // assume that everything in there exists, so we can avoid\n // having to stat it a second time.\n if (!this.mark && !this.stat) {\n for (var i = 0; i < entries.length; i ++) {\n var e = entries[i]\n if (abs === '/')\n e = abs + e\n else\n e = abs + '/' + e\n this.cache[e] = true\n }\n }\n\n this.cache[abs] = entries\n\n // mark and cache dir-ness\n return entries\n}\n\nGlobSync.prototype._readdirError = function (f, er) {\n // handle errors, and cache the information\n switch (er.code) {\n case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205\n case 'ENOTDIR': // totally normal. means it *does* exist.\n var abs = this._makeAbs(f)\n this.cache[abs] = 'FILE'\n if (abs === this.cwdAbs) {\n var error = new Error(er.code + ' invalid cwd ' + this.cwd)\n error.path = this.cwd\n error.code = er.code\n throw error\n }\n break\n\n case 'ENOENT': // not terribly unusual\n case 'ELOOP':\n case 'ENAMETOOLONG':\n case 'UNKNOWN':\n this.cache[this._makeAbs(f)] = false\n break\n\n default: // some unusual error. Treat as failure.\n this.cache[this._makeAbs(f)] = false\n if (this.strict)\n throw er\n if (!this.silent)\n console.error('glob error', er)\n break\n }\n}\n\nGlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {\n\n var entries = this._readdir(abs, inGlobStar)\n\n // no entries means not a dir, so it can never have matches\n // foo.txt/** doesn't match foo.txt\n if (!entries)\n return\n\n // test without the globstar, and with every child both below\n // and replacing the globstar.\n var remainWithoutGlobStar = remain.slice(1)\n var gspref = prefix ? [ prefix ] : []\n var noGlobStar = gspref.concat(remainWithoutGlobStar)\n\n // the noGlobStar pattern exits the inGlobStar state\n this._process(noGlobStar, index, false)\n\n var len = entries.length\n var isSym = this.symlinks[abs]\n\n // If it's a symlink, and we're in a globstar, then stop\n if (isSym && inGlobStar)\n return\n\n for (var i = 0; i < len; i++) {\n var e = entries[i]\n if (e.charAt(0) === '.' && !this.dot)\n continue\n\n // these two cases enter the inGlobStar state\n var instead = gspref.concat(entries[i], remainWithoutGlobStar)\n this._process(instead, index, true)\n\n var below = gspref.concat(entries[i], remain)\n this._process(below, index, true)\n }\n}\n\nGlobSync.prototype._processSimple = function (prefix, index) {\n // XXX review this. Shouldn't it be doing the mounting etc\n // before doing stat? kinda weird?\n var exists = this._stat(prefix)\n\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n // If it doesn't exist, then just mark the lack of results\n if (!exists)\n return\n\n if (prefix && isAbsolute(prefix) && !this.nomount) {\n var trail = /[\\/\\\\]$/.test(prefix)\n if (prefix.charAt(0) === '/') {\n prefix = path.join(this.root, prefix)\n } else {\n prefix = path.resolve(this.root, prefix)\n if (trail)\n prefix += '/'\n }\n }\n\n if (process.platform === 'win32')\n prefix = prefix.replace(/\\\\/g, '/')\n\n // Mark this as a match\n this._emitMatch(index, prefix)\n}\n\n// Returns either 'DIR', 'FILE', or false\nGlobSync.prototype._stat = function (f) {\n var abs = this._makeAbs(f)\n var needDir = f.slice(-1) === '/'\n\n if (f.length > this.maxLength)\n return false\n\n if (!this.stat && ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n\n if (Array.isArray(c))\n c = 'DIR'\n\n // It exists, but maybe not how we need it\n if (!needDir || c === 'DIR')\n return c\n\n if (needDir && c === 'FILE')\n return false\n\n // otherwise we have to stat, because maybe c=true\n // if we know it exists, but not what it is.\n }\n\n var exists\n var stat = this.statCache[abs]\n if (!stat) {\n var lstat\n try {\n lstat = this.fs.lstatSync(abs)\n } catch (er) {\n if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {\n this.statCache[abs] = false\n return false\n }\n }\n\n if (lstat && lstat.isSymbolicLink()) {\n try {\n stat = this.fs.statSync(abs)\n } catch (er) {\n stat = lstat\n }\n } else {\n stat = lstat\n }\n }\n\n this.statCache[abs] = stat\n\n var c = true\n if (stat)\n c = stat.isDirectory() ? 'DIR' : 'FILE'\n\n this.cache[abs] = this.cache[abs] || c\n\n if (needDir && c === 'FILE')\n return false\n\n return c\n}\n\nGlobSync.prototype._mark = function (p) {\n return common.mark(this, p)\n}\n\nGlobSync.prototype._makeAbs = function (f) {\n return common.makeAbs(this, f)\n}\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","var wrappy = require('wrappy')\nvar reqs = Object.create(null)\nvar once = require('once')\n\nmodule.exports = wrappy(inflight)\n\nfunction inflight (key, cb) {\n if (reqs[key]) {\n reqs[key].push(cb)\n return null\n } else {\n reqs[key] = [cb]\n return makeres(key)\n }\n}\n\nfunction makeres (key) {\n return once(function RES () {\n var cbs = reqs[key]\n var len = cbs.length\n var args = slice(arguments)\n\n // XXX It's somewhat ambiguous whether a new callback added in this\n // pass should be queued for later execution if something in the\n // list of callbacks throws, or if it should just be discarded.\n // However, it's such an edge case that it hardly matters, and either\n // choice is likely as surprising as the other.\n // As it happens, we do go ahead and schedule it for later execution.\n try {\n for (var i = 0; i < len; i++) {\n cbs[i].apply(null, args)\n }\n } finally {\n if (cbs.length > len) {\n // added more in the interim.\n // de-zalgo, just in case, but don't call again.\n cbs.splice(0, len)\n process.nextTick(function () {\n RES.apply(null, args)\n })\n } else {\n delete reqs[key]\n }\n }\n })\n}\n\nfunction slice (args) {\n var length = args.length\n var array = []\n\n for (var i = 0; i < length; i++) array[i] = args[i]\n return array\n}\n","// Approach:\n//\n// 1. Get the minimatch set\n// 2. For each pattern in the set, PROCESS(pattern, false)\n// 3. Store matches per-set, then uniq them\n//\n// PROCESS(pattern, inGlobStar)\n// Get the first [n] items from pattern that are all strings\n// Join these together. This is PREFIX.\n// If there is no more remaining, then stat(PREFIX) and\n// add to matches if it succeeds. END.\n//\n// If inGlobStar and PREFIX is symlink and points to dir\n// set ENTRIES = []\n// else readdir(PREFIX) as ENTRIES\n// If fail, END\n//\n// with ENTRIES\n// If pattern[n] is GLOBSTAR\n// // handle the case where the globstar match is empty\n// // by pruning it out, and testing the resulting pattern\n// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)\n// // handle other cases.\n// for ENTRY in ENTRIES (not dotfiles)\n// // attach globstar + tail onto the entry\n// // Mark that this entry is a globstar match\n// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)\n//\n// else // not globstar\n// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)\n// Test ENTRY against pattern[n]\n// If fails, continue\n// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])\n//\n// Caveat:\n// Cache all stats and readdirs results to minimize syscall. Since all\n// we ever care about is existence and directory-ness, we can just keep\n// `true` for files, and [children,...] for directories, or `false` for\n// things that don't exist.\n\nmodule.exports = glob\n\nvar rp = require('fs.realpath')\nvar minimatch = require('minimatch')\nvar Minimatch = minimatch.Minimatch\nvar inherits = require('inherits')\nvar EE = require('events').EventEmitter\nvar path = require('path')\nvar assert = require('assert')\nvar isAbsolute = require('path-is-absolute')\nvar globSync = require('./sync.js')\nvar common = require('./common.js')\nvar setopts = common.setopts\nvar ownProp = common.ownProp\nvar inflight = require('inflight')\nvar util = require('util')\nvar childrenIgnored = common.childrenIgnored\nvar isIgnored = common.isIgnored\n\nvar once = require('once')\n\nfunction glob (pattern, options, cb) {\n if (typeof options === 'function') cb = options, options = {}\n if (!options) options = {}\n\n if (options.sync) {\n if (cb)\n throw new TypeError('callback provided to sync glob')\n return globSync(pattern, options)\n }\n\n return new Glob(pattern, options, cb)\n}\n\nglob.sync = globSync\nvar GlobSync = glob.GlobSync = globSync.GlobSync\n\n// old api surface\nglob.glob = glob\n\nfunction extend (origin, add) {\n if (add === null || typeof add !== 'object') {\n return origin\n }\n\n var keys = Object.keys(add)\n var i = keys.length\n while (i--) {\n origin[keys[i]] = add[keys[i]]\n }\n return origin\n}\n\nglob.hasMagic = function (pattern, options_) {\n var options = extend({}, options_)\n options.noprocess = true\n\n var g = new Glob(pattern, options)\n var set = g.minimatch.set\n\n if (!pattern)\n return false\n\n if (set.length > 1)\n return true\n\n for (var j = 0; j < set[0].length; j++) {\n if (typeof set[0][j] !== 'string')\n return true\n }\n\n return false\n}\n\nglob.Glob = Glob\ninherits(Glob, EE)\nfunction Glob (pattern, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n\n if (options && options.sync) {\n if (cb)\n throw new TypeError('callback provided to sync glob')\n return new GlobSync(pattern, options)\n }\n\n if (!(this instanceof Glob))\n return new Glob(pattern, options, cb)\n\n setopts(this, pattern, options)\n this._didRealPath = false\n\n // process each pattern in the minimatch set\n var n = this.minimatch.set.length\n\n // The matches are stored as {<filename>: true,...} so that\n // duplicates are automagically pruned.\n // Later, we do an Object.keys() on these.\n // Keep them as a list so we can fill in when nonull is set.\n this.matches = new Array(n)\n\n if (typeof cb === 'function') {\n cb = once(cb)\n this.on('error', cb)\n this.on('end', function (matches) {\n cb(null, matches)\n })\n }\n\n var self = this\n this._processing = 0\n\n this._emitQueue = []\n this._processQueue = []\n this.paused = false\n\n if (this.noprocess)\n return this\n\n if (n === 0)\n return done()\n\n var sync = true\n for (var i = 0; i < n; i ++) {\n this._process(this.minimatch.set[i], i, false, done)\n }\n sync = false\n\n function done () {\n --self._processing\n if (self._processing <= 0) {\n if (sync) {\n process.nextTick(function () {\n self._finish()\n })\n } else {\n self._finish()\n }\n }\n }\n}\n\nGlob.prototype._finish = function () {\n assert(this instanceof Glob)\n if (this.aborted)\n return\n\n if (this.realpath && !this._didRealpath)\n return this._realpath()\n\n common.finish(this)\n this.emit('end', this.found)\n}\n\nGlob.prototype._realpath = function () {\n if (this._didRealpath)\n return\n\n this._didRealpath = true\n\n var n = this.matches.length\n if (n === 0)\n return this._finish()\n\n var self = this\n for (var i = 0; i < this.matches.length; i++)\n this._realpathSet(i, next)\n\n function next () {\n if (--n === 0)\n self._finish()\n }\n}\n\nGlob.prototype._realpathSet = function (index, cb) {\n var matchset = this.matches[index]\n if (!matchset)\n return cb()\n\n var found = Object.keys(matchset)\n var self = this\n var n = found.length\n\n if (n === 0)\n return cb()\n\n var set = this.matches[index] = Object.create(null)\n found.forEach(function (p, i) {\n // If there's a problem with the stat, then it means that\n // one or more of the links in the realpath couldn't be\n // resolved. just return the abs value in that case.\n p = self._makeAbs(p)\n rp.realpath(p, self.realpathCache, function (er, real) {\n if (!er)\n set[real] = true\n else if (er.syscall === 'stat')\n set[p] = true\n else\n self.emit('error', er) // srsly wtf right here\n\n if (--n === 0) {\n self.matches[index] = set\n cb()\n }\n })\n })\n}\n\nGlob.prototype._mark = function (p) {\n return common.mark(this, p)\n}\n\nGlob.prototype._makeAbs = function (f) {\n return common.makeAbs(this, f)\n}\n\nGlob.prototype.abort = function () {\n this.aborted = true\n this.emit('abort')\n}\n\nGlob.prototype.pause = function () {\n if (!this.paused) {\n this.paused = true\n this.emit('pause')\n }\n}\n\nGlob.prototype.resume = function () {\n if (this.paused) {\n this.emit('resume')\n this.paused = false\n if (this._emitQueue.length) {\n var eq = this._emitQueue.slice(0)\n this._emitQueue.length = 0\n for (var i = 0; i < eq.length; i ++) {\n var e = eq[i]\n this._emitMatch(e[0], e[1])\n }\n }\n if (this._processQueue.length) {\n var pq = this._processQueue.slice(0)\n this._processQueue.length = 0\n for (var i = 0; i < pq.length; i ++) {\n var p = pq[i]\n this._processing--\n this._process(p[0], p[1], p[2], p[3])\n }\n }\n }\n}\n\nGlob.prototype._process = function (pattern, index, inGlobStar, cb) {\n assert(this instanceof Glob)\n assert(typeof cb === 'function')\n\n if (this.aborted)\n return\n\n this._processing++\n if (this.paused) {\n this._processQueue.push([pattern, index, inGlobStar, cb])\n return\n }\n\n //console.error('PROCESS %d', this._processing, pattern)\n\n // Get the first [n] parts of pattern that are all strings.\n var n = 0\n while (typeof pattern[n] === 'string') {\n n ++\n }\n // now n is the index of the first one that is *not* a string.\n\n // see if there's anything else\n var prefix\n switch (n) {\n // if not, then this is rather simple\n case pattern.length:\n this._processSimple(pattern.join('/'), index, cb)\n return\n\n case 0:\n // pattern *starts* with some non-trivial item.\n // going to readdir(cwd), but not include the prefix in matches.\n prefix = null\n break\n\n default:\n // pattern has some string bits in the front.\n // whatever it starts with, whether that's 'absolute' like /foo/bar,\n // or 'relative' like '../baz'\n prefix = pattern.slice(0, n).join('/')\n break\n }\n\n var remain = pattern.slice(n)\n\n // get the list of entries.\n var read\n if (prefix === null)\n read = '.'\n else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {\n if (!prefix || !isAbsolute(prefix))\n prefix = '/' + prefix\n read = prefix\n } else\n read = prefix\n\n var abs = this._makeAbs(read)\n\n //if ignored, skip _processing\n if (childrenIgnored(this, read))\n return cb()\n\n var isGlobStar = remain[0] === minimatch.GLOBSTAR\n if (isGlobStar)\n this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)\n else\n this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)\n}\n\nGlob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {\n var self = this\n this._readdir(abs, inGlobStar, function (er, entries) {\n return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)\n })\n}\n\nGlob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {\n\n // if the abs isn't a dir, then nothing can match!\n if (!entries)\n return cb()\n\n // It will only match dot entries if it starts with a dot, or if\n // dot is set. Stuff like @(.foo|.bar) isn't allowed.\n var pn = remain[0]\n var negate = !!this.minimatch.negate\n var rawGlob = pn._glob\n var dotOk = this.dot || rawGlob.charAt(0) === '.'\n\n var matchedEntries = []\n for (var i = 0; i < entries.length; i++) {\n var e = entries[i]\n if (e.charAt(0) !== '.' || dotOk) {\n var m\n if (negate && !prefix) {\n m = !e.match(pn)\n } else {\n m = e.match(pn)\n }\n if (m)\n matchedEntries.push(e)\n }\n }\n\n //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)\n\n var len = matchedEntries.length\n // If there are no matched entries, then nothing matches.\n if (len === 0)\n return cb()\n\n // if this is the last remaining pattern bit, then no need for\n // an additional stat *unless* the user has specified mark or\n // stat explicitly. We know they exist, since readdir returned\n // them.\n\n if (remain.length === 1 && !this.mark && !this.stat) {\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n if (prefix) {\n if (prefix !== '/')\n e = prefix + '/' + e\n else\n e = prefix + e\n }\n\n if (e.charAt(0) === '/' && !this.nomount) {\n e = path.join(this.root, e)\n }\n this._emitMatch(index, e)\n }\n // This was the last one, and no stats were needed\n return cb()\n }\n\n // now test all matched entries as stand-ins for that part\n // of the pattern.\n remain.shift()\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n var newPattern\n if (prefix) {\n if (prefix !== '/')\n e = prefix + '/' + e\n else\n e = prefix + e\n }\n this._process([e].concat(remain), index, inGlobStar, cb)\n }\n cb()\n}\n\nGlob.prototype._emitMatch = function (index, e) {\n if (this.aborted)\n return\n\n if (isIgnored(this, e))\n return\n\n if (this.paused) {\n this._emitQueue.push([index, e])\n return\n }\n\n var abs = isAbsolute(e) ? e : this._makeAbs(e)\n\n if (this.mark)\n e = this._mark(e)\n\n if (this.absolute)\n e = abs\n\n if (this.matches[index][e])\n return\n\n if (this.nodir) {\n var c = this.cache[abs]\n if (c === 'DIR' || Array.isArray(c))\n return\n }\n\n this.matches[index][e] = true\n\n var st = this.statCache[abs]\n if (st)\n this.emit('stat', e, st)\n\n this.emit('match', e)\n}\n\nGlob.prototype._readdirInGlobStar = function (abs, cb) {\n if (this.aborted)\n return\n\n // follow all symlinked directories forever\n // just proceed as if this is a non-globstar situation\n if (this.follow)\n return this._readdir(abs, false, cb)\n\n var lstatkey = 'lstat\\0' + abs\n var self = this\n var lstatcb = inflight(lstatkey, lstatcb_)\n\n if (lstatcb)\n self.fs.lstat(abs, lstatcb)\n\n function lstatcb_ (er, lstat) {\n if (er && er.code === 'ENOENT')\n return cb()\n\n var isSym = lstat && lstat.isSymbolicLink()\n self.symlinks[abs] = isSym\n\n // If it's not a symlink or a dir, then it's definitely a regular file.\n // don't bother doing a readdir in that case.\n if (!isSym && lstat && !lstat.isDirectory()) {\n self.cache[abs] = 'FILE'\n cb()\n } else\n self._readdir(abs, false, cb)\n }\n}\n\nGlob.prototype._readdir = function (abs, inGlobStar, cb) {\n if (this.aborted)\n return\n\n cb = inflight('readdir\\0'+abs+'\\0'+inGlobStar, cb)\n if (!cb)\n return\n\n //console.error('RD %j %j', +inGlobStar, abs)\n if (inGlobStar && !ownProp(this.symlinks, abs))\n return this._readdirInGlobStar(abs, cb)\n\n if (ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n if (!c || c === 'FILE')\n return cb()\n\n if (Array.isArray(c))\n return cb(null, c)\n }\n\n var self = this\n self.fs.readdir(abs, readdirCb(this, abs, cb))\n}\n\nfunction readdirCb (self, abs, cb) {\n return function (er, entries) {\n if (er)\n self._readdirError(abs, er, cb)\n else\n self._readdirEntries(abs, entries, cb)\n }\n}\n\nGlob.prototype._readdirEntries = function (abs, entries, cb) {\n if (this.aborted)\n return\n\n // if we haven't asked to stat everything, then just\n // assume that everything in there exists, so we can avoid\n // having to stat it a second time.\n if (!this.mark && !this.stat) {\n for (var i = 0; i < entries.length; i ++) {\n var e = entries[i]\n if (abs === '/')\n e = abs + e\n else\n e = abs + '/' + e\n this.cache[e] = true\n }\n }\n\n this.cache[abs] = entries\n return cb(null, entries)\n}\n\nGlob.prototype._readdirError = function (f, er, cb) {\n if (this.aborted)\n return\n\n // handle errors, and cache the information\n switch (er.code) {\n case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205\n case 'ENOTDIR': // totally normal. means it *does* exist.\n var abs = this._makeAbs(f)\n this.cache[abs] = 'FILE'\n if (abs === this.cwdAbs) {\n var error = new Error(er.code + ' invalid cwd ' + this.cwd)\n error.path = this.cwd\n error.code = er.code\n this.emit('error', error)\n this.abort()\n }\n break\n\n case 'ENOENT': // not terribly unusual\n case 'ELOOP':\n case 'ENAMETOOLONG':\n case 'UNKNOWN':\n this.cache[this._makeAbs(f)] = false\n break\n\n default: // some unusual error. Treat as failure.\n this.cache[this._makeAbs(f)] = false\n if (this.strict) {\n this.emit('error', er)\n // If the error is handled, then we abort\n // if not, we threw out of here\n this.abort()\n }\n if (!this.silent)\n console.error('glob error', er)\n break\n }\n\n return cb()\n}\n\nGlob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {\n var self = this\n this._readdir(abs, inGlobStar, function (er, entries) {\n self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)\n })\n}\n\n\nGlob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {\n //console.error('pgs2', prefix, remain[0], entries)\n\n // no entries means not a dir, so it can never have matches\n // foo.txt/** doesn't match foo.txt\n if (!entries)\n return cb()\n\n // test without the globstar, and with every child both below\n // and replacing the globstar.\n var remainWithoutGlobStar = remain.slice(1)\n var gspref = prefix ? [ prefix ] : []\n var noGlobStar = gspref.concat(remainWithoutGlobStar)\n\n // the noGlobStar pattern exits the inGlobStar state\n this._process(noGlobStar, index, false, cb)\n\n var isSym = this.symlinks[abs]\n var len = entries.length\n\n // If it's a symlink, and we're in a globstar, then stop\n if (isSym && inGlobStar)\n return cb()\n\n for (var i = 0; i < len; i++) {\n var e = entries[i]\n if (e.charAt(0) === '.' && !this.dot)\n continue\n\n // these two cases enter the inGlobStar state\n var instead = gspref.concat(entries[i], remainWithoutGlobStar)\n this._process(instead, index, true, cb)\n\n var below = gspref.concat(entries[i], remain)\n this._process(below, index, true, cb)\n }\n\n cb()\n}\n\nGlob.prototype._processSimple = function (prefix, index, cb) {\n // XXX review this. Shouldn't it be doing the mounting etc\n // before doing stat? kinda weird?\n var self = this\n this._stat(prefix, function (er, exists) {\n self._processSimple2(prefix, index, er, exists, cb)\n })\n}\nGlob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {\n\n //console.error('ps2', prefix, exists)\n\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n // If it doesn't exist, then just mark the lack of results\n if (!exists)\n return cb()\n\n if (prefix && isAbsolute(prefix) && !this.nomount) {\n var trail = /[\\/\\\\]$/.test(prefix)\n if (prefix.charAt(0) === '/') {\n prefix = path.join(this.root, prefix)\n } else {\n prefix = path.resolve(this.root, prefix)\n if (trail)\n prefix += '/'\n }\n }\n\n if (process.platform === 'win32')\n prefix = prefix.replace(/\\\\/g, '/')\n\n // Mark this as a match\n this._emitMatch(index, prefix)\n cb()\n}\n\n// Returns either 'DIR', 'FILE', or false\nGlob.prototype._stat = function (f, cb) {\n var abs = this._makeAbs(f)\n var needDir = f.slice(-1) === '/'\n\n if (f.length > this.maxLength)\n return cb()\n\n if (!this.stat && ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n\n if (Array.isArray(c))\n c = 'DIR'\n\n // It exists, but maybe not how we need it\n if (!needDir || c === 'DIR')\n return cb(null, c)\n\n if (needDir && c === 'FILE')\n return cb()\n\n // otherwise we have to stat, because maybe c=true\n // if we know it exists, but not what it is.\n }\n\n var exists\n var stat = this.statCache[abs]\n if (stat !== undefined) {\n if (stat === false)\n return cb(null, stat)\n else {\n var type = stat.isDirectory() ? 'DIR' : 'FILE'\n if (needDir && type === 'FILE')\n return cb()\n else\n return cb(null, type, stat)\n }\n }\n\n var self = this\n var statcb = inflight('stat\\0' + abs, lstatcb_)\n if (statcb)\n self.fs.lstat(abs, statcb)\n\n function lstatcb_ (er, lstat) {\n if (lstat && lstat.isSymbolicLink()) {\n // If it's a symlink, then treat it as the target, unless\n // the target does not exist, then treat it as a file.\n return self.fs.stat(abs, function (er, stat) {\n if (er)\n self._stat2(f, abs, null, lstat, cb)\n else\n self._stat2(f, abs, er, stat, cb)\n })\n } else {\n self._stat2(f, abs, er, lstat, cb)\n }\n }\n}\n\nGlob.prototype._stat2 = function (f, abs, er, stat, cb) {\n if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {\n this.statCache[abs] = false\n return cb()\n }\n\n var needDir = f.slice(-1) === '/'\n this.statCache[abs] = stat\n\n if (abs.slice(-1) === '/' && stat && !stat.isDirectory())\n return cb(null, false, stat)\n\n var c = true\n if (stat)\n c = stat.isDirectory() ? 'DIR' : 'FILE'\n this.cache[abs] = this.cache[abs] || c\n\n if (needDir && c === 'FILE')\n return cb()\n\n return cb(null, c, stat)\n}\n","// @ts-check\n/** @typedef { import('estree').BaseNode} BaseNode */\n\n/** @typedef {{\n\tskip: () => void;\n\tremove: () => void;\n\treplace: (node: BaseNode) => void;\n}} WalkerContext */\n\nclass WalkerBase {\n\tconstructor() {\n\t\t/** @type {boolean} */\n\t\tthis.should_skip = false;\n\n\t\t/** @type {boolean} */\n\t\tthis.should_remove = false;\n\n\t\t/** @type {BaseNode | null} */\n\t\tthis.replacement = null;\n\n\t\t/** @type {WalkerContext} */\n\t\tthis.context = {\n\t\t\tskip: () => (this.should_skip = true),\n\t\t\tremove: () => (this.should_remove = true),\n\t\t\treplace: (node) => (this.replacement = node)\n\t\t};\n\t}\n\n\t/**\n\t *\n\t * @param {any} parent\n\t * @param {string} prop\n\t * @param {number} index\n\t * @param {BaseNode} node\n\t */\n\treplace(parent, prop, index, node) {\n\t\tif (parent) {\n\t\t\tif (index !== null) {\n\t\t\t\tparent[prop][index] = node;\n\t\t\t} else {\n\t\t\t\tparent[prop] = node;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {any} parent\n\t * @param {string} prop\n\t * @param {number} index\n\t */\n\tremove(parent, prop, index) {\n\t\tif (parent) {\n\t\t\tif (index !== null) {\n\t\t\t\tparent[prop].splice(index, 1);\n\t\t\t} else {\n\t\t\t\tdelete parent[prop];\n\t\t\t}\n\t\t}\n\t}\n}\n\n// @ts-check\n\n/** @typedef { import('estree').BaseNode} BaseNode */\n/** @typedef { import('./walker.js').WalkerContext} WalkerContext */\n\n/** @typedef {(\n * this: WalkerContext,\n * node: BaseNode,\n * parent: BaseNode,\n * key: string,\n * index: number\n * ) => void} SyncHandler */\n\nclass SyncWalker extends WalkerBase {\n\t/**\n\t *\n\t * @param {SyncHandler} enter\n\t * @param {SyncHandler} leave\n\t */\n\tconstructor(enter, leave) {\n\t\tsuper();\n\n\t\t/** @type {SyncHandler} */\n\t\tthis.enter = enter;\n\n\t\t/** @type {SyncHandler} */\n\t\tthis.leave = leave;\n\t}\n\n\t/**\n\t *\n\t * @param {BaseNode} node\n\t * @param {BaseNode} parent\n\t * @param {string} [prop]\n\t * @param {number} [index]\n\t * @returns {BaseNode}\n\t */\n\tvisit(node, parent, prop, index) {\n\t\tif (node) {\n\t\t\tif (this.enter) {\n\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tthis.should_skip = false;\n\t\t\t\tthis.should_remove = false;\n\t\t\t\tthis.replacement = null;\n\n\t\t\t\tthis.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\tif (skipped) return node;\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\n\t\t\tfor (const key in node) {\n\t\t\t\tconst value = node[key];\n\n\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\tif (!this.visit(value[i], node, key, i)) {\n\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\tthis.visit(value, node, key, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.leave) {\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tthis.replacement = null;\n\t\t\t\tthis.should_remove = false;\n\n\t\t\t\tthis.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.replacement = _replacement;\n\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\n// @ts-check\n\n/** @typedef { import('estree').BaseNode} BaseNode */\n/** @typedef { import('./walker').WalkerContext} WalkerContext */\n\n/** @typedef {(\n * this: WalkerContext,\n * node: BaseNode,\n * parent: BaseNode,\n * key: string,\n * index: number\n * ) => Promise<void>} AsyncHandler */\n\nclass AsyncWalker extends WalkerBase {\n\t/**\n\t *\n\t * @param {AsyncHandler} enter\n\t * @param {AsyncHandler} leave\n\t */\n\tconstructor(enter, leave) {\n\t\tsuper();\n\n\t\t/** @type {AsyncHandler} */\n\t\tthis.enter = enter;\n\n\t\t/** @type {AsyncHandler} */\n\t\tthis.leave = leave;\n\t}\n\n\t/**\n\t *\n\t * @param {BaseNode} node\n\t * @param {BaseNode} parent\n\t * @param {string} [prop]\n\t * @param {number} [index]\n\t * @returns {Promise<BaseNode>}\n\t */\n\tasync visit(node, parent, prop, index) {\n\t\tif (node) {\n\t\t\tif (this.enter) {\n\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tthis.should_skip = false;\n\t\t\t\tthis.should_remove = false;\n\t\t\t\tthis.replacement = null;\n\n\t\t\t\tawait this.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\tif (skipped) return node;\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\n\t\t\tfor (const key in node) {\n\t\t\t\tconst value = node[key];\n\n\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\tif (!(await this.visit(value[i], node, key, i))) {\n\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\tawait this.visit(value, node, key, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.leave) {\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tthis.replacement = null;\n\t\t\t\tthis.should_remove = false;\n\n\t\t\t\tawait this.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.replacement = _replacement;\n\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\n// @ts-check\n\n/** @typedef { import('estree').BaseNode} BaseNode */\n/** @typedef { import('./sync.js').SyncHandler} SyncHandler */\n/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */\n\n/**\n *\n * @param {BaseNode} ast\n * @param {{\n * enter?: SyncHandler\n * leave?: SyncHandler\n * }} walker\n * @returns {BaseNode}\n */\nfunction walk(ast, { enter, leave }) {\n\tconst instance = new SyncWalker(enter, leave);\n\treturn instance.visit(ast, null);\n}\n\n/**\n *\n * @param {BaseNode} ast\n * @param {{\n * enter?: AsyncHandler\n * leave?: AsyncHandler\n * }} walker\n * @returns {Promise<BaseNode>}\n */\nasync function asyncWalk(ast, { enter, leave }) {\n\tconst instance = new AsyncWalker(enter, leave);\n\treturn await instance.visit(ast, null);\n}\n\nexport { asyncWalk, walk };\n","function isReference(node, parent) {\n if (node.type === 'MemberExpression') {\n return !node.computed && isReference(node.object, node);\n }\n if (node.type === 'Identifier') {\n if (!parent)\n return true;\n switch (parent.type) {\n // disregard `bar` in `foo.bar`\n case 'MemberExpression': return parent.computed || node === parent.object;\n // disregard the `foo` in `class {foo(){}}` but keep it in `class {[foo](){}}`\n case 'MethodDefinition': return parent.computed;\n // disregard the `foo` in `class {foo=bar}` but keep it in `class {[foo]=bar}` and `class {bar=foo}`\n case 'FieldDefinition': return parent.computed || node === parent.value;\n // disregard the `bar` in `{ bar: foo }`, but keep it in `{ [bar]: foo }`\n case 'Property': return parent.computed || node === parent.value;\n // disregard the `bar` in `export { foo as bar }` or\n // the foo in `import { foo as bar }`\n case 'ExportSpecifier':\n case 'ImportSpecifier': return node === parent.local;\n // disregard the `foo` in `foo: while (...) { ... break foo; ... continue foo;}`\n case 'LabeledStatement':\n case 'BreakStatement':\n case 'ContinueStatement': return false;\n default: return true;\n }\n }\n return false;\n}\n\nexport default isReference;\n","import { basename, extname, dirname, join, resolve, sep } from 'path';\nimport { makeLegalIdentifier, attachScopes, extractAssignedNames, createFilter } from '@rollup/pluginutils';\nimport getCommonDir from 'commondir';\nimport { existsSync, readFileSync, statSync } from 'fs';\nimport glob from 'glob';\nimport { walk } from 'estree-walker';\nimport MagicString from 'magic-string';\nimport isReference from 'is-reference';\nimport { sync } from 'resolve';\n\nvar peerDependencies = {\n\trollup: \"^2.38.3\"\n};\n\nfunction tryParse(parse, code, id) {\n try {\n return parse(code, { allowReturnOutsideFunction: true });\n } catch (err) {\n err.message += ` in ${id}`;\n throw err;\n }\n}\n\nconst firstpassGlobal = /\\b(?:require|module|exports|global)\\b/;\n\nconst firstpassNoGlobal = /\\b(?:require|module|exports)\\b/;\n\nfunction hasCjsKeywords(code, ignoreGlobal) {\n const firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal;\n return firstpass.test(code);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nfunction analyzeTopLevelStatements(parse, code, id) {\n const ast = tryParse(parse, code, id);\n\n let isEsModule = false;\n let hasDefaultExport = false;\n let hasNamedExports = false;\n\n for (const node of ast.body) {\n switch (node.type) {\n case 'ExportDefaultDeclaration':\n isEsModule = true;\n hasDefaultExport = true;\n break;\n case 'ExportNamedDeclaration':\n isEsModule = true;\n if (node.declaration) {\n hasNamedExports = true;\n } else {\n for (const specifier of node.specifiers) {\n if (specifier.exported.name === 'default') {\n hasDefaultExport = true;\n } else {\n hasNamedExports = true;\n }\n }\n }\n break;\n case 'ExportAllDeclaration':\n isEsModule = true;\n if (node.exported && node.exported.name === 'default') {\n hasDefaultExport = true;\n } else {\n hasNamedExports = true;\n }\n break;\n case 'ImportDeclaration':\n isEsModule = true;\n break;\n }\n }\n\n return { isEsModule, hasDefaultExport, hasNamedExports, ast };\n}\n\nconst isWrappedId = (id, suffix) => id.endsWith(suffix);\nconst wrapId = (id, suffix) => `\\0${id}${suffix}`;\nconst unwrapId = (wrappedId, suffix) => wrappedId.slice(1, -suffix.length);\n\nconst PROXY_SUFFIX = '?commonjs-proxy';\nconst REQUIRE_SUFFIX = '?commonjs-require';\nconst EXTERNAL_SUFFIX = '?commonjs-external';\nconst EXPORTS_SUFFIX = '?commonjs-exports';\nconst MODULE_SUFFIX = '?commonjs-module';\n\nconst DYNAMIC_REGISTER_SUFFIX = '?commonjs-dynamic-register';\nconst DYNAMIC_JSON_PREFIX = '\\0commonjs-dynamic-json:';\nconst DYNAMIC_PACKAGES_ID = '\\0commonjs-dynamic-packages';\n\nconst HELPERS_ID = '\\0commonjsHelpers.js';\n\n// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers.\n// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled.\n// This will no longer be necessary once Rollup switches to ES6 output, likely\n// in Rollup 3\n\nconst HELPERS = `\nexport var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nexport function getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport function getDefaultExportFromNamespaceIfPresent (n) {\n\treturn n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n;\n}\n\nexport function getDefaultExportFromNamespaceIfNotNamed (n) {\n\treturn n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n;\n}\n\nexport function getAugmentedNamespace(n) {\n\tif (n.__esModule) return n;\n\tvar a = Object.defineProperty({}, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n`;\n\nconst FAILED_REQUIRE_ERROR = `throw new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');`;\n\nconst HELPER_NON_DYNAMIC = `\nexport function commonjsRequire (path) {\n\t${FAILED_REQUIRE_ERROR}\n}\n`;\n\nconst getDynamicHelpers = (ignoreDynamicRequires) => `\nexport function createModule(modulePath) {\n\treturn {\n\t\tpath: modulePath,\n\t\texports: {},\n\t\trequire: function (path, base) {\n\t\t\treturn commonjsRequire(path, base == null ? modulePath : base);\n\t\t}\n\t};\n}\n\nexport function commonjsRegister (path, loader) {\n\tDYNAMIC_REQUIRE_LOADERS[path] = loader;\n}\n\nexport function commonjsRegisterOrShort (path, to) {\n\tconst resolvedPath = commonjsResolveImpl(path, null, true);\n\tif (resolvedPath !== null && DYNAMIC_REQUIRE_CACHE[resolvedPath]) {\n\t DYNAMIC_REQUIRE_CACHE[path] = DYNAMIC_REQUIRE_CACHE[resolvedPath];\n\t} else {\n\t DYNAMIC_REQUIRE_SHORTS[path] = to;\n\t}\n}\n\nconst DYNAMIC_REQUIRE_LOADERS = Object.create(null);\nconst DYNAMIC_REQUIRE_CACHE = Object.create(null);\nconst DYNAMIC_REQUIRE_SHORTS = Object.create(null);\nconst DEFAULT_PARENT_MODULE = {\n\tid: '<' + 'rollup>', exports: {}, parent: undefined, filename: null, loaded: false, children: [], paths: []\n};\nconst CHECKED_EXTENSIONS = ['', '.js', '.json'];\n\nfunction normalize (path) {\n\tpath = path.replace(/\\\\\\\\/g, '/');\n\tconst parts = path.split('/');\n\tconst slashed = parts[0] === '';\n\tfor (let i = 1; i < parts.length; i++) {\n\t\tif (parts[i] === '.' || parts[i] === '') {\n\t\t\tparts.splice(i--, 1);\n\t\t}\n\t}\n\tfor (let i = 1; i < parts.length; i++) {\n\t\tif (parts[i] !== '..') continue;\n\t\tif (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') {\n\t\t\tparts.splice(--i, 2);\n\t\t\ti--;\n\t\t}\n\t}\n\tpath = parts.join('/');\n\tif (slashed && path[0] !== '/')\n\t path = '/' + path;\n\telse if (path.length === 0)\n\t path = '.';\n\treturn path;\n}\n\nfunction join () {\n\tif (arguments.length === 0)\n\t return '.';\n\tlet joined;\n\tfor (let i = 0; i < arguments.length; ++i) {\n\t let arg = arguments[i];\n\t if (arg.length > 0) {\n\t\tif (joined === undefined)\n\t\t joined = arg;\n\t\telse\n\t\t joined += '/' + arg;\n\t }\n\t}\n\tif (joined === undefined)\n\t return '.';\n\n\treturn joined;\n}\n\nfunction isPossibleNodeModulesPath (modulePath) {\n\tlet c0 = modulePath[0];\n\tif (c0 === '/' || c0 === '\\\\\\\\') return false;\n\tlet c1 = modulePath[1], c2 = modulePath[2];\n\tif ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\\\\\')) ||\n\t\t(c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\\\\\'))) return false;\n\tif (c1 === ':' && (c2 === '/' || c2 === '\\\\\\\\'))\n\t\treturn false;\n\treturn true;\n}\n\nfunction dirname (path) {\n if (path.length === 0)\n return '.';\n\n let i = path.length - 1;\n while (i > 0) {\n const c = path.charCodeAt(i);\n if ((c === 47 || c === 92) && i !== path.length - 1)\n break;\n i--;\n }\n\n if (i > 0)\n return path.substr(0, i);\n\n if (path.chartCodeAt(0) === 47 || path.chartCodeAt(0) === 92)\n return path.charAt(0);\n\n return '.';\n}\n\nexport function commonjsResolveImpl (path, originalModuleDir, testCache) {\n\tconst shouldTryNodeModules = isPossibleNodeModulesPath(path);\n\tpath = normalize(path);\n\tlet relPath;\n\tif (path[0] === '/') {\n\t\toriginalModuleDir = '/';\n\t}\n\twhile (true) {\n\t\tif (!shouldTryNodeModules) {\n\t\t\trelPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;\n\t\t} else if (originalModuleDir) {\n\t\t\trelPath = normalize(originalModuleDir + '/node_modules/' + path);\n\t\t} else {\n\t\t\trelPath = normalize(join('node_modules', path));\n\t\t}\n\n\t\tif (relPath.endsWith('/..')) {\n\t\t\tbreak; // Travelled too far up, avoid infinite loop\n\t\t}\n\n\t\tfor (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {\n\t\t\tconst resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];\n\t\t\tif (DYNAMIC_REQUIRE_CACHE[resolvedPath]) {\n\t\t\t\treturn resolvedPath;\n\t\t\t}\n\t\t\tif (DYNAMIC_REQUIRE_SHORTS[resolvedPath]) {\n\t\t\t return resolvedPath;\n\t\t\t}\n\t\t\tif (DYNAMIC_REQUIRE_LOADERS[resolvedPath]) {\n\t\t\t\treturn resolvedPath;\n\t\t\t}\n\t\t}\n\t\tif (!shouldTryNodeModules) break;\n\t\tconst nextDir = normalize(originalModuleDir + '/..');\n\t\tif (nextDir === originalModuleDir) break;\n\t\toriginalModuleDir = nextDir;\n\t}\n\treturn null;\n}\n\nexport function commonjsResolve (path, originalModuleDir) {\n\tconst resolvedPath = commonjsResolveImpl(path, originalModuleDir);\n\tif (resolvedPath !== null) {\n\t\treturn resolvedPath;\n\t}\n\treturn require.resolve(path);\n}\n\nexport function commonjsRequire (path, originalModuleDir) {\n\tlet resolvedPath = commonjsResolveImpl(path, originalModuleDir, true);\n\tif (resolvedPath !== null) {\n let cachedModule = DYNAMIC_REQUIRE_CACHE[resolvedPath];\n if (cachedModule) return cachedModule.exports;\n let shortTo = DYNAMIC_REQUIRE_SHORTS[resolvedPath];\n if (shortTo) {\n cachedModule = DYNAMIC_REQUIRE_CACHE[shortTo];\n if (cachedModule)\n return cachedModule.exports;\n resolvedPath = commonjsResolveImpl(shortTo, null, true);\n }\n const loader = DYNAMIC_REQUIRE_LOADERS[resolvedPath];\n if (loader) {\n DYNAMIC_REQUIRE_CACHE[resolvedPath] = cachedModule = {\n id: resolvedPath,\n filename: resolvedPath,\n path: dirname(resolvedPath),\n exports: {},\n parent: DEFAULT_PARENT_MODULE,\n loaded: false,\n children: [],\n paths: [],\n require: function (path, base) {\n return commonjsRequire(path, (base === undefined || base === null) ? cachedModule.path : base);\n }\n };\n try {\n loader.call(commonjsGlobal, cachedModule, cachedModule.exports);\n } catch (error) {\n delete DYNAMIC_REQUIRE_CACHE[resolvedPath];\n throw error;\n }\n cachedModule.loaded = true;\n return cachedModule.exports;\n };\n\t}\n\t${ignoreDynamicRequires ? 'return require(path);' : FAILED_REQUIRE_ERROR}\n}\n\ncommonjsRequire.cache = DYNAMIC_REQUIRE_CACHE;\ncommonjsRequire.resolve = commonjsResolve;\n`;\n\nfunction getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires) {\n return `${HELPERS}${\n isDynamicRequireModulesEnabled ? getDynamicHelpers(ignoreDynamicRequires) : HELPER_NON_DYNAMIC\n }`;\n}\n\n/* eslint-disable import/prefer-default-export */\n\nfunction deconflict(scopes, globals, identifier) {\n let i = 1;\n let deconflicted = makeLegalIdentifier(identifier);\n const hasConflicts = () =>\n scopes.some((scope) => scope.contains(deconflicted)) || globals.has(deconflicted);\n\n while (hasConflicts()) {\n deconflicted = makeLegalIdentifier(`${identifier}_${i}`);\n i += 1;\n }\n\n for (const scope of scopes) {\n scope.declarations[deconflicted] = true;\n }\n\n return deconflicted;\n}\n\nfunction getName(id) {\n const name = makeLegalIdentifier(basename(id, extname(id)));\n if (name !== 'index') {\n return name;\n }\n return makeLegalIdentifier(basename(dirname(id)));\n}\n\nfunction normalizePathSlashes(path) {\n return path.replace(/\\\\/g, '/');\n}\n\nconst VIRTUAL_PATH_BASE = '/$$rollup_base$$';\nconst getVirtualPathForDynamicRequirePath = (path, commonDir) => {\n const normalizedPath = normalizePathSlashes(path);\n return normalizedPath.startsWith(commonDir)\n ? VIRTUAL_PATH_BASE + normalizedPath.slice(commonDir.length)\n : normalizedPath;\n};\n\nfunction getPackageEntryPoint(dirPath) {\n let entryPoint = 'index.js';\n\n try {\n if (existsSync(join(dirPath, 'package.json'))) {\n entryPoint =\n JSON.parse(readFileSync(join(dirPath, 'package.json'), { encoding: 'utf8' })).main ||\n entryPoint;\n }\n } catch (ignored) {\n // ignored\n }\n\n return entryPoint;\n}\n\nfunction getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir) {\n let code = `const commonjsRegisterOrShort = require('${HELPERS_ID}?commonjsRegisterOrShort');`;\n for (const dir of dynamicRequireModuleDirPaths) {\n const entryPoint = getPackageEntryPoint(dir);\n\n code += `\\ncommonjsRegisterOrShort(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(dir, commonDir)\n )}, ${JSON.stringify(getVirtualPathForDynamicRequirePath(join(dir, entryPoint), commonDir))});`;\n }\n return code;\n}\n\nfunction getDynamicPackagesEntryIntro(\n dynamicRequireModuleDirPaths,\n dynamicRequireModuleSet\n) {\n let dynamicImports = Array.from(\n dynamicRequireModuleSet,\n (dynamicId) => `require(${JSON.stringify(wrapId(dynamicId, DYNAMIC_REGISTER_SUFFIX))});`\n ).join('\\n');\n\n if (dynamicRequireModuleDirPaths.length) {\n dynamicImports += `require(${JSON.stringify(\n wrapId(DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX)\n )});`;\n }\n\n return dynamicImports;\n}\n\nfunction isDynamicModuleImport(id, dynamicRequireModuleSet) {\n const normalizedPath = normalizePathSlashes(id);\n return dynamicRequireModuleSet.has(normalizedPath) && !normalizedPath.endsWith('.json');\n}\n\nfunction isDirectory(path) {\n try {\n if (statSync(path).isDirectory()) return true;\n } catch (ignored) {\n // Nothing to do here\n }\n return false;\n}\n\nfunction getDynamicRequirePaths(patterns) {\n const dynamicRequireModuleSet = new Set();\n for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) {\n const isNegated = pattern.startsWith('!');\n const modifySet = Set.prototype[isNegated ? 'delete' : 'add'].bind(dynamicRequireModuleSet);\n for (const path of glob.sync(isNegated ? pattern.substr(1) : pattern)) {\n modifySet(normalizePathSlashes(resolve(path)));\n if (isDirectory(path)) {\n modifySet(normalizePathSlashes(resolve(join(path, getPackageEntryPoint(path)))));\n }\n }\n }\n const dynamicRequireModuleDirPaths = Array.from(dynamicRequireModuleSet.values()).filter((path) =>\n isDirectory(path)\n );\n return { dynamicRequireModuleSet, dynamicRequireModuleDirPaths };\n}\n\nfunction getCommonJSMetaPromise(commonJSMetaPromises, id) {\n let commonJSMetaPromise = commonJSMetaPromises.get(id);\n if (commonJSMetaPromise) return commonJSMetaPromise.promise;\n\n const promise = new Promise((resolve) => {\n commonJSMetaPromise = {\n resolve,\n promise: null\n };\n commonJSMetaPromises.set(id, commonJSMetaPromise);\n });\n commonJSMetaPromise.promise = promise;\n\n return promise;\n}\n\nfunction setCommonJSMetaPromise(commonJSMetaPromises, id, commonjsMeta) {\n const commonJSMetaPromise = commonJSMetaPromises.get(id);\n if (commonJSMetaPromise) {\n if (commonJSMetaPromise.resolve) {\n commonJSMetaPromise.resolve(commonjsMeta);\n commonJSMetaPromise.resolve = null;\n }\n } else {\n commonJSMetaPromises.set(id, { promise: Promise.resolve(commonjsMeta), resolve: null });\n }\n}\n\n// e.g. id === \"commonjsHelpers?commonjsRegister\"\nfunction getSpecificHelperProxy(id) {\n return `export {${id.split('?')[1]} as default} from \"${HELPERS_ID}\";`;\n}\n\nfunction getUnknownRequireProxy(id, requireReturnsDefault) {\n if (requireReturnsDefault === true || id.endsWith('.json')) {\n return `export {default} from ${JSON.stringify(id)};`;\n }\n const name = getName(id);\n const exported =\n requireReturnsDefault === 'auto'\n ? `import {getDefaultExportFromNamespaceIfNotNamed} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfNotNamed(${name});`\n : requireReturnsDefault === 'preferred'\n ? `import {getDefaultExportFromNamespaceIfPresent} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfPresent(${name});`\n : !requireReturnsDefault\n ? `import {getAugmentedNamespace} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getAugmentedNamespace(${name});`\n : `export default ${name};`;\n return `import * as ${name} from ${JSON.stringify(id)}; ${exported}`;\n}\n\nfunction getDynamicJsonProxy(id, commonDir) {\n const normalizedPath = normalizePathSlashes(id.slice(DYNAMIC_JSON_PREFIX.length));\n return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\\ncommonjsRegister(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(normalizedPath, commonDir)\n )}, function (module, exports) {\n module.exports = require(${JSON.stringify(normalizedPath)});\n});`;\n}\n\nfunction getDynamicRequireProxy(normalizedPath, commonDir) {\n return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\\ncommonjsRegister(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(normalizedPath, commonDir)\n )}, function (module, exports) {\n ${readFileSync(normalizedPath, { encoding: 'utf8' })}\n});`;\n}\n\nasync function getStaticRequireProxy(\n id,\n requireReturnsDefault,\n esModulesWithDefaultExport,\n esModulesWithNamedExports,\n commonJsMetaPromises\n) {\n const name = getName(id);\n const commonjsMeta = await getCommonJSMetaPromise(commonJsMetaPromises, id);\n if (commonjsMeta && commonjsMeta.isCommonJS) {\n return `export { __moduleExports as default } from ${JSON.stringify(id)};`;\n } else if (commonjsMeta === null) {\n return getUnknownRequireProxy(id, requireReturnsDefault);\n } else if (!requireReturnsDefault) {\n return `import { getAugmentedNamespace } from \"${HELPERS_ID}\"; import * as ${name} from ${JSON.stringify(\n id\n )}; export default /*@__PURE__*/getAugmentedNamespace(${name});`;\n } else if (\n requireReturnsDefault !== true &&\n (requireReturnsDefault === 'namespace' ||\n !esModulesWithDefaultExport.has(id) ||\n (requireReturnsDefault === 'auto' && esModulesWithNamedExports.has(id)))\n ) {\n return `import * as ${name} from ${JSON.stringify(id)}; export default ${name};`;\n }\n return `export { default } from ${JSON.stringify(id)};`;\n}\n\n/* eslint-disable no-param-reassign, no-undefined */\n\nfunction getCandidatesForExtension(resolved, extension) {\n return [resolved + extension, `${resolved}${sep}index${extension}`];\n}\n\nfunction getCandidates(resolved, extensions) {\n return extensions.reduce(\n (paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)),\n [resolved]\n );\n}\n\nfunction getResolveId(extensions) {\n function resolveExtensions(importee, importer) {\n // not our problem\n if (importee[0] !== '.' || !importer) return undefined;\n\n const resolved = resolve(dirname(importer), importee);\n const candidates = getCandidates(resolved, extensions);\n\n for (let i = 0; i < candidates.length; i += 1) {\n try {\n const stats = statSync(candidates[i]);\n if (stats.isFile()) return { id: candidates[i] };\n } catch (err) {\n /* noop */\n }\n }\n\n return undefined;\n }\n\n return function resolveId(importee, rawImporter) {\n if (isWrappedId(importee, MODULE_SUFFIX) || isWrappedId(importee, EXPORTS_SUFFIX)) {\n return importee;\n }\n\n const importer =\n rawImporter && isWrappedId(rawImporter, DYNAMIC_REGISTER_SUFFIX)\n ? unwrapId(rawImporter, DYNAMIC_REGISTER_SUFFIX)\n : rawImporter;\n\n // Except for exports, proxies are only importing resolved ids,\n // no need to resolve again\n if (importer && isWrappedId(importer, PROXY_SUFFIX)) {\n return importee;\n }\n\n const isProxyModule = isWrappedId(importee, PROXY_SUFFIX);\n const isRequiredModule = isWrappedId(importee, REQUIRE_SUFFIX);\n let isModuleRegistration = false;\n\n if (isProxyModule) {\n importee = unwrapId(importee, PROXY_SUFFIX);\n } else if (isRequiredModule) {\n importee = unwrapId(importee, REQUIRE_SUFFIX);\n\n isModuleRegistration = isWrappedId(importee, DYNAMIC_REGISTER_SUFFIX);\n if (isModuleRegistration) {\n importee = unwrapId(importee, DYNAMIC_REGISTER_SUFFIX);\n }\n }\n\n if (\n importee.startsWith(HELPERS_ID) ||\n importee === DYNAMIC_PACKAGES_ID ||\n importee.startsWith(DYNAMIC_JSON_PREFIX)\n ) {\n return importee;\n }\n\n if (importee.startsWith('\\0')) {\n return null;\n }\n\n return this.resolve(importee, importer, {\n skipSelf: true,\n custom: { 'node-resolve': { isRequire: isProxyModule || isRequiredModule } }\n }).then((resolved) => {\n if (!resolved) {\n resolved = resolveExtensions(importee, importer);\n }\n if (resolved && isProxyModule) {\n resolved.id = wrapId(resolved.id, resolved.external ? EXTERNAL_SUFFIX : PROXY_SUFFIX);\n resolved.external = false;\n } else if (resolved && isModuleRegistration) {\n resolved.id = wrapId(resolved.id, DYNAMIC_REGISTER_SUFFIX);\n } else if (!resolved && (isProxyModule || isRequiredModule)) {\n return { id: wrapId(importee, EXTERNAL_SUFFIX), external: false };\n }\n return resolved;\n });\n };\n}\n\nfunction validateRollupVersion(rollupVersion, peerDependencyVersion) {\n const [major, minor] = rollupVersion.split('.').map(Number);\n const versionRegexp = /\\^(\\d+\\.\\d+)\\.\\d+/g;\n let minMajor = Infinity;\n let minMinor = Infinity;\n let foundVersion;\n // eslint-disable-next-line no-cond-assign\n while ((foundVersion = versionRegexp.exec(peerDependencyVersion))) {\n const [foundMajor, foundMinor] = foundVersion[1].split('.').map(Number);\n if (foundMajor < minMajor) {\n minMajor = foundMajor;\n minMinor = foundMinor;\n }\n }\n if (major < minMajor || (major === minMajor && minor < minMinor)) {\n throw new Error(\n `Insufficient Rollup version: \"@rollup/plugin-commonjs\" requires at least rollup@${minMajor}.${minMinor} but found rollup@${rollupVersion}.`\n );\n }\n}\n\nconst operators = {\n '==': (x) => equals(x.left, x.right, false),\n\n '!=': (x) => not(operators['=='](x)),\n\n '===': (x) => equals(x.left, x.right, true),\n\n '!==': (x) => not(operators['==='](x)),\n\n '!': (x) => isFalsy(x.argument),\n\n '&&': (x) => isTruthy(x.left) && isTruthy(x.right),\n\n '||': (x) => isTruthy(x.left) || isTruthy(x.right)\n};\n\nfunction not(value) {\n return value === null ? value : !value;\n}\n\nfunction equals(a, b, strict) {\n if (a.type !== b.type) return null;\n // eslint-disable-next-line eqeqeq\n if (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value;\n return null;\n}\n\nfunction isTruthy(node) {\n if (!node) return false;\n if (node.type === 'Literal') return !!node.value;\n if (node.type === 'ParenthesizedExpression') return isTruthy(node.expression);\n if (node.operator in operators) return operators[node.operator](node);\n return null;\n}\n\nfunction isFalsy(node) {\n return not(isTruthy(node));\n}\n\nfunction getKeypath(node) {\n const parts = [];\n\n while (node.type === 'MemberExpression') {\n if (node.computed) return null;\n\n parts.unshift(node.property.name);\n // eslint-disable-next-line no-param-reassign\n node = node.object;\n }\n\n if (node.type !== 'Identifier') return null;\n\n const { name } = node;\n parts.unshift(name);\n\n return { name, keypath: parts.join('.') };\n}\n\nconst KEY_COMPILED_ESM = '__esModule';\n\nfunction isDefineCompiledEsm(node) {\n const definedProperty =\n getDefinePropertyCallName(node, 'exports') || getDefinePropertyCallName(node, 'module.exports');\n if (definedProperty && definedProperty.key === KEY_COMPILED_ESM) {\n return isTruthy(definedProperty.value);\n }\n return false;\n}\n\nfunction getDefinePropertyCallName(node, targetName) {\n const {\n callee: { object, property }\n } = node;\n if (!object || object.type !== 'Identifier' || object.name !== 'Object') return;\n if (!property || property.type !== 'Identifier' || property.name !== 'defineProperty') return;\n if (node.arguments.length !== 3) return;\n\n const targetNames = targetName.split('.');\n const [target, key, value] = node.arguments;\n if (targetNames.length === 1) {\n if (target.type !== 'Identifier' || target.name !== targetNames[0]) {\n return;\n }\n }\n\n if (targetNames.length === 2) {\n if (\n target.type !== 'MemberExpression' ||\n target.object.name !== targetNames[0] ||\n target.property.name !== targetNames[1]\n ) {\n return;\n }\n }\n\n if (value.type !== 'ObjectExpression' || !value.properties) return;\n\n const valueProperty = value.properties.find((p) => p.key && p.key.name === 'value');\n if (!valueProperty || !valueProperty.value) return;\n\n // eslint-disable-next-line consistent-return\n return { key: key.value, value: valueProperty.value };\n}\n\nfunction isShorthandProperty(parent) {\n return parent && parent.type === 'Property' && parent.shorthand;\n}\n\nfunction hasDefineEsmProperty(node) {\n return node.properties.some((property) => {\n if (\n property.type === 'Property' &&\n property.key.type === 'Identifier' &&\n property.key.name === '__esModule' &&\n isTruthy(property.value)\n ) {\n return true;\n }\n return false;\n });\n}\n\nfunction wrapCode(magicString, uses, moduleName, exportsName) {\n const args = [];\n const passedArgs = [];\n if (uses.module) {\n args.push('module');\n passedArgs.push(moduleName);\n }\n if (uses.exports) {\n args.push('exports');\n passedArgs.push(exportsName);\n }\n magicString\n .trim()\n .prepend(`(function (${args.join(', ')}) {\\n`)\n .append(`\\n}(${passedArgs.join(', ')}));`);\n}\n\nfunction rewriteExportsAndGetExportsBlock(\n magicString,\n moduleName,\n exportsName,\n wrapped,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsAssignmentsByName,\n topLevelAssignments,\n defineCompiledEsmExpressions,\n deconflictedExportNames,\n code,\n HELPERS_NAME,\n exportMode,\n detectWrappedDefault,\n defaultIsModuleExports\n) {\n const exports = [];\n const exportDeclarations = [];\n\n if (exportMode === 'replace') {\n getExportsForReplacedModuleExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsName\n );\n } else {\n exports.push(`${exportsName} as __moduleExports`);\n if (wrapped) {\n getExportsWhenWrapping(\n exportDeclarations,\n exportsName,\n detectWrappedDefault,\n HELPERS_NAME,\n defaultIsModuleExports\n );\n } else {\n getExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n exportsAssignmentsByName,\n deconflictedExportNames,\n topLevelAssignments,\n moduleName,\n exportsName,\n defineCompiledEsmExpressions,\n HELPERS_NAME,\n defaultIsModuleExports\n );\n }\n }\n if (exports.length) {\n exportDeclarations.push(`export { ${exports.join(', ')} };`);\n }\n\n return `\\n\\n${exportDeclarations.join('\\n')}`;\n}\n\nfunction getExportsForReplacedModuleExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsName\n) {\n for (const { left } of moduleExportsAssignments) {\n magicString.overwrite(left.start, left.end, exportsName);\n }\n magicString.prependRight(firstTopLevelModuleExportsAssignment.left.start, 'var ');\n exports.push(`${exportsName} as __moduleExports`);\n exportDeclarations.push(`export default ${exportsName};`);\n}\n\nfunction getExportsWhenWrapping(\n exportDeclarations,\n exportsName,\n detectWrappedDefault,\n HELPERS_NAME,\n defaultIsModuleExports\n) {\n exportDeclarations.push(\n `export default ${\n detectWrappedDefault && defaultIsModuleExports === 'auto'\n ? `/*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName})`\n : defaultIsModuleExports === false\n ? `${exportsName}.default`\n : exportsName\n };`\n );\n}\n\nfunction getExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n exportsAssignmentsByName,\n deconflictedExportNames,\n topLevelAssignments,\n moduleName,\n exportsName,\n defineCompiledEsmExpressions,\n HELPERS_NAME,\n defaultIsModuleExports\n) {\n let deconflictedDefaultExportName;\n // Collect and rewrite module.exports assignments\n for (const { left } of moduleExportsAssignments) {\n magicString.overwrite(left.start, left.end, `${moduleName}.exports`);\n }\n\n // Collect and rewrite named exports\n for (const [exportName, { nodes }] of exportsAssignmentsByName) {\n const deconflicted = deconflictedExportNames[exportName];\n let needsDeclaration = true;\n for (const node of nodes) {\n let replacement = `${deconflicted} = ${exportsName}.${exportName}`;\n if (needsDeclaration && topLevelAssignments.has(node)) {\n replacement = `var ${replacement}`;\n needsDeclaration = false;\n }\n magicString.overwrite(node.start, node.left.end, replacement);\n }\n if (needsDeclaration) {\n magicString.prepend(`var ${deconflicted};\\n`);\n }\n\n if (exportName === 'default') {\n deconflictedDefaultExportName = deconflicted;\n } else {\n exports.push(exportName === deconflicted ? exportName : `${deconflicted} as ${exportName}`);\n }\n }\n\n // Collect and rewrite exports.__esModule assignments\n let isRestorableCompiledEsm = false;\n for (const expression of defineCompiledEsmExpressions) {\n isRestorableCompiledEsm = true;\n const moduleExportsExpression =\n expression.type === 'CallExpression' ? expression.arguments[0] : expression.left.object;\n magicString.overwrite(moduleExportsExpression.start, moduleExportsExpression.end, exportsName);\n }\n\n if (!isRestorableCompiledEsm || defaultIsModuleExports === true) {\n exportDeclarations.push(`export default ${exportsName};`);\n } else if (moduleExportsAssignments.length === 0 || defaultIsModuleExports === false) {\n exports.push(`${deconflictedDefaultExportName || exportsName} as default`);\n } else {\n exportDeclarations.push(\n `export default /*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName});`\n );\n }\n}\n\nfunction isRequireStatement(node, scope) {\n if (!node) return false;\n if (node.type !== 'CallExpression') return false;\n\n // Weird case of `require()` or `module.require()` without arguments\n if (node.arguments.length === 0) return false;\n\n return isRequire(node.callee, scope);\n}\n\nfunction isRequire(node, scope) {\n return (\n (node.type === 'Identifier' && node.name === 'require' && !scope.contains('require')) ||\n (node.type === 'MemberExpression' && isModuleRequire(node, scope))\n );\n}\n\nfunction isModuleRequire({ object, property }, scope) {\n return (\n object.type === 'Identifier' &&\n object.name === 'module' &&\n property.type === 'Identifier' &&\n property.name === 'require' &&\n !scope.contains('module')\n );\n}\n\nfunction isStaticRequireStatement(node, scope) {\n if (!isRequireStatement(node, scope)) return false;\n return !hasDynamicArguments(node);\n}\n\nfunction hasDynamicArguments(node) {\n return (\n node.arguments.length > 1 ||\n (node.arguments[0].type !== 'Literal' &&\n (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0))\n );\n}\n\nconst reservedMethod = { resolve: true, cache: true, main: true };\n\nfunction isNodeRequirePropertyAccess(parent) {\n return parent && parent.property && reservedMethod[parent.property.name];\n}\n\nfunction isIgnoredRequireStatement(requiredNode, ignoreRequire) {\n return ignoreRequire(requiredNode.arguments[0].value);\n}\n\nfunction getRequireStringArg(node) {\n return node.arguments[0].type === 'Literal'\n ? node.arguments[0].value\n : node.arguments[0].quasis[0].value.cooked;\n}\n\nfunction hasDynamicModuleForPath(source, id, dynamicRequireModuleSet) {\n if (!/^(?:\\.{0,2}[/\\\\]|[A-Za-z]:[/\\\\])/.test(source)) {\n try {\n const resolvedPath = normalizePathSlashes(sync(source, { basedir: dirname(id) }));\n if (dynamicRequireModuleSet.has(resolvedPath)) {\n return true;\n }\n } catch (ex) {\n // Probably a node.js internal module\n return false;\n }\n\n return false;\n }\n\n for (const attemptExt of ['', '.js', '.json']) {\n const resolvedPath = normalizePathSlashes(resolve(dirname(id), source + attemptExt));\n if (dynamicRequireModuleSet.has(resolvedPath)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getRequireHandlers() {\n const requiredSources = [];\n const requiredBySource = Object.create(null);\n const requiredByNode = new Map();\n const requireExpressionsWithUsedReturnValue = [];\n\n function addRequireStatement(sourceId, node, scope, usesReturnValue) {\n const required = getRequired(sourceId);\n requiredByNode.set(node, { scope, required });\n if (usesReturnValue) {\n required.nodesUsingRequired.push(node);\n requireExpressionsWithUsedReturnValue.push(node);\n }\n }\n\n function getRequired(sourceId) {\n if (!requiredBySource[sourceId]) {\n requiredSources.push(sourceId);\n\n requiredBySource[sourceId] = {\n source: sourceId,\n name: null,\n nodesUsingRequired: []\n };\n }\n\n return requiredBySource[sourceId];\n }\n\n function rewriteRequireExpressionsAndGetImportBlock(\n magicString,\n topLevelDeclarations,\n topLevelRequireDeclarators,\n reassignedNames,\n helpersName,\n dynamicRegisterSources,\n moduleName,\n exportsName,\n id,\n exportMode\n ) {\n setRemainingImportNamesAndRewriteRequires(\n requireExpressionsWithUsedReturnValue,\n requiredByNode,\n magicString\n );\n const imports = [];\n imports.push(`import * as ${helpersName} from \"${HELPERS_ID}\";`);\n if (exportMode === 'module') {\n imports.push(\n `import { __module as ${moduleName}, exports as ${exportsName} } from ${JSON.stringify(\n wrapId(id, MODULE_SUFFIX)\n )}`\n );\n } else if (exportMode === 'exports') {\n imports.push(\n `import { __exports as ${exportsName} } from ${JSON.stringify(wrapId(id, EXPORTS_SUFFIX))}`\n );\n }\n for (const source of dynamicRegisterSources) {\n imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`);\n }\n for (const source of requiredSources) {\n if (!source.startsWith('\\0')) {\n imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`);\n }\n const { name, nodesUsingRequired } = requiredBySource[source];\n imports.push(\n `import ${nodesUsingRequired.length ? `${name} from ` : ''}${JSON.stringify(\n source.startsWith('\\0') ? source : wrapId(source, PROXY_SUFFIX)\n )};`\n );\n }\n return imports.length ? `${imports.join('\\n')}\\n\\n` : '';\n }\n\n return {\n addRequireStatement,\n requiredSources,\n rewriteRequireExpressionsAndGetImportBlock\n };\n}\n\nfunction setRemainingImportNamesAndRewriteRequires(\n requireExpressionsWithUsedReturnValue,\n requiredByNode,\n magicString\n) {\n let uid = 0;\n for (const requireExpression of requireExpressionsWithUsedReturnValue) {\n const { required } = requiredByNode.get(requireExpression);\n if (!required.name) {\n let potentialName;\n const isUsedName = (node) => requiredByNode.get(node).scope.contains(potentialName);\n do {\n potentialName = `require$$${uid}`;\n uid += 1;\n } while (required.nodesUsingRequired.some(isUsedName));\n required.name = potentialName;\n }\n magicString.overwrite(requireExpression.start, requireExpression.end, required.name);\n }\n}\n\n/* eslint-disable no-param-reassign, no-shadow, no-underscore-dangle, no-continue */\n\nconst exportsPattern = /^(?:module\\.)?exports(?:\\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/;\n\nconst functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/;\n\nfunction transformCommonjs(\n parse,\n code,\n id,\n isEsModule,\n ignoreGlobal,\n ignoreRequire,\n ignoreDynamicRequires,\n getIgnoreTryCatchRequireStatementMode,\n sourceMap,\n isDynamicRequireModulesEnabled,\n dynamicRequireModuleSet,\n disableWrap,\n commonDir,\n astCache,\n defaultIsModuleExports\n) {\n const ast = astCache || tryParse(parse, code, id);\n const magicString = new MagicString(code);\n const uses = {\n module: false,\n exports: false,\n global: false,\n require: false\n };\n let usesDynamicRequire = false;\n const virtualDynamicRequirePath =\n isDynamicRequireModulesEnabled && getVirtualPathForDynamicRequirePath(dirname(id), commonDir);\n let scope = attachScopes(ast, 'scope');\n let lexicalDepth = 0;\n let programDepth = 0;\n let currentTryBlockEnd = null;\n let shouldWrap = false;\n\n const globals = new Set();\n\n // TODO technically wrong since globals isn't populated yet, but ¯\\_(ツ)_/¯\n const HELPERS_NAME = deconflict([scope], globals, 'commonjsHelpers');\n const dynamicRegisterSources = new Set();\n let hasRemovedRequire = false;\n\n const {\n addRequireStatement,\n requiredSources,\n rewriteRequireExpressionsAndGetImportBlock\n } = getRequireHandlers();\n\n // See which names are assigned to. This is necessary to prevent\n // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`,\n // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh)\n const reassignedNames = new Set();\n const topLevelDeclarations = [];\n const topLevelRequireDeclarators = new Set();\n const skippedNodes = new Set();\n const moduleAccessScopes = new Set([scope]);\n const exportsAccessScopes = new Set([scope]);\n const moduleExportsAssignments = [];\n let firstTopLevelModuleExportsAssignment = null;\n const exportsAssignmentsByName = new Map();\n const topLevelAssignments = new Set();\n const topLevelDefineCompiledEsmExpressions = [];\n\n walk(ast, {\n enter(node, parent) {\n if (skippedNodes.has(node)) {\n this.skip();\n return;\n }\n\n if (currentTryBlockEnd !== null && node.start > currentTryBlockEnd) {\n currentTryBlockEnd = null;\n }\n\n programDepth += 1;\n if (node.scope) ({ scope } = node);\n if (functionType.test(node.type)) lexicalDepth += 1;\n if (sourceMap) {\n magicString.addSourcemapLocation(node.start);\n magicString.addSourcemapLocation(node.end);\n }\n\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'TryStatement':\n if (currentTryBlockEnd === null) {\n currentTryBlockEnd = node.block.end;\n }\n return;\n case 'AssignmentExpression':\n if (node.left.type === 'MemberExpression') {\n const flattened = getKeypath(node.left);\n if (!flattened || scope.contains(flattened.name)) return;\n\n const exportsPatternMatch = exportsPattern.exec(flattened.keypath);\n if (!exportsPatternMatch || flattened.keypath === 'exports') return;\n\n const [, exportName] = exportsPatternMatch;\n uses[flattened.name] = true;\n\n // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` –\n if (flattened.keypath === 'module.exports') {\n moduleExportsAssignments.push(node);\n if (programDepth > 3) {\n moduleAccessScopes.add(scope);\n } else if (!firstTopLevelModuleExportsAssignment) {\n firstTopLevelModuleExportsAssignment = node;\n }\n\n if (defaultIsModuleExports === false) {\n shouldWrap = true;\n } else if (defaultIsModuleExports === 'auto') {\n if (node.right.type === 'ObjectExpression') {\n if (hasDefineEsmProperty(node.right)) {\n shouldWrap = true;\n }\n } else if (defaultIsModuleExports === false) {\n shouldWrap = true;\n }\n }\n } else if (exportName === KEY_COMPILED_ESM) {\n if (programDepth > 3) {\n shouldWrap = true;\n } else {\n topLevelDefineCompiledEsmExpressions.push(node);\n }\n } else {\n const exportsAssignments = exportsAssignmentsByName.get(exportName) || {\n nodes: [],\n scopes: new Set()\n };\n exportsAssignments.nodes.push(node);\n exportsAssignments.scopes.add(scope);\n exportsAccessScopes.add(scope);\n exportsAssignmentsByName.set(exportName, exportsAssignments);\n if (programDepth <= 3) {\n topLevelAssignments.add(node);\n }\n }\n\n skippedNodes.add(node.left);\n } else {\n for (const name of extractAssignedNames(node.left)) {\n reassignedNames.add(name);\n }\n }\n return;\n case 'CallExpression': {\n if (isDefineCompiledEsm(node)) {\n if (programDepth === 3 && parent.type === 'ExpressionStatement') {\n // skip special handling for [module.]exports until we know we render this\n skippedNodes.add(node.arguments[0]);\n topLevelDefineCompiledEsmExpressions.push(node);\n } else {\n shouldWrap = true;\n }\n return;\n }\n\n if (\n node.callee.object &&\n node.callee.object.name === 'require' &&\n node.callee.property.name === 'resolve' &&\n hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)\n ) {\n const requireNode = node.callee.object;\n magicString.appendLeft(\n node.end - 1,\n `,${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )}`\n );\n magicString.overwrite(\n requireNode.start,\n requireNode.end,\n `${HELPERS_NAME}.commonjsRequire`,\n {\n storeName: true\n }\n );\n return;\n }\n\n if (!isStaticRequireStatement(node, scope)) return;\n if (!isDynamicRequireModulesEnabled) {\n skippedNodes.add(node.callee);\n }\n if (!isIgnoredRequireStatement(node, ignoreRequire)) {\n skippedNodes.add(node.callee);\n const usesReturnValue = parent.type !== 'ExpressionStatement';\n\n let canConvertRequire = true;\n let shouldRemoveRequireStatement = false;\n\n if (currentTryBlockEnd !== null) {\n ({\n canConvertRequire,\n shouldRemoveRequireStatement\n } = getIgnoreTryCatchRequireStatementMode(node.arguments[0].value));\n\n if (shouldRemoveRequireStatement) {\n hasRemovedRequire = true;\n }\n }\n\n let sourceId = getRequireStringArg(node);\n const isDynamicRegister = isWrappedId(sourceId, DYNAMIC_REGISTER_SUFFIX);\n if (isDynamicRegister) {\n sourceId = unwrapId(sourceId, DYNAMIC_REGISTER_SUFFIX);\n if (sourceId.endsWith('.json')) {\n sourceId = DYNAMIC_JSON_PREFIX + sourceId;\n }\n dynamicRegisterSources.add(wrapId(sourceId, DYNAMIC_REGISTER_SUFFIX));\n } else {\n if (\n !sourceId.endsWith('.json') &&\n hasDynamicModuleForPath(sourceId, id, dynamicRequireModuleSet)\n ) {\n if (shouldRemoveRequireStatement) {\n magicString.overwrite(node.start, node.end, `undefined`);\n } else if (canConvertRequire) {\n magicString.overwrite(\n node.start,\n node.end,\n `${HELPERS_NAME}.commonjsRequire(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(sourceId, commonDir)\n )}, ${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )})`\n );\n usesDynamicRequire = true;\n }\n return;\n }\n\n if (canConvertRequire) {\n addRequireStatement(sourceId, node, scope, usesReturnValue);\n }\n }\n\n if (usesReturnValue) {\n if (shouldRemoveRequireStatement) {\n magicString.overwrite(node.start, node.end, `undefined`);\n return;\n }\n\n if (\n parent.type === 'VariableDeclarator' &&\n !scope.parent &&\n parent.id.type === 'Identifier'\n ) {\n // This will allow us to reuse this variable name as the imported variable if it is not reassigned\n // and does not conflict with variables in other places where this is imported\n topLevelRequireDeclarators.add(parent);\n }\n } else {\n // This is a bare import, e.g. `require('foo');`\n\n if (!canConvertRequire && !shouldRemoveRequireStatement) {\n return;\n }\n\n magicString.remove(parent.start, parent.end);\n }\n }\n return;\n }\n case 'ConditionalExpression':\n case 'IfStatement':\n // skip dead branches\n if (isFalsy(node.test)) {\n skippedNodes.add(node.consequent);\n } else if (node.alternate && isTruthy(node.test)) {\n skippedNodes.add(node.alternate);\n }\n return;\n case 'Identifier': {\n const { name } = node;\n if (!(isReference(node, parent) && !scope.contains(name))) return;\n switch (name) {\n case 'require':\n if (isNodeRequirePropertyAccess(parent)) {\n if (hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)) {\n if (parent.property.name === 'cache') {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n }\n }\n\n return;\n }\n\n if (isDynamicRequireModulesEnabled && isRequireStatement(parent, scope)) {\n magicString.appendLeft(\n parent.end - 1,\n `,${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )}`\n );\n }\n if (!ignoreDynamicRequires) {\n if (isShorthandProperty(parent)) {\n magicString.appendRight(node.end, `: ${HELPERS_NAME}.commonjsRequire`);\n } else {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n }\n }\n usesDynamicRequire = true;\n return;\n case 'module':\n case 'exports':\n shouldWrap = true;\n uses[name] = true;\n return;\n case 'global':\n uses.global = true;\n if (!ignoreGlobal) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n storeName: true\n });\n }\n return;\n case 'define':\n magicString.overwrite(node.start, node.end, 'undefined', {\n storeName: true\n });\n return;\n default:\n globals.add(name);\n return;\n }\n }\n case 'MemberExpression':\n if (!isDynamicRequireModulesEnabled && isModuleRequire(node, scope)) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n skippedNodes.add(node.object);\n skippedNodes.add(node.property);\n }\n return;\n case 'ReturnStatement':\n // if top-level return, we need to wrap it\n if (lexicalDepth === 0) {\n shouldWrap = true;\n }\n return;\n case 'ThisExpression':\n // rewrite top-level `this` as `commonjsHelpers.commonjsGlobal`\n if (lexicalDepth === 0) {\n uses.global = true;\n if (!ignoreGlobal) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n storeName: true\n });\n }\n }\n return;\n case 'UnaryExpression':\n // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151)\n if (node.operator === 'typeof') {\n const flattened = getKeypath(node.argument);\n if (!flattened) return;\n\n if (scope.contains(flattened.name)) return;\n\n if (\n flattened.keypath === 'module.exports' ||\n flattened.keypath === 'module' ||\n flattened.keypath === 'exports'\n ) {\n magicString.overwrite(node.start, node.end, `'object'`, {\n storeName: false\n });\n }\n }\n return;\n case 'VariableDeclaration':\n if (!scope.parent) {\n topLevelDeclarations.push(node);\n }\n }\n },\n\n leave(node) {\n programDepth -= 1;\n if (node.scope) scope = scope.parent;\n if (functionType.test(node.type)) lexicalDepth -= 1;\n }\n });\n\n const nameBase = getName(id);\n const exportsName = deconflict([...exportsAccessScopes], globals, nameBase);\n const moduleName = deconflict([...moduleAccessScopes], globals, `${nameBase}Module`);\n const deconflictedExportNames = Object.create(null);\n for (const [exportName, { scopes }] of exportsAssignmentsByName) {\n deconflictedExportNames[exportName] = deconflict([...scopes], globals, exportName);\n }\n\n // We cannot wrap ES/mixed modules\n shouldWrap =\n !isEsModule &&\n !disableWrap &&\n (shouldWrap || (uses.exports && moduleExportsAssignments.length > 0));\n const detectWrappedDefault =\n shouldWrap &&\n (topLevelDefineCompiledEsmExpressions.length > 0 || code.indexOf('__esModule') >= 0);\n\n if (\n !(\n requiredSources.length ||\n dynamicRegisterSources.size ||\n uses.module ||\n uses.exports ||\n uses.require ||\n usesDynamicRequire ||\n hasRemovedRequire ||\n topLevelDefineCompiledEsmExpressions.length > 0\n ) &&\n (ignoreGlobal || !uses.global)\n ) {\n return { meta: { commonjs: { isCommonJS: false } } };\n }\n\n let leadingComment = '';\n if (code.startsWith('/*')) {\n const commentEnd = code.indexOf('*/', 2) + 2;\n leadingComment = `${code.slice(0, commentEnd)}\\n`;\n magicString.remove(0, commentEnd).trim();\n }\n\n const exportMode = shouldWrap\n ? uses.module\n ? 'module'\n : 'exports'\n : firstTopLevelModuleExportsAssignment\n ? exportsAssignmentsByName.size === 0 && topLevelDefineCompiledEsmExpressions.length === 0\n ? 'replace'\n : 'module'\n : moduleExportsAssignments.length === 0\n ? 'exports'\n : 'module';\n\n const importBlock = rewriteRequireExpressionsAndGetImportBlock(\n magicString,\n topLevelDeclarations,\n topLevelRequireDeclarators,\n reassignedNames,\n HELPERS_NAME,\n dynamicRegisterSources,\n moduleName,\n exportsName,\n id,\n exportMode\n );\n\n const exportBlock = isEsModule\n ? ''\n : rewriteExportsAndGetExportsBlock(\n magicString,\n moduleName,\n exportsName,\n shouldWrap,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsAssignmentsByName,\n topLevelAssignments,\n topLevelDefineCompiledEsmExpressions,\n deconflictedExportNames,\n code,\n HELPERS_NAME,\n exportMode,\n detectWrappedDefault,\n defaultIsModuleExports\n );\n\n if (shouldWrap) {\n wrapCode(magicString, uses, moduleName, exportsName);\n }\n\n magicString\n .trim()\n .prepend(leadingComment + importBlock)\n .append(exportBlock);\n\n return {\n code: magicString.toString(),\n map: sourceMap ? magicString.generateMap() : null,\n syntheticNamedExports: isEsModule ? false : '__moduleExports',\n meta: { commonjs: { isCommonJS: !isEsModule } }\n };\n}\n\nfunction commonjs(options = {}) {\n const extensions = options.extensions || ['.js'];\n const filter = createFilter(options.include, options.exclude);\n const {\n ignoreGlobal,\n ignoreDynamicRequires,\n requireReturnsDefault: requireReturnsDefaultOption,\n esmExternals\n } = options;\n const getRequireReturnsDefault =\n typeof requireReturnsDefaultOption === 'function'\n ? requireReturnsDefaultOption\n : () => requireReturnsDefaultOption;\n let esmExternalIds;\n const isEsmExternal =\n typeof esmExternals === 'function'\n ? esmExternals\n : Array.isArray(esmExternals)\n ? ((esmExternalIds = new Set(esmExternals)), (id) => esmExternalIds.has(id))\n : () => esmExternals;\n const defaultIsModuleExports =\n typeof options.defaultIsModuleExports === 'boolean' ? options.defaultIsModuleExports : 'auto';\n\n const { dynamicRequireModuleSet, dynamicRequireModuleDirPaths } = getDynamicRequirePaths(\n options.dynamicRequireTargets\n );\n const isDynamicRequireModulesEnabled = dynamicRequireModuleSet.size > 0;\n const commonDir = isDynamicRequireModulesEnabled\n ? getCommonDir(null, Array.from(dynamicRequireModuleSet).concat(process.cwd()))\n : null;\n\n const esModulesWithDefaultExport = new Set();\n const esModulesWithNamedExports = new Set();\n const commonJsMetaPromises = new Map();\n\n const ignoreRequire =\n typeof options.ignore === 'function'\n ? options.ignore\n : Array.isArray(options.ignore)\n ? (id) => options.ignore.includes(id)\n : () => false;\n\n const getIgnoreTryCatchRequireStatementMode = (id) => {\n const mode =\n typeof options.ignoreTryCatch === 'function'\n ? options.ignoreTryCatch(id)\n : Array.isArray(options.ignoreTryCatch)\n ? options.ignoreTryCatch.includes(id)\n : typeof options.ignoreTryCatch !== 'undefined'\n ? options.ignoreTryCatch\n : true;\n\n return {\n canConvertRequire: mode !== 'remove' && mode !== true,\n shouldRemoveRequireStatement: mode === 'remove'\n };\n };\n\n const resolveId = getResolveId(extensions);\n\n const sourceMap = options.sourceMap !== false;\n\n function transformAndCheckExports(code, id) {\n if (isDynamicRequireModulesEnabled && this.getModuleInfo(id).isEntry) {\n // eslint-disable-next-line no-param-reassign\n code =\n getDynamicPackagesEntryIntro(dynamicRequireModuleDirPaths, dynamicRequireModuleSet) + code;\n }\n\n const { isEsModule, hasDefaultExport, hasNamedExports, ast } = analyzeTopLevelStatements(\n this.parse,\n code,\n id\n );\n if (hasDefaultExport) {\n esModulesWithDefaultExport.add(id);\n }\n if (hasNamedExports) {\n esModulesWithNamedExports.add(id);\n }\n\n if (\n !dynamicRequireModuleSet.has(normalizePathSlashes(id)) &&\n (!hasCjsKeywords(code, ignoreGlobal) || (isEsModule && !options.transformMixedEsModules))\n ) {\n return { meta: { commonjs: { isCommonJS: false } } };\n }\n\n // avoid wrapping as this is a commonjsRegister call\n const disableWrap = isWrappedId(id, DYNAMIC_REGISTER_SUFFIX);\n if (disableWrap) {\n // eslint-disable-next-line no-param-reassign\n id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);\n }\n\n return transformCommonjs(\n this.parse,\n code,\n id,\n isEsModule,\n ignoreGlobal || isEsModule,\n ignoreRequire,\n ignoreDynamicRequires && !isDynamicRequireModulesEnabled,\n getIgnoreTryCatchRequireStatementMode,\n sourceMap,\n isDynamicRequireModulesEnabled,\n dynamicRequireModuleSet,\n disableWrap,\n commonDir,\n ast,\n defaultIsModuleExports\n );\n }\n\n return {\n name: 'commonjs',\n\n buildStart() {\n validateRollupVersion(this.meta.rollupVersion, peerDependencies.rollup);\n if (options.namedExports != null) {\n this.warn(\n 'The namedExports option from \"@rollup/plugin-commonjs\" is deprecated. Named exports are now handled automatically.'\n );\n }\n },\n\n resolveId,\n\n load(id) {\n if (id === HELPERS_ID) {\n return getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires);\n }\n\n if (id.startsWith(HELPERS_ID)) {\n return getSpecificHelperProxy(id);\n }\n\n if (isWrappedId(id, MODULE_SUFFIX)) {\n const actualId = unwrapId(id, MODULE_SUFFIX);\n let name = getName(actualId);\n let code;\n if (isDynamicRequireModulesEnabled) {\n if (['modulePath', 'commonjsRequire', 'createModule'].includes(name)) {\n name = `${name}_`;\n }\n code =\n `import {commonjsRequire, createModule} from \"${HELPERS_ID}\";\\n` +\n `var ${name} = createModule(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(dirname(actualId), commonDir)\n )});\\n` +\n `export {${name} as __module}`;\n } else {\n code = `var ${name} = {exports: {}}; export {${name} as __module}`;\n }\n return {\n code,\n syntheticNamedExports: '__module',\n meta: { commonjs: { isCommonJS: false } }\n };\n }\n\n if (isWrappedId(id, EXPORTS_SUFFIX)) {\n const actualId = unwrapId(id, EXPORTS_SUFFIX);\n const name = getName(actualId);\n return {\n code: `var ${name} = {}; export {${name} as __exports}`,\n meta: { commonjs: { isCommonJS: false } }\n };\n }\n\n if (isWrappedId(id, EXTERNAL_SUFFIX)) {\n const actualId = unwrapId(id, EXTERNAL_SUFFIX);\n return getUnknownRequireProxy(\n actualId,\n isEsmExternal(actualId) ? getRequireReturnsDefault(actualId) : true\n );\n }\n\n if (id === DYNAMIC_PACKAGES_ID) {\n return getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir);\n }\n\n if (id.startsWith(DYNAMIC_JSON_PREFIX)) {\n return getDynamicJsonProxy(id, commonDir);\n }\n\n if (isDynamicModuleImport(id, dynamicRequireModuleSet)) {\n return `export default require(${JSON.stringify(normalizePathSlashes(id))});`;\n }\n\n if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {\n return getDynamicRequireProxy(\n normalizePathSlashes(unwrapId(id, DYNAMIC_REGISTER_SUFFIX)),\n commonDir\n );\n }\n\n if (isWrappedId(id, PROXY_SUFFIX)) {\n const actualId = unwrapId(id, PROXY_SUFFIX);\n return getStaticRequireProxy(\n actualId,\n getRequireReturnsDefault(actualId),\n esModulesWithDefaultExport,\n esModulesWithNamedExports,\n commonJsMetaPromises\n );\n }\n\n return null;\n },\n\n transform(code, rawId) {\n let id = rawId;\n\n if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {\n id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);\n }\n\n const extName = extname(id);\n if (\n extName !== '.cjs' &&\n id !== DYNAMIC_PACKAGES_ID &&\n !id.startsWith(DYNAMIC_JSON_PREFIX) &&\n (!filter(id) || !extensions.includes(extName))\n ) {\n return null;\n }\n\n try {\n return transformAndCheckExports.call(this, code, rawId);\n } catch (err) {\n return this.error(err, err.loc);\n }\n },\n\n moduleParsed({ id, meta: { commonjs: commonjsMeta } }) {\n if (commonjsMeta && commonjsMeta.isCommonJS != null) {\n setCommonJSMetaPromise(commonJsMetaPromises, id, commonjsMeta);\n return;\n }\n setCommonJSMetaPromise(commonJsMetaPromises, id, null);\n }\n };\n}\n\nexport default commonjs;\n//# sourceMappingURL=index.es.js.map\n","'use strict';\n\nmodule.exports = (...arguments_) => {\n\treturn [...new Set([].concat(...arguments_))];\n};\n","'use strict';\nconst {promisify} = require('util');\nconst fs = require('fs');\n\nasync function isType(fsStatType, statsMethodName, filePath) {\n\tif (typeof filePath !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got ${typeof filePath}`);\n\t}\n\n\ttry {\n\t\tconst stats = await promisify(fs[fsStatType])(filePath);\n\t\treturn stats[statsMethodName]();\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nfunction isTypeSync(fsStatType, statsMethodName, filePath) {\n\tif (typeof filePath !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got ${typeof filePath}`);\n\t}\n\n\ttry {\n\t\treturn fs[fsStatType](filePath)[statsMethodName]();\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nexports.isFile = isType.bind(null, 'stat', 'isFile');\nexports.isDirectory = isType.bind(null, 'stat', 'isDirectory');\nexports.isSymlink = isType.bind(null, 'lstat', 'isSymbolicLink');\nexports.isFileSync = isTypeSync.bind(null, 'statSync', 'isFile');\nexports.isDirectorySync = isTypeSync.bind(null, 'statSync', 'isDirectory');\nexports.isSymlinkSync = isTypeSync.bind(null, 'lstatSync', 'isSymbolicLink');\n","'use strict';\nconst path = require('path');\nconst pathType = require('path-type');\n\nconst getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0];\n\nconst getPath = (filepath, cwd) => {\n\tconst pth = filepath[0] === '!' ? filepath.slice(1) : filepath;\n\treturn path.isAbsolute(pth) ? pth : path.join(cwd, pth);\n};\n\nconst addExtensions = (file, extensions) => {\n\tif (path.extname(file)) {\n\t\treturn `**/${file}`;\n\t}\n\n\treturn `**/${file}.${getExtensions(extensions)}`;\n};\n\nconst getGlob = (directory, options) => {\n\tif (options.files && !Array.isArray(options.files)) {\n\t\tthrow new TypeError(`Expected \\`files\\` to be of type \\`Array\\` but received type \\`${typeof options.files}\\``);\n\t}\n\n\tif (options.extensions && !Array.isArray(options.extensions)) {\n\t\tthrow new TypeError(`Expected \\`extensions\\` to be of type \\`Array\\` but received type \\`${typeof options.extensions}\\``);\n\t}\n\n\tif (options.files && options.extensions) {\n\t\treturn options.files.map(x => path.posix.join(directory, addExtensions(x, options.extensions)));\n\t}\n\n\tif (options.files) {\n\t\treturn options.files.map(x => path.posix.join(directory, `**/${x}`));\n\t}\n\n\tif (options.extensions) {\n\t\treturn [path.posix.join(directory, `**/*.${getExtensions(options.extensions)}`)];\n\t}\n\n\treturn [path.posix.join(directory, '**')];\n};\n\nmodule.exports = async (input, options) => {\n\toptions = {\n\t\tcwd: process.cwd(),\n\t\t...options\n\t};\n\n\tif (typeof options.cwd !== 'string') {\n\t\tthrow new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof options.cwd}\\``);\n\t}\n\n\tconst globs = await Promise.all([].concat(input).map(async x => {\n\t\tconst isDirectory = await pathType.isDirectory(getPath(x, options.cwd));\n\t\treturn isDirectory ? getGlob(x, options) : x;\n\t}));\n\n\treturn [].concat.apply([], globs); // eslint-disable-line prefer-spread\n};\n\nmodule.exports.sync = (input, options) => {\n\toptions = {\n\t\tcwd: process.cwd(),\n\t\t...options\n\t};\n\n\tif (typeof options.cwd !== 'string') {\n\t\tthrow new TypeError(`Expected \\`cwd\\` to be of type \\`string\\` but received type \\`${typeof options.cwd}\\``);\n\t}\n\n\tconst globs = [].concat(input).map(x => pathType.isDirectorySync(getPath(x, options.cwd)) ? getGlob(x, options) : x);\n\n\treturn [].concat.apply([], globs); // eslint-disable-line prefer-spread\n};\n","// A simple implementation of make-array\nfunction makeArray (subject) {\n return Array.isArray(subject)\n ? subject\n : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\nconst KEY_IGNORE = typeof Symbol !== 'undefined'\n ? Symbol.for('node-ignore')\n /* istanbul ignore next */\n : 'node-ignore'\n\nconst define = (object, key, value) =>\n Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n REGEX_REGEXP_RANGE,\n (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n ? match\n // Invalid range (out of order) which is ok for gitignore rules but\n // fatal for JavaScript regular expression, so eliminate it.\n : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n const {length} = slashes\n return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// > (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n// you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n [\n // (a\\ ) -> (a )\n // (a ) -> (a)\n // (a \\ ) -> (a )\n /\\\\?\\s+$/,\n match => match.indexOf('\\\\') === 0\n ? SPACE\n : EMPTY\n ],\n\n // replace (\\ ) with ' '\n [\n /\\\\\\s/g,\n () => SPACE\n ],\n\n // Escape metacharacters\n // which is written down by users but means special for regular expressions.\n\n // > There are 12 characters with special meanings:\n // > - the backslash \\,\n // > - the caret ^,\n // > - the dollar sign $,\n // > - the period or dot .,\n // > - the vertical bar or pipe symbol |,\n // > - the question mark ?,\n // > - the asterisk or star *,\n // > - the plus sign +,\n // > - the opening parenthesis (,\n // > - the closing parenthesis ),\n // > - and the opening square bracket [,\n // > - the opening curly brace {,\n // > These special characters are often called \"metacharacters\".\n [\n /[\\\\$.|*+(){^]/g,\n match => `\\\\${match}`\n ],\n\n [\n // > a question mark (?) matches a single character\n /(?!\\\\)\\?/g,\n () => '[^/]'\n ],\n\n // leading slash\n [\n\n // > A leading slash matches the beginning of the pathname.\n // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n // A leading slash matches the beginning of the pathname\n /^\\//,\n () => '^'\n ],\n\n // replace special metacharacter slash after the leading slash\n [\n /\\//g,\n () => '\\\\/'\n ],\n\n [\n // > A leading \"**\" followed by a slash means match in all directories.\n // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n // > the same as pattern \"foo\".\n // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n // > under directory \"foo\".\n // Notice that the '*'s have been replaced as '\\\\*'\n /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n // '**/foo' <-> 'foo'\n () => '^(?:.*\\\\/)?'\n ],\n\n // starting\n [\n // there will be no leading '/'\n // (which has been replaced by section \"leading slash\")\n // If starts with '**', adding a '^' to the regular expression also works\n /^(?=[^^])/,\n function startingReplacer () {\n // If has a slash `/` at the beginning or middle\n return !/\\/(?!$)/.test(this)\n // > Prior to 2.22.1\n // > If the pattern does not contain a slash /,\n // > Git treats it as a shell glob pattern\n // Actually, if there is only a trailing slash,\n // git also treats it as a shell glob pattern\n\n // After 2.22.1 (compatible but clearer)\n // > If there is a separator at the beginning or middle (or both)\n // > of the pattern, then the pattern is relative to the directory\n // > level of the particular .gitignore file itself.\n // > Otherwise the pattern may also match at any level below\n // > the .gitignore level.\n ? '(?:^|\\\\/)'\n\n // > Otherwise, Git treats the pattern as a shell glob suitable for\n // > consumption by fnmatch(3)\n : '^'\n }\n ],\n\n // two globstars\n [\n // Use lookahead assertions so that we could match more than one `'/**'`\n /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n // Zero, one or several directories\n // should not use '*', or it will be replaced by the next replacer\n\n // Check if it is not the last `'/**'`\n (_, index, str) => index + 6 < str.length\n\n // case: /**/\n // > A slash followed by two consecutive asterisks then a slash matches\n // > zero or more directories.\n // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n // '/**/'\n ? '(?:\\\\/[^\\\\/]+)*'\n\n // case: /**\n // > A trailing `\"/**\"` matches everything inside.\n\n // #21: everything inside but it should not include the current folder\n : '\\\\/.+'\n ],\n\n // intermediate wildcards\n [\n // Never replace escaped '*'\n // ignore rule '\\*' will match the path '*'\n\n // 'abc.*/' -> go\n // 'abc.*' -> skip this rule\n /(^|[^\\\\]+)\\\\\\*(?=.+)/g,\n\n // '*.js' matches '.js'\n // '*.js' doesn't match 'abc'\n (_, p1) => `${p1}[^\\\\/]*`\n ],\n\n [\n // unescape, revert step 3 except for back slash\n // For example, if a user escape a '\\\\*',\n // after step 3, the result will be '\\\\\\\\\\\\*'\n /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n () => ESCAPE\n ],\n\n [\n // '\\\\\\\\' -> '\\\\'\n /\\\\\\\\/g,\n () => ESCAPE\n ],\n\n [\n // > The range notation, e.g. [a-zA-Z],\n // > can be used to match one of the characters in a range.\n\n // `\\` is escaped by step 3\n /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n : close === ']'\n ? endEscape.length % 2 === 0\n // A normal case, and it is a range notation\n // '[bar]'\n // '[bar\\\\\\\\]'\n ? `[${sanitizeRange(range)}${endEscape}]`\n // Invalid range notaton\n // '[bar\\\\]' -> '[bar\\\\\\\\]'\n : '[]'\n : '[]'\n ],\n\n // ending\n [\n // 'js' will not match 'js.'\n // 'ab' will not match 'abc'\n /(?:[^*])$/,\n\n // WTF!\n // https://git-scm.com/docs/gitignore\n // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n // which re-fixes #24, #38\n\n // > If there is a separator at the end of the pattern then the pattern\n // > will only match directories, otherwise the pattern can match both\n // > files and directories.\n\n // 'js*' will not match 'a.js'\n // 'js/' will not match 'a.js'\n // 'js' will match 'a.js' and 'a.js/'\n match => /\\/$/.test(match)\n // foo/ will not match 'foo'\n ? `${match}$`\n // foo matches 'foo' and 'foo/'\n : `${match}(?=$|\\\\/$)`\n ],\n\n // trailing wildcard\n [\n /(\\^|\\\\\\/)?\\\\\\*$/,\n (_, p1) => {\n const prefix = p1\n // '\\^':\n // '/*' does not match EMPTY\n // '/*' does not match everything\n\n // '\\\\\\/':\n // 'abc/*' does not match 'abc/'\n ? `${p1}[^/]+`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n }\n ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, negative, ignorecase) => {\n const r = regexCache[pattern]\n if (r) {\n return r\n }\n\n // const replacers = negative\n // ? NEGATIVE_REPLACERS\n // : POSITIVE_REPLACERS\n\n const source = REPLACERS.reduce(\n (prev, current) => prev.replace(current[0], current[1].bind(pattern)),\n pattern\n )\n\n return regexCache[pattern] = ignorecase\n ? new RegExp(source, 'i')\n : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n && isString(pattern)\n && !REGEX_TEST_BLANK_LINE.test(pattern)\n\n // > A line starting with # serves as a comment.\n && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n constructor (\n origin,\n pattern,\n negative,\n regex\n ) {\n this.origin = origin\n this.pattern = pattern\n this.negative = negative\n this.regex = regex\n }\n}\n\nconst createRule = (pattern, ignorecase) => {\n const origin = pattern\n let negative = false\n\n // > An optional prefix \"!\" which negates the pattern;\n if (pattern.indexOf('!') === 0) {\n negative = true\n pattern = pattern.substr(1)\n }\n\n pattern = pattern\n // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n // > begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n // > Put a backslash (\"\\\") in front of the first hash for patterns that\n // > begin with a hash.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n const regex = makeRegex(pattern, negative, ignorecase)\n\n return new IgnoreRule(\n origin,\n pattern,\n negative,\n regex\n )\n}\n\nconst throwError = (message, Ctor) => {\n throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n if (!isString(path)) {\n return doThrow(\n `path must be a string, but got \\`${originalPath}\\``,\n TypeError\n )\n }\n\n // We don't know if we should ignore EMPTY, so throw\n if (!path) {\n return doThrow(`path must not be empty`, TypeError)\n }\n\n // Check if it is a relative path\n if (checkPath.isNotRelative(path)) {\n const r = '`path.relative()`d'\n return doThrow(\n `path should be a ${r} string, but got \"${originalPath}\"`,\n RangeError\n )\n }\n\n return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n constructor ({\n ignorecase = true\n } = {}) {\n this._rules = []\n this._ignorecase = ignorecase\n define(this, KEY_IGNORE, true)\n this._initCache()\n }\n\n _initCache () {\n this._ignoreCache = Object.create(null)\n this._testCache = Object.create(null)\n }\n\n _addPattern (pattern) {\n // #32\n if (pattern && pattern[KEY_IGNORE]) {\n this._rules = this._rules.concat(pattern._rules)\n this._added = true\n return\n }\n\n if (checkPattern(pattern)) {\n const rule = createRule(pattern, this._ignorecase)\n this._added = true\n this._rules.push(rule)\n }\n }\n\n // @param {Array<string> | string | Ignore} pattern\n add (pattern) {\n this._added = false\n\n makeArray(\n isString(pattern)\n ? splitPattern(pattern)\n : pattern\n ).forEach(this._addPattern, this)\n\n // Some rules have just added to the ignore,\n // making the behavior changed.\n if (this._added) {\n this._initCache()\n }\n\n return this\n }\n\n // legacy\n addPattern (pattern) {\n return this.add(pattern)\n }\n\n // | ignored : unignored\n // negative | 0:0 | 0:1 | 1:0 | 1:1\n // -------- | ------- | ------- | ------- | --------\n // 0 | TEST | TEST | SKIP | X\n // 1 | TESTIF | SKIP | TEST | X\n\n // - SKIP: always skip\n // - TEST: always test\n // - TESTIF: only test if checkUnignored\n // - X: that never happen\n\n // @param {boolean} whether should check if the path is unignored,\n // setting `checkUnignored` to `false` could reduce additional\n // path matching.\n\n // @returns {TestResult} true if a file is ignored\n _testOne (path, checkUnignored) {\n let ignored = false\n let unignored = false\n\n this._rules.forEach(rule => {\n const {negative} = rule\n if (\n unignored === negative && ignored !== unignored\n || negative && !ignored && !unignored && !checkUnignored\n ) {\n return\n }\n\n const matched = rule.regex.test(path)\n\n if (matched) {\n ignored = !negative\n unignored = negative\n }\n })\n\n return {\n ignored,\n unignored\n }\n }\n\n // @returns {TestResult}\n _test (originalPath, cache, checkUnignored, slices) {\n const path = originalPath\n // Supports nullable path\n && checkPath.convert(originalPath)\n\n checkPath(path, originalPath, throwError)\n\n return this._t(path, cache, checkUnignored, slices)\n }\n\n _t (path, cache, checkUnignored, slices) {\n if (path in cache) {\n return cache[path]\n }\n\n if (!slices) {\n // path/to/a.js\n // ['path', 'to', 'a.js']\n slices = path.split(SLASH)\n }\n\n slices.pop()\n\n // If the path has no parent directory, just test it\n if (!slices.length) {\n return cache[path] = this._testOne(path, checkUnignored)\n }\n\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n cache,\n checkUnignored,\n slices\n )\n\n // If the path contains a parent directory, check the parent first\n return cache[path] = parent.ignored\n // > It is not possible to re-include a file if a parent directory of\n // > that file is excluded.\n ? parent\n : this._testOne(path, checkUnignored)\n }\n\n ignores (path) {\n return this._test(path, this._ignoreCache, false).ignored\n }\n\n createFilter () {\n return path => !this.ignores(path)\n }\n\n filter (paths) {\n return makeArray(paths).filter(this.createFilter())\n }\n\n // @returns {TestResult}\n test (path) {\n return this._test(path, this._testCache, true)\n }\n}\n\nconst factory = options => new Ignore(options)\n\nconst returnFalse = () => false\n\nconst isPathValid = path =>\n checkPath(path && checkPath.convert(path), path, returnFalse)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n // Detect `process` so that it can run in browsers.\n typeof process !== 'undefined'\n && (\n process.env && process.env.IGNORE_TEST_WIN32\n || process.platform === 'win32'\n )\n) {\n /* eslint no-control-regex: \"off\" */\n const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n ? str\n : str.replace(/\\\\/g, '/')\n\n checkPath.convert = makePosix\n\n // 'C:\\\\foo' <- 'C:\\\\foo' has been converted to 'C:/'\n // 'd:\\\\foo'\n const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n checkPath.isNotRelative = path =>\n REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n || isNotRelative(path)\n}\n","'use strict';\nmodule.exports = path => {\n\tconst isExtendedLengthPath = /^\\\\\\\\\\?\\\\/.test(path);\n\tconst hasNonAscii = /[^\\u0000-\\u0080]+/.test(path); // eslint-disable-line no-control-regex\n\n\tif (isExtendedLengthPath || hasNonAscii) {\n\t\treturn path;\n\t}\n\n\treturn path.replace(/\\\\/g, '/');\n};\n","'use strict';\nconst {promisify} = require('util');\nconst fs = require('fs');\nconst path = require('path');\nconst fastGlob = require('fast-glob');\nconst gitIgnore = require('ignore');\nconst slash = require('slash');\n\nconst DEFAULT_IGNORE = [\n\t'**/node_modules/**',\n\t'**/flow-typed/**',\n\t'**/coverage/**',\n\t'**/.git'\n];\n\nconst readFileP = promisify(fs.readFile);\n\nconst mapGitIgnorePatternTo = base => ignore => {\n\tif (ignore.startsWith('!')) {\n\t\treturn '!' + path.posix.join(base, ignore.slice(1));\n\t}\n\n\treturn path.posix.join(base, ignore);\n};\n\nconst parseGitIgnore = (content, options) => {\n\tconst base = slash(path.relative(options.cwd, path.dirname(options.fileName)));\n\n\treturn content\n\t\t.split(/\\r?\\n/)\n\t\t.filter(Boolean)\n\t\t.filter(line => !line.startsWith('#'))\n\t\t.map(mapGitIgnorePatternTo(base));\n};\n\nconst reduceIgnore = files => {\n\tconst ignores = gitIgnore();\n\tfor (const file of files) {\n\t\tignores.add(parseGitIgnore(file.content, {\n\t\t\tcwd: file.cwd,\n\t\t\tfileName: file.filePath\n\t\t}));\n\t}\n\n\treturn ignores;\n};\n\nconst ensureAbsolutePathForCwd = (cwd, p) => {\n\tcwd = slash(cwd);\n\tif (path.isAbsolute(p)) {\n\t\tif (slash(p).startsWith(cwd)) {\n\t\t\treturn p;\n\t\t}\n\n\t\tthrow new Error(`Path ${p} is not in cwd ${cwd}`);\n\t}\n\n\treturn path.join(cwd, p);\n};\n\nconst getIsIgnoredPredecate = (ignores, cwd) => {\n\treturn p => ignores.ignores(slash(path.relative(cwd, ensureAbsolutePathForCwd(cwd, p.path || p))));\n};\n\nconst getFile = async (file, cwd) => {\n\tconst filePath = path.join(cwd, file);\n\tconst content = await readFileP(filePath, 'utf8');\n\n\treturn {\n\t\tcwd,\n\t\tfilePath,\n\t\tcontent\n\t};\n};\n\nconst getFileSync = (file, cwd) => {\n\tconst filePath = path.join(cwd, file);\n\tconst content = fs.readFileSync(filePath, 'utf8');\n\n\treturn {\n\t\tcwd,\n\t\tfilePath,\n\t\tcontent\n\t};\n};\n\nconst normalizeOptions = ({\n\tignore = [],\n\tcwd = slash(process.cwd())\n} = {}) => {\n\treturn {ignore, cwd};\n};\n\nmodule.exports = async options => {\n\toptions = normalizeOptions(options);\n\n\tconst paths = await fastGlob('**/.gitignore', {\n\t\tignore: DEFAULT_IGNORE.concat(options.ignore),\n\t\tcwd: options.cwd\n\t});\n\n\tconst files = await Promise.all(paths.map(file => getFile(file, options.cwd)));\n\tconst ignores = reduceIgnore(files);\n\n\treturn getIsIgnoredPredecate(ignores, options.cwd);\n};\n\nmodule.exports.sync = options => {\n\toptions = normalizeOptions(options);\n\n\tconst paths = fastGlob.sync('**/.gitignore', {\n\t\tignore: DEFAULT_IGNORE.concat(options.ignore),\n\t\tcwd: options.cwd\n\t});\n\n\tconst files = paths.map(file => getFileSync(file, options.cwd));\n\tconst ignores = reduceIgnore(files);\n\n\treturn getIsIgnoredPredecate(ignores, options.cwd);\n};\n","'use strict';\nconst {Transform} = require('stream');\n\nclass ObjectTransform extends Transform {\n\tconstructor() {\n\t\tsuper({\n\t\t\tobjectMode: true\n\t\t});\n\t}\n}\n\nclass FilterStream extends ObjectTransform {\n\tconstructor(filter) {\n\t\tsuper();\n\t\tthis._filter = filter;\n\t}\n\n\t_transform(data, encoding, callback) {\n\t\tif (this._filter(data)) {\n\t\t\tthis.push(data);\n\t\t}\n\n\t\tcallback();\n\t}\n}\n\nclass UniqueStream extends ObjectTransform {\n\tconstructor() {\n\t\tsuper();\n\t\tthis._pushed = new Set();\n\t}\n\n\t_transform(data, encoding, callback) {\n\t\tif (!this._pushed.has(data)) {\n\t\t\tthis.push(data);\n\t\t\tthis._pushed.add(data);\n\t\t}\n\n\t\tcallback();\n\t}\n}\n\nmodule.exports = {\n\tFilterStream,\n\tUniqueStream\n};\n","'use strict';\nconst fs = require('fs');\nconst arrayUnion = require('array-union');\nconst merge2 = require('merge2');\nconst fastGlob = require('fast-glob');\nconst dirGlob = require('dir-glob');\nconst gitignore = require('./gitignore');\nconst {FilterStream, UniqueStream} = require('./stream-utils');\n\nconst DEFAULT_FILTER = () => false;\n\nconst isNegative = pattern => pattern[0] === '!';\n\nconst assertPatternsInput = patterns => {\n\tif (!patterns.every(pattern => typeof pattern === 'string')) {\n\t\tthrow new TypeError('Patterns must be a string or an array of strings');\n\t}\n};\n\nconst checkCwdOption = (options = {}) => {\n\tif (!options.cwd) {\n\t\treturn;\n\t}\n\n\tlet stat;\n\ttry {\n\t\tstat = fs.statSync(options.cwd);\n\t} catch {\n\t\treturn;\n\t}\n\n\tif (!stat.isDirectory()) {\n\t\tthrow new Error('The `cwd` option must be a path to a directory');\n\t}\n};\n\nconst getPathString = p => p.stats instanceof fs.Stats ? p.path : p;\n\nconst generateGlobTasks = (patterns, taskOptions) => {\n\tpatterns = arrayUnion([].concat(patterns));\n\tassertPatternsInput(patterns);\n\tcheckCwdOption(taskOptions);\n\n\tconst globTasks = [];\n\n\ttaskOptions = {\n\t\tignore: [],\n\t\texpandDirectories: true,\n\t\t...taskOptions\n\t};\n\n\tfor (const [index, pattern] of patterns.entries()) {\n\t\tif (isNegative(pattern)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst ignore = patterns\n\t\t\t.slice(index)\n\t\t\t.filter(pattern => isNegative(pattern))\n\t\t\t.map(pattern => pattern.slice(1));\n\n\t\tconst options = {\n\t\t\t...taskOptions,\n\t\t\tignore: taskOptions.ignore.concat(ignore)\n\t\t};\n\n\t\tglobTasks.push({pattern, options});\n\t}\n\n\treturn globTasks;\n};\n\nconst globDirs = (task, fn) => {\n\tlet options = {};\n\tif (task.options.cwd) {\n\t\toptions.cwd = task.options.cwd;\n\t}\n\n\tif (Array.isArray(task.options.expandDirectories)) {\n\t\toptions = {\n\t\t\t...options,\n\t\t\tfiles: task.options.expandDirectories\n\t\t};\n\t} else if (typeof task.options.expandDirectories === 'object') {\n\t\toptions = {\n\t\t\t...options,\n\t\t\t...task.options.expandDirectories\n\t\t};\n\t}\n\n\treturn fn(task.pattern, options);\n};\n\nconst getPattern = (task, fn) => task.options.expandDirectories ? globDirs(task, fn) : [task.pattern];\n\nconst getFilterSync = options => {\n\treturn options && options.gitignore ?\n\t\tgitignore.sync({cwd: options.cwd, ignore: options.ignore}) :\n\t\tDEFAULT_FILTER;\n};\n\nconst globToTask = task => glob => {\n\tconst {options} = task;\n\tif (options.ignore && Array.isArray(options.ignore) && options.expandDirectories) {\n\t\toptions.ignore = dirGlob.sync(options.ignore);\n\t}\n\n\treturn {\n\t\tpattern: glob,\n\t\toptions\n\t};\n};\n\nmodule.exports = async (patterns, options) => {\n\tconst globTasks = generateGlobTasks(patterns, options);\n\n\tconst getFilter = async () => {\n\t\treturn options && options.gitignore ?\n\t\t\tgitignore({cwd: options.cwd, ignore: options.ignore}) :\n\t\t\tDEFAULT_FILTER;\n\t};\n\n\tconst getTasks = async () => {\n\t\tconst tasks = await Promise.all(globTasks.map(async task => {\n\t\t\tconst globs = await getPattern(task, dirGlob);\n\t\t\treturn Promise.all(globs.map(globToTask(task)));\n\t\t}));\n\n\t\treturn arrayUnion(...tasks);\n\t};\n\n\tconst [filter, tasks] = await Promise.all([getFilter(), getTasks()]);\n\tconst paths = await Promise.all(tasks.map(task => fastGlob(task.pattern, task.options)));\n\n\treturn arrayUnion(...paths).filter(path_ => !filter(getPathString(path_)));\n};\n\nmodule.exports.sync = (patterns, options) => {\n\tconst globTasks = generateGlobTasks(patterns, options);\n\n\tconst tasks = [];\n\tfor (const task of globTasks) {\n\t\tconst newTask = getPattern(task, dirGlob.sync).map(globToTask(task));\n\t\ttasks.push(...newTask);\n\t}\n\n\tconst filter = getFilterSync(options);\n\n\tlet matches = [];\n\tfor (const task of tasks) {\n\t\tmatches = arrayUnion(matches, fastGlob.sync(task.pattern, task.options));\n\t}\n\n\treturn matches.filter(path_ => !filter(path_));\n};\n\nmodule.exports.stream = (patterns, options) => {\n\tconst globTasks = generateGlobTasks(patterns, options);\n\n\tconst tasks = [];\n\tfor (const task of globTasks) {\n\t\tconst newTask = getPattern(task, dirGlob.sync).map(globToTask(task));\n\t\ttasks.push(...newTask);\n\t}\n\n\tconst filter = getFilterSync(options);\n\tconst filterStream = new FilterStream(p => !filter(p));\n\tconst uniqueStream = new UniqueStream();\n\n\treturn merge2(tasks.map(task => fastGlob.stream(task.pattern, task.options)))\n\t\t.pipe(filterStream)\n\t\t.pipe(uniqueStream);\n};\n\nmodule.exports.generateGlobTasks = generateGlobTasks;\n\nmodule.exports.hasMagic = (patterns, options) => []\n\t.concat(patterns)\n\t.some(pattern => fastGlob.isDynamicPattern(pattern, options));\n\nmodule.exports.gitignore = gitignore;\n","import path from 'path';\nimport { walk } from 'estree-walker';\nimport MagicString from 'magic-string';\nimport globby from 'globby';\nimport { createFilter } from '@rollup/pluginutils';\n\nclass VariableDynamicImportError extends Error {}\n\n/* eslint-disable-next-line no-template-curly-in-string */\nconst example = 'For example: import(`./foo/${bar}.js`).';\n\nfunction sanitizeString(str) {\n if (str.includes('*')) {\n throw new VariableDynamicImportError('A dynamic import cannot contain * characters.');\n }\n return str;\n}\n\nfunction templateLiteralToGlob(node) {\n let glob = '';\n\n for (let i = 0; i < node.quasis.length; i += 1) {\n glob += sanitizeString(node.quasis[i].value.raw);\n if (node.expressions[i]) {\n glob += expressionToGlob(node.expressions[i]);\n }\n }\n\n return glob;\n}\n\nfunction callExpressionToGlob(node) {\n const { callee } = node;\n if (\n callee.type === 'MemberExpression' &&\n callee.property.type === 'Identifier' &&\n callee.property.name === 'concat'\n ) {\n return `${expressionToGlob(callee.object)}${node.arguments.map(expressionToGlob).join('')}`;\n }\n return '*';\n}\n\nfunction binaryExpressionToGlob(node) {\n if (node.operator !== '+') {\n throw new VariableDynamicImportError(`${node.operator} operator is not supported.`);\n }\n\n return `${expressionToGlob(node.left)}${expressionToGlob(node.right)}`;\n}\n\nfunction expressionToGlob(node) {\n switch (node.type) {\n case 'TemplateLiteral':\n return templateLiteralToGlob(node);\n case 'CallExpression':\n return callExpressionToGlob(node);\n case 'BinaryExpression':\n return binaryExpressionToGlob(node);\n case 'Literal': {\n return sanitizeString(node.value);\n }\n default:\n return '*';\n }\n}\n\nfunction dynamicImportToGlob(node, sourceString) {\n let glob = expressionToGlob(node);\n if (!glob.includes('*')) {\n return null;\n }\n glob = glob.replace(/\\*\\*/g, '*');\n\n if (glob.startsWith('*')) {\n throw new VariableDynamicImportError(\n `invalid import \"${sourceString}\". It cannot be statically analyzed. Variable dynamic imports must start with ./ and be limited to a specific directory. ${example}`\n );\n }\n\n if (glob.startsWith('/')) {\n throw new VariableDynamicImportError(\n `invalid import \"${sourceString}\". Variable absolute imports are not supported, imports must start with ./ in the static part of the import. ${example}`\n );\n }\n\n if (!glob.startsWith('./') && !glob.startsWith('../')) {\n throw new VariableDynamicImportError(\n `invalid import \"${sourceString}\". Variable bare imports are not supported, imports must start with ./ in the static part of the import. ${example}`\n );\n }\n\n // Disallow ./*.ext\n const ownDirectoryStarExtension = /^\\.\\/\\*\\.[\\w]+$/;\n if (ownDirectoryStarExtension.test(glob)) {\n throw new VariableDynamicImportError(\n `${\n `invalid import \"${sourceString}\". Variable imports cannot import their own directory, ` +\n 'place imports in a separate directory or make the import filename more specific. '\n }${example}`\n );\n }\n\n if (path.extname(glob) === '') {\n throw new VariableDynamicImportError(\n `invalid import \"${sourceString}\". A file extension must be included in the static part of the import. ${example}`\n );\n }\n\n return glob;\n}\n\nfunction dynamicImportVariables({ include, exclude, warnOnError } = {}) {\n const filter = createFilter(include, exclude);\n\n return {\n name: 'rollup-plugin-dynamic-import-variables',\n\n transform(code, id) {\n if (!filter(id)) {\n return null;\n }\n\n const parsed = this.parse(code);\n\n let dynamicImportIndex = -1;\n let ms;\n\n walk(parsed, {\n enter: (node) => {\n if (node.type !== 'ImportExpression') {\n return;\n }\n dynamicImportIndex += 1;\n\n try {\n // see if this is a variable dynamic import, and generate a glob expression\n const glob = dynamicImportToGlob(node.source, code.substring(node.start, node.end));\n\n if (!glob) {\n // this was not a variable dynamic import\n return;\n }\n\n // execute the glob\n const result = globby.sync(glob, { cwd: path.dirname(id) });\n const paths = result.map((r) =>\n r.startsWith('./') || r.startsWith('../') ? r : `./${r}`\n );\n\n // create magic string if it wasn't created already\n ms = ms || new MagicString(code);\n // unpack variable dynamic import into a function with import statements per file, rollup\n // will turn these into chunks automatically\n ms.prepend(\n `function __variableDynamicImportRuntime${dynamicImportIndex}__(path) {\n switch (path) {\n${paths.map((p) => ` case '${p}': return import('${p}');`).join('\\n')}\n${` default: return new Promise(function(resolve, reject) {\n (typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(\n reject.bind(null, new Error(\"Unknown variable dynamic import: \" + path))\n );\n })\\n`} }\n }\\n\\n`\n );\n // call the runtime function instead of doing a dynamic import, the import specifier will\n // be evaluated at runtime and the correct import will be returned by the injected function\n ms.overwrite(\n node.start,\n node.start + 6,\n `__variableDynamicImportRuntime${dynamicImportIndex}__`\n );\n } catch (error) {\n if (error instanceof VariableDynamicImportError) {\n // TODO: line number\n if (warnOnError) {\n this.warn(error);\n } else {\n this.error(error);\n }\n } else {\n this.error(error);\n }\n }\n }\n });\n\n if (ms && dynamicImportIndex !== -1) {\n return {\n code: ms.toString(),\n map: ms.generateMap({\n file: id,\n includeContent: true,\n hires: true\n })\n };\n }\n return null;\n }\n };\n}\n\nexport default dynamicImportVariables;\nexport { VariableDynamicImportError, dynamicImportToGlob };\n","// This is based on @rollup/plugin-data-uri\n// MIT Licensed https://github.com/rollup/plugins/blob/master/LICENSE\n// ref https://github.com/vitejs/vite/issues/1428#issuecomment-757033808\nimport { Plugin } from '../plugin'\nimport { URL } from 'url'\n\nconst dataUriRE = /^([^/]+\\/[^;,]+)(;base64)?,([\\s\\S]*)$/\n\nconst dataUriPrefix = `/@data-uri/`\n\n/**\n * Build only, since importing from a data URI works natively.\n */\nexport function dataURIPlugin(): Plugin {\n let resolved: {\n [key: string]: string\n }\n\n return {\n name: 'vite:data-uri',\n\n buildStart() {\n resolved = {}\n },\n\n resolveId(id) {\n if (!dataUriRE.test(id)) {\n return null\n }\n\n const uri = new URL(id)\n if (uri.protocol !== 'data:') {\n return null\n }\n\n const match = uri.pathname.match(dataUriRE)\n if (!match) {\n return null\n }\n\n const [, mime, format, data] = match\n if (mime !== 'text/javascript') {\n throw new Error(\n `data URI with non-JavaScript mime type is not supported.`\n )\n }\n\n // decode data\n const base64 = format && /base64/i.test(format.substring(1))\n const content = base64\n ? Buffer.from(data, 'base64').toString('utf-8')\n : data\n resolved[id] = content\n return dataUriPrefix + id\n },\n\n load(id) {\n if (id.startsWith(dataUriPrefix)) {\n id = id.slice(dataUriPrefix.length)\n return resolved[id] || null\n }\n }\n }\n}\n","/**\n * @param {object} exports\n * @param {Set<string>} keys\n */\nfunction loop(exports, keys) {\n\tif (typeof exports === 'string') {\n\t\treturn exports;\n\t}\n\n\tif (exports) {\n\t\tlet idx, tmp;\n\t\tif (Array.isArray(exports)) {\n\t\t\tfor (idx=0; idx < exports.length; idx++) {\n\t\t\t\tif (tmp = loop(exports[idx], keys)) return tmp;\n\t\t\t}\n\t\t} else {\n\t\t\tfor (idx in exports) {\n\t\t\t\tif (keys.has(idx)) {\n\t\t\t\t\treturn loop(exports[idx], keys);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {string} name The package name\n * @param {string} entry The target entry, eg \".\"\n * @param {number} [condition] Unmatched condition?\n */\nfunction bail(name, entry, condition) {\n\tthrow new Error(\n\t\tcondition\n\t\t? `No known conditions for \"${entry}\" entry in \"${name}\" package`\n\t\t: `Missing \"${entry}\" export in \"${name}\" package`\n\t);\n}\n\n/**\n * @param {string} name the package name\n * @param {string} entry the target path/import\n */\nfunction toName(name, entry) {\n\treturn entry === name ? '.'\n\t\t: entry[0] === '.' ? entry\n\t\t: entry.replace(new RegExp('^' + name + '\\/'), './');\n}\n\n/**\n * @param {object} pkg package.json contents\n * @param {string} [entry] entry name or import path\n * @param {object} [options]\n * @param {boolean} [options.browser]\n * @param {boolean} [options.require]\n * @param {string[]} [options.conditions]\n */\nexport function resolve(pkg, entry='.', options={}) {\n\tlet { name, exports } = pkg;\n\n\tif (exports) {\n\t\tlet { browser, require, conditions=[] } = options;\n\n\t\tlet target = toName(name, entry);\n\t\tif (target[0] !== '.') target = './' + target;\n\n\t\tif (typeof exports === 'string') {\n\t\t\treturn target === '.' ? exports : bail(name, target);\n\t\t}\n\n\t\tlet allows = new Set(['default', ...conditions]);\n\t\tallows.add(require ? 'require' : 'import');\n\t\tallows.add(browser ? 'browser' : 'node');\n\n\t\tlet key, tmp, isSingle=false;\n\n\t\tfor (key in exports) {\n\t\t\tisSingle = key[0] !== '.';\n\t\t\tbreak;\n\t\t}\n\n\t\tif (isSingle) {\n\t\t\treturn target === '.'\n\t\t\t\t? loop(exports, allows) || bail(name, target, 1)\n\t\t\t\t: bail(name, target);\n\t\t}\n\n\t\tif (tmp = exports[target]) {\n\t\t\treturn loop(tmp, allows) || bail(name, target, 1);\n\t\t}\n\n\t\tfor (key in exports) {\n\t\t\ttmp = key[key.length - 1];\n\t\t\tif (tmp === '/' && target.startsWith(key)) {\n\t\t\t\treturn (tmp = loop(exports[key], allows))\n\t\t\t\t\t? (tmp + target.substring(key.length))\n\t\t\t\t\t: bail(name, target, 1);\n\t\t\t}\n\t\t\tif (tmp === '*' && target.startsWith(key.slice(0, -1))) {\n\t\t\t\t// do not trigger if no *content* to inject\n\t\t\t\tif (target.substring(key.length - 1).length > 0) {\n\t\t\t\t\treturn (tmp = loop(exports[key], allows))\n\t\t\t\t\t\t? tmp.replace('*', target.substring(key.length - 1))\n\t\t\t\t\t\t: bail(name, target, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn bail(name, target);\n\t}\n}\n\n/**\n * @param {object} pkg\n * @param {object} [options]\n * @param {string|boolean} [options.browser]\n * @param {string[]} [options.fields]\n */\nexport function legacy(pkg, options={}) {\n\tlet i=0, value,\n\t\tbrowser = options.browser,\n\t\tfields = options.fields || ['module', 'main'];\n\n\tif (browser && !fields.includes('browser')) {\n\t\tfields.unshift('browser');\n\t}\n\n\tfor (; i < fields.length; i++) {\n\t\tif (value = pkg[fields[i]]) {\n\t\t\tif (typeof value == 'string') {\n\t\t\t\t//\n\t\t\t} else if (typeof value == 'object' && fields[i] == 'browser') {\n\t\t\t\tif (typeof browser == 'string') {\n\t\t\t\t\tvalue = value[browser=toName(pkg.name, browser)];\n\t\t\t\t\tif (value == null) return browser;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\treturn typeof value == 'string'\n\t\t\t\t? ('./' + value.replace(/^\\.?\\//, ''))\n\t\t\t\t: value;\n\t\t}\n\t}\n}\n","import fs from 'fs'\nimport path from 'path'\nimport { Plugin } from '../plugin'\nimport chalk from 'chalk'\nimport {\n FS_PREFIX,\n SPECIAL_QUERY_RE,\n DEFAULT_EXTENSIONS,\n DEFAULT_MAIN_FIELDS,\n OPTIMIZABLE_ENTRY_RE\n} from '../constants'\nimport {\n isBuiltin,\n bareImportRE,\n createDebugger,\n deepImportRE,\n injectQuery,\n isExternalUrl,\n isObject,\n normalizePath,\n fsPathFromId,\n ensureVolumeInPath,\n resolveFrom,\n isDataUrl,\n cleanUrl,\n slash,\n nestedResolveFrom\n} from '../utils'\nimport { ViteDevServer, SSROptions } from '..'\nimport { createFilter } from '@rollup/pluginutils'\nimport { PartialResolvedId } from 'rollup'\nimport { resolve as _resolveExports } from 'resolve.exports'\n\n// special id for paths marked with browser: false\n// https://github.com/defunctzombie/package-browser-field-spec#ignore-a-module\nexport const browserExternalId = '__vite-browser-external'\n\nconst isDebug = process.env.DEBUG\nconst debug = createDebugger('vite:resolve-details', {\n onlyWhenFocused: true\n})\n\nexport interface ResolveOptions {\n mainFields?: string[]\n conditions?: string[]\n extensions?: string[]\n dedupe?: string[]\n preserveSymlinks?: boolean\n}\n\nexport interface InternalResolveOptions extends ResolveOptions {\n root: string\n isBuild: boolean\n isProduction: boolean\n ssrConfig?: SSROptions\n /**\n * src code mode also attempts the following:\n * - resolving /xxx as URLs\n * - resolving bare imports from optimized deps\n */\n asSrc?: boolean\n tryIndex?: boolean\n tryPrefix?: string\n skipPackageJson?: boolean\n preferRelative?: boolean\n isRequire?: boolean\n}\n\nexport function resolvePlugin(baseOptions: InternalResolveOptions): Plugin {\n const {\n root,\n isProduction,\n asSrc,\n ssrConfig,\n preferRelative = false\n } = baseOptions\n const requireOptions: InternalResolveOptions = {\n ...baseOptions,\n isRequire: true\n }\n let server: ViteDevServer | undefined\n\n const { target: ssrTarget, noExternal: ssrNoExternal } = ssrConfig ?? {}\n\n return {\n name: 'vite:resolve',\n\n configureServer(_server) {\n server = _server\n },\n\n resolveId(id, importer, resolveOpts, ssr) {\n if (id.startsWith(browserExternalId)) {\n return id\n }\n\n // fast path for commonjs proxy modules\n if (/\\?commonjs/.test(id) || id === 'commonjsHelpers.js') {\n return\n }\n\n const targetWeb = !ssr || ssrTarget === 'webworker'\n\n // this is passed by @rollup/plugin-commonjs\n const isRequire =\n resolveOpts &&\n resolveOpts.custom &&\n resolveOpts.custom['node-resolve'] &&\n resolveOpts.custom['node-resolve'].isRequire\n\n const options = isRequire ? requireOptions : baseOptions\n\n const preserveSymlinks = !!server?.config.resolve.preserveSymlinks\n\n let res: string | PartialResolvedId | undefined\n\n // explicit fs paths that starts with /@fs/*\n if (asSrc && id.startsWith(FS_PREFIX)) {\n const fsPath = fsPathFromId(id)\n res = tryFsResolve(fsPath, options, preserveSymlinks)\n isDebug && debug(`[@fs] ${chalk.cyan(id)} -> ${chalk.dim(res)}`)\n // always return here even if res doesn't exist since /@fs/ is explicit\n // if the file doesn't exist it should be a 404\n return res || fsPath\n }\n\n // URL\n // /foo -> /fs-root/foo\n if (asSrc && id.startsWith('/')) {\n const fsPath = path.resolve(root, id.slice(1))\n if ((res = tryFsResolve(fsPath, options, preserveSymlinks))) {\n isDebug && debug(`[url] ${chalk.cyan(id)} -> ${chalk.dim(res)}`)\n return res\n }\n }\n\n // relative\n if (id.startsWith('.') || (preferRelative && /^\\w/.test(id))) {\n const basedir = importer ? path.dirname(importer) : process.cwd()\n const fsPath = path.resolve(basedir, id)\n // handle browser field mapping for relative imports\n\n const normalizedFsPath = normalizePath(fsPath)\n const pathFromBasedir = normalizedFsPath.slice(basedir.length)\n if (pathFromBasedir.startsWith('/node_modules/')) {\n // normalize direct imports from node_modules to bare imports, so the\n // hashing logic is shared and we avoid duplicated modules #2503\n const bareImport = pathFromBasedir.slice('/node_modules/'.length)\n if (\n (res = tryNodeResolve(\n bareImport,\n importer,\n options,\n targetWeb,\n server,\n ssr\n )) &&\n res.id.startsWith(normalizedFsPath)\n ) {\n return res\n }\n }\n\n if (\n targetWeb &&\n (res = tryResolveBrowserMapping(\n fsPath,\n importer,\n options,\n true,\n preserveSymlinks\n ))\n ) {\n return res\n }\n\n if ((res = tryFsResolve(fsPath, options, preserveSymlinks))) {\n isDebug && debug(`[relative] ${chalk.cyan(id)} -> ${chalk.dim(res)}`)\n const pkg = importer != null && idToPkgMap.get(importer)\n if (pkg) {\n idToPkgMap.set(res, pkg)\n return {\n id: res,\n moduleSideEffects: pkg.hasSideEffects(res)\n }\n }\n return res\n }\n }\n\n // absolute fs paths\n if (\n path.isAbsolute(id) &&\n (res = tryFsResolve(id, options, preserveSymlinks))\n ) {\n isDebug && debug(`[fs] ${chalk.cyan(id)} -> ${chalk.dim(res)}`)\n return res\n }\n\n // external\n if (isExternalUrl(id)) {\n return {\n id,\n external: true\n }\n }\n\n // data uri: pass through (this only happens during build and will be\n // handled by dedicated plugin)\n if (isDataUrl(id)) {\n return null\n }\n\n // bare package imports, perform node resolve\n if (bareImportRE.test(id)) {\n if (\n asSrc &&\n server &&\n !ssr &&\n (res = tryOptimizedResolve(id, server, importer))\n ) {\n return res\n }\n\n if (\n targetWeb &&\n (res = tryResolveBrowserMapping(\n id,\n importer,\n options,\n false,\n preserveSymlinks\n ))\n ) {\n return res\n }\n\n if (\n (res = tryNodeResolve(id, importer, options, targetWeb, server, ssr))\n ) {\n return res\n }\n\n // node built-ins.\n // externalize if building for SSR, otherwise redirect to empty module\n if (isBuiltin(id)) {\n if (ssr) {\n if (ssrNoExternal === true) {\n let message = `Cannot bundle Node.js built-in \"${id}\"`\n if (importer) {\n message += ` imported from \"${path.relative(\n process.cwd(),\n importer\n )}\"`\n }\n message += `. Consider disabling ssr.noExternal or remove the built-in dependency.`\n this.error(message)\n }\n\n return {\n id,\n external: true\n }\n } else {\n if (!asSrc) {\n debug(\n `externalized node built-in \"${id}\" to empty module. ` +\n `(imported by: ${chalk.white.dim(importer)})`\n )\n }\n return isProduction\n ? browserExternalId\n : `${browserExternalId}:${id}`\n }\n }\n }\n\n isDebug && debug(`[fallthrough] ${chalk.dim(id)}`)\n },\n\n load(id) {\n if (id.startsWith(browserExternalId)) {\n return isProduction\n ? `export default {}`\n : `export default new Proxy({}, {\n get() {\n throw new Error('Module \"${id.slice(\n browserExternalId.length + 1\n )}\" has been externalized for browser compatibility and cannot be accessed in client code.')\n }\n})`\n }\n }\n }\n}\n\nfunction tryFsResolve(\n fsPath: string,\n options: InternalResolveOptions,\n preserveSymlinks: boolean,\n tryIndex = true,\n targetWeb = true\n): string | undefined {\n let file = fsPath\n let postfix = ''\n\n let postfixIndex = fsPath.indexOf('?')\n if (postfixIndex < 0) {\n postfixIndex = fsPath.indexOf('#')\n }\n if (postfixIndex > 0) {\n file = fsPath.slice(0, postfixIndex)\n postfix = fsPath.slice(postfixIndex)\n }\n\n let res: string | undefined\n if (\n (res = tryResolveFile(\n file,\n postfix,\n options,\n false,\n targetWeb,\n preserveSymlinks,\n options.tryPrefix,\n options.skipPackageJson\n ))\n ) {\n return res\n }\n\n for (const ext of options.extensions || DEFAULT_EXTENSIONS) {\n if (\n (res = tryResolveFile(\n file + ext,\n postfix,\n options,\n false,\n targetWeb,\n preserveSymlinks,\n options.tryPrefix,\n options.skipPackageJson\n ))\n ) {\n return res\n }\n }\n\n if (\n (res = tryResolveFile(\n file,\n postfix,\n options,\n tryIndex,\n targetWeb,\n preserveSymlinks,\n options.tryPrefix,\n options.skipPackageJson\n ))\n ) {\n return res\n }\n}\n\nfunction tryResolveFile(\n file: string,\n postfix: string,\n options: InternalResolveOptions,\n tryIndex: boolean,\n targetWeb: boolean,\n preserveSymlinks: boolean,\n tryPrefix?: string,\n skipPackageJson?: boolean\n): string | undefined {\n let isReadable = false\n try {\n // #2051 if we don't have read permission on a directory, existsSync() still\n // works and will result in massively slow subsequent checks (which are\n // unnecessary in the first place)\n fs.accessSync(file, fs.constants.R_OK)\n isReadable = true\n } catch (e) {}\n if (isReadable) {\n if (!fs.statSync(file).isDirectory()) {\n return getRealPath(file, preserveSymlinks) + postfix\n } else if (tryIndex) {\n if (!skipPackageJson) {\n const pkgPath = file + '/package.json'\n if (fs.existsSync(pkgPath)) {\n // path points to a node package\n const pkg = loadPackageData(pkgPath)\n const resolved = resolvePackageEntry(\n file,\n pkg,\n options,\n targetWeb,\n preserveSymlinks\n )\n return resolved\n }\n }\n const index = tryFsResolve(file + '/index', options, preserveSymlinks)\n if (index) return index + postfix\n }\n }\n if (tryPrefix) {\n const prefixed = `${path.dirname(file)}/${tryPrefix}${path.basename(file)}`\n return tryResolveFile(\n prefixed,\n postfix,\n options,\n tryIndex,\n targetWeb,\n preserveSymlinks\n )\n }\n}\n\nexport const idToPkgMap = new Map<string, PackageData>()\n\nexport function tryNodeResolve(\n id: string,\n importer: string | undefined,\n options: InternalResolveOptions,\n targetWeb: boolean,\n server?: ViteDevServer,\n ssr?: boolean\n): PartialResolvedId | undefined {\n const { root, dedupe, isBuild } = options\n\n // split id by last '>' for nested selected packages, for example:\n // 'foo > bar > baz' => 'foo > bar' & 'baz'\n // 'foo' => '' & 'foo'\n const lastArrowIndex = id.lastIndexOf('>')\n const nestedRoot = id.substring(0, lastArrowIndex).trim()\n const nestedPath = id.substring(lastArrowIndex + 1).trim()\n\n // check for deep import, e.g. \"my-lib/foo\"\n const deepMatch = nestedPath.match(deepImportRE)\n\n const pkgId = deepMatch ? deepMatch[1] || deepMatch[2] : nestedPath\n\n let basedir: string\n if (dedupe && dedupe.includes(pkgId)) {\n basedir = root\n } else if (\n importer &&\n path.isAbsolute(importer) &&\n fs.existsSync(cleanUrl(importer))\n ) {\n basedir = path.dirname(importer)\n } else {\n basedir = root\n }\n\n const preserveSymlinks = !!server?.config.resolve.preserveSymlinks\n\n // nested node module, step-by-step resolve to the basedir of the nestedPath\n if (nestedRoot) {\n basedir = nestedResolveFrom(nestedRoot, basedir, preserveSymlinks)\n }\n\n const pkg = resolvePackageData(pkgId, basedir, preserveSymlinks)\n\n if (!pkg) {\n return\n }\n\n let resolved = deepMatch\n ? resolveDeepImport(\n '.' + id.slice(pkgId.length),\n pkg,\n options,\n targetWeb,\n preserveSymlinks\n )\n : resolvePackageEntry(id, pkg, options, targetWeb, preserveSymlinks)\n if (!resolved) {\n return\n }\n\n // link id to pkg for browser field mapping check\n idToPkgMap.set(resolved, pkg)\n if (isBuild) {\n // Resolve package side effects for build so that rollup can better\n // perform tree-shaking\n return {\n id: resolved,\n moduleSideEffects: pkg.hasSideEffects(resolved)\n }\n } else {\n if (\n !resolved.includes('node_modules') || // linked\n !server || // build\n server._isRunningOptimizer || // optimizing\n !server._optimizeDepsMetadata\n ) {\n return { id: resolved }\n }\n // if we reach here, it's a valid dep import that hasn't been optimized.\n const isJsType = OPTIMIZABLE_ENTRY_RE.test(resolved)\n const exclude = server.config.optimizeDeps?.exclude\n if (\n !isJsType ||\n importer?.includes('node_modules') ||\n exclude?.includes(pkgId) ||\n exclude?.includes(id) ||\n SPECIAL_QUERY_RE.test(resolved) ||\n ssr\n ) {\n // excluded from optimization\n // Inject a version query to npm deps so that the browser\n // can cache it without re-validation, but only do so for known js types.\n // otherwise we may introduce duplicated modules for externalized files\n // from pre-bundled deps.\n const versionHash = server._optimizeDepsMetadata?.browserHash\n if (versionHash && isJsType) {\n resolved = injectQuery(resolved, `v=${versionHash}`)\n }\n } else {\n // this is a missing import.\n // queue optimize-deps re-run.\n server._registerMissingImport?.(id, resolved, ssr)\n }\n return { id: resolved }\n }\n}\n\nexport function tryOptimizedResolve(\n id: string,\n server: ViteDevServer,\n importer?: string\n): string | undefined {\n const cacheDir = server.config.cacheDir\n const depData = server._optimizeDepsMetadata\n\n if (!cacheDir || !depData) return\n\n const getOptimizedUrl = (optimizedData: typeof depData.optimized[string]) => {\n return (\n optimizedData.file +\n `?v=${depData.browserHash}${\n optimizedData.needsInterop ? `&es-interop` : ``\n }`\n )\n }\n\n // check if id has been optimized\n const isOptimized = depData.optimized[id]\n if (isOptimized) {\n return getOptimizedUrl(isOptimized)\n }\n\n if (!importer) return\n\n // further check if id is imported by nested dependency\n let resolvedSrc: string | undefined\n\n for (const [pkgPath, optimizedData] of Object.entries(depData.optimized)) {\n // check for scenarios, e.g.\n // pkgPath => \"my-lib > foo\"\n // id => \"foo\"\n // this narrows the need to do a full resolve\n if (!pkgPath.endsWith(id)) continue\n\n // lazily initialize resolvedSrc\n if (resolvedSrc == null) {\n try {\n // this may throw errors if unable to resolve, e.g. aliased id\n resolvedSrc = normalizePath(resolveFrom(id, path.dirname(importer)))\n } catch {\n // this is best-effort only so swallow errors\n break\n }\n }\n\n // match by src to correctly identify if id belongs to nested dependency\n if (optimizedData.src === resolvedSrc) {\n return getOptimizedUrl(optimizedData)\n }\n }\n}\n\nexport interface PackageData {\n dir: string\n hasSideEffects: (id: string) => boolean\n webResolvedImports: Record<string, string | undefined>\n nodeResolvedImports: Record<string, string | undefined>\n setResolvedCache: (key: string, entry: string, targetWeb: boolean) => void\n getResolvedCache: (key: string, targetWeb: boolean) => string | undefined\n data: {\n [field: string]: any\n version: string\n main: string\n module: string\n browser: string | Record<string, string | false>\n exports: string | Record<string, any> | string[]\n dependencies: Record<string, string>\n }\n}\n\nconst packageCache = new Map<string, PackageData>()\n\nexport function resolvePackageData(\n id: string,\n basedir: string,\n preserveSymlinks = false\n): PackageData | undefined {\n const cacheKey = id + basedir\n if (packageCache.has(cacheKey)) {\n return packageCache.get(cacheKey)\n }\n try {\n const pkgPath = resolveFrom(`${id}/package.json`, basedir, preserveSymlinks)\n return loadPackageData(pkgPath, cacheKey)\n } catch (e) {\n isDebug && debug(`${chalk.red(`[failed loading package.json]`)} ${id}`)\n }\n}\n\nfunction loadPackageData(pkgPath: string, cacheKey = pkgPath) {\n const data = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))\n const pkgDir = path.dirname(pkgPath)\n const { sideEffects } = data\n let hasSideEffects: (id: string) => boolean\n if (typeof sideEffects === 'boolean') {\n hasSideEffects = () => sideEffects\n } else if (Array.isArray(sideEffects)) {\n hasSideEffects = createFilter(sideEffects, null, { resolve: pkgDir })\n } else {\n hasSideEffects = () => true\n }\n\n const pkg: PackageData = {\n dir: pkgDir,\n data,\n hasSideEffects,\n webResolvedImports: {},\n nodeResolvedImports: {},\n setResolvedCache(key: string, entry: string, targetWeb: boolean) {\n if (targetWeb) {\n pkg.webResolvedImports[key] = entry\n } else {\n pkg.nodeResolvedImports[key] = entry\n }\n },\n getResolvedCache(key: string, targetWeb: boolean) {\n if (targetWeb) {\n return pkg.webResolvedImports[key]\n } else {\n return pkg.nodeResolvedImports[key]\n }\n }\n }\n packageCache.set(cacheKey, pkg)\n return pkg\n}\n\nexport function resolvePackageEntry(\n id: string,\n { dir, data, setResolvedCache, getResolvedCache }: PackageData,\n options: InternalResolveOptions,\n targetWeb: boolean,\n preserveSymlinks = false\n): string | undefined {\n const cached = getResolvedCache('.', targetWeb)\n if (cached) {\n return cached\n }\n try {\n let entryPoint: string | undefined | void\n\n // resolve exports field with highest priority\n // using https://github.com/lukeed/resolve.exports\n if (data.exports) {\n entryPoint = resolveExports(data, '.', options, targetWeb)\n }\n\n // if exports resolved to .mjs, still resolve other fields.\n // This is because .mjs files can technically import .cjs files which would\n // make them invalid for pure ESM environments - so if other module/browser\n // fields are present, prioritize those instead.\n if (targetWeb && (!entryPoint || entryPoint.endsWith('.mjs'))) {\n // check browser field\n // https://github.com/defunctzombie/package-browser-field-spec\n const browserEntry =\n typeof data.browser === 'string'\n ? data.browser\n : isObject(data.browser) && data.browser['.']\n if (browserEntry) {\n // check if the package also has a \"module\" field.\n if (typeof data.module === 'string' && data.module !== browserEntry) {\n // if both are present, we may have a problem: some package points both\n // to ESM, with \"module\" targeting Node.js, while some packages points\n // \"module\" to browser ESM and \"browser\" to UMD.\n // the heuristics here is to actually read the browser entry when\n // possible and check for hints of UMD. If it is UMD, prefer \"module\"\n // instead; Otherwise, assume it's ESM and use it.\n const resolvedBrowserEntry = tryFsResolve(\n path.join(dir, browserEntry),\n options,\n preserveSymlinks\n )\n if (resolvedBrowserEntry) {\n const content = fs.readFileSync(resolvedBrowserEntry, 'utf-8')\n if (\n (/typeof exports\\s*==/.test(content) &&\n /typeof module\\s*==/.test(content)) ||\n /module\\.exports\\s*=/.test(content)\n ) {\n // likely UMD or CJS(!!! e.g. firebase 7.x), prefer module\n entryPoint = data.module\n }\n }\n } else {\n entryPoint = browserEntry\n }\n }\n }\n\n if (!entryPoint || entryPoint.endsWith('.mjs')) {\n for (const field of options.mainFields || DEFAULT_MAIN_FIELDS) {\n if (typeof data[field] === 'string') {\n entryPoint = data[field]\n break\n }\n }\n }\n\n entryPoint = entryPoint || data.main || 'index.js'\n\n // make sure we don't get scripts when looking for sass\n if (\n options.mainFields?.[0] === 'sass' &&\n !options.extensions?.includes(path.extname(entryPoint))\n ) {\n entryPoint = ''\n options.skipPackageJson = true\n }\n\n // resolve object browser field in package.json\n const { browser: browserField } = data\n if (targetWeb && isObject(browserField)) {\n entryPoint = mapWithBrowserField(entryPoint, browserField) || entryPoint\n }\n\n entryPoint = path.join(dir, entryPoint)\n const resolvedEntryPoint = tryFsResolve(\n entryPoint,\n options,\n preserveSymlinks\n )\n\n if (resolvedEntryPoint) {\n isDebug &&\n debug(\n `[package entry] ${chalk.cyan(id)} -> ${chalk.dim(\n resolvedEntryPoint\n )}`\n )\n setResolvedCache('.', resolvedEntryPoint, targetWeb)\n return resolvedEntryPoint\n } else {\n packageEntryFailure(id)\n }\n } catch (e) {\n packageEntryFailure(id, e.message)\n }\n}\n\nfunction packageEntryFailure(id: string, details?: string) {\n throw new Error(\n `Failed to resolve entry for package \"${id}\". ` +\n `The package may have incorrect main/module/exports specified in its package.json` +\n (details ? ': ' + details : '.')\n )\n}\n\nfunction resolveExports(\n pkg: PackageData['data'],\n key: string,\n options: InternalResolveOptions,\n targetWeb: boolean\n) {\n const conditions = [options.isProduction ? 'production' : 'development']\n if (!options.isRequire) {\n conditions.push('module')\n }\n if (options.conditions) {\n conditions.push(...options.conditions)\n }\n return _resolveExports(pkg, key, {\n browser: targetWeb,\n require: options.isRequire,\n conditions\n })\n}\n\nfunction resolveDeepImport(\n id: string,\n {\n webResolvedImports,\n setResolvedCache,\n getResolvedCache,\n dir,\n data\n }: PackageData,\n options: InternalResolveOptions,\n targetWeb: boolean,\n preserveSymlinks: boolean\n): string | undefined {\n const cache = getResolvedCache(id, targetWeb)\n if (cache) {\n return cache\n }\n\n let relativeId: string | undefined | void = id\n const { exports: exportsField, browser: browserField } = data\n\n // map relative based on exports data\n if (exportsField) {\n if (isObject(exportsField) && !Array.isArray(exportsField)) {\n relativeId = resolveExports(data, relativeId, options, targetWeb)\n } else {\n // not exposed\n relativeId = undefined\n }\n if (!relativeId) {\n throw new Error(\n `Package subpath '${relativeId}' is not defined by \"exports\" in ` +\n `${path.join(dir, 'package.json')}.`\n )\n }\n } else if (targetWeb && isObject(browserField)) {\n const mapped = mapWithBrowserField(relativeId, browserField)\n if (mapped) {\n relativeId = mapped\n } else if (mapped === false) {\n return (webResolvedImports[id] = browserExternalId)\n }\n }\n\n if (relativeId) {\n const resolved = tryFsResolve(\n path.join(dir, relativeId),\n options,\n preserveSymlinks,\n !exportsField, // try index only if no exports field\n targetWeb\n )\n if (resolved) {\n isDebug &&\n debug(`[node/deep-import] ${chalk.cyan(id)} -> ${chalk.dim(resolved)}`)\n setResolvedCache(id, resolved, targetWeb)\n return resolved\n }\n }\n}\n\nfunction tryResolveBrowserMapping(\n id: string,\n importer: string | undefined,\n options: InternalResolveOptions,\n isFilePath: boolean,\n preserveSymlinks: boolean\n) {\n let res: string | undefined\n const pkg = importer && idToPkgMap.get(importer)\n if (pkg && isObject(pkg.data.browser)) {\n const mapId = isFilePath ? './' + slash(path.relative(pkg.dir, id)) : id\n const browserMappedPath = mapWithBrowserField(mapId, pkg.data.browser)\n if (browserMappedPath) {\n const fsPath = path.join(pkg.dir, browserMappedPath)\n if ((res = tryFsResolve(fsPath, options, preserveSymlinks))) {\n isDebug &&\n debug(`[browser mapped] ${chalk.cyan(id)} -> ${chalk.dim(res)}`)\n idToPkgMap.set(res, pkg)\n return {\n id: res,\n moduleSideEffects: pkg.hasSideEffects(res)\n }\n }\n } else if (browserMappedPath === false) {\n return browserExternalId\n }\n }\n}\n\n/**\n * given a relative path in pkg dir,\n * return a relative path in pkg dir,\n * mapped with the \"map\" object\n *\n * - Returning `undefined` means there is no browser mapping for this id\n * - Returning `false` means this id is explicitly externalized for browser\n */\nfunction mapWithBrowserField(\n relativePathInPkgDir: string,\n map: Record<string, string | false>\n): string | false | undefined {\n const normalizedPath = path.posix.normalize(relativePathInPkgDir)\n\n for (const key in map) {\n const normalizedKey = path.posix.normalize(key)\n if (\n normalizedPath === normalizedKey ||\n equalWithoutSuffix(normalizedPath, normalizedKey, '.js') ||\n equalWithoutSuffix(normalizedPath, normalizedKey, '/index.js')\n ) {\n return map[key]\n }\n }\n}\n\nfunction equalWithoutSuffix(path: string, key: string, suffix: string) {\n return key.endsWith(suffix) && key.slice(0, -suffix.length) === path\n}\n\nfunction getRealPath(resolved: string, preserveSymlinks?: boolean): string {\n resolved = ensureVolumeInPath(resolved)\n if (!preserveSymlinks && browserExternalId !== resolved) {\n resolved = fs.realpathSync(resolved)\n }\n return normalizePath(resolved)\n}\n","import fs from 'fs'\nimport path from 'path'\nimport { tryNodeResolve, InternalResolveOptions } from '../plugins/resolve'\nimport {\n createDebugger,\n isDefined,\n lookupFile,\n normalizePath,\n resolveFrom,\n unique\n} from '../utils'\nimport { ResolvedConfig } from '..'\nimport { createFilter } from '@rollup/pluginutils'\n\nconst debug = createDebugger('vite:ssr-external')\n\n/**\n * Heuristics for determining whether a dependency should be externalized for\n * server-side rendering.\n */\nexport function resolveSSRExternal(\n config: ResolvedConfig,\n knownImports: string[],\n ssrExternals: Set<string> = new Set(),\n seen: Set<string> = new Set()\n): string[] {\n if (config.ssr?.noExternal === true) {\n return []\n }\n\n const { root } = config\n const pkgContent = lookupFile(root, ['package.json'])\n if (!pkgContent) {\n return []\n }\n const pkg = JSON.parse(pkgContent)\n const importedDeps = knownImports.map(getNpmPackageName).filter(isDefined)\n const deps = unique([\n ...importedDeps,\n ...Object.keys(pkg.devDependencies || {}),\n ...Object.keys(pkg.dependencies || {})\n ])\n\n const resolveOptions: InternalResolveOptions = {\n root,\n isProduction: false,\n isBuild: true\n }\n\n const depsToTrace = new Set<string>()\n\n for (const id of deps) {\n if (seen.has(id)) {\n continue\n }\n seen.add(id)\n\n let entry: string | undefined\n let requireEntry: string\n try {\n entry = tryNodeResolve(\n id,\n undefined,\n resolveOptions,\n true,\n undefined,\n true\n )?.id\n // normalizePath required for windows. tryNodeResolve uses normalizePath\n // which returns with '/', require.resolve returns with '\\\\'\n requireEntry = normalizePath(require.resolve(id, { paths: [root] }))\n } catch (e) {\n // resolve failed, assume include\n debug(`Failed to resolve entries for package \"${id}\"\\n`, e)\n continue\n }\n if (!entry) {\n // no esm entry but has require entry (is this even possible?)\n ssrExternals.add(id)\n continue\n }\n if (!entry.includes('node_modules')) {\n // entry is not a node dep, possibly linked - don't externalize\n // instead, trace its dependencies.\n depsToTrace.add(id)\n continue\n }\n if (entry !== requireEntry) {\n // has separate esm/require entry, assume require entry is cjs\n ssrExternals.add(id)\n } else {\n // node resolve and esm resolve resolves to the same file.\n if (!/\\.m?js$/.test(entry)) {\n // entry is not js, cannot externalize\n continue\n }\n if (pkg.type === \"module\" || entry.endsWith('.mjs')) {\n ssrExternals.add(id)\n continue\n }\n // check if the entry is cjs\n const content = fs.readFileSync(entry, 'utf-8')\n if (/\\bmodule\\.exports\\b|\\bexports[.\\[]|\\brequire\\s*\\(/.test(content)) {\n ssrExternals.add(id)\n }\n }\n }\n\n for (const id of depsToTrace) {\n const depRoot = path.dirname(\n resolveFrom(`${id}/package.json`, root, !!config.resolve.preserveSymlinks)\n )\n resolveSSRExternal(\n {\n ...config,\n root: depRoot\n },\n knownImports,\n ssrExternals,\n seen\n )\n }\n\n if (config.ssr?.external) {\n config.ssr.external.forEach((id) => ssrExternals.add(id))\n }\n let externals = [...ssrExternals]\n if (config.ssr?.noExternal) {\n const filter = createFilter(undefined, config.ssr.noExternal, {\n resolve: false\n })\n externals = externals.filter((id) => filter(id))\n }\n return externals.filter((id) => id !== 'vite')\n}\n\nexport function shouldExternalizeForSSR(\n id: string,\n externals: string[]\n): boolean {\n const should = externals.some((e) => {\n if (id === e) {\n return true\n }\n // deep imports, check ext before externalizing - only externalize\n // extension-less imports and explicit .js imports\n if (id.startsWith(e + '/') && (!path.extname(id) || id.endsWith('.js'))) {\n return true\n }\n })\n return should\n}\n\nfunction getNpmPackageName(importPath: string): string | null {\n const parts = importPath.split('/')\n if (parts[0].startsWith('@')) {\n if (!parts[1]) return null\n return `${parts[0]}/${parts[1]}`\n } else {\n return parts[0]\n }\n}\n","import { relative } from 'path'\nimport { normalizePath } from '@rollup/pluginutils'\nimport { ResolvedConfig } from '..'\nimport { Plugin } from '../plugin'\nimport { chunkToEmittedCssFileMap } from '../plugins/css'\nimport { chunkToEmittedAssetsMap } from '../plugins/asset'\n\nexport function ssrManifestPlugin(config: ResolvedConfig): Plugin {\n // module id => preload assets mapping\n const ssrManifest: Record<string, string[]> = {}\n const base = config.base\n\n return {\n name: 'vite:ssr-manifest',\n generateBundle(_options, bundle) {\n for (const file in bundle) {\n const chunk = bundle[file]\n if (chunk.type === 'chunk') {\n // links for certain entry chunks are already generated in static HTML\n // in those cases we only need to record info for non-entry chunks\n const cssFiles = chunk.isEntry\n ? null\n : chunkToEmittedCssFileMap.get(chunk)\n const assetFiles = chunkToEmittedAssetsMap.get(chunk)\n for (const id in chunk.modules) {\n const normalizedId = normalizePath(relative(config.root, id))\n const mappedChunks =\n ssrManifest[normalizedId] || (ssrManifest[normalizedId] = [])\n if (!chunk.isEntry) {\n mappedChunks.push(base + chunk.fileName)\n }\n if (cssFiles) {\n cssFiles.forEach((file) => {\n mappedChunks.push(base + file)\n })\n }\n if (assetFiles) {\n assetFiles.forEach((file) => {\n mappedChunks.push(base + file)\n })\n }\n }\n }\n }\n\n this.emitFile({\n fileName: 'ssr-manifest.json',\n type: 'asset',\n source: JSON.stringify(ssrManifest, null, 2)\n })\n }\n }\n}\n","// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point above 128.\n// Generated by `bin/generate-identifier-regex.js`.\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08c7\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08d3-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by bin/generate-identifier-regex.js\n\n// eslint-disable-next-line comma-spacing\nvar astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938];\n\n// eslint-disable-next-line comma-spacing\nvar astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords$1 = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords$1[name] = new TokenType(name, options)\n}\n\nvar types = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"</>/<=/>=\", 7),\n bitShift: binop(\"<</>>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\n// Checks if an object has a property.\n\nfunction has(obj, propName) {\n return hasOwnProperty.call(obj, propName)\n}\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nfunction wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n lineBreakG.lastIndex = cur;\n var match = lineBreakG.exec(input);\n if (match && match.index < offset) {\n ++line;\n cur = match.index + match[0].length;\n } else {\n return new Position(line, offset - cur)\n }\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), or `\"latest\"` (the\n // latest version the library supports). This influences support\n // for strict mode, the set of reserved words, and support for\n // new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file\n // is allowed and treated as a line comment.\n allowHashBang: false,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\nprototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\npp.strictDirective = function(start) {\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp.isContextual = function(name) {\n return this.type === types.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp.canInsertSemicolon = function() {\n return this.type === types.eof ||\n this.type === types.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp.semicolon = function() {\n if (!this.eat(types.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nfunction DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n}\n\npp.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, \"Parenthesized pattern\"); }\n};\n\npp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$1 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$1.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$1.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '[', '/', astral\n if (context) { return false }\n\n if (nextCh === 123) { return true } // '{'\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$1.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$1.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types._debugger: return this.parseDebuggerStatement(node)\n case types._do: return this.parseDoStatement(node)\n case types._for: return this.parseForStatement(node)\n case types._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types._if: return this.parseIfStatement(node)\n case types._return: return this.parseReturnStatement(node)\n case types._switch: return this.parseSwitchStatement(node)\n case types._throw: return this.parseThrowStatement(node)\n case types._try: return this.parseTryStatement(node)\n case types._const: case types._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types._while: return this.parseWhileStatement(node)\n case types._with: return this.parseWithStatement(node)\n case types.braceL: return this.parseBlock(true, node)\n case types.semi: return this.parseEmptyStatement(node)\n case types._export:\n case types._import:\n if (this.options.ecmaVersion > 10 && starttype === types._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types.name && expr.type === \"Identifier\" && this.eat(types.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$1.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$1.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$1.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$1.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types.parenL);\n if (this.type === types.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types._var || this.type === types._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$1.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$1.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$1.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types.braceR;) {\n if (this.type === types._case || this.type === types._default) {\n var isCase = this.type === types._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$1.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty = [];\n\npp$1.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types.parenL)) {\n clause.param = this.parseBindingAtom();\n var simple = clause.param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types.parenR);\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$1.parseVarStatement = function(node, kind) {\n this.next();\n this.parseVar(node, false, kind);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$1.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$1.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$1.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$1.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$1.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$1.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$1.parseFor = function(node, init) {\n node.init = init;\n this.expect(types.semi);\n node.test = this.type === types.semi ? null : this.parseExpression();\n this.expect(types.semi);\n node.update = this.type === types.parenR ? null : this.parseExpression();\n this.expect(types.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$1.parseForIn = function(node, init) {\n var isForIn = this.type === types._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$1.parseVar = function(node, isFor, kind) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (kind === \"const\" && !(this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.type === types._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types.comma)) { break }\n }\n return node\n};\n\npp$1.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$1.parseFunctionParams = function(node) {\n this.expect(types.parenL);\n node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$1.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types.braceL);\n while (this.type !== types.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raise(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$1.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$1.isClassElementNameStart = function() {\n return (\n this.type === types.name ||\n this.type === types.privateId ||\n this.type === types.num ||\n this.type === types.string ||\n this.type === types.bracketL ||\n this.type.keyword\n )\n};\n\npp$1.parseClassElementName = function(element) {\n if (this.type === types.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$1.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$1.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$1.parseClassId = function(node, isStatement) {\n if (this.type === types.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$1.parseClassSuper = function(node) {\n node.superClass = this.eat(types._extends) ? this.parseExprSubscripts(false) : null;\n};\n\npp$1.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$1.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!has(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$1.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types.star)) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseIdent(true);\n this.checkExport(exports, node.exported.name, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n }\n if (this.eat(types._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n var isAsync;\n if (this.type === types._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);\n } else if (this.type === types._class) {\n var cNode = this.startNode();\n node.declaration = this.parseClass(cNode, \"nullableID\");\n } else {\n node.declaration = this.parseMaybeAssign();\n this.semicolon();\n }\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseStatement(null);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$1.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (has(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$1.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat.name, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$1.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$1.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$1.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types.braceL);\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var node = this.startNode();\n node.local = this.parseIdent(true);\n node.exported = this.eatContextual(\"as\") ? this.parseIdent(true) : node.local;\n this.checkExport(exports, node.exported.name, node.exported.start);\n nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$1.parseImport = function(node) {\n this.next();\n // import '...'\n if (this.type === types.string) {\n node.specifiers = empty;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$1.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types.name) {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node, \"ImportDefaultSpecifier\"));\n if (!this.eat(types.comma)) { return nodes }\n }\n if (this.type === types.star) {\n var node$1 = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node$1.local = this.parseIdent();\n this.checkLValSimple(node$1.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node$1, \"ImportNamespaceSpecifier\"));\n return nodes\n }\n this.expect(types.braceL);\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var node$2 = this.startNode();\n node$2.imported = this.parseIdent(true);\n if (this.eatContextual(\"as\")) {\n node$2.local = this.parseIdent();\n } else {\n this.checkUnreserved(node$2.imported);\n node$2.local = node$2.imported;\n }\n this.checkLValSimple(node$2.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node$2, \"ImportSpecifier\"));\n }\n return nodes\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$1.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$1.isDirectiveCandidate = function(statement) {\n return (\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$2 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$2.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$2.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$2.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$2.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$2.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types.comma); }\n if (allowEmpty && this.type === types.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types.comma) { this.raise(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n elts.push(elem);\n }\n }\n return elts\n};\n\npp$2.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$2.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$2.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (has(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$2.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$2.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types$1 = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$3 = Parser.prototype;\n\npp$3.initialContext = function() {\n return [types$1.b_stat]\n};\n\npp$3.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$3.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types$1.f_expr || parent === types$1.f_stat)\n { return true }\n if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types._return || prevType === types.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow)\n { return true }\n if (prevType === types.braceL)\n { return parent === types$1.b_stat }\n if (prevType === types._var || prevType === types._const || prevType === types.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$3.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$3.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle egde case when token context could not be inferred correctly in tokenize phase\npp$3.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes.parenR.updateContext = types.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types$1.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr);\n this.exprAllowed = true;\n};\n\ntypes.dollarBraceL.updateContext = function() {\n this.context.push(types$1.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;\n this.context.push(statementParens ? types$1.p_stat : types$1.p_expr);\n this.exprAllowed = true;\n};\n\ntypes.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes._function.updateContext = types._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types._else &&\n !(prevType === types.semi && this.curContext() !== types$1.p_stat) &&\n !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat))\n { this.context.push(types$1.f_expr); }\n else\n { this.context.push(types$1.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes.backQuote.updateContext = function() {\n if (this.curContext() === types$1.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types$1.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes.star.updateContext = function(prevType) {\n if (prevType === types._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types$1.f_expr)\n { this.context[index] = types$1.f_expr_gen; }\n else\n { this.context[index] = types$1.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n\nvar pp$4 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$4.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0)\n { refDestructuringErrors.doubleProto = key.start; }\n // Backwards-compat kludge. Can be removed in version 6.0\n } else { this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\"); }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$4.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$4.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types.parenL || this.type === types.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$4.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$4.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$4.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types._in)) {\n if (prec > minPrec) {\n var logical = this.type === types.logicalOR || this.type === types.logicalAND;\n var coalesce = this.type === types.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types.coalesce) || (coalesce && (this.type === types.logicalOR || this.type === types.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$4.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$4.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$4.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$4.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$4.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types.bracketL);\n if (computed || (optional && this.type !== types.parenL && this.type !== types.backQuote) || this.eat(types.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types.bracketR);\n } else if (this.type === types.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && !this.canInsertSemicolon() && this.eat(types.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$4.parseExprAtom = function(refDestructuringErrors, forInit) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types._function)) {\n this.overrideContext(types$1.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types.num: case types.string:\n return this.parseLiteral(this.value)\n\n case types._null: case types._true: case types._false:\n node = this.startNode();\n node.value = this.type === types._null ? null : this.type === types._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types.braceL:\n this.overrideContext(types$1.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types._class:\n return this.parseClass(this.startNode(), false)\n\n case types._new:\n return this.parseNew()\n\n case types.backQuote:\n return this.parseTemplate()\n\n case types._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport()\n } else {\n return this.unexpected()\n }\n\n default:\n this.unexpected();\n }\n};\n\npp$4.parseExprImport = function() {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n switch (this.type) {\n case types.parenL:\n return this.parseDynamicImport(node)\n case types.dot:\n node.meta = meta;\n return this.parseImportMeta(node)\n default:\n this.unexpected();\n }\n};\n\npp$4.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types.parenR)) {\n var errorPos = this.start;\n if (this.eat(types.comma) && this.eat(types.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$4.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$4.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$4.parseParenExpression = function() {\n this.expect(types.parenL);\n var val = this.parseExpression();\n this.expect(types.parenR);\n return val\n};\n\npp$4.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types.parenR) {\n first ? first = false : this.expect(types.comma);\n if (allowTrailingComma && this.afterTrailingComma(types.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types.comma) { this.raise(this.start, \"Comma is not permitted after the rest element\"); }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types.parenR);\n\n if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$4.parseParenItem = function(item) {\n return item\n};\n\npp$4.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty$1 = [];\n\npp$4.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc, isImport = this.type === types._import;\n node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true, false);\n if (isImport && node.callee.type === \"ImportExpression\") {\n this.raise(startPos, \"Cannot use new with import()\");\n }\n if (this.eat(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty$1; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$4.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$4.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$4.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$4.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$4.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types.comma) {\n this.raise(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // To disallow parenthesized identifier via `this.toAssignable()`.\n if (this.type === types.parenL && refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0) {\n refDestructuringErrors.parenthesizedAssign = this.start;\n }\n if (refDestructuringErrors.parenthesizedBind < 0) {\n refDestructuringErrors.parenthesizedBind = this.start;\n }\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);\n this.parsePropertyName(prop, refDestructuringErrors);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$4.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types.colon)\n { this.unexpected(); }\n\n if (this.eat(types.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types.comma && this.type !== types.braceR && this.type !== types.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$4.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$4.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$4.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types.parenL);\n node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$4.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$4.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$4.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$4.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$4.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types.comma)\n { elt = null; }\n else if (this.type === types.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$4.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$4.parseIdent = function(liberal, isBinding) {\n var node = this.startNode();\n if (this.type === types.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$4.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$4.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$4.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$5 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$5.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$5.raiseRecoverable = pp$5.raise;\n\npp$5.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$6 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$6.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$6.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$6.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$6.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$6.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$6.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$6.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$6.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$7 = Parser.prototype;\n\npp$7.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$7.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$7.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$7.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$7.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript\n// specification. The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\nbuildUnicodeData(9);\nbuildUnicodeData(10);\nbuildUnicodeData(11);\nbuildUnicodeData(12);\n\nvar pp$8 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 12 ? 12 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nfunction codePointToString(ch) {\n if (ch <= 0xFFFF) { return String.fromCharCode(ch) }\n ch -= 0x10000;\n return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)\n}\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$8.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$8.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$8.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$8.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$8.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$8.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$8.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$8.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$8.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$8.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$8.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$8.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$8.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n};\npp$8.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$8.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$8.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$8.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$8.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$8.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$8.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$8.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$8.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$8.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// <ZWNJ>\n// <ZWJ>\npp$8.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$8.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$8.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$8.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$8.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$8.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$8.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$8.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$8.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$8.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$8.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$8.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$8.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return true\n }\n\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n (ch === 0x50 /* P */ || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n if (\n state.eat(0x7B /* { */) &&\n this.regexp_eatUnicodePropertyValueExpression(state) &&\n state.eat(0x7D /* } */)\n ) {\n return true\n }\n state.raise(\"Invalid property name\");\n }\n\n return false\n};\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$8.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return true\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n return true\n }\n return false\n};\npp$8.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!has(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\npp$8.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (!state.unicodeProperties.binary.test(nameOrValue))\n { state.raise(\"Invalid property name\"); }\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$8.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$8.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$8.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$8.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n state.eat(0x5E /* ^ */);\n this.regexp_classRanges(state);\n if (state.eat(0x5D /* ] */)) {\n return true\n }\n // Unreachable since it threw \"unterminated regular expression\" error before.\n state.raise(\"Unterminated character class\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$8.regexp_classRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$8.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$8.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$8.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$8.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$8.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$8.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$8.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$8.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$8.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp$9 = Parser.prototype;\n\n// Move to the next token\n\npp$9.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp$9.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp$9[Symbol.iterator] = function() {\n var this$1 = this;\n\n return {\n next: function () {\n var token = this$1.getToken();\n return {\n done: token.type === types.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp$9.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp$9.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp$9.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp$9.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n lineBreakG.lastIndex = start;\n var match;\n while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {\n ++this.curLine;\n this.lineStart = match.index + match[0].length;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp$9.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp$9.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp$9.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp$9.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types.dot)\n }\n};\n\npp$9.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.slash, 1)\n};\n\npp$9.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types.star : types.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp$9.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types.assign, 3) }\n }\n return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1)\n};\n\npp$9.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.bitwiseXOR, 1)\n};\n\npp$9.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.plusMin, 1)\n};\n\npp$9.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) }\n return this.finishOp(types.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n return this.nextToken()\n }\n if (next === 61) { size = 2; }\n return this.finishOp(types.relational, size)\n};\n\npp$9.readToken_eq_excl = function(code) { // '=!'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n this.pos += 2;\n return this.finishToken(types.arrow)\n }\n return this.finishOp(code === 61 ? types.eq : types.prefix, 1)\n};\n\npp$9.readToken_question = function() { // '?'\n var ecmaVersion = this.options.ecmaVersion;\n if (ecmaVersion >= 11) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 46) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 < 48 || next2 > 57) { return this.finishOp(types.questionDot, 2) }\n }\n if (next === 63) {\n if (ecmaVersion >= 12) {\n var next2$1 = this.input.charCodeAt(this.pos + 2);\n if (next2$1 === 61) { return this.finishOp(types.assign, 3) }\n }\n return this.finishOp(types.coalesce, 2)\n }\n }\n return this.finishOp(types.question, 1)\n};\n\npp$9.readToken_numberSign = function() { // '#'\n var ecmaVersion = this.options.ecmaVersion;\n var code = 35; // '#'\n if (ecmaVersion >= 13) {\n ++this.pos;\n code = this.fullCharCodeAtPos();\n if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n return this.finishToken(types.privateId, this.readWord1())\n }\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString$1(code) + \"'\");\n};\n\npp$9.getTokenFromCode = function(code) {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n case 46: // '.'\n return this.readToken_dot()\n\n // Punctuation tokens.\n case 40: ++this.pos; return this.finishToken(types.parenL)\n case 41: ++this.pos; return this.finishToken(types.parenR)\n case 59: ++this.pos; return this.finishToken(types.semi)\n case 44: ++this.pos; return this.finishToken(types.comma)\n case 91: ++this.pos; return this.finishToken(types.bracketL)\n case 93: ++this.pos; return this.finishToken(types.bracketR)\n case 123: ++this.pos; return this.finishToken(types.braceL)\n case 125: ++this.pos; return this.finishToken(types.braceR)\n case 58: ++this.pos; return this.finishToken(types.colon)\n\n case 96: // '`'\n if (this.options.ecmaVersion < 6) { break }\n ++this.pos;\n return this.finishToken(types.backQuote)\n\n case 48: // '0'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n if (this.options.ecmaVersion >= 6) {\n if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n }\n\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n return this.readNumber(false)\n\n // Quotes produce strings.\n case 34: case 39: // '\"', \"'\"\n return this.readString(code)\n\n // Operators are parsed inline in tiny state machines. '=' (61) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n\n case 47: // '/'\n return this.readToken_slash()\n\n case 37: case 42: // '%*'\n return this.readToken_mult_modulo_exp(code)\n\n case 124: case 38: // '|&'\n return this.readToken_pipe_amp(code)\n\n case 94: // '^'\n return this.readToken_caret()\n\n case 43: case 45: // '+-'\n return this.readToken_plus_min(code)\n\n case 60: case 62: // '<>'\n return this.readToken_lt_gt(code)\n\n case 61: case 33: // '=!'\n return this.readToken_eq_excl(code)\n\n case 63: // '?'\n return this.readToken_question()\n\n case 126: // '~'\n return this.finishOp(types.prefix, 1)\n\n case 35: // '#'\n return this.readToken_numberSign()\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString$1(code) + \"'\");\n};\n\npp$9.finishOp = function(type, size) {\n var str = this.input.slice(this.pos, this.pos + size);\n this.pos += size;\n return this.finishToken(type, str)\n};\n\npp$9.readRegexp = function() {\n var escaped, inClass, start = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n var ch = this.input.charAt(this.pos);\n if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n if (!escaped) {\n if (ch === \"[\") { inClass = true; }\n else if (ch === \"]\" && inClass) { inClass = false; }\n else if (ch === \"/\" && !inClass) { break }\n escaped = ch === \"\\\\\";\n } else { escaped = false; }\n ++this.pos;\n }\n var pattern = this.input.slice(start, this.pos);\n ++this.pos;\n var flagsStart = this.pos;\n var flags = this.readWord1();\n if (this.containsEsc) { this.unexpected(flagsStart); }\n\n // Validate pattern\n var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n state.reset(start, pattern, flags);\n this.validateRegExpFlags(state);\n this.validateRegExpPattern(state);\n\n // Create Literal#value property value.\n var value = null;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n // ESTree requires null if it failed to instantiate RegExp object.\n // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n }\n\n return this.finishToken(types.regexp, {pattern: pattern, flags: flags, value: value})\n};\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp$9.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n // `len` is used for character escape sequences. In that case, disallow separators.\n var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n // and isn't fraction part nor exponent part. In that case, if the first digit\n // is zero then disallow separators.\n var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n var start = this.pos, total = 0, lastCode = 0;\n for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n if (allowSeparators && code === 95) {\n if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n lastCode = code;\n continue\n }\n\n if (code >= 97) { val = code - 97 + 10; } // a\n else if (code >= 65) { val = code - 65 + 10; } // A\n else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n else { val = Infinity; }\n if (val >= radix) { break }\n lastCode = code;\n total = total * radix + val;\n }\n\n if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n if (isLegacyOctalNumericLiteral) {\n return parseInt(str, 8)\n }\n\n // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n return parseFloat(str.replace(/_/g, \"\"))\n}\n\nfunction stringToBigInt(str) {\n if (typeof BigInt !== \"function\") {\n return null\n }\n\n // `BigInt(value)` throws syntax error if the string contains numeric separators.\n return BigInt(str.replace(/_/g, \"\"))\n}\n\npp$9.readRadixNumber = function(radix) {\n var start = this.pos;\n this.pos += 2; // 0x\n var val = this.readInt(radix);\n if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n val = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp$9.readNumber = function(startsWithDot) {\n var start = this.pos;\n if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n var next = this.input.charCodeAt(this.pos);\n if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types.num, val$1)\n }\n if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n if (next === 46 && !octal) { // '.'\n ++this.pos;\n this.readInt(10);\n next = this.input.charCodeAt(this.pos);\n }\n if ((next === 69 || next === 101) && !octal) { // 'eE'\n next = this.input.charCodeAt(++this.pos);\n if (next === 43 || next === 45) { ++this.pos; } // '+-'\n if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n }\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n var val = stringToNumber(this.input.slice(start, this.pos), octal);\n return this.finishToken(types.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp$9.readCodePoint = function() {\n var ch = this.input.charCodeAt(this.pos), code;\n\n if (ch === 123) { // '{'\n if (this.options.ecmaVersion < 6) { this.unexpected(); }\n var codePos = ++this.pos;\n code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n ++this.pos;\n if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n } else {\n code = this.readHexChar(4);\n }\n return code\n};\n\nfunction codePointToString$1(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\npp$9.readString = function(quote) {\n var out = \"\", chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) { break }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.pos;\n } else if (ch === 0x2028 || ch === 0x2029) {\n if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n if (this.options.locations) {\n this.curLine++;\n this.lineStart = this.pos;\n }\n } else {\n if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(types.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp$9.tryReadTemplateToken = function() {\n this.inTemplateElement = true;\n try {\n this.readTmplToken();\n } catch (err) {\n if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n this.readInvalidTemplateToken();\n } else {\n throw err\n }\n }\n\n this.inTemplateElement = false;\n};\n\npp$9.invalidStringToken = function(position, message) {\n if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n throw INVALID_TEMPLATE_ESCAPE_ERROR\n } else {\n this.raise(position, message);\n }\n};\n\npp$9.readTmplToken = function() {\n var out = \"\", chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n if (this.pos === this.start && (this.type === types.template || this.type === types.invalidTemplate)) {\n if (ch === 36) {\n this.pos += 2;\n return this.finishToken(types.dollarBraceL)\n } else {\n ++this.pos;\n return this.finishToken(types.backQuote)\n }\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(types.template, out)\n }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(true);\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n ++this.pos;\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n case 10:\n out += \"\\n\";\n break\n default:\n out += String.fromCharCode(ch);\n break\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp$9.readInvalidTemplateToken = function() {\n for (; this.pos < this.input.length; this.pos++) {\n switch (this.input[this.pos]) {\n case \"\\\\\":\n ++this.pos;\n break\n\n case \"$\":\n if (this.input[this.pos + 1] !== \"{\") {\n break\n }\n // falls through\n\n case \"`\":\n return this.finishToken(types.invalidTemplate, this.input.slice(this.start, this.pos))\n\n // no default\n }\n }\n this.raise(this.start, \"Unterminated template\");\n};\n\n// Used to read escaped characters\n\npp$9.readEscapedChar = function(inTemplate) {\n var ch = this.input.charCodeAt(++this.pos);\n ++this.pos;\n switch (ch) {\n case 110: return \"\\n\" // 'n' -> '\\n'\n case 114: return \"\\r\" // 'r' -> '\\r'\n case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n case 117: return codePointToString$1(this.readCodePoint()) // 'u'\n case 116: return \"\\t\" // 't' -> '\\t'\n case 98: return \"\\b\" // 'b' -> '\\b'\n case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n case 102: return \"\\f\" // 'f' -> '\\f'\n case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n case 10: // ' \\n'\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n case 56:\n case 57:\n if (this.strict) {\n this.invalidStringToken(\n this.pos - 1,\n \"Invalid escape sequence\"\n );\n }\n if (inTemplate) {\n var codePos = this.pos - 1;\n\n this.invalidStringToken(\n codePos,\n \"Invalid escape sequence in template string\"\n );\n\n return null\n }\n default:\n if (ch >= 48 && ch <= 55) {\n var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n var octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.pos += octalStr.length - 1;\n ch = this.input.charCodeAt(this.pos);\n if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n this.invalidStringToken(\n this.pos - 1 - octalStr.length,\n inTemplate\n ? \"Octal literal in template string\"\n : \"Octal literal in strict mode\"\n );\n }\n return String.fromCharCode(octal)\n }\n if (isNewLine(ch)) {\n // Unicode new line characters after \\ get removed from output in both\n // template literals and strings\n return \"\"\n }\n return String.fromCharCode(ch)\n }\n};\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp$9.readHexChar = function(len) {\n var codePos = this.pos;\n var n = this.readInt(16, len);\n if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp$9.readWord1 = function() {\n this.containsEsc = false;\n var word = \"\", first = true, chunkStart = this.pos;\n var astral = this.options.ecmaVersion >= 6;\n while (this.pos < this.input.length) {\n var ch = this.fullCharCodeAtPos();\n if (isIdentifierChar(ch, astral)) {\n this.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) { // \"\\\"\n this.containsEsc = true;\n word += this.input.slice(chunkStart, this.pos);\n var escStart = this.pos;\n if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n ++this.pos;\n var esc = this.readCodePoint();\n if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n word += codePointToString$1(esc);\n chunkStart = this.pos;\n } else {\n break\n }\n first = false;\n }\n return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp$9.readWord = function() {\n var word = this.readWord1();\n var type = types.name;\n if (this.keywords.test(word)) {\n type = keywords$1[word];\n }\n return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n\nvar version = \"8.5.0\";\n\nParser.acorn = {\n Parser: Parser,\n version: version,\n defaultOptions: defaultOptions,\n Position: Position,\n SourceLocation: SourceLocation,\n getLineInfo: getLineInfo,\n Node: Node,\n TokenType: TokenType,\n tokTypes: types,\n keywordTypes: keywords$1,\n TokContext: TokContext,\n tokContexts: types$1,\n isIdentifierChar: isIdentifierChar,\n isIdentifierStart: isIdentifierStart,\n Token: Token,\n isNewLine: isNewLine,\n lineBreak: lineBreak,\n lineBreakG: lineBreakG,\n nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and\n// returns an abstract syntax tree as specified by [Mozilla parser\n// API][api].\n//\n// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\nfunction parse(input, options) {\n return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n return Parser.tokenizer(input, options)\n}\n\nexport { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords$1 as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types$1 as tokContexts, types as tokTypes, tokenizer, version };\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.acorn = {}));\n}(this, (function (exports) { 'use strict';\n\n // Reserved word lists for various dialects of the language\n\n var reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n };\n\n // And the keywords\n\n var ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\n var keywords = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n };\n\n var keywordRelationalOperator = /^in(stanceof)?$/;\n\n // ## Character categories\n\n // Big ugly regular expressions that match characters in the\n // whitespace, identifier, and identifier-start categories. These\n // are only applied when a character is found to actually have a\n // code point above 128.\n // Generated by `bin/generate-identifier-regex.js`.\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08c7\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n var nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08d3-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n // These are a run-length and offset encoded representation of the\n // >0xffff code points that are a valid part of identifiers. The\n // offset starts at 0x10000, and each pair of numbers represents an\n // offset to the next range, and then a size of the range. They were\n // generated by bin/generate-identifier-regex.js\n\n // eslint-disable-next-line comma-spacing\n var astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938];\n\n // eslint-disable-next-line comma-spacing\n var astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239];\n\n // This has a complexity linear to the value of the code. The\n // assumption is that looking up astral identifier characters is\n // rare.\n function isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n }\n\n // Test whether a given character code starts an identifier.\n\n function isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n }\n\n // Test whether a given character is part of an identifier.\n\n function isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n }\n\n // ## Token types\n\n // The assignment of fine-grained, information-carrying type objects\n // allows the tokenizer to store the information it has about a\n // token in a way that is very cheap for the parser to look up.\n\n // All token type variables start with an underscore, to make them\n // easy to recognize.\n\n // The `beforeExpr` property is used to disambiguate between regular\n // expressions and divisions. It is set on all token types that can\n // be followed by an expression (thus, a slash after them would be a\n // regular expression).\n //\n // The `startsExpr` property is used to check if the token ends a\n // `yield` expression. It is set on all token types that either can\n // directly start an expression (like a quotation mark) or can\n // continue an expression (like the body of a string).\n //\n // `isLoop` marks a keyword as starting a loop, which is important\n // to know when parsing a label, in order to allow or disallow\n // continue jumps to that label.\n\n var TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n };\n\n function binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n }\n var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n // Map keyword names to token types.\n\n var keywords$1 = {};\n\n // Succinct definitions of keyword token types\n function kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords$1[name] = new TokenType(name, options)\n }\n\n var types = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"</>/<=/>=\", 7),\n bitShift: binop(\"<</>>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n };\n\n // Matches a whole line break (where CRLF is considered a single\n // line break). Used to count lines.\n\n var lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\n var lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n function isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n }\n\n var nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\n var skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n var ref = Object.prototype;\n var hasOwnProperty = ref.hasOwnProperty;\n var toString = ref.toString;\n\n // Checks if an object has a property.\n\n function has(obj, propName) {\n return hasOwnProperty.call(obj, propName)\n }\n\n var isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n ); });\n\n function wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n }\n\n // These are used when `options.locations` is on, for the\n // `startLoc` and `endLoc` properties.\n\n var Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n };\n\n Position.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n };\n\n var SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n };\n\n // The `getLineInfo` function is mostly useful when the\n // `locations` option is off (for performance reasons) and you\n // want to find the line/column position for a given character\n // offset. `input` should be the code string that the offset refers\n // into.\n\n function getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n lineBreakG.lastIndex = cur;\n var match = lineBreakG.exec(input);\n if (match && match.index < offset) {\n ++line;\n cur = match.index + match[0].length;\n } else {\n return new Position(line, offset - cur)\n }\n }\n }\n\n // A second argument must be given to configure the parser process.\n // These options are recognized (only `ecmaVersion` is required):\n\n var defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), or `\"latest\"` (the\n // latest version the library supports). This influences support\n // for strict mode, the set of reserved words, and support for\n // new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file\n // is allowed and treated as a line comment.\n allowHashBang: false,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n };\n\n // Interpret and default an options object\n\n var warnedAboutEcmaVersion = false;\n\n function getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n }\n\n function pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n }\n\n // Each scope gets a bitset that may contain these flags\n var\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\n function functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n }\n\n // Used in checkLVal* and declareName to determine the type of a binding\n var\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\n var Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n };\n\n var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\n Parser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n };\n\n prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n prototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n };\n prototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n };\n prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n prototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n };\n prototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n };\n\n Parser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n };\n\n Parser.parse = function parse (input, options) {\n return new this(options, input).parse()\n };\n\n Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n };\n\n Parser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n };\n\n Object.defineProperties( Parser.prototype, prototypeAccessors );\n\n var pp = Parser.prototype;\n\n // ## Parser utilities\n\n var literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\n pp.strictDirective = function(start) {\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n };\n\n // Predicate that tests whether the next token is of the given\n // type, and if yes, consumes it as a side effect.\n\n pp.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n };\n\n // Tests whether parsed token is a contextual keyword.\n\n pp.isContextual = function(name) {\n return this.type === types.name && this.value === name && !this.containsEsc\n };\n\n // Consumes contextual keyword if possible.\n\n pp.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n };\n\n // Asserts that following token is given contextual keyword.\n\n pp.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n };\n\n // Test whether a semicolon can be inserted at the current position.\n\n pp.canInsertSemicolon = function() {\n return this.type === types.eof ||\n this.type === types.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n pp.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n };\n\n // Consume a semicolon, or, failing that, see if we are allowed to\n // pretend that there is a semicolon at this position.\n\n pp.semicolon = function() {\n if (!this.eat(types.semi) && !this.insertSemicolon()) { this.unexpected(); }\n };\n\n pp.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n };\n\n // Expect a token of a given type. If found, consume it, otherwise,\n // raise an unexpected token error.\n\n pp.expect = function(type) {\n this.eat(type) || this.unexpected();\n };\n\n // Raise an unexpected token error.\n\n pp.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n };\n\n function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n }\n\n pp.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, \"Parenthesized pattern\"); }\n };\n\n pp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n };\n\n pp.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n };\n\n pp.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n };\n\n var pp$1 = Parser.prototype;\n\n // ### Statement parsing\n\n // Parse a program. Initializes the parser, reads any number of\n // statements, and wraps them in a Program node. Optionally takes a\n // `program` argument. If present, the statements will be appended\n // to its body instead of creating a new node.\n\n pp$1.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n };\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n pp$1.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '[', '/', astral\n if (context) { return false }\n\n if (nextCh === 123) { return true } // '{'\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n };\n\n // check 'async [no LineTerminator here] function'\n // - 'async /*foo*/ function' is OK.\n // - 'async /*\\n*/ function' is invalid.\n pp$1.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n };\n\n // Parse a single statement.\n //\n // If expecting a statement and finding a slash operator, parse a\n // regular expression literal. This is to handle cases like\n // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n // does not help.\n\n pp$1.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types._debugger: return this.parseDebuggerStatement(node)\n case types._do: return this.parseDoStatement(node)\n case types._for: return this.parseForStatement(node)\n case types._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types._if: return this.parseIfStatement(node)\n case types._return: return this.parseReturnStatement(node)\n case types._switch: return this.parseSwitchStatement(node)\n case types._throw: return this.parseThrowStatement(node)\n case types._try: return this.parseTryStatement(node)\n case types._const: case types._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types._while: return this.parseWhileStatement(node)\n case types._with: return this.parseWithStatement(node)\n case types.braceL: return this.parseBlock(true, node)\n case types.semi: return this.parseEmptyStatement(node)\n case types._export:\n case types._import:\n if (this.options.ecmaVersion > 10 && starttype === types._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types.name && expr.type === \"Identifier\" && this.eat(types.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n };\n\n pp$1.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n };\n\n pp$1.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n };\n\n pp$1.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n };\n\n // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n // loop is non-trivial. Basically, we have to parse the init `var`\n // statement or expression, disallowing the `in` operator (see\n // the second parameter to `parseExpression`), and then check\n // whether the next token is `in` or `of`. When there is no init\n // part (semicolon immediately after the opening parenthesis), it\n // is a regular `for` loop.\n\n pp$1.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types.parenL);\n if (this.type === types.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types._var || this.type === types._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n };\n\n pp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n };\n\n pp$1.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n };\n\n pp$1.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n };\n\n pp$1.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types.braceR;) {\n if (this.type === types._case || this.type === types._default) {\n var isCase = this.type === types._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n };\n\n pp$1.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n };\n\n // Reused empty array added for node fields that are always empty.\n\n var empty = [];\n\n pp$1.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types.parenL)) {\n clause.param = this.parseBindingAtom();\n var simple = clause.param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types.parenR);\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n };\n\n pp$1.parseVarStatement = function(node, kind) {\n this.next();\n this.parseVar(node, false, kind);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n };\n\n pp$1.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n };\n\n pp$1.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n };\n\n pp$1.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n };\n\n pp$1.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n };\n\n pp$1.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n };\n\n // Parse a semicolon-enclosed block of statements, handling `\"use\n // strict\"` declarations when `allowStrict` is true (used for\n // function bodies).\n\n pp$1.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n };\n\n // Parse a regular `for` loop. The disambiguation code in\n // `parseStatement` will already have parsed the init statement or\n // expression.\n\n pp$1.parseFor = function(node, init) {\n node.init = init;\n this.expect(types.semi);\n node.test = this.type === types.semi ? null : this.parseExpression();\n this.expect(types.semi);\n node.update = this.type === types.parenR ? null : this.parseExpression();\n this.expect(types.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n };\n\n // Parse a `for`/`in` and `for`/`of` loop, which are almost\n // same from parser's perspective.\n\n pp$1.parseForIn = function(node, init) {\n var isForIn = this.type === types._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n };\n\n // Parse a list of variable declarations.\n\n pp$1.parseVar = function(node, isFor, kind) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (kind === \"const\" && !(this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.type === types._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types.comma)) { break }\n }\n return node\n };\n\n pp$1.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n };\n\n var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n // Parse a function declaration or literal (depending on the\n // `statement & FUNC_STATEMENT`).\n\n // Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n pp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n };\n\n pp$1.parseFunctionParams = function(node) {\n this.expect(types.parenL);\n node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n };\n\n // Parse a class declaration or literal (depending on the\n // `isStatement` parameter).\n\n pp$1.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types.braceL);\n while (this.type !== types.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raise(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n };\n\n pp$1.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n };\n\n pp$1.isClassElementNameStart = function() {\n return (\n this.type === types.name ||\n this.type === types.privateId ||\n this.type === types.num ||\n this.type === types.string ||\n this.type === types.bracketL ||\n this.type.keyword\n )\n };\n\n pp$1.parseClassElementName = function(element) {\n if (this.type === types.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n };\n\n pp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n };\n\n pp$1.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n };\n\n pp$1.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n };\n\n pp$1.parseClassId = function(node, isStatement) {\n if (this.type === types.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n };\n\n pp$1.parseClassSuper = function(node) {\n node.superClass = this.eat(types._extends) ? this.parseExprSubscripts(false) : null;\n };\n\n pp$1.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n };\n\n pp$1.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!has(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n };\n\n function isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n }\n\n function checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n }\n\n // Parses module export declaration.\n\n pp$1.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types.star)) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseIdent(true);\n this.checkExport(exports, node.exported.name, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n }\n if (this.eat(types._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n var isAsync;\n if (this.type === types._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);\n } else if (this.type === types._class) {\n var cNode = this.startNode();\n node.declaration = this.parseClass(cNode, \"nullableID\");\n } else {\n node.declaration = this.parseMaybeAssign();\n this.semicolon();\n }\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseStatement(null);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n };\n\n pp$1.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (has(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n };\n\n pp$1.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat.name, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n };\n\n pp$1.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n };\n\n pp$1.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n };\n\n // Parses a comma-separated list of module exports.\n\n pp$1.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types.braceL);\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var node = this.startNode();\n node.local = this.parseIdent(true);\n node.exported = this.eatContextual(\"as\") ? this.parseIdent(true) : node.local;\n this.checkExport(exports, node.exported.name, node.exported.start);\n nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n }\n return nodes\n };\n\n // Parses import declaration.\n\n pp$1.parseImport = function(node) {\n this.next();\n // import '...'\n if (this.type === types.string) {\n node.specifiers = empty;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n };\n\n // Parses a comma-separated list of module imports.\n\n pp$1.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types.name) {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node, \"ImportDefaultSpecifier\"));\n if (!this.eat(types.comma)) { return nodes }\n }\n if (this.type === types.star) {\n var node$1 = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node$1.local = this.parseIdent();\n this.checkLValSimple(node$1.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node$1, \"ImportNamespaceSpecifier\"));\n return nodes\n }\n this.expect(types.braceL);\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var node$2 = this.startNode();\n node$2.imported = this.parseIdent(true);\n if (this.eatContextual(\"as\")) {\n node$2.local = this.parseIdent();\n } else {\n this.checkUnreserved(node$2.imported);\n node$2.local = node$2.imported;\n }\n this.checkLValSimple(node$2.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node$2, \"ImportSpecifier\"));\n }\n return nodes\n };\n\n // Set `ExpressionStatement#directive` property for directive prologues.\n pp$1.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n };\n pp$1.isDirectiveCandidate = function(statement) {\n return (\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n };\n\n var pp$2 = Parser.prototype;\n\n // Convert existing expression atom to assignable pattern\n // if possible.\n\n pp$2.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n };\n\n // Convert list of expression atoms to binding list.\n\n pp$2.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n };\n\n // Parses spread element.\n\n pp$2.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n };\n\n pp$2.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n };\n\n // Parses lvalue (assignable) atom.\n\n pp$2.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n };\n\n pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types.comma); }\n if (allowEmpty && this.type === types.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types.comma) { this.raise(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n elts.push(elem);\n }\n }\n return elts\n };\n\n pp$2.parseBindingListItem = function(param) {\n return param\n };\n\n // Parses assignment pattern around given atom if possible.\n\n pp$2.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n };\n\n // The following three functions all verify that a node is an lvalue —\n // something that can be bound, or assigned to. In order to do so, they perform\n // a variety of checks:\n //\n // - Check that none of the bound/assigned-to identifiers are reserved words.\n // - Record name declarations for bindings in the appropriate scope.\n // - Check duplicate argument names, if checkClashes is set.\n //\n // If a complex binding pattern is encountered (e.g., object and array\n // destructuring), the entire pattern is recursively checked.\n //\n // There are three versions of checkLVal*() appropriate for different\n // circumstances:\n //\n // - checkLValSimple() shall be used if the syntactic construct supports\n // nothing other than identifiers and member expressions. Parenthesized\n // expressions are also correctly handled. This is generally appropriate for\n // constructs for which the spec says\n //\n // > It is a Syntax Error if AssignmentTargetType of [the production] is not\n // > simple.\n //\n // It is also appropriate for checking if an identifier is valid and not\n // defined elsewhere, like import declarations or function/class identifiers.\n //\n // Examples where this is used include:\n // a += …;\n // import a from '…';\n // where a is the node to be checked.\n //\n // - checkLValPattern() shall be used if the syntactic construct supports\n // anything checkLValSimple() supports, as well as object and array\n // destructuring patterns. This is generally appropriate for constructs for\n // which the spec says\n //\n // > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n // > an ArrayLiteral and AssignmentTargetType of [the production] is not\n // > simple.\n //\n // Examples where this is used include:\n // (a = …);\n // const a = …;\n // try { … } catch (a) { … }\n // where a is the node to be checked.\n //\n // - checkLValInnerPattern() shall be used if the syntactic construct supports\n // anything checkLValPattern() supports, as well as default assignment\n // patterns, rest elements, and other constructs that may appear within an\n // object or array destructuring pattern.\n //\n // As a special case, function parameters also use checkLValInnerPattern(),\n // as they also support defaults and rest constructs.\n //\n // These functions deliberately support both assignment and binding constructs,\n // as the logic for both is exceedingly similar. If the node is the target of\n // an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n // should be set to the appropriate BIND_* constant, like BIND_VAR or\n // BIND_LEXICAL.\n //\n // If the function is called with a non-BIND_NONE bindingType, then\n // additionally a checkClashes object may be specified to allow checking for\n // duplicate argument names. checkClashes is ignored if the provided construct\n // is an assignment (i.e., bindingType is BIND_NONE).\n\n pp$2.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (has(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n };\n\n pp$2.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n };\n\n pp$2.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n };\n\n // The algorithm used to determine whether a regexp can appear at a\n\n var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n };\n\n var types$1 = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n };\n\n var pp$3 = Parser.prototype;\n\n pp$3.initialContext = function() {\n return [types$1.b_stat]\n };\n\n pp$3.curContext = function() {\n return this.context[this.context.length - 1]\n };\n\n pp$3.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types$1.f_expr || parent === types$1.f_stat)\n { return true }\n if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types._return || prevType === types.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow)\n { return true }\n if (prevType === types.braceL)\n { return parent === types$1.b_stat }\n if (prevType === types._var || prevType === types._const || prevType === types.name)\n { return false }\n return !this.exprAllowed\n };\n\n pp$3.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n };\n\n pp$3.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n };\n\n // Used to handle egde case when token context could not be inferred correctly in tokenize phase\n pp$3.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n };\n\n // Token-specific context update code\n\n types.parenR.updateContext = types.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types$1.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n };\n\n types.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr);\n this.exprAllowed = true;\n };\n\n types.dollarBraceL.updateContext = function() {\n this.context.push(types$1.b_tmpl);\n this.exprAllowed = true;\n };\n\n types.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;\n this.context.push(statementParens ? types$1.p_stat : types$1.p_expr);\n this.exprAllowed = true;\n };\n\n types.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n };\n\n types._function.updateContext = types._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types._else &&\n !(prevType === types.semi && this.curContext() !== types$1.p_stat) &&\n !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat))\n { this.context.push(types$1.f_expr); }\n else\n { this.context.push(types$1.f_stat); }\n this.exprAllowed = false;\n };\n\n types.backQuote.updateContext = function() {\n if (this.curContext() === types$1.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types$1.q_tmpl); }\n this.exprAllowed = false;\n };\n\n types.star.updateContext = function(prevType) {\n if (prevType === types._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types$1.f_expr)\n { this.context[index] = types$1.f_expr_gen; }\n else\n { this.context[index] = types$1.f_gen; }\n }\n this.exprAllowed = true;\n };\n\n types.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n };\n\n // A recursive descent parser operates by defining functions for all\n\n var pp$4 = Parser.prototype;\n\n // Check if property name clashes with already added.\n // Object/class getters and setters are not allowed to clash —\n // either with each other or with an init property — and in\n // strict mode, init properties are also not allowed to be repeated.\n\n pp$4.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0)\n { refDestructuringErrors.doubleProto = key.start; }\n // Backwards-compat kludge. Can be removed in version 6.0\n } else { this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\"); }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n };\n\n // ### Expression parsing\n\n // These nest, from the most general expression type at the top to\n // 'atomic', nondivisible expression types at the bottom. Most of\n // the functions will simply let the function(s) below them parse,\n // and, *if* the syntactic construct they handle is present, wrap\n // the AST node that the inner parser gave them in another node.\n\n // Parse a full expression. The optional arguments are used to\n // forbid the `in` operator (in for loops initalization expressions)\n // and provide reference for storing '=' operator inside shorthand\n // property assignment in contexts where both object expression\n // and object pattern might appear (so it's possible to raise\n // delayed syntax error at correct position).\n\n pp$4.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n };\n\n // Parse an assignment expression. This includes applications of\n // operators like `+=`.\n\n pp$4.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types.parenL || this.type === types.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n };\n\n // Parse a ternary conditional (`?:`) operator.\n\n pp$4.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n };\n\n // Start the precedence parser.\n\n pp$4.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n };\n\n // Parse binary operators with the operator precedence parsing\n // algorithm. `left` is the left-hand side of the operator.\n // `minPrec` provides context that allows the function to stop and\n // defer further parser to one of its callers when it encounters an\n // operator that has a lower precedence than the set it is parsing.\n\n pp$4.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types._in)) {\n if (prec > minPrec) {\n var logical = this.type === types.logicalOR || this.type === types.logicalAND;\n var coalesce = this.type === types.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types.coalesce) || (coalesce && (this.type === types.logicalOR || this.type === types.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n };\n\n pp$4.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n };\n\n // Parse unary operators, both prefix and postfix.\n\n pp$4.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n };\n\n function isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n }\n\n // Parse call, dot, and `[]`-subscript expressions.\n\n pp$4.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n };\n\n pp$4.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n };\n\n pp$4.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types.bracketL);\n if (computed || (optional && this.type !== types.parenL && this.type !== types.backQuote) || this.eat(types.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types.bracketR);\n } else if (this.type === types.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && !this.canInsertSemicolon() && this.eat(types.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n };\n\n // Parse an atomic expression — either a single token that is an\n // expression, an expression started by a keyword like `function` or\n // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n // or `{}`.\n\n pp$4.parseExprAtom = function(refDestructuringErrors, forInit) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types._function)) {\n this.overrideContext(types$1.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types.num: case types.string:\n return this.parseLiteral(this.value)\n\n case types._null: case types._true: case types._false:\n node = this.startNode();\n node.value = this.type === types._null ? null : this.type === types._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types.braceL:\n this.overrideContext(types$1.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types._class:\n return this.parseClass(this.startNode(), false)\n\n case types._new:\n return this.parseNew()\n\n case types.backQuote:\n return this.parseTemplate()\n\n case types._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport()\n } else {\n return this.unexpected()\n }\n\n default:\n this.unexpected();\n }\n };\n\n pp$4.parseExprImport = function() {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n switch (this.type) {\n case types.parenL:\n return this.parseDynamicImport(node)\n case types.dot:\n node.meta = meta;\n return this.parseImportMeta(node)\n default:\n this.unexpected();\n }\n };\n\n pp$4.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types.parenR)) {\n var errorPos = this.start;\n if (this.eat(types.comma) && this.eat(types.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n };\n\n pp$4.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n };\n\n pp$4.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n };\n\n pp$4.parseParenExpression = function() {\n this.expect(types.parenL);\n var val = this.parseExpression();\n this.expect(types.parenR);\n return val\n };\n\n pp$4.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types.parenR) {\n first ? first = false : this.expect(types.comma);\n if (allowTrailingComma && this.afterTrailingComma(types.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types.comma) { this.raise(this.start, \"Comma is not permitted after the rest element\"); }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types.parenR);\n\n if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n };\n\n pp$4.parseParenItem = function(item) {\n return item\n };\n\n pp$4.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, forInit)\n };\n\n // New's precedence is slightly tricky. It must allow its argument to\n // be a `[]` or dot subscript expression, but not a call — at least,\n // not without wrapping it in parentheses. Thus, it uses the noCalls\n // argument to parseSubscripts to prevent it from consuming the\n // argument list.\n\n var empty$1 = [];\n\n pp$4.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc, isImport = this.type === types._import;\n node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true, false);\n if (isImport && node.callee.type === \"ImportExpression\") {\n this.raise(startPos, \"Cannot use new with import()\");\n }\n if (this.eat(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty$1; }\n return this.finishNode(node, \"NewExpression\")\n };\n\n // Parse template expression.\n\n pp$4.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n };\n\n pp$4.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n };\n\n pp$4.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n // Parse an object literal or binding pattern.\n\n pp$4.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n };\n\n pp$4.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types.comma) {\n this.raise(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // To disallow parenthesized identifier via `this.toAssignable()`.\n if (this.type === types.parenL && refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0) {\n refDestructuringErrors.parenthesizedAssign = this.start;\n }\n if (refDestructuringErrors.parenthesizedBind < 0) {\n refDestructuringErrors.parenthesizedBind = this.start;\n }\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);\n this.parsePropertyName(prop, refDestructuringErrors);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n };\n\n pp$4.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types.colon)\n { this.unexpected(); }\n\n if (this.eat(types.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types.comma && this.type !== types.braceR && this.type !== types.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n };\n\n pp$4.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n };\n\n // Initialize empty function node.\n\n pp$4.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n };\n\n // Parse object or class method.\n\n pp$4.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types.parenL);\n node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n };\n\n // Parse arrow function expression with given parameters.\n\n pp$4.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n };\n\n // Parse function body and check parameters.\n\n pp$4.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n };\n\n pp$4.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n };\n\n // Checks function params for various disallowed patterns such as using \"eval\"\n // or \"arguments\" and duplicate parameters.\n\n pp$4.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n };\n\n // Parses a comma-separated list of expressions, and returns them as\n // an array. `close` is the token type that ends the list, and\n // `allowEmpty` can be turned on to allow subsequent commas with\n // nothing in between them to be parsed as `null` (which is needed\n // for array literals).\n\n pp$4.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types.comma)\n { elt = null; }\n else if (this.type === types.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n };\n\n pp$4.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n };\n\n // Parse the next token as an identifier. If `liberal` is true (used\n // when parsing properties), it will also convert keywords into\n // identifiers.\n\n pp$4.parseIdent = function(liberal, isBinding) {\n var node = this.startNode();\n if (this.type === types.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n };\n\n pp$4.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n\n return node\n };\n\n // Parses yield expression inside generator.\n\n pp$4.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n };\n\n pp$4.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n };\n\n var pp$5 = Parser.prototype;\n\n // This function is used to raise exceptions on parse errors. It\n // takes an offset integer (into the current `input`) to indicate\n // the location of the error, attaches the position to the end\n // of the error message, and then raises a `SyntaxError` with that\n // message.\n\n pp$5.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n };\n\n pp$5.raiseRecoverable = pp$5.raise;\n\n pp$5.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n };\n\n var pp$6 = Parser.prototype;\n\n var Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n };\n\n // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\n pp$6.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n };\n\n pp$6.exitScope = function() {\n this.scopeStack.pop();\n };\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n pp$6.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n };\n\n pp$6.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n };\n\n pp$6.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n };\n\n pp$6.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n };\n\n pp$6.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n };\n\n // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n pp$6.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n };\n\n var Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n };\n\n // Start an AST node, attaching a start offset.\n\n var pp$7 = Parser.prototype;\n\n pp$7.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n };\n\n pp$7.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n };\n\n // Finish an AST node, adding `type` and `end` properties.\n\n function finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n }\n\n pp$7.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n };\n\n // Finish node at given position\n\n pp$7.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n };\n\n pp$7.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n };\n\n // This file contains Unicode properties extracted from the ECMAScript\n // specification. The lists are extracted like so:\n // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n // #table-binary-unicode-properties\n var ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\n var ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\n var ecma11BinaryProperties = ecma10BinaryProperties;\n var ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\n var unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties\n };\n\n // #table-unicode-general-category-values\n var unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n // #table-unicode-script-values\n var ecma9ScriptValues = \"Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\n var ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\n var ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\n var ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\n var unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues\n };\n\n var data = {};\n function buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n }\n buildUnicodeData(9);\n buildUnicodeData(10);\n buildUnicodeData(11);\n buildUnicodeData(12);\n\n var pp$8 = Parser.prototype;\n\n var RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 12 ? 12 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n };\n\n RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n };\n\n RegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n };\n\n // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n RegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n };\n\n RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n };\n\n RegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n };\n\n RegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n };\n\n RegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n };\n\n RegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n };\n\n function codePointToString(ch) {\n if (ch <= 0xFFFF) { return String.fromCharCode(ch) }\n ch -= 0x10000;\n return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)\n }\n\n /**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$8.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n }\n };\n\n /**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$8.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n pp$8.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n pp$8.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n pp$8.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n pp$8.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n pp$8.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n pp$8.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n pp$8.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n };\n pp$8.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n pp$8.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n };\n pp$8.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$8.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n };\n pp$8.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n pp$8.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n pp$8.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n pp$8.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n function isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n // But eat eager.\n pp$8.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n pp$8.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n };\n\n // GroupSpecifier ::\n // [empty]\n // `?` GroupName\n pp$8.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n };\n\n // GroupName ::\n // `<` RegExpIdentifierName `>`\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$8.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n };\n\n // RegExpIdentifierName ::\n // RegExpIdentifierStart\n // RegExpIdentifierName RegExpIdentifierPart\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$8.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n };\n\n // RegExpIdentifierStart ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n pp$8.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n }\n\n // RegExpIdentifierPart ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n // <ZWNJ>\n // <ZWJ>\n pp$8.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n pp$8.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n };\n pp$8.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$8.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n pp$8.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n };\n pp$8.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$8.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n pp$8.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n pp$8.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n function isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n pp$8.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n };\n function isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n pp$8.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n pp$8.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n pp$8.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return true\n }\n\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n (ch === 0x50 /* P */ || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n if (\n state.eat(0x7B /* { */) &&\n this.regexp_eatUnicodePropertyValueExpression(state) &&\n state.eat(0x7D /* } */)\n ) {\n return true\n }\n state.raise(\"Invalid property name\");\n }\n\n return false\n };\n function isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n pp$8.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return true\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n return true\n }\n return false\n };\n pp$8.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!has(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n };\n pp$8.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (!state.unicodeProperties.binary.test(nameOrValue))\n { state.raise(\"Invalid property name\"); }\n };\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n pp$8.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n function isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n pp$8.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n function isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n pp$8.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n pp$8.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n state.eat(0x5E /* ^ */);\n this.regexp_classRanges(state);\n if (state.eat(0x5D /* ] */)) {\n return true\n }\n // Unreachable since it threw \"unterminated regular expression\" error before.\n state.raise(\"Unterminated character class\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n pp$8.regexp_classRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n pp$8.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n pp$8.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n pp$8.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$8.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n pp$8.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n };\n function isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n pp$8.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n };\n function isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n }\n function hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n pp$8.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n pp$8.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n };\n function isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$8.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n };\n\n // Object type used to represent tokens. Note that normally, tokens\n // simply exist as properties on the parser object. This is only\n // used for the onToken callback and the external tokenizer.\n\n var Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n };\n\n // ## Tokenizer\n\n var pp$9 = Parser.prototype;\n\n // Move to the next token\n\n pp$9.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n };\n\n pp$9.getToken = function() {\n this.next();\n return new Token(this)\n };\n\n // If we're in an ES6 environment, make parsers iterable\n if (typeof Symbol !== \"undefined\")\n { pp$9[Symbol.iterator] = function() {\n var this$1 = this;\n\n return {\n next: function () {\n var token = this$1.getToken();\n return {\n done: token.type === types.eof,\n value: token\n }\n }\n }\n }; }\n\n // Toggle strict mode. Re-reads the next number or string to please\n // pedantic tests (`\"use strict\"; 010;` should fail).\n\n // Read a single token, updating the parser object's token-related\n // properties.\n\n pp$9.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n };\n\n pp$9.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n };\n\n pp$9.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n };\n\n pp$9.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n lineBreakG.lastIndex = start;\n var match;\n while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {\n ++this.curLine;\n this.lineStart = match.index + match[0].length;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n pp$9.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n // Called at the start of the parse and after every token. Skips\n // whitespace and comments, and.\n\n pp$9.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n };\n\n // Called at the end of every token. Sets `end`, `val`, and\n // maintains `context` and `exprAllowed`, and skips the space after\n // the token, so that the next one's `start` will point at the\n // right position.\n\n pp$9.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n };\n\n // ### Token reading\n\n // This is the function that is called to fetch the next token. It\n // is somewhat obscure, because it works in character codes rather\n // than characters, and because operator parsing has been inlined\n // into it.\n //\n // All in the name of speed.\n //\n pp$9.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types.dot)\n }\n };\n\n pp$9.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.slash, 1)\n };\n\n pp$9.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types.star : types.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types.assign, size + 1) }\n return this.finishOp(tokentype, size)\n };\n\n pp$9.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types.assign, 3) }\n }\n return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1)\n };\n\n pp$9.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.bitwiseXOR, 1)\n };\n\n pp$9.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.plusMin, 1)\n };\n\n pp$9.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) }\n return this.finishOp(types.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n return this.nextToken()\n }\n if (next === 61) { size = 2; }\n return this.finishOp(types.relational, size)\n };\n\n pp$9.readToken_eq_excl = function(code) { // '=!'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n this.pos += 2;\n return this.finishToken(types.arrow)\n }\n return this.finishOp(code === 61 ? types.eq : types.prefix, 1)\n };\n\n pp$9.readToken_question = function() { // '?'\n var ecmaVersion = this.options.ecmaVersion;\n if (ecmaVersion >= 11) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 46) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 < 48 || next2 > 57) { return this.finishOp(types.questionDot, 2) }\n }\n if (next === 63) {\n if (ecmaVersion >= 12) {\n var next2$1 = this.input.charCodeAt(this.pos + 2);\n if (next2$1 === 61) { return this.finishOp(types.assign, 3) }\n }\n return this.finishOp(types.coalesce, 2)\n }\n }\n return this.finishOp(types.question, 1)\n };\n\n pp$9.readToken_numberSign = function() { // '#'\n var ecmaVersion = this.options.ecmaVersion;\n var code = 35; // '#'\n if (ecmaVersion >= 13) {\n ++this.pos;\n code = this.fullCharCodeAtPos();\n if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n return this.finishToken(types.privateId, this.readWord1())\n }\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString$1(code) + \"'\");\n };\n\n pp$9.getTokenFromCode = function(code) {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n case 46: // '.'\n return this.readToken_dot()\n\n // Punctuation tokens.\n case 40: ++this.pos; return this.finishToken(types.parenL)\n case 41: ++this.pos; return this.finishToken(types.parenR)\n case 59: ++this.pos; return this.finishToken(types.semi)\n case 44: ++this.pos; return this.finishToken(types.comma)\n case 91: ++this.pos; return this.finishToken(types.bracketL)\n case 93: ++this.pos; return this.finishToken(types.bracketR)\n case 123: ++this.pos; return this.finishToken(types.braceL)\n case 125: ++this.pos; return this.finishToken(types.braceR)\n case 58: ++this.pos; return this.finishToken(types.colon)\n\n case 96: // '`'\n if (this.options.ecmaVersion < 6) { break }\n ++this.pos;\n return this.finishToken(types.backQuote)\n\n case 48: // '0'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n if (this.options.ecmaVersion >= 6) {\n if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n }\n\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n return this.readNumber(false)\n\n // Quotes produce strings.\n case 34: case 39: // '\"', \"'\"\n return this.readString(code)\n\n // Operators are parsed inline in tiny state machines. '=' (61) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n\n case 47: // '/'\n return this.readToken_slash()\n\n case 37: case 42: // '%*'\n return this.readToken_mult_modulo_exp(code)\n\n case 124: case 38: // '|&'\n return this.readToken_pipe_amp(code)\n\n case 94: // '^'\n return this.readToken_caret()\n\n case 43: case 45: // '+-'\n return this.readToken_plus_min(code)\n\n case 60: case 62: // '<>'\n return this.readToken_lt_gt(code)\n\n case 61: case 33: // '=!'\n return this.readToken_eq_excl(code)\n\n case 63: // '?'\n return this.readToken_question()\n\n case 126: // '~'\n return this.finishOp(types.prefix, 1)\n\n case 35: // '#'\n return this.readToken_numberSign()\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString$1(code) + \"'\");\n };\n\n pp$9.finishOp = function(type, size) {\n var str = this.input.slice(this.pos, this.pos + size);\n this.pos += size;\n return this.finishToken(type, str)\n };\n\n pp$9.readRegexp = function() {\n var escaped, inClass, start = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n var ch = this.input.charAt(this.pos);\n if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n if (!escaped) {\n if (ch === \"[\") { inClass = true; }\n else if (ch === \"]\" && inClass) { inClass = false; }\n else if (ch === \"/\" && !inClass) { break }\n escaped = ch === \"\\\\\";\n } else { escaped = false; }\n ++this.pos;\n }\n var pattern = this.input.slice(start, this.pos);\n ++this.pos;\n var flagsStart = this.pos;\n var flags = this.readWord1();\n if (this.containsEsc) { this.unexpected(flagsStart); }\n\n // Validate pattern\n var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n state.reset(start, pattern, flags);\n this.validateRegExpFlags(state);\n this.validateRegExpPattern(state);\n\n // Create Literal#value property value.\n var value = null;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n // ESTree requires null if it failed to instantiate RegExp object.\n // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n }\n\n return this.finishToken(types.regexp, {pattern: pattern, flags: flags, value: value})\n };\n\n // Read an integer in the given radix. Return null if zero digits\n // were read, the integer value otherwise. When `len` is given, this\n // will return `null` unless the integer has exactly `len` digits.\n\n pp$9.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n // `len` is used for character escape sequences. In that case, disallow separators.\n var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n // and isn't fraction part nor exponent part. In that case, if the first digit\n // is zero then disallow separators.\n var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n var start = this.pos, total = 0, lastCode = 0;\n for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n if (allowSeparators && code === 95) {\n if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n lastCode = code;\n continue\n }\n\n if (code >= 97) { val = code - 97 + 10; } // a\n else if (code >= 65) { val = code - 65 + 10; } // A\n else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n else { val = Infinity; }\n if (val >= radix) { break }\n lastCode = code;\n total = total * radix + val;\n }\n\n if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n return total\n };\n\n function stringToNumber(str, isLegacyOctalNumericLiteral) {\n if (isLegacyOctalNumericLiteral) {\n return parseInt(str, 8)\n }\n\n // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n return parseFloat(str.replace(/_/g, \"\"))\n }\n\n function stringToBigInt(str) {\n if (typeof BigInt !== \"function\") {\n return null\n }\n\n // `BigInt(value)` throws syntax error if the string contains numeric separators.\n return BigInt(str.replace(/_/g, \"\"))\n }\n\n pp$9.readRadixNumber = function(radix) {\n var start = this.pos;\n this.pos += 2; // 0x\n var val = this.readInt(radix);\n if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n val = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types.num, val)\n };\n\n // Read an integer, octal integer, or floating-point number.\n\n pp$9.readNumber = function(startsWithDot) {\n var start = this.pos;\n if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n var next = this.input.charCodeAt(this.pos);\n if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types.num, val$1)\n }\n if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n if (next === 46 && !octal) { // '.'\n ++this.pos;\n this.readInt(10);\n next = this.input.charCodeAt(this.pos);\n }\n if ((next === 69 || next === 101) && !octal) { // 'eE'\n next = this.input.charCodeAt(++this.pos);\n if (next === 43 || next === 45) { ++this.pos; } // '+-'\n if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n }\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n var val = stringToNumber(this.input.slice(start, this.pos), octal);\n return this.finishToken(types.num, val)\n };\n\n // Read a string value, interpreting backslash-escapes.\n\n pp$9.readCodePoint = function() {\n var ch = this.input.charCodeAt(this.pos), code;\n\n if (ch === 123) { // '{'\n if (this.options.ecmaVersion < 6) { this.unexpected(); }\n var codePos = ++this.pos;\n code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n ++this.pos;\n if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n } else {\n code = this.readHexChar(4);\n }\n return code\n };\n\n function codePointToString$1(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n }\n\n pp$9.readString = function(quote) {\n var out = \"\", chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) { break }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.pos;\n } else if (ch === 0x2028 || ch === 0x2029) {\n if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n if (this.options.locations) {\n this.curLine++;\n this.lineStart = this.pos;\n }\n } else {\n if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(types.string, out)\n };\n\n // Reads template string tokens.\n\n var INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\n pp$9.tryReadTemplateToken = function() {\n this.inTemplateElement = true;\n try {\n this.readTmplToken();\n } catch (err) {\n if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n this.readInvalidTemplateToken();\n } else {\n throw err\n }\n }\n\n this.inTemplateElement = false;\n };\n\n pp$9.invalidStringToken = function(position, message) {\n if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n throw INVALID_TEMPLATE_ESCAPE_ERROR\n } else {\n this.raise(position, message);\n }\n };\n\n pp$9.readTmplToken = function() {\n var out = \"\", chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n if (this.pos === this.start && (this.type === types.template || this.type === types.invalidTemplate)) {\n if (ch === 36) {\n this.pos += 2;\n return this.finishToken(types.dollarBraceL)\n } else {\n ++this.pos;\n return this.finishToken(types.backQuote)\n }\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(types.template, out)\n }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(true);\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n ++this.pos;\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n case 10:\n out += \"\\n\";\n break\n default:\n out += String.fromCharCode(ch);\n break\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n };\n\n // Reads a template token to search for the end, without validating any escape sequences\n pp$9.readInvalidTemplateToken = function() {\n for (; this.pos < this.input.length; this.pos++) {\n switch (this.input[this.pos]) {\n case \"\\\\\":\n ++this.pos;\n break\n\n case \"$\":\n if (this.input[this.pos + 1] !== \"{\") {\n break\n }\n // falls through\n\n case \"`\":\n return this.finishToken(types.invalidTemplate, this.input.slice(this.start, this.pos))\n\n // no default\n }\n }\n this.raise(this.start, \"Unterminated template\");\n };\n\n // Used to read escaped characters\n\n pp$9.readEscapedChar = function(inTemplate) {\n var ch = this.input.charCodeAt(++this.pos);\n ++this.pos;\n switch (ch) {\n case 110: return \"\\n\" // 'n' -> '\\n'\n case 114: return \"\\r\" // 'r' -> '\\r'\n case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n case 117: return codePointToString$1(this.readCodePoint()) // 'u'\n case 116: return \"\\t\" // 't' -> '\\t'\n case 98: return \"\\b\" // 'b' -> '\\b'\n case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n case 102: return \"\\f\" // 'f' -> '\\f'\n case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n case 10: // ' \\n'\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n case 56:\n case 57:\n if (this.strict) {\n this.invalidStringToken(\n this.pos - 1,\n \"Invalid escape sequence\"\n );\n }\n if (inTemplate) {\n var codePos = this.pos - 1;\n\n this.invalidStringToken(\n codePos,\n \"Invalid escape sequence in template string\"\n );\n\n return null\n }\n default:\n if (ch >= 48 && ch <= 55) {\n var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n var octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.pos += octalStr.length - 1;\n ch = this.input.charCodeAt(this.pos);\n if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n this.invalidStringToken(\n this.pos - 1 - octalStr.length,\n inTemplate\n ? \"Octal literal in template string\"\n : \"Octal literal in strict mode\"\n );\n }\n return String.fromCharCode(octal)\n }\n if (isNewLine(ch)) {\n // Unicode new line characters after \\ get removed from output in both\n // template literals and strings\n return \"\"\n }\n return String.fromCharCode(ch)\n }\n };\n\n // Used to read character escape sequences ('\\x', '\\u', '\\U').\n\n pp$9.readHexChar = function(len) {\n var codePos = this.pos;\n var n = this.readInt(16, len);\n if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n return n\n };\n\n // Read an identifier, and return it as a string. Sets `this.containsEsc`\n // to whether the word contained a '\\u' escape.\n //\n // Incrementally adds only escaped chars, adding other chunks as-is\n // as a micro-optimization.\n\n pp$9.readWord1 = function() {\n this.containsEsc = false;\n var word = \"\", first = true, chunkStart = this.pos;\n var astral = this.options.ecmaVersion >= 6;\n while (this.pos < this.input.length) {\n var ch = this.fullCharCodeAtPos();\n if (isIdentifierChar(ch, astral)) {\n this.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) { // \"\\\"\n this.containsEsc = true;\n word += this.input.slice(chunkStart, this.pos);\n var escStart = this.pos;\n if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n ++this.pos;\n var esc = this.readCodePoint();\n if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n word += codePointToString$1(esc);\n chunkStart = this.pos;\n } else {\n break\n }\n first = false;\n }\n return word + this.input.slice(chunkStart, this.pos)\n };\n\n // Read an identifier or keyword token. Will check for reserved\n // words when necessary.\n\n pp$9.readWord = function() {\n var word = this.readWord1();\n var type = types.name;\n if (this.keywords.test(word)) {\n type = keywords$1[word];\n }\n return this.finishToken(type, word)\n };\n\n // Acorn is a tiny, fast JavaScript parser written in JavaScript.\n\n var version = \"8.5.0\";\n\n Parser.acorn = {\n Parser: Parser,\n version: version,\n defaultOptions: defaultOptions,\n Position: Position,\n SourceLocation: SourceLocation,\n getLineInfo: getLineInfo,\n Node: Node,\n TokenType: TokenType,\n tokTypes: types,\n keywordTypes: keywords$1,\n TokContext: TokContext,\n tokContexts: types$1,\n isIdentifierChar: isIdentifierChar,\n isIdentifierStart: isIdentifierStart,\n Token: Token,\n isNewLine: isNewLine,\n lineBreak: lineBreak,\n lineBreakG: lineBreakG,\n nonASCIIwhitespace: nonASCIIwhitespace\n };\n\n // The main exported interface (under `self.acorn` when in the\n // browser) is a `parse` function that takes a code string and\n // returns an abstract syntax tree as specified by [Mozilla parser\n // API][api].\n //\n // [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\n function parse(input, options) {\n return Parser.parse(input, options)\n }\n\n // This function tries to parse a single expression at a given\n // offset in a string. Useful for parsing mixed-language formats\n // that embed JavaScript expressions.\n\n function parseExpressionAt(input, pos, options) {\n return Parser.parseExpressionAt(input, pos, options)\n }\n\n // Acorn is organized as a tokenizer and a recursive-descent parser.\n // The `tokenizer` export provides an interface to the tokenizer.\n\n function tokenizer(input, options) {\n return Parser.tokenizer(input, options)\n }\n\n exports.Node = Node;\n exports.Parser = Parser;\n exports.Position = Position;\n exports.SourceLocation = SourceLocation;\n exports.TokContext = TokContext;\n exports.Token = Token;\n exports.TokenType = TokenType;\n exports.defaultOptions = defaultOptions;\n exports.getLineInfo = getLineInfo;\n exports.isIdentifierChar = isIdentifierChar;\n exports.isIdentifierStart = isIdentifierStart;\n exports.isNewLine = isNewLine;\n exports.keywordTypes = keywords$1;\n exports.lineBreak = lineBreak;\n exports.lineBreakG = lineBreakG;\n exports.nonASCIIwhitespace = nonASCIIwhitespace;\n exports.parse = parse;\n exports.parseExpressionAt = parseExpressionAt;\n exports.tokContexts = types$1;\n exports.tokTypes = types;\n exports.tokenizer = tokenizer;\n exports.version = version;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","\"use strict\"\n\nconst getPrototype = Object.getPrototypeOf || (o => o.__proto__)\n\nconst getAcorn = Parser => {\n if (Parser.acorn) return Parser.acorn\n\n const acorn = require(\"acorn\")\n\n if (acorn.version.indexOf(\"6.\") != 0 && acorn.version.indexOf(\"6.0.\") == 0 && acorn.version.indexOf(\"7.\") != 0) {\n throw new Error(`acorn-private-class-elements requires acorn@^6.1.0 or acorn@7.0.0, not ${acorn.version}`)\n }\n\n // Make sure `Parser` comes from the same acorn as we `require`d,\n // otherwise the comparisons fail.\n for (let cur = Parser; cur && cur !== acorn.Parser; cur = getPrototype(cur)) {\n if (cur !== acorn.Parser) {\n throw new Error(\"acorn-private-class-elements does not support mixing different acorn copies\")\n }\n }\n return acorn\n}\n\nmodule.exports = function(Parser) {\n // Only load this plugin once.\n if (Parser.prototype.parsePrivateName) {\n return Parser\n }\n\n const acorn = getAcorn(Parser)\n\n Parser = class extends Parser {\n _branch() {\n this.__branch = this.__branch || new Parser({ecmaVersion: this.options.ecmaVersion}, this.input)\n this.__branch.end = this.end\n this.__branch.pos = this.pos\n this.__branch.type = this.type\n this.__branch.value = this.value\n this.__branch.containsEsc = this.containsEsc\n return this.__branch\n }\n\n parsePrivateClassElementName(element) {\n element.computed = false\n element.key = this.parsePrivateName()\n if (element.key.name == \"constructor\") this.raise(element.key.start, \"Classes may not have a private element named constructor\")\n const accept = {get: \"set\", set: \"get\"}[element.kind]\n const privateBoundNames = this._privateBoundNames\n if (Object.prototype.hasOwnProperty.call(privateBoundNames, element.key.name) && privateBoundNames[element.key.name] !== accept) {\n this.raise(element.start, \"Duplicate private element\")\n }\n privateBoundNames[element.key.name] = element.kind || true\n delete this._unresolvedPrivateNames[element.key.name]\n return element.key\n }\n\n parsePrivateName() {\n const node = this.startNode()\n node.name = this.value\n this.next()\n this.finishNode(node, \"PrivateIdentifier\")\n if (this.options.allowReserved == \"never\") this.checkUnreserved(node)\n return node\n }\n\n // Parse # token\n getTokenFromCode(code) {\n if (code === 35) {\n ++this.pos\n const word = this.readWord1()\n return this.finishToken(this.privateIdentifierToken, word)\n }\n return super.getTokenFromCode(code)\n }\n\n // Manage stacks and check for undeclared private names\n parseClass(node, isStatement) {\n const oldOuterPrivateBoundNames = this._outerPrivateBoundNames\n this._outerPrivateBoundNames = this._privateBoundNames\n this._privateBoundNames = Object.create(this._privateBoundNames || null)\n const oldOuterUnresolvedPrivateNames = this._outerUnresolvedPrivateNames\n this._outerUnresolvedPrivateNames = this._unresolvedPrivateNames\n this._unresolvedPrivateNames = Object.create(null)\n\n const _return = super.parseClass(node, isStatement)\n\n const unresolvedPrivateNames = this._unresolvedPrivateNames\n this._privateBoundNames = this._outerPrivateBoundNames\n this._outerPrivateBoundNames = oldOuterPrivateBoundNames\n this._unresolvedPrivateNames = this._outerUnresolvedPrivateNames\n this._outerUnresolvedPrivateNames = oldOuterUnresolvedPrivateNames\n if (!this._unresolvedPrivateNames) {\n const names = Object.keys(unresolvedPrivateNames)\n if (names.length) {\n names.sort((n1, n2) => unresolvedPrivateNames[n1] - unresolvedPrivateNames[n2])\n this.raise(unresolvedPrivateNames[names[0]], \"Usage of undeclared private name\")\n }\n } else Object.assign(this._unresolvedPrivateNames, unresolvedPrivateNames)\n return _return\n }\n\n // Class heritage is evaluated with outer private environment\n parseClassSuper(node) {\n const privateBoundNames = this._privateBoundNames\n this._privateBoundNames = this._outerPrivateBoundNames\n const unresolvedPrivateNames = this._unresolvedPrivateNames\n this._unresolvedPrivateNames = this._outerUnresolvedPrivateNames\n const _return = super.parseClassSuper(node)\n this._privateBoundNames = privateBoundNames\n this._unresolvedPrivateNames = unresolvedPrivateNames\n return _return\n }\n\n // Parse private element access\n parseSubscript(base, startPos, startLoc, _noCalls, _maybeAsyncArrow, _optionalChained) {\n const optionalSupported = this.options.ecmaVersion >= 11 && acorn.tokTypes.questionDot\n const branch = this._branch()\n if (!(\n (branch.eat(acorn.tokTypes.dot) || (optionalSupported && branch.eat(acorn.tokTypes.questionDot))) &&\n branch.type == this.privateIdentifierToken\n )) {\n return super.parseSubscript.apply(this, arguments)\n }\n let optional = false\n if (!this.eat(acorn.tokTypes.dot)) {\n this.expect(acorn.tokTypes.questionDot)\n optional = true\n }\n let node = this.startNodeAt(startPos, startLoc)\n node.object = base\n node.computed = false\n if (optionalSupported) {\n node.optional = optional\n }\n if (this.type == this.privateIdentifierToken) {\n if (base.type == \"Super\") {\n this.raise(this.start, \"Cannot access private element on super\")\n }\n node.property = this.parsePrivateName()\n if (!this._privateBoundNames || !this._privateBoundNames[node.property.name]) {\n if (!this._unresolvedPrivateNames) {\n this.raise(node.property.start, \"Usage of undeclared private name\")\n }\n this._unresolvedPrivateNames[node.property.name] = node.property.start\n }\n } else {\n node.property = this.parseIdent(true)\n }\n return this.finishNode(node, \"MemberExpression\")\n }\n\n // Prohibit delete of private class elements\n parseMaybeUnary(refDestructuringErrors, sawUnary) {\n const _return = super.parseMaybeUnary(refDestructuringErrors, sawUnary)\n if (_return.operator == \"delete\") {\n if (_return.argument.type == \"MemberExpression\" && _return.argument.property.type == \"PrivateIdentifier\") {\n this.raise(_return.start, \"Private elements may not be deleted\")\n }\n }\n return _return\n }\n }\n Parser.prototype.privateIdentifierToken = new acorn.TokenType(\"privateIdentifier\")\n return Parser\n}\n","\"use strict\"\n\nconst privateClassElements = require(\"acorn-private-class-elements\")\n\nmodule.exports = function(Parser) {\n const acorn = Parser.acorn || require(\"acorn\")\n const tt = acorn.tokTypes\n\n Parser = privateClassElements(Parser)\n return class extends Parser {\n _maybeParseFieldValue(field) {\n if (this.eat(tt.eq)) {\n const oldInFieldValue = this._inFieldValue\n this._inFieldValue = true\n if (this.type === tt.name && this.value === \"await\" && (this.inAsync || this.options.allowAwaitOutsideFunction)) {\n field.value = this.parseAwait()\n } else field.value = this.parseExpression()\n this._inFieldValue = oldInFieldValue\n } else field.value = null\n }\n\n // Parse fields\n parseClassElement(_constructorAllowsSuper) {\n if (this.options.ecmaVersion >= 8 && (this.type == tt.name || this.type.keyword || this.type == this.privateIdentifierToken || this.type == tt.bracketL || this.type == tt.string || this.type == tt.num)) {\n const branch = this._branch()\n if (branch.type == tt.bracketL) {\n let count = 0\n do {\n if (branch.eat(tt.bracketL)) ++count\n else if (branch.eat(tt.bracketR)) --count\n else branch.next()\n } while (count > 0)\n } else branch.next(true)\n let isField = branch.type == tt.eq || branch.type == tt.semi\n if (!isField && branch.canInsertSemicolon()) {\n isField = branch.type != tt.parenL\n }\n if (isField) {\n const node = this.startNode()\n if (this.type == this.privateIdentifierToken) {\n this.parsePrivateClassElementName(node)\n } else {\n this.parsePropertyName(node)\n }\n if ((node.key.type === \"Identifier\" && node.key.name === \"constructor\") ||\n (node.key.type === \"Literal\" && node.key.value === \"constructor\")) {\n this.raise(node.key.start, \"Classes may not have a field called constructor\")\n }\n this.enterScope(64 | 2 | 1) // See acorn's scopeflags.js\n this._maybeParseFieldValue(node)\n this.exitScope()\n this.finishNode(node, \"PropertyDefinition\")\n this.semicolon()\n return node\n }\n }\n\n return super.parseClassElement.apply(this, arguments)\n }\n\n // Prohibit arguments in class field initializers\n parseIdent(liberal, isBinding) {\n const ident = super.parseIdent(liberal, isBinding)\n if (this._inFieldValue && ident.name == \"arguments\") this.raise(ident.start, \"A class field initializer may not contain arguments\")\n return ident\n }\n }\n}\n","\"use strict\"\n\nconst privateClassElements = require(\"acorn-private-class-elements\")\n\nmodule.exports = function(Parser) {\n const ExtendedParser = privateClassElements(Parser)\n\n const acorn = Parser.acorn || require(\"acorn\")\n const tt = acorn.tokTypes\n\n return class extends ExtendedParser {\n _maybeParseFieldValue(field) {\n if (this.eat(tt.eq)) {\n const oldInFieldValue = this._inStaticFieldScope\n this._inStaticFieldScope = this.currentThisScope()\n field.value = this.parseExpression()\n this._inStaticFieldScope = oldInFieldValue\n } else field.value = null\n }\n\n // Parse fields\n parseClassElement(_constructorAllowsSuper) {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"static\")) {\n return super.parseClassElement.apply(this, arguments)\n }\n\n const branch = this._branch()\n branch.next()\n if ([tt.name, tt.bracketL, tt.string, tt.num, this.privateIdentifierToken].indexOf(branch.type) == -1 && !branch.type.keyword) {\n return super.parseClassElement.apply(this, arguments)\n }\n if (branch.type == tt.bracketL) {\n let count = 0\n do {\n if (branch.eat(tt.bracketL)) ++count\n else if (branch.eat(tt.bracketR)) --count\n else branch.next()\n } while (count > 0)\n } else branch.next()\n if (branch.type != tt.eq && !branch.canInsertSemicolon() && branch.type != tt.semi) {\n return super.parseClassElement.apply(this, arguments)\n }\n\n const node = this.startNode()\n node.static = this.eatContextual(\"static\")\n if (this.type == this.privateIdentifierToken) {\n this.parsePrivateClassElementName(node)\n } else {\n this.parsePropertyName(node)\n }\n if ((node.key.type === \"Identifier\" && node.key.name === \"constructor\") ||\n (node.key.type === \"Literal\" && !node.computed && node.key.value === \"constructor\")) {\n this.raise(node.key.start, \"Classes may not have a field called constructor\")\n }\n if ((node.key.name || node.key.value) === \"prototype\" && !node.computed) {\n this.raise(node.key.start, \"Classes may not have a static property named prototype\")\n }\n\n this.enterScope(64 | 2 | 1) // See acorn's scopeflags.js\n this._maybeParseFieldValue(node)\n this.exitScope()\n this.finishNode(node, \"PropertyDefinition\")\n this.semicolon()\n return node\n }\n\n // Parse private static methods\n parsePropertyName(prop) {\n if (prop.static && this.type == this.privateIdentifierToken) {\n this.parsePrivateClassElementName(prop)\n } else {\n super.parsePropertyName(prop)\n }\n }\n\n // Prohibit arguments in class field initializers\n parseIdent(liberal, isBinding) {\n const ident = super.parseIdent(liberal, isBinding)\n if (this._inStaticFieldScope && this.currentThisScope() === this._inStaticFieldScope && ident.name == \"arguments\") {\n this.raise(ident.start, \"A static class field initializer may not contain arguments\")\n }\n return ident\n }\n }\n}\n","'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n","import chalk from 'chalk'\nimport { RollupError } from 'rollup'\nimport { ViteDevServer } from '../..'\nimport { Connect } from 'types/connect'\nimport { pad } from '../../utils'\nimport strip from 'strip-ansi'\nimport { ErrorPayload } from 'types/hmrPayload'\n\nexport function prepareError(err: Error | RollupError): ErrorPayload['err'] {\n // only copy the information we need and avoid serializing unnecessary\n // properties, since some errors may attach full objects (e.g. PostCSS)\n return {\n message: strip(err.message),\n stack: strip(cleanStack(err.stack || '')),\n id: (err as RollupError).id,\n frame: strip((err as RollupError).frame || ''),\n plugin: (err as RollupError).plugin,\n pluginCode: (err as RollupError).pluginCode,\n loc: (err as RollupError).loc\n }\n}\n\nexport function buildErrorMessage(\n err: RollupError,\n args: string[] = [],\n includeStack = true\n): string {\n if (err.plugin) args.push(` Plugin: ${chalk.magenta(err.plugin)}`)\n if (err.id) args.push(` File: ${chalk.cyan(err.id)}`)\n if (err.frame) args.push(chalk.yellow(pad(err.frame)))\n if (includeStack && err.stack) args.push(pad(cleanStack(err.stack)))\n return args.join('\\n')\n}\n\nfunction cleanStack(stack: string) {\n return stack\n .split(/\\n/g)\n .filter((l) => /^\\s*at/.test(l))\n .join('\\n')\n}\n\nexport function logError(server: ViteDevServer, err: RollupError): void {\n const msg = buildErrorMessage(err, [\n chalk.red(`Internal server error: ${err.message}`)\n ])\n\n server.config.logger.error(msg, {\n clear: true,\n timestamp: true,\n error: err\n })\n\n server.ws.send({\n type: 'error',\n err: prepareError(err)\n })\n}\n\nexport function errorMiddleware(\n server: ViteDevServer,\n allowNext = false\n): Connect.ErrorHandleFunction {\n // note the 4 args must be kept for connect to treat this as error middleware\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return function viteErrorMiddleware(err: RollupError, _req, res, next) {\n logError(server, err)\n\n if (allowNext) {\n next()\n } else {\n if (err instanceof AccessRestrictedError) {\n res.statusCode = 403\n res.write(renderErrorHTML(err.message))\n res.end()\n }\n res.statusCode = 500\n res.end()\n }\n }\n}\n\nexport class AccessRestrictedError extends Error {\n constructor(msg: string) {\n super(msg)\n }\n}\n\nexport function renderErrorHTML(msg: string): string {\n // to have syntax highlighting and autocompletion in IDE\n const html = String.raw\n return html`\n <body>\n <h1>403 Restricted</h1>\n <p>${msg.replace(/\\n/g, '<br/>')}</p>\n <style>\n body {\n padding: 1em 2em;\n }\n </style>\n </body>\n `\n}\n","/**\n * This file is refactored into TypeScript based on\n * https://github.com/preactjs/wmr/blob/main/packages/wmr/src/lib/rollup-plugin-container.js\n */\n\n/**\nhttps://github.com/preactjs/wmr/blob/master/LICENSE\n\nMIT License\n\nCopyright (c) 2020 The Preact Authors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\nimport fs from 'fs'\nimport { resolve, join } from 'path'\nimport { Plugin } from '../plugin'\nimport {\n InputOptions,\n MinimalPluginContext,\n OutputOptions,\n ModuleInfo,\n NormalizedInputOptions,\n PartialResolvedId,\n ResolvedId,\n PluginContext as RollupPluginContext,\n LoadResult,\n SourceDescription,\n EmittedFile,\n SourceMap,\n RollupError,\n TransformResult\n} from 'rollup'\nimport * as acorn from 'acorn'\nimport acornClassFields from 'acorn-class-fields'\nimport acornStaticClassFeatures from 'acorn-static-class-features'\nimport { RawSourceMap } from '@ampproject/remapping/dist/types/types'\nimport { combineSourcemaps } from '../utils'\nimport MagicString from 'magic-string'\nimport { FSWatcher } from 'chokidar'\nimport {\n createDebugger,\n ensureWatchedFile,\n generateCodeFrame,\n isObject,\n isExternalUrl,\n normalizePath,\n numberToPos,\n prettifyUrl,\n timeFrom\n} from '../utils'\nimport { FS_PREFIX } from '../constants'\nimport chalk from 'chalk'\nimport { ResolvedConfig } from '../config'\nimport { buildErrorMessage } from './middlewares/error'\nimport { performance } from 'perf_hooks'\n\nexport interface PluginContainerOptions {\n cwd?: string\n output?: OutputOptions\n modules?: Map<string, { info: ModuleInfo }>\n writeFile?: (name: string, source: string | Uint8Array) => void\n}\n\nexport interface PluginContainer {\n options: InputOptions\n buildStart(options: InputOptions): Promise<void>\n resolveId(\n id: string,\n importer?: string,\n skip?: Set<Plugin>,\n ssr?: boolean\n ): Promise<PartialResolvedId | null>\n transform(\n code: string,\n id: string,\n inMap?: SourceDescription['map'],\n ssr?: boolean\n ): Promise<SourceDescription | null>\n load(id: string, ssr?: boolean): Promise<LoadResult | null>\n close(): Promise<void>\n}\n\ntype PluginContext = Omit<\n RollupPluginContext,\n // not documented\n | 'cache'\n // deprecated\n | 'emitAsset'\n | 'emitChunk'\n | 'getAssetFileName'\n | 'getChunkFileName'\n | 'isExternal'\n | 'moduleIds'\n | 'resolveId'\n>\n\nexport let parser = acorn.Parser.extend(\n acornClassFields,\n acornStaticClassFeatures\n)\n\nexport async function createPluginContainer(\n { plugins, logger, root, build: { rollupOptions } }: ResolvedConfig,\n watcher?: FSWatcher\n): Promise<PluginContainer> {\n const isDebug = process.env.DEBUG\n\n const seenResolves: Record<string, true | undefined> = {}\n const debugResolve = createDebugger('vite:resolve')\n const debugPluginResolve = createDebugger('vite:plugin-resolve', {\n onlyWhenFocused: 'vite:plugin'\n })\n const debugPluginTransform = createDebugger('vite:plugin-transform', {\n onlyWhenFocused: 'vite:plugin'\n })\n\n // ---------------------------------------------------------------------------\n\n const MODULES = new Map()\n const watchFiles = new Set<string>()\n\n // get rollup version\n const rollupPkgPath = resolve(require.resolve('rollup'), '../../package.json')\n const minimalContext: MinimalPluginContext = {\n meta: {\n rollupVersion: JSON.parse(fs.readFileSync(rollupPkgPath, 'utf-8'))\n .version,\n watchMode: true\n }\n }\n\n function warnIncompatibleMethod(method: string, plugin: string) {\n logger.warn(\n chalk.cyan(`[plugin:${plugin}] `) +\n chalk.yellow(\n `context method ${chalk.bold(\n `${method}()`\n )} is not supported in serve mode. This plugin is likely not vite-compatible.`\n )\n )\n }\n\n // we should create a new context for each async hook pipeline so that the\n // active plugin in that pipeline can be tracked in a concurrency-safe manner.\n // using a class to make creating new contexts more efficient\n class Context implements PluginContext {\n meta = minimalContext.meta\n ssr = false\n _activePlugin: Plugin | null\n _activeId: string | null = null\n _activeCode: string | null = null\n _resolveSkips?: Set<Plugin>\n _addedImports: Set<string> | null = null\n\n constructor(initialPlugin?: Plugin) {\n this._activePlugin = initialPlugin || null\n }\n\n parse(code: string, opts: any = {}) {\n return parser.parse(code, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n locations: true,\n ...opts\n })\n }\n\n async resolve(\n id: string,\n importer?: string,\n options?: { skipSelf?: boolean }\n ) {\n let skips: Set<Plugin> | undefined\n if (options?.skipSelf && this._activePlugin) {\n skips = new Set(this._resolveSkips)\n skips.add(this._activePlugin)\n }\n let out = await container.resolveId(id, importer, skips, this.ssr)\n if (typeof out === 'string') out = { id: out }\n return out as ResolvedId | null\n }\n\n getModuleInfo(id: string) {\n let mod = MODULES.get(id)\n if (mod) return mod.info\n mod = {\n /** @type {import('rollup').ModuleInfo} */\n // @ts-ignore-next\n info: {}\n }\n MODULES.set(id, mod)\n return mod.info\n }\n\n getModuleIds() {\n return MODULES.keys()\n }\n\n addWatchFile(id: string) {\n watchFiles.add(id)\n ;(this._addedImports || (this._addedImports = new Set())).add(id)\n if (watcher) ensureWatchedFile(watcher, id, root)\n }\n\n getWatchFiles() {\n return [...watchFiles]\n }\n\n emitFile(assetOrFile: EmittedFile) {\n warnIncompatibleMethod(`emitFile`, this._activePlugin!.name)\n return ''\n }\n\n setAssetSource() {\n warnIncompatibleMethod(`setAssetSource`, this._activePlugin!.name)\n }\n\n getFileName() {\n warnIncompatibleMethod(`getFileName`, this._activePlugin!.name)\n return ''\n }\n\n warn(\n e: string | RollupError,\n position?: number | { column: number; line: number }\n ) {\n const err = formatError(e, position, this)\n const msg = buildErrorMessage(\n err,\n [chalk.yellow(`warning: ${err.message}`)],\n false\n )\n logger.warn(msg, {\n clear: true,\n timestamp: true\n })\n }\n\n error(\n e: string | RollupError,\n position?: number | { column: number; line: number }\n ): never {\n // error thrown here is caught by the transform middleware and passed on\n // the the error middleware.\n throw formatError(e, position, this)\n }\n }\n\n function formatError(\n e: string | RollupError,\n position: number | { column: number; line: number } | undefined,\n ctx: Context\n ) {\n const err = (typeof e === 'string' ? new Error(e) : e) as RollupError\n if (ctx._activePlugin) err.plugin = ctx._activePlugin.name\n if (ctx._activeId && !err.id) err.id = ctx._activeId\n if (ctx._activeCode) {\n err.pluginCode = ctx._activeCode\n const pos =\n position != null\n ? position\n : err.pos != null\n ? err.pos\n : // some rollup plugins, e.g. json, sets position instead of pos\n (err as any).position\n if (pos != null) {\n let errLocation\n try {\n errLocation = numberToPos(ctx._activeCode, pos)\n } catch (err2) {\n logger.error(\n chalk.red(\n `Error in error handler:\\n${err2.stack || err2.message}\\n`\n ),\n // print extra newline to separate the two errors\n { error: err2 }\n )\n throw err\n }\n err.loc = err.loc || {\n file: err.id,\n ...errLocation\n }\n err.frame = err.frame || generateCodeFrame(ctx._activeCode, pos)\n } else if (err.loc) {\n // css preprocessors may report errors in an included file\n if (!err.frame) {\n let code = ctx._activeCode\n if (err.loc.file) {\n err.id = normalizePath(err.loc.file)\n try {\n code = fs.readFileSync(err.loc.file, 'utf-8')\n } catch {}\n }\n err.frame = generateCodeFrame(code, err.loc)\n }\n } else if ((err as any).line && (err as any).column) {\n err.loc = {\n file: err.id,\n line: (err as any).line,\n column: (err as any).column\n }\n err.frame = err.frame || generateCodeFrame(ctx._activeCode, err.loc)\n }\n }\n return err\n }\n\n class TransformContext extends Context {\n filename: string\n originalCode: string\n originalSourcemap: SourceMap | null = null\n sourcemapChain: NonNullable<SourceDescription['map']>[] = []\n combinedMap: SourceMap | null = null\n\n constructor(filename: string, code: string, inMap?: SourceMap | string) {\n super()\n this.filename = filename\n this.originalCode = code\n if (inMap) {\n this.sourcemapChain.push(inMap)\n }\n }\n\n _getCombinedSourcemap(createIfNull = false) {\n let combinedMap = this.combinedMap\n for (let m of this.sourcemapChain) {\n if (typeof m === 'string') m = JSON.parse(m)\n if (!('version' in (m as SourceMap))) {\n // empty, nullified source map\n combinedMap = this.combinedMap = null\n this.sourcemapChain.length = 0\n break\n }\n if (!combinedMap) {\n combinedMap = m as SourceMap\n } else {\n combinedMap = combineSourcemaps(this.filename, [\n {\n ...(m as RawSourceMap),\n sourcesContent: combinedMap.sourcesContent\n },\n combinedMap as RawSourceMap\n ]) as SourceMap\n }\n }\n if (!combinedMap) {\n return createIfNull\n ? new MagicString(this.originalCode).generateMap({\n includeContent: true,\n hires: true,\n source: this.filename\n })\n : null\n }\n if (combinedMap !== this.combinedMap) {\n this.combinedMap = combinedMap\n this.sourcemapChain.length = 0\n }\n return this.combinedMap\n }\n\n getCombinedSourcemap() {\n return this._getCombinedSourcemap(true) as SourceMap\n }\n }\n\n let closed = false\n\n const container: PluginContainer = {\n options: await (async () => {\n let options = rollupOptions\n for (const plugin of plugins) {\n if (!plugin.options) continue\n options =\n (await plugin.options.call(minimalContext, options)) || options\n }\n if (options.acornInjectPlugins) {\n parser = acorn.Parser.extend(\n ...[acornClassFields, acornStaticClassFeatures].concat(\n options.acornInjectPlugins\n )\n )\n }\n return {\n acorn,\n acornInjectPlugins: [],\n ...options\n }\n })(),\n\n async buildStart() {\n await Promise.all(\n plugins.map((plugin) => {\n if (plugin.buildStart) {\n return plugin.buildStart.call(\n new Context(plugin) as any,\n container.options as NormalizedInputOptions\n )\n }\n })\n )\n },\n\n async resolveId(rawId, importer = join(root, 'index.html'), skips, ssr) {\n const ctx = new Context()\n ctx.ssr = !!ssr\n ctx._resolveSkips = skips\n const resolveStart = isDebug ? performance.now() : 0\n\n let id: string | null = null\n const partial: Partial<PartialResolvedId> = {}\n for (const plugin of plugins) {\n if (!plugin.resolveId) continue\n if (skips?.has(plugin)) continue\n\n ctx._activePlugin = plugin\n\n const pluginResolveStart = isDebug ? performance.now() : 0\n const result = await plugin.resolveId.call(\n ctx as any,\n rawId,\n importer,\n {},\n ssr\n )\n if (!result) continue\n\n if (typeof result === 'string') {\n id = result\n } else {\n id = result.id\n Object.assign(partial, result)\n }\n\n isDebug &&\n debugPluginResolve(\n timeFrom(pluginResolveStart),\n plugin.name,\n prettifyUrl(id, root)\n )\n\n // resolveId() is hookFirst - first non-null result is returned.\n break\n }\n\n if (isDebug && rawId !== id && !rawId.startsWith(FS_PREFIX)) {\n const key = rawId + id\n // avoid spamming\n if (!seenResolves[key]) {\n seenResolves[key] = true\n debugResolve(\n `${timeFrom(resolveStart)} ${chalk.cyan(rawId)} -> ${chalk.dim(id)}`\n )\n }\n }\n\n if (id) {\n partial.id = isExternalUrl(id) ? id : normalizePath(id)\n return partial as PartialResolvedId\n } else {\n return null\n }\n },\n\n async load(id, ssr) {\n const ctx = new Context()\n ctx.ssr = !!ssr\n for (const plugin of plugins) {\n if (!plugin.load) continue\n ctx._activePlugin = plugin\n const result = await plugin.load.call(ctx as any, id, ssr)\n if (result != null) {\n return result\n }\n }\n return null\n },\n\n async transform(code, id, inMap, ssr) {\n const ctx = new TransformContext(id, code, inMap as SourceMap)\n ctx.ssr = !!ssr\n for (const plugin of plugins) {\n if (!plugin.transform) continue\n ctx._activePlugin = plugin\n ctx._activeId = id\n ctx._activeCode = code\n const start = isDebug ? performance.now() : 0\n let result: TransformResult | string | undefined\n try {\n result = await plugin.transform.call(ctx as any, code, id, ssr)\n } catch (e) {\n ctx.error(e)\n }\n if (!result) continue\n isDebug &&\n debugPluginTransform(\n timeFrom(start),\n plugin.name,\n prettifyUrl(id, root)\n )\n if (isObject(result)) {\n code = result.code || ''\n if (result.map) ctx.sourcemapChain.push(result.map)\n } else {\n code = result\n }\n }\n return {\n code,\n map: ctx._getCombinedSourcemap()\n }\n },\n\n async close() {\n if (closed) return\n const ctx = new Context()\n await Promise.all(\n plugins.map((p) => p.buildEnd && p.buildEnd.call(ctx as any))\n )\n await Promise.all(\n plugins.map((p) => p.closeBundle && p.closeBundle.call(ctx as any))\n )\n closed = true\n }\n }\n\n return container\n}\n","import fs from 'fs'\nimport path from 'path'\nimport glob from 'fast-glob'\nimport { ResolvedConfig } from '..'\nimport { Loader, Plugin, build, transform } from 'esbuild'\nimport {\n KNOWN_ASSET_TYPES,\n JS_TYPES_RE,\n SPECIAL_QUERY_RE,\n OPTIMIZABLE_ENTRY_RE\n} from '../constants'\nimport {\n createDebugger,\n normalizePath,\n isObject,\n cleanUrl,\n externalRE,\n dataUrlRE,\n multilineCommentsRE,\n singlelineCommentsRE\n} from '../utils'\nimport {\n createPluginContainer,\n PluginContainer\n} from '../server/pluginContainer'\nimport { init, parse } from 'es-module-lexer'\nimport MagicString from 'magic-string'\nimport { transformImportGlob } from '../importGlob'\nimport { performance } from 'perf_hooks'\nimport chalk from 'chalk'\n\nconst debug = createDebugger('vite:deps')\n\nconst htmlTypesRE = /\\.(html|vue|svelte|astro)$/\n\n// A simple regex to detect import sources. This is only used on\n// <script lang=\"ts\"> blocks in vue (setup only) or svelte files, since\n// seemingly unused imports are dropped by esbuild when transpiling TS which\n// prevents it from crawling further.\n// We can't use es-module-lexer because it can't handle TS, and don't want to\n// use Acorn because it's slow. Luckily this doesn't have to be bullet proof\n// since even missed imports can be caught at runtime, and false positives will\n// simply be ignored.\nexport const importsRE =\n /(?<!\\/\\/.*)(?<=^|;|\\*\\/)\\s*import(?!\\s+type)(?:[\\w*{}\\n\\r\\t, ]+from\\s*)?\\s*(\"[^\"]+\"|'[^']+')\\s*(?=$|;|\\/\\/|\\/\\*)/gm\n\nexport async function scanImports(config: ResolvedConfig): Promise<{\n deps: Record<string, string>\n missing: Record<string, string>\n}> {\n const start = performance.now()\n\n let entries: string[] = []\n\n const explicitEntryPatterns = config.optimizeDeps.entries\n const buildInput = config.build.rollupOptions?.input\n\n if (explicitEntryPatterns) {\n entries = await globEntries(explicitEntryPatterns, config)\n } else if (buildInput) {\n const resolvePath = (p: string) => path.resolve(config.root, p)\n if (typeof buildInput === 'string') {\n entries = [resolvePath(buildInput)]\n } else if (Array.isArray(buildInput)) {\n entries = buildInput.map(resolvePath)\n } else if (isObject(buildInput)) {\n entries = Object.values(buildInput).map(resolvePath)\n } else {\n throw new Error('invalid rollupOptions.input value.')\n }\n } else {\n entries = await globEntries('**/*.html', config)\n }\n\n // Non-supported entry file types and virtual files should not be scanned for\n // dependencies.\n entries = entries.filter(\n (entry) =>\n (JS_TYPES_RE.test(entry) || htmlTypesRE.test(entry)) &&\n fs.existsSync(entry)\n )\n\n if (!entries.length) {\n if (!explicitEntryPatterns && !config.optimizeDeps.include) {\n config.logger.warn(\n chalk.yellow(\n '(!) Could not auto-determine entry point from rollupOptions or html files ' +\n 'and there are no explicit optimizeDeps.include patterns. ' +\n 'Skipping dependency pre-bundling.'\n )\n )\n }\n return { deps: {}, missing: {} }\n } else {\n debug(`Crawling dependencies using entries:\\n ${entries.join('\\n ')}`)\n }\n\n const deps: Record<string, string> = {}\n const missing: Record<string, string> = {}\n const container = await createPluginContainer(config)\n const plugin = esbuildScanPlugin(config, container, deps, missing, entries)\n\n const { plugins = [], ...esbuildOptions } =\n config.optimizeDeps?.esbuildOptions ?? {}\n\n await Promise.all(\n entries.map((entry) =>\n build({\n absWorkingDir: process.cwd(),\n write: false,\n entryPoints: [entry],\n bundle: true,\n format: 'esm',\n logLevel: 'error',\n plugins: [...plugins, plugin],\n ...esbuildOptions\n })\n )\n )\n\n debug(`Scan completed in ${(performance.now() - start).toFixed(2)}ms:`, deps)\n\n return {\n deps,\n missing\n }\n}\n\nfunction globEntries(pattern: string | string[], config: ResolvedConfig) {\n return glob(pattern, {\n cwd: config.root,\n ignore: [\n '**/node_modules/**',\n `**/${config.build.outDir}/**`,\n `**/__tests__/**`\n ],\n absolute: true\n })\n}\n\nconst scriptModuleRE =\n /(<script\\b[^>]*type\\s*=\\s*(?:\"module\"|'module')[^>]*>)(.*?)<\\/script>/gims\nexport const scriptRE = /(<script\\b(?:\\s[^>]*>|>))(.*?)<\\/script>/gims\nexport const commentRE = /<!--(.|[\\r\\n])*?-->/\nconst srcRE = /\\bsrc\\s*=\\s*(?:\"([^\"]+)\"|'([^']+)'|([^\\s'\">]+))/im\nconst typeRE = /\\btype\\s*=\\s*(?:\"([^\"]+)\"|'([^']+)'|([^\\s'\">]+))/im\nconst langRE = /\\blang\\s*=\\s*(?:\"([^\"]+)\"|'([^']+)'|([^\\s'\">]+))/im\n\nfunction esbuildScanPlugin(\n config: ResolvedConfig,\n container: PluginContainer,\n depImports: Record<string, string>,\n missing: Record<string, string>,\n entries: string[]\n): Plugin {\n const seen = new Map<string, string | undefined>()\n\n const resolve = async (id: string, importer?: string) => {\n const key = id + (importer && path.dirname(importer))\n if (seen.has(key)) {\n return seen.get(key)\n }\n const resolved = await container.resolveId(\n id,\n importer && normalizePath(importer)\n )\n const res = resolved?.id\n seen.set(key, res)\n return res\n }\n\n const include = config.optimizeDeps?.include\n const exclude = [\n ...(config.optimizeDeps?.exclude || []),\n '@vite/client',\n '@vite/env'\n ]\n\n const externalUnlessEntry = ({ path }: { path: string }) => ({\n path,\n external: !entries.includes(path)\n })\n\n return {\n name: 'vite:dep-scan',\n setup(build) {\n // external urls\n build.onResolve({ filter: externalRE }, ({ path }) => ({\n path,\n external: true\n }))\n\n // data urls\n build.onResolve({ filter: dataUrlRE }, ({ path }) => ({\n path,\n external: true\n }))\n\n // html types: extract script contents -----------------------------------\n build.onResolve({ filter: htmlTypesRE }, async ({ path, importer }) => {\n return {\n path: await resolve(path, importer),\n namespace: 'html'\n }\n })\n\n // extract scripts inside HTML-like files and treat it as a js module\n build.onLoad(\n { filter: htmlTypesRE, namespace: 'html' },\n async ({ path }) => {\n let raw = fs.readFileSync(path, 'utf-8')\n // Avoid matching the content of the comment\n raw = raw.replace(commentRE, '<!---->')\n const isHtml = path.endsWith('.html')\n const regex = isHtml ? scriptModuleRE : scriptRE\n regex.lastIndex = 0\n let js = ''\n let loader: Loader = 'js'\n let match: RegExpExecArray | null\n while ((match = regex.exec(raw))) {\n const [, openTag, content] = match\n const srcMatch = openTag.match(srcRE)\n const typeMatch = openTag.match(typeRE)\n const langMatch = openTag.match(langRE)\n const type =\n typeMatch && (typeMatch[1] || typeMatch[2] || typeMatch[3])\n const lang =\n langMatch && (langMatch[1] || langMatch[2] || langMatch[3])\n // skip type=\"application/ld+json\" and other non-JS types\n if (\n type &&\n !(\n type.includes('javascript') ||\n type.includes('ecmascript') ||\n type === 'module'\n )\n ) {\n continue\n }\n if (lang === 'ts' || lang === 'tsx' || lang === 'jsx') {\n loader = lang\n }\n if (srcMatch) {\n const src = srcMatch[1] || srcMatch[2] || srcMatch[3]\n js += `import ${JSON.stringify(src)}\\n`\n } else if (content.trim()) {\n js += content + '\\n'\n }\n }\n // empty singleline & multiline comments to avoid matching comments\n const code = js\n .replace(multilineCommentsRE, '/* */')\n .replace(singlelineCommentsRE, '')\n\n if (\n loader.startsWith('ts') &&\n (path.endsWith('.svelte') ||\n (path.endsWith('.vue') && /<script\\s+setup/.test(raw)))\n ) {\n // when using TS + (Vue + <script setup>) or Svelte, imports may seem\n // unused to esbuild and dropped in the build output, which prevents\n // esbuild from crawling further.\n // the solution is to add `import 'x'` for every source to force\n // esbuild to keep crawling due to potential side effects.\n let m\n while ((m = importsRE.exec(code)) != null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (m.index === importsRE.lastIndex) {\n importsRE.lastIndex++\n }\n js += `\\nimport ${m[1]}`\n }\n }\n\n // This will trigger incorrectly if `export default` is contained\n // anywhere in a string. Svelte and Astro files can't have\n // `export default` as code so we know if it's encountered it's a\n // false positive (e.g. contained in a string)\n if (!path.endsWith('.vue') || !js.includes('export default')) {\n js += '\\nexport default {}'\n }\n\n if (js.includes('import.meta.glob')) {\n return {\n // transformGlob already transforms to js\n loader: 'js',\n contents: await transformGlob(js, path, config.root, loader)\n }\n }\n\n return {\n loader,\n contents: js\n }\n }\n )\n\n // bare imports: record and externalize ----------------------------------\n build.onResolve(\n {\n // avoid matching windows volume\n filter: /^[\\w@][^:]/\n },\n async ({ path: id, importer }) => {\n if (exclude?.some((e) => e === id || id.startsWith(e + '/'))) {\n return externalUnlessEntry({ path: id })\n }\n if (depImports[id]) {\n return externalUnlessEntry({ path: id })\n }\n const resolved = await resolve(id, importer)\n if (resolved) {\n if (shouldExternalizeDep(resolved, id)) {\n return externalUnlessEntry({ path: id })\n }\n if (resolved.includes('node_modules') || include?.includes(id)) {\n // dependency or forced included, externalize and stop crawling\n if (OPTIMIZABLE_ENTRY_RE.test(resolved)) {\n depImports[id] = resolved\n }\n return externalUnlessEntry({ path: id })\n } else {\n const namespace = htmlTypesRE.test(resolved) ? 'html' : undefined\n // linked package, keep crawling\n return {\n path: path.resolve(resolved),\n namespace\n }\n }\n } else {\n missing[id] = normalizePath(importer)\n }\n }\n )\n\n // Externalized file types -----------------------------------------------\n // these are done on raw ids using esbuild's native regex filter so it\n // should be faster than doing it in the catch-all via js\n // they are done after the bare import resolve because a package name\n // may end with these extensions\n\n // css & json\n build.onResolve(\n {\n filter: /\\.(css|less|sass|scss|styl|stylus|pcss|postcss|json)$/\n },\n externalUnlessEntry\n )\n\n // known asset types\n build.onResolve(\n {\n filter: new RegExp(`\\\\.(${KNOWN_ASSET_TYPES.join('|')})$`)\n },\n externalUnlessEntry\n )\n\n // known vite query types: ?worker, ?raw\n build.onResolve({ filter: SPECIAL_QUERY_RE }, ({ path }) => ({\n path,\n external: true\n }))\n\n // catch all -------------------------------------------------------------\n\n build.onResolve(\n {\n filter: /.*/\n },\n async ({ path: id, importer }) => {\n // use vite resolver to support urls and omitted extensions\n const resolved = await resolve(id, importer)\n if (resolved) {\n if (shouldExternalizeDep(resolved, id)) {\n return externalUnlessEntry({ path: id })\n }\n\n const namespace = htmlTypesRE.test(resolved) ? 'html' : undefined\n\n return {\n path: path.resolve(cleanUrl(resolved)),\n namespace\n }\n } else {\n // resolve failed... probably unsupported type\n return externalUnlessEntry({ path: id })\n }\n }\n )\n\n // for jsx/tsx, we need to access the content and check for\n // presence of import.meta.glob, since it results in import relationships\n // but isn't crawled by esbuild.\n build.onLoad({ filter: JS_TYPES_RE }, ({ path: id }) => {\n let ext = path.extname(id).slice(1)\n if (ext === 'mjs') ext = 'js'\n\n let contents = fs.readFileSync(id, 'utf-8')\n if (ext.endsWith('x') && config.esbuild && config.esbuild.jsxInject) {\n contents = config.esbuild.jsxInject + `\\n` + contents\n }\n\n if (contents.includes('import.meta.glob')) {\n return transformGlob(contents, id, config.root, ext as Loader).then(\n (contents) => ({\n loader: ext as Loader,\n contents\n })\n )\n }\n return {\n loader: ext as Loader,\n contents\n }\n })\n }\n }\n}\n\nasync function transformGlob(\n source: string,\n importer: string,\n root: string,\n loader: Loader\n) {\n // transform the content first since es-module-lexer can't handle non-js\n if (loader !== 'js') {\n source = (await transform(source, { loader })).code\n }\n\n await init\n const imports = parse(source)[0]\n const s = new MagicString(source)\n for (let index = 0; index < imports.length; index++) {\n const { s: start, e: end, ss: expStart } = imports[index]\n const url = source.slice(start, end)\n if (url !== 'import.meta') continue\n if (source.slice(end, end + 5) !== '.glob') continue\n const { importsString, exp, endIndex } = await transformImportGlob(\n source,\n start,\n normalizePath(importer),\n index,\n root\n )\n s.prepend(importsString)\n s.overwrite(expStart, endIndex, exp)\n }\n return s.toString()\n}\n\nexport function shouldExternalizeDep(\n resolvedId: string,\n rawId: string\n): boolean {\n // not a valid file path\n if (!path.isAbsolute(resolvedId)) {\n return true\n }\n // virtual id\n if (resolvedId === rawId || resolvedId.includes('\\0')) {\n return true\n }\n // resolved is not a scannable type\n if (!JS_TYPES_RE.test(resolvedId) && !htmlTypesRE.test(resolvedId)) {\n return true\n }\n return false\n}\n","import { Plugin } from '../plugin'\nimport MagicString from 'magic-string'\nimport path from 'path'\nimport { fileToUrl } from './asset'\nimport { ResolvedConfig } from '../config'\nimport { multilineCommentsRE, singlelineCommentsRE } from '../utils'\n\n/**\n * Convert `new URL('./foo.png', import.meta.url)` to its resolved built URL\n *\n * Supports template string with dynamic segments:\n * ```\n * new URL(`./dir/${name}.png`, import.meta.url)\n * // transformed to\n * import.meta.globEager('./dir/**.png')[`./dir/${name}.png`].default\n * ```\n */\nexport function assetImportMetaUrlPlugin(config: ResolvedConfig): Plugin {\n return {\n name: 'vite:asset-import-meta-url',\n async transform(code, id, ssr) {\n if (code.includes('new URL') && code.includes(`import.meta.url`)) {\n const importMetaUrlRE =\n /\\bnew\\s+URL\\s*\\(\\s*('[^']+'|\"[^\"]+\"|`[^`]+`)\\s*,\\s*import\\.meta\\.url\\s*\\)/g\n const noCommentsCode = code\n .replace(multilineCommentsRE, (m) => ' '.repeat(m.length))\n .replace(singlelineCommentsRE, (m) => ' '.repeat(m.length))\n let s: MagicString | null = null\n let match: RegExpExecArray | null\n while ((match = importMetaUrlRE.exec(noCommentsCode))) {\n const { 0: exp, 1: rawUrl, index } = match\n\n if (ssr) {\n this.error(\n `\\`new URL(url, import.meta.url)\\` is not supported in SSR.`,\n index\n )\n }\n\n if (!s) s = new MagicString(code)\n\n // potential dynamic template string\n if (rawUrl[0] === '`' && /\\$\\{/.test(rawUrl)) {\n const ast = this.parse(rawUrl)\n const templateLiteral = (ast as any).body[0].expression\n if (templateLiteral.expressions.length) {\n const pattern = buildGlobPattern(templateLiteral)\n // Note: native import.meta.url is not supported in the baseline\n // target so we use the global location here. It can be\n // window.location or self.location in case it is used in a Web Worker.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Window/self\n s.overwrite(\n index,\n index + exp.length,\n `new URL(import.meta.globEagerDefault(${JSON.stringify(\n pattern\n )})[${rawUrl}], self.location)`\n )\n continue\n }\n }\n\n const url = rawUrl.slice(1, -1)\n const file = path.resolve(path.dirname(id), url)\n const builtUrl = await fileToUrl(file, config, this)\n s.overwrite(\n index,\n index + exp.length,\n `new URL(${JSON.stringify(builtUrl)}, self.location)`\n )\n }\n if (s) {\n return {\n code: s.toString(),\n map: config.build.sourcemap ? s.generateMap({ hires: true }) : null\n }\n }\n }\n return null\n }\n }\n}\n\nfunction buildGlobPattern(ast: any) {\n let pattern = ''\n let lastElementIndex = -1\n for (const exp of ast.expressions) {\n for (let i = lastElementIndex + 1; i < ast.quasis.length; i++) {\n const el = ast.quasis[i]\n if (el.end < exp.start) {\n pattern += el.value.raw\n lastElementIndex = i\n }\n }\n pattern += '**'\n }\n for (let i = lastElementIndex + 1; i < ast.quasis.length; i++) {\n pattern += ast.quasis[i].value.raw\n }\n return pattern\n}\n","import { promises as fs } from 'fs'\nimport { Plugin } from '..'\nimport { cleanUrl } from '../utils'\n\n/**\n * A plugin to provide build load fallback for arbitrary request with queries.\n */\nexport function loadFallbackPlugin(): Plugin {\n return {\n name: 'vite:load-fallback',\n async load(id) {\n try {\n return fs.readFile(cleanUrl(id), 'utf-8')\n } catch (e) {\n return fs.readFile(id, 'utf-8')\n }\n }\n }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport chalk from 'chalk'\nimport { resolveConfig, InlineConfig, ResolvedConfig } from './config'\nimport Rollup, {\n Plugin,\n RollupBuild,\n RollupOptions,\n RollupWarning,\n WarningHandler,\n OutputOptions,\n RollupOutput,\n ExternalOption,\n GetManualChunk,\n GetModuleInfo,\n WatcherOptions,\n RollupWatcher,\n RollupError,\n ModuleFormat\n} from 'rollup'\nimport { buildReporterPlugin } from './plugins/reporter'\nimport { buildHtmlPlugin } from './plugins/html'\nimport { buildEsbuildPlugin } from './plugins/esbuild'\nimport { terserPlugin } from './plugins/terser'\nimport { Terser } from 'types/terser'\nimport { copyDir, emptyDir, lookupFile, normalizePath } from './utils'\nimport { manifestPlugin } from './plugins/manifest'\nimport commonjsPlugin from '@rollup/plugin-commonjs'\nimport { RollupCommonJSOptions } from 'types/commonjs'\nimport dynamicImportVars from '@rollup/plugin-dynamic-import-vars'\nimport { RollupDynamicImportVarsOptions } from 'types/dynamicImportVars'\nimport { Logger } from './logger'\nimport { TransformOptions } from 'esbuild'\nimport { dataURIPlugin } from './plugins/dataUri'\nimport { buildImportAnalysisPlugin } from './plugins/importAnalysisBuild'\nimport { resolveSSRExternal, shouldExternalizeForSSR } from './ssr/ssrExternal'\nimport { ssrManifestPlugin } from './ssr/ssrManifestPlugin'\nimport { isCSSRequest } from './plugins/css'\nimport { DepOptimizationMetadata } from './optimizer'\nimport { scanImports } from './optimizer/scan'\nimport { assetImportMetaUrlPlugin } from './plugins/assetImportMetaUrl'\nimport { loadFallbackPlugin } from './plugins/loadFallback'\n\nexport interface BuildOptions {\n /**\n * Base public path when served in production.\n * @deprecated `base` is now a root-level config option.\n */\n base?: string\n /**\n * Compatibility transform target. The transform is performed with esbuild\n * and the lowest supported target is es2015/es6. Note this only handles\n * syntax transformation and does not cover polyfills (except for dynamic\n * import)\n *\n * Default: 'modules' - Similar to `@babel/preset-env`'s targets.esmodules,\n * transpile targeting browsers that natively support dynamic es module imports.\n * https://caniuse.com/es6-module-dynamic-import\n *\n * Another special value is 'esnext' - which only performs minimal transpiling\n * (for minification compat) and assumes native dynamic imports support.\n *\n * For custom targets, see https://esbuild.github.io/api/#target and\n * https://esbuild.github.io/content-types/#javascript for more details.\n */\n target?: 'modules' | TransformOptions['target'] | false\n /**\n * whether to inject module preload polyfill.\n * Note: does not apply to library mode.\n * @default true\n */\n polyfillModulePreload?: boolean\n /**\n * whether to inject dynamic import polyfill.\n * Note: does not apply to library mode.\n * @default false\n * @deprecated use plugin-legacy for browsers that don't support dynamic import\n */\n polyfillDynamicImport?: boolean\n /**\n * Directory relative from `root` where build output will be placed. If the\n * directory exists, it will be removed before the build.\n * @default 'dist'\n */\n outDir?: string\n /**\n * Directory relative from `outDir` where the built js/css/image assets will\n * be placed.\n * @default 'assets'\n */\n assetsDir?: string\n /**\n * Static asset files smaller than this number (in bytes) will be inlined as\n * base64 strings. Default limit is `4096` (4kb). Set to `0` to disable.\n * @default 4096\n */\n assetsInlineLimit?: number\n /**\n * Whether to code-split CSS. When enabled, CSS in async chunks will be\n * inlined as strings in the chunk and inserted via dynamically created\n * style tags when the chunk is loaded.\n * @default true\n */\n cssCodeSplit?: boolean\n /**\n * An optional separate target for CSS minification.\n * As esbuild only supports configuring targets to mainstream\n * browsers, users may need this option when they are targeting\n * a niche browser that comes with most modern JavaScript features\n * but has poor CSS support, e.g. Android WeChat WebView, which\n * doesn't support the #RGBA syntax.\n */\n cssTarget?: TransformOptions['target'] | false\n /**\n * If `true`, a separate sourcemap file will be created. If 'inline', the\n * sourcemap will be appended to the resulting output file as data URI.\n * 'hidden' works like `true` except that the corresponding sourcemap\n * comments in the bundled files are suppressed.\n * @default false\n */\n sourcemap?: boolean | 'inline' | 'hidden'\n /**\n * Set to `false` to disable minification, or specify the minifier to use.\n * Available options are 'terser' or 'esbuild'.\n * @default 'esbuild'\n */\n minify?: boolean | 'terser' | 'esbuild'\n /**\n * Options for terser\n * https://terser.org/docs/api-reference#minify-options\n */\n terserOptions?: Terser.MinifyOptions\n /**\n * @deprecated Vite now uses esbuild for CSS minification.\n */\n cleanCssOptions?: any\n /**\n * Will be merged with internal rollup options.\n * https://rollupjs.org/guide/en/#big-list-of-options\n */\n rollupOptions?: RollupOptions\n /**\n * Options to pass on to `@rollup/plugin-commonjs`\n */\n commonjsOptions?: RollupCommonJSOptions\n /**\n * Options to pass on to `@rollup/plugin-dynamic-import-vars`\n */\n dynamicImportVarsOptions?: RollupDynamicImportVarsOptions\n /**\n * Whether to write bundle to disk\n * @default true\n */\n write?: boolean\n /**\n * Empty outDir on write.\n * @default true when outDir is a sub directory of project root\n */\n emptyOutDir?: boolean | null\n /**\n * Whether to emit a manifest.json under assets dir to map hash-less filenames\n * to their hashed versions. Useful when you want to generate your own HTML\n * instead of using the one generated by Vite.\n *\n * Example:\n *\n * ```json\n * {\n * \"main.js\": {\n * \"file\": \"main.68fe3fad.js\",\n * \"css\": \"main.e6b63442.css\",\n * \"imports\": [...],\n * \"dynamicImports\": [...]\n * }\n * }\n * ```\n * @default false\n */\n manifest?: boolean\n /**\n * Build in library mode. The value should be the global name of the lib in\n * UMD mode. This will produce esm + cjs + umd bundle formats with default\n * configurations that are suitable for distributing libraries.\n */\n lib?: LibraryOptions | false\n /**\n * Produce SSR oriented build. Note this requires specifying SSR entry via\n * `rollupOptions.input`.\n */\n ssr?: boolean | string\n /**\n * Generate SSR manifest for determining style links and asset preload\n * directives in production.\n */\n ssrManifest?: boolean\n /**\n * Set to false to disable reporting compressed chunk sizes.\n * Can slightly improve build speed.\n */\n reportCompressedSize?: boolean\n /**\n * Set to false to disable brotli compressed size reporting for build.\n * Can slightly improve build speed.\n * @deprecated use `build.reportCompressedSize` instead.\n */\n brotliSize?: boolean\n /**\n * Adjust chunk size warning limit (in kbs).\n * @default 500\n */\n chunkSizeWarningLimit?: number\n /**\n * Rollup watch options\n * https://rollupjs.org/guide/en/#watchoptions\n */\n watch?: WatcherOptions | null\n}\n\nexport interface LibraryOptions {\n entry: string\n name?: string\n formats?: LibraryFormats[]\n fileName?: string | ((format: ModuleFormat) => string)\n}\n\nexport type LibraryFormats = 'es' | 'cjs' | 'umd' | 'iife'\n\nexport type ResolvedBuildOptions = Required<\n Omit<\n BuildOptions,\n // make deprecated options optional\n 'base' | 'cleanCssOptions' | 'polyfillDynamicImport' | 'brotliSize'\n >\n>\n\nexport function resolveBuildOptions(raw?: BuildOptions): ResolvedBuildOptions {\n const resolved: ResolvedBuildOptions = {\n target: 'modules',\n polyfillModulePreload: true,\n outDir: 'dist',\n assetsDir: 'assets',\n assetsInlineLimit: 4096,\n cssCodeSplit: !raw?.lib,\n cssTarget: false,\n sourcemap: false,\n rollupOptions: {},\n minify: raw?.ssr ? false : 'esbuild',\n terserOptions: {},\n write: true,\n emptyOutDir: null,\n manifest: false,\n lib: false,\n ssr: false,\n ssrManifest: false,\n reportCompressedSize: true,\n // brotliSize: true,\n chunkSizeWarningLimit: 500,\n watch: null,\n ...raw,\n commonjsOptions: {\n include: [/node_modules/],\n extensions: ['.js', '.cjs'],\n ...raw?.commonjsOptions\n },\n dynamicImportVarsOptions: {\n warnOnError: true,\n exclude: [/node_modules/],\n ...raw?.dynamicImportVarsOptions\n }\n }\n\n // handle special build targets\n if (resolved.target === 'modules') {\n // Support browserslist\n // \"defaults and supports es6-module and supports es6-module-dynamic-import\",\n resolved.target = [\n 'es2019',\n 'edge88',\n 'firefox78',\n 'chrome87',\n 'safari13.1'\n ]\n } else if (resolved.target === 'esnext' && resolved.minify === 'terser') {\n // esnext + terser: limit to es2019 so it can be minified by terser\n resolved.target = 'es2019'\n }\n\n if (!resolved.cssTarget) {\n resolved.cssTarget = resolved.target\n }\n\n // normalize false string into actual false\n if ((resolved.minify as any) === 'false') {\n resolved.minify = false\n }\n\n if (resolved.minify === true) {\n resolved.minify = 'esbuild'\n }\n\n return resolved\n}\n\nexport function resolveBuildPlugins(config: ResolvedConfig): {\n pre: Plugin[]\n post: Plugin[]\n} {\n const options = config.build\n return {\n pre: [\n buildHtmlPlugin(config),\n commonjsPlugin(options.commonjsOptions),\n dataURIPlugin(),\n dynamicImportVars(options.dynamicImportVarsOptions),\n assetImportMetaUrlPlugin(config),\n ...(options.rollupOptions.plugins\n ? (options.rollupOptions.plugins.filter((p) => !!p) as Plugin[])\n : [])\n ],\n post: [\n buildImportAnalysisPlugin(config),\n buildEsbuildPlugin(config),\n ...(options.minify === 'terser' ? [terserPlugin(config)] : []),\n ...(options.manifest ? [manifestPlugin(config)] : []),\n ...(options.ssrManifest ? [ssrManifestPlugin(config)] : []),\n buildReporterPlugin(config),\n loadFallbackPlugin()\n ]\n }\n}\n\n/**\n * Track parallel build calls and only stop the esbuild service when all\n * builds are done. (#1098)\n */\nlet parallelCallCounts = 0\n// we use a separate counter to track since the call may error before the\n// bundle is even pushed.\nconst parallelBuilds: RollupBuild[] = []\n\n/**\n * Bundles the app for production.\n * Returns a Promise containing the build result.\n */\nexport async function build(\n inlineConfig: InlineConfig = {}\n): Promise<RollupOutput | RollupOutput[] | RollupWatcher> {\n parallelCallCounts++\n try {\n return await doBuild(inlineConfig)\n } finally {\n parallelCallCounts--\n if (parallelCallCounts <= 0) {\n await Promise.all(parallelBuilds.map((bundle) => bundle.close()))\n parallelBuilds.length = 0\n }\n }\n}\n\nasync function doBuild(\n inlineConfig: InlineConfig = {}\n): Promise<RollupOutput | RollupOutput[] | RollupWatcher> {\n const config = await resolveConfig(inlineConfig, 'build', 'production')\n const options = config.build\n const ssr = !!options.ssr\n const libOptions = options.lib\n\n config.logger.info(\n chalk.cyan(\n `vite v${require('vite/package.json').version} ${chalk.green(\n `building ${ssr ? `SSR bundle ` : ``}for ${config.mode}...`\n )}`\n )\n )\n\n const resolve = (p: string) => path.resolve(config.root, p)\n const input = libOptions\n ? resolve(libOptions.entry)\n : typeof options.ssr === 'string'\n ? resolve(options.ssr)\n : options.rollupOptions?.input || resolve('index.html')\n\n if (ssr && typeof input === 'string' && input.endsWith('.html')) {\n throw new Error(\n `rollupOptions.input should not be an html file when building for SSR. ` +\n `Please specify a dedicated SSR entry.`\n )\n }\n\n const outDir = resolve(options.outDir)\n\n // inject ssr arg to plugin load/transform hooks\n const plugins = (\n ssr ? config.plugins.map((p) => injectSsrFlagToHooks(p)) : config.plugins\n ) as Plugin[]\n\n // inject ssrExternal if present\n const userExternal = options.rollupOptions?.external\n let external = userExternal\n if (ssr) {\n // see if we have cached deps data available\n let knownImports: string[] | undefined\n if (config.cacheDir) {\n const dataPath = path.join(config.cacheDir, '_metadata.json')\n try {\n const data = JSON.parse(\n fs.readFileSync(dataPath, 'utf-8')\n ) as DepOptimizationMetadata\n knownImports = Object.keys(data.optimized)\n } catch (e) {}\n }\n if (!knownImports) {\n // no dev deps optimization data, do a fresh scan\n knownImports = Object.keys((await scanImports(config)).deps)\n }\n external = resolveExternal(\n resolveSSRExternal(config, knownImports),\n userExternal\n )\n }\n\n const rollup = require('rollup') as typeof Rollup\n const rollupOptions: RollupOptions = {\n input,\n preserveEntrySignatures: ssr\n ? 'allow-extension'\n : libOptions\n ? 'strict'\n : false,\n ...options.rollupOptions,\n plugins,\n external,\n onwarn(warning, warn) {\n onRollupWarning(warning, warn, config)\n }\n }\n\n const outputBuildError = (e: RollupError) => {\n let msg = chalk.red((e.plugin ? `[${e.plugin}] ` : '') + e.message)\n if (e.id) {\n msg += `\\nfile: ${chalk.cyan(\n e.id + (e.loc ? `:${e.loc.line}:${e.loc.column}` : '')\n )}`\n }\n if (e.frame) {\n msg += `\\n` + chalk.yellow(e.frame)\n }\n config.logger.error(msg, { error: e })\n }\n\n try {\n const buildOutputOptions = (output: OutputOptions = {}): OutputOptions => {\n return {\n dir: outDir,\n format: ssr ? 'cjs' : 'es',\n exports: ssr ? 'named' : 'auto',\n sourcemap: options.sourcemap,\n name: libOptions ? libOptions.name : undefined,\n entryFileNames: ssr\n ? `[name].js`\n : libOptions\n ? resolveLibFilename(libOptions, output.format || 'es', config.root)\n : path.posix.join(options.assetsDir, `[name].[hash].js`),\n chunkFileNames: libOptions\n ? `[name].js`\n : path.posix.join(options.assetsDir, `[name].[hash].js`),\n assetFileNames: libOptions\n ? `[name].[ext]`\n : path.posix.join(options.assetsDir, `[name].[hash].[ext]`),\n // #764 add `Symbol.toStringTag` when build es module into cjs chunk\n // #1048 add `Symbol.toStringTag` for module default export\n namespaceToStringTag: true,\n inlineDynamicImports: ssr && typeof input === 'string',\n manualChunks:\n !ssr &&\n !libOptions &&\n output?.format !== 'umd' &&\n output?.format !== 'iife'\n ? createMoveToVendorChunkFn(config)\n : undefined,\n ...output\n }\n }\n\n // resolve lib mode outputs\n const outputs = resolveBuildOutputs(\n options.rollupOptions?.output,\n libOptions,\n config.logger\n )\n\n // watch file changes with rollup\n if (config.build.watch) {\n config.logger.info(chalk.cyanBright(`\\nwatching for file changes...`))\n\n const output: OutputOptions[] = []\n if (Array.isArray(outputs)) {\n for (const resolvedOutput of outputs) {\n output.push(buildOutputOptions(resolvedOutput))\n }\n } else {\n output.push(buildOutputOptions(outputs))\n }\n\n const watcherOptions = config.build.watch\n const watcher = rollup.watch({\n ...rollupOptions,\n output,\n watch: {\n ...watcherOptions,\n chokidar: {\n ignored: [\n '**/node_modules/**',\n '**/.git/**',\n ...(watcherOptions?.chokidar?.ignored || [])\n ],\n ignoreInitial: true,\n ignorePermissionErrors: true,\n ...watcherOptions.chokidar\n }\n }\n })\n\n watcher.on('event', (event) => {\n if (event.code === 'BUNDLE_START') {\n config.logger.info(chalk.cyanBright(`\\nbuild started...`))\n if (options.write) {\n prepareOutDir(outDir, options.emptyOutDir, config)\n }\n } else if (event.code === 'BUNDLE_END') {\n event.result.close()\n config.logger.info(chalk.cyanBright(`built in ${event.duration}ms.`))\n } else if (event.code === 'ERROR') {\n outputBuildError(event.error)\n }\n })\n\n // stop watching\n watcher.close()\n\n return watcher\n }\n\n // write or generate files with rollup\n const bundle = await rollup.rollup(rollupOptions)\n parallelBuilds.push(bundle)\n\n const generate = (output: OutputOptions = {}) => {\n return bundle[options.write ? 'write' : 'generate'](\n buildOutputOptions(output)\n )\n }\n\n if (options.write) {\n prepareOutDir(outDir, options.emptyOutDir, config)\n }\n\n if (Array.isArray(outputs)) {\n const res = []\n for (const output of outputs) {\n res.push(await generate(output))\n }\n return res\n } else {\n return await generate(outputs)\n }\n } catch (e) {\n outputBuildError(e)\n throw e\n }\n}\n\nfunction prepareOutDir(\n outDir: string,\n emptyOutDir: boolean | null,\n config: ResolvedConfig\n) {\n if (fs.existsSync(outDir)) {\n if (\n emptyOutDir == null &&\n !normalizePath(outDir).startsWith(config.root + '/')\n ) {\n // warn if outDir is outside of root\n config.logger.warn(\n chalk.yellow(\n `\\n${chalk.bold(`(!)`)} outDir ${chalk.white.dim(\n outDir\n )} is not inside project root and will not be emptied.\\n` +\n `Use --emptyOutDir to override.\\n`\n )\n )\n } else if (emptyOutDir !== false) {\n emptyDir(outDir, ['.git'])\n }\n }\n if (config.publicDir && fs.existsSync(config.publicDir)) {\n copyDir(config.publicDir, outDir)\n }\n}\n\nfunction getPkgName(root: string) {\n const { name } = JSON.parse(lookupFile(root, ['package.json']) || `{}`)\n\n return name?.startsWith('@') ? name.split('/')[1] : name\n}\n\nfunction createMoveToVendorChunkFn(config: ResolvedConfig): GetManualChunk {\n const cache = new Map<string, boolean>()\n return (id, { getModuleInfo }) => {\n if (\n id.includes('node_modules') &&\n !isCSSRequest(id) &&\n staticImportedByEntry(id, getModuleInfo, cache)\n ) {\n return 'vendor'\n }\n }\n}\n\nfunction staticImportedByEntry(\n id: string,\n getModuleInfo: GetModuleInfo,\n cache: Map<string, boolean>,\n importStack: string[] = []\n): boolean {\n if (cache.has(id)) {\n return cache.get(id) as boolean\n }\n if (importStack.includes(id)) {\n // circular deps!\n cache.set(id, false)\n return false\n }\n const mod = getModuleInfo(id)\n if (!mod) {\n cache.set(id, false)\n return false\n }\n\n if (mod.isEntry) {\n cache.set(id, true)\n return true\n }\n const someImporterIs = mod.importers.some((importer) =>\n staticImportedByEntry(\n importer,\n getModuleInfo,\n cache,\n importStack.concat(id)\n )\n )\n cache.set(id, someImporterIs)\n return someImporterIs\n}\n\nexport function resolveLibFilename(\n libOptions: LibraryOptions,\n format: ModuleFormat,\n root: string\n): string {\n if (typeof libOptions.fileName === 'function') {\n return libOptions.fileName(format)\n }\n\n const name = libOptions.fileName || getPkgName(root)\n\n if (!name)\n throw new Error(\n 'Name in package.json is required if option \"build.lib.fileName\" is not provided.'\n )\n\n return `${name}.${format}.js`\n}\n\nfunction resolveBuildOutputs(\n outputs: OutputOptions | OutputOptions[] | undefined,\n libOptions: LibraryOptions | false,\n logger: Logger\n): OutputOptions | OutputOptions[] | undefined {\n if (libOptions) {\n const formats = libOptions.formats || ['es', 'umd']\n if (\n (formats.includes('umd') || formats.includes('iife')) &&\n !libOptions.name\n ) {\n throw new Error(\n `Option \"build.lib.name\" is required when output formats ` +\n `include \"umd\" or \"iife\".`\n )\n }\n if (!outputs) {\n return formats.map((format) => ({ format }))\n } else if (!Array.isArray(outputs)) {\n return formats.map((format) => ({ ...outputs, format }))\n } else if (libOptions.formats) {\n // user explicitly specifying own output array\n logger.warn(\n chalk.yellow(\n `\"build.lib.formats\" will be ignored because ` +\n `\"build.rollupOptions.output\" is already an array format`\n )\n )\n }\n }\n return outputs\n}\n\nconst warningIgnoreList = [`CIRCULAR_DEPENDENCY`, `THIS_IS_UNDEFINED`]\nconst dynamicImportWarningIgnoreList = [\n `Unsupported expression`,\n `statically analyzed`\n]\n\nexport function onRollupWarning(\n warning: RollupWarning,\n warn: WarningHandler,\n config: ResolvedConfig\n): void {\n if (warning.code === 'UNRESOLVED_IMPORT') {\n const id = warning.source\n const importer = warning.importer\n // throw unless it's commonjs external...\n if (!importer || !/\\?commonjs-external$/.test(importer)) {\n throw new Error(\n `[vite]: Rollup failed to resolve import \"${id}\" from \"${importer}\".\\n` +\n `This is most likely unintended because it can break your application at runtime.\\n` +\n `If you do want to externalize this module explicitly add it to\\n` +\n `\\`build.rollupOptions.external\\``\n )\n }\n }\n\n if (\n warning.plugin === 'rollup-plugin-dynamic-import-variables' &&\n dynamicImportWarningIgnoreList.some((msg) => warning.message.includes(msg))\n ) {\n return\n }\n\n if (!warningIgnoreList.includes(warning.code!)) {\n const userOnWarn = config.build.rollupOptions?.onwarn\n if (userOnWarn) {\n userOnWarn(warning, warn)\n } else if (warning.code === 'PLUGIN_WARNING') {\n config.logger.warn(\n `${chalk.bold.yellow(`[plugin:${warning.plugin}]`)} ${chalk.yellow(\n warning.message\n )}`\n )\n } else {\n warn(warning)\n }\n }\n}\n\nfunction resolveExternal(\n ssrExternals: string[],\n user: ExternalOption | undefined\n): ExternalOption {\n return ((id, parentId, isResolved) => {\n if (shouldExternalizeForSSR(id, ssrExternals)) {\n return true\n }\n if (user) {\n if (typeof user === 'function') {\n return user(id, parentId, isResolved)\n } else if (Array.isArray(user)) {\n return user.some((test) => isExternal(id, test))\n } else {\n return isExternal(id, user)\n }\n }\n }) as ExternalOption\n}\n\nfunction isExternal(id: string, test: string | RegExp) {\n if (typeof test === 'string') {\n return id === test\n } else {\n return test.test(id)\n }\n}\n\nfunction injectSsrFlagToHooks(p: Plugin): Plugin {\n const { resolveId, load, transform } = p\n return {\n ...p,\n resolveId: wrapSsrHook(resolveId),\n load: wrapSsrHook(load),\n transform: wrapSsrHook(transform)\n }\n}\n\nfunction wrapSsrHook(fn: Function | undefined) {\n if (!fn) return\n return function (this: any, ...args: any[]) {\n return fn.call(this, ...args, true)\n }\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n","/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n","/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x25\\x26-\\x3B\\x3D\\x3F-\\x5B\\x5D\\x5F\\x61-\\x7A\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n return String(url)\n .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '&quot;';\n break;\n case 38: // &\n escape = '&amp;';\n break;\n case 39: // '\n escape = '&#39;';\n break;\n case 60: // <\n escape = '&lt;';\n break;\n case 62: // >\n escape = '&gt;';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n if (!Array.isArray(stuff))\n throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n var cleanups = []\n\n for (var i = 0; i < stuff.length; i++) {\n var arr = stuff[i]\n\n if (!Array.isArray(arr) || arr.length < 2)\n throw new TypeError('each array member must be [ee, events...]')\n\n var ee = arr[0]\n\n for (var j = 1; j < arr.length; j++) {\n var event = arr[j]\n var fn = listener(event, callback)\n\n // listen to the event\n ee.on(event, fn)\n // push this listener to the list of cleanups\n cleanups.push({\n ee: ee,\n event: event,\n fn: fn,\n })\n }\n }\n\n function callback() {\n cleanup()\n done.apply(null, arguments)\n }\n\n function cleanup() {\n var x\n for (var i = 0; i < cleanups.length; i++) {\n x = cleanups[i]\n x.ee.removeListener(x.event, x.fn)\n }\n }\n\n function thunk(fn) {\n done = fn\n }\n\n thunk.cancel = cleanup\n\n return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n return function onevent(arg1) {\n var args = new Array(arguments.length)\n var ee = this\n var err = event === 'error'\n ? arg1\n : null\n\n // copy args to prevent arguments escaping scope\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n done(err, ee, event, args)\n }\n}\n","/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished(msg, listener) {\n if (isFinished(msg) !== false) {\n defer(listener, null, msg)\n return msg\n }\n\n // attach the listener to the message\n attachListener(msg, listener)\n\n return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished(msg) {\n var socket = msg.socket\n\n if (typeof msg.finished === 'boolean') {\n // OutgoingMessage\n return Boolean(msg.finished || (socket && !socket.writable))\n }\n\n if (typeof msg.complete === 'boolean') {\n // IncomingMessage\n return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n }\n\n // don't know\n return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener(msg, callback) {\n var eeMsg\n var eeSocket\n var finished = false\n\n function onFinish(error) {\n eeMsg.cancel()\n eeSocket.cancel()\n\n finished = true\n callback(error)\n }\n\n // finished on first message event\n eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n function onSocket(socket) {\n // remove listener\n msg.removeListener('socket', onSocket)\n\n if (finished) return\n if (eeMsg !== eeSocket) return\n\n // finished on first socket event\n eeSocket = first([[socket, 'error', 'close']], onFinish)\n }\n\n if (msg.socket) {\n // socket already assigned\n onSocket(msg.socket)\n return\n }\n\n // wait for socket to be assigned\n msg.on('socket', onSocket)\n\n if (msg.socket === undefined) {\n // node.js 0.8 patch\n patchAssignSocket(msg, onSocket)\n }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener(msg, listener) {\n var attached = msg.__onFinished\n\n // create a private single listener with queue\n if (!attached || !attached.queue) {\n attached = msg.__onFinished = createListener(msg)\n attachFinishedListener(msg, attached)\n }\n\n attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener(msg) {\n function listener(err) {\n if (msg.__onFinished === listener) msg.__onFinished = null\n if (!listener.queue) return\n\n var queue = listener.queue\n listener.queue = null\n\n for (var i = 0; i < queue.length; i++) {\n queue[i](err, msg)\n }\n }\n\n listener.queue = []\n\n return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\nfunction patchAssignSocket(res, callback) {\n var assignSocket = res.assignSocket\n\n if (typeof assignSocket !== 'function') return\n\n // res.on('socket', callback) is broken in 0.8\n res.assignSocket = function _assignSocket(socket) {\n assignSocket.call(this, socket)\n callback(socket)\n }\n}\n","/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n var url = req.url\n\n if (url === undefined) {\n // URL is undefined\n return undefined\n }\n\n var parsed = req._parsedUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n var url = req.originalUrl\n\n if (typeof url !== 'string') {\n // Fallback\n return parseurl(req)\n }\n\n var parsed = req._parsedOriginalUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n return parse(str)\n }\n\n var pathname = str\n var query = null\n var search = null\n\n // This takes the regexp from https://github.com/joyent/node/pull/7878\n // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n // And unrolls it into a for loop\n for (var i = 1; i < str.length; i++) {\n switch (str.charCodeAt(i)) {\n case 0x3f: /* ? */\n if (search === null) {\n pathname = str.substring(0, i)\n query = str.substring(i + 1)\n search = str.substring(i)\n }\n break\n case 0x09: /* \\t */\n case 0x0a: /* \\n */\n case 0x0c: /* \\f */\n case 0x0d: /* \\r */\n case 0x20: /* */\n case 0x23: /* # */\n case 0xa0:\n case 0xfeff:\n return parse(str)\n }\n }\n\n var url = Url !== undefined\n ? new Url()\n : {}\n\n url.path = str\n url.href = str\n url.pathname = pathname\n\n if (search !== null) {\n url.query = query\n url.search = search\n }\n\n return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n return typeof parsedUrl === 'object' &&\n parsedUrl !== null &&\n (Url === undefined || parsedUrl instanceof Url) &&\n parsedUrl._raw === url\n}\n","/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.STATUS_CODES = codes\n\n// array of status codes\nstatus.codes = populateStatusesMap(status, codes)\n\n// status codes for redirects\nstatus.redirect = {\n 300: true,\n 301: true,\n 302: true,\n 303: true,\n 305: true,\n 307: true,\n 308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n 204: true,\n 205: true,\n 304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n 502: true,\n 503: true,\n 504: true\n}\n\n/**\n * Populate the statuses map for given codes.\n * @private\n */\n\nfunction populateStatusesMap (statuses, codes) {\n var arr = []\n\n Object.keys(codes).forEach(function forEachCode (code) {\n var message = codes[code]\n var status = Number(code)\n\n // Populate properties\n statuses[status] = message\n statuses[message] = status\n statuses[message.toLowerCase()] = status\n\n // Add to array\n arr.push(status)\n })\n\n return arr\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n if (typeof code === 'number') {\n if (!status[code]) throw new Error('invalid status code: ' + code)\n return code\n }\n\n if (typeof code !== 'string') {\n throw new TypeError('code must be a number or string')\n }\n\n // '403'\n var n = parseInt(code, 10)\n if (!isNaN(n)) {\n if (!status[n]) throw new Error('invalid status code: ' + n)\n return n\n }\n\n n = status[code.toLowerCase()]\n if (!n) throw new Error('invalid status message: \"' + code + '\"')\n return n\n}\n","/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n var listeners = stream.listeners('data')\n\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].name === 'ondata') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n if (!stream) {\n throw new TypeError('argument stream is required')\n }\n\n if (typeof stream.unpipe === 'function') {\n // new-style\n stream.unpipe()\n return\n }\n\n // Node.js 0.8 hack\n if (!hasPipeDataListeners(stream)) {\n return\n }\n\n var listener\n var listeners = stream.listeners('close')\n\n for (var i = 0; i < listeners.length; i++) {\n listener = listeners[i]\n\n if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n continue\n }\n\n // invoke the listener\n listener.call(stream)\n }\n}\n","/*!\n * finalhandler\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\nvar unpipe = require('unpipe')\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g\nvar NEWLINE_REGEXP = /\\n/g\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n var body = escapeHtml(message)\n .replace(NEWLINE_REGEXP, '<br>')\n .replace(DOUBLE_SPACE_REGEXP, ' &nbsp;')\n\n return '<!DOCTYPE html>\\n' +\n '<html lang=\"en\">\\n' +\n '<head>\\n' +\n '<meta charset=\"utf-8\">\\n' +\n '<title>Error</title>\\n' +\n '</head>\\n' +\n '<body>\\n' +\n '<pre>' + body + '</pre>\\n' +\n '</body>\\n' +\n '</html>\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n var opts = options || {}\n\n // get environment\n var env = opts.env || process.env.NODE_ENV || 'development'\n\n // get error callback\n var onerror = opts.onerror\n\n return function (err) {\n var headers\n var msg\n var status\n\n // ignore 404 on in-flight response\n if (!err && headersSent(res)) {\n debug('cannot 404 after headers sent')\n return\n }\n\n // unhandled error\n if (err) {\n // respect status code from error\n status = getErrorStatusCode(err)\n\n if (status === undefined) {\n // fallback to status code on response\n status = getResponseStatusCode(res)\n } else {\n // respect headers from error\n headers = getErrorHeaders(err)\n }\n\n // get error message\n msg = getErrorMessage(err, status, env)\n } else {\n // not found\n status = 404\n msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n }\n\n debug('default %s', status)\n\n // schedule onerror callback\n if (err && onerror) {\n defer(onerror, err, req, res)\n }\n\n // cannot actually respond\n if (headersSent(res)) {\n debug('cannot %d after headers sent', status)\n req.socket.destroy()\n return\n }\n\n // send response\n send(req, res, status, headers, msg)\n }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n if (!err.headers || typeof err.headers !== 'object') {\n return undefined\n }\n\n var headers = Object.create(null)\n var keys = Object.keys(err.headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n headers[key] = err.headers[key]\n }\n\n return headers\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n var msg\n\n if (env !== 'production') {\n // use err.stack, which typically includes err.message\n msg = err.stack\n\n // fallback to err.toString() when possible\n if (!msg && typeof err.toString === 'function') {\n msg = err.toString()\n }\n }\n\n return msg || statuses[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n // check err.status\n if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n return err.status\n }\n\n // check err.statusCode\n if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n return err.statusCode\n }\n\n return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n try {\n return parseUrl.original(req).pathname\n } catch (e) {\n return 'resource'\n }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n var status = res.statusCode\n\n // default status code to 500 if outside valid range\n if (typeof status !== 'number' || status < 400 || status > 599) {\n status = 500\n }\n\n return status\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n function write () {\n // response body\n var body = createHtmlDocument(message)\n\n // response status\n res.statusCode = status\n res.statusMessage = statuses[status]\n\n // response headers\n setHeaders(res, headers)\n\n // security headers\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n\n // standard headers\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\n res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n res.end(body, 'utf8')\n }\n\n if (isFinished(req)) {\n write()\n return\n }\n\n // unpipe everything from the request\n unpipe(req)\n\n // flush the request\n onFinished(req, write)\n req.resume()\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n if (!headers) {\n return\n }\n\n var keys = Object.keys(headers)\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n","/**\n * Merge object b with object a.\n *\n * var a = { foo: 'bar' }\n * , b = { bar: 'baz' };\n *\n * merge(a, b);\n * // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function(a, b){\n if (a && b) {\n for (var key in b) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","/*!\n * connect\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('connect:dispatcher');\nvar EventEmitter = require('events').EventEmitter;\nvar finalhandler = require('finalhandler');\nvar http = require('http');\nvar merge = require('utils-merge');\nvar parseUrl = require('parseurl');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createServer;\n\n/**\n * Module variables.\n * @private\n */\n\nvar env = process.env.NODE_ENV || 'development';\nvar proto = {};\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Create a new connect server.\n *\n * @return {function}\n * @public\n */\n\nfunction createServer() {\n function app(req, res, next){ app.handle(req, res, next); }\n merge(app, proto);\n merge(app, EventEmitter.prototype);\n app.route = '/';\n app.stack = [];\n return app;\n}\n\n/**\n * Utilize the given middleware `handle` to the given `route`,\n * defaulting to _/_. This \"route\" is the mount-point for the\n * middleware, when given a value other than _/_ the middleware\n * is only effective when that segment is present in the request's\n * pathname.\n *\n * For example if we were to mount a function at _/admin_, it would\n * be invoked on _/admin_, and _/admin/settings_, however it would\n * not be invoked for _/_, or _/posts_.\n *\n * @param {String|Function|Server} route, callback or server\n * @param {Function|Server} callback or server\n * @return {Server} for chaining\n * @public\n */\n\nproto.use = function use(route, fn) {\n var handle = fn;\n var path = route;\n\n // default route to '/'\n if (typeof route !== 'string') {\n handle = route;\n path = '/';\n }\n\n // wrap sub-apps\n if (typeof handle.handle === 'function') {\n var server = handle;\n server.route = path;\n handle = function (req, res, next) {\n server.handle(req, res, next);\n };\n }\n\n // wrap vanilla http.Servers\n if (handle instanceof http.Server) {\n handle = handle.listeners('request')[0];\n }\n\n // strip trailing slash\n if (path[path.length - 1] === '/') {\n path = path.slice(0, -1);\n }\n\n // add the middleware\n debug('use %s %s', path || '/', handle.name || 'anonymous');\n this.stack.push({ route: path, handle: handle });\n\n return this;\n};\n\n/**\n * Handle server requests, punting them down\n * the middleware stack.\n *\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n var index = 0;\n var protohost = getProtohost(req.url) || '';\n var removed = '';\n var slashAdded = false;\n var stack = this.stack;\n\n // final function handler\n var done = out || finalhandler(req, res, {\n env: env,\n onerror: logerror\n });\n\n // store the original URL\n req.originalUrl = req.originalUrl || req.url;\n\n function next(err) {\n if (slashAdded) {\n req.url = req.url.substr(1);\n slashAdded = false;\n }\n\n if (removed.length !== 0) {\n req.url = protohost + removed + req.url.substr(protohost.length);\n removed = '';\n }\n\n // next callback\n var layer = stack[index++];\n\n // all done\n if (!layer) {\n defer(done, err);\n return;\n }\n\n // route data\n var path = parseUrl(req).pathname || '/';\n var route = layer.route;\n\n // skip this layer if the route doesn't match\n if (path.toLowerCase().substr(0, route.length) !== route.toLowerCase()) {\n return next(err);\n }\n\n // skip if route match does not border \"/\", \".\", or end\n var c = path.length > route.length && path[route.length];\n if (c && c !== '/' && c !== '.') {\n return next(err);\n }\n\n // trim off the part of the url that matches the route\n if (route.length !== 0 && route !== '/') {\n removed = route;\n req.url = protohost + req.url.substr(protohost.length + removed.length);\n\n // ensure leading slash\n if (!protohost && req.url[0] !== '/') {\n req.url = '/' + req.url;\n slashAdded = true;\n }\n }\n\n // call the layer handle\n call(layer.handle, route, err, req, res, next);\n }\n\n next();\n};\n\n/**\n * Listen for connections.\n *\n * This method takes the same arguments\n * as node's `http.Server#listen()`.\n *\n * HTTP and HTTPS:\n *\n * If you run your application both as HTTP\n * and HTTPS you may wrap them individually,\n * since your Connect \"server\" is really just\n * a JavaScript `Function`.\n *\n * var connect = require('connect')\n * , http = require('http')\n * , https = require('https');\n *\n * var app = connect();\n *\n * http.createServer(app).listen(80);\n * https.createServer(options, app).listen(443);\n *\n * @return {http.Server}\n * @api public\n */\n\nproto.listen = function listen() {\n var server = http.createServer(this);\n return server.listen.apply(server, arguments);\n};\n\n/**\n * Invoke a route handle.\n * @private\n */\n\nfunction call(handle, route, err, req, res, next) {\n var arity = handle.length;\n var error = err;\n var hasError = Boolean(err);\n\n debug('%s %s : %s', handle.name || '<anonymous>', route, req.originalUrl);\n\n try {\n if (hasError && arity === 4) {\n // error-handling middleware\n handle(err, req, res, next);\n return;\n } else if (!hasError && arity < 4) {\n // request-handling middleware\n handle(req, res, next);\n return;\n }\n } catch (e) {\n // replace the error\n error = e;\n }\n\n // continue\n next(error);\n}\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n if (env !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Get get protocol + host for a URL.\n *\n * @param {string} url\n * @private\n */\n\nfunction getProtohost(url) {\n if (url.length === 0 || url[0] === '/') {\n return undefined;\n }\n\n var fqdnIndex = url.indexOf('://')\n\n return fqdnIndex !== -1 && url.lastIndexOf('?', fqdnIndex) === -1\n ? url.substr(0, url.indexOf('/', 3 + fqdnIndex))\n : undefined;\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/*!\n * vary\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = vary\nmodule.exports.append = append\n\n/**\n * RegExp to match field-name in RFC 7230 sec 3.2\n *\n * field-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n */\n\nvar FIELD_NAME_REGEXP = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/\n\n/**\n * Append a field to a vary header.\n *\n * @param {String} header\n * @param {String|Array} field\n * @return {String}\n * @public\n */\n\nfunction append (header, field) {\n if (typeof header !== 'string') {\n throw new TypeError('header argument is required')\n }\n\n if (!field) {\n throw new TypeError('field argument is required')\n }\n\n // get fields array\n var fields = !Array.isArray(field)\n ? parse(String(field))\n : field\n\n // assert on invalid field names\n for (var j = 0; j < fields.length; j++) {\n if (!FIELD_NAME_REGEXP.test(fields[j])) {\n throw new TypeError('field argument contains an invalid header name')\n }\n }\n\n // existing, unspecified vary\n if (header === '*') {\n return header\n }\n\n // enumerate current values\n var val = header\n var vals = parse(header.toLowerCase())\n\n // unspecified vary\n if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {\n return '*'\n }\n\n for (var i = 0; i < fields.length; i++) {\n var fld = fields[i].toLowerCase()\n\n // append value (case-preserving)\n if (vals.indexOf(fld) === -1) {\n vals.push(fld)\n val = val\n ? val + ', ' + fields[i]\n : fields[i]\n }\n }\n\n return val\n}\n\n/**\n * Parse a vary header into an array.\n *\n * @param {String} header\n * @return {Array}\n * @private\n */\n\nfunction parse (header) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = header.length; i < len; i++) {\n switch (header.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(header.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(header.substring(start, end))\n\n return list\n}\n\n/**\n * Mark that a request is varied on a header field.\n *\n * @param {Object} res\n * @param {String|Array} field\n * @public\n */\n\nfunction vary (res, field) {\n if (!res || !res.getHeader || !res.setHeader) {\n // quack quack\n throw new TypeError('res argument is required')\n }\n\n // get existing header\n var val = res.getHeader('Vary') || ''\n var header = Array.isArray(val)\n ? val.join(', ')\n : String(val)\n\n // set new header\n if ((val = append(header, field))) {\n res.setHeader('Vary', val)\n }\n}\n","(function () {\n\n 'use strict';\n\n var assign = require('object-assign');\n var vary = require('vary');\n\n var defaults = {\n origin: '*',\n methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n preflightContinue: false,\n optionsSuccessStatus: 204\n };\n\n function isString(s) {\n return typeof s === 'string' || s instanceof String;\n }\n\n function isOriginAllowed(origin, allowedOrigin) {\n if (Array.isArray(allowedOrigin)) {\n for (var i = 0; i < allowedOrigin.length; ++i) {\n if (isOriginAllowed(origin, allowedOrigin[i])) {\n return true;\n }\n }\n return false;\n } else if (isString(allowedOrigin)) {\n return origin === allowedOrigin;\n } else if (allowedOrigin instanceof RegExp) {\n return allowedOrigin.test(origin);\n } else {\n return !!allowedOrigin;\n }\n }\n\n function configureOrigin(options, req) {\n var requestOrigin = req.headers.origin,\n headers = [],\n isAllowed;\n\n if (!options.origin || options.origin === '*') {\n // allow any origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: '*'\n }]);\n } else if (isString(options.origin)) {\n // fixed origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: options.origin\n }]);\n headers.push([{\n key: 'Vary',\n value: 'Origin'\n }]);\n } else {\n isAllowed = isOriginAllowed(requestOrigin, options.origin);\n // reflect origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: isAllowed ? requestOrigin : false\n }]);\n headers.push([{\n key: 'Vary',\n value: 'Origin'\n }]);\n }\n\n return headers;\n }\n\n function configureMethods(options) {\n var methods = options.methods;\n if (methods.join) {\n methods = options.methods.join(','); // .methods is an array, so turn it into a string\n }\n return {\n key: 'Access-Control-Allow-Methods',\n value: methods\n };\n }\n\n function configureCredentials(options) {\n if (options.credentials === true) {\n return {\n key: 'Access-Control-Allow-Credentials',\n value: 'true'\n };\n }\n return null;\n }\n\n function configureAllowedHeaders(options, req) {\n var allowedHeaders = options.allowedHeaders || options.headers;\n var headers = [];\n\n if (!allowedHeaders) {\n allowedHeaders = req.headers['access-control-request-headers']; // .headers wasn't specified, so reflect the request headers\n headers.push([{\n key: 'Vary',\n value: 'Access-Control-Request-Headers'\n }]);\n } else if (allowedHeaders.join) {\n allowedHeaders = allowedHeaders.join(','); // .headers is an array, so turn it into a string\n }\n if (allowedHeaders && allowedHeaders.length) {\n headers.push([{\n key: 'Access-Control-Allow-Headers',\n value: allowedHeaders\n }]);\n }\n\n return headers;\n }\n\n function configureExposedHeaders(options) {\n var headers = options.exposedHeaders;\n if (!headers) {\n return null;\n } else if (headers.join) {\n headers = headers.join(','); // .headers is an array, so turn it into a string\n }\n if (headers && headers.length) {\n return {\n key: 'Access-Control-Expose-Headers',\n value: headers\n };\n }\n return null;\n }\n\n function configureMaxAge(options) {\n var maxAge = (typeof options.maxAge === 'number' || options.maxAge) && options.maxAge.toString()\n if (maxAge && maxAge.length) {\n return {\n key: 'Access-Control-Max-Age',\n value: maxAge\n };\n }\n return null;\n }\n\n function applyHeaders(headers, res) {\n for (var i = 0, n = headers.length; i < n; i++) {\n var header = headers[i];\n if (header) {\n if (Array.isArray(header)) {\n applyHeaders(header, res);\n } else if (header.key === 'Vary' && header.value) {\n vary(res, header.value);\n } else if (header.value) {\n res.setHeader(header.key, header.value);\n }\n }\n }\n }\n\n function cors(options, req, res, next) {\n var headers = [],\n method = req.method && req.method.toUpperCase && req.method.toUpperCase();\n\n if (method === 'OPTIONS') {\n // preflight\n headers.push(configureOrigin(options, req));\n headers.push(configureCredentials(options, req));\n headers.push(configureMethods(options, req));\n headers.push(configureAllowedHeaders(options, req));\n headers.push(configureMaxAge(options, req));\n headers.push(configureExposedHeaders(options, req));\n applyHeaders(headers, res);\n\n if (options.preflightContinue) {\n next();\n } else {\n // Safari (and potentially other browsers) need content-length 0,\n // for 204 or they just hang waiting for a body\n res.statusCode = options.optionsSuccessStatus;\n res.setHeader('Content-Length', '0');\n res.end();\n }\n } else {\n // actual response\n headers.push(configureOrigin(options, req));\n headers.push(configureCredentials(options, req));\n headers.push(configureExposedHeaders(options, req));\n applyHeaders(headers, res);\n next();\n }\n }\n\n function middlewareWrapper(o) {\n // if options are static (either via defaults or custom options passed in), wrap in a function\n var optionsCallback = null;\n if (typeof o === 'function') {\n optionsCallback = o;\n } else {\n optionsCallback = function (req, cb) {\n cb(null, o);\n };\n }\n\n return function corsMiddleware(req, res, next) {\n optionsCallback(req, function (err, options) {\n if (err) {\n next(err);\n } else {\n var corsOptions = assign({}, defaults, options);\n var originCallback = null;\n if (corsOptions.origin && typeof corsOptions.origin === 'function') {\n originCallback = corsOptions.origin;\n } else if (corsOptions.origin) {\n originCallback = function (origin, cb) {\n cb(null, corsOptions.origin);\n };\n }\n\n if (originCallback) {\n originCallback(req.headers.origin, function (err2, origin) {\n if (err2 || !origin) {\n next(err2);\n } else {\n corsOptions.origin = origin;\n cors(corsOptions, req, res, next);\n }\n });\n } else {\n next();\n }\n }\n });\n };\n }\n\n // can pass either an options hash, an options delegate, or nothing\n module.exports = middlewareWrapper;\n\n}());\n","'use strict';\n\nconst fs = require('fs');\nconst { Readable } = require('stream');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst picomatch = require('picomatch');\n\nconst readdir = promisify(fs.readdir);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\n/**\n * @typedef {Object} EntryInfo\n * @property {String} path\n * @property {String} fullPath\n * @property {fs.Stats=} stats\n * @property {fs.Dirent=} dirent\n * @property {String} basename\n */\n\nconst BANG = '!';\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst FILE_TYPE = 'files';\nconst DIR_TYPE = 'directories';\nconst FILE_DIR_TYPE = 'files_directories';\nconst EVERYTHING_TYPE = 'all';\nconst ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE];\n\nconst isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code);\nconst [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10));\nconst wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5));\n\nconst normalizeFilter = filter => {\n if (filter === undefined) return;\n if (typeof filter === 'function') return filter;\n\n if (typeof filter === 'string') {\n const glob = picomatch(filter.trim());\n return entry => glob(entry.basename);\n }\n\n if (Array.isArray(filter)) {\n const positive = [];\n const negative = [];\n for (const item of filter) {\n const trimmed = item.trim();\n if (trimmed.charAt(0) === BANG) {\n negative.push(picomatch(trimmed.slice(1)));\n } else {\n positive.push(picomatch(trimmed));\n }\n }\n\n if (negative.length > 0) {\n if (positive.length > 0) {\n return entry =>\n positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename));\n }\n return entry => !negative.some(f => f(entry.basename));\n }\n return entry => positive.some(f => f(entry.basename));\n }\n};\n\nclass ReaddirpStream extends Readable {\n static get defaultOptions() {\n return {\n root: '.',\n /* eslint-disable no-unused-vars */\n fileFilter: (path) => true,\n directoryFilter: (path) => true,\n /* eslint-enable no-unused-vars */\n type: FILE_TYPE,\n lstat: false,\n depth: 2147483648,\n alwaysStat: false\n };\n }\n\n constructor(options = {}) {\n super({\n objectMode: true,\n autoDestroy: true,\n highWaterMark: options.highWaterMark || 4096\n });\n const opts = { ...ReaddirpStream.defaultOptions, ...options };\n const { root, type } = opts;\n\n this._fileFilter = normalizeFilter(opts.fileFilter);\n this._directoryFilter = normalizeFilter(opts.directoryFilter);\n\n const statMethod = opts.lstat ? lstat : stat;\n // Use bigint stats if it's windows and stat() supports options (node 10+).\n if (wantBigintFsStats) {\n this._stat = path => statMethod(path, { bigint: true });\n } else {\n this._stat = statMethod;\n }\n\n this._maxDepth = opts.depth;\n this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n this._wantsEverything = type === EVERYTHING_TYPE;\n this._root = sysPath.resolve(root);\n this._isDirent = ('Dirent' in fs) && !opts.alwaysStat;\n this._statsProp = this._isDirent ? 'dirent' : 'stats';\n this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n\n // Launch stream with one parent, the root dir.\n this.parents = [this._exploreDir(root, 1)];\n this.reading = false;\n this.parent = undefined;\n }\n\n async _read(batch) {\n if (this.reading) return;\n this.reading = true;\n\n try {\n while (!this.destroyed && batch > 0) {\n const { path, depth, files = [] } = this.parent || {};\n\n if (files.length > 0) {\n const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path));\n for (const entry of await Promise.all(slice)) {\n if (this.destroyed) return;\n\n const entryType = await this._getEntryType(entry);\n if (entryType === 'directory' && this._directoryFilter(entry)) {\n if (depth <= this._maxDepth) {\n this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n }\n\n if (this._wantsDir) {\n this.push(entry);\n batch--;\n }\n } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) {\n if (this._wantsFile) {\n this.push(entry);\n batch--;\n }\n }\n }\n } else {\n const parent = this.parents.pop();\n if (!parent) {\n this.push(null);\n break;\n }\n this.parent = await parent;\n if (this.destroyed) return;\n }\n }\n } catch (error) {\n this.destroy(error);\n } finally {\n this.reading = false;\n }\n }\n\n async _exploreDir(path, depth) {\n let files;\n try {\n files = await readdir(path, this._rdOptions);\n } catch (error) {\n this._onError(error);\n }\n return { files, depth, path };\n }\n\n async _formatEntry(dirent, path) {\n let entry;\n try {\n const basename = this._isDirent ? dirent.name : dirent;\n const fullPath = sysPath.resolve(sysPath.join(path, basename));\n entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename };\n entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n } catch (err) {\n this._onError(err);\n }\n return entry;\n }\n\n _onError(err) {\n if (isNormalFlowError(err) && !this.destroyed) {\n this.emit('warn', err);\n } else {\n this.destroy(err);\n }\n }\n\n async _getEntryType(entry) {\n // entry may be undefined, because a warning or an error were emitted\n // and the statsProp is undefined\n const stats = entry && entry[this._statsProp];\n if (!stats) {\n return;\n }\n if (stats.isFile()) {\n return 'file';\n }\n if (stats.isDirectory()) {\n return 'directory';\n }\n if (stats && stats.isSymbolicLink()) {\n const full = entry.fullPath;\n try {\n const entryRealPath = await realpath(full);\n const entryRealPathStats = await lstat(entryRealPath);\n if (entryRealPathStats.isFile()) {\n return 'file';\n }\n if (entryRealPathStats.isDirectory()) {\n const len = entryRealPath.length;\n if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath.sep) {\n const recursiveError = new Error(\n `Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`\n );\n recursiveError.code = RECURSIVE_ERROR_CODE;\n return this._onError(recursiveError);\n }\n return 'directory';\n }\n } catch (error) {\n this._onError(error);\n }\n }\n }\n\n _includeAsFile(entry) {\n const stats = entry && entry[this._statsProp];\n\n return stats && this._wantsEverything && !stats.isDirectory();\n }\n}\n\n/**\n * @typedef {Object} ReaddirpArguments\n * @property {Function=} fileFilter\n * @property {Function=} directoryFilter\n * @property {String=} type\n * @property {Number=} depth\n * @property {String=} root\n * @property {Boolean=} lstat\n * @property {Boolean=} bigint\n */\n\n/**\n * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.\n * @param {String} root Root directory\n * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth\n */\nconst readdirp = (root, options = {}) => {\n let type = options.entryType || options.type;\n if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility\n if (type) options.type = type;\n if (!root) {\n throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n } else if (typeof root !== 'string') {\n throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n } else if (type && !ALL_TYPES.includes(type)) {\n throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n }\n\n options.root = root;\n return new ReaddirpStream(options);\n};\n\nconst readdirpPromise = (root, options = {}) => {\n return new Promise((resolve, reject) => {\n const files = [];\n readdirp(root, options)\n .on('data', entry => files.push(entry))\n .on('end', () => resolve(files))\n .on('error', error => reject(error));\n });\n};\n\nreaddirp.promise = readdirpPromise;\nreaddirp.ReaddirpStream = ReaddirpStream;\nreaddirp.default = readdirp;\n\nmodule.exports = readdirp;\n","/*!\n * normalize-path <https://github.com/jonschlinkert/normalize-path>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nmodule.exports = function(path, stripTrailing) {\n if (typeof path !== 'string') {\n throw new TypeError('expected path to be a string');\n }\n\n if (path === '\\\\' || path === '/') return '/';\n\n var len = path.length;\n if (len <= 1) return path;\n\n // ensure that win32 namespaces has two leading slashes, so that the path is\n // handled properly by the win32 version of path.parse() after being normalized\n // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces\n var prefix = '';\n if (len > 4 && path[3] === '\\\\') {\n var ch = path[2];\n if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\\\\\') {\n path = path.slice(2);\n prefix = '//';\n }\n }\n\n var segs = path.split(/[/\\\\]+/);\n if (stripTrailing !== false && segs[segs.length - 1] === '') {\n segs.pop();\n }\n return prefix + segs.join('/');\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst picomatch = require('picomatch');\nconst normalizePath = require('normalize-path');\n\n/**\n * @typedef {(testString: string) => boolean} AnymatchFn\n * @typedef {string|RegExp|AnymatchFn} AnymatchPattern\n * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher\n */\nconst BANG = '!';\nconst DEFAULT_OPTIONS = {returnIndex: false};\nconst arrify = (item) => Array.isArray(item) ? item : [item];\n\n/**\n * @param {AnymatchPattern} matcher\n * @param {object} options\n * @returns {AnymatchFn}\n */\nconst createPattern = (matcher, options) => {\n if (typeof matcher === 'function') {\n return matcher;\n }\n if (typeof matcher === 'string') {\n const glob = picomatch(matcher, options);\n return (string) => matcher === string || glob(string);\n }\n if (matcher instanceof RegExp) {\n return (string) => matcher.test(string);\n }\n return (string) => false;\n};\n\n/**\n * @param {Array<Function>} patterns\n * @param {Array<Function>} negPatterns\n * @param {String|Array} args\n * @param {Boolean} returnIndex\n * @returns {boolean|number}\n */\nconst matchPatterns = (patterns, negPatterns, args, returnIndex) => {\n const isList = Array.isArray(args);\n const _path = isList ? args[0] : args;\n if (!isList && typeof _path !== 'string') {\n throw new TypeError('anymatch: second argument must be a string: got ' +\n Object.prototype.toString.call(_path))\n }\n const path = normalizePath(_path);\n\n for (let index = 0; index < negPatterns.length; index++) {\n const nglob = negPatterns[index];\n if (nglob(path)) {\n return returnIndex ? -1 : false;\n }\n }\n\n const applied = isList && [path].concat(args.slice(1));\n for (let index = 0; index < patterns.length; index++) {\n const pattern = patterns[index];\n if (isList ? pattern(...applied) : pattern(path)) {\n return returnIndex ? index : true;\n }\n }\n\n return returnIndex ? -1 : false;\n};\n\n/**\n * @param {AnymatchMatcher} matchers\n * @param {Array|string} testString\n * @param {object} options\n * @returns {boolean|number|Function}\n */\nconst anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {\n if (matchers == null) {\n throw new TypeError('anymatch: specify first argument');\n }\n const opts = typeof options === 'boolean' ? {returnIndex: options} : options;\n const returnIndex = opts.returnIndex || false;\n\n // Early cache for matchers.\n const mtchers = arrify(matchers);\n const negatedGlobs = mtchers\n .filter(item => typeof item === 'string' && item.charAt(0) === BANG)\n .map(item => item.slice(1))\n .map(item => picomatch(item, opts));\n const patterns = mtchers\n .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG))\n .map(matcher => createPattern(matcher, opts));\n\n if (testString == null) {\n return (testString, ri = false) => {\n const returnIndex = typeof ri === 'boolean' ? ri : false;\n return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n }\n }\n\n return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n};\n\nanymatch.default = anymatch;\nmodule.exports = anymatch;\n","module.exports = require('./binary-extensions.json');\n","'use strict';\nconst path = require('path');\nconst binaryExtensions = require('binary-extensions');\n\nconst extensions = new Set(binaryExtensions);\n\nmodule.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase());\n","'use strict';\n\nconst {sep} = require('path');\nconst {platform} = process;\nconst os = require('os');\n\nexports.EV_ALL = 'all';\nexports.EV_READY = 'ready';\nexports.EV_ADD = 'add';\nexports.EV_CHANGE = 'change';\nexports.EV_ADD_DIR = 'addDir';\nexports.EV_UNLINK = 'unlink';\nexports.EV_UNLINK_DIR = 'unlinkDir';\nexports.EV_RAW = 'raw';\nexports.EV_ERROR = 'error';\n\nexports.STR_DATA = 'data';\nexports.STR_END = 'end';\nexports.STR_CLOSE = 'close';\n\nexports.FSEVENT_CREATED = 'created';\nexports.FSEVENT_MODIFIED = 'modified';\nexports.FSEVENT_DELETED = 'deleted';\nexports.FSEVENT_MOVED = 'moved';\nexports.FSEVENT_CLONED = 'cloned';\nexports.FSEVENT_UNKNOWN = 'unknown';\nexports.FSEVENT_TYPE_FILE = 'file';\nexports.FSEVENT_TYPE_DIRECTORY = 'directory';\nexports.FSEVENT_TYPE_SYMLINK = 'symlink';\n\nexports.KEY_LISTENERS = 'listeners';\nexports.KEY_ERR = 'errHandlers';\nexports.KEY_RAW = 'rawEmitters';\nexports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];\n\nexports.DOT_SLASH = `.${sep}`;\n\nexports.BACK_SLASH_RE = /\\\\/g;\nexports.DOUBLE_SLASH_RE = /\\/\\//;\nexports.SLASH_OR_BACK_SLASH_RE = /[/\\\\]/;\nexports.DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nexports.REPLACER_RE = /^\\.[/\\\\]/;\n\nexports.SLASH = '/';\nexports.SLASH_SLASH = '//';\nexports.BRACE_START = '{';\nexports.BANG = '!';\nexports.ONE_DOT = '.';\nexports.TWO_DOTS = '..';\nexports.STAR = '*';\nexports.GLOBSTAR = '**';\nexports.ROOT_GLOBSTAR = '/**/*';\nexports.SLASH_GLOBSTAR = '/**';\nexports.DIR_SUFFIX = 'Dir';\nexports.ANYMATCH_OPTS = {dot: true};\nexports.STRING_TYPE = 'string';\nexports.FUNCTION_TYPE = 'function';\nexports.EMPTY_STR = '';\nexports.EMPTY_FN = () => {};\nexports.IDENTITY_FN = val => val;\n\nexports.isWindows = platform === 'win32';\nexports.isMacos = platform === 'darwin';\nexports.isLinux = platform === 'linux';\nexports.isIBMi = os.type() === 'OS400';\n","'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst isBinaryPath = require('is-binary-path');\nconst {\n isWindows,\n isLinux,\n EMPTY_FN,\n EMPTY_STR,\n KEY_LISTENERS,\n KEY_ERR,\n KEY_RAW,\n HANDLER_KEYS,\n EV_CHANGE,\n EV_ADD,\n EV_ADD_DIR,\n EV_ERROR,\n STR_DATA,\n STR_END,\n BRACE_START,\n STAR\n} = require('./constants');\n\nconst THROTTLE_MODE_WATCH = 'watch';\n\nconst open = promisify(fs.open);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst close = promisify(fs.close);\nconst fsrealpath = promisify(fs.realpath);\n\nconst statMethods = { lstat, stat };\n\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n if (val instanceof Set) {\n val.forEach(fn);\n } else {\n fn(val);\n }\n};\n\nconst addAndConvert = (main, prop, item) => {\n let container = main[prop];\n if (!(container instanceof Set)) {\n main[prop] = container = new Set([container]);\n }\n container.add(item);\n};\n\nconst clearItem = cont => key => {\n const set = cont[key];\n if (set instanceof Set) {\n set.clear();\n } else {\n delete cont[key];\n }\n};\n\nconst delFromSet = (main, prop, item) => {\n const container = main[prop];\n if (container instanceof Set) {\n container.delete(item);\n } else if (container === item) {\n delete main[prop];\n }\n};\n\nconst isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;\n\n/**\n * @typedef {String} Path\n */\n\n// fs_watch helpers\n\n// object to hold per-process fs_watch instances\n// (may be shared across chokidar FSWatcher instances)\n\n/**\n * @typedef {Object} FsWatchContainer\n * @property {Set} listeners\n * @property {Set} errHandlers\n * @property {Set} rawEmitters\n * @property {fs.FSWatcher=} watcher\n * @property {Boolean=} watcherUnusable\n */\n\n/**\n * @type {Map<String,FsWatchContainer>}\n */\nconst FsWatchInstances = new Map();\n\n/**\n * Instantiates the fs_watch interface\n * @param {String} path to be watched\n * @param {Object} options to be passed to fs_watch\n * @param {Function} listener main event handler\n * @param {Function} errHandler emits info about errors\n * @param {Function} emitRaw emits raw event data\n * @returns {fs.FSWatcher} new fsevents instance\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n const handleEvent = (rawEvent, evPath) => {\n listener(path);\n emitRaw(rawEvent, evPath, {watchedPath: path});\n\n // emit based on events occurring for files from a directory's watcher in\n // case the file's watcher misses it (and rely on throttling to de-dupe)\n if (evPath && path !== evPath) {\n fsWatchBroadcast(\n sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath)\n );\n }\n };\n try {\n return fs.watch(path, options, handleEvent);\n } catch (error) {\n errHandler(error);\n }\n}\n\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param {Path} fullPath absolute path bound to fs_watch instance\n * @param {String} type listener type\n * @param {*=} val1 arguments to be passed to listeners\n * @param {*=} val2\n * @param {*=} val3\n */\nconst fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {\n const cont = FsWatchInstances.get(fullPath);\n if (!cont) return;\n foreach(cont[type], (listener) => {\n listener(val1, val2, val3);\n });\n};\n\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path\n * @param {String} fullPath absolute path\n * @param {Object} options to be passed to fs_watch\n * @param {Object} handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n const {listener, errHandler, rawEmitter} = handlers;\n let cont = FsWatchInstances.get(fullPath);\n\n /** @type {fs.FSWatcher=} */\n let watcher;\n if (!options.persistent) {\n watcher = createFsWatchInstance(\n path, options, listener, errHandler, rawEmitter\n );\n return watcher.close.bind(watcher);\n }\n if (cont) {\n addAndConvert(cont, KEY_LISTENERS, listener);\n addAndConvert(cont, KEY_ERR, errHandler);\n addAndConvert(cont, KEY_RAW, rawEmitter);\n } else {\n watcher = createFsWatchInstance(\n path,\n options,\n fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),\n errHandler, // no need to use broadcast here\n fsWatchBroadcast.bind(null, fullPath, KEY_RAW)\n );\n if (!watcher) return;\n watcher.on(EV_ERROR, async (error) => {\n const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n cont.watcherUnusable = true; // documented since Node 10.4.1\n // Workaround for https://github.com/joyent/node/issues/4337\n if (isWindows && error.code === 'EPERM') {\n try {\n const fd = await open(path, 'r');\n await close(fd);\n broadcastErr(error);\n } catch (err) {}\n } else {\n broadcastErr(error);\n }\n });\n cont = {\n listeners: listener,\n errHandlers: errHandler,\n rawEmitters: rawEmitter,\n watcher\n };\n FsWatchInstances.set(fullPath, cont);\n }\n // const index = cont.listeners.indexOf(listener);\n\n // removes this instance's listeners and closes the underlying fs_watch\n // instance if there are no more listeners left\n return () => {\n delFromSet(cont, KEY_LISTENERS, listener);\n delFromSet(cont, KEY_ERR, errHandler);\n delFromSet(cont, KEY_RAW, rawEmitter);\n if (isEmptySet(cont.listeners)) {\n // Check to protect against issue gh-730.\n // if (cont.watcherUnusable) {\n cont.watcher.close();\n // }\n FsWatchInstances.delete(fullPath);\n HANDLER_KEYS.forEach(clearItem(cont));\n cont.watcher = undefined;\n Object.freeze(cont);\n }\n };\n};\n\n// fs_watchFile helpers\n\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path to be watched\n * @param {String} fullPath absolute path\n * @param {Object} options options to be passed to fs_watchFile\n * @param {Object} handlers container for event listener functions\n * @returns {Function} closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n const {listener, rawEmitter} = handlers;\n let cont = FsWatchFileInstances.get(fullPath);\n\n /* eslint-disable no-unused-vars, prefer-destructuring */\n let listeners = new Set();\n let rawEmitters = new Set();\n\n const copts = cont && cont.options;\n if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n // \"Upgrade\" the watcher to persistence or a quicker interval.\n // This creates some unlikely edge case issues if the user mixes\n // settings in a very weird way, but solving for those cases\n // doesn't seem worthwhile for the added complexity.\n listeners = cont.listeners;\n rawEmitters = cont.rawEmitters;\n fs.unwatchFile(fullPath);\n cont = undefined;\n }\n\n /* eslint-enable no-unused-vars, prefer-destructuring */\n\n if (cont) {\n addAndConvert(cont, KEY_LISTENERS, listener);\n addAndConvert(cont, KEY_RAW, rawEmitter);\n } else {\n // TODO\n // listeners.add(listener);\n // rawEmitters.add(rawEmitter);\n cont = {\n listeners: listener,\n rawEmitters: rawEmitter,\n options,\n watcher: fs.watchFile(fullPath, options, (curr, prev) => {\n foreach(cont.rawEmitters, (rawEmitter) => {\n rawEmitter(EV_CHANGE, fullPath, {curr, prev});\n });\n const currmtime = curr.mtimeMs;\n if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n foreach(cont.listeners, (listener) => listener(path, curr));\n }\n })\n };\n FsWatchFileInstances.set(fullPath, cont);\n }\n // const index = cont.listeners.indexOf(listener);\n\n // Removes this instance's listeners and closes the underlying fs_watchFile\n // instance if there are no more listeners left.\n return () => {\n delFromSet(cont, KEY_LISTENERS, listener);\n delFromSet(cont, KEY_RAW, rawEmitter);\n if (isEmptySet(cont.listeners)) {\n FsWatchFileInstances.delete(fullPath);\n fs.unwatchFile(fullPath);\n cont.options = cont.watcher = undefined;\n Object.freeze(cont);\n }\n };\n};\n\n/**\n * @mixin\n */\nclass NodeFsHandler {\n\n/**\n * @param {import(\"../index\").FSWatcher} fsW\n */\nconstructor(fsW) {\n this.fsw = fsW;\n this._boundHandleError = (error) => fsW._handleError(error);\n}\n\n/**\n * Watch file for changes with fs_watchFile or fs_watch.\n * @param {String} path to file or dir\n * @param {Function} listener on fs change\n * @returns {Function} closer for the watcher instance\n */\n_watchWithNodeFs(path, listener) {\n const opts = this.fsw.options;\n const directory = sysPath.dirname(path);\n const basename = sysPath.basename(path);\n const parent = this.fsw._getWatchedDir(directory);\n parent.add(basename);\n const absolutePath = sysPath.resolve(path);\n const options = {persistent: opts.persistent};\n if (!listener) listener = EMPTY_FN;\n\n let closer;\n if (opts.usePolling) {\n options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?\n opts.binaryInterval : opts.interval;\n closer = setFsWatchFileListener(path, absolutePath, options, {\n listener,\n rawEmitter: this.fsw._emitRaw\n });\n } else {\n closer = setFsWatchListener(path, absolutePath, options, {\n listener,\n errHandler: this._boundHandleError,\n rawEmitter: this.fsw._emitRaw\n });\n }\n return closer;\n}\n\n/**\n * Watch a file and emit add event if warranted.\n * @param {Path} file Path\n * @param {fs.Stats} stats result of fs_stat\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @returns {Function} closer for the watcher instance\n */\n_handleFile(file, stats, initialAdd) {\n if (this.fsw.closed) {\n return;\n }\n const dirname = sysPath.dirname(file);\n const basename = sysPath.basename(file);\n const parent = this.fsw._getWatchedDir(dirname);\n // stats is always present\n let prevStats = stats;\n\n // if the file is already being watched, do nothing\n if (parent.has(basename)) return;\n\n const listener = async (path, newStats) => {\n if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;\n if (!newStats || newStats.mtimeMs === 0) {\n try {\n const newStats = await stat(file);\n if (this.fsw.closed) return;\n // Check that change event was not fired because of changed only accessTime.\n const at = newStats.atimeMs;\n const mt = newStats.mtimeMs;\n if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n this.fsw._emit(EV_CHANGE, file, newStats);\n }\n if (isLinux && prevStats.ino !== newStats.ino) {\n this.fsw._closeFile(path)\n prevStats = newStats;\n this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));\n } else {\n prevStats = newStats;\n }\n } catch (error) {\n // Fix issues where mtime is null but file is still present\n this.fsw._remove(dirname, basename);\n }\n // add is about to be emitted if file not already tracked in parent\n } else if (parent.has(basename)) {\n // Check that change event was not fired because of changed only accessTime.\n const at = newStats.atimeMs;\n const mt = newStats.mtimeMs;\n if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n this.fsw._emit(EV_CHANGE, file, newStats);\n }\n prevStats = newStats;\n }\n }\n // kick off the watcher\n const closer = this._watchWithNodeFs(file, listener);\n\n // emit an add event if we're supposed to\n if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n if (!this.fsw._throttle(EV_ADD, file, 0)) return;\n this.fsw._emit(EV_ADD, file, stats);\n }\n\n return closer;\n}\n\n/**\n * Handle symlinks encountered while reading a dir.\n * @param {Object} entry returned by readdirp\n * @param {String} directory path of dir being read\n * @param {String} path of this item\n * @param {String} item basename of this item\n * @returns {Promise<Boolean>} true if no more processing is needed for this entry.\n */\nasync _handleSymlink(entry, directory, path, item) {\n if (this.fsw.closed) {\n return;\n }\n const full = entry.fullPath;\n const dir = this.fsw._getWatchedDir(directory);\n\n if (!this.fsw.options.followSymlinks) {\n // watch symlink directly (don't follow) and detect changes\n this.fsw._incrReadyCount();\n const linkPath = await fsrealpath(path);\n if (this.fsw.closed) return;\n if (dir.has(item)) {\n if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n this.fsw._symlinkPaths.set(full, linkPath);\n this.fsw._emit(EV_CHANGE, path, entry.stats);\n }\n } else {\n dir.add(item);\n this.fsw._symlinkPaths.set(full, linkPath);\n this.fsw._emit(EV_ADD, path, entry.stats);\n }\n this.fsw._emitReady();\n return true;\n }\n\n // don't follow the same symlink more than once\n if (this.fsw._symlinkPaths.has(full)) {\n return true;\n }\n\n this.fsw._symlinkPaths.set(full, true);\n}\n\n_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n // Normalize the directory name on Windows\n directory = sysPath.join(directory, EMPTY_STR);\n\n if (!wh.hasGlob) {\n throttler = this.fsw._throttle('readdir', directory, 1000);\n if (!throttler) return;\n }\n\n const previous = this.fsw._getWatchedDir(wh.path);\n const current = new Set();\n\n let stream = this.fsw._readdirp(directory, {\n fileFilter: entry => wh.filterPath(entry),\n directoryFilter: entry => wh.filterDir(entry),\n depth: 0\n }).on(STR_DATA, async (entry) => {\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n const item = entry.path;\n let path = sysPath.join(directory, item);\n current.add(item);\n\n if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {\n return;\n }\n\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n // Files that present in current directory snapshot\n // but absent in previous are added to watch list and\n // emit `add` event.\n if (item === target || !target && !previous.has(item)) {\n this.fsw._incrReadyCount();\n\n // ensure relativeness of path is preserved in case of watcher reuse\n path = sysPath.join(dir, sysPath.relative(dir, path));\n\n this._addToNodeFs(path, initialAdd, wh, depth + 1);\n }\n }).on(EV_ERROR, this._boundHandleError);\n\n return new Promise(resolve =>\n stream.once(STR_END, () => {\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n const wasThrottled = throttler ? throttler.clear() : false;\n\n resolve();\n\n // Files that absent in current directory snapshot\n // but present in previous emit `remove` event\n // and are removed from @watched[directory].\n previous.getChildren().filter((item) => {\n return item !== directory &&\n !current.has(item) &&\n // in case of intersecting globs;\n // a path may have been filtered out of this readdir, but\n // shouldn't be removed because it matches a different glob\n (!wh.hasGlob || wh.filterPath({\n fullPath: sysPath.resolve(directory, item)\n }));\n }).forEach((item) => {\n this.fsw._remove(directory, item);\n });\n\n stream = undefined;\n\n // one more time for any missed in case changes came in extremely quickly\n if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);\n })\n );\n}\n\n/**\n * Read directory to add / remove files from `@watched` list and re-read it on change.\n * @param {String} dir fs path\n * @param {fs.Stats} stats\n * @param {Boolean} initialAdd\n * @param {Number} depth relative to user-supplied path\n * @param {String} target child path targeted for watch\n * @param {Object} wh Common watch helpers for this path\n * @param {String} realpath\n * @returns {Promise<Function>} closer for the watcher instance.\n */\nasync _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir));\n const tracked = parentDir.has(sysPath.basename(dir));\n if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats);\n }\n\n // ensure dir is tracked (harmless if redundant)\n parentDir.add(sysPath.basename(dir));\n this.fsw._getWatchedDir(dir);\n let throttler;\n let closer;\n\n const oDepth = this.fsw.options.depth;\n if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n if (!target) {\n await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n if (this.fsw.closed) return;\n }\n\n closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n // if current directory is removed, do nothing\n if (stats && stats.mtimeMs === 0) return;\n\n this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n });\n }\n return closer;\n}\n\n/**\n * Handle added file, directory, or glob pattern.\n * Delegates call to _handleFile / _handleDir after checks.\n * @param {String} path to file or ir\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @param {Object} priorWh depth relative to user-supplied path\n * @param {Number} depth Child path actually targeted for watch\n * @param {String=} target Child path actually targeted for watch\n * @returns {Promise}\n */\nasync _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n const ready = this.fsw._emitReady;\n if (this.fsw._isIgnored(path) || this.fsw.closed) {\n ready();\n return false;\n }\n\n const wh = this.fsw._getWatchHelpers(path, depth);\n if (!wh.hasGlob && priorWh) {\n wh.hasGlob = priorWh.hasGlob;\n wh.globFilter = priorWh.globFilter;\n wh.filterPath = entry => priorWh.filterPath(entry);\n wh.filterDir = entry => priorWh.filterDir(entry);\n }\n\n // evaluate what is at the path we're being asked to watch\n try {\n const stats = await statMethods[wh.statMethod](wh.watchPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(wh.watchPath, stats)) {\n ready();\n return false;\n }\n\n const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START);\n let closer;\n if (stats.isDirectory()) {\n const absPath = sysPath.resolve(path);\n const targetPath = follow ? await fsrealpath(path) : path;\n if (this.fsw.closed) return;\n closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n if (this.fsw.closed) return;\n // preserve this symlink's target path\n if (absPath !== targetPath && targetPath !== undefined) {\n this.fsw._symlinkPaths.set(absPath, targetPath);\n }\n } else if (stats.isSymbolicLink()) {\n const targetPath = follow ? await fsrealpath(path) : path;\n if (this.fsw.closed) return;\n const parent = sysPath.dirname(wh.watchPath);\n this.fsw._getWatchedDir(parent).add(wh.watchPath);\n this.fsw._emit(EV_ADD, wh.watchPath, stats);\n closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n if (this.fsw.closed) return;\n\n // preserve this symlink's target path\n if (targetPath !== undefined) {\n this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath);\n }\n } else {\n closer = this._handleFile(wh.watchPath, stats, initialAdd);\n }\n ready();\n\n this.fsw._addPathCloser(path, closer);\n return false;\n\n } catch (error) {\n if (this.fsw._handleError(error)) {\n ready();\n return path;\n }\n }\n}\n\n}\n\nmodule.exports = NodeFsHandler;\n","'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\n\nlet fsevents;\ntry {\n fsevents = require('fsevents');\n} catch (error) {\n if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);\n}\n\nif (fsevents) {\n // TODO: real check\n const mtch = process.version.match(/v(\\d+)\\.(\\d+)/);\n if (mtch && mtch[1] && mtch[2]) {\n const maj = Number.parseInt(mtch[1], 10);\n const min = Number.parseInt(mtch[2], 10);\n if (maj === 8 && min < 16) {\n fsevents = undefined;\n }\n }\n}\n\nconst {\n EV_ADD,\n EV_CHANGE,\n EV_ADD_DIR,\n EV_UNLINK,\n EV_ERROR,\n STR_DATA,\n STR_END,\n FSEVENT_CREATED,\n FSEVENT_MODIFIED,\n FSEVENT_DELETED,\n FSEVENT_MOVED,\n // FSEVENT_CLONED,\n FSEVENT_UNKNOWN,\n FSEVENT_TYPE_FILE,\n FSEVENT_TYPE_DIRECTORY,\n FSEVENT_TYPE_SYMLINK,\n\n ROOT_GLOBSTAR,\n DIR_SUFFIX,\n DOT_SLASH,\n FUNCTION_TYPE,\n EMPTY_FN,\n IDENTITY_FN\n} = require('./constants');\n\nconst Depth = (value) => isNaN(value) ? {} : {depth: value};\n\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\nconst statMethods = { stat, lstat };\n\n/**\n * @typedef {String} Path\n */\n\n/**\n * @typedef {Object} FsEventsWatchContainer\n * @property {Set<Function>} listeners\n * @property {Function} rawEmitter\n * @property {{stop: Function}} watcher\n */\n\n// fsevents instance helper functions\n/**\n * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)\n * @type {Map<Path,FsEventsWatchContainer>}\n */\nconst FSEventsWatchers = new Map();\n\n// Threshold of duplicate path prefixes at which to start\n// consolidating going forward\nconst consolidateThreshhold = 10;\n\nconst wrongEventFlags = new Set([\n 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912\n]);\n\n/**\n * Instantiates the fsevents interface\n * @param {Path} path path to be watched\n * @param {Function} callback called when fsevents is bound and ready\n * @returns {{stop: Function}} new fsevents instance\n */\nconst createFSEventsInstance = (path, callback) => {\n const stop = fsevents.watch(path, callback);\n return {stop};\n};\n\n/**\n * Instantiates the fsevents interface or binds listeners to an existing one covering\n * the same file tree.\n * @param {Path} path - to be watched\n * @param {Path} realPath - real path for symlinks\n * @param {Function} listener - called when fsevents emits events\n * @param {Function} rawEmitter - passes data to listeners of the 'raw' event\n * @returns {Function} closer\n */\nfunction setFSEventsListener(path, realPath, listener, rawEmitter) {\n let watchPath = sysPath.extname(realPath) ? sysPath.dirname(realPath) : realPath;\n\n const parentPath = sysPath.dirname(watchPath);\n let cont = FSEventsWatchers.get(watchPath);\n\n // If we've accumulated a substantial number of paths that\n // could have been consolidated by watching one directory\n // above the current one, create a watcher on the parent\n // path instead, so that we do consolidate going forward.\n if (couldConsolidate(parentPath)) {\n watchPath = parentPath;\n }\n\n const resolvedPath = sysPath.resolve(path);\n const hasSymlink = resolvedPath !== realPath;\n\n const filteredListener = (fullPath, flags, info) => {\n if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);\n if (\n fullPath === resolvedPath ||\n !fullPath.indexOf(resolvedPath + sysPath.sep)\n ) listener(fullPath, flags, info);\n };\n\n // check if there is already a watcher on a parent path\n // modifies `watchPath` to the parent path when it finds a match\n let watchedParent = false;\n for (const watchedPath of FSEventsWatchers.keys()) {\n if (realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep) === 0) {\n watchPath = watchedPath;\n cont = FSEventsWatchers.get(watchPath);\n watchedParent = true;\n break;\n }\n }\n\n if (cont || watchedParent) {\n cont.listeners.add(filteredListener);\n } else {\n cont = {\n listeners: new Set([filteredListener]),\n rawEmitter,\n watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {\n if (!cont.listeners.size) return;\n const info = fsevents.getInfo(fullPath, flags);\n cont.listeners.forEach(list => {\n list(fullPath, flags, info);\n });\n\n cont.rawEmitter(info.event, fullPath, info);\n })\n };\n FSEventsWatchers.set(watchPath, cont);\n }\n\n // removes this instance's listeners and closes the underlying fsevents\n // instance if there are no more listeners left\n return () => {\n const lst = cont.listeners;\n\n lst.delete(filteredListener);\n if (!lst.size) {\n FSEventsWatchers.delete(watchPath);\n if (cont.watcher) return cont.watcher.stop().then(() => {\n cont.rawEmitter = cont.watcher = undefined;\n Object.freeze(cont);\n });\n }\n };\n}\n\n// Decide whether or not we should start a new higher-level\n// parent watcher\nconst couldConsolidate = (path) => {\n let count = 0;\n for (const watchPath of FSEventsWatchers.keys()) {\n if (watchPath.indexOf(path) === 0) {\n count++;\n if (count >= consolidateThreshhold) {\n return true;\n }\n }\n }\n\n return false;\n};\n\n// returns boolean indicating whether fsevents can be used\nconst canUse = () => fsevents && FSEventsWatchers.size < 128;\n\n// determines subdirectory traversal levels from root to path\nconst calcDepth = (path, root) => {\n let i = 0;\n while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;\n return i;\n};\n\n// returns boolean indicating whether the fsevents' event info has the same type\n// as the one returned by fs.stat\nconst sameTypes = (info, stats) => (\n info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||\n info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||\n info.type === FSEVENT_TYPE_FILE && stats.isFile()\n)\n\n/**\n * @mixin\n */\nclass FsEventsHandler {\n\n/**\n * @param {import('../index').FSWatcher} fsw\n */\nconstructor(fsw) {\n this.fsw = fsw;\n}\ncheckIgnored(path, stats) {\n const ipaths = this.fsw._ignoredPaths;\n if (this.fsw._isIgnored(path, stats)) {\n ipaths.add(path);\n if (stats && stats.isDirectory()) {\n ipaths.add(path + ROOT_GLOBSTAR);\n }\n return true;\n }\n\n ipaths.delete(path);\n ipaths.delete(path + ROOT_GLOBSTAR);\n}\n\naddOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n const event = watchedDir.has(item) ? EV_CHANGE : EV_ADD;\n this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n}\n\nasync checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n try {\n const stats = await stat(path)\n if (this.fsw.closed) return;\n if (sameTypes(info, stats)) {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } catch (error) {\n if (error.code === 'EACCES') {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n }\n}\n\nhandleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n if (this.fsw.closed || this.checkIgnored(path)) return;\n\n if (event === EV_UNLINK) {\n const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY\n // suppress unlink events on never before seen files\n if (isDirectory || watchedDir.has(item)) {\n this.fsw._remove(parent, item, isDirectory);\n }\n } else {\n if (event === EV_ADD) {\n // track new directories\n if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);\n\n if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {\n // push symlinks back to the top of the stack to get handled\n const curDepth = opts.depth === undefined ?\n undefined : calcDepth(fullPath, realPath) + 1;\n return this._addToFsEvents(path, false, true, curDepth);\n }\n\n // track new paths\n // (other than symlinks being followed, which will be tracked soon)\n this.fsw._getWatchedDir(parent).add(item);\n }\n /**\n * @type {'add'|'addDir'|'unlink'|'unlinkDir'}\n */\n const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;\n this.fsw._emit(eventName, path);\n if (eventName === EV_ADD_DIR) this._addToFsEvents(path, false, true);\n }\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} watchPath - file/dir path to be watched with fsevents\n * @param {String} realPath - real path (in case of symlinks)\n * @param {Function} transform - path transformer\n * @param {Function} globFilter - path filter in case a glob pattern was provided\n * @returns {Function} closer for the watcher instance\n*/\n_watchWithFsEvents(watchPath, realPath, transform, globFilter) {\n if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;\n const opts = this.fsw.options;\n const watchCallback = async (fullPath, flags, info) => {\n if (this.fsw.closed) return;\n if (\n opts.depth !== undefined &&\n calcDepth(fullPath, realPath) > opts.depth\n ) return;\n const path = transform(sysPath.join(\n watchPath, sysPath.relative(watchPath, fullPath)\n ));\n if (globFilter && !globFilter(path)) return;\n // ensure directories are tracked\n const parent = sysPath.dirname(path);\n const item = sysPath.basename(path);\n const watchedDir = this.fsw._getWatchedDir(\n info.type === FSEVENT_TYPE_DIRECTORY ? path : parent\n );\n\n // correct for wrong events emitted\n if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {\n if (typeof opts.ignored === FUNCTION_TYPE) {\n let stats;\n try {\n stats = await stat(path);\n } catch (error) {}\n if (this.fsw.closed) return;\n if (this.checkIgnored(path, stats)) return;\n if (sameTypes(info, stats)) {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } else {\n this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } else {\n switch (info.event) {\n case FSEVENT_CREATED:\n case FSEVENT_MODIFIED:\n return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n case FSEVENT_DELETED:\n case FSEVENT_MOVED:\n return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n }\n };\n\n const closer = setFSEventsListener(\n watchPath,\n realPath,\n watchCallback,\n this.fsw._emitRaw\n );\n\n this.fsw._emitReady();\n return closer;\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} linkPath path to symlink\n * @param {String} fullPath absolute path to the symlink\n * @param {Function} transform pre-existing path transformer\n * @param {Number} curDepth level of subdirectories traversed to where symlink is\n * @returns {Promise<void>}\n */\nasync _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {\n // don't follow the same symlink more than once\n if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;\n\n this.fsw._symlinkPaths.set(fullPath, true);\n this.fsw._incrReadyCount();\n\n try {\n const linkTarget = await realpath(linkPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(linkTarget)) {\n return this.fsw._emitReady();\n }\n\n this.fsw._incrReadyCount();\n\n // add the linkTarget for watching with a wrapper for transform\n // that causes emitted paths to incorporate the link's path\n this._addToFsEvents(linkTarget || linkPath, (path) => {\n let aliasedPath = linkPath;\n if (linkTarget && linkTarget !== DOT_SLASH) {\n aliasedPath = path.replace(linkTarget, linkPath);\n } else if (path !== DOT_SLASH) {\n aliasedPath = sysPath.join(linkPath, path);\n }\n return transform(aliasedPath);\n }, false, curDepth);\n } catch(error) {\n if (this.fsw._handleError(error)) {\n return this.fsw._emitReady();\n }\n }\n}\n\n/**\n *\n * @param {Path} newPath\n * @param {fs.Stats} stats\n */\nemitAdd(newPath, stats, processPath, opts, forceAdd) {\n const pp = processPath(newPath);\n const isDir = stats.isDirectory();\n const dirObj = this.fsw._getWatchedDir(sysPath.dirname(pp));\n const base = sysPath.basename(pp);\n\n // ensure empty dirs get tracked\n if (isDir) this.fsw._getWatchedDir(pp);\n if (dirObj.has(base)) return;\n dirObj.add(base);\n\n if (!opts.ignoreInitial || forceAdd === true) {\n this.fsw._emit(isDir ? EV_ADD_DIR : EV_ADD, pp, stats);\n }\n}\n\ninitWatch(realPath, path, wh, processPath) {\n if (this.fsw.closed) return;\n const closer = this._watchWithFsEvents(\n wh.watchPath,\n sysPath.resolve(realPath || wh.watchPath),\n processPath,\n wh.globFilter\n );\n this.fsw._addPathCloser(path, closer);\n}\n\n/**\n * Handle added path with fsevents\n * @param {String} path file/dir path or glob pattern\n * @param {Function|Boolean=} transform converts working path to what the user expects\n * @param {Boolean=} forceAdd ensure add is emitted\n * @param {Number=} priorDepth Level of subdirectories already traversed.\n * @returns {Promise<void>}\n */\nasync _addToFsEvents(path, transform, forceAdd, priorDepth) {\n if (this.fsw.closed) {\n return;\n }\n const opts = this.fsw.options;\n const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN;\n\n const wh = this.fsw._getWatchHelpers(path);\n\n // evaluate what is at the path we're being asked to watch\n try {\n const stats = await statMethods[wh.statMethod](wh.watchPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(wh.watchPath, stats)) {\n throw null;\n }\n if (stats.isDirectory()) {\n // emit addDir unless this is a glob parent\n if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);\n\n // don't recurse further if it would exceed depth setting\n if (priorDepth && priorDepth > opts.depth) return;\n\n // scan the contents of the dir\n this.fsw._readdirp(wh.watchPath, {\n fileFilter: entry => wh.filterPath(entry),\n directoryFilter: entry => wh.filterDir(entry),\n ...Depth(opts.depth - (priorDepth || 0))\n }).on(STR_DATA, (entry) => {\n // need to check filterPath on dirs b/c filterDir is less restrictive\n if (this.fsw.closed) {\n return;\n }\n if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;\n\n const joinedPath = sysPath.join(wh.watchPath, entry.path);\n const {fullPath} = entry;\n\n if (wh.followSymlinks && entry.stats.isSymbolicLink()) {\n // preserve the current depth here since it can't be derived from\n // real paths past the symlink\n const curDepth = opts.depth === undefined ?\n undefined : calcDepth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;\n\n this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);\n } else {\n this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);\n }\n }).on(EV_ERROR, EMPTY_FN).on(STR_END, () => {\n this.fsw._emitReady();\n });\n } else {\n this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);\n this.fsw._emitReady();\n }\n } catch (error) {\n if (!error || this.fsw._handleError(error)) {\n // TODO: Strange thing: \"should not choke on an ignored watch path\" will be failed without 2 ready calls -__-\n this.fsw._emitReady();\n this.fsw._emitReady();\n }\n }\n\n if (opts.persistent && forceAdd !== true) {\n if (typeof transform === FUNCTION_TYPE) {\n // realpath has already been resolved\n this.initWatch(undefined, path, wh, processPath);\n } else {\n let realPath;\n try {\n realPath = await realpath(wh.watchPath);\n } catch (e) {}\n this.initWatch(realPath, path, wh, processPath);\n }\n }\n}\n\n}\n\nmodule.exports = FsEventsHandler;\nmodule.exports.canUse = canUse;\n","'use strict';\n\nconst { EventEmitter } = require('events');\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst readdirp = require('readdirp');\nconst anymatch = require('anymatch').default;\nconst globParent = require('glob-parent');\nconst isGlob = require('is-glob');\nconst braces = require('braces');\nconst normalizePath = require('normalize-path');\n\nconst NodeFsHandler = require('./lib/nodefs-handler');\nconst FsEventsHandler = require('./lib/fsevents-handler');\nconst {\n EV_ALL,\n EV_READY,\n EV_ADD,\n EV_CHANGE,\n EV_UNLINK,\n EV_ADD_DIR,\n EV_UNLINK_DIR,\n EV_RAW,\n EV_ERROR,\n\n STR_CLOSE,\n STR_END,\n\n BACK_SLASH_RE,\n DOUBLE_SLASH_RE,\n SLASH_OR_BACK_SLASH_RE,\n DOT_RE,\n REPLACER_RE,\n\n SLASH,\n SLASH_SLASH,\n BRACE_START,\n BANG,\n ONE_DOT,\n TWO_DOTS,\n GLOBSTAR,\n SLASH_GLOBSTAR,\n ANYMATCH_OPTS,\n STRING_TYPE,\n FUNCTION_TYPE,\n EMPTY_STR,\n EMPTY_FN,\n\n isWindows,\n isMacos,\n isIBMi\n} = require('./lib/constants');\n\nconst stat = promisify(fs.stat);\nconst readdir = promisify(fs.readdir);\n\n/**\n * @typedef {String} Path\n * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName\n * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType\n */\n\n/**\n *\n * @typedef {Object} WatchHelpers\n * @property {Boolean} followSymlinks\n * @property {'stat'|'lstat'} statMethod\n * @property {Path} path\n * @property {Path} watchPath\n * @property {Function} entryPath\n * @property {Boolean} hasGlob\n * @property {Object} globFilter\n * @property {Function} filterPath\n * @property {Function} filterDir\n */\n\nconst arrify = (value = []) => Array.isArray(value) ? value : [value];\nconst flatten = (list, result = []) => {\n list.forEach(item => {\n if (Array.isArray(item)) {\n flatten(item, result);\n } else {\n result.push(item);\n }\n });\n return result;\n};\n\nconst unifyPaths = (paths_) => {\n /**\n * @type {Array<String>}\n */\n const paths = flatten(arrify(paths_));\n if (!paths.every(p => typeof p === STRING_TYPE)) {\n throw new TypeError(`Non-string provided as watch path: ${paths}`);\n }\n return paths.map(normalizePathToUnix);\n};\n\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n// because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n let str = string.replace(BACK_SLASH_RE, SLASH);\n let prepend = false;\n if (str.startsWith(SLASH_SLASH)) {\n prepend = true;\n }\n while (str.match(DOUBLE_SLASH_RE)) {\n str = str.replace(DOUBLE_SLASH_RE, SLASH);\n }\n if (prepend) {\n str = SLASH + str;\n }\n return str;\n};\n\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));\n\nconst normalizeIgnored = (cwd = EMPTY_STR) => (path) => {\n if (typeof path !== STRING_TYPE) return path;\n return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));\n};\n\nconst getAbsolutePath = (path, cwd) => {\n if (sysPath.isAbsolute(path)) {\n return path;\n }\n if (path.startsWith(BANG)) {\n return BANG + sysPath.join(cwd, path.slice(1));\n }\n return sysPath.join(cwd, path);\n};\n\nconst undef = (opts, key) => opts[key] === undefined;\n\n/**\n * Directory entry.\n * @property {Path} path\n * @property {Set<Path>} items\n */\nclass DirEntry {\n /**\n * @param {Path} dir\n * @param {Function} removeWatcher\n */\n constructor(dir, removeWatcher) {\n this.path = dir;\n this._removeWatcher = removeWatcher;\n /** @type {Set<Path>} */\n this.items = new Set();\n }\n\n add(item) {\n const {items} = this;\n if (!items) return;\n if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);\n }\n\n async remove(item) {\n const {items} = this;\n if (!items) return;\n items.delete(item);\n if (items.size > 0) return;\n\n const dir = this.path;\n try {\n await readdir(dir);\n } catch (err) {\n if (this._removeWatcher) {\n this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));\n }\n }\n }\n\n has(item) {\n const {items} = this;\n if (!items) return;\n return items.has(item);\n }\n\n /**\n * @returns {Array<String>}\n */\n getChildren() {\n const {items} = this;\n if (!items) return;\n return [...items.values()];\n }\n\n dispose() {\n this.items.clear();\n delete this.path;\n delete this._removeWatcher;\n delete this.items;\n Object.freeze(this);\n }\n}\n\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nclass WatchHelper {\n constructor(path, watchPath, follow, fsw) {\n this.fsw = fsw;\n this.path = path = path.replace(REPLACER_RE, EMPTY_STR);\n this.watchPath = watchPath;\n this.fullWatchPath = sysPath.resolve(watchPath);\n this.hasGlob = watchPath !== path;\n /** @type {object|boolean} */\n if (path === EMPTY_STR) this.hasGlob = false;\n this.globSymlink = this.hasGlob && follow ? undefined : false;\n this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;\n this.dirParts = this.getDirParts(path);\n this.dirParts.forEach((parts) => {\n if (parts.length > 1) parts.pop();\n });\n this.followSymlinks = follow;\n this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n }\n\n checkGlobSymlink(entry) {\n // only need to resolve once\n // first entry should always have entry.parentDir === EMPTY_STR\n if (this.globSymlink === undefined) {\n this.globSymlink = entry.fullParentDir === this.fullWatchPath ?\n false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};\n }\n\n if (this.globSymlink) {\n return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);\n }\n\n return entry.fullPath;\n }\n\n entryPath(entry) {\n return sysPath.join(this.watchPath,\n sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))\n );\n }\n\n filterPath(entry) {\n const {stats} = entry;\n if (stats && stats.isSymbolicLink()) return this.filterDir(entry);\n const resolvedPath = this.entryPath(entry);\n const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ?\n this.globFilter(resolvedPath) : true;\n return matchesGlob &&\n this.fsw._isntIgnored(resolvedPath, stats) &&\n this.fsw._hasReadPermissions(stats);\n }\n\n getDirParts(path) {\n if (!this.hasGlob) return [];\n const parts = [];\n const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path];\n expandedPath.forEach((path) => {\n parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));\n });\n return parts;\n }\n\n filterDir(entry) {\n if (this.hasGlob) {\n const entryParts = this.getDirParts(this.checkGlobSymlink(entry));\n let globstar = false;\n this.unmatchedGlob = !this.dirParts.some((parts) => {\n return parts.every((part, i) => {\n if (part === GLOBSTAR) globstar = true;\n return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);\n });\n });\n }\n return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n }\n}\n\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n * new FSWatcher()\n * .add(directories)\n * .on('add', path => log('File', path, 'was added'))\n */\nclass FSWatcher extends EventEmitter {\n// Not indenting methods for history sake; for now.\nconstructor(_opts) {\n super();\n\n const opts = {};\n if (_opts) Object.assign(opts, _opts); // for frozen objects\n\n /** @type {Map<String, DirEntry>} */\n this._watched = new Map();\n /** @type {Map<String, Array>} */\n this._closers = new Map();\n /** @type {Set<String>} */\n this._ignoredPaths = new Set();\n\n /** @type {Map<ThrottleType, Map>} */\n this._throttled = new Map();\n\n /** @type {Map<Path, String|Boolean>} */\n this._symlinkPaths = new Map();\n\n this._streams = new Set();\n this.closed = false;\n\n // Set up default options.\n if (undef(opts, 'persistent')) opts.persistent = true;\n if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;\n if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;\n if (undef(opts, 'interval')) opts.interval = 100;\n if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;\n if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;\n opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;\n\n // Enable fsevents on OS X when polling isn't explicitly enabled.\n if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;\n\n // If we can't use fsevents, ensure the options reflect it's disabled.\n const canUseFsEvents = FsEventsHandler.canUse();\n if (!canUseFsEvents) opts.useFsEvents = false;\n\n // Use polling on Mac if not using fsevents.\n // Other platforms use non-polling fs_watch.\n if (undef(opts, 'usePolling') && !opts.useFsEvents) {\n opts.usePolling = isMacos;\n }\n\n // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n if(isIBMi) {\n opts.usePolling = true;\n }\n\n // Global override (useful for end-developers that need to force polling for all\n // instances of chokidar, regardless of usage/dependency depth)\n const envPoll = process.env.CHOKIDAR_USEPOLLING;\n if (envPoll !== undefined) {\n const envLower = envPoll.toLowerCase();\n\n if (envLower === 'false' || envLower === '0') {\n opts.usePolling = false;\n } else if (envLower === 'true' || envLower === '1') {\n opts.usePolling = true;\n } else {\n opts.usePolling = !!envLower;\n }\n }\n const envInterval = process.env.CHOKIDAR_INTERVAL;\n if (envInterval) {\n opts.interval = Number.parseInt(envInterval, 10);\n }\n\n // Editor atomic write normalization enabled by default with fs.watch\n if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;\n if (opts.atomic) this._pendingUnlinks = new Map();\n\n if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;\n\n if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;\n if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};\n const awf = opts.awaitWriteFinish;\n if (awf) {\n if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;\n if (!awf.pollInterval) awf.pollInterval = 100;\n this._pendingWrites = new Map();\n }\n if (opts.ignored) opts.ignored = arrify(opts.ignored);\n\n let readyCalls = 0;\n this._emitReady = () => {\n readyCalls++;\n if (readyCalls >= this._readyCount) {\n this._emitReady = EMPTY_FN;\n this._readyEmitted = true;\n // use process.nextTick to allow time for listener to be bound\n process.nextTick(() => this.emit(EV_READY));\n }\n };\n this._emitRaw = (...args) => this.emit(EV_RAW, ...args);\n this._readyEmitted = false;\n this.options = opts;\n\n // Initialize with proper watcher.\n if (opts.useFsEvents) {\n this._fsEventsHandler = new FsEventsHandler(this);\n } else {\n this._nodeFsHandler = new NodeFsHandler(this);\n }\n\n // You’re frozen when your heart’s not open.\n Object.freeze(opts);\n}\n\n// Public methods\n\n/**\n * Adds paths to be watched on an existing FSWatcher instance\n * @param {Path|Array<Path>} paths_\n * @param {String=} _origAdd private; for handling non-existent paths to be watched\n * @param {Boolean=} _internal private; indicates a non-user add\n * @returns {FSWatcher} for chaining\n */\nadd(paths_, _origAdd, _internal) {\n const {cwd, disableGlobbing} = this.options;\n this.closed = false;\n let paths = unifyPaths(paths_);\n if (cwd) {\n paths = paths.map((path) => {\n const absPath = getAbsolutePath(path, cwd);\n\n // Check `path` instead of `absPath` because the cwd portion can't be a glob\n if (disableGlobbing || !isGlob(path)) {\n return absPath;\n }\n return normalizePath(absPath);\n });\n }\n\n // set aside negated glob strings\n paths = paths.filter((path) => {\n if (path.startsWith(BANG)) {\n this._ignoredPaths.add(path.slice(1));\n return false;\n }\n\n // if a path is being added that was previously ignored, stop ignoring it\n this._ignoredPaths.delete(path);\n this._ignoredPaths.delete(path + SLASH_GLOBSTAR);\n\n // reset the cached userIgnored anymatch fn\n // to make ignoredPaths changes effective\n this._userIgnored = undefined;\n\n return true;\n });\n\n if (this.options.useFsEvents && this._fsEventsHandler) {\n if (!this._readyCount) this._readyCount = paths.length;\n if (this.options.persistent) this._readyCount *= 2;\n paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));\n } else {\n if (!this._readyCount) this._readyCount = 0;\n this._readyCount += paths.length;\n Promise.all(\n paths.map(async path => {\n const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);\n if (res) this._emitReady();\n return res;\n })\n ).then(results => {\n if (this.closed) return;\n results.filter(item => item).forEach(item => {\n this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));\n });\n });\n }\n\n return this;\n}\n\n/**\n * Close watchers or start ignoring events from specified paths.\n * @param {Path|Array<Path>} paths_ - string or array of strings, file/directory paths and/or globs\n * @returns {FSWatcher} for chaining\n*/\nunwatch(paths_) {\n if (this.closed) return this;\n const paths = unifyPaths(paths_);\n const {cwd} = this.options;\n\n paths.forEach((path) => {\n // convert to absolute path unless relative path already matches\n if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {\n if (cwd) path = sysPath.join(cwd, path);\n path = sysPath.resolve(path);\n }\n\n this._closePath(path);\n\n this._ignoredPaths.add(path);\n if (this._watched.has(path)) {\n this._ignoredPaths.add(path + SLASH_GLOBSTAR);\n }\n\n // reset the cached userIgnored anymatch fn\n // to make ignoredPaths changes effective\n this._userIgnored = undefined;\n });\n\n return this;\n}\n\n/**\n * Close watchers and remove all listeners from watched paths.\n * @returns {Promise<void>}.\n*/\nclose() {\n if (this.closed) return this._closePromise;\n this.closed = true;\n\n // Memory management.\n this.removeAllListeners();\n const closers = [];\n this._closers.forEach(closerList => closerList.forEach(closer => {\n const promise = closer();\n if (promise instanceof Promise) closers.push(promise);\n }));\n this._streams.forEach(stream => stream.destroy());\n this._userIgnored = undefined;\n this._readyCount = 0;\n this._readyEmitted = false;\n this._watched.forEach(dirent => dirent.dispose());\n ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {\n this[`_${key}`].clear();\n });\n\n this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();\n return this._closePromise;\n}\n\n/**\n * Expose list of watched paths\n * @returns {Object} for chaining\n*/\ngetWatched() {\n const watchList = {};\n this._watched.forEach((entry, dir) => {\n const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;\n watchList[key || ONE_DOT] = entry.getChildren().sort();\n });\n return watchList;\n}\n\nemitWithAll(event, args) {\n this.emit(...args);\n if (event !== EV_ERROR) this.emit(EV_ALL, ...args);\n}\n\n// Common helpers\n// --------------\n\n/**\n * Normalize and emit events.\n * Calling _emit DOES NOT MEAN emit() would be called!\n * @param {EventName} event Type of event\n * @param {Path} path File or directory path\n * @param {*=} val1 arguments to be passed with event\n * @param {*=} val2\n * @param {*=} val3\n * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\nasync _emit(event, path, val1, val2, val3) {\n if (this.closed) return;\n\n const opts = this.options;\n if (isWindows) path = sysPath.normalize(path);\n if (opts.cwd) path = sysPath.relative(opts.cwd, path);\n /** @type Array<any> */\n const args = [event, path];\n if (val3 !== undefined) args.push(val1, val2, val3);\n else if (val2 !== undefined) args.push(val1, val2);\n else if (val1 !== undefined) args.push(val1);\n\n const awf = opts.awaitWriteFinish;\n let pw;\n if (awf && (pw = this._pendingWrites.get(path))) {\n pw.lastChange = new Date();\n return this;\n }\n\n if (opts.atomic) {\n if (event === EV_UNLINK) {\n this._pendingUnlinks.set(path, args);\n setTimeout(() => {\n this._pendingUnlinks.forEach((entry, path) => {\n this.emit(...entry);\n this.emit(EV_ALL, ...entry);\n this._pendingUnlinks.delete(path);\n });\n }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n return this;\n }\n if (event === EV_ADD && this._pendingUnlinks.has(path)) {\n event = args[0] = EV_CHANGE;\n this._pendingUnlinks.delete(path);\n }\n }\n\n if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {\n const awfEmit = (err, stats) => {\n if (err) {\n event = args[0] = EV_ERROR;\n args[1] = err;\n this.emitWithAll(event, args);\n } else if (stats) {\n // if stats doesn't exist the file must have been deleted\n if (args.length > 2) {\n args[2] = stats;\n } else {\n args.push(stats);\n }\n this.emitWithAll(event, args);\n }\n };\n\n this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n return this;\n }\n\n if (event === EV_CHANGE) {\n const isThrottled = !this._throttle(EV_CHANGE, path, 50);\n if (isThrottled) return this;\n }\n\n if (opts.alwaysStat && val1 === undefined &&\n (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)\n ) {\n const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;\n let stats;\n try {\n stats = await stat(fullPath);\n } catch (err) {}\n // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n if (!stats || this.closed) return;\n args.push(stats);\n }\n this.emitWithAll(event, args);\n\n return this;\n}\n\n/**\n * Common handler for errors\n * @param {Error} error\n * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\n_handleError(error) {\n const code = error && error.code;\n if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&\n (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))\n ) {\n this.emit(EV_ERROR, error);\n }\n return error || this.closed;\n}\n\n/**\n * Helper utility for throttling\n * @param {ThrottleType} actionType type being throttled\n * @param {Path} path being acted upon\n * @param {Number} timeout duration of time to suppress duplicate actions\n * @returns {Object|false} tracking object or false if action should be suppressed\n */\n_throttle(actionType, path, timeout) {\n if (!this._throttled.has(actionType)) {\n this._throttled.set(actionType, new Map());\n }\n\n /** @type {Map<Path, Object>} */\n const action = this._throttled.get(actionType);\n /** @type {Object} */\n const actionPath = action.get(path);\n\n if (actionPath) {\n actionPath.count++;\n return false;\n }\n\n let timeoutObject;\n const clear = () => {\n const item = action.get(path);\n const count = item ? item.count : 0;\n action.delete(path);\n clearTimeout(timeoutObject);\n if (item) clearTimeout(item.timeoutObject);\n return count;\n };\n timeoutObject = setTimeout(clear, timeout);\n const thr = {timeoutObject, clear, count: 0};\n action.set(path, thr);\n return thr;\n}\n\n_incrReadyCount() {\n return this._readyCount++;\n}\n\n/**\n * Awaits write operation to finish.\n * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n * @param {Path} path being acted upon\n * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n * @param {EventName} event\n * @param {Function} awfEmit Callback to be called when ready for event to be emitted.\n */\n_awaitWriteFinish(path, threshold, event, awfEmit) {\n let timeoutHandler;\n\n let fullPath = path;\n if (this.options.cwd && !sysPath.isAbsolute(path)) {\n fullPath = sysPath.join(this.options.cwd, path);\n }\n\n const now = new Date();\n\n const awaitWriteFinish = (prevStat) => {\n fs.stat(fullPath, (err, curStat) => {\n if (err || !this._pendingWrites.has(path)) {\n if (err && err.code !== 'ENOENT') awfEmit(err);\n return;\n }\n\n const now = Number(new Date());\n\n if (prevStat && curStat.size !== prevStat.size) {\n this._pendingWrites.get(path).lastChange = now;\n }\n const pw = this._pendingWrites.get(path);\n const df = now - pw.lastChange;\n\n if (df >= threshold) {\n this._pendingWrites.delete(path);\n awfEmit(undefined, curStat);\n } else {\n timeoutHandler = setTimeout(\n awaitWriteFinish,\n this.options.awaitWriteFinish.pollInterval,\n curStat\n );\n }\n });\n };\n\n if (!this._pendingWrites.has(path)) {\n this._pendingWrites.set(path, {\n lastChange: now,\n cancelWait: () => {\n this._pendingWrites.delete(path);\n clearTimeout(timeoutHandler);\n return event;\n }\n });\n timeoutHandler = setTimeout(\n awaitWriteFinish,\n this.options.awaitWriteFinish.pollInterval\n );\n }\n}\n\n_getGlobIgnored() {\n return [...this._ignoredPaths.values()];\n}\n\n/**\n * Determines whether user has asked to ignore this path.\n * @param {Path} path filepath or dir\n * @param {fs.Stats=} stats result of fs.stat\n * @returns {Boolean}\n */\n_isIgnored(path, stats) {\n if (this.options.atomic && DOT_RE.test(path)) return true;\n if (!this._userIgnored) {\n const {cwd} = this.options;\n const ign = this.options.ignored;\n\n const ignored = ign && ign.map(normalizeIgnored(cwd));\n const paths = arrify(ignored)\n .filter((path) => typeof path === STRING_TYPE && !isGlob(path))\n .map((path) => path + SLASH_GLOBSTAR);\n const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);\n this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);\n }\n\n return this._userIgnored([path, stats]);\n}\n\n_isntIgnored(path, stat) {\n return !this._isIgnored(path, stat);\n}\n\n/**\n * Provides a set of common helpers and properties relating to symlink and glob handling.\n * @param {Path} path file, directory, or glob pattern being watched\n * @param {Number=} depth at any depth > 0, this isn't a glob\n * @returns {WatchHelper} object containing helpers for this path\n */\n_getWatchHelpers(path, depth) {\n const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);\n const follow = this.options.followSymlinks;\n\n return new WatchHelper(path, watchPath, follow, this);\n}\n\n// Directory helpers\n// -----------------\n\n/**\n * Provides directory tracking objects\n * @param {String} directory path of the directory\n * @returns {DirEntry} the directory's tracking object\n */\n_getWatchedDir(directory) {\n if (!this._boundRemove) this._boundRemove = this._remove.bind(this);\n const dir = sysPath.resolve(directory);\n if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n return this._watched.get(dir);\n}\n\n// File helpers\n// ------------\n\n/**\n * Check for read permissions.\n * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405\n * @param {fs.Stats} stats - object, result of fs_stat\n * @returns {Boolean} indicates whether the file can be read\n*/\n_hasReadPermissions(stats) {\n if (this.options.ignorePermissionErrors) return true;\n\n // stats.mode may be bigint\n const md = stats && Number.parseInt(stats.mode, 10);\n const st = md & 0o777;\n const it = Number.parseInt(st.toString(8)[0], 10);\n return Boolean(4 & it);\n}\n\n/**\n * Handles emitting unlink events for\n * files and directories, and via recursion, for\n * files and directories within directories that are unlinked\n * @param {String} directory within which the following item is located\n * @param {String} item base path of item/directory\n * @returns {void}\n*/\n_remove(directory, item, isDirectory) {\n // if what is being deleted is a directory, get that directory's paths\n // for recursive deleting and cleaning of watched object\n // if it is not a directory, nestedDirectoryChildren will be empty array\n const path = sysPath.join(directory, item);\n const fullPath = sysPath.resolve(path);\n isDirectory = isDirectory != null\n ? isDirectory\n : this._watched.has(path) || this._watched.has(fullPath);\n\n // prevent duplicate handling in case of arriving here nearly simultaneously\n // via multiple paths (such as _handleFile and _handleDir)\n if (!this._throttle('remove', path, 100)) return;\n\n // if the only watched file is removed, watch for its return\n if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {\n this.add(directory, item, true);\n }\n\n // This will create a new entry in the watched object in either case\n // so we got to do the directory check beforehand\n const wp = this._getWatchedDir(path);\n const nestedDirectoryChildren = wp.getChildren();\n\n // Recursively remove children directories / files.\n nestedDirectoryChildren.forEach(nested => this._remove(path, nested));\n\n // Check if item was on the watched list and remove it\n const parent = this._getWatchedDir(directory);\n const wasTracked = parent.has(item);\n parent.remove(item);\n\n // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n // but never removed from the map in case the path was deleted.\n // This leads to an incorrect state if the path was recreated:\n // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n if (this._symlinkPaths.has(fullPath)) {\n this._symlinkPaths.delete(fullPath);\n }\n\n // If we wait for this file to be fully written, cancel the wait.\n let relPath = path;\n if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);\n if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n const event = this._pendingWrites.get(relPath).cancelWait();\n if (event === EV_ADD) return;\n }\n\n // The Entry will either be a directory that just got removed\n // or a bogus entry to a file, in either case we have to remove it\n this._watched.delete(path);\n this._watched.delete(fullPath);\n const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK;\n if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);\n\n // Avoid conflicts if we later create another file with the same name\n if (!this.options.useFsEvents) {\n this._closePath(path);\n }\n}\n\n/**\n * Closes all watchers for a path\n * @param {Path} path\n */\n_closePath(path) {\n this._closeFile(path)\n const dir = sysPath.dirname(path);\n this._getWatchedDir(dir).remove(sysPath.basename(path));\n}\n\n/**\n * Closes only file-specific watchers\n * @param {Path} path\n */\n_closeFile(path) {\n const closers = this._closers.get(path);\n if (!closers) return;\n closers.forEach(closer => closer());\n this._closers.delete(path);\n}\n\n/**\n *\n * @param {Path} path\n * @param {Function} closer\n */\n_addPathCloser(path, closer) {\n if (!closer) return;\n let list = this._closers.get(path);\n if (!list) {\n list = [];\n this._closers.set(path, list);\n }\n list.push(closer);\n}\n\n_readdirp(root, opts) {\n if (this.closed) return;\n const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};\n let stream = readdirp(root, options);\n this._streams.add(stream);\n stream.once(STR_CLOSE, () => {\n stream = undefined;\n });\n stream.once(STR_END, () => {\n if (stream) {\n this._streams.delete(stream);\n stream = undefined;\n }\n });\n return stream;\n}\n\n}\n\n// Export FSWatcher class\nexports.FSWatcher = FSWatcher;\n\n/**\n * Instantiates watcher with paths to be tracked.\n * @param {String|Array<String>} paths file/directory paths and/or globs\n * @param {Object=} options chokidar opts\n * @returns an instance of FSWatcher for chaining.\n */\nconst watch = (paths, options) => {\n const watcher = new FSWatcher(options);\n watcher.add(paths);\n return watcher;\n};\n\nexports.watch = watch;\n","import fs, { promises as fsp } from 'fs'\nimport path from 'path'\nimport { Server as HttpServer } from 'http'\nimport { ServerOptions as HttpsServerOptions } from 'https'\nimport { ResolvedConfig, ServerOptions } from '..'\nimport { isObject } from '../utils'\nimport { Connect } from 'types/connect'\nimport { Logger } from '../logger'\n\nexport async function resolveHttpServer(\n { proxy }: ServerOptions,\n app: Connect.Server,\n httpsOptions?: HttpsServerOptions\n): Promise<HttpServer> {\n if (!httpsOptions) {\n return require('http').createServer(app)\n }\n\n if (proxy) {\n // #484 fallback to http1 when proxy is needed.\n return require('https').createServer(httpsOptions, app)\n } else {\n return require('http2').createSecureServer(\n {\n ...httpsOptions,\n allowHTTP1: true\n },\n app\n )\n }\n}\n\nexport async function resolveHttpsConfig(\n config: ResolvedConfig\n): Promise<HttpsServerOptions | undefined> {\n if (!config.server.https) return undefined\n\n const httpsOption = isObject(config.server.https) ? config.server.https : {}\n\n const { ca, cert, key, pfx } = httpsOption\n Object.assign(httpsOption, {\n ca: readFileIfExists(ca),\n cert: readFileIfExists(cert),\n key: readFileIfExists(key),\n pfx: readFileIfExists(pfx)\n })\n if (!httpsOption.key || !httpsOption.cert) {\n httpsOption.cert = httpsOption.key = await getCertificate(config)\n }\n return httpsOption\n}\n\nfunction readFileIfExists(value?: string | Buffer | any[]) {\n if (typeof value === 'string') {\n try {\n return fs.readFileSync(path.resolve(value as string))\n } catch (e) {\n return value\n }\n }\n return value\n}\n\n/**\n * https://github.com/webpack/webpack-dev-server/blob/master/lib/utils/createCertificate.js\n *\n * Copyright JS Foundation and other contributors\n * This source code is licensed under the MIT license found in the\n * LICENSE file at\n * https://github.com/webpack/webpack-dev-server/blob/master/LICENSE\n */\nasync function createCertificate() {\n const { generate } = await import('selfsigned')\n const pems = generate(null, {\n algorithm: 'sha256',\n days: 30,\n keySize: 2048,\n extensions: [\n // {\n // name: 'basicConstraints',\n // cA: true,\n // },\n {\n name: 'keyUsage',\n keyCertSign: true,\n digitalSignature: true,\n nonRepudiation: true,\n keyEncipherment: true,\n dataEncipherment: true\n },\n {\n name: 'extKeyUsage',\n serverAuth: true,\n clientAuth: true,\n codeSigning: true,\n timeStamping: true\n },\n {\n name: 'subjectAltName',\n altNames: [\n {\n // type 2 is DNS\n type: 2,\n value: 'localhost'\n },\n {\n type: 2,\n value: 'localhost.localdomain'\n },\n {\n type: 2,\n value: 'lvh.me'\n },\n {\n type: 2,\n value: '*.lvh.me'\n },\n {\n type: 2,\n value: '[::1]'\n },\n {\n // type 7 is IP\n type: 7,\n ip: '127.0.0.1'\n },\n {\n type: 7,\n ip: 'fe80::1'\n }\n ]\n }\n ]\n })\n return pems.private + pems.cert\n}\n\nasync function getCertificate(config: ResolvedConfig) {\n if (!config.cacheDir) return await createCertificate()\n\n const cachePath = path.join(config.cacheDir, '_cert.pem')\n\n try {\n const [stat, content] = await Promise.all([\n fsp.stat(cachePath),\n fsp.readFile(cachePath, 'utf8')\n ])\n\n if (Date.now() - stat.ctime.valueOf() > 30 * 24 * 60 * 60 * 1000) {\n throw new Error('cache is outdated.')\n }\n\n return content\n } catch {\n const content = await createCertificate()\n fsp\n .mkdir(config.cacheDir, { recursive: true })\n .then(() => fsp.writeFile(cachePath, content))\n .catch(() => {})\n return content\n }\n}\n\nexport async function httpServerStart(\n httpServer: HttpServer,\n serverOptions: {\n port: number\n strictPort: boolean | undefined\n host: string | undefined\n logger: Logger\n }\n): Promise<number> {\n return new Promise((resolve, reject) => {\n let { port, strictPort, host, logger } = serverOptions\n\n const onError = (e: Error & { code?: string }) => {\n if (e.code === 'EADDRINUSE') {\n if (strictPort) {\n httpServer.removeListener('error', onError)\n reject(new Error(`Port ${port} is already in use`))\n } else {\n logger.info(`Port ${port} is in use, trying another one...`)\n httpServer.listen(++port, host)\n }\n } else {\n httpServer.removeListener('error', onError)\n reject(e)\n }\n }\n\n httpServer.on('error', onError)\n\n httpServer.listen(port, host, () => {\n httpServer.removeListener('error', onError)\n resolve(port)\n })\n })\n}\n","'use strict';\n\nmodule.exports = {\n BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'],\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n EMPTY_BUFFER: Buffer.alloc(0),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) return target.slice(0, offset);\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n // Required until https://github.com/nodejs/node/issues/9006 is resolved.\n const length = buffer.length;\n for (let i = 0; i < length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.byteLength === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = Buffer.from(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\ntry {\n const bufferUtil = require('bufferutil');\n const bu = bufferUtil.BufferUtil || bufferUtil;\n\n module.exports = {\n concat,\n mask(source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bu.mask(source, mask, output, offset, length);\n },\n toArrayBuffer,\n toBuffer,\n unmask(buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bu.unmask(buffer, mask);\n }\n };\n} catch (e) /* istanbul ignore next */ {\n module.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n };\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode, NOOP } = require('./constants');\n\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {Boolean} [isServer=false] Create the instance in either server or\n * client mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(options, isServer, maxPayload) {\n this._maxPayload = maxPayload | 0;\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._isServer = !!isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {Buffer} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {Buffer} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n //\n // An `'error'` event is emitted, only on Node.js < 10.0.0, if the\n // `zlib.DeflateRaw` instance is closed while data is being processed.\n // This can happen if `PerMessageDeflate#cleanup()` is called at the wrong\n // time due to an abnormal WebSocket closure.\n //\n this._deflate.on('error', NOOP);\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) data = data.slice(0, data.length - 4);\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\ntry {\n let isValidUTF8 = require('utf-8-validate');\n\n /* istanbul ignore if */\n if (typeof isValidUTF8 === 'object') {\n isValidUTF8 = isValidUTF8.Validation.isValidUTF8; // utf-8-validate@<3.0.0\n }\n\n module.exports = {\n isValidStatusCode,\n isValidUTF8(buf) {\n return buf.length < 150 ? _isValidUTF8(buf) : isValidUTF8(buf);\n }\n };\n} catch (e) /* istanbul ignore next */ {\n module.exports = {\n isValidStatusCode,\n isValidUTF8: _isValidUTF8\n };\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {String} [binaryType=nodebuffer] The type for binary data\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Boolean} [isServer=false] Specifies whether to operate in client or\n * server mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(binaryType, extensions, isServer, maxPayload) {\n super();\n\n this._binaryType = binaryType || BINARY_TYPES[0];\n this[kWebSocket] = undefined;\n this._extensions = extensions || {};\n this._isServer = !!isServer;\n this._maxPayload = maxPayload | 0;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._state = GET_INFO;\n this._loop = false;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = buf.slice(n);\n return buf.slice(0, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = buf.slice(n);\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n let err;\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n err = this.getInfo();\n break;\n case GET_PAYLOAD_LENGTH_16:\n err = this.getPayloadLength16();\n break;\n case GET_PAYLOAD_LENGTH_64:\n err = this.getPayloadLength64();\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n err = this.getData(cb);\n break;\n default:\n // `INFLATING`\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n cb(err);\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getInfo() {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n if (!this._fragmented) {\n this._loop = false;\n return error(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n this._loop = false;\n return error(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n this._loop = false;\n return error(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n }\n\n if (compressed) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n if (this._payloadLength > 0x7d) {\n this._loop = false;\n return error(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n }\n } else {\n this._loop = false;\n return error(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n this._loop = false;\n return error(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n }\n } else if (this._masked) {\n this._loop = false;\n return error(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else return this.haveLength();\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getPayloadLength16() {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n return this.haveLength();\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getPayloadLength64() {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n this._loop = false;\n return error(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n return this.haveLength();\n }\n\n /**\n * Payload length has been read.\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n haveLength() {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n this._loop = false;\n return error(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n if (this._masked) unmask(data, this._mask);\n }\n\n if (this._opcode > 0x07) return this.controlMessage(data);\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its lenght is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n return this.dataMessage();\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n return cb(\n error(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n )\n );\n }\n\n this._fragments.push(buf);\n }\n\n const er = this.dataMessage();\n if (er) return cb(er);\n\n this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @return {(Error|undefined)} A possible error\n * @private\n */\n dataMessage() {\n if (this._fin) {\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else {\n data = fragments;\n }\n\n this.emit('message', data);\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!isValidUTF8(buf)) {\n this._loop = false;\n return error(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n }\n\n this.emit('message', buf.toString());\n }\n }\n\n this._state = GET_INFO;\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data) {\n if (this._opcode === 0x08) {\n this._loop = false;\n\n if (data.length === 0) {\n this.emit('conclude', 1005, '');\n this.end();\n } else if (data.length === 1) {\n return error(\n RangeError,\n 'invalid payload length 1',\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n return error(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n }\n\n const buf = data.slice(2);\n\n if (!isValidUTF8(buf)) {\n return error(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n }\n\n this.emit('conclude', code, buf.toString());\n this.end();\n }\n } else if (this._opcode === 0x09) {\n this.emit('ping', data);\n } else {\n this.emit('pong', data);\n }\n\n this._state = GET_INFO;\n }\n}\n\nmodule.exports = Receiver;\n\n/**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\nfunction error(ErrorCtor, message, prefix, statusCode, errorCode) {\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, error);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^net|tls$\" }] */\n\n'use strict';\n\nconst net = require('net');\nconst tls = require('tls');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER } = require('./constants');\nconst { isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst mask = Buffer.alloc(4);\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {(net.Socket|tls.Socket)} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n */\n constructor(socket, extensions) {\n this._extensions = extensions || {};\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._deflating = false;\n this._queue = [];\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {Buffer} data The data to frame\n * @param {Object} options Options object\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {Buffer[]} The framed data as a list of `Buffer` instances\n * @public\n */\n static frame(data, options) {\n const merge = options.mask && options.readOnly;\n let offset = options.mask ? 6 : 2;\n let payloadLength = data.length;\n\n if (data.length >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (data.length > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(data.length, 2);\n } else if (payloadLength === 127) {\n target.writeUInt32BE(0, 2);\n target.writeUInt32BE(data.length, 6);\n }\n\n if (!options.mask) return [target, data];\n\n randomFillSync(mask, 0, 4);\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (merge) {\n applyMask(data, mask, target, offset, data.length);\n return [target];\n }\n\n applyMask(data, mask, data, 0, data.length);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {String} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || data === '') {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n buf.write(data, 2);\n }\n\n if (this._deflating) {\n this.enqueue([this.doClose, buf, mask, cb]);\n } else {\n this.doClose(buf, mask, cb);\n }\n }\n\n /**\n * Frames and sends a close message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @private\n */\n doClose(data, mask, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x08,\n mask,\n readOnly: false\n }),\n cb\n );\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n const buf = toBuffer(data);\n\n if (buf.length > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n if (this._deflating) {\n this.enqueue([this.doPing, buf, mask, toBuffer.readOnly, cb]);\n } else {\n this.doPing(buf, mask, toBuffer.readOnly, cb);\n }\n }\n\n /**\n * Frames and sends a ping message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified\n * @param {Function} [cb] Callback\n * @private\n */\n doPing(data, mask, readOnly, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x09,\n mask,\n readOnly\n }),\n cb\n );\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n const buf = toBuffer(data);\n\n if (buf.length > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n if (this._deflating) {\n this.enqueue([this.doPong, buf, mask, toBuffer.readOnly, cb]);\n } else {\n this.doPong(buf, mask, toBuffer.readOnly, cb);\n }\n }\n\n /**\n * Frames and sends a pong message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified\n * @param {Function} [cb] Callback\n * @private\n */\n doPong(data, mask, readOnly, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x0a,\n mask,\n readOnly\n }),\n cb\n );\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const buf = toBuffer(data);\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (rsv1 && perMessageDeflate) {\n rsv1 = buf.length >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n if (perMessageDeflate) {\n const opts = {\n fin: options.fin,\n rsv1,\n opcode,\n mask: options.mask,\n readOnly: toBuffer.readOnly\n };\n\n if (this._deflating) {\n this.enqueue([this.dispatch, buf, this._compress, opts, cb]);\n } else {\n this.dispatch(buf, this._compress, opts, cb);\n }\n } else {\n this.sendFrame(\n Sender.frame(buf, {\n fin: options.fin,\n rsv1: false,\n opcode,\n mask: options.mask,\n readOnly: toBuffer.readOnly\n }),\n cb\n );\n }\n }\n\n /**\n * Dispatches a data message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += data.length;\n this._deflating = true;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < this._queue.length; i++) {\n const callback = this._queue[i][4];\n\n if (typeof callback === 'function') callback(err);\n }\n\n return;\n }\n\n this._bufferedBytes -= data.length;\n this._deflating = false;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (!this._deflating && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[1].length;\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[1].length;\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {Buffer[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n","'use strict';\n\n/**\n * Class representing an event.\n *\n * @private\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @param {Object} target A reference to the target to which the event was\n * dispatched\n */\n constructor(type, target) {\n this.target = target;\n this.type = type;\n }\n}\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n * @private\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(data, target) {\n super('message', target);\n\n this.data = data;\n }\n}\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n * @private\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {Number} code The status code explaining why the connection is being\n * closed\n * @param {String} reason A human-readable string explaining why the\n * connection is closing\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(code, reason, target) {\n super('close', target);\n\n this.wasClean = target._closeFrameReceived && target._closeFrameSent;\n this.reason = reason;\n this.code = code;\n }\n}\n\n/**\n * Class representing an open event.\n *\n * @extends Event\n * @private\n */\nclass OpenEvent extends Event {\n /**\n * Create a new `OpenEvent`.\n *\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(target) {\n super('open', target);\n }\n}\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n * @private\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {Object} error The error that generated this event\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(error, target) {\n super('error', target);\n\n this.message = error.message;\n this.error = error;\n }\n}\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {Function} listener The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean`` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, listener, options) {\n if (typeof listener !== 'function') return;\n\n function onMessage(data) {\n listener.call(this, new MessageEvent(data, this));\n }\n\n function onClose(code, message) {\n listener.call(this, new CloseEvent(code, message, this));\n }\n\n function onError(error) {\n listener.call(this, new ErrorEvent(error, this));\n }\n\n function onOpen() {\n listener.call(this, new OpenEvent(this));\n }\n\n const method = options && options.once ? 'once' : 'on';\n\n if (type === 'message') {\n onMessage._listener = listener;\n this[method](type, onMessage);\n } else if (type === 'close') {\n onClose._listener = listener;\n this[method](type, onClose);\n } else if (type === 'error') {\n onError._listener = listener;\n this[method](type, onError);\n } else if (type === 'open') {\n onOpen._listener = listener;\n this[method](type, onOpen);\n } else {\n this[method](type, listener);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {Function} listener The listener to remove\n * @public\n */\n removeEventListener(type, listener) {\n const listeners = this.listeners(type);\n\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i] === listener || listeners[i]._listener === listener) {\n this.removeListener(type, listeners[i]);\n }\n }\n }\n};\n\nmodule.exports = EventTarget;\n","'use strict';\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n\n if (header === undefined || header === '') return offers;\n\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 /* ' ' */ || code === 0x09 /* '\\t' */) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Readable$\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n GUID,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst { addEventListener, removeEventListener } = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst protocolVersions = [8, 13];\nconst closeTimeout = 30 * 1000;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = '';\n this._closeTimer = null;\n this._extensions = {};\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (Array.isArray(protocols)) {\n protocols = protocols.join(', ');\n } else if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = undefined;\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._isServer = true;\n }\n }\n\n /**\n * This deviates from the WHATWG interface since ws doesn't support the\n * required default \"blob\" type (instead we define a custom \"nodebuffer\"\n * type).\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onclose(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onerror(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onopen(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onmessage(listener) {}\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Number} [maxPayload=0] The maximum allowed message size\n * @private\n */\n setSocket(socket, head, maxPayload) {\n const receiver = new Receiver(\n this.binaryType,\n this._extensions,\n this._isServer,\n maxPayload\n );\n\n this._sender = new Sender(socket, this._extensions);\n this._receiver = receiver;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n socket.setTimeout(0);\n socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {String} [data] A string explaining why the connection is closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n return abortHandshake(this, this._req, msg);\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n //\n // Specify a timeout for the closing handshake to complete.\n //\n this._closeTimer = setTimeout(\n this._socket.destroy.bind(this._socket),\n closeTimeout\n );\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n return abortHandshake(this, this._req, msg);\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n const listeners = this.listeners(method);\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i]._listener) return listeners[i]._listener;\n }\n\n return undefined;\n },\n set(listener) {\n const listeners = this.listeners(method);\n for (let i = 0; i < listeners.length; i++) {\n //\n // Remove only the listeners added via `addEventListener`.\n //\n if (listeners[i]._listener) this.removeListener(method, listeners[i]);\n }\n this.addEventListener(method, listener);\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {String} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n createConnection: undefined,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: undefined,\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n websocket._url = address.href;\n } else {\n parsedUrl = new URL(address);\n websocket._url = address;\n }\n\n const isUnixSocket = parsedUrl.protocol === 'ws+unix:';\n\n if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {\n throw new Error(`Invalid URL: ${websocket.url}`);\n }\n\n const isSecure =\n parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const get = isSecure ? https.get : http.get;\n let perMessageDeflate;\n\n opts.createConnection = isSecure ? tlsConnect : netConnect;\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket',\n ...opts.headers\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate(\n opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n false,\n opts.maxPayload\n );\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols) {\n opts.headers['Sec-WebSocket-Protocol'] = protocols;\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isUnixSocket) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n let req = (websocket._req = get(opts));\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req.aborted) return;\n\n req = websocket._req = null;\n websocket._readyState = WebSocket.CLOSING;\n websocket.emit('error', err);\n websocket.emitClose();\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n const addr = new URL(location, address);\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the `upgrade`\n // event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n const protList = (protocols || '').split(/, */);\n let protError;\n\n if (!protocols && serverProt) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (protocols && !serverProt) {\n protError = 'Server sent no subprotocol';\n } else if (serverProt && !protList.includes(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (extensionNames.length) {\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message =\n 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n }\n\n websocket.setSocket(socket, head, opts.maxPayload);\n });\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n stream.once('abort', websocket.emitClose.bind(websocket));\n websocket.emit('error', err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n cb(err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {String} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n this[kWebSocket]._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n websocket.emit('error', err);\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message\n * @private\n */\nfunction receiverOnMessage(data) {\n this[kWebSocket].emit('message', data);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n websocket.pong(data, !websocket._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The listener of the `net.Socket` `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n let chunk;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written and `readable.read()`\n // will return `null`. If instead, the socket is paused, any possible buffered\n // data will be read as a single chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n (chunk = websocket._socket.read()) !== null\n ) {\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the `net.Socket` `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the `net.Socket` `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the `net.Socket` `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","'use strict';\n\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let resumeOnReceiverDrain = true;\n let terminateOnDestroy = true;\n\n function receiverOnDrain() {\n if (resumeOnReceiverDrain) ws._socket.resume();\n }\n\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n ws._receiver.removeAllListeners('drain');\n ws._receiver.on('drain', receiverOnDrain);\n });\n } else {\n ws._receiver.removeAllListeners('drain');\n ws._receiver.on('drain', receiverOnDrain);\n }\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg) {\n if (!duplex.push(msg)) {\n resumeOnReceiverDrain = false;\n ws._socket.pause();\n }\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.readyState === ws.OPEN && !resumeOnReceiverDrain) {\n resumeOnReceiverDrain = true;\n if (!ws._receiver._writableState.needDrain) ws._socket.resume();\n }\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^net|tls|https$\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst https = require('https');\nconst net = require('net');\nconst tls = require('tls');\nconst { createHash } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst WebSocket = require('./websocket');\nconst { format, parse } = require('./extension');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n maxPayload: 100 * 1024 * 1024,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) this.clients = new Set();\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Close the server.\n *\n * @param {Function} [cb] Callback\n * @public\n */\n close(cb) {\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSED) {\n process.nextTick(emitClose, this);\n return;\n }\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n //\n // Terminate all associated clients.\n //\n if (this.clients) {\n for (const client of this.clients) client.terminate();\n }\n\n const server = this._server;\n\n if (server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // Close the http server if it was internally created.\n //\n if (this.options.port != null) {\n server.close(emitClose.bind(undefined, this));\n return;\n }\n }\n\n process.nextTick(emitClose, this);\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key =\n req.headers['sec-websocket-key'] !== undefined\n ? req.headers['sec-websocket-key'].trim()\n : false;\n const version = +req.headers['sec-websocket-version'];\n const extensions = {};\n\n if (\n req.method !== 'GET' ||\n req.headers.upgrade.toLowerCase() !== 'websocket' ||\n !key ||\n !keyRegex.test(key) ||\n (version !== 8 && version !== 13) ||\n !this.shouldHandle(req)\n ) {\n return abortHandshake(socket, 400);\n }\n\n if (this.options.perMessageDeflate) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = parse(req.headers['sec-websocket-extensions']);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n return abortHandshake(socket, 400);\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(key, extensions, req, socket, head, cb);\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(key, extensions, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Object} extensions The accepted extensions\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(key, extensions, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new WebSocket(null);\n let protocol = req.headers['sec-websocket-protocol'];\n\n if (protocol) {\n protocol = protocol.split(',').map(trim);\n\n //\n // Optionally call external protocol selection handler.\n //\n if (this.options.handleProtocols) {\n protocol = this.options.handleProtocols(protocol, req);\n } else {\n protocol = protocol[0];\n }\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, this.options.maxPayload);\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => this.clients.delete(ws));\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle premature socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n if (socket.writable) {\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.write(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n }\n\n socket.removeListener('error', socketOnError);\n socket.destroy();\n}\n\n/**\n * Remove whitespace characters from both ends of a string.\n *\n * @param {String} str The string\n * @return {String} A new string representing `str` stripped of whitespace\n * characters from both its beginning and end\n * @private\n */\nfunction trim(str) {\n return str.trim();\n}\n","'use strict';\n\nconst WebSocket = require('./lib/websocket');\n\nWebSocket.createWebSocketStream = require('./lib/stream');\nWebSocket.Server = require('./lib/websocket-server');\nWebSocket.Receiver = require('./lib/receiver');\nWebSocket.Sender = require('./lib/sender');\n\nmodule.exports = WebSocket;\n","import chalk from 'chalk'\nimport { Server, STATUS_CODES } from 'http'\nimport {\n createServer as createHttpsServer,\n ServerOptions as HttpsServerOptions\n} from 'https'\nimport WebSocket from 'ws'\nimport { WebSocket as WebSocketTypes } from 'types/ws'\nimport { ErrorPayload, HMRPayload } from 'types/hmrPayload'\nimport { ResolvedConfig } from '..'\nimport { isObject } from '../utils'\nimport { Socket } from 'net'\nexport const HMR_HEADER = 'vite-hmr'\n\nexport interface WebSocketServer {\n on: WebSocketTypes.Server['on']\n off: WebSocketTypes.Server['off']\n send(payload: HMRPayload): void\n close(): Promise<void>\n}\n\nexport function createWebSocketServer(\n server: Server | null,\n config: ResolvedConfig,\n httpsOptions?: HttpsServerOptions\n): WebSocketServer {\n let wss: WebSocket.Server\n let httpsServer: Server | undefined = undefined\n\n const hmr = isObject(config.server.hmr) && config.server.hmr\n const wsServer = (hmr && hmr.server) || server\n\n if (wsServer) {\n wss = new WebSocket.Server({ noServer: true })\n wsServer.on('upgrade', (req, socket, head) => {\n if (req.headers['sec-websocket-protocol'] === HMR_HEADER) {\n wss.handleUpgrade(req, socket as Socket, head, (ws) => {\n wss.emit('connection', ws, req)\n })\n }\n })\n } else {\n const websocketServerOptions: WebSocket.ServerOptions = {}\n const port = (hmr && hmr.port) || 24678\n if (httpsOptions) {\n // if we're serving the middlewares over https, the ws library doesn't support automatically creating an https server, so we need to do it ourselves\n // create an inline https server and mount the websocket server to it\n httpsServer = createHttpsServer(httpsOptions, (req, res) => {\n const statusCode = 426\n const body = STATUS_CODES[statusCode]\n if (!body)\n throw new Error(\n `No body text found for the ${statusCode} status code`\n )\n\n res.writeHead(statusCode, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n })\n res.end(body)\n })\n\n httpsServer.listen(port)\n websocketServerOptions.server = httpsServer\n } else {\n // we don't need to serve over https, just let ws handle its own server\n websocketServerOptions.port = port\n }\n\n // vite dev server in middleware mode\n wss = new WebSocket.Server(websocketServerOptions)\n }\n\n wss.on('connection', (socket) => {\n socket.send(JSON.stringify({ type: 'connected' }))\n if (bufferedError) {\n socket.send(JSON.stringify(bufferedError))\n bufferedError = null\n }\n })\n\n wss.on('error', (e: Error & { code: string }) => {\n if (e.code !== 'EADDRINUSE') {\n config.logger.error(\n chalk.red(`WebSocket server error:\\n${e.stack || e.message}`),\n { error: e }\n )\n }\n })\n\n // On page reloads, if a file fails to compile and returns 500, the server\n // sends the error payload before the client connection is established.\n // If we have no open clients, buffer the error and send it to the next\n // connected client.\n let bufferedError: ErrorPayload | null = null\n\n return {\n on: wss.on.bind(wss),\n off: wss.off.bind(wss),\n send(payload: HMRPayload) {\n if (payload.type === 'error' && !wss.clients.size) {\n bufferedError = payload\n return\n }\n\n const stringified = JSON.stringify(payload)\n wss.clients.forEach((client) => {\n if (client.readyState === WebSocket.OPEN) {\n client.send(stringified)\n }\n })\n },\n\n close() {\n return new Promise((resolve, reject) => {\n wss.close((err) => {\n if (err) {\n reject(err)\n } else {\n if (httpsServer) {\n httpsServer.close((err) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n } else {\n resolve()\n }\n }\n })\n })\n }\n }\n}\n","import { parse as parseUrl } from 'url'\nimport { ViteDevServer } from '..'\nimport { Connect } from 'types/connect'\n\n// this middleware is only active when (config.base !== '/')\n\nexport function baseMiddleware({\n config\n}: ViteDevServer): Connect.NextHandleFunction {\n const base = config.base\n\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return function viteBaseMiddleware(req, res, next) {\n const url = req.url!\n const parsed = parseUrl(url)\n const path = parsed.pathname || '/'\n\n if (path.startsWith(base)) {\n // rewrite url to remove base.. this ensures that other middleware does\n // not need to consider base being prepended or not\n req.url = url.replace(base, '/')\n return next()\n }\n\n // skip redirect and error fallback on middleware mode, #4057\n if (config.server.middlewareMode) {\n return next()\n }\n\n if (path === '/' || path === '/index.html') {\n // redirect root visit to based url\n res.writeHead(302, {\n Location: base\n })\n res.end()\n return\n } else if (req.headers.accept?.includes('text/html')) {\n // non-based page visit\n const redirectPath = base + url.slice(1)\n res.writeHead(404, {\n 'Content-Type': 'text/html'\n })\n res.end(\n `The server is configured with a public base URL of ${base} - ` +\n `did you mean to visit <a href=\"${redirectPath}\">${redirectPath}</a> instead?`\n )\n return\n }\n\n next()\n }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","var common = exports,\n url = require('url'),\n extend = require('util')._extend,\n required = require('requires-port');\n\nvar upgradeHeader = /(^|,)\\s*upgrade\\s*($|,)/i,\n isSSL = /^https|wss/;\n\n/**\n * Simple Regex for testing if protocol is https\n */\ncommon.isSSL = isSSL;\n/**\n * Copies the right headers from `options` and `req` to\n * `outgoing` which is then used to fire the proxied\n * request.\n *\n * Examples:\n *\n * common.setupOutgoing(outgoing, options, req)\n * // => { host: ..., hostname: ...}\n *\n * @param {Object} Outgoing Base object to be filled with required properties\n * @param {Object} Options Config object passed to the proxy\n * @param {ClientRequest} Req Request Object\n * @param {String} Forward String to select forward or target\n * \n * @return {Object} Outgoing Object with all required properties set\n *\n * @api private\n */\n\ncommon.setupOutgoing = function(outgoing, options, req, forward) {\n outgoing.port = options[forward || 'target'].port ||\n (isSSL.test(options[forward || 'target'].protocol) ? 443 : 80);\n\n ['host', 'hostname', 'socketPath', 'pfx', 'key',\n 'passphrase', 'cert', 'ca', 'ciphers', 'secureProtocol'].forEach(\n function(e) { outgoing[e] = options[forward || 'target'][e]; }\n );\n\n outgoing.method = options.method || req.method;\n outgoing.headers = extend({}, req.headers);\n\n if (options.headers){\n extend(outgoing.headers, options.headers);\n }\n\n if (options.auth) {\n outgoing.auth = options.auth;\n }\n \n if (options.ca) {\n outgoing.ca = options.ca;\n }\n\n if (isSSL.test(options[forward || 'target'].protocol)) {\n outgoing.rejectUnauthorized = (typeof options.secure === \"undefined\") ? true : options.secure;\n }\n\n\n outgoing.agent = options.agent || false;\n outgoing.localAddress = options.localAddress;\n\n //\n // Remark: If we are false and not upgrading, set the connection: close. This is the right thing to do\n // as node core doesn't handle this COMPLETELY properly yet.\n //\n if (!outgoing.agent) {\n outgoing.headers = outgoing.headers || {};\n if (typeof outgoing.headers.connection !== 'string'\n || !upgradeHeader.test(outgoing.headers.connection)\n ) { outgoing.headers.connection = 'close'; }\n }\n\n\n // the final path is target path + relative path requested by user:\n var target = options[forward || 'target'];\n var targetPath = target && options.prependPath !== false\n ? (target.path || '')\n : '';\n\n //\n // Remark: Can we somehow not use url.parse as a perf optimization?\n //\n var outgoingPath = !options.toProxy\n ? (url.parse(req.url).path || '')\n : req.url;\n\n //\n // Remark: ignorePath will just straight up ignore whatever the request's\n // path is. This can be labeled as FOOT-GUN material if you do not know what\n // you are doing and are using conflicting options.\n //\n outgoingPath = !options.ignorePath ? outgoingPath : '';\n\n outgoing.path = common.urlJoin(targetPath, outgoingPath);\n\n if (options.changeOrigin) {\n outgoing.headers.host =\n required(outgoing.port, options[forward || 'target'].protocol) && !hasPort(outgoing.host)\n ? outgoing.host + ':' + outgoing.port\n : outgoing.host;\n }\n return outgoing;\n};\n\n/**\n * Set the proper configuration for sockets,\n * set no delay and set keep alive, also set\n * the timeout to 0.\n *\n * Examples:\n *\n * common.setupSocket(socket)\n * // => Socket\n *\n * @param {Socket} Socket instance to setup\n * \n * @return {Socket} Return the configured socket.\n *\n * @api private\n */\n\ncommon.setupSocket = function(socket) {\n socket.setTimeout(0);\n socket.setNoDelay(true);\n\n socket.setKeepAlive(true, 0);\n\n return socket;\n};\n\n/**\n * Get the port number from the host. Or guess it based on the connection type.\n *\n * @param {Request} req Incoming HTTP request.\n *\n * @return {String} The port number.\n *\n * @api private\n */\ncommon.getPort = function(req) {\n var res = req.headers.host ? req.headers.host.match(/:(\\d+)/) : '';\n\n return res ?\n res[1] :\n common.hasEncryptedConnection(req) ? '443' : '80';\n};\n\n/**\n * Check if the request has an encrypted connection.\n *\n * @param {Request} req Incoming HTTP request.\n *\n * @return {Boolean} Whether the connection is encrypted or not.\n *\n * @api private\n */\ncommon.hasEncryptedConnection = function(req) {\n return Boolean(req.connection.encrypted || req.connection.pair);\n};\n\n/**\n * OS-agnostic join (doesn't break on URLs like path.join does on Windows)>\n *\n * @return {String} The generated path.\n *\n * @api private\n */\n\ncommon.urlJoin = function() {\n //\n // We do not want to mess with the query string. All we want to touch is the path.\n //\n var args = Array.prototype.slice.call(arguments),\n lastIndex = args.length - 1,\n last = args[lastIndex],\n lastSegs = last.split('?'),\n retSegs;\n\n args[lastIndex] = lastSegs.shift();\n\n //\n // Join all strings, but remove empty strings so we don't get extra slashes from\n // joining e.g. ['', 'am']\n //\n retSegs = [\n args.filter(Boolean).join('/')\n .replace(/\\/+/g, '/')\n .replace('http:/', 'http://')\n .replace('https:/', 'https://')\n ];\n\n // Only join the query string if it exists so we don't have trailing a '?'\n // on every request\n\n // Handle case where there could be multiple ? in the URL.\n retSegs.push.apply(retSegs, lastSegs);\n\n return retSegs.join('?')\n};\n\n/**\n * Rewrites or removes the domain of a cookie header\n *\n * @param {String|Array} Header\n * @param {Object} Config, mapping of domain to rewritten domain.\n * '*' key to match any domain, null value to remove the domain.\n *\n * @api private\n */\ncommon.rewriteCookieProperty = function rewriteCookieProperty(header, config, property) {\n if (Array.isArray(header)) {\n return header.map(function (headerElement) {\n return rewriteCookieProperty(headerElement, config, property);\n });\n }\n return header.replace(new RegExp(\"(;\\\\s*\" + property + \"=)([^;]+)\", 'i'), function(match, prefix, previousValue) {\n var newValue;\n if (previousValue in config) {\n newValue = config[previousValue];\n } else if ('*' in config) {\n newValue = config['*'];\n } else {\n //no match, return previous value\n return match;\n }\n if (newValue) {\n //replace value\n return prefix + newValue;\n } else {\n //remove value\n return '';\n }\n });\n};\n\n/**\n * Check the host and see if it potentially has a port in it (keep it simple)\n *\n * @returns {Boolean} Whether we have one or not\n *\n * @api private\n */\nfunction hasPort(host) {\n return !!~host.indexOf(':');\n};\n","var url = require('url'),\n common = require('../common');\n\n\nvar redirectRegex = /^201|30(1|2|7|8)$/;\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, res, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\nmodule.exports = { // <--\n\n /**\n * If is a HTTP 1.0 request, remove chunk headers\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n removeChunked: function removeChunked(req, res, proxyRes) {\n if (req.httpVersion === '1.0') {\n delete proxyRes.headers['transfer-encoding'];\n }\n },\n\n /**\n * If is a HTTP 1.0 request, set the correct connection header\n * or if connection header not present, then use `keep-alive`\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n setConnection: function setConnection(req, res, proxyRes) {\n if (req.httpVersion === '1.0') {\n proxyRes.headers.connection = req.headers.connection || 'close';\n } else if (req.httpVersion !== '2.0' && !proxyRes.headers.connection) {\n proxyRes.headers.connection = req.headers.connection || 'keep-alive';\n }\n },\n\n setRedirectHostRewrite: function setRedirectHostRewrite(req, res, proxyRes, options) {\n if ((options.hostRewrite || options.autoRewrite || options.protocolRewrite)\n && proxyRes.headers['location']\n && redirectRegex.test(proxyRes.statusCode)) {\n var target = url.parse(options.target);\n var u = url.parse(proxyRes.headers['location']);\n\n // make sure the redirected host matches the target host before rewriting\n if (target.host != u.host) {\n return;\n }\n\n if (options.hostRewrite) {\n u.host = options.hostRewrite;\n } else if (options.autoRewrite) {\n u.host = req.headers['host'];\n }\n if (options.protocolRewrite) {\n u.protocol = options.protocolRewrite;\n }\n\n proxyRes.headers['location'] = u.format();\n }\n },\n /**\n * Copy headers from proxyResponse to response\n * set each header in response object.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n * @param {Object} Options options.cookieDomainRewrite: Config to rewrite cookie domain\n *\n * @api private\n */\n writeHeaders: function writeHeaders(req, res, proxyRes, options) {\n var rewriteCookieDomainConfig = options.cookieDomainRewrite,\n rewriteCookiePathConfig = options.cookiePathRewrite,\n preserveHeaderKeyCase = options.preserveHeaderKeyCase,\n rawHeaderKeyMap,\n setHeader = function(key, header) {\n if (header == undefined) return;\n if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {\n header = common.rewriteCookieProperty(header, rewriteCookieDomainConfig, 'domain');\n }\n if (rewriteCookiePathConfig && key.toLowerCase() === 'set-cookie') {\n header = common.rewriteCookieProperty(header, rewriteCookiePathConfig, 'path');\n }\n res.setHeader(String(key).trim(), header);\n };\n\n if (typeof rewriteCookieDomainConfig === 'string') { //also test for ''\n rewriteCookieDomainConfig = { '*': rewriteCookieDomainConfig };\n }\n\n if (typeof rewriteCookiePathConfig === 'string') { //also test for ''\n rewriteCookiePathConfig = { '*': rewriteCookiePathConfig };\n }\n\n // message.rawHeaders is added in: v0.11.6\n // https://nodejs.org/api/http.html#http_message_rawheaders\n if (preserveHeaderKeyCase && proxyRes.rawHeaders != undefined) {\n rawHeaderKeyMap = {};\n for (var i = 0; i < proxyRes.rawHeaders.length; i += 2) {\n var key = proxyRes.rawHeaders[i];\n rawHeaderKeyMap[key.toLowerCase()] = key;\n }\n }\n\n Object.keys(proxyRes.headers).forEach(function(key) {\n var header = proxyRes.headers[key];\n if (preserveHeaderKeyCase && rawHeaderKeyMap) {\n key = rawHeaderKeyMap[key] || key;\n }\n setHeader(key, header);\n });\n },\n\n /**\n * Set the statusCode from the proxyResponse\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n writeStatusCode: function writeStatusCode(req, res, proxyRes) {\n // From Node.js docs: response.writeHead(statusCode[, statusMessage][, headers])\n if(proxyRes.statusMessage) {\n res.statusCode = proxyRes.statusCode;\n res.statusMessage = proxyRes.statusMessage;\n } else {\n res.statusCode = proxyRes.statusCode;\n }\n }\n\n};\n","var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n","var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\"\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n self._processResponse(response);\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n abortRequest(this._currentRequest);\n this.emit(\"abort\");\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!(typeof data === \"string\" || typeof data === \"object\" && (\"length\" in data))) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (typeof encoding === \"function\") {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (typeof data === \"function\") {\n callback = data;\n data = encoding = null;\n }\n else if (typeof encoding === \"function\") {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.once(\"response\", clearTimer);\n this.once(\"error\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n this.emit(\"error\", new TypeError(\"Unsupported protocol \" + protocol));\n return;\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.substr(0, protocol.length - 1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n this._currentUrl = url.format(this._options);\n\n // Set up event handlers\n request._redirectable = this;\n for (var e = 0; e < events.length; e++) {\n request.on(events[e], eventHandlers[events[e]]);\n }\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end.\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n /* istanbul ignore else */\n if (request === self._currentRequest) {\n // Report any write errors\n /* istanbul ignore if */\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n /* istanbul ignore else */\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231§6.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n var location = response.headers.location;\n if (location && this._options.followRedirects !== false &&\n statusCode >= 300 && statusCode < 400) {\n // Abort the current request\n abortRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231§6.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n this.emit(\"error\", new TooManyRedirectsError());\n return;\n }\n\n // RFC7231§6.4: Automatic redirection needs to done with\n // care for methods not known to be safe, […]\n // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231§6.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource […]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) […]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var previousHostName = removeMatchingHeaders(/^host$/i, this._options.headers) ||\n url.parse(this._currentUrl).hostname;\n\n // Create the redirected request\n var redirectUrl = url.resolve(this._currentUrl, location);\n debug(\"redirecting to\", redirectUrl);\n this._isRedirect = true;\n var redirectUrlParts = url.parse(redirectUrl);\n Object.assign(this._options, redirectUrlParts);\n\n // Drop the Authorization header if redirecting to another host\n if (redirectUrlParts.hostname !== previousHostName) {\n removeMatchingHeaders(/^authorization$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (typeof this._options.beforeRedirect === \"function\") {\n var responseDetails = { headers: response.headers };\n try {\n this._options.beforeRedirect.call(null, this._options, responseDetails);\n }\n catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n try {\n this._performRequest();\n }\n catch (cause) {\n var error = new RedirectionError(\"Redirected request failed: \" + cause.message);\n error.cause = cause;\n this.emit(\"error\", error);\n }\n }\n else {\n // The response is not a redirect; return it as-is\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n }\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters\n if (typeof input === \"string\") {\n var urlStr = input;\n try {\n input = urlToOptions(new URL(urlStr));\n }\n catch (err) {\n /* istanbul ignore next */\n input = url.parse(urlStr);\n }\n }\n else if (URL && (input instanceof URL)) {\n input = urlToOptions(input);\n }\n else {\n callback = options;\n options = input;\n input = { protocol: protocol };\n }\n if (typeof options === \"function\") {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\n/* istanbul ignore next */\nfunction noop() { /* empty */ }\n\n// from https://github.com/nodejs/node/blob/master/lib/internal/url.js\nfunction urlToOptions(urlObject) {\n var options = {\n protocol: urlObject.protocol,\n hostname: urlObject.hostname.startsWith(\"[\") ?\n /* istanbul ignore next */\n urlObject.hostname.slice(1, -1) :\n urlObject.hostname,\n hash: urlObject.hash,\n search: urlObject.search,\n pathname: urlObject.pathname,\n path: urlObject.pathname + urlObject.search,\n href: urlObject.href,\n };\n if (urlObject.port !== \"\") {\n options.port = Number(urlObject.port);\n }\n return options;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return lastValue;\n}\n\nfunction createErrorType(code, defaultMessage) {\n function CustomError(message) {\n Error.captureStackTrace(this, this.constructor);\n this.message = message || defaultMessage;\n }\n CustomError.prototype = new Error();\n CustomError.prototype.constructor = CustomError;\n CustomError.prototype.name = \"Error [\" + code + \"]\";\n CustomError.prototype.code = code;\n return CustomError;\n}\n\nfunction abortRequest(request) {\n for (var e = 0; e < events.length; e++) {\n request.removeListener(events[e], eventHandlers[events[e]]);\n }\n request.on(\"error\", noop);\n request.abort();\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n","var httpNative = require('http'),\n httpsNative = require('https'),\n web_o = require('./web-outgoing'),\n common = require('../common'),\n followRedirects = require('follow-redirects');\n\nweb_o = Object.keys(web_o).map(function(pass) {\n return web_o[pass];\n});\n\nvar nativeAgents = { http: httpNative, https: httpsNative };\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, res, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\n\nmodule.exports = {\n\n /**\n * Sets `content-length` to '0' if request is of DELETE type.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n deleteLength: function deleteLength(req, res, options) {\n if((req.method === 'DELETE' || req.method === 'OPTIONS')\n && !req.headers['content-length']) {\n req.headers['content-length'] = '0';\n delete req.headers['transfer-encoding'];\n }\n },\n\n /**\n * Sets timeout in request socket if it was specified in options.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n timeout: function timeout(req, res, options) {\n if(options.timeout) {\n req.socket.setTimeout(options.timeout);\n }\n },\n\n /**\n * Sets `x-forwarded-*` headers if specified in config.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n XHeaders: function XHeaders(req, res, options) {\n if(!options.xfwd) return;\n\n var encrypted = req.isSpdy || common.hasEncryptedConnection(req);\n var values = {\n for : req.connection.remoteAddress || req.socket.remoteAddress,\n port : common.getPort(req),\n proto: encrypted ? 'https' : 'http'\n };\n\n ['for', 'port', 'proto'].forEach(function(header) {\n req.headers['x-forwarded-' + header] =\n (req.headers['x-forwarded-' + header] || '') +\n (req.headers['x-forwarded-' + header] ? ',' : '') +\n values[header];\n });\n\n req.headers['x-forwarded-host'] = req.headers['x-forwarded-host'] || req.headers['host'] || '';\n },\n\n /**\n * Does the actual proxying. If `forward` is enabled fires up\n * a ForwardStream, same happens for ProxyStream. The request\n * just dies otherwise.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n stream: function stream(req, res, options, _, server, clb) {\n\n // And we begin!\n server.emit('start', req, res, options.target || options.forward);\n\n var agents = options.followRedirects ? followRedirects : nativeAgents;\n var http = agents.http;\n var https = agents.https;\n\n if(options.forward) {\n // If forward enable, so just pipe the request\n var forwardReq = (options.forward.protocol === 'https:' ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req, 'forward')\n );\n\n // error handler (e.g. ECONNRESET, ECONNREFUSED)\n // Handle errors on incoming request as well as it makes sense to\n var forwardError = createErrorHandler(forwardReq, options.forward);\n req.on('error', forwardError);\n forwardReq.on('error', forwardError);\n\n (options.buffer || req).pipe(forwardReq);\n if(!options.target) { return res.end(); }\n }\n\n // Request initalization\n var proxyReq = (options.target.protocol === 'https:' ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req)\n );\n\n // Enable developers to modify the proxyReq before headers are sent\n proxyReq.on('socket', function(socket) {\n if(server && !proxyReq.getHeader('expect')) {\n server.emit('proxyReq', proxyReq, req, res, options);\n }\n });\n\n // allow outgoing socket to timeout so that we could\n // show an error page at the initial request\n if(options.proxyTimeout) {\n proxyReq.setTimeout(options.proxyTimeout, function() {\n proxyReq.abort();\n });\n }\n\n // Ensure we abort proxy if request is aborted\n req.on('aborted', function () {\n proxyReq.abort();\n });\n\n // handle errors in proxy and incoming request, just like for forward proxy\n var proxyError = createErrorHandler(proxyReq, options.target);\n req.on('error', proxyError);\n proxyReq.on('error', proxyError);\n\n function createErrorHandler(proxyReq, url) {\n return function proxyError(err) {\n if (req.socket.destroyed && err.code === 'ECONNRESET') {\n server.emit('econnreset', err, req, res, url);\n return proxyReq.abort();\n }\n\n if (clb) {\n clb(err, req, res, url);\n } else {\n server.emit('error', err, req, res, url);\n }\n }\n }\n\n (options.buffer || req).pipe(proxyReq);\n\n proxyReq.on('response', function(proxyRes) {\n if(server) { server.emit('proxyRes', proxyRes, req, res); }\n\n if(!res.headersSent && !options.selfHandleResponse) {\n for(var i=0; i < web_o.length; i++) {\n if(web_o[i](req, res, proxyRes, options)) { break; }\n }\n }\n\n if (!res.finished) {\n // Allow us to listen when the proxy has completed\n proxyRes.on('end', function () {\n if (server) server.emit('end', req, res, proxyRes);\n });\n // We pipe to the response unless its expected to be handled by the user\n if (!options.selfHandleResponse) proxyRes.pipe(res);\n } else {\n if (server) server.emit('end', req, res, proxyRes);\n }\n });\n }\n\n};\n","var http = require('http'),\n https = require('https'),\n common = require('../common');\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, socket, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\n/*\n * Websockets Passes\n *\n */\n\n\nmodule.exports = {\n /**\n * WebSocket requests must have the `GET` method and\n * the `upgrade:websocket` header\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n *\n * @api private\n */\n\n checkMethodAndHeader : function checkMethodAndHeader(req, socket) {\n if (req.method !== 'GET' || !req.headers.upgrade) {\n socket.destroy();\n return true;\n }\n\n if (req.headers.upgrade.toLowerCase() !== 'websocket') {\n socket.destroy();\n return true;\n }\n },\n\n /**\n * Sets `x-forwarded-*` headers if specified in config.\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n XHeaders : function XHeaders(req, socket, options) {\n if(!options.xfwd) return;\n\n var values = {\n for : req.connection.remoteAddress || req.socket.remoteAddress,\n port : common.getPort(req),\n proto: common.hasEncryptedConnection(req) ? 'wss' : 'ws'\n };\n\n ['for', 'port', 'proto'].forEach(function(header) {\n req.headers['x-forwarded-' + header] =\n (req.headers['x-forwarded-' + header] || '') +\n (req.headers['x-forwarded-' + header] ? ',' : '') +\n values[header];\n });\n },\n\n /**\n * Does the actual proxying. Make the request and upgrade it\n * send the Switching Protocols request and pipe the sockets.\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n stream : function stream(req, socket, options, head, server, clb) {\n\n var createHttpHeader = function(line, headers) {\n return Object.keys(headers).reduce(function (head, key) {\n var value = headers[key];\n\n if (!Array.isArray(value)) {\n head.push(key + ': ' + value);\n return head;\n }\n\n for (var i = 0; i < value.length; i++) {\n head.push(key + ': ' + value[i]);\n }\n return head;\n }, [line])\n .join('\\r\\n') + '\\r\\n\\r\\n';\n }\n\n common.setupSocket(socket);\n\n if (head && head.length) socket.unshift(head);\n\n\n var proxyReq = (common.isSSL.test(options.target.protocol) ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req)\n );\n\n // Enable developers to modify the proxyReq before headers are sent\n if (server) { server.emit('proxyReqWs', proxyReq, req, socket, options, head); }\n\n // Error Handler\n proxyReq.on('error', onOutgoingError);\n proxyReq.on('response', function (res) {\n // if upgrade event isn't going to happen, close the socket\n if (!res.upgrade) {\n socket.write(createHttpHeader('HTTP/' + res.httpVersion + ' ' + res.statusCode + ' ' + res.statusMessage, res.headers));\n res.pipe(socket);\n }\n });\n\n proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) {\n proxySocket.on('error', onOutgoingError);\n\n // Allow us to listen when the websocket has completed\n proxySocket.on('end', function () {\n server.emit('close', proxyRes, proxySocket, proxyHead);\n });\n\n // The pipe below will end proxySocket if socket closes cleanly, but not\n // if it errors (eg, vanishes from the net and starts returning\n // EHOSTUNREACH). We need to do that explicitly.\n socket.on('error', function () {\n proxySocket.end();\n });\n\n common.setupSocket(proxySocket);\n\n if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead);\n\n //\n // Remark: Handle writing the headers to the socket when switching protocols\n // Also handles when a header is an array\n //\n socket.write(createHttpHeader('HTTP/1.1 101 Switching Protocols', proxyRes.headers));\n\n proxySocket.pipe(socket).pipe(proxySocket);\n\n server.emit('open', proxySocket);\n server.emit('proxySocket', proxySocket); //DEPRECATED.\n });\n\n return proxyReq.end(); // XXX: CHECK IF THIS IS THIS CORRECT\n\n function onOutgoingError(err) {\n if (clb) {\n clb(err, req, socket);\n } else {\n server.emit('error', err, req, socket);\n }\n socket.end();\n }\n }\n};\n","var httpProxy = module.exports,\n extend = require('util')._extend,\n parse_url = require('url').parse,\n EE3 = require('eventemitter3'),\n http = require('http'),\n https = require('https'),\n web = require('./passes/web-incoming'),\n ws = require('./passes/ws-incoming');\n\nhttpProxy.Server = ProxyServer;\n\n/**\n * Returns a function that creates the loader for\n * either `ws` or `web`'s passes.\n *\n * Examples:\n *\n * httpProxy.createRightProxy('ws')\n * // => [Function]\n *\n * @param {String} Type Either 'ws' or 'web'\n * \n * @return {Function} Loader Function that when called returns an iterator for the right passes\n *\n * @api private\n */\n\nfunction createRightProxy(type) {\n\n return function(options) {\n return function(req, res /*, [head], [opts] */) {\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n args = [].slice.call(arguments),\n cntr = args.length - 1,\n head, cbl;\n\n /* optional args parse begin */\n if(typeof args[cntr] === 'function') {\n cbl = args[cntr];\n\n cntr--;\n }\n\n var requestOptions = options;\n if(\n !(args[cntr] instanceof Buffer) &&\n args[cntr] !== res\n ) {\n //Copy global options\n requestOptions = extend({}, options);\n //Overwrite with request options\n extend(requestOptions, args[cntr]);\n\n cntr--;\n }\n\n if(args[cntr] instanceof Buffer) {\n head = args[cntr];\n }\n\n /* optional args parse end */\n\n ['target', 'forward'].forEach(function(e) {\n if (typeof requestOptions[e] === 'string')\n requestOptions[e] = parse_url(requestOptions[e]);\n });\n\n if (!requestOptions.target && !requestOptions.forward) {\n return this.emit('error', new Error('Must provide a proper URL as target'));\n }\n\n for(var i=0; i < passes.length; i++) {\n /**\n * Call of passes functions\n * pass(req, res, options, head)\n *\n * In WebSockets case the `res` variable\n * refer to the connection socket\n * pass(req, socket, options, head)\n */\n if(passes[i](req, res, requestOptions, head, this, cbl)) { // passes can return a truthy value to halt the loop\n break;\n }\n }\n };\n };\n}\nhttpProxy.createRightProxy = createRightProxy;\n\nfunction ProxyServer(options) {\n EE3.call(this);\n\n options = options || {};\n options.prependPath = options.prependPath === false ? false : true;\n\n this.web = this.proxyRequest = createRightProxy('web')(options);\n this.ws = this.proxyWebsocketRequest = createRightProxy('ws')(options);\n this.options = options;\n\n this.webPasses = Object.keys(web).map(function(pass) {\n return web[pass];\n });\n\n this.wsPasses = Object.keys(ws).map(function(pass) {\n return ws[pass];\n });\n\n this.on('error', this.onError, this);\n\n}\n\nrequire('util').inherits(ProxyServer, EE3);\n\nProxyServer.prototype.onError = function (err) {\n //\n // Remark: Replicate node core behavior using EE3\n // so we force people to handle their own errors\n //\n if(this.listeners('error').length === 1) {\n throw err;\n }\n};\n\nProxyServer.prototype.listen = function(port, hostname) {\n var self = this,\n closure = function(req, res) { self.web(req, res); };\n\n this._server = this.options.ssl ?\n https.createServer(this.options.ssl, closure) :\n http.createServer(closure);\n\n if(this.options.ws) {\n this._server.on('upgrade', function(req, socket, head) { self.ws(req, socket, head); });\n }\n\n this._server.listen(port, hostname);\n\n return this;\n};\n\nProxyServer.prototype.close = function(callback) {\n var self = this;\n if (this._server) {\n this._server.close(done);\n }\n\n // Wrap callback to nullify server after all open connections are closed.\n function done() {\n self._server = null;\n if (callback) {\n callback.apply(null, arguments);\n }\n };\n};\n\nProxyServer.prototype.before = function(type, passName, callback) {\n if (type !== 'ws' && type !== 'web') {\n throw new Error('type must be `web` or `ws`');\n }\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n i = false;\n\n passes.forEach(function(v, idx) {\n if(v.name === passName) i = idx;\n })\n\n if(i === false) throw new Error('No such pass');\n\n passes.splice(i, 0, callback);\n};\nProxyServer.prototype.after = function(type, passName, callback) {\n if (type !== 'ws' && type !== 'web') {\n throw new Error('type must be `web` or `ws`');\n }\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n i = false;\n\n passes.forEach(function(v, idx) {\n if(v.name === passName) i = idx;\n })\n\n if(i === false) throw new Error('No such pass');\n\n passes.splice(i++, 0, callback);\n};\n"," // Use explicit /index.js to help browserify negociation in require '/lib/http-proxy' (!)\nvar ProxyServer = require('./http-proxy/index.js').Server;\n\n\n/**\n * Creates the proxy server.\n *\n * Examples:\n *\n * httpProxy.createProxyServer({ .. }, 8000)\n * // => '{ web: [Function], ws: [Function] ... }'\n *\n * @param {Object} Options Config object passed to the proxy\n *\n * @return {Object} Proxy Proxy object with handlers for `ws` and `web` requests\n *\n * @api public\n */\n\n\nfunction createProxyServer(options) {\n /*\n * `options` is needed and it must have the following layout:\n *\n * {\n * target : <url string to be parsed with the url module>\n * forward: <url string to be parsed with the url module>\n * agent : <object to be passed to http(s).request>\n * ssl : <object to be passed to https.createServer()>\n * ws : <true/false, if you want to proxy websockets>\n * xfwd : <true/false, adds x-forward headers>\n * secure : <true/false, verify SSL certificate>\n * toProxy: <true/false, explicitly specify if we are proxying to another proxy>\n * prependPath: <true/false, Default: true - specify whether you want to prepend the target's path to the proxy path>\n * ignorePath: <true/false, Default: false - specify whether you want to ignore the proxy path of the incoming request>\n * localAddress : <Local interface string to bind for outgoing connections>\n * changeOrigin: <true/false, Default: false - changes the origin of the host header to the target URL>\n * preserveHeaderKeyCase: <true/false, Default: false - specify whether you want to keep letter case of response header key >\n * auth : Basic authentication i.e. 'user:password' to compute an Authorization header.\n * hostRewrite: rewrites the location hostname on (201/301/302/307/308) redirects, Default: null.\n * autoRewrite: rewrites the location host/port on (201/301/302/307/308) redirects based on requested host/port. Default: false.\n * protocolRewrite: rewrites the location protocol on (201/301/302/307/308) redirects to 'http' or 'https'. Default: null.\n * }\n *\n * NOTE: `options.ws` and `options.ssl` are optional.\n * `options.target and `options.forward` cannot be\n * both missing\n * }\n */\n\n return new ProxyServer(options);\n}\n\n\nProxyServer.createProxyServer = createProxyServer;\nProxyServer.createServer = createProxyServer;\nProxyServer.createProxy = createProxyServer;\n\n\n\n\n/**\n * Export the proxy \"Server\" as the main export.\n */\nmodule.exports = ProxyServer;\n\n","/*!\n * Caron dimonio, con occhi di bragia\n * loro accennando, tutte le raccoglie;\n * batte col remo qualunque s’adagia \n *\n * Charon the demon, with the eyes of glede,\n * Beckoning to them, collects them all together,\n * Beats with his oar whoever lags behind\n * \n * Dante - The Divine Comedy (Canto III)\n */\n\nmodule.exports = require('./lib/http-proxy');","import * as http from 'http'\nimport { createDebugger, isObject } from '../../utils'\nimport httpProxy from 'http-proxy'\nimport { HMR_HEADER } from '../ws'\nimport { Connect } from 'types/connect'\nimport { HttpProxy } from 'types/http-proxy'\nimport chalk from 'chalk'\nimport { ResolvedConfig } from '../..'\n\nconst debug = createDebugger('vite:proxy')\n\nexport interface ProxyOptions extends HttpProxy.ServerOptions {\n /**\n * rewrite path\n */\n rewrite?: (path: string) => string\n /**\n * configure the proxy server (e.g. listen to events)\n */\n configure?: (proxy: HttpProxy.Server, options: ProxyOptions) => void\n /**\n * webpack-dev-server style bypass function\n */\n bypass?: (\n req: http.IncomingMessage,\n res: http.ServerResponse,\n options: ProxyOptions\n ) => void | null | undefined | false | string\n}\n\nexport function proxyMiddleware(\n httpServer: http.Server | null,\n config: ResolvedConfig\n): Connect.NextHandleFunction {\n const options = config.server.proxy!\n\n // lazy require only when proxy is used\n const proxies: Record<string, [HttpProxy.Server, ProxyOptions]> = {}\n\n Object.keys(options).forEach((context) => {\n let opts = options[context]\n if (typeof opts === 'string') {\n opts = { target: opts, changeOrigin: true } as ProxyOptions\n }\n const proxy = httpProxy.createProxyServer(opts) as HttpProxy.Server\n\n proxy.on('error', (err) => {\n config.logger.error(`${chalk.red(`http proxy error:`)}\\n${err.stack}`, {\n timestamp: true,\n error: err\n })\n })\n\n if (opts.configure) {\n opts.configure(proxy, opts)\n }\n // clone before saving because http-proxy mutates the options\n proxies[context] = [proxy, { ...opts }]\n })\n\n if (httpServer) {\n httpServer.on('upgrade', (req, socket, head) => {\n const url = req.url!\n for (const context in proxies) {\n if (doesProxyContextMatchUrl(context, url)) {\n const [proxy, opts] = proxies[context]\n if (\n (opts.ws || opts.target?.toString().startsWith('ws:')) &&\n req.headers['sec-websocket-protocol'] !== HMR_HEADER\n ) {\n if (opts.rewrite) {\n req.url = opts.rewrite(url)\n }\n debug(`${req.url} -> ws ${opts.target}`)\n proxy.ws(req, socket, head)\n return\n }\n }\n }\n })\n }\n\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return function viteProxyMiddleware(req, res, next) {\n const url = req.url!\n for (const context in proxies) {\n if (doesProxyContextMatchUrl(context, url)) {\n const [proxy, opts] = proxies[context]\n const options: HttpProxy.ServerOptions = {}\n\n if (opts.bypass) {\n const bypassResult = opts.bypass(req, res, opts)\n if (typeof bypassResult === 'string') {\n req.url = bypassResult\n debug(`bypass: ${req.url} -> ${bypassResult}`)\n return next()\n } else if (isObject(bypassResult)) {\n Object.assign(options, bypassResult)\n debug(`bypass: ${req.url} use modified options: %O`, options)\n return next()\n } else if (bypassResult === false) {\n debug(`bypass: ${req.url} -> 404`)\n return res.end(404)\n }\n }\n\n debug(`${req.url} -> ${opts.target || opts.forward}`)\n if (opts.rewrite) {\n req.url = opts.rewrite(req.url!)\n }\n proxy.web(req, res, options)\n return\n }\n }\n next()\n }\n}\n\nfunction doesProxyContextMatchUrl(context: string, url: string): boolean {\n return (\n (context.startsWith('^') && new RegExp(context).test(url)) ||\n url.startsWith(context)\n )\n}\n","'use strict';\n\nvar url = require('url');\n\nexports = module.exports = function historyApiFallback(options) {\n options = options || {};\n var logger = getLogger(options);\n\n return function(req, res, next) {\n var headers = req.headers;\n if (req.method !== 'GET') {\n logger(\n 'Not rewriting',\n req.method,\n req.url,\n 'because the method is not GET.'\n );\n return next();\n } else if (!headers || typeof headers.accept !== 'string') {\n logger(\n 'Not rewriting',\n req.method,\n req.url,\n 'because the client did not send an HTTP accept header.'\n );\n return next();\n } else if (headers.accept.indexOf('application/json') === 0) {\n logger(\n 'Not rewriting',\n req.method,\n req.url,\n 'because the client prefers JSON.'\n );\n return next();\n } else if (!acceptsHtml(headers.accept, options)) {\n logger(\n 'Not rewriting',\n req.method,\n req.url,\n 'because the client does not accept HTML.'\n );\n return next();\n }\n\n var parsedUrl = url.parse(req.url);\n var rewriteTarget;\n options.rewrites = options.rewrites || [];\n for (var i = 0; i < options.rewrites.length; i++) {\n var rewrite = options.rewrites[i];\n var match = parsedUrl.pathname.match(rewrite.from);\n if (match !== null) {\n rewriteTarget = evaluateRewriteRule(parsedUrl, match, rewrite.to, req);\n\n if(rewriteTarget.charAt(0) !== '/') {\n logger(\n 'We recommend using an absolute path for the rewrite target.',\n 'Received a non-absolute rewrite target',\n rewriteTarget,\n 'for URL',\n req.url\n );\n }\n\n logger('Rewriting', req.method, req.url, 'to', rewriteTarget);\n req.url = rewriteTarget;\n return next();\n }\n }\n\n var pathname = parsedUrl.pathname;\n if (pathname.lastIndexOf('.') > pathname.lastIndexOf('/') &&\n options.disableDotRule !== true) {\n logger(\n 'Not rewriting',\n req.method,\n req.url,\n 'because the path includes a dot (.) character.'\n );\n return next();\n }\n\n rewriteTarget = options.index || '/index.html';\n logger('Rewriting', req.method, req.url, 'to', rewriteTarget);\n req.url = rewriteTarget;\n next();\n };\n};\n\nfunction evaluateRewriteRule(parsedUrl, match, rule, req) {\n if (typeof rule === 'string') {\n return rule;\n } else if (typeof rule !== 'function') {\n throw new Error('Rewrite rule can only be of type string or function.');\n }\n\n return rule({\n parsedUrl: parsedUrl,\n match: match,\n request: req\n });\n}\n\nfunction acceptsHtml(header, options) {\n options.htmlAcceptHeaders = options.htmlAcceptHeaders || ['text/html', '*/*'];\n for (var i = 0; i < options.htmlAcceptHeaders.length; i++) {\n if (header.indexOf(options.htmlAcceptHeaders[i]) !== -1) {\n return true;\n }\n }\n return false;\n}\n\nfunction getLogger(options) {\n if (options && options.logger) {\n return options.logger;\n } else if (options && options.verbose) {\n return console.log.bind(console);\n }\n return function(){};\n}\n","import fs from 'fs'\nimport history from 'connect-history-api-fallback'\nimport path from 'path'\nimport { Connect } from 'types/connect'\nimport { createDebugger } from '../../utils'\n\nexport function spaFallbackMiddleware(\n root: string\n): Connect.NextHandleFunction {\n const historySpaFallbackMiddleware = history({\n logger: createDebugger('vite:spa-fallback'),\n // support /dir/ without explicit index.html\n rewrites: [\n {\n from: /\\/$/,\n to({ parsedUrl }: any) {\n const rewritten = parsedUrl.pathname + 'index.html'\n if (fs.existsSync(path.join(root, rewritten))) {\n return rewritten\n } else {\n return `/index.html`\n }\n }\n }\n ]\n })\n\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return function viteSpaFallbackMiddleware(req, res, next) {\n return historySpaFallbackMiddleware(req, res, next)\n }\n}\n","/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = etag\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto')\nvar Stats = require('fs').Stats\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag (entity) {\n if (entity.length === 0) {\n // fast-path empty\n return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n }\n\n // compute hash of entity\n var hash = crypto\n .createHash('sha1')\n .update(entity, 'utf8')\n .digest('base64')\n .substring(0, 27)\n\n // compute length of entity\n var len = typeof entity === 'string'\n ? Buffer.byteLength(entity, 'utf8')\n : entity.length\n\n return '\"' + len.toString(16) + '-' + hash + '\"'\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag (entity, options) {\n if (entity == null) {\n throw new TypeError('argument entity is required')\n }\n\n // support fs.Stats object\n var isStats = isstats(entity)\n var weak = options && typeof options.weak === 'boolean'\n ? options.weak\n : isStats\n\n // validate argument\n if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n throw new TypeError('argument entity must be string, Buffer, or fs.Stats')\n }\n\n // generate entity tag\n var tag = isStats\n ? stattag(entity)\n : entitytag(entity)\n\n return weak\n ? 'W/' + tag\n : tag\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats (obj) {\n // genuine fs.Stats\n if (typeof Stats === 'function' && obj instanceof Stats) {\n return true\n }\n\n // quack quack\n return obj && typeof obj === 'object' &&\n 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&\n 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&\n 'ino' in obj && typeof obj.ino === 'number' &&\n 'size' in obj && typeof obj.size === 'number'\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag (stat) {\n var mtime = stat.mtime.getTime().toString(16)\n var size = stat.size.toString(16)\n\n return '\"' + size + '-' + mtime + '\"'\n}\n","import { IncomingMessage, ServerResponse } from 'http'\nimport getEtag from 'etag'\nimport { SourceMap } from 'rollup'\n\nconst isDebug = process.env.DEBUG\n\nconst alias: Record<string, string | undefined> = {\n js: 'application/javascript',\n css: 'text/css',\n html: 'text/html',\n json: 'application/json'\n}\n\nexport function send(\n req: IncomingMessage,\n res: ServerResponse,\n content: string | Buffer,\n type: string,\n etag = getEtag(content, { weak: true }),\n cacheControl = 'no-cache',\n map?: SourceMap | null\n): void {\n if (res.writableEnded) {\n return\n }\n\n if (req.headers['if-none-match'] === etag) {\n res.statusCode = 304\n return res.end()\n }\n\n res.setHeader('Content-Type', alias[type] || type)\n res.setHeader('Cache-Control', cacheControl)\n res.setHeader('Etag', etag)\n\n // inject source map reference\n if (map && map.mappings) {\n if (isDebug) {\n content += `\\n/*${JSON.stringify(map, null, 2).replace(\n /\\*\\//g,\n '*\\\\/'\n )}*/\\n`\n }\n content += genSourceMapString(map)\n }\n\n res.statusCode = 200\n return res.end(content)\n}\n\nfunction genSourceMapString(map: SourceMap | string | undefined) {\n if (typeof map !== 'string') {\n map = JSON.stringify(map)\n }\n return `\\n//# sourceMappingURL=data:application/json;base64,${Buffer.from(\n map\n ).toString('base64')}`\n}\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict';\nvar fs = require('fs');\nvar path = require('path');\nvar SafeBuffer = require('safe-buffer');\n\nObject.defineProperty(exports, 'commentRegex', {\n get: function getCommentRegex () {\n return /^\\s*\\/(?:\\/|\\*)[@#]\\s+sourceMappingURL=data:(?:application|text)\\/json;(?:charset[:=]\\S+?;)?base64,(?:.*)$/mg;\n }\n});\n\nObject.defineProperty(exports, 'mapFileCommentRegex', {\n get: function getMapFileCommentRegex () {\n // Matches sourceMappingURL in either // or /* comment styles.\n return /(?:\\/\\/[@#][ \\t]+sourceMappingURL=([^\\s'\"`]+?)[ \\t]*$)|(?:\\/\\*[@#][ \\t]+sourceMappingURL=([^\\*]+?)[ \\t]*(?:\\*\\/){1}[ \\t]*$)/mg;\n }\n});\n\n\nfunction decodeBase64(base64) {\n return (SafeBuffer.Buffer.from(base64, 'base64') || \"\").toString();\n}\n\nfunction stripComment(sm) {\n return sm.split(',').pop();\n}\n\nfunction readFromFileMap(sm, dir) {\n // NOTE: this will only work on the server since it attempts to read the map file\n\n var r = exports.mapFileCommentRegex.exec(sm);\n\n // for some odd reason //# .. captures in 1 and /* .. */ in 2\n var filename = r[1] || r[2];\n var filepath = path.resolve(dir, filename);\n\n try {\n return fs.readFileSync(filepath, 'utf8');\n } catch (e) {\n throw new Error('An error occurred while trying to read the map file at ' + filepath + '\\n' + e);\n }\n}\n\nfunction Converter (sm, opts) {\n opts = opts || {};\n\n if (opts.isFileComment) sm = readFromFileMap(sm, opts.commentFileDir);\n if (opts.hasComment) sm = stripComment(sm);\n if (opts.isEncoded) sm = decodeBase64(sm);\n if (opts.isJSON || opts.isEncoded) sm = JSON.parse(sm);\n\n this.sourcemap = sm;\n}\n\nConverter.prototype.toJSON = function (space) {\n return JSON.stringify(this.sourcemap, null, space);\n};\n\nConverter.prototype.toBase64 = function () {\n var json = this.toJSON();\n return (SafeBuffer.Buffer.from(json, 'utf8') || \"\").toString('base64');\n};\n\nConverter.prototype.toComment = function (options) {\n var base64 = this.toBase64();\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return options && options.multiline ? '/*# ' + data + ' */' : '//# ' + data;\n};\n\n// returns copy instead of original\nConverter.prototype.toObject = function () {\n return JSON.parse(this.toJSON());\n};\n\nConverter.prototype.addProperty = function (key, value) {\n if (this.sourcemap.hasOwnProperty(key)) throw new Error('property \"' + key + '\" already exists on the sourcemap, use set property instead');\n return this.setProperty(key, value);\n};\n\nConverter.prototype.setProperty = function (key, value) {\n this.sourcemap[key] = value;\n return this;\n};\n\nConverter.prototype.getProperty = function (key) {\n return this.sourcemap[key];\n};\n\nexports.fromObject = function (obj) {\n return new Converter(obj);\n};\n\nexports.fromJSON = function (json) {\n return new Converter(json, { isJSON: true });\n};\n\nexports.fromBase64 = function (base64) {\n return new Converter(base64, { isEncoded: true });\n};\n\nexports.fromComment = function (comment) {\n comment = comment\n .replace(/^\\/\\*/g, '//')\n .replace(/\\*\\/$/g, '');\n\n return new Converter(comment, { isEncoded: true, hasComment: true });\n};\n\nexports.fromMapFileComment = function (comment, dir) {\n return new Converter(comment, { commentFileDir: dir, isFileComment: true, isJSON: true });\n};\n\n// Finds last sourcemap comment in file or returns null if none was found\nexports.fromSource = function (content) {\n var m = content.match(exports.commentRegex);\n return m ? exports.fromComment(m.pop()) : null;\n};\n\n// Finds last sourcemap comment in file or returns null if none was found\nexports.fromMapFileSource = function (content, dir) {\n var m = content.match(exports.mapFileCommentRegex);\n return m ? exports.fromMapFileComment(m.pop(), dir) : null;\n};\n\nexports.removeComments = function (src) {\n return src.replace(exports.commentRegex, '');\n};\n\nexports.removeMapFileComments = function (src) {\n return src.replace(exports.mapFileCommentRegex, '');\n};\n\nexports.generateMapFileComment = function (file, options) {\n var data = 'sourceMappingURL=' + file;\n return options && options.multiline ? '/*# ' + data + ' */' : '//# ' + data;\n};\n","import { walk } from 'estree-walker';\nimport is_reference from 'is-reference';\n\n// @ts-check\n\n/** @typedef { import('estree').Node} Node */\n/** @typedef { import('estree').VariableDeclaration} VariableDeclaration */\n/** @typedef { import('estree').ClassDeclaration} ClassDeclaration */\n/** @typedef { import('estree').VariableDeclarator} VariableDeclarator */\n/** @typedef { import('estree').Property} Property */\n/** @typedef { import('estree').RestElement} RestElement */\n/** @typedef { import('estree').Identifier} Identifier */\n\n/**\n *\n * @param {Node} expression\n */\nfunction analyze(expression) {\n\t/** @type {WeakMap<Node, Scope>} */\n\tconst map = new WeakMap();\n\n\t/** @type {Map<string, Node>} */\n\tconst globals = new Map();\n\n\tconst scope = new Scope(null, false);\n\n\t/** @type {[Scope, Identifier][]} */\n\tconst references = [];\n\tlet current_scope = scope;\n\n\twalk(expression, {\n\t\t/**\n\t\t *\n\t\t * @param {Node} node\n\t\t * @param {Node} parent\n\t\t */\n\t\tenter(node, parent) {\n\t\t\tswitch (node.type) {\n\t\t\t\tcase 'Identifier':\n\t\t\t\t\tif (is_reference(node, parent)) {\n\t\t\t\t\t\treferences.push([current_scope, node]);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ImportDeclaration':\n\t\t\t\t\tnode.specifiers.forEach((specifier) => {\n\t\t\t\t\t\tcurrent_scope.declarations.set(specifier.local.name, specifier);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'FunctionExpression':\n\t\t\t\tcase 'FunctionDeclaration':\n\t\t\t\tcase 'ArrowFunctionExpression':\n\t\t\t\t\tif (node.type === 'FunctionDeclaration') {\n\t\t\t\t\t\tif (node.id) {\n\t\t\t\t\t\t\tcurrent_scope.declarations.set(node.id.name, node);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmap.set(node, current_scope = new Scope(current_scope, false));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmap.set(node, current_scope = new Scope(current_scope, false));\n\n\t\t\t\t\t\tif (node.type === 'FunctionExpression' && node.id) {\n\t\t\t\t\t\t\tcurrent_scope.declarations.set(node.id.name, node);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tnode.params.forEach(param => {\n\t\t\t\t\t\textract_names(param).forEach(name => {\n\t\t\t\t\t\t\tcurrent_scope.declarations.set(name, node);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ForStatement':\n\t\t\t\tcase 'ForInStatement':\n\t\t\t\tcase 'ForOfStatement':\n\t\t\t\t\tmap.set(node, current_scope = new Scope(current_scope, true));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'BlockStatement':\n\t\t\t\t\tmap.set(node, current_scope = new Scope(current_scope, true));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ClassDeclaration':\n\t\t\t\tcase 'VariableDeclaration':\n\t\t\t\t\tcurrent_scope.add_declaration(node);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'CatchClause':\n\t\t\t\t\tmap.set(node, current_scope = new Scope(current_scope, true));\n\n\t\t\t\t\tif (node.param) {\n\t\t\t\t\t\textract_names(node.param).forEach(name => {\n\t\t\t\t\t\t\tcurrent_scope.declarations.set(name, node.param);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {Node} node\n\t\t */\n\t\tleave(node) {\n\t\t\tif (map.has(node)) {\n\t\t\t\tcurrent_scope = current_scope.parent;\n\t\t\t}\n\t\t}\n\t});\n\n\tfor (let i = references.length - 1; i >= 0; --i) {\n\t\tconst [scope, reference] = references[i];\n\n\t\tif (!scope.references.has(reference.name)) {\n\t\t\tadd_reference(scope, reference.name);\n\n\t\t\tif (!scope.find_owner(reference.name)) {\n\t\t\t\tglobals.set(reference.name, reference);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { map, scope, globals };\n}\n\n/**\n *\n * @param {Scope} scope\n * @param {string} name\n */\nfunction add_reference(scope, name) {\n\tscope.references.add(name);\n\tif (scope.parent) add_reference(scope.parent, name);\n}\n\nclass Scope {\n\tconstructor(parent, block) {\n\t\t/** @type {Scope | null} */\n\t\tthis.parent = parent;\n\n\t\t/** @type {boolean} */\n\t\tthis.block = block;\n\n\t\t/** @type {Map<string, Node>} */\n\t\tthis.declarations = new Map();\n\n\t\t/** @type {Set<string>} */\n\t\tthis.initialised_declarations = new Set();\n\n\t\t/** @type {Set<string>} */\n\t\tthis.references = new Set();\n\t}\n\n\t/**\n\t *\n\t * @param {VariableDeclaration | ClassDeclaration} node\n\t */\n\tadd_declaration(node) {\n\t\tif (node.type === 'VariableDeclaration') {\n\t\t\tif (node.kind === 'var' && this.block && this.parent) {\n\t\t\t\tthis.parent.add_declaration(node);\n\t\t\t} else {\n\t\t\t\t/**\n\t\t\t\t *\n\t\t\t\t * @param {VariableDeclarator} declarator\n\t\t\t\t */\n\t\t\t\tconst handle_declarator = (declarator) => {\n\t\t\t\t\textract_names(declarator.id).forEach(name => {\n\t\t\t\t\t\tthis.declarations.set(name, node);\n\t\t\t\t\t\tif (declarator.init) this.initialised_declarations.add(name);\n\t\t\t\t\t});\t\t\t\t};\n\n\t\t\t\tnode.declarations.forEach(handle_declarator);\n\t\t\t}\n\t\t} else if (node.id) {\n\t\t\tthis.declarations.set(node.id.name, node);\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {string} name\n\t * @returns {Scope | null}\n\t */\n\tfind_owner(name) {\n\t\tif (this.declarations.has(name)) return this;\n\t\treturn this.parent && this.parent.find_owner(name);\n\t}\n\n\t/**\n\t *\n\t * @param {string} name\n\t * @returns {boolean}\n\t */\n\thas(name) {\n\t\treturn (\n\t\t\tthis.declarations.has(name) || (!!this.parent && this.parent.has(name))\n\t\t);\n\t}\n}\n\n/**\n *\n * @param {Node} param\n * @returns {string[]}\n */\nfunction extract_names(param) {\n\treturn extract_identifiers(param).map(node => node.name);\n}\n\n/**\n *\n * @param {Node} param\n * @param {Identifier[]} nodes\n * @returns {Identifier[]}\n */\nfunction extract_identifiers(param, nodes = []) {\n\tswitch (param.type) {\n\t\tcase 'Identifier':\n\t\t\tnodes.push(param);\n\t\t\tbreak;\n\n\t\tcase 'MemberExpression':\n\t\t\tlet object = param;\n\t\t\twhile (object.type === 'MemberExpression') {\n\t\t\t\tobject = /** @type {any} */ (object.object);\n\t\t\t}\n\t\t\tnodes.push(/** @type {any} */ (object));\n\t\t\tbreak;\n\n\t\tcase 'ObjectPattern':\n\t\t\t/**\n\t\t\t *\n\t\t\t * @param {Property | RestElement} prop\n\t\t\t */\n\t\t\tconst handle_prop = (prop) => {\n\t\t\t\tif (prop.type === 'RestElement') {\n\t\t\t\t\textract_identifiers(prop.argument, nodes);\n\t\t\t\t} else {\n\t\t\t\t\textract_identifiers(prop.value, nodes);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tparam.properties.forEach(handle_prop);\n\t\t\tbreak;\n\n\t\tcase 'ArrayPattern':\n\t\t\t/**\n\t\t\t *\n\t\t\t * @param {Node} element\n\t\t\t */\n\t\t\tconst handle_element = (element) => {\n\t\t\t\tif (element) extract_identifiers(element, nodes);\n\t\t\t};\n\n\t\t\tparam.elements.forEach(handle_element);\n\t\t\tbreak;\n\n\t\tcase 'RestElement':\n\t\t\textract_identifiers(param.argument, nodes);\n\t\t\tbreak;\n\n\t\tcase 'AssignmentPattern':\n\t\t\textract_identifiers(param.left, nodes);\n\t\t\tbreak;\n\t}\n\n\treturn nodes;\n}\n\nexport { analyze, Scope, extract_names, extract_identifiers };\n","import MagicString from 'magic-string'\nimport { SourceMap } from 'rollup'\nimport { TransformResult } from '../server/transformRequest'\nimport { parser } from '../server/pluginContainer'\nimport {\n Identifier,\n Node as _Node,\n Property,\n Function as FunctionNode\n} from 'estree'\nimport { extract_names as extractNames } from 'periscopic'\nimport { walk as eswalk } from 'estree-walker'\nimport { combineSourcemaps } from '../utils'\nimport { RawSourceMap } from '@ampproject/remapping/dist/types/types'\n\ntype Node = _Node & {\n start: number\n end: number\n}\n\nexport const ssrModuleExportsKey = `__vite_ssr_exports__`\nexport const ssrImportKey = `__vite_ssr_import__`\nexport const ssrDynamicImportKey = `__vite_ssr_dynamic_import__`\nexport const ssrExportAllKey = `__vite_ssr_exportAll__`\nexport const ssrImportMetaKey = `__vite_ssr_import_meta__`\n\nexport async function ssrTransform(\n code: string,\n inMap: SourceMap | null,\n url: string\n): Promise<TransformResult | null> {\n const s = new MagicString(code)\n\n let ast: any\n try {\n ast = parser.parse(code, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n locations: true\n })\n } catch (err) {\n if (!err.loc || !err.loc.line) throw err\n const line = err.loc.line\n throw new Error(\n `Parse failure: ${err.message}\\nContents of line ${line}: ${\n code.split('\\n')[line - 1]\n }`\n )\n }\n\n let uid = 0\n const deps = new Set<string>()\n const dynamicDeps = new Set<string>()\n const idToImportMap = new Map<string, string>()\n const declaredConst = new Set<string>()\n\n function defineImport(node: Node, source: string) {\n deps.add(source)\n const importId = `__vite_ssr_import_${uid++}__`\n s.appendLeft(\n node.start,\n `const ${importId} = await ${ssrImportKey}(${JSON.stringify(source)});\\n`\n )\n return importId\n }\n\n function defineExport(position: number, name: string, local = name) {\n s.appendRight(\n position,\n `\\nObject.defineProperty(${ssrModuleExportsKey}, \"${name}\", ` +\n `{ enumerable: true, configurable: true, get(){ return ${local} }});`\n )\n }\n\n // 1. check all import statements and record id -> importName map\n for (const node of ast.body as Node[]) {\n // import foo from 'foo' --> foo -> __import_foo__.default\n // import { baz } from 'foo' --> baz -> __import_foo__.baz\n // import * as ok from 'foo' --> ok -> __import_foo__\n if (node.type === 'ImportDeclaration') {\n const importId = defineImport(node, node.source.value as string)\n for (const spec of node.specifiers) {\n if (spec.type === 'ImportSpecifier') {\n idToImportMap.set(\n spec.local.name,\n `${importId}.${spec.imported.name}`\n )\n } else if (spec.type === 'ImportDefaultSpecifier') {\n idToImportMap.set(spec.local.name, `${importId}.default`)\n } else {\n // namespace specifier\n idToImportMap.set(spec.local.name, importId)\n }\n }\n s.remove(node.start, node.end)\n }\n }\n\n // 2. check all export statements and define exports\n for (const node of ast.body as Node[]) {\n // named exports\n if (node.type === 'ExportNamedDeclaration') {\n if (node.declaration) {\n if (\n node.declaration.type === 'FunctionDeclaration' ||\n node.declaration.type === 'ClassDeclaration'\n ) {\n // export function foo() {}\n defineExport(node.end, node.declaration.id!.name)\n } else {\n // export const foo = 1, bar = 2\n for (const declaration of node.declaration.declarations) {\n const names = extractNames(declaration.id as any)\n for (const name of names) {\n defineExport(node.end, name)\n }\n }\n }\n s.remove(node.start, (node.declaration as Node).start)\n } else {\n s.remove(node.start, node.end)\n if (node.source) {\n // export { foo, bar } from './foo'\n const importId = defineImport(node, node.source.value as string)\n for (const spec of node.specifiers) {\n defineExport(\n node.end,\n spec.exported.name,\n `${importId}.${spec.local.name}`\n )\n }\n } else {\n // export { foo, bar }\n for (const spec of node.specifiers) {\n const local = spec.local.name\n const binding = idToImportMap.get(local)\n defineExport(node.end, spec.exported.name, binding || local)\n }\n }\n }\n }\n\n // default export\n if (node.type === 'ExportDefaultDeclaration') {\n if ('id' in node.declaration && node.declaration.id) {\n // named hoistable/class exports\n // export default function foo() {}\n // export default class A {}\n const { name } = node.declaration.id\n s.remove(node.start, node.start + 15 /* 'export default '.length */)\n s.append(\n `\\nObject.defineProperty(${ssrModuleExportsKey}, \"default\", ` +\n `{ enumerable: true, value: ${name} });`\n )\n } else {\n // anonymous default exports\n s.overwrite(\n node.start,\n node.start + 14 /* 'export default'.length */,\n `${ssrModuleExportsKey}.default =`\n )\n }\n }\n\n // export * from './foo'\n if (node.type === 'ExportAllDeclaration') {\n if (node.exported) {\n const importId = defineImport(node, node.source.value as string)\n s.remove(node.start, node.end)\n defineExport(node.end, node.exported.name, `${importId}`)\n } else {\n const importId = defineImport(node, node.source.value as string)\n s.remove(node.start, node.end)\n s.appendLeft(node.end, `${ssrExportAllKey}(${importId});`)\n }\n }\n }\n\n // 3. convert references to import bindings & import.meta references\n walk(ast, {\n onIdentifier(id, parent, parentStack) {\n const binding = idToImportMap.get(id.name)\n if (!binding) {\n return\n }\n if (isStaticProperty(parent) && parent.shorthand) {\n // let binding used in a property shorthand\n // { foo } -> { foo: __import_x__.foo }\n // skip for destructuring patterns\n if (\n !(parent as any).inPattern ||\n isInDestructuringAssignment(parent, parentStack)\n ) {\n s.appendLeft(id.end, `: ${binding}`)\n }\n } else if (\n parent.type === 'ClassDeclaration' &&\n id === parent.superClass\n ) {\n if (!declaredConst.has(id.name)) {\n declaredConst.add(id.name)\n // locate the top-most node containing the class declaration\n const topNode = parentStack[1]\n s.prependRight(topNode.start, `const ${id.name} = ${binding};\\n`)\n }\n } else {\n s.overwrite(id.start, id.end, binding)\n }\n },\n onImportMeta(node) {\n s.overwrite(node.start, node.end, ssrImportMetaKey)\n },\n onDynamicImport(node) {\n s.overwrite(node.start, node.start + 6, ssrDynamicImportKey)\n if (node.type === 'ImportExpression' && node.source.type === 'Literal') {\n dynamicDeps.add(node.source.value as string)\n }\n }\n })\n\n let map = s.generateMap({ hires: true })\n if (inMap && inMap.mappings && inMap.sources.length > 0) {\n map = combineSourcemaps(url, [\n {\n ...map,\n sources: inMap.sources,\n sourcesContent: inMap.sourcesContent\n } as RawSourceMap,\n inMap as RawSourceMap\n ]) as SourceMap\n } else {\n map.sources = [url]\n map.sourcesContent = [code]\n }\n\n return {\n code: s.toString(),\n map,\n deps: [...deps],\n dynamicDeps: [...dynamicDeps]\n }\n}\n\ninterface Visitors {\n onIdentifier: (\n node: Identifier & {\n start: number\n end: number\n },\n parent: Node,\n parentStack: Node[]\n ) => void\n onImportMeta: (node: Node) => void\n onDynamicImport: (node: Node) => void\n}\n\n/**\n * Same logic from \\@vue/compiler-core & \\@vue/compiler-sfc\n * Except this is using acorn AST\n */\nfunction walk(\n root: Node,\n { onIdentifier, onImportMeta, onDynamicImport }: Visitors\n) {\n const parentStack: Node[] = []\n const scope: Record<string, number> = Object.create(null)\n const scopeMap = new WeakMap<_Node, Set<string>>()\n\n const setScope = (node: FunctionNode, name: string) => {\n let scopeIds = scopeMap.get(node)\n if (scopeIds && scopeIds.has(name)) {\n return\n }\n if (name in scope) {\n scope[name]++\n } else {\n scope[name] = 1\n }\n if (!scopeIds) {\n scopeIds = new Set()\n scopeMap.set(node, scopeIds)\n }\n scopeIds.add(name)\n }\n\n ;(eswalk as any)(root, {\n enter(node: Node, parent: Node | null) {\n if (node.type === 'ImportDeclaration') {\n return this.skip()\n }\n\n parent && parentStack.push(parent)\n\n if (node.type === 'MetaProperty' && node.meta.name === 'import') {\n onImportMeta(node)\n } else if (node.type === 'ImportExpression') {\n onDynamicImport(node)\n }\n\n if (node.type === 'Identifier') {\n if (!scope[node.name] && isRefIdentifier(node, parent!, parentStack)) {\n onIdentifier(node, parent!, parentStack)\n }\n } else if (isFunction(node)) {\n // walk function expressions and add its arguments to known identifiers\n // so that we don't prefix them\n node.params.forEach((p) =>\n (eswalk as any)(p.type === 'AssignmentPattern' ? p.left : p, {\n enter(child: Node, parent: Node) {\n if (\n child.type === 'Identifier' &&\n // do not record as scope variable if is a destructuring key\n !isStaticPropertyKey(child, parent) &&\n // do not record if this is a default value\n // assignment of a destructuring variable\n !(\n parent &&\n parent.type === 'AssignmentPattern' &&\n parent.right === child\n )\n ) {\n setScope(node, child.name)\n }\n }\n })\n )\n } else if (node.type === 'Property' && parent!.type === 'ObjectPattern') {\n // mark property in destructuring pattern\n ;(node as any).inPattern = true\n } else if (node.type === 'VariableDeclarator') {\n const parentFunction = findParentFunction(parentStack)\n if (parentFunction) {\n if (node.id.type === 'ObjectPattern') {\n node.id.properties.forEach((property) => {\n if (property.type === 'RestElement') {\n setScope(parentFunction, (property.argument as Identifier).name)\n } else {\n setScope(parentFunction, (property.value as Identifier).name)\n }\n })\n } else {\n setScope(parentFunction, (node.id as Identifier).name)\n }\n }\n }\n },\n\n leave(node: Node, parent: Node | null) {\n parent && parentStack.pop()\n const scopeIds = scopeMap.get(node)\n if (scopeIds) {\n scopeIds.forEach((id: string) => {\n scope[id]--\n if (scope[id] === 0) {\n delete scope[id]\n }\n })\n }\n }\n })\n}\n\nfunction isRefIdentifier(id: Identifier, parent: _Node, parentStack: _Node[]) {\n // declaration id\n if (\n parent.type === 'CatchClause' ||\n ((parent.type === 'VariableDeclarator' ||\n parent.type === 'ClassDeclaration') &&\n parent.id === id)\n ) {\n return false\n }\n\n if (isFunction(parent)) {\n // function declaration/expression id\n if ((parent as any).id === id) {\n return false\n }\n // params list\n if (parent.params.includes(id)) {\n return false\n }\n }\n\n // class method name\n if (parent.type === 'MethodDefinition') {\n return false\n }\n\n // property key\n // this also covers object destructuring pattern\n if (isStaticPropertyKey(id, parent) || (parent as any).inPattern) {\n return false\n }\n\n // non-assignment array destructuring pattern\n if (\n parent.type === 'ArrayPattern' &&\n !isInDestructuringAssignment(parent, parentStack)\n ) {\n return false\n }\n\n // member expression property\n if (\n parent.type === 'MemberExpression' &&\n parent.property === id &&\n !parent.computed\n ) {\n return false\n }\n\n if (parent.type === 'ExportSpecifier') {\n return false\n }\n\n // is a special keyword but parsed as identifier\n if (id.name === 'arguments') {\n return false\n }\n\n return true\n}\n\nconst isStaticProperty = (node: _Node): node is Property =>\n node && node.type === 'Property' && !node.computed\n\nconst isStaticPropertyKey = (node: _Node, parent: _Node) =>\n isStaticProperty(parent) && parent.key === node\n\nfunction isFunction(node: _Node): node is FunctionNode {\n return /Function(?:Expression|Declaration)$|Method$/.test(node.type)\n}\n\nfunction findParentFunction(parentStack: _Node[]): FunctionNode | undefined {\n for (let i = parentStack.length - 1; i >= 0; i--) {\n const node = parentStack[i]\n if (isFunction(node)) {\n return node\n }\n }\n}\n\nfunction isInDestructuringAssignment(\n parent: _Node,\n parentStack: _Node[]\n): boolean {\n if (\n parent &&\n (parent.type === 'Property' || parent.type === 'ArrayPattern')\n ) {\n let i = parentStack.length\n while (i--) {\n const p = parentStack[i]\n if (p.type === 'AssignmentExpression') {\n return true\n } else if (p.type !== 'Property' && !p.type.endsWith('Pattern')) {\n break\n }\n }\n }\n return false\n}\n","import path from 'path'\nimport { promises as fs } from 'fs'\nimport { Logger } from '../logger'\nimport { createDebugger } from '../utils'\n\nconst isDebug = !!process.env.DEBUG\nconst debug = createDebugger('vite:sourcemap', {\n onlyWhenFocused: true\n})\n\ninterface SourceMapLike {\n sources: string[]\n sourcesContent?: (string | null)[]\n sourceRoot?: string\n}\n\nexport async function injectSourcesContent(\n map: SourceMapLike,\n file: string,\n logger: Logger\n): Promise<void> {\n let sourceRoot: string | undefined\n try {\n // The source root is undefined for virtual modules and permission errors.\n sourceRoot = await fs.realpath(\n path.resolve(path.dirname(file), map.sourceRoot || '')\n )\n } catch {}\n\n const missingSources: string[] = []\n map.sourcesContent = await Promise.all(\n map.sources.map((sourcePath) => {\n if (sourcePath) {\n sourcePath = decodeURI(sourcePath)\n if (sourceRoot) {\n sourcePath = path.resolve(sourceRoot, sourcePath)\n }\n return fs.readFile(sourcePath, 'utf-8').catch(() => {\n missingSources.push(sourcePath)\n return null\n })\n }\n return null\n })\n )\n\n // Use this command…\n // DEBUG=\"vite:sourcemap\" vite build\n // …to log the missing sources.\n if (missingSources.length) {\n logger.warnOnce(`Sourcemap for \"${file}\" points to missing source files`)\n isDebug && debug(`Missing sources:\\n ` + missingSources.join(`\\n `))\n }\n}\n","import * as qs from 'querystring';\n\n/**\n * @typedef ParsedURL\n * @type {import('.').ParsedURL}\n */\n\n/**\n * @typedef Request\n * @property {string} url\n * @property {ParsedURL} _parsedUrl\n */\n\n/**\n * @param {Request} req\n * @returns {ParsedURL|void}\n */\nexport function parse(req) {\n\tlet raw = req.url;\n\tif (raw == null) return;\n\n\tlet prev = req._parsedUrl;\n\tif (prev && prev.raw === raw) return prev;\n\n\tlet pathname=raw, search='', query;\n\n\tif (raw.length > 1) {\n\t\tlet idx = raw.indexOf('?', 1);\n\n\t\tif (idx !== -1) {\n\t\t\tsearch = raw.substring(idx);\n\t\t\tpathname = raw.substring(0, idx);\n\t\t\tif (search.length > 1) {\n\t\t\t\tquery = qs.parse(search.substring(1));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn req._parsedUrl = { pathname, search, query, raw };\n}\n","import { join, resolve } from 'path';\nimport { readdirSync, statSync } from 'fs';\n\nexport default function list(dir, callback, pre='') {\n\tdir = resolve('.', dir);\n\tlet arr = readdirSync(dir);\n\tlet i=0, abs, stats;\n\tfor (; i < arr.length; i++) {\n\t\tabs = join(dir, arr[i]);\n\t\tstats = statSync(abs);\n\t\tstats.isDirectory()\n\t\t\t? list(abs, callback, join(pre, arr[i]))\n\t\t\t: callback(join(pre, arr[i]), abs, stats);\n\t}\n}\n","import * as fs from 'fs';\nimport { join, normalize, resolve } from 'path';\nimport { parse } from '@polka/url';\nimport list from 'totalist/sync';\nimport mime from 'mime/lite';\n\nconst noop = () => {};\n\nfunction isMatch(uri, arr) {\n\tfor (let i=0; i < arr.length; i++) {\n\t\tif (arr[i].test(uri)) return true;\n\t}\n}\n\nfunction toAssume(uri, extns) {\n\tlet i=0, x, len=uri.length - 1;\n\tif (uri.charCodeAt(len) === 47) {\n\t\turi = uri.substring(0, len);\n\t}\n\n\tlet arr=[], tmp=`${uri}/index`;\n\tfor (; i < extns.length; i++) {\n\t\tx = extns[i] ? `.${extns[i]}` : '';\n\t\tif (uri) arr.push(uri + x);\n\t\tarr.push(tmp + x);\n\t}\n\n\treturn arr;\n}\n\nfunction viaCache(cache, uri, extns) {\n\tlet i=0, data, arr=toAssume(uri, extns);\n\tfor (; i < arr.length; i++) {\n\t\tif (data = cache[arr[i]]) return data;\n\t}\n}\n\nfunction viaLocal(dir, isEtag, uri, extns) {\n\tlet i=0, arr=toAssume(uri, extns);\n\tlet abs, stats, name, headers;\n\tfor (; i < arr.length; i++) {\n\t\tabs = normalize(join(dir, name=arr[i]));\n\t\tif (abs.startsWith(dir) && fs.existsSync(abs)) {\n\t\t\tstats = fs.statSync(abs);\n\t\t\tif (stats.isDirectory()) continue;\n\t\t\theaders = toHeaders(name, stats, isEtag);\n\t\t\theaders['Cache-Control'] = isEtag ? 'no-cache' : 'no-store';\n\t\t\treturn { abs, stats, headers };\n\t\t}\n\t}\n}\n\nfunction is404(req, res) {\n\treturn (res.statusCode=404,res.end());\n}\n\nfunction send(req, res, file, stats, headers) {\n\tlet code=200, tmp, opts={};\n\theaders = { ...headers };\n\n\tfor (let key in headers) {\n\t\ttmp = res.getHeader(key);\n\t\tif (tmp) headers[key] = tmp;\n\t}\n\n\tif (tmp = res.getHeader('content-type')) {\n\t\theaders['Content-Type'] = tmp;\n\t}\n\n\tif (req.headers.range) {\n\t\tcode = 206;\n\t\tlet [x, y] = req.headers.range.replace('bytes=', '').split('-');\n\t\tlet end = opts.end = parseInt(y, 10) || stats.size - 1;\n\t\tlet start = opts.start = parseInt(x, 10) || 0;\n\n\t\tif (start >= stats.size || end >= stats.size) {\n\t\t\tres.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t\tres.statusCode = 416;\n\t\t\treturn res.end();\n\t\t}\n\n\t\theaders['Content-Range'] = `bytes ${start}-${end}/${stats.size}`;\n\t\theaders['Content-Length'] = (end - start + 1);\n\t\theaders['Accept-Ranges'] = 'bytes';\n\t}\n\n\tres.writeHead(code, headers);\n\tfs.createReadStream(file, opts).pipe(res);\n}\n\nfunction isEncoding(name, type, headers) {\n\theaders['Content-Encoding'] = type;\n\theaders['Content-Type'] = mime.getType(name.replace(/\\.([^.]*)$/, '')) || '';\n}\n\nfunction toHeaders(name, stats, isEtag) {\n\tlet headers = {\n\t\t'Content-Length': stats.size,\n\t\t'Content-Type': mime.getType(name) || '',\n\t\t'Last-Modified': stats.mtime.toUTCString(),\n\t};\n\tif (isEtag) headers['ETag'] = `W/\"${stats.size}-${stats.mtime.getTime()}\"`;\n\tif (/\\.br$/.test(name)) isEncoding(name, 'br', headers);\n\tif (/\\.gz$/.test(name)) isEncoding(name, 'gzip', headers);\n\treturn headers;\n}\n\nexport default function (dir, opts={}) {\n\tdir = resolve(dir || '.');\n\n\tlet isNotFound = opts.onNoMatch || is404;\n\tlet setHeaders = opts.setHeaders || noop;\n\n\tlet extensions = opts.extensions || ['html', 'htm'];\n\tlet gzips = opts.gzip && extensions.map(x => `${x}.gz`).concat('gz');\n\tlet brots = opts.brotli && extensions.map(x => `${x}.br`).concat('br');\n\n\tconst FILES = {};\n\n\tlet fallback = '/';\n\tlet isEtag = !!opts.etag;\n\tlet isSPA = !!opts.single;\n\tif (typeof opts.single === 'string') {\n\t\tlet idx = opts.single.lastIndexOf('.');\n\t\tfallback += !!~idx ? opts.single.substring(0, idx) : opts.single;\n\t}\n\n\tlet ignores = [];\n\tif (opts.ignores !== false) {\n\t\tignores.push(/[/]([A-Za-z\\s\\d~$._-]+\\.\\w+){1,}$/); // any extn\n\t\tif (opts.dotfiles) ignores.push(/\\/\\.\\w/);\n\t\telse ignores.push(/\\/\\.well-known/);\n\t\t[].concat(opts.ignores || []).forEach(x => {\n\t\t\tignores.push(new RegExp(x, 'i'));\n\t\t});\n\t}\n\n\tlet cc = opts.maxAge != null && `public,max-age=${opts.maxAge}`;\n\tif (cc && opts.immutable) cc += ',immutable';\n\telse if (cc && opts.maxAge === 0) cc += ',must-revalidate';\n\n\tif (!opts.dev) {\n\t\tlist(dir, (name, abs, stats) => {\n\t\t\tif (/\\.well-known[\\\\+\\/]/.test(name)) {} // keep\n\t\t\telse if (!opts.dotfiles && /(^\\.|[\\\\+|\\/+]\\.)/.test(name)) return;\n\n\t\t\tlet headers = toHeaders(name, stats, isEtag);\n\t\t\tif (cc) headers['Cache-Control'] = cc;\n\n\t\t\tFILES['/' + name.normalize().replace(/\\\\+/g, '/')] = { abs, stats, headers };\n\t\t});\n\t}\n\n\tlet lookup = opts.dev ? viaLocal.bind(0, dir, isEtag) : viaCache.bind(0, FILES);\n\n\treturn function (req, res, next) {\n\t\tlet extns = [''];\n\t\tlet pathname = parse(req).pathname;\n\t\tlet val = req.headers['accept-encoding'] || '';\n\t\tif (gzips && val.includes('gzip')) extns.unshift(...gzips);\n\t\tif (brots && /(br|brotli)/i.test(val)) extns.unshift(...brots);\n\t\textns.push(...extensions); // [...br, ...gz, orig, ...exts]\n\n\t\tif (pathname.indexOf('%') !== -1) {\n\t\t\ttry { pathname = decodeURIComponent(pathname) }\n\t\t\tcatch (err) { /* malform uri */ }\n\t\t}\n\n\t\tlet data = lookup(pathname, extns) || isSPA && !isMatch(pathname, ignores) && lookup(fallback, extns);\n\t\tif (!data) return next ? next() : isNotFound(req, res);\n\n\t\tif (isEtag && req.headers['if-none-match'] === data.headers['ETag']) {\n\t\t\tres.writeHead(304);\n\t\t\treturn res.end();\n\t\t}\n\n\t\tif (gzips || brots) {\n\t\t\tres.setHeader('Vary', 'Accept-Encoding');\n\t\t}\n\n\t\tsetHeaders(res, pathname, data.stats);\n\t\tsend(req, res, data.abs, data.stats, data.headers);\n\t};\n}\n","import path from 'path'\nimport sirv, { Options } from 'sirv'\nimport { Connect } from 'types/connect'\nimport { normalizePath, ResolvedConfig, ViteDevServer } from '../..'\nimport { FS_PREFIX } from '../../constants'\nimport {\n cleanUrl,\n ensureLeadingSlash,\n fsPathFromId,\n isImportRequest,\n isInternalRequest,\n isWindows,\n slash\n} from '../../utils'\nimport { AccessRestrictedError } from './error'\n\nconst sirvOptions: Options = {\n dev: true,\n etag: true,\n extensions: [],\n setHeaders(res, pathname) {\n // Matches js, jsx, ts, tsx.\n // The reason this is done, is that the .ts file extension is reserved\n // for the MIME type video/mp2t. In almost all cases, we can expect\n // these files to be TypeScript files, and for Vite to serve them with\n // this Content-Type.\n if (/\\.[tj]sx?$/.test(pathname)) {\n res.setHeader('Content-Type', 'application/javascript')\n }\n }\n}\n\nexport function servePublicMiddleware(dir: string): Connect.NextHandleFunction {\n const serve = sirv(dir, sirvOptions)\n\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return function viteServePublicMiddleware(req, res, next) {\n // skip import request and internal requests `/@fs/ /@vite-client` etc...\n if (isImportRequest(req.url!) || isInternalRequest(req.url!)) {\n return next()\n }\n serve(req, res, next)\n }\n}\n\nexport function serveStaticMiddleware(\n dir: string,\n config: ResolvedConfig\n): Connect.NextHandleFunction {\n const serve = sirv(dir, sirvOptions)\n\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return function viteServeStaticMiddleware(req, res, next) {\n // only serve the file if it's not an html request\n // so that html requests can fallthrough to our html middleware for\n // special processing\n // also skip internal requests `/@fs/ /@vite-client` etc...\n if (\n path.extname(cleanUrl(req.url!)) === '.html' ||\n isInternalRequest(req.url!)\n ) {\n return next()\n }\n\n const url = decodeURI(req.url!)\n\n // apply aliases to static requests as well\n let redirected: string | undefined\n for (const { find, replacement } of config.resolve.alias) {\n const matches =\n typeof find === 'string' ? url.startsWith(find) : find.test(url)\n if (matches) {\n redirected = url.replace(find, replacement)\n break\n }\n }\n if (redirected) {\n // dir is pre-normalized to posix style\n if (redirected.startsWith(dir)) {\n redirected = redirected.slice(dir.length)\n }\n req.url = redirected\n }\n\n serve(req, res, next)\n }\n}\n\nexport function serveRawFsMiddleware(\n server: ViteDevServer\n): Connect.NextHandleFunction {\n const serveFromRoot = sirv('/', sirvOptions)\n\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return function viteServeRawFsMiddleware(req, res, next) {\n let url = req.url!\n // In some cases (e.g. linked monorepos) files outside of root will\n // reference assets that are also out of served root. In such cases\n // the paths are rewritten to `/@fs/` prefixed paths and must be served by\n // searching based from fs root.\n if (url.startsWith(FS_PREFIX)) {\n // restrict files outside of `fs.allow`\n ensureServingAccess(slash(path.resolve(fsPathFromId(url))), server)\n url = url.slice(FS_PREFIX.length)\n if (isWindows) url = url.replace(/^[A-Z]:/i, '')\n\n req.url = url\n serveFromRoot(req, res, next)\n } else {\n next()\n }\n }\n}\n\nexport function isFileServingAllowed(\n url: string,\n server: ViteDevServer\n): boolean {\n // explicitly disabled\n if (server.config.server.fs.strict === false) return true\n\n const file = ensureLeadingSlash(normalizePath(cleanUrl(url)))\n\n if (server.moduleGraph.safeModulesPath.has(file)) return true\n\n if (server.config.server.fs.allow.some((i) => file.startsWith(i + '/')))\n return true\n\n if (!server.config.server.fs.strict) {\n server.config.logger.warnOnce(`Unrestricted file system access to \"${url}\"`)\n server.config.logger.warnOnce(\n `For security concerns, accessing files outside of serving allow list will ` +\n `be restricted by default in the future version of Vite. ` +\n `Refer to https://vitejs.dev/config/#server-fs-allow for more details.`\n )\n return true\n }\n\n return false\n}\n\nexport function ensureServingAccess(url: string, server: ViteDevServer): void {\n if (!isFileServingAllowed(url, server)) {\n const allow = server.config.server.fs.allow\n throw new AccessRestrictedError(\n `The request url \"${url}\" is outside of Vite serving allow list:\n\n${allow.map((i) => `- ${i}`).join('\\n')}\n\nRefer to docs https://vitejs.dev/config/#server-fs-allow for configurations and more details.`\n )\n }\n}\n","import { promises as fs } from 'fs'\nimport path from 'path'\nimport getEtag from 'etag'\nimport * as convertSourceMap from 'convert-source-map'\nimport { SourceDescription, SourceMap } from 'rollup'\nimport { ViteDevServer } from '..'\nimport chalk from 'chalk'\nimport {\n createDebugger,\n cleanUrl,\n prettifyUrl,\n removeTimestampQuery,\n timeFrom,\n ensureWatchedFile,\n isObject\n} from '../utils'\nimport { checkPublicFile } from '../plugins/asset'\nimport { ssrTransform } from '../ssr/ssrTransform'\nimport { injectSourcesContent } from './sourcemap'\nimport { isFileServingAllowed } from './middlewares/static'\nimport { performance } from 'perf_hooks'\n\nconst debugLoad = createDebugger('vite:load')\nconst debugTransform = createDebugger('vite:transform')\nconst debugCache = createDebugger('vite:cache')\nconst isDebug = !!process.env.DEBUG\n\nexport interface TransformResult {\n code: string\n map: SourceMap | null\n etag?: string\n deps?: string[]\n dynamicDeps?: string[]\n}\n\nexport interface TransformOptions {\n ssr?: boolean\n html?: boolean\n}\n\nexport function transformRequest(\n url: string,\n server: ViteDevServer,\n options: TransformOptions = {}\n): Promise<TransformResult | null> {\n const pending = server._pendingRequests[url]\n if (pending) {\n debugTransform(\n `[reuse pending] for ${prettifyUrl(url, server.config.root)}`\n )\n return pending\n }\n const result = doTransform(url, server, options)\n server._pendingRequests[url] = result\n const onDone = () => {\n server._pendingRequests[url] = null\n }\n result.then(onDone, onDone)\n return result\n}\n\nasync function doTransform(\n url: string,\n server: ViteDevServer,\n options: TransformOptions\n) {\n url = removeTimestampQuery(url)\n const { config, pluginContainer, moduleGraph, watcher } = server\n const { root, logger } = config\n const prettyUrl = isDebug ? prettifyUrl(url, root) : ''\n const ssr = !!options.ssr\n\n const module = await server.moduleGraph.getModuleByUrl(url)\n\n // check if we have a fresh cache\n const cached =\n module && (ssr ? module.ssrTransformResult : module.transformResult)\n if (cached) {\n // TODO: check if the module is \"partially invalidated\" - i.e. an import\n // down the chain has been fully invalidated, but this current module's\n // content has not changed.\n // in this case, we can reuse its previous cached result and only update\n // its import timestamps.\n\n isDebug && debugCache(`[memory] ${prettyUrl}`)\n return cached\n }\n\n // resolve\n const id = (await pluginContainer.resolveId(url))?.id || url\n const file = cleanUrl(id)\n\n let code: string | null = null\n let map: SourceDescription['map'] = null\n\n // load\n const loadStart = isDebug ? performance.now() : 0\n const loadResult = await pluginContainer.load(id, ssr)\n if (loadResult == null) {\n // if this is an html request and there is no load result, skip ahead to\n // SPA fallback.\n if (options.html && !id.endsWith('.html')) {\n return null\n }\n // try fallback loading it from fs as string\n // if the file is a binary, there should be a plugin that already loaded it\n // as string\n // only try the fallback if access is allowed, skip for out of root url\n // like /service-worker.js or /api/users\n if (options.ssr || isFileServingAllowed(file, server)) {\n try {\n code = await fs.readFile(file, 'utf-8')\n isDebug && debugLoad(`${timeFrom(loadStart)} [fs] ${prettyUrl}`)\n } catch (e) {\n if (e.code !== 'ENOENT') {\n throw e\n }\n }\n }\n if (code) {\n try {\n map = (\n convertSourceMap.fromSource(code) ||\n convertSourceMap.fromMapFileSource(code, path.dirname(file))\n )?.toObject()\n } catch (e) {\n logger.warn(`Failed to load source map for ${url}.`, {\n timestamp: true\n })\n }\n }\n } else {\n isDebug && debugLoad(`${timeFrom(loadStart)} [plugin] ${prettyUrl}`)\n if (isObject(loadResult)) {\n code = loadResult.code\n map = loadResult.map\n } else {\n code = loadResult\n }\n }\n if (code == null) {\n if (checkPublicFile(url, config)) {\n throw new Error(\n `Failed to load url ${url} (resolved id: ${id}). ` +\n `This file is in /public and will be copied as-is during build without ` +\n `going through the plugin transforms, and therefore should not be ` +\n `imported from source code. It can only be referenced via HTML tags.`\n )\n } else {\n return null\n }\n }\n\n // ensure module in graph after successful load\n const mod = await moduleGraph.ensureEntryFromUrl(url)\n ensureWatchedFile(watcher, mod.file, root)\n\n // transform\n const transformStart = isDebug ? performance.now() : 0\n const transformResult = await pluginContainer.transform(code, id, map, ssr)\n if (\n transformResult == null ||\n (isObject(transformResult) && transformResult.code == null)\n ) {\n // no transform applied, keep code as-is\n isDebug &&\n debugTransform(\n timeFrom(transformStart) + chalk.dim(` [skipped] ${prettyUrl}`)\n )\n } else {\n isDebug && debugTransform(`${timeFrom(transformStart)} ${prettyUrl}`)\n code = transformResult.code!\n map = transformResult.map\n }\n\n if (map && mod.file) {\n map = (typeof map === 'string' ? JSON.parse(map) : map) as SourceMap\n if (map.mappings && !map.sourcesContent) {\n await injectSourcesContent(map, mod.file, logger)\n }\n }\n\n if (ssr) {\n return (mod.ssrTransformResult = await ssrTransform(\n code,\n map as SourceMap,\n url\n ))\n } else {\n return (mod.transformResult = {\n code,\n map,\n etag: getEtag(code, { weak: true })\n } as TransformResult)\n }\n}\n","import path from 'path'\nimport { ViteDevServer } from '..'\nimport { Connect } from 'types/connect'\nimport {\n cleanUrl,\n createDebugger,\n injectQuery,\n isImportRequest,\n isJSRequest,\n normalizePath,\n prettifyUrl,\n removeImportQuery,\n removeTimestampQuery,\n unwrapId\n} from '../../utils'\nimport { send } from '../send'\nimport { transformRequest } from '../transformRequest'\nimport { isHTMLProxy } from '../../plugins/html'\nimport chalk from 'chalk'\nimport {\n CLIENT_PUBLIC_PATH,\n DEP_VERSION_RE,\n NULL_BYTE_PLACEHOLDER\n} from '../../constants'\nimport {\n isCSSRequest,\n isDirectCSSRequest,\n isDirectRequest\n} from '../../plugins/css'\n\n/**\n * Time (ms) Vite has to full-reload the page before returning\n * an empty response.\n */\nconst NEW_DEPENDENCY_BUILD_TIMEOUT = 1000\n\nconst debugCache = createDebugger('vite:cache')\nconst isDebug = !!process.env.DEBUG\n\nconst knownIgnoreList = new Set(['/', '/favicon.ico'])\n\nexport function transformMiddleware(\n server: ViteDevServer\n): Connect.NextHandleFunction {\n const {\n config: { root, logger, cacheDir },\n moduleGraph\n } = server\n\n // determine the url prefix of files inside cache directory\n let cacheDirPrefix: string | undefined\n if (cacheDir) {\n const cacheDirRelative = normalizePath(path.relative(root, cacheDir))\n if (cacheDirRelative.startsWith('../')) {\n // if the cache directory is outside root, the url prefix would be something\n // like '/@fs/absolute/path/to/node_modules/.vite'\n cacheDirPrefix = `/@fs/${normalizePath(cacheDir).replace(/^\\//, '')}`\n } else {\n // if the cache directory is inside root, the url prefix would be something\n // like '/node_modules/.vite'\n cacheDirPrefix = `/${cacheDirRelative}`\n }\n }\n\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return async function viteTransformMiddleware(req, res, next) {\n if (req.method !== 'GET' || knownIgnoreList.has(req.url!)) {\n return next()\n }\n\n if (\n server._pendingReload &&\n // always allow vite client requests so that it can trigger page reload\n !req.url?.startsWith(CLIENT_PUBLIC_PATH) &&\n !req.url?.includes('vite/dist/client')\n ) {\n // missing dep pending reload, hold request until reload happens\n server._pendingReload.then(() =>\n // If the refresh has not happened after timeout, Vite considers\n // something unexpected has happened. In this case, Vite\n // returns an empty response that will error.\n setTimeout(() => {\n // Don't do anything if response has already been sent\n if (res.writableEnded) return\n // status code request timeout\n res.statusCode = 408\n res.end(\n `<h1>[vite] Something unexpected happened while optimizing \"${req.url}\"<h1>` +\n `<p>The current page should have reloaded by now</p>`\n )\n }, NEW_DEPENDENCY_BUILD_TIMEOUT)\n )\n return\n }\n\n let url = decodeURI(removeTimestampQuery(req.url!)).replace(\n NULL_BYTE_PLACEHOLDER,\n '\\0'\n )\n\n const withoutQuery = cleanUrl(url)\n\n try {\n const isSourceMap = withoutQuery.endsWith('.map')\n // since we generate source map references, handle those requests here\n if (isSourceMap) {\n const originalUrl = url.replace(/\\.map($|\\?)/, '$1')\n const map = (await moduleGraph.getModuleByUrl(originalUrl))\n ?.transformResult?.map\n if (map) {\n return send(req, res, JSON.stringify(map), 'json')\n } else {\n return next()\n }\n }\n\n // check if public dir is inside root dir\n const publicDir = normalizePath(server.config.publicDir)\n const rootDir = normalizePath(server.config.root)\n if (publicDir.startsWith(rootDir)) {\n const publicPath = `${publicDir.slice(rootDir.length)}/`\n // warn explicit public paths\n if (url.startsWith(publicPath)) {\n logger.warn(\n chalk.yellow(\n `files in the public directory are served at the root path.\\n` +\n `Instead of ${chalk.cyan(url)}, use ${chalk.cyan(\n url.replace(publicPath, '/')\n )}.`\n )\n )\n }\n }\n\n if (\n isJSRequest(url) ||\n isImportRequest(url) ||\n isCSSRequest(url) ||\n isHTMLProxy(url)\n ) {\n // strip ?import\n url = removeImportQuery(url)\n // Strip valid id prefix. This is prepended to resolved Ids that are\n // not valid browser import specifiers by the importAnalysis plugin.\n url = unwrapId(url)\n\n // for CSS, we need to differentiate between normal CSS requests and\n // imports\n if (\n isCSSRequest(url) &&\n !isDirectRequest(url) &&\n req.headers.accept?.includes('text/css')\n ) {\n url = injectQuery(url, 'direct')\n }\n\n // check if we can return 304 early\n const ifNoneMatch = req.headers['if-none-match']\n if (\n ifNoneMatch &&\n (await moduleGraph.getModuleByUrl(url))?.transformResult?.etag ===\n ifNoneMatch\n ) {\n isDebug && debugCache(`[304] ${prettifyUrl(url, root)}`)\n res.statusCode = 304\n return res.end()\n }\n\n // resolve, load and transform using the plugin container\n const result = await transformRequest(url, server, {\n html: req.headers.accept?.includes('text/html')\n })\n if (result) {\n const type = isDirectCSSRequest(url) ? 'css' : 'js'\n const isDep =\n DEP_VERSION_RE.test(url) ||\n (cacheDirPrefix && url.startsWith(cacheDirPrefix))\n return send(\n req,\n res,\n result.code,\n type,\n result.etag,\n // allow browser to cache npm deps!\n isDep ? 'max-age=31536000,immutable' : 'no-cache',\n result.map\n )\n }\n }\n } catch (e) {\n return next(e)\n }\n\n next()\n }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport MagicString from 'magic-string'\nimport { AttributeNode, NodeTypes } from '@vue/compiler-dom'\nimport { Connect } from 'types/connect'\nimport {\n addToHTMLProxyCache,\n applyHtmlTransforms,\n assetAttrsConfig,\n getScriptInfo,\n IndexHtmlTransformHook,\n resolveHtmlTransforms,\n traverseHtml\n} from '../../plugins/html'\nimport { ResolvedConfig, ViteDevServer } from '../..'\nimport { send } from '../send'\nimport { CLIENT_PUBLIC_PATH, FS_PREFIX } from '../../constants'\nimport { cleanUrl, fsPathFromId } from '../../utils'\n\nexport function createDevHtmlTransformFn(\n server: ViteDevServer\n): (url: string, html: string, originalUrl: string) => Promise<string> {\n const [preHooks, postHooks] = resolveHtmlTransforms(server.config.plugins)\n\n return (url: string, html: string, originalUrl: string): Promise<string> => {\n return applyHtmlTransforms(html, [...preHooks, devHtmlHook, ...postHooks], {\n path: url,\n filename: getHtmlFilename(url, server),\n server,\n originalUrl\n })\n }\n}\n\nfunction getHtmlFilename(url: string, server: ViteDevServer) {\n if (url.startsWith(FS_PREFIX)) {\n return fsPathFromId(url)\n } else {\n return path.join(server.config.root, url.slice(1))\n }\n}\n\nconst startsWithSingleSlashRE = /^\\/(?!\\/)/\nconst processNodeUrl = (\n node: AttributeNode,\n s: MagicString,\n config: ResolvedConfig,\n htmlPath: string,\n originalUrl?: string\n) => {\n const url = node.value?.content || ''\n if (startsWithSingleSlashRE.test(url)) {\n // prefix with base\n s.overwrite(\n node.value!.loc.start.offset,\n node.value!.loc.end.offset,\n `\"${config.base + url.slice(1)}\"`\n )\n } else if (\n url.startsWith('.') &&\n originalUrl &&\n originalUrl !== '/' &&\n htmlPath === '/index.html'\n ) {\n // #3230 if some request url (localhost:3000/a/b) return to fallback html, the relative assets\n // path will add `/a/` prefix, it will caused 404.\n // rewrite before `./index.js` -> `localhost:3000/a/index.js`.\n // rewrite after `../index.js` -> `localhost:3000/index.js`.\n s.overwrite(\n node.value!.loc.start.offset,\n node.value!.loc.end.offset,\n `\"${path.posix.join(\n path.posix.relative(originalUrl, '/'),\n url.slice(1)\n )}\"`\n )\n }\n}\nconst devHtmlHook: IndexHtmlTransformHook = async (\n html,\n { path: htmlPath, server, originalUrl }\n) => {\n // TODO: solve this design issue\n // Optional chain expressions can return undefined by design\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n const config = server?.config!\n const base = config.base || '/'\n\n const s = new MagicString(html)\n let scriptModuleIndex = -1\n const filePath = cleanUrl(htmlPath)\n\n await traverseHtml(html, htmlPath, (node) => {\n if (node.type !== NodeTypes.ELEMENT) {\n return\n }\n\n // script tags\n if (node.tag === 'script') {\n const { src, isModule } = getScriptInfo(node)\n if (isModule) {\n scriptModuleIndex++\n }\n\n if (src) {\n processNodeUrl(src, s, config, htmlPath, originalUrl)\n } else if (isModule) {\n const url = filePath.replace(config.root, '')\n\n const contents = node.children\n .map((child: any) => child.content || '')\n .join('')\n\n // add HTML Proxy to Map\n addToHTMLProxyCache(config, url, scriptModuleIndex, contents)\n\n // inline js module. convert to src=\"proxy\"\n s.overwrite(\n node.loc.start.offset,\n node.loc.end.offset,\n `<script type=\"module\" src=\"${\n config.base + url.slice(1)\n }?html-proxy&index=${scriptModuleIndex}.js\"></script>`\n )\n }\n }\n\n // elements with [href/src] attrs\n const assetAttrs = assetAttrsConfig[node.tag]\n if (assetAttrs) {\n for (const p of node.props) {\n if (\n p.type === NodeTypes.ATTRIBUTE &&\n p.value &&\n assetAttrs.includes(p.name)\n ) {\n processNodeUrl(p, s, config, htmlPath, originalUrl)\n }\n }\n }\n })\n\n html = s.toString()\n\n return {\n html,\n tags: [\n {\n tag: 'script',\n attrs: {\n type: 'module',\n src: path.posix.join(base, CLIENT_PUBLIC_PATH)\n },\n injectTo: 'head-prepend'\n }\n ]\n }\n}\n\nexport function indexHtmlMiddleware(\n server: ViteDevServer\n): Connect.NextHandleFunction {\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return async function viteIndexHtmlMiddleware(req, res, next) {\n if (res.writableEnded) {\n return next()\n }\n\n const url = req.url && cleanUrl(req.url)\n // spa-fallback always redirects to /index.html\n if (url?.endsWith('.html') && req.headers['sec-fetch-dest'] !== 'script') {\n const filename = getHtmlFilename(url, server)\n if (fs.existsSync(filename)) {\n try {\n let html = fs.readFileSync(filename, 'utf-8')\n html = await server.transformIndexHtml(url, html, req.originalUrl)\n return send(req, res, html, 'html')\n } catch (e) {\n return next(e)\n }\n }\n }\n next()\n }\n}\n","import { performance } from 'perf_hooks'\nimport { Connect } from 'types/connect'\nimport { createDebugger, prettifyUrl, timeFrom } from '../../utils'\n\nconst logTime = createDebugger('vite:time')\n\nexport function timeMiddleware(root: string): Connect.NextHandleFunction {\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n return function viteTimeMiddleware(req, res, next) {\n const start = performance.now()\n const end = res.end\n res.end = (...args: any[]) => {\n logTime(`${timeFrom(start)} ${prettifyUrl(req.url!, root)}`)\n // @ts-ignore\n return end.call(res, ...args)\n }\n next()\n }\n}\n","import { extname } from 'path'\nimport { isDirectCSSRequest } from '../plugins/css'\nimport {\n cleanUrl,\n normalizePath,\n removeImportQuery,\n removeTimestampQuery\n} from '../utils'\nimport { FS_PREFIX } from '../constants'\nimport { TransformResult } from './transformRequest'\nimport { PluginContainer } from './pluginContainer'\nimport { parse as parseUrl } from 'url'\n\nexport class ModuleNode {\n /**\n * Public served url path, starts with /\n */\n url: string\n /**\n * Resolved file system path + query\n */\n id: string | null = null\n file: string | null = null\n type: 'js' | 'css'\n importers = new Set<ModuleNode>()\n importedModules = new Set<ModuleNode>()\n acceptedHmrDeps = new Set<ModuleNode>()\n isSelfAccepting = false\n transformResult: TransformResult | null = null\n ssrTransformResult: TransformResult | null = null\n ssrModule: Record<string, any> | null = null\n lastHMRTimestamp = 0\n\n constructor(url: string) {\n this.url = url\n this.type = isDirectCSSRequest(url) ? 'css' : 'js'\n }\n}\n\nfunction invalidateSSRModule(mod: ModuleNode, seen: Set<ModuleNode>) {\n if (seen.has(mod)) {\n return\n }\n seen.add(mod)\n mod.ssrModule = null\n mod.importers.forEach((importer) => invalidateSSRModule(importer, seen))\n}\nexport class ModuleGraph {\n urlToModuleMap = new Map<string, ModuleNode>()\n idToModuleMap = new Map<string, ModuleNode>()\n // a single file may corresponds to multiple modules with different queries\n fileToModulesMap = new Map<string, Set<ModuleNode>>()\n safeModulesPath = new Set<string>()\n container: PluginContainer\n\n constructor(container: PluginContainer) {\n this.container = container\n }\n\n async getModuleByUrl(rawUrl: string): Promise<ModuleNode | undefined> {\n const [url] = await this.resolveUrl(rawUrl)\n return this.urlToModuleMap.get(url)\n }\n\n getModuleById(id: string): ModuleNode | undefined {\n return this.idToModuleMap.get(removeTimestampQuery(id))\n }\n\n getModulesByFile(file: string): Set<ModuleNode> | undefined {\n return this.fileToModulesMap.get(file)\n }\n\n onFileChange(file: string): void {\n const mods = this.getModulesByFile(file)\n if (mods) {\n const seen = new Set<ModuleNode>()\n mods.forEach((mod) => {\n this.invalidateModule(mod, seen)\n })\n }\n }\n\n invalidateModule(mod: ModuleNode, seen: Set<ModuleNode> = new Set()): void {\n mod.transformResult = null\n mod.ssrTransformResult = null\n invalidateSSRModule(mod, seen)\n }\n\n invalidateAll(): void {\n const seen = new Set<ModuleNode>()\n this.idToModuleMap.forEach((mod) => {\n this.invalidateModule(mod, seen)\n })\n }\n\n /**\n * Update the module graph based on a module's updated imports information\n * If there are dependencies that no longer have any importers, they are\n * returned as a Set.\n */\n async updateModuleInfo(\n mod: ModuleNode,\n importedModules: Set<string | ModuleNode>,\n acceptedModules: Set<string | ModuleNode>,\n isSelfAccepting: boolean\n ): Promise<Set<ModuleNode> | undefined> {\n mod.isSelfAccepting = isSelfAccepting\n const prevImports = mod.importedModules\n const nextImports = (mod.importedModules = new Set())\n let noLongerImported: Set<ModuleNode> | undefined\n // update import graph\n for (const imported of importedModules) {\n const dep =\n typeof imported === 'string'\n ? await this.ensureEntryFromUrl(imported)\n : imported\n dep.importers.add(mod)\n nextImports.add(dep)\n }\n // remove the importer from deps that were imported but no longer are.\n prevImports.forEach((dep) => {\n if (!nextImports.has(dep)) {\n dep.importers.delete(mod)\n if (!dep.importers.size) {\n // dependency no longer imported\n ;(noLongerImported || (noLongerImported = new Set())).add(dep)\n }\n }\n })\n // update accepted hmr deps\n const deps = (mod.acceptedHmrDeps = new Set())\n for (const accepted of acceptedModules) {\n const dep =\n typeof accepted === 'string'\n ? await this.ensureEntryFromUrl(accepted)\n : accepted\n deps.add(dep)\n }\n return noLongerImported\n }\n\n async ensureEntryFromUrl(rawUrl: string): Promise<ModuleNode> {\n const [url, resolvedId] = await this.resolveUrl(rawUrl)\n let mod = this.urlToModuleMap.get(url)\n if (!mod) {\n mod = new ModuleNode(url)\n this.urlToModuleMap.set(url, mod)\n mod.id = resolvedId\n this.idToModuleMap.set(resolvedId, mod)\n const file = (mod.file = cleanUrl(resolvedId))\n let fileMappedModules = this.fileToModulesMap.get(file)\n if (!fileMappedModules) {\n fileMappedModules = new Set()\n this.fileToModulesMap.set(file, fileMappedModules)\n }\n fileMappedModules.add(mod)\n }\n return mod\n }\n\n // some deps, like a css file referenced via @import, don't have its own\n // url because they are inlined into the main css import. But they still\n // need to be represented in the module graph so that they can trigger\n // hmr in the importing css file.\n createFileOnlyEntry(file: string): ModuleNode {\n file = normalizePath(file)\n let fileMappedModules = this.fileToModulesMap.get(file)\n if (!fileMappedModules) {\n fileMappedModules = new Set()\n this.fileToModulesMap.set(file, fileMappedModules)\n }\n\n const url = `${FS_PREFIX}${file}`\n for (const m of fileMappedModules) {\n if (m.url === url || m.id === file) {\n return m\n }\n }\n\n const mod = new ModuleNode(url)\n mod.file = file\n fileMappedModules.add(mod)\n return mod\n }\n\n // for incoming urls, it is important to:\n // 1. remove the HMR timestamp query (?t=xxxx)\n // 2. resolve its extension so that urls with or without extension all map to\n // the same module\n async resolveUrl(url: string): Promise<[string, string]> {\n url = removeImportQuery(removeTimestampQuery(url))\n const resolvedId = (await this.container.resolveId(url))?.id || url\n const ext = extname(cleanUrl(resolvedId))\n const { pathname, search, hash } = parseUrl(url)\n if (ext && !pathname!.endsWith(ext)) {\n url = pathname + ext + (search || '') + (hash || '')\n }\n return [url, resolvedId]\n }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport chalk from 'chalk'\nimport { createServer, ViteDevServer } from '..'\nimport { createDebugger, normalizePath } from '../utils'\nimport { ModuleNode } from './moduleGraph'\nimport { Update } from 'types/hmrPayload'\nimport { CLIENT_DIR } from '../constants'\nimport { RollupError } from 'rollup'\nimport match from 'minimatch'\nimport { Server } from 'http'\nimport { isCSSRequest } from '../plugins/css'\nimport { performance } from 'perf_hooks'\n\nexport const debugHmr = createDebugger('vite:hmr')\n\nconst normalizedClientDir = normalizePath(CLIENT_DIR)\n\nexport interface HmrOptions {\n protocol?: string\n host?: string\n port?: number\n clientPort?: number\n path?: string\n timeout?: number\n overlay?: boolean\n server?: Server\n}\n\nexport interface HmrContext {\n file: string\n timestamp: number\n modules: Array<ModuleNode>\n read: () => string | Promise<string>\n server: ViteDevServer\n}\n\nfunction getShortName(file: string, root: string) {\n return file.startsWith(root + '/') ? path.posix.relative(root, file) : file\n}\n\nexport async function handleHMRUpdate(\n file: string,\n server: ViteDevServer\n): Promise<any> {\n const { ws, config, moduleGraph } = server\n const shortFile = getShortName(file, config.root)\n\n const isConfig = file === config.configFile\n const isConfigDependency = config.configFileDependencies.some(\n (name) => file === path.resolve(name)\n )\n const isEnv = config.inlineConfig.envFile !== false && file.endsWith('.env')\n if (isConfig || isConfigDependency || isEnv) {\n // auto restart server\n debugHmr(`[config change] ${chalk.dim(shortFile)}`)\n config.logger.info(\n chalk.green(\n `${path.relative(process.cwd(), file)} changed, restarting server...`\n ),\n { clear: true, timestamp: true }\n )\n await restartServer(server)\n return\n }\n\n debugHmr(`[file change] ${chalk.dim(shortFile)}`)\n\n // (dev only) the client itself cannot be hot updated.\n if (file.startsWith(normalizedClientDir)) {\n ws.send({\n type: 'full-reload',\n path: '*'\n })\n return\n }\n\n const mods = moduleGraph.getModulesByFile(file)\n\n // check if any plugin wants to perform custom HMR handling\n const timestamp = Date.now()\n const hmrContext: HmrContext = {\n file,\n timestamp,\n modules: mods ? [...mods] : [],\n read: () => readModifiedFile(file),\n server\n }\n\n for (const plugin of config.plugins) {\n if (plugin.handleHotUpdate) {\n const filteredModules = await plugin.handleHotUpdate(hmrContext)\n if (filteredModules) {\n hmrContext.modules = filteredModules\n break\n }\n }\n }\n\n if (!hmrContext.modules.length) {\n // html file cannot be hot updated\n if (file.endsWith('.html')) {\n config.logger.info(chalk.green(`page reload `) + chalk.dim(shortFile), {\n clear: true,\n timestamp: true\n })\n ws.send({\n type: 'full-reload',\n path: config.server.middlewareMode\n ? '*'\n : '/' + normalizePath(path.relative(config.root, file))\n })\n } else {\n // loaded but not in the module graph, probably not js\n debugHmr(`[no modules matched] ${chalk.dim(shortFile)}`)\n }\n return\n }\n\n updateModules(shortFile, hmrContext.modules, timestamp, server)\n}\n\nfunction updateModules(\n file: string,\n modules: ModuleNode[],\n timestamp: number,\n { config, ws }: ViteDevServer\n) {\n const updates: Update[] = []\n const invalidatedModules = new Set<ModuleNode>()\n let needFullReload = false\n\n for (const mod of modules) {\n invalidate(mod, timestamp, invalidatedModules)\n if (needFullReload) {\n continue\n }\n\n const boundaries = new Set<{\n boundary: ModuleNode\n acceptedVia: ModuleNode\n }>()\n const hasDeadEnd = propagateUpdate(mod, boundaries)\n if (hasDeadEnd) {\n needFullReload = true\n continue\n }\n\n updates.push(\n ...[...boundaries].map(({ boundary, acceptedVia }) => ({\n type: `${boundary.type}-update` as Update['type'],\n timestamp,\n path: boundary.url,\n acceptedPath: acceptedVia.url\n }))\n )\n }\n\n if (needFullReload) {\n config.logger.info(chalk.green(`page reload `) + chalk.dim(file), {\n clear: true,\n timestamp: true\n })\n ws.send({\n type: 'full-reload'\n })\n } else {\n config.logger.info(\n updates\n .map(({ path }) => chalk.green(`hmr update `) + chalk.dim(path))\n .join('\\n'),\n { clear: true, timestamp: true }\n )\n ws.send({\n type: 'update',\n updates\n })\n }\n}\n\nexport async function handleFileAddUnlink(\n file: string,\n server: ViteDevServer,\n isUnlink = false\n): Promise<void> {\n const modules = [...(server.moduleGraph.getModulesByFile(file) ?? [])]\n if (isUnlink && file in server._globImporters) {\n delete server._globImporters[file]\n } else {\n for (const i in server._globImporters) {\n const { module, importGlobs } = server._globImporters[i]\n for (const { base, pattern } of importGlobs) {\n if (match(file, pattern) || match(path.relative(base, file), pattern)) {\n modules.push(module)\n // We use `onFileChange` to invalidate `module.file` so that subsequent `ssrLoadModule()`\n // calls get fresh glob import results with(out) the newly added(/removed) `file`.\n server.moduleGraph.onFileChange(module.file!)\n break\n }\n }\n }\n }\n if (modules.length > 0) {\n updateModules(\n getShortName(file, server.config.root),\n modules,\n Date.now(),\n server\n )\n }\n}\n\nfunction propagateUpdate(\n node: ModuleNode,\n boundaries: Set<{\n boundary: ModuleNode\n acceptedVia: ModuleNode\n }>,\n currentChain: ModuleNode[] = [node]\n): boolean /* hasDeadEnd */ {\n if (node.isSelfAccepting) {\n boundaries.add({\n boundary: node,\n acceptedVia: node\n })\n\n // additionally check for CSS importers, since a PostCSS plugin like\n // Tailwind JIT may register any file as a dependency to a CSS file.\n for (const importer of node.importers) {\n if (isCSSRequest(importer.url) && !currentChain.includes(importer)) {\n propagateUpdate(importer, boundaries, currentChain.concat(importer))\n }\n }\n\n return false\n }\n\n if (!node.importers.size) {\n return true\n }\n\n // #3716, #3913\n // For a non-CSS file, if all of its importers are CSS files (registered via\n // PostCSS plugins) it should be considered a dead end and force full reload.\n if (\n !isCSSRequest(node.url) &&\n [...node.importers].every((i) => isCSSRequest(i.url))\n ) {\n return true\n }\n\n for (const importer of node.importers) {\n const subChain = currentChain.concat(importer)\n if (importer.acceptedHmrDeps.has(node)) {\n boundaries.add({\n boundary: importer,\n acceptedVia: node\n })\n continue\n }\n\n if (currentChain.includes(importer)) {\n // circular deps is considered dead end\n return true\n }\n\n if (propagateUpdate(importer, boundaries, subChain)) {\n return true\n }\n }\n return false\n}\n\nfunction invalidate(mod: ModuleNode, timestamp: number, seen: Set<ModuleNode>) {\n if (seen.has(mod)) {\n return\n }\n seen.add(mod)\n mod.lastHMRTimestamp = timestamp\n mod.transformResult = null\n mod.ssrModule = null\n mod.ssrTransformResult = null\n mod.importers.forEach((importer) => {\n if (!importer.acceptedHmrDeps.has(mod)) {\n invalidate(importer, timestamp, seen)\n }\n })\n}\n\nexport function handlePrunedModules(\n mods: Set<ModuleNode>,\n { ws }: ViteDevServer\n): void {\n // update the disposed modules' hmr timestamp\n // since if it's re-imported, it should re-apply side effects\n // and without the timestamp the browser will not re-import it!\n const t = Date.now()\n mods.forEach((mod) => {\n mod.lastHMRTimestamp = t\n debugHmr(`[dispose] ${chalk.dim(mod.file)}`)\n })\n ws.send({\n type: 'prune',\n paths: [...mods].map((m) => m.url)\n })\n}\n\nconst enum LexerState {\n inCall,\n inSingleQuoteString,\n inDoubleQuoteString,\n inTemplateString,\n inArray\n}\n\n/**\n * Lex import.meta.hot.accept() for accepted deps.\n * Since hot.accept() can only accept string literals or array of string\n * literals, we don't really need a heavy @babel/parse call on the entire source.\n *\n * @returns selfAccepts\n */\nexport function lexAcceptedHmrDeps(\n code: string,\n start: number,\n urls: Set<{ url: string; start: number; end: number }>\n): boolean {\n let state: LexerState = LexerState.inCall\n // the state can only be 2 levels deep so no need for a stack\n let prevState: LexerState = LexerState.inCall\n let currentDep: string = ''\n\n function addDep(index: number) {\n urls.add({\n url: currentDep,\n start: index - currentDep.length - 1,\n end: index + 1\n })\n currentDep = ''\n }\n\n for (let i = start; i < code.length; i++) {\n const char = code.charAt(i)\n switch (state) {\n case LexerState.inCall:\n case LexerState.inArray:\n if (char === `'`) {\n prevState = state\n state = LexerState.inSingleQuoteString\n } else if (char === `\"`) {\n prevState = state\n state = LexerState.inDoubleQuoteString\n } else if (char === '`') {\n prevState = state\n state = LexerState.inTemplateString\n } else if (/\\s/.test(char)) {\n continue\n } else {\n if (state === LexerState.inCall) {\n if (char === `[`) {\n state = LexerState.inArray\n } else {\n // reaching here means the first arg is neither a string literal\n // nor an Array literal (direct callback) or there is no arg\n // in both case this indicates a self-accepting module\n return true // done\n }\n } else if (state === LexerState.inArray) {\n if (char === `]`) {\n return false // done\n } else if (char === ',') {\n continue\n } else {\n error(i)\n }\n }\n }\n break\n case LexerState.inSingleQuoteString:\n if (char === `'`) {\n addDep(i)\n if (prevState === LexerState.inCall) {\n // accept('foo', ...)\n return false\n } else {\n state = prevState\n }\n } else {\n currentDep += char\n }\n break\n case LexerState.inDoubleQuoteString:\n if (char === `\"`) {\n addDep(i)\n if (prevState === LexerState.inCall) {\n // accept('foo', ...)\n return false\n } else {\n state = prevState\n }\n } else {\n currentDep += char\n }\n break\n case LexerState.inTemplateString:\n if (char === '`') {\n addDep(i)\n if (prevState === LexerState.inCall) {\n // accept('foo', ...)\n return false\n } else {\n state = prevState\n }\n } else if (char === '$' && code.charAt(i + 1) === '{') {\n error(i)\n } else {\n currentDep += char\n }\n break\n default:\n throw new Error('unknown import.meta.hot lexer state')\n }\n }\n return false\n}\n\nfunction error(pos: number) {\n const err = new Error(\n `import.meta.accept() can only accept string literals or an ` +\n `Array of string literals.`\n ) as RollupError\n err.pos = pos\n throw err\n}\n\n// vitejs/vite#610 when hot-reloading Vue files, we read immediately on file\n// change event and sometimes this can be too early and get an empty buffer.\n// Poll until the file's modified time has changed before reading again.\nasync function readModifiedFile(file: string): Promise<string> {\n const content = fs.readFileSync(file, 'utf-8')\n if (!content) {\n const mtime = fs.statSync(file).mtimeMs\n await new Promise((r) => {\n let n = 0\n const poll = async () => {\n n++\n const newMtime = fs.statSync(file).mtimeMs\n if (newMtime !== mtime || n > 10) {\n r(0)\n } else {\n setTimeout(poll, 10)\n }\n }\n setTimeout(poll, 10)\n })\n return fs.readFileSync(file, 'utf-8')\n } else {\n return content\n }\n}\n\nasync function restartServer(server: ViteDevServer) {\n // @ts-ignore\n global.__vite_start_time = performance.now()\n const { port } = server.config.server\n\n await server.close()\n\n let newServer = null\n try {\n newServer = await createServer(server.config.inlineConfig)\n } catch (err: any) {\n server.config.logger.error(err.message, {\n timestamp: true\n })\n return\n }\n\n for (const key in newServer) {\n if (key !== 'app') {\n // @ts-ignore\n server[key] = newServer[key]\n }\n }\n if (!server.config.server.middlewareMode) {\n await server.listen(port, true)\n } else {\n server.config.logger.info('server restarted.', { timestamp: true })\n }\n}\n","'use strict';\nconst fs = require('fs');\n\nlet isDocker;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nmodule.exports = () => {\n\tif (isDocker === undefined) {\n\t\tisDocker = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDocker;\n};\n","'use strict';\nconst os = require('os');\nconst fs = require('fs');\nconst isDocker = require('is-docker');\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isDocker()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?\n\t\t\t!isDocker() : false;\n\t} catch (_) {\n\t\treturn false;\n\t}\n};\n\nif (process.env.__IS_WSL_TEST__) {\n\tmodule.exports = isWsl;\n} else {\n\tmodule.exports = isWsl();\n}\n","'use strict';\nmodule.exports = (object, propertyName, fn) => {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = fn();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n};\n","const path = require('path');\nconst childProcess = require('child_process');\nconst {promises: fs, constants: fsConstants} = require('fs');\nconst isWsl = require('is-wsl');\nconst isDocker = require('is-docker');\nconst defineLazyProperty = require('define-lazy-prop');\n\n// Path to included `xdg-open`.\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\n/**\nGet the mount point for fixed drives in WSL.\n\n@inner\n@returns {string} The mount point.\n*/\nconst getWslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nconst pTryEach = async (array, mapper) => {\n\tlet latestError;\n\n\tfor (const item of array) {\n\t\ttry {\n\t\t\treturn await mapper(item); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tlatestError = error;\n\t\t}\n\t}\n\n\tthrow latestError;\n};\n\nconst open = async (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(options.app)) {\n\t\treturn pTryEach(options.app, singleApp => open(target, {\n\t\t\t...options,\n\t\t\tapp: singleApp\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app || {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn pTryEach(app, appName => open(target, {\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments\n\t\t\t}\n\t\t}));\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || (isWsl && !isDocker())) {\n\t\tconst mountPoint = await getWslDrivesMountPoint();\n\n\t\tcommand = isWsl ?\n\t\t\t`${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe` :\n\t\t\t`${process.env.SYSTEMROOT}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell`;\n\n\t\tcliArguments.push(\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'–ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand'\n\t\t);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\tconst encodedArguments = ['Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\t// Double quote with double quotes to ensure the inner quotes are passed through.\n\t\t\t// Inner quotes are delimited for PowerShell interpretation with backticks.\n\t\t\tencodedArguments.push(`\"\\`\"${app}\\`\"\"`, '-ArgumentList');\n\t\t\tappArguments.unshift(target);\n\t\t} else {\n\t\t\tencodedArguments.push(`\"${target}\"`);\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(arg => `\"\\`\"${arg}\\`\"\"`);\n\t\t\tencodedArguments.push(appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\ttarget = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron ||\n\t\t\t\tplatform === 'android' || isBundled || !exeLocalXdgOpen;\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tcliArguments.push(target);\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (options.allowNonzeroExitCode && exitCode > 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\treturn subprocess;\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nconst apps = {};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\tlinux: ['google-chrome', 'google-chrome-stable']\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe']\n\t}\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: 'C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe',\n\tlinux: 'firefox'\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe'\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: 'microsoft-edge'\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'\n}));\n\nopen.apps = apps;\n\nmodule.exports = open;\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n var pathext = options.pathExt !== undefined ?\n options.pathExt : process.env.PATHEXT\n\n if (!pathext) {\n return true\n }\n\n pathext = pathext.split(';')\n if (pathext.indexOf('') !== -1) {\n return true\n }\n for (var i = 0; i < pathext.length; i++) {\n var p = pathext[i].toLowerCase()\n if (p && path.substr(-p.length).toLowerCase() === p) {\n return true\n }\n }\n return false\n}\n\nfunction checkStat (stat, path, options) {\n if (!stat.isSymbolicLink() && !stat.isFile()) {\n return false\n }\n return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, path, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), path, options)\n}\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n var mod = stat.mode\n var uid = stat.uid\n var gid = stat.gid\n\n var myUid = options.uid !== undefined ?\n options.uid : process.getuid && process.getuid()\n var myGid = options.gid !== undefined ?\n options.gid : process.getgid && process.getgid()\n\n var u = parseInt('100', 8)\n var g = parseInt('010', 8)\n var o = parseInt('001', 8)\n var ug = u | g\n\n var ret = (mod & o) ||\n (mod & g) && gid === myGid ||\n (mod & u) && uid === myUid ||\n (mod & ug) && myUid === 0\n\n return ret\n}\n","var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n core = require('./windows.js')\n} else {\n core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n if (!cb) {\n if (typeof Promise !== 'function') {\n throw new TypeError('callback not provided')\n }\n\n return new Promise(function (resolve, reject) {\n isexe(path, options || {}, function (er, is) {\n if (er) {\n reject(er)\n } else {\n resolve(is)\n }\n })\n })\n }\n\n core(path, options || {}, function (er, is) {\n // ignore EACCES because that just means we aren't allowed to run it\n if (er) {\n if (er.code === 'EACCES' || options && options.ignoreErrors) {\n er = null\n is = false\n }\n }\n cb(er, is)\n })\n}\n\nfunction sync (path, options) {\n // my kingdom for a filtered catch\n try {\n return core.sync(path, options || {})\n } catch (er) {\n if (options && options.ignoreErrors || er.code === 'EACCES') {\n return false\n } else {\n throw er\n }\n }\n}\n","const isWindows = process.platform === 'win32' ||\n process.env.OSTYPE === 'cygwin' ||\n process.env.OSTYPE === 'msys'\n\nconst path = require('path')\nconst COLON = isWindows ? ';' : ':'\nconst isexe = require('isexe')\n\nconst getNotFoundError = (cmd) =>\n Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })\n\nconst getPathInfo = (cmd, opt) => {\n const colon = opt.colon || COLON\n\n // If it has a slash, then we don't bother searching the pathenv.\n // just check the file itself, and that's it.\n const pathEnv = cmd.match(/\\//) || isWindows && cmd.match(/\\\\/) ? ['']\n : (\n [\n // windows always checks the cwd first\n ...(isWindows ? [process.cwd()] : []),\n ...(opt.path || process.env.PATH ||\n /* istanbul ignore next: very unusual */ '').split(colon),\n ]\n )\n const pathExtExe = isWindows\n ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'\n : ''\n const pathExt = isWindows ? pathExtExe.split(colon) : ['']\n\n if (isWindows) {\n if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n pathExt.unshift('')\n }\n\n return {\n pathEnv,\n pathExt,\n pathExtExe,\n }\n}\n\nconst which = (cmd, opt, cb) => {\n if (typeof opt === 'function') {\n cb = opt\n opt = {}\n }\n if (!opt)\n opt = {}\n\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n const step = i => new Promise((resolve, reject) => {\n if (i === pathEnv.length)\n return opt.all && found.length ? resolve(found)\n : reject(getNotFoundError(cmd))\n\n const ppRaw = pathEnv[i]\n const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n const pCmd = path.join(pathPart, cmd)\n const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n : pCmd\n\n resolve(subStep(p, i, 0))\n })\n\n const subStep = (p, i, ii) => new Promise((resolve, reject) => {\n if (ii === pathExt.length)\n return resolve(step(i + 1))\n const ext = pathExt[ii]\n isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {\n if (!er && is) {\n if (opt.all)\n found.push(p + ext)\n else\n return resolve(p + ext)\n }\n return resolve(subStep(p, i, ii + 1))\n })\n })\n\n return cb ? step(0).then(res => cb(null, res), cb) : step(0)\n}\n\nconst whichSync = (cmd, opt) => {\n opt = opt || {}\n\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n for (let i = 0; i < pathEnv.length; i ++) {\n const ppRaw = pathEnv[i]\n const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n const pCmd = path.join(pathPart, cmd)\n const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n : pCmd\n\n for (let j = 0; j < pathExt.length; j ++) {\n const cur = p + pathExt[j]\n try {\n const is = isexe.sync(cur, { pathExt: pathExtExe })\n if (is) {\n if (opt.all)\n found.push(cur)\n else\n return cur\n }\n } catch (ex) {}\n }\n }\n\n if (opt.all && found.length)\n return found\n\n if (opt.nothrow)\n return null\n\n throw getNotFoundError(cmd)\n}\n\nmodule.exports = which\nwhich.sync = whichSync\n","'use strict';\n\nconst pathKey = (options = {}) => {\n\tconst environment = options.env || process.env;\n\tconst platform = options.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n};\n\nmodule.exports = pathKey;\n// TODO: Remove this for the next major release\nmodule.exports.default = pathKey;\n","'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst getPathKey = require('path-key');\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n const env = parsed.options.env || process.env;\n const cwd = process.cwd();\n const hasCustomCwd = parsed.options.cwd != null;\n // Worker threads do not have process.chdir()\n const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;\n\n // If a custom `cwd` was specified, we need to change the process cwd\n // because `which` will do stat calls but does not support a custom cwd\n if (shouldSwitchCwd) {\n try {\n process.chdir(parsed.options.cwd);\n } catch (err) {\n /* Empty */\n }\n }\n\n let resolved;\n\n try {\n resolved = which.sync(parsed.command, {\n path: env[getPathKey({ env })],\n pathExt: withoutPathExt ? path.delimiter : undefined,\n });\n } catch (e) {\n /* Empty */\n } finally {\n if (shouldSwitchCwd) {\n process.chdir(cwd);\n }\n }\n\n // If we successfully resolved, ensure that an absolute path is returned\n // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n }\n\n return resolved;\n}\n\nfunction resolveCommand(parsed) {\n return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n","'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n // Convert to string\n arg = `${arg}`;\n\n // Algorithm below is based on https://qntm.org/cmd\n\n // Sequence of backslashes followed by a double quote:\n // double up all the backslashes and escape the double quote\n arg = arg.replace(/(\\\\*)\"/g, '$1$1\\\\\"');\n\n // Sequence of backslashes followed by the end of the string\n // (which will become a double quote later):\n // double up all the backslashes\n arg = arg.replace(/(\\\\*)$/, '$1$1');\n\n // All other backslashes occur literally\n\n // Quote the whole thing:\n arg = `\"${arg}\"`;\n\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n // Double escape meta chars if necessary\n if (doubleEscapeMetaChars) {\n arg = arg.replace(metaCharsRegExp, '^$1');\n }\n\n return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n","'use strict';\nmodule.exports = /^#!(.*)/;\n","'use strict';\nconst shebangRegex = require('shebang-regex');\n\nmodule.exports = (string = '') => {\n\tconst match = string.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst [path, argument] = match[0].replace(/#! ?/, '').split(' ');\n\tconst binary = path.split('/').pop();\n\n\tif (binary === 'env') {\n\t\treturn argument;\n\t}\n\n\treturn argument ? `${binary} ${argument}` : binary;\n};\n","'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n // Read the first 150 bytes from the file\n const size = 150;\n const buffer = Buffer.alloc(size);\n\n let fd;\n\n try {\n fd = fs.openSync(command, 'r');\n fs.readSync(fd, buffer, 0, size, 0);\n fs.closeSync(fd);\n } catch (e) { /* Empty */ }\n\n // Attempt to extract shebang (null is returned if not a shebang)\n return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n","'use strict';\n\nconst path = require('path');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\nfunction detectShebang(parsed) {\n parsed.file = resolveCommand(parsed);\n\n const shebang = parsed.file && readShebang(parsed.file);\n\n if (shebang) {\n parsed.args.unshift(parsed.file);\n parsed.command = shebang;\n\n return resolveCommand(parsed);\n }\n\n return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n if (!isWin) {\n return parsed;\n }\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile);\n\n // If a shell is required, use cmd.exe and take care of escaping everything correctly\n // Note that `forceShell` is an hidden option used only in tests\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n // we need to double escape them\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n // This is necessary otherwise it will always fail with ENOENT in those cases\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escape.command(parsed.command);\n parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n }\n\n return parsed;\n}\n\nfunction parse(command, args, options) {\n // Normalize arguments, similar to nodejs\n if (args && !Array.isArray(args)) {\n options = args;\n args = null;\n }\n\n args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n options = Object.assign({}, options); // Clone object to avoid changing the original\n\n // Build our parsed object\n const parsed = {\n command,\n args,\n options,\n file: undefined,\n original: {\n command,\n args,\n },\n };\n\n // Delegate further parsing to shell or non-shell\n return options.shell ? parsed : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n","'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n code: 'ENOENT',\n errno: 'ENOENT',\n syscall: `${syscall} ${original.command}`,\n path: original.command,\n spawnargs: original.args,\n });\n}\n\nfunction hookChildProcess(cp, parsed) {\n if (!isWin) {\n return;\n }\n\n const originalEmit = cp.emit;\n\n cp.emit = function (name, arg1) {\n // If emitting \"exit\" event and exit code is 1, we need to check if\n // the command exists and emit an \"error\" instead\n // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n if (name === 'exit') {\n const err = verifyENOENT(arg1, parsed, 'spawn');\n\n if (err) {\n return originalEmit.call(cp, 'error', err);\n }\n }\n\n return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n };\n}\n\nfunction verifyENOENT(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n\n return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n\n return null;\n}\n\nmodule.exports = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n","'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n // Hook into child process \"exit\" event to emit an error if the command\n // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n enoent.hookChildProcess(spawned, parsed);\n\n return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n","'use strict';\n\nmodule.exports = input => {\n\tconst LF = typeof input === 'string' ? '\\n' : '\\n'.charCodeAt();\n\tconst CR = typeof input === 'string' ? '\\r' : '\\r'.charCodeAt();\n\n\tif (input[input.length - 1] === LF) {\n\t\tinput = input.slice(0, input.length - 1);\n\t}\n\n\tif (input[input.length - 1] === CR) {\n\t\tinput = input.slice(0, input.length - 1);\n\t}\n\n\treturn input;\n};\n","'use strict';\nconst path = require('path');\nconst pathKey = require('path-key');\n\nconst npmRunPath = options => {\n\toptions = {\n\t\tcwd: process.cwd(),\n\t\tpath: process.env[pathKey()],\n\t\texecPath: process.execPath,\n\t\t...options\n\t};\n\n\tlet previous;\n\tlet cwdPath = path.resolve(options.cwd);\n\tconst result = [];\n\n\twhile (previous !== cwdPath) {\n\t\tresult.push(path.join(cwdPath, 'node_modules/.bin'));\n\t\tprevious = cwdPath;\n\t\tcwdPath = path.resolve(cwdPath, '..');\n\t}\n\n\t// Ensure the running `node` binary is used\n\tconst execPathDir = path.resolve(options.cwd, options.execPath, '..');\n\tresult.push(execPathDir);\n\n\treturn result.concat(options.path).join(path.delimiter);\n};\n\nmodule.exports = npmRunPath;\n// TODO: Remove this for the next major release\nmodule.exports.default = npmRunPath;\n\nmodule.exports.env = options => {\n\toptions = {\n\t\tenv: process.env,\n\t\t...options\n\t};\n\n\tconst env = {...options.env};\n\tconst path = pathKey({env});\n\n\toptions.path = env[path];\n\tenv[path] = module.exports(options);\n\n\treturn env;\n};\n","'use strict';\n\nconst mimicFn = (to, from) => {\n\tfor (const prop of Reflect.ownKeys(from)) {\n\t\tObject.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));\n\t}\n\n\treturn to;\n};\n\nmodule.exports = mimicFn;\n// TODO: Remove this for the next major release\nmodule.exports.default = mimicFn;\n","'use strict';\nconst mimicFn = require('mimic-fn');\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = null;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFn(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nmodule.exports = onetime;\n// TODO: Remove this for the next major release\nmodule.exports.default = onetime;\n\nmodule.exports.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.SIGNALS=void 0;\n\nconst SIGNALS=[\n{\nname:\"SIGHUP\",\nnumber:1,\naction:\"terminate\",\ndescription:\"Terminal closed\",\nstandard:\"posix\"},\n\n{\nname:\"SIGINT\",\nnumber:2,\naction:\"terminate\",\ndescription:\"User interruption with CTRL-C\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGQUIT\",\nnumber:3,\naction:\"core\",\ndescription:\"User interruption with CTRL-\\\\\",\nstandard:\"posix\"},\n\n{\nname:\"SIGILL\",\nnumber:4,\naction:\"core\",\ndescription:\"Invalid machine instruction\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGTRAP\",\nnumber:5,\naction:\"core\",\ndescription:\"Debugger breakpoint\",\nstandard:\"posix\"},\n\n{\nname:\"SIGABRT\",\nnumber:6,\naction:\"core\",\ndescription:\"Aborted\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGIOT\",\nnumber:6,\naction:\"core\",\ndescription:\"Aborted\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGBUS\",\nnumber:7,\naction:\"core\",\ndescription:\n\"Bus error due to misaligned, non-existing address or paging error\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGEMT\",\nnumber:7,\naction:\"terminate\",\ndescription:\"Command should be emulated but is not implemented\",\nstandard:\"other\"},\n\n{\nname:\"SIGFPE\",\nnumber:8,\naction:\"core\",\ndescription:\"Floating point arithmetic error\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGKILL\",\nnumber:9,\naction:\"terminate\",\ndescription:\"Forced termination\",\nstandard:\"posix\",\nforced:true},\n\n{\nname:\"SIGUSR1\",\nnumber:10,\naction:\"terminate\",\ndescription:\"Application-specific signal\",\nstandard:\"posix\"},\n\n{\nname:\"SIGSEGV\",\nnumber:11,\naction:\"core\",\ndescription:\"Segmentation fault\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGUSR2\",\nnumber:12,\naction:\"terminate\",\ndescription:\"Application-specific signal\",\nstandard:\"posix\"},\n\n{\nname:\"SIGPIPE\",\nnumber:13,\naction:\"terminate\",\ndescription:\"Broken pipe or socket\",\nstandard:\"posix\"},\n\n{\nname:\"SIGALRM\",\nnumber:14,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"posix\"},\n\n{\nname:\"SIGTERM\",\nnumber:15,\naction:\"terminate\",\ndescription:\"Termination\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGSTKFLT\",\nnumber:16,\naction:\"terminate\",\ndescription:\"Stack is empty or overflowed\",\nstandard:\"other\"},\n\n{\nname:\"SIGCHLD\",\nnumber:17,\naction:\"ignore\",\ndescription:\"Child process terminated, paused or unpaused\",\nstandard:\"posix\"},\n\n{\nname:\"SIGCLD\",\nnumber:17,\naction:\"ignore\",\ndescription:\"Child process terminated, paused or unpaused\",\nstandard:\"other\"},\n\n{\nname:\"SIGCONT\",\nnumber:18,\naction:\"unpause\",\ndescription:\"Unpaused\",\nstandard:\"posix\",\nforced:true},\n\n{\nname:\"SIGSTOP\",\nnumber:19,\naction:\"pause\",\ndescription:\"Paused\",\nstandard:\"posix\",\nforced:true},\n\n{\nname:\"SIGTSTP\",\nnumber:20,\naction:\"pause\",\ndescription:\"Paused using CTRL-Z or \\\"suspend\\\"\",\nstandard:\"posix\"},\n\n{\nname:\"SIGTTIN\",\nnumber:21,\naction:\"pause\",\ndescription:\"Background process cannot read terminal input\",\nstandard:\"posix\"},\n\n{\nname:\"SIGBREAK\",\nnumber:21,\naction:\"terminate\",\ndescription:\"User interruption with CTRL-BREAK\",\nstandard:\"other\"},\n\n{\nname:\"SIGTTOU\",\nnumber:22,\naction:\"pause\",\ndescription:\"Background process cannot write to terminal output\",\nstandard:\"posix\"},\n\n{\nname:\"SIGURG\",\nnumber:23,\naction:\"ignore\",\ndescription:\"Socket received out-of-band data\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGXCPU\",\nnumber:24,\naction:\"core\",\ndescription:\"Process timed out\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGXFSZ\",\nnumber:25,\naction:\"core\",\ndescription:\"File too big\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGVTALRM\",\nnumber:26,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGPROF\",\nnumber:27,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGWINCH\",\nnumber:28,\naction:\"ignore\",\ndescription:\"Terminal window size changed\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGIO\",\nnumber:29,\naction:\"terminate\",\ndescription:\"I/O is available\",\nstandard:\"other\"},\n\n{\nname:\"SIGPOLL\",\nnumber:29,\naction:\"terminate\",\ndescription:\"Watched event\",\nstandard:\"other\"},\n\n{\nname:\"SIGINFO\",\nnumber:29,\naction:\"ignore\",\ndescription:\"Request for process information\",\nstandard:\"other\"},\n\n{\nname:\"SIGPWR\",\nnumber:30,\naction:\"terminate\",\ndescription:\"Device running out of power\",\nstandard:\"systemv\"},\n\n{\nname:\"SIGSYS\",\nnumber:31,\naction:\"core\",\ndescription:\"Invalid system call\",\nstandard:\"other\"},\n\n{\nname:\"SIGUNUSED\",\nnumber:31,\naction:\"terminate\",\ndescription:\"Invalid system call\",\nstandard:\"other\"}];exports.SIGNALS=SIGNALS;\n//# sourceMappingURL=core.js.map","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.SIGRTMAX=exports.getRealtimeSignals=void 0;\nconst getRealtimeSignals=function(){\nconst length=SIGRTMAX-SIGRTMIN+1;\nreturn Array.from({length},getRealtimeSignal);\n};exports.getRealtimeSignals=getRealtimeSignals;\n\nconst getRealtimeSignal=function(value,index){\nreturn{\nname:`SIGRT${index+1}`,\nnumber:SIGRTMIN+index,\naction:\"terminate\",\ndescription:\"Application-specific signal (realtime)\",\nstandard:\"posix\"};\n\n};\n\nconst SIGRTMIN=34;\nconst SIGRTMAX=64;exports.SIGRTMAX=SIGRTMAX;\n//# sourceMappingURL=realtime.js.map","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.getSignals=void 0;var _os=require(\"os\");\n\nvar _core=require(\"./core.js\");\nvar _realtime=require(\"./realtime.js\");\n\n\n\nconst getSignals=function(){\nconst realtimeSignals=(0,_realtime.getRealtimeSignals)();\nconst signals=[..._core.SIGNALS,...realtimeSignals].map(normalizeSignal);\nreturn signals;\n};exports.getSignals=getSignals;\n\n\n\n\n\n\n\nconst normalizeSignal=function({\nname,\nnumber:defaultNumber,\ndescription,\naction,\nforced=false,\nstandard})\n{\nconst{\nsignals:{[name]:constantSignal}}=\n_os.constants;\nconst supported=constantSignal!==undefined;\nconst number=supported?constantSignal:defaultNumber;\nreturn{name,number,description,supported,action,forced,standard};\n};\n//# sourceMappingURL=signals.js.map","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.signalsByNumber=exports.signalsByName=void 0;var _os=require(\"os\");\n\nvar _signals=require(\"./signals.js\");\nvar _realtime=require(\"./realtime.js\");\n\n\n\nconst getSignalsByName=function(){\nconst signals=(0,_signals.getSignals)();\nreturn signals.reduce(getSignalByName,{});\n};\n\nconst getSignalByName=function(\nsignalByNameMemo,\n{name,number,description,supported,action,forced,standard})\n{\nreturn{\n...signalByNameMemo,\n[name]:{name,number,description,supported,action,forced,standard}};\n\n};\n\nconst signalsByName=getSignalsByName();exports.signalsByName=signalsByName;\n\n\n\n\nconst getSignalsByNumber=function(){\nconst signals=(0,_signals.getSignals)();\nconst length=_realtime.SIGRTMAX+1;\nconst signalsA=Array.from({length},(value,number)=>\ngetSignalByNumber(number,signals));\n\nreturn Object.assign({},...signalsA);\n};\n\nconst getSignalByNumber=function(number,signals){\nconst signal=findSignalByNumber(number,signals);\n\nif(signal===undefined){\nreturn{};\n}\n\nconst{name,description,supported,action,forced,standard}=signal;\nreturn{\n[number]:{\nname,\nnumber,\ndescription,\nsupported,\naction,\nforced,\nstandard}};\n\n\n};\n\n\n\nconst findSignalByNumber=function(number,signals){\nconst signal=signals.find(({name})=>_os.constants.signals[name]===number);\n\nif(signal!==undefined){\nreturn signal;\n}\n\nreturn signals.find(signalA=>signalA.number===number);\n};\n\nconst signalsByNumber=getSignalsByNumber();exports.signalsByNumber=signalsByNumber;\n//# sourceMappingURL=main.js.map","'use strict';\nconst {signalsByName} = require('human-signals');\n\nconst getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => {\n\tif (timedOut) {\n\t\treturn `timed out after ${timeout} milliseconds`;\n\t}\n\n\tif (isCanceled) {\n\t\treturn 'was canceled';\n\t}\n\n\tif (errorCode !== undefined) {\n\t\treturn `failed with ${errorCode}`;\n\t}\n\n\tif (signal !== undefined) {\n\t\treturn `was killed with ${signal} (${signalDescription})`;\n\t}\n\n\tif (exitCode !== undefined) {\n\t\treturn `failed with exit code ${exitCode}`;\n\t}\n\n\treturn 'failed';\n};\n\nconst makeError = ({\n\tstdout,\n\tstderr,\n\tall,\n\terror,\n\tsignal,\n\texitCode,\n\tcommand,\n\tescapedCommand,\n\ttimedOut,\n\tisCanceled,\n\tkilled,\n\tparsed: {options: {timeout}}\n}) => {\n\t// `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`.\n\t// We normalize them to `undefined`\n\texitCode = exitCode === null ? undefined : exitCode;\n\tsignal = signal === null ? undefined : signal;\n\tconst signalDescription = signal === undefined ? undefined : signalsByName[signal].description;\n\n\tconst errorCode = error && error.code;\n\n\tconst prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled});\n\tconst execaMessage = `Command ${prefix}: ${command}`;\n\tconst isError = Object.prototype.toString.call(error) === '[object Error]';\n\tconst shortMessage = isError ? `${execaMessage}\\n${error.message}` : execaMessage;\n\tconst message = [shortMessage, stderr, stdout].filter(Boolean).join('\\n');\n\n\tif (isError) {\n\t\terror.originalMessage = error.message;\n\t\terror.message = message;\n\t} else {\n\t\terror = new Error(message);\n\t}\n\n\terror.shortMessage = shortMessage;\n\terror.command = command;\n\terror.escapedCommand = escapedCommand;\n\terror.exitCode = exitCode;\n\terror.signal = signal;\n\terror.signalDescription = signalDescription;\n\terror.stdout = stdout;\n\terror.stderr = stderr;\n\n\tif (all !== undefined) {\n\t\terror.all = all;\n\t}\n\n\tif ('bufferedData' in error) {\n\t\tdelete error.bufferedData;\n\t}\n\n\terror.failed = true;\n\terror.timedOut = Boolean(timedOut);\n\terror.isCanceled = isCanceled;\n\terror.killed = killed && !timedOut;\n\n\treturn error;\n};\n\nmodule.exports = makeError;\n","'use strict';\nconst aliases = ['stdin', 'stdout', 'stderr'];\n\nconst hasAlias = options => aliases.some(alias => options[alias] !== undefined);\n\nconst normalizeStdio = options => {\n\tif (!options) {\n\t\treturn;\n\t}\n\n\tconst {stdio} = options;\n\n\tif (stdio === undefined) {\n\t\treturn aliases.map(alias => options[alias]);\n\t}\n\n\tif (hasAlias(options)) {\n\t\tthrow new Error(`It's not possible to provide \\`stdio\\` in combination with one of ${aliases.map(alias => `\\`${alias}\\``).join(', ')}`);\n\t}\n\n\tif (typeof stdio === 'string') {\n\t\treturn stdio;\n\t}\n\n\tif (!Array.isArray(stdio)) {\n\t\tthrow new TypeError(`Expected \\`stdio\\` to be of type \\`string\\` or \\`Array\\`, got \\`${typeof stdio}\\``);\n\t}\n\n\tconst length = Math.max(stdio.length, aliases.length);\n\treturn Array.from({length}, (value, index) => stdio[index]);\n};\n\nmodule.exports = normalizeStdio;\n\n// `ipc` is pushed unless it is already present\nmodule.exports.node = options => {\n\tconst stdio = normalizeStdio(options);\n\n\tif (stdio === 'ipc') {\n\t\treturn 'ipc';\n\t}\n\n\tif (stdio === undefined || typeof stdio === 'string') {\n\t\treturn [stdio, stdio, stdio, 'ipc'];\n\t}\n\n\tif (stdio.includes('ipc')) {\n\t\treturn stdio;\n\t}\n\n\treturn [...stdio, 'ipc'];\n};\n","// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n// some kind of non-node environment, just no-op\nif (typeof process !== 'object' || !process) {\n module.exports = () => {}\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n if (global.process !== process) {\n return\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || global.process !== process) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { <signal>: <listener fn>, ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n if (process !== global.process) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || process !== global.process) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n if (process !== global.process) {\n return\n }\n process.exitCode = code || 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && process === global.process) {\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n","'use strict';\nconst os = require('os');\nconst onExit = require('signal-exit');\n\nconst DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5;\n\n// Monkey-patches `childProcess.kill()` to add `forceKillAfterTimeout` behavior\nconst spawnedKill = (kill, signal = 'SIGTERM', options = {}) => {\n\tconst killResult = kill(signal);\n\tsetKillTimeout(kill, signal, options, killResult);\n\treturn killResult;\n};\n\nconst setKillTimeout = (kill, signal, options, killResult) => {\n\tif (!shouldForceKill(signal, options, killResult)) {\n\t\treturn;\n\t}\n\n\tconst timeout = getForceKillAfterTimeout(options);\n\tconst t = setTimeout(() => {\n\t\tkill('SIGKILL');\n\t}, timeout);\n\n\t// Guarded because there's no `.unref()` when `execa` is used in the renderer\n\t// process in Electron. This cannot be tested since we don't run tests in\n\t// Electron.\n\t// istanbul ignore else\n\tif (t.unref) {\n\t\tt.unref();\n\t}\n};\n\nconst shouldForceKill = (signal, {forceKillAfterTimeout}, killResult) => {\n\treturn isSigterm(signal) && forceKillAfterTimeout !== false && killResult;\n};\n\nconst isSigterm = signal => {\n\treturn signal === os.constants.signals.SIGTERM ||\n\t\t(typeof signal === 'string' && signal.toUpperCase() === 'SIGTERM');\n};\n\nconst getForceKillAfterTimeout = ({forceKillAfterTimeout = true}) => {\n\tif (forceKillAfterTimeout === true) {\n\t\treturn DEFAULT_FORCE_KILL_TIMEOUT;\n\t}\n\n\tif (!Number.isFinite(forceKillAfterTimeout) || forceKillAfterTimeout < 0) {\n\t\tthrow new TypeError(`Expected the \\`forceKillAfterTimeout\\` option to be a non-negative integer, got \\`${forceKillAfterTimeout}\\` (${typeof forceKillAfterTimeout})`);\n\t}\n\n\treturn forceKillAfterTimeout;\n};\n\n// `childProcess.cancel()`\nconst spawnedCancel = (spawned, context) => {\n\tconst killResult = spawned.kill();\n\n\tif (killResult) {\n\t\tcontext.isCanceled = true;\n\t}\n};\n\nconst timeoutKill = (spawned, signal, reject) => {\n\tspawned.kill(signal);\n\treject(Object.assign(new Error('Timed out'), {timedOut: true, signal}));\n};\n\n// `timeout` option handling\nconst setupTimeout = (spawned, {timeout, killSignal = 'SIGTERM'}, spawnedPromise) => {\n\tif (timeout === 0 || timeout === undefined) {\n\t\treturn spawnedPromise;\n\t}\n\n\tlet timeoutId;\n\tconst timeoutPromise = new Promise((resolve, reject) => {\n\t\ttimeoutId = setTimeout(() => {\n\t\t\ttimeoutKill(spawned, killSignal, reject);\n\t\t}, timeout);\n\t});\n\n\tconst safeSpawnedPromise = spawnedPromise.finally(() => {\n\t\tclearTimeout(timeoutId);\n\t});\n\n\treturn Promise.race([timeoutPromise, safeSpawnedPromise]);\n};\n\nconst validateTimeout = ({timeout}) => {\n\tif (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {\n\t\tthrow new TypeError(`Expected the \\`timeout\\` option to be a non-negative integer, got \\`${timeout}\\` (${typeof timeout})`);\n\t}\n};\n\n// `cleanup` option handling\nconst setExitHandler = async (spawned, {cleanup, detached}, timedPromise) => {\n\tif (!cleanup || detached) {\n\t\treturn timedPromise;\n\t}\n\n\tconst removeExitHandler = onExit(() => {\n\t\tspawned.kill();\n\t});\n\n\treturn timedPromise.finally(() => {\n\t\tremoveExitHandler();\n\t});\n};\n\nmodule.exports = {\n\tspawnedKill,\n\tspawnedCancel,\n\tsetupTimeout,\n\tvalidateTimeout,\n\tsetExitHandler\n};\n","'use strict';\n\nconst isStream = stream =>\n\tstream !== null &&\n\ttypeof stream === 'object' &&\n\ttypeof stream.pipe === 'function';\n\nisStream.writable = stream =>\n\tisStream(stream) &&\n\tstream.writable !== false &&\n\ttypeof stream._write === 'function' &&\n\ttypeof stream._writableState === 'object';\n\nisStream.readable = stream =>\n\tisStream(stream) &&\n\tstream.readable !== false &&\n\ttypeof stream._read === 'function' &&\n\ttypeof stream._readableState === 'object';\n\nisStream.duplex = stream =>\n\tisStream.writable(stream) &&\n\tisStream.readable(stream);\n\nisStream.transform = stream =>\n\tisStream.duplex(stream) &&\n\ttypeof stream._transform === 'function';\n\nmodule.exports = isStream;\n","'use strict';\nconst {PassThrough: PassThroughStream} = require('stream');\n\nmodule.exports = options => {\n\toptions = {...options};\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst isBuffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || isBuffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (isBuffer) {\n\t\tencoding = null;\n\t}\n\n\tconst stream = new PassThroughStream({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tlet length = 0;\n\tconst chunks = [];\n\n\tstream.on('data', chunk => {\n\t\tchunks.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlength = chunks.length;\n\t\t} else {\n\t\t\tlength += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn chunks;\n\t\t}\n\n\t\treturn isBuffer ? Buffer.concat(chunks, length) : chunks.join('');\n\t};\n\n\tstream.getBufferedLength = () => length;\n\n\treturn stream;\n};\n","'use strict';\nconst {constants: BufferConstants} = require('buffer');\nconst stream = require('stream');\nconst {promisify} = require('util');\nconst bufferStream = require('./buffer-stream');\n\nconst streamPipelinePromisified = promisify(stream.pipeline);\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nasync function getStream(inputStream, options) {\n\tif (!inputStream) {\n\t\tthrow new Error('Expected a stream');\n\t}\n\n\toptions = {\n\t\tmaxBuffer: Infinity,\n\t\t...options\n\t};\n\n\tconst {maxBuffer} = options;\n\tconst stream = bufferStream(options);\n\n\tawait new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\t// Don't retrieve an oversized buffer.\n\t\t\tif (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\n\t\t\treject(error);\n\t\t};\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tawait streamPipelinePromisified(inputStream, stream);\n\t\t\t\tresolve();\n\t\t\t} catch (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t}\n\t\t})();\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t});\n\n\treturn stream.getBufferedValue();\n}\n\nmodule.exports = getStream;\nmodule.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});\nmodule.exports.array = (stream, options) => getStream(stream, {...options, array: true});\nmodule.exports.MaxBufferError = MaxBufferError;\n","'use strict';\n\nconst { PassThrough } = require('stream');\n\nmodule.exports = function (/*streams...*/) {\n var sources = []\n var output = new PassThrough({objectMode: true})\n\n output.setMaxListeners(0)\n\n output.add = add\n output.isEmpty = isEmpty\n\n output.on('unpipe', remove)\n\n Array.prototype.slice.call(arguments).forEach(add)\n\n return output\n\n function add (source) {\n if (Array.isArray(source)) {\n source.forEach(add)\n return this\n }\n\n sources.push(source);\n source.once('end', remove.bind(null, source))\n source.once('error', output.emit.bind(output, 'error'))\n source.pipe(output, {end: false})\n return this\n }\n\n function isEmpty () {\n return sources.length == 0;\n }\n\n function remove (source) {\n sources = sources.filter(function (it) { return it !== source })\n if (!sources.length && output.readable) { output.end() }\n }\n}\n","'use strict';\nconst isStream = require('is-stream');\nconst getStream = require('get-stream');\nconst mergeStream = require('merge-stream');\n\n// `input` option\nconst handleInput = (spawned, input) => {\n\t// Checking for stdin is workaround for https://github.com/nodejs/node/issues/26852\n\t// @todo remove `|| spawned.stdin === undefined` once we drop support for Node.js <=12.2.0\n\tif (input === undefined || spawned.stdin === undefined) {\n\t\treturn;\n\t}\n\n\tif (isStream(input)) {\n\t\tinput.pipe(spawned.stdin);\n\t} else {\n\t\tspawned.stdin.end(input);\n\t}\n};\n\n// `all` interleaves `stdout` and `stderr`\nconst makeAllStream = (spawned, {all}) => {\n\tif (!all || (!spawned.stdout && !spawned.stderr)) {\n\t\treturn;\n\t}\n\n\tconst mixed = mergeStream();\n\n\tif (spawned.stdout) {\n\t\tmixed.add(spawned.stdout);\n\t}\n\n\tif (spawned.stderr) {\n\t\tmixed.add(spawned.stderr);\n\t}\n\n\treturn mixed;\n};\n\n// On failure, `result.stdout|stderr|all` should contain the currently buffered stream\nconst getBufferedData = async (stream, streamPromise) => {\n\tif (!stream) {\n\t\treturn;\n\t}\n\n\tstream.destroy();\n\n\ttry {\n\t\treturn await streamPromise;\n\t} catch (error) {\n\t\treturn error.bufferedData;\n\t}\n};\n\nconst getStreamPromise = (stream, {encoding, buffer, maxBuffer}) => {\n\tif (!stream || !buffer) {\n\t\treturn;\n\t}\n\n\tif (encoding) {\n\t\treturn getStream(stream, {encoding, maxBuffer});\n\t}\n\n\treturn getStream.buffer(stream, {maxBuffer});\n};\n\n// Retrieve result of child process: exit code, signal, error, streams (stdout/stderr/all)\nconst getSpawnedResult = async ({stdout, stderr, all}, {encoding, buffer, maxBuffer}, processDone) => {\n\tconst stdoutPromise = getStreamPromise(stdout, {encoding, buffer, maxBuffer});\n\tconst stderrPromise = getStreamPromise(stderr, {encoding, buffer, maxBuffer});\n\tconst allPromise = getStreamPromise(all, {encoding, buffer, maxBuffer: maxBuffer * 2});\n\n\ttry {\n\t\treturn await Promise.all([processDone, stdoutPromise, stderrPromise, allPromise]);\n\t} catch (error) {\n\t\treturn Promise.all([\n\t\t\t{error, signal: error.signal, timedOut: error.timedOut},\n\t\t\tgetBufferedData(stdout, stdoutPromise),\n\t\t\tgetBufferedData(stderr, stderrPromise),\n\t\t\tgetBufferedData(all, allPromise)\n\t\t]);\n\t}\n};\n\nconst validateInputSync = ({input}) => {\n\tif (isStream(input)) {\n\t\tthrow new TypeError('The `input` option cannot be a stream in sync mode');\n\t}\n};\n\nmodule.exports = {\n\thandleInput,\n\tmakeAllStream,\n\tgetSpawnedResult,\n\tvalidateInputSync\n};\n\n","'use strict';\n\nconst nativePromisePrototype = (async () => {})().constructor.prototype;\nconst descriptors = ['then', 'catch', 'finally'].map(property => [\n\tproperty,\n\tReflect.getOwnPropertyDescriptor(nativePromisePrototype, property)\n]);\n\n// The return value is a mixin of `childProcess` and `Promise`\nconst mergePromise = (spawned, promise) => {\n\tfor (const [property, descriptor] of descriptors) {\n\t\t// Starting the main `promise` is deferred to avoid consuming streams\n\t\tconst value = typeof promise === 'function' ?\n\t\t\t(...args) => Reflect.apply(descriptor.value, promise(), args) :\n\t\t\tdescriptor.value.bind(promise);\n\n\t\tReflect.defineProperty(spawned, property, {...descriptor, value});\n\t}\n\n\treturn spawned;\n};\n\n// Use promises instead of `child_process` events\nconst getSpawnedPromise = spawned => {\n\treturn new Promise((resolve, reject) => {\n\t\tspawned.on('exit', (exitCode, signal) => {\n\t\t\tresolve({exitCode, signal});\n\t\t});\n\n\t\tspawned.on('error', error => {\n\t\t\treject(error);\n\t\t});\n\n\t\tif (spawned.stdin) {\n\t\t\tspawned.stdin.on('error', error => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t}\n\t});\n};\n\nmodule.exports = {\n\tmergePromise,\n\tgetSpawnedPromise\n};\n\n","'use strict';\nconst normalizeArgs = (file, args = []) => {\n\tif (!Array.isArray(args)) {\n\t\treturn [file];\n\t}\n\n\treturn [file, ...args];\n};\n\nconst NO_ESCAPE_REGEXP = /^[\\w.-]+$/;\nconst DOUBLE_QUOTES_REGEXP = /\"/g;\n\nconst escapeArg = arg => {\n\tif (typeof arg !== 'string' || NO_ESCAPE_REGEXP.test(arg)) {\n\t\treturn arg;\n\t}\n\n\treturn `\"${arg.replace(DOUBLE_QUOTES_REGEXP, '\\\\\"')}\"`;\n};\n\nconst joinCommand = (file, args) => {\n\treturn normalizeArgs(file, args).join(' ');\n};\n\nconst getEscapedCommand = (file, args) => {\n\treturn normalizeArgs(file, args).map(arg => escapeArg(arg)).join(' ');\n};\n\nconst SPACES_REGEXP = / +/g;\n\n// Handle `execa.command()`\nconst parseCommand = command => {\n\tconst tokens = [];\n\tfor (const token of command.trim().split(SPACES_REGEXP)) {\n\t\t// Allow spaces to be escaped by a backslash if not meant as a delimiter\n\t\tconst previousToken = tokens[tokens.length - 1];\n\t\tif (previousToken && previousToken.endsWith('\\\\')) {\n\t\t\t// Merge previous token with current one\n\t\t\ttokens[tokens.length - 1] = `${previousToken.slice(0, -1)} ${token}`;\n\t\t} else {\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\n\treturn tokens;\n};\n\nmodule.exports = {\n\tjoinCommand,\n\tgetEscapedCommand,\n\tparseCommand\n};\n","'use strict';\nconst path = require('path');\nconst childProcess = require('child_process');\nconst crossSpawn = require('cross-spawn');\nconst stripFinalNewline = require('strip-final-newline');\nconst npmRunPath = require('npm-run-path');\nconst onetime = require('onetime');\nconst makeError = require('./lib/error');\nconst normalizeStdio = require('./lib/stdio');\nconst {spawnedKill, spawnedCancel, setupTimeout, validateTimeout, setExitHandler} = require('./lib/kill');\nconst {handleInput, getSpawnedResult, makeAllStream, validateInputSync} = require('./lib/stream');\nconst {mergePromise, getSpawnedPromise} = require('./lib/promise');\nconst {joinCommand, parseCommand, getEscapedCommand} = require('./lib/command');\n\nconst DEFAULT_MAX_BUFFER = 1000 * 1000 * 100;\n\nconst getEnv = ({env: envOption, extendEnv, preferLocal, localDir, execPath}) => {\n\tconst env = extendEnv ? {...process.env, ...envOption} : envOption;\n\n\tif (preferLocal) {\n\t\treturn npmRunPath.env({env, cwd: localDir, execPath});\n\t}\n\n\treturn env;\n};\n\nconst handleArguments = (file, args, options = {}) => {\n\tconst parsed = crossSpawn._parse(file, args, options);\n\tfile = parsed.command;\n\targs = parsed.args;\n\toptions = parsed.options;\n\n\toptions = {\n\t\tmaxBuffer: DEFAULT_MAX_BUFFER,\n\t\tbuffer: true,\n\t\tstripFinalNewline: true,\n\t\textendEnv: true,\n\t\tpreferLocal: false,\n\t\tlocalDir: options.cwd || process.cwd(),\n\t\texecPath: process.execPath,\n\t\tencoding: 'utf8',\n\t\treject: true,\n\t\tcleanup: true,\n\t\tall: false,\n\t\twindowsHide: true,\n\t\t...options\n\t};\n\n\toptions.env = getEnv(options);\n\n\toptions.stdio = normalizeStdio(options);\n\n\tif (process.platform === 'win32' && path.basename(file, '.exe') === 'cmd') {\n\t\t// #116\n\t\targs.unshift('/q');\n\t}\n\n\treturn {file, args, options, parsed};\n};\n\nconst handleOutput = (options, value, error) => {\n\tif (typeof value !== 'string' && !Buffer.isBuffer(value)) {\n\t\t// When `execa.sync()` errors, we normalize it to '' to mimic `execa()`\n\t\treturn error === undefined ? undefined : '';\n\t}\n\n\tif (options.stripFinalNewline) {\n\t\treturn stripFinalNewline(value);\n\t}\n\n\treturn value;\n};\n\nconst execa = (file, args, options) => {\n\tconst parsed = handleArguments(file, args, options);\n\tconst command = joinCommand(file, args);\n\tconst escapedCommand = getEscapedCommand(file, args);\n\n\tvalidateTimeout(parsed.options);\n\n\tlet spawned;\n\ttry {\n\t\tspawned = childProcess.spawn(parsed.file, parsed.args, parsed.options);\n\t} catch (error) {\n\t\t// Ensure the returned error is always both a promise and a child process\n\t\tconst dummySpawned = new childProcess.ChildProcess();\n\t\tconst errorPromise = Promise.reject(makeError({\n\t\t\terror,\n\t\t\tstdout: '',\n\t\t\tstderr: '',\n\t\t\tall: '',\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false\n\t\t}));\n\t\treturn mergePromise(dummySpawned, errorPromise);\n\t}\n\n\tconst spawnedPromise = getSpawnedPromise(spawned);\n\tconst timedPromise = setupTimeout(spawned, parsed.options, spawnedPromise);\n\tconst processDone = setExitHandler(spawned, parsed.options, timedPromise);\n\n\tconst context = {isCanceled: false};\n\n\tspawned.kill = spawnedKill.bind(null, spawned.kill.bind(spawned));\n\tspawned.cancel = spawnedCancel.bind(null, spawned, context);\n\n\tconst handlePromise = async () => {\n\t\tconst [{error, exitCode, signal, timedOut}, stdoutResult, stderrResult, allResult] = await getSpawnedResult(spawned, parsed.options, processDone);\n\t\tconst stdout = handleOutput(parsed.options, stdoutResult);\n\t\tconst stderr = handleOutput(parsed.options, stderrResult);\n\t\tconst all = handleOutput(parsed.options, allResult);\n\n\t\tif (error || exitCode !== 0 || signal !== null) {\n\t\t\tconst returnedError = makeError({\n\t\t\t\terror,\n\t\t\t\texitCode,\n\t\t\t\tsignal,\n\t\t\t\tstdout,\n\t\t\t\tstderr,\n\t\t\t\tall,\n\t\t\t\tcommand,\n\t\t\t\tescapedCommand,\n\t\t\t\tparsed,\n\t\t\t\ttimedOut,\n\t\t\t\tisCanceled: context.isCanceled,\n\t\t\t\tkilled: spawned.killed\n\t\t\t});\n\n\t\t\tif (!parsed.options.reject) {\n\t\t\t\treturn returnedError;\n\t\t\t}\n\n\t\t\tthrow returnedError;\n\t\t}\n\n\t\treturn {\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\texitCode: 0,\n\t\t\tstdout,\n\t\t\tstderr,\n\t\t\tall,\n\t\t\tfailed: false,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false\n\t\t};\n\t};\n\n\tconst handlePromiseOnce = onetime(handlePromise);\n\n\thandleInput(spawned, parsed.options.input);\n\n\tspawned.all = makeAllStream(spawned, parsed.options);\n\n\treturn mergePromise(spawned, handlePromiseOnce);\n};\n\nmodule.exports = execa;\n\nmodule.exports.sync = (file, args, options) => {\n\tconst parsed = handleArguments(file, args, options);\n\tconst command = joinCommand(file, args);\n\tconst escapedCommand = getEscapedCommand(file, args);\n\n\tvalidateInputSync(parsed.options);\n\n\tlet result;\n\ttry {\n\t\tresult = childProcess.spawnSync(parsed.file, parsed.args, parsed.options);\n\t} catch (error) {\n\t\tthrow makeError({\n\t\t\terror,\n\t\t\tstdout: '',\n\t\t\tstderr: '',\n\t\t\tall: '',\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false\n\t\t});\n\t}\n\n\tconst stdout = handleOutput(parsed.options, result.stdout, result.error);\n\tconst stderr = handleOutput(parsed.options, result.stderr, result.error);\n\n\tif (result.error || result.status !== 0 || result.signal !== null) {\n\t\tconst error = makeError({\n\t\t\tstdout,\n\t\t\tstderr,\n\t\t\terror: result.error,\n\t\t\tsignal: result.signal,\n\t\t\texitCode: result.status,\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: result.error && result.error.code === 'ETIMEDOUT',\n\t\t\tisCanceled: false,\n\t\t\tkilled: result.signal !== null\n\t\t});\n\n\t\tif (!parsed.options.reject) {\n\t\t\treturn error;\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\treturn {\n\t\tcommand,\n\t\tescapedCommand,\n\t\texitCode: 0,\n\t\tstdout,\n\t\tstderr,\n\t\tfailed: false,\n\t\ttimedOut: false,\n\t\tisCanceled: false,\n\t\tkilled: false\n\t};\n};\n\nmodule.exports.command = (command, options) => {\n\tconst [file, ...args] = parseCommand(command);\n\treturn execa(file, args, options);\n};\n\nmodule.exports.commandSync = (command, options) => {\n\tconst [file, ...args] = parseCommand(command);\n\treturn execa.sync(file, args, options);\n};\n\nmodule.exports.node = (scriptPath, args, options = {}) => {\n\tif (args && !Array.isArray(args) && typeof args === 'object') {\n\t\toptions = args;\n\t\targs = [];\n\t}\n\n\tconst stdio = normalizeStdio.node(options);\n\tconst defaultExecArgv = process.execArgv.filter(arg => !arg.startsWith('--inspect'));\n\n\tconst {\n\t\tnodePath = process.execPath,\n\t\tnodeOptions = defaultExecArgv\n\t} = options;\n\n\treturn execa(\n\t\tnodePath,\n\t\t[\n\t\t\t...nodeOptions,\n\t\t\tscriptPath,\n\t\t\t...(Array.isArray(args) ? args : [])\n\t\t],\n\t\t{\n\t\t\t...options,\n\t\t\tstdin: undefined,\n\t\t\tstdout: undefined,\n\t\t\tstderr: undefined,\n\t\t\tstdio,\n\t\t\tshell: false\n\t\t}\n\t);\n};\n","/**\n * The following is modified based on source found in\n * https://github.com/facebook/create-react-app\n *\n * MIT Licensed\n * Copyright (c) 2015-present, Facebook, Inc.\n * https://github.com/facebook/create-react-app/blob/master/LICENSE\n *\n */\n\nimport path from 'path'\nimport open from 'open'\nimport execa from 'execa'\nimport chalk from 'chalk'\nimport { execSync } from 'child_process'\nimport { Logger } from '../logger'\n\n// https://github.com/sindresorhus/open#app\nconst OSX_CHROME = 'google chrome'\n\n/**\n * Reads the BROWSER environment variable and decides what to do with it.\n * Returns true if it opened a browser or ran a node.js script, otherwise false.\n */\nexport function openBrowser(\n url: string,\n opt: string | true,\n logger: Logger\n): boolean {\n // The browser executable to open.\n // See https://github.com/sindresorhus/open#app for documentation.\n const browser = typeof opt === 'string' ? opt : process.env.BROWSER || ''\n if (browser.toLowerCase().endsWith('.js')) {\n return executeNodeScript(browser, url, logger)\n } else if (browser.toLowerCase() !== 'none') {\n return startBrowserProcess(browser, url)\n }\n return false\n}\n\nfunction executeNodeScript(scriptPath: string, url: string, logger: Logger) {\n const extraArgs = process.argv.slice(2)\n const child = execa('node', [scriptPath, ...extraArgs, url], {\n stdio: 'inherit'\n })\n child.on('close', (code) => {\n if (code !== 0) {\n logger.error(\n chalk.red(\n `\\nThe script specified as BROWSER environment variable failed.\\n\\n${chalk.cyan(\n scriptPath\n )} exited with code ${code}.`\n ),\n { error: null }\n )\n }\n })\n return true\n}\n\nfunction startBrowserProcess(browser: string | undefined, url: string) {\n // If we're on OS X, the user hasn't specifically\n // requested a different browser, we can try opening\n // Chrome with AppleScript. This lets us reuse an\n // existing tab when possible instead of creating a new one.\n const shouldTryOpenChromeWithAppleScript =\n process.platform === 'darwin' && (browser === '' || browser === OSX_CHROME)\n\n if (shouldTryOpenChromeWithAppleScript) {\n try {\n // Try our best to reuse existing tab\n // on OS X Google Chrome with AppleScript\n execSync('ps cax | grep \"Google Chrome\"')\n execSync('osascript openChrome.applescript \"' + encodeURI(url) + '\"', {\n cwd: path.dirname(require.resolve('vite/bin/openChrome.applescript')),\n stdio: 'ignore'\n })\n return true\n } catch (err) {\n // Ignore errors\n }\n }\n\n // Another special case: on OS X, check if BROWSER has been set to \"open\".\n // In this case, instead of passing the string `open` to `open` function (which won't work),\n // just ignore it (thus ensuring the intended behavior, i.e. opening the system browser):\n // https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768\n if (process.platform === 'darwin' && browser === 'open') {\n browser = undefined\n }\n\n // Fallback to open\n // (It will always open new tab)\n try {\n const options: open.Options = browser ? { app: { name: browser } } : {}\n open(url, options).catch(() => {}) // Prevent `unhandledRejection` error.\n return true\n } catch (err) {\n return false\n }\n}\n","'use strict';\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn str.replace(matchOperatorsRe, '\\\\$&');\n};\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\nconst colorConvert = require('color-convert');\n\nconst wrapAnsi16 = (fn, offset) => function () {\n\tconst code = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => function () {\n\tconst code = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => function () {\n\tconst rgb = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\t\t\tgray: [90, 39],\n\n\t\t\t// Bright color\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Fix humans\n\tstyles.color.grey = styles.color.gray;\n\n\tfor (const groupName of Object.keys(styles)) {\n\t\tconst group = styles[groupName];\n\n\t\tfor (const styleName of Object.keys(group)) {\n\t\t\tconst style = group[styleName];\n\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\n\t\tObject.defineProperty(styles, 'codes', {\n\t\t\tvalue: codes,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tconst ansi2ansi = n => n;\n\tconst rgb2rgb = (r, g, b) => [r, g, b];\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = {\n\t\tansi: wrapAnsi16(ansi2ansi, 0)\n\t};\n\tstyles.color.ansi256 = {\n\t\tansi256: wrapAnsi256(ansi2ansi, 0)\n\t};\n\tstyles.color.ansi16m = {\n\t\trgb: wrapAnsi16m(rgb2rgb, 0)\n\t};\n\n\tstyles.bgColor.ansi = {\n\t\tansi: wrapAnsi16(ansi2ansi, 10)\n\t};\n\tstyles.bgColor.ansi256 = {\n\t\tansi256: wrapAnsi256(ansi2ansi, 10)\n\t};\n\tstyles.bgColor.ansi16m = {\n\t\trgb: wrapAnsi16m(rgb2rgb, 10)\n\t};\n\n\tfor (let key of Object.keys(colorConvert)) {\n\t\tif (typeof colorConvert[key] !== 'object') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst suite = colorConvert[key];\n\n\t\tif (key === 'ansi16') {\n\t\t\tkey = 'ansi';\n\t\t}\n\n\t\tif ('ansi16' in suite) {\n\t\t\tstyles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);\n\t\t\tstyles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);\n\t\t}\n\n\t\tif ('ansi256' in suite) {\n\t\t\tstyles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);\n\t\t\tstyles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);\n\t\t}\n\n\t\tif ('rgb' in suite) {\n\t\t\tstyles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);\n\t\t\tstyles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);\n\t\t}\n\t}\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\nmodule.exports = (flag, argv) => {\n\targv = argv || process.argv;\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst pos = argv.indexOf(prefix + flag);\n\tconst terminatorPos = argv.indexOf('--');\n\treturn pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","'use strict';\nconst os = require('os');\nconst hasFlag = require('has-flag');\n\nconst env = process.env;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false')) {\n\tforceColor = false;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n\tforceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(stream) {\n\tif (forceColor === false) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (stream && !stream.isTTY && forceColor !== true) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor ? 1 : 0;\n\n\tif (process.platform === 'win32') {\n\t\t// Node.js 7.5.0 is the first version of Node.js to include a patch to\n\t\t// libuv that enables 256 color output on Windows. Anything earlier and it\n\t\t// won't work. However, here we target Node.js 8 at minimum as it is an LTS\n\t\t// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n\t\t// release that supports 256 colors. Windows 10 build 14931 is the first release\n\t\t// that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(process.versions.node.split('.')[0]) >= 8 &&\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel(process.stdout),\n\tstderr: getSupportLevel(process.stderr)\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u[a-f\\d]{4}|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u[a-f\\d]{4}|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tif ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, args) {\n\tconst results = [];\n\tconst chunks = args.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tif (!isNaN(chunk)) {\n\t\t\tresults.push(Number(chunk));\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const styleName of Object.keys(enabled)) {\n\t\tif (Array.isArray(enabled[styleName])) {\n\t\t\tif (!(styleName in current)) {\n\t\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t\t}\n\n\t\t\tif (enabled[styleName].length > 0) {\n\t\t\t\tcurrent = current[styleName].apply(current, enabled[styleName]);\n\t\t\t} else {\n\t\t\t\tcurrent = current[styleName];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, tmp) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => {\n\t\tif (escapeChar) {\n\t\t\tchunk.push(unescape(escapeChar));\n\t\t} else if (style) {\n\t\t\tconst str = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(chr);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMsg);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst escapeStringRegexp = require('escape-string-regexp');\nconst ansiStyles = require('ansi-styles');\nconst stdoutColor = require('supports-color').stdout;\n\nconst template = require('./templates.js');\n\nconst isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];\n\n// `color-convert` models to exclude from the Chalk API due to conflicts and such\nconst skipModels = new Set(['gray']);\n\nconst styles = Object.create(null);\n\nfunction applyOptions(obj, options) {\n\toptions = options || {};\n\n\t// Detect level if not set manually\n\tconst scLevel = stdoutColor ? stdoutColor.level : 0;\n\tobj.level = options.level === undefined ? scLevel : options.level;\n\tobj.enabled = 'enabled' in options ? options.enabled : obj.level > 0;\n}\n\nfunction Chalk(options) {\n\t// We check for this.template here since calling `chalk.constructor()`\n\t// by itself will have a `this` of a previously constructed chalk object\n\tif (!this || !(this instanceof Chalk) || this.template) {\n\t\tconst chalk = {};\n\t\tapplyOptions(chalk, options);\n\n\t\tchalk.template = function () {\n\t\t\tconst args = [].slice.call(arguments);\n\t\t\treturn chalkTag.apply(null, [chalk.template].concat(args));\n\t\t};\n\n\t\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\t\tObject.setPrototypeOf(chalk.template, chalk);\n\n\t\tchalk.template.constructor = Chalk;\n\n\t\treturn chalk.template;\n\t}\n\n\tapplyOptions(this, options);\n}\n\n// Use bright blue on Windows as the normal blue color is illegible\nif (isSimpleWindowsTerm) {\n\tansiStyles.blue.open = '\\u001B[94m';\n}\n\nfor (const key of Object.keys(ansiStyles)) {\n\tansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n\n\tstyles[key] = {\n\t\tget() {\n\t\t\tconst codes = ansiStyles[key];\n\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key);\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\treturn build.call(this, this._styles || [], true, 'visible');\n\t}\n};\n\nansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g');\nfor (const model of Object.keys(ansiStyles.color.ansi)) {\n\tif (skipModels.has(model)) {\n\t\tcontinue;\n\t}\n\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst level = this.level;\n\t\t\treturn function () {\n\t\t\t\tconst open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments);\n\t\t\t\tconst codes = {\n\t\t\t\t\topen,\n\t\t\t\t\tclose: ansiStyles.color.close,\n\t\t\t\t\tcloseRe: ansiStyles.color.closeRe\n\t\t\t\t};\n\t\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);\n\t\t\t};\n\t\t}\n\t};\n}\n\nansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g');\nfor (const model of Object.keys(ansiStyles.bgColor.ansi)) {\n\tif (skipModels.has(model)) {\n\t\tcontinue;\n\t}\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst level = this.level;\n\t\t\treturn function () {\n\t\t\t\tconst open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments);\n\t\t\t\tconst codes = {\n\t\t\t\t\topen,\n\t\t\t\t\tclose: ansiStyles.bgColor.close,\n\t\t\t\t\tcloseRe: ansiStyles.bgColor.closeRe\n\t\t\t\t};\n\t\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, styles);\n\nfunction build(_styles, _empty, key) {\n\tconst builder = function () {\n\t\treturn applyStyle.apply(builder, arguments);\n\t};\n\n\tbuilder._styles = _styles;\n\tbuilder._empty = _empty;\n\n\tconst self = this;\n\n\tObject.defineProperty(builder, 'level', {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn self.level;\n\t\t},\n\t\tset(level) {\n\t\t\tself.level = level;\n\t\t}\n\t});\n\n\tObject.defineProperty(builder, 'enabled', {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn self.enabled;\n\t\t},\n\t\tset(enabled) {\n\t\t\tself.enabled = enabled;\n\t\t}\n\t});\n\n\t// See below for fix regarding invisible grey/dim combination on Windows\n\tbuilder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey';\n\n\t// `__proto__` is used because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tbuilder.__proto__ = proto; // eslint-disable-line no-proto\n\n\treturn builder;\n}\n\nfunction applyStyle() {\n\t// Support varags, but simply cast to string in case there's only one arg\n\tconst args = arguments;\n\tconst argsLen = args.length;\n\tlet str = String(arguments[0]);\n\n\tif (argsLen === 0) {\n\t\treturn '';\n\t}\n\n\tif (argsLen > 1) {\n\t\t// Don't slice `arguments`, it prevents V8 optimizations\n\t\tfor (let a = 1; a < argsLen; a++) {\n\t\t\tstr += ' ' + args[a];\n\t\t}\n\t}\n\n\tif (!this.enabled || this.level <= 0 || !str) {\n\t\treturn this._empty ? '' : str;\n\t}\n\n\t// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n\t// see https://github.com/chalk/chalk/issues/58\n\t// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\n\tconst originalDim = ansiStyles.dim.open;\n\tif (isSimpleWindowsTerm && this.hasGrey) {\n\t\tansiStyles.dim.open = '';\n\t}\n\n\tfor (const code of this._styles.slice().reverse()) {\n\t\t// Replace any instances already present with a re-opening code\n\t\t// otherwise only the part of the string until said closing code\n\t\t// will be colored, and the rest will simply be 'plain'.\n\t\tstr = code.open + str.replace(code.closeRe, code.open) + code.close;\n\n\t\t// Close the styling before a linebreak and reopen\n\t\t// after next line to fix a bleed issue on macOS\n\t\t// https://github.com/chalk/chalk/pull/92\n\t\tstr = str.replace(/\\r?\\n/g, `${code.close}$&${code.open}`);\n\t}\n\n\t// Reset the original `dim` if we changed it to work around the Windows dimmed gray issue\n\tansiStyles.dim.open = originalDim;\n\n\treturn str;\n}\n\nfunction chalkTag(chalk, strings) {\n\tif (!Array.isArray(strings)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn [].slice.call(arguments, 1).join(' ');\n\t}\n\n\tconst args = [].slice.call(arguments, 2);\n\tconst parts = [strings.raw[0]];\n\n\tfor (let i = 1; i < strings.length; i++) {\n\t\tparts.push(String(args[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'));\n\t\tparts.push(String(strings.raw[i]));\n\t}\n\n\treturn template(chalk, parts.join(''));\n}\n\nObject.defineProperties(Chalk.prototype, styles);\n\nmodule.exports = Chalk(); // eslint-disable-line new-cap\nmodule.exports.supportsColor = stdoutColor;\nmodule.exports.default = module.exports; // For TypeScript\n","exports.quote = function (xs) {\n return xs.map(function (s) {\n if (s && typeof s === 'object') {\n return s.op.replace(/(.)/g, '\\\\$1');\n }\n else if (/[\"\\s]/.test(s) && !/'/.test(s)) {\n return \"'\" + s.replace(/(['\\\\])/g, '\\\\$1') + \"'\";\n }\n else if (/[\"'\\s]/.test(s)) {\n return '\"' + s.replace(/([\"\\\\$`!])/g, '\\\\$1') + '\"';\n }\n else {\n return String(s).replace(/([A-z]:)?([#!\"$&'()*,:;<=>?@\\[\\\\\\]^`{|}])/g, '$1\\\\$2');\n }\n }).join(' ');\n};\n\n// '<(' is process substitution operator and\n// can be parsed the same as control operator\nvar CONTROL = '(?:' + [\n '\\\\|\\\\|', '\\\\&\\\\&', ';;', '\\\\|\\\\&', '\\\\<\\\\(', '>>', '>\\\\&', '[&;()|<>]'\n].join('|') + ')';\nvar META = '|&;()<> \\\\t';\nvar BAREWORD = '(\\\\\\\\[\\'\"' + META + ']|[^\\\\s\\'\"' + META + '])+';\nvar SINGLE_QUOTE = '\"((\\\\\\\\\"|[^\"])*?)\"';\nvar DOUBLE_QUOTE = '\\'((\\\\\\\\\\'|[^\\'])*?)\\'';\n\nvar TOKEN = '';\nfor (var i = 0; i < 4; i++) {\n TOKEN += (Math.pow(16,8)*Math.random()).toString(16);\n}\n\nexports.parse = function (s, env, opts) {\n var mapped = parse(s, env, opts);\n if (typeof env !== 'function') return mapped;\n return mapped.reduce(function (acc, s) {\n if (typeof s === 'object') return acc.concat(s);\n var xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));\n if (xs.length === 1) return acc.concat(xs[0]);\n return acc.concat(xs.filter(Boolean).map(function (x) {\n if (RegExp('^' + TOKEN).test(x)) {\n return JSON.parse(x.split(TOKEN)[1]);\n }\n else return x;\n }));\n }, []);\n};\n\nfunction parse (s, env, opts) {\n var chunker = new RegExp([\n '(' + CONTROL + ')', // control chars\n '(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')*'\n ].join('|'), 'g');\n var match = s.match(chunker).filter(Boolean);\n var commented = false;\n\n if (!match) return [];\n if (!env) env = {};\n if (!opts) opts = {};\n return match.map(function (s, j) {\n if (commented) {\n return;\n }\n if (RegExp('^' + CONTROL + '$').test(s)) {\n return { op: s };\n }\n\n // Hand-written scanner/parser for Bash quoting rules:\n //\n // 1. inside single quotes, all characters are printed literally.\n // 2. inside double quotes, all characters are printed literally\n // except variables prefixed by '$' and backslashes followed by\n // either a double quote or another backslash.\n // 3. outside of any quotes, backslashes are treated as escape\n // characters and not printed (unless they are themselves escaped)\n // 4. quote context can switch mid-token if there is no whitespace\n // between the two quote contexts (e.g. all'one'\"token\" parses as\n // \"allonetoken\")\n var SQ = \"'\";\n var DQ = '\"';\n var DS = '$';\n var BS = opts.escape || '\\\\';\n var quote = false;\n var esc = false;\n var out = '';\n var isGlob = false;\n\n for (var i = 0, len = s.length; i < len; i++) {\n var c = s.charAt(i);\n isGlob = isGlob || (!quote && (c === '*' || c === '?'));\n if (esc) {\n out += c;\n esc = false;\n }\n else if (quote) {\n if (c === quote) {\n quote = false;\n }\n else if (quote == SQ) {\n out += c;\n }\n else { // Double quote\n if (c === BS) {\n i += 1;\n c = s.charAt(i);\n if (c === DQ || c === BS || c === DS) {\n out += c;\n } else {\n out += BS + c;\n }\n }\n else if (c === DS) {\n out += parseEnvVar();\n }\n else {\n out += c;\n }\n }\n }\n else if (c === DQ || c === SQ) {\n quote = c;\n }\n else if (RegExp('^' + CONTROL + '$').test(c)) {\n return { op: s };\n }\n else if (RegExp('^#$').test(c)) {\n commented = true;\n if (out.length){\n return [out, { comment: s.slice(i+1) + match.slice(j+1).join(' ') }];\n }\n return [{ comment: s.slice(i+1) + match.slice(j+1).join(' ') }];\n }\n else if (c === BS) {\n esc = true;\n }\n else if (c === DS) {\n out += parseEnvVar();\n }\n else out += c;\n }\n\n if (isGlob) return {op: 'glob', pattern: out};\n\n return out;\n\n function parseEnvVar() {\n i += 1;\n var varend, varname;\n //debugger\n if (s.charAt(i) === '{') {\n i += 1;\n if (s.charAt(i) === '}') {\n throw new Error(\"Bad substitution: \" + s.substr(i - 2, 3));\n }\n varend = s.indexOf('}', i);\n if (varend < 0) {\n throw new Error(\"Bad substitution: \" + s.substr(i));\n }\n varname = s.substr(i, varend - i);\n i = varend;\n }\n else if (/[*@#?$!_\\-]/.test(s.charAt(i))) {\n varname = s.charAt(i);\n i += 1;\n }\n else {\n varend = s.substr(i).match(/[^\\w\\d_]/);\n if (!varend) {\n varname = s.substr(i);\n i = s.length;\n } else {\n varname = s.substr(i, varend.index);\n i += varend.index - 1;\n }\n }\n return getVar(null, '', varname);\n }\n })\n // finalize parsed aruments\n .reduce(function(prev, arg){\n if (arg === undefined){\n return prev;\n }\n return prev.concat(arg);\n },[]);\n\n function getVar (_, pre, key) {\n var r = typeof env === 'function' ? env(key) : env[key];\n if (r === undefined && key != '')\n r = '';\n else if (r === undefined)\n r = '$';\n\n if (typeof r === 'object') {\n return pre + TOKEN + JSON.stringify(r) + TOKEN;\n }\n else return pre + r;\n }\n}\n","module.exports = {\n '/Applications/Atom.app/Contents/MacOS/Atom': 'atom',\n '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta':\n '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta',\n '/Applications/Brackets.app/Contents/MacOS/Brackets': 'brackets',\n '/Applications/Sublime Text.app/Contents/MacOS/Sublime Text':\n '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl',\n '/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2':\n '/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl',\n '/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text':\n '/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl',\n '/Applications/Visual Studio Code.app/Contents/MacOS/Electron': 'code',\n '/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron':\n 'code-insiders',\n '/Applications/AppCode.app/Contents/MacOS/appcode':\n '/Applications/AppCode.app/Contents/MacOS/appcode',\n '/Applications/CLion.app/Contents/MacOS/clion':\n '/Applications/CLion.app/Contents/MacOS/clion',\n '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea':\n '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea',\n '/Applications/PhpStorm.app/Contents/MacOS/phpstorm':\n '/Applications/PhpStorm.app/Contents/MacOS/phpstorm',\n '/Applications/PyCharm.app/Contents/MacOS/pycharm':\n '/Applications/PyCharm.app/Contents/MacOS/pycharm',\n '/Applications/PyCharm CE.app/Contents/MacOS/pycharm':\n '/Applications/PyCharm CE.app/Contents/MacOS/pycharm',\n '/Applications/RubyMine.app/Contents/MacOS/rubymine':\n '/Applications/RubyMine.app/Contents/MacOS/rubymine',\n '/Applications/WebStorm.app/Contents/MacOS/webstorm':\n '/Applications/WebStorm.app/Contents/MacOS/webstorm'\n}\n","module.exports = {\n atom: 'atom',\n Brackets: 'brackets',\n code: 'code',\n emacs: 'emacs',\n 'idea.sh': 'idea',\n 'phpstorm.sh': 'phpstorm',\n 'pycharm.sh': 'pycharm',\n 'rubymine.sh': 'rubymine',\n sublime_text: 'subl',\n vim: 'vim',\n 'webstorm.sh': 'webstorm'\n}\n","module.exports = [\n 'Brackets.exe',\n 'Code.exe',\n 'atom.exe',\n 'sublime_text.exe',\n 'notepad++.exe',\n 'clion.exe',\n 'clion64.exe',\n 'idea.exe',\n 'idea64.exe',\n 'phpstorm.exe',\n 'phpstorm64.exe',\n 'pycharm.exe',\n 'pycharm64.exe',\n 'rubymine.exe',\n 'rubymine64.exe',\n 'webstorm.exe',\n 'webstorm64.exe'\n]\n","const path = require('path')\nconst shellQuote = require('shell-quote')\nconst childProcess = require('child_process')\n\n// Map from full process name to binary that starts the process\n// We can't just re-use full process name, because it will spawn a new instance\n// of the app every time\nconst COMMON_EDITORS_OSX = require('./editor-info/osx')\nconst COMMON_EDITORS_LINUX = require('./editor-info/linux')\nconst COMMON_EDITORS_WIN = require('./editor-info/windows')\n\nmodule.exports = function guessEditor (specifiedEditor) {\n if (specifiedEditor) {\n return shellQuote.parse(specifiedEditor)\n }\n // We can find out which editor is currently running by:\n // `ps x` on macOS and Linux\n // `Get-Process` on Windows\n try {\n if (process.platform === 'darwin') {\n const output = childProcess.execSync('ps x').toString()\n const processNames = Object.keys(COMMON_EDITORS_OSX)\n for (let i = 0; i < processNames.length; i++) {\n const processName = processNames[i]\n if (output.indexOf(processName) !== -1) {\n return [COMMON_EDITORS_OSX[processName]]\n }\n }\n } else if (process.platform === 'win32') {\n const output = childProcess\n .execSync('powershell -Command \"Get-Process | Select-Object Path\"', {\n stdio: ['pipe', 'pipe', 'ignore']\n })\n .toString()\n const runningProcesses = output.split('\\r\\n')\n for (let i = 0; i < runningProcesses.length; i++) {\n // `Get-Process` sometimes returns empty lines\n if (!runningProcesses[i]) {\n continue\n }\n\n const fullProcessPath = runningProcesses[i].trim()\n const shortProcessName = path.basename(fullProcessPath)\n\n if (COMMON_EDITORS_WIN.indexOf(shortProcessName) !== -1) {\n return [fullProcessPath]\n }\n }\n } else if (process.platform === 'linux') {\n // --no-heading No header line\n // x List all processes owned by you\n // -o comm Need only names column\n const output = childProcess\n .execSync('ps x --no-heading -o comm --sort=comm')\n .toString()\n const processNames = Object.keys(COMMON_EDITORS_LINUX)\n for (let i = 0; i < processNames.length; i++) {\n const processName = processNames[i]\n if (output.indexOf(processName) !== -1) {\n return [COMMON_EDITORS_LINUX[processName]]\n }\n }\n }\n } catch (error) {\n // Ignore...\n }\n\n // Last resort, use old skool env vars\n if (process.env.VISUAL) {\n return [process.env.VISUAL]\n } else if (process.env.EDITOR) {\n return [process.env.EDITOR]\n }\n\n return [null]\n}\n","const path = require('path')\n\n// normalize file/line numbers into command line args for specific editors\nmodule.exports = function getArgumentsForPosition (\n editor,\n fileName,\n lineNumber,\n columnNumber = 1\n) {\n const editorBasename = path.basename(editor).replace(/\\.(exe|cmd|bat)$/i, '')\n switch (editorBasename) {\n case 'atom':\n case 'Atom':\n case 'Atom Beta':\n case 'subl':\n case 'sublime':\n case 'sublime_text':\n case 'wstorm':\n case 'charm':\n return [`${fileName}:${lineNumber}:${columnNumber}`]\n case 'notepad++':\n return ['-n' + lineNumber, fileName]\n case 'vim':\n case 'mvim':\n return [`+call cursor(${lineNumber}, ${columnNumber})`, fileName]\n case 'joe':\n return ['+' + `${lineNumber}`, fileName]\n case 'emacs':\n case 'emacsclient':\n return [`+${lineNumber}:${columnNumber}`, fileName]\n case 'rmate':\n case 'mate':\n case 'mine':\n return ['--line', lineNumber, fileName]\n case 'code':\n case 'code-insiders':\n case 'Code':\n return ['-r', '-g', `${fileName}:${lineNumber}:${columnNumber}`]\n case 'appcode':\n case 'clion':\n case 'clion64':\n case 'idea':\n case 'idea64':\n case 'phpstorm':\n case 'phpstorm64':\n case 'pycharm':\n case 'pycharm64':\n case 'rubymine':\n case 'rubymine64':\n case 'webstorm':\n case 'webstorm64':\n return ['--line', lineNumber, fileName]\n }\n\n // For all others, drop the lineNumber until we have\n // a mapping above, since providing the lineNumber incorrectly\n // can result in errors or confusing behavior.\n return [fileName]\n}\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file at\n * https://github.com/facebookincubator/create-react-app/blob/master/LICENSE\n *\n * Modified by Yuxi Evan You\n */\n\nconst fs = require('fs')\nconst os = require('os')\nconst path = require('path')\nconst chalk = require('chalk')\nconst childProcess = require('child_process')\n\nconst guessEditor = require('./guess')\nconst getArgumentsForPosition = require('./get-args')\n\nfunction wrapErrorCallback (cb) {\n return (fileName, errorMessage) => {\n console.log()\n console.log(\n chalk.red('Could not open ' + path.basename(fileName) + ' in the editor.')\n )\n if (errorMessage) {\n if (errorMessage[errorMessage.length - 1] !== '.') {\n errorMessage += '.'\n }\n console.log(\n chalk.red('The editor process exited with an error: ' + errorMessage)\n )\n }\n console.log()\n if (cb) cb(fileName, errorMessage)\n }\n}\n\nfunction isTerminalEditor (editor) {\n switch (editor) {\n case 'vim':\n case 'emacs':\n case 'nano':\n return true\n }\n return false\n}\n\nconst positionRE = /:(\\d+)(:(\\d+))?$/\nfunction parseFile (file) {\n const fileName = file.replace(positionRE, '')\n const match = file.match(positionRE)\n const lineNumber = match && match[1]\n const columnNumber = match && match[3]\n return {\n fileName,\n lineNumber,\n columnNumber\n }\n}\n\nlet _childProcess = null\n\nfunction launchEditor (file, specifiedEditor, onErrorCallback) {\n const parsed = parseFile(file)\n let { fileName } = parsed\n const { lineNumber, columnNumber } = parsed\n\n if (!fs.existsSync(fileName)) {\n return\n }\n\n if (typeof specifiedEditor === 'function') {\n onErrorCallback = specifiedEditor\n specifiedEditor = undefined\n }\n\n onErrorCallback = wrapErrorCallback(onErrorCallback)\n\n const [editor, ...args] = guessEditor(specifiedEditor)\n if (!editor) {\n onErrorCallback(fileName, null)\n return\n }\n\n if (\n process.platform === 'linux' &&\n fileName.startsWith('/mnt/') &&\n /Microsoft/i.test(os.release())\n ) {\n // Assume WSL / \"Bash on Ubuntu on Windows\" is being used, and\n // that the file exists on the Windows file system.\n // `os.release()` is \"4.4.0-43-Microsoft\" in the current release\n // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364\n // When a Windows editor is specified, interop functionality can\n // handle the path translation, but only if a relative path is used.\n fileName = path.relative('', fileName)\n }\n\n if (lineNumber) {\n const extraArgs = getArgumentsForPosition(editor, fileName, lineNumber, columnNumber)\n args.push.apply(args, extraArgs)\n } else {\n args.push(fileName)\n }\n\n if (_childProcess && isTerminalEditor(editor)) {\n // There's an existing editor process already and it's attached\n // to the terminal, so go kill it. Otherwise two separate editor\n // instances attach to the stdin/stdout which gets confusing.\n _childProcess.kill('SIGKILL')\n }\n\n if (process.platform === 'win32') {\n // On Windows, launch the editor in a shell because spawn can only\n // launch .exe files.\n _childProcess = childProcess.spawn(\n 'cmd.exe',\n ['/C', editor].concat(args),\n { stdio: 'inherit' }\n )\n } else {\n _childProcess = childProcess.spawn(editor, args, { stdio: 'inherit' })\n }\n _childProcess.on('exit', function (errorCode) {\n _childProcess = null\n\n if (errorCode) {\n onErrorCallback(fileName, '(code ' + errorCode + ')')\n }\n })\n\n _childProcess.on('error', function (error) {\n onErrorCallback(fileName, error.message)\n })\n}\n\nmodule.exports = launchEditor\n","const url = require('url')\nconst path = require('path')\nconst launch = require('launch-editor')\n\nmodule.exports = (specifiedEditor, srcRoot, onErrorCallback) => {\n if (typeof specifiedEditor === 'function') {\n onErrorCallback = specifiedEditor\n specifiedEditor = undefined\n }\n\n if (typeof srcRoot === 'function') {\n onErrorCallback = srcRoot\n srcRoot = undefined\n }\n\n srcRoot = srcRoot || process.cwd()\n\n return function launchEditorMiddleware (req, res, next) {\n const { file } = url.parse(req.url, true).query || {}\n if (!file) {\n res.statusCode = 500\n res.end(`launch-editor-middleware: required query param \"file\" is missing.`)\n } else {\n launch(path.resolve(srcRoot, file), specifiedEditor, onErrorCallback)\n res.end()\n }\n }\n}\n","import path from 'path'\nimport { Loader, Plugin, ImportKind } from 'esbuild'\nimport { KNOWN_ASSET_TYPES } from '../constants'\nimport { ResolvedConfig } from '..'\nimport {\n isRunningWithYarnPnp,\n flattenId,\n normalizePath,\n isExternalUrl\n} from '../utils'\nimport { browserExternalId } from '../plugins/resolve'\nimport { ExportsData } from '.'\n\nconst externalTypes = [\n 'css',\n // supported pre-processor types\n 'less',\n 'sass',\n 'scss',\n 'styl',\n 'stylus',\n 'pcss',\n 'postcss',\n // known SFC types\n 'vue',\n 'svelte',\n 'marko',\n 'astro',\n // JSX/TSX may be configured to be compiled differently from how esbuild\n // handles it by default, so exclude them as well\n 'jsx',\n 'tsx',\n ...KNOWN_ASSET_TYPES\n]\n\nexport function esbuildDepPlugin(\n qualified: Record<string, string>,\n exportsData: Record<string, ExportsData>,\n config: ResolvedConfig,\n ssr?: boolean\n): Plugin {\n // default resolver which prefers ESM\n const _resolve = config.createResolver({ asSrc: false })\n\n // cjs resolver that prefers Node\n const _resolveRequire = config.createResolver({\n asSrc: false,\n isRequire: true\n })\n\n const resolve = (\n id: string,\n importer: string,\n kind: ImportKind,\n resolveDir?: string\n ): Promise<string | undefined> => {\n let _importer: string\n // explicit resolveDir - this is passed only during yarn pnp resolve for\n // entries\n if (resolveDir) {\n _importer = normalizePath(path.join(resolveDir, '*'))\n } else {\n // map importer ids to file paths for correct resolution\n _importer = importer in qualified ? qualified[importer] : importer\n }\n const resolver = kind.startsWith('require') ? _resolveRequire : _resolve\n return resolver(id, _importer, undefined, ssr)\n }\n\n return {\n name: 'vite:dep-pre-bundle',\n setup(build) {\n // externalize assets and commonly known non-js file types\n build.onResolve(\n {\n filter: new RegExp(`\\\\.(` + externalTypes.join('|') + `)(\\\\?.*)?$`)\n },\n async ({ path: id, importer, kind }) => {\n const resolved = await resolve(id, importer, kind)\n if (resolved) {\n return {\n path: resolved,\n external: true\n }\n }\n }\n )\n\n function resolveEntry(id: string) {\n const flatId = flattenId(id)\n if (flatId in qualified) {\n return {\n path: flatId,\n namespace: 'dep'\n }\n }\n }\n\n build.onResolve(\n { filter: /^[\\w@][^:]/ },\n async ({ path: id, importer, kind }) => {\n // ensure esbuild uses our resolved entries\n let entry: { path: string; namespace: string } | undefined\n // if this is an entry, return entry namespace resolve result\n if (!importer) {\n if ((entry = resolveEntry(id))) return entry\n // check if this is aliased to an entry - also return entry namespace\n const aliased = await _resolve(id, undefined, true)\n if (aliased && (entry = resolveEntry(aliased))) {\n return entry\n }\n }\n\n // use vite's own resolver\n const resolved = await resolve(id, importer, kind)\n if (resolved) {\n if (resolved.startsWith(browserExternalId)) {\n return {\n path: id,\n namespace: 'browser-external'\n }\n }\n if (isExternalUrl(resolved)) {\n return {\n path: resolved,\n external: true\n }\n }\n return {\n path: path.resolve(resolved)\n }\n }\n }\n )\n\n // For entry files, we'll read it ourselves and construct a proxy module\n // to retain the entry's raw id instead of file path so that esbuild\n // outputs desired output file structure.\n // It is necessary to do the re-exporting to separate the virtual proxy\n // module from the actual module since the actual module may get\n // referenced via relative imports - if we don't separate the proxy and\n // the actual module, esbuild will create duplicated copies of the same\n // module!\n const root = path.resolve(config.root)\n build.onLoad({ filter: /.*/, namespace: 'dep' }, ({ path: id }) => {\n const entryFile = qualified[id]\n\n let relativePath = normalizePath(path.relative(root, entryFile))\n if (\n !relativePath.startsWith('./') &&\n !relativePath.startsWith('../') &&\n relativePath !== '.'\n ) {\n relativePath = `./${relativePath}`\n }\n\n let contents = ''\n const data = exportsData[id]\n const [imports, exports] = data\n if (!imports.length && !exports.length) {\n // cjs\n contents += `export default require(\"${relativePath}\");`\n } else {\n if (exports.includes('default')) {\n contents += `import d from \"${relativePath}\";export default d;`\n }\n if (\n data.hasReExports ||\n exports.length > 1 ||\n exports[0] !== 'default'\n ) {\n contents += `\\nexport * from \"${relativePath}\"`\n }\n }\n\n let ext = path.extname(entryFile).slice(1)\n if (ext === 'mjs') ext = 'js'\n return {\n loader: ext as Loader,\n contents,\n resolveDir: root\n }\n })\n\n build.onLoad(\n { filter: /.*/, namespace: 'browser-external' },\n ({ path: id }) => {\n return {\n contents:\n `export default new Proxy({}, {\n get() {\n throw new Error('Module \"${id}\" has been externalized for ` +\n `browser compatibility and cannot be accessed in client code.')\n }\n})`\n }\n }\n )\n\n // yarn 2 pnp compat\n if (isRunningWithYarnPnp) {\n build.onResolve(\n { filter: /.*/ },\n async ({ path, importer, kind, resolveDir }) => ({\n // pass along resolveDir for entries\n path: await resolve(path, importer, kind, resolveDir)\n })\n )\n build.onLoad({ filter: /.*/ }, async (args) => ({\n contents: await require('fs').promises.readFile(args.path),\n loader: 'default'\n }))\n }\n }\n }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport chalk from 'chalk'\nimport { createHash } from 'crypto'\nimport { build, BuildOptions as EsbuildBuildOptions } from 'esbuild'\nimport { ResolvedConfig } from '../config'\nimport {\n createDebugger,\n emptyDir,\n lookupFile,\n normalizePath,\n writeFile,\n flattenId,\n normalizeId\n} from '../utils'\nimport { esbuildDepPlugin } from './esbuildDepPlugin'\nimport { init, parse } from 'es-module-lexer'\nimport { scanImports } from './scan'\nimport { transformWithEsbuild } from '../plugins/esbuild'\nimport { performance } from 'perf_hooks'\n\nconst debug = createDebugger('vite:deps')\n\nexport type ExportsData = ReturnType<typeof parse> & {\n // es-module-lexer has a facade detection but isn't always accurate for our\n // use case when the module has default export\n hasReExports?: true\n}\n\nexport interface DepOptimizationOptions {\n /**\n * By default, Vite will crawl your index.html to detect dependencies that\n * need to be pre-bundled. If build.rollupOptions.input is specified, Vite\n * will crawl those entry points instead.\n *\n * If neither of these fit your needs, you can specify custom entries using\n * this option - the value should be a fast-glob pattern or array of patterns\n * (https://github.com/mrmlnc/fast-glob#basic-syntax) that are relative from\n * vite project root. This will overwrite default entries inference.\n */\n entries?: string | string[]\n /**\n * Force optimize listed dependencies (must be resolvable import paths,\n * cannot be globs).\n */\n include?: string[]\n /**\n * Do not optimize these dependencies (must be resolvable import paths,\n * cannot be globs).\n */\n exclude?: string[]\n /**\n * Options to pass to esbuild during the dep scanning and optimization\n *\n * Certain options are omitted since changing them would not be compatible\n * with Vite's dep optimization.\n *\n * - `external` is also omitted, use Vite's `optimizeDeps.exclude` option\n * - `plugins` are merged with Vite's dep plugin\n * - `keepNames` takes precedence over the deprecated `optimizeDeps.keepNames`\n *\n * https://esbuild.github.io/api\n */\n esbuildOptions?: Omit<\n EsbuildBuildOptions,\n | 'bundle'\n | 'entryPoints'\n | 'external'\n | 'write'\n | 'watch'\n | 'outdir'\n | 'outfile'\n | 'outbase'\n | 'outExtension'\n | 'metafile'\n >\n /**\n * @deprecated use `esbuildOptions.keepNames`\n */\n keepNames?: boolean\n}\n\nexport interface DepOptimizationMetadata {\n /**\n * The main hash is determined by user config and dependency lockfiles.\n * This is checked on server startup to avoid unnecessary re-bundles.\n */\n hash: string\n /**\n * The browser hash is determined by the main hash plus additional dependencies\n * discovered at runtime. This is used to invalidate browser requests to\n * optimized deps.\n */\n browserHash: string\n optimized: Record<\n string,\n {\n file: string\n src: string\n needsInterop: boolean\n }\n >\n}\n\nexport async function optimizeDeps(\n config: ResolvedConfig,\n force = config.server.force,\n asCommand = false,\n newDeps?: Record<string, string>, // missing imports encountered after server has started\n ssr?: boolean\n): Promise<DepOptimizationMetadata | null> {\n config = {\n ...config,\n command: 'build'\n }\n\n const { root, logger, cacheDir } = config\n const log = asCommand ? logger.info : debug\n\n if (!cacheDir) {\n log(`No cache directory. Skipping.`)\n return null\n }\n\n const dataPath = path.join(cacheDir, '_metadata.json')\n const mainHash = getDepHash(root, config)\n const data: DepOptimizationMetadata = {\n hash: mainHash,\n browserHash: mainHash,\n optimized: {}\n }\n\n if (!force) {\n let prevData: DepOptimizationMetadata | undefined\n try {\n prevData = JSON.parse(fs.readFileSync(dataPath, 'utf-8'))\n } catch (e) {}\n // hash is consistent, no need to re-bundle\n if (prevData && prevData.hash === data.hash) {\n log('Hash is consistent. Skipping. Use --force to override.')\n return prevData\n }\n }\n\n if (fs.existsSync(cacheDir)) {\n emptyDir(cacheDir)\n } else {\n fs.mkdirSync(cacheDir, { recursive: true })\n }\n // a hint for Node.js\n // all files in the cache directory should be recognized as ES modules\n writeFile(\n path.resolve(cacheDir, 'package.json'),\n JSON.stringify({ type: 'module' })\n )\n\n let deps: Record<string, string>, missing: Record<string, string>\n if (!newDeps) {\n ;({ deps, missing } = await scanImports(config))\n } else {\n deps = newDeps\n missing = {}\n }\n\n // update browser hash\n data.browserHash = createHash('sha256')\n .update(data.hash + JSON.stringify(deps))\n .digest('hex')\n .substr(0, 8)\n\n const missingIds = Object.keys(missing)\n if (missingIds.length) {\n throw new Error(\n `The following dependencies are imported but could not be resolved:\\n\\n ${missingIds\n .map(\n (id) =>\n `${chalk.cyan(id)} ${chalk.white.dim(\n `(imported by ${missing[id]})`\n )}`\n )\n .join(`\\n `)}\\n\\nAre they installed?`\n )\n }\n\n const include = config.optimizeDeps?.include\n if (include) {\n const resolve = config.createResolver({ asSrc: false })\n for (const id of include) {\n // normalize 'foo >bar` as 'foo > bar' to prevent same id being added\n // and for pretty printing\n const normalizedId = normalizeId(id)\n if (!deps[normalizedId]) {\n const entry = await resolve(id)\n if (entry) {\n deps[normalizedId] = entry\n } else {\n throw new Error(\n `Failed to resolve force included dependency: ${chalk.cyan(id)}`\n )\n }\n }\n }\n }\n\n const qualifiedIds = Object.keys(deps)\n\n if (!qualifiedIds.length) {\n writeFile(dataPath, JSON.stringify(data, null, 2))\n log(`No dependencies to bundle. Skipping.\\n\\n\\n`)\n return data\n }\n\n const total = qualifiedIds.length\n const maxListed = 5\n const listed = Math.min(total, maxListed)\n const extra = Math.max(0, total - maxListed)\n const depsString = chalk.yellow(\n qualifiedIds.slice(0, listed).join(`\\n `) +\n (extra > 0 ? `\\n (...and ${extra} more)` : ``)\n )\n if (!asCommand) {\n if (!newDeps) {\n // This is auto run on server start - let the user know that we are\n // pre-optimizing deps\n logger.info(\n chalk.greenBright(`Pre-bundling dependencies:\\n ${depsString}`)\n )\n logger.info(\n `(this will be run only when your dependencies or config have changed)`\n )\n }\n } else {\n logger.info(chalk.greenBright(`Optimizing dependencies:\\n ${depsString}`))\n }\n\n // esbuild generates nested directory output with lowest common ancestor base\n // this is unpredictable and makes it difficult to analyze entry / output\n // mapping. So what we do here is:\n // 1. flatten all ids to eliminate slash\n // 2. in the plugin, read the entry ourselves as virtual files to retain the\n // path.\n const flatIdDeps: Record<string, string> = {}\n const idToExports: Record<string, ExportsData> = {}\n const flatIdToExports: Record<string, ExportsData> = {}\n\n const { plugins = [], ...esbuildOptions } =\n config.optimizeDeps?.esbuildOptions ?? {}\n\n await init\n for (const id in deps) {\n const flatId = flattenId(id)\n const filePath = (flatIdDeps[flatId] = deps[id])\n const entryContent = fs.readFileSync(filePath, 'utf-8')\n let exportsData: ExportsData\n try {\n exportsData = parse(entryContent) as ExportsData\n } catch {\n debug(\n `Unable to parse dependency: ${id}. Trying again with a JSX transform.`\n )\n const transformed = await transformWithEsbuild(entryContent, filePath, {\n loader: 'jsx'\n })\n // Ensure that optimization won't fail by defaulting '.js' to the JSX parser.\n // This is useful for packages such as Gatsby.\n esbuildOptions.loader = {\n '.js': 'jsx',\n ...esbuildOptions.loader\n }\n exportsData = parse(transformed.code) as ExportsData\n }\n for (const { ss, se } of exportsData[0]) {\n const exp = entryContent.slice(ss, se)\n if (/export\\s+\\*\\s+from/.test(exp)) {\n exportsData.hasReExports = true\n }\n }\n idToExports[id] = exportsData\n flatIdToExports[flatId] = exportsData\n }\n\n const define: Record<string, string> = {\n 'process.env.NODE_ENV': JSON.stringify(config.mode)\n }\n for (const key in config.define) {\n const value = config.define[key]\n define[key] = typeof value === 'string' ? value : JSON.stringify(value)\n }\n\n const start = performance.now()\n\n const result = await build({\n absWorkingDir: process.cwd(),\n entryPoints: Object.keys(flatIdDeps),\n bundle: true,\n format: 'esm',\n target: config.build.target || undefined,\n external: config.optimizeDeps?.exclude,\n logLevel: 'error',\n splitting: true,\n sourcemap: true,\n outdir: cacheDir,\n ignoreAnnotations: true,\n metafile: true,\n define,\n plugins: [\n ...plugins,\n esbuildDepPlugin(flatIdDeps, flatIdToExports, config, ssr)\n ],\n ...esbuildOptions\n })\n\n const meta = result.metafile!\n\n // the paths in `meta.outputs` are relative to `process.cwd()`\n const cacheDirOutputPath = path.relative(process.cwd(), cacheDir)\n\n for (const id in deps) {\n const entry = deps[id]\n data.optimized[id] = {\n file: normalizePath(path.resolve(cacheDir, flattenId(id) + '.js')),\n src: entry,\n needsInterop: needsInterop(\n id,\n idToExports[id],\n meta.outputs,\n cacheDirOutputPath\n )\n }\n }\n\n writeFile(dataPath, JSON.stringify(data, null, 2))\n\n debug(`deps bundled in ${(performance.now() - start).toFixed(2)}ms`)\n return data\n}\n\n// https://github.com/vitejs/vite/issues/1724#issuecomment-767619642\n// a list of modules that pretends to be ESM but still uses `require`.\n// this causes esbuild to wrap them as CJS even when its entry appears to be ESM.\nconst KNOWN_INTEROP_IDS = new Set(['moment'])\n\nfunction needsInterop(\n id: string,\n exportsData: ExportsData,\n outputs: Record<string, any>,\n cacheDirOutputPath: string\n): boolean {\n if (KNOWN_INTEROP_IDS.has(id)) {\n return true\n }\n const [imports, exports] = exportsData\n // entry has no ESM syntax - likely CJS or UMD\n if (!exports.length && !imports.length) {\n return true\n }\n\n // if a peer dependency used require() on a ESM dependency, esbuild turns the\n // ESM dependency's entry chunk into a single default export... detect\n // such cases by checking exports mismatch, and force interop.\n const flatId = flattenId(id) + '.js'\n let generatedExports: string[] | undefined\n for (const output in outputs) {\n if (\n normalizePath(output) ===\n normalizePath(path.join(cacheDirOutputPath, flatId))\n ) {\n generatedExports = outputs[output].exports\n break\n }\n }\n\n if (\n !generatedExports ||\n (isSingleDefaultExport(generatedExports) && !isSingleDefaultExport(exports))\n ) {\n return true\n }\n return false\n}\n\nfunction isSingleDefaultExport(exports: readonly string[]) {\n return exports.length === 1 && exports[0] === 'default'\n}\n\nconst lockfileFormats = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml']\n\nfunction getDepHash(root: string, config: ResolvedConfig): string {\n let content = lookupFile(root, lockfileFormats) || ''\n // also take config into account\n // only a subset of config options that can affect dep optimization\n content += JSON.stringify(\n {\n mode: config.mode,\n root: config.root,\n resolve: config.resolve,\n assetsInclude: config.assetsInclude,\n plugins: config.plugins.map((p) => p.name),\n optimizeDeps: {\n include: config.optimizeDeps?.include,\n exclude: config.optimizeDeps?.exclude\n }\n },\n (_, value) => {\n if (typeof value === 'function' || value instanceof RegExp) {\n return value.toString()\n }\n return value\n }\n )\n return createHash('sha256').update(content).digest('hex').substr(0, 8)\n}\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n sourceURL = sourceURL || '';\n\n if (sourceRoot) {\n // This follows what Chrome does.\n if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n sourceRoot += '/';\n }\n // The spec says:\n // Line 4: An optional source root, useful for relocating source\n // files on a server or removing repeated values in the\n // “sources” entry. This value is prepended to the individual\n // entries in the “source” field.\n sourceURL = sourceRoot + sourceURL;\n }\n\n // Historically, SourceMapConsumer did not take the sourceMapURL as\n // a parameter. This mode is still somewhat supported, which is why\n // this code block is conditional. However, it's preferable to pass\n // the source map URL to SourceMapConsumer, so that this function\n // can implement the source URL resolution algorithm as outlined in\n // the spec. This block is basically the equivalent of:\n // new URL(sourceURL, sourceMapURL).toString()\n // ... except it avoids using URL, which wasn't available in the\n // older releases of node still supported by this library.\n //\n // The spec says:\n // If the sources are not absolute URLs after prepending of the\n // “sourceRoot”, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n var parsed = urlParse(sourceMapURL);\n if (!parsed) {\n throw new Error(\"sourceMapURL could not be parsed\");\n }\n if (parsed.path) {\n // Strip the last path component, but keep the \"/\".\n var index = parsed.path.lastIndexOf('/');\n if (index >= 0) {\n parsed.path = parsed.path.substring(0, index + 1);\n }\n }\n sourceURL = join(urlGenerate(parsed), sourceURL);\n }\n\n return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var sourceRelative = sourceFile;\n if (sourceRoot !== null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number is 1-based.\n * - column: Optional. the column number in the original source.\n * The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n needle.source = this._findSourceIndex(needle.source);\n if (needle.source < 0) {\n return [];\n }\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n if (sourceRoot) {\n sourceRoot = util.normalize(sourceRoot);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this._absoluteSources = this._sources.toArray().map(function (s) {\n return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n });\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this._sourceMapURL = aSourceMapURL;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source. Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n if (this._sources.has(relativeSource)) {\n return this._sources.indexOf(relativeSource);\n }\n\n // Maybe aSource is an absolute URL as returned by |sources|. In\n // this case we can't simply undo the transform.\n var i;\n for (i = 0; i < this._absoluteSources.length; ++i) {\n if (this._absoluteSources[i] == aSource) {\n return i;\n }\n }\n\n return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @param String aSourceMapURL\n * The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n smc._sourceMapURL = aSourceMapURL;\n smc._absoluteSources = smc._sources.toArray().map(function (s) {\n return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n });\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._absoluteSources.slice();\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n var index = this._findSourceIndex(aSource);\n if (index >= 0) {\n return this.sourcesContent[index];\n }\n\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + relativeSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n source = this._findSourceIndex(source);\n if (source < 0) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based. \n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = null;\n if (mapping.name) {\n name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n }\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex] || '';\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex] || '';\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n","import { SourceMapConsumer, RawSourceMap } from 'source-map'\nimport { ModuleGraph } from '../server/moduleGraph'\n\nlet offset: number\ntry {\n new Function('throw new Error(1)')()\n} catch (e) {\n // in Node 12, stack traces account for the function wrapper.\n // in Node 13 and later, the function wrapper adds two lines,\n // which must be subtracted to generate a valid mapping\n const match = /:(\\d+):\\d+\\)$/.exec(e.stack.split('\\n')[1])\n offset = match ? +match[1] - 1 : 0\n}\n\nexport function ssrRewriteStacktrace(\n stack: string,\n moduleGraph: ModuleGraph\n): string {\n return stack\n .split('\\n')\n .map((line) => {\n return line.replace(\n /^ {4}at (?:(.+?)\\s+\\()?(?:(.+?):(\\d+)(?::(\\d+))?)\\)?/,\n (input, varName, url, line, column) => {\n if (!url) return input\n\n const mod = moduleGraph.urlToModuleMap.get(url)\n const rawSourceMap = mod?.ssrTransformResult?.map\n\n if (!rawSourceMap) {\n return input\n }\n\n const consumer = new SourceMapConsumer(\n rawSourceMap as unknown as RawSourceMap\n )\n\n const pos = consumer.originalPositionFor({\n line: Number(line) - offset,\n column: Number(column),\n bias: SourceMapConsumer.LEAST_UPPER_BOUND\n })\n\n if (!pos.source) {\n return input\n }\n\n const source = `${pos.source}:${pos.line || 0}:${pos.column || 0}`\n if (!varName || varName === 'eval') {\n return ` at ${source}`\n } else {\n return ` at ${varName} (${source})`\n }\n }\n )\n })\n .join('\\n')\n}\n\nexport function rebindErrorStacktrace(e: Error, stacktrace: string): void {\n const { configurable, writable } = Object.getOwnPropertyDescriptor(\n e,\n 'stack'\n )!\n if (configurable) {\n Object.defineProperty(e, 'stack', {\n value: stacktrace,\n enumerable: true,\n configurable: true,\n writable: true\n })\n } else if (writable) {\n e.stack = stacktrace\n }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport { pathToFileURL } from 'url'\nimport { ViteDevServer } from '..'\nimport {\n dynamicImport,\n cleanUrl,\n isBuiltin,\n resolveFrom,\n unwrapId,\n usingDynamicImport\n} from '../utils'\nimport { rebindErrorStacktrace, ssrRewriteStacktrace } from './ssrStacktrace'\nimport {\n ssrExportAllKey,\n ssrModuleExportsKey,\n ssrImportKey,\n ssrImportMetaKey,\n ssrDynamicImportKey\n} from './ssrTransform'\nimport { transformRequest } from '../server/transformRequest'\n\ninterface SSRContext {\n global: NodeJS.Global\n}\n\ntype SSRModule = Record<string, any>\n\nconst pendingModules = new Map<string, Promise<SSRModule>>()\nconst pendingImports = new Map<string, string[]>()\n\nexport async function ssrLoadModule(\n url: string,\n server: ViteDevServer,\n context: SSRContext = { global },\n urlStack: string[] = []\n): Promise<SSRModule> {\n url = unwrapId(url)\n\n // when we instantiate multiple dependency modules in parallel, they may\n // point to shared modules. We need to avoid duplicate instantiation attempts\n // by register every module as pending synchronously so that all subsequent\n // request to that module are simply waiting on the same promise.\n const pending = pendingModules.get(url)\n if (pending) {\n return pending\n }\n\n const modulePromise = instantiateModule(url, server, context, urlStack)\n pendingModules.set(url, modulePromise)\n modulePromise\n .catch(() => {\n pendingImports.delete(url)\n })\n .finally(() => {\n pendingModules.delete(url)\n })\n return modulePromise\n}\n\nasync function instantiateModule(\n url: string,\n server: ViteDevServer,\n context: SSRContext = { global },\n urlStack: string[] = []\n): Promise<SSRModule> {\n const { moduleGraph } = server\n const mod = await moduleGraph.ensureEntryFromUrl(url)\n\n if (mod.ssrModule) {\n return mod.ssrModule\n }\n\n const result =\n mod.ssrTransformResult ||\n (await transformRequest(url, server, { ssr: true }))\n if (!result) {\n // TODO more info? is this even necessary?\n throw new Error(`failed to load module for ssr: ${url}`)\n }\n\n const ssrModule = {\n [Symbol.toStringTag]: 'Module'\n }\n Object.defineProperty(ssrModule, '__esModule', { value: true })\n\n // Tolerate circular imports by ensuring the module can be\n // referenced before it's been instantiated.\n mod.ssrModule = ssrModule\n\n const ssrImportMeta = {\n // The filesystem URL, matching native Node.js modules\n url: pathToFileURL(mod.file!).toString()\n }\n\n urlStack = urlStack.concat(url)\n const isCircular = (url: string) => urlStack.includes(url)\n\n // Since dynamic imports can happen in parallel, we need to\n // account for multiple pending deps and duplicate imports.\n const pendingDeps: string[] = []\n\n const ssrImport = async (dep: string) => {\n if (dep[0] !== '.' && dep[0] !== '/') {\n return nodeImport(dep, mod.file, server.config)\n }\n dep = unwrapId(dep)\n if (!isCircular(dep) && !pendingImports.get(dep)?.some(isCircular)) {\n pendingDeps.push(dep)\n if (pendingDeps.length === 1) {\n pendingImports.set(url, pendingDeps)\n }\n await ssrLoadModule(dep, server, context, urlStack)\n if (pendingDeps.length === 1) {\n pendingImports.delete(url)\n } else {\n pendingDeps.splice(pendingDeps.indexOf(dep), 1)\n }\n }\n return moduleGraph.urlToModuleMap.get(dep)?.ssrModule\n }\n\n const ssrDynamicImport = (dep: string) => {\n // #3087 dynamic import vars is ignored at rewrite import path,\n // so here need process relative path\n if (dep[0] === '.') {\n dep = path.posix.resolve(path.dirname(url), dep)\n }\n return ssrImport(dep)\n }\n\n function ssrExportAll(sourceModule: any) {\n for (const key in sourceModule) {\n if (key !== 'default') {\n Object.defineProperty(ssrModule, key, {\n enumerable: true,\n configurable: true,\n get() {\n return sourceModule[key]\n }\n })\n }\n }\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const AsyncFunction = async function () {}.constructor as typeof Function\n const initModule = new AsyncFunction(\n `global`,\n ssrModuleExportsKey,\n ssrImportMetaKey,\n ssrImportKey,\n ssrDynamicImportKey,\n ssrExportAllKey,\n result.code + `\\n//# sourceURL=${mod.url}`\n )\n await initModule(\n context.global,\n ssrModule,\n ssrImportMeta,\n ssrImport,\n ssrDynamicImport,\n ssrExportAll\n )\n } catch (e) {\n const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph)\n rebindErrorStacktrace(e, stacktrace)\n server.config.logger.error(\n `Error when evaluating SSR module ${url}:\\n${stacktrace}`,\n {\n timestamp: true,\n clear: server.config.clearScreen,\n error: e\n }\n )\n throw e\n }\n\n return Object.freeze(ssrModule)\n}\n\n// In node@12+ we can use dynamic import to load CJS and ESM\nasync function nodeImport(\n id: string,\n importer: string | null,\n config: ViteDevServer['config']\n) {\n let url: string\n // `resolve` doesn't handle `node:` builtins, so handle them directly\n if (id.startsWith('node:') || isBuiltin(id)) {\n url = id\n } else {\n url = resolve(id, importer, config.root, !!config.resolve.preserveSymlinks)\n if (usingDynamicImport) {\n url = pathToFileURL(url).toString()\n }\n }\n const mod = await dynamicImport(url)\n return proxyESM(id, mod)\n}\n\n// rollup-style default import interop for cjs\nfunction proxyESM(id: string, mod: any) {\n const defaultExport = mod.__esModule\n ? mod.default\n : mod.default\n ? mod.default\n : mod\n return new Proxy(mod, {\n get(mod, prop) {\n if (prop === 'default') return defaultExport\n return mod[prop]\n }\n })\n}\n\nconst resolveCache = new Map<string, string>()\n\nfunction resolve(\n id: string,\n importer: string | null,\n root: string,\n preserveSymlinks: boolean\n) {\n const key = id + importer + root\n const cached = resolveCache.get(key)\n if (cached) {\n return cached\n }\n const resolveDir =\n importer && fs.existsSync(cleanUrl(importer))\n ? path.dirname(importer)\n : root\n const resolved = resolveFrom(id, resolveDir, preserveSymlinks, true)\n resolveCache.set(key, resolved)\n return resolved\n}\n","import chalk from 'chalk'\nimport { optimizeDeps } from '.'\nimport { ViteDevServer } from '..'\nimport { resolveSSRExternal } from '../ssr/ssrExternal'\n\n/**\n * The amount to wait for requests to register newly found dependencies before triggering\n * a re-bundle + page reload\n */\nconst debounceMs = 100\n\nexport function createMissingImporterRegisterFn(\n server: ViteDevServer\n): (id: string, resolved: string, ssr?: boolean) => void {\n const { logger } = server.config\n let knownOptimized = server._optimizeDepsMetadata!.optimized\n let currentMissing: Record<string, string> = {}\n let handle: NodeJS.Timeout\n\n let pendingResolve: (() => void) | null = null\n\n async function rerun(ssr: boolean | undefined) {\n const newDeps = currentMissing\n currentMissing = {}\n\n logger.info(\n chalk.yellow(\n `new dependencies found: ${Object.keys(newDeps).join(\n ', '\n )}, updating...`\n ),\n {\n timestamp: true\n }\n )\n\n for (const id in knownOptimized) {\n newDeps[id] = knownOptimized[id].src\n }\n\n try {\n // Nullify previous metadata so that the resolver won't\n // resolve to optimized files during the optimizer re-run\n server._isRunningOptimizer = true\n server._optimizeDepsMetadata = null\n\n const newData = (server._optimizeDepsMetadata = await optimizeDeps(\n server.config,\n true,\n false,\n newDeps,\n ssr\n ))\n knownOptimized = newData!.optimized\n\n // update ssr externals\n server._ssrExternals = resolveSSRExternal(\n server.config,\n Object.keys(knownOptimized)\n )\n\n logger.info(\n chalk.greenBright(`✨ dependencies updated, reloading page...`),\n { timestamp: true }\n )\n } catch (e) {\n logger.error(\n chalk.red(`error while updating dependencies:\\n${e.stack}`),\n { timestamp: true, error: e }\n )\n } finally {\n server._isRunningOptimizer = false\n pendingResolve && pendingResolve()\n server._pendingReload = pendingResolve = null\n }\n\n // Cached transform results have stale imports (resolved to\n // old locations) so they need to be invalidated before the page is\n // reloaded.\n server.moduleGraph.invalidateAll()\n\n server.ws.send({\n type: 'full-reload',\n path: '*'\n })\n }\n\n return function registerMissingImport(\n id: string,\n resolved: string,\n ssr?: boolean\n ) {\n if (!knownOptimized[id]) {\n currentMissing[id] = resolved\n if (handle) clearTimeout(handle)\n handle = setTimeout(() => rerun(ssr), debounceMs)\n server._pendingReload = new Promise((r) => {\n pendingResolve = r\n })\n }\n }\n}\n","import fs from 'fs'\nimport { dirname } from 'path'\nimport { join } from 'path'\n\n// https://github.com/vitejs/vite/issues/2820#issuecomment-812495079\nconst ROOT_FILES = [\n // '.git',\n\n // https://pnpm.js.org/workspaces/\n 'pnpm-workspace.yaml'\n\n // https://rushjs.io/pages/advanced/config_files/\n // 'rush.json',\n\n // https://nx.dev/latest/react/getting-started/nx-setup\n // 'workspace.json',\n // 'nx.json'\n]\n\n// npm: https://docs.npmjs.com/cli/v7/using-npm/workspaces#installing-workspaces\n// yarn: https://classic.yarnpkg.com/en/docs/workspaces/#toc-how-to-use-it\nfunction hasWorkspacePackageJSON(root: string): boolean {\n const path = join(root, 'package.json')\n try {\n fs.accessSync(path, fs.constants.R_OK)\n } catch {\n return false\n }\n const content = JSON.parse(fs.readFileSync(path, 'utf-8')) || {}\n return !!content.workspaces\n}\n\nfunction hasRootFile(root: string): boolean {\n return ROOT_FILES.some((file) => fs.existsSync(join(root, file)))\n}\n\nfunction hasPackageJSON(root: string) {\n const path = join(root, 'package.json')\n return fs.existsSync(path)\n}\n\n/**\n * Search up for the nearest `package.json`\n */\nexport function searchForPackageRoot(current: string, root = current): string {\n if (hasPackageJSON(current)) return current\n\n const dir = dirname(current)\n // reach the fs root\n if (!dir || dir === current) return root\n\n return searchForPackageRoot(dir, root)\n}\n\n/**\n * Search up for the nearest workspace root\n */\nexport function searchForWorkspaceRoot(\n current: string,\n root = searchForPackageRoot(current)\n): string {\n if (hasRootFile(current)) return current\n if (hasWorkspacePackageJSON(current)) return current\n\n const dir = dirname(current)\n // reach the fs root\n if (!dir || dir === current) return root\n\n return searchForWorkspaceRoot(dir, root)\n}\n","import fs from 'fs'\nimport path from 'path'\nimport * as net from 'net'\nimport * as http from 'http'\nimport * as https from 'https'\nimport connect from 'connect'\nimport corsMiddleware from 'cors'\nimport chalk from 'chalk'\nimport { AddressInfo } from 'net'\nimport chokidar from 'chokidar'\nimport { resolveHttpsConfig, resolveHttpServer, httpServerStart } from './http'\nimport { resolveConfig, InlineConfig, ResolvedConfig } from '../config'\nimport { createPluginContainer, PluginContainer } from './pluginContainer'\nimport { FSWatcher, WatchOptions } from 'types/chokidar'\nimport { createWebSocketServer, WebSocketServer } from './ws'\nimport { baseMiddleware } from './middlewares/base'\nimport { proxyMiddleware, ProxyOptions } from './middlewares/proxy'\nimport { spaFallbackMiddleware } from './middlewares/spaFallback'\nimport { transformMiddleware } from './middlewares/transform'\nimport {\n createDevHtmlTransformFn,\n indexHtmlMiddleware\n} from './middlewares/indexHtml'\nimport {\n serveRawFsMiddleware,\n servePublicMiddleware,\n serveStaticMiddleware\n} from './middlewares/static'\nimport { timeMiddleware } from './middlewares/time'\nimport { ModuleGraph, ModuleNode } from './moduleGraph'\nimport { Connect } from 'types/connect'\nimport { ensureLeadingSlash, normalizePath } from '../utils'\nimport { errorMiddleware, prepareError } from './middlewares/error'\nimport { handleHMRUpdate, HmrOptions, handleFileAddUnlink } from './hmr'\nimport { openBrowser } from './openBrowser'\nimport launchEditorMiddleware from 'launch-editor-middleware'\nimport {\n TransformOptions,\n TransformResult,\n transformRequest\n} from './transformRequest'\nimport {\n transformWithEsbuild,\n ESBuildTransformResult\n} from '../plugins/esbuild'\nimport { TransformOptions as EsbuildTransformOptions } from 'esbuild'\nimport { DepOptimizationMetadata, optimizeDeps } from '../optimizer'\nimport { ssrLoadModule } from '../ssr/ssrModuleLoader'\nimport { resolveSSRExternal } from '../ssr/ssrExternal'\nimport {\n rebindErrorStacktrace,\n ssrRewriteStacktrace\n} from '../ssr/ssrStacktrace'\nimport { createMissingImporterRegisterFn } from '../optimizer/registerMissing'\nimport { resolveHostname } from '../utils'\nimport { searchForWorkspaceRoot } from './searchRoot'\nimport { CLIENT_DIR } from '../constants'\nimport { printHttpServerUrls } from '../logger'\n\nexport { searchForWorkspaceRoot } from './searchRoot'\n\nexport interface ServerOptions {\n host?: string | boolean\n port?: number\n /**\n * Enable TLS + HTTP/2.\n * Note: this downgrades to TLS only when the proxy option is also used.\n */\n https?: boolean | https.ServerOptions\n /**\n * Open browser window on startup\n */\n open?: boolean | string\n /**\n * Force dep pre-optimization regardless of whether deps have changed.\n */\n force?: boolean\n /**\n * Configure HMR-specific options (port, host, path & protocol)\n */\n hmr?: HmrOptions | boolean\n /**\n * chokidar watch options\n * https://github.com/paulmillr/chokidar#api\n */\n watch?: WatchOptions\n /**\n * Configure custom proxy rules for the dev server. Expects an object\n * of `{ key: options }` pairs.\n * Uses [`http-proxy`](https://github.com/http-party/node-http-proxy).\n * Full options [here](https://github.com/http-party/node-http-proxy#options).\n *\n * Example `vite.config.js`:\n * ``` js\n * module.exports = {\n * proxy: {\n * // string shorthand\n * '/foo': 'http://localhost:4567/foo',\n * // with options\n * '/api': {\n * target: 'http://jsonplaceholder.typicode.com',\n * changeOrigin: true,\n * rewrite: path => path.replace(/^\\/api/, '')\n * }\n * }\n * }\n * ```\n */\n proxy?: Record<string, string | ProxyOptions>\n /**\n * Configure CORS for the dev server.\n * Uses https://github.com/expressjs/cors.\n * Set to `true` to allow all methods from any origin, or configure separately\n * using an object.\n */\n cors?: CorsOptions | boolean\n /**\n * If enabled, vite will exit if specified port is already in use\n */\n strictPort?: boolean\n /**\n * Create Vite dev server to be used as a middleware in an existing server\n */\n middlewareMode?: boolean | 'html' | 'ssr'\n /**\n * Prepend this folder to http requests, for use when proxying vite as a subfolder\n * Should start and end with the `/` character\n */\n base?: string\n /**\n * Options for files served via '/\\@fs/'.\n */\n fs?: FileSystemServeOptions\n /**\n * Origin for the generated asset URLs.\n */\n origin?: string\n}\n\nexport interface ResolvedServerOptions extends ServerOptions {\n fs: Required<FileSystemServeOptions>\n}\n\nexport interface FileSystemServeOptions {\n /**\n * Strictly restrict file accessing outside of allowing paths.\n *\n * Set to `false` to disable the warning\n * Default to false at this moment, will enabled by default in the future versions.\n *\n * @experimental\n * @default undefined\n */\n strict?: boolean | undefined\n\n /**\n * Restrict accessing files outside the allowed directories.\n *\n * Accepts absolute path or a path relative to project root.\n * Will try to search up for workspace root by default.\n *\n * @experimental\n */\n allow?: string[]\n}\n\n/**\n * https://github.com/expressjs/cors#configuration-options\n */\nexport interface CorsOptions {\n origin?:\n | CorsOrigin\n | ((origin: string, cb: (err: Error, origins: CorsOrigin) => void) => void)\n methods?: string | string[]\n allowedHeaders?: string | string[]\n exposedHeaders?: string | string[]\n credentials?: boolean\n maxAge?: number\n preflightContinue?: boolean\n optionsSuccessStatus?: number\n}\n\nexport type CorsOrigin = boolean | string | RegExp | (string | RegExp)[]\n\nexport type ServerHook = (\n server: ViteDevServer\n) => (() => void) | void | Promise<(() => void) | void>\n\nexport interface ViteDevServer {\n /**\n * The resolved vite config object\n */\n config: ResolvedConfig\n /**\n * A connect app instance.\n * - Can be used to attach custom middlewares to the dev server.\n * - Can also be used as the handler function of a custom http server\n * or as a middleware in any connect-style Node.js frameworks\n *\n * https://github.com/senchalabs/connect#use-middleware\n */\n middlewares: Connect.Server\n /**\n * @deprecated use `server.middlewares` instead\n */\n app: Connect.Server\n /**\n * native Node http server instance\n * will be null in middleware mode\n */\n httpServer: http.Server | null\n /**\n * chokidar watcher instance\n * https://github.com/paulmillr/chokidar#api\n */\n watcher: FSWatcher\n /**\n * web socket server with `send(payload)` method\n */\n ws: WebSocketServer\n /**\n * Rollup plugin container that can run plugin hooks on a given file\n */\n pluginContainer: PluginContainer\n /**\n * Module graph that tracks the import relationships, url to file mapping\n * and hmr state.\n */\n moduleGraph: ModuleGraph\n /**\n * Programmatically resolve, load and transform a URL and get the result\n * without going through the http request pipeline.\n */\n transformRequest(\n url: string,\n options?: TransformOptions\n ): Promise<TransformResult | null>\n /**\n * Apply vite built-in HTML transforms and any plugin HTML transforms.\n */\n transformIndexHtml(\n url: string,\n html: string,\n originalUrl?: string\n ): Promise<string>\n /**\n * Util for transforming a file with esbuild.\n * Can be useful for certain plugins.\n *\n * @deprecated import `transformWithEsbuild` from `vite` instead\n */\n transformWithEsbuild(\n code: string,\n filename: string,\n options?: EsbuildTransformOptions,\n inMap?: object\n ): Promise<ESBuildTransformResult>\n /**\n * Load a given URL as an instantiated module for SSR.\n */\n ssrLoadModule(url: string): Promise<Record<string, any>>\n /**\n * Fix ssr error stacktrace\n */\n ssrFixStacktrace(e: Error): void\n /**\n * Start the server.\n */\n listen(port?: number, isRestart?: boolean): Promise<ViteDevServer>\n /**\n * Stop the server.\n */\n close(): Promise<void>\n /**\n * Print server urls\n */\n printUrls(): void\n /**\n * @internal\n */\n _optimizeDepsMetadata: DepOptimizationMetadata | null\n /**\n * Deps that are externalized\n * @internal\n */\n _ssrExternals: string[] | null\n /**\n * @internal\n */\n _globImporters: Record<\n string,\n {\n module: ModuleNode\n importGlobs: {\n base: string\n pattern: string\n }[]\n }\n >\n /**\n * @internal\n */\n _isRunningOptimizer: boolean\n /**\n * @internal\n */\n _registerMissingImport:\n | ((id: string, resolved: string, ssr: boolean | undefined) => void)\n | null\n /**\n * @internal\n */\n _pendingReload: Promise<void> | null\n /**\n * @internal\n */\n _pendingRequests: Record<string, Promise<TransformResult | null> | null>\n}\n\nexport async function createServer(\n inlineConfig: InlineConfig = {}\n): Promise<ViteDevServer> {\n const config = await resolveConfig(inlineConfig, 'serve', 'development')\n const root = config.root\n const serverConfig = config.server\n const httpsOptions = await resolveHttpsConfig(config)\n let { middlewareMode } = serverConfig\n if (middlewareMode === true) {\n middlewareMode = 'ssr'\n }\n\n const middlewares = connect() as Connect.Server\n const httpServer = middlewareMode\n ? null\n : await resolveHttpServer(serverConfig, middlewares, httpsOptions)\n const ws = createWebSocketServer(httpServer, config, httpsOptions)\n\n const { ignored = [], ...watchOptions } = serverConfig.watch || {}\n const watcher = chokidar.watch(path.resolve(root), {\n ignored: [\n '**/node_modules/**',\n '**/.git/**',\n ...(Array.isArray(ignored) ? ignored : [ignored])\n ],\n ignoreInitial: true,\n ignorePermissionErrors: true,\n disableGlobbing: true,\n ...watchOptions\n }) as FSWatcher\n\n const plugins = config.plugins\n const container = await createPluginContainer(config, watcher)\n const moduleGraph = new ModuleGraph(container)\n const closeHttpServer = createServerCloseFn(httpServer)\n\n // eslint-disable-next-line prefer-const\n let exitProcess: () => void\n\n const server: ViteDevServer = {\n config,\n middlewares,\n get app() {\n config.logger.warn(\n `ViteDevServer.app is deprecated. Use ViteDevServer.middlewares instead.`\n )\n return middlewares\n },\n httpServer,\n watcher,\n pluginContainer: container,\n ws,\n moduleGraph,\n transformWithEsbuild,\n transformRequest(url, options) {\n return transformRequest(url, server, options)\n },\n transformIndexHtml: null!, // to be immediately set\n ssrLoadModule(url) {\n if (!server._ssrExternals) {\n server._ssrExternals = resolveSSRExternal(\n config,\n server._optimizeDepsMetadata\n ? Object.keys(server._optimizeDepsMetadata.optimized)\n : []\n )\n }\n return ssrLoadModule(url, server)\n },\n ssrFixStacktrace(e) {\n if (e.stack) {\n const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph)\n rebindErrorStacktrace(e, stacktrace)\n }\n },\n listen(port?: number, isRestart?: boolean) {\n return startServer(server, port, isRestart)\n },\n async close() {\n process.off('SIGTERM', exitProcess)\n\n if (!middlewareMode && process.env.CI !== 'true') {\n process.stdin.off('end', exitProcess)\n }\n\n await Promise.all([\n watcher.close(),\n ws.close(),\n container.close(),\n closeHttpServer()\n ])\n },\n printUrls() {\n if (httpServer) {\n printHttpServerUrls(httpServer, config)\n } else {\n throw new Error('cannot print server URLs in middleware mode.')\n }\n },\n _optimizeDepsMetadata: null,\n _ssrExternals: null,\n _globImporters: Object.create(null),\n _isRunningOptimizer: false,\n _registerMissingImport: null,\n _pendingReload: null,\n _pendingRequests: Object.create(null)\n }\n\n server.transformIndexHtml = createDevHtmlTransformFn(server)\n\n exitProcess = async () => {\n try {\n await server.close()\n } finally {\n process.exit(0)\n }\n }\n\n process.once('SIGTERM', exitProcess)\n\n if (!middlewareMode && process.env.CI !== 'true') {\n process.stdin.on('end', exitProcess)\n }\n\n watcher.on('change', async (file) => {\n file = normalizePath(file)\n // invalidate module graph cache on file change\n moduleGraph.onFileChange(file)\n if (serverConfig.hmr !== false) {\n try {\n await handleHMRUpdate(file, server)\n } catch (err) {\n ws.send({\n type: 'error',\n err: prepareError(err)\n })\n }\n }\n })\n\n watcher.on('add', (file) => {\n handleFileAddUnlink(normalizePath(file), server)\n })\n\n watcher.on('unlink', (file) => {\n handleFileAddUnlink(normalizePath(file), server, true)\n })\n\n if (!middlewareMode && httpServer) {\n httpServer.once('listening', () => {\n // update actual port since this may be different from initial value\n serverConfig.port = (httpServer.address() as AddressInfo).port\n })\n }\n\n // apply server configuration hooks from plugins\n const postHooks: ((() => void) | void)[] = []\n for (const plugin of plugins) {\n if (plugin.configureServer) {\n postHooks.push(await plugin.configureServer(server))\n }\n }\n\n // Internal middlewares ------------------------------------------------------\n\n // request timer\n if (process.env.DEBUG) {\n middlewares.use(timeMiddleware(root))\n }\n\n // cors (enabled by default)\n const { cors } = serverConfig\n if (cors !== false) {\n middlewares.use(corsMiddleware(typeof cors === 'boolean' ? {} : cors))\n }\n\n // proxy\n const { proxy } = serverConfig\n if (proxy) {\n middlewares.use(proxyMiddleware(httpServer, config))\n }\n\n // base\n if (config.base !== '/') {\n middlewares.use(baseMiddleware(server))\n }\n\n // open in editor support\n middlewares.use('/__open-in-editor', launchEditorMiddleware())\n\n // hmr reconnect ping\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n middlewares.use('/__vite_ping', function viteHMRPingMiddleware(_, res) {\n res.end('pong')\n })\n\n // serve static files under /public\n // this applies before the transform middleware so that these files are served\n // as-is without transforms.\n if (config.publicDir) {\n middlewares.use(servePublicMiddleware(config.publicDir))\n }\n\n // main transform middleware\n middlewares.use(transformMiddleware(server))\n\n // serve static files\n middlewares.use(serveRawFsMiddleware(server))\n middlewares.use(serveStaticMiddleware(root, config))\n\n // spa fallback\n if (!middlewareMode || middlewareMode === 'html') {\n middlewares.use(spaFallbackMiddleware(root))\n }\n\n // run post config hooks\n // This is applied before the html middleware so that user middleware can\n // serve custom content instead of index.html.\n postHooks.forEach((fn) => fn && fn())\n\n if (!middlewareMode || middlewareMode === 'html') {\n // transform index.html\n middlewares.use(indexHtmlMiddleware(server))\n // handle 404s\n // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`\n middlewares.use(function vite404Middleware(_, res) {\n res.statusCode = 404\n res.end()\n })\n }\n\n // error handler\n middlewares.use(errorMiddleware(server, !!middlewareMode))\n\n const runOptimize = async () => {\n if (config.cacheDir) {\n server._isRunningOptimizer = true\n try {\n server._optimizeDepsMetadata = await optimizeDeps(config)\n } finally {\n server._isRunningOptimizer = false\n }\n server._registerMissingImport = createMissingImporterRegisterFn(server)\n }\n }\n\n if (!middlewareMode && httpServer) {\n let isOptimized = false\n // overwrite listen to run optimizer before server start\n const listen = httpServer.listen.bind(httpServer)\n httpServer.listen = (async (port: number, ...args: any[]) => {\n if (!isOptimized) {\n try {\n await container.buildStart({})\n await runOptimize()\n isOptimized = true\n } catch (e) {\n httpServer.emit('error', e)\n return\n }\n }\n return listen(port, ...args)\n }) as any\n } else {\n await container.buildStart({})\n await runOptimize()\n }\n\n return server\n}\n\nasync function startServer(\n server: ViteDevServer,\n inlinePort?: number,\n isRestart: boolean = false\n): Promise<ViteDevServer> {\n const httpServer = server.httpServer\n if (!httpServer) {\n throw new Error('Cannot call server.listen in middleware mode.')\n }\n\n const options = server.config.server\n const port = inlinePort || options.port || 3000\n const hostname = resolveHostname(options.host)\n\n const protocol = options.https ? 'https' : 'http'\n const info = server.config.logger.info\n const base = server.config.base\n\n const serverPort = await httpServerStart(httpServer, {\n port,\n strictPort: options.strictPort,\n host: hostname.host,\n logger: server.config.logger\n })\n\n // @ts-ignore\n const profileSession = global.__vite_profile_session\n if (profileSession) {\n profileSession.post('Profiler.stop', (err: any, { profile }: any) => {\n // Write profile to disk, upload, etc.\n if (!err) {\n const outPath = path.resolve('./vite-profile.cpuprofile')\n fs.writeFileSync(outPath, JSON.stringify(profile))\n info(\n chalk.yellow(` CPU profile written to ${chalk.white.dim(outPath)}\\n`)\n )\n } else {\n throw err\n }\n })\n }\n\n if (options.open && !isRestart) {\n const path = typeof options.open === 'string' ? options.open : base\n openBrowser(\n path.startsWith('http')\n ? path\n : `${protocol}://${hostname.name}:${serverPort}${path}`,\n true,\n server.config.logger\n )\n }\n\n return server\n}\n\nfunction createServerCloseFn(server: http.Server | null) {\n if (!server) {\n return () => {}\n }\n\n let hasListened = false\n const openSockets = new Set<net.Socket>()\n\n server.on('connection', (socket) => {\n openSockets.add(socket)\n socket.on('close', () => {\n openSockets.delete(socket)\n })\n })\n\n server.once('listening', () => {\n hasListened = true\n })\n\n return () =>\n new Promise<void>((resolve, reject) => {\n openSockets.forEach((s) => s.destroy())\n if (hasListened) {\n server.close((err) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n } else {\n resolve()\n }\n })\n}\n\nfunction resolvedAllowDir(root: string, dir: string): string {\n return ensureLeadingSlash(normalizePath(path.resolve(root, dir)))\n}\n\nexport function resolveServerOptions(\n root: string,\n raw?: ServerOptions\n): ResolvedServerOptions {\n const server = raw || {}\n let allowDirs = server.fs?.allow\n\n if (!allowDirs) {\n allowDirs = [searchForWorkspaceRoot(root)]\n }\n\n allowDirs = allowDirs.map((i) => resolvedAllowDir(root, i))\n\n // only push client dir when vite itself is outside-of-root\n const resolvedClientDir = resolvedAllowDir(root, CLIENT_DIR)\n if (!allowDirs.some((i) => resolvedClientDir.startsWith(i))) {\n allowDirs.push(resolvedClientDir)\n }\n\n server.fs = {\n // TODO: make strict by default\n strict: server.fs?.strict,\n allow: allowDirs\n }\n return server as ResolvedServerOptions\n}\n","const noop = () => null;\nfunction matches(pattern, importee) {\n if (pattern instanceof RegExp) {\n return pattern.test(importee);\n }\n if (importee.length < pattern.length) {\n return false;\n }\n if (importee === pattern) {\n return true;\n }\n const importeeStartsWithKey = importee.indexOf(pattern) === 0;\n const importeeHasSlashAfterKey = importee.substring(pattern.length)[0] === '/';\n return importeeStartsWithKey && importeeHasSlashAfterKey;\n}\nfunction normalizeId(id) {\n return id;\n}\nfunction getEntries({ entries }) {\n if (!entries) {\n return [];\n }\n if (Array.isArray(entries)) {\n return entries;\n }\n return Object.entries(entries).map(([key, value]) => {\n return { find: key, replacement: value };\n });\n}\nfunction getCustomResolver({ customResolver }, options) {\n if (typeof customResolver === 'function') {\n return customResolver;\n }\n if (customResolver && typeof customResolver.resolveId === 'function') {\n return customResolver.resolveId;\n }\n if (typeof options.customResolver === 'function') {\n return options.customResolver;\n }\n if (options.customResolver && typeof options.customResolver.resolveId === 'function') {\n return options.customResolver.resolveId;\n }\n return null;\n}\nfunction alias(options = {}) {\n const entries = getEntries(options);\n if (entries.length === 0) {\n return {\n name: 'alias',\n resolveId: noop\n };\n }\n return {\n name: 'alias',\n buildStart(inputOptions) {\n return Promise.all([...entries, options].map(({ customResolver }) => customResolver &&\n typeof customResolver === 'object' &&\n typeof customResolver.buildStart === 'function' &&\n customResolver.buildStart.call(this, inputOptions))).then(() => {\n // enforce void return value\n });\n },\n resolveId(importee, importer) {\n const importeeId = normalizeId(importee);\n const importerId = normalizeId(importer);\n // First match is supposed to be the correct one\n const matchedEntry = entries.find((entry) => matches(entry.find, importeeId));\n if (!matchedEntry || !importerId) {\n return null;\n }\n const updatedId = normalizeId(importeeId.replace(matchedEntry.find, matchedEntry.replacement));\n const customResolver = getCustomResolver(matchedEntry, options);\n if (customResolver) {\n return customResolver.call(this, updatedId, importerId, {});\n }\n return this.resolve(updatedId, importer, { skipSelf: true }).then((resolved) => {\n let finalResult = resolved;\n if (!finalResult) {\n finalResult = { id: updatedId };\n }\n return finalResult;\n });\n }\n };\n}\n\nexport default alias;\n","/**\n * https://github.com/rollup/plugins/blob/master/packages/json/src/index.js\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file at\n * https://github.com/rollup/plugins/blob/master/LICENSE\n */\n\nimport { dataToEsm } from '@rollup/pluginutils'\nimport { Plugin } from 'rollup'\nimport { SPECIAL_QUERY_RE } from '../constants'\n\nexport interface JsonOptions {\n /**\n * Generate a named export for every property of the JSON object\n * @default true\n */\n namedExports?: boolean\n /**\n * Generate performant output as JSON.parse(\"stringified\").\n * Enabling this will disable namedExports.\n * @default false\n */\n stringify?: boolean\n}\n\n// Custom json filter for vite\nconst jsonExtRE = /\\.json($|\\?)(?!commonjs-(proxy|external))/\n\nexport function jsonPlugin(\n options: JsonOptions = {},\n isBuild: boolean\n): Plugin {\n return {\n name: 'vite:json',\n\n transform(json, id) {\n if (!jsonExtRE.test(id)) return null\n if (SPECIAL_QUERY_RE.test(id)) return null\n\n try {\n if (options.stringify) {\n if (isBuild) {\n return {\n // during build, parse then double-stringify to remove all\n // unnecessary whitespaces to reduce bundle size.\n code: `export default JSON.parse(${JSON.stringify(\n JSON.stringify(JSON.parse(json))\n )})`,\n map: { mappings: '' }\n }\n } else {\n return `export default JSON.parse(${JSON.stringify(json)})`\n }\n }\n\n const parsed = JSON.parse(json)\n return {\n code: dataToEsm(parsed, {\n preferConst: true,\n namedExports: options.namedExports\n }),\n map: { mappings: '' }\n }\n } catch (e) {\n const errorMessageList = /[\\d]+/.exec(e.message)\n const position = errorMessageList && parseInt(errorMessageList[0], 10)\n const msg = position\n ? `, invalid JSON syntax found at line ${position}`\n : `.`\n this.error(`Failed to parse JSON file` + msg, e.idx)\n }\n }\n }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport { Plugin } from '../plugin'\nimport { ResolvedConfig } from '../config'\nimport chalk from 'chalk'\nimport MagicString from 'magic-string'\nimport { init, parse as parseImports, ImportSpecifier } from 'es-module-lexer'\nimport { isCSSRequest, isDirectCSSRequest } from './css'\nimport {\n isBuiltin,\n cleanUrl,\n createDebugger,\n generateCodeFrame,\n injectQuery,\n isDataUrl,\n isExternalUrl,\n isJSRequest,\n prettifyUrl,\n timeFrom,\n normalizePath,\n removeImportQuery,\n unwrapId\n} from '../utils'\nimport {\n debugHmr,\n handlePrunedModules,\n lexAcceptedHmrDeps\n} from '../server/hmr'\nimport {\n FS_PREFIX,\n CLIENT_DIR,\n CLIENT_PUBLIC_PATH,\n DEP_VERSION_RE,\n VALID_ID_PREFIX,\n NULL_BYTE_PLACEHOLDER\n} from '../constants'\nimport { ViteDevServer } from '..'\nimport { checkPublicFile } from './asset'\nimport { parse as parseJS } from 'acorn'\nimport type { Node } from 'estree'\nimport { transformImportGlob } from '../importGlob'\nimport { makeLegalIdentifier } from '@rollup/pluginutils'\nimport { shouldExternalizeForSSR } from '../ssr/ssrExternal'\nimport { performance } from 'perf_hooks'\nimport { transformRequest } from '../server/transformRequest'\n\nconst isDebug = !!process.env.DEBUG\nconst debug = createDebugger('vite:import-analysis')\n\nconst clientDir = normalizePath(CLIENT_DIR)\n\nconst skipRE = /\\.(map|json)$/\nconst canSkip = (id: string) => skipRE.test(id) || isDirectCSSRequest(id)\n\nfunction isExplicitImportRequired(url: string) {\n return !isJSRequest(cleanUrl(url)) && !isCSSRequest(url)\n}\n\nfunction markExplicitImport(url: string) {\n if (isExplicitImportRequired(url)) {\n return injectQuery(url, 'import')\n }\n return url\n}\n\n/**\n * Server-only plugin that lexes, resolves, rewrites and analyzes url imports.\n *\n * - Imports are resolved to ensure they exist on disk\n *\n * - Lexes HMR accept calls and updates import relationships in the module graph\n *\n * - Bare module imports are resolved (by @rollup-plugin/node-resolve) to\n * absolute file paths, e.g.\n *\n * ```js\n * import 'foo'\n * ```\n * is rewritten to\n * ```js\n * import '/@fs//project/node_modules/foo/dist/foo.js'\n * ```\n *\n * - CSS imports are appended with `.js` since both the js module and the actual\n * css (referenced via <link>) may go through the transform pipeline:\n *\n * ```js\n * import './style.css'\n * ```\n * is rewritten to\n * ```js\n * import './style.css.js'\n * ```\n */\nexport function importAnalysisPlugin(config: ResolvedConfig): Plugin {\n const { root, base } = config\n const clientPublicPath = path.posix.join(base, CLIENT_PUBLIC_PATH)\n\n let server: ViteDevServer\n\n return {\n name: 'vite:import-analysis',\n\n configureServer(_server) {\n server = _server\n },\n\n async transform(source, importer, ssr) {\n const prettyImporter = prettifyUrl(importer, root)\n\n if (canSkip(importer)) {\n isDebug && debug(chalk.dim(`[skipped] ${prettyImporter}`))\n return null\n }\n\n const start = performance.now()\n await init\n let imports: readonly ImportSpecifier[] = []\n // strip UTF-8 BOM\n if (source.charCodeAt(0) === 0xfeff) {\n source = source.slice(1)\n }\n try {\n imports = parseImports(source)[0]\n } catch (e: any) {\n const isVue = importer.endsWith('.vue')\n const maybeJSX = !isVue && isJSRequest(importer)\n\n const msg = isVue\n ? `Install @vitejs/plugin-vue to handle .vue files.`\n : maybeJSX\n ? `If you are using JSX, make sure to name the file with the .jsx or .tsx extension.`\n : `You may need to install appropriate plugins to handle the ${path.extname(\n importer\n )} file format.`\n\n this.error(\n `Failed to parse source for import analysis because the content ` +\n `contains invalid JS syntax. ` +\n msg,\n e.idx\n )\n }\n\n if (!imports.length) {\n isDebug &&\n debug(\n `${timeFrom(start)} ${chalk.dim(`[no imports] ${prettyImporter}`)}`\n )\n return source\n }\n\n let hasHMR = false\n let isSelfAccepting = false\n let hasEnv = false\n let needQueryInjectHelper = false\n let s: MagicString | undefined\n const str = () => s || (s = new MagicString(source))\n // vite-only server context\n const { moduleGraph } = server\n // since we are already in the transform phase of the importer, it must\n // have been loaded so its entry is guaranteed in the module graph.\n const importerModule = moduleGraph.getModuleById(importer)!\n const importedUrls = new Set<string>()\n const staticImportedUrls = new Set<string>()\n const acceptedUrls = new Set<{\n url: string\n start: number\n end: number\n }>()\n const toAbsoluteUrl = (url: string) =>\n path.posix.resolve(path.posix.dirname(importerModule.url), url)\n\n const normalizeUrl = async (\n url: string,\n pos: number\n ): Promise<[string, string]> => {\n if (base !== '/' && url.startsWith(base)) {\n url = url.replace(base, '/')\n }\n\n const resolved = await this.resolve(url, importer)\n\n if (!resolved) {\n this.error(\n `Failed to resolve import \"${url}\" from \"${path.relative(\n process.cwd(),\n importer\n )}\". Does the file exist?`,\n pos\n )\n }\n\n const isRelative = url.startsWith('.')\n const isSelfImport = !isRelative && cleanUrl(url) === cleanUrl(importer)\n\n // normalize all imports into resolved URLs\n // e.g. `import 'foo'` -> `import '/@fs/.../node_modules/foo/index.js`\n if (resolved.id.startsWith(root + '/')) {\n // in root: infer short absolute path from root\n url = resolved.id.slice(root.length)\n } else if (fs.existsSync(cleanUrl(resolved.id))) {\n // exists but out of root: rewrite to absolute /@fs/ paths\n url = path.posix.join(FS_PREFIX + resolved.id)\n } else {\n url = resolved.id\n }\n\n if (isExternalUrl(url)) {\n return [url, url]\n }\n\n // if the resolved id is not a valid browser import specifier,\n // prefix it to make it valid. We will strip this before feeding it\n // back into the transform pipeline\n if (!url.startsWith('.') && !url.startsWith('/')) {\n url =\n VALID_ID_PREFIX + resolved.id.replace('\\0', NULL_BYTE_PLACEHOLDER)\n }\n\n // make the URL browser-valid if not SSR\n if (!ssr) {\n // mark non-js/css imports with `?import`\n url = markExplicitImport(url)\n\n // for relative js/css imports, or self-module virtual imports\n // (e.g. vue blocks), inherit importer's version query\n // do not do this for unknown type imports, otherwise the appended\n // query can break 3rd party plugin's extension checks.\n if ((isRelative || isSelfImport) && !/[\\?&]import=?\\b/.test(url)) {\n const versionMatch = importer.match(DEP_VERSION_RE)\n if (versionMatch) {\n url = injectQuery(url, versionMatch[1])\n }\n }\n\n // check if the dep has been hmr updated. If yes, we need to attach\n // its last updated timestamp to force the browser to fetch the most\n // up-to-date version of this module.\n try {\n const depModule = await moduleGraph.ensureEntryFromUrl(url)\n if (depModule.lastHMRTimestamp > 0) {\n url = injectQuery(url, `t=${depModule.lastHMRTimestamp}`)\n }\n } catch (e: any) {\n // it's possible that the dep fails to resolve (non-existent import)\n // attach location to the missing import\n e.pos = pos\n throw e\n }\n\n // prepend base (dev base is guaranteed to have ending slash)\n url = base + url.replace(/^\\//, '')\n }\n\n return [url, resolved.id]\n }\n\n for (let index = 0; index < imports.length; index++) {\n const {\n s: start,\n e: end,\n ss: expStart,\n se: expEnd,\n d: dynamicIndex,\n // #2083 User may use escape path,\n // so use imports[index].n to get the unescaped string\n // @ts-ignore\n n: specifier\n } = imports[index]\n\n const rawUrl = source.slice(start, end)\n\n // check import.meta usage\n if (rawUrl === 'import.meta') {\n const prop = source.slice(end, end + 4)\n if (prop === '.hot') {\n hasHMR = true\n if (source.slice(end + 4, end + 11) === '.accept') {\n // further analyze accepted modules\n if (\n lexAcceptedHmrDeps(\n source,\n source.indexOf('(', end + 11) + 1,\n acceptedUrls\n )\n ) {\n isSelfAccepting = true\n }\n }\n } else if (prop === '.env') {\n hasEnv = true\n } else if (prop === '.glo' && source[end + 4] === 'b') {\n // transform import.meta.glob()\n // e.g. `import.meta.glob('glob:./dir/*.js')`\n const {\n imports,\n importsString,\n exp,\n endIndex,\n base,\n pattern,\n isEager\n } = await transformImportGlob(\n source,\n start,\n importer,\n index,\n root,\n normalizeUrl\n )\n str().prepend(importsString)\n str().overwrite(expStart, endIndex, exp)\n imports.forEach((url) => {\n url = url.replace(base, '/')\n importedUrls.add(url)\n if (isEager) staticImportedUrls.add(url)\n })\n if (!(importerModule.file! in server._globImporters)) {\n server._globImporters[importerModule.file!] = {\n module: importerModule,\n importGlobs: []\n }\n }\n server._globImporters[importerModule.file!].importGlobs.push({\n base,\n pattern\n })\n }\n continue\n }\n\n const isDynamicImport = dynamicIndex >= 0\n\n // static import or valid string in dynamic import\n // If resolvable, let's resolve it\n if (specifier) {\n // skip external / data uri\n if (isExternalUrl(specifier) || isDataUrl(specifier)) {\n continue\n }\n // skip ssr external\n if (ssr) {\n if (\n server._ssrExternals &&\n shouldExternalizeForSSR(specifier, server._ssrExternals)\n ) {\n continue\n }\n if (isBuiltin(specifier)) {\n continue\n }\n }\n // skip client\n if (specifier === clientPublicPath) {\n continue\n }\n\n // warn imports to non-asset /public files\n if (\n specifier.startsWith('/') &&\n !config.assetsInclude(cleanUrl(specifier)) &&\n !specifier.endsWith('.json') &&\n checkPublicFile(specifier, config)\n ) {\n throw new Error(\n `Cannot import non-asset file ${specifier} which is inside /public.` +\n `JS/CSS files inside /public are copied as-is on build and ` +\n `can only be referenced via <script src> or <link href> in html.`\n )\n }\n\n // normalize\n const [normalizedUrl, resolvedId] = await normalizeUrl(\n specifier,\n start\n )\n let url = normalizedUrl\n\n // record as safe modules\n server?.moduleGraph.safeModulesPath.add(\n cleanUrl(url).slice(4 /* '/@fs'.length */)\n )\n\n // rewrite\n if (url !== specifier) {\n // for optimized cjs deps, support named imports by rewriting named\n // imports to const assignments.\n if (resolvedId.endsWith(`&es-interop`)) {\n url = url.slice(0, -11)\n if (isDynamicImport) {\n // rewrite `import('package')` to expose the default directly\n str().overwrite(\n dynamicIndex,\n end + 1,\n `import('${url}').then(m => m.default && m.default.__esModule ? m.default : ({ ...m.default, default: m.default }))`\n )\n } else {\n const exp = source.slice(expStart, expEnd)\n const rewritten = transformCjsImport(exp, url, rawUrl, index)\n if (rewritten) {\n str().overwrite(expStart, expEnd, rewritten)\n } else {\n // #1439 export * from '...'\n str().overwrite(start, end, url)\n }\n }\n } else {\n str().overwrite(start, end, isDynamicImport ? `'${url}'` : url)\n }\n }\n\n // record for HMR import chain analysis\n // make sure to normalize away base\n const urlWithoutBase = url.replace(base, '/')\n importedUrls.add(urlWithoutBase)\n if (!isDynamicImport) {\n // for pre-transforming\n staticImportedUrls.add(urlWithoutBase)\n }\n } else if (!importer.startsWith(clientDir) && !ssr) {\n // check @vite-ignore which suppresses dynamic import warning\n const hasViteIgnore = /\\/\\*\\s*@vite-ignore\\s*\\*\\//.test(rawUrl)\n\n const url = rawUrl\n .replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, '')\n .trim()\n if (!hasViteIgnore && !isSupportedDynamicImport(url)) {\n this.warn(\n `\\n` +\n chalk.cyan(importerModule.file) +\n `\\n` +\n generateCodeFrame(source, start) +\n `\\nThe above dynamic import cannot be analyzed by vite.\\n` +\n `See ${chalk.blue(\n `https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars#limitations`\n )} ` +\n `for supported dynamic import formats. ` +\n `If this is intended to be left as-is, you can use the ` +\n `/* @vite-ignore */ comment inside the import() call to suppress this warning.\\n`\n )\n }\n if (\n !/^('.*'|\".*\"|`.*`)$/.test(url) ||\n isExplicitImportRequired(url.slice(1, -1))\n ) {\n needQueryInjectHelper = true\n str().overwrite(start, end, `__vite__injectQuery(${url}, 'import')`)\n }\n }\n }\n\n if (hasEnv) {\n // inject import.meta.env\n let env = `import.meta.env = ${JSON.stringify({\n ...config.env,\n SSR: !!ssr\n })};`\n // account for user env defines\n for (const key in config.define) {\n if (key.startsWith(`import.meta.env.`)) {\n const val = config.define[key]\n env += `${key} = ${\n typeof val === 'string' ? val : JSON.stringify(val)\n };`\n }\n }\n str().prepend(env)\n }\n\n if (hasHMR && !ssr) {\n debugHmr(\n `${\n isSelfAccepting\n ? `[self-accepts]`\n : acceptedUrls.size\n ? `[accepts-deps]`\n : `[detected api usage]`\n } ${prettyImporter}`\n )\n // inject hot context\n str().prepend(\n `import { createHotContext as __vite__createHotContext } from \"${clientPublicPath}\";` +\n `import.meta.hot = __vite__createHotContext(${JSON.stringify(\n importerModule.url\n )});`\n )\n }\n\n if (needQueryInjectHelper) {\n str().prepend(\n `import { injectQuery as __vite__injectQuery } from \"${clientPublicPath}\";`\n )\n }\n\n // normalize and rewrite accepted urls\n const normalizedAcceptedUrls = new Set<string>()\n for (const { url, start, end } of acceptedUrls) {\n const [normalized] = await moduleGraph.resolveUrl(\n toAbsoluteUrl(markExplicitImport(url))\n )\n normalizedAcceptedUrls.add(normalized)\n str().overwrite(start, end, JSON.stringify(normalized))\n }\n\n // update the module graph for HMR analysis.\n // node CSS imports does its own graph update in the css plugin so we\n // only handle js graph updates here.\n if (!isCSSRequest(importer)) {\n // attached by pluginContainer.addWatchFile\n const pluginImports = (this as any)._addedImports as\n | Set<string>\n | undefined\n if (pluginImports) {\n ;(\n await Promise.all(\n [...pluginImports].map((id) => normalizeUrl(id, 0))\n )\n ).forEach(([url]) => importedUrls.add(url))\n }\n const prunedImports = await moduleGraph.updateModuleInfo(\n importerModule,\n importedUrls,\n normalizedAcceptedUrls,\n isSelfAccepting\n )\n if (hasHMR && prunedImports) {\n handlePrunedModules(prunedImports, server)\n }\n }\n\n isDebug &&\n debug(\n `${timeFrom(start)} ${chalk.dim(\n `[${importedUrls.size} imports rewritten] ${prettyImporter}`\n )}`\n )\n\n // pre-transform known direct imports\n if (staticImportedUrls.size) {\n staticImportedUrls.forEach((url) => {\n transformRequest(unwrapId(removeImportQuery(url)), server, { ssr })\n })\n }\n\n if (s) {\n return s.toString()\n } else {\n return source\n }\n }\n }\n}\n\n/**\n * https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars#limitations\n * This is probably less accurate but is much cheaper than a full AST parse.\n */\nfunction isSupportedDynamicImport(url: string) {\n url = url.trim().slice(1, -1)\n // must be relative\n if (!url.startsWith('./') && !url.startsWith('../')) {\n return false\n }\n // must have extension\n if (!path.extname(url)) {\n return false\n }\n // must be more specific if importing from same dir\n if (url.startsWith('./${') && url.indexOf('/') === url.lastIndexOf('/')) {\n return false\n }\n return true\n}\n\ntype ImportNameSpecifier = { importedName: string; localName: string }\n\n/**\n * Detect import statements to a known optimized CJS dependency and provide\n * ES named imports interop. We do this by rewriting named imports to a variable\n * assignment to the corresponding property on the `module.exports` of the cjs\n * module. Note this doesn't support dynamic re-assignments from within the cjs\n * module.\n *\n * Note that es-module-lexer treats `export * from '...'` as an import as well,\n * so, we may encounter ExportAllDeclaration here, in which case `undefined`\n * will be returned.\n *\n * Credits \\@csr632 via #837\n */\nfunction transformCjsImport(\n importExp: string,\n url: string,\n rawUrl: string,\n importIndex: number\n): string | undefined {\n const node = (\n parseJS(importExp, {\n ecmaVersion: 'latest',\n sourceType: 'module'\n }) as any\n ).body[0] as Node\n\n if (node.type === 'ImportDeclaration') {\n if (!node.specifiers.length) {\n return `import \"${url}\"`\n }\n\n const importNames: ImportNameSpecifier[] = []\n for (const spec of node.specifiers) {\n if (\n spec.type === 'ImportSpecifier' &&\n spec.imported.type === 'Identifier'\n ) {\n const importedName = spec.imported.name\n const localName = spec.local.name\n importNames.push({ importedName, localName })\n } else if (spec.type === 'ImportDefaultSpecifier') {\n importNames.push({\n importedName: 'default',\n localName: spec.local.name\n })\n } else if (spec.type === 'ImportNamespaceSpecifier') {\n importNames.push({ importedName: '*', localName: spec.local.name })\n }\n }\n\n // If there is multiple import for same id in one file,\n // importIndex will prevent the cjsModuleName to be duplicate\n const cjsModuleName = makeLegalIdentifier(\n `__vite__cjsImport${importIndex}_${rawUrl}`\n )\n const lines: string[] = [`import ${cjsModuleName} from \"${url}\"`]\n importNames.forEach(({ importedName, localName }) => {\n if (importedName === '*') {\n lines.push(`const ${localName} = ${cjsModuleName}`)\n } else if (importedName === 'default') {\n lines.push(\n `const ${localName} = ${cjsModuleName}.__esModule ? ${cjsModuleName}.default : ${cjsModuleName}`\n )\n } else {\n lines.push(`const ${localName} = ${cjsModuleName}[\"${importedName}\"]`)\n }\n })\n return lines.join('; ')\n }\n}\n","import path from 'path'\nimport { Plugin } from '../plugin'\nimport { ResolvedConfig } from '../config'\nimport { CLIENT_ENTRY, ENV_ENTRY } from '../constants'\nimport { normalizePath, isObject } from '../utils'\n\n// ids in transform are normalized to unix style\nconst normalizedClientEntry = normalizePath(CLIENT_ENTRY)\nconst normalizedEnvEntry = normalizePath(ENV_ENTRY)\n\n/**\n * some values used by the client needs to be dynamically injected by the server\n * @server-only\n */\nexport function clientInjectionsPlugin(config: ResolvedConfig): Plugin {\n return {\n name: 'vite:client-inject',\n transform(code, id) {\n if (id === normalizedClientEntry || id === normalizedEnvEntry) {\n let options = config.server.hmr\n options = options && typeof options !== 'boolean' ? options : {}\n const host = options.host || null\n const protocol = options.protocol || null\n const timeout = options.timeout || 30000\n const overlay = options.overlay !== false\n let port: number | string | undefined\n if (isObject(config.server.hmr)) {\n port = config.server.hmr.clientPort || config.server.hmr.port\n }\n if (config.server.middlewareMode) {\n port = String(port || 24678)\n } else {\n port = String(port || options.port || config.server.port!)\n }\n let hmrBase = config.base\n if (options.path) {\n hmrBase = path.posix.join(hmrBase, options.path)\n }\n if (hmrBase !== '/') {\n port = path.posix.normalize(`${port}${hmrBase}`)\n }\n\n return code\n .replace(`__MODE__`, JSON.stringify(config.mode))\n .replace(`__BASE__`, JSON.stringify(config.base))\n .replace(`__DEFINES__`, serializeDefine(config.define || {}))\n .replace(`__HMR_PROTOCOL__`, JSON.stringify(protocol))\n .replace(`__HMR_HOSTNAME__`, JSON.stringify(host))\n .replace(`__HMR_PORT__`, JSON.stringify(port))\n .replace(`__HMR_TIMEOUT__`, JSON.stringify(timeout))\n .replace(`__HMR_ENABLE_OVERLAY__`, JSON.stringify(overlay))\n } else if (code.includes('process.env.NODE_ENV')) {\n // replace process.env.NODE_ENV\n return code.replace(\n /\\bprocess\\.env\\.NODE_ENV\\b/g,\n JSON.stringify(config.mode)\n )\n }\n }\n }\n}\n\nfunction serializeDefine(define: Record<string, any>): string {\n let res = `{`\n for (const key in define) {\n const val = define[key]\n res += `${JSON.stringify(key)}: ${\n typeof val === 'string' ? `(${val})` : JSON.stringify(val)\n }, `\n }\n return res + `}`\n}\n","import { ResolvedConfig } from '../config'\nimport { Plugin } from '../plugin'\nimport { fileToUrl } from './asset'\n\nconst wasmHelperId = '/__vite-wasm-helper'\n\nconst wasmHelper = async (opts = {}, url: string) => {\n let result\n if (url.startsWith('data:')) {\n // @ts-ignore\n const binaryString = atob(url.replace(/^data:.*?base64,/, ''))\n const bytes = new Uint8Array(binaryString.length)\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n // @ts-ignore\n result = await WebAssembly.instantiate(bytes, opts)\n } else {\n // https://github.com/mdn/webassembly-examples/issues/5\n // WebAssembly.instantiateStreaming requires the server to provide the\n // correct MIME type for .wasm files, which unfortunately doesn't work for\n // a lot of static file servers, so we just work around it by getting the\n // raw buffer.\n // @ts-ignore\n const response = await fetch(url)\n const contentType = response.headers.get('Content-Type') || ''\n if (\n // @ts-ignore\n 'instantiateStreaming' in WebAssembly &&\n contentType.startsWith('application/wasm')\n ) {\n // @ts-ignore\n result = await WebAssembly.instantiateStreaming(response, opts)\n } else {\n const buffer = await response.arrayBuffer()\n // @ts-ignore\n result = await WebAssembly.instantiate(buffer, opts)\n }\n }\n return result.instance.exports\n}\n\nconst wasmHelperCode = wasmHelper.toString()\n\nexport const wasmPlugin = (config: ResolvedConfig): Plugin => {\n return {\n name: 'vite:wasm',\n\n resolveId(id) {\n if (id === wasmHelperId) {\n return id\n }\n },\n\n async load(id) {\n if (id === wasmHelperId) {\n return `export default ${wasmHelperCode}`\n }\n\n if (!id.endsWith('.wasm')) {\n return\n }\n\n const url = await fileToUrl(id, config, this)\n\n return `\nimport initWasm from \"${wasmHelperId}\"\nexport default opts => initWasm(opts, ${JSON.stringify(url)})\n`\n }\n }\n}\n","import { ResolvedConfig } from '../config'\nimport { Plugin } from '../plugin'\nimport { resolvePlugins } from '../plugins'\nimport { parse as parseUrl, URLSearchParams } from 'url'\nimport { fileToUrl, getAssetHash } from './asset'\nimport { cleanUrl, injectQuery } from '../utils'\nimport Rollup from 'rollup'\nimport { ENV_PUBLIC_PATH } from '../constants'\nimport path from 'path'\nimport { onRollupWarning } from '../build'\n\nfunction parseWorkerRequest(id: string): Record<string, string> | null {\n const { search } = parseUrl(id)\n if (!search) {\n return null\n }\n return Object.fromEntries(new URLSearchParams(search.slice(1)))\n}\n\nconst WorkerFileId = 'worker_file'\n\nexport function webWorkerPlugin(config: ResolvedConfig): Plugin {\n const isBuild = config.command === 'build'\n\n return {\n name: 'vite:worker',\n\n load(id) {\n if (isBuild) {\n const parsedQuery = parseWorkerRequest(id)\n if (\n parsedQuery &&\n (parsedQuery.worker ?? parsedQuery.sharedworker) != null\n ) {\n return ''\n }\n }\n },\n\n async transform(_, id) {\n const query = parseWorkerRequest(id)\n if (query && query[WorkerFileId] != null) {\n return {\n code: `import '${ENV_PUBLIC_PATH}'\\n` + _\n }\n }\n if (\n query == null ||\n (query && (query.worker ?? query.sharedworker) == null)\n ) {\n return\n }\n\n let url: string\n if (isBuild) {\n // bundle the file as entry to support imports\n const rollup = require('rollup') as typeof Rollup\n const bundle = await rollup.rollup({\n input: cleanUrl(id),\n plugins: await resolvePlugins({ ...config }, [], [], []),\n onwarn(warning, warn) {\n onRollupWarning(warning, warn, config)\n }\n })\n let code: string\n try {\n const { output } = await bundle.generate({\n format: 'iife',\n sourcemap: config.build.sourcemap\n })\n code = output[0].code\n } finally {\n await bundle.close()\n }\n const content = Buffer.from(code)\n if (query.inline != null) {\n // inline as blob data url\n return `const encodedJs = \"${content.toString('base64')}\";\n const blob = typeof window !== \"undefined\" && window.Blob && new Blob([atob(encodedJs)], { type: \"text/javascript;charset=utf-8\" });\n export default function WorkerWrapper() {\n const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);\n try {\n return objURL ? new Worker(objURL) : new Worker(\"data:application/javascript;base64,\" + encodedJs, {type: \"module\"});\n } finally {\n objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);\n }\n }`\n } else {\n const basename = path.parse(cleanUrl(id)).name\n const contentHash = getAssetHash(content)\n const fileName = path.posix.join(\n config.build.assetsDir,\n `${basename}.${contentHash}.js`\n )\n url = `__VITE_ASSET__${this.emitFile({\n fileName,\n type: 'asset',\n source: code\n })}__`\n }\n } else {\n url = await fileToUrl(cleanUrl(id), config, this)\n url = injectQuery(url, WorkerFileId)\n }\n\n const workerConstructor =\n query.sharedworker != null ? 'SharedWorker' : 'Worker'\n const workerOptions = { type: 'module' }\n\n return `export default function WorkerWrapper() {\n return new ${workerConstructor}(${JSON.stringify(\n url\n )}, ${JSON.stringify(workerOptions, null, 2)})\n }`\n }\n }\n}\n","import { ViteDevServer } from '..'\nimport { Plugin } from '../plugin'\nimport { bareImportRE } from '../utils'\nimport { tryOptimizedResolve } from './resolve'\n\n/**\n * A plugin to avoid an aliased AND optimized dep from being aliased in src\n */\nexport function preAliasPlugin(): Plugin {\n let server: ViteDevServer\n return {\n name: 'vite:pre-alias',\n configureServer(_server) {\n server = _server\n },\n resolveId(id, importer, _, ssr) {\n if (!ssr && bareImportRE.test(id)) {\n return tryOptimizedResolve(id, server, importer)\n }\n }\n }\n}\n","import MagicString from 'magic-string'\nimport { TransformResult } from 'rollup'\nimport { ResolvedConfig } from '../config'\nimport { Plugin } from '../plugin'\nimport { isCSSRequest } from './css'\n\nexport function definePlugin(config: ResolvedConfig): Plugin {\n const isBuild = config.command === 'build'\n\n const userDefine: Record<string, string> = {}\n for (const key in config.define) {\n const val = config.define[key]\n userDefine[key] = typeof val === 'string' ? val : JSON.stringify(val)\n }\n\n // during dev, import.meta properties are handled by importAnalysis plugin\n const importMetaKeys: Record<string, string> = {}\n if (isBuild) {\n const env: Record<string, any> = {\n ...config.env,\n SSR: !!config.build.ssr\n }\n for (const key in env) {\n importMetaKeys[`import.meta.env.${key}`] = JSON.stringify(env[key])\n }\n Object.assign(importMetaKeys, {\n 'import.meta.env.': `({}).`,\n 'import.meta.env': JSON.stringify(config.env),\n 'import.meta.hot': `false`\n })\n }\n\n const replacements: Record<string, string | undefined> = {\n 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || config.mode),\n 'global.process.env.NODE_ENV': JSON.stringify(\n process.env.NODE_ENV || config.mode\n ),\n 'globalThis.process.env.NODE_ENV': JSON.stringify(\n process.env.NODE_ENV || config.mode\n ),\n ...userDefine,\n ...importMetaKeys,\n 'process.env.': `({}).`,\n 'global.process.env.': `({}).`,\n 'globalThis.process.env.': `({}).`\n }\n\n const pattern = new RegExp(\n // Do not allow preceding '.', but do allow preceding '...' for spread operations\n '(?<!(?<!\\\\.\\\\.)\\\\.)\\\\b(' +\n Object.keys(replacements)\n .map((str) => {\n return str.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&')\n })\n .join('|') +\n ')\\\\b',\n 'g'\n )\n\n return {\n name: 'vite:define',\n transform(code, id, ssr) {\n if (!ssr && !isBuild) {\n // for dev we inject actual global defines in the vite client to\n // avoid the transform cost.\n return\n }\n\n if (\n // exclude css and static assets for performance\n isCSSRequest(id) ||\n config.assetsInclude(id)\n ) {\n return\n }\n\n if (ssr && !isBuild) {\n // ssr + dev, simple replace\n return code.replace(pattern, (_, match) => {\n return '' + replacements[match]\n })\n }\n\n const s = new MagicString(code)\n let hasReplaced = false\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(code))) {\n hasReplaced = true\n const start = match.index\n const end = start + match[0].length\n const replacement = '' + replacements[match[1]]\n s.overwrite(start, end, replacement)\n }\n\n if (!hasReplaced) {\n return null\n }\n\n const result: TransformResult = { code: s.toString() }\n if (config.build.sourcemap) {\n result.map = s.generateMap({ hires: true })\n }\n return result\n }\n }\n}\n","import { ResolvedConfig } from '../config'\nimport { Plugin } from '../plugin'\nimport aliasPlugin from '@rollup/plugin-alias'\nimport { jsonPlugin } from './json'\nimport { resolvePlugin } from './resolve'\nimport { esbuildPlugin } from './esbuild'\nimport { importAnalysisPlugin } from './importAnalysis'\nimport { cssPlugin, cssPostPlugin } from './css'\nimport { assetPlugin } from './asset'\nimport { clientInjectionsPlugin } from './clientInjections'\nimport { htmlInlineScriptProxyPlugin } from './html'\nimport { wasmPlugin } from './wasm'\nimport { modulePreloadPolyfillPlugin } from './modulePreloadPolyfill'\nimport { webWorkerPlugin } from './worker'\nimport { preAliasPlugin } from './preAlias'\nimport { definePlugin } from './define'\n\nexport async function resolvePlugins(\n config: ResolvedConfig,\n prePlugins: Plugin[],\n normalPlugins: Plugin[],\n postPlugins: Plugin[]\n): Promise<Plugin[]> {\n const isBuild = config.command === 'build'\n\n const buildPlugins = isBuild\n ? (await import('../build')).resolveBuildPlugins(config)\n : { pre: [], post: [] }\n\n return [\n isBuild ? null : preAliasPlugin(),\n aliasPlugin({ entries: config.resolve.alias }),\n ...prePlugins,\n config.build.polyfillModulePreload\n ? modulePreloadPolyfillPlugin(config)\n : null,\n resolvePlugin({\n ...config.resolve,\n root: config.root,\n isProduction: config.isProduction,\n isBuild,\n ssrConfig: config.ssr,\n asSrc: true\n }),\n htmlInlineScriptProxyPlugin(config),\n cssPlugin(config),\n config.esbuild !== false ? esbuildPlugin(config.esbuild) : null,\n jsonPlugin(\n {\n namedExports: true,\n ...config.json\n },\n isBuild\n ),\n wasmPlugin(config),\n webWorkerPlugin(config),\n assetPlugin(config),\n ...normalPlugins,\n definePlugin(config),\n cssPostPlugin(config),\n ...buildPlugins.pre,\n ...postPlugins,\n ...buildPlugins.post,\n // internal server-only plugins are always applied after everything else\n ...(isBuild\n ? []\n : [clientInjectionsPlugin(config), importAnalysisPlugin(config)])\n ].filter(Boolean) as Plugin[]\n}\n","/* @flow */\n/*::\n\ntype DotenvParseOptions = {\n debug?: boolean\n}\n\n// keys and values from src\ntype DotenvParseOutput = { [string]: string }\n\ntype DotenvConfigOptions = {\n path?: string, // path to .env file\n encoding?: string, // encoding of .env file\n debug?: string // turn on logging for debugging purposes\n}\n\ntype DotenvConfigOutput = {\n parsed?: DotenvParseOutput,\n error?: Error\n}\n\n*/\n\nconst fs = require('fs')\nconst path = require('path')\nconst os = require('os')\n\nfunction log (message /*: string */) {\n console.log(`[dotenv][DEBUG] ${message}`)\n}\n\nconst NEWLINE = '\\n'\nconst RE_INI_KEY_VAL = /^\\s*([\\w.-]+)\\s*=\\s*(.*)?\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\r\\n|\\n|\\r/\n\n// Parses src into an Object\nfunction parse (src /*: string | Buffer */, options /*: ?DotenvParseOptions */) /*: DotenvParseOutput */ {\n const debug = Boolean(options && options.debug)\n const obj = {}\n\n // convert Buffers before splitting into lines and processing\n src.toString().split(NEWLINES_MATCH).forEach(function (line, idx) {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = (keyValueArr[2] || '')\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === \"'\" && val[end] === \"'\"\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted) {\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n } else {\n // remove surrounding whitespace\n val = val.trim()\n }\n\n obj[key] = val\n } else if (debug) {\n log(`did not match key and value when parsing line ${idx + 1}: ${line}`)\n }\n })\n\n return obj\n}\n\nfunction resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\n// Populates process.env from .env file\nfunction config (options /*: ?DotenvConfigOptions */) /*: DotenvConfigOutput */ {\n let dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding /*: string */ = 'utf8'\n let debug = false\n\n if (options) {\n if (options.path != null) {\n dotenvPath = resolveHome(options.path)\n }\n if (options.encoding != null) {\n encoding = options.encoding\n }\n if (options.debug != null) {\n debug = true\n }\n }\n\n try {\n // specifying an encoding returns a string instead of a buffer\n const parsed = parse(fs.readFileSync(dotenvPath, { encoding }), { debug })\n\n Object.keys(parsed).forEach(function (key) {\n if (!Object.prototype.hasOwnProperty.call(process.env, key)) {\n process.env[key] = parsed[key]\n } else if (debug) {\n log(`\"${key}\" is already defined in \\`process.env\\` and will not be overwritten`)\n }\n })\n\n return { parsed }\n } catch (e) {\n return { error: e }\n }\n}\n\nmodule.exports.config = config\nmodule.exports.parse = parse\n","'use strict'\n\nvar dotenvExpand = function (config) {\n // if ignoring process.env, use a blank object\n var environment = config.ignoreProcessEnv ? {} : process.env\n\n var interpolate = function (envValue) {\n var matches = envValue.match(/(.?\\${?(?:[a-zA-Z0-9_]+)?}?)/g) || []\n\n return matches.reduce(function (newEnv, match) {\n var parts = /(.?)\\${?([a-zA-Z0-9_]+)?}?/g.exec(match)\n var prefix = parts[1]\n\n var value, replacePart\n\n if (prefix === '\\\\') {\n replacePart = parts[0]\n value = replacePart.replace('\\\\$', '$')\n } else {\n var key = parts[2]\n replacePart = parts[0].substring(prefix.length)\n // process.env value 'wins' over .env file's value\n value = environment.hasOwnProperty(key) ? environment[key] : (config.parsed[key] || '')\n\n // Resolve recursive interpolations\n value = interpolate(value)\n }\n\n return newEnv.replace(replacePart, value)\n }, envValue)\n }\n\n for (var configKey in config.parsed) {\n var value = environment.hasOwnProperty(configKey) ? environment[configKey] : config.parsed[configKey]\n\n config.parsed[configKey] = interpolate(value)\n }\n\n for (var processKey in config.parsed) {\n environment[processKey] = config.parsed[processKey]\n }\n\n return config\n}\n\nmodule.exports = dotenvExpand\n","import fs from 'fs'\nimport path from 'path'\nimport { Plugin } from './plugin'\nimport { BuildOptions, resolveBuildOptions } from './build'\nimport {\n ResolvedServerOptions,\n resolveServerOptions,\n ServerOptions\n} from './server'\nimport { CSSOptions } from './plugins/css'\nimport {\n arraify,\n createDebugger,\n isExternalUrl,\n isObject,\n lookupFile,\n normalizePath,\n dynamicImport\n} from './utils'\nimport { resolvePlugins } from './plugins'\nimport chalk from 'chalk'\nimport { ESBuildOptions } from './plugins/esbuild'\nimport dotenv from 'dotenv'\nimport dotenvExpand from 'dotenv-expand'\nimport { Alias, AliasOptions } from 'types/alias'\nimport { CLIENT_ENTRY, ENV_ENTRY, DEFAULT_ASSETS_RE } from './constants'\nimport {\n InternalResolveOptions,\n ResolveOptions,\n resolvePlugin\n} from './plugins/resolve'\nimport { createLogger, Logger, LogLevel } from './logger'\nimport { DepOptimizationOptions } from './optimizer'\nimport { createFilter } from '@rollup/pluginutils'\nimport { ResolvedBuildOptions } from '.'\nimport { parse as parseUrl } from 'url'\nimport { JsonOptions } from './plugins/json'\nimport {\n createPluginContainer,\n PluginContainer\n} from './server/pluginContainer'\nimport aliasPlugin from '@rollup/plugin-alias'\nimport { build } from 'esbuild'\nimport { performance } from 'perf_hooks'\n\nconst debug = createDebugger('vite:config')\n\n// NOTE: every export in this file is re-exported from ./index.ts so it will\n// be part of the public API.\nexport interface ConfigEnv {\n command: 'build' | 'serve'\n mode: string\n}\n\nexport type UserConfigFn = (env: ConfigEnv) => UserConfig | Promise<UserConfig>\nexport type UserConfigExport = UserConfig | Promise<UserConfig> | UserConfigFn\n\n/**\n * Type helper to make it easier to use vite.config.ts\n * accepts a direct {@link UserConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n * `command` (either `'build'` or `'serve'`), and `mode`.\n */\nexport function defineConfig(config: UserConfigExport): UserConfigExport {\n return config\n}\n\nexport type PluginOption = Plugin | false | null | undefined\n\nexport interface UserConfig {\n /**\n * Project root directory. Can be an absolute path, or a path relative from\n * the location of the config file itself.\n * @default process.cwd()\n */\n root?: string\n /**\n * Base public path when served in development or production.\n * @default '/'\n */\n base?: string\n /**\n * Directory to serve as plain static assets. Files in this directory are\n * served and copied to build dist dir as-is without transform. The value\n * can be either an absolute file system path or a path relative to <root>.\n *\n * Set to `false` or an empty string to disable copied static assets to build dist dir.\n * @default 'public'\n */\n publicDir?: string | false\n /**\n * Directory to save cache files. Files in this directory are pre-bundled\n * deps or some other cache files that generated by vite, which can improve\n * the performance. You can use `--force` flag or manually delete the directory\n * to regenerate the cache files. The value can be either an absolute file\n * system path or a path relative to <root>.\n * @default 'node_modules/.vite'\n */\n cacheDir?: string\n /**\n * Explicitly set a mode to run in. This will override the default mode for\n * each command, and can be overridden by the command line --mode option.\n */\n mode?: string\n /**\n * Define global variable replacements.\n * Entries will be defined on `window` during dev and replaced during build.\n */\n define?: Record<string, any>\n /**\n * Array of vite plugins to use.\n */\n plugins?: (PluginOption | PluginOption[])[]\n /**\n * Configure resolver\n */\n resolve?: ResolveOptions & { alias?: AliasOptions }\n /**\n * CSS related options (preprocessors and CSS modules)\n */\n css?: CSSOptions\n /**\n * JSON loading options\n */\n json?: JsonOptions\n /**\n * Transform options to pass to esbuild.\n * Or set to `false` to disable esbuild.\n */\n esbuild?: ESBuildOptions | false\n /**\n * Specify additional picomatch patterns to be treated as static assets.\n */\n assetsInclude?: string | RegExp | (string | RegExp)[]\n /**\n * Server specific options, e.g. host, port, https...\n */\n server?: ServerOptions\n /**\n * Build specific options\n */\n build?: BuildOptions\n /**\n * Dep optimization options\n */\n optimizeDeps?: DepOptimizationOptions\n /**\n * SSR specific options\n * @alpha\n */\n ssr?: SSROptions\n /**\n * Log level.\n * Default: 'info'\n */\n logLevel?: LogLevel\n /**\n * Custom logger.\n */\n customLogger?: Logger\n /**\n * Default: true\n */\n clearScreen?: boolean\n /**\n * Environment files directory. Can be an absolute path, or a path relative from\n * the location of the config file itself.\n * @default root\n */\n envDir?: string\n /**\n * Env variables starts with `envPrefix` will be exposed to your client source code via import.meta.env.\n * @default 'VITE_'\n */\n envPrefix?: string | string[]\n /**\n * Import aliases\n * @deprecated use `resolve.alias` instead\n */\n alias?: AliasOptions\n /**\n * Force Vite to always resolve listed dependencies to the same copy (from\n * project root).\n * @deprecated use `resolve.dedupe` instead\n */\n dedupe?: string[]\n}\n\nexport type SSRTarget = 'node' | 'webworker'\n\nexport interface SSROptions {\n external?: string[]\n noExternal?: string | RegExp | (string | RegExp)[] | true\n /**\n * Define the target for the ssr build. The browser field in package.json\n * is ignored for node but used if webworker is the target\n * Default: 'node'\n */\n target?: SSRTarget\n}\n\nexport interface InlineConfig extends UserConfig {\n configFile?: string | false\n envFile?: false\n}\n\nexport type ResolvedConfig = Readonly<\n Omit<\n UserConfig,\n 'plugins' | 'alias' | 'dedupe' | 'assetsInclude' | 'optimizeDeps'\n > & {\n configFile: string | undefined\n configFileDependencies: string[]\n inlineConfig: InlineConfig\n root: string\n base: string\n publicDir: string\n command: 'build' | 'serve'\n mode: string\n isProduction: boolean\n env: Record<string, any>\n resolve: ResolveOptions & {\n alias: Alias[]\n }\n plugins: readonly Plugin[]\n server: ResolvedServerOptions\n build: ResolvedBuildOptions\n assetsInclude: (file: string) => boolean\n logger: Logger\n createResolver: (options?: Partial<InternalResolveOptions>) => ResolveFn\n optimizeDeps: Omit<DepOptimizationOptions, 'keepNames'>\n }\n>\n\nexport type ResolveFn = (\n id: string,\n importer?: string,\n aliasOnly?: boolean,\n ssr?: boolean\n) => Promise<string | undefined>\n\nexport async function resolveConfig(\n inlineConfig: InlineConfig,\n command: 'build' | 'serve',\n defaultMode = 'development'\n): Promise<ResolvedConfig> {\n let config = inlineConfig\n let configFileDependencies: string[] = []\n let mode = inlineConfig.mode || defaultMode\n\n // some dependencies e.g. @vue/compiler-* relies on NODE_ENV for getting\n // production-specific behavior, so set it here even though we haven't\n // resolve the final mode yet\n if (mode === 'production') {\n process.env.NODE_ENV = 'production'\n }\n\n const configEnv = {\n mode,\n command\n }\n\n let { configFile } = config\n if (configFile !== false) {\n const loadResult = await loadConfigFromFile(\n configEnv,\n configFile,\n config.root,\n config.logLevel\n )\n if (loadResult) {\n config = mergeConfig(loadResult.config, config)\n configFile = loadResult.path\n configFileDependencies = loadResult.dependencies\n }\n }\n\n // Define logger\n const logger = createLogger(config.logLevel, {\n allowClearScreen: config.clearScreen,\n customLogger: config.customLogger\n })\n\n // user config may provide an alternative mode. But --mode has a higher prority\n mode = inlineConfig.mode || config.mode || mode\n configEnv.mode = mode\n\n // resolve plugins\n const rawUserPlugins = (config.plugins || []).flat().filter((p) => {\n if (!p) {\n return false\n } else if (!p.apply) {\n return true\n } else if (typeof p.apply === 'function') {\n return p.apply({ ...config, mode }, configEnv)\n } else {\n return p.apply === command\n }\n }) as Plugin[]\n const [prePlugins, normalPlugins, postPlugins] =\n sortUserPlugins(rawUserPlugins)\n\n // run config hooks\n const userPlugins = [...prePlugins, ...normalPlugins, ...postPlugins]\n for (const p of userPlugins) {\n if (p.config) {\n const res = await p.config(config, configEnv)\n if (res) {\n config = mergeConfig(config, res)\n }\n }\n }\n\n // resolve root\n const resolvedRoot = normalizePath(\n config.root ? path.resolve(config.root) : process.cwd()\n )\n\n const clientAlias = [\n { find: /^[\\/]?@vite\\/env/, replacement: () => ENV_ENTRY },\n { find: /^[\\/]?@vite\\/client/, replacement: () => CLIENT_ENTRY }\n ]\n\n // resolve alias with internal client alias\n const resolvedAlias = mergeAlias(\n // @ts-ignore because @rollup/plugin-alias' type doesn't allow function\n // replacement, but its implementation does work with function values.\n clientAlias,\n config.resolve?.alias || config.alias || []\n )\n\n const resolveOptions: ResolvedConfig['resolve'] = {\n dedupe: config.dedupe,\n ...config.resolve,\n alias: resolvedAlias\n }\n\n // load .env files\n const envDir = config.envDir\n ? normalizePath(path.resolve(resolvedRoot, config.envDir))\n : resolvedRoot\n const userEnv =\n inlineConfig.envFile !== false &&\n loadEnv(mode, envDir, resolveEnvPrefix(config))\n\n // Note it is possible for user to have a custom mode, e.g. `staging` where\n // production-like behavior is expected. This is indicated by NODE_ENV=production\n // loaded from `.staging.env` and set by us as VITE_USER_NODE_ENV\n const isProduction = (process.env.VITE_USER_NODE_ENV || mode) === 'production'\n if (isProduction) {\n // in case default mode was not production and is overwritten\n process.env.NODE_ENV = 'production'\n }\n\n // resolve public base url\n const BASE_URL = resolveBaseUrl(config.base, command === 'build', logger)\n const resolvedBuildOptions = resolveBuildOptions(config.build)\n\n // resolve cache directory\n const pkgPath = lookupFile(\n resolvedRoot,\n [`package.json`],\n true /* pathOnly */\n )\n const cacheDir = config.cacheDir\n ? path.resolve(resolvedRoot, config.cacheDir)\n : pkgPath && path.join(path.dirname(pkgPath), `node_modules/.vite`)\n\n const assetsFilter = config.assetsInclude\n ? createFilter(config.assetsInclude)\n : () => false\n\n // create an internal resolver to be used in special scenarios, e.g.\n // optimizer & handling css @imports\n const createResolver: ResolvedConfig['createResolver'] = (options) => {\n let aliasContainer: PluginContainer | undefined\n let resolverContainer: PluginContainer | undefined\n return async (id, importer, aliasOnly, ssr) => {\n let container: PluginContainer\n if (aliasOnly) {\n container =\n aliasContainer ||\n (aliasContainer = await createPluginContainer({\n ...resolved,\n plugins: [aliasPlugin({ entries: resolved.resolve.alias })]\n }))\n } else {\n container =\n resolverContainer ||\n (resolverContainer = await createPluginContainer({\n ...resolved,\n plugins: [\n aliasPlugin({ entries: resolved.resolve.alias }),\n resolvePlugin({\n ...resolved.resolve,\n root: resolvedRoot,\n isProduction,\n isBuild: command === 'build',\n ssrConfig: resolved.ssr,\n asSrc: true,\n preferRelative: false,\n tryIndex: true,\n ...options\n })\n ]\n }))\n }\n return (await container.resolveId(id, importer, undefined, ssr))?.id\n }\n }\n\n const { publicDir } = config\n const resolvedPublicDir =\n publicDir !== false && publicDir !== ''\n ? path.resolve(\n resolvedRoot,\n typeof publicDir === 'string' ? publicDir : 'public'\n )\n : ''\n\n const resolved: ResolvedConfig = {\n ...config,\n configFile: configFile ? normalizePath(configFile) : undefined,\n configFileDependencies,\n inlineConfig,\n root: resolvedRoot,\n base: BASE_URL,\n resolve: resolveOptions,\n publicDir: resolvedPublicDir,\n cacheDir,\n command,\n mode,\n isProduction,\n plugins: userPlugins,\n server: resolveServerOptions(resolvedRoot, config.server),\n build: resolvedBuildOptions,\n env: {\n ...userEnv,\n BASE_URL,\n MODE: mode,\n DEV: !isProduction,\n PROD: isProduction\n },\n assetsInclude(file: string) {\n return DEFAULT_ASSETS_RE.test(file) || assetsFilter(file)\n },\n logger,\n createResolver,\n optimizeDeps: {\n ...config.optimizeDeps,\n esbuildOptions: {\n keepNames: config.optimizeDeps?.keepNames,\n preserveSymlinks: config.resolve?.preserveSymlinks,\n ...config.optimizeDeps?.esbuildOptions\n }\n }\n }\n\n ;(resolved.plugins as Plugin[]) = await resolvePlugins(\n resolved,\n prePlugins,\n normalPlugins,\n postPlugins\n )\n\n // call configResolved hooks\n await Promise.all(userPlugins.map((p) => p.configResolved?.(resolved)))\n\n if (process.env.DEBUG) {\n debug(`using resolved config: %O`, {\n ...resolved,\n plugins: resolved.plugins.map((p) => p.name)\n })\n }\n\n // TODO Deprecation warnings - remove when out of beta\n\n const logDeprecationWarning = (\n deprecatedOption: string,\n hint: string,\n error?: Error\n ) => {\n logger.warn(\n chalk.yellow.bold(\n `(!) \"${deprecatedOption}\" option is deprecated. ${hint}${\n error ? `\\n${error.stack}` : ''\n }`\n )\n )\n }\n\n if (config.build?.base) {\n logDeprecationWarning(\n 'build.base',\n '\"base\" is now a root-level config option.'\n )\n config.base = config.build.base\n }\n Object.defineProperty(resolvedBuildOptions, 'base', {\n enumerable: false,\n get() {\n logDeprecationWarning(\n 'build.base',\n '\"base\" is now a root-level config option.',\n new Error()\n )\n return resolved.base\n }\n })\n\n if (config.alias) {\n logDeprecationWarning('alias', 'Use \"resolve.alias\" instead.')\n }\n Object.defineProperty(resolved, 'alias', {\n enumerable: false,\n get() {\n logDeprecationWarning(\n 'alias',\n 'Use \"resolve.alias\" instead.',\n new Error()\n )\n return resolved.resolve.alias\n }\n })\n\n if (config.dedupe) {\n logDeprecationWarning('dedupe', 'Use \"resolve.dedupe\" instead.')\n }\n Object.defineProperty(resolved, 'dedupe', {\n enumerable: false,\n get() {\n logDeprecationWarning(\n 'dedupe',\n 'Use \"resolve.dedupe\" instead.',\n new Error()\n )\n return resolved.resolve.dedupe\n }\n })\n\n if (config.optimizeDeps?.keepNames) {\n logDeprecationWarning(\n 'optimizeDeps.keepNames',\n 'Use \"optimizeDeps.esbuildOptions.keepNames\" instead.'\n )\n }\n Object.defineProperty(resolved.optimizeDeps, 'keepNames', {\n enumerable: false,\n get() {\n logDeprecationWarning(\n 'optimizeDeps.keepNames',\n 'Use \"optimizeDeps.esbuildOptions.keepNames\" instead.',\n new Error()\n )\n return resolved.optimizeDeps.esbuildOptions?.keepNames\n }\n })\n\n if (config.build?.polyfillDynamicImport) {\n logDeprecationWarning(\n 'build.polyfillDynamicImport',\n '\"polyfillDynamicImport\" has been removed. Please use @vitejs/plugin-legacy if your target browsers do not support dynamic imports.'\n )\n }\n\n Object.defineProperty(resolvedBuildOptions, 'polyfillDynamicImport', {\n enumerable: false,\n get() {\n logDeprecationWarning(\n 'build.polyfillDynamicImport',\n '\"polyfillDynamicImport\" has been removed. Please use @vitejs/plugin-legacy if your target browsers do not support dynamic imports.',\n new Error()\n )\n return false\n }\n })\n\n if (config.build?.cleanCssOptions) {\n logDeprecationWarning(\n 'build.cleanCssOptions',\n 'Vite now uses esbuild for CSS minification.'\n )\n }\n\n if (config.build?.terserOptions && config.build.minify === 'esbuild') {\n logger.warn(\n chalk.yellow(\n `build.terserOptions is specified but build.minify is not set to use Terser. ` +\n `Note Vite now defaults to use esbuild for minification. If you still ` +\n `prefer Terser, set build.minify to \"terser\".`\n )\n )\n }\n\n return resolved\n}\n\n/**\n * Resolve base. Note that some users use Vite to build for non-web targets like\n * electron or expects to deploy\n */\nfunction resolveBaseUrl(\n base: UserConfig['base'] = '/',\n isBuild: boolean,\n logger: Logger\n): string {\n // #1669 special treatment for empty for same dir relative base\n if (base === '' || base === './') {\n return isBuild ? base : '/'\n }\n if (base.startsWith('.')) {\n logger.warn(\n chalk.yellow.bold(\n `(!) invalid \"base\" option: ${base}. The value can only be an absolute ` +\n `URL, ./, or an empty string.`\n )\n )\n base = '/'\n }\n\n // external URL\n if (isExternalUrl(base)) {\n if (!isBuild) {\n // get base from full url during dev\n const parsed = parseUrl(base)\n base = parsed.pathname || '/'\n }\n } else {\n // ensure leading slash\n if (!base.startsWith('/')) {\n logger.warn(\n chalk.yellow.bold(`(!) \"base\" option should start with a slash.`)\n )\n base = '/' + base\n }\n }\n\n // ensure ending slash\n if (!base.endsWith('/')) {\n logger.warn(chalk.yellow.bold(`(!) \"base\" option should end with a slash.`))\n base += '/'\n }\n\n return base\n}\n\nfunction mergeConfigRecursively(\n a: Record<string, any>,\n b: Record<string, any>,\n rootPath: string\n) {\n const merged: Record<string, any> = { ...a }\n for (const key in b) {\n const value = b[key]\n if (value == null) {\n continue\n }\n\n const existing = merged[key]\n if (Array.isArray(existing) && Array.isArray(value)) {\n merged[key] = [...existing, ...value]\n continue\n }\n if (isObject(existing) && isObject(value)) {\n merged[key] = mergeConfigRecursively(\n existing,\n value,\n rootPath ? `${rootPath}.${key}` : key\n )\n continue\n }\n\n // fields that require special handling\n if (existing != null) {\n if (key === 'alias' && (rootPath === 'resolve' || rootPath === '')) {\n merged[key] = mergeAlias(existing, value)\n continue\n } else if (key === 'assetsInclude' && rootPath === '') {\n merged[key] = [].concat(existing, value)\n continue\n } else if (key === 'noExternal' && existing === true) {\n continue\n }\n }\n\n merged[key] = value\n }\n return merged\n}\n\nexport function mergeConfig(\n a: Record<string, any>,\n b: Record<string, any>,\n isRoot = true\n): Record<string, any> {\n return mergeConfigRecursively(a, b, isRoot ? '' : '.')\n}\n\nfunction mergeAlias(a: AliasOptions = [], b: AliasOptions = []): Alias[] {\n return [...normalizeAlias(a), ...normalizeAlias(b)]\n}\n\nfunction normalizeAlias(o: AliasOptions): Alias[] {\n return Array.isArray(o)\n ? o.map(normalizeSingleAlias)\n : Object.keys(o).map((find) =>\n normalizeSingleAlias({\n find,\n replacement: (o as any)[find]\n })\n )\n}\n\n// https://github.com/vitejs/vite/issues/1363\n// work around https://github.com/rollup/plugins/issues/759\nfunction normalizeSingleAlias({ find, replacement }: Alias): Alias {\n if (\n typeof find === 'string' &&\n find.endsWith('/') &&\n replacement.endsWith('/')\n ) {\n find = find.slice(0, find.length - 1)\n replacement = replacement.slice(0, replacement.length - 1)\n }\n return { find, replacement }\n}\n\nexport function sortUserPlugins(\n plugins: (Plugin | Plugin[])[] | undefined\n): [Plugin[], Plugin[], Plugin[]] {\n const prePlugins: Plugin[] = []\n const postPlugins: Plugin[] = []\n const normalPlugins: Plugin[] = []\n\n if (plugins) {\n plugins.flat().forEach((p) => {\n if (p.enforce === 'pre') prePlugins.push(p)\n else if (p.enforce === 'post') postPlugins.push(p)\n else normalPlugins.push(p)\n })\n }\n\n return [prePlugins, normalPlugins, postPlugins]\n}\n\nexport async function loadConfigFromFile(\n configEnv: ConfigEnv,\n configFile?: string,\n configRoot: string = process.cwd(),\n logLevel?: LogLevel\n): Promise<{\n path: string\n config: UserConfig\n dependencies: string[]\n} | null> {\n const start = performance.now()\n const getTime = () => `${(performance.now() - start).toFixed(2)}ms`\n\n let resolvedPath: string | undefined\n let isTS = false\n let isMjs = false\n let dependencies: string[] = []\n\n // check package.json for type: \"module\" and set `isMjs` to true\n try {\n const pkg = lookupFile(configRoot, ['package.json'])\n if (pkg && JSON.parse(pkg).type === 'module') {\n isMjs = true\n }\n } catch (e) {}\n\n if (configFile) {\n // explicit config path is always resolved from cwd\n resolvedPath = path.resolve(configFile)\n isTS = configFile.endsWith('.ts')\n\n if (configFile.endsWith('.mjs')) {\n isMjs = true\n }\n } else {\n // implicit config file loaded from inline root (if present)\n // otherwise from cwd\n const jsconfigFile = path.resolve(configRoot, 'vite.config.js')\n if (fs.existsSync(jsconfigFile)) {\n resolvedPath = jsconfigFile\n }\n\n if (!resolvedPath) {\n const mjsconfigFile = path.resolve(configRoot, 'vite.config.mjs')\n if (fs.existsSync(mjsconfigFile)) {\n resolvedPath = mjsconfigFile\n isMjs = true\n }\n }\n\n if (!resolvedPath) {\n const tsconfigFile = path.resolve(configRoot, 'vite.config.ts')\n if (fs.existsSync(tsconfigFile)) {\n resolvedPath = tsconfigFile\n isTS = true\n }\n }\n }\n\n if (!resolvedPath) {\n debug('no config file found.')\n return null\n }\n\n try {\n let userConfig: UserConfigExport | undefined\n\n if (isMjs) {\n const fileUrl = require('url').pathToFileURL(resolvedPath)\n if (isTS) {\n // before we can register loaders without requiring users to run node\n // with --experimental-loader themselves, we have to do a hack here:\n // bundle the config file w/ ts transforms first, write it to disk,\n // load it with native Node ESM, then delete the file.\n const bundled = await bundleConfigFile(resolvedPath, true)\n dependencies = bundled.dependencies\n fs.writeFileSync(resolvedPath + '.js', bundled.code)\n userConfig = (await dynamicImport(`${fileUrl}.js?t=${Date.now()}`))\n .default\n fs.unlinkSync(resolvedPath + '.js')\n debug(`TS + native esm config loaded in ${getTime()}`, fileUrl)\n } else {\n // using Function to avoid this from being compiled away by TS/Rollup\n // append a query so that we force reload fresh config in case of\n // server restart\n userConfig = (await dynamicImport(`${fileUrl}?t=${Date.now()}`)).default\n debug(`native esm config loaded in ${getTime()}`, fileUrl)\n }\n }\n\n if (!userConfig && !isTS && !isMjs) {\n // 1. try to directly require the module (assuming commonjs)\n try {\n // clear cache in case of server restart\n delete require.cache[require.resolve(resolvedPath)]\n userConfig = require(resolvedPath)\n debug(`cjs config loaded in ${getTime()}`)\n } catch (e) {\n const ignored = new RegExp(\n [\n `Cannot use import statement`,\n `Must use import to load ES Module`,\n // #1635, #2050 some Node 12.x versions don't have esm detection\n // so it throws normal syntax errors when encountering esm syntax\n `Unexpected token`,\n `Unexpected identifier`\n ].join('|')\n )\n if (!ignored.test(e.message)) {\n throw e\n }\n }\n }\n\n if (!userConfig) {\n // 2. if we reach here, the file is ts or using es import syntax, or\n // the user has type: \"module\" in their package.json (#917)\n // transpile es import syntax to require syntax using rollup.\n // lazy require rollup (it's actually in dependencies)\n const bundled = await bundleConfigFile(resolvedPath)\n dependencies = bundled.dependencies\n userConfig = await loadConfigFromBundledFile(resolvedPath, bundled.code)\n debug(`bundled config file loaded in ${getTime()}`)\n }\n\n const config = await (typeof userConfig === 'function'\n ? userConfig(configEnv)\n : userConfig)\n if (!isObject(config)) {\n throw new Error(`config must export or return an object.`)\n }\n return {\n path: normalizePath(resolvedPath),\n config,\n dependencies\n }\n } catch (e) {\n createLogger(logLevel).error(\n chalk.red(`failed to load config from ${resolvedPath}`),\n { error: e }\n )\n throw e\n }\n}\n\nasync function bundleConfigFile(\n fileName: string,\n mjs = false\n): Promise<{ code: string; dependencies: string[] }> {\n const result = await build({\n absWorkingDir: process.cwd(),\n entryPoints: [fileName],\n outfile: 'out.js',\n write: false,\n platform: 'node',\n bundle: true,\n format: mjs ? 'esm' : 'cjs',\n sourcemap: 'inline',\n metafile: true,\n plugins: [\n {\n name: 'externalize-deps',\n setup(build) {\n build.onResolve({ filter: /.*/ }, (args) => {\n const id = args.path\n if (id[0] !== '.' && !path.isAbsolute(id)) {\n return {\n external: true\n }\n }\n })\n }\n },\n {\n name: 'replace-import-meta',\n setup(build) {\n build.onLoad({ filter: /\\.[jt]s$/ }, async (args) => {\n const contents = await fs.promises.readFile(args.path, 'utf8')\n return {\n loader: args.path.endsWith('.ts') ? 'ts' : 'js',\n contents: contents\n .replace(\n /\\bimport\\.meta\\.url\\b/g,\n JSON.stringify(`file://${args.path}`)\n )\n .replace(\n /\\b__dirname\\b/g,\n JSON.stringify(path.dirname(args.path))\n )\n .replace(/\\b__filename\\b/g, JSON.stringify(args.path))\n }\n })\n }\n }\n ]\n })\n const { text } = result.outputFiles[0]\n return {\n code: text,\n dependencies: result.metafile ? Object.keys(result.metafile.inputs) : []\n }\n}\n\ninterface NodeModuleWithCompile extends NodeModule {\n _compile(code: string, filename: string): any\n}\n\nasync function loadConfigFromBundledFile(\n fileName: string,\n bundledCode: string\n): Promise<UserConfig> {\n const extension = path.extname(fileName)\n const defaultLoader = require.extensions[extension]!\n require.extensions[extension] = (module: NodeModule, filename: string) => {\n if (filename === fileName) {\n ;(module as NodeModuleWithCompile)._compile(bundledCode, filename)\n } else {\n defaultLoader(module, filename)\n }\n }\n // clear cache in case of server restart\n delete require.cache[require.resolve(fileName)]\n const raw = require(fileName)\n const config = raw.__esModule ? raw.default : raw\n require.extensions[extension] = defaultLoader\n return config\n}\n\nexport function loadEnv(\n mode: string,\n envDir: string,\n prefixes: string | string[] = 'VITE_'\n): Record<string, string> {\n if (mode === 'local') {\n throw new Error(\n `\"local\" cannot be used as a mode name because it conflicts with ` +\n `the .local postfix for .env files.`\n )\n }\n prefixes = arraify(prefixes)\n const env: Record<string, string> = {}\n const envFiles = [\n /** mode local file */ `.env.${mode}.local`,\n /** mode file */ `.env.${mode}`,\n /** local file */ `.env.local`,\n /** default file */ `.env`\n ]\n\n // check if there are actual env variables starting with VITE_*\n // these are typically provided inline and should be prioritized\n for (const key in process.env) {\n if (\n prefixes.some((prefix) => key.startsWith(prefix)) &&\n env[key] === undefined\n ) {\n env[key] = process.env[key] as string\n }\n }\n\n for (const file of envFiles) {\n const path = lookupFile(envDir, [file], true)\n if (path) {\n const parsed = dotenv.parse(fs.readFileSync(path), {\n debug: !!process.env.DEBUG || undefined\n })\n\n // let environment variables use each other\n dotenvExpand({\n parsed,\n // prevent process.env mutation\n ignoreProcessEnv: true\n } as any)\n\n // only keys that start with prefix are exposed to client\n for (const [key, value] of Object.entries(parsed)) {\n if (\n prefixes.some((prefix) => key.startsWith(prefix)) &&\n env[key] === undefined\n ) {\n env[key] = value\n } else if (key === 'NODE_ENV') {\n // NODE_ENV override in .env file\n process.env.VITE_USER_NODE_ENV = value\n }\n }\n }\n }\n return env\n}\n\nexport function resolveEnvPrefix({\n envPrefix = 'VITE_'\n}: UserConfig): string[] {\n envPrefix = arraify(envPrefix)\n if (envPrefix.some((prefix) => prefix === '')) {\n throw new Error(\n `envPrefix option contains value '', which could lead unexpected exposure of sensitive information.`\n )\n }\n return envPrefix\n}\n","/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredCharsets;\nmodule.exports.preferredCharsets = preferredCharsets;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleCharsetRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Charset header.\n * @private\n */\n\nfunction parseAcceptCharset(accept) {\n var accepts = accept.split(',');\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var charset = parseCharset(accepts[i].trim(), i);\n\n if (charset) {\n accepts[j++] = charset;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a charset from the Accept-Charset header.\n * @private\n */\n\nfunction parseCharset(str, i) {\n var match = simpleCharsetRegExp.exec(str);\n if (!match) return null;\n\n var charset = match[1];\n var q = 1;\n if (match[2]) {\n var params = match[2].split(';')\n for (var j = 0; j < params.length; j++) {\n var p = params[j].trim().split('=');\n if (p[0] === 'q') {\n q = parseFloat(p[1]);\n break;\n }\n }\n }\n\n return {\n charset: charset,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of a charset.\n * @private\n */\n\nfunction getCharsetPriority(charset, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(charset, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the charset.\n * @private\n */\n\nfunction specify(charset, spec, index) {\n var s = 0;\n if(spec.charset.toLowerCase() === charset.toLowerCase()){\n s |= 1;\n } else if (spec.charset !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n}\n\n/**\n * Get the preferred charsets from an Accept-Charset header.\n * @public\n */\n\nfunction preferredCharsets(accept, provided) {\n // RFC 2616 sec 14.2: no header = *\n var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');\n\n if (!provided) {\n // sorted list of all charsets\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullCharset);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getCharsetPriority(type, accepts, index);\n });\n\n // sorted list of accepted charsets\n return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full charset string.\n * @private\n */\n\nfunction getFullCharset(spec) {\n return spec.charset;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n","/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredEncodings;\nmodule.exports.preferredEncodings = preferredEncodings;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleEncodingRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Encoding header.\n * @private\n */\n\nfunction parseAcceptEncoding(accept) {\n var accepts = accept.split(',');\n var hasIdentity = false;\n var minQuality = 1;\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var encoding = parseEncoding(accepts[i].trim(), i);\n\n if (encoding) {\n accepts[j++] = encoding;\n hasIdentity = hasIdentity || specify('identity', encoding);\n minQuality = Math.min(minQuality, encoding.q || 1);\n }\n }\n\n if (!hasIdentity) {\n /*\n * If identity doesn't explicitly appear in the accept-encoding header,\n * it's added to the list of acceptable encoding with the lowest q\n */\n accepts[j++] = {\n encoding: 'identity',\n q: minQuality,\n i: i\n };\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse an encoding from the Accept-Encoding header.\n * @private\n */\n\nfunction parseEncoding(str, i) {\n var match = simpleEncodingRegExp.exec(str);\n if (!match) return null;\n\n var encoding = match[1];\n var q = 1;\n if (match[2]) {\n var params = match[2].split(';');\n for (var j = 0; j < params.length; j++) {\n var p = params[j].trim().split('=');\n if (p[0] === 'q') {\n q = parseFloat(p[1]);\n break;\n }\n }\n }\n\n return {\n encoding: encoding,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of an encoding.\n * @private\n */\n\nfunction getEncodingPriority(encoding, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(encoding, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the encoding.\n * @private\n */\n\nfunction specify(encoding, spec, index) {\n var s = 0;\n if(spec.encoding.toLowerCase() === encoding.toLowerCase()){\n s |= 1;\n } else if (spec.encoding !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n};\n\n/**\n * Get the preferred encodings from an Accept-Encoding header.\n * @public\n */\n\nfunction preferredEncodings(accept, provided) {\n var accepts = parseAcceptEncoding(accept || '');\n\n if (!provided) {\n // sorted list of all encodings\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullEncoding);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getEncodingPriority(type, accepts, index);\n });\n\n // sorted list of accepted encodings\n return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full encoding string.\n * @private\n */\n\nfunction getFullEncoding(spec) {\n return spec.encoding;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n","/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredLanguages;\nmodule.exports.preferredLanguages = preferredLanguages;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleLanguageRegExp = /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Language header.\n * @private\n */\n\nfunction parseAcceptLanguage(accept) {\n var accepts = accept.split(',');\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var language = parseLanguage(accepts[i].trim(), i);\n\n if (language) {\n accepts[j++] = language;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a language from the Accept-Language header.\n * @private\n */\n\nfunction parseLanguage(str, i) {\n var match = simpleLanguageRegExp.exec(str);\n if (!match) return null;\n\n var prefix = match[1],\n suffix = match[2],\n full = prefix;\n\n if (suffix) full += \"-\" + suffix;\n\n var q = 1;\n if (match[3]) {\n var params = match[3].split(';')\n for (var j = 0; j < params.length; j++) {\n var p = params[j].split('=');\n if (p[0] === 'q') q = parseFloat(p[1]);\n }\n }\n\n return {\n prefix: prefix,\n suffix: suffix,\n q: q,\n i: i,\n full: full\n };\n}\n\n/**\n * Get the priority of a language.\n * @private\n */\n\nfunction getLanguagePriority(language, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(language, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the language.\n * @private\n */\n\nfunction specify(language, spec, index) {\n var p = parseLanguage(language)\n if (!p) return null;\n var s = 0;\n if(spec.full.toLowerCase() === p.full.toLowerCase()){\n s |= 4;\n } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {\n s |= 2;\n } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {\n s |= 1;\n } else if (spec.full !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n};\n\n/**\n * Get the preferred languages from an Accept-Language header.\n * @public\n */\n\nfunction preferredLanguages(accept, provided) {\n // RFC 2616 sec 14.4: no header = *\n var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');\n\n if (!provided) {\n // sorted list of all languages\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullLanguage);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getLanguagePriority(type, accepts, index);\n });\n\n // sorted list of accepted languages\n return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full language string.\n * @private\n */\n\nfunction getFullLanguage(spec) {\n return spec.full;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n","/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredMediaTypes;\nmodule.exports.preferredMediaTypes = preferredMediaTypes;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept header.\n * @private\n */\n\nfunction parseAccept(accept) {\n var accepts = splitMediaTypes(accept);\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var mediaType = parseMediaType(accepts[i].trim(), i);\n\n if (mediaType) {\n accepts[j++] = mediaType;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\n\nfunction parseMediaType(str, i) {\n var match = simpleMediaTypeRegExp.exec(str);\n if (!match) return null;\n\n var params = Object.create(null);\n var q = 1;\n var subtype = match[2];\n var type = match[1];\n\n if (match[3]) {\n var kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n for (var j = 0; j < kvps.length; j++) {\n var pair = kvps[j];\n var key = pair[0].toLowerCase();\n var val = pair[1];\n\n // get the value, unwrapping quotes\n var value = val && val[0] === '\"' && val[val.length - 1] === '\"'\n ? val.substr(1, val.length - 2)\n : val;\n\n if (key === 'q') {\n q = parseFloat(value);\n break;\n }\n\n // store parameter\n params[key] = value;\n }\n }\n\n return {\n type: type,\n subtype: subtype,\n params: params,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\n\nfunction getMediaTypePriority(type, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(type, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\n\nfunction specify(type, spec, index) {\n var p = parseMediaType(type);\n var s = 0;\n\n if (!p) {\n return null;\n }\n\n if(spec.type.toLowerCase() == p.type.toLowerCase()) {\n s |= 4\n } else if(spec.type != '*') {\n return null;\n }\n\n if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n s |= 2\n } else if(spec.subtype != '*') {\n return null;\n }\n\n var keys = Object.keys(spec.params);\n if (keys.length > 0) {\n if (keys.every(function (k) {\n return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();\n })) {\n s |= 1\n } else {\n return null\n }\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s,\n }\n}\n\n/**\n * Get the preferred media types from an Accept header.\n * @public\n */\n\nfunction preferredMediaTypes(accept, provided) {\n // RFC 2616 sec 14.2: no header = */*\n var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');\n\n if (!provided) {\n // sorted list of all types\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullType);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getMediaTypePriority(type, accepts, index);\n });\n\n // sorted list of accepted types\n return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\n\nfunction getFullType(spec) {\n return spec.type + '/' + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\n\nfunction quoteCount(string) {\n var count = 0;\n var index = 0;\n\n while ((index = string.indexOf('\"', index)) !== -1) {\n count++;\n index++;\n }\n\n return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\n\nfunction splitKeyValuePair(str) {\n var index = str.indexOf('=');\n var key;\n var val;\n\n if (index === -1) {\n key = str;\n } else {\n key = str.substr(0, index);\n val = str.substr(index + 1);\n }\n\n return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\n\nfunction splitMediaTypes(accept) {\n var accepts = accept.split(',');\n\n for (var i = 1, j = 0; i < accepts.length; i++) {\n if (quoteCount(accepts[j]) % 2 == 0) {\n accepts[++j] = accepts[i];\n } else {\n accepts[j] += ',' + accepts[i];\n }\n }\n\n // trim accepts\n accepts.length = j + 1;\n\n return accepts;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\n\nfunction splitParameters(str) {\n var parameters = str.split(';');\n\n for (var i = 1, j = 0; i < parameters.length; i++) {\n if (quoteCount(parameters[j]) % 2 == 0) {\n parameters[++j] = parameters[i];\n } else {\n parameters[j] += ';' + parameters[i];\n }\n }\n\n // trim parameters\n parameters.length = j + 1;\n\n for (var i = 0; i < parameters.length; i++) {\n parameters[i] = parameters[i].trim();\n }\n\n return parameters;\n}\n","/*!\n * negotiator\n * Copyright(c) 2012 Federico Romero\n * Copyright(c) 2012-2014 Isaac Z. Schlueter\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Cached loaded submodules.\n * @private\n */\n\nvar modules = Object.create(null);\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Negotiator;\nmodule.exports.Negotiator = Negotiator;\n\n/**\n * Create a Negotiator instance from a request.\n * @param {object} request\n * @public\n */\n\nfunction Negotiator(request) {\n if (!(this instanceof Negotiator)) {\n return new Negotiator(request);\n }\n\n this.request = request;\n}\n\nNegotiator.prototype.charset = function charset(available) {\n var set = this.charsets(available);\n return set && set[0];\n};\n\nNegotiator.prototype.charsets = function charsets(available) {\n var preferredCharsets = loadModule('charset').preferredCharsets;\n return preferredCharsets(this.request.headers['accept-charset'], available);\n};\n\nNegotiator.prototype.encoding = function encoding(available) {\n var set = this.encodings(available);\n return set && set[0];\n};\n\nNegotiator.prototype.encodings = function encodings(available) {\n var preferredEncodings = loadModule('encoding').preferredEncodings;\n return preferredEncodings(this.request.headers['accept-encoding'], available);\n};\n\nNegotiator.prototype.language = function language(available) {\n var set = this.languages(available);\n return set && set[0];\n};\n\nNegotiator.prototype.languages = function languages(available) {\n var preferredLanguages = loadModule('language').preferredLanguages;\n return preferredLanguages(this.request.headers['accept-language'], available);\n};\n\nNegotiator.prototype.mediaType = function mediaType(available) {\n var set = this.mediaTypes(available);\n return set && set[0];\n};\n\nNegotiator.prototype.mediaTypes = function mediaTypes(available) {\n var preferredMediaTypes = loadModule('mediaType').preferredMediaTypes;\n return preferredMediaTypes(this.request.headers.accept, available);\n};\n\n// Backwards compatibility\nNegotiator.prototype.preferredCharset = Negotiator.prototype.charset;\nNegotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;\nNegotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;\nNegotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;\nNegotiator.prototype.preferredLanguage = Negotiator.prototype.language;\nNegotiator.prototype.preferredLanguages = Negotiator.prototype.languages;\nNegotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;\nNegotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;\n\n/**\n * Load the given module.\n * @private\n */\n\nfunction loadModule(moduleName) {\n var module = modules[moduleName];\n\n if (module !== undefined) {\n return module;\n }\n\n // This uses a switch for static require analysis\n switch (moduleName) {\n case 'charset':\n module = require('./lib/charset');\n break;\n case 'encoding':\n module = require('./lib/encoding');\n break;\n case 'language':\n module = require('./lib/language');\n break;\n case 'mediaType':\n module = require('./lib/mediaType');\n break;\n default:\n throw new Error('Cannot find module \\'' + moduleName + '\\'');\n }\n\n // Store to prevent invoking require()\n modules[moduleName] = module;\n\n return module;\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/*!\n * accepts\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Negotiator = require('negotiator')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Accepts\n\n/**\n * Create a new Accepts object for the given req.\n *\n * @param {object} req\n * @public\n */\n\nfunction Accepts (req) {\n if (!(this instanceof Accepts)) {\n return new Accepts(req)\n }\n\n this.headers = req.headers\n this.negotiator = new Negotiator(req)\n}\n\n/**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * this.types('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * this.types('html');\n * // => \"html\"\n * this.types('text/html');\n * // => \"text/html\"\n * this.types('json', 'text');\n * // => \"json\"\n * this.types('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * this.types('image/png');\n * this.types('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * this.types(['html', 'json']);\n * this.types('html', 'json');\n * // => \"json\"\n *\n * @param {String|Array} types...\n * @return {String|Array|Boolean}\n * @public\n */\n\nAccepts.prototype.type =\nAccepts.prototype.types = function (types_) {\n var types = types_\n\n // support flattened arguments\n if (types && !Array.isArray(types)) {\n types = new Array(arguments.length)\n for (var i = 0; i < types.length; i++) {\n types[i] = arguments[i]\n }\n }\n\n // no types, return all requested types\n if (!types || types.length === 0) {\n return this.negotiator.mediaTypes()\n }\n\n // no accept header, return first given type\n if (!this.headers.accept) {\n return types[0]\n }\n\n var mimes = types.map(extToMime)\n var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))\n var first = accepts[0]\n\n return first\n ? types[mimes.indexOf(first)]\n : false\n}\n\n/**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n * ['gzip', 'deflate']\n *\n * @param {String|Array} encodings...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.encoding =\nAccepts.prototype.encodings = function (encodings_) {\n var encodings = encodings_\n\n // support flattened arguments\n if (encodings && !Array.isArray(encodings)) {\n encodings = new Array(arguments.length)\n for (var i = 0; i < encodings.length; i++) {\n encodings[i] = arguments[i]\n }\n }\n\n // no encodings, return all requested encodings\n if (!encodings || encodings.length === 0) {\n return this.negotiator.encodings()\n }\n\n return this.negotiator.encodings(encodings)[0] || false\n}\n\n/**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n * ['utf-8', 'utf-7', 'iso-8859-1']\n *\n * @param {String|Array} charsets...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.charset =\nAccepts.prototype.charsets = function (charsets_) {\n var charsets = charsets_\n\n // support flattened arguments\n if (charsets && !Array.isArray(charsets)) {\n charsets = new Array(arguments.length)\n for (var i = 0; i < charsets.length; i++) {\n charsets[i] = arguments[i]\n }\n }\n\n // no charsets, return all requested charsets\n if (!charsets || charsets.length === 0) {\n return this.negotiator.charsets()\n }\n\n return this.negotiator.charsets(charsets)[0] || false\n}\n\n/**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n * ['es', 'pt', 'en']\n *\n * @param {String|Array} langs...\n * @return {Array|String}\n * @public\n */\n\nAccepts.prototype.lang =\nAccepts.prototype.langs =\nAccepts.prototype.language =\nAccepts.prototype.languages = function (languages_) {\n var languages = languages_\n\n // support flattened arguments\n if (languages && !Array.isArray(languages)) {\n languages = new Array(arguments.length)\n for (var i = 0; i < languages.length; i++) {\n languages[i] = arguments[i]\n }\n }\n\n // no languages, return all requested languages\n if (!languages || languages.length === 0) {\n return this.negotiator.languages()\n }\n\n return this.negotiator.languages(languages)[0] || false\n}\n\n/**\n * Convert extnames to mime.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction extToMime (type) {\n return type.indexOf('/') === -1\n ? mime.lookup(type)\n : type\n}\n\n/**\n * Check if mime is valid.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction validMime (type) {\n return typeof type === 'string'\n}\n","/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: ((1 << 30) * 1024)\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.replace(formatThousandsRegExp, thousandsSeparator);\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * compressible\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Jeremiah Senkpiel\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\n\n/**\n * Module variables.\n * @private\n */\n\nvar COMPRESSIBLE_TYPE_REGEXP = /^text\\/|\\+(?:json|text|xml)$/i\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = compressible\n\n/**\n * Checks if a type is compressible.\n *\n * @param {string} type\n * @return {Boolean} compressible\n * @public\n */\n\nfunction compressible (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // strip parameters\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && match[1].toLowerCase()\n var data = db[mime]\n\n // return database information\n if (data && data.compressible !== undefined) {\n return data.compressible\n }\n\n // fallback to regexp or unknown\n return COMPRESSIBLE_TYPE_REGEXP.test(mime) || undefined\n}\n","/*!\n * on-headers\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onHeaders\n\n/**\n * Create a replacement writeHead method.\n *\n * @param {function} prevWriteHead\n * @param {function} listener\n * @private\n */\n\nfunction createWriteHead (prevWriteHead, listener) {\n var fired = false\n\n // return function with core name and argument list\n return function writeHead (statusCode) {\n // set headers from arguments\n var args = setWriteHeadHeaders.apply(this, arguments)\n\n // fire listener\n if (!fired) {\n fired = true\n listener.call(this)\n\n // pass-along an updated status code\n if (typeof args[0] === 'number' && this.statusCode !== args[0]) {\n args[0] = this.statusCode\n args.length = 1\n }\n }\n\n return prevWriteHead.apply(this, args)\n }\n}\n\n/**\n * Execute a listener when a response is about to write headers.\n *\n * @param {object} res\n * @return {function} listener\n * @public\n */\n\nfunction onHeaders (res, listener) {\n if (!res) {\n throw new TypeError('argument res is required')\n }\n\n if (typeof listener !== 'function') {\n throw new TypeError('argument listener must be a function')\n }\n\n res.writeHead = createWriteHead(res.writeHead, listener)\n}\n\n/**\n * Set headers contained in array on the response object.\n *\n * @param {object} res\n * @param {array} headers\n * @private\n */\n\nfunction setHeadersFromArray (res, headers) {\n for (var i = 0; i < headers.length; i++) {\n res.setHeader(headers[i][0], headers[i][1])\n }\n}\n\n/**\n * Set headers contained in object on the response object.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeadersFromObject (res, headers) {\n var keys = Object.keys(headers)\n for (var i = 0; i < keys.length; i++) {\n var k = keys[i]\n if (k) res.setHeader(k, headers[k])\n }\n}\n\n/**\n * Set headers and other properties on the response object.\n *\n * @param {number} statusCode\n * @private\n */\n\nfunction setWriteHeadHeaders (statusCode) {\n var length = arguments.length\n var headerIndex = length > 1 && typeof arguments[1] === 'string'\n ? 2\n : 1\n\n var headers = length >= headerIndex + 1\n ? arguments[headerIndex]\n : undefined\n\n this.statusCode = statusCode\n\n if (Array.isArray(headers)) {\n // handle array case\n setHeadersFromArray(this, headers)\n } else if (headers) {\n // handle object case\n setHeadersFromObject(this, headers)\n }\n\n // copy leading arguments\n var args = new Array(Math.min(length, headerIndex))\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n return args\n}\n","/*!\n * compression\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar accepts = require('accepts')\nvar Buffer = require('safe-buffer').Buffer\nvar bytes = require('bytes')\nvar compressible = require('compressible')\nvar debug = require('debug')('compression')\nvar onHeaders = require('on-headers')\nvar vary = require('vary')\nvar zlib = require('zlib')\n\n/**\n * Module exports.\n */\n\nmodule.exports = compression\nmodule.exports.filter = shouldCompress\n\n/**\n * Module variables.\n * @private\n */\n\nvar cacheControlNoTransformRegExp = /(?:^|,)\\s*?no-transform\\s*?(?:,|$)/\n\n/**\n * Compress response data with gzip / deflate.\n *\n * @param {Object} [options]\n * @return {Function} middleware\n * @public\n */\n\nfunction compression (options) {\n var opts = options || {}\n\n // options\n var filter = opts.filter || shouldCompress\n var threshold = bytes.parse(opts.threshold)\n\n if (threshold == null) {\n threshold = 1024\n }\n\n return function compression (req, res, next) {\n var ended = false\n var length\n var listeners = []\n var stream\n\n var _end = res.end\n var _on = res.on\n var _write = res.write\n\n // flush\n res.flush = function flush () {\n if (stream) {\n stream.flush()\n }\n }\n\n // proxy\n\n res.write = function write (chunk, encoding) {\n if (ended) {\n return false\n }\n\n if (!this._header) {\n this._implicitHeader()\n }\n\n return stream\n ? stream.write(toBuffer(chunk, encoding))\n : _write.call(this, chunk, encoding)\n }\n\n res.end = function end (chunk, encoding) {\n if (ended) {\n return false\n }\n\n if (!this._header) {\n // estimate the length\n if (!this.getHeader('Content-Length')) {\n length = chunkLength(chunk, encoding)\n }\n\n this._implicitHeader()\n }\n\n if (!stream) {\n return _end.call(this, chunk, encoding)\n }\n\n // mark ended\n ended = true\n\n // write Buffer for Node.js 0.8\n return chunk\n ? stream.end(toBuffer(chunk, encoding))\n : stream.end()\n }\n\n res.on = function on (type, listener) {\n if (!listeners || type !== 'drain') {\n return _on.call(this, type, listener)\n }\n\n if (stream) {\n return stream.on(type, listener)\n }\n\n // buffer listeners for future stream\n listeners.push([type, listener])\n\n return this\n }\n\n function nocompress (msg) {\n debug('no compression: %s', msg)\n addListeners(res, _on, listeners)\n listeners = null\n }\n\n onHeaders(res, function onResponseHeaders () {\n // determine if request is filtered\n if (!filter(req, res)) {\n nocompress('filtered')\n return\n }\n\n // determine if the entity should be transformed\n if (!shouldTransform(req, res)) {\n nocompress('no transform')\n return\n }\n\n // vary\n vary(res, 'Accept-Encoding')\n\n // content-length below threshold\n if (Number(res.getHeader('Content-Length')) < threshold || length < threshold) {\n nocompress('size below threshold')\n return\n }\n\n var encoding = res.getHeader('Content-Encoding') || 'identity'\n\n // already encoded\n if (encoding !== 'identity') {\n nocompress('already encoded')\n return\n }\n\n // head\n if (req.method === 'HEAD') {\n nocompress('HEAD request')\n return\n }\n\n // compression method\n var accept = accepts(req)\n var method = accept.encoding(['gzip', 'deflate', 'identity'])\n\n // we really don't prefer deflate\n if (method === 'deflate' && accept.encoding(['gzip'])) {\n method = accept.encoding(['gzip', 'identity'])\n }\n\n // negotiation failed\n if (!method || method === 'identity') {\n nocompress('not acceptable')\n return\n }\n\n // compression stream\n debug('%s compression', method)\n stream = method === 'gzip'\n ? zlib.createGzip(opts)\n : zlib.createDeflate(opts)\n\n // add buffered listeners to stream\n addListeners(stream, stream.on, listeners)\n\n // header fields\n res.setHeader('Content-Encoding', method)\n res.removeHeader('Content-Length')\n\n // compression\n stream.on('data', function onStreamData (chunk) {\n if (_write.call(res, chunk) === false) {\n stream.pause()\n }\n })\n\n stream.on('end', function onStreamEnd () {\n _end.call(res)\n })\n\n _on.call(res, 'drain', function onResponseDrain () {\n stream.resume()\n })\n })\n\n next()\n }\n}\n\n/**\n * Add bufferred listeners to stream\n * @private\n */\n\nfunction addListeners (stream, on, listeners) {\n for (var i = 0; i < listeners.length; i++) {\n on.apply(stream, listeners[i])\n }\n}\n\n/**\n * Get the length of a given chunk\n */\n\nfunction chunkLength (chunk, encoding) {\n if (!chunk) {\n return 0\n }\n\n return !Buffer.isBuffer(chunk)\n ? Buffer.byteLength(chunk, encoding)\n : chunk.length\n}\n\n/**\n * Default filter function.\n * @private\n */\n\nfunction shouldCompress (req, res) {\n var type = res.getHeader('Content-Type')\n\n if (type === undefined || !compressible(type)) {\n debug('%s not compressible', type)\n return false\n }\n\n return true\n}\n\n/**\n * Determine if the entity should be transformed.\n * @private\n */\n\nfunction shouldTransform (req, res) {\n var cacheControl = res.getHeader('Cache-Control')\n\n // Don't compress for Cache-Control: no-transform\n // https://tools.ietf.org/html/rfc7234#section-5.2.2.4\n return !cacheControl ||\n !cacheControlNoTransformRegExp.test(cacheControl)\n}\n\n/**\n * Coerce arguments to Buffer\n * @private\n */\n\nfunction toBuffer (chunk, encoding) {\n return !Buffer.isBuffer(chunk)\n ? Buffer.from(chunk, encoding)\n : chunk\n}\n","import path from 'path'\nimport sirv from 'sirv'\nimport connect from 'connect'\nimport compression from 'compression'\nimport { Server } from 'http'\nimport { ResolvedConfig, ServerOptions } from '.'\nimport { Connect } from 'types/connect'\nimport {\n resolveHttpsConfig,\n resolveHttpServer,\n httpServerStart\n} from './server/http'\nimport { openBrowser } from './server/openBrowser'\nimport corsMiddleware from 'cors'\nimport { proxyMiddleware } from './server/middlewares/proxy'\nimport { resolveHostname } from './utils'\n\n/**\n * Starts the Vite server in preview mode, to simulate a production deployment\n * @param config - the resolved Vite config\n * @param serverOptions - what host and port to use\n * @experimental\n */\nexport async function preview(\n config: ResolvedConfig,\n serverOptions: Pick<ServerOptions, 'port' | 'host'>\n): Promise<Server> {\n const app = connect() as Connect.Server\n const httpServer = await resolveHttpServer(\n config.server,\n app,\n await resolveHttpsConfig(config)\n )\n\n // cors\n const { cors } = config.server\n if (cors !== false) {\n app.use(corsMiddleware(typeof cors === 'boolean' ? {} : cors))\n }\n\n // proxy\n if (config.server.proxy) {\n app.use(proxyMiddleware(httpServer, config))\n }\n\n app.use(compression())\n\n const distDir = path.resolve(config.root, config.build.outDir)\n app.use(\n config.base,\n sirv(distDir, {\n etag: true,\n dev: true,\n single: true\n })\n )\n\n const options = config.server\n const hostname = resolveHostname(serverOptions.host ?? options.host)\n const port = serverOptions.port ?? 5000\n const protocol = options.https ? 'https' : 'http'\n const logger = config.logger\n const base = config.base\n\n const serverPort = await httpServerStart(httpServer, {\n port,\n strictPort: options.strictPort,\n host: hostname.host,\n logger\n })\n\n if (options.open) {\n const path = typeof options.open === 'string' ? options.open : base\n openBrowser(\n path.startsWith('http')\n ? path\n : `${protocol}://${hostname.name}:${serverPort}${path}`,\n true,\n logger\n )\n }\n\n return httpServer\n}\n"],"names":["colorName","cssKeywords","require$$0","reverseKeywords","convert","conversions","comparativeDistance","buildGraph","deriveBFS","link","wrapConversion","route","require$$1","models","wrapRaw","wrapRounded","colorConvert","hasFlag","os","require$$2","env","forceColor","translateLevel","supportsColor","getSupportLevel","supportsColor_1","stringReplaceAll","stringEncaseCRLFWithFirstIndex","util","TEMPLATE_REGEX","STYLE_REGEX","STRING_REGEX","ESCAPE_REGEX","ESCAPES","unescape","parseArguments","parseStyle","buildStyle","templates","ansiStyles","isArray","proto","require$$3","chalk","s","m","h","d","y","ms","parse","fmtLong","fmtShort","plural","common","srcModule","path","charToInteger","chars","i","encode","encodeInteger","Url","normalizePath","resolve","resolve$1","binarySearch","SourceMap","slash","unwrapId","normalizeId","builtins","resolveFrom","filter","DEBUG","debug","isWindows","URL","pathToFileURL","performance","isObject","fs","range","pad","readline","promisify","gzip","btoa","toString","warned","this$1","Mime","fsp","mime","parseUrl","createHash","array","flatten","errno","DirentFromStats","createDirentFromStats","path_1","escape","isExtglob","isGlob","globby","globParent","utils","stringify","isNumber","toRegexRange","fill","compile","append","expand","constants","MAX_LENGTH","CHAR_COMMA","CHAR_DOT","CHAR_LEFT_PARENTHESES","CHAR_RIGHT_PARENTHESES","CHAR_LEFT_CURLY_BRACE","CHAR_RIGHT_CURLY_BRACE","CHAR_LEFT_SQUARE_BRACKET","CHAR_RIGHT_SQUARE_BRACKET","parse_1","braces","STAR","POSIX_REGEX_SOURCE","scan","require$$4","picomatch","micromatch","pattern","GLOBSTAR","getPositivePatterns","makeRe","PassThrough","slice","merge2","stream","merge","string","isString","require$$5","require$$6","async","read","callFailureCallback","callSuccessCallback","sync","settings","Settings","out","settings_1","stat","getSettings","promise","global","queueMicrotask","joinPathSegments","fsStat","constants_1","readdirWithFileTypes","readdir","reusify","noop","queueModule","reader","Reader","fsScandir","reader_1","async_1","stream_1","sync_1","walk","fsWalk","entry","error","provider_1","assertPatternsInput","Node","PlainValue","Collection","Document","Alias","resolveSeq","warnings","map","core","createNode","Schema","defaultOptions","visit","yaml","resolveFromModule","importFromModule","importCwdModule","req","load","config","require","src","ensureArray","win32","posix","getMatcherString","isAbsolute","createFilter","pm","reservedWords","forbiddenIdentifiers","makeLegalIdentifier","glob","postcssrc","transform","formatMessages","parseImports","commentRE","path2","fs2","parseFile","fs3","path3","createRequire","this","Worker","Scope","sep","realpath","version","concatMap","balanced","minimatch","Minimatch","inherits_browserModule","inheritsModule","pathIsAbsoluteModule","setopts","ownProp","isIgnored","childrenIgnored","globSync","GlobSync","rp","assert","require$$7","wrappy","onceModule","once","inflight","EE","require$$8","require$$9","require$$11","basename","extname","dirname","existsSync","join","readFileSync","statSync","getCommonDir","arrayUnion","dirGlobModule","SLASH","fastGlob","gitignoreModule","FilterStream","UniqueStream","globbyModule","isDebug","_resolveExports","relative","hasOwnProperty","has","acorn","privateClassElements","ansiRegex","strip","acorn.Parser","build","commonjsPlugin","dynamicImportVars","encodeUrl","escapeHtml","first","onFinishedModule","onFinished","isFinished","defer","url","parseurlModule","statuses","unpipe","finalhandler","send","EventEmitter","http","createServer","varyModule","vary","libModule","sysPath","lstat","BANG","readdirp","anymatch_1","arrify","anymatch","anymatchModule","binaryExtensions","isBinaryPath","EMPTY_FN","EMPTY_STR","EV_CHANGE","EV_ADD","EV_ADD_DIR","EV_ERROR","STR_DATA","STR_END","BRACE_START","open","statMethods","NodeFsHandler","EV_UNLINK","FUNCTION_TYPE","FsEventsHandler","fseventsHandlerModule","require$$10","require$$12","EMPTY_BUFFER","concat","toArrayBuffer","toBuffer","bufferUtilModule","Limiter","zlib","kStatusCode","NOOP","PerMessageDeflate","isValidStatusCode","validationModule","Writable","BINARY_TYPES","kWebSocket","Receiver","Sender","format","https","GUID","require$$13","require$$14","WebSocket","socketOnError","abortHandshake","emitClose","addListeners","createHttpsServer","STATUS_CODES","followRedirectsModule","httpProxy","alias","getEtag","extractNames","eswalk","qs","readdirSync","normalize","debugCache","convertSourceMap.fromSource","convertSourceMap.fromMapFileSource","match","isDocker","isWsl","isWslModule","childProcess","windows","isexe","checkStat","which","pathKeyModule","resolveCommand","shebangRegex","shebangCommand","readShebang","isWin","enoent","crossSpawnModule","stripFinalNewline","mimicFn","mimicFnModule","onetime","onetimeModule","signals","_os","_realtime","main","signalsByName","makeError","normalizeStdio","stdioModule","process","signalExitModule","spawnedKill","spawnedCancel","setupTimeout","validateTimeout","setExitHandler","isStream","bufferStream","getStream","getStreamModule","mergeStream","handleInput","makeAllStream","getSpawnedResult","validateInputSync","mergePromise","getSpawnedPromise","joinCommand","getEscapedCommand","parseCommand","execaModule","execa","execSync","conversionsModule","escapeStringRegexp","ArraySet","MappingList","base64VLQ","SourceMapGenerator","SourceMapConsumer","source","parseJS","URLSearchParams","aliasPlugin","dotenv","dotenvExpand","charsetModule","specify","isQuality","compareSpecs","encodingModule","languageModule","mediaTypeModule","negotiatorModule","Negotiator","mimeDb","accepts","bytesModule","bytes","compressible","onHeaders","Buffer","compressionModule","compression"],"mappings":"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AAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,C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AAM,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3E;AACA,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAC7C,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,aAAa,GAAG,kBAAkB,CAAC;AACzC;AACA,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAC7D,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AACvD,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAC1D;AACA,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,OAAO,GAAG,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF;AACA,MAAM,oBAAoB,GAAG,CAAC,wNAAwN,CAAC,CAAC;AACxP;AACA,MAAM,kBAAkB,GAAG,CAAC;AAC5B;AACA,CAAC,EAAE,oBAAoB,CAAC;AACxB;AACA,CAAC,CAAC;AACF;AACA,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,KAAK,CAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,qBAAqB,GAAG,uBAAuB,GAAG,oBAAoB,CAAC;AAC1E;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF;AACA,SAAS,gBAAgB,CAAC,8BAA8B,EAAE,qBAAqB,EAAE;AACjF,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;AACpB,IAAI,8BAA8B,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,kBAAkB;AAClG,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;AACjD,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,IAAI,YAAY,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrD,EAAE,MAAM,YAAY,GAAG;AACvB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACtF;AACA,EAAE,OAAO,YAAY,EAAE,EAAE;AACzB,IAAI,YAAY,GAAG,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EA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AACvC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,QAAO;AAC1B,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;AAC9C,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,SAAS,GAAG;AAClB;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,IAAI,SAAS;AACb,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAQ,KAAK;AACb,QAAQ,KAAK;AACb,GAAG;AACH;AACA;AACA,EAAE;AACF,IAAI,OAAO;AACX,IAAI,MAAM,KAAK;AACf,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF,IAAI,gBAAgB;AACpB,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACzB,GAAG;AACH;AACA,EAAE;AACF;AACA,IAAI,WAAW;AACf,IAAI,MAAM,MAAM;AAChB,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,IAAI,KAAK;AACT,IAAI,MAAM,GAAG;AACb,GAAG;AACH;AACA;AACA,EAAE;AACF,IAAI,KAAK;AACT,IAAI,MAAM,KAAK;AACf,GAAG;AACH;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB;AACtB;AACA;AACA,IAAI,MAAM,aAAa;AACvB,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,IAAI,WAAW;AACf,IAAI,SAAS,gBAAgB,IAAI;AACjC;AACA,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,WAAW;AACrB;AACA;AACA;AACA,UAAU,GAAG;AACb,KAAK;AACL,GAAG;AACH;AACA;AACA,E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C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9yC;AACA;AACA,IAAI,qBAAqB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACtqB;AACA;AA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,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChzC;AACA;AACA,EAAE,IAAI,qBAAqB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACxqB;AACA;AACA;AACA;AACA,EAAE,SAAS,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE;AACpC,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC;AACtB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC5C,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE,EAAE,OAAO,KAAK,EAAE;AACtC,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,OAAO,IAAI,EAAE;AACtC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,EAAE,SAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE;AAC3C,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE;AACzC,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,EAAE;AAClC,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE;AACzC,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,EAAE,OAAO,IAAI,EAAE;AACnC,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE,EAAE,OAAO,IAAI,IAAI,IAAI,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;AAC1G,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,EAAE,OAAO,KAAK,EAAE;AAC1C,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,0BAA0B,CAAC;AAC1D,GAAG;AACH;AACA;AACA;AACA,EAAE,SAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE;AAC1C,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE;AACzC,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,EAAE;AAClC,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,KAAK,EAAE;AACnC,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,EAAE;AAClC,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE;AACzC,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,EAAE,OAAO,IAAI,EAAE;AACnC,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE,EAAE,OAAO,IAAI,IAAI,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;AACrG,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,EAAE,OAAO,KAAK,EAAE;AAC1C,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,0BAA0B,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC;AACxG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG,SAAS,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;AAClD,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;AACrC;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAChC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAClC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;AACpC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC9B,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;AAC7B,IAAI,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/D,GAAG;AACH,EAAE,IAAI,UAAU,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACvE;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG,EAAE,CAAC;AACtB;AACA;AACA,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE;AAC7B,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AAC3C;AACA,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3B,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;AAC1D,GAAG;AACH;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;AACzC,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC/C,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC/C,IAAI,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;AAC3C,IAAI,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC;AACrD,IAAI,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;AAC7B;AACA;AACA,IAAI,QAAQ,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACtE,IAAI,QAAQ,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;AAChC,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACpE,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;AAC9B,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACpE,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;AAC9B,IAAI,KAAK,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;AACzC,IAAI,IAAI,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;AACxC,IAAI,KAAK,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;AACzC,IAAI,GAAG,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;AAC3B,IAAI,QAAQ,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;AAC5C,IAAI,WAAW,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC;AACpC,IAAI,KAAK,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;AAC1C,IAAI,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC;AACvC,IAAI,eAAe,EAAE,IAAI,SAAS,CAAC,iBAAiB,CAAC;AACrD,IAAI,QAAQ,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;AAC9C,IAAI,SAAS,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;AAC7C,IAAI,YAAY,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC9D,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACnE,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACnF,IAAI,MAAM,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACpF,IAAI,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7B,IAAI,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B,IAAI,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5B,IAAI,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,IAAI,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,IAAI,QAAQ,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;AACvC,IAAI,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACrC,IAAI,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACnC,IAAI,OAAO,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAC/F,IAAI,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AAC1B,IAAI,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AACxB,IAAI,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AACzB,IAAI,QAAQ,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrD,IAAI,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5B;AACA;AACA,IAAI,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;AACvB,IAAI,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;AACjC,IAAI,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;AACvB,IAAI,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC;AAC7B,IAAI,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC;AAC7B,IAAI,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;AACvC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACnD,IAAI,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;AACjC,IAAI,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC;AAC3B,IAAI,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACnC,IAAI,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;AACzC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;AACjB,IAAI,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;AACrC,IAAI,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC;AACzB,IAAI,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;AACnC,IAAI,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC;AACnB,IAAI,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC;AACnB,IAAI,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;AACvB,IAAI,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACvC,IAAI,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC;AACrB,IAAI,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACzD,IAAI,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;AACjC,IAAI,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;AACnC,IAAI,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;AACnC,IAAI,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;AACvC,IAAI,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC;AACzB,IAAI,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;AACrC,IAAI,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;AACjC,IAAI,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;AACjC,IAAI,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;AACnC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/C,IAAI,WAAW,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/D,IAAI,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAC7E,IAAI,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACzE,IAAI,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAC7E,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG,wBAAwB,CAAC;AAC3C,EAAE,IAAI,UAAU,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACrD;AACA,EAAE,SAAS,SAAS,CAAC,IAAI,EAAE;AAC3B,IAAI,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;AAC3E,GAAG;AACH;AACA,EAAE,IAAI,kBAAkB,GAAG,+CAA+C,CAAC;AAC3E;AACA,EAAE,IAAI,cAAc,GAAG,+BAA+B,CAAC;AACvD;AACA,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,EAAE,IAAI,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;AAC1C,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;AACA;AACA;AACA,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE;AAC9B,IAAI,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC7C,GAAG;AACH;AACA,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,UAAU,GAAG,EAAE,EAAE;AACnD,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,gBAAgB;AAC3C,IAAI,EAAE,CAAC,CAAC;AACR;AACA,EAAE,SAAS,WAAW,CAAC,KAAK,EAAE;AAC9B,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG,SAAS,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;AAC9C,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AACtB,GAAG,CAAC;AACJ;AACA,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,EAAE;AAClD,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,cAAc,GAAG,SAAS,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;AAC9D,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACnB,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE;AAC9D,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE;AACtC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI;AAClC,MAAM,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC;AACjC,MAAM,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE;AACzC,QAAQ,EAAE,IAAI,CAAC;AACf,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,OAAO,MAAM;AACb,QAAQ,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;AAC/C,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,EAAE,IAAI;AACrB;AACA;AACA;AACA,IAAI,UAAU,EAAE,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,EAAE,IAAI;AAC7B;AACA;AACA,IAAI,eAAe,EAAE,IAAI;AACzB;AACA;AACA;AACA;AACA,IAAI,aAAa,EAAE,IAAI;AACvB;AACA;AACA,IAAI,0BAA0B,EAAE,KAAK;AACrC;AACA;AACA;AACA,IAAI,2BAA2B,EAAE,KAAK;AACtC;AACA;AACA;AACA,IAAI,yBAAyB,EAAE,IAAI;AACnC;AACA;AACA,IAAI,uBAAuB,EAAE,IAAI;AACjC;AACA;AACA,IAAI,aAAa,EAAE,KAAK;AACxB;AACA;AACA;AACA;AACA,IAAI,SAAS,EAAE,KAAK;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,EAAE,IAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,EAAE,IAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,EAAE,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,EAAE,IAAI;AACjB;AACA;AACA,IAAI,UAAU,EAAE,IAAI;AACpB;AACA;AACA,IAAI,gBAAgB,EAAE,IAAI;AAC1B;AACA;AACA,IAAI,cAAc,EAAE,KAAK;AACzB,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,sBAAsB,GAAG,KAAK,CAAC;AACrC;AACA,EAAE,SAAS,UAAU,CAAC,IAAI,EAAE;AAC5B,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB;AACA,IAAI,KAAK,IAAI,GAAG,IAAI,cAAc;AAClC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE;AAClF;AACA,IAAI,IAAI,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE;AAC1C,MAAM,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;AAChC,KAAK,MAAM,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE;AAC5C,MAAM,IAAI,CAAC,sBAAsB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClF,QAAQ,sBAAsB,GAAG,IAAI,CAAC;AACtC,QAAQ,OAAO,CAAC,IAAI,CAAC,oHAAoH,CAAC,CAAC;AAC3I,OAAO;AACP,MAAM,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;AAC/B,KAAK,MAAM,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE;AAC5C,MAAM,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;AAClC,KAAK;AACL;AACA,IAAI,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI;AACrC,MAAM,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;AAC1D;AACA,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAClC,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;AACnC,MAAM,OAAO,CAAC,OAAO,GAAG,UAAU,KAAK,EAAE,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACxE,KAAK;AACL,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;AAClC,MAAM,EAAE,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE;AACtE;AACA,IAAI,OAAO,OAAO;AAClB,GAAG;AACH;AACA,EAAE,SAAS,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE;AACvC,IAAI,OAAO,SAAS,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC/D,MAAM,IAAI,OAAO,GAAG;AACpB,QAAQ,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM;AACtC,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,KAAK,EAAE,KAAK;AACpB,QAAQ,GAAG,EAAE,GAAG;AAChB,OAAO,CAAC;AACR,MAAM,IAAI,OAAO,CAAC,SAAS;AAC3B,QAAQ,EAAE,OAAO,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE;AACrE,MAAM,IAAI,OAAO,CAAC,MAAM;AACxB,QAAQ,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE;AACzC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE;AACF,MAAM,SAAS,GAAG,CAAC;AACnB,MAAM,cAAc,GAAG,CAAC;AACxB,MAAM,WAAW,GAAG,CAAC;AACrB,MAAM,eAAe,GAAG,CAAC;AACzB,MAAM,WAAW,GAAG,EAAE;AACtB,MAAM,kBAAkB,GAAG,EAAE;AAC7B,MAAM,WAAW,GAAG,EAAE;AACtB,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,wBAAwB,GAAG,GAAG;AACpC,MAAM,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,wBAAwB,CAAC;AACxE;AACA,EAAE,SAAS,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE;AAC3C,IAAI,OAAO,cAAc,IAAI,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC,IAAI,SAAS,GAAG,eAAe,GAAG,CAAC,CAAC;AACzF,GAAG;AACH;AACA;AACA,EAAE;AACF,MAAM,SAAS,GAAG,CAAC;AACnB,MAAM,QAAQ,GAAG,CAAC;AAClB,MAAM,YAAY,GAAG,CAAC;AACtB,MAAM,aAAa,GAAG,CAAC;AACvB,MAAM,iBAAiB,GAAG,CAAC;AAC3B,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB;AACA,EAAE,IAAI,MAAM,GAAG,SAAS,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;AACzD,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;AACzC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,KAAK,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1H,IAAI,IAAI,QAAQ,GAAG,EAAE,CAAC;AACtB,IAAI,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE;AACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACjG,MAAM,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,EAAE,QAAQ,IAAI,QAAQ,CAAC,EAAE;AACpE,KAAK;AACL,IAAI,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,IAAI,IAAI,cAAc,GAAG,CAAC,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC;AACjF,IAAI,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AAC3D,IAAI,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,cAAc,GAAG,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;AAChG,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B;AACA;AACA;AACA;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;AAC1B,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACtE,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AACjF,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACpC,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACvB,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACrC;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACrD;AACA;AACA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACrD,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AACnD;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC;AACpD,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClE;AACA;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;AAC1C;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC3D;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACrB;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD;AACA;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI;AAClF,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;AAClC;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC/B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,kBAAkB,GAAG,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,mBAAmB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;AACpX;AACA,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,IAAI;AAC7C,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACxD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACnC,GAAG,CAAC;AACJ;AACA,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,GAAG,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,GAAG,cAAc,IAAI,CAAC,EAAE,CAAC;AACjH,EAAE,kBAAkB,CAAC,WAAW,CAAC,GAAG,GAAG,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,GAAG,eAAe,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,gBAAgB,EAAE,CAAC;AAC/J,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,GAAG,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,gBAAgB,EAAE,CAAC;AACvJ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY;AAChD,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1D,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,GAAG,wBAAwB,EAAE,EAAE,OAAO,KAAK,EAAE;AAC5F,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,cAAc,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC,EAAE;AAClF,KAAK;AACL,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,yBAAyB;AACtG,GAAG,CAAC;AACJ,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,GAAG,YAAY;AAClD,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACtC,MAAM,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AAC5B,MAAM,IAAI,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC;AAClD,IAAI,OAAO,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC,IAAI,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB;AAChG,GAAG,CAAC;AACJ,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,GAAG,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,GAAG,kBAAkB,IAAI,CAAC,EAAE,CAAC;AAC5H,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,GAAG,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;AAC3H,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,GAAG,YAAY;AACzD,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACtC,MAAM,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AAC5B,MAAM,IAAI,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC;AAClD,IAAI,OAAO,CAAC,KAAK,IAAI,cAAc,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,gBAAgB;AACxF,GAAG,CAAC;AACJ,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,GAAG,YAAY;AAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,GAAG,wBAAwB,IAAI,CAAC;AACxE,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AACrC,MAAM,IAAI,OAAO,GAAG,EAAE,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;AAC/C,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,EAAE,CAAC;AACxD;AACA,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC;AACnB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AACvE,IAAI,OAAO,GAAG;AACd,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;AACjD,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE;AAC3C,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,iBAAiB,GAAG,SAAS,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE;AAC9E,IAAI,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;AACvB,IAAI,OAAO,MAAM,CAAC,eAAe,EAAE;AACnC,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;AACzD,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AACnC,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAClE;AACA,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG,gDAAgD,CAAC;AACjE,EAAE,EAAE,CAAC,eAAe,GAAG,SAAS,KAAK,EAAE;AACvC,IAAI,SAAS;AACb;AACA,MAAM,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC;AACvC,MAAM,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzD,MAAM,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,EAAE;AAClC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,YAAY,EAAE;AACnD,QAAQ,cAAc,CAAC,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3D,QAAQ,IAAI,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACxG,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAQ,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;AAC3C,WAAW,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACxC,WAAW,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AACrG,OAAO;AACP,MAAM,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/B;AACA;AACA,MAAM,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC;AACvC,MAAM,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzD,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG;AACnC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;AACpB,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AAC5B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,OAAO,IAAI;AACjB,KAAK,MAAM;AACX,MAAM,OAAO,KAAK;AAClB,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,EAAE,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE;AACnC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW;AAC/E,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,EAAE,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE;AACpC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,KAAK,EAAE;AAClD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,EAAE,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;AACvC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACzD,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,EAAE,CAAC,kBAAkB,GAAG,WAAW;AACrC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG;AAClC,MAAM,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;AAChC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACnE,GAAG,CAAC;AACJ;AACA,EAAE,EAAE,CAAC,eAAe,GAAG,WAAW;AAClC,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AACnC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB;AAC1C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE;AAClF,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,SAAS,GAAG,WAAW;AAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAChF,GAAG,CAAC;AACJ;AACA,EAAE,EAAE,CAAC,kBAAkB,GAAG,SAAS,OAAO,EAAE,OAAO,EAAE;AACrD,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAC/B,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe;AACtC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE;AAClF,MAAM,IAAI,CAAC,OAAO;AAClB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AACxB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE;AAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,GAAG,EAAE;AAChC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACnE,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,mBAAmB,GAAG;AACjC,IAAI,IAAI,CAAC,eAAe;AACxB,IAAI,IAAI,CAAC,aAAa;AACtB,IAAI,IAAI,CAAC,mBAAmB;AAC5B,IAAI,IAAI,CAAC,iBAAiB;AAC1B,IAAI,IAAI,CAAC,WAAW;AACpB,MAAM,CAAC,CAAC,CAAC;AACT,GAAG;AACH;AACA,EAAE,EAAE,CAAC,kBAAkB,GAAG,SAAS,sBAAsB,EAAE,QAAQ,EAAE;AACrE,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE;AAC3C,IAAI,IAAI,sBAAsB,CAAC,aAAa,GAAG,CAAC,CAAC;AACjD,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,aAAa,EAAE,+CAA+C,CAAC,CAAC,EAAE;AACvH,IAAI,IAAI,MAAM,GAAG,QAAQ,GAAG,sBAAsB,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC;AAClH,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,EAAE;AAChF,GAAG,CAAC;AACJ;AACA,EAAE,EAAE,CAAC,qBAAqB,GAAG,SAAS,sBAAsB,EAAE,QAAQ,EAAE;AACxE,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE,OAAO,KAAK,EAAE;AACjD,IAAI,IAAI,eAAe,GAAG,sBAAsB,CAAC,eAAe,CAAC;AACjE,IAAI,IAAI,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC;AACzD,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,eAAe,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE;AACtE,IAAI,IAAI,eAAe,IAAI,CAAC;AAC5B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,yEAAyE,CAAC,CAAC,EAAE;AACjH,IAAI,IAAI,WAAW,IAAI,CAAC;AACxB,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC,EAAE;AACnF,GAAG,CAAC;AACJ;AACA,EAAE,EAAE,CAAC,8BAA8B,GAAG,WAAW;AACjD,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC1E,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,4CAA4C,CAAC,CAAC,EAAE;AAClF,IAAI,IAAI,IAAI,CAAC,QAAQ;AACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,4CAA4C,CAAC,CAAC,EAAE;AAClF,GAAG,CAAC;AACJ;AACA,EAAE,EAAE,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE;AAC3C,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,yBAAyB;AAC/C,MAAM,EAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC3D,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB;AACzE,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE;AACtC,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AACvC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE;AACpC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,QAAQ;AACrB,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;AAC1F,QAAQ;AACR,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B;AACA,UAAU,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,UAAU,GAAG,IAAI,GAAG,kBAAkB,EAAE,CAAC;AAC7G,SAAS,EAAE;AACX,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AAC9C,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;AAC3C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjE;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,OAAO,EAAE;AACjC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,KAAK,EAAE;AACnF,IAAI,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;AACxC,IAAI,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/E;AACA;AACA;AACA;AACA,IAAI,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,IAAI,EAAE;AAC7F,IAAI,IAAI,OAAO,EAAE,EAAE,OAAO,KAAK,EAAE;AACjC;AACA,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE,EAAE,OAAO,IAAI,EAAE;AACvC,IAAI,IAAI,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AACzC,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;AACzB,MAAM,OAAO,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;AACpF,MAAM,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,IAAI,EAAE;AAC9E,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9C,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AACjE,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,WAAW;AACpC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACnE,MAAM,EAAE,OAAO,KAAK,EAAE;AACtB;AACA,IAAI,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;AACxC,IAAI,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;AAChD,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5D,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,UAAU;AACrD,OAAO,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;AACrC,OAAO,EAAE,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC;AACxG,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,SAAS,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC7D,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC;AAC7D;AACA,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAC7B,MAAM,IAAI,GAAG,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,SAAS;AACrB,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC;AAC7G,IAAI,KAAK,KAAK,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAClE,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtD,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxD,IAAI,KAAK,KAAK,CAAC,SAAS;AACxB;AACA;AACA;AACA,MAAM,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACxI,MAAM,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;AAC/D,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB,MAAM,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACzC,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;AACxC,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtD,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC9D,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC9D,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5D,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxD,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI;AACtC,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;AAChC,MAAM,IAAI,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC3D,MAAM,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;AAC/C,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5D,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC1D,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;AACzD,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC1D,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC;AACvB,IAAI,KAAK,KAAK,CAAC,OAAO;AACtB,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO,EAAE;AACxE,QAAQ,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;AAC5C,QAAQ,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnD,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACnF,QAAQ,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE;AAC1C,UAAU,EAAE,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE;AAChF,OAAO;AACP;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE;AACrD,QAAQ,IAAI,CAAC,QAAQ;AACrB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,wDAAwD,CAAC,CAAC,EAAE;AAC/F,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;AAC1B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,iEAAiE,CAAC,CAAC,EAAE;AACxG,OAAO;AACP,MAAM,OAAO,SAAS,KAAK,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;AACnG;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAClC,QAAQ,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC3C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,QAAQ,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC;AAChE,OAAO;AACP;AACA,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAChE,MAAM,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACzF,QAAQ,EAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;AAC7E,WAAW,EAAE,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AAC/D,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,2BAA2B,GAAG,SAAS,IAAI,EAAE,OAAO,EAAE;AAC7D,IAAI,IAAI,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC;AACtC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE;AAC9E,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC7D,SAAS;AACT,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACvB,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACxC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/B,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAC9D,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;AAC3E,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,EAAE,KAAK,EAAE;AAC5C,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,EAAE;AACvF,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAClF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,sBAAsB,GAAG,SAAS,IAAI,EAAE;AAC/C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC;AACrD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;AACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACtB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5C,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;AACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/B;AACA,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AAC3B,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC;AACpD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;AAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AAC3H,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AAClC,MAAM,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;AACrD,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AACtC,KAAK;AACL,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC7B,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE;AACzE,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACxC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AACrD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACvI,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AAC3C,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE;AACvC,YAAY,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;AAC3D,WAAW,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;AAC/C,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;AAC5C,OAAO;AACP,MAAM,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;AACrD,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;AACxC,KAAK;AACL,IAAI,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;AAClE,IAAI,IAAI,sBAAsB,GAAG,IAAI,mBAAmB,CAAC;AACzD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAC3F,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE;AACzG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACzC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE;AACrC,UAAU,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;AACzD,SAAS,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;AAC7C,OAAO;AACP,MAAM,IAAI,aAAa,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,+DAA+D,CAAC,CAAC,EAAE;AAChI,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAC7D,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;AACxC,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC/D,KAAK;AACL,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;AACnD,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AACpC,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,sBAAsB,GAAG,SAAS,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAE;AAC7E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,IAAI,mBAAmB,GAAG,CAAC,GAAG,sBAAsB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;AACxH,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;AACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5C;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9E,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC;AAC/C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE;AAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B;AACpE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE;AACjE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE;AACjF,SAAS,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AACtE,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;AACnD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE;AAC7C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG,CAAC;AACZ,IAAI,KAAK,IAAI,UAAU,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG;AAC9D,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;AACrE,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC;AAC/C,QAAQ,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE;AACxD,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAChD,QAAQ,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;AAC5B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,QAAQ,IAAI,MAAM,EAAE;AACpB,UAAU,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5C,SAAS,MAAM;AACf,UAAU,IAAI,UAAU,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC,EAAE;AACnG,UAAU,UAAU,GAAG,IAAI,CAAC;AAC5B,UAAU,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AAC1B,SAAS;AACT,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACxC,QAAQ,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE;AACpD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACtB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;AACnD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;AAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACrE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAC,EAAE;AACrE,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;AAClD,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;AACjB;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;AAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACnC,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;AACpC,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAClC,QAAQ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC/C,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACxD,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC;AACzD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,YAAY,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAClC,OAAO,MAAM;AACb,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACjE,QAAQ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAC5B,QAAQ,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,OAAO;AACP,MAAM,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACvB,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;AACzE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;AACxC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC,EAAE;AACpE,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;AAChD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;AAChD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACrC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,qBAAqB,CAAC;AACvD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;AAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC7C,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACtB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;AAClD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE;AAC3C,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,EAAE;AACzE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC9C,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC5C,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC;AACjD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;AAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;AAClD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;AACxE,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AACrE,MAAM;AACN,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B;AACA,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;AAClC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,uBAAuB,CAAC,CAAC;AAClF,KAAK,EAAE;AACP,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;AACzF,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACtD,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,EAAE;AACjD;AACA,QAAQ,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5C,QAAQ,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5B,OAAO,MAAM,EAAE,KAAK,EAAE;AACtB,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChF,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;AACvH,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACtB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC;AACpD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,wBAAwB,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;AACvD,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,qBAAqB,CAAC;AACvD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,qBAAqB,EAAE,IAAI,EAAE,UAAU,EAAE;AACtE,IAAI,KAAK,qBAAqB,KAAK,KAAK,CAAC,GAAG,qBAAqB,GAAG,IAAI,CAAC;AACzE,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACnD;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,qBAAqB,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;AACtD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;AACvC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,IAAI,UAAU,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;AAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,qBAAqB,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AACpD,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;AAClD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;AACvC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACzE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC7E,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACtB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;AAChD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;AACzC,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC;AAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB;AACA,IAAI;AACJ,MAAM,IAAI,CAAC,IAAI,KAAK,qBAAqB;AACzC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI;AACvC;AACA,QAAQ,CAAC,OAAO;AAChB,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC;AACpC,QAAQ,IAAI,CAAC,MAAM;AACnB,QAAQ,IAAI,CAAC,IAAI,KAAK,KAAK;AAC3B,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY;AACrD,OAAO;AACP,MAAM;AACN,MAAM,IAAI,CAAC,KAAK;AAChB,QAAQ,IAAI,CAAC,KAAK;AAClB,SAAS,CAAC,OAAO,GAAG,QAAQ,GAAG,QAAQ,IAAI,wDAAwD;AACnG,OAAO,CAAC;AACR,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC5E,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACtB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAC/E,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9C,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,SAAS;AACb,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAClC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAClC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC9B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjD,OAAO,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC/H,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;AAC1B,OAAO,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACpH,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,0DAA0D,CAAC,CAAC;AAChG,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,OAAO;AACP,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAC1E,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE;AAC3C,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;AACzC,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACtC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,KAAK,KAAK,GAAG,QAAQ,GAAG,YAAY,EAAE,KAAK,CAAC,CAAC;AACpF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,cAAc,GAAG,CAAC,EAAE,sBAAsB,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC;AAC3E;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE;AACxF,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpF,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,sBAAsB,CAAC;AAC1E,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC9B,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5C,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;AACrC,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;AACjC;AACA,IAAI,IAAI,SAAS,GAAG,cAAc,EAAE;AACpC,MAAM,IAAI,CAAC,EAAE,GAAG,CAAC,SAAS,GAAG,gBAAgB,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACtG,MAAM,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,sBAAsB,CAAC;AAC1D;AACA;AACA;AACA;AACA,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC,CAAC,EAAE;AAC9J,KAAK;AACL;AACA,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;AACxG,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/D;AACA,IAAI,IAAI,EAAE,SAAS,GAAG,cAAc,CAAC;AACrC,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,EAAE;AACxE;AACA,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACtE;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AAChC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AAChC,IAAI,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC;AAC1C,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,cAAc,IAAI,qBAAqB,GAAG,oBAAoB,CAAC;AAC7G,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;AAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;AAC5F,IAAI,IAAI,CAAC,8BAA8B,EAAE,CAAC;AAC1C,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE;AAChD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB;AACA;AACA;AACA,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAChC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/C,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACrC,IAAI,IAAI,cAAc,GAAG,KAAK,CAAC;AAC/B,IAAI,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;AACxB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;AACvC,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;AACrE,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE;AACnF,UAAU,IAAI,cAAc,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAC,EAAE;AACvG,UAAU,cAAc,GAAG,IAAI,CAAC;AAChC,SAAS,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,mBAAmB,IAAI,uBAAuB,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE;AAChI,UAAU,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,6BAA6B,EAAE,CAAC;AAC3H,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACxD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;AACzB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AACtF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,sBAAsB,EAAE;AAC5D,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC7C;AACA,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC/C,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,IAAI,WAAW,GAAG,KAAK,CAAC;AAC5B,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC;AACxB,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC;AACxB,IAAI,IAAI,QAAQ,GAAG,KAAK,CAAC;AACzB;AACA,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;AACtC;AACA,MAAM,IAAI,WAAW,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACvD,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACzC,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AACtE,QAAQ,QAAQ,GAAG,IAAI,CAAC;AACxB,OAAO,MAAM;AACb,QAAQ,OAAO,GAAG,QAAQ,CAAC;AAC3B,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC3B,IAAI,IAAI,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AACrE,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;AACtG,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,OAAO,MAAM;AACb,QAAQ,OAAO,GAAG,OAAO,CAAC;AAC1B,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC5E,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE;AAC9C,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AAClE,QAAQ,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAC5C,UAAU,IAAI,GAAG,SAAS,CAAC;AAC3B,SAAS,MAAM;AACf,UAAU,OAAO,GAAG,SAAS,CAAC;AAC9B,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,IAAI,OAAO,EAAE;AACjB;AACA;AACA,MAAM,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC5B,MAAM,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3E,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;AAC9B,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AAC9C,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACvC,KAAK;AACL;AACA;AACA,IAAI,IAAI,WAAW,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,OAAO,EAAE;AACvG,MAAM,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAC5E,MAAM,IAAI,iBAAiB,GAAG,aAAa,IAAI,sBAAsB,CAAC;AACtE;AACA,MAAM,IAAI,aAAa,IAAI,IAAI,KAAK,QAAQ,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAC,EAAE;AACxH,MAAM,IAAI,CAAC,IAAI,GAAG,aAAa,GAAG,aAAa,GAAG,IAAI,CAAC;AACvD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC3E,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACjC,KAAK;AACL;AACA,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,uBAAuB,GAAG,WAAW;AAC5C,IAAI;AACJ,MAAM,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AAC9B,MAAM,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS;AACnC,MAAM,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG;AAC7B,MAAM,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;AAChC,MAAM,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ;AAClC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO;AACvB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,OAAO,EAAE;AACjD,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,EAAE;AACvC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE;AACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,oDAAoD,CAAC,CAAC;AACrF,OAAO;AACP,MAAM,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC/B,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC7C,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACtC,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE;AACpF;AACA,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;AACvC,MAAM,IAAI,WAAW,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,kCAAkC,CAAC,CAAC,EAAE;AACrF,MAAM,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC,EAAE;AACrF,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;AACnE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,wDAAwD,CAAC,CAAC;AACtF,KAAK;AACL;AACA;AACA,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACzF;AACA;AACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;AAC1D,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE;AAC7E,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;AAC1D,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC,EAAE;AACrF,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;AACvE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC,EAAE;AACxF;AACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC;AACtD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,KAAK,EAAE;AACzC,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;AAC5C,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,gDAAgD,CAAC,CAAC;AACpF,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AACjE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;AACzF,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC5B;AACA,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1C,MAAM,IAAI,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AACpD,MAAM,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACpC,MAAM,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC5C,MAAM,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAChD,KAAK,MAAM;AACX,MAAM,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB;AACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,oBAAoB,CAAC;AACvD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,IAAI,EAAE;AAC9C,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACnB;AACA,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAChC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACrB,IAAI,IAAI,CAAC,UAAU,CAAC,wBAAwB,GAAG,WAAW,CAAC,CAAC;AAC5D,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;AACvC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AAC5B;AACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC;AAC/C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE;AAClD,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AAClC,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,MAAM,IAAI,WAAW;AACrB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,EAAE;AAC/D,KAAK,MAAM;AACX,MAAM,IAAI,WAAW,KAAK,IAAI;AAC9B,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC9B,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;AACrB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;AACxC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACxF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,WAAW;AACnC,IAAI,IAAI,OAAO,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5D,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,IAAI,OAAO,OAAO,CAAC,QAAQ;AAC3B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,WAAW;AAClC,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;AAC1C,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAChC,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACxB,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC3C,IAAI,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnE,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC1C,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AACnC,QAAQ,IAAI,MAAM,EAAE;AACpB,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/B,SAAS,MAAM;AACf,UAAU,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,GAAG,kBAAkB,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,0CAA0C,EAAE,CAAC;AACzH,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,uBAAuB,CAAC,cAAc,EAAE,OAAO,EAAE;AAC5D,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,IAAI,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AACpC;AACA,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC;AACtB,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,KAAK,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AACnG,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;AACzD,KAAK;AACL;AACA;AACA,IAAI;AACJ,MAAM,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;AACxC,MAAM,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;AACxC,MAAM,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;AACxC,MAAM,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;AACxC,MAAM;AACN,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpC,MAAM,OAAO,KAAK;AAClB,KAAK,MAAM,IAAI,CAAC,IAAI,EAAE;AACtB,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAClC,MAAM,OAAO,KAAK;AAClB,KAAK,MAAM;AACX,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,GAAG;AACH;AACA,EAAE,SAAS,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE;AACpC,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACvB,IAAI,OAAO,CAAC,QAAQ;AACpB,MAAM,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;AACpD,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;AAClD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,OAAO,EAAE;AAC7C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC9B,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE;AAC1C,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AACtC,UAAU,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAChD,UAAU,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3E,SAAS,MAAM;AACf,UAAU,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC/B,SAAS;AACT,OAAO;AACP,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC5D,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACzC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACvB,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,sBAAsB,CAAC;AAC1D,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9D,MAAM,IAAI,OAAO,CAAC;AAClB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,KAAK,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE;AAC/E,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACrC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,QAAQ,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AACrC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACxG,OAAO,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;AAC7C,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACrC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAChE,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACnD,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;AACzB,OAAO;AACP,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,0BAA0B,CAAC;AAC9D,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE;AAC3C,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACnD,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,qBAAqB;AACzD,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE;AAC7E;AACA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;AAC3F,MAAM,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AAC3B,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9B,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC5D,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AACtC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC9D,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3C,OAAO,MAAM;AACb,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACzE;AACA,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B;AACA,UAAU,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C;AACA,UAAU,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC3B,OAAO;AACP,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACvB,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,wBAAwB,CAAC;AAC1D,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;AAClD,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE;AAC5B,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1B,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;AACxE,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACzB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,OAAO,EAAE,GAAG,EAAE;AACnD,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACxB,IAAI,IAAI,IAAI,KAAK,YAAY;AAC7B,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AACzD,SAAS,IAAI,IAAI,KAAK,eAAe;AACrC,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;AACtE,QAAQ;AACR,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B;AACA,UAAU,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACjD,SAAS,EAAE;AACX,SAAS,IAAI,IAAI,KAAK,cAAc;AACpC,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAChF,QAAQ,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9B;AACA,UAAU,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE;AAC7D,OAAO,EAAE;AACT,SAAS,IAAI,IAAI,KAAK,UAAU;AAChC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AACtD,SAAS,IAAI,IAAI,KAAK,mBAAmB;AACzC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;AACrD,SAAS,IAAI,IAAI,KAAK,aAAa;AACnC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE;AACzD,SAAS,IAAI,IAAI,KAAK,yBAAyB;AAC/C,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE;AAC3D,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE;AACtD,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE;AAC5B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;AACzD,MAAM;AACN,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB;AACA,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAChD,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,0BAA0B,GAAG,WAAW;AAC/C,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK;AACtC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO;AACnC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO;AACnC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU;AACtC,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,OAAO,EAAE;AACjD,IAAI,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC;AACjC;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACpC,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;AAC5D,OAAO,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE;AAC/B;AACA,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAClC,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzC,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACpF,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzE,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC3D,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;AACpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;AACpC,MAAM,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC9B,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACzC,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACrD,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC1F,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC;AACrD,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,WAAW;AAC1C,IAAI,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC;AACjC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AAClC;AACA,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAClC,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACrD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC;AAClE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,KAAK,EAAE;AAClD,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AAClC,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACvD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC;AACtE,MAAM,OAAO,KAAK;AAClB,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACpC,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;AAC5D,OAAO,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE;AAC/B;AACA,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,MAAM,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9C,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AACpC,QAAQ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACzC,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC9C,QAAQ,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;AACvC,OAAO;AACP,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACvD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC7D,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,sBAAsB,GAAG,SAAS,UAAU,EAAE;AACrD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5F,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,SAAS,EAAE;AAClD,IAAI;AACJ,MAAM,SAAS,CAAC,IAAI,KAAK,qBAAqB;AAC9C,MAAM,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS;AAC7C,MAAM,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ;AACpD;AACA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AACnF,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE,SAAS,EAAE,sBAAsB,EAAE;AACxE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,EAAE;AAC/C,MAAM,QAAQ,IAAI,CAAC,IAAI;AACvB,MAAM,KAAK,YAAY;AACvB,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AACjD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,2DAA2D,CAAC,CAAC,EAAE;AAClG,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,eAAe,CAAC;AAC3B,MAAM,KAAK,cAAc,CAAC;AAC1B,MAAM,KAAK,mBAAmB,CAAC;AAC/B,MAAM,KAAK,aAAa;AACxB,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,kBAAkB;AAC7B,QAAQ,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;AACpC,QAAQ,IAAI,sBAAsB,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,EAAE;AAC9F,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACzE,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B;AACA,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,YAAY,IAAI,CAAC,IAAI,KAAK,aAAa;AACvC,aAAa,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe,CAAC;AAC7F,YAAY;AACZ,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAChE,WAAW;AACX,SAAS;AACT,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,UAAU;AACrB;AACA,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC,EAAE;AAClH,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACjD,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,iBAAiB;AAC5B,QAAQ,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;AACnC,QAAQ,IAAI,sBAAsB,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,EAAE;AAC9F,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACxD,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,eAAe;AAC1B,QAAQ,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;AAClC,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACpD,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,mBAAmB;AACtD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,2CAA2C,CAAC,CAAC,EAAE;AAC3F,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,sBAAsB;AACjC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,6DAA6D,CAAC,CAAC,EAAE;AAChI,QAAQ,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;AACxC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC;AAC7B,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAChD,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,yBAAyB;AACpC,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC;AAC9E,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,iBAAiB;AAC5B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC;AAC/F,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,kBAAkB;AAC7B,QAAQ,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE;AACjC;AACA,MAAM;AACN,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACtD,OAAO;AACP,KAAK,MAAM,IAAI,sBAAsB,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,EAAE;AACjG,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,QAAQ,EAAE,SAAS,EAAE;AACxD,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC9B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAClC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,MAAM,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE;AACrD,KAAK;AACL,IAAI,IAAI,GAAG,EAAE;AACb,MAAM,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;AACnI,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AACjD,KAAK;AACL,IAAI,OAAO,QAAQ;AACnB,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,sBAAsB,EAAE;AACtD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACzE,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC;AACjD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,WAAW;AACrC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AAClE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC5B;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC5C;AACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC;AAC/C,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,WAAW;AACrC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACvC,MAAM,QAAQ,IAAI,CAAC,IAAI;AACvB,MAAM,KAAK,KAAK,CAAC,QAAQ;AACzB,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1E,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;AACpD;AACA,MAAM,KAAK,KAAK,CAAC,MAAM;AACvB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClC,OAAO;AACP,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE;AAC1E,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC;AAChC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC7B,MAAM,IAAI,KAAK,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE;AACnC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AACxC,MAAM,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE;AACnD,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,OAAO,MAAM,IAAI,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;AACvE,QAAQ,KAAK;AACb,OAAO,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;AAC/C,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC3C,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC,EAAE;AACnH,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,QAAQ,KAAK;AACb,OAAO,MAAM;AACb,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrE,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,OAAO;AACP,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE;AAC9C,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9D,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC3C,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC5E,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzC,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC;AACrD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE;AACnE,IAAI,KAAK,WAAW,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC;AAC1D;AACA,IAAI,IAAI,MAAM,GAAG,WAAW,KAAK,SAAS,CAAC;AAC3C;AACA,IAAI,QAAQ,IAAI,CAAC,IAAI;AACrB,IAAI,KAAK,YAAY;AACrB,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACrE,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,IAAI,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC,EAAE;AACvH,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,IAAI,WAAW,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAC/D,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC,EAAE;AAC/F,QAAQ,IAAI,YAAY,EAAE;AAC1B,UAAU,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC;AAC1C,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,EAAE;AACzE,UAAU,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACzC,SAAS;AACT,QAAQ,IAAI,WAAW,KAAK,YAAY,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACnG,OAAO;AACP,MAAM,KAAK;AACX;AACA,IAAI,KAAK,iBAAiB;AAC1B,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC;AAC7F,MAAM,KAAK;AACX;AACA,IAAI,KAAK,kBAAkB;AAC3B,MAAM,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC,EAAE;AACrF,MAAM,KAAK;AACX;AACA,IAAI,KAAK,yBAAyB;AAClC,MAAM,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,kCAAkC,CAAC,CAAC,EAAE;AAC5F,MAAM,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC;AAC7E;AACA,IAAI;AACJ,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,cAAc,IAAI,SAAS,CAAC,CAAC;AAChF,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE;AACpE,IAAI,KAAK,WAAW,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC;AAC1D;AACA,IAAI,QAAQ,IAAI,CAAC,IAAI;AACrB,IAAI,KAAK,eAAe;AACxB,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACvE,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B;AACA,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAClE,OAAO;AACP,MAAM,KAAK;AACX;AACA,IAAI,KAAK,cAAc;AACvB,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAC/E,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/B;AACA,MAAM,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,EAAE;AAChF,OAAO;AACP,MAAM,KAAK;AACX;AACA,IAAI;AACJ,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAC5D,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE;AACzE,IAAI,KAAK,WAAW,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC;AAC1D;AACA,IAAI,QAAQ,IAAI,CAAC,IAAI;AACrB,IAAI,KAAK,UAAU;AACnB;AACA,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AACxE,MAAM,KAAK;AACX;AACA,IAAI,KAAK,mBAAmB;AAC5B,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAClE,MAAM,KAAK;AACX;AACA,IAAI,KAAK,aAAa;AACtB,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AACtE,MAAM,KAAK;AACX;AACA,IAAI;AACJ,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAC7D,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG,SAAS,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE;AAC1F,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC3B,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;AACzC,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;AACjC,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACtC,IAAI,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;AACrC,IAAI,MAAM,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;AACvC,IAAI,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACtC,IAAI,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;AACrC,IAAI,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC;AAC9F,IAAI,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC;AAC7C,IAAI,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC;AAC5C,IAAI,UAAU,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,IAAI,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AAC/D,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,WAAW;AACnC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;AAC3B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,WAAW;AAC/B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,QAAQ,EAAE;AACzC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACnC,IAAI,IAAI,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,MAAM;AAC9D,MAAM,EAAE,OAAO,IAAI,EAAE;AACrB,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,KAAK,KAAK,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;AAC5F,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;AAC/B;AACA;AACA;AACA;AACA,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,IAAI,QAAQ,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;AACjF,MAAM,EAAE,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9E,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,KAAK,IAAI,QAAQ,KAAK,KAAK,CAAC,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,IAAI,QAAQ,KAAK,KAAK,CAAC,KAAK;AAC9I,MAAM,EAAE,OAAO,IAAI,EAAE;AACrB,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM;AACjC,MAAM,EAAE,OAAO,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AAC1C,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,IAAI,QAAQ,KAAK,KAAK,CAAC,IAAI;AACvF,MAAM,EAAE,OAAO,KAAK,EAAE;AACtB,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,WAAW;AACvC,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACvD,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpC,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU;AACtC,QAAQ,EAAE,OAAO,OAAO,CAAC,SAAS,EAAE;AACpC,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;AAC1C,IAAI,IAAI,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACjC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG;AAC9C,MAAM,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE;AACnC,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa;AACxC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtC;AACA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE;AAC7C,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,QAAQ,EAAE;AAC5C,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;AACxC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AACvD,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW;AACvE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9B,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACjC,IAAI,IAAI,GAAG,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,KAAK,UAAU,EAAE;AAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC/B,KAAK;AACL,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;AAClD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACrF,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,WAAW;AAChD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;AAClD,IAAI,IAAI,eAAe,GAAG,QAAQ,KAAK,KAAK,CAAC,GAAG,IAAI,QAAQ,KAAK,KAAK,CAAC,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,KAAK,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC;AACrI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACzE,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW;AAC1C;AACA,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;AAClF,IAAI,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,KAAK,KAAK,CAAC,KAAK;AACvD,QAAQ,EAAE,QAAQ,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC;AAC1E,QAAQ,EAAE,QAAQ,KAAK,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtG,QAAQ,EAAE,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC;AAC1G,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;AAC5C;AACA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;AAC5C,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,WAAW;AAC7C,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,CAAC,MAAM;AAC5C,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;AAC7B;AACA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;AAC5C,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;AAChD,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,SAAS,EAAE;AACtC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1C,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,MAAM;AAChD,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE;AACrD;AACA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE;AAChD,KAAK;AACL,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;AAChD,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC;AACxB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG,EAAE;AACjE,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW;AAClD,UAAU,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7D,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,EAAE;AAC3B,KAAK;AACL,IAAI,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;AAC/B,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE,sBAAsB,EAAE;AACzE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe;AACtE,MAAM,EAAE,MAAM,EAAE;AAChB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC;AACzF,MAAM,EAAE,MAAM,EAAE;AAChB,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACvB,IAAI,IAAI,IAAI,CAAC;AACb,IAAI,QAAQ,GAAG,CAAC,IAAI;AACpB,IAAI,KAAK,YAAY,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK;AAC7C,IAAI,KAAK,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;AACnD,IAAI,SAAS,MAAM;AACnB,KAAK;AACL,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACzB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACvC,MAAM,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM,EAAE;AACnD,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;AAC5B,UAAU,IAAI,sBAAsB,EAAE;AACtC,YAAY,IAAI,sBAAsB,CAAC,WAAW,GAAG,CAAC;AACtD,cAAc,EAAE,sBAAsB,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AACjE;AACA,WAAW,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC,EAAE;AAC5F,SAAS;AACT,QAAQ,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9B,OAAO;AACP,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;AACtB,IAAI,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,IAAI,YAAY,CAAC;AACvB,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE;AAC3B,QAAQ,YAAY,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;AAC3E,OAAO,MAAM;AACb,QAAQ,YAAY,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,OAAO;AACP,MAAM,IAAI,YAAY;AACtB,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,EAAE;AACzE,KAAK,MAAM;AACX,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG;AAC/B,QAAQ,IAAI,EAAE,KAAK;AACnB,QAAQ,GAAG,EAAE,KAAK;AAClB,QAAQ,GAAG,EAAE,KAAK;AAClB,OAAO,CAAC;AACR,KAAK;AACL,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACvB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,OAAO,EAAE,sBAAsB,EAAE;AACnE,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACxD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;AACtE,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE;AACnC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtD,MAAM,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,MAAM,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAAE;AACtH,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC;AACxD,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE;AACpF,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AACpC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC/D;AACA;AACA,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE;AACxC,KAAK;AACL;AACA,IAAI,IAAI,sBAAsB,GAAG,KAAK,EAAE,cAAc,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC;AACnF,IAAI,IAAI,sBAAsB,EAAE;AAChC,MAAM,cAAc,GAAG,sBAAsB,CAAC,mBAAmB,CAAC;AAClE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,aAAa,CAAC;AAC9D,MAAM,sBAAsB,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AAC7F,KAAK,MAAM;AACX,MAAM,sBAAsB,GAAG,IAAI,mBAAmB,CAAC;AACvD,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACxD,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AAChE,MAAM,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC;AACzC,MAAM,IAAI,CAAC,wBAAwB,GAAG,OAAO,KAAK,OAAO,CAAC;AAC1D,KAAK;AACL,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;AAC3E,IAAI,IAAI,cAAc,EAAE,EAAE,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE;AACvF,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5B,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtD,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AAChC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC,EAAE;AAC1E,MAAM,IAAI,CAAC,sBAAsB,EAAE;AACnC,QAAQ,sBAAsB,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,aAAa,GAAG,sBAAsB,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACpI,OAAO;AACP,MAAM,IAAI,sBAAsB,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK;AAC9D,QAAQ,EAAE,sBAAsB,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE;AACxD,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AAChC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE;AACxC;AACA,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE;AACvC,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAClD,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,sBAAsB,CAAC;AAC1D,KAAK,MAAM;AACX,MAAM,IAAI,sBAAsB,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,EAAE;AAC/F,KAAK;AACL,IAAI,IAAI,cAAc,GAAG,CAAC,CAAC,EAAE,EAAE,sBAAsB,CAAC,mBAAmB,GAAG,cAAc,CAAC,EAAE;AAC7F,IAAI,IAAI,gBAAgB,GAAG,CAAC,CAAC,EAAE,EAAE,sBAAsB,CAAC,aAAa,GAAG,gBAAgB,CAAC,EAAE;AAC3F,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,OAAO,EAAE,sBAAsB,EAAE;AACzE,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACxD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;AAClE,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC3E,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtD,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/B,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACtD,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,uBAAuB,CAAC;AAC3D,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,OAAO,EAAE,sBAAsB,EAAE;AAChE,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACxD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACnF,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC3E,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,yBAAyB,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC;AAC9I,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE;AAClF,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;AAC/D,MAAM,IAAI,IAAI,GAAG,OAAO,EAAE;AAC1B,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC;AACtF,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC;AACpD,QAAQ,IAAI,QAAQ,EAAE;AACtB;AACA;AACA,UAAU,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AACxC,SAAS;AACT,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3H,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,QAAQ,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,MAAM,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE;AAC1I,UAAU,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,0FAA0F,CAAC,CAAC;AACxI,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC;AACnF,OAAO;AACP,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;AAC5E,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvB,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AACpF,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,sBAAsB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;AACrF,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC9D,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACrD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACjC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC;AACvE,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACxE,MAAM,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC/D,MAAM,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC1D,WAAW,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;AACxD,eAAe,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;AAClD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,wCAAwC,CAAC,CAAC,EAAE;AACxF,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChF,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC,EAAE;AACnF,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAC,EAAE;AAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,iBAAiB,CAAC,CAAC;AACpF,KAAK,MAAM;AACX,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;AACvE,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC7E,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC9D,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC1D,QAAQ,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AACrC,QAAQ,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;AAC9B,QAAQ,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC/B,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,QAAQ,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAC3D,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAC7C,MAAM,IAAI,QAAQ;AAClB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE;AAC/C;AACA,QAAQ,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;AAC7H,KAAK,MAAM;AACX,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,oBAAoB,CAAC,IAAI,EAAE;AACtC,IAAI;AACJ,MAAM,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,mBAAmB;AACpF,MAAM,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,sBAAsB,EAAE,OAAO,EAAE;AACvE,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACxD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;AACnE,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,yBAAyB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG;AAC/G,MAAM,EAAE,OAAO,IAAI,EAAE;AACrB,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAChF,IAAI,IAAI,sBAAsB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE;AACtE,MAAM,IAAI,sBAAsB,CAAC,mBAAmB,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,sBAAsB,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,EAAE;AAC1H,MAAM,IAAI,sBAAsB,CAAC,iBAAiB,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,sBAAsB,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,EAAE;AACtH,MAAM,IAAI,sBAAsB,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,sBAAsB,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE;AAC9G,KAAK;AACL,IAAI,OAAO,MAAM;AACjB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;AAC9E,IAAI,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AAC9G,QAAQ,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC;AACjG,QAAQ,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,KAAK,CAAC;AAC7C,IAAI,IAAI,eAAe,GAAG,KAAK,CAAC;AAChC;AACA,IAAI,OAAO,IAAI,EAAE;AACjB,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;AACtH;AACA,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,eAAe,GAAG,IAAI,CAAC,EAAE;AACvD,MAAM,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,yBAAyB,EAAE;AAC1E,QAAQ,IAAI,eAAe,EAAE;AAC7B,UAAU,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/D,UAAU,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC;AACzC,UAAU,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAClE,SAAS;AACT,QAAQ,OAAO,OAAO;AACtB,OAAO;AACP;AACA,MAAM,IAAI,GAAG,OAAO,CAAC;AACrB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE;AAC/G,IAAI,IAAI,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;AAC3D,IAAI,IAAI,QAAQ,GAAG,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACpE,IAAI,IAAI,OAAO,IAAI,QAAQ,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,kEAAkE,CAAC,CAAC,EAAE;AACnI;AACA,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5C,IAAI,IAAI,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtH,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtD,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC/C,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpC,OAAO,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzE,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjD,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC;AAChF,OAAO;AACP,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;AACjC,MAAM,IAAI,iBAAiB,EAAE;AAC7B,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACjC,OAAO;AACP,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;AACvD,KAAK,MAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACnD,MAAM,IAAI,sBAAsB,GAAG,IAAI,mBAAmB,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;AAC5J,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACxB,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACxB,MAAM,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC7B,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACpH,MAAM,IAAI,eAAe,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC/F,QAAQ,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,8BAA8B,EAAE,CAAC;AAC9C,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;AAClC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,2DAA2D,CAAC,CAAC,EAAE;AAC1G,QAAQ,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AACpC,QAAQ,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC;AAC9C,QAAQ,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;AACvG,OAAO;AACP,MAAM,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC/D,MAAM,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;AACnD,MAAM,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;AACnD,MAAM,IAAI,CAAC,aAAa,GAAG,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC;AAClE,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACxD,MAAM,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;AAC3B,MAAM,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;AAClC,MAAM,IAAI,iBAAiB,EAAE;AAC7B,QAAQ,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACnC,OAAO;AACP,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACvD,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,EAAE;AAC9C,MAAM,IAAI,QAAQ,IAAI,eAAe,EAAE;AACvC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,2EAA2E,CAAC,CAAC;AAC5G,OAAO;AACP,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACxD,MAAM,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;AACxB,MAAM,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;AACjE,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,sBAAsB,EAAE,OAAO,EAAE;AACjE;AACA;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACzD;AACA,IAAI,IAAI,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,KAAK,CAAC;AAChE,IAAI,QAAQ,IAAI,CAAC,IAAI;AACrB,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU;AAC1B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,kCAAkC,CAAC,CAAC,EAAE;AACvE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAC9D,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,gDAAgD,CAAC,CAAC,EAAE;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;AAC/F,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC9B,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;AAC3C;AACA,IAAI,KAAK,KAAK,CAAC,KAAK;AACpB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC;AACpD;AACA,IAAI,KAAK,KAAK,CAAC,IAAI;AACnB,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1F,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACtC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AAC3I,QAAQ,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7C,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;AAChG,OAAO;AACP,MAAM,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;AACpD,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,UAAU,EAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE;AAC1G,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW;AAC5G,aAAa,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;AACzF,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACtC,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACjE,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAClC,UAAU,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;AACrG,SAAS;AACT,OAAO;AACP,MAAM,OAAO,EAAE;AACf;AACA,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5C,MAAM,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAChE,MAAM,OAAO,IAAI;AACjB;AACA,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM;AACrC,MAAM,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C;AACA,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM;AACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9B,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC;AAChF,MAAM,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACnC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;AAC7C;AACA,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,kCAAkC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAClG,MAAM,IAAI,sBAAsB,EAAE;AAClC,QAAQ,IAAI,sBAAsB,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC9F,UAAU,EAAE,sBAAsB,CAAC,mBAAmB,GAAG,KAAK,CAAC,EAAE;AACjE,QAAQ,IAAI,sBAAsB,CAAC,iBAAiB,GAAG,CAAC;AACxD,UAAU,EAAE,sBAAsB,CAAC,iBAAiB,GAAG,KAAK,CAAC,EAAE;AAC/D,OAAO;AACP,MAAM,OAAO,IAAI;AACjB;AACA,IAAI,KAAK,KAAK,CAAC,QAAQ;AACvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAC7F,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;AACrD;AACA,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3C,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;AACzD;AACA,IAAI,KAAK,KAAK,CAAC,SAAS;AACxB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB,MAAM,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;AACxC;AACA,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;AACrD;AACA,IAAI,KAAK,KAAK,CAAC,IAAI;AACnB,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE;AAC5B;AACA,IAAI,KAAK,KAAK,CAAC,SAAS;AACxB,MAAM,OAAO,IAAI,CAAC,aAAa,EAAE;AACjC;AACA,IAAI,KAAK,KAAK,CAAC,OAAO;AACtB,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE;AAC1C,QAAQ,OAAO,IAAI,CAAC,eAAe,EAAE;AACrC,OAAO,MAAM;AACb,QAAQ,OAAO,IAAI,CAAC,UAAU,EAAE;AAChC,OAAO;AACP;AACA,IAAI;AACJ,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACxB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,WAAW;AACpC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC,EAAE;AACrG,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACrC;AACA,IAAI,QAAQ,IAAI,CAAC,IAAI;AACrB,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB,MAAM,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC1C,IAAI,KAAK,KAAK,CAAC,GAAG;AAClB,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,MAAM,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACvC,IAAI;AACJ,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACxB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE;AAC3C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB;AACA;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1C;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACjC,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AAChC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC3D,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,2CAA2C,CAAC,CAAC;AACrF,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAClC,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC;AACpD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;AACxC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB;AACA,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACvC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM;AACrC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,0DAA0D,CAAC,CAAC,EAAE;AACjH,IAAI,IAAI,WAAW;AACnB,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC,EAAE;AACjG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B;AACzF,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,2CAA2C,CAAC,CAAC,EAAE;AACzF;AACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;AAChD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,KAAK,EAAE;AACtC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE;AACpH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;AAC3C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,WAAW;AACzC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACrC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,OAAO,GAAG;AACd,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kCAAkC,GAAG,SAAS,UAAU,EAAE,OAAO,EAAE;AAC1E,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;AACjH,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACvC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClB;AACA,MAAM,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;AACpE,MAAM,IAAI,QAAQ,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK,CAAC;AAC3D,MAAM,IAAI,sBAAsB,GAAG,IAAI,mBAAmB,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;AAClI,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACxB,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACxB;AACA,MAAM,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;AACzC,QAAQ,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzD,QAAQ,IAAI,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AAC/E,UAAU,WAAW,GAAG,IAAI,CAAC;AAC7B,UAAU,KAAK;AACf,SAAS,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;AACjD,UAAU,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;AACnC,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACtE,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC,EAAE;AACrH,UAAU,KAAK;AACf,SAAS,MAAM;AACf,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACnG,SAAS;AACT,OAAO;AACP,MAAM,IAAI,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;AAC1E,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC;AACA,MAAM,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC7E,QAAQ,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,8BAA8B,EAAE,CAAC;AAC9C,QAAQ,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AACpC,QAAQ,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC9E,OAAO;AACP;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE;AAClF,MAAM,IAAI,WAAW,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE;AACxD,MAAM,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAC/D,MAAM,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;AACnD,MAAM,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;AACnD;AACA,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,QAAQ,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC7D,QAAQ,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC;AACnC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAC/E,OAAO,MAAM;AACb,QAAQ,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,OAAO;AACP,KAAK,MAAM;AACX,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACxC,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACrC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;AAC3B,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,yBAAyB,CAAC;AAC5D,KAAK,MAAM;AACX,MAAM,OAAO,GAAG;AAChB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,SAAS,IAAI,EAAE;AACvC,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC7E,IAAI,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC7F,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;AACnB;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,WAAW;AAC7B,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,gCAAgC,CAAC,CAAC,EAAE;AAClG,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACrC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC9D,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,MAAM,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACzC,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;AACzC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,sDAAsD,CAAC,CAAC,EAAE;AAC/G,MAAM,IAAI,WAAW;AACrB,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,kDAAkD,CAAC,CAAC,EAAE;AAClG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB;AACjC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,mEAAmE,CAAC,CAAC,EAAE;AACnH,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC;AAClD,KAAK;AACL,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC;AAChG,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9F,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE;AAC7D,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;AAC3D,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AAC5H,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE;AACtC,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC;AACjD,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,GAAG,EAAE;AAC5C,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAChC;AACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,eAAe,EAAE;AAC7C,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,kDAAkD,CAAC,CAAC;AAC9F,OAAO;AACP,MAAM,IAAI,CAAC,KAAK,GAAG;AACnB,QAAQ,GAAG,EAAE,IAAI,CAAC,KAAK;AACvB,QAAQ,MAAM,EAAE,IAAI;AACpB,OAAO,CAAC;AACR,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,KAAK,GAAG;AACnB,QAAQ,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3E,QAAQ,MAAM,EAAE,IAAI,CAAC,KAAK;AAC1B,OAAO,CAAC;AACR,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;AAC9C,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;AACnD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE;AACrC,IAAI,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACnC,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ,KAAK,KAAK,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC7E;AACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC1B,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;AACzB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,+BAA+B,CAAC,CAAC,EAAE;AAC7F,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACpD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjF,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;AACnD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;AACpC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO;AACxF,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7M,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACpE,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,SAAS,EAAE,sBAAsB,EAAE;AAC9D,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,GAAG,EAAE,CAAC;AAC7D,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACpC,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;AAC7F,OAAO,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE;AAC/B;AACA,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;AACvE,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC,EAAE;AACtF,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAClF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,SAAS,EAAE,sBAAsB,EAAE;AACnE,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1E,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACnE,MAAM,IAAI,SAAS,EAAE;AACrB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE;AACvC,UAAU,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC;AAClF,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC;AACnD,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,sBAAsB,EAAE;AAChE,QAAQ,IAAI,sBAAsB,CAAC,mBAAmB,GAAG,CAAC,EAAE;AAC5D,UAAU,sBAAsB,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC;AAClE,SAAS;AACT,QAAQ,IAAI,sBAAsB,CAAC,iBAAiB,GAAG,CAAC,EAAE;AAC1D,UAAU,sBAAsB,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;AAChE,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAC3E;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,aAAa,GAAG,CAAC,EAAE;AAC3G,QAAQ,sBAAsB,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1D,OAAO;AACP;AACA,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC;AACnD,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACvC,MAAM,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AAC1B,MAAM,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC7B,MAAM,IAAI,SAAS,IAAI,sBAAsB,EAAE;AAC/C,QAAQ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAQ,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,OAAO;AACP,MAAM,IAAI,CAAC,SAAS;AACpB,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/C,KAAK;AACL,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACvC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC/G,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1E,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAC3D,KAAK,MAAM;AACX,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,KAAK;AACL,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,WAAW,CAAC,CAAC;AAC5H,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;AAC5C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,WAAW,EAAE;AACrI,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK;AAC7D,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC5B;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC/B,MAAM,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACxI,MAAM,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AACzB,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;AAC5E,MAAM,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC3C,MAAM,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AACzB,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC1D,KAAK,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW;AACzC,eAAe,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY;AAChG,gBAAgB,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC;AACnE,gBAAgB,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE;AACpG,MAAM,IAAI,WAAW,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACxD,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACnC,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,MAAM,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;AACnD,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACrC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAC/B,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE;AAC3E;AACA,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC,EAAE;AACnF,OAAO,MAAM;AACb,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa;AAC9E,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC,EAAE;AACjG,OAAO;AACP,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;AAClG,MAAM,IAAI,WAAW,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACxD,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa;AAC1D,QAAQ,EAAE,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,EAAE;AAC1C,MAAM,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AACzB,MAAM,IAAI,SAAS,EAAE;AACrB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzF,OAAO,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,sBAAsB,EAAE;AACnE,QAAQ,IAAI,sBAAsB,CAAC,eAAe,GAAG,CAAC;AACtD,UAAU,EAAE,sBAAsB,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;AAClE,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzF,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,OAAO;AACP,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC5B,KAAK,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACjC,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;AAC1C,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACvC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC3C,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAQ,OAAO,IAAI,CAAC,GAAG;AACvB,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC9B,OAAO;AACP,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC;AAC5J,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE;AACrC,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;AACnB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE;AACpF,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE;AAC9D,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE;AACtE,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;AACjI;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;AACrC,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,EAAE;AACvC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;AACrC,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;AACjC;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,IAAI,gBAAgB,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC;AACxH;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;AAC5F,IAAI,IAAI,CAAC,8BAA8B,EAAE,CAAC;AAC1C,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACrD;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AAChC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AAChC,IAAI,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC;AAC1C,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC;AACtD,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;AACvE,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;AACxG;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;AACjE,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;AAClE;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC3B;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACtD,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACvD;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AAChC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AAChC,IAAI,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC;AAC1C,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,yBAAyB,CAAC;AAC3D,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC9E,IAAI,IAAI,YAAY,GAAG,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC;AACrE,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,CAAC;AACnD;AACA,IAAI,IAAI,YAAY,EAAE;AACtB,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACjD,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpC,KAAK,MAAM;AACX,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5F,MAAM,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;AACnC,QAAQ,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD;AACA;AACA;AACA,QAAQ,IAAI,SAAS,IAAI,SAAS;AAClC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,2EAA2E,CAAC,CAAC,EAAE;AAC7H,OAAO;AACP;AACA;AACA,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAClC,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACvB,MAAM,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;AAC5C;AACA;AACA;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/H;AACA,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,EAAE;AAClF,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7E,MAAM,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC9B,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,MAAM,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AAC9B,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,MAAM,EAAE;AAC5C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;AAC1D,MAAM;AACN,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B;AACA,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,EAAE,OAAO,KAAK;AACrD,KAAK,EAAE;AACP,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,eAAe,EAAE;AACrD,IAAI,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;AAC/D,MAAM;AACN,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B;AACA,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC;AACrF,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,sBAAsB,EAAE;AAC/F,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC;AAChC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC7B,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,QAAQ,IAAI,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE;AAC3E,OAAO,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE;AAC/B;AACA,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;AACzB,MAAM,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK;AACjD,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE;AACvB,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;AAC7C,QAAQ,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;AACvD,QAAQ,IAAI,sBAAsB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,sBAAsB,CAAC,aAAa,GAAG,CAAC;AAC3G,UAAU,EAAE,sBAAsB,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;AAChE,OAAO,MAAM;AACb,QAAQ,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACnE,OAAO;AACP,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,GAAG,EAAE;AACvC,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AAC1B,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACtB,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACxB;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,OAAO;AAC5C,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC,EAAE;AAC9F,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,OAAO;AACxC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,2DAA2D,CAAC,CAAC,EAAE;AACpG,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,IAAI,IAAI,KAAK,WAAW;AACxE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC,EAAE;AAC5F,IAAI,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,OAAO,CAAC;AAC7E,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,GAAG,IAAI,GAAG,uCAAuC,EAAE,CAAC,EAAE;AAC9F,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,sBAAsB,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE;AACnE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC;AACpC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE;AACnE,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC;AACzE,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,OAAO;AAC3C,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,sDAAsD,CAAC,CAAC,EAAE;AACjG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,EAAE,CAAC;AAC/E,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,OAAO,EAAE,SAAS,EAAE;AACjD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AAClC,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7B,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAClC,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;AAC5D,WAAW,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE;AAC1G,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3B,OAAO;AACP,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACxB,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACzB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACxC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACjC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa;AACtD,QAAQ,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;AAC5C,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,WAAW;AACtC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,EAAE;AACvC,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACxB,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC/C;AACA;AACA,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,0CAA0C,EAAE,CAAC;AAC9G,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9E,KAAK;AACL;AACA,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,OAAO,EAAE;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;AACvD;AACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtH,MAAM,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC5B,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;AACnD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,OAAO,EAAE;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;AACvD;AACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrE,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC;AACnD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE,OAAO,EAAE;AACtC,IAAI,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC3C,IAAI,OAAO,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;AACxD,IAAI,IAAI,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AACvC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;AAC1D,IAAI,MAAM,GAAG;AACb,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC;AACrC;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,WAAW;AAChC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAChC,MAAM,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;AAClE,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA,EAAE,IAAI,KAAK,GAAG,SAAS,KAAK,CAAC,KAAK,EAAE;AACpC,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB;AACA,IAAI,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAClB;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACtB;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACxB;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAClC,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,KAAK,EAAE;AACpC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW;AAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;AAC1B,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,0BAA0B,GAAG,SAAS,KAAK,EAAE;AACpD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AACxF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;AACtD,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC;AAC3B,IAAI,IAAI,WAAW,KAAK,YAAY,EAAE;AACtC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACtC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1H,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AACpD,QAAQ,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/C,KAAK,MAAM,IAAI,WAAW,KAAK,iBAAiB,EAAE;AAClD,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACxC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,KAAK,MAAM,IAAI,WAAW,KAAK,aAAa,EAAE;AAC9C,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACxC,MAAM,IAAI,IAAI,CAAC,mBAAmB;AAClC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAC5D;AACA,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAC9F,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,KAAK,MAAM;AACX,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACxH,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/F,UAAU,UAAU,GAAG,IAAI,CAAC;AAC5B,UAAU,KAAK;AACf,SAAS;AACT,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;AACxD,UAAU,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE;AACjD,QAAQ,IAAI,OAAO,CAAC,KAAK,GAAG,SAAS,EAAE,EAAE,KAAK,EAAE;AAChD,OAAO;AACP,KAAK;AACL,IAAI,IAAI,UAAU,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,cAAc,GAAG,IAAI,GAAG,6BAA6B,EAAE,CAAC,EAAE;AAC5G,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,EAAE,EAAE;AACvC;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACxD,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1C,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,WAAW;AACjC,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AACtD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,WAAW;AACpC,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;AACnD,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,EAAE,OAAO,KAAK,EAAE;AACnD,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,WAAW;AACrC,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;AACnD,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,EAAE,EAAE,OAAO,KAAK,EAAE;AACnF,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,IAAI,GAAG,SAAS,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAC7C,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACrB,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACjB,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS;AAChC,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE;AACrD,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB;AACvC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;AAC5D,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM;AAC7B,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;AAChC,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW;AAC9B,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;AACpD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE;AACxC,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;AACnC,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,SAAS,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;AAC9C,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACnB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;AAC9B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;AAC7B,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;AAC3B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE;AAC9B,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;AACzC,IAAI,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;AACnF,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;AACrD,IAAI,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;AACxD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,IAAI,EAAE;AACjC,IAAI,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5D,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AAC1D,IAAI,OAAO,OAAO;AAClB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,qBAAqB,GAAG,69BAA69B,CAAC;AAC5/B,EAAE,IAAI,sBAAsB,GAAG,qBAAqB,GAAG,wBAAwB,CAAC;AAChF,EAAE,IAAI,sBAAsB,GAAG,sBAAsB,CAAC;AACtD,EAAE,IAAI,sBAAsB,GAAG,sBAAsB,GAAG,iCAAiC,CAAC;AAC1F,EAAE,IAAI,uBAAuB,GAAG;AAChC,IAAI,CAAC,EAAE,qBAAqB;AAC5B,IAAI,EAAE,EAAE,sBAAsB;AAC9B,IAAI,EAAE,EAAE,sBAAsB;AAC9B,IAAI,EAAE,EAAE,sBAAsB;AAC9B,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,4BAA4B,GAAG,opBAAopB,CAAC;AAC1rB;AACA;AACA,EAAE,IAAI,iBAAiB,GAAG,0+DAA0+D,CAAC;AACrgE,EAAE,IAAI,kBAAkB,GAAG,iBAAiB,GAAG,iHAAiH,CAAC;AACjK,EAAE,IAAI,kBAAkB,GAAG,kBAAkB,GAAG,wEAAwE,CAAC;AACzH,EAAE,IAAI,kBAAkB,GAAG,kBAAkB,GAAG,wEAAwE,CAAC;AACzH,EAAE,IAAI,mBAAmB,GAAG;AAC5B,IAAI,CAAC,EAAE,iBAAiB;AACxB,IAAI,EAAE,EAAE,kBAAkB;AAC1B,IAAI,EAAE,EAAE,kBAAkB;AAC1B,IAAI,EAAE,EAAE,kBAAkB;AAC1B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAChB,EAAE,SAAS,gBAAgB,CAAC,WAAW,EAAE;AACzC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG;AAChC,MAAM,MAAM,EAAE,WAAW,CAAC,uBAAuB,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,4BAA4B,CAAC;AACpG,MAAM,SAAS,EAAE;AACjB,QAAQ,gBAAgB,EAAE,WAAW,CAAC,4BAA4B,CAAC;AACnE,QAAQ,MAAM,EAAE,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAC7D,OAAO;AACP,KAAK,CAAC;AACN,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;AACvD;AACA,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAClD,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;AACxC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC;AACpD,GAAG;AACH,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACtB,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACvB,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACvB,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACvB;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA,EAAE,IAAI,qBAAqB,GAAG,SAAS,qBAAqB,CAAC,MAAM,EAAE;AACrE,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;AAC3K,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACtG,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACrB,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACzB,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACzB,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACjB,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AAC1B,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;AAC7C,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB,IAAI,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AACjC,GAAG,CAAC;AACJ;AACA,EAAE,qBAAqB,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;AACjF,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;AACnE,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;AACnE,GAAG,CAAC;AACJ;AACA,EAAE,qBAAqB,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE;AACnE,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,GAAG,+BAA+B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;AAClH,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE;AAC/D,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAC9C;AACA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACxB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACrB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;AAChB,MAAM,OAAO,CAAC,CAAC;AACf,KAAK;AACL,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC/E,MAAM,OAAO,CAAC;AACd,KAAK;AACL,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,IAAI,OAAO,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,SAAS,GAAG,CAAC;AAC9E,GAAG,CAAC;AACJ;AACA,EAAE,qBAAqB,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE;AAC7E,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAC9C;AACA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACxB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACrB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;AAChB,MAAM,OAAO,CAAC;AACd,KAAK;AACL,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7E,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,GAAG,MAAM,EAAE;AAChE,MAAM,OAAO,CAAC,GAAG,CAAC;AAClB,KAAK;AACL,IAAI,OAAO,CAAC,GAAG,CAAC;AAChB,GAAG,CAAC;AACJ;AACA,EAAE,qBAAqB,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,MAAM,EAAE;AACtE,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAC9C;AACA,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;AACpC,GAAG,CAAC;AACJ;AACA,EAAE,qBAAqB,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,MAAM,EAAE;AAC1E,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAC9C;AACA,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC;AAC5D,GAAG,CAAC;AACJ;AACA,EAAE,qBAAqB,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,MAAM,EAAE;AACtE,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAC9C;AACA,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChD,GAAG,CAAC;AACJ;AACA,EAAE,qBAAqB,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE;AAClE,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAC9C;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE;AACrC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3B,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,iBAAiB,CAAC,EAAE,EAAE;AACjC,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,EAAE,OAAO,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;AACxD,IAAI,EAAE,IAAI,OAAO,CAAC;AAClB,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC;AAC3E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;AAC7C,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;AACtC,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAC5B;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AAC3C,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;AACnE,OAAO;AACP,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;AACrE,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,KAAK,EAAE;AAC/C,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACxF,MAAM,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACjC,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;AACxC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AAC3B,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;AAC/B,IAAI,KAAK,CAAC,2BAA2B,GAAG,KAAK,CAAC;AAC9C,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACjC,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC/B,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC;AACA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC;AACA,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;AAC3C;AACA,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACnC,QAAQ,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACrC,OAAO;AACP,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AAC9D,QAAQ,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAChD,OAAO;AACP,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,kBAAkB,EAAE;AAC3D,MAAM,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACpC,KAAK;AACL,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC9E,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB;AACA,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACjD,QAAQ,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACxD,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,KAAK,EAAE;AAC5C,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACpC,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACrC,KAAK;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AAChD,MAAM,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACvC,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9C,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,KAAK,EAAE;AAC5C,IAAI,OAAO,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AACxE,MAAM,GAAG;AACT,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;AACxC,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;AACzC;AACA;AACA;AACA,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AACjF;AACA,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE;AAC3B,UAAU,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAC5C,SAAS;AACT,OAAO;AACP,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;AACzF,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACvC,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;AAC7C,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,KAAK,CAAC,2BAA2B,GAAG,KAAK,CAAC;AAC9C;AACA;AACA,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AAC5D,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA;AACA,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AAC9D,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL;AACA;AACA,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AAC5D,MAAM,IAAI,UAAU,GAAG,KAAK,CAAC;AAC7B,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACzC,QAAQ,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AAC7C,OAAO;AACP,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AAC9D,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACvC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACtC,UAAU,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAC5C,SAAS;AACT,QAAQ,KAAK,CAAC,2BAA2B,GAAG,CAAC,UAAU,CAAC;AACxD,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,KAAK;AACL;AACA,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACtB,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE;AACvD,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;AAC9C;AACA,IAAI,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AACzD,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AAC9B,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,0BAA0B,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE;AAC7D,IAAI;AACJ,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC7B,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC7B,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC7B,MAAM,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC;AACrD,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,0BAA0B,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE;AAC7D,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5B,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;AAC/C,QAAQ,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC;AACjC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;AAC5E,UAAU,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC;AACnC,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACrC;AACA,UAAU,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AACnD,YAAY,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACjE,WAAW;AACX,UAAU,OAAO,IAAI;AACrB,SAAS;AACT,OAAO;AACP,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE;AACrC,QAAQ,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC7C,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;AACxC,IAAI;AACJ,MAAM,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;AAC7C,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC7B,MAAM,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC;AACpD,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAC1C,MAAM,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;AAC5C,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAC1C,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,kCAAkC,GAAG,SAAS,KAAK,EAAE;AAC5D,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAC5C,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,0BAA0B,GAAG,SAAS,KAAK,EAAE;AACpD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AAC9D,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACrC,UAAU,OAAO,IAAI;AACrB,SAAS;AACT,QAAQ,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAC1C,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE;AAClD,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACzC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC1C,OAAO,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,UAAU;AACnD,QAAQ,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACrC,OAAO;AACP,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACrC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACnC,QAAQ,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;AACtC,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,sBAAsB,GAAG,SAAS,KAAK,EAAE;AAChD,IAAI;AACJ,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC7B,MAAM,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC;AACpD,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAC1C,MAAM,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;AAC5C,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAC1C,MAAM,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC;AACnD,MAAM,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC;AACpD,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,iCAAiC,GAAG,SAAS,KAAK,EAAE;AAC3D,IAAI,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AACtD,MAAM,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACvC,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,yBAAyB,GAAG,SAAS,KAAK,EAAE;AACnD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI,IAAI,iBAAiB,CAAC,EAAE,CAAC,EAAE;AAC/B,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;AAC9B,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,SAAS,iBAAiB,CAAC,EAAE,EAAE;AACjC,IAAI;AACJ,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;AACtC,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;AACtC,MAAM,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;AACtC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,CAAC,2BAA2B,GAAG,SAAS,KAAK,EAAE;AACrD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;AACf,IAAI,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE;AACpE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK;AAC9B,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,kCAAkC,GAAG,SAAS,KAAK,EAAE;AAC5D,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI;AACJ,MAAM,EAAE,KAAK,CAAC,CAAC;AACf,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;AACjD,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM;AACN,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,KAAK,EAAE;AAC/C,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC3C,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;AACpE,UAAU,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AACtD,SAAS;AACT,QAAQ,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACrD,QAAQ,MAAM;AACd,OAAO;AACP,MAAM,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACnC,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;AAC7C,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjF,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,8BAA8B,GAAG,SAAS,KAAK,EAAE;AACxD,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,EAAE;AACrD,MAAM,KAAK,CAAC,eAAe,IAAI,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACrE,MAAM,OAAO,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,EAAE;AACzD,QAAQ,KAAK,CAAC,eAAe,IAAI,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACvE,OAAO;AACP,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,+BAA+B,GAAG,SAAS,KAAK,EAAE;AACzD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;AAChD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1B;AACA,IAAI,IAAI,EAAE,KAAK,IAAI,YAAY,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AAC1F,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;AAC9B,KAAK;AACL,IAAI,IAAI,uBAAuB,CAAC,EAAE,CAAC,EAAE;AACrC,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;AAC9B,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACtB,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,SAAS,uBAAuB,CAAC,EAAE,EAAE;AACvC,IAAI,OAAO,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,8BAA8B,GAAG,SAAS,KAAK,EAAE;AACxD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;AAChD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1B;AACA,IAAI,IAAI,EAAE,KAAK,IAAI,YAAY,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AAC1F,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;AAC9B,KAAK;AACL,IAAI,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE;AACpC,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;AAC9B,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACtB,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,SAAS,sBAAsB,CAAC,EAAE,EAAE;AACtC,IAAI,OAAO,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,MAAM,iBAAiB,EAAE,KAAK,MAAM;AAClI,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE;AAC9C,IAAI;AACJ,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACzC,MAAM,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;AAChD,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAC3C,OAAO,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACzD,MAAM;AACN,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE;AACvB;AACA,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,UAAU;AAC5C,QAAQ,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC9C,OAAO;AACP,MAAM,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACpC,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;AACjD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;AAC7C,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;AACjC,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,GAAG,KAAK,CAAC,gBAAgB,EAAE;AACxC,UAAU,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC;AACrC,SAAS;AACT,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,kBAAkB,EAAE;AACzC,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE;AAC9C,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC3C,QAAQ,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAC7D,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7C,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,yBAAyB,GAAG,SAAS,KAAK,EAAE;AACnD,IAAI;AACJ,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACzC,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAC1C,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAChC,MAAM,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;AAC7C,MAAM,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,KAAK,CAAC;AAC9D,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC,CAAC;AACzE,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AAC1C,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE;AAClD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;AAC/C,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;AACxC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE;AAChF,MAAM,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AAC7B,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;AACjD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI,IAAI,EAAE,KAAK,IAAI,UAAU;AAC7B,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,IAAI,EAAE,KAAK,IAAI,UAAU;AAC7B,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,IAAI,EAAE,KAAK,IAAI,UAAU;AAC7B,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,IAAI,EAAE,KAAK,IAAI,UAAU;AAC7B,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,IAAI,EAAE,KAAK,IAAI,UAAU;AAC7B,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;AACjD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE;AAC7B,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,SAAS,eAAe,CAAC,EAAE,EAAE;AAC/B,IAAI;AACJ,MAAM,CAAC,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;AACvC,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;AAChD,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,qCAAqC,GAAG,SAAS,KAAK,EAAE,MAAM,EAAE;AACvE,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAC5C;AACA,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;AAC1C;AACA,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AACnD,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;AACtC,QAAQ,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE;AACzD,UAAU,IAAI,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC;AAC3C,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AAC7G,YAAY,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;AAC3C,YAAY,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE;AACpD,cAAc,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,GAAG,MAAM,IAAI,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC;AACxF,cAAc,OAAO,IAAI;AACzB,aAAa;AACb,WAAW;AACX,UAAU,KAAK,CAAC,GAAG,GAAG,gBAAgB,CAAC;AACvC,UAAU,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AACpC,SAAS;AACT,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM;AACN,QAAQ,OAAO;AACf,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC/B,QAAQ,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACvC,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC/B,QAAQ,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1C,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC9C,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL;AACA,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,SAAS,cAAc,CAAC,EAAE,EAAE;AAC9B,IAAI,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ;AACpC,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE;AAClD,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE;AACvB,MAAM,IAAI,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE;AACjD,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACnC,QAAQ,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAClC,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,OAAO,KAAK;AAClB,KAAK;AACL;AACA,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI,IAAI,EAAE,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,KAAK,IAAI,SAAS,EAAE;AACxE,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;AAC9B,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;AACjD,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AAC3B,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,UAAU;AAClD,MAAM,GAAG;AACT,QAAQ,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC;AAC3E,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;AACxB,OAAO,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;AAC5E,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,8BAA8B,GAAG,SAAS,KAAK,EAAE;AACxD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B;AACA,IAAI,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE;AACpC,MAAM,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AAC9B,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI;AACJ,MAAM,KAAK,CAAC,OAAO;AACnB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;AACnC,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI,SAAS;AAClD,MAAM;AACN,MAAM,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AAC9B,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM;AACN,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC/B,QAAQ,IAAI,CAAC,wCAAwC,CAAC,KAAK,CAAC;AAC5D,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS;AAC/B,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC3C,KAAK;AACL;AACA,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,SAAS,sBAAsB,CAAC,EAAE,EAAE;AACtC,IAAI;AACJ,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,MAAM,EAAE,KAAK,IAAI;AACjB,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,wCAAwC,GAAG,SAAS,KAAK,EAAE;AAClE,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AAC9E,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;AACvC,MAAM,IAAI,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,EAAE;AACtD,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC;AAC1C,QAAQ,IAAI,CAAC,0CAA0C,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5E,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,KAAK;AACL,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACtB;AACA;AACA,IAAI,IAAI,IAAI,CAAC,wCAAwC,CAAC,KAAK,CAAC,EAAE;AAC9D,MAAM,IAAI,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC;AAC9C,MAAM,IAAI,CAAC,yCAAyC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACzE,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,0CAA0C,GAAG,SAAS,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AACjF,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC;AACrD,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE;AAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5D,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE;AAChD,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,yCAAyC,GAAG,SAAS,KAAK,EAAE,WAAW,EAAE;AAChF,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AACzD,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE;AAC/C,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,6BAA6B,GAAG,SAAS,KAAK,EAAE;AACvD,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;AACf,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;AAC/B,IAAI,OAAO,8BAA8B,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;AACjE,MAAM,KAAK,CAAC,eAAe,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACrD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,EAAE;AACvC,GAAG,CAAC;AACJ,EAAE,SAAS,8BAA8B,CAAC,EAAE,EAAE;AAC9C,IAAI,OAAO,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI;AAC7C,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,CAAC,8BAA8B,GAAG,SAAS,KAAK,EAAE;AACxD,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;AACf,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;AAC/B,IAAI,OAAO,+BAA+B,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;AAClE,MAAM,KAAK,CAAC,eAAe,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACrD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,EAAE;AACvC,GAAG,CAAC;AACJ,EAAE,SAAS,+BAA+B,CAAC,EAAE,EAAE;AAC/C,IAAI,OAAO,8BAA8B,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC;AACnE,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,CAAC,wCAAwC,GAAG,SAAS,KAAK,EAAE;AAClE,IAAI,OAAO,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;AACrD,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE;AAClD,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AAC9B,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACrC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACnC,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP;AACA,MAAM,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAClD,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,KAAK,EAAE;AAC5C,IAAI,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC5C,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;AACpC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;AACtE,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;AAC5D,UAAU,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACjD,SAAS;AACT,QAAQ,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE;AACzD,UAAU,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC/D,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;AAC7C,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B;AACA,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;AAC7C,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;AACzB;AACA,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACnC,QAAQ,IAAI,IAAI,KAAK,IAAI,YAAY,YAAY,CAAC,IAAI,CAAC,EAAE;AACzD,UAAU,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC9C,SAAS;AACT,QAAQ,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACtC,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL;AACA,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI,IAAI,EAAE,KAAK,IAAI,UAAU;AAC7B,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;AAC9B,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,qBAAqB,GAAG,SAAS,KAAK,EAAE;AAC/C,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B;AACA,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AAClD,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACnD,MAAM,IAAI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE;AACpD,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL;AACA,IAAI;AACJ,MAAM,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;AAChD,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAC3C,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,4BAA4B,GAAG,SAAS,KAAK,EAAE;AACtD,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,UAAU;AACnD,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,2BAA2B,GAAG,SAAS,KAAK,EAAE;AACrD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AACnD,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;AACzB,QAAQ,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACtC,OAAO;AACP,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,uBAAuB,GAAG,SAAS,KAAK,EAAE;AACjD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;AACf,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AAC3B,IAAI,OAAO,cAAc,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;AACjD,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC;AACzE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK;AAC9B,GAAG,CAAC;AACJ,EAAE,SAAS,cAAc,CAAC,EAAE,EAAE;AAC9B,IAAI,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;AAC3C,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE;AAC7C,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;AACf,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AAC3B,IAAI,OAAO,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;AAC7C,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK;AAC9B,GAAG,CAAC;AACJ,EAAE,SAAS,UAAU,CAAC,EAAE,EAAE;AAC1B,IAAI;AACJ,MAAM,CAAC,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;AACvC,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;AAChD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,SAAS;AAChD,KAAK;AACL,GAAG;AACH,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE;AACxB,IAAI,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,UAAU;AAClD,MAAM,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,SAAS;AACrC,KAAK;AACL,IAAI,IAAI,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,UAAU;AAClD,MAAM,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,SAAS;AACrC,KAAK;AACL,IAAI,OAAO,EAAE,GAAG,IAAI;AACpB,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,CAAC,mCAAmC,GAAG,SAAS,KAAK,EAAE;AAC7D,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAC1C,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;AAClC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAC5C,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;AACpC,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AACzD,UAAU,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;AACrE,SAAS,MAAM;AACf,UAAU,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AAC3C,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;AAChC,OAAO;AACP,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,SAAS,KAAK,EAAE;AAC9C,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAI,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE;AAC1B,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AAC3B,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,SAAS,YAAY,CAAC,EAAE,EAAE;AAC5B,IAAI,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI;AAC3C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,wBAAwB,GAAG,SAAS,KAAK,EAAE,MAAM,EAAE;AAC1D,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AAC3B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;AACrC,MAAM,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;AAC3B,QAAQ,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AAC1B,QAAQ,OAAO,KAAK;AACpB,OAAO;AACP,MAAM,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,EAAE;AAChC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;AACvB,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AACzB,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AACzB,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AACrB,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS;AAC3B,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AACjE,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;AACxB,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AACxC,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9B;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,6BAA6B,EAAE;AACtD,IAAI,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW;AAC/E,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,6BAA6B,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;AAC/F,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;AAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAChD;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AAC/B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AACnC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;AACrC,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;AACzC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,WAAW;AAC7B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;AAC1B,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW;AACnC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW;AACzC,MAAM,IAAIvI,QAAM,GAAG,IAAI,CAAC;AACxB;AACA,MAAM,OAAO;AACb,QAAQ,IAAI,EAAE,YAAY;AAC1B,UAAU,IAAI,KAAK,GAAGA,QAAM,CAAC,QAAQ,EAAE,CAAC;AACxC,UAAU,OAAO;AACjB,YAAY,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG;AAC1C,YAAY,KAAK,EAAE,KAAK;AACxB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC,EAAE;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW;AAC9B,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AACvE;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AAC1B,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;AACvE,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC7E;AACA,IAAI,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE;AACtD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE;AAClC;AACA;AACA,IAAI,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE;AAC7E,MAAM,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE;AAChC;AACA,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtC,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,WAAW;AACtC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,EAAE,OAAO,IAAI,EAAE;AACzD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,OAAO,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,GAAG,SAAS;AACpF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,WAAW;AACrC,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AAChE,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACxE,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,sBAAsB,CAAC,CAAC,EAAE;AACzE,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACvB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAChC,MAAM,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;AACnC,MAAM,IAAI,KAAK,CAAC;AAChB,MAAM,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;AAC9E,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AACvB,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,OAAO;AACP,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;AAC9B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG;AACtF,6BAA6B,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE;AAC7D,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,SAAS,EAAE;AAC7C,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AACzB,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AAChE,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;AAC1D,IAAI,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;AAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;AAC9B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG;AACpG,6BAA6B,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE;AAC7D,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW;AAC9B,IAAI,IAAI,EAAE,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC/C,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,QAAQ,EAAE;AAChB,MAAM,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG;AACvB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AACnB,QAAQ,KAAK;AACb,MAAM,KAAK,EAAE;AACb,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AACxD,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;AACrB,SAAS;AACT,MAAM,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI;AACnC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AACnB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACpC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;AACzB,UAAU,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;AACpC,SAAS;AACT,QAAQ,KAAK;AACb,MAAM,KAAK,EAAE;AACb,QAAQ,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACnD,QAAQ,KAAK,EAAE;AACf,UAAU,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAClC,UAAU,KAAK;AACf,QAAQ,KAAK,EAAE;AACf,UAAU,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAClC,UAAU,KAAK;AACf,QAAQ;AACR,UAAU,MAAM,IAAI;AACpB,SAAS;AACT,QAAQ,KAAK;AACb,MAAM;AACN,QAAQ,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE;AACjG,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;AACrB,SAAS,MAAM;AACf,UAAU,MAAM,IAAI;AACpB,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE;AACzC,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACxB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;AACrE,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACrB;AACA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,WAAW;AAClC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAClE,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACpD,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE;AACtE,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACpB,MAAM,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC7C,KAAK,MAAM;AACX,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACjB,MAAM,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,WAAW;AACpC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE;AAClE,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AAC9D,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACxC,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,yBAAyB,GAAG,SAAS,IAAI,EAAE;AAClD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;AACjB,IAAI,IAAI,SAAS,GAAG,IAAI,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5D;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;AACrE,MAAM,EAAE,IAAI,CAAC;AACb,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;AACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACjD,KAAK;AACL;AACA,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE;AACrE,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;AACzC,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE;AAC3C,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACvB,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE;AAC1C,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACxD,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AACnE,OAAO;AACP,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;AAChF,KAAK;AACL,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AAC9D,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;AAC9E,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,WAAW;AACpC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AAC9D,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;AAC7C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,IAAI,EAAE;AAC3C,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACvB,MAAM,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACrF,WAAW,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAClG;AACA,QAAQ,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAChC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;AACzB,QAAQ,OAAO,IAAI,CAAC,SAAS,EAAE;AAC/B,OAAO;AACP,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3C,KAAK;AACL,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AAC9D,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,IAAI,EAAE;AACxC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;AACjB,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACvB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/E,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE;AACzG,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChD,KAAK;AACL,IAAI,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AAClG,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AACpD;AACA,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC9B,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACvB,MAAM,OAAO,IAAI,CAAC,SAAS,EAAE;AAC7B,KAAK;AACL,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE;AAClC,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC;AAChD,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,SAAS,IAAI,EAAE;AAC1C,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AACjH,IAAI,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACrE,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACpB,MAAM,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;AAC1C,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAClE,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,WAAW;AACvC,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC/C,IAAI,IAAI,WAAW,IAAI,EAAE,EAAE;AAC3B,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACrD,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;AACvB,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACxD,QAAQ,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE;AACpF,OAAO;AACP,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;AACvB,QAAQ,IAAI,WAAW,IAAI,EAAE,EAAE;AAC/B,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5D,UAAU,IAAI,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AACvE,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/C,OAAO;AACP,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3C,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,WAAW;AACzC,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC/C,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;AAClB,IAAI,IAAI,WAAW,IAAI,EAAE,EAAE;AAC3B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACjB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACtC,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,YAAY;AAClE,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAClE,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACrF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,IAAI,EAAE;AACzC,IAAI,QAAQ,IAAI;AAChB;AACA;AACA,IAAI,KAAK,EAAE;AACX,MAAM,OAAO,IAAI,CAAC,aAAa,EAAE;AACjC;AACA;AACA,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9D,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9D,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;AAC5D,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7D,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChE,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChE,IAAI,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;AAC/D,IAAI,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;AAC/D,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7D;AACA,IAAI,KAAK,EAAE;AACX,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE;AACjD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACjB,MAAM,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;AAC9C;AACA,IAAI,KAAK,EAAE;AACX,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACrD,MAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE;AAC1E,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACzC,QAAQ,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;AAC3E,QAAQ,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;AAC1E,OAAO;AACP;AACA;AACA;AACA,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AACnF,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACnC;AACA;AACA,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AACpB,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,EAAE;AACX,MAAM,OAAO,IAAI,CAAC,eAAe,EAAE;AACnC;AACA,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AACpB,MAAM,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AACjD;AACA,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;AACrB,MAAM,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC1C;AACA,IAAI,KAAK,EAAE;AACX,MAAM,OAAO,IAAI,CAAC,eAAe,EAAE;AACnC;AACA,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AACpB,MAAM,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC1C;AACA,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AACpB,MAAM,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACvC;AACA,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;AACpB,MAAM,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACzC;AACA,IAAI,KAAK,EAAE;AACX,MAAM,OAAO,IAAI,CAAC,kBAAkB,EAAE;AACtC;AACA,IAAI,KAAK,GAAG;AACZ,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3C;AACA,IAAI,KAAK,EAAE;AACX,MAAM,OAAO,IAAI,CAAC,oBAAoB,EAAE;AACxC,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACrF,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;AACvC,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AAC1D,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;AACtC,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,WAAW;AAC/B,IAAI,IAAI,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AAC3C,IAAI,SAAS;AACb,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC,EAAE;AAClG,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC,EAAE;AACvF,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,QAAQ,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC,EAAE;AAC3C,aAAa,IAAI,EAAE,KAAK,GAAG,IAAI,OAAO,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC,EAAE;AAC5D,aAAa,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;AAClD,QAAQ,OAAO,GAAG,EAAE,KAAK,IAAI,CAAC;AAC9B,OAAO,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC,EAAE;AACjC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACjB,KAAK;AACL,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACpD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACf,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AAC9B,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACjC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE;AAC1D;AACA;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;AACzF,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtC;AACA;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI;AACR,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACzC,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB;AACA;AACA,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACzF,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,SAAS,KAAK,EAAE,GAAG,EAAE,8BAA8B,EAAE;AACtE;AACA,IAAI,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,IAAI,GAAG,KAAK,SAAS,CAAC;AAC9E;AACA;AACA;AACA;AACA,IAAI,IAAI,2BAA2B,GAAG,8BAA8B,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AAC/G;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;AAClD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;AAC9E,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;AACjE;AACA,MAAM,IAAI,eAAe,IAAI,IAAI,KAAK,EAAE,EAAE;AAC1C,QAAQ,IAAI,2BAA2B,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,mEAAmE,CAAC,CAAC,EAAE;AAClJ,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,kDAAkD,CAAC,CAAC,EAAE;AACrH,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,yDAAyD,CAAC,CAAC,EAAE;AACpH,QAAQ,QAAQ,GAAG,IAAI,CAAC;AACxB,QAAQ,QAAQ;AAChB,OAAO;AACP;AACA,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC/C,WAAW,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AACpD,WAAW,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE;AAC7D,WAAW,EAAE,GAAG,GAAG,QAAQ,CAAC,EAAE;AAC9B,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE;AACjC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;AAClC,KAAK;AACL;AACA,IAAI,IAAI,eAAe,IAAI,QAAQ,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,wDAAwD,CAAC,CAAC,EAAE;AAC9I,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,EAAE,EAAE,OAAO,IAAI,EAAE;AACtF;AACA,IAAI,OAAO,KAAK;AAChB,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,cAAc,CAAC,GAAG,EAAE,2BAA2B,EAAE;AAC5D,IAAI,IAAI,2BAA2B,EAAE;AACrC,MAAM,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,KAAK;AACL;AACA;AACA,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5C,GAAG;AACH;AACA,EAAE,SAAS,cAAc,CAAC,GAAG,EAAE;AAC/B,IAAI,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AACtC,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA;AACA,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACxC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,KAAK,EAAE;AACzC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AACzB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAClB,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClC,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,2BAA2B,GAAG,KAAK,CAAC,CAAC,EAAE;AACzF,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE;AACnF,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACjB,KAAK,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC,EAAE;AACzH,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;AAC3C,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,aAAa,EAAE;AAC5C,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AACzB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE;AAC9G,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC7E,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE;AACtE,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,IAAI,IAAI,KAAK,GAAG,EAAE;AACpF,MAAM,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACjB,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC,EAAE;AACpH,MAAM,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AAC/C,KAAK;AACL,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE;AACnF,IAAI,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AAC/B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACjB,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;AACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACrD,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE;AAC7E,KAAK;AACL,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC,EAAE;AAClH;AACA,IAAI,IAAI,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACvE,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;AAC3C,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,WAAW;AAClC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACnD;AACA,IAAI,IAAI,EAAE,KAAK,GAAG,EAAE;AACpB,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AAC9D,MAAM,IAAI,OAAO,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5E,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACjB,MAAM,IAAI,IAAI,GAAG,QAAQ,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC,EAAE;AAC5F,KAAK,MAAM;AACX,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACjC,KAAK;AACL,IAAI,OAAO,IAAI;AACf,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,mBAAmB,CAAC,IAAI,EAAE;AACrC;AACA,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE,EAAE,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AAC5D,IAAI,IAAI,IAAI,OAAO,CAAC;AACpB,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC;AAC7E,GAAG;AACH;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,KAAK,EAAE;AACpC,IAAI,IAAI,GAAG,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AAC1C,IAAI,SAAS;AACb,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE;AACpG,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,IAAI,EAAE,KAAK,KAAK,EAAE,EAAE,KAAK,EAAE;AACjC,MAAM,IAAI,EAAE,KAAK,EAAE,EAAE;AACrB,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,QAAQ,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAQ,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AAC9B,OAAO,MAAM,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;AACjD,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE;AACtG,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AACnB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACpC,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC;AACzB,UAAU,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;AACpC,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE;AACtF,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AACnB,OAAO;AACP,KAAK;AACL,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACpD,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;AAC9C,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,6BAA6B,GAAG,EAAE,CAAC;AACzC;AACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,WAAW;AACzC,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAClC,IAAI,IAAI;AACR,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3B,KAAK,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,IAAI,GAAG,KAAK,6BAA6B,EAAE;AACjD,QAAQ,IAAI,CAAC,wBAAwB,EAAE,CAAC;AACxC,OAAO,MAAM;AACb,QAAQ,MAAM,GAAG;AACjB,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AACnC,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,SAAS,QAAQ,EAAE,OAAO,EAAE;AACxD,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AACjE,MAAM,MAAM,6BAA6B;AACzC,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpC,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,WAAW;AAClC,IAAI,IAAI,GAAG,GAAG,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AACxC,IAAI,SAAS;AACb,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,EAAE;AAC7F,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;AACjF,QAAQ,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,eAAe,CAAC,EAAE;AAC9G,UAAU,IAAI,EAAE,KAAK,EAAE,EAAE;AACzB,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1B,YAAY,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC;AACvD,WAAW,MAAM;AACjB,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC;AACvB,YAAY,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;AACpD,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;AACpD,OAAO;AACP,MAAM,IAAI,EAAE,KAAK,EAAE,EAAE;AACrB,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,QAAQ,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAQ,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AAC9B,OAAO,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;AAChC,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AACnB,QAAQ,QAAQ,EAAE;AAClB,QAAQ,KAAK,EAAE;AACf,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACrE,QAAQ,KAAK,EAAE;AACf,UAAU,GAAG,IAAI,IAAI,CAAC;AACtB,UAAU,KAAK;AACf,QAAQ;AACR,UAAU,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACzC,UAAU,KAAK;AACf,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACpC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;AACzB,UAAU,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;AACpC,SAAS;AACT,QAAQ,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AAC9B,OAAO,MAAM;AACb,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AACnB,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,wBAAwB,GAAG,WAAW;AAC7C,IAAI,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;AACrD,MAAM,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,MAAM,KAAK,IAAI;AACf,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AACnB,QAAQ,KAAK;AACb;AACA,MAAM,KAAK,GAAG;AACd,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;AAC9C,UAAU,KAAK;AACf,SAAS;AACT;AACA;AACA,MAAM,KAAK,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9F;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACpD,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,UAAU,EAAE;AAC9C,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACf,IAAI,QAAQ,EAAE;AACd,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI;AACzB,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI;AACzB,IAAI,KAAK,GAAG,EAAE,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC7D,IAAI,KAAK,GAAG,EAAE,OAAO,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC9D,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI;AACzB,IAAI,KAAK,EAAE,EAAE,OAAO,IAAI;AACxB,IAAI,KAAK,GAAG,EAAE,OAAO,QAAQ;AAC7B,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI;AACzB,IAAI,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACxE,IAAI,KAAK,EAAE;AACX,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AAChF,MAAM,OAAO,EAAE;AACf,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,KAAK,EAAE;AACX,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;AACvB,QAAQ,IAAI,CAAC,kBAAkB;AAC/B,UAAU,IAAI,CAAC,GAAG,GAAG,CAAC;AACtB,UAAU,yBAAyB;AACnC,SAAS,CAAC;AACV,OAAO;AACP,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACnC;AACA,QAAQ,IAAI,CAAC,kBAAkB;AAC/B,UAAU,OAAO;AACjB,UAAU,4CAA4C;AACtD,SAAS,CAAC;AACV;AACA,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,IAAI;AACJ,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;AAChC,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC1C,QAAQ,IAAI,KAAK,GAAG,GAAG,EAAE;AACzB,UAAU,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,UAAU,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACxC,SAAS;AACT,QAAQ,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,QAAQ,IAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE;AACzF,UAAU,IAAI,CAAC,kBAAkB;AACjC,YAAY,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM;AAC1C,YAAY,UAAU;AACtB,gBAAgB,kCAAkC;AAClD,gBAAgB,8BAA8B;AAC9C,WAAW,CAAC;AACZ,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AACzC,OAAO;AACP,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;AACzB;AACA;AACA,QAAQ,OAAO,EAAE;AACjB,OAAO;AACP,MAAM,OAAO,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AACpC,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,EAAE;AACnC,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;AAC3B,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC,EAAE;AAC1F,IAAI,OAAO,CAAC;AACZ,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW;AAC9B,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AACvD,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;AAC/C,IAAI,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACzC,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACxC,MAAM,IAAI,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;AACxC,QAAQ,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,OAAO,MAAM,IAAI,EAAE,KAAK,EAAE,EAAE;AAC5B,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAChC,QAAQ,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;AAChC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG;AACrD,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAC,EAAE;AAC7F,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC;AACnB,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACvC,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,iBAAiB,GAAG,gBAAgB,EAAE,GAAG,EAAE,MAAM,CAAC;AACxE,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC,EAAE;AAC1E,QAAQ,IAAI,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACzC,QAAQ,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AAC9B,OAAO,MAAM;AACb,QAAQ,KAAK;AACb,OAAO;AACP,MAAM,KAAK,GAAG,KAAK,CAAC;AACpB,KAAK;AACL,IAAI,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;AACxD,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,WAAW;AAC7B,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAClC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;AACvC,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG,OAAO,CAAC;AACxB;AACA,EAAE,MAAM,CAAC,KAAK,GAAG;AACjB,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,OAAO,EAAE,OAAO;AACpB,IAAI,cAAc,EAAE,cAAc;AAClC,IAAI,QAAQ,EAAE,QAAQ;AACtB,IAAI,cAAc,EAAE,cAAc;AAClC,IAAI,WAAW,EAAE,WAAW;AAC5B,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,QAAQ,EAAE,KAAK;AACnB,IAAI,YAAY,EAAE,UAAU;AAC5B,IAAI,UAAU,EAAE,UAAU;AAC1B,IAAI,WAAW,EAAE,OAAO;AACxB,IAAI,gBAAgB,EAAE,gBAAgB;AACtC,IAAI,iBAAiB,EAAE,iBAAiB;AACxC,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,UAAU,EAAE,UAAU;AAC1B,IAAI,kBAAkB,EAAE,kBAAkB;AAC1C,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE;AACjC,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AACvC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE;AAClD,IAAI,OAAO,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC;AACxD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;AACrC,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;AAC3C,GAAG;AACH;AACA,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB,EAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1B,EAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC9B,EAAE,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;AAC1C,EAAE,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;AAClC,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAChC,EAAE,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;AAC1C,EAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;AACpC,EAAE,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC9C,EAAE,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAChD,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAChC,EAAE,OAAO,CAAC,YAAY,GAAG,UAAU,CAAC;AACpC,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAChC,EAAE,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;AAClC,EAAE,OAAO,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAClD,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,EAAE,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAChD,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC;AAChC,EAAE,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC3B,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAChC,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAC5B;AACA,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE;AACA,CAAC,EAAE;;;ACj8KH,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAC;AAChE;AACA,MAAM,QAAQ,GAAG,MAAM,IAAI;AAC3B,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK;AACvC;AACA,EAAE,MAAM0L,OAAK,GAAGlR,cAAgB;AAChC;AACA,EAAE,IAAIkR,OAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAIA,OAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAIA,OAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAClH,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,uEAAuE,EAAEA,OAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9G,GAAG;AACH;AACA;AACA;AACA,EAAE,KAAK,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,KAAKA,OAAK,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE;AAC/E,IAAI,IAAI,GAAG,KAAKA,OAAK,CAAC,MAAM,EAAE;AAC9B,MAAM,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC;AACpG,KAAK;AACL,GAAG;AACH,EAAE,OAAOA,OAAK;AACd,EAAC;AACD;IACA,yBAAc,GAAG,SAAS,MAAM,EAAE;AAClC;AACA,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE;AACzC,IAAI,OAAO,MAAM;AACjB,GAAG;AACH;AACA,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAC;AAChC;AACA,EAAE,MAAM,GAAG,cAAc,MAAM,CAAC;AAChC,IAAI,OAAO,GAAG;AACd,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,KAAK,EAAC;AACtG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,IAAG;AAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,IAAG;AAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;AACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,MAAK;AACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,YAAW;AAClD,MAAM,OAAO,IAAI,CAAC,QAAQ;AAC1B,KAAK;AACL;AACA,IAAI,4BAA4B,CAAC,OAAO,EAAE;AAC1C,MAAM,OAAO,CAAC,QAAQ,GAAG,MAAK;AAC9B,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAE;AAC3C,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,0DAA0D,EAAC;AACtI,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAC;AAC3D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAkB;AACvD,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE;AACvI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,2BAA2B,EAAC;AAC9D,OAAO;AACP,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,KAAI;AAChE,MAAM,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAC;AAC3D,MAAM,OAAO,OAAO,CAAC,GAAG;AACxB,KAAK;AACL;AACA,IAAI,gBAAgB,GAAG;AACvB,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;AACnC,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAK;AAC5B,MAAM,IAAI,CAAC,IAAI,GAAE;AACjB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAC;AAChD,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAC;AAC3E,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE;AAC3B,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;AACvB,QAAQ,EAAE,IAAI,CAAC,IAAG;AAClB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;AACrC,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC;AAClE,OAAO;AACP,MAAM,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACzC,KAAK;AACL;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE;AAClC,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,wBAAuB;AACpE,MAAM,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAkB;AAC5D,MAAM,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAC;AAC9E,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAAC,6BAA4B;AAC9E,MAAM,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,wBAAuB;AACtE,MAAM,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAC;AACxD;AACA,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,EAAC;AACzD;AACA,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,wBAAuB;AACjE,MAAM,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,wBAAuB;AAC5D,MAAM,IAAI,CAAC,uBAAuB,GAAG,0BAAyB;AAC9D,MAAM,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,6BAA4B;AACtE,MAAM,IAAI,CAAC,4BAA4B,GAAG,+BAA8B;AACxE,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AACzC,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAC;AACzD,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;AAC1B,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,sBAAsB,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,EAAE,CAAC,EAAC;AACzF,UAAU,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,kCAAkC,EAAC;AAC1F,SAAS;AACT,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,sBAAsB,EAAC;AAChF,MAAM,OAAO,OAAO;AACpB,KAAK;AACL;AACA;AACA,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAkB;AACvD,MAAM,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,wBAAuB;AAC5D,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,wBAAuB;AACjE,MAAM,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,6BAA4B;AACtE,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,EAAC;AACjD,MAAM,IAAI,CAAC,kBAAkB,GAAG,kBAAiB;AACjD,MAAM,IAAI,CAAC,uBAAuB,GAAG,uBAAsB;AAC3D,MAAM,OAAO,OAAO;AACpB,KAAK;AACL;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC3F,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAW;AAC5F,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,GAAE;AACnC,MAAM,IAAI;AACV,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,iBAAiB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxG,QAAQ,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,sBAAsB;AAClD,OAAO,EAAE;AACT,QAAQ,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AAC1D,OAAO;AACP,MAAM,IAAI,QAAQ,GAAG,MAAK;AAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAC;AAC/C,QAAQ,QAAQ,GAAG,KAAI;AACvB,OAAO;AACP,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAC;AACrD,MAAM,IAAI,CAAC,MAAM,GAAG,KAAI;AACxB,MAAM,IAAI,CAAC,QAAQ,GAAG,MAAK;AAC3B,MAAM,IAAI,iBAAiB,EAAE;AAC7B,QAAQ,IAAI,CAAC,QAAQ,GAAG,SAAQ;AAChC,OAAO;AACP,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACpD,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE;AAClC,UAAU,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,wCAAwC,EAAC;AAC1E,SAAS;AACT,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,GAAE;AAC/C,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACtF,UAAU,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC7C,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,kCAAkC,EAAC;AAC/E,WAAW;AACX,UAAU,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAK;AAChF,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAC;AAC7C,OAAO;AACP,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,CAAC;AACtD,KAAK;AACL;AACA;AACA,IAAI,eAAe,CAAC,sBAAsB,EAAE,QAAQ,EAAE;AACtD,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,sBAAsB,EAAE,QAAQ,EAAC;AAC7E,MAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,QAAQ,EAAE;AACxC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,mBAAmB,EAAE;AAClH,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,qCAAqC,EAAC;AAC1E,SAAS;AACT,OAAO;AACP,MAAM,OAAO,OAAO;AACpB,KAAK;AACL,IAAG;AACH,EAAE,MAAM,CAAC,SAAS,CAAC,sBAAsB,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAC;AACpF,EAAE,OAAO,MAAM;AACf;;AClKA,MAAMC,sBAAoB,GAAGnR,0BAAuC;AACpE;IACA,gBAAc,GAAG,SAAS,MAAM,EAAE;AAClC,EAAE,MAAMkR,OAAK,GAAG,MAAM,CAAC,KAAK,IAAIxQ,cAAgB;AAChD,EAAE,MAAM,EAAE,GAAGwQ,OAAK,CAAC,SAAQ;AAC3B;AACA,EAAE,MAAM,GAAGC,sBAAoB,CAAC,MAAM,EAAC;AACvC,EAAE,OAAO,cAAc,MAAM,CAAC;AAC9B,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC3B,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,cAAa;AAClD,QAAQ,IAAI,CAAC,aAAa,GAAG,KAAI;AACjC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE;AACzH,UAAU,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAE;AACzC,SAAS,MAAM,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,GAAE;AACnD,QAAQ,IAAI,CAAC,aAAa,GAAG,gBAAe;AAC5C,OAAO,MAAM,KAAK,CAAC,KAAK,GAAG,KAAI;AAC/B,KAAK;AACL;AACA;AACA,IAAI,iBAAiB,CAAC,uBAAuB,EAAE;AAC/C,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;AACjN,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,GAAE;AACrC,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE;AACxC,UAAU,IAAI,KAAK,GAAG,EAAC;AACvB,UAAU,GAAG;AACb,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAK;AAChD,iBAAiB,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAK;AACrD,iBAAiB,MAAM,CAAC,IAAI,GAAE;AAC9B,WAAW,QAAQ,KAAK,GAAG,CAAC,CAAC;AAC7B,SAAS,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAC;AAChC,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,KAAI;AACpE,QAAQ,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,kBAAkB,EAAE,EAAE;AACrD,UAAU,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,OAAM;AAC5C,SAAS;AACT,QAAQ,IAAI,OAAO,EAAE;AACrB,UAAU,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;AACvC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACxD,YAAY,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAC;AACnD,WAAW,MAAM;AACjB,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAC;AACxC,WAAW;AACX,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa;AAChF,eAAe,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,aAAa,CAAC,EAAE;AACjF,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,iDAAiD,EAAC;AACzF,WAAW;AACX,UAAU,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAC;AACrC,UAAU,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAC;AAC1C,UAAU,IAAI,CAAC,SAAS,GAAE;AAC1B,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAC;AACrD,UAAU,IAAI,CAAC,SAAS,GAAE;AAC1B,UAAU,OAAO,IAAI;AACrB,SAAS;AACT,OAAO;AACP;AACA,MAAM,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AAC3D,KAAK;AACL;AACA;AACA,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE;AACnC,MAAM,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAC;AACxD,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,qDAAqD,EAAC;AACzI,MAAM,OAAO,KAAK;AAClB,KAAK;AACL,GAAG;AACH;;ACjEA,MAAM,oBAAoB,GAAGnR,0BAAuC;AACpE;IACA,wBAAc,GAAG,SAAS,MAAM,EAAE;AAClC,EAAE,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,EAAC;AACrD;AACA,EAAE,MAAMkR,OAAK,GAAG,MAAM,CAAC,KAAK,IAAIxQ,cAAgB;AAChD,EAAE,MAAM,EAAE,GAAGwQ,OAAK,CAAC,SAAQ;AAC3B;AACA,EAAE,OAAO,cAAc,cAAc,CAAC;AACtC,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC3B,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAmB;AACxD,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,GAAE;AAC1D,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,GAAE;AAC5C,QAAQ,IAAI,CAAC,mBAAmB,GAAG,gBAAe;AAClD,OAAO,MAAM,KAAK,CAAC,KAAK,GAAG,KAAI;AAC/B,KAAK;AACL;AACA;AACA,IAAI,iBAAiB,CAAC,uBAAuB,EAAE;AAC/C,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AACxE,QAAQ,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AAC7D,OAAO;AACP;AACA,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,GAAE;AACnC,MAAM,MAAM,CAAC,IAAI,GAAE;AACnB,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;AACrI,QAAQ,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AAC7D,OAAO;AACP,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE;AACtC,QAAQ,IAAI,KAAK,GAAG,EAAC;AACrB,QAAQ,GAAG;AACX,UAAU,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAK;AAC9C,eAAe,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAK;AACnD,eAAe,MAAM,CAAC,IAAI,GAAE;AAC5B,SAAS,QAAQ,KAAK,GAAG,CAAC,CAAC;AAC3B,OAAO,MAAM,MAAM,CAAC,IAAI,GAAE;AAC1B,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE;AAC1F,QAAQ,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AAC7D,OAAO;AACP;AACA,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,GAAE;AACnC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAChD,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACpD,QAAQ,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAC;AAC/C,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAC;AACpC,OAAO;AACP,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa;AAC5E,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,aAAa,CAAC,EAAE;AAC/F,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,iDAAiD,EAAC;AACrF,OAAO;AACP,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC/E,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,wDAAwD,EAAC;AAC5F,OAAO;AACP;AACA,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAC;AACjC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAC;AACtC,MAAM,IAAI,CAAC,SAAS,GAAE;AACtB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAC;AACjD,MAAM,IAAI,CAAC,SAAS,GAAE;AACtB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA;AACA,IAAI,iBAAiB,CAAC,IAAI,EAAE;AAC5B,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACnE,QAAQ,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAC;AAC/C,OAAO,MAAM;AACb,QAAQ,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAC;AACrC,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE;AACnC,MAAM,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAC;AACxD,MAAM,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE;AACzH,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,4DAA4D,EAAC;AAC7F,OAAO;AACP,MAAM,OAAO,KAAK;AAClB,KAAK;AACL,GAAG;AACH;;IClFAE,WAAc,GAAG,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,KAAK;AAC/C,CAAC,MAAM,OAAO,GAAG;AACjB,EAAE,8HAA8H;AAChI,EAAE,0DAA0D;AAC5D,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACb;AACA,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;AACzD,CAAC;;ACRD,MAAM,SAAS,GAAGpR,WAAqB,CAAC;AACxC;IACA,SAAc,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM;;SCKhF,YAAY,CAAC,GAAwB;;;IAGnD,OAAO;QACL,OAAO,EAAEqR,SAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QAC3B,KAAK,EAAEA,SAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzC,EAAE,EAAG,GAAmB,CAAC,EAAE;QAC3B,KAAK,EAAEA,SAAK,CAAE,GAAmB,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,EAAG,GAAmB,CAAC,MAAM;QACnC,UAAU,EAAG,GAAmB,CAAC,UAAU;QAC3C,GAAG,EAAG,GAAmB,CAAC,GAAG;KAC9B,CAAA;AACH,CAAC;SAEe,iBAAiB,CAC/B,GAAgB,EAChB,OAAiB,EAAE,EACnB,YAAY,GAAG,IAAI;IAEnB,IAAI,GAAG,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa5O,MAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACnE,IAAI,GAAG,CAAC,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,WAAWA,MAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACtD,IAAI,GAAG,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAACA,MAAK,CAAC,MAAM,CAACwC,KAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACtD,IAAI,YAAY,IAAI,GAAG,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAACA,KAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC/B,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;SAEe,QAAQ,CAAC,MAAqB,EAAE,GAAgB;IAC9D,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE;QACjCxC,MAAK,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC;KACnD,CAAC,CAAA;IAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC9B,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,GAAG;KACX,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC;KACvB,CAAC,CAAA;AACJ,CAAC;SAEe,eAAe,CAC7B,MAAqB,EACrB,SAAS,GAAG,KAAK;;;IAIjB,OAAO,SAAS,mBAAmB,CAAC,GAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;QACnE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAErB,IAAI,SAAS,EAAE;YACb,IAAI,EAAE,CAAA;SACP;aAAM;YACL,IAAI,GAAG,YAAY,qBAAqB,EAAE;gBACxC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBACpB,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;gBACvC,GAAG,CAAC,GAAG,EAAE,CAAA;aACV;YACD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;YACpB,GAAG,CAAC,GAAG,EAAE,CAAA;SACV;KACF,CAAA;AACH,CAAC;MAEY,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,GAAW;QACrB,KAAK,CAAC,GAAG,CAAC,CAAA;KACX;CACF;SAEe,eAAe,CAAC,GAAW;;IAEzC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;IACvB,OAAO,IAAI,CAAA;;;WAGF,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;;;;;;;GAOnC,CAAA;AACH;;ACrGA;;;;AAkHO,IAAI,MAAM,GAAG6O,MAAY,CAAC,MAAM,CACrC,gBAAgB,EAChB,wBAAwB,CACzB,CAAA;AAEM,eAAe,qBAAqB,CACzC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAkB,EACnE,OAAmB;IAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;IAEjC,MAAM,YAAY,GAAqC,EAAE,CAAA;IACzD,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;IACnD,MAAM,kBAAkB,GAAG,cAAc,CAAC,qBAAqB,EAAE;QAC/D,eAAe,EAAE,aAAa;KAC/B,CAAC,CAAA;IACF,MAAM,oBAAoB,GAAG,cAAc,CAAC,uBAAuB,EAAE;QACnE,eAAe,EAAE,aAAa;KAC/B,CAAC,CAAA;;IAIF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;IACzB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;;IAGpC,MAAM,aAAa,GAAGxN,cAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAA;IAC9E,MAAM,cAAc,GAAyB;QAC3C,IAAI,EAAE;YACJ,aAAa,EAAE,IAAI,CAAC,KAAK,CAACiB,WAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;iBAC/D,OAAO;YACV,SAAS,EAAE,IAAI;SAChB;KACF,CAAA;IAED,SAAS,sBAAsB,CAAC,MAAc,EAAE,MAAc;QAC5D,MAAM,CAAC,IAAI,CACTtC,MAAK,CAAC,IAAI,CAAC,WAAW,MAAM,IAAI,CAAC;YAC/BA,MAAK,CAAC,MAAM,CACV,kBAAkBA,MAAK,CAAC,IAAI,CAC1B,GAAG,MAAM,IAAI,CACd,6EAA6E,CAC/E,CACJ,CAAA;KACF;;;;IAKD,MAAM,OAAO;QASX,YAAY,aAAsB;YARlC,SAAI,GAAG,cAAc,CAAC,IAAI,CAAA;YAC1B,QAAG,GAAG,KAAK,CAAA;YAEX,cAAS,GAAkB,IAAI,CAAA;YAC/B,gBAAW,GAAkB,IAAI,CAAA;YAEjC,kBAAa,GAAuB,IAAI,CAAA;YAGtC,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,CAAA;SAC3C;QAED,KAAK,CAAC,IAAY,EAAE,OAAY,EAAE;YAChC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;gBACxB,UAAU,EAAE,QAAQ;gBACpB,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,IAAI;gBACf,GAAG,IAAI;aACR,CAAC,CAAA;SACH;QAED,MAAM,OAAO,CACX,EAAU,EACV,QAAiB,EACjB,OAAgC;YAEhC,IAAI,KAA8B,CAAA;YAClC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,KAAI,IAAI,CAAC,aAAa,EAAE;gBAC3C,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;aAC9B;YACD,IAAI,GAAG,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;YAClE,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAA;YAC9C,OAAO,GAAwB,CAAA;SAChC;QAED,aAAa,CAAC,EAAU;YACtB,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACzB,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC,IAAI,CAAA;YACxB,GAAG,GAAG;;;gBAGJ,IAAI,EAAE,EAAE;aACT,CAAA;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YACpB,OAAO,GAAG,CAAC,IAAI,CAAA;SAChB;QAED,YAAY;YACV,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;SACtB;QAED,YAAY,CAAC,EAAU;YACrB,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CACjB;YAAA,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;YACjE,IAAI,OAAO;gBAAE,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;SAClD;QAED,aAAa;YACX,OAAO,CAAC,GAAG,UAAU,CAAC,CAAA;SACvB;QAED,QAAQ,CAAC,WAAwB;YAC/B,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,aAAc,CAAC,IAAI,CAAC,CAAA;YAC5D,OAAO,EAAE,CAAA;SACV;QAED,cAAc;YACZ,sBAAsB,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAc,CAAC,IAAI,CAAC,CAAA;SACnE;QAED,WAAW;YACT,sBAAsB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAc,CAAC,IAAI,CAAC,CAAA;YAC/D,OAAO,EAAE,CAAA;SACV;QAED,IAAI,CACF,CAAuB,EACvB,QAAoD;YAEpD,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC1C,MAAM,GAAG,GAAG,iBAAiB,CAC3B,GAAG,EACH,CAACA,MAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EACzC,KAAK,CACN,CAAA;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACf,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,CAAA;SACH;QAED,KAAK,CACH,CAAuB,EACvB,QAAoD;;;YAIpD,MAAM,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;SACrC;KACF;IAED,SAAS,WAAW,CAClB,CAAuB,EACvB,QAA+D,EAC/D,GAAY;QAEZ,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAgB,CAAA;QACrE,IAAI,GAAG,CAAC,aAAa;YAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAA;QAC1D,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,SAAS,CAAA;QACpD,IAAI,GAAG,CAAC,WAAW,EAAE;YACnB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAA;YAChC,MAAM,GAAG,GACP,QAAQ,IAAI,IAAI;kBACZ,QAAQ;kBACR,GAAG,CAAC,GAAG,IAAI,IAAI;sBACf,GAAG,CAAC,GAAG;;wBAEN,GAAW,CAAC,QAAQ,CAAA;YAC3B,IAAI,GAAG,IAAI,IAAI,EAAE;gBACf,IAAI,WAAW,CAAA;gBACf,IAAI;oBACF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;iBAChD;gBAAC,OAAO,IAAI,EAAE;oBACb,MAAM,CAAC,KAAK,CACVA,MAAK,CAAC,GAAG,CACP,4BAA4B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,CAC3D;;oBAED,EAAE,KAAK,EAAE,IAAI,EAAE,CAChB,CAAA;oBACD,MAAM,GAAG,CAAA;iBACV;gBACD,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;oBACnB,IAAI,EAAE,GAAG,CAAC,EAAE;oBACZ,GAAG,WAAW;iBACf,CAAA;gBACD,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;aACjE;iBAAM,IAAI,GAAG,CAAC,GAAG,EAAE;;gBAElB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;oBACd,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,CAAA;oBAC1B,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;wBAChB,GAAG,CAAC,EAAE,GAAGoB,eAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;wBACpC,IAAI;4BACF,IAAI,GAAGkB,WAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;yBAC9C;wBAAC,MAAM,GAAE;qBACX;oBACD,GAAG,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;iBAC7C;aACF;iBAAM,IAAK,GAAW,CAAC,IAAI,IAAK,GAAW,CAAC,MAAM,EAAE;gBACnD,GAAG,CAAC,GAAG,GAAG;oBACR,IAAI,EAAE,GAAG,CAAC,EAAE;oBACZ,IAAI,EAAG,GAAW,CAAC,IAAI;oBACvB,MAAM,EAAG,GAAW,CAAC,MAAM;iBAC5B,CAAA;gBACD,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;aACrE;SACF;QACD,OAAO,GAAG,CAAA;KACX;IAED,MAAM,gBAAiB,SAAQ,OAAO;QAOpC,YAAY,QAAgB,EAAE,IAAY,EAAE,KAA0B;YACpE,KAAK,EAAE,CAAA;YALT,sBAAiB,GAAqB,IAAI,CAAA;YAC1C,mBAAc,GAA4C,EAAE,CAAA;YAC5D,gBAAW,GAAqB,IAAI,CAAA;YAIlC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aAChC;SACF;QAED,qBAAqB,CAAC,YAAY,GAAG,KAAK;YACxC,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;YAClC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;gBACjC,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC5C,IAAI,EAAE,SAAS,IAAK,CAAe,CAAC,EAAE;;oBAEpC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;oBACrC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAA;oBAC9B,MAAK;iBACN;gBACD,IAAI,CAAC,WAAW,EAAE;oBAChB,WAAW,GAAG,CAAc,CAAA;iBAC7B;qBAAM;oBACL,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE;wBAC7C;4BACE,GAAI,CAAkB;4BACtB,cAAc,EAAE,WAAW,CAAC,cAAc;yBAC3C;wBACD,WAA2B;qBAC5B,CAAc,CAAA;iBAChB;aACF;YACD,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,YAAY;sBACf,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC;wBAC7C,cAAc,EAAE,IAAI;wBACpB,KAAK,EAAE,IAAI;wBACX,MAAM,EAAE,IAAI,CAAC,QAAQ;qBACtB,CAAC;sBACF,IAAI,CAAA;aACT;YACD,IAAI,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE;gBACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;gBAC9B,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAA;aAC/B;YACD,OAAO,IAAI,CAAC,WAAW,CAAA;SACxB;QAED,oBAAoB;YAClB,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAc,CAAA;SACrD;KACF;IAED,IAAI,MAAM,GAAG,KAAK,CAAA;IAElB,MAAM,SAAS,GAAoB;QACjC,OAAO,EAAE,MAAM,CAAC;YACd,IAAI,OAAO,GAAG,aAAa,CAAA;YAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,IAAI,CAAC,MAAM,CAAC,OAAO;oBAAE,SAAQ;gBAC7B,OAAO;oBACL,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;aAClE;YACD,IAAI,OAAO,CAAC,kBAAkB,EAAE;gBAC9B,MAAM,GAAGuM,MAAY,CAAC,MAAM,CAC1B,GAAG,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC,MAAM,CACpD,OAAO,CAAC,kBAAkB,CAC3B,CACF,CAAA;aACF;YACD,OAAO;uBACLJ,OAAK;gBACL,kBAAkB,EAAE,EAAE;gBACtB,GAAG,OAAO;aACX,CAAA;SACF,GAAG;QAEJ,MAAM,UAAU;YACd,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM;gBACjB,IAAI,MAAM,CAAC,UAAU,EAAE;oBACrB,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAC3B,IAAI,OAAO,CAAC,MAAM,CAAQ,EAC1B,SAAS,CAAC,OAAiC,CAC5C,CAAA;iBACF;aACF,CAAC,CACH,CAAA;SACF;QAED,MAAM,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAGjB,WAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG;YACpE,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAA;YACzB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;YACf,GAAG,CAAC,aAAa,GAAG,KAAK,CAAA;YACzB,MAAM,YAAY,GAAG,OAAO,GAAGpL,sBAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAEpD,IAAI,EAAE,GAAkB,IAAI,CAAA;YAC5B,MAAM,OAAO,GAA+B,EAAE,CAAA;YAC9C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,IAAI,CAAC,MAAM,CAAC,SAAS;oBAAE,SAAQ;gBAC/B,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC,MAAM,CAAC;oBAAE,SAAQ;gBAEhC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAA;gBAE1B,MAAM,kBAAkB,GAAG,OAAO,GAAGA,sBAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CACxC,GAAU,EACV,KAAK,EACL,QAAQ,EACR,EAAE,EACF,GAAG,CACJ,CAAA;gBACD,IAAI,CAAC,MAAM;oBAAE,SAAQ;gBAErB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBAC9B,EAAE,GAAG,MAAM,CAAA;iBACZ;qBAAM;oBACL,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;oBACd,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;iBAC/B;gBAED,OAAO;oBACL,kBAAkB,CAChB,QAAQ,CAAC,kBAAkB,CAAC,EAC5B,MAAM,CAAC,IAAI,EACX,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CACtB,CAAA;;gBAGH,MAAK;aACN;YAED,IAAI,OAAO,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;gBAC3D,MAAM,GAAG,GAAG,KAAK,GAAG,EAAE,CAAA;;gBAEtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;oBACtB,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;oBACxB,YAAY,CACV,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAIpC,MAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAOA,MAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CACrE,CAAA;iBACF;aACF;YAED,IAAI,EAAE,EAAE;gBACN,OAAO,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAGoB,eAAa,CAAC,EAAE,CAAC,CAAA;gBACvD,OAAO,OAA4B,CAAA;aACpC;iBAAM;gBACL,OAAO,IAAI,CAAA;aACZ;SACF;QAED,MAAM,IAAI,CAAC,EAAE,EAAE,GAAG;YAChB,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAA;YACzB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;YACf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,IAAI,CAAC,MAAM,CAAC,IAAI;oBAAE,SAAQ;gBAC1B,GAAG,CAAC,aAAa,GAAG,MAAM,CAAA;gBAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAU,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;gBAC1D,IAAI,MAAM,IAAI,IAAI,EAAE;oBAClB,OAAO,MAAM,CAAA;iBACd;aACF;YACD,OAAO,IAAI,CAAA;SACZ;QAED,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG;YAClC,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAkB,CAAC,CAAA;YAC9D,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;YACf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,IAAI,CAAC,MAAM,CAAC,SAAS;oBAAE,SAAQ;gBAC/B,GAAG,CAAC,aAAa,GAAG,MAAM,CAAA;gBAC1B,GAAG,CAAC,SAAS,GAAG,EAAE,CAAA;gBAClB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAA;gBACtB,MAAM,KAAK,GAAG,OAAO,GAAGgB,sBAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBAC7C,IAAI,MAA4C,CAAA;gBAChD,IAAI;oBACF,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAU,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;iBAChE;gBAAC,OAAO,CAAC,EAAE;oBACV,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;iBACb;gBACD,IAAI,CAAC,MAAM;oBAAE,SAAQ;gBACrB,OAAO;oBACL,oBAAoB,CAClB,QAAQ,CAAC,KAAK,CAAC,EACf,MAAM,CAAC,IAAI,EACX,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CACtB,CAAA;gBACH,IAAIC,UAAQ,CAAC,MAAM,CAAC,EAAE;oBACpB,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;oBACxB,IAAI,MAAM,CAAC,GAAG;wBAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;iBACpD;qBAAM;oBACL,IAAI,GAAG,MAAM,CAAA;iBACd;aACF;YACD,OAAO;gBACL,IAAI;gBACJ,GAAG,EAAE,GAAG,CAAC,qBAAqB,EAAE;aACjC,CAAA;SACF;QAED,MAAM,KAAK;YACT,IAAI,MAAM;gBAAE,OAAM;YAClB,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAA;YACzB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC,CAC9D,CAAA;YACD,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC,CACpE,CAAA;YACD,MAAM,GAAG,IAAI,CAAA;SACd;KACF,CAAA;IAED,OAAO,SAAS,CAAA;AAClB;;ACngBA,MAAML,OAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;AAEzC,MAAM,WAAW,GAAG,4BAA4B,CAAA;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,GACpB,oHAAoH,CAAA;AAE/G,eAAe,WAAW,CAAC,MAAsB;;IAItD,MAAM,KAAK,GAAGI,sBAAW,CAAC,GAAG,EAAE,CAAA;IAE/B,IAAI,OAAO,GAAa,EAAE,CAAA;IAE1B,MAAM,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAA;IACzD,MAAM,UAAU,GAAG,MAAA,MAAM,CAAC,KAAK,CAAC,aAAa,0CAAE,KAAK,CAAA;IAEpD,IAAI,qBAAqB,EAAE;QACzB,OAAO,GAAG,MAAM,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;KAC3D;SAAM,IAAI,UAAU,EAAE;QACrB,MAAM,WAAW,GAAG,CAAC,CAAS,KAAKvB,aAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC/D,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,OAAO,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;SACpC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACpC,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;SACtC;aAAM,IAAIwB,UAAQ,CAAC,UAAU,CAAC,EAAE;YAC/B,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;SACrD;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;SACtD;KACF;SAAM;QACL,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;KACjD;;;IAID,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,CAAC,KAAK,KACJ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QACnDC,WAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CACvB,CAAA;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,IAAI,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;YAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAChBtC,MAAK,CAAC,MAAM,CACV,4EAA4E;gBAC1E,2DAA2D;gBAC3D,mCAAmC,CACtC,CACF,CAAA;SACF;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;KACjC;SAAM;QACLgC,OAAK,CAAC,2CAA2C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;KACzE;IAED,MAAM,IAAI,GAA2B,EAAE,CAAA;IACvC,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAE3E,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,cAAc,EAAE,GACvC,MAAA,MAAA,MAAM,CAAC,YAAY,0CAAE,cAAc,mCAAI,EAAE,CAAA;IAE3C,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAChB8M,aAAK,CAAC;QACJ,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;QAC5B,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,CAAC,KAAK,CAAC;QACpB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC;QAC7B,GAAG,cAAc;KAClB,CAAC,CACH,CACF,CAAA;IAED9M,OAAK,CAAC,qBAAqB,CAACI,sBAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAE7E,OAAO;QACL,IAAI;QACJ,OAAO;KACR,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAA0B,EAAE,MAAsB;IACrE,OAAOsI,GAAI,CAAC,OAAO,EAAE;QACnB,GAAG,EAAE,MAAM,CAAC,IAAI;QAChB,MAAM,EAAE;YACN,oBAAoB;YACpB,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK;YAC9B,iBAAiB;SAClB;QACD,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,cAAc,GAClB,2EAA2E,CAAA;AACtE,MAAM,QAAQ,GAAG,8CAA8C,CAAA;AAC/D,MAAM,SAAS,GAAG,qBAAqB,CAAA;AAC9C,MAAM,KAAK,GAAG,mDAAmD,CAAA;AACjE,MAAM,MAAM,GAAG,oDAAoD,CAAA;AACnE,MAAM,MAAM,GAAG,oDAAoD,CAAA;AAEnE,SAAS,iBAAiB,CACxB,MAAsB,EACtB,SAA0B,EAC1B,UAAkC,EAClC,OAA+B,EAC/B,OAAiB;;IAEjB,MAAM,IAAI,GAAG,IAAI,GAAG,EAA8B,CAAA;IAElD,MAAM,OAAO,GAAG,OAAO,EAAU,EAAE,QAAiB;QAClD,MAAM,GAAG,GAAG,EAAE,IAAI,QAAQ,IAAI7J,aAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;QACrD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;SACrB;QACD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,SAAS,CACxC,EAAE,EACF,QAAQ,IAAIO,eAAa,CAAC,QAAQ,CAAC,CACpC,CAAA;QACD,MAAM,GAAG,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,CAAA;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAClB,OAAO,GAAG,CAAA;KACX,CAAA;IAED,MAAM,OAAO,GAAG,MAAA,MAAM,CAAC,YAAY,0CAAE,OAAO,CAAA;IAC5C,MAAM,OAAO,GAAG;QACd,IAAI,CAAA,MAAA,MAAM,CAAC,YAAY,0CAAE,OAAO,KAAI,EAAE,CAAC;QACvC,cAAc;QACd,WAAW;KACZ,CAAA;IAED,MAAM,mBAAmB,GAAG,CAAC,EAAE,IAAI,EAAoB,MAAM;QAC3D,IAAI;QACJ,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;KAClC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,KAAK,CAAC,KAAK;;YAET,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM;gBACrD,IAAI;gBACJ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC,CAAA;;YAGH,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM;gBACpD,IAAI;gBACJ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC,CAAA;;YAGH,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAChE,OAAO;oBACL,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;oBACnC,SAAS,EAAE,MAAM;iBAClB,CAAA;aACF,CAAC,CAAA;;YAGF,KAAK,CAAC,MAAM,CACV,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,EAC1C,OAAO,EAAE,IAAI,EAAE;gBACb,IAAI,GAAG,GAAGkB,WAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;;gBAExC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBACrC,MAAM,KAAK,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,CAAA;gBAChD,KAAK,CAAC,SAAS,GAAG,CAAC,CAAA;gBACnB,IAAI,EAAE,GAAG,EAAE,CAAA;gBACX,IAAI,MAAM,GAAW,IAAI,CAAA;gBACzB,IAAI,KAA6B,CAAA;gBACjC,QAAQ,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;oBAChC,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,GAAG,KAAK,CAAA;oBAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBACrC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBACvC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBACvC,MAAM,IAAI,GACR,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC7D,MAAM,IAAI,GACR,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;;oBAE7D,IACE,IAAI;wBACJ,EACE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;4BAC3B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;4BAC3B,IAAI,KAAK,QAAQ,CAClB,EACD;wBACA,SAAQ;qBACT;oBACD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;wBACrD,MAAM,GAAG,IAAI,CAAA;qBACd;oBACD,IAAI,QAAQ,EAAE;wBACZ,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;wBACrD,EAAE,IAAI,UAAU,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAA;qBACxC;yBAAM,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;wBACzB,EAAE,IAAI,OAAO,GAAG,IAAI,CAAA;qBACrB;iBACF;;gBAED,MAAM,IAAI,GAAG,EAAE;qBACZ,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC;qBACrC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;gBAEpC,IACE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;qBACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;yBACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EACzD;;;;;;oBAMA,IAAI,CAAC,CAAA;oBACL,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;;wBAEzC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,SAAS,EAAE;4BACnC,SAAS,CAAC,SAAS,EAAE,CAAA;yBACtB;wBACD,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;qBACzB;iBACF;;;;;gBAMD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;oBAC5D,EAAE,IAAI,qBAAqB,CAAA;iBAC5B;gBAED,IAAI,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;oBACnC,OAAO;;wBAEL,MAAM,EAAE,IAAI;wBACZ,QAAQ,EAAE,MAAM,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;qBAC7D,CAAA;iBACF;gBAED,OAAO;oBACL,MAAM;oBACN,QAAQ,EAAE,EAAE;iBACb,CAAA;aACF,CACF,CAAA;;YAGD,KAAK,CAAC,SAAS,CACb;;gBAEE,MAAM,EAAE,YAAY;aACrB,EACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE;gBAC3B,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE;oBAC5D,OAAO,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;iBACzC;gBACD,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE;oBAClB,OAAO,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;iBACzC;gBACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;gBAC5C,IAAI,QAAQ,EAAE;oBACZ,IAAI,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE;wBACtC,OAAO,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;qBACzC;oBACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,EAAE,CAAC,CAAA,EAAE;;wBAE9D,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;4BACvC,UAAU,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAA;yBAC1B;wBACD,OAAO,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;qBACzC;yBAAM;wBACL,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;;wBAEjE,OAAO;4BACL,IAAI,EAAEzB,aAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;4BAC5B,SAAS;yBACV,CAAA;qBACF;iBACF;qBAAM;oBACL,OAAO,CAAC,EAAE,CAAC,GAAGO,eAAa,CAAC,QAAQ,CAAC,CAAA;iBACtC;aACF,CACF,CAAA;;;;;;;YASD,KAAK,CAAC,SAAS,CACb;gBACE,MAAM,EAAE,uDAAuD;aAChE,EACD,mBAAmB,CACpB,CAAA;;YAGD,KAAK,CAAC,SAAS,CACb;gBACE,MAAM,EAAE,IAAI,MAAM,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;aAC3D,EACD,mBAAmB,CACpB,CAAA;;YAGD,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM;gBAC3D,IAAI;gBACJ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC,CAAA;;YAIH,KAAK,CAAC,SAAS,CACb;gBACE,MAAM,EAAE,IAAI;aACb,EACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE;;gBAE3B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;gBAC5C,IAAI,QAAQ,EAAE;oBACZ,IAAI,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE;wBACtC,OAAO,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;qBACzC;oBAED,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;oBAEjE,OAAO;wBACL,IAAI,EAAEP,aAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACtC,SAAS;qBACV,CAAA;iBACF;qBAAM;;oBAEL,OAAO,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;iBACzC;aACF,CACF,CAAA;;;;YAKD,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBACjD,IAAI,GAAG,GAAGA,aAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACnC,IAAI,GAAG,KAAK,KAAK;oBAAE,GAAG,GAAG,IAAI,CAAA;gBAE7B,IAAI,QAAQ,GAAGyB,WAAE,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;gBAC3C,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE;oBACnE,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAA;iBACtD;gBAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;oBACzC,OAAO,aAAa,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,GAAa,CAAC,CAAC,IAAI,CACjE,CAAC,QAAQ,MAAM;wBACb,MAAM,EAAE,GAAa;wBACrB,QAAQ;qBACT,CAAC,CACH,CAAA;iBACF;gBACD,OAAO;oBACL,MAAM,EAAE,GAAa;oBACrB,QAAQ;iBACT,CAAA;aACF,CAAC,CAAA;SACH;KACF,CAAA;AACH,CAAC;AAED,eAAe,aAAa,CAC1B,MAAc,EACd,QAAgB,EAChB,IAAY,EACZ,MAAc;;IAGd,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,MAAM,GAAG,CAAC,MAAMsI,iBAAS,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAA;KACpD;IAED,MAAM,IAAI,CAAA;IACV,MAAM,OAAO,GAAGrK,OAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACnD,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QACzD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACpC,IAAI,GAAG,KAAK,aAAa;YAAE,SAAQ;QACnC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,OAAO;YAAE,SAAQ;QACpD,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAChE,MAAM,EACN,KAAK,EACLa,eAAa,CAAC,QAAQ,CAAC,EACvB,KAAK,EACL,IAAI,CACL,CAAA;QACD,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACxB,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA;KACrC;IACD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AACrB,CAAC;SAEe,oBAAoB,CAClC,UAAkB,EAClB,KAAa;;IAGb,IAAI,CAACP,aAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAChC,OAAO,IAAI,CAAA;KACZ;;IAED,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACrD,OAAO,IAAI,CAAA;KACZ;;IAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAClE,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,KAAK,CAAA;AACd;;AC7cA;;;;;;;;;;SAUgB,wBAAwB,CAAC,MAAsB;IAC7D,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG;YAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;gBAChE,MAAM,eAAe,GACnB,4EAA4E,CAAA;gBAC9E,MAAM,cAAc,GAAG,IAAI;qBACxB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;qBACzD,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;gBAC7D,IAAI,CAAC,GAAuB,IAAI,CAAA;gBAChC,IAAI,KAA6B,CAAA;gBACjC,QAAQ,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG;oBACrD,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;oBAE1C,IAAI,GAAG,EAAE;wBACP,IAAI,CAAC,KAAK,CACR,4DAA4D,EAC5D,KAAK,CACN,CAAA;qBACF;oBAED,IAAI,CAAC,CAAC;wBAAE,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;;oBAGjC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;wBAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;wBAC9B,MAAM,eAAe,GAAI,GAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;wBACvD,IAAI,eAAe,CAAC,WAAW,CAAC,MAAM,EAAE;4BACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;;;;;4BAKjD,CAAC,CAAC,SAAS,CACT,KAAK,EACL,KAAK,GAAG,GAAG,CAAC,MAAM,EAClB,wCAAwC,IAAI,CAAC,SAAS,CACpD,OAAO,CACR,KAAK,MAAM,mBAAmB,CAChC,CAAA;4BACD,SAAQ;yBACT;qBACF;oBAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;oBAC/B,MAAM,IAAI,GAAGA,aAAI,CAAC,OAAO,CAACA,aAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;oBAChD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;oBACpD,CAAC,CAAC,SAAS,CACT,KAAK,EACL,KAAK,GAAG,GAAG,CAAC,MAAM,EAClB,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CACtD,CAAA;iBACF;gBACD,IAAI,CAAC,EAAE;oBACL,OAAO;wBACL,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;wBAClB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;qBACpE,CAAA;iBACF;aACF;YACD,OAAO,IAAI,CAAA;SACZ;KACF,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ;IAChC,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAA;IACzB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE;QACjC,KAAK,IAAI,CAAC,GAAG,gBAAgB,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7D,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE;gBACtB,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA;gBACvB,gBAAgB,GAAG,CAAC,CAAA;aACrB;SACF;QACD,OAAO,IAAI,IAAI,CAAA;KAChB;IACD,KAAK,IAAI,CAAC,GAAG,gBAAgB,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7D,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA;KACnC;IACD,OAAO,OAAO,CAAA;AAChB;;AChGA;;;SAGgB,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,MAAM,IAAI,CAAC,EAAE;YACX,IAAI;gBACF,OAAOyB,aAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;aAC1C;YAAC,OAAO,CAAC,EAAE;gBACV,OAAOA,aAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;aAChC;SACF;KACF,CAAA;AACH;;SCyNgB,mBAAmB,CAAC,GAAkB;IACpD,MAAM,QAAQ,GAAyB;QACrC,MAAM,EAAE,SAAS;QACjB,qBAAqB,EAAE,IAAI;QAC3B,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,QAAQ;QACnB,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG,CAAA;QACvB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,EAAE;QACjB,MAAM,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG,IAAG,KAAK,GAAG,SAAS;QACpC,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,KAAK;QACV,WAAW,EAAE,KAAK;QAClB,oBAAoB,EAAE,IAAI;;QAE1B,qBAAqB,EAAE,GAAG;QAC1B,KAAK,EAAE,IAAI;QACX,GAAG,GAAG;QACN,eAAe,EAAE;YACf,OAAO,EAAE,CAAC,cAAc,CAAC;YACzB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;YAC3B,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,eAAe;SACxB;QACD,wBAAwB,EAAE;YACxB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,CAAC,cAAc,CAAC;YACzB,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,wBAAwB;SACjC;KACF,CAAA;;IAGD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;;;QAGjC,QAAQ,CAAC,MAAM,GAAG;YAChB,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,UAAU;YACV,YAAY;SACb,CAAA;KACF;SAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;;QAEvE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAA;KAC3B;IAED,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;QACvB,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA;KACrC;;IAGD,IAAK,QAAQ,CAAC,MAAc,KAAK,OAAO,EAAE;QACxC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAA;KACxB;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;QAC5B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAA;KAC5B;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;SAEe,mBAAmB,CAAC,MAAsB;IAIxD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAA;IAC5B,OAAO;QACL,GAAG,EAAE;YACH,eAAe,CAAC,MAAM,CAAC;YACvByM,QAAc,CAAC,OAAO,CAAC,eAAe,CAAC;YACvC,aAAa,EAAE;YACfC,sBAAiB,CAAC,OAAO,CAAC,wBAAwB,CAAC;YACnD,wBAAwB,CAAC,MAAM,CAAC;YAChC,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO;kBAC5B,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAc;kBAC9D,EAAE,CAAC;SACR;QACD,IAAI,EAAE;YACJ,yBAAyB,CAAC,MAAM,CAAC;YACjC,kBAAkB,CAAC,MAAM,CAAC;YAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAC9D,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YACrD,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3D,mBAAmB,CAAC,MAAM,CAAC;YAC3B,kBAAkB,EAAE;SACrB;KACF,CAAA;AACH,CAAC;AAED;;;;AAIA,IAAI,kBAAkB,GAAG,CAAC,CAAA;AAC1B;AACA;AACA,MAAM,cAAc,GAAkB,EAAE,CAAA;AAExC;;;;AAIO,eAAe,KAAK,CACzB,eAA6B,EAAE;IAE/B,kBAAkB,EAAE,CAAA;IACpB,IAAI;QACF,OAAO,MAAM,OAAO,CAAC,YAAY,CAAC,CAAA;KACnC;YAAS;QACR,kBAAkB,EAAE,CAAA;QACpB,IAAI,kBAAkB,IAAI,CAAC,EAAE;YAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YACjE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAA;SAC1B;KACF;AACH,CAAC;AAED,eAAe,OAAO,CACpB,eAA6B,EAAE;;IAE/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAA;IAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA;IACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAA;IAE9B,MAAM,CAAC,MAAM,CAAC,IAAI,CAChBhP,MAAK,CAAC,IAAI,CACR,SAAS,OAAO,CAAC,mBAAmB,CAAC,CAAC,OAAO,IAAIA,MAAK,CAAC,KAAK,CAC1D,YAAY,GAAG,GAAG,aAAa,GAAG,EAAE,OAAO,MAAM,CAAC,IAAI,KAAK,CAC5D,EAAE,CACJ,CACF,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,CAAS,KAAKa,aAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC3D,MAAM,KAAK,GAAG,UAAU;UACpB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;UACzB,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ;cAC/B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;cACpB,CAAA,MAAA,OAAO,CAAC,aAAa,0CAAE,KAAK,KAAI,OAAO,CAAC,YAAY,CAAC,CAAA;IAEzD,IAAI,GAAG,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAC/D,MAAM,IAAI,KAAK,CACb,wEAAwE;YACtE,uCAAuC,CAC1C,CAAA;KACF;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;;IAGtC,MAAM,OAAO,IACX,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAC9D,CAAA;;IAGb,MAAM,YAAY,GAAG,MAAA,OAAO,CAAC,aAAa,0CAAE,QAAQ,CAAA;IACpD,IAAI,QAAQ,GAAG,YAAY,CAAA;IAC3B,IAAI,GAAG,EAAE;;QAEP,IAAI,YAAkC,CAAA;QACtC,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,MAAM,QAAQ,GAAGA,aAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;YAC7D,IAAI;gBACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACrByB,WAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CACR,CAAA;gBAC5B,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aAC3C;YAAC,OAAO,CAAC,EAAE,GAAE;SACf;QACD,IAAI,CAAC,YAAY,EAAE;;YAEjB,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;SAC7D;QACD,QAAQ,GAAG,eAAe,CACxB,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,EACxC,YAAY,CACb,CAAA;KACF;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAkB,CAAA;IACjD,MAAM,aAAa,GAAkB;QACnC,KAAK;QACL,uBAAuB,EAAE,GAAG;cACxB,iBAAiB;cACjB,UAAU;kBACV,QAAQ;kBACR,KAAK;QACT,GAAG,OAAO,CAAC,aAAa;QACxB,OAAO;QACP,QAAQ;QACR,MAAM,CAAC,OAAO,EAAE,IAAI;YAClB,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;SACvC;KACF,CAAA;IAED,MAAM,gBAAgB,GAAG,CAAC,CAAc;QACtC,IAAI,GAAG,GAAGtC,MAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;QACnE,IAAI,CAAC,CAAC,EAAE,EAAE;YACR,GAAG,IAAI,WAAWA,MAAK,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CACvD,EAAE,CAAA;SACJ;QACD,IAAI,CAAC,CAAC,KAAK,EAAE;YACX,GAAG,IAAI,IAAI,GAAGA,MAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;SACpC;QACD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;KACvC,CAAA;IAED,IAAI;QACF,MAAM,kBAAkB,GAAG,CAAC,SAAwB,EAAE;YACpD,OAAO;gBACL,GAAG,EAAE,MAAM;gBACX,MAAM,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI;gBAC1B,OAAO,EAAE,GAAG,GAAG,OAAO,GAAG,MAAM;gBAC/B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC,IAAI,GAAG,SAAS;gBAC9C,cAAc,EAAE,GAAG;sBACf,WAAW;sBACX,UAAU;0BACV,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;0BAClEa,aAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC;gBAC1D,cAAc,EAAE,UAAU;sBACtB,WAAW;sBACXA,aAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC;gBAC1D,cAAc,EAAE,UAAU;sBACtB,cAAc;sBACdA,aAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,qBAAqB,CAAC;;;gBAG7D,oBAAoB,EAAE,IAAI;gBAC1B,oBAAoB,EAAE,GAAG,IAAI,OAAO,KAAK,KAAK,QAAQ;gBACtD,YAAY,EACV,CAAC,GAAG;oBACJ,CAAC,UAAU;oBACX,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,MAAK,KAAK;oBACxB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,MAAK,MAAM;sBACrB,yBAAyB,CAAO,CAAC;sBACjC,SAAS;gBACf,GAAG,MAAM;aACV,CAAA;SACF,CAAA;;QAGD,MAAM,OAAO,GAAG,mBAAmB,CACjC,MAAA,OAAO,CAAC,aAAa,0CAAE,MAAM,EAC7B,UAAU,EACV,MAAM,CAAC,MAAM,CACd,CAAA;;QAGD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;YACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAACb,MAAK,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC,CAAA;YAEtE,MAAM,MAAM,GAAoB,EAAE,CAAA;YAClC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,KAAK,MAAM,cAAc,IAAI,OAAO,EAAE;oBACpC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAA;iBAChD;aACF;iBAAM;gBACL,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAA;aACzC;YAED,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAA;YACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC3B,GAAG,aAAa;gBAChB,MAAM;gBACN,KAAK,EAAE;oBACL,GAAG,cAAc;oBACjB,QAAQ,EAAE;wBACR,OAAO,EAAE;4BACP,oBAAoB;4BACpB,YAAY;4BACZ,IAAI,CAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,QAAQ,0CAAE,OAAO,KAAI,EAAE,CAAC;yBAC7C;wBACD,aAAa,EAAE,IAAI;wBACnB,sBAAsB,EAAE,IAAI;wBAC5B,GAAG,cAAc,CAAC,QAAQ;qBAC3B;iBACF;aACF,CAAC,CAAA;YAEF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK;gBACxB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;oBACjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAACA,MAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAA;oBAC1D,IAAI,OAAO,CAAC,KAAK,EAAE;wBACjB,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;qBACnD;iBACF;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;oBACtC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;oBACpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAACA,MAAK,CAAC,UAAU,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAA;iBACtE;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;oBACjC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;iBAC9B;aACF,CAAC,CAAA;;YAGF,OAAO,CAAC,KAAK,EAAE,CAAA;YAEf,OAAO,OAAO,CAAA;SACf;;QAGD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QACjD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE3B,MAAM,QAAQ,GAAG,CAAC,SAAwB,EAAE;YAC1C,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC,CACjD,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAA;SACF,CAAA;QAED,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;SACnD;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,MAAM,GAAG,GAAG,EAAE,CAAA;YACd,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,GAAG,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;aACjC;YACD,OAAO,GAAG,CAAA;SACX;aAAM;YACL,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;SAC/B;KACF;IAAC,OAAO,CAAC,EAAE;QACV,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,CAAC,CAAA;KACR;AACH,CAAC;AAED,SAAS,aAAa,CACpB,MAAc,EACd,WAA2B,EAC3B,MAAsB;IAEtB,IAAIsC,WAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACzB,IACE,WAAW,IAAI,IAAI;YACnB,CAAClB,eAAa,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,EACpD;;YAEA,MAAM,CAAC,MAAM,CAAC,IAAI,CAChBpB,MAAK,CAAC,MAAM,CACV,KAAKA,MAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAWA,MAAK,CAAC,KAAK,CAAC,GAAG,CAC9C,MAAM,CACP,wDAAwD;gBACvD,kCAAkC,CACrC,CACF,CAAA;SACF;aAAM,IAAI,WAAW,KAAK,KAAK,EAAE;YAChC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;SAC3B;KACF;IACD,IAAI,MAAM,CAAC,SAAS,IAAIsC,WAAE,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QACvD,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;KAClC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;IAEvE,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,GAAG,CAAC,IAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;AAC1D,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAsB;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAA;IACxC,OAAO,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE;QAC3B,IACE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC3B,CAAC,YAAY,CAAC,EAAE,CAAC;YACjB,qBAAqB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,EAC/C;YACA,OAAO,QAAQ,CAAA;SAChB;KACF,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,EAAU,EACV,aAA4B,EAC5B,KAA2B,EAC3B,cAAwB,EAAE;IAE1B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACjB,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAY,CAAA;KAChC;IACD,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;;QAE5B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACpB,OAAO,KAAK,CAAA;KACb;IACD,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAA;IAC7B,IAAI,CAAC,GAAG,EAAE;QACR,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACpB,OAAO,KAAK,CAAA;KACb;IAED,IAAI,GAAG,CAAC,OAAO,EAAE;QACf,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACnB,OAAO,IAAI,CAAA;KACZ;IACD,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,KACjD,qBAAqB,CACnB,QAAQ,EACR,aAAa,EACb,KAAK,EACL,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CACvB,CACF,CAAA;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;IAC7B,OAAO,cAAc,CAAA;AACvB,CAAC;SAEe,kBAAkB,CAChC,UAA0B,EAC1B,MAAoB,EACpB,IAAY;IAEZ,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,UAAU,EAAE;QAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;KACnC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;IAEpD,IAAI,CAAC,IAAI;QACP,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;IAEH,OAAO,GAAG,IAAI,IAAI,MAAM,KAAK,CAAA;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAoD,EACpD,UAAkC,EAClC,MAAc;IAEd,IAAI,UAAU,EAAE;QACd,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACnD,IACE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACpD,CAAC,UAAU,CAAC,IAAI,EAChB;YACA,MAAM,IAAI,KAAK,CACb,0DAA0D;gBACxD,0BAA0B,CAC7B,CAAA;SACF;QACD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;SAC7C;aAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAClC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;SACzD;aAAM,IAAI,UAAU,CAAC,OAAO,EAAE;;YAE7B,MAAM,CAAC,IAAI,CACTtC,MAAK,CAAC,MAAM,CACV,8CAA8C;gBAC5C,yDAAyD,CAC5D,CACF,CAAA;SACF;KACF;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAA;AACtE,MAAM,8BAA8B,GAAG;IACrC,wBAAwB;IACxB,qBAAqB;CACtB,CAAA;SAEe,eAAe,CAC7B,OAAsB,EACtB,IAAoB,EACpB,MAAsB;;IAEtB,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE;QACxC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;;QAEjC,IAAI,CAAC,QAAQ,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACvD,MAAM,IAAI,KAAK,CACb,4CAA4C,EAAE,WAAW,QAAQ,MAAM;gBACrE,oFAAoF;gBACpF,kEAAkE;gBAClE,kCAAkC,CACrC,CAAA;SACF;KACF;IAED,IACE,OAAO,CAAC,MAAM,KAAK,wCAAwC;QAC3D,8BAA8B,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC3E;QACA,OAAM;KACP;IAED,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAK,CAAC,EAAE;QAC9C,MAAM,UAAU,GAAG,MAAA,MAAM,CAAC,KAAK,CAAC,aAAa,0CAAE,MAAM,CAAA;QACrD,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;SAC1B;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,GAAGA,MAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,OAAO,CAAC,MAAM,GAAG,CAAC,IAAIA,MAAK,CAAC,MAAM,CAChE,OAAO,CAAC,OAAO,CAChB,EAAE,CACJ,CAAA;SACF;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,CAAA;SACd;KACF;AACH,CAAC;AAED,SAAS,eAAe,CACtB,YAAsB,EACtB,IAAgC;IAEhC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU;QAC/B,IAAI,uBAAuB,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE;YAC7C,OAAO,IAAI,CAAA;SACZ;QACD,IAAI,IAAI,EAAE;YACR,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;gBAC9B,OAAO,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;aACtC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;aACjD;iBAAM;gBACL,OAAO,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;aAC5B;SACF;KACF,EAAmB;AACtB,CAAC;AAED,SAAS,UAAU,CAAC,EAAU,EAAE,IAAqB;IACnD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,OAAO,EAAE,KAAK,IAAI,CAAA;KACnB;SAAM;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KACrB;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,CAAS;IACrC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;IACxC,OAAO;QACL,GAAG,CAAC;QACJ,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC;QACjC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;QACvB,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC;KAClC,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAwB;IAC3C,IAAI,CAAC,EAAE;QAAE,OAAM;IACf,OAAO,UAAqB,GAAG,IAAW;QACxC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,CAAC,CAAA;KACpC,CAAA;AACH;;;;;;;;;;;;;;;;;;;;;AC1xBA,IAAI,CAAC,GAAG,IAAI,CAAC;AACb,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACf,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACf,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACf,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACA,EAAc,GAAG,SAAS,GAAG,EAAE,OAAO,EAAE;AACxC,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B,EAAE,IAAI,IAAI,GAAG,OAAO,GAAG,CAAC;AACxB,EAAE,IAAI,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,IAAI,OAAOO,OAAK,CAAC,GAAG,CAAC,CAAC;AACtB,GAAG,MAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE;AACxD,IAAI,OAAO,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvD,GAAG;AACH,EAAE,MAAM,IAAI,KAAK;AACjB,IAAI,uDAAuD;AAC3D,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACzB,GAAG,CAAC;AACJ,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,OAAK,CAAC,GAAG,EAAE;AACpB,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,EAAE,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;AACxB,IAAI,OAAO;AACX,GAAG;AACH,EAAE,IAAI,KAAK,GAAG,uHAAuH,CAAC,IAAI;AAC1I,IAAI,GAAG;AACP,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,IAAI,OAAO;AACX,GAAG;AACH,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,EAAE,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;AAC9C,EAAE,QAAQ,IAAI;AACd,IAAI,KAAK,OAAO,CAAC;AACjB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,KAAK,CAAC;AACf,IAAI,KAAK,IAAI,CAAC;AACd,IAAI,KAAK,GAAG;AACZ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,KAAK,CAAC;AACf,IAAI,KAAK,GAAG;AACZ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,IAAI,KAAK,OAAO,CAAC;AACjB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,KAAK,CAAC;AACf,IAAI,KAAK,IAAI,CAAC;AACd,IAAI,KAAK,GAAG;AACZ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,IAAI,KAAK,SAAS,CAAC;AACnB,IAAI,KAAK,QAAQ,CAAC;AAClB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,KAAK,CAAC;AACf,IAAI,KAAK,GAAG;AACZ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,IAAI,KAAK,SAAS,CAAC;AACnB,IAAI,KAAK,QAAQ,CAAC;AAClB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,KAAK,CAAC;AACf,IAAI,KAAK,GAAG;AACZ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,IAAI,KAAK,cAAc,CAAC;AACxB,IAAI,KAAK,aAAa,CAAC;AACvB,IAAI,KAAK,OAAO,CAAC;AACjB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,IAAI;AACb,MAAM,OAAO,CAAC,CAAC;AACf,IAAI;AACJ,MAAM,OAAO,SAAS,CAAC;AACvB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,EAAE,EAAE;AACtB,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;AACf,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACpC,GAAG;AACH,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;AACf,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACpC,GAAG;AACH,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;AACf,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACpC,GAAG;AACH,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;AACf,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACpC,GAAG;AACH,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;AACnB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,EAAE,EAAE;AACrB,EAAE,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;AAC7B,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;AACzB,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC;AAC3B,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC;AAC3B,IAAI,EAAE,GAAG,KAAK,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE;AAC7B,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;AACd,IAAI,OAAO;AACX,GAAG;AACH,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE;AACpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;AAC3C,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;AAC9C;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,GAAG,iBAAiB,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;AACpF,iBAAiB,MAAM,CAAC;AACxB,kBAAkB,OAAO,CAAC;AAC1B,iBAAiB,MAAM,CAAC;AACxB,kBAAkB,OAAO,CAAC;AAC1B,mBAAmBhD,EAAa,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA,gBAAgB,EAAE,CAAC;AACnB,gBAAgB,EAAE,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,EAAE,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,SAAS,EAAE;AAChC,EAAE,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB;AACA,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE;AACvB,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAI,IAAI,IAAI,CAAC,CAAC;AACd,GAAG;AACH;AACA,EAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,SAAS,EAAE;AAChC;AACA,EAAE,SAAS,KAAK,GAAG;AACnB;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO;AAC/B;AACA,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC;AACrB;AACA;AACA,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AAC3B,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACzB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,QAAQ,GAAG,IAAI,CAAC;AACpB;AACA;AACA,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC;AACA,IAAI,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE;AACrC;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,KAAK;AACL;AACA;AACA,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;AAClB,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,KAAK,EAAE,MAAM,EAAE;AACvE;AACA,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE,OAAO,KAAK,CAAC;AACvC,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjD,MAAM,IAAI,UAAU,KAAK,OAAO,SAAS,EAAE;AAC3C,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAQ,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC1C;AACA;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9B,QAAQ,KAAK,EAAE,CAAC;AAChB,OAAO;AACP,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxC;AACA,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtE,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC7C,EAAE,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;AACxC,EAAE,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AACvC;AACA;AACA,EAAE,IAAI,UAAU,KAAK,OAAO,OAAO,CAAC,IAAI,EAAE;AAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,GAAG;AACH;AACA,EAAE,OAAO,KAAK,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,UAAU,EAAE;AAC5B,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3B;AACA,EAAE,gBAAgB,EAAE,CAAC;AACrB,EAAE,gBAAgB,EAAE,CAAC;AACrB;AACA,EAAE,IAAI,KAAK,GAAG,CAAC,OAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACjF,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAChC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS;AAC5B,IAAI,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAChD,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC/B,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACvE,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7D,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,GAAG;AACnB,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACrB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,IAAI,EAAE;AACvB,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;AACb,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACxD,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrC,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,GAAG;AACH,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACxD,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrC,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,KAAK,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,GAAG,EAAE;AACrB,EAAE,IAAI,GAAG,YAAY,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC;AAC5D,EAAE,OAAO,GAAG,CAAC;AACb;;;;;;;;;;ACnMA,OAAO,GAAG,iBAAiBA,eAAkB,CAAC;AAC9C,cAAc,GAAG,CAAC;AAClB,qBAAqB,UAAU,CAAC;AAChC,eAAe,IAAI,CAAC;AACpB,eAAe,IAAI,CAAC;AACpB,oBAAoB,SAAS,CAAC;AAC9B,kBAAkB,WAAW,IAAI,OAAO,MAAM;AAC9C,kBAAkB,WAAW,IAAI,OAAO,MAAM,CAAC,OAAO;AACtD,oBAAoB,MAAM,CAAC,OAAO,CAAC,KAAK;AACxC,oBAAoB,YAAY,EAAE,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,EAAE,eAAe;AACjB,EAAE,aAAa;AACf,EAAE,WAAW;AACb,EAAE,YAAY;AACd,EAAE,YAAY;AACd,EAAE,SAAS;AACX,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,GAAG;AACrB;AACA;AACA;AACA,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7F,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,gBAAgB;AAC1J;AACA,KAAK,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACvI;AACA;AACA,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AAC3J;AACA,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC/H,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE;AACnC,EAAE,IAAI;AACN,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7B,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,OAAO,8BAA8B,GAAG,GAAG,CAAC,OAAO,CAAC;AACxD,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,IAAI,EAAE;AAC1B,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC;AACA,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE;AAClC,MAAM,IAAI,CAAC,SAAS;AACpB,OAAO,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC;AAC/B,MAAM,IAAI,CAAC,CAAC,CAAC;AACb,OAAO,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC;AAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC;AACA,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO;AACzB;AACA,EAAE,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAC;AACxC;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,KAAK,EAAE;AACjD,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,OAAO;AAC/B,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;AACxB;AACA;AACA,MAAM,KAAK,GAAG,KAAK,CAAC;AACpB,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,GAAG;AACf;AACA;AACA,EAAE,OAAO,QAAQ,KAAK,OAAO,OAAO;AACpC,OAAO,OAAO,CAAC,GAAG;AAClB,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACtE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,UAAU,EAAE;AAC1B,EAAE,IAAI;AACN,IAAI,IAAI,IAAI,IAAI,UAAU,EAAE;AAC5B,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1C,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC;AACzC,KAAK;AACL,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,GAAG;AAChB,EAAE,IAAI,CAAC,CAAC;AACR,EAAE,IAAI;AACN,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AAC9B,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE;AACf;AACA;AACA,EAAE,IAAI,CAAC,CAAC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,KAAK,IAAI,OAAO,EAAE;AAChE,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,GAAG;AACH;AACA,EAAE,OAAO,CAAC,CAAC;AACX,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,GAAG;AACxB,EAAE,IAAI;AACN,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC;AAC/B,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;AAChB;;;;;;;;;;ACpLA,IAAI,GAAG,GAAGA,mBAAc,CAAC;AACzB,IAAI,IAAI,GAAGU,qBAAe,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,GAAG,iBAAiBO,eAAkB,CAAC;AAC9C,eAAe,IAAI,CAAC;AACpB,cAAc,GAAG,CAAC;AAClB,qBAAqB,UAAU,CAAC;AAChC,eAAe,IAAI,CAAC;AACpB,eAAe,IAAI,CAAC;AACpB,oBAAoB,SAAS,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE;AACrE,EAAE,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE;AAC9B;AACA,EAAE,IAAI,IAAI,GAAG,GAAG;AAChB,KAAK,SAAS,CAAC,CAAC,CAAC;AACjB,KAAK,WAAW,EAAE;AAClB,KAAK,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACtE;AACA;AACA,EAAE,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,EAAE,IAAI,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;AACvD,OAAO,IAAI,4BAA4B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC;AAC/D,OAAO,IAAI,GAAG,KAAK,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;AACtC,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB;AACA,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAClB,EAAE,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AACjD;AACA,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;AAC1B,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,yKAAyK,CAAC,GAAE;AAC3M,CAAC;AACD;AACA,IAAI,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM;AACtC,aAAa,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM;AACtC,aAAa,yBAAyB,CAAC,EAAE,CAAC,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,GAAG;AACrB,EAAE,OAAO,QAAQ,IAAI,OAAO,CAAC,WAAW;AACxC,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;AACzC,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACrB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE;AACnC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3C,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;AAC1C,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE;AACnC,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE;AACvB,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE;AACnC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3C,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,IAAI,EAAE;AAC1B,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5B,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC;AACA,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,IAAI,IAAI,MAAM,GAAG,YAAY,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,WAAW,CAAC;AACrE;AACA,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;AAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;AACjF,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACtC,QAAQ,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,GAAG;AACf,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,UAAU,EAAE;AAC1B,EAAE,IAAI,IAAI,IAAI,UAAU,EAAE;AAC1B;AACA;AACA,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,GAAG,MAAM;AACT,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC;AACnC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,GAAG;AAChB,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,yBAAyB,EAAE,EAAE,EAAE;AACxC,EAAE,IAAI,MAAM,CAAC;AACb,EAAE,IAAI,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7C;AACA;AACA;AACA,EAAE,QAAQ,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;AACtC,IAAI,KAAK,KAAK;AACd,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACvC,MAAM,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B;AACA;AACA;AACA,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AAClD,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,OAAO;AACP,MAAM,MAAM;AACZ;AACA,IAAI,KAAK,MAAM;AACf,MAAM,IAAI,EAAE,GAAGuB,WAAa,CAAC;AAC7B,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAChE,MAAM,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAC1B,MAAM,MAAM;AACZ;AACA,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,KAAK;AACd,MAAM,IAAI,GAAG,GAAGwF,mBAAc,CAAC;AAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;AAC9B,QAAQ,EAAE,EAAE,EAAE;AACd,QAAQ,QAAQ,EAAE,KAAK;AACvB,QAAQ,QAAQ,EAAE,IAAI;AACtB,OAAO,CAAC,CAAC;AACT;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC9B,MAAM,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,MAAM,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;AAC5B;AACA;AACA;AACA,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AAClD,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,OAAO;AACP,MAAM,MAAM;AACZ;AACA,IAAI;AACJ;AACA,MAAM,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AACjE,GAAG;AACH;AACA;AACA,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;AACjB;AACA,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,EAAE,KAAK,EAAE;AACtB,EAAE,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;AACzB;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC9C,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;;;;;;;;AClPtB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AACnE,EAAE3E,WAAc,GAAGrD,eAAuB,CAAC;AAC3C,CAAC,MAAM;AACP,EAAEqD,WAAc,GAAG3C,YAAoB,CAAC;AACxC;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;IACA,SAAc,GAAGgR,YAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG,2GAA0G;AACpI;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+BAA+B,GAAG,2EAA0E;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gCAAgC,GAAG,aAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,WAAS,EAAE,GAAG,EAAE;AACzB,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC;AACpB,KAAK,OAAO,CAAC,+BAA+B,EAAE,gCAAgC,CAAC;AAC/E,KAAK,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC;AAC5C;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG,SAAS,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;IACA,YAAc,GAAGC,YAAU,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAU,CAAC,MAAM,EAAE;AAC5B,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC;AACxB,EAAE,IAAI,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC;AACA,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,IAAI,MAAM,CAAC;AACb,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAChB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;AACpB;AACA,EAAE,KAAK,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACzD,IAAI,QAAQ,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AACjC,MAAM,KAAK,EAAE;AACb,QAAQ,MAAM,GAAG,QAAQ,CAAC;AAC1B,QAAQ,MAAM;AACd,MAAM,KAAK,EAAE;AACb,QAAQ,MAAM,GAAG,OAAO,CAAC;AACzB,QAAQ,MAAM;AACd,MAAM,KAAK,EAAE;AACb,QAAQ,MAAM,GAAG,OAAO,CAAC;AACzB,QAAQ,MAAM;AACd,MAAM,KAAK,EAAE;AACb,QAAQ,MAAM,GAAG,MAAM,CAAC;AACxB,QAAQ,MAAM;AACd,MAAM,KAAK,EAAE;AACb,QAAQ,MAAM,GAAG,MAAM,CAAC;AACxB,QAAQ,MAAM;AACd,MAAM;AACN,QAAQ,SAAS;AACjB,KAAK;AACL;AACA,IAAI,IAAI,SAAS,KAAK,KAAK,EAAE;AAC7B,MAAM,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC9C,KAAK;AACL;AACA,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AAC1B,IAAI,IAAI,IAAI,MAAM,CAAC;AACnB,GAAG;AACH;AACA,EAAE,OAAO,SAAS,KAAK,KAAK;AAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5C,MAAM,IAAI,CAAC;AACX;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;IACA,OAAc,GAAGC,QAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,OAAK,CAAC,KAAK,EAAE,IAAI,EAAE;AAC5B,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3B,IAAI,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC;AACzE;AACA,EAAE,IAAI,QAAQ,GAAG,GAAE;AACnB;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,EAAC;AACtB;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;AAC7C,MAAM,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC;AACtE;AACA,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,EAAC;AACnB;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,MAAM,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAC;AACxB,MAAM,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAC;AACxC;AACA;AACA,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAC;AACtB;AACA,MAAM,QAAQ,CAAC,IAAI,CAAC;AACpB,QAAQ,EAAE,EAAE,EAAE;AACd,QAAQ,KAAK,EAAE,KAAK;AACpB,QAAQ,EAAE,EAAE,EAAE;AACd,OAAO,EAAC;AACR,KAAK;AACL,GAAG;AACH;AACA,EAAE,SAAS,QAAQ,GAAG;AACtB,IAAI,OAAO,GAAE;AACb,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAC;AAC/B,GAAG;AACH;AACA,EAAE,SAAS,OAAO,GAAG;AACrB,IAAI,IAAI,EAAC;AACT,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAC;AACrB,MAAM,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAC;AACxC,KAAK;AACL,GAAG;AACH;AACA,EAAE,SAAS,KAAK,CAAC,EAAE,EAAE;AACrB,IAAI,IAAI,GAAG,GAAE;AACb,GAAG;AACH;AACA,EAAE,KAAK,CAAC,MAAM,GAAG,QAAO;AACxB;AACA,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE;AAC/B,EAAE,OAAO,SAAS,OAAO,CAAC,IAAI,EAAE;AAChC,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAC;AAC1C,IAAI,IAAI,EAAE,GAAG,KAAI;AACjB,IAAI,IAAI,GAAG,GAAG,KAAK,KAAK,OAAO;AAC/B,QAAQ,IAAI;AACZ,QAAQ,KAAI;AACZ;AACA;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAC;AAC5B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAC;AAC9B,GAAG;AACH;;;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACAC,oBAAc,GAAGC,aAAU;+BACF,GAAGC,aAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,GAAG/R,QAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIgS,OAAK,GAAG,OAAO,YAAY,KAAK,UAAU;AAC9C,IAAI,YAAY;AAChB,IAAI,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,EAAC,GAAE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASF,YAAU,CAAC,GAAG,EAAE,QAAQ,EAAE;AACnC,EAAE,IAAIC,YAAU,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE;AACjC,IAAIC,OAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAC;AAC9B,IAAI,OAAO,GAAG;AACd,GAAG;AACH;AACA;AACA,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAC;AAC/B;AACA,EAAE,OAAO,GAAG;AACZ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,YAAU,CAAC,GAAG,EAAE;AACzB,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,OAAM;AACzB;AACA,EAAE,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE;AACzC;AACA,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChE,GAAG;AACH;AACA,EAAE,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE;AACzC;AACA,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjG,GAAG;AACH;AACA;AACA,EAAE,OAAO,SAAS;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE;AAC/C,EAAE,IAAI,MAAK;AACX,EAAE,IAAI,SAAQ;AACd,EAAE,IAAI,QAAQ,GAAG,MAAK;AACtB;AACA,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;AAC3B,IAAI,KAAK,CAAC,MAAM,GAAE;AAClB,IAAI,QAAQ,CAAC,MAAM,GAAE;AACrB;AACA,IAAI,QAAQ,GAAG,KAAI;AACnB,IAAI,QAAQ,CAAC,KAAK,EAAC;AACnB,GAAG;AACH;AACA;AACA,EAAE,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAC;AAC9D;AACA,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE;AAC5B;AACA,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAC;AAC1C;AACA,IAAI,IAAI,QAAQ,EAAE,MAAM;AACxB,IAAI,IAAI,KAAK,KAAK,QAAQ,EAAE,MAAM;AAClC;AACA;AACA,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAC;AAC5D,GAAG;AACH;AACA,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE;AAClB;AACA,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAC;AACxB,IAAI,MAAM;AACV,GAAG;AACH;AACA;AACA,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAC;AAC5B;AACA,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;AAChC;AACA,IAAI,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAC;AACpC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE;AACvC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,aAAY;AACjC;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,IAAI,QAAQ,GAAG,GAAG,CAAC,YAAY,GAAG,cAAc,CAAC,GAAG,EAAC;AACrD,IAAI,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAC;AACzC,GAAG;AACH;AACA,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC/B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE;AAC7B,EAAE,SAAS,QAAQ,CAAC,GAAG,EAAE;AACzB,IAAI,IAAI,GAAG,CAAC,YAAY,KAAK,QAAQ,EAAE,GAAG,CAAC,YAAY,GAAG,KAAI;AAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;AAC/B;AACA,IAAI,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC9B,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAI;AACzB;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAC;AACxB,KAAK;AACL,GAAG;AACH;AACA,EAAE,QAAQ,CAAC,KAAK,GAAG,GAAE;AACrB;AACA,EAAE,OAAO,QAAQ;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE;AAC1C,EAAE,IAAI,YAAY,GAAG,GAAG,CAAC,aAAY;AACrC;AACA,EAAE,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,MAAM;AAChD;AACA;AACA,EAAE,GAAG,CAAC,YAAY,GAAG,SAAS,aAAa,CAAC,MAAM,EAAE;AACpD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAC;AACnC,IAAI,QAAQ,CAAC,MAAM,EAAC;AACpB,IAAG;AACH;;;;;;;;;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIE,KAAG,GAAGjS,sBAAc;AACxB,IAAIgD,OAAK,GAAGiP,KAAG,CAAC,MAAK;AACrB,IAAI,GAAG,GAAGA,KAAG,CAAC,IAAG;AACjB;AACA;AACA;AACA;AACA;AACA;AACAC,kBAAc,GAAG,SAAQ;2BACF,GAAG,YAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,EAAE,GAAG,EAAE;AACxB,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,IAAG;AACnB;AACA,EAAE,IAAI,GAAG,KAAK,SAAS,EAAE;AACzB;AACA,IAAI,OAAO,SAAS;AACpB,GAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,WAAU;AAC7B;AACA,EAAE,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;AAC1B;AACA,IAAI,OAAO,MAAM;AACjB,GAAG;AACH;AACA;AACA,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,EAAC;AACzB,EAAE,MAAM,CAAC,IAAI,GAAG,IAAG;AACnB;AACA,EAAE,QAAQ,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC;AAClC,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,EAAE,GAAG,EAAE;AAC3B,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,YAAW;AAC3B;AACA,EAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC/B;AACA,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC;AACxB,GAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,mBAAkB;AACrC;AACA,EAAE,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;AAC1B;AACA,IAAI,OAAO,MAAM;AACjB,GAAG;AACH;AACA;AACA,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,EAAC;AACzB,EAAE,MAAM,CAAC,IAAI,GAAG,IAAG;AACnB;AACA,EAAE,QAAQ,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC;AAC1C,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,EAAE,GAAG,EAAE;AACzB,EAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU;AACrE,IAAI,OAAOlP,OAAK,CAAC,GAAG,CAAC;AACrB,GAAG;AACH;AACA,EAAE,IAAI,QAAQ,GAAG,IAAG;AACpB,EAAE,IAAI,KAAK,GAAG,KAAI;AAClB,EAAE,IAAI,MAAM,GAAG,KAAI;AACnB;AACA;AACA;AACA;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,IAAI,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7B,MAAM,KAAK,IAAI;AACf,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;AAC7B,UAAU,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAC;AACxC,UAAU,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAC;AACtC,UAAU,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAC;AACnC,SAAS;AACT,QAAQ,KAAK;AACb,MAAM,KAAK,IAAI,CAAC;AAChB,MAAM,KAAK,IAAI,CAAC;AAChB,MAAM,KAAK,IAAI,CAAC;AAChB,MAAM,KAAK,IAAI,CAAC;AAChB,MAAM,KAAK,IAAI,CAAC;AAChB,MAAM,KAAK,IAAI,CAAC;AAChB,MAAM,KAAK,IAAI,CAAC;AAChB,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAOA,OAAK,CAAC,GAAG,CAAC;AACzB,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,GAAG,GAAG,GAAG,KAAK,SAAS;AAC7B,MAAM,IAAI,GAAG,EAAE;AACf,MAAM,GAAE;AACR;AACA,EAAE,GAAG,CAAC,IAAI,GAAG,IAAG;AAChB,EAAE,GAAG,CAAC,IAAI,GAAG,IAAG;AAChB,EAAE,GAAG,CAAC,QAAQ,GAAG,SAAQ;AACzB;AACA,EAAE,IAAI,MAAM,KAAK,IAAI,EAAE;AACvB,IAAI,GAAG,CAAC,KAAK,GAAG,MAAK;AACrB,IAAI,GAAG,CAAC,MAAM,GAAG,OAAM;AACvB,GAAG;AACH;AACA,EAAE,OAAO,GAAG;AACZ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE;AAChC,EAAE,OAAO,OAAO,SAAS,KAAK,QAAQ;AACtC,IAAI,SAAS,KAAK,IAAI;AACtB,KAAK,GAAG,KAAK,SAAS,IAAI,SAAS,YAAY,GAAG,CAAC;AACnD,IAAI,SAAS,CAAC,IAAI,KAAK,GAAG;AAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,GAAGhD,aAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;IACAmS,UAAc,GAAG,OAAM;AACvB;AACA;AACA,MAAM,CAAC,YAAY,GAAG,MAAK;AAC3B;AACA;AACA,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAC;AACjD;AACA;AACA,MAAM,CAAC,QAAQ,GAAG;AAClB,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAC;AACD;AACA;AACA,MAAM,CAAC,KAAK,GAAG;AACf,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAC;AACD;AACA;AACA,MAAM,CAAC,KAAK,GAAG;AACf,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/C,EAAE,IAAI,GAAG,GAAG,GAAE;AACd;AACA,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE;AACzD,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,EAAC;AAC7B,IAAI,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,EAAC;AAC7B;AACA;AACA,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAO;AAC9B,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAM;AAC9B,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,OAAM;AAC5C;AACA;AACA,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAC;AACpB,GAAG,EAAC;AACJ;AACA,EAAE,OAAO,GAAG;AACZ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,EAAE,IAAI,EAAE;AACvB,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACtE,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC;AAC1D,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAC;AAC5B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACjB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,CAAC;AAChE,IAAI,OAAO,CAAC;AACZ,GAAG;AACH;AACA,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAC;AAChC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,IAAI,GAAG,GAAG,CAAC;AACnE,EAAE,OAAO,CAAC;AACV;;;;;;;ACzGA;AACA;AACA;AACA;AACA;AACA;IACA,QAAc,GAAGC,SAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,MAAM,EAAE;AACtC,EAAE,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAC;AAC1C;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;AACxC,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,QAAM,CAAC,MAAM,EAAE;AACxB,EAAE,IAAI,CAAC,MAAM,EAAE;AACf,IAAI,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC;AACtD,GAAG;AACH;AACA,EAAE,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;AAC3C;AACA,IAAI,MAAM,CAAC,MAAM,GAAE;AACnB,IAAI,MAAM;AACV,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE;AACrC,IAAI,MAAM;AACV,GAAG;AACH;AACA,EAAE,IAAI,SAAQ;AACd,EAAE,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAC;AAC3C;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,EAAC;AAC3B;AACA,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;AACpE,MAAM,QAAQ;AACd,KAAK;AACL;AACA;AACA,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAC;AACzB,GAAG;AACH;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI3N,OAAK,GAAGzE,WAAgB,CAAC,cAAc,EAAC;AAC5C,IAAI,SAAS,GAAGU,UAAoB;AACpC,IAAI,UAAU,GAAGO,aAAsB;AACvC,IAAI,UAAU,GAAGuB,qBAAsB;AACvC,IAAIoD,UAAQ,GAAGoC,mBAAmB;AAClC,IAAI,QAAQ,GAAGc,WAAmB;AAClC,IAAI,MAAM,GAAGC,SAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG,WAAU;AACpC,IAAI,cAAc,GAAG,MAAK;AAC1B;AACA;AACA,IAAIiJ,OAAK,GAAG,OAAO,YAAY,KAAK,UAAU;AAC9C,IAAI,YAAY;AAChB,IAAI,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,EAAC,GAAE;AACpE,IAAI,UAAU,GAAG,UAAU,CAAC,WAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,EAAE,OAAO,EAAE;AACtC,EAAE,IAAI,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;AAChC,KAAK,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;AACpC,KAAK,OAAO,CAAC,mBAAmB,EAAE,SAAS,EAAC;AAC5C;AACA,EAAE,OAAO,mBAAmB;AAC5B,IAAI,oBAAoB;AACxB,IAAI,UAAU;AACd,IAAI,0BAA0B;AAC9B,IAAI,wBAAwB;AAC5B,IAAI,WAAW;AACf,IAAI,UAAU;AACd,IAAI,OAAO,GAAG,IAAI,GAAG,UAAU;AAC/B,IAAI,WAAW;AACf,IAAI,WAAW;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;IACA,cAAc,GAAGK,eAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,cAAY,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AAC1C,EAAE,IAAI,IAAI,GAAG,OAAO,IAAI,GAAE;AAC1B;AACA;AACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,cAAa;AAC7D;AACA;AACA,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,QAAO;AAC5B;AACA,EAAE,OAAO,UAAU,GAAG,EAAE;AACxB,IAAI,IAAI,QAAO;AACf,IAAI,IAAI,IAAG;AACX,IAAI,IAAI,OAAM;AACd;AACA;AACA,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;AAClC,MAAM5N,OAAK,CAAC,+BAA+B,EAAC;AAC5C,MAAM,MAAM;AACZ,KAAK;AACL;AACA;AACA,IAAI,IAAI,GAAG,EAAE;AACb;AACA,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAC;AACtC;AACA,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE;AAChC;AACA,QAAQ,MAAM,GAAG,qBAAqB,CAAC,GAAG,EAAC;AAC3C,OAAO,MAAM;AACb;AACA,QAAQ,OAAO,GAAG,eAAe,CAAC,GAAG,EAAC;AACtC,OAAO;AACP;AACA;AACA,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAC;AAC7C,KAAK,MAAM;AACX;AACA,MAAM,MAAM,GAAG,IAAG;AAClB,MAAM,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,EAAC;AAC1E,KAAK;AACL;AACA,IAAIA,OAAK,CAAC,YAAY,EAAE,MAAM,EAAC;AAC/B;AACA;AACA,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE;AACxB,MAAMuN,OAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAC;AACnC,KAAK;AACL;AACA;AACA,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;AAC1B,MAAMvN,OAAK,CAAC,8BAA8B,EAAE,MAAM,EAAC;AACnD,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,GAAE;AAC1B,MAAM,MAAM;AACZ,KAAK;AACL;AACA;AACA,IAAI6N,MAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAC;AACxC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,EAAE,GAAG,EAAE;AAC/B,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE;AACvD,IAAI,OAAO,SAAS;AACpB,GAAG;AACH;AACA,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAC;AACnC,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAC;AACrC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;AACrB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAC;AACnC,GAAG;AACH;AACA,EAAE,OAAO,OAAO;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC5C,EAAE,IAAI,IAAG;AACT;AACA,EAAE,IAAI,GAAG,KAAK,YAAY,EAAE;AAC5B;AACA,IAAI,GAAG,GAAG,GAAG,CAAC,MAAK;AACnB;AACA;AACA,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE;AACpD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,GAAE;AAC1B,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;AAChC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,EAAE,GAAG,EAAE;AAClC;AACA,EAAE,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;AAC/E,IAAI,OAAO,GAAG,CAAC,MAAM;AACrB,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE;AAC3F,IAAI,OAAO,GAAG,CAAC,UAAU;AACzB,GAAG;AACH;AACA,EAAE,OAAO,SAAS;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,EAAE,GAAG,EAAE;AAC/B,EAAE,IAAI;AACN,IAAI,OAAO1M,UAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ;AAC1C,GAAG,CAAC,OAAO,CAAC,EAAE;AACd,IAAI,OAAO,UAAU;AACrB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,EAAE,GAAG,EAAE;AACrC,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,WAAU;AAC7B;AACA;AACA,EAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE;AAClE,IAAI,MAAM,GAAG,IAAG;AAChB,GAAG;AACH;AACA,EAAE,OAAO,MAAM;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,EAAE,GAAG,EAAE;AAC3B,EAAE,OAAO,OAAO,GAAG,CAAC,WAAW,KAAK,SAAS;AAC7C,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1B,MAAM,GAAG,CAAC,WAAW;AACrB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS0M,MAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;AACnD,EAAE,SAAS,KAAK,IAAI;AACpB;AACA,IAAI,IAAI,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAC;AAC1C;AACA;AACA,IAAI,GAAG,CAAC,UAAU,GAAG,OAAM;AAC3B,IAAI,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,EAAC;AACxC;AACA;AACA,IAAI,UAAU,CAAC,GAAG,EAAE,OAAO,EAAC;AAC5B;AACA;AACA,IAAI,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,oBAAoB,EAAC;AAClE,IAAI,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,EAAC;AACtD;AACA;AACA,IAAI,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,0BAA0B,EAAC;AAC7D,IAAI,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAC;AACpE;AACA,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE;AAC/B,MAAM,GAAG,CAAC,GAAG,GAAE;AACf,MAAM,MAAM;AACZ,KAAK;AACL;AACA,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAC;AACzB,GAAG;AACH;AACA,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;AACvB,IAAI,KAAK,GAAE;AACX,IAAI,MAAM;AACV,GAAG;AACH;AACA;AACA,EAAE,MAAM,CAAC,GAAG,EAAC;AACb;AACA;AACA,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,EAAC;AACxB,EAAE,GAAG,CAAC,MAAM,GAAE;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE;AACnC,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI,MAAM;AACV,GAAG;AACH;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAC;AACjC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;AACrB,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAC;AACpC,GAAG;AACH;;;;;;;;;;;;;;;;;;;;AC3TU,iBAAiB,SAAS,CAAC,EAAE,CAAC,CAAC;AACzC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACd,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE;AACvB,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACtB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,CAAC,CAAC;AACX,CAAC;;;;;;;;;;ACbD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI7N,OAAK,GAAGzE,WAAgB,CAAC,oBAAoB,CAAC,CAAC;AACnD,IAAIuS,cAAY,GAAG7R,qBAAiB,CAAC,YAAY,CAAC;AAClD,IAAI,YAAY,GAAGO,cAAuB,CAAC;AAC3C,IAAIuR,MAAI,GAAGhQ,qBAAe,CAAC;AAC3B,IAAI,KAAK,GAAGwF,kBAAsB,CAAC;AACnC,IAAI,QAAQ,GAAGc,kBAAmB,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;IACA,OAAc,GAAG2J,cAAY,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,IAAIvR,KAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAChD,IAAI,KAAK,GAAG,EAAE,CAAC;AACf;AACA;AACA,IAAI,KAAK,GAAG,OAAO,YAAY,KAAK,UAAU;AAC9C,IAAI,YAAY;AAChB,IAAI,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,EAAC,GAAE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASuR,cAAY,GAAG;AACxB,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE;AAC7D,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACpB,EAAE,KAAK,CAAC,GAAG,EAAEF,cAAY,CAAC,SAAS,CAAC,CAAC;AACrC,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;AAClB,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;AACjB,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE;AACpC,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;AAClB,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC;AACnB;AACA;AACA,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACjC,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAI,IAAI,GAAG,GAAG,CAAC;AACf,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;AAC3C,IAAI,IAAI,MAAM,GAAG,MAAM,CAAC;AACxB,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AACxB,IAAI,MAAM,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AACvC,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACpC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA,EAAE,IAAI,MAAM,YAAYC,MAAI,CAAC,MAAM,EAAE;AACrC,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,GAAG;AACH;AACA;AACA,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;AACrC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7B,GAAG;AACH;AACA;AACA,EAAE/N,OAAK,CAAC,WAAW,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;AAC9D,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AACnD;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC9C,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,IAAI,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC9C,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;AACnB,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC;AACzB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB;AACA;AACA,EAAE,IAAI,IAAI,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;AAC3C,IAAI,GAAG,EAAEvD,KAAG;AACZ,IAAI,OAAO,EAAE,QAAQ;AACrB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC;AAC/C;AACA,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE;AACrB,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,KAAK;AACL;AACA,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,MAAM,GAAG,CAAC,GAAG,GAAG,SAAS,GAAG,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACvE,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,KAAK;AACL;AACA;AACA,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/B;AACA;AACA,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,MAAM,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACvB,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC;AAC7C,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAC5B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,EAAE;AAC5E,MAAM,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7D,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;AACrC,MAAM,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,KAAK;AACL;AACA;AACA,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,EAAE;AAC7C,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,MAAM,GAAG,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9E;AACA;AACA,MAAM,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC5C,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAChC,QAAQ,UAAU,GAAG,IAAI,CAAC;AAC1B,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACnD,GAAG;AACH;AACA,EAAE,IAAI,EAAE,CAAC;AACT,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;AACjC,EAAE,IAAI,MAAM,GAAGsR,MAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACvC,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAClD,EAAE,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAC5B,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC;AAClB,EAAE,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9B;AACA,EAAE/N,OAAK,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,IAAI,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;AAC5E;AACA,EAAE,IAAI;AACN,IAAI,IAAI,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE;AACjC;AACA,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAClC,MAAM,OAAO;AACb,KAAK,MAAM,IAAI,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE;AACvC;AACA,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,MAAM,OAAO;AACb,KAAK;AACL,GAAG,CAAC,OAAO,CAAC,EAAE;AACd;AACA,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE;AACvB,EAAE,IAAIvD,KAAG,KAAK,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;AAC3B,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC1C,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH;AACA,EAAE,IAAI,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAC;AACpC;AACA,EAAE,OAAO,SAAS,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AACnE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;AACpD,MAAM,SAAS,CAAC;AAChB;;;;;;;;;AC/QA;AACA,IAAI,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACzD,IAAI,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AACrD,IAAI,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC;AAC7D;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE;AACvB,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;AACxC,EAAE,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;AAC/E,EAAE;AACF;AACA,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AACD;AACA,SAAS,eAAe,GAAG;AAC3B,CAAC,IAAI;AACL,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACtB,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAChC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAClB,EAAE,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACpD,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG;AACH;AACA;AACA,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;AACjB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC/B,GAAG,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,GAAG;AACH,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAClE,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,YAAY,EAAE;AACxC,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG;AACH;AACA;AACA,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;AACjB,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;AAC7D,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAC1B,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACpD,IAAI,sBAAsB,EAAE;AAC5B,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE,CAAC,OAAO,GAAG,EAAE;AACf;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF,CAAC;AACD;IACA,YAAc,GAAG,eAAe,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;AAC/E,CAAC,IAAI,IAAI,CAAC;AACV,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC,IAAI,OAAO,CAAC;AACb;AACA,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,EAAE,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B;AACA,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;AACxB,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AACvC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,IAAI;AACJ,GAAG;AACH;AACA,EAAE,IAAI,qBAAqB,EAAE;AAC7B,GAAG,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACzC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;AACjD,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,KAAK;AACL,IAAI;AACJ,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,EAAE,CAAC;AACX,CAAC;;;;;;;;;AClFD;AACA;AACA;AACA;AACA;AACAwR,cAAc,GAAGC,OAAI;qBACA,GAAG,OAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG,iCAAgC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAChC,EAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAClC,IAAI,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC;AACtD,GAAG;AACH;AACA,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,IAAI,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC;AACrD,GAAG;AACH;AACA;AACA,EAAE,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACpC,MAAM3P,OAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,MAAM,MAAK;AACX;AACA;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5C,MAAM,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC;AAC3E,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,IAAI,MAAM,KAAK,GAAG,EAAE;AACtB,IAAI,OAAO,MAAM;AACjB,GAAG;AACH;AACA;AACA,EAAE,IAAI,GAAG,GAAG,OAAM;AAClB,EAAE,IAAI,IAAI,GAAGA,OAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAC;AACxC;AACA;AACA,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9D,IAAI,OAAO,GAAG;AACd,GAAG;AACH;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,GAAE;AACrC;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AAClC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAC;AACpB,MAAM,GAAG,GAAG,GAAG;AACf,UAAU,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;AAChC,UAAU,MAAM,CAAC,CAAC,EAAC;AACnB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,GAAG;AACZ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,OAAK,EAAE,MAAM,EAAE;AACxB,EAAE,IAAI,GAAG,GAAG,EAAC;AACb,EAAE,IAAI,IAAI,GAAG,GAAE;AACf,EAAE,IAAI,KAAK,GAAG,EAAC;AACf;AACA;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACrD,IAAI,QAAQ,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAChC,MAAM,KAAK,IAAI;AACf,QAAQ,IAAI,KAAK,KAAK,GAAG,EAAE;AAC3B,UAAU,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,EAAC;AAC7B,SAAS;AACT,QAAQ,KAAK;AACb,MAAM,KAAK,IAAI;AACf,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAC;AAC/C,QAAQ,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,EAAC;AAC3B,QAAQ,KAAK;AACb,MAAM;AACN,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAC;AACnB,QAAQ,KAAK;AACb,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAC;AACzC;AACA,EAAE,OAAO,IAAI;AACb,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS2P,MAAI,EAAE,GAAG,EAAE,KAAK,EAAE;AAC3B,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AAChD;AACA,IAAI,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC;AACnD,GAAG;AACH;AACA;AACA,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAE;AACvC,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AACjC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACpB,MAAM,MAAM,CAAC,GAAG,EAAC;AACjB;AACA;AACA,EAAE,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG;AACrC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAC;AAC9B,GAAG;AACH;;ACpJA,CAAC,YAAY;AAGb;AACA,EAAE,IAAI,MAAM,GAAG3S,YAAwB,CAAC;AACxC,EAAE,IAAI,IAAI,GAAGU,cAAe,CAAC;AAC7B;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,MAAM,EAAE,GAAG;AACf,IAAI,OAAO,EAAE,gCAAgC;AAC7C,IAAI,iBAAiB,EAAE,KAAK;AAC5B,IAAI,oBAAoB,EAAE,GAAG;AAC7B,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,QAAQ,CAAC,CAAC,EAAE;AACvB,IAAI,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,YAAY,MAAM,CAAC;AACxD,GAAG;AACH;AACA,EAAE,SAAS,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE;AAClD,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACtC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACrD,QAAQ,IAAI,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;AACvD,UAAU,OAAO,IAAI,CAAC;AACtB,SAAS;AACT,OAAO;AACP,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK,MAAM,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE;AACxC,MAAM,OAAO,MAAM,KAAK,aAAa,CAAC;AACtC,KAAK,MAAM,IAAI,aAAa,YAAY,MAAM,EAAE;AAChD,MAAM,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxC,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,CAAC,aAAa,CAAC;AAC7B,KAAK;AACL,GAAG;AACH;AACA,EAAE,SAAS,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE;AACzC,IAAI,IAAI,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM;AAC1C,MAAM,OAAO,GAAG,EAAE;AAClB,MAAM,SAAS,CAAC;AAChB;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE;AACnD;AACA,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAQ,GAAG,EAAE,6BAA6B;AAC1C,QAAQ,KAAK,EAAE,GAAG;AAClB,OAAO,CAAC,CAAC,CAAC;AACV,KAAK,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzC;AACA,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAQ,GAAG,EAAE,6BAA6B;AAC1C,QAAQ,KAAK,EAAE,OAAO,CAAC,MAAM;AAC7B,OAAO,CAAC,CAAC,CAAC;AACV,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAQ,GAAG,EAAE,MAAM;AACnB,QAAQ,KAAK,EAAE,QAAQ;AACvB,OAAO,CAAC,CAAC,CAAC;AACV,KAAK,MAAM;AACX,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACjE;AACA,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAQ,GAAG,EAAE,6BAA6B;AAC1C,QAAQ,KAAK,EAAE,SAAS,GAAG,aAAa,GAAG,KAAK;AAChD,OAAO,CAAC,CAAC,CAAC;AACV,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAQ,GAAG,EAAE,MAAM;AACnB,QAAQ,KAAK,EAAE,QAAQ;AACvB,OAAO,CAAC,CAAC,CAAC;AACV,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA,EAAE,SAAS,gBAAgB,CAAC,OAAO,EAAE;AACrC,IAAI,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AAClC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;AACtB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,KAAK;AACL,IAAI,OAAO;AACX,MAAM,GAAG,EAAE,8BAA8B;AACzC,MAAM,KAAK,EAAE,OAAO;AACpB,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,SAAS,oBAAoB,CAAC,OAAO,EAAE;AACzC,IAAI,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE;AACtC,MAAM,OAAO;AACb,QAAQ,GAAG,EAAE,kCAAkC;AAC/C,QAAQ,KAAK,EAAE,MAAM;AACrB,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,SAAS,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE;AACjD,IAAI,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;AACnE,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB;AACA,IAAI,IAAI,CAAC,cAAc,EAAE;AACzB,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;AACrE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAQ,GAAG,EAAE,MAAM;AACnB,QAAQ,KAAK,EAAE,gCAAgC;AAC/C,OAAO,CAAC,CAAC,CAAC;AACV,KAAK,MAAM,IAAI,cAAc,CAAC,IAAI,EAAE;AACpC,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,EAAE;AACjD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAQ,GAAG,EAAE,8BAA8B;AAC3C,QAAQ,KAAK,EAAE,cAAc;AAC7B,OAAO,CAAC,CAAC,CAAC;AACV,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA,EAAE,SAAS,uBAAuB,CAAC,OAAO,EAAE;AAC5C,IAAI,IAAI,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE;AAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;AACnC,MAAM,OAAO;AACb,QAAQ,GAAG,EAAE,+BAA+B;AAC5C,QAAQ,KAAK,EAAE,OAAO;AACtB,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,SAAS,eAAe,CAAC,OAAO,EAAE;AACpC,IAAI,IAAI,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAE;AACpG,IAAI,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AACjC,MAAM,OAAO;AACb,QAAQ,GAAG,EAAE,wBAAwB;AACrC,QAAQ,KAAK,EAAE,MAAM;AACrB,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,SAAS,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE;AACtC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpD,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9B,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACnC,UAAU,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACpC,SAAS,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE;AAC1D,UAAU,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAClC,SAAS,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE;AACjC,UAAU,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAClD,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AACzC,IAAI,IAAI,OAAO,GAAG,EAAE;AACpB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAChF;AACA,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AAC9B;AACA,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,MAAM,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAY,CAAC,CAAC,CAAC;AACvD,MAAM,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAY,CAAC,CAAC,CAAC;AACnD,MAAM,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAY,CAAC,CAAC,CAAC;AAClD,MAAM,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAY,CAAC,CAAC,CAAC;AAC1D,MAAM,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACjC;AACA,MAAM,IAAI,OAAO,CAAC,iBAAiB,EAAE;AACrC,QAAQ,IAAI,EAAE,CAAC;AACf,OAAO,MAAM;AACb;AACA;AACA,QAAQ,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACtD,QAAQ,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAC7C,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;AAClB,OAAO;AACP,KAAK,MAAM;AACX;AACA,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,MAAM,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAY,CAAC,CAAC,CAAC;AACvD,MAAM,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAY,CAAC,CAAC,CAAC;AAC1D,MAAM,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACjC,MAAM,IAAI,EAAE,CAAC;AACb,KAAK;AACL,GAAG;AACH;AACA,EAAE,SAAS,iBAAiB,CAAC,CAAC,EAAE;AAChC;AACA,IAAI,IAAI,eAAe,GAAG,IAAI,CAAC;AAC/B,IAAI,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;AACjC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,KAAK,MAAM;AACX,MAAM,eAAe,GAAG,UAAU,GAAG,EAAE,EAAE,EAAE;AAC3C,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACpB,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AACnD,MAAM,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,OAAO,EAAE;AACnD,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,SAAS,MAAM;AACf,UAAU,IAAI,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC1D,UAAU,IAAI,cAAc,GAAG,IAAI,CAAC;AACpC,UAAU,IAAI,WAAW,CAAC,MAAM,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,UAAU,EAAE;AAC9E,YAAY,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC;AAChD,WAAW,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE;AACzC,YAAY,cAAc,GAAG,UAAU,MAAM,EAAE,EAAE,EAAE;AACnD,cAAc,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3C,aAAa,CAAC;AACd,WAAW;AACX;AACA,UAAU,IAAI,cAAc,EAAE;AAC9B,YAAY,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AACvE,cAAc,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACnC,gBAAgB,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,eAAe,MAAM;AACrB,gBAAgB,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5C,gBAAgB,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAClD,eAAe;AACf,aAAa,CAAC,CAAC;AACf,WAAW,MAAM;AACjB,YAAY,IAAI,EAAE,CAAC;AACnB,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA,EAAEkS,aAAc,GAAG,iBAAiB,CAAC;AACrC;AACA,CAAC,EAAE;;;;;;AC3OH,MAAM7N,IAAE,GAAG/E,WAAa,CAAC;AACzB,MAAM,EAAE,QAAQ,EAAE,GAAGU,qBAAiB,CAAC;AACvC,MAAMmS,SAAO,GAAG5R,aAAe,CAAC;AAChC,MAAM,aAAEkE,WAAS,EAAE,GAAG3C,qBAAe,CAAC;AACtC,MAAMyF,WAAS,GAAGD,WAAoB,CAAC;AACvC;AACA,MAAMkC,SAAO,GAAG/E,WAAS,CAACJ,IAAE,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM0E,MAAI,GAAGtE,WAAS,CAACJ,IAAE,CAAC,IAAI,CAAC,CAAC;AAChC,MAAM+N,OAAK,GAAG3N,WAAS,CAACJ,IAAE,CAAC,KAAK,CAAC,CAAC;AAClC,MAAMoJ,UAAQ,GAAGhJ,WAAS,CAACJ,IAAE,CAAC,QAAQ,CAAC,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMgO,MAAI,GAAG,GAAG,CAAC;AACjB,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AACxD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC;AACjG,MAAM,SAAS,GAAG,OAAO,CAAC;AAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC;AAC/B,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;AACxE;AACA,MAAM,iBAAiB,GAAG,KAAK,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACjG,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjG;AACA,MAAM,eAAe,GAAG,MAAM,IAAI;AAClC,EAAE,IAAI,MAAM,KAAK,SAAS,EAAE,OAAO;AACnC,EAAE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,OAAO,MAAM,CAAC;AAClD;AACA,EAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAClC,IAAI,MAAM,IAAI,GAAG9K,WAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzC,GAAG;AACH;AACA,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC7B,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AAC/B,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAClC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK8K,MAAI,EAAE;AACtC,QAAQ,QAAQ,CAAC,IAAI,CAAC9K,WAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,OAAO,MAAM;AACb,QAAQ,QAAQ,CAAC,IAAI,CAACA,WAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,QAAQ,OAAO,KAAK;AACpB,UAAU,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1F,OAAO;AACP,MAAM,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7D,KAAK;AACL,IAAI,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,GAAG;AACH,CAAC,CAAC;AACF;AACA,MAAM,cAAc,SAAS,QAAQ,CAAC;AACtC,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,GAAG;AACf;AACA,MAAM,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI;AAChC,MAAM,eAAe,EAAE,CAAC,IAAI,KAAK,IAAI;AACrC;AACA,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,KAAK,EAAE,KAAK;AAClB,MAAM,KAAK,EAAE,UAAU;AACvB,MAAM,UAAU,EAAE,KAAK;AACvB,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B,IAAI,KAAK,CAAC;AACV,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;AAClD,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,IAAI,GAAG,EAAE,GAAG,cAAc,CAAC,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;AAClE,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;AAChC;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxD,IAAI,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClE;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG6K,OAAK,GAAGrJ,MAAI,CAAC;AACjD;AACA,IAAI,IAAI,iBAAiB,EAAE;AAC3B,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AAChC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/E,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjF,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,eAAe,CAAC;AACrD,IAAI,IAAI,CAAC,KAAK,GAAGoJ,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,IAAI9N,IAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1D,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC1D,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC1E;AACA;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACzB,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE;AACrB,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO;AAC7B,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB;AACA,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE;AAC3C,QAAQ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;AAC9D;AACA,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,UAAU,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9F,UAAU,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACxD,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO;AACvC;AACA,YAAY,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9D,YAAY,IAAI,SAAS,KAAK,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;AAC3E,cAAc,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;AAC3C,gBAAgB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/E,eAAe;AACf;AACA,cAAc,IAAI,IAAI,CAAC,SAAS,EAAE;AAClC,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAgB,KAAK,EAAE,CAAC;AACxB,eAAe;AACf,aAAa,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACxG,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE;AACnC,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAgB,KAAK,EAAE,CAAC;AACxB,eAAe;AACf,aAAa;AACb,WAAW;AACX,SAAS,MAAM;AACf,UAAU,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC5C,UAAU,IAAI,CAAC,MAAM,EAAE;AACvB,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAY,MAAM;AAClB,WAAW;AACX,UAAU,IAAI,CAAC,MAAM,GAAG,MAAM,MAAM,CAAC;AACrC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO;AACrC,SAAS;AACT,OAAO;AACP,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,KAAK,SAAS;AACd,MAAM,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AAC3B,KAAK;AACL,GAAG;AACH;AACA,EAAE,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;AACjC,IAAI,IAAI,KAAK,CAAC;AACd,IAAI,IAAI;AACR,MAAM,KAAK,GAAG,MAAMmF,SAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACnD,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClC,GAAG;AACH;AACA,EAAE,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;AACnC,IAAI,IAAI,KAAK,CAAC;AACd,IAAI,IAAI;AACR,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,QAAQ,GAAG2I,SAAO,CAAC,OAAO,CAACA,SAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AACrE,MAAM,KAAK,GAAG,EAAE,IAAI,EAAEA,SAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACnF,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpF,KAAK,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzB,KAAK;AACL,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,QAAQ,CAAC,GAAG,EAAE;AAChB,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,KAAK;AACL,GAAG;AACH;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE;AAC7B;AACA;AACA,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClD,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;AACxB,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;AAC7B,MAAM,OAAO,WAAW,CAAC;AACzB,KAAK;AACL,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE;AACzC,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAClC,MAAM,IAAI;AACV,QAAQ,MAAM,aAAa,GAAG,MAAM1E,UAAQ,CAAC,IAAI,CAAC,CAAC;AACnD,QAAQ,MAAM,kBAAkB,GAAG,MAAM2E,OAAK,CAAC,aAAa,CAAC,CAAC;AAC9D,QAAQ,IAAI,kBAAkB,CAAC,MAAM,EAAE,EAAE;AACzC,UAAU,OAAO,MAAM,CAAC;AACxB,SAAS;AACT,QAAQ,IAAI,kBAAkB,CAAC,WAAW,EAAE,EAAE;AAC9C,UAAU,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC;AAC3C,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,KAAKD,SAAO,CAAC,GAAG,EAAE;AACrF,YAAY,MAAM,cAAc,GAAG,IAAI,KAAK;AAC5C,cAAc,CAAC,4BAA4B,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;AACjF,aAAa,CAAC;AACd,YAAY,cAAc,CAAC,IAAI,GAAG,oBAAoB,CAAC;AACvD,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACjD,WAAW;AACX,UAAU,OAAO,WAAW,CAAC;AAC7B,SAAS;AACT,OAAO,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClD;AACA,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAClE,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,UAAQ,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,KAAK;AACzC,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;AAC/C,EAAE,IAAI,IAAI,KAAK,MAAM,EAAE,IAAI,GAAG,aAAa,CAAC;AAC5C,EAAE,IAAI,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAChC,EAAE,IAAI,CAAC,IAAI,EAAE;AACb,IAAI,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;AAC3F,GAAG,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACvC,IAAI,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;AACpG,GAAG,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChD,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,0CAA0C,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,GAAG;AACH;AACA,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB,EAAE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AACF;AACA,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,KAAK;AAChD,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC1C,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAIA,UAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;AAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;AACtC,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,GAAG,CAAC,CAAC;AACL,CAAC,CAAC;AACF;AACAA,UAAQ,CAAC,OAAO,GAAG,eAAe,CAAC;AACnCA,UAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;AACzCA,UAAQ,CAAC,OAAO,GAAGA,UAAQ,CAAC;AAC5B;IACA,UAAc,GAAGA,UAAQ;;;;;;;;;;;ICvRzBnP,eAAc,GAAG,SAAS,IAAI,EAAE,aAAa,EAAE;AAC/C,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;AACxD,GAAG;AACH;AACA,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAChD;AACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACxB,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC;AAC5B;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;AAClB,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACnC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,EAAE;AACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAClC,EAAE,IAAI,aAAa,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AAC/D,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,GAAG;AACH,EAAE,OAAO,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;;AChCD,MAAM,CAAC,cAAc,CAACoP,kBAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D;AACA,MAAM,SAAS,GAAGjT,WAAoB,CAAC;AACvC,MAAM6D,eAAa,GAAGnD,eAAyB,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,MAAMqS,MAAI,GAAG,GAAG,CAAC;AACjB,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7C,MAAMG,QAAM,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK;AAC5C,EAAE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACrC,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACnC,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1D,GAAG;AACH,EAAE,IAAI,OAAO,YAAY,MAAM,EAAE;AACjC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,GAAG;AACH,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC;AAC3B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,KAAK;AACpE,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrC,EAAE,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACxC,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC5C,IAAI,MAAM,IAAI,SAAS,CAAC,kDAAkD;AAC1E,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,GAAG;AACH,EAAE,MAAM,IAAI,GAAGrP,eAAa,CAAC,KAAK,CAAC,CAAC;AACpC;AACA,EAAE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAC3D,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;AACrC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;AACrB,MAAM,OAAO,WAAW,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AACtC,KAAK;AACL,GAAG;AACH;AACA,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,EAAE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACxD,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpC,IAAI,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE;AACtD,MAAM,OAAO,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AACxC,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,WAAW,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAClC,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMsP,UAAQ,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAG,eAAe,KAAK;AACtE,EAAE,IAAI,QAAQ,IAAI,IAAI,EAAE;AACxB,IAAI,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;AAC5D,GAAG;AACH,EAAE,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,SAAS,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;AAC/E,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;AAChD;AACA;AACA,EAAE,MAAM,OAAO,GAAGD,QAAM,CAAC,QAAQ,CAAC,CAAC;AACnC,EAAE,MAAM,YAAY,GAAG,OAAO;AAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAKH,MAAI,CAAC;AACxE,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAK,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACxC,EAAE,MAAM,QAAQ,GAAG,OAAO;AAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,KAAK,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAKA,MAAI,CAAC,CAAC;AACtG,KAAK,GAAG,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAClD;AACA,EAAE,IAAI,UAAU,IAAI,IAAI,EAAE;AAC1B,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,GAAG,KAAK,KAAK;AACvC,MAAM,MAAM,WAAW,GAAG,OAAO,EAAE,KAAK,SAAS,GAAG,EAAE,GAAG,KAAK,CAAC;AAC/D,MAAM,OAAO,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAC5E,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC,CAAC;AACF;AACAI,UAAQ,CAAC,OAAO,GAAGA,UAAQ,CAAC;AAC5BC,kBAAc,GAAGD,UAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICvGzBE,kBAAc,GAAGrT,YAAmC;;ACCpD,MAAMsD,MAAI,GAAGtD,aAAe,CAAC;AAC7B,MAAM,gBAAgB,GAAGU,kBAA4B,CAAC;AACtD;AACA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC7C;IACA4S,cAAc,GAAG,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAChQ,MAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;;;;;ACL1F;AACA,MAAM,CAAC,GAAG,CAAC,GAAGtD,aAAe,CAAC;AAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;AAC3B,MAAM,EAAE,GAAGU,qBAAa,CAAC;AACzB;AACA,iBAAiB,KAAK,CAAC;AACvB,mBAAmB,OAAO,CAAC;AAC3B,iBAAiB,KAAK,CAAC;AACvB,oBAAoB,QAAQ,CAAC;AAC7B,qBAAqB,QAAQ,CAAC;AAC9B,oBAAoB,QAAQ,CAAC;AAC7B,wBAAwB,WAAW,CAAC;AACpC,iBAAiB,KAAK,CAAC;AACvB,mBAAmB,OAAO,CAAC;AAC3B;AACA,mBAAmB,MAAM,CAAC;AAC1B,kBAAkB,KAAK,CAAC;AACxB,oBAAoB,OAAO,CAAC;AAC5B;AACA,0BAA0B,SAAS,CAAC;AACpC,2BAA2B,UAAU,CAAC;AACtC,0BAA0B,SAAS,CAAC;AACpC,wBAAwB,OAAO,CAAC;AAChC,yBAAyB,QAAQ,CAAC;AAClC,0BAA0B,SAAS,CAAC;AACpC,4BAA4B,MAAM,CAAC;AACnC,iCAAiC,WAAW,CAAC;AAC7C,+BAA+B,SAAS,CAAC;AACzC;AACA,wBAAwB,WAAW,CAAC;AACpC,kBAAkB,aAAa,CAAC;AAChC,kBAAkB,aAAa,CAAC;AAChC,uBAAuB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACjF;AACA,oBAAoB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9B;AACA,wBAAwB,KAAK,CAAC;AAC9B,0BAA0B,MAAM,CAAC;AACjC,iCAAiC,OAAO,CAAC;AACzC,iBAAiB,kCAAkC,CAAC;AACpD,sBAAsB,UAAU,CAAC;AACjC;AACA,gBAAgB,GAAG,CAAC;AACpB,sBAAsB,IAAI,CAAC;AAC3B,sBAAsB,GAAG,CAAC;AAC1B,eAAe,GAAG,CAAC;AACnB,kBAAkB,GAAG,CAAC;AACtB,mBAAmB,IAAI,CAAC;AACxB,eAAe,GAAG,CAAC;AACnB,mBAAmB,IAAI,CAAC;AACxB,wBAAwB,OAAO,CAAC;AAChC,yBAAyB,KAAK,CAAC;AAC/B,qBAAqB,KAAK,CAAC;AAC3B,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACpC,sBAAsB,QAAQ,CAAC;AAC/B,wBAAwB,UAAU,CAAC;AACnC,oBAAoB,EAAE,CAAC;AACvB,mBAAmB,MAAM,EAAE,CAAC;AAC5B,sBAAsB,GAAG,IAAI,GAAG,CAAC;AACjC;AACA,oBAAoB,QAAQ,KAAK,OAAO,CAAC;AACzC,kBAAkB,QAAQ,KAAK,QAAQ,CAAC;AACxC,kBAAkB,QAAQ,KAAK,OAAO,CAAC;AACvC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO;;;AC9DtC,MAAMqE,IAAE,GAAG/E,WAAa,CAAC;AACzB,MAAM6S,SAAO,GAAGnS,aAAe,CAAC;AAChC,MAAM,aAAEyE,WAAS,EAAE,GAAGlE,qBAAe,CAAC;AACtC,MAAM,YAAY,GAAGuB,cAAyB,CAAC;AAC/C,MAAM;AACN,aAAEkC,WAAS;AACX,EAAE,OAAO;AACT,YAAE6O,UAAQ;AACV,aAAEC,WAAS;AACX,EAAE,aAAa;AACf,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,YAAY;AACd,aAAEC,WAAS;AACX,UAAEC,QAAM;AACR,cAAEC,YAAU;AACZ,YAAEC,UAAQ;AACV,YAAEC,UAAQ;AACV,WAAEC,SAAO;AACT,eAAEC,aAAW;AACb,EAAE,IAAI;AACN,CAAC,GAAG/L,WAAsB,CAAC;AAC3B;AACA,MAAM,mBAAmB,GAAG,OAAO,CAAC;AACpC;AACA,MAAMgM,MAAI,GAAG7O,WAAS,CAACJ,IAAE,CAAC,IAAI,CAAC,CAAC;AAChC,MAAM0E,MAAI,GAAGtE,WAAS,CAACJ,IAAE,CAAC,IAAI,CAAC,CAAC;AAChC,MAAM+N,OAAK,GAAG3N,WAAS,CAACJ,IAAE,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,KAAK,GAAGI,WAAS,CAACJ,IAAE,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,UAAU,GAAGI,WAAS,CAACJ,IAAE,CAAC,QAAQ,CAAC,CAAC;AAC1C;AACA,MAAMkP,aAAW,GAAG,SAAEnB,OAAK,QAAErJ,MAAI,EAAE,CAAC;AACpC;AACA;AACA,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK;AAC7B,EAAE,IAAI,GAAG,YAAY,GAAG,EAAE;AAC1B,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACpB,GAAG,MAAM;AACT,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;AACZ,GAAG;AACH,CAAC,CAAC;AACF;AACA,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK;AAC5C,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,EAAE,IAAI,EAAE,SAAS,YAAY,GAAG,CAAC,EAAE;AACnC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAClD,GAAG;AACH,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC;AACF;AACA,MAAM,SAAS,GAAG,IAAI,IAAI,GAAG,IAAI;AACjC,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,EAAE,IAAI,GAAG,YAAY,GAAG,EAAE;AAC1B,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;AAChB,GAAG,MAAM;AACT,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,GAAG;AACH,CAAC,CAAC;AACF;AACA,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK;AACzC,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,EAAE,IAAI,SAAS,YAAY,GAAG,EAAE;AAChC,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3B,GAAG,MAAM,IAAI,SAAS,KAAK,IAAI,EAAE;AACjC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,GAAG;AACH,CAAC,CAAC;AACF;AACA,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,GAAG,YAAY,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;AAC7E,EAAE,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK;AAC5C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnB,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AACnD;AACA;AACA;AACA,IAAI,IAAI,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE;AACnC,MAAM,gBAAgB;AACtB,QAAQoJ,SAAO,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,aAAa,EAAEA,SAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;AAChF,OAAO,CAAC;AACR,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI;AACN,IAAI,OAAO9N,IAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAChD,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;AACtB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK;AAC/D,EAAE,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9C,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO;AACpB,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK;AACpC,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/B,GAAG,CAAC,CAAC;AACL,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,KAAK;AAClE,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC;AACtD,EAAE,IAAI,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C;AACA;AACA,EAAE,IAAI,OAAO,CAAC;AACd,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,IAAI,OAAO,GAAG,qBAAqB;AACnC,MAAM,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU;AACrD,KAAK,CAAC;AACN,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,GAAG;AACH,EAAE,IAAI,IAAI,EAAE;AACZ,IAAI,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AACjD,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC7C,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC7C,GAAG,MAAM;AACT,IAAI,OAAO,GAAG,qBAAqB;AACnC,MAAM,IAAI;AACV,MAAM,OAAO;AACb,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC;AAC1D,MAAM,UAAU;AAChB,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AACpD,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO;AACzB,IAAI,OAAO,CAAC,EAAE,CAAC6O,UAAQ,EAAE,OAAO,KAAK,KAAK;AAC1C,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC1E,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAClC;AACA,MAAM,IAAIlP,WAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AAC/C,QAAQ,IAAI;AACZ,UAAU,MAAM,EAAE,GAAG,MAAMsP,MAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C,UAAU,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1B,UAAU,YAAY,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAS,CAAC,OAAO,GAAG,EAAE,EAAE;AACxB,OAAO,MAAM;AACb,QAAQ,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,GAAG;AACX,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,WAAW,EAAE,UAAU;AAC7B,MAAM,WAAW,EAAE,UAAU;AAC7B,MAAM,OAAO;AACb,KAAK,CAAC;AACN,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACzC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,MAAM;AACf,IAAI,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AAC9C,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACpC;AACA;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC3B;AACA,MAAM,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxC,MAAM,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,MAAM,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAC/B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,KAAK;AACL,GAAG,CAAC;AACJ,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,KAAK;AACtE,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC;AAC1C,EAAE,IAAI,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAKhD;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;AACrC,EAAE,IAAI,KAAK,KAAK,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE;AAO7F,IAAIjP,IAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC7B,IAAI,IAAI,GAAG,SAAS,CAAC;AACrB,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,IAAI,EAAE;AACZ,IAAI,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AACjD,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC7C,GAAG,MAAM;AACT;AACA;AACA;AACA,IAAI,IAAI,GAAG;AACX,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,WAAW,EAAE,UAAU;AAC7B,MAAM,OAAO;AACb,MAAM,OAAO,EAAEA,IAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK;AAC/D,QAAQ,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,KAAK;AAClD,UAAU,UAAU,CAAC0O,WAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AACvC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,CAAC,EAAE;AACpF,UAAU,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACtE,SAAS;AACT,OAAO,CAAC;AACR,KAAK,CAAC;AACN,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,MAAM;AACf,IAAI,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AAC9C,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACpC,MAAM,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAM1O,IAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/B,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAC9C,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,KAAK;AACL,GAAG,CAAC;AACJ,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,MAAMmP,eAAa,CAAC;AACpB;AACA;AACA;AACA;AACA,WAAW,CAAC,GAAG,EAAE;AACjB,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACjB,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE;AACjC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AAChC,EAAE,MAAM,SAAS,GAAGrB,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1C,EAAE,MAAM,QAAQ,GAAGA,SAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACpD,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACvB,EAAE,MAAM,YAAY,GAAGA,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,EAAE,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAGU,UAAQ,CAAC;AACrC;AACA,EAAE,IAAI,MAAM,CAAC;AACb,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;AACvB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,IAAI,YAAY,CAAC,QAAQ,CAAC;AAC1E,MAAM,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC1C,IAAI,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE;AACjE,MAAM,QAAQ;AACd,MAAM,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ;AACnC,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE;AAC7D,MAAM,QAAQ;AACd,MAAM,UAAU,EAAE,IAAI,CAAC,iBAAiB;AACxC,MAAM,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ;AACnC,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE;AACrC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AACvB,IAAI,OAAO;AACX,GAAG;AACH,EAAE,MAAM,OAAO,GAAGV,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,EAAE,MAAM,QAAQ,GAAGA,SAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAClD;AACA,EAAE,IAAI,SAAS,GAAG,KAAK,CAAC;AACxB;AACA;AACA,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO;AACnC;AACA,EAAE,MAAM,QAAQ,GAAG,OAAO,IAAI,EAAE,QAAQ,KAAK;AAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO;AAClE,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE;AAC7C,MAAM,IAAI;AACV,QAAQ,MAAM,QAAQ,GAAG,MAAMpJ,MAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AACpC;AACA,QAAQ,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;AACpC,QAAQ,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;AACpC,QAAQ,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,SAAS,CAAC,OAAO,EAAE;AACzD,UAAU,IAAI,CAAC,GAAG,CAAC,KAAK,CAACgK,WAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpD,SAAS;AACT,QAAQ,IAAI,OAAO,IAAI,SAAS,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,EAAE;AACvD,UAAU,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAC;AACnC,UAAU,SAAS,GAAG,QAAQ,CAAC;AAC/B,UAAU,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/E,SAAS,MAAM;AACf,UAAU,SAAS,GAAG,QAAQ,CAAC;AAC/B,SAAS;AACT,OAAO,CAAC,OAAO,KAAK,EAAE;AACtB;AACA,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC5C,OAAO;AACP;AACA,KAAK,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACrC;AACA,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;AAClC,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;AAClC,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,SAAS,CAAC,OAAO,EAAE;AACvD,QAAQ,IAAI,CAAC,GAAG,CAAC,KAAK,CAACA,WAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClD,OAAO;AACP,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC3B,KAAK;AACL,IAAG;AACH;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvD;AACA;AACA,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AACtF,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAACC,QAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO;AACrD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAACA,QAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACxC,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;AACnD,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AACvB,IAAI,OAAO;AACX,GAAG;AACH,EAAE,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC9B,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACjD;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE;AACxC;AACA,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;AAC/B,IAAI,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5C,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAChC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACvB,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;AACzD,QAAQ,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnD,QAAQ,IAAI,CAAC,GAAG,CAAC,KAAK,CAACD,WAAS,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACrD,OAAO;AACP,KAAK,MAAM;AACX,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjD,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAACC,QAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC1B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AACD;AACA,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AACtE;AACA,EAAE,SAAS,GAAGb,SAAO,CAAC,IAAI,CAAC,SAAS,EAAEW,WAAS,CAAC,CAAC;AACjD;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AACnB,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC/D,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO;AAC3B,GAAG;AACH;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACpD,EAAE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B;AACA,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE;AAC7C,IAAI,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;AAC7C,IAAI,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;AACjD,IAAI,KAAK,EAAE,CAAC;AACZ,GAAG,CAAC,CAAC,EAAE,CAACK,UAAQ,EAAE,OAAO,KAAK,KAAK;AACnC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AACzB,MAAM,MAAM,GAAG,SAAS,CAAC;AACzB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC5B,IAAI,IAAI,IAAI,GAAGhB,SAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB;AACA,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;AACjG,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AACzB,MAAM,MAAM,GAAG,SAAS,CAAC;AACzB,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC3D,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;AACjC;AACA;AACA,MAAM,IAAI,GAAGA,SAAO,CAAC,IAAI,CAAC,GAAG,EAAEA,SAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5D;AACA,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AACzD,KAAK;AACL,GAAG,CAAC,CAAC,EAAE,CAACe,UAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC1C;AACA,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO;AAC5B,IAAI,MAAM,CAAC,IAAI,CAACE,SAAO,EAAE,MAAM;AAC/B,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAC3B,QAAQ,MAAM,GAAG,SAAS,CAAC;AAC3B,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC;AACjE;AACA,MAAM,OAAO,EAAE,CAAC;AAChB;AACA;AACA;AACA;AACA,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;AAC9C,QAAQ,OAAO,IAAI,KAAK,SAAS;AACjC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B;AACA;AACA;AACA,WAAW,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC;AACxC,YAAY,QAAQ,EAAEjB,SAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;AACtD,WAAW,CAAC,CAAC,CAAC;AACd,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC3B,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC1C,OAAO,CAAC,CAAC;AACT;AACA,MAAM,MAAM,GAAG,SAAS,CAAC;AACzB;AACA;AACA,MAAM,IAAI,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC9F,KAAK,CAAC;AACN,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE;AACtE,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAACA,SAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAACA,SAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;AAC9E,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAACc,YAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAClF,GAAG;AACH;AACA;AACA,EAAE,SAAS,CAAC,GAAG,CAACd,SAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC/B,EAAE,IAAI,SAAS,CAAC;AAChB,EAAE,IAAI,MAAM,CAAC;AACb;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AACxC,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACpF,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACjF,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAClC,KAAK;AACL;AACA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK;AAC5D;AACA,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,OAAO;AAC/C;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1E,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;AAC7D,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AACpC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AACpD,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpD,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,OAAO,EAAE;AAC9B,IAAI,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AACjC,IAAI,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;AACvC,IAAI,EAAE,CAAC,UAAU,GAAG,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvD,IAAI,EAAE,CAAC,SAAS,GAAG,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACrD,GAAG;AACH;AACA;AACA,EAAE,IAAI;AACN,IAAI,MAAM,KAAK,GAAG,MAAMoB,aAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACjE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAChC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;AAClD,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAACF,aAAW,CAAC,CAAC;AAC1G,IAAI,IAAI,MAAM,CAAC;AACf,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;AAC7B,MAAM,MAAM,OAAO,GAAGlB,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAChE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;AACrG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAClC;AACA,MAAM,IAAI,OAAO,KAAK,UAAU,IAAI,UAAU,KAAK,SAAS,EAAE;AAC9D,QAAQ,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACxD,OAAO;AACP,KAAK,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE;AACvC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAChE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAClC,MAAM,MAAM,MAAM,GAAGA,SAAO,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACnD,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACxD,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAACa,QAAM,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;AAC7F,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAClC;AACA;AACA,MAAM,IAAI,UAAU,KAAK,SAAS,EAAE;AACpC,QAAQ,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAACb,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;AACtE,OAAO;AACP,KAAK,MAAM;AACX,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AACjE,KAAK;AACL,IAAI,KAAK,EAAE,CAAC;AACZ;AACA,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1C,IAAI,OAAO,KAAK,CAAC;AACjB;AACA,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACtC,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA,CAAC;AACD;IACA,aAAc,GAAGqB,eAAa;;;;ACnoB9B,MAAMnP,IAAE,GAAG/E,WAAa,CAAC;AACzB,MAAM6S,SAAO,GAAGnS,aAAe,CAAC;AAChC,MAAM,aAAEyE,WAAS,EAAE,GAAGlE,qBAAe,CAAC;AACtC;AACA,IAAI,QAAQ,CAAC;AACb,IAAI;AACJ,EAAE,QAAQ,GAAG,2BAAmB,CAAC;AACjC,CAAC,CAAC,OAAO,KAAK,EAAE;AAChB,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AACD;AACA,IAAI,QAAQ,EAAE;AACd;AACA,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACtD,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;AAClC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE;AAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC;AAC3B,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA,MAAM;AACN,UAAEyS,QAAM;AACR,aAAED,WAAS;AACX,cAAEE,YAAU;AACZ,aAAEQ,WAAS;AACX,YAAEP,UAAQ;AACV,EAAE,QAAQ;AACV,WAAEE,SAAO;AACT,EAAE,eAAe;AACjB,EAAE,gBAAgB;AAClB,EAAE,eAAe;AACjB,EAAE,aAAa;AACf;AACA,EAAE,eAAe;AACjB,EAAE,iBAAiB;AACnB,EAAE,sBAAsB;AACxB,EAAE,oBAAoB;AACtB;AACA,EAAE,aAAa;AACf,EAAE,UAAU;AACZ,EAAE,SAAS;AACX,iBAAEM,eAAa;AACf,YAAEb,UAAQ;AACV,EAAE,WAAW;AACb,CAAC,GAAG/Q,WAAsB,CAAC;AAC3B;AACA,MAAM,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5D;AACA,MAAMiH,MAAI,GAAGtE,WAAS,CAACJ,IAAE,CAAC,IAAI,CAAC,CAAC;AAChC,MAAM,KAAK,GAAGI,WAAS,CAACJ,IAAE,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,QAAQ,GAAGI,WAAS,CAACJ,IAAE,CAAC,QAAQ,CAAC,CAAC;AACxC;AACA,MAAM,WAAW,GAAG,QAAE0E,MAAI,EAAE,KAAK,EAAE,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;AACnC;AACA;AACA;AACA,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC;AACA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;AAChC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;AAC3D,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK;AACnD,EAAE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9C,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE;AACnE,EAAE,IAAI,SAAS,GAAGoJ,SAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAGA,SAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AACnF;AACA,EAAE,MAAM,UAAU,GAAGA,SAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChD,EAAE,IAAI,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,gBAAgB,CAAC,UAAU,CAAC,EAAE;AACpC,IAAI,SAAS,GAAG,UAAU,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,MAAM,YAAY,GAAGA,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,EAAE,MAAM,UAAU,GAAG,YAAY,KAAK,QAAQ,CAAC;AAC/C;AACA,EAAE,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK;AACtD,IAAI,IAAI,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACxE,IAAI;AACJ,MAAM,QAAQ,KAAK,YAAY;AAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,GAAGA,SAAO,CAAC,GAAG,CAAC;AACnD,MAAM,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,IAAI,aAAa,GAAG,KAAK,CAAC;AAC5B,EAAE,KAAK,MAAM,WAAW,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE;AACrD,IAAI,IAAI,QAAQ,CAAC,OAAO,CAACA,SAAO,CAAC,OAAO,CAAC,WAAW,CAAC,GAAGA,SAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5E,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,MAAM;AACZ,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,IAAI,IAAI,aAAa,EAAE;AAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACzC,GAAG,MAAM;AACT,IAAI,IAAI,GAAG;AACX,MAAM,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAC5C,MAAM,UAAU;AAChB,MAAM,OAAO,EAAE,sBAAsB,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK;AACtE,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO;AACzC,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACvD,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI;AACvC,UAAU,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpD,OAAO,CAAC;AACR,KAAK,CAAC;AACN,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA,EAAE,OAAO,MAAM;AACf,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;AAC/B;AACA,IAAI,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACnB,MAAM,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM;AAC9D,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACnD,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5B,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,CAAC,IAAI,KAAK;AACnC,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,KAAK,MAAM,SAAS,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE;AACnD,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACvC,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,IAAI,KAAK,IAAI,qBAAqB,EAAE;AAC1C,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF;AACA;AACA,MAAM,MAAM,GAAG,MAAM,QAAQ,IAAI,gBAAgB,CAAC,IAAI,GAAG,GAAG,CAAC;AAC7D;AACA;AACA,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK;AAClC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAGA,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;AAC7E,EAAE,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AACF;AACA;AACA;AACA,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK;AAC9B,EAAE,IAAI,CAAC,IAAI,KAAK,sBAAsB,IAAI,KAAK,CAAC,WAAW,EAAE;AAC7D,EAAE,IAAI,CAAC,IAAI,KAAK,oBAAoB,IAAI,KAAK,CAAC,cAAc,EAAE;AAC9D,EAAE,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,MAAM,EAAE;AACnD,EAAC;AACD;AACA;AACA;AACA;AACA,MAAMwB,iBAAe,CAAC;AACtB;AACA;AACA;AACA;AACA,WAAW,CAAC,GAAG,EAAE;AACjB,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACjB,CAAC;AACD,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;AAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;AACxC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACxC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;AACtC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC;AACvC,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC;AACtC,CAAC;AACD;AACA,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5E,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAGZ,WAAS,GAAGC,QAAM,CAAC;AAC1D,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1F,CAAC;AACD;AACA,MAAM,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAClF,EAAE,IAAI;AACN,IAAI,MAAM,KAAK,GAAG,MAAMjK,MAAI,CAAC,IAAI,EAAC;AAClC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAChC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAChC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvF,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC0K,WAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAClG,KAAK;AACL,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvF,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAACA,WAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAClG,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACnF,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO;AACzD;AACA,EAAE,IAAI,KAAK,KAAKA,WAAS,EAAE;AAC3B,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,uBAAsB;AAC5D;AACA,IAAI,IAAI,WAAW,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAClD,KAAK;AACL,GAAG,MAAM;AACT,IAAI,IAAI,KAAK,KAAKT,QAAM,EAAE;AAC1B;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9E;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,IAAI,IAAI,CAAC,cAAc,EAAE;AACrE;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS;AACjD,UAAU,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACxD,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAChE,OAAO;AACP;AACA;AACA;AACA,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChD,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,sBAAsB,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;AACxF,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACpC,IAAI,IAAI,SAAS,KAAKC,YAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACzE,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;AAC/D,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO;AAChE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AAChC,EAAE,MAAM,aAAa,GAAG,OAAO,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK;AACzD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAChC,IAAI;AACJ,MAAM,IAAI,CAAC,KAAK,KAAK,SAAS;AAC9B,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK;AAChD,MAAM,OAAO;AACb,IAAI,MAAM,IAAI,GAAG,SAAS,CAACd,SAAO,CAAC,IAAI;AACvC,MAAM,SAAS,EAAEA,SAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;AACtD,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO;AAChD;AACA,IAAI,MAAM,MAAM,GAAGA,SAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,IAAI,MAAM,IAAI,GAAGA,SAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxC,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc;AAC9C,MAAM,IAAI,CAAC,IAAI,KAAK,sBAAsB,GAAG,IAAI,GAAG,MAAM;AAC1D,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,EAAE;AACtE,MAAM,IAAI,OAAO,IAAI,CAAC,OAAO,KAAKuB,eAAa,EAAE;AACjD,QAAQ,IAAI,KAAK,CAAC;AAClB,QAAQ,IAAI;AACZ,UAAU,KAAK,GAAG,MAAM3K,MAAI,CAAC,IAAI,CAAC,CAAC;AACnC,SAAS,CAAC,OAAO,KAAK,EAAE,EAAE;AAC1B,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AACpC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO;AACnD,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACpC,UAAU,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3F,SAAS,MAAM;AACf,UAAU,IAAI,CAAC,WAAW,CAAC0K,WAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtG,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzF,OAAO;AACP,KAAK,MAAM;AACX,MAAM,QAAQ,IAAI,CAAC,KAAK;AACxB,MAAM,KAAK,eAAe,CAAC;AAC3B,MAAM,KAAK,gBAAgB;AAC3B,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChG,MAAM,KAAK,eAAe,CAAC;AAC3B,MAAM,KAAK,aAAa;AACxB,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChG,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,MAAM,GAAG,mBAAmB;AACpC,IAAI,SAAS;AACb,IAAI,QAAQ;AACZ,IAAI,aAAa;AACjB,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;AACrB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AACxB,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;AACtE;AACA,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO;AACtE;AACA,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7C,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;AAC7B;AACA,EAAE,IAAI;AACN,IAAI,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAChD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAChC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AACzC,MAAM,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AACnC,KAAK;AACL;AACA,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;AAC/B;AACA;AACA;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,QAAQ,EAAE,CAAC,IAAI,KAAK;AAC1D,MAAM,IAAI,WAAW,GAAG,QAAQ,CAAC;AACjC,MAAM,IAAI,UAAU,IAAI,UAAU,KAAK,SAAS,EAAE;AAClD,QAAQ,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACzD,OAAO,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE;AACrC,QAAQ,WAAW,GAAGtB,SAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACnD,OAAO;AACP,MAAM,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;AACpC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACxB,GAAG,CAAC,MAAM,KAAK,EAAE;AACjB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACtC,MAAM,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AACnC,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;AACrD,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,EAAE,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;AACpC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAACA,SAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,EAAE,MAAM,IAAI,GAAGA,SAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC;AACA;AACA,EAAE,IAAI,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACzC,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO;AAC/B,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnB;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,QAAQ,KAAK,IAAI,EAAE;AAChD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAGc,YAAU,GAAGD,QAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAC3D,GAAG;AACH,CAAC;AACD;AACA,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE;AAC3C,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAC9B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;AACxC,IAAI,EAAE,CAAC,SAAS;AAChB,IAAIb,SAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,SAAS,CAAC;AAC7C,IAAI,WAAW;AACf,IAAI,EAAE,CAAC,UAAU;AACjB,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC5D,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AACvB,IAAI,OAAO;AACX,GAAG;AACH,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AAChC,EAAE,MAAM,WAAW,GAAG,OAAO,SAAS,KAAKuB,eAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AACnF;AACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC7C;AACA;AACA,EAAE,IAAI;AACN,IAAI,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACjE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;AAChC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;AAClD,MAAM,MAAM,IAAI,CAAC;AACjB,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;AAC7B;AACA,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9F;AACA;AACA,MAAM,IAAI,UAAU,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO;AACxD;AACA;AACA,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE;AACvC,QAAQ,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;AACjD,QAAQ,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;AACrD,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC;AAChD,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAK;AACjC;AACA,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAC7B,UAAU,OAAO;AACjB,SAAS;AACT,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO;AACvE;AACA,QAAQ,MAAM,UAAU,GAAGvB,SAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAClE,QAAQ,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AACjC;AACA,QAAQ,IAAI,EAAE,CAAC,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE;AAC/D;AACA;AACA,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS;AACnD,YAAY,SAAS,GAAG,SAAS,CAAC,UAAU,EAAEA,SAAO,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;AACjF;AACA,UAAU,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACnF,SAAS,MAAM;AACf,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7E,SAAS;AACT,OAAO,CAAC,CAAC,EAAE,CAACe,UAAQ,EAAEL,UAAQ,CAAC,CAAC,EAAE,CAACO,SAAO,EAAE,MAAM;AAClD,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,OAAO,CAAC,CAAC;AACT,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACrE,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC5B,KAAK;AACL,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAChD;AACA,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC5B,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC5B,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,QAAQ,KAAK,IAAI,EAAE;AAC5C,IAAI,IAAI,OAAO,SAAS,KAAKM,eAAa,EAAE;AAC5C;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;AACvD,KAAK,MAAM;AACX,MAAM,IAAI,QAAQ,CAAC;AACnB,MAAM,IAAI;AACV,QAAQ,QAAQ,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAChD,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AACpB,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;AACtD,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA,CAAC;AACD;AACAE,uBAAc,GAAGD,iBAAe,CAAC;8BACZ,GAAG;;ACzgBxB,MAAM,gBAAE9B,cAAY,EAAE,GAAGvS,qBAAiB,CAAC;AAC3C,MAAM+E,IAAE,GAAGrE,WAAa,CAAC;AACzB,MAAM,OAAO,GAAGO,aAAe,CAAC;AAChC,MAAM,aAAEkE,WAAS,EAAE,GAAG3C,qBAAe,CAAC;AACtC,MAAM,QAAQ,GAAGwF,UAAmB,CAAC;AACrC,MAAM,QAAQ,GAAGc,kBAAmB,CAAC,OAAO,CAAC;AAC7C,MAAM,UAAU,GAAGC,YAAsB,CAAC;AAC1C,MAAM,MAAM,GAAGqG,QAAkB,CAAC;AAClC,MAAM,MAAM,GAAGM,QAAiB,CAAC;AACjC,MAAM,aAAa,GAAGC,eAAyB,CAAC;AAChD;AACA,MAAM,aAAa,GAAG4E,aAA+B,CAAC;AACtD,MAAM,eAAe,GAAG3E,uBAAiC,CAAC;AAC1D,MAAM;AACN,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,UAAU;AACZ,EAAE,aAAa;AACf,EAAE,MAAM;AACR,EAAE,QAAQ;AACV;AACA,EAAE,SAAS;AACX,EAAE,OAAO;AACT;AACA,EAAE,aAAa;AACf,EAAE,eAAe;AACjB,EAAE,sBAAsB;AACxB,EAAE,MAAM;AACR,EAAE,WAAW;AACb;AACA,EAAE,KAAK;AACP,EAAE,WAAW;AACb,EAAE,WAAW;AACb,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,cAAc;AAChB,EAAE,aAAa;AACf,EAAE,WAAW;AACb,EAAE,aAAa;AACf,EAAE,SAAS;AACX,EAAE,QAAQ;AACV;AACA,aAAElL,WAAS;AACX,EAAE,OAAO;AACT,EAAE,MAAM;AACR,CAAC,GAAG8P,WAA0B,CAAC;AAC/B;AACA,MAAM,IAAI,GAAGrP,WAAS,CAACJ,IAAE,CAAC,IAAI,CAAC,CAAC;AAChC,MAAM,OAAO,GAAGI,WAAS,CAACJ,IAAE,CAAC,OAAO,CAAC,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AACtE,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,KAAK;AACvC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;AACvB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7B,MAAM,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5B,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACF;AACA,MAAM,UAAU,GAAG,CAAC,MAAM,KAAK;AAC/B;AACA;AACA;AACA,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,WAAW,CAAC,EAAE;AACnD,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE,GAAG;AACH,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACxC,CAAC,CAAC;AACF;AACA;AACA;AACA,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK;AAC3B,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AACjD,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC;AACtB,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AACnC,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,GAAG;AACH,EAAE,OAAO,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;AACrC,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC9C,GAAG;AACH,EAAE,IAAI,OAAO,EAAE;AACf,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;AACtB,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AACF;AACA;AACA;AACA,MAAM,mBAAmB,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9E;AACA,MAAM,gBAAgB,GAAG,CAAC,GAAG,GAAG,SAAS,KAAK,CAAC,IAAI,KAAK;AACxD,EAAE,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,OAAO,IAAI,CAAC;AAC/C,EAAE,OAAO,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC;AACF;AACA,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK;AACvC,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAChC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC7B,IAAI,OAAO,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,GAAG;AACH,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC,CAAC;AACF;AACA,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,CAAC;AACf;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE;AAClC,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AACpB,IAAI,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AACxC;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,GAAG,CAAC,IAAI,EAAE;AACZ,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACzB,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO;AACvB,IAAI,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/D,GAAG;AACH;AACA,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE;AACrB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACzB,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO;AACvB,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvB,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO;AAC/B;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1B,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,KAAK,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE;AAC/B,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,GAAG,CAAC,IAAI,EAAE;AACZ,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACzB,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO;AACvB,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACzB,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO;AACvB,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/B,GAAG;AACH;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACvB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC;AAC/B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC;AACtB,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,GAAG;AACH,CAAC;AACD;AACA,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,MAAM,aAAa,GAAG,OAAO,CAAC;AAC9B,MAAM,WAAW,CAAC;AAClB,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;AAC5C,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACnB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAC5D,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC/B,IAAI,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC;AACtC;AACA,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACjD,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAClE,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC;AACtF,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACrC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACxC,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AACjC,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;AAC7D,GAAG;AACH;AACA,EAAE,gBAAgB,CAAC,KAAK,EAAE;AAC1B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;AACxC,MAAM,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa;AACnE,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9E,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC1F,KAAK;AACL;AACA,IAAI,OAAO,KAAK,CAAC,QAAQ,CAAC;AAC1B,GAAG;AACH;AACA,EAAE,SAAS,CAAC,KAAK,EAAE;AACnB,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;AACtC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACpE,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,UAAU,CAAC,KAAK,EAAE;AACpB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC1B,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtE,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/C,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,aAAa;AAChF,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AAC3C,IAAI,OAAO,WAAW;AACtB,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;AAChD,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC1C,GAAG;AACH;AACA,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;AACjC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnF,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACnC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACvF,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,SAAS,CAAC,KAAK,EAAE;AACnB,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,MAAM,IAAI,QAAQ,GAAG,KAAK,CAAC;AAC3B,MAAM,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK;AAC1D,QAAQ,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK;AACxC,UAAU,IAAI,IAAI,KAAK,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;AACjD,UAAU,OAAO,QAAQ,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AAClG,SAAS,CAAC,CAAC;AACX,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5F,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,SAAS,SAASwN,cAAY,CAAC;AACrC;AACA,WAAW,CAAC,KAAK,EAAE;AACnB,EAAE,KAAK,EAAE,CAAC;AACV;AACA,EAAE,MAAM,IAAI,GAAG,EAAE,CAAC;AAClB,EAAE,IAAI,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxC;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC;AACA;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAC9B;AACA;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB;AACA;AACA,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACxD,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC/D,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,EAAE,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACjF,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AACnD,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;AAC/D,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AACnE,EAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,QAAQ,CAAC;AACpE;AACA;AACA,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACtE;AACA;AACA,EAAE,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;AAClD,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAChD;AACA;AACA;AACA,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACtD,IAAI,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;AAC9B,GAAG;AACH;AACA;AACA,EAAE,GAAG,MAAM,EAAE;AACb,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,GAAG;AACH;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAClD,EAAE,IAAI,OAAO,KAAK,SAAS,EAAE;AAC7B,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3C;AACA,IAAI,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,GAAG,EAAE;AAClD,MAAM,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC9B,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;AACxD,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC7B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC;AACnC,KAAK;AACL,GAAG;AACH,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACpD,EAAE,IAAI,WAAW,EAAE;AACnB,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACrD,GAAG;AACH;AACA;AACA,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACjF,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;AACpD;AACA,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAChE;AACA,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AACrE,EAAE,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AACjE,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACpC,EAAE,IAAI,GAAG,EAAE;AACX,IAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;AAClD,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,GAAG;AACH,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD;AACA,EAAE,IAAI,UAAU,GAAG,CAAC,CAAC;AACrB,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM;AAC1B,IAAI,UAAU,EAAE,CAAC;AACjB,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;AACxC,MAAM,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AACjC,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAChC;AACA,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAC1D,EAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC7B,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB;AACA;AACA,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;AACxB,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AACtD,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;AAClD,GAAG;AACH;AACA;AACA,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE;AACjC,EAAE,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9C,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB,EAAE,IAAI,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AACjC,EAAE,IAAI,GAAG,EAAE;AACX,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AAChC,MAAM,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjD;AACA;AACA,MAAM,IAAI,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC5C,QAAQ,OAAO,OAAO,CAAC;AACvB,OAAO;AACP,MAAM,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;AACjC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;AACrD;AACA;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAClC;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzD,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;AAC3D,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;AACvD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC;AACrC,IAAI,OAAO,CAAC,GAAG;AACf,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI;AAC9B,QAAQ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7F,QAAQ,IAAI,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACnC,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,CAAC;AACR,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI;AACtB,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;AAC9B,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;AACnD,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC;AAC5E,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC,MAAM,EAAE;AAChB,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AAC/B,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AACnC,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B;AACA,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC1B;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC/D,MAAM,IAAI,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnC,KAAK;AACL;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B;AACA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACjC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;AACpD,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAClC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;AACR,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,aAAa,CAAC;AAC7C,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB;AACA;AACA,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5B,EAAE,MAAM,OAAO,GAAG,EAAE,CAAC;AACrB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,IAAI;AACnE,IAAI,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;AAC7B,IAAI,IAAI,OAAO,YAAY,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1D,GAAG,CAAC,CAAC,CAAC;AACN,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AACpD,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAChC,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACvB,EAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC7B,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AACpD,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;AAChF,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC5B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AACvG,EAAE,OAAO,IAAI,CAAC,aAAa,CAAC;AAC5B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,UAAU,GAAG;AACb,EAAE,MAAM,SAAS,GAAG,EAAE,CAAC;AACvB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK;AACxC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AACjF,IAAI,SAAS,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AAC3D,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,SAAS,CAAC;AACnB,CAAC;AACD;AACA,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE;AACzB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACrB,EAAE,IAAI,KAAK,KAAK,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AACrD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC3C,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;AAC1B;AACA,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,EAAE,IAAI7N,WAAS,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChD,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxD;AACA,EAAE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7B,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtD,OAAO,IAAI,IAAI,KAAK,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD,OAAO,IAAI,IAAI,KAAK,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C;AACA,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACpC,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;AACnD,IAAI,EAAE,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;AAC/B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;AACnB,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AAC7B,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3C,MAAM,UAAU,CAAC,MAAM;AACvB,QAAQ,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK;AACtD,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AAC9B,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;AACtC,UAAU,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,SAAS,CAAC,CAAC;AACX,OAAO,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AAC9D,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAClC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxC,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,GAAG,KAAK,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;AAC9E,IAAI,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK;AACpC,MAAM,IAAI,GAAG,EAAE;AACf,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;AACnC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,OAAO,MAAM,IAAI,KAAK,EAAE;AACxB;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,UAAU,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1B,SAAS,MAAM;AACf,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,SAAS;AACT,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACzE,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,IAAI,KAAK,KAAK,SAAS,EAAE;AAC3B,IAAI,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7D,IAAI,IAAI,WAAW,EAAE,OAAO,IAAI,CAAC;AACjC,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,SAAS;AAC3C,KAAK,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,CAAC;AACrE,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;AACpE,IAAI,IAAI,KAAK,CAAC;AACd,IAAI,IAAI;AACR,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnC,KAAK,CAAC,OAAO,GAAG,EAAE,EAAE;AACpB;AACA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,GAAG;AACH,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAChC;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,KAAK,EAAE;AACpB,EAAE,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;AACnC,EAAE,IAAI,KAAK,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS;AACtD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,KAAK,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC;AACrF,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/B,GAAG;AACH,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;AAC9B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;AACrC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACxC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC/C,GAAG;AACH;AACA;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACjD;AACA,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC;AACA,EAAE,IAAI,UAAU,EAAE;AAClB,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;AACvB,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,IAAI,aAAa,CAAC;AACpB,EAAE,MAAM,KAAK,GAAG,MAAM;AACtB,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACxC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;AAChC,IAAI,IAAI,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC/C,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG,CAAC;AACJ,EAAE,aAAa,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C,EAAE,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/C,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACxB,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AACD;AACA,eAAe,GAAG;AAClB,EAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;AACnD,EAAE,IAAI,cAAc,CAAC;AACrB;AACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC;AACtB,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrD,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACpD,GAAG;AACH;AACA,EAAE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AACzB;AACA,EAAE,MAAM,gBAAgB,GAAG,CAAC,QAAQ,KAAK;AACzC,IAAIK,IAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK;AACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACjD,QAAQ,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACvD,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACrC;AACA,MAAM,IAAI,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;AACtD,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;AACvD,OAAO;AACP,MAAM,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C,MAAM,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;AACrC;AACA,MAAM,IAAI,EAAE,IAAI,SAAS,EAAE;AAC3B,QAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC,QAAQ,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACpC,OAAO,MAAM;AACb,QAAQ,cAAc,GAAG,UAAU;AACnC,UAAU,gBAAgB;AAC1B,UAAU,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY;AACpD,UAAU,OAAO;AACjB,SAAS,CAAC;AACV,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE;AAClC,MAAM,UAAU,EAAE,GAAG;AACrB,MAAM,UAAU,EAAE,MAAM;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC,QAAQ,YAAY,CAAC,cAAc,CAAC,CAAC;AACrC,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,cAAc,GAAG,UAAU;AAC/B,MAAM,gBAAgB;AACtB,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY;AAChD,KAAK,CAAC;AACN,GAAG;AACH,CAAC;AACD;AACA,eAAe,GAAG;AAClB,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;AACxB,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC;AAC5D,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACrC;AACA,IAAI,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;AACjC,OAAO,MAAM,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrE,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,cAAc,CAAC,CAAC;AAC5C,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC1F,IAAI,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AACjE,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1C,CAAC;AACD;AACA,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE;AACzB,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE;AAC9B,EAAE,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AACrG,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAC7C;AACA,EAAE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,CAAC,SAAS,EAAE;AAC1B,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5F,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,CAAC,KAAK,EAAE;AAC3B,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,OAAO,IAAI,CAAC;AACvD;AACA;AACA,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACtD,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AACxB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpD,EAAE,OAAO,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACzB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;AACtC;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7C,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,EAAE,WAAW,GAAG,WAAW,IAAI,IAAI;AACnC,MAAM,WAAW;AACjB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7D;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO;AACnD;AACA;AACA,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE;AAC7E,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,GAAG;AACH;AACA;AACA;AACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACvC,EAAE,MAAM,uBAAuB,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AACnD;AACA;AACA,EAAE,uBAAuB,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE;AACA;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAChD,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACxC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxC,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC;AACrB,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC3E,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACzE,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;AAChE,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,OAAO;AACjC,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,EAAE,MAAM,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAC5D,EAAE,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxE;AACA;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACjC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,IAAI,EAAE;AACjB,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAC;AACvB,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpC,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,IAAI,EAAE;AACjB,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO;AACvB,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;AACtC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;AAC7B,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO;AACtB,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,EAAE,IAAI,CAAC,IAAI,EAAE;AACb,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAClC,GAAG;AACH,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AACD;AACA,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE;AACtB,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;AAC1B,EAAE,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AACzE,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5B,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM;AAC/B,IAAI,MAAM,GAAG,SAAS,CAAC;AACvB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;AAC7B,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,MAAM,MAAM,GAAG,SAAS,CAAC;AACzB,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA,CAAC;AACD;AACA;kBACiB,GAAG,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK;AAClC,EAAE,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACzC,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrB,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AACF;cACa,GAAG;;ACn8BT,eAAe,iBAAiB,CACrC,EAAE,KAAK,EAAiB,EACxB,GAAmB,EACnB,YAAiC;IAEjC,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;KACzC;IAED,IAAI,KAAK,EAAE;;QAET,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;KACxD;SAAM;QACL,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,kBAAkB,CACxC;YACE,GAAG,YAAY;YACf,UAAU,EAAE,IAAI;SACjB,EACD,GAAG,CACJ,CAAA;KACF;AACH,CAAC;AAEM,eAAe,kBAAkB,CACtC,MAAsB;IAEtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAE1C,MAAM,WAAW,GAAGD,UAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAA;IAE5E,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,WAAW,CAAA;IAC1C,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;QACzB,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACxB,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC;QAC1B,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC;KAC3B,CAAC,CAAA;IACF,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAA;KAClE;IACD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA+B;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI;YACF,OAAOC,WAAE,CAAC,YAAY,CAACzB,aAAI,CAAC,OAAO,CAAC,KAAe,CAAC,CAAC,CAAA;SACtD;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,KAAK,CAAA;SACb;KACF;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;AAQA,eAAe,iBAAiB;IAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,oDAAO,mBAAY,4CAAC,CAAA;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE;QAC1B,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,IAAI;QACb,UAAU,EAAE;;;;;YAKV;gBACE,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,IAAI;gBACjB,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,IAAI;gBACpB,eAAe,EAAE,IAAI;gBACrB,gBAAgB,EAAE,IAAI;aACvB;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,IAAI;gBACjB,YAAY,EAAE,IAAI;aACnB;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE;oBACR;;wBAEE,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,WAAW;qBACnB;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,uBAAuB;qBAC/B;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,QAAQ;qBAChB;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,UAAU;qBAClB;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,OAAO;qBACf;oBACD;;wBAEE,IAAI,EAAE,CAAC;wBACP,EAAE,EAAE,WAAW;qBAChB;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,EAAE,EAAE,SAAS;qBACd;iBACF;aACF;SACF;KACF,CAAC,CAAA;IACF,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;AACjC,CAAC;AAED,eAAe,cAAc,CAAC,MAAsB;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,MAAM,iBAAiB,EAAE,CAAA;IAEtD,MAAM,SAAS,GAAGA,aAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAEzD,IAAI;QACF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxCoC,aAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACnBA,aAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;SAChC,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE;YAChE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;SACtC;QAED,OAAO,OAAO,CAAA;KACf;IAAC,MAAM;QACN,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACzCA,aAAG;aACA,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aAC3C,IAAI,CAAC,MAAMA,aAAG,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aAC7C,KAAK,CAAC,SAAQ,CAAC,CAAA;QAClB,OAAO,OAAO,CAAA;KACf;AACH,CAAC;AAEM,eAAe,eAAe,CACnC,UAAsB,EACtB,aAKC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;QACjC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAAA;QAEtD,MAAM,OAAO,GAAG,CAAC,CAA4B;YAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;gBAC3B,IAAI,UAAU,EAAE;oBACd,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;oBAC3C,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,oBAAoB,CAAC,CAAC,CAAA;iBACpD;qBAAM;oBACL,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,mCAAmC,CAAC,CAAA;oBAC5D,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;iBAChC;aACF;iBAAM;gBACL,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBAC3C,MAAM,CAAC,CAAC,CAAC,CAAA;aACV;SACF,CAAA;QAED,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAE/B,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;YAC5B,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAA;SACd,CAAC,CAAA;KACH,CAAC,CAAA;AACJ;;;;ICnMA,SAAc,GAAG;AACjB,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC;AAC1D,EAAE,IAAI,EAAE,sCAAsC;AAC9C,EAAE,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;AACpC,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC;AACjC,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,EAAE,IAAI,EAAE,MAAM,EAAE;AAChB,CAAC;;ACPD,MAAM,gBAAE+O,cAAY,EAAE,GAAGzU,SAAsB,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS0U,QAAM,CAAC,IAAI,EAAE,WAAW,EAAE;AACnC,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAOD,cAAY,CAAC;AAC7C,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC;AACA,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACjD,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;AACjB;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;AACzB,GAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,WAAW,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3D;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE;AAC/B;AACA,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC/B,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,eAAa,CAAC,GAAG,EAAE;AAC5B,EAAE,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE;AAChD,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC;AACtB,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;AAC3E,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,UAAQ,CAAC,IAAI,EAAE;AACxB,EAAEA,UAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B;AACA,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC;AACzC;AACA,EAAE,IAAI,GAAG,CAAC;AACV;AACA,EAAE,IAAI,IAAI,YAAY,WAAW,EAAE;AACnC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,GAAG,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACrE,GAAG,MAAM;AACT,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAIA,UAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AACD;AACA,IAAI;AACJ,EAAE,MAAM,UAAU,GAAG,QAAQ,YAAY,CAAC,CAAC;AAC3C,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC;AACjD;AACA,EAAEC,oBAAc,GAAG;AACnB,YAAIH,QAAM;AACV,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AAC/C,MAAM,IAAI,MAAM,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACnE,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACzD,KAAK;AACL,mBAAIC,eAAa;AACjB,cAAIC,UAAQ;AACZ,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;AACzB,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACpD,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACnC,KAAK;AACL,GAAG,CAAC;AACJ,CAAC,CAAC,OAAO,CAAC,6BAA6B;AACvC,EAAEC,oBAAc,GAAG;AACnB,YAAIH,QAAM;AACV,IAAI,IAAI,EAAE,KAAK;AACf,mBAAIC,eAAa;AACjB,cAAIC,UAAQ;AACZ,IAAI,MAAM,EAAE,OAAO;AACnB,GAAG,CAAC;AACJ;;AC9HA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA,MAAME,SAAO,CAAC;AACd;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,WAAW,EAAE;AAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM;AACxB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACrB,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACnB,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,QAAQ,CAAC;AAC/C,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,GAAG,EAAE;AACX,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,IAAI,CAAC,GAAG;AACX,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE,OAAO;AAClD;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACpC;AACA,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACrB,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,KAAK;AACL,GAAG;AACH,CAAC;AACD;IACA,OAAc,GAAGA,SAAO;;ACpDxB,MAAMC,MAAI,GAAG/U,qBAAe,CAAC;AAC7B;AACA,MAAM,UAAU,GAAGU,oBAAwB,CAAC;AAC5C,MAAM,OAAO,GAAGO,OAAoB,CAAC;AACrC,MAAM,eAAE+T,aAAW,QAAEC,MAAI,EAAE,GAAGzS,SAAsB,CAAC;AACrD;AACA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACtD,MAAM,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACxD,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC;AAChB;AACA;AACA;AACA;AACA,MAAM0S,mBAAiB,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC7C,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,EAAE,CAAC;AAClC,IAAI,IAAI,CAAC,UAAU;AACnB,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;AAC7E,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;AAChC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB;AACA,IAAI,IAAI,CAAC,WAAW,EAAE;AACtB,MAAM,MAAM,WAAW;AACvB,QAAQ,IAAI,CAAC,QAAQ,CAAC,gBAAgB,KAAK,SAAS;AACpD,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB;AAC1C,YAAY,EAAE,CAAC;AACf,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;AAC7C,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,aAAa,GAAG;AAC7B,IAAI,OAAO,oBAAoB,CAAC;AAChC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE;AAC/C,MAAM,MAAM,CAAC,0BAA0B,GAAG,IAAI,CAAC;AAC/C,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE;AAC/C,MAAM,MAAM,CAAC,0BAA0B,GAAG,IAAI,CAAC;AAC/C,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;AAC3C,MAAM,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACxE,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;AAC3C,MAAM,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACxE,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,IAAI,IAAI,EAAE;AAC1D,MAAM,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;AAC3C,KAAK;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,cAAc,EAAE;AACzB,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AAC1D;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;AAChC,QAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;AAC3C,QAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAC5C;AACA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC5B,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChD;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC5B,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B;AACA,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,QAAQ;AAChB,UAAU,IAAI,KAAK;AACnB,YAAY,8DAA8D;AAC1E,WAAW;AACX,SAAS,CAAC;AACV,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,MAAM,EAAE;AACzB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;AAC7C,MAAM;AACN,QAAQ,CAAC,IAAI,CAAC,uBAAuB,KAAK,KAAK;AAC/C,UAAU,MAAM,CAAC,0BAA0B;AAC3C,SAAS,MAAM,CAAC,sBAAsB;AACtC,WAAW,IAAI,CAAC,mBAAmB,KAAK,KAAK;AAC7C,aAAa,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ;AACzD,cAAc,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACzE,SAAS,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ;AACrD,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC;AACzC,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP;AACA,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,MAAM,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACtE,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,uBAAuB,EAAE;AACtC,MAAM,QAAQ,CAAC,0BAA0B,GAAG,IAAI,CAAC;AACjD,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,uBAAuB,EAAE;AACtC,MAAM,QAAQ,CAAC,0BAA0B,GAAG,IAAI,CAAC;AACjD,KAAK;AACL,IAAI,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ,EAAE;AACtD,MAAM,QAAQ,CAAC,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACjE,KAAK;AACL,IAAI,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ,EAAE;AACtD,MAAM,QAAQ,CAAC,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACjE,KAAK,MAAM;AACX,MAAM,QAAQ,CAAC,sBAAsB,KAAK,IAAI;AAC9C,MAAM,IAAI,CAAC,mBAAmB,KAAK,KAAK;AACxC,MAAM;AACN,MAAM,OAAO,QAAQ,CAAC,sBAAsB,CAAC;AAC7C,KAAK;AACL;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,QAAQ,EAAE;AAC3B,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/B;AACA,IAAI;AACJ,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,KAAK,KAAK;AACrD,MAAM,MAAM,CAAC,0BAA0B;AACvC,MAAM;AACN,MAAM,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;AAC3E,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;AACxC,MAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,KAAK,QAAQ,EAAE;AACjE,QAAQ,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAC1E,OAAO;AACP,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,KAAK,KAAK;AACjD,OAAO,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,KAAK,QAAQ;AAC5D,QAAQ,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAC1E,MAAM;AACN,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ,0DAA0D;AAClE,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,cAAc,EAAE;AAClC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACvC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAC3C,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC;AACA,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;AAC9E,SAAS;AACT;AACA,QAAQ,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB;AACA,QAAQ,IAAI,GAAG,KAAK,wBAAwB,EAAE;AAC9C,UAAU,IAAI,KAAK,KAAK,IAAI,EAAE;AAC9B,YAAY,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;AAC/B,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE;AAC/D,cAAc,MAAM,IAAI,SAAS;AACjC,gBAAgB,CAAC,6BAA6B,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChE,eAAe,CAAC;AAChB,aAAa;AACb,YAAY,KAAK,GAAG,GAAG,CAAC;AACxB,WAAW,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACtC,YAAY,MAAM,IAAI,SAAS;AAC/B,cAAc,CAAC,6BAA6B,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9D,aAAa,CAAC;AACd,WAAW;AACX,SAAS,MAAM,IAAI,GAAG,KAAK,wBAAwB,EAAE;AACrD,UAAU,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;AAC7B,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE;AAC7D,YAAY,MAAM,IAAI,SAAS;AAC/B,cAAc,CAAC,6BAA6B,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9D,aAAa,CAAC;AACd,WAAW;AACX,UAAU,KAAK,GAAG,GAAG,CAAC;AACtB,SAAS,MAAM;AACf,UAAU,GAAG,KAAK,4BAA4B;AAC9C,UAAU,GAAG,KAAK,4BAA4B;AAC9C,UAAU;AACV,UAAU,IAAI,KAAK,KAAK,IAAI,EAAE;AAC9B,YAAY,MAAM,IAAI,SAAS;AAC/B,cAAc,CAAC,6BAA6B,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9D,aAAa,CAAC;AACd,WAAW;AACX,SAAS,MAAM;AACf,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,SAAS;AACT;AACA,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC5B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,cAAc,CAAC;AAC1B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE;AAClC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;AACnD,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC9B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE;AAChC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AAC9B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;AACjD,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC9B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE;AACnC,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1D;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAChD,MAAM,MAAM,UAAU;AACtB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;AAC5C,YAAYH,MAAI,CAAC,oBAAoB;AACrC,YAAY,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B;AACA,MAAM,IAAI,CAAC,QAAQ,GAAGA,MAAI,CAAC,gBAAgB,CAAC;AAC5C,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB;AAC3C,QAAQ,UAAU;AAClB,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;AAC/C,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AACnC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAChD,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC9C,KAAK;AACL;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;AACxC;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9B,IAAI,IAAI,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC1C;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;AAC9B,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxC;AACA,MAAM,IAAI,GAAG,EAAE;AACf,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,QAAQ,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtB,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM;AACpC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/B,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACnC,OAAO,CAAC;AACR;AACA,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE;AACnD,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AACrC;AACA,QAAQ,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE;AACnE,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAChC,SAAS;AACT,OAAO;AACP;AACA,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE;AACjC,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1D;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAChD,MAAM,MAAM,UAAU;AACtB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;AAC5C,YAAYA,MAAI,CAAC,oBAAoB;AACrC,YAAY,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B;AACA,MAAM,IAAI,CAAC,QAAQ,GAAGA,MAAI,CAAC,gBAAgB,CAAC;AAC5C,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB;AAC3C,QAAQ,UAAU;AAClB,OAAO,CAAC,CAAC;AACT;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAEE,MAAI,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC9C,KAAK;AACL;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;AACxC;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAACF,MAAI,CAAC,YAAY,EAAE,MAAM;AACjD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC1B;AACA;AACA;AACA,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM;AAClC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/B,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACnC,OAAO,CAAC;AACR;AACA,MAAM,IAAI,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AACtC;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AACnC;AACA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE;AACjE,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC9B,OAAO;AACP;AACA,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3B,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD;IACA,iBAAc,GAAGG,mBAAiB,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;AACrC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;AACrC;AACA,EAAE;AACF,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,WAAW,GAAG,CAAC;AAC5C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,WAAW;AAC9D,IAAI;AACJ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,IAAI,OAAO;AACX,GAAG;AACH;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;AAC7D,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,mCAAmC,CAAC;AAC1D,EAAE,IAAI,CAAC,MAAM,CAAC,CAACF,aAAW,CAAC,GAAG,IAAI,CAAC;AACnC,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC7C,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE;AAC7B;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3C,EAAE,GAAG,CAACA,aAAW,CAAC,GAAG,IAAI,CAAC;AAC1B,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;AACvB;;;;ACngBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASG,mBAAiB,CAAC,IAAI,EAAE;AACjC,EAAE;AACF,IAAI,CAAC,IAAI,IAAI,IAAI;AACjB,MAAM,IAAI,IAAI,IAAI;AAClB,MAAM,IAAI,KAAK,IAAI;AACnB,MAAM,IAAI,KAAK,IAAI;AACnB,MAAM,IAAI,KAAK,IAAI;AACnB,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AAClC,IAAI;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;AAC3B,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACzB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ;AACA,EAAE,OAAO,CAAC,GAAG,GAAG,EAAE;AAClB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;AAC/B;AACA,MAAM,CAAC,EAAE,CAAC;AACV,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;AACzC;AACA,MAAM;AACN,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG;AACrB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI;AACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI;AAChC,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP;AACA,MAAM,CAAC,IAAI,CAAC,CAAC;AACb,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;AACzC;AACA,MAAM;AACN,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG;AACpB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI;AACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI;AACpC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC;AACzD,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC;AACzD,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP;AACA,MAAM,CAAC,IAAI,CAAC,CAAC;AACb,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;AACzC;AACA,MAAM;AACN,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG;AACpB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI;AACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI;AACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI;AACpC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC;AACzD,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9C,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;AACrB,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP;AACA,MAAM,CAAC,IAAI,CAAC,CAAC;AACb,KAAK,MAAM;AACX,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA,IAAI;AACJ,EAAE,IAAI,WAAW,GAAG,QAAQ,gBAAgB,CAAC,CAAC;AAC9C;AACA;AACA,EAAE,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACvC,IAAI,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC;AACrD,GAAG;AACH;AACA,EAAEC,kBAAc,GAAG;AACnB,uBAAID,mBAAiB;AACrB,IAAI,WAAW,CAAC,GAAG,EAAE;AACrB,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;AACrE,KAAK;AACL,GAAG,CAAC;AACJ,CAAC,CAAC,OAAO,CAAC,6BAA6B;AACvC,EAAEC,kBAAc,GAAG;AACnB,uBAAID,mBAAiB;AACrB,IAAI,WAAW,EAAE,YAAY;AAC7B,GAAG,CAAC;AACJ;;ACrGA,MAAM,YAAEE,UAAQ,EAAE,GAAGrV,qBAAiB,CAAC;AACvC;AACA,MAAMkV,mBAAiB,GAAGxU,iBAA+B,CAAC;AAC1D,MAAM;AACN,gBAAE4U,cAAY;AACd,gBAAEb,cAAY;AACd,eAAEO,aAAW;AACb,cAAEO,YAAU;AACZ,CAAC,GAAGtU,SAAsB,CAAC;AAC3B,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAGuB,oBAAwB,CAAC;AACnE,MAAM,qBAAE2S,mBAAiB,EAAE,WAAW,EAAE,GAAGnN,kBAAuB,CAAC;AACnE;AACA,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAMwN,UAAQ,SAASH,UAAQ,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC5D,IAAI,KAAK,EAAE,CAAC;AACZ;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU,IAAIC,cAAY,CAAC,CAAC,CAAC,CAAC;AACrD,IAAI,IAAI,CAACC,YAAU,CAAC,GAAG,SAAS,CAAC;AACjC,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,EAAE,CAAC;AACxC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;AAChC,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;AACtC;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvB;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC7B,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AAC3B,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACzB,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACzB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AACtB,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB;AACA,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC3B,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC9B,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;AACtE;AACA,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,MAAM,CAAC;AACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,CAAC,EAAE;AACb,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;AAC7B;AACA,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACpE;AACA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AACrC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,KAAK;AACL;AACA,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACtC;AACA,IAAI,GAAG;AACP,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC;AACA,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;AAC3B,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/C,OAAO,MAAM;AACb,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxC,OAAO;AACP;AACA,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC;AACtB,KAAK,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpB;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,EAAE,EAAE;AAChB,IAAI,IAAI,GAAG,CAAC;AACZ,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB;AACA,IAAI,GAAG;AACP,MAAM,QAAQ,IAAI,CAAC,MAAM;AACzB,QAAQ,KAAK,QAAQ;AACrB,UAAU,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAC/B,UAAU,MAAM;AAChB,QAAQ,KAAK,qBAAqB;AAClC,UAAU,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1C,UAAU,MAAM;AAChB,QAAQ,KAAK,qBAAqB;AAClC,UAAU,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1C,UAAU,MAAM;AAChB,QAAQ,KAAK,QAAQ;AACrB,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC;AACzB,UAAU,MAAM;AAChB,QAAQ,KAAK,QAAQ;AACrB,UAAU,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,UAAU,MAAM;AAChB,QAAQ;AACR;AACA,UAAU,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC7B,UAAU,OAAO;AACjB,OAAO;AACP,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE;AACzB;AACA,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;AACjC,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChC;AACA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;AAClC,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAOvK,OAAK;AAClB,QAAQ,UAAU;AAClB,QAAQ,6BAA6B;AACrC,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,2BAA2B;AACnC,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC;AAChD;AACA,IAAI,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,CAACkK,mBAAiB,CAAC,aAAa,CAAC,EAAE;AAC1E,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAOlK,OAAK;AAClB,QAAQ,UAAU;AAClB,QAAQ,oBAAoB;AAC5B,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,yBAAyB;AACjC,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC;AACzC,IAAI,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACjC,IAAI,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACxC;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AAC/B,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,oBAAoB;AAC9B,UAAU,IAAI;AACd,UAAU,IAAI;AACd,UAAU,yBAAyB;AACnC,SAAS,CAAC;AACV,OAAO;AACP;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC7B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,kBAAkB;AAC5B,UAAU,IAAI;AACd,UAAU,IAAI;AACd,UAAU,uBAAuB;AACjC,SAAS,CAAC;AACV,OAAO;AACP;AACA,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;AACtC,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AAC/D,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC5B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,UAAU,IAAI;AACd,UAAU,IAAI;AACd,UAAU,uBAAuB;AACjC,SAAS,CAAC;AACV,OAAO;AACP;AACA,MAAM,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AACpC,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE;AAC3D,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,iBAAiB;AAC3B,UAAU,IAAI;AACd,UAAU,IAAI;AACd,UAAU,qBAAqB;AAC/B,SAAS,CAAC;AACV,OAAO;AACP;AACA,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,oBAAoB;AAC9B,UAAU,IAAI;AACd,UAAU,IAAI;AACd,UAAU,yBAAyB;AACnC,SAAS,CAAC;AACV,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,EAAE;AACtC,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,CAAC,uBAAuB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACzD,UAAU,IAAI;AACd,UAAU,IAAI;AACd,UAAU,uCAAuC;AACjD,SAAS,CAAC;AACV,OAAO;AACP,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAOA,OAAK;AAClB,QAAQ,UAAU;AAClB,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,uBAAuB;AAC/B,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;AACzE,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC;AAC5C;AACA,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AACxB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,kBAAkB;AAC5B,UAAU,IAAI;AACd,UAAU,IAAI;AACd,UAAU,sBAAsB;AAChC,SAAS,CAAC;AACV,OAAO;AACP,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AAC7B,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAOA,OAAK;AAClB,QAAQ,UAAU;AAClB,QAAQ,oBAAoB;AAC5B,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,wBAAwB;AAChC,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC;AACzE,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC;AAC9E,SAAS,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;AACjC,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;AACjC,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChC,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE;AACxC,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAOA,OAAK;AAClB,QAAQ,UAAU;AAClB,QAAQ,wDAAwD;AAChE,QAAQ,KAAK;AACb,QAAQ,IAAI;AACZ,QAAQ,wCAAwC;AAChD,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACtE,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE;AACpD,MAAM,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,cAAc,CAAC;AACtD,MAAM,IAAI,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;AAC/E,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,2BAA2B;AACrC,UAAU,KAAK;AACf,UAAU,IAAI;AACd,UAAU,mCAAmC;AAC7C,SAAS,CAAC;AACV,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC7C,SAAS,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAChC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;AACjC,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC3B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,EAAE,EAAE;AACd,IAAI,IAAI,IAAI,GAAGyJ,cAAY,CAAC;AAC5B;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AACrD,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC/C,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AAC9B,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB;AACA;AACA;AACA;AACA,MAAM,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACrD,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC9B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE;AACvB,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAACS,mBAAiB,CAAC,aAAa,CAAC,CAAC;AAChF;AACA,IAAI,iBAAiB,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK;AAChE,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9B;AACA,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;AACtB,QAAQ,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC;AAC1C,QAAQ,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;AAC5E,UAAU,OAAO,EAAE;AACnB,YAAYlK,OAAK;AACjB,cAAc,UAAU;AACxB,cAAc,2BAA2B;AACzC,cAAc,KAAK;AACnB,cAAc,IAAI;AAClB,cAAc,mCAAmC;AACjD,aAAa;AACb,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,OAAO;AACP;AACA,MAAM,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC,MAAM,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5B;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACzB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACnB,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AACxC;AACA,MAAM,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AACnC,MAAM,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAC9B,MAAM,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AAC3B,MAAM,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AAC3B;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC;AACjB;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;AAC/C,UAAU,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAClD,SAAS,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,aAAa,EAAE;AACvD,UAAU,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;AACjE,SAAS,MAAM;AACf,UAAU,IAAI,GAAG,SAAS,CAAC;AAC3B,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACnC,OAAO,MAAM;AACb,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACrD;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AAC/B,UAAU,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC7B,UAAU,OAAOA,OAAK;AACtB,YAAY,KAAK;AACjB,YAAY,wBAAwB;AACpC,YAAY,IAAI;AAChB,YAAY,IAAI;AAChB,YAAY,qBAAqB;AACjC,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC3B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,IAAI,EAAE;AACvB,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AAC/B,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB;AACA,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;AACnB,OAAO,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,QAAQ,OAAOA,OAAK;AACpB,UAAU,UAAU;AACpB,UAAU,0BAA0B;AACpC,UAAU,IAAI;AACd,UAAU,IAAI;AACd,UAAU,uCAAuC;AACjD,SAAS,CAAC;AACV,OAAO,MAAM;AACb,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1C;AACA,QAAQ,IAAI,CAACmK,mBAAiB,CAAC,IAAI,CAAC,EAAE;AACtC,UAAU,OAAOnK,OAAK;AACtB,YAAY,UAAU;AACtB,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AACzC,YAAY,IAAI;AAChB,YAAY,IAAI;AAChB,YAAY,2BAA2B;AACvC,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClC;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AAC/B,UAAU,OAAOA,OAAK;AACtB,YAAY,KAAK;AACjB,YAAY,wBAAwB;AACpC,YAAY,IAAI;AAChB,YAAY,IAAI;AAChB,YAAY,qBAAqB;AACjC,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpD,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;AACnB,OAAO;AACP,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACtC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC3B,GAAG;AACH,CAAC;AACD;IACA,QAAc,GAAGwK,UAAQ,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASxK,OAAK,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;AAClE,EAAE,MAAM,GAAG,GAAG,IAAI,SAAS;AAC3B,IAAI,MAAM,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO;AAC5D,GAAG,CAAC;AACJ;AACA,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAEA,OAAK,CAAC,CAAC;AACtC,EAAE,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;AACvB,EAAE,GAAG,CAACgK,aAAW,CAAC,GAAG,UAAU,CAAC;AAChC,EAAE,OAAO,GAAG,CAAC;AACb;;;ACxlBA,MAAM,EAAE,cAAc,EAAE,GAAG/T,qBAAiB,CAAC;AAC7C;AACA,MAAMiU,mBAAiB,GAAG1S,iBAA+B,CAAC;AAC1D,MAAM,gBAAEiS,cAAY,EAAE,GAAGzM,SAAsB,CAAC;AAChD,MAAM,EAAE,iBAAiB,EAAE,GAAGc,kBAAuB,CAAC;AACtD,MAAM,EAAE,IAAI,EAAE,SAAS,YAAE8L,UAAQ,EAAE,GAAG7L,oBAAwB,CAAC;AAC/D;AACA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA,MAAM0M,QAAM,CAAC;AACb;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE;AAClC,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,EAAE,CAAC;AACxC,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AAC1B;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC/B,IAAI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC3B;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE;AAC9B,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;AACnD,IAAI,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,IAAI,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;AACpC;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE;AAC9B,MAAM,MAAM,IAAI,CAAC,CAAC;AAClB,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AAClC,MAAM,MAAM,IAAI,CAAC,CAAC;AAClB,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;AAC7E;AACA,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;AACrE,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxC;AACA,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;AAC9B;AACA,IAAI,IAAI,aAAa,KAAK,GAAG,EAAE;AAC/B,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC3C,KAAK,MAAM,IAAI,aAAa,KAAK,GAAG,EAAE;AACtC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC3C,KAAK;AACL;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC7C;AACA,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B;AACA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACtB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC;AACA,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACzD,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AACtB,KAAK;AACL;AACA,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AAC9B,IAAI,IAAI,GAAG,CAAC;AACZ;AACA,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AAC5B,MAAM,GAAG,GAAGhB,cAAY,CAAC;AACzB,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AACrE,MAAM,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;AAC9E,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE;AAClD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACjC,KAAK,MAAM;AACX,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC7C;AACA,MAAM,IAAI,MAAM,GAAG,GAAG,EAAE;AACxB,QAAQ,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC,CAAC;AAC/E,OAAO;AACP;AACA,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3C,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACjC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzB,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAClD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAClC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AAC1B,IAAI,IAAI,CAAC,SAAS;AAClB,MAAMgB,QAAM,CAAC,KAAK,CAAC,IAAI,EAAE;AACzB,QAAQ,GAAG,EAAE,IAAI;AACjB,QAAQ,IAAI,EAAE,KAAK;AACnB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI;AACZ,QAAQ,QAAQ,EAAE,KAAK;AACvB,OAAO,CAAC;AACR,MAAM,EAAE;AACR,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AACvB,IAAI,MAAM,GAAG,GAAGb,UAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B;AACA,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;AAC1B,MAAM,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;AAC/E,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAEA,UAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AACpE,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAEA,UAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACpD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;AACnC,IAAI,IAAI,CAAC,SAAS;AAClB,MAAMa,QAAM,CAAC,KAAK,CAAC,IAAI,EAAE;AACzB,QAAQ,GAAG,EAAE,IAAI;AACjB,QAAQ,IAAI,EAAE,KAAK;AACnB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI;AACZ,QAAQ,QAAQ;AAChB,OAAO,CAAC;AACR,MAAM,EAAE;AACR,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AACvB,IAAI,MAAM,GAAG,GAAGb,UAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B;AACA,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;AAC1B,MAAM,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;AAC/E,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAEA,UAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AACpE,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAEA,UAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACpD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;AACnC,IAAI,IAAI,CAAC,SAAS;AAClB,MAAMa,QAAM,CAAC,KAAK,CAAC,IAAI,EAAE;AACzB,QAAQ,GAAG,EAAE,IAAI;AACjB,QAAQ,IAAI,EAAE,KAAK;AACnB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI;AACZ,QAAQ,QAAQ;AAChB,OAAO,CAAC;AACR,MAAM,EAAE;AACR,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;AAC1B,IAAI,MAAM,GAAG,GAAGb,UAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAACM,mBAAiB,CAAC,aAAa,CAAC,CAAC;AAChF,IAAI,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;AAChC;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAClC,MAAM,IAAI,IAAI,IAAI,iBAAiB,EAAE;AACrC,QAAQ,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,iBAAiB,CAAC,UAAU,CAAC;AAC1D,OAAO;AACP,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC5B,KAAK,MAAM;AACX,MAAM,IAAI,GAAG,KAAK,CAAC;AACnB,MAAM,MAAM,GAAG,CAAC,CAAC;AACjB,KAAK;AACL;AACA,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAChD;AACA,IAAI,IAAI,iBAAiB,EAAE;AAC3B,MAAM,MAAM,IAAI,GAAG;AACnB,QAAQ,GAAG,EAAE,OAAO,CAAC,GAAG;AACxB,QAAQ,IAAI;AACZ,QAAQ,MAAM;AACd,QAAQ,IAAI,EAAE,OAAO,CAAC,IAAI;AAC1B,QAAQ,QAAQ,EAAEN,UAAQ,CAAC,QAAQ;AACnC,OAAO,CAAC;AACR;AACA,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;AAC3B,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACrD,OAAO;AACP,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,SAAS;AACpB,QAAQa,QAAM,CAAC,KAAK,CAAC,GAAG,EAAE;AAC1B,UAAU,GAAG,EAAE,OAAO,CAAC,GAAG;AAC1B,UAAU,IAAI,EAAE,KAAK;AACrB,UAAU,MAAM;AAChB,UAAU,IAAI,EAAE,OAAO,CAAC,IAAI;AAC5B,UAAU,QAAQ,EAAEb,UAAQ,CAAC,QAAQ;AACrC,SAAS,CAAC;AACV,QAAQ,EAAE;AACV,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;AACxC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,MAAM,IAAI,CAAC,SAAS,CAACa,QAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACtD,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAACP,mBAAiB,CAAC,aAAa,CAAC,CAAC;AAChF;AACA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC;AACvC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK;AAC9D,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAClC,QAAQ,MAAM,GAAG,GAAG,IAAI,KAAK;AAC7B,UAAU,uDAAuD;AACjE,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9C;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C;AACA,UAAU,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5D,SAAS;AACT;AACA,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC;AACzC,MAAM,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC9B,MAAM,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC/B,MAAM,IAAI,CAAC,SAAS,CAACO,QAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACrB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACnD,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACzC;AACA,MAAM,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,MAAM,EAAE;AAClB,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE;AACtB,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtC,KAAK;AACL,GAAG;AACH,CAAC;AACD;IACA,MAAc,GAAGA,QAAM;;ACtZvB;AACA;AACA;AACA;AACA;AACA,MAAM,KAAK,CAAC;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE;AAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,SAAS,KAAK,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE;AAC5B,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC7B;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,SAAS,KAAK,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;AACpC,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC3B;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,eAAe,CAAC;AACzE,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,SAAS,SAAS,KAAK,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,EAAE;AACtB,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1B,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,SAAS,KAAK,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC3B;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AACjC,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW,GAAG;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC5C,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,OAAO;AAC/C;AACA,IAAI,SAAS,SAAS,CAAC,IAAI,EAAE;AAC7B,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,KAAK;AACL;AACA,IAAI,SAAS,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE;AACpC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/D,KAAK;AACL;AACA,IAAI,SAAS,OAAO,CAAC,KAAK,EAAE;AAC5B,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACvD,KAAK;AACL;AACA,IAAI,SAAS,MAAM,GAAG;AACtB,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;AAC3D;AACA,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AAC5B,MAAM,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC;AACrC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACpC,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;AACjC,MAAM,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;AACnC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;AACjC,MAAM,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;AACnC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE;AAChC,MAAM,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;AAClC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjC,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE;AACtC,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3C;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC5E,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,OAAO;AACP,KAAK;AACL,GAAG;AACH,CAAC,CAAC;AACF;IACA,WAAc,GAAG,WAAW;;ACrL5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG;AACnB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAChC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASzS,OAAK,CAAC,MAAM,EAAE;AACvB,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC;AACA,EAAE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,OAAO,MAAM,CAAC;AAC3D;AACA,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC,EAAE,IAAI,YAAY,GAAG,KAAK,CAAC;AAC3B,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC;AACzB,EAAE,IAAI,QAAQ,GAAG,KAAK,CAAC;AACvB,EAAE,IAAI,aAAa,CAAC;AACpB,EAAE,IAAI,SAAS,CAAC;AAChB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACjB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACf,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ;AACA,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjC,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC;AACA,IAAI,IAAI,aAAa,KAAK,SAAS,EAAE;AACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChD,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AACpC,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,cAAc,IAAI,KAAK,IAAI,aAAa;AACtE,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAChD,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,cAAc,IAAI,KAAK,IAAI,YAAY;AACrE,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAC1B,UAAU,MAAM,IAAI,WAAW,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,SAAS;AACT;AACA,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAChC,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC9C,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AAC3B,UAAU,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACrC,UAAU,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,SAAS,MAAM;AACf,UAAU,aAAa,GAAG,IAAI,CAAC;AAC/B,SAAS;AACT;AACA,QAAQ,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACzB,OAAO,MAAM;AACb,QAAQ,MAAM,IAAI,WAAW,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,OAAO;AACP,KAAK,MAAM,IAAI,SAAS,KAAK,SAAS,EAAE;AACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChD,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AACpC,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACjD,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAChD,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACjD,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAC1B,UAAU,MAAM,IAAI,WAAW,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,SAAS;AACT;AACA,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAChC,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AACrD,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AAC3B,UAAU,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAC9C,UAAU,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,UAAU,aAAa,GAAG,SAAS,CAAC;AACpC,SAAS;AACT;AACA,QAAQ,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACzB,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,cAAc,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AACxE,QAAQ,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3C,QAAQ,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACzB,OAAO,MAAM;AACb,QAAQ,MAAM,IAAI,WAAW,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,OAAO;AACP,KAAK,MAAM;AACX;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpC,UAAU,MAAM,IAAI,WAAW,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,SAAS;AACT,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AACpC,aAAa,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;AACpD,QAAQ,UAAU,GAAG,KAAK,CAAC;AAC3B,OAAO,MAAM,IAAI,QAAQ,EAAE;AAC3B,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpC,UAAU,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AACtC,SAAS,MAAM,IAAI,IAAI,KAAK,IAAI,cAAc,KAAK,KAAK,CAAC,CAAC,EAAE;AAC5D,UAAU,QAAQ,GAAG,KAAK,CAAC;AAC3B,UAAU,GAAG,GAAG,CAAC,CAAC;AAClB,SAAS,MAAM,IAAI,IAAI,KAAK,IAAI,YAAY;AAC5C,UAAU,UAAU,GAAG,IAAI,CAAC;AAC5B,SAAS,MAAM;AACf,UAAU,MAAM,IAAI,WAAW,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,SAAS;AACT,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;AACrE,QAAQ,QAAQ,GAAG,IAAI,CAAC;AACxB,OAAO,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACvD,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AACpC,OAAO,MAAM,IAAI,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;AACnE,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAChC,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACjD,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAC1B,UAAU,MAAM,IAAI,WAAW,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,SAAS;AACT;AACA,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAChC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7C,QAAQ,IAAI,YAAY,EAAE;AAC1B,UAAU,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC3C,UAAU,YAAY,GAAG,KAAK,CAAC;AAC/B,SAAS;AACT,QAAQ,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AAC3B,UAAU,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAC9C,UAAU,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,UAAU,aAAa,GAAG,SAAS,CAAC;AACpC,SAAS;AACT;AACA,QAAQ,SAAS,GAAG,SAAS,CAAC;AAC9B,QAAQ,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACzB,OAAO,MAAM;AACb,QAAQ,MAAM,IAAI,WAAW,CAAC,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,QAAQ,EAAE;AAChC,IAAI,MAAM,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAAC;AACrD,GAAG;AACH;AACA,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzC,EAAE,IAAI,aAAa,KAAK,SAAS,EAAE;AACnC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAChC,GAAG,MAAM;AACT,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE;AACjC,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAChC,KAAK,MAAM,IAAI,YAAY,EAAE;AAC7B,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AACxD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AACxC,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS0S,QAAM,CAAC,UAAU,EAAE;AAC5B,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAChC,KAAK,GAAG,CAAC,CAAC,SAAS,KAAK;AACxB,MAAM,IAAI,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,CAAC,cAAc,CAAC,CAAC;AAC5E,MAAM,OAAO,cAAc;AAC3B,SAAS,GAAG,CAAC,CAAC,MAAM,KAAK;AACzB,UAAU,OAAO,CAAC,SAAS,CAAC;AAC5B,aAAa,MAAM;AACnB,cAAc,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AAC7C,gBAAgB,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9D,gBAAgB,OAAO,MAAM;AAC7B,mBAAmB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,mBAAmB,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,eAAe,CAAC;AAChB,aAAa;AACb,aAAa,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,SAAS,CAAC;AACV,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,KAAK,CAAC;AACN,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AACD;IACA,SAAc,GAAG,UAAEA,QAAM,SAAE1S,OAAK,EAAE;;;AC3NlC;AACA,MAAMuP,cAAY,GAAGvS,qBAAiB,CAAC;AACvC,MAAM2V,OAAK,GAAGjV,qBAAgB,CAAC;AAC/B,MAAM8R,MAAI,GAAGvR,qBAAe,CAAC;AAC7B,MAAM,GAAG,GAAGuB,mBAAc,CAAC;AAC3B,MAAM,GAAG,GAAGwF,mBAAc,CAAC;AAC3B,MAAM,EAAE,WAAW,cAAEnC,YAAU,EAAE,GAAGiD,qBAAiB,CAAC;AAEtD,MAAM,OAAEnE,KAAG,EAAE,GAAGyK,qBAAc,CAAC;AAC/B;AACA,MAAM8F,mBAAiB,GAAGxF,iBAA+B,CAAC;AAC1D,MAAM,QAAQ,GAAGC,QAAqB,CAAC;AACvC,MAAM,MAAM,GAAG4E,MAAmB,CAAC;AACnC,MAAM;AACN,EAAE,YAAY;AACd,EAAE,YAAY;AACd,QAAEqB,MAAI;AACN,EAAE,WAAW;AACb,cAAEL,YAAU;AACZ,EAAE,IAAI;AACN,CAAC,GAAG3F,SAAsB,CAAC;AAC3B,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,GAAG4E,WAAyB,CAAC;AAC5E,MAAM,UAAEkB,QAAM,SAAE1S,OAAK,EAAE,GAAG6S,SAAsB,CAAC;AACjD,MAAM,YAAEjB,UAAQ,EAAE,GAAGkB,oBAAwB,CAAC;AAC9C;AACA,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAChE,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjC,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAS,SAASxD,cAAY,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE;AAC3C,IAAI,KAAK,EAAE,CAAC;AACZ;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACrC,IAAI,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AACjC,IAAI,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC5B,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,IAAI,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC1B,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACxB,IAAI,IAAI,CAAC,WAAW,GAAGwD,WAAS,CAAC,UAAU,CAAC;AAC5C,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB;AACA,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE;AAC1B,MAAM,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AAC/B,MAAM,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC7B,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAC1B;AACA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACpC,QAAQ,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,OAAO,MAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE;AACtE,QAAQ,OAAO,GAAG,SAAS,CAAC;AAC5B,QAAQ,SAAS,GAAG,SAAS,CAAC;AAC9B,OAAO;AACP;AACA,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACtD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC5B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;AACvB,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;AAC7C;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B;AACA;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAC1D,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC;AACnD;AACA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE;AAC1B;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE;AAC1B;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH;AACA;AACA,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH;AACA;AACA,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE;AAC5B;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC;AAC1B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,GAAG,GAAG;AACZ,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;AACtC,IAAI,MAAM,QAAQ,GAAG,IAAI,QAAQ;AACjC,MAAM,IAAI,CAAC,UAAU;AACrB,MAAM,IAAI,CAAC,WAAW;AACtB,MAAM,IAAI,CAAC,SAAS;AACpB,MAAM,UAAU;AAChB,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxD,IAAI,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC9B,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AAC1B;AACA,IAAI,QAAQ,CAACR,YAAU,CAAC,GAAG,IAAI,CAAC;AAChC,IAAI,MAAM,CAACA,YAAU,CAAC,GAAG,IAAI,CAAC;AAC9B;AACA,IAAI,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAChD,IAAI,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC1C,IAAI,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC1C,IAAI,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAC9C,IAAI,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACxC,IAAI,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACxC;AACA,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;AACxB;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9C;AACA,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACtC,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACpC,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAClC,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,EAAES,eAAa,CAAC,CAAC;AACtC;AACA,IAAI,IAAI,CAAC,WAAW,GAAGD,WAAS,CAAC,IAAI,CAAC;AACtC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACvB,MAAM,IAAI,CAAC,WAAW,GAAGA,WAAS,CAAC,MAAM,CAAC;AAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9D,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,CAACb,mBAAiB,CAAC,aAAa,CAAC,EAAE;AAC3D,MAAM,IAAI,CAAC,WAAW,CAACA,mBAAiB,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;AAClE,KAAK;AACL;AACA,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;AACxC,IAAI,IAAI,CAAC,WAAW,GAAGa,WAAS,CAAC,MAAM,CAAC;AACxC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;AACpB,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,MAAM,EAAE,OAAO;AACrD,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,UAAU,EAAE;AAClD,MAAM,MAAM,GAAG,GAAG,4DAA4D,CAAC;AAC/E,MAAM,OAAOE,gBAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAClD,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKF,WAAS,CAAC,OAAO,EAAE;AAC/C,MAAM;AACN,QAAQ,IAAI,CAAC,eAAe;AAC5B,SAAS,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC;AAChF,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3B,OAAO;AACP;AACA,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,CAAC,WAAW,GAAGA,WAAS,CAAC,OAAO,CAAC;AACzC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,KAAK;AAC7D;AACA;AACA;AACA;AACA,MAAM,IAAI,GAAG,EAAE,OAAO;AACtB;AACA,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAClC;AACA,MAAM;AACN,QAAQ,IAAI,CAAC,mBAAmB;AAChC,QAAQ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,YAAY;AAClD,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3B,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU;AACjC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,MAAM,YAAY;AAClB,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AACvB,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,UAAU,EAAE;AAClD,MAAM,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AAC1E,KAAK;AACL;AACA,IAAI,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AACpC,MAAM,EAAE,GAAG,IAAI,CAAC;AAChB,MAAM,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAC9B,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC3C,MAAM,EAAE,GAAG,IAAI,CAAC;AAChB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,KAAK;AACL;AACA,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzD;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,IAAI,EAAE;AAC5C,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACrC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACnD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AACvB,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,UAAU,EAAE;AAClD,MAAM,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AAC1E,KAAK;AACL;AACA,IAAI,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AACpC,MAAM,EAAE,GAAG,IAAI,CAAC;AAChB,MAAM,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAC9B,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC3C,MAAM,EAAE,GAAG,IAAI,CAAC;AAChB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,KAAK;AACL;AACA,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzD;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,IAAI,EAAE;AAC5C,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACrC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACnD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,UAAU,EAAE;AAClD,MAAM,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AAC1E,KAAK;AACL;AACA,IAAI,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACvC,MAAM,EAAE,GAAG,OAAO,CAAC;AACnB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,KAAK;AACL;AACA,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzD;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,IAAI,EAAE;AAC5C,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACrC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,MAAM,EAAE,OAAO,IAAI,KAAK,QAAQ;AACtC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS;AAC3B,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,GAAG,EAAE,IAAI;AACf,MAAM,GAAG,OAAO;AAChB,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAACb,mBAAiB,CAAC,aAAa,CAAC,EAAE;AAC5D,MAAM,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC5B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKa,WAAS,CAAC,MAAM,EAAE,OAAO;AACrD,IAAI,IAAI,IAAI,CAAC,UAAU,KAAKA,WAAS,CAAC,UAAU,EAAE;AAClD,MAAM,MAAM,GAAG,GAAG,4DAA4D,CAAC;AAC/E,MAAM,OAAOE,gBAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAClD,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,MAAM,IAAI,CAAC,WAAW,GAAGF,WAAS,CAAC,OAAO,CAAC;AAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAC7B,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAACA,WAAS,EAAE,YAAY,EAAE;AAC/C,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;AAC1C,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAACA,WAAS,CAAC,SAAS,EAAE,YAAY,EAAE;AACzD,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;AAC1C,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAACA,WAAS,EAAE,MAAM,EAAE;AACzC,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAACA,WAAS,CAAC,SAAS,EAAE,MAAM,EAAE;AACnD,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAACA,WAAS,EAAE,SAAS,EAAE;AAC5C,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AACvC,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAACA,WAAS,CAAC,SAAS,EAAE,SAAS,EAAE;AACtD,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AACvC,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAACA,WAAS,EAAE,QAAQ,EAAE;AAC3C,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtC,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAACA,WAAS,CAAC,SAAS,EAAE,QAAQ,EAAE;AACrD,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtC,CAAC,CAAC,CAAC;AACH;AACA;AACA,EAAE,YAAY;AACd,EAAE,gBAAgB;AAClB,EAAE,YAAY;AACd,EAAE,UAAU;AACZ,EAAE,YAAY;AACd,EAAE,KAAK;AACP,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;AACxB,EAAE,MAAM,CAAC,cAAc,CAACA,WAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AAC1D,EAAE,MAAM,CAAC,cAAc,CAACA,WAAS,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE;AAC5D,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,GAAG,GAAG;AACV,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjD,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,OAAO;AACP;AACA,MAAM,OAAO,SAAS,CAAC;AACvB,KAAK;AACL,IAAI,GAAG,CAAC,QAAQ,EAAE;AAClB,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjD;AACA;AACA;AACA,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,OAAO;AACP,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC9C,KAAK;AACL,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AACH;AACAA,WAAS,CAAC,SAAS,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACxDA,WAAS,CAAC,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AAC9D;IACA,SAAc,GAAGA,WAAS,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE;AAC9D,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACxC,IAAI,UAAU,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;AACjC,IAAI,iBAAiB,EAAE,IAAI;AAC3B,IAAI,eAAe,EAAE,KAAK;AAC1B,IAAI,YAAY,EAAE,EAAE;AACpB,IAAI,GAAG,OAAO;AACd,IAAI,gBAAgB,EAAE,SAAS;AAC/B,IAAI,UAAU,EAAE,SAAS;AACzB,IAAI,QAAQ,EAAE,SAAS;AACvB,IAAI,QAAQ,EAAE,SAAS;AACvB,IAAI,OAAO,EAAE,SAAS;AACtB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AACxD,IAAI,MAAM,IAAI,UAAU;AACxB,MAAM,CAAC,8BAA8B,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAC9D,QAAQ,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9D,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,IAAI,SAAS,CAAC;AAChB;AACA,EAAE,IAAI,OAAO,YAAYpR,KAAG,EAAE;AAC9B,IAAI,SAAS,GAAG,OAAO,CAAC;AACxB,IAAI,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,GAAG,MAAM;AACT,IAAI,SAAS,GAAG,IAAIA,KAAG,CAAC,OAAO,CAAC,CAAC;AACjC,IAAI,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;AAC7B,GAAG;AACH;AACA,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,KAAK,UAAU,CAAC;AACzD;AACA,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AACjE,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrD,GAAG;AACH;AACA,EAAE,MAAM,QAAQ;AAChB,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACrE,EAAE,MAAM,WAAW,GAAG,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC;AAC1C,EAAE,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjD,EAAE,MAAM,GAAG,GAAG,QAAQ,GAAGgR,OAAK,CAAC,GAAG,GAAGnD,MAAI,CAAC,GAAG,CAAC;AAC9C,EAAE,IAAI,iBAAiB,CAAC;AACxB;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAC7D,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;AACrD,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC;AAC5C,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;AAChD,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,MAAM,SAAS,CAAC,QAAQ,CAAC;AACzB,EAAE,IAAI,CAAC,OAAO,GAAG;AACjB,IAAI,uBAAuB,EAAE,IAAI,CAAC,eAAe;AACjD,IAAI,mBAAmB,EAAE,GAAG;AAC5B,IAAI,UAAU,EAAE,SAAS;AACzB,IAAI,OAAO,EAAE,WAAW;AACxB,IAAI,GAAG,IAAI,CAAC,OAAO;AACnB,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;AACpD,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACvC;AACA,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC9B,IAAI,iBAAiB,GAAG,IAAI0C,mBAAiB;AAC7C,MAAM,IAAI,CAAC,iBAAiB,KAAK,IAAI,GAAG,IAAI,CAAC,iBAAiB,GAAG,EAAE;AACnE,MAAM,KAAK;AACX,MAAM,IAAI,CAAC,UAAU;AACrB,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,GAAGQ,QAAM,CAAC;AACtD,MAAM,CAACR,mBAAiB,CAAC,aAAa,GAAG,iBAAiB,CAAC,KAAK,EAAE;AAClE,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;AACvD,GAAG;AACH,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;AACnB,IAAI,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,EAAE;AACnC,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACzD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACxC,KAAK;AACL,GAAG;AACH,EAAE,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,EAAE;AAChD,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9D,GAAG;AACH;AACA,EAAE,IAAI,YAAY,EAAE;AACpB,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,GAAG;AACH;AACA,EAAE,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC;AACA,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACpB,IAAI,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM;AAC5B,MAAMe,gBAAc,CAAC,SAAS,EAAE,GAAG,EAAE,iCAAiC,CAAC,CAAC;AACxE,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;AAC3B,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO;AAC5C;AACA,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AAChC,IAAI,SAAS,CAAC,WAAW,GAAGF,WAAS,CAAC,OAAO,CAAC;AAC9C,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACjC,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;AAC1B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,KAAK;AAC9B,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC1C,IAAI,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;AACtC;AACA,IAAI;AACJ,MAAM,QAAQ;AACd,MAAM,IAAI,CAAC,eAAe;AAC1B,MAAM,UAAU,IAAI,GAAG;AACvB,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM;AACN,MAAM,IAAI,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;AACtD,QAAQE,gBAAc,CAAC,SAAS,EAAE,GAAG,EAAE,4BAA4B,CAAC,CAAC;AACrE,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;AAClB;AACA,MAAM,MAAM,IAAI,GAAG,IAAItR,KAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9C;AACA,MAAM,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;AACjE,MAAMsR,gBAAc;AACpB,QAAQ,SAAS;AACjB,QAAQ,GAAG;AACX,QAAQ,CAAC,4BAA4B,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AACvD,OAAO,CAAC;AACR,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,KAAK;AAC3C,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,SAAS,CAAC,UAAU,KAAKF,WAAS,CAAC,UAAU,EAAE,OAAO;AAC9D;AACA,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AAChC;AACA,IAAI,MAAM,MAAM,GAAGlQ,YAAU,CAAC,MAAM,CAAC;AACrC,OAAO,MAAM,CAAC,GAAG,GAAG+P,MAAI,CAAC;AACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxB;AACA,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,KAAK,MAAM,EAAE;AACxD,MAAMK,gBAAc,CAAC,SAAS,EAAE,MAAM,EAAE,qCAAqC,CAAC,CAAC;AAC/E,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAC7D,IAAI,MAAM,QAAQ,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACpD,IAAI,IAAI,SAAS,CAAC;AAClB;AACA,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,EAAE;AAClC,MAAM,SAAS,GAAG,kDAAkD,CAAC;AACrE,KAAK,MAAM,IAAI,SAAS,IAAI,CAAC,UAAU,EAAE;AACzC,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAC/C,KAAK,MAAM,IAAI,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC7D,MAAM,SAAS,GAAG,oCAAoC,CAAC;AACvD,KAAK;AACL;AACA,IAAI,IAAI,SAAS,EAAE;AACnB,MAAMA,gBAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACnD,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,UAAU,EAAE,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC;AACrD;AACA,IAAI,MAAM,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAC3E;AACA,IAAI,IAAI,sBAAsB,KAAK,SAAS,EAAE;AAC9C,MAAM,IAAI,CAAC,iBAAiB,EAAE;AAC9B,QAAQ,MAAM,OAAO;AACrB,UAAU,iEAAiE;AAC3E,UAAU,eAAe,CAAC;AAC1B,QAAQA,gBAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,IAAI,UAAU,CAAC;AACrB;AACA,MAAM,IAAI;AACV,QAAQ,UAAU,GAAGjT,OAAK,CAAC,sBAAsB,CAAC,CAAC;AACnD,OAAO,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,OAAO,GAAG,yCAAyC,CAAC;AAClE,QAAQiT,gBAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrD;AACA,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE;AACjC,QAAQ;AACR,UAAU,cAAc,CAAC,MAAM,KAAK,CAAC;AACrC,UAAU,cAAc,CAAC,CAAC,CAAC,KAAKf,mBAAiB,CAAC,aAAa;AAC/D,UAAU;AACV,UAAU,MAAM,OAAO;AACvB,YAAY,sDAAsD,CAAC;AACnE,UAAUe,gBAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACrD,UAAU,OAAO;AACjB,SAAS;AACT;AACA,QAAQ,IAAI;AACZ,UAAU,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAACf,mBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;AAChF,SAAS,CAAC,OAAO,GAAG,EAAE;AACtB,UAAU,MAAM,OAAO,GAAG,yCAAyC,CAAC;AACpE,UAAUe,gBAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACrD,UAAU,OAAO;AACjB,SAAS;AACT;AACA,QAAQ,SAAS,CAAC,WAAW,CAACf,mBAAiB,CAAC,aAAa,CAAC;AAC9D,UAAU,iBAAiB,CAAC;AAC5B,OAAO;AACP,KAAK;AACL;AACA,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACvD,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,OAAO,EAAE;AAC7B,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;AACpC,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,OAAO,EAAE;AAC7B,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;AAC3B;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE,EAAE;AACxD,IAAI,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;AACpE,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASe,gBAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;AACpD,EAAE,SAAS,CAAC,WAAW,GAAGF,WAAS,CAAC,OAAO,CAAC;AAC5C;AACA,EAAE,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACjC,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAEE,gBAAc,CAAC,CAAC;AAC/C;AACA,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE;AACxB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACnB;AACA,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9D,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACjC,GAAG,MAAM;AACT,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;AAC7C,EAAE,IAAI,IAAI,EAAE;AACZ,IAAI,MAAM,MAAM,GAAGrB,UAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC;AACtE,SAAS,SAAS,CAAC,eAAe,IAAI,MAAM,CAAC;AAC7C,GAAG;AACH;AACA,EAAE,IAAI,EAAE,EAAE;AACV,IAAI,MAAM,GAAG,GAAG,IAAI,KAAK;AACzB,MAAM,CAAC,kCAAkC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAClE,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAChD,KAAK,CAAC;AACN,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;AACZ,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE;AAC1C,EAAE,MAAM,SAAS,GAAG,IAAI,CAACW,YAAU,CAAC,CAAC;AACrC;AACA,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACvC,EAAE,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC;AACnC,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;AAC9B;AACA,EAAE,IAAI,SAAS,CAAC,OAAO,CAACA,YAAU,CAAC,KAAK,SAAS,EAAE,OAAO;AAC1D;AACA,EAAE,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACzD,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9C;AACA,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACvC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,GAAG;AAC3B,EAAE,IAAI,CAACA,YAAU,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACpC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,GAAG,EAAE;AAC9B,EAAE,MAAM,SAAS,GAAG,IAAI,CAACA,YAAU,CAAC,CAAC;AACrC;AACA,EAAE,IAAI,SAAS,CAAC,OAAO,CAACA,YAAU,CAAC,KAAK,SAAS,EAAE;AACnD,IAAI,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC3D;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;AAChD;AACA,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AACtC,GAAG;AACH;AACA,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,GAAG;AAC5B,EAAE,IAAI,CAACA,YAAU,CAAC,CAAC,SAAS,EAAE,CAAC;AAC/B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,IAAI,EAAE;AACjC,EAAE,IAAI,CAACA,YAAU,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,IAAI,EAAE;AAC9B,EAAE,MAAM,SAAS,GAAG,IAAI,CAACA,YAAU,CAAC,CAAC;AACrC;AACA,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACnD,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,IAAI,EAAE;AAC9B,EAAE,IAAI,CAACA,YAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,MAAM,EAAE;AACxB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,GAAG;AACzB,EAAE,MAAM,SAAS,GAAG,IAAI,CAACA,YAAU,CAAC,CAAC;AACrC;AACA,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC9C,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC5C,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC1C;AACA,EAAE,SAAS,CAAC,WAAW,GAAGQ,WAAS,CAAC,OAAO,CAAC;AAC5C;AACA,EAAE,IAAI,KAAK,CAAC;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU;AACnC,IAAI,CAAC,SAAS,CAAC,mBAAmB;AAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,YAAY;AACpD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI;AAC/C,IAAI;AACJ,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,GAAG;AACH;AACA,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AAC5B;AACA,EAAE,IAAI,CAACR,YAAU,CAAC,GAAG,SAAS,CAAC;AAC/B;AACA,EAAE,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACtC;AACA,EAAE;AACF,IAAI,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ;AAC/C,IAAI,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,YAAY;AACnD,IAAI;AACJ,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;AAC1B,GAAG,MAAM;AACT,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AACtD,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACvD,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;AAC7B,EAAE,IAAI,CAAC,IAAI,CAACA,YAAU,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAChD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;AACjB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,GAAG;AACvB,EAAE,MAAM,SAAS,GAAG,IAAI,CAACA,YAAU,CAAC,CAAC;AACrC;AACA,EAAE,SAAS,CAAC,WAAW,GAAGQ,WAAS,CAAC,OAAO,CAAC;AAC5C,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AAC5B,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACb,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAa,GAAG;AACzB,EAAE,MAAM,SAAS,GAAG,IAAI,CAACT,YAAU,CAAC,CAAC;AACrC;AACA,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAES,eAAa,CAAC,CAAC;AAC9C,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzB;AACA,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,SAAS,CAAC,WAAW,GAAGD,WAAS,CAAC,OAAO,CAAC;AAC9C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,GAAG;AACH;;ACnlCA,MAAM,EAAE,MAAM,EAAE,GAAG/V,qBAAiB,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASkW,WAAS,CAAC,MAAM,EAAE;AAC3B,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,GAAG;AACvB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AACvD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,GAAG,EAAE;AAC5B,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC9C,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACjB,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzC;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC5B,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE;AAC5C,EAAE,IAAI,qBAAqB,GAAG,IAAI,CAAC;AACnC,EAAE,IAAI,kBAAkB,GAAG,IAAI,CAAC;AAChC;AACA,EAAE,SAAS,eAAe,GAAG;AAC7B,IAAI,IAAI,qBAAqB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACnD,GAAG;AACH;AACA,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU,EAAE;AACvC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG;AACpC,MAAM,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAChD,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC7C,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC9C,GAAG;AACH;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;AAC5B,IAAI,GAAG,OAAO;AACd,IAAI,WAAW,EAAE,KAAK;AACtB,IAAI,SAAS,EAAE,KAAK;AACpB,IAAI,UAAU,EAAE,KAAK;AACrB,IAAI,kBAAkB,EAAE,KAAK;AAC7B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,OAAO,CAAC,GAAG,EAAE;AACzC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC3B,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE;AACvC,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,KAAK,GAAG;AACpC,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO;AACjC;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,GAAG,EAAE,QAAQ,EAAE;AAC7C,IAAI,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,MAAM,EAAE;AACrC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,MAAM,OAAO,CAAC,QAAQ,CAACA,WAAS,EAAE,MAAM,CAAC,CAAC;AAC1C,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC;AACvB;AACA,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE;AACzC,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,KAAK,GAAG;AACtC,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjC,MAAM,OAAO,CAAC,QAAQ,CAACA,WAAS,EAAE,MAAM,CAAC,CAAC;AAC1C,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,kBAAkB,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;AAC3C,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,MAAM,GAAG,UAAU,QAAQ,EAAE;AACtC,IAAI,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU,EAAE;AACzC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,OAAO,CAAC,CAAC;AACT,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE,OAAO;AACpC;AACA,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5C,MAAM,QAAQ,EAAE,CAAC;AACjB,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AAC7D,KAAK,MAAM;AACX,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,MAAM,GAAG;AAClD;AACA;AACA;AACA,QAAQ,QAAQ,EAAE,CAAC;AACnB,OAAO,CAAC,CAAC;AACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AACjB,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,KAAK,GAAG,YAAY;AAC7B,IAAI,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC7D,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACtE,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACvD,IAAI,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU,EAAE;AACzC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjD,OAAO,CAAC,CAAC;AACT,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC7B,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAChC,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACpC,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;IACAxN,QAAc,GAAG,qBAAqB;;;AC7KtC;AACA,MAAM,YAAY,GAAG1I,qBAAiB,CAAC;AACvC,MAAMwS,MAAI,GAAG9R,qBAAe,CAAC;AAI7B,MAAM,EAAE,UAAU,EAAE,GAAGoI,qBAAiB,CAAC;AACzC;AACA,MAAM,iBAAiB,GAAGC,iBAA+B,CAAC;AAC1D,MAAMgN,WAAS,GAAG3G,SAAsB,CAAC;AACzC,MAAM,UAAEsG,QAAM,SAAE1S,OAAK,EAAE,GAAG0M,SAAsB,CAAC;AACjD,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAGC,SAAsB,CAAC;AACpD;AACA,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AACzC;AACA,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,MAAM,GAAG,CAAC,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe,SAAS,YAAY,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE;AACjC,IAAI,KAAK,EAAE,CAAC;AACZ;AACA,IAAI,OAAO,GAAG;AACd,MAAM,UAAU,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;AACnC,MAAM,iBAAiB,EAAE,KAAK;AAC9B,MAAM,eAAe,EAAE,IAAI;AAC3B,MAAM,cAAc,EAAE,IAAI;AAC1B,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,GAAG,OAAO;AAChB,KAAK,CAAC;AACN;AACA,IAAI;AACJ,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ;AACnE,OAAO,OAAO,CAAC,IAAI,IAAI,IAAI,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpE,OAAO,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC;AAC1C,MAAM;AACN,MAAM,MAAM,IAAI,SAAS;AACzB,QAAQ,kEAAkE;AAC1E,UAAU,mBAAmB;AAC7B,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;AAC9B,MAAM,IAAI,CAAC,OAAO,GAAG6C,MAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AACrD,QAAQ,MAAM,IAAI,GAAGA,MAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC5C;AACA,QAAQ,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;AAC3B,UAAU,gBAAgB,EAAE,IAAI,CAAC,MAAM;AACvC,UAAU,cAAc,EAAE,YAAY;AACtC,SAAS,CAAC,CAAC;AACX,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM;AACzB,QAAQ,OAAO,CAAC,IAAI;AACpB,QAAQ,OAAO,CAAC,IAAI;AACpB,QAAQ,OAAO,CAAC,OAAO;AACvB,QAAQ,QAAQ;AAChB,OAAO,CAAC;AACR,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AAC/B,MAAM,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;AACpC,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAChE;AACA,MAAM,IAAI,CAAC,gBAAgB,GAAG2D,cAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AACzD,QAAQ,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACpD,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AAC5C,QAAQ,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,KAAK;AACxC,UAAU,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAChE,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA,IAAI,IAAI,OAAO,CAAC,iBAAiB,KAAK,IAAI,EAAE,OAAO,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC3E,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AACzD,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;AAC1B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC/B,MAAM,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;AACpE,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC;AACnC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACnC;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AAChC,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,OAAO;AACxC,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;AAC1B;AACA;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,MAAM,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC5D,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAChC;AACA,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC9B,MAAM,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAClD;AACA;AACA;AACA;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;AACrC,QAAQ,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACtD,QAAQ,OAAO;AACf,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,GAAG,EAAE;AACpB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAC3B,MAAM,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzC,MAAM,MAAM,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACxE;AACA,MAAM,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC;AACvD,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;AACvC,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACtC;AACA,IAAI,MAAM,GAAG;AACb,MAAM,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,SAAS;AACpD,UAAU,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE;AACjD,UAAU,KAAK,CAAC;AAChB,IAAI,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAC1D,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC;AAC1B;AACA,IAAI;AACJ,MAAM,GAAG,CAAC,MAAM,KAAK,KAAK;AAC1B,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,WAAW;AACvD,MAAM,CAAC,GAAG;AACV,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB,OAAO,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,EAAE,CAAC;AACvC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AAC7B,MAAM;AACN,MAAM,OAAO,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzC,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;AACxC,MAAM,MAAM,iBAAiB,GAAG,IAAI,iBAAiB;AACrD,QAAQ,IAAI,CAAC,OAAO,CAAC,iBAAiB;AACtC,QAAQ,IAAI;AACZ,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU;AAC/B,OAAO,CAAC;AACR;AACA,MAAM,IAAI;AACV,QAAQ,MAAM,MAAM,GAAGnT,OAAK,CAAC,GAAG,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;AACtE;AACA,QAAQ,IAAI,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE;AACrD,UAAU,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5E,UAAU,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC;AAC1E,SAAS;AACT,OAAO,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,OAAO,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3C,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AACnC,MAAM,MAAM,IAAI,GAAG;AACnB,QAAQ,MAAM;AACd,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,GAAG,sBAAsB,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC7E,QAAQ,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AACjE,QAAQ,GAAG;AACX,OAAO,CAAC;AACR;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,KAAK;AAC9E,UAAU,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAY,OAAO,cAAc,CAAC,MAAM,EAAE,IAAI,IAAI,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACzE,WAAW;AACX;AACA,UAAU,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACvE,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/E,KAAK;AACL;AACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACjE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;AAC1D;AACA;AACA;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AACtE;AACA,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE;AAC5B,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ,iEAAiE;AACzE,UAAU,4CAA4C;AACtD,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClE;AACA,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;AACrC,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;AACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxB;AACA,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,kCAAkC;AACxC,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;AACvC,KAAK,CAAC;AACN;AACA,IAAI,MAAM,EAAE,GAAG,IAAI+S,WAAS,CAAC,IAAI,CAAC,CAAC;AACnC,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACzD;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AACxC,QAAQ,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC/D,OAAO,MAAM;AACb,QAAQ,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/B,OAAO;AACP;AACA,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5D,QAAQ,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC;AAChC,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE;AACrD,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;AACxE,MAAM,MAAM,KAAK,GAAGL,QAAM,CAAC;AAC3B,QAAQ,CAAC,iBAAiB,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC;AACnD,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,EAAE,CAAC,WAAW,GAAG,UAAU,CAAC;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AACvC;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACtD,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAClD;AACA,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACxD;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3B,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD,KAAK;AACL;AACA,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAChB,GAAG;AACH,CAAC;AACD;IACA,eAAc,GAAG,eAAe,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASS,cAAY,CAAC,MAAM,EAAE,GAAG,EAAE;AACnC,EAAE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE;AACA,EAAE,OAAO,SAAS,eAAe,GAAG;AACpC,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC1C,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,MAAM,EAAE;AAC3B,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,GAAG;AACzB,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;AACxD,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE;AACvB,IAAI,OAAO,GAAG,OAAO,IAAI3D,MAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI,OAAO,GAAG;AACd,MAAM,UAAU,EAAE,OAAO;AACzB,MAAM,cAAc,EAAE,WAAW;AACjC,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;AAClD,MAAM,GAAG,OAAO;AAChB,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,KAAK;AAChB,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAEA,MAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACvD,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5B,WAAW,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,WAAW,IAAI,CAAC,MAAM,CAAC;AACvB,QAAQ,UAAU;AAClB,QAAQ,OAAO;AACf,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAChD,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,GAAG,EAAE;AACnB,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB;;AC5bA,MAAM,SAAS,GAAGxS,SAA0B,CAAC;AAC7C;AACA,SAAS,CAAC,qBAAqB,GAAGU,QAAuB,CAAC;AAC1D,SAAS,CAAC,MAAM,GAAGO,eAAiC,CAAC;AACrD,SAAS,CAAC,QAAQ,GAAGuB,QAAyB,CAAC;AAC/C,SAAS,CAAC,MAAM,GAAGwF,MAAuB,CAAC;AAC3C;IACA,EAAc,GAAG,SAAS;;ACGnB,MAAM,UAAU,GAAG,UAAU,CAAA;SASpB,qBAAqB,CACnC,MAAqB,EACrB,MAAsB,EACtB,YAAiC;IAEjC,IAAI,GAAqB,CAAA;IACzB,IAAI,WAAW,GAAuB,SAAS,CAAA;IAE/C,MAAM,GAAG,GAAGlD,UAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA;IAC5D,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAA;IAE9C,IAAI,QAAQ,EAAE;QACZ,GAAG,GAAG,IAAIiR,EAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI;YACvC,IAAI,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,KAAK,UAAU,EAAE;gBACxD,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,MAAgB,EAAE,IAAI,EAAE,CAAC,EAAE;oBAChD,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;iBAChC,CAAC,CAAA;aACH;SACF,CAAC,CAAA;KACH;SAAM;QACL,MAAM,sBAAsB,GAA4B,EAAE,CAAA;QAC1D,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAA;QACvC,IAAI,YAAY,EAAE;;;YAGhB,WAAW,GAAGK,yBAAiB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG;gBACrD,MAAM,UAAU,GAAG,GAAG,CAAA;gBACtB,MAAM,IAAI,GAAGC,yBAAY,CAAC,UAAU,CAAC,CAAA;gBACrC,IAAI,CAAC,IAAI;oBACP,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,cAAc,CACvD,CAAA;gBAEH,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE;oBACxB,gBAAgB,EAAE,IAAI,CAAC,MAAM;oBAC7B,cAAc,EAAE,YAAY;iBAC7B,CAAC,CAAA;gBACF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;aACd,CAAC,CAAA;YAEF,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACxB,sBAAsB,CAAC,MAAM,GAAG,WAAW,CAAA;SAC5C;aAAM;;YAEL,sBAAsB,CAAC,IAAI,GAAG,IAAI,CAAA;SACnC;;QAGD,GAAG,GAAG,IAAIN,EAAS,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;KACnD;IAED,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM;QAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QAClD,IAAI,aAAa,EAAE;YACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;YAC1C,aAAa,GAAG,IAAI,CAAA;SACrB;KACF,CAAC,CAAA;IAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAA2B;QAC1C,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;YAC3B,MAAM,CAAC,MAAM,CAAC,KAAK,CACjBtT,MAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,EAC7D,EAAE,KAAK,EAAE,CAAC,EAAE,CACb,CAAA;SACF;KACF,CAAC,CAAA;;;;;IAMF,IAAI,aAAa,GAAwB,IAAI,CAAA;IAE7C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,OAAmB;YACtB,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;gBACjD,aAAa,GAAG,OAAO,CAAA;gBACvB,OAAM;aACP;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAC3C,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM;gBACzB,IAAI,MAAM,CAAC,UAAU,KAAKsT,EAAS,CAAC,IAAI,EAAE;oBACxC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;iBACzB;aACF,CAAC,CAAA;SACH;QAED,KAAK;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;gBACjC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG;oBACZ,IAAI,GAAG,EAAE;wBACP,MAAM,CAAC,GAAG,CAAC,CAAA;qBACZ;yBAAM;wBACL,IAAI,WAAW,EAAE;4BACf,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG;gCACpB,IAAI,GAAG,EAAE;oCACP,MAAM,CAAC,GAAG,CAAC,CAAA;iCACZ;qCAAM;oCACL,OAAO,EAAE,CAAA;iCACV;6BACF,CAAC,CAAA;yBACH;6BAAM;4BACL,OAAO,EAAE,CAAA;yBACV;qBACF;iBACF,CAAC,CAAA;aACH,CAAC,CAAA;SACH;KACF,CAAA;AACH;;ACnIA;SAEgB,cAAc,CAAC,EAC7B,MAAM,EACQ;IACd,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;;IAGxB,OAAO,SAAS,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;;QAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAI,CAAA;QACpB,MAAM,MAAM,GAAGnQ,kBAAQ,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAA;QAEnC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;;;YAGzB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAChC,OAAO,IAAI,EAAE,CAAA;SACd;;QAGD,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;YAChC,OAAO,IAAI,EAAE,CAAA;SACd;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,aAAa,EAAE;;YAE1C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,QAAQ,EAAE,IAAI;aACf,CAAC,CAAA;YACF,GAAG,CAAC,GAAG,EAAE,CAAA;YACT,OAAM;SACP;aAAM,IAAI,MAAA,GAAG,CAAC,OAAO,CAAC,MAAM,0CAAE,QAAQ,CAAC,WAAW,CAAC,EAAE;;YAEpD,MAAM,YAAY,GAAG,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACxC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,cAAc,EAAE,WAAW;aAC5B,CAAC,CAAA;YACF,GAAG,CAAC,GAAG,CACL,sDAAsD,IAAI,KAAK;gBAC7D,kCAAkC,YAAY,KAAK,YAAY,eAAe,CACjF,CAAA;YACD,OAAM;SACP;QAED,IAAI,EAAE,CAAA;KACP,CAAA;AACH;;;;;;;AClDA;AACA,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc;AACzC,IAAI,MAAM,GAAG,GAAG,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,GAAG,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,MAAM,EAAE;AACnB,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;AAC9C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AAC/B,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACf,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC;AAC5B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACxD,EAAE,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;AAChC,IAAI,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;AAC3D,GAAG;AACH;AACA,EAAE,IAAI,QAAQ,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,IAAI,OAAO,EAAE,IAAI,CAAC;AACrD,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAC5C;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;AACrF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/D;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE;AAClC,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;AACnE,OAAO,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,GAAG;AACxB,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;AAC9B,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACxB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,GAAG;AAC1D,EAAE,IAAI,KAAK,GAAG,EAAE;AAChB,MAAM,MAAM;AACZ,MAAM,IAAI,CAAC;AACX;AACA,EAAE,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;AAC5C;AACA,EAAE,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG;AACxC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1E,GAAG;AACH;AACA,EAAE,IAAI,MAAM,CAAC,qBAAqB,EAAE;AACpC,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,GAAG;AACH;AACA,EAAE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,KAAK,EAAE;AAC7D,EAAE,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK;AAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnC;AACA,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC3B,EAAE,IAAI,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACtE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAC,KAAK,EAAE;AACrE,EAAE,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK;AAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC;AACA,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3B,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC7B,EAAE,OAAO,SAAS,CAAC,MAAM,CAAC;AAC1B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACvE,EAAE,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAC5C;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;AACvC;AACA,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACnC,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM;AAC5B,MAAM,IAAI;AACV,MAAM,CAAC,CAAC;AACR;AACA,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE;AACpB,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAClF;AACA,IAAI,QAAQ,GAAG;AACf,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;AAChE,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;AACpE,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;AACxE,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;AAC5E,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;AAChF,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;AACpF,KAAK;AACL;AACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACxD,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACjC,KAAK;AACL;AACA,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAChD,GAAG,MAAM;AACT,IAAI,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AACjC,QAAQ,CAAC,CAAC;AACV;AACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACjC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC1F;AACA,MAAM,QAAQ,GAAG;AACjB,QAAQ,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;AAClE,QAAQ,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;AACtE,QAAQ,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;AAC1E,QAAQ,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;AAC9E,QAAQ;AACR,UAAU,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACzE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACvC,WAAW;AACX;AACA,UAAU,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC5D,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;AAC5D,EAAE,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;AAChE,EAAE,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1F,EAAE,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAC5C;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC;AACtC,EAAE,IAAI,CAAC,EAAE,EAAE;AACX,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC1B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC;AACA,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE;AACpB,IAAI;AACJ,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE;AACzB,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC;AAC/B,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC;AACjD,MAAM;AACN,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5B,KAAK;AACL,GAAG,MAAM;AACT,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7E,MAAM;AACN,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AAC9B,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,SAAS,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;AACrD,QAAQ;AACR,QAAQ,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AACpF,SAAS,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/B,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,CAAC,KAAK,EAAE;AAC/E,EAAE,IAAI,GAAG,CAAC;AACV;AACA,EAAE,IAAI,KAAK,EAAE;AACb,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAC1C,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjD,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AAC1B,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC;AACnE,YAAY,CAAC,SAAS,CAAC,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;AAC/D;AACA;AACA;AACA;AACA,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC;AAC/B;AACA;AACA;AACA;AACA,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC;AACzC;AACA;AACA;AACA;AACmC;AACnC,EAAE,iBAAiB,YAAY,CAAC;AAChC;;;;;AC7UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACA,YAAc,GAAG,SAAS,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE;AACnD,EAAE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC;AACf;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC;AAC1B;AACA,EAAE,QAAQ,QAAQ;AAClB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,IAAI;AACb,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;AACvB;AACA,IAAI,KAAK,OAAO,CAAC;AACjB,IAAI,KAAK,KAAK;AACd,IAAI,OAAO,IAAI,KAAK,GAAG,CAAC;AACxB;AACA,IAAI,KAAK,KAAK;AACd,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;AACvB;AACA,IAAI,KAAK,QAAQ;AACjB,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;AACvB;AACA,IAAI,KAAK,MAAM;AACf,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;;;ACrCD,IAAI,MAAM,KAAK,OAAO;AACtB,IAAI,GAAG,QAAQ5F,qBAAc;AAC7B,IAAI,MAAM,KAAKU,qBAAe,CAAC,OAAO;AACtC,IAAI,QAAQ,GAAGO,YAAwB,CAAC;AACxC;AACA,IAAI,aAAa,GAAG,0BAA0B;AAC9C,IAAI,KAAK,GAAG,YAAY,CAAC;AACzB;AACA;AACA;AACA;AACA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;AACjE,EAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,IAAI;AACnD,mBAAmB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;AACjF;AACA,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK;AACjD,IAAI,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,OAAO;AACpE,IAAI,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAClE,GAAG,CAAC;AACJ;AACA,EAAE,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;AACjD,EAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7C;AACA,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC;AACtB,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9C,GAAG;AACH;AACA,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;AACpB,IAAI,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AACjC,GAAG;AACH;AACA,EAAE,IAAI,OAAO,CAAC,EAAE,EAAE;AAClB,MAAM,QAAQ,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;AAC/B,GAAG;AACH;AACA,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE;AACzD,IAAI,QAAQ,CAAC,kBAAkB,GAAG,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;AAClG,GAAG;AACH;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;AAC1C,EAAE,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACvB,IAAI,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;AAC9C,IAAI,IAAI,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ;AACvD,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AAC3D,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE;AACnD,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;AAC5C,EAAE,IAAI,UAAU,GAAG,MAAM,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK;AAC1D,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE;AACxB,MAAM,EAAE,CAAC;AACT;AACA;AACA;AACA;AACA,EAAE,IAAI,YAAY,GAAG,CAAC,OAAO,CAAC,OAAO;AACrC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;AACpC,MAAM,GAAG,CAAC,GAAG,CAAC;AACd;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,YAAY,GAAG,EAAE,CAAC;AACzD;AACA,EAAE,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC3D;AACA,EAAE,IAAI,OAAO,CAAC,YAAY,EAAE;AAC5B,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI;AACzB,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/F,UAAU,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI;AAC7C,UAAU,QAAQ,CAAC,IAAI,CAAC;AACxB,GAAG;AACH,EAAE,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,WAAW,GAAG,SAAS,MAAM,EAAE;AACtC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B;AACA,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/B;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,EAAE;AAC/B,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AACrE;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,GAAG,CAAC,CAAC,CAAC;AACV,IAAI,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;AACtD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,sBAAsB,GAAG,SAAS,GAAG,EAAE;AAC9C,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,OAAO,GAAG,WAAW;AAC5B;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AACjC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,MAAM,OAAO,CAAC;AACd;AACA,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,SAAS,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAC7B,SAAS,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC;AACrC,SAAS,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC;AACvC,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxC;AACA,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,qBAAqB,GAAG,SAAS,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;AACxF,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC7B,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,aAAa,EAAE;AAC/C,MAAM,OAAO,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACpE,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,WAAW,EAAE,GAAG,CAAC,EAAE,SAAS,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;AACnH,IAAI,IAAI,QAAQ,CAAC;AACjB,IAAI,IAAI,aAAa,IAAI,MAAM,EAAE;AACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACvC,KAAK,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE;AAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,KAAK,MAAM;AACX;AACA,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,IAAI,IAAI,QAAQ,EAAE;AAClB;AACA,MAAM,OAAO,MAAM,GAAG,QAAQ,CAAC;AAC/B,KAAK,MAAM;AACX;AACA,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL,GAAG,CAAC,CAAC;AACL,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,IAAI,EAAE;AACvB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9B;;ACvPA,IAAIgR,KAAG,MAAMjS,qBAAc;AAC3B,IAAIoD,QAAM,GAAG1C,QAAoB,CAAC;AAClC;AACA;AACA,IAAI,aAAa,GAAG,mBAAmB,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACA,WAAc,GAAG;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,EAAE,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC5D,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,KAAK,EAAE;AACnC,MAAM,OAAO,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACnD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,EAAE,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC5D,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,KAAK,EAAE;AACnC,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC;AACtE,KAAK,MAAM,IAAI,GAAG,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE;AAC1E,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,YAAY,CAAC;AAC3E,KAAK;AACL,GAAG;AACH;AACA,EAAE,sBAAsB,EAAE,SAAS,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE;AACvF,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,eAAe;AAC9E,WAAW,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AACvC,WAAW,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACpD,MAAM,IAAI,MAAM,GAAGuR,KAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7C,MAAM,IAAI,CAAC,GAAGA,KAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACtD;AACA;AACA,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;AACjC,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE;AAC/B,QAAQ,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;AACrC,OAAO,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE;AACtC,QAAQ,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrC,OAAO;AACP,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE;AACnC,QAAQ,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;AAC7C,OAAO;AACP;AACA,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAChD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,EAAE,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE;AACnE,IAAI,IAAI,yBAAyB,GAAG,OAAO,CAAC,mBAAmB;AAC/D,QAAQ,uBAAuB,GAAG,OAAO,CAAC,iBAAiB;AAC3D,QAAQ,qBAAqB,GAAG,OAAO,CAAC,qBAAqB;AAC7D,QAAQ,eAAe;AACvB,QAAQ,SAAS,GAAG,SAAS,GAAG,EAAE,MAAM,EAAE;AAC1C,UAAU,IAAI,MAAM,IAAI,SAAS,EAAE,OAAO;AAC1C,UAAU,IAAI,yBAAyB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE;AAC/E,YAAY,MAAM,GAAG7O,QAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,yBAAyB,EAAE,QAAQ,CAAC,CAAC;AAC/F,WAAW;AACX,UAAU,IAAI,uBAAuB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE;AAC7E,YAAY,MAAM,GAAGA,QAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAC;AAC3F,WAAW;AACX,UAAU,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;AACpD,SAAS,CAAC;AACV;AACA,IAAI,IAAI,OAAO,yBAAyB,KAAK,QAAQ,EAAE;AACvD,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,yBAAyB,EAAE,CAAC;AACrE,KAAK;AACL;AACA,IAAI,IAAI,OAAO,uBAAuB,KAAK,QAAQ,EAAE;AACrD,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,uBAAuB,EAAE,CAAC;AACjE,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,qBAAqB,IAAI,QAAQ,CAAC,UAAU,IAAI,SAAS,EAAE;AACnE,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC9D,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzC,QAAQ,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC;AACjD,OAAO;AACP,KAAK;AACL;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE;AACxD,MAAM,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzC,MAAM,IAAI,qBAAqB,IAAI,eAAe,EAAE;AACpD,QAAQ,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAC1C,OAAO;AACP,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC7B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,EAAE,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE;AAChE;AACA,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE;AAC/B,MAAM,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC3C,MAAM,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;AACjD,KAAK,MAAM;AACX,MAAM,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC3C,KAAK;AACL,GAAG;AACH;AACA,CAAC;;;;AClJD,IAAIqB,OAAK,CAAC;AACV;IACA,OAAc,GAAG,YAAY;AAC7B,EAAE,IAAI,CAACA,OAAK,EAAE;AACd,IAAI,IAAI;AACR;AACA,MAAMA,OAAK,GAAG,QAAQ,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,OAAO,KAAK,EAAE,SAAS;AAC3B,IAAI,IAAI,OAAOA,OAAK,KAAK,UAAU,EAAE;AACrC,MAAMA,OAAK,GAAG,YAAY,SAAS,CAAC;AACpC,KAAK;AACL,GAAG;AACH,EAAEA,OAAK,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC/B,CAAC;;ACdD,IAAIwN,KAAG,GAAGjS,qBAAc,CAAC;AACzB,IAAI2E,KAAG,GAAGsN,KAAG,CAAC,GAAG,CAAC;AAClB,IAAIO,MAAI,GAAG9R,qBAAe,CAAC;AAC3B,IAAIiV,OAAK,GAAG1U,qBAAgB,CAAC;AAC7B,IAAI,QAAQ,GAAGuB,qBAAiB,CAAC,QAAQ,CAAC;AAC1C,IAAI2M,QAAM,GAAGnH,mBAAiB,CAAC;AAC/B,IAAIvD,OAAK,GAAGqE,OAAkB,CAAC;AAC/B;AACA;AACA,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC3E,IAAI,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxC,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;AAChC,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACrD,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH;AACA;AACA,IAAI,gBAAgB,GAAG,eAAe;AACtC,EAAE,4BAA4B;AAC9B,EAAE,EAAE;AACJ,CAAC,CAAC;AACF,IAAI,qBAAqB,GAAG,eAAe;AAC3C,EAAE,2BAA2B;AAC7B,EAAE,sCAAsC;AACxC,CAAC,CAAC;AACF,IAAI,0BAA0B,GAAG,eAAe;AAChD,EAAE,iCAAiC;AACnC,EAAE,8CAA8C;AAChD,CAAC,CAAC;AACF,IAAI,kBAAkB,GAAG,eAAe;AACxC,EAAE,4BAA4B;AAC9B,EAAE,iBAAiB;AACnB,CAAC,CAAC;AACF;AACA;AACA,SAAS,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE;AACxD;AACA,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACjC,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC1B,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AAC1B,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACvB,EAAE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAC9B,EAAE,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAChC;AACA;AACA,EAAE,IAAI,gBAAgB,EAAE;AACxB,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAC1C,GAAG;AACH;AACA;AACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC;AAClB,EAAE,IAAI,CAAC,iBAAiB,GAAG,UAAU,QAAQ,EAAE;AAC/C,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,CAAC;AACD,mBAAmB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAClE;AACA,mBAAmB,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;AAClD,EAAE,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC,CAAC;AACF;AACA;AACA,mBAAmB,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC1E;AACA,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACpB,IAAI,MAAM,IAAI,kBAAkB,EAAE,CAAC;AACnC,GAAG;AACH;AACA;AACA,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,EAAE;AACrF,IAAI,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACzE,GAAG;AACH,EAAE,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AACtC,IAAI,QAAQ,GAAG,QAAQ,CAAC;AACxB,IAAI,QAAQ,GAAG,IAAI,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,QAAQ,EAAE,CAAC;AACjB,KAAK;AACL,IAAI,OAAO;AACX,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC5E,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC;AAC3C,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACzD,GAAG;AACH;AACA,OAAO;AACP,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,0BAA0B,EAAE,CAAC,CAAC;AACzD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;AACjB,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA,mBAAmB,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACxE;AACA,EAAE,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAClC,IAAI,QAAQ,GAAG,IAAI,CAAC;AACpB,IAAI,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;AAC3B,GAAG;AACH,OAAO,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAC3C,IAAI,QAAQ,GAAG,QAAQ,CAAC;AACxB,IAAI,QAAQ,GAAG,IAAI,CAAC;AACpB,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,IAAI,EAAE;AACb,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnD,GAAG;AACH,OAAO;AACP,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;AAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY;AAC3C,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/C,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA,mBAAmB,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;AACjE,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACtC,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC,CAAC;AACF;AACA;AACA,mBAAmB,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,IAAI,EAAE;AAC7D,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrC,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC;AACF;AACA;AACA,mBAAmB,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,KAAK,EAAE,QAAQ,EAAE;AACtE,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC;AAClB;AACA;AACA,EAAE,SAAS,gBAAgB,CAAC,MAAM,EAAE;AACpC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC7B,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACrD,IAAI,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAClD,GAAG;AACH;AACA;AACA,EAAE,SAAS,UAAU,CAAC,MAAM,EAAE;AAC9B,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,YAAY;AAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,MAAM,UAAU,EAAE,CAAC;AACnB,KAAK,EAAE,KAAK,CAAC,CAAC;AACd,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC7B,GAAG;AACH;AACA;AACA,EAAE,SAAS,UAAU,GAAG;AACxB,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,KAAK;AACL,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC/C,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtB,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAChE,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACjC,GAAG;AACH;AACA;AACA,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;AACnB,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,GAAG;AACH,OAAO;AACP,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACtC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AACpC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACjC;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA,EAAE,cAAc,EAAE,WAAW;AAC7B,EAAE,YAAY,EAAE,oBAAoB;AACpC,CAAC,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;AAC5B,EAAE,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE;AAC1D,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH;AACA;AACA,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;AAChE,EAAE,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE;AACjE,IAAI,GAAG,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC/D,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AACH;AACA,mBAAmB,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,OAAO,EAAE;AACpE;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACxB,IAAI,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;AACpB;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC3B,MAAM,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;AACtC,KAAK;AACL,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;AACzC,IAAI,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9C,IAAI,IAAI,SAAS,GAAG,CAAC,EAAE;AACvB,MAAM,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;AACtC,KAAK;AACL,SAAS;AACT,MAAM,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC9D,MAAM,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACzD,KAAK;AACL,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA,mBAAmB,CAAC,SAAS,CAAC,eAAe,GAAG,YAAY;AAC5D;AACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxC,EAAE,IAAI,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC/D,EAAE,IAAI,CAAC,cAAc,EAAE;AACvB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,uBAAuB,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC1E,IAAI,OAAO;AACX,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC5B,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvD,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe;AACpC,QAAQ,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACtE,EAAE,IAAI,CAAC,WAAW,GAAGmJ,KAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/C;AACA;AACA,EAAE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AAC/B,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;AACxB;AACA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAC3C,IAAI,CAAC,SAAS,SAAS,CAAC,KAAK,EAAE;AAC/B;AACA;AACA,MAAM,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe,EAAE;AAC5C;AACA;AACA,QAAQ,IAAI,KAAK,EAAE;AACnB,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACpC,SAAS;AACT;AACA,aAAa,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE;AACrC,UAAU,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACpC;AACA,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACjC,YAAY,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACnE,WAAW;AACX,SAAS;AACT;AACA,aAAa,IAAI,IAAI,CAAC,MAAM,EAAE;AAC9B,UAAU,OAAO,CAAC,GAAG,EAAE,CAAC;AACxB,SAAS;AACT,OAAO;AACP,KAAK,EAAE,EAAE;AACT,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA,mBAAmB,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,QAAQ,EAAE;AACrE;AACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AACvC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;AACpC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACzB,MAAM,GAAG,EAAE,IAAI,CAAC,WAAW;AAC3B,MAAM,OAAO,EAAE,QAAQ,CAAC,OAAO;AAC/B,MAAM,UAAU,EAAE,UAAU;AAC5B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3C,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK,KAAK;AACzD,MAAM,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE;AAC7C;AACA,IAAI,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACvC;AACA,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;AACvB;AACA;AACA;AACA,IAAI,IAAI,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;AAC5D,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;AACtD,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM;AACrF;AACA;AACA;AACA;AACA,QAAQ,CAAC,UAAU,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9E,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;AACnC;AACA,MAAM,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AACpC,MAAM,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjE,KAAK;AACL;AACA;AACA,IAAI,IAAI,gBAAgB,GAAG,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClF,MAAMA,KAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC;AAC3C;AACA;AACA,IAAI,IAAI,WAAW,GAAGA,KAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC9D,IAAIxN,OAAK,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AACzC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,IAAI,IAAI,gBAAgB,GAAGwN,KAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAClD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACnD;AACA;AACA,IAAI,IAAI,gBAAgB,CAAC,QAAQ,KAAK,gBAAgB,EAAE;AACxD,MAAM,qBAAqB,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvE,KAAK;AACL;AACA;AACA,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,UAAU,EAAE;AAC5D,MAAM,IAAI,eAAe,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC1D,MAAM,IAAI;AACV,QAAQ,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAChF,OAAO;AACP,MAAM,OAAO,GAAG,EAAE;AAClB,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3C,KAAK;AACL;AACA;AACA,IAAI,IAAI;AACR,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AAC7B,KAAK;AACL,IAAI,OAAO,KAAK,EAAE;AAClB,MAAM,IAAI,KAAK,GAAG,IAAI,gBAAgB,CAAC,6BAA6B,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AACtF,MAAM,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAChC,KAAK;AACL,GAAG;AACH,OAAO;AACP;AACA,IAAI,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC5C,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AACzC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpC;AACA;AACA,IAAI,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAClC,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA,SAAS,IAAI,CAAC,SAAS,EAAE;AACzB;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,YAAY,EAAE,EAAE;AACpB,IAAI,aAAa,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;AACnC,GAAG,CAAC;AACJ;AACA;AACA,EAAE,IAAI,eAAe,GAAG,EAAE,CAAC;AAC3B,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;AACnD,IAAI,IAAI,QAAQ,GAAG,MAAM,GAAG,GAAG,CAAC;AAChC,IAAI,IAAI,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AACvE,IAAI,IAAI,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAC1E;AACA;AACA,IAAI,SAAS,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE;AAC/C;AACA,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACrC,QAAQ,IAAI,MAAM,GAAG,KAAK,CAAC;AAC3B,QAAQ,IAAI;AACZ,UAAU,KAAK,GAAG,YAAY,CAAC,IAAItN,KAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,SAAS;AACT,QAAQ,OAAO,GAAG,EAAE;AACpB;AACA,UAAU,KAAK,GAAGsN,KAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,SAAS;AACT,OAAO;AACP,WAAW,IAAItN,KAAG,KAAK,KAAK,YAAYA,KAAG,CAAC,EAAE;AAC9C,QAAQ,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AACpC,OAAO;AACP,WAAW;AACX,QAAQ,QAAQ,GAAG,OAAO,CAAC;AAC3B,QAAQ,OAAO,GAAG,KAAK,CAAC;AACxB,QAAQ,KAAK,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACvC,OAAO;AACP,MAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACzC,QAAQ,QAAQ,GAAG,OAAO,CAAC;AAC3B,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,OAAO;AACP;AACA;AACA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AAC9B,QAAQ,YAAY,EAAE,OAAO,CAAC,YAAY;AAC1C,QAAQ,aAAa,EAAE,OAAO,CAAC,aAAa;AAC5C,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACzB,MAAM,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;AAChD;AACA,MAAMwK,QAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AACpE,MAAM1K,OAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChC,MAAM,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA,IAAI,SAAS,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE;AAC3C,MAAM,IAAI,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC7E,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC;AAC3B,MAAM,OAAO,cAAc,CAAC;AAC5B,KAAK;AACL;AACA;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE;AAC7C,MAAM,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AACvF,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC/E,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA,SAAS2F,MAAI,GAAG,eAAe;AAC/B;AACA;AACA,SAAS,YAAY,CAAC,SAAS,EAAE;AACjC,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,QAAQ,EAAE,SAAS,CAAC,QAAQ;AAChC,IAAI,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;AAChD;AACA,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,MAAM,SAAS,CAAC,QAAQ;AACxB,IAAI,IAAI,EAAE,SAAS,CAAC,IAAI;AACxB,IAAI,MAAM,EAAE,SAAS,CAAC,MAAM;AAC5B,IAAI,QAAQ,EAAE,SAAS,CAAC,QAAQ;AAChC,IAAI,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM;AAC/C,IAAI,IAAI,EAAE,SAAS,CAAC,IAAI;AACxB,GAAG,CAAC;AACJ,EAAE,IAAI,SAAS,CAAC,IAAI,KAAK,EAAE,EAAE;AAC7B,IAAI,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC1C,GAAG;AACH,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA,SAAS,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE;AAC/C,EAAE,IAAI,SAAS,CAAC;AAChB,EAAE,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE;AAC9B,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAClC,MAAM,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,KAAK;AACL,GAAG;AACH,EAAE,OAAO,SAAS,CAAC;AACnB,CAAC;AACD;AACA,SAAS,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE;AAC/C,EAAE,SAAS,WAAW,CAAC,OAAO,EAAE;AAChC,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,cAAc,CAAC;AAC7C,GAAG;AACH,EAAE,WAAW,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;AACtC,EAAE,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAClD,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,GAAG,CAAC;AACtD,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AACpC,EAAE,OAAO,WAAW,CAAC;AACrB,CAAC;AACD;AACA,SAAS,YAAY,CAAC,OAAO,EAAE;AAC/B,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,GAAG;AACH,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAEA,MAAI,CAAC,CAAC;AAC5B,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AACD;AACA;AACAkM,yBAAc,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE9D,MAAI,EAAE,KAAK,EAAEmD,OAAK,EAAE,CAAC,CAAC;8BACjC,GAAG;;ACzhBtB,IAAI,UAAU,KAAK3V,qBAAe;AAClC,IAAI,WAAW,IAAIU,qBAAgB;AACnC,IAAI,KAAK,IAAIO,WAAyB;AACtC,IAAImC,QAAM,GAAGZ,QAAoB;AACjC,IAAI,eAAe,GAAGwF,yBAA2B,CAAC;AAClD;AACA,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;AAC9C,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AACH;AACA,IAAI,YAAY,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACA,WAAc,GAAG;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,EAAE,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AACzD,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;AAC3D,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;AAC1C,MAAM,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC;AAC1C,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC9C,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,EAAE,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AAC/C,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;AACxB,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7C,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,EAAE,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;AACjD,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;AAC7B;AACA,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,IAAI5E,QAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;AACrE,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa;AACrE,MAAM,IAAI,GAAGA,QAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,MAAM,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM;AACzC,KAAK,CAAC;AACN;AACA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;AACtD,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC;AAC1C,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE;AACnD,SAAS,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACzD,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC;AACvB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,EAAE,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;AAC7D;AACA;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AACtE;AACA,IAAI,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,eAAe,GAAG,YAAY,CAAC;AAC1E,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAC3B,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B;AACA,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;AACxB;AACA,MAAM,IAAI,UAAU,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO;AACrF,QAAQA,QAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC;AACxE,OAAO,CAAC;AACR;AACA;AACA;AACA,MAAM,IAAI,YAAY,GAAG,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACzE,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACpC,MAAM,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC3C;AACA,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/C,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE;AAC/C,KAAK;AACL;AACA;AACA,IAAI,IAAI,QAAQ,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO;AAChF,MAAMA,QAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3D,KAAK,CAAC;AACN;AACA;AACA,IAAI,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE;AAC3C,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAClD,QAAQ,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC7D,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA;AACA,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE;AAC7B,MAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW;AAC3D,SAAS,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC1B,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY;AAClC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;AACvB,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,UAAU,GAAG,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAClE,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAChC,IAAI,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACrC;AACA,IAAI,SAAS,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE;AAC/C,MAAM,OAAO,SAAS,UAAU,CAAC,GAAG,EAAE;AACtC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;AAC/D,UAAU,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACxD,UAAU,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClC,SAAS;AACT;AACA,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAClC,SAAS,MAAM;AACf,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3C;AACA,IAAI,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,QAAQ,EAAE;AAC/C,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;AACjE;AACA,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;AAC1D,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE;AAC9D,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACzB;AACA,QAAQ,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY;AACvC,UAAU,IAAI,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7D,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,OAAO,MAAM;AACb,QAAQ,IAAI,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC3D,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,CAAC;;ACjMD,IAAI,IAAI,KAAKpD,qBAAe;AAC5B,IAAI,KAAK,IAAIU,qBAAgB;AAC7B,IAAI,MAAM,GAAGO,QAAoB,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACA,UAAc,GAAG;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,GAAG,SAAS,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE;AACpE,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE;AACtD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;AACvB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE;AAC3D,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;AACvB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;AACrD,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;AAC7B;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa;AACrE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,MAAM,KAAK,EAAE,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI;AAC9D,KAAK,CAAC;AACN;AACA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;AACtD,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC;AAC1C,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE;AACnD,SAAS,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACzD,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC;AACvB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACpE;AACA,IAAI,IAAI,gBAAgB,GAAG,SAAS,IAAI,EAAE,OAAO,EAAE;AACnD,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,GAAG,EAAE;AAC9D,QAAQ,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACnC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;AACxC,UAAU,OAAO,IAAI,CAAC;AACtB,SAAS;AACT;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;AACjC,MAAK;AACL;AACA,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/B;AACA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClD;AACA;AACA,IAAI,IAAI,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO;AACtF,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3D,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE;AACpF;AACA;AACA,IAAI,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC1C,IAAI,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,EAAE;AAC3C;AACA,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AACxB,QAAQ,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAChI,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzB,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA,IAAI,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;AACtE,MAAM,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC/C;AACA;AACA,MAAM,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY;AACxC,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAC/D,OAAO,CAAC,CAAC;AACT;AACA;AACA;AACA;AACA,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY;AACrC,QAAQ,WAAW,CAAC,GAAG,EAAE,CAAC;AAC1B,OAAO,CAAC,CAAC;AACT;AACA,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACtC;AACA,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACxE;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,kCAAkC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3F;AACA,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjD;AACA,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACvC,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAC9C,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC1B;AACA,IAAI,SAAS,eAAe,CAAC,GAAG,EAAE;AAClC,MAAM,IAAI,GAAG,EAAE;AACf,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC9B,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC/C,OAAO;AACP,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;AACnB,KAAK;AACL,GAAG;AACH,CAAC;;;ACjKD,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO;AAC9B,IAAI,MAAM,MAAMjB,qBAAe,CAAC,OAAO;AACvC,IAAI,SAAS,GAAGU,qBAAc,CAAC,KAAK;AACpC,IAAI,GAAG,SAASO,qBAAwB;AACxC,IAAI,IAAI,QAAQuB,qBAAe;AAC/B,IAAI,KAAK,OAAOwF,qBAAgB;AAChC,IAAI,GAAG,SAASc,WAAgC;AAChD,IAAI,EAAE,UAAUC,UAA+B,CAAC;AAChD;AACA,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC;AACA,EAAE,OAAO,SAAS,OAAO,EAAE;AAC3B,IAAI,OAAO,SAAS,GAAG,EAAE,GAAG,wBAAwB;AACpD,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;AACnE,UAAU,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACzC,UAAU,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAChC,UAAU,IAAI,EAAE,GAAG,CAAC;AACpB;AACA;AACA,MAAM,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;AAC3C,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB;AACA,QAAQ,IAAI,EAAE,CAAC;AACf,OAAO;AACP;AACA,MAAM,IAAI,cAAc,GAAG,OAAO,CAAC;AACnC,MAAM;AACN,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC;AACvC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG;AAC1B,QAAQ;AACR;AACA,QAAQ,cAAc,GAAG,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC7C;AACA,QAAQ,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C;AACA,QAAQ,IAAI,EAAE,CAAC;AACf,OAAO;AACP;AACA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,MAAM,EAAE;AACvC,QAAQ,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,OAAO;AACP;AACA;AACA;AACA,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAChD,QAAQ,IAAI,OAAO,cAAc,CAAC,CAAC,CAAC,KAAK,QAAQ;AACjD,UAAU,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,OAAO,CAAC,CAAC;AACT;AACA,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7D,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;AACpF,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;AACjE,UAAU,MAAM;AAChB,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,GAAG,CAAC;AACJ,CAAC;AACD,SAAS,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC9C;AACA,SAAS,WAAW,CAAC,OAAO,EAAE;AAC9B,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB;AACA,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AACrE;AACA,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,aAAa,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;AAC5E,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AAC3E,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;AACvD,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;AACrD,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACpB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC;AACA,CAAC;AACD;AACA/I,qBAAe,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC3C;AACA,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,GAAG,EAAE;AAC/C;AACA;AACA;AACA;AACA,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,IAAI,MAAM,GAAG,CAAC;AACd,GAAG;AACH,CAAC,CAAC;AACF;AACA,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE;AACxD,EAAE,IAAI,IAAI,MAAM,IAAI;AACpB,MAAM,OAAO,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AAC3D;AACA,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG;AAClC,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B;AACA,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5F,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtC;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA,WAAW,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,QAAQ,EAAE;AACjD,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC;AAClB,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACpB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,GAAG;AACH;AACA;AACA,EAAE,SAAS,IAAI,GAAG;AAClB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtC,KAAK;AACL,GACA,CAAC,CAAC;AACF;AACA,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAClE,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;AACvC,IAAI,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAClD,GAAG;AACH,EAAE,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC/D,MAAM,CAAC,GAAG,KAAK,CAAC;AAChB;AACA,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE;AAClC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC;AACpC,GAAG,EAAC;AACJ;AACA,EAAE,GAAG,CAAC,KAAK,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;AAClD;AACA,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC,CAAC;AACF,WAAW,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACjE,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;AACvC,IAAI,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAClD,GAAG;AACH,EAAE,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC/D,MAAM,CAAC,GAAG,KAAK,CAAC;AAChB;AACA,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE;AAClC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC;AACpC,GAAG,EAAC;AACJ;AACA,EAAE,GAAG,CAAC,KAAK,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;AAClD;AACA,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;;;ACxLA;AACD,IAAI,WAAW,GAAGA,mBAAgC,CAAC,MAAM,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,OAAO,EAAE;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AACD;AACA;AACA,WAAW,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAClD,WAAW,CAAC,YAAY,QAAQ,iBAAiB,CAAC;AAClD,WAAW,CAAC,WAAW,SAAS,iBAAiB,CAAC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;IACAuW,WAAc,GAAG,WAAW;;;;;;;;;;;;;;ICpD5B,SAAc,GAAGvW,WAA2B;;ACH5C,MAAMyE,OAAK,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;SAqB1B,eAAe,CAC7B,UAA8B,EAC9B,MAAsB;IAEtB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAM,CAAA;;IAGpC,MAAM,OAAO,GAAqD,EAAE,CAAA;IAEpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO;QACnC,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAkB,CAAA;SAC5D;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAqB,CAAA;QAEnE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG;YACpB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAGhC,MAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE;gBACrE,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,GAAG;aACX,CAAC,CAAA;SACH,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;SAC5B;;QAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;KACxC,CAAC,CAAA;IAEF,IAAI,UAAU,EAAE;QACd,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI;;YACzC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAI,CAAA;YACpB,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE;gBAC7B,IAAI,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;oBAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;oBACtC,IACE,CAAC,IAAI,CAAC,EAAE,KAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;wBACrD,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,KAAK,UAAU,EACpD;wBACA,IAAI,IAAI,CAAC,OAAO,EAAE;4BAChB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;yBAC5B;wBACDgC,OAAK,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;wBACxC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;wBAC3B,OAAM;qBACP;iBACF;aACF;SACF,CAAC,CAAA;KACH;;IAGD,OAAO,SAAS,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QAChD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAI,CAAA;QACpB,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE;YAC7B,IAAI,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;gBACtC,MAAM,OAAO,GAA4B,EAAE,CAAA;gBAE3C,IAAI,IAAI,CAAC,MAAM,EAAE;oBACf,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;oBAChD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;wBACpC,GAAG,CAAC,GAAG,GAAG,YAAY,CAAA;wBACtBA,OAAK,CAAC,WAAW,GAAG,CAAC,GAAG,OAAO,YAAY,EAAE,CAAC,CAAA;wBAC9C,OAAO,IAAI,EAAE,CAAA;qBACd;yBAAM,IAAIK,UAAQ,CAAC,YAAY,CAAC,EAAE;wBACjC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;wBACpCL,OAAK,CAAC,WAAW,GAAG,CAAC,GAAG,2BAA2B,EAAE,OAAO,CAAC,CAAA;wBAC7D,OAAO,IAAI,EAAE,CAAA;qBACd;yBAAM,IAAI,YAAY,KAAK,KAAK,EAAE;wBACjCA,OAAK,CAAC,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,CAAA;wBAClC,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;qBACpB;iBACF;gBAEDA,OAAK,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gBACrD,IAAI,IAAI,CAAC,OAAO,EAAE;oBAChB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAI,CAAC,CAAA;iBACjC;gBACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC5B,OAAM;aACP;SACF;QACD,IAAI,EAAE,CAAA;KACP,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe,EAAE,GAAW;IAC5D,QACE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACzD,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EACxB;AACH;;;;;AC1HA;AACA,IAAI,GAAG,GAAGzE,qBAAc,CAAC;AACzB;AACU,iBAAiB,SAAS,kBAAkB,CAAC,OAAO,EAAE;AAChE,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAClC;AACA,EAAE,OAAO,SAAS,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAClC,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAC9B,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE;AAC9B,MAAM,MAAM;AACZ,QAAQ,eAAe;AACvB,QAAQ,GAAG,CAAC,MAAM;AAClB,QAAQ,GAAG,CAAC,GAAG;AACf,QAAQ,gCAAgC;AACxC,OAAO,CAAC;AACR,MAAM,OAAO,IAAI,EAAE,CAAC;AACpB,KAAK,MAAM,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC/D,MAAM,MAAM;AACZ,QAAQ,eAAe;AACvB,QAAQ,GAAG,CAAC,MAAM;AAClB,QAAQ,GAAG,CAAC,GAAG;AACf,QAAQ,wDAAwD;AAChE,OAAO,CAAC;AACR,MAAM,OAAO,IAAI,EAAE,CAAC;AACpB,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;AACjE,MAAM,MAAM;AACZ,QAAQ,eAAe;AACvB,QAAQ,GAAG,CAAC,MAAM;AAClB,QAAQ,GAAG,CAAC,GAAG;AACf,QAAQ,kCAAkC;AAC1C,OAAO,CAAC;AACR,MAAM,OAAO,IAAI,EAAE,CAAC;AACpB,KAAK,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;AACtD,MAAM,MAAM;AACZ,QAAQ,eAAe;AACvB,QAAQ,GAAG,CAAC,MAAM;AAClB,QAAQ,GAAG,CAAC,GAAG;AACf,QAAQ,0CAA0C;AAClD,OAAO,CAAC;AACR,MAAM,OAAO,IAAI,EAAE,CAAC;AACpB,KAAK;AACL;AACA,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvC,IAAI,IAAI,aAAa,CAAC;AACtB,IAAI,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC9C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtD,MAAM,IAAI,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxC,MAAM,IAAI,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzD,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE;AAC1B,QAAQ,aAAa,GAAG,mBAAmB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC/E;AACA,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC5C,UAAU,MAAM;AAChB,YAAY,6DAA6D;AACzE,YAAY,wCAAwC;AACpD,YAAY,aAAa;AACzB,YAAY,SAAS;AACrB,YAAY,GAAG,CAAC,GAAG;AACnB,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AACtE,QAAQ,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC;AAChC,QAAQ,OAAO,IAAI,EAAE,CAAC;AACtB,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AACtC,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC;AAC7D,QAAQ,OAAO,CAAC,cAAc,KAAK,IAAI,EAAE;AACzC,MAAM,MAAM;AACZ,QAAQ,eAAe;AACvB,QAAQ,GAAG,CAAC,MAAM;AAClB,QAAQ,GAAG,CAAC,GAAG;AACf,QAAQ,gDAAgD;AACxD,OAAO,CAAC;AACR,MAAM,OAAO,IAAI,EAAE,CAAC;AACpB,KAAK;AACL;AACA,IAAI,aAAa,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;AACnD,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AAClE,IAAI,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC;AAC5B,IAAI,IAAI,EAAE,CAAC;AACX,GAAG,CAAC;AACJ,CAAC,CAAC;AACF;AACA,SAAS,mBAAmB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;AAC1D,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,MAAM,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AACzC,IAAI,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;AAC5E,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,OAAO,EAAE,GAAG;AAChB,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA,SAAS,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE;AACtC,EAAE,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAChF,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7D,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AAC7D,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,KAAK,CAAC;AACf,CAAC;AACD;AACA,SAAS,SAAS,CAAC,OAAO,EAAE;AAC5B,EAAE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;AACjC,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC;AAC1B,GAAG,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AACzC,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrC,GAAG;AACH,EAAE,OAAO,UAAU,EAAE,CAAC;AACtB;;;;;SCjHgB,qBAAqB,CACnC,IAAY;IAEZ,MAAM,4BAA4B,GAAG,OAAO,CAAC;QAC3C,MAAM,EAAE,cAAc,CAAC,mBAAmB,CAAC;;QAE3C,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,KAAK;gBACX,EAAE,CAAC,EAAE,SAAS,EAAO;oBACnB,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAA;oBACnD,IAAI+E,WAAE,CAAC,UAAU,CAACzB,aAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE;wBAC7C,OAAO,SAAS,CAAA;qBACjB;yBAAM;wBACL,OAAO,aAAa,CAAA;qBACrB;iBACF;aACF;SACF;KACF,CAAC,CAAA;;IAGF,OAAO,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QACtD,OAAO,4BAA4B,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;KACpD,CAAA;AACH;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;IACA,MAAc,GAAG,KAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAGtD,sBAAiB;AAC9B,IAAI,KAAK,GAAGU,WAAa,CAAC,MAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,SAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,EAAE,MAAM,EAAE;AAC5B,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B;AACA,IAAI,OAAO,iCAAiC;AAC5C,GAAG;AACH;AACA;AACA,EAAE,IAAI,IAAI,GAAG,MAAM;AACnB,KAAK,UAAU,CAAC,MAAM,CAAC;AACvB,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3B,KAAK,MAAM,CAAC,QAAQ,CAAC;AACrB,KAAK,SAAS,CAAC,CAAC,EAAE,EAAE,EAAC;AACrB;AACA;AACA,EAAE,IAAI,GAAG,GAAG,OAAO,MAAM,KAAK,QAAQ;AACtC,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;AACvC,MAAM,MAAM,CAAC,OAAM;AACnB;AACA,EAAE,OAAO,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG;AAClD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;AAChC,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE;AACtB,IAAI,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC;AACtD,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,EAAC;AAC/B,EAAE,IAAI,IAAI,GAAG,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS;AACzD,MAAM,OAAO,CAAC,IAAI;AAClB,MAAM,QAAO;AACb;AACA;AACA,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1E,IAAI,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC;AAC9E,GAAG;AACH;AACA;AACA,EAAE,IAAI,GAAG,GAAG,OAAO;AACnB,MAAM,OAAO,CAAC,MAAM,CAAC;AACrB,MAAM,SAAS,CAAC,MAAM,EAAC;AACvB;AACA,EAAE,OAAO,IAAI;AACb,MAAM,IAAI,GAAG,GAAG;AAChB,MAAM,GAAG;AACT,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,EAAE,GAAG,EAAE;AACvB;AACA,EAAE,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,GAAG,YAAY,KAAK,EAAE;AAC3D,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA;AACA,EAAE,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;AACvC,IAAI,OAAO,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,eAAe;AAClE,IAAI,OAAO,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,eAAe;AAClE,IAAI,KAAK,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ;AAC/C,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;AACjD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,EAAE,IAAI,EAAE;AACxB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAC;AAC/C,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAC;AACnC;AACA,EAAE,OAAO,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AACvC;;AC9HA,MAAMmQ,SAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;AAEjC,MAAM2F,OAAK,GAAuC;IAChD,EAAE,EAAE,wBAAwB;IAC5B,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,kBAAkB;CACzB,CAAA;SAEelE,MAAI,CAClB,GAAoB,EACpB,GAAmB,EACnB,OAAwB,EACxB,IAAY,EACZ,IAAI,GAAGmE,MAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EACvC,YAAY,GAAG,UAAU,EACzB,GAAsB;IAEtB,IAAI,GAAG,CAAC,aAAa,EAAE;QACrB,OAAM;KACP;IAED,IAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;QACzC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;QACpB,OAAO,GAAG,CAAC,GAAG,EAAE,CAAA;KACjB;IAED,GAAG,CAAC,SAAS,CAAC,cAAc,EAAED,OAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;IAClD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;IAC5C,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;;IAG3B,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE;QACvB,IAAI3F,SAAO,EAAE;YACX,OAAO,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CACpD,OAAO,EACP,MAAM,CACP,MAAM,CAAA;SACR;QACD,OAAO,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAA;KACnC;IAED,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;IACpB,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAmC;IAC7D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;KAC1B;IACD,OAAO,uDAAuD,MAAM,CAAC,IAAI,CACvE,GAAG,CACJ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;AACxB;;;;;;;;;ACxDA,IAAI,MAAM,GAAG7Q,sBAAiB;AAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,OAAM;AAC1B;AACA;AACA,SAAS,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE;AAC9B,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;AACvB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAC;AACvB,GAAG;AACH,CAAC;AACD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE;AACjF,EAAE,iBAAiB,OAAM;AACzB,CAAC,MAAM;AACP;AACA,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAC;AAC5B,EAAE,iBAAiB,WAAU;AAC7B,CAAC;AACD;AACA,SAAS,UAAU,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;AACpD,EAAE,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC;AAC9C,CAAC;AACD;AACA;AACA,SAAS,CAAC,MAAM,EAAE,UAAU,EAAC;AAC7B;AACA,UAAU,CAAC,IAAI,GAAG,UAAU,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;AAC3D,EAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC/B,IAAI,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC;AACxD,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC;AAC9C,EAAC;AACD;AACA,UAAU,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;AACnD,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;AACpD,GAAG;AACH,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,EAAC;AACxB,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE;AAC1B,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AACtC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAC;AAC9B,KAAK,MAAM;AACX,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC;AACpB,KAAK;AACL,GAAG,MAAM;AACT,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAC;AACf,GAAG;AACH,EAAE,OAAO,GAAG;AACZ,EAAC;AACD;AACA,UAAU,CAAC,WAAW,GAAG,UAAU,IAAI,EAAE;AACzC,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;AACpD,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,EAAC;AACD;AACA,UAAU,CAAC,eAAe,GAAG,UAAU,IAAI,EAAE;AAC7C,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;AACpD,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AAChC;;;;AC5DA,IAAI,EAAE,GAAGA,WAAa,CAAC;AACvB,IAAI,IAAI,GAAGU,aAAe,CAAC;AAC3B,IAAI,UAAU,GAAGO,kBAAsB,CAAC;AACxC;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE;AAC/C,EAAE,GAAG,EAAE,SAAS,eAAe,IAAI;AACnC,IAAI,OAAO,8GAA8G,CAAC;AAC1H,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,qBAAqB,EAAE;AACtD,EAAE,GAAG,EAAE,SAAS,sBAAsB,IAAI;AAC1C;AACA,IAAI,OAAO,+HAA+H,CAAC;AAC3I,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA;AACA,SAAS,YAAY,CAAC,MAAM,EAAE;AAC9B,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;AACrE,CAAC;AACD;AACA,SAAS,YAAY,CAAC,EAAE,EAAE;AAC1B,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7B,CAAC;AACD;AACA,SAAS,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE;AAClC;AACA;AACA,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C;AACA;AACA,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7C;AACA,EAAE,IAAI;AACN,IAAI,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC7C,GAAG,CAAC,OAAO,CAAC,EAAE;AACd,IAAI,MAAM,IAAI,KAAK,CAAC,yDAAyD,GAAG,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACrG,GAAG;AACH,CAAC;AACD;AACA,SAAS,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE;AAC9B,EAAE,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AACpB;AACA,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACxE,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC7C,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC5C,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACzD;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACtB,CAAC;AACD;AACA,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;AAC9C,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC,CAAC;AACF;AACA,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;AAC3C,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3B,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzE,CAAC,CAAC;AACF;AACA,SAAS,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,OAAO,EAAE;AACnD,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC/B,EAAE,IAAI,IAAI,GAAG,8DAA8D,GAAG,MAAM,CAAC;AACrF,EAAE,OAAO,OAAO,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;AAC9E,CAAC,CAAC;AACF;AACA;AACA,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;AAC3C,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC;AACF;AACA,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;AACxD,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,GAAG,GAAG,6DAA6D,CAAC,CAAC;AAC9I,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC;AACF;AACA,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;AACxD,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC9B,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,GAAG,EAAE;AACjD,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC;AACF;AACA,qBAAqB,UAAU,GAAG,EAAE;AACpC,EAAE,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC;AACF;AACA,mBAAmB,UAAU,IAAI,EAAE;AACnC,EAAE,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AACF;AACA,qBAAqB,UAAU,MAAM,EAAE;AACvC,EAAE,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AACF;AACA,sBAAsB,UAAU,OAAO,EAAE;AACzC,EAAE,OAAO,GAAG,OAAO;AACnB,KAAK,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC5B,KAAK,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3B;AACA,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC,CAAC;AACF;AACA,6BAA6B,UAAU,OAAO,EAAE,GAAG,EAAE;AACrD,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5F,CAAC,CAAC;AACF;AACA;AACA,qBAAqB,UAAU,OAAO,EAAE;AACxC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC9C,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;AACjD,CAAC,CAAC;AACF;AACA;AACA,4BAA4B,UAAU,OAAO,EAAE,GAAG,EAAE;AACpD,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACrD,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AAC7D,CAAC,CAAC;AACF;AACA,yBAAyB,UAAU,GAAG,EAAE;AACxC,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AACF;AACA,gCAAgC,UAAU,GAAG,EAAE;AAC/C,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC;AACF;AACA,iCAAiC,UAAU,IAAI,EAAE,OAAO,EAAE;AAC1D,EAAE,IAAI,IAAI,GAAG,mBAAmB,GAAG,IAAI,CAAC;AACxC,EAAE,OAAO,OAAO,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;AAC9E,CAAC;;;ACoED;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE;AAChD,CAAC,QAAQ,KAAK,CAAC,IAAI;AACnB,EAAE,KAAK,YAAY;AACnB,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,GAAG,MAAM;AACT;AACA,EAAE,KAAK,kBAAkB;AACzB,GAAG,IAAI,MAAM,GAAG,KAAK,CAAC;AACtB,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE;AAC9C,IAAI,MAAM,uBAAuB,MAAM,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI;AACJ,GAAG,KAAK,CAAC,IAAI,qBAAqB,MAAM,EAAE,CAAC;AAC3C,GAAG,MAAM;AACT;AACA,EAAE,KAAK,eAAe;AACtB;AACA;AACA;AACA;AACA,GAAG,MAAM,WAAW,GAAG,CAAC,IAAI,KAAK;AACjC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AACrC,KAAK,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/C,KAAK,MAAM;AACX,KAAK,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5C,KAAK;AACL,IAAI,CAAC;AACL;AACA,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACzC,GAAG,MAAM;AACT;AACA,EAAE,KAAK,cAAc;AACrB;AACA;AACA;AACA;AACA,GAAG,MAAM,cAAc,GAAG,CAAC,OAAO,KAAK;AACvC,IAAI,IAAI,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrD,IAAI,CAAC;AACL;AACA,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1C,GAAG,MAAM;AACT;AACA,EAAE,KAAK,aAAa;AACpB,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9C,GAAG,MAAM;AACT;AACA,EAAE,KAAK,mBAAmB;AAC1B,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,GAAG,MAAM;AACT,EAAE;AACF;AACA,CAAC,OAAO,KAAK,CAAC;AACd;;AC1PO,MAAM,mBAAmB,GAAG,sBAAsB,CAAA;AAClD,MAAM,YAAY,GAAG,qBAAqB,CAAA;AAC1C,MAAM,mBAAmB,GAAG,6BAA6B,CAAA;AACzD,MAAM,eAAe,GAAG,wBAAwB,CAAA;AAChD,MAAM,gBAAgB,GAAG,0BAA0B,CAAA;AAEnD,eAAe,YAAY,CAChC,IAAY,EACZ,KAAuB,EACvB,GAAW;IAEX,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;IAE/B,IAAI,GAAQ,CAAA;IACZ,IAAI;QACF,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;YACvB,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,QAAQ;YACrB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YAAE,MAAM,GAAG,CAAA;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAA;QACzB,MAAM,IAAI,KAAK,CACb,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,IAAI,KACrD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAC3B,EAAE,CACH,CAAA;KACF;IAED,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IACrC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC/C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;IAEvC,SAAS,YAAY,CAAC,IAAU,EAAE,MAAc;QAC9C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAChB,MAAM,QAAQ,GAAG,qBAAqB,GAAG,EAAE,IAAI,CAAA;QAC/C,CAAC,CAAC,UAAU,CACV,IAAI,CAAC,KAAK,EACV,SAAS,QAAQ,YAAY,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAC1E,CAAA;QACD,OAAO,QAAQ,CAAA;KAChB;IAED,SAAS,YAAY,CAAC,QAAgB,EAAE,IAAY,EAAE,KAAK,GAAG,IAAI;QAChE,CAAC,CAAC,WAAW,CACX,QAAQ,EACR,2BAA2B,mBAAmB,MAAM,IAAI,KAAK;YAC3D,yDAAyD,KAAK,OAAO,CACxE,CAAA;KACF;;IAGD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAc,EAAE;;;;QAIrC,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE;YACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAe,CAAC,CAAA;YAChE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;gBAClC,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE;oBACnC,aAAa,CAAC,GAAG,CACf,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CACpC,CAAA;iBACF;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,EAAE;oBACjD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAA;iBAC1D;qBAAM;;oBAEL,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;iBAC7C;aACF;YACD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;SAC/B;KACF;;IAGD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAc,EAAE;;QAErC,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,EAAE;YAC1C,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IACE,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,qBAAqB;oBAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,kBAAkB,EAC5C;;oBAEA,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,EAAG,CAAC,IAAI,CAAC,CAAA;iBAClD;qBAAM;;oBAEL,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;wBACvD,MAAM,KAAK,GAAGyV,aAAY,CAAC,WAAW,CAAC,EAAS,CAAC,CAAA;wBACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;4BACxB,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;yBAC7B;qBACF;iBACF;gBACD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAG,IAAI,CAAC,WAAoB,CAAC,KAAK,CAAC,CAAA;aACvD;iBAAM;gBACL,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC9B,IAAI,IAAI,CAAC,MAAM,EAAE;;oBAEf,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAe,CAAC,CAAA;oBAChE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;wBAClC,YAAY,CACV,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,QAAQ,CAAC,IAAI,EAClB,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CACjC,CAAA;qBACF;iBACF;qBAAM;;oBAEL,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;wBAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;wBAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;wBACxC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,CAAA;qBAC7D;iBACF;aACF;SACF;;QAGD,IAAI,IAAI,CAAC,IAAI,KAAK,0BAA0B,EAAE;YAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE;;;;gBAInD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAA;gBACpC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,gCAAgC,CAAA;gBACpE,CAAC,CAAC,MAAM,CACN,2BAA2B,mBAAmB,eAAe;oBAC3D,8BAA8B,IAAI,MAAM,CAC3C,CAAA;aACF;iBAAM;;gBAEL,CAAC,CAAC,SAAS,CACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,GAAG,EAAE,gCACf,GAAG,mBAAmB,YAAY,CACnC,CAAA;aACF;SACF;;QAGD,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,EAAE;YACxC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAe,CAAC,CAAA;gBAChE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;aAC1D;iBAAM;gBACL,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAe,CAAC,CAAA;gBAChE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC9B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,IAAI,QAAQ,IAAI,CAAC,CAAA;aAC3D;SACF;KACF;;IAGD,IAAI,CAAC,GAAG,EAAE;QACR,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW;YAClC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAM;aACP;YACD,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE;;;;gBAIhD,IACE,CAAE,MAAc,CAAC,SAAS;oBAC1B,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,EAChD;oBACA,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,OAAO,EAAE,CAAC,CAAA;iBACrC;aACF;iBAAM,IACL,MAAM,CAAC,IAAI,KAAK,kBAAkB;gBAClC,EAAE,KAAK,MAAM,CAAC,UAAU,EACxB;gBACA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;oBAC/B,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;;oBAE1B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;oBAC9B,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,IAAI,MAAM,OAAO,KAAK,CAAC,CAAA;iBAClE;aACF;iBAAM;gBACL,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;aACvC;SACF;QACD,YAAY,CAAC,IAAI;YACf,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;SACpD;QACD,eAAe,CAAC,IAAI;YAClB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAA;YAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;gBACtE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAe,CAAC,CAAA;aAC7C;SACF;KACF,CAAC,CAAA;IAEF,IAAI,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACvD,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE;YAC3B;gBACE,GAAG,GAAG;gBACN,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,cAAc,EAAE,KAAK,CAAC,cAAc;aACrB;YACjB,KAAqB;SACtB,CAAc,CAAA;KAChB;SAAM;QACL,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;QACnB,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,CAAA;KAC5B;IAED,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;QAClB,GAAG;QACH,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QACf,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC;KAC9B,CAAA;AACH,CAAC;AAeD;;;;AAIA,SAAS,IAAI,CACX,IAAU,EACV,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAY;IAEzD,MAAM,WAAW,GAAW,EAAE,CAAA;IAC9B,MAAM,KAAK,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAsB,CAAA;IAElD,MAAM,QAAQ,GAAG,CAAC,IAAkB,EAAE,IAAY;QAChD,IAAI,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAClC,OAAM;SACP;QACD,IAAI,IAAI,IAAI,KAAK,EAAE;YACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAA;SACd;aAAM;YACL,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAChB;QACD,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;YACpB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;SAC7B;QACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;KACnB,CAEA;IAACC,MAAc,CAAC,IAAI,EAAE;QACrB,KAAK,CAAC,IAAU,EAAE,MAAmB;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE;gBACrC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;aACnB;YAED,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAElC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC/D,YAAY,CAAC,IAAI,CAAC,CAAA;aACnB;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE;gBAC3C,eAAe,CAAC,IAAI,CAAC,CAAA;aACtB;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,MAAO,EAAE,WAAW,CAAC,EAAE;oBACpE,YAAY,CAAC,IAAI,EAAE,MAAO,EAAE,WAAW,CAAC,CAAA;iBACzC;aACF;iBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;;;gBAG3B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KACnBA,MAAc,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;oBAC3D,KAAK,CAAC,KAAW,EAAE,MAAY;wBAC7B,IACE,KAAK,CAAC,IAAI,KAAK,YAAY;;4BAE3B,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC;;;4BAGnC,EACE,MAAM;gCACN,MAAM,CAAC,IAAI,KAAK,mBAAmB;gCACnC,MAAM,CAAC,KAAK,KAAK,KAAK,CACvB,EACD;4BACA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;yBAC3B;qBACF;iBACF,CAAC,CACH,CAAA;aACF;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,MAAO,CAAC,IAAI,KAAK,eAAe,EAAE;gBAErE,IAAY,CAAC,SAAS,GAAG,IAAI,CAAA;aAChC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,EAAE;gBAC7C,MAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAA;gBACtD,IAAI,cAAc,EAAE;oBAClB,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,eAAe,EAAE;wBACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ;4BAClC,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE;gCACnC,QAAQ,CAAC,cAAc,EAAG,QAAQ,CAAC,QAAuB,CAAC,IAAI,CAAC,CAAA;6BACjE;iCAAM;gCACL,QAAQ,CAAC,cAAc,EAAG,QAAQ,CAAC,KAAoB,CAAC,IAAI,CAAC,CAAA;6BAC9D;yBACF,CAAC,CAAA;qBACH;yBAAM;wBACL,QAAQ,CAAC,cAAc,EAAG,IAAI,CAAC,EAAiB,CAAC,IAAI,CAAC,CAAA;qBACvD;iBACF;aACF;SACF;QAED,KAAK,CAAC,IAAU,EAAE,MAAmB;YACnC,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,CAAA;YAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAU;oBAC1B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;oBACX,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;wBACnB,OAAO,KAAK,CAAC,EAAE,CAAC,CAAA;qBACjB;iBACF,CAAC,CAAA;aACH;SACF;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAc,EAAE,MAAa,EAAE,WAAoB;;IAE1E,IACE,MAAM,CAAC,IAAI,KAAK,aAAa;SAC5B,CAAC,MAAM,CAAC,IAAI,KAAK,oBAAoB;YACpC,MAAM,CAAC,IAAI,KAAK,kBAAkB;YAClC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EACnB;QACA,OAAO,KAAK,CAAA;KACb;IAED,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;;QAEtB,IAAK,MAAc,CAAC,EAAE,KAAK,EAAE,EAAE;YAC7B,OAAO,KAAK,CAAA;SACb;;QAED,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC9B,OAAO,KAAK,CAAA;SACb;KACF;;IAGD,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE;QACtC,OAAO,KAAK,CAAA;KACb;;;IAID,IAAI,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,IAAK,MAAc,CAAC,SAAS,EAAE;QAChE,OAAO,KAAK,CAAA;KACb;;IAGD,IACE,MAAM,CAAC,IAAI,KAAK,cAAc;QAC9B,CAAC,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,EACjD;QACA,OAAO,KAAK,CAAA;KACb;;IAGD,IACE,MAAM,CAAC,IAAI,KAAK,kBAAkB;QAClC,MAAM,CAAC,QAAQ,KAAK,EAAE;QACtB,CAAC,MAAM,CAAC,QAAQ,EAChB;QACA,OAAO,KAAK,CAAA;KACb;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE;QACrC,OAAO,KAAK,CAAA;KACb;;IAGD,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,EAAE;QAC3B,OAAO,KAAK,CAAA;KACb;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,IAAW,KACnC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA;AAEpD,MAAM,mBAAmB,GAAG,CAAC,IAAW,EAAE,MAAa,KACrD,gBAAgB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAA;AAEjD,SAAS,UAAU,CAAC,IAAW;IAC7B,OAAO,6CAA6C,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAoB;IAC9C,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;YACpB,OAAO,IAAI,CAAA;SACZ;KACF;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,MAAa,EACb,WAAoB;IAEpB,IACE,MAAM;SACL,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,EAC9D;QACA,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAA;QAC1B,OAAO,CAAC,EAAE,EAAE;YACV,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAsB,EAAE;gBACrC,OAAO,IAAI,CAAA;aACZ;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gBAC/D,MAAK;aACN;SACF;KACF;IACD,OAAO,KAAK,CAAA;AACd;;ACzcA,MAAM9F,SAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;AACnC,MAAMpM,OAAK,GAAG,cAAc,CAAC,gBAAgB,EAAE;IAC7C,eAAe,EAAE,IAAI;CACtB,CAAC,CAAA;AAQK,eAAe,oBAAoB,CACxC,GAAkB,EAClB,IAAY,EACZ,MAAc;IAEd,IAAI,UAA8B,CAAA;IAClC,IAAI;;QAEF,UAAU,GAAG,MAAMM,aAAE,CAAC,QAAQ,CAC5BzB,aAAI,CAAC,OAAO,CAACA,aAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CACvD,CAAA;KACF;IAAC,MAAM,GAAE;IAEV,MAAM,cAAc,GAAa,EAAE,CAAA;IACnC,GAAG,CAAC,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU;QACzB,IAAI,UAAU,EAAE;YACd,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;YAClC,IAAI,UAAU,EAAE;gBACd,UAAU,GAAGA,aAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;aAClD;YACD,OAAOyB,aAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC;gBAC5C,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC/B,OAAO,IAAI,CAAA;aACZ,CAAC,CAAA;SACH;QACD,OAAO,IAAI,CAAA;KACZ,CAAC,CACH,CAAA;;;;IAKD,IAAI,cAAc,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI,kCAAkC,CAAC,CAAA;QACzE8L,SAAO,IAAIpM,OAAK,CAAC,sBAAsB,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;KACvE;AACH;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASzB,OAAK,CAAC,GAAG,EAAE;AAC3B,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACnB,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,OAAO;AACzB;AACA,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC;AAC3B,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC;AAC3C;AACA,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;AACpC;AACA,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAChC;AACA,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AAClB,GAAG,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/B,GAAG,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,IAAI,KAAK,GAAG4T,aAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,IAAI;AACJ,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,GAAG,CAAC,UAAU,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC1D;;ACpCe,SAAS,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE;AACpD,CAAC,GAAG,GAAG9S,cAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC,IAAI,GAAG,GAAG+S,gBAAW,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;AACrB,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7B,EAAE,GAAG,GAAG5G,WAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,EAAE,KAAK,GAAGE,aAAQ,CAAC,GAAG,CAAC,CAAC;AACxB,EAAE,KAAK,CAAC,WAAW,EAAE;AACrB,KAAK,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAEF,WAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAK,QAAQ,CAACA,WAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC7C,EAAE;AACF;;ACRA,MAAM7F,MAAI,GAAG,MAAM,EAAE,CAAC;AACtB;AACA,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;AAC3B,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC;AACpC,EAAE;AACF,CAAC;AACD;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE;AAC9B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE;AACjC,EAAE,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9B,EAAE;AACF;AACA,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrC,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7B,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,EAAE;AACF;AACA,CAAC,OAAO,GAAG,CAAC;AACZ,CAAC;AACD;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AACrC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7B,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC;AACxC,EAAE;AACF,CAAC;AACD;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;AAC3C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;AAC/B,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7B,EAAE,GAAG,GAAG0M,gBAAS,CAAC7G,WAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAIlL,aAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACjD,GAAG,KAAK,GAAGA,aAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5B,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS;AACrC,GAAG,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAC/D,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClC,GAAG;AACH,EAAE;AACF,CAAC;AACD;AACA,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;AACzB,CAAC,QAAQ,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE;AACvC,CAAC;AACD;AACA,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;AAC9C,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;AAC5B,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;AAC1B;AACA,CAAC,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;AAC1B,EAAE,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC3B,EAAE,IAAI,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAC9B,EAAE;AACF;AACA,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;AAC1C,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC;AAChC,EAAE;AACF;AACA,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE;AACxB,EAAE,IAAI,GAAG,GAAG,CAAC;AACb,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClE,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;AACzD,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAChD;AACA,EAAE,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;AAChD,GAAG,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3D,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;AACxB,GAAG,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;AACpB,GAAG;AACH;AACA,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;AAChD,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC;AACrC,EAAE;AACF;AACA,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9B,CAACA,aAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AACD;AACA,SAAS,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AACzC,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC,OAAO,CAAC,cAAc,CAAC,GAAGY,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9E,CAAC;AACD;AACA,SAAS,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AACxC,CAAC,IAAI,OAAO,GAAG;AACf,EAAE,gBAAgB,EAAE,KAAK,CAAC,IAAI;AAC9B,EAAE,cAAc,EAAEA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;AAC1C,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;AAC5C,EAAE,CAAC;AACH,CAAC,IAAI,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC,OAAO,OAAO,CAAC;AAChB,CAAC;AACD;AACe,aAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;AACvC,CAAC,GAAG,GAAG7B,cAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AAC3B;AACA,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;AAC1C,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,IAAIsG,MAAI,CAAC;AAC1C;AACA,CAAC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxE;AACA,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;AAClB;AACA,CAAC,IAAI,QAAQ,GAAG,GAAG,CAAC;AACpB,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AACtC,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACzC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACnE,EAAE;AACF;AACA,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC;AAClB,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;AAC7B,EAAE,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;AACpD,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;AAC7C,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACpC,GAAG,CAAC,CAAC;AACL,EAAE;AACF;AACA,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,YAAY,CAAC;AAC9C,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,IAAI,kBAAkB,CAAC;AAC5D;AACA,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAChB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK;AAClC,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE;AAC3C,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO;AACrE;AACA,GAAG,IAAI,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAChD,GAAG,IAAI,EAAE,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;AACzC;AACA,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAChF,GAAG,CAAC,CAAC;AACL,EAAE;AACF;AACA,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACjF;AACA,CAAC,OAAO,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAClC,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AACnB,EAAE,IAAI,QAAQ,GAAGpH,OAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACrC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AACjD,EAAE,IAAI,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AAC7D,EAAE,IAAI,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACjE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;AAC5B;AACA,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AACpC,GAAG,IAAI,EAAE,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAC,EAAE;AAClD,GAAG,OAAO,GAAG,EAAE,qBAAqB;AACpC,GAAG;AACH;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACxG,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzD;AACA,EAAE,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvE,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACtB,GAAG,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;AACpB,GAAG;AACH;AACA,EAAE,IAAI,KAAK,IAAI,KAAK,EAAE;AACtB,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC5C,GAAG;AACH;AACA,EAAE,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,EAAE,CAAC;AACH;;ACvKA,MAAM,WAAW,GAAY;IAC3B,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,EAAE;IACd,UAAU,CAAC,GAAG,EAAE,QAAQ;;;;;;QAMtB,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC/B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAA;SACxD;KACF;CACF,CAAA;SAEe,qBAAqB,CAAC,GAAW;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;;IAGpC,OAAO,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;;QAEtD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAI,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE;YAC5D,OAAO,IAAI,EAAE,CAAA;SACd;QACD,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;KACtB,CAAA;AACH,CAAC;SAEe,qBAAqB,CACnC,GAAW,EACX,MAAsB;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;;IAGpC,OAAO,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;;;;;QAKtD,IACEM,aAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAI,CAAC,CAAC,KAAK,OAAO;YAC5C,iBAAiB,CAAC,GAAG,CAAC,GAAI,CAAC,EAC3B;YACA,OAAO,IAAI,EAAE,CAAA;SACd;QAED,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAI,CAAC,CAAA;;QAG/B,IAAI,UAA8B,CAAA;QAClC,KAAK,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;YACxD,MAAM,OAAO,GACX,OAAO,IAAI,KAAK,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClE,IAAI,OAAO,EAAE;gBACX,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;gBAC3C,MAAK;aACN;SACF;QACD,IAAI,UAAU,EAAE;;YAEd,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAC9B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;aAC1C;YACD,GAAG,CAAC,GAAG,GAAG,UAAU,CAAA;SACrB;QAED,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;KACtB,CAAA;AACH,CAAC;SAEe,oBAAoB,CAClC,MAAqB;IAErB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;;IAG5C,OAAO,SAAS,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QACrD,IAAI,GAAG,GAAG,GAAG,CAAC,GAAI,CAAA;;;;;QAKlB,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;;YAE7B,mBAAmB,CAACY,OAAK,CAACZ,aAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YACnE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACjC,IAAIoB,WAAS;gBAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YAEhD,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;YACb,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;SAC9B;aAAM;YACL,IAAI,EAAE,CAAA;SACP;KACF,CAAA;AACH,CAAC;SAEe,oBAAoB,CAClC,GAAW,EACX,MAAqB;;IAGrB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IAEzD,MAAM,IAAI,GAAG,kBAAkB,CAACb,eAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAE7D,IAAI,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAE7D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACrE,OAAO,IAAI,CAAA;IAEb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,uCAAuC,GAAG,GAAG,CAAC,CAAA;QAC5E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAC3B,4EAA4E;YAC1E,0DAA0D;YAC1D,uEAAuE,CAC1E,CAAA;QACD,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,KAAK,CAAA;AACd,CAAC;SAEe,mBAAmB,CAAC,GAAW,EAAE,MAAqB;IACpE,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAA;QAC3C,MAAM,IAAI,qBAAqB,CAC7B,oBAAoB,GAAG;;EAE3B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;8FAEuD,CACzF,CAAA;KACF;AACH;;AClIA,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;AAC7C,MAAM,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAA;AACvD,MAAMkT,YAAU,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;AAC/C,MAAMlG,SAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;SAenB,gBAAgB,CAC9B,GAAW,EACX,MAAqB,EACrB,UAA4B,EAAE;IAE9B,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,OAAO,EAAE;QACX,cAAc,CACZ,uBAAuB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC9D,CAAA;QACD,OAAO,OAAO,CAAA;KACf;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;IACrC,MAAM,MAAM,GAAG;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;KACpC,CAAA;IACD,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,eAAe,WAAW,CACxB,GAAW,EACX,MAAqB,EACrB,OAAyB;;IAEzB,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAChE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAC/B,MAAM,SAAS,GAAGA,SAAO,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAA;IACvD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA;IAEzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;;IAG3D,MAAM,MAAM,GACV,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;IACtE,IAAI,MAAM,EAAE;;;;;;QAOVA,SAAO,IAAIkG,YAAU,CAAC,YAAY,SAAS,EAAE,CAAC,CAAA;QAC9C,OAAO,MAAM,CAAA;KACd;;IAGD,MAAM,EAAE,GAAG,CAAA,OAAC,MAAM,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,0CAAE,EAAE,KAAI,GAAG,CAAA;IAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEzB,IAAI,IAAI,GAAkB,IAAI,CAAA;IAC9B,IAAI,GAAG,GAA6B,IAAI,CAAA;;IAGxC,MAAM,SAAS,GAAGlG,SAAO,GAAGhM,sBAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACtD,IAAI,UAAU,IAAI,IAAI,EAAE;;;QAGtB,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACzC,OAAO,IAAI,CAAA;SACZ;;;;;;QAMD,IAAI,OAAO,CAAC,GAAG,IAAI,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACrD,IAAI;gBACF,IAAI,GAAG,MAAME,aAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBACvC8L,SAAO,IAAI,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,CAAA;aACjE;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACvB,MAAM,CAAC,CAAA;iBACR;aACF;SACF;QACD,IAAI,IAAI,EAAE;YACR,IAAI;gBACF,GAAG,GAAG,OACJmG,2BAA2B,CAAC,IAAI,CAAC;oBACjCC,kCAAkC,CAAC,IAAI,EAAE3T,aAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAC7D,0CAAE,QAAQ,EAAE,CAAA;aACd;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,CAAC,IAAI,CAAC,iCAAiC,GAAG,GAAG,EAAE;oBACnD,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAA;aACH;SACF;KACF;SAAM;QACLuN,SAAO,IAAI,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,aAAa,SAAS,EAAE,CAAC,CAAA;QACpE,IAAI/L,UAAQ,CAAC,UAAU,CAAC,EAAE;YACxB,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;YACtB,GAAG,GAAG,UAAU,CAAC,GAAG,CAAA;SACrB;aAAM;YACL,IAAI,GAAG,UAAU,CAAA;SAClB;KACF;IACD,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,IAAI,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CACb,sBAAsB,GAAG,kBAAkB,EAAE,KAAK;gBAChD,wEAAwE;gBACxE,mEAAmE;gBACnE,qEAAqE,CACxE,CAAA;SACF;aAAM;YACL,OAAO,IAAI,CAAA;SACZ;KACF;;IAGD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACrD,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;;IAG1C,MAAM,cAAc,GAAG+L,SAAO,GAAGhM,sBAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAC3E,IACE,eAAe,IAAI,IAAI;SACtBC,UAAQ,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,IAAI,IAAI,IAAI,CAAC,EAC3D;;QAEA+L,SAAO;YACL,cAAc,CACZ,QAAQ,CAAC,cAAc,CAAC,GAAGpO,MAAK,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAChE,CAAA;KACJ;SAAM;QACLoO,SAAO,IAAI,cAAc,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,SAAS,EAAE,CAAC,CAAA;QACrE,IAAI,GAAG,eAAe,CAAC,IAAK,CAAA;QAC5B,GAAG,GAAG,eAAe,CAAC,GAAG,CAAA;KAC1B;IAED,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE;QACnB,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAc,CAAA;QACpE,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;YACvC,MAAM,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;SAClD;KACF;IAED,IAAI,GAAG,EAAE;QACP,QAAQ,GAAG,CAAC,kBAAkB,GAAG,MAAM,YAAY,CACjD,IAAI,EACJ,GAAgB,EAChB,GAAG,CACJ,EAAC;KACH;SAAM;QACL,QAAQ,GAAG,CAAC,eAAe,GAAG;YAC5B,IAAI;YACJ,GAAG;YACH,IAAI,EAAE4F,MAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACjB,EAAC;KACtB;AACH;;ACrKA;;;;AAIA,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAEzC,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;AAC/C,MAAM5F,SAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;AAEnC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAA;SAEtC,mBAAmB,CACjC,MAAqB;IAErB,MAAM,EACJ,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAClC,WAAW,EACZ,GAAG,MAAM,CAAA;;IAGV,IAAI,cAAkC,CAAA;IACtC,IAAI,QAAQ,EAAE;QACZ,MAAM,gBAAgB,GAAGhN,eAAa,CAACP,aAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;QACrE,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;;;YAGtC,cAAc,GAAG,QAAQO,eAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAA;SACtE;aAAM;;;YAGL,cAAc,GAAG,IAAI,gBAAgB,EAAE,CAAA;SACxC;KACF;;IAGD,OAAO,eAAe,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;;QAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE;YACzD,OAAO,IAAI,EAAE,CAAA;SACd;QAED,IACE,MAAM,CAAC,cAAc;;YAErB,EAAC,MAAA,GAAG,CAAC,GAAG,0CAAE,UAAU,CAAC,kBAAkB,CAAC,CAAA;YACxC,EAAC,MAAA,GAAG,CAAC,GAAG,0CAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAA,EACtC;;YAEA,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;;;;YAIzB,UAAU,CAAC;;gBAET,IAAI,GAAG,CAAC,aAAa;oBAAE,OAAM;;gBAE7B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBACpB,GAAG,CAAC,GAAG,CACL,8DAA8D,GAAG,CAAC,GAAG,OAAO;oBAC1E,qDAAqD,CACxD,CAAA;aACF,EAAE,4BAA4B,CAAC,CACjC,CAAA;YACD,OAAM;SACP;QAED,IAAI,GAAG,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAI,CAAC,CAAC,CAAC,OAAO,CACzD,qBAAqB,EACrB,IAAI,CACL,CAAA;QAED,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QAElC,IAAI;YACF,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;;YAEjD,IAAI,WAAW,EAAE;gBACf,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;gBACpD,MAAM,GAAG,GAAG,MAAA,OAAC,MAAM,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,0CACvD,eAAe,0CAAE,GAAG,CAAA;gBACxB,IAAI,GAAG,EAAE;oBACP,OAAOyO,MAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;iBACnD;qBAAM;oBACL,OAAO,IAAI,EAAE,CAAA;iBACd;aACF;;YAGD,MAAM,SAAS,GAAGzO,eAAa,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACxD,MAAM,OAAO,GAAGA,eAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACjD,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBACjC,MAAM,UAAU,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAA;;gBAExD,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;oBAC9B,MAAM,CAAC,IAAI,CACTpB,MAAK,CAAC,MAAM,CACV,8DAA8D;wBAC5D,cAAcA,MAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAASA,MAAK,CAAC,IAAI,CAC9C,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAC7B,GAAG,CACP,CACF,CAAA;iBACF;aACF;YAED,IACE,WAAW,CAAC,GAAG,CAAC;gBAChB,eAAe,CAAC,GAAG,CAAC;gBACpB,YAAY,CAAC,GAAG,CAAC;gBACjB,WAAW,CAAC,GAAG,CAAC,EAChB;;gBAEA,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;;;gBAG5B,GAAG,GAAG0B,UAAQ,CAAC,GAAG,CAAC,CAAA;;;gBAInB,IACE,YAAY,CAAC,GAAG,CAAC;oBACjB,CAAC,eAAe,CAAC,GAAG,CAAC;qBACrB,MAAA,GAAG,CAAC,OAAO,CAAC,MAAM,0CAAE,QAAQ,CAAC,UAAU,CAAC,CAAA,EACxC;oBACA,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;iBACjC;;gBAGD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;gBAChD,IACE,WAAW;oBACX,CAAA,MAAA,OAAC,MAAM,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,0CAAE,eAAe,0CAAE,IAAI;wBAC5D,WAAW,EACb;oBACA0M,SAAO,IAAI,UAAU,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;oBACxD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;oBACpB,OAAO,GAAG,CAAC,GAAG,EAAE,CAAA;iBACjB;;gBAGD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE;oBACjD,IAAI,EAAE,MAAA,GAAG,CAAC,OAAO,CAAC,MAAM,0CAAE,QAAQ,CAAC,WAAW,CAAC;iBAChD,CAAC,CAAA;gBACF,IAAI,MAAM,EAAE;oBACV,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAA;oBACnD,MAAM,KAAK,GACT,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;yBACvB,cAAc,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAA;oBACpD,OAAOyB,MAAI,CACT,GAAG,EACH,GAAG,EACH,MAAM,CAAC,IAAI,EACX,IAAI,EACJ,MAAM,CAAC,IAAI;;oBAEX,KAAK,GAAG,4BAA4B,GAAG,UAAU,EACjD,MAAM,CAAC,GAAG,CACX,CAAA;iBACF;aACF;SACF;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;SACf;QAED,IAAI,EAAE,CAAA;KACP,CAAA;AACH;;SChLgB,wBAAwB,CACtC,MAAqB;IAErB,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAE1E,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,WAAmB;QACpD,OAAO,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,EAAE;YACzE,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC;YACtC,MAAM;YACN,WAAW;SACZ,CAAC,CAAA;KACH,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,MAAqB;IACzD,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC7B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAA;KACzB;SAAM;QACL,OAAOhP,aAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;KACnD;AACH,CAAC;AAED,MAAM,uBAAuB,GAAG,WAAW,CAAA;AAC3C,MAAM,cAAc,GAAG,CACrB,IAAmB,EACnB,CAAc,EACd,MAAsB,EACtB,QAAgB,EAChB,WAAoB;;IAEpB,MAAM,GAAG,GAAG,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,KAAI,EAAE,CAAA;IACrC,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;;QAErC,CAAC,CAAC,SAAS,CACT,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAC5B,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAC1B,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAClC,CAAA;KACF;SAAM,IACL,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QACnB,WAAW;QACX,WAAW,KAAK,GAAG;QACnB,QAAQ,KAAK,aAAa,EAC1B;;;;;QAKA,CAAC,CAAC,SAAS,CACT,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAC5B,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAC1B,IAAIA,aAAI,CAAC,KAAK,CAAC,IAAI,CACjBA,aAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,EACrC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACb,GAAG,CACL,CAAA;KACF;AACH,CAAC,CAAA;AACD,MAAM,WAAW,GAA2B,OAC1C,IAAI,EACJ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;;;;IAKvC,MAAM,MAAM,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAO,CAAA;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAA;IAE/B,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAEnC,MAAM,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI;QACtC,IAAI,IAAI,CAAC,IAAI,sBAAwB;YACnC,OAAM;SACP;;QAGD,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;YACzB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;YAC7C,IAAI,QAAQ,EAAE;gBACZ,iBAAiB,EAAE,CAAA;aACpB;YAED,IAAI,GAAG,EAAE;gBACP,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;aACtD;iBAAM,IAAI,QAAQ,EAAE;gBACnB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;gBAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;qBAC3B,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;qBACxC,IAAI,CAAC,EAAE,CAAC,CAAA;;gBAGX,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAA;;gBAG7D,CAAC,CAAC,SAAS,CACT,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EACnB,8BACE,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAC3B,qBAAqB,iBAAiB,gBAAgB,CACvD,CAAA;aACF;SACF;;QAGD,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAI,UAAU,EAAE;YACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC1B,IACE,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,KAAK;oBACP,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAC3B;oBACA,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;iBACpD;aACF;SACF;KACF,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;IAEnB,OAAO;QACL,IAAI;QACJ,IAAI,EAAE;YACJ;gBACE,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAEA,aAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC;iBAC/C;gBACD,QAAQ,EAAE,cAAc;aACzB;SACF;KACF,CAAA;AACH,CAAC,CAAA;SAEe,mBAAmB,CACjC,MAAqB;;IAGrB,OAAO,eAAe,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QAC1D,IAAI,GAAG,CAAC,aAAa,EAAE;YACrB,OAAO,IAAI,EAAE,CAAA;SACd;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;;QAExC,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,CAAC,OAAO,CAAC,KAAI,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,QAAQ,EAAE;YACxE,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YAC7C,IAAIyB,WAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC3B,IAAI;oBACF,IAAI,IAAI,GAAGA,WAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;oBAC7C,IAAI,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;oBAClE,OAAOuN,MAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;iBACpC;gBAAC,OAAO,CAAC,EAAE;oBACV,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;iBACf;aACF;SACF;QACD,IAAI,EAAE,CAAA;KACP,CAAA;AACH;;ACpLA,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;SAE3B,cAAc,CAAC,IAAY;;IAEzC,OAAO,SAAS,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QAC/C,MAAM,KAAK,GAAGzN,sBAAW,CAAC,GAAG,EAAE,CAAA;QAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAA;QACnB,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAW;YACvB,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;;YAE5D,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;SAC9B,CAAA;QACD,IAAI,EAAE,CAAA;KACP,CAAA;AACH;;MCLa,UAAU;IAoBrB,YAAY,GAAW;;;;QAZvB,OAAE,GAAkB,IAAI,CAAA;QACxB,SAAI,GAAkB,IAAI,CAAA;QAE1B,cAAS,GAAG,IAAI,GAAG,EAAc,CAAA;QACjC,oBAAe,GAAG,IAAI,GAAG,EAAc,CAAA;QACvC,oBAAe,GAAG,IAAI,GAAG,EAAc,CAAA;QACvC,oBAAe,GAAG,KAAK,CAAA;QACvB,oBAAe,GAA2B,IAAI,CAAA;QAC9C,uBAAkB,GAA2B,IAAI,CAAA;QACjD,cAAS,GAA+B,IAAI,CAAA;QAC5C,qBAAgB,GAAG,CAAC,CAAA;QAGlB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAA;KACnD;CACF;AAED,SAAS,mBAAmB,CAAC,GAAe,EAAE,IAAqB;IACjE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACjB,OAAM;KACP;IACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACb,GAAG,CAAC,SAAS,GAAG,IAAI,CAAA;IACpB,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;AAC1E,CAAC;MACY,WAAW;IAQtB,YAAY,SAA0B;QAPtC,mBAAc,GAAG,IAAI,GAAG,EAAsB,CAAA;QAC9C,kBAAa,GAAG,IAAI,GAAG,EAAsB,CAAA;;QAE7C,qBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAA;QACrD,oBAAe,GAAG,IAAI,GAAG,EAAU,CAAA;QAIjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;KAC3B;IAED,MAAM,cAAc,CAAC,MAAc;QACjC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KACpC;IAED,aAAa,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAA;KACxD;IAED,gBAAgB,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;KACvC;IAED,YAAY,CAAC,IAAY;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,IAAI,EAAE;YACR,MAAM,IAAI,GAAG,IAAI,GAAG,EAAc,CAAA;YAClC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG;gBACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;aACjC,CAAC,CAAA;SACH;KACF;IAED,gBAAgB,CAAC,GAAe,EAAE,OAAwB,IAAI,GAAG,EAAE;QACjE,GAAG,CAAC,eAAe,GAAG,IAAI,CAAA;QAC1B,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAA;QAC7B,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;KAC/B;IAED,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,GAAG,EAAc,CAAA;QAClC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG;YAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;SACjC,CAAC,CAAA;KACH;;;;;;IAOD,MAAM,gBAAgB,CACpB,GAAe,EACf,eAAyC,EACzC,eAAyC,EACzC,eAAwB;QAExB,GAAG,CAAC,eAAe,GAAG,eAAe,CAAA;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,CAAA;QACvC,MAAM,WAAW,IAAI,GAAG,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC,CAAA;QACrD,IAAI,gBAA6C,CAAA;;QAEjD,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE;YACtC,MAAM,GAAG,GACP,OAAO,QAAQ,KAAK,QAAQ;kBACxB,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;kBACvC,QAAQ,CAAA;YACd,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACtB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;SACrB;;QAED,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG;YACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACzB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACzB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;oBAEtB,CAAC,gBAAgB,KAAK,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;iBAC/D;aACF;SACF,CAAC,CAAA;;QAEF,MAAM,IAAI,IAAI,GAAG,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC,CAAA;QAC9C,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE;YACtC,MAAM,GAAG,GACP,OAAO,QAAQ,KAAK,QAAQ;kBACxB,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;kBACvC,QAAQ,CAAA;YACd,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;SACd;QACD,OAAO,gBAAgB,CAAA;KACxB;IAED,MAAM,kBAAkB,CAAC,MAAc;QACrC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACvD,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;YACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YACjC,GAAG,CAAC,EAAE,GAAG,UAAU,CAAA;YACnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YACvC,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;YAC9C,IAAI,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACvD,IAAI,CAAC,iBAAiB,EAAE;gBACtB,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAA;gBAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;aACnD;YACD,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;SAC3B;QACD,OAAO,GAAG,CAAA;KACX;;;;;IAMD,mBAAmB,CAAC,IAAY;QAC9B,IAAI,GAAGhB,eAAa,CAAC,IAAI,CAAC,CAAA;QAC1B,IAAI,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACvD,IAAI,CAAC,iBAAiB,EAAE;YACtB,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAA;YAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;SACnD;QAED,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,IAAI,EAAE,CAAA;QACjC,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE;YACjC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;gBAClC,OAAO,CAAC,CAAA;aACT;SACF;QAED,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;QAC/B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QACf,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,OAAO,GAAG,CAAA;KACX;;;;;IAMD,MAAM,UAAU,CAAC,GAAW;;QAC1B,GAAG,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAA;QAClD,MAAM,UAAU,GAAG,CAAA,OAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,0CAAE,EAAE,KAAI,GAAG,CAAA;QACnE,MAAM,GAAG,GAAGiM,cAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;QACzC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAGlK,kBAAQ,CAAC,GAAG,CAAC,CAAA;QAChD,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACnC,GAAG,GAAG,QAAQ,GAAG,GAAG,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;SACrD;QACD,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;KACzB;;;ACxLI,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;AAElD,MAAM,mBAAmB,GAAG/B,eAAa,CAAC,UAAU,CAAC,CAAA;AAqBrD,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,GAAGP,aAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAA;AAC7E,CAAC;AAEM,eAAe,eAAe,CACnC,IAAY,EACZ,MAAqB;IAErB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IAEjD,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,CAAC,UAAU,CAAA;IAC3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAC3D,CAAC,IAAI,KAAK,IAAI,KAAKA,aAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CACtC,CAAA;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC5E,IAAI,QAAQ,IAAI,kBAAkB,IAAI,KAAK,EAAE;;QAE3C,QAAQ,CAAC,mBAAmBb,MAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACnD,MAAM,CAAC,MAAM,CAAC,IAAI,CAChBA,MAAK,CAAC,KAAK,CACT,GAAGa,aAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,gCAAgC,CACtE,EACD,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CACjC,CAAA;QACD,MAAM,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3B,OAAM;KACP;IAED,QAAQ,CAAC,iBAAiBb,MAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;;IAGjD,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;QACxC,EAAE,CAAC,IAAI,CAAC;YACN,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,GAAG;SACV,CAAC,CAAA;QACF,OAAM;KACP;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;;IAG/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAe;QAC7B,IAAI;QACJ,SAAS;QACT,OAAO,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;QAC9B,IAAI,EAAE,MAAM,gBAAgB,CAAC,IAAI,CAAC;QAClC,MAAM;KACP,CAAA;IAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;QACnC,IAAI,MAAM,CAAC,eAAe,EAAE;YAC1B,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;YAChE,IAAI,eAAe,EAAE;gBACnB,UAAU,CAAC,OAAO,GAAG,eAAe,CAAA;gBACpC,MAAK;aACN;SACF;KACF;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE;;QAE9B,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAACA,MAAK,CAAC,KAAK,CAAC,cAAc,CAAC,GAAGA,MAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACrE,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,CAAA;YACF,EAAE,CAAC,IAAI,CAAC;gBACN,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;sBAC9B,GAAG;sBACH,GAAG,GAAGoB,eAAa,CAACP,aAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC1D,CAAC,CAAA;SACH;aAAM;;YAEL,QAAQ,CAAC,wBAAwBb,MAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;SACzD;QACD,OAAM;KACP;IAED,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,aAAa,CACpB,IAAY,EACZ,OAAqB,EACrB,SAAiB,EACjB,EAAE,MAAM,EAAE,EAAE,EAAiB;IAE7B,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAc,CAAA;IAChD,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACzB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAA;QAC9C,IAAI,cAAc,EAAE;YAClB,SAAQ;SACT;QAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAGtB,CAAA;QACJ,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACnD,IAAI,UAAU,EAAE;YACd,cAAc,GAAG,IAAI,CAAA;YACrB,SAAQ;SACT;QAED,OAAO,CAAC,IAAI,CACV,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM;YACrD,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,SAA2B;YACjD,SAAS;YACT,IAAI,EAAE,QAAQ,CAAC,GAAG;YAClB,YAAY,EAAE,WAAW,CAAC,GAAG;SAC9B,CAAC,CAAC,CACJ,CAAA;KACF;IAED,IAAI,cAAc,EAAE;QAClB,MAAM,CAAC,MAAM,CAAC,IAAI,CAACA,MAAK,CAAC,KAAK,CAAC,cAAc,CAAC,GAAGA,MAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAChE,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,EAAE,CAAC,IAAI,CAAC;YACN,IAAI,EAAE,aAAa;SACpB,CAAC,CAAA;KACH;SAAM;QACL,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,OAAO;aACJ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAKA,MAAK,CAAC,KAAK,CAAC,aAAa,CAAC,GAAGA,MAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAC/D,IAAI,CAAC,IAAI,CAAC,EACb,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CACjC,CAAA;QACD,EAAE,CAAC,IAAI,CAAC;YACN,IAAI,EAAE,QAAQ;YACd,OAAO;SACR,CAAC,CAAA;KACH;AACH,CAAC;AAEM,eAAe,mBAAmB,CACvC,IAAY,EACZ,MAAqB,EACrB,QAAQ,GAAG,KAAK;;IAEhB,MAAM,OAAO,GAAG,CAAC,IAAI,MAAA,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,mCAAI,EAAE,CAAC,CAAC,CAAA;IACtE,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE;QAC7C,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;KACnC;SAAM;QACL,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE;YACrC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YACxD,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE;gBAC3C,IAAIyU,WAAK,CAAC,IAAI,EAAE,OAAO,CAAC,IAAIA,WAAK,CAAC5T,aAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE;oBACrE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;;;oBAGpB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,IAAK,CAAC,CAAA;oBAC7C,MAAK;iBACN;aACF;SACF;KACF;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,aAAa,CACX,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EACtC,OAAO,EACP,IAAI,CAAC,GAAG,EAAE,EACV,MAAM,CACP,CAAA;KACF;AACH,CAAC;AAED,SAAS,eAAe,CACtB,IAAgB,EAChB,UAGE,EACF,eAA6B,CAAC,IAAI,CAAC;IAEnC,IAAI,IAAI,CAAC,eAAe,EAAE;QACxB,UAAU,CAAC,GAAG,CAAC;YACb,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI;SAClB,CAAC,CAAA;;;QAIF,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAClE,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;aACrE;SACF;QAED,OAAO,KAAK,CAAA;KACb;IAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACxB,OAAO,IAAI,CAAA;KACZ;;;;IAKD,IACE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EACrD;QACA,OAAO,IAAI,CAAA;KACZ;IAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;QACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACtC,UAAU,CAAC,GAAG,CAAC;gBACb,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,IAAI;aAClB,CAAC,CAAA;YACF,SAAQ;SACT;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;;YAEnC,OAAO,IAAI,CAAA;SACZ;QAED,IAAI,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;YACnD,OAAO,IAAI,CAAA;SACZ;KACF;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,UAAU,CAAC,GAAe,EAAE,SAAiB,EAAE,IAAqB;IAC3E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACjB,OAAM;KACP;IACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACb,GAAG,CAAC,gBAAgB,GAAG,SAAS,CAAA;IAChC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAA;IAC1B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAA;IACpB,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAA;IAC7B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ;QAC7B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACtC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;SACtC;KACF,CAAC,CAAA;AACJ,CAAC;SAEe,mBAAmB,CACjC,IAAqB,EACrB,EAAE,EAAE,EAAiB;;;;IAKrB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACpB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG;QACf,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAA;QACxB,QAAQ,CAAC,aAAab,MAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KAC7C,CAAC,CAAA;IACF,EAAE,CAAC,IAAI,CAAC;QACN,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;KACnC,CAAC,CAAA;AACJ,CAAC;AAUD;;;;;;;SAOgB,kBAAkB,CAChC,IAAY,EACZ,KAAa,EACb,IAAsD;IAEtD,IAAI,KAAK,kBAAgC;;IAEzC,IAAI,SAAS,kBAAgC;IAC7C,IAAI,UAAU,GAAW,EAAE,CAAA;IAE3B,SAAS,MAAM,CAAC,KAAa;QAC3B,IAAI,CAAC,GAAG,CAAC;YACP,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;YACpC,GAAG,EAAE,KAAK,GAAG,CAAC;SACf,CAAC,CAAA;QACF,UAAU,GAAG,EAAE,CAAA;KAChB;IAED,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC3B,QAAQ,KAAK;YACX,oBAAuB;YACvB;gBACE,IAAI,IAAI,KAAK,GAAG,EAAE;oBAChB,SAAS,GAAG,KAAK,CAAA;oBACjB,KAAK,+BAAiC;iBACvC;qBAAM,IAAI,IAAI,KAAK,GAAG,EAAE;oBACvB,SAAS,GAAG,KAAK,CAAA;oBACjB,KAAK,+BAAiC;iBACvC;qBAAM,IAAI,IAAI,KAAK,GAAG,EAAE;oBACvB,SAAS,GAAG,KAAK,CAAA;oBACjB,KAAK,4BAA8B;iBACpC;qBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC1B,SAAQ;iBACT;qBAAM;oBACL,IAAI,KAAK,qBAAwB;wBAC/B,IAAI,IAAI,KAAK,GAAG,EAAE;4BAChB,KAAK,mBAAqB;yBAC3B;6BAAM;;;;4BAIL,OAAO,IAAI,CAAA;yBACZ;qBACF;yBAAM,IAAI,KAAK,sBAAyB;wBACvC,IAAI,IAAI,KAAK,GAAG,EAAE;4BAChB,OAAO,KAAK,CAAA;yBACb;6BAAM,IAAI,IAAI,KAAK,GAAG,EAAE;4BACvB,SAAQ;yBACT;6BAAM;4BACLuI,OAAK,CAAC,CAAC,CAAC,CAAA;yBACT;qBACF;iBACF;gBACD,MAAK;YACP;gBACE,IAAI,IAAI,KAAK,GAAG,EAAE;oBAChB,MAAM,CAAC,CAAC,CAAC,CAAA;oBACT,IAAI,SAAS,qBAAwB;;wBAEnC,OAAO,KAAK,CAAA;qBACb;yBAAM;wBACL,KAAK,GAAG,SAAS,CAAA;qBAClB;iBACF;qBAAM;oBACL,UAAU,IAAI,IAAI,CAAA;iBACnB;gBACD,MAAK;YACP;gBACE,IAAI,IAAI,KAAK,GAAG,EAAE;oBAChB,MAAM,CAAC,CAAC,CAAC,CAAA;oBACT,IAAI,SAAS,qBAAwB;;wBAEnC,OAAO,KAAK,CAAA;qBACb;yBAAM;wBACL,KAAK,GAAG,SAAS,CAAA;qBAClB;iBACF;qBAAM;oBACL,UAAU,IAAI,IAAI,CAAA;iBACnB;gBACD,MAAK;YACP;gBACE,IAAI,IAAI,KAAK,GAAG,EAAE;oBAChB,MAAM,CAAC,CAAC,CAAC,CAAA;oBACT,IAAI,SAAS,qBAAwB;;wBAEnC,OAAO,KAAK,CAAA;qBACb;yBAAM;wBACL,KAAK,GAAG,SAAS,CAAA;qBAClB;iBACF;qBAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;oBACrDA,OAAK,CAAC,CAAC,CAAC,CAAA;iBACT;qBAAM;oBACL,UAAU,IAAI,IAAI,CAAA;iBACnB;gBACD,MAAK;YACP;gBACE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;SACzD;KACF;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAASA,OAAK,CAAC,GAAW;IACxB,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,6DAA6D;QAC3D,2BAA2B,CACf,CAAA;IAChB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,MAAM,GAAG,CAAA;AACX,CAAC;AAED;AACA;AACA;AACA,eAAe,gBAAgB,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAGjG,WAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,KAAK,GAAGA,WAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;QACvC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,CAAA;YACT,MAAM,IAAI,GAAG;gBACX,CAAC,EAAE,CAAA;gBACH,MAAM,QAAQ,GAAGA,WAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;gBAC1C,IAAI,QAAQ,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE;oBAChC,CAAC,CAAC,CAAC,CAAC,CAAA;iBACL;qBAAM;oBACL,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;iBACrB;aACF,CAAA;YACD,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;SACrB,CAAC,CAAA;QACF,OAAOA,WAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;KACtC;SAAM;QACL,OAAO,OAAO,CAAA;KACf;AACH,CAAC;AAED,eAAe,aAAa,CAAC,MAAqB;;IAEhD,MAAM,CAAC,iBAAiB,GAAGF,sBAAW,CAAC,GAAG,EAAE,CAAA;IAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAA;IAErC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IAEpB,IAAI,SAAS,GAAG,IAAI,CAAA;IACpB,IAAI;QACF,SAAS,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;KAC3D;IAAC,OAAO,GAAQ,EAAE;QACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;YACtC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,OAAM;KACP;IAED,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;QAC3B,IAAI,GAAG,KAAK,KAAK,EAAE;;YAEjB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;SAC7B;KACF;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;QACxC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;KAChC;SAAM;QACL,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;KACpE;AACH;;;;ACxeA,MAAME,IAAE,GAAG/E,WAAa,CAAC;AACzB;AACA,IAAImX,UAAQ,CAAC;AACb;AACA,SAAS,YAAY,GAAG;AACxB,CAAC,IAAI;AACL,EAAEpS,IAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,EAAE,OAAO,IAAI,CAAC;AACd,EAAE,CAAC,OAAO,CAAC,EAAE;AACb,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF,CAAC;AACD;AACA,SAAS,eAAe,GAAG;AAC3B,CAAC,IAAI;AACL,EAAE,OAAOA,IAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzE,EAAE,CAAC,OAAO,CAAC,EAAE;AACb,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF,CAAC;AACD;IACA,UAAc,GAAG,MAAM;AACvB,CAAC,IAAIoS,UAAQ,KAAK,SAAS,EAAE;AAC7B,EAAEA,UAAQ,GAAG,YAAY,EAAE,IAAI,eAAe,EAAE,CAAC;AACjD,EAAE;AACF;AACA,CAAC,OAAOA,UAAQ,CAAC;AACjB,CAAC;;AC3BD,MAAMnW,IAAE,GAAGhB,qBAAa,CAAC;AACzB,MAAM+E,IAAE,GAAGrE,WAAa,CAAC;AACzB,MAAMyW,UAAQ,GAAGlW,UAAoB,CAAC;AACtC;AACA,MAAMmW,OAAK,GAAG,MAAM;AACpB,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AACnC,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,IAAIpW,IAAE,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACvD,EAAE,IAAImW,UAAQ,EAAE,EAAE;AAClB,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,IAAI;AACL,EAAE,OAAOpS,IAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;AACrF,GAAG,CAACoS,UAAQ,EAAE,GAAG,KAAK,CAAC;AACvB,EAAE,CAAC,OAAO,CAAC,EAAE;AACb,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF,CAAC,CAAC;AACF;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;AACjC,CAACE,eAAc,GAAGD,OAAK,CAAC;AACxB,CAAC,MAAM;AACP,CAACC,eAAc,GAAGD,OAAK,EAAE,CAAC;AAC1B;;IC7BA,cAAc,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK;AAC/C,CAAC,MAAM,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AAChH;AACA,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;AAC7C,EAAE,YAAY,EAAE,IAAI;AACpB,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,GAAG,GAAG;AACR,GAAG,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;AACvB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAClB,GAAG,OAAO,MAAM,CAAC;AACjB,GAAG;AACH,EAAE,GAAG,CAAC,KAAK,EAAE;AACb,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACjB,GAAG;AACH,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,OAAO,MAAM,CAAC;AACf,CAAC;;AClBD,MAAM9T,MAAI,GAAGtD,aAAe,CAAC;AAC7B,MAAMsX,cAAY,GAAG5W,qBAAwB,CAAC;AAC9C,MAAM,CAAC,QAAQ,EAAEqE,IAAE,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG9D,WAAa,CAAC;AAC7D,MAAM,KAAK,GAAGuB,eAAiB,CAAC;AAChC,MAAM,QAAQ,GAAGwF,UAAoB,CAAC;AACtC,MAAM,kBAAkB,GAAGc,cAA2B,CAAC;AACvD;AACA;AACA,MAAM,gBAAgB,GAAGxF,MAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC1D;AACA,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAG,CAAC,MAAM;AACtC;AACA;AACA,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AACnC;AACA,CAAC,IAAI,UAAU,CAAC;AAChB;AACA,CAAC,OAAO,kBAAkB;AAC1B,EAAE,IAAI,UAAU,EAAE;AAClB;AACA,GAAG,OAAO,UAAU,CAAC;AACrB,GAAG;AACH;AACA,EAAE,MAAM,cAAc,GAAG,eAAe,CAAC;AACzC;AACA,EAAE,IAAI,kBAAkB,GAAG,KAAK,CAAC;AACjC,EAAE,IAAI;AACN,GAAG,MAAMyB,IAAE,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AACrD,GAAG,kBAAkB,GAAG,IAAI,CAAC;AAC7B,GAAG,CAAC,MAAM,EAAE;AACZ;AACA,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3B,GAAG,OAAO,iBAAiB,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,MAAM,aAAa,GAAG,MAAMA,IAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9E,EAAE,MAAM,gBAAgB,GAAG,uCAAuC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvF;AACA,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzB,GAAG,OAAO,iBAAiB,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACzD,EAAE,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACxE;AACA,EAAE,OAAO,UAAU,CAAC;AACpB,EAAE,CAAC;AACH,CAAC,GAAG,CAAC;AACL;AACA,MAAM,QAAQ,GAAG,OAAO,KAAK,EAAE,MAAM,KAAK;AAC1C,CAAC,IAAI,WAAW,CAAC;AACjB;AACA,CAAC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC3B,EAAE,IAAI;AACN,GAAG,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,GAAG,WAAW,GAAG,KAAK,CAAC;AACvB,GAAG;AACH,EAAE;AACF;AACA,CAAC,MAAM,WAAW,CAAC;AACnB,CAAC,CAAC;AACF;AACA,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,OAAO,KAAK;AACxC,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACjC,EAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAC7C,EAAE;AACF;AACA,CAAC,OAAO,GAAG;AACX,EAAE,IAAI,EAAE,KAAK;AACb,EAAE,UAAU,EAAE,KAAK;AACnB,EAAE,WAAW,EAAE,KAAK;AACpB,EAAE,oBAAoB,EAAE,KAAK;AAC7B,EAAE,GAAG,OAAO;AACZ,EAAE,CAAC;AACH;AACA,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACjC,EAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;AACzD,GAAG,GAAG,OAAO;AACb,GAAG,GAAG,EAAE,SAAS;AACjB,GAAG,CAAC,CAAC,CAAC;AACN,EAAE;AACF;AACA,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;AACnE,CAAC,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;AAClC;AACA,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACzB,EAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;AAC/C,GAAG,GAAG,OAAO;AACb,GAAG,GAAG,EAAE;AACR,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,SAAS,EAAE,YAAY;AAC3B,IAAI;AACJ,GAAG,CAAC,CAAC,CAAC;AACN,EAAE;AACF;AACA,CAAC,IAAI,OAAO,CAAC;AACb,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AACzB,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAChC;AACA,CAAC,IAAI,QAAQ,KAAK,QAAQ,EAAE;AAC5B,EAAE,OAAO,GAAG,MAAM,CAAC;AACnB;AACA,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;AACpB,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpC,GAAG;AACH;AACA,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE;AAC1B,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrC,GAAG;AACH;AACA,EAAE,IAAI,OAAO,CAAC,WAAW,EAAE;AAC3B,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,IAAI,GAAG,EAAE;AACX,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChC,GAAG;AACH,EAAE,MAAM,IAAI,QAAQ,KAAK,OAAO,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;AAC5D,EAAE,MAAM,UAAU,GAAG,MAAM,sBAAsB,EAAE,CAAC;AACpD;AACA,EAAE,OAAO,GAAG,KAAK;AACjB,GAAG,CAAC,EAAE,UAAU,CAAC,wDAAwD,CAAC;AAC1E,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,+CAA+C,CAAC,CAAC;AAC9E;AACA,EAAE,YAAY,CAAC,IAAI;AACnB,GAAG,YAAY;AACf,GAAG,iBAAiB;AACpB,GAAG,kBAAkB;AACrB,GAAG,QAAQ;AACX,GAAG,iBAAiB;AACpB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,GAAG,mBAAmB,CAAC,wBAAwB,GAAG,IAAI,CAAC;AACvD,GAAG;AACH;AACA,EAAE,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAC;AACrC;AACA,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;AACpB,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,GAAG;AACH;AACA,EAAE,IAAI,GAAG,EAAE;AACX;AACA;AACA,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC;AAC5D,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAChC,GAAG,MAAM;AACT,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,GAAG;AACH;AACA,EAAE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,GAAG,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjF,EAAE,MAAM;AACR,EAAE,IAAI,GAAG,EAAE;AACX,GAAG,OAAO,GAAG,GAAG,CAAC;AACjB,GAAG,MAAM;AACT;AACA,GAAG,MAAM,SAAS,GAAG,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG,CAAC;AACrD;AACA;AACA,GAAG,IAAI,eAAe,GAAG,KAAK,CAAC;AAC/B,GAAG,IAAI;AACP,IAAI,MAAMA,IAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AACxD,IAAI,eAAe,GAAG,IAAI,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE;AACb;AACA,GAAG,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ;AACrD,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,IAAI,CAAC,eAAe,CAAC;AAC5D,GAAG,OAAO,GAAG,gBAAgB,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAC9D,GAAG;AACH;AACA,EAAE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;AACtC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACrB;AACA;AACA,GAAG,mBAAmB,CAAC,KAAK,GAAG,QAAQ,CAAC;AACxC,GAAG,mBAAmB,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvC,GAAG;AACH,EAAE;AACF;AACA,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B;AACA,CAAC,IAAI,QAAQ,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,YAAY,CAAC,CAAC;AAC/C,EAAE;AACF;AACA,CAAC,MAAM,UAAU,GAAGuS,cAAY,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;AACnF;AACA,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE;AACnB,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC1C,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACpC;AACA,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI;AACxC,IAAI,IAAI,OAAO,CAAC,oBAAoB,IAAI,QAAQ,GAAG,CAAC,EAAE;AACtD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,KAAK,OAAO;AACZ,KAAK;AACL;AACA,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;AACxB,IAAI,CAAC,CAAC;AACN,GAAG,CAAC,CAAC;AACL,EAAE;AACF;AACA,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AACpB;AACA,CAAC,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AACF;AACA,SAAS,gBAAgB,CAAC,MAAM,EAAE;AAClC,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1D,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC;AACrC;AACA,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC9C,EAAE;AACF;AACA,CAAC,OAAO,UAAU,CAAC;AACnB,CAAC;AACD;AACA,SAAS,oBAAoB,CAAC,CAAC,CAAC,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;AACnE,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE;AACnB,EAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/B,EAAE;AACF;AACA,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAClD,EAAE;AACF;AACA,CAAC,OAAO,gBAAgB,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC;AACD;AACA,MAAM,IAAI,GAAG,EAAE,CAAC;AAChB;AACA,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9D,CAAC,MAAM,EAAE,eAAe;AACxB,CAAC,KAAK,EAAE,QAAQ;AAChB,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC;AACjD,CAAC,EAAE;AACH,CAAC,GAAG,EAAE;AACN,EAAE,IAAI,EAAE,iEAAiE;AACzE,EAAE,GAAG,EAAE,CAAC,2DAA2D,EAAE,iEAAiE,CAAC;AACvI,EAAE;AACF,CAAC,CAAC,CAAC,CAAC;AACJ;AACA,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/D,CAAC,MAAM,EAAE,SAAS;AAClB,CAAC,KAAK,EAAE,iDAAiD;AACzD,CAAC,KAAK,EAAE,SAAS;AACjB,CAAC,EAAE;AACH,CAAC,GAAG,EAAE,kDAAkD;AACxD,CAAC,CAAC,CAAC,CAAC;AACJ;AACA,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5D,CAAC,MAAM,EAAE,gBAAgB;AACzB,CAAC,KAAK,EAAE,QAAQ;AAChB,CAAC,KAAK,EAAE,gBAAgB;AACxB,CAAC,EAAE;AACH,CAAC,GAAG,EAAE,kEAAkE;AACxE,CAAC,CAAC,CAAC,CAAC;AACJ;AACA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB;IACA,MAAc,GAAG,IAAI;;;;;;IC3RrBC,SAAc,GAAGC,QAAK;AACtBA,OAAK,CAAC,IAAI,GAAGpO,OAAI;AACjB;AACA,IAAIrE,IAAE,GAAG/E,YAAa;AACtB;AACA,SAAS,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE;AACtC,EAAE,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS;AAC7C,IAAI,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAO;AACzC;AACA,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC;AAC9B,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;AAClC,IAAI,OAAO,IAAI;AACf,GAAG;AACH,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,GAAE;AACpC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;AACzD,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA,SAASyX,WAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AACzC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAChD,IAAI,OAAO,KAAK;AAChB,GAAG;AACH,EAAE,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;AACpC,CAAC;AACD;AACA,SAASD,OAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;AACnC,EAAEzS,IAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE;AACpC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,GAAG0S,WAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAC;AACvD,GAAG,EAAC;AACJ,CAAC;AACD;AACA,SAASrO,MAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AAC9B,EAAE,OAAOqO,WAAS,CAAC1S,IAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;AACpD;;ICzCA,IAAc,GAAGyS,QAAK;AACtBA,OAAK,CAAC,IAAI,GAAGpO,OAAI;AACjB;AACA,IAAIrE,IAAE,GAAG/E,YAAa;AACtB;AACA,SAASwX,OAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;AACnC,EAAEzS,IAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE;AACpC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAC;AACjD,GAAG,EAAC;AACJ,CAAC;AACD;AACA,SAASqE,MAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AAC9B,EAAE,OAAO,SAAS,CAACrE,IAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;AAC9C,CAAC;AACD;AACA,SAAS,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;AACnC,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;AAClD,CAAC;AACD;AACA,SAAS,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;AACnC,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAI;AACrB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAG;AACpB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAG;AACpB;AACA,EAAE,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS;AACvC,IAAI,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAE;AACpD,EAAE,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS;AACvC,IAAI,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAE;AACpD;AACA,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAC;AAC5B,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAC;AAC5B,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAC;AAC5B,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAC;AAChB;AACA,EAAE,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACpB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,KAAK;AAC9B,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,KAAK;AAC9B,IAAI,CAAC,GAAG,GAAG,EAAE,KAAK,KAAK,KAAK,EAAC;AAC7B;AACA,EAAE,OAAO,GAAG;AACZ;;ACvCA,IAAI4G,OAAI;AACR,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI/B,cAAM,CAAC,eAAe,EAAE;AAC5D,EAAE+B,MAAI,GAAGjL,UAAuB;AAChC,CAAC,MAAM;AACP,EAAEiL,MAAI,GAAG1K,KAAoB;AAC7B,CAAC;AACD;IACA,OAAc,GAAGuW,QAAK;AACtBA,OAAK,CAAC,IAAI,GAAG,KAAI;AACjB;AACA,SAASA,OAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;AACnC,EAAE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACrC,IAAI,EAAE,GAAG,QAAO;AAChB,IAAI,OAAO,GAAG,GAAE;AAChB,GAAG;AACH;AACA,EAAE,IAAI,CAAC,EAAE,EAAE;AACX,IAAI,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACvC,MAAM,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC;AAClD,KAAK;AACL;AACA,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE;AAClD,MAAMA,OAAK,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;AACnD,QAAQ,IAAI,EAAE,EAAE;AAChB,UAAU,MAAM,CAAC,EAAE,EAAC;AACpB,SAAS,MAAM;AACf,UAAU,OAAO,CAAC,EAAE,EAAC;AACrB,SAAS;AACT,OAAO,EAAC;AACR,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE7L,MAAI,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;AAC9C;AACA,IAAI,IAAI,EAAE,EAAE;AACZ,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE;AACnE,QAAQ,EAAE,GAAG,KAAI;AACjB,QAAQ,EAAE,GAAG,MAAK;AAClB,OAAO;AACP,KAAK;AACL,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAC;AACd,GAAG,EAAC;AACJ,CAAC;AACD;AACA,SAAS,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AAC9B;AACA,EAAE,IAAI;AACN,IAAI,OAAOA,MAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;AACzC,GAAG,CAAC,OAAO,EAAE,EAAE;AACf,IAAI,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjE,MAAM,OAAO,KAAK;AAClB,KAAK,MAAM;AACX,MAAM,MAAM,EAAE;AACd,KAAK;AACL,GAAG;AACH;;ACxDA,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;AAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ;AACnC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,OAAM;AACjC;AACA,MAAMrI,MAAI,GAAGtD,cAAe;AAC5B,MAAM,KAAK,GAAG,SAAS,GAAG,GAAG,GAAG,IAAG;AACnC,MAAM,KAAK,GAAGU,QAAgB;AAC9B;AACA,MAAM,gBAAgB,GAAG,CAAC,GAAG;AAC7B,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC;AACnE;AACA,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK;AAClC,EAAE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,MAAK;AAClC;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACxE;AACA,MAAM;AACN;AACA,QAAQ,IAAI,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAC7C,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI;AACxC,mDAAmD,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;AACnE,OAAO;AACP,MAAK;AACL,EAAE,MAAM,UAAU,GAAG,SAAS;AAC9B,MAAM,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,qBAAqB;AACjE,MAAM,GAAE;AACR,EAAE,MAAM,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAC;AAC5D;AACA,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;AACpD,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAC;AACzB,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,OAAO;AACX,IAAI,OAAO;AACX,IAAI,UAAU;AACd,GAAG;AACH,EAAC;AACD;AACA,MAAMgX,OAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK;AAChC,EAAE,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;AACjC,IAAI,EAAE,GAAG,IAAG;AACZ,IAAI,GAAG,GAAG,GAAE;AACZ,GAAG;AACH,EAAE,IAAI,CAAC,GAAG;AACV,IAAI,GAAG,GAAG,GAAE;AACZ;AACA,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,EAAC;AAChE,EAAE,MAAM,KAAK,GAAG,GAAE;AAClB;AACA,EAAE,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACrD,IAAI,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM;AAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;AACrD,UAAU,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACvC;AACA,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,EAAC;AAC5B,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAK;AACtE;AACA,IAAI,MAAM,IAAI,GAAGpU,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAC;AACzC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;AACzE,QAAQ,KAAI;AACZ;AACA,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAC;AAC7B,GAAG,EAAC;AACJ;AACA,EAAE,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACjE,IAAI,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM;AAC7B,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,EAAC;AAC3B,IAAI,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK;AACxD,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;AACrB,QAAQ,IAAI,GAAG,CAAC,GAAG;AACnB,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAC;AAC7B;AACA,UAAU,OAAO,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;AACjC,OAAO;AACP,MAAM,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3C,KAAK,EAAC;AACN,GAAG,EAAC;AACJ;AACA,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9D,EAAC;AACD;AACA,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK;AAChC,EAAE,GAAG,GAAG,GAAG,IAAI,GAAE;AACjB;AACA,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,EAAC;AAChE,EAAE,MAAM,KAAK,GAAG,GAAE;AAClB;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;AAC5C,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,EAAC;AAC5B,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAK;AACtE;AACA,IAAI,MAAM,IAAI,GAAGA,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAC;AACzC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;AACzE,QAAQ,KAAI;AACZ;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;AAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,EAAC;AAChC,MAAM,IAAI;AACV,QAAQ,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAC;AAC3D,QAAQ,IAAI,EAAE,EAAE;AAChB,UAAU,IAAI,GAAG,CAAC,GAAG;AACrB,YAAY,KAAK,CAAC,IAAI,CAAC,GAAG,EAAC;AAC3B;AACA,YAAY,OAAO,GAAG;AACtB,SAAS;AACT,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE;AACrB,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM;AAC7B,IAAI,OAAO,KAAK;AAChB;AACA,EAAE,IAAI,GAAG,CAAC,OAAO;AACjB,IAAI,OAAO,IAAI;AACf;AACA,EAAE,MAAM,gBAAgB,CAAC,GAAG,CAAC;AAC7B,EAAC;AACD;IACA,OAAc,GAAGoU,QAAK;AACtBA,OAAK,CAAC,IAAI,GAAG;;;;AC1Hb,MAAM,OAAO,GAAG,CAAC,OAAO,GAAG,EAAE,KAAK;AAClC,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;AAChD,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;AACvD;AACA,CAAC,IAAI,QAAQ,KAAK,OAAO,EAAE;AAC3B,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC;AAC/F,CAAC,CAAC;AACF;AACAC,iBAAc,GAAG,OAAO,CAAC;AACzB;yBACsB,GAAG;;ACbzB,MAAMrU,MAAI,GAAGtD,aAAe,CAAC;AAC7B,MAAM,KAAK,GAAGU,OAAgB,CAAC;AAC/B,MAAM,UAAU,GAAGO,iBAAmB,CAAC;AACvC;AACA,SAAS,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE;AACvD,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;AAClD,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC9B,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;AACpD;AACA,IAAI,MAAM,eAAe,GAAG,YAAY,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AACnG;AACA;AACA;AACA,IAAI,IAAI,eAAe,EAAE;AACzB,QAAQ,IAAI;AACZ,YAAY,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9C,SAAS,CAAC,OAAO,GAAG,EAAE;AACtB;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,CAAC;AACjB;AACA,IAAI,IAAI;AACR,QAAQ,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAC9C,YAAY,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1C,YAAY,OAAO,EAAE,cAAc,GAAGqC,MAAI,CAAC,SAAS,GAAG,SAAS;AAChE,SAAS,CAAC,CAAC;AACX,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB;AACA,KAAK,SAAS;AACd,QAAQ,IAAI,eAAe,EAAE;AAC7B,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,QAAQ,GAAGA,MAAI,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;AAClF,KAAK;AACL;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,CAAC;AACD;AACA,SAASsU,gBAAc,CAAC,MAAM,EAAE;AAChC,IAAI,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChF,CAAC;AACD;IACA,gBAAc,GAAGA,gBAAc;;;;ACjD/B;AACA,MAAM,eAAe,GAAG,0BAA0B,CAAC;AACnD;AACA,SAAS,aAAa,CAAC,GAAG,EAAE;AAC5B;AACA,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC9C;AACA,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA,SAAS,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE;AACpD;AACA,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC;AACA;AACA;AACA;AACA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB;AACA;AACA,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC9C;AACA;AACA,IAAI,IAAI,qBAAqB,EAAE;AAC/B,QAAQ,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAClD,KAAK;AACL;AACA,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;eACsB,GAAG,cAAc;gBAChB,GAAG;;IC3C1BC,cAAc,GAAG,SAAS;;ACA1B,MAAM,YAAY,GAAG7X,cAAwB,CAAC;AAC9C;IACA8X,gBAAc,GAAG,CAAC,MAAM,GAAG,EAAE,KAAK;AAClC,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC1C;AACA,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACtC;AACA,CAAC,IAAI,MAAM,KAAK,KAAK,EAAE;AACvB,EAAE,OAAO,QAAQ,CAAC;AAClB,EAAE;AACF;AACA,CAAC,OAAO,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;;AChBD,MAAM/S,IAAE,GAAG/E,WAAa,CAAC;AACzB,MAAM,cAAc,GAAGU,gBAA0B,CAAC;AAClD;AACA,SAASqX,aAAW,CAAC,OAAO,EAAE;AAC9B;AACA,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC;AACrB,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC;AACA,IAAI,IAAI,EAAE,CAAC;AACX;AACA,IAAI,IAAI;AACR,QAAQ,EAAE,GAAGhT,IAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACvC,QAAQA,IAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5C,QAAQA,IAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACzB,KAAK,CAAC,OAAO,CAAC,EAAE,eAAe;AAC/B;AACA;AACA,IAAI,OAAO,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,CAAC;AACD;IACA,aAAc,GAAGgT,aAAW;;ACpB5B,MAAMzU,MAAI,GAAGtD,aAAe,CAAC;AAC7B,MAAM,cAAc,GAAGU,gBAAgC,CAAC;AACxD,MAAM,MAAM,GAAGO,OAAwB,CAAC;AACxC,MAAM,WAAW,GAAGuB,aAA6B,CAAC;AAClD;AACA,MAAMwV,OAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAC3C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAC7C,MAAM,eAAe,GAAG,0CAA0C,CAAC;AACnE;AACA,SAAS,aAAa,CAAC,MAAM,EAAE;AAC/B,IAAI,MAAM,CAAC,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AACzC;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5D;AACA,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC,QAAQ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AACjC;AACA,QAAQ,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AACtC,KAAK;AACL;AACA,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC;AACvB,CAAC;AACD;AACA,SAAS,aAAa,CAAC,MAAM,EAAE;AAC/B,IAAI,IAAI,CAACA,OAAK,EAAE;AAChB,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL;AACA;AACA,IAAI,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9C;AACA;AACA,IAAI,MAAM,UAAU,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7D;AACA;AACA;AACA,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,EAAE;AACjD;AACA;AACA;AACA;AACA,QAAQ,MAAM,0BAA0B,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7E;AACA;AACA;AACA,QAAQ,MAAM,CAAC,OAAO,GAAG1U,MAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxD;AACA;AACA,QAAQ,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxD,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC;AACjG;AACA,QAAQ,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5E;AACA,QAAQ,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,QAAQ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;AAC1D,QAAQ,MAAM,CAAC,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;AACvD,KAAK;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC;AACD;AACA,SAASN,OAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AACvC;AACA,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtC,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,QAAQ,IAAI,GAAG,IAAI,CAAC;AACpB,KAAK;AACL;AACA,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrC,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACzC;AACA;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,OAAO;AACf,QAAQ,IAAI;AACZ,QAAQ,OAAO;AACf,QAAQ,IAAI,EAAE,SAAS;AACvB,QAAQ,QAAQ,EAAE;AAClB,YAAY,OAAO;AACnB,YAAY,IAAI;AAChB,SAAS;AACT,KAAK,CAAC;AACN;AACA;AACA,IAAI,OAAO,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC;AACD;IACA,OAAc,GAAGA,OAAK;;ACxFtB,MAAMgV,OAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAC3C;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC1C,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;AAC7E,QAAQ,IAAI,EAAE,QAAQ;AACtB,QAAQ,KAAK,EAAE,QAAQ;AACvB,QAAQ,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjD,QAAQ,IAAI,EAAE,QAAQ,CAAC,OAAO;AAC9B,QAAQ,SAAS,EAAE,QAAQ,CAAC,IAAI;AAChC,KAAK,CAAC,CAAC;AACP,CAAC;AACD;AACA,SAAS,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE;AACtC,IAAI,IAAI,CAACA,OAAK,EAAE;AAChB,QAAQ,OAAO;AACf,KAAK;AACL;AACA,IAAI,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC;AACjC;AACA,IAAI,EAAE,CAAC,IAAI,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE;AACpC;AACA;AACA;AACA,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE;AAC7B,YAAY,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAe,CAAC,CAAC;AAC5D;AACA,YAAY,IAAI,GAAG,EAAE;AACrB,gBAAgB,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AAC3D,aAAa;AACb,SAAS;AACT;AACA,QAAQ,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AACjD,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE;AACtC,IAAI,IAAIA,OAAK,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC/C,QAAQ,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvD,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD;AACA,SAAS,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;AAC1C,IAAI,IAAIA,OAAK,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC/C,QAAQ,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC3D,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD;IACAC,QAAc,GAAG;AACjB,IAAI,gBAAgB;AACpB,IAAI,YAAY;AAChB,IAAI,gBAAgB;AACpB,IAAI,aAAa;AACjB,CAAC;;ACxDD,MAAM,EAAE,GAAGjY,qBAAwB,CAAC;AACpC,MAAMgD,OAAK,GAAGtC,OAAsB,CAAC;AACrC,MAAM,MAAM,GAAGO,QAAuB,CAAC;AACvC;AACA,SAAS,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AACvC;AACA,IAAI,MAAM,MAAM,GAAG+B,OAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD;AACA;AACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1E;AACA;AACA;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7C;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,CAAC;AACD;AACA,SAAS,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3C;AACA,IAAI,MAAM,MAAM,GAAGA,OAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD;AACA;AACA,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7E;AACA;AACA,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClF;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC;AACD;AACAkV,oBAAc,GAAG,KAAK,CAAC;0BACH,GAAG,MAAM;yBACV,GAAG,UAAU;AAChC;2BACqB,GAAGlV,QAAM;4BACR,GAAG;;ICpCzBmV,mBAAc,GAAG,KAAK,IAAI;AAC1B,CAAC,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjE,CAAC,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjE;AACA,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AACrC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,EAAE;AACF;AACA,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;AACrC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,EAAE;AACF;AACA,CAAC,OAAO,KAAK,CAAC;AACd,CAAC;;;;;ACdD,MAAM,IAAI,GAAGnY,aAAe,CAAC;AAC7B,MAAM,OAAO,GAAGU,iBAAmB,CAAC;AACpC;AACA,MAAM,UAAU,GAAG,OAAO,IAAI;AAC9B,CAAC,OAAO,GAAG;AACX,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;AACpB,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAC9B,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAC5B,EAAE,GAAG,OAAO;AACZ,EAAE,CAAC;AACH;AACA,CAAC,IAAI,QAAQ,CAAC;AACd,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;AACnB;AACA,CAAC,OAAO,QAAQ,KAAK,OAAO,EAAE;AAC9B,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACvD,EAAE,QAAQ,GAAG,OAAO,CAAC;AACrB,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxC,EAAE;AACF;AACA;AACA,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACvE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1B;AACA,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC,CAAC;AACF;AACA,iBAAiB,UAAU,CAAC;AAC5B;AACA,yBAAyB,UAAU,CAAC;AACpC;AACA,qBAAqB,OAAO,IAAI;AAChC,CAAC,OAAO,GAAG;AACX,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG;AAClB,EAAE,GAAG,OAAO;AACZ,EAAE,CAAC;AACH;AACA,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B;AACA,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACrC;AACA,CAAC,OAAO,GAAG,CAAC;AACZ,CAAC;;;;;;;AC5CD,MAAM0X,SAAO,GAAG,CAAC,EAAE,EAAE,IAAI,KAAK;AAC9B,CAAC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC3C,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/E,EAAE;AACF;AACA,CAAC,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AACF;AACAC,iBAAc,GAAGD,SAAO,CAAC;AACzB;yBACsB,GAAGA;;ACXzB,MAAM,OAAO,GAAGpY,iBAAmB,CAAC;AACpC;AACA,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AACtC;AACA,MAAMsY,SAAO,GAAG,CAAC,SAAS,EAAE,OAAO,GAAG,EAAE,KAAK;AAC7C,CAAC,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;AACtC,EAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAC7C,EAAE;AACF;AACA,CAAC,IAAI,WAAW,CAAC;AACjB,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;AACnB,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,aAAa,CAAC;AAC/E;AACA,CAAC,MAAM,OAAO,GAAG,UAAU,GAAG,UAAU,EAAE;AAC1C,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC5C;AACA,EAAE,IAAI,SAAS,KAAK,CAAC,EAAE;AACvB,GAAG,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACnD,GAAG,SAAS,GAAG,IAAI,CAAC;AACpB,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE;AACrC,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAC;AAC3E,GAAG;AACH;AACA,EAAE,OAAO,WAAW,CAAC;AACrB,EAAE,CAAC;AACH;AACA,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7B,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACzC;AACA,CAAC,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AACF;AACAC,iBAAc,GAAGD,SAAO,CAAC;AACzB;yBACsB,GAAGA,UAAQ;AACjC;2BACwB,GAAG,SAAS,IAAI;AACxC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACtC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,SAAS,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;AACxG,EAAE;AACF;AACA,CAAC,OAAO,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvC;;;;;;;;AC3Ca,MAAM,CAAC,cAAc,CAAC,IAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAgB,CAAC,KAAK,EAAE;AAC7F;AACA,MAAM,OAAO,CAAC;AACd;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,iBAAiB;AAC7B,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,+BAA+B;AAC3C,QAAQ,CAAC,MAAM,CAAC;AAChB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,gCAAgC;AAC5C,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,6BAA6B;AACzC,QAAQ,CAAC,MAAM,CAAC;AAChB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,qBAAqB;AACjC,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,SAAS;AACrB,QAAQ,CAAC,MAAM,CAAC;AAChB;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,SAAS;AACrB,QAAQ,CAAC,KAAK,CAAC;AACf;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,MAAM;AACb,WAAW;AACX,mEAAmE;AACnE,QAAQ,CAAC,KAAK,CAAC;AACf;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,mDAAmD;AAC/D,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,iCAAiC;AAC7C,QAAQ,CAAC,MAAM,CAAC;AAChB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,CAAC;AACR,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,oBAAoB;AAChC,QAAQ,CAAC,OAAO;AAChB,MAAM,CAAC,IAAI,CAAC;AACZ;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,6BAA6B;AACzC,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,oBAAoB;AAChC,QAAQ,CAAC,MAAM,CAAC;AAChB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,6BAA6B;AACzC,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,uBAAuB;AACnC,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,kBAAkB;AAC9B,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,aAAa;AACzB,QAAQ,CAAC,MAAM,CAAC;AAChB;AACA;AACA,IAAI,CAAC,WAAW;AAChB,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,8BAA8B;AAC1C,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,QAAQ;AACf,WAAW,CAAC,8CAA8C;AAC1D,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,QAAQ;AACf,WAAW,CAAC,8CAA8C;AAC1D,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,SAAS;AAChB,WAAW,CAAC,UAAU;AACtB,QAAQ,CAAC,OAAO;AAChB,MAAM,CAAC,IAAI,CAAC;AACZ;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,OAAO;AACd,WAAW,CAAC,QAAQ;AACpB,QAAQ,CAAC,OAAO;AAChB,MAAM,CAAC,IAAI,CAAC;AACZ;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,OAAO;AACd,WAAW,CAAC,oCAAoC;AAChD,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,OAAO;AACd,WAAW,CAAC,+CAA+C;AAC3D,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,UAAU;AACf,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,mCAAmC;AAC/C,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,OAAO;AACd,WAAW,CAAC,oDAAoD;AAChE,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,QAAQ;AACf,WAAW,CAAC,kCAAkC;AAC9C,QAAQ,CAAC,KAAK,CAAC;AACf;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,mBAAmB;AAC/B,QAAQ,CAAC,KAAK,CAAC;AACf;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,cAAc;AAC1B,QAAQ,CAAC,KAAK,CAAC;AACf;AACA;AACA,IAAI,CAAC,WAAW;AAChB,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,kBAAkB;AAC9B,QAAQ,CAAC,KAAK,CAAC;AACf;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,kBAAkB;AAC9B,QAAQ,CAAC,KAAK,CAAC;AACf;AACA;AACA,IAAI,CAAC,UAAU;AACf,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,QAAQ;AACf,WAAW,CAAC,8BAA8B;AAC1C,QAAQ,CAAC,KAAK,CAAC;AACf;AACA;AACA,IAAI,CAAC,OAAO;AACZ,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,kBAAkB;AAC9B,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,eAAe;AAC3B,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,SAAS;AACd,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,QAAQ;AACf,WAAW,CAAC,iCAAiC;AAC7C,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,6BAA6B;AACzC,QAAQ,CAAC,SAAS,CAAC;AACnB;AACA;AACA,IAAI,CAAC,QAAQ;AACb,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,MAAM;AACb,WAAW,CAAC,qBAAqB;AACjC,QAAQ,CAAC,OAAO,CAAC;AACjB;AACA;AACA,IAAI,CAAC,WAAW;AAChB,MAAM,CAAC,EAAE;AACT,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,qBAAqB;AACjC,QAAQ,CAAC,OAAO,CAAC,CAAC,aAAgB,CAAC,OAAO;;;;AC/Q7B,MAAM,CAAC,cAAc,CAAC,QAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,kBAAiB,4BAA2B,CAAC,KAAK,EAAE;AACzH,MAAM,kBAAkB,CAAC,UAAU;AACnC,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAC9C,CAAC,4BAA2B,CAAC,mBAAmB;AAChD;AACA,MAAM,iBAAiB,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC;AAC7C,OAAM;AACN,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,CAAC,QAAQ,CAAC,KAAK;AACrB,MAAM,CAAC,WAAW;AAClB,WAAW,CAAC,wCAAwC;AACpD,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClB;AACA,CAAC,CAAC;AACF;AACA,MAAM,QAAQ,CAAC,EAAE,CAAC;AAClB,MAAM,QAAQ,CAAC,EAAE,kBAAiB,CAAC,QAAQ;;ACjB9B,MAAM,CAAC,cAAc,CAACE,SAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,qBAAmB,CAAC,KAAK,EAAE,IAAIC,KAAG,CAACzY,qBAAa,CAAC;AACtH;AACA,IAAI,KAAK,CAACU,IAAoB,CAAC;AAC/B,IAAIgY,WAAS,CAACzX,QAAwB,CAAC;AACvC;AACA;AACA;AACA,MAAM,UAAU,CAAC,UAAU;AAC3B,MAAM,eAAe,CAAC,IAAGyX,WAAS,CAAC,kBAAkB,GAAG,CAAC;AACzD,MAAM,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACzE,OAAO,OAAO,CAAC;AACf,CAAC,qBAAmB,CAAC,UAAU,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe,CAAC,SAAS;AAC/B,IAAI;AACJ,MAAM,CAAC,aAAa;AACpB,WAAW;AACX,MAAM;AACN,MAAM,CAAC,KAAK;AACZ,QAAQ,CAAC;AACT;AACA,KAAK;AACL,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AAChCD,KAAG,CAAC,SAAS,CAAC;AACd,MAAM,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC;AAC3C,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC;AACpD,OAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjE,CAAC;;ACjCY,MAAM,CAAC,cAAc,CAACE,MAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,uBAAwB,qBAAsB,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC3Y,qBAAa,CAAC;AACjJ;AACA,IAAI,QAAQ,CAACU,SAAuB,CAAC;AACrC,IAAI,SAAS,CAACO,QAAwB,CAAC;AACvC;AACA;AACA;AACA,MAAM,gBAAgB,CAAC,UAAU;AACjC,MAAM,OAAO,CAAC,IAAG,QAAQ,CAAC,UAAU,GAAG,CAAC;AACxC,OAAO,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC;AACF;AACA,MAAM,eAAe,CAAC;AACtB,gBAAgB;AAChB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1D;AACA,OAAM;AACN,GAAG,gBAAgB;AACnB,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnE;AACA,CAAC,CAAC;AACF;AACA,MAAM2X,eAAa,CAAC,gBAAgB,EAAE,qBAAsB,CAACA,gBAAc;AAC3E;AACA;AACA;AACA;AACA,MAAM,kBAAkB,CAAC,UAAU;AACnC,MAAM,OAAO,CAAC,IAAG,QAAQ,CAAC,UAAU,GAAG,CAAC;AACxC,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClC,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;AAChD,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC;AACA,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;AACrC,CAAC,CAAC;AACF;AACA,MAAM,iBAAiB,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC;AAChD,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChD;AACA,GAAG,MAAM,GAAG,SAAS,CAAC;AACtB,OAAM,EAAE,CAAC;AACT,CAAC;AACD;AACA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AAChE,OAAM;AACN,CAAC,MAAM,EAAE;AACT,IAAI;AACJ,MAAM;AACN,WAAW;AACX,SAAS;AACT,MAAM;AACN,MAAM;AACN,QAAQ,CAAC,CAAC,CAAC;AACX;AACA;AACA,CAAC,CAAC;AACF;AACA;AACA;AACA,MAAM,kBAAkB,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC;AACjD,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAC1E;AACA,GAAG,MAAM,GAAG,SAAS,CAAC;AACtB,OAAO,MAAM,CAAC;AACd,CAAC;AACD;AACA,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC;AACF;AACA,MAAM,eAAe,CAAC,kBAAkB,EAAE,uBAAwB,CAAC,eAAe;;ACpElF,MAAM,CAAC,aAAa,CAAC,GAAG5Y,MAAwB,CAAC;AACjD;AACA,MAAM,cAAc,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;AAC5G,CAAC,IAAI,QAAQ,EAAE;AACf,EAAE,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AACnD,EAAE;AACF;AACA,CAAC,IAAI,UAAU,EAAE;AACjB,EAAE,OAAO,cAAc,CAAC;AACxB,EAAE;AACF;AACA,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE;AAC9B,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;AACpC,EAAE;AACF;AACA,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE;AAC3B,EAAE,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC5D,EAAE;AACF;AACA,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC7B,EAAE,OAAO,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7C,EAAE;AACF;AACA,CAAC,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AACF;AACA,MAAM6Y,WAAS,GAAG,CAAC;AACnB,CAAC,MAAM;AACP,CAAC,MAAM;AACP,CAAC,GAAG;AACJ,CAAC,KAAK;AACN,CAAC,MAAM;AACP,CAAC,QAAQ;AACT,CAAC,OAAO;AACR,CAAC,cAAc;AACf,CAAC,QAAQ;AACT,CAAC,UAAU;AACX,CAAC,MAAM;AACP,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,KAAK;AACN;AACA;AACA,CAAC,QAAQ,GAAG,QAAQ,KAAK,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;AACrD,CAAC,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;AAC/C,CAAC,MAAM,iBAAiB,GAAG,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC;AAChG;AACA,CAAC,MAAM,SAAS,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;AACvC;AACA,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAChH,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAC;AAC5E,CAAC,MAAM,YAAY,GAAG,OAAO,GAAG,CAAC,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC;AACnF,CAAC,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E;AACA,CAAC,IAAI,OAAO,EAAE;AACd,EAAE,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC;AACxC,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,EAAE,MAAM;AACR,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,EAAE;AACF;AACA,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;AACnC,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,CAAC,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;AACvC,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC3B,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,CAAC,KAAK,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC7C,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB;AACA,CAAC,IAAI,GAAG,KAAK,SAAS,EAAE;AACxB,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAClB,EAAE;AACF;AACA,CAAC,IAAI,cAAc,IAAI,KAAK,EAAE;AAC9B,EAAE,OAAO,KAAK,CAAC,YAAY,CAAC;AAC5B,EAAE;AACF;AACA,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;AAC/B,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;AACpC;AACA,CAAC,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AACF;IACA,KAAc,GAAGA,WAAS;;;;ACtF1B,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC9C;AACA,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;AAChF;AACA,MAAMC,gBAAc,GAAG,OAAO,IAAI;AAClC,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,EAAE,OAAO;AACT,EAAE;AACF;AACA,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AACzB;AACA,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE;AAC1B,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,EAAE;AACF;AACA,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;AACxB,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,kEAAkE,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1I,EAAE;AACF;AACA,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAChC,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC5B,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,gEAAgE,EAAE,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3G,EAAE;AACF;AACA,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AACF;AACAC,aAAc,GAAGD,gBAAc,CAAC;AAChC;AACA;kBACmB,GAAG,OAAO,IAAI;AACjC,CAAC,MAAM,KAAK,GAAGA,gBAAc,CAAC,OAAO,CAAC,CAAC;AACvC;AACA,CAAC,IAAI,KAAK,KAAK,KAAK,EAAE;AACtB,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvD,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACtC,EAAE;AACF;AACA,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC5B,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1B;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,SAAS;AACX,EAAC;AACD;AACA,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AAClC,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;AACrB,IAAI,WAAW;AACf,IAAI,SAAS;AACb,IAAI,SAAS;AACb,IAAI,SAAS;AACb,IAAI,SAAS;AACb,IAAI,QAAQ;AACZ,IAAI,SAAS;AACb,IAAI,QAAQ;AACZ;AACA;AACA;AACA,IAAG;AACH,CAAC;AACD;AACA,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AAClC,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;AACrB,IAAI,OAAO;AACX,IAAI,SAAS;AACb,IAAI,QAAQ;AACZ,IAAI,WAAW;AACf,IAAI,WAAW;AACf,IAAG;AACH;;;ACpDA;AACA;AACA;AACA;AACA,IAAIE,SAAO,GAAGpP,cAAM,CAAC,QAAO;AAC5B;AACA,IAAI,OAAOoP,SAAO,KAAK,QAAQ,IAAI,CAACA,SAAO,EAAE;AAC7C,EAAEC,kBAAc,GAAG,MAAM,GAAE;AAC3B,CAAC,MAAM;AACP,EAAE,IAAI,MAAM,GAAGjZ,oBAAiB;AAChC,EAAE,IAAI,OAAO,GAAGU,kBAAuB;AACvC,EAAE,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAACsY,SAAO,CAAC,QAAQ,EAAC;AAC5C;AACA,EAAE,IAAI,EAAE,GAAG/X,sBAAiB;AAC5B;AACA,EAAE,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;AAChC,IAAI,EAAE,GAAG,EAAE,CAAC,aAAY;AACxB,GAAG;AACH;AACA,EAAE,IAAI,QAAO;AACb,EAAE,IAAI+X,SAAO,CAAC,uBAAuB,EAAE;AACvC,IAAI,OAAO,GAAGA,SAAO,CAAC,wBAAuB;AAC7C,GAAG,MAAM;AACT,IAAI,OAAO,GAAGA,SAAO,CAAC,uBAAuB,GAAG,IAAI,EAAE,GAAE;AACxD,IAAI,OAAO,CAAC,KAAK,GAAG,EAAC;AACrB,IAAI,OAAO,CAAC,OAAO,GAAG,GAAE;AACxB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,IAAI,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAC;AACrC,IAAI,OAAO,CAAC,QAAQ,GAAG,KAAI;AAC3B,GAAG;AACH;AACA,EAAEC,kBAAc,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE;AACvC,IAAI,IAAIrP,cAAM,CAAC,OAAO,KAAKoP,SAAO,EAAE;AACpC,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,8CAA8C,EAAC;AACvF;AACA,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE;AAC1B,MAAM,IAAI,GAAE;AACZ,KAAK;AACL;AACA,IAAI,IAAI,EAAE,GAAG,OAAM;AACnB,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,MAAM,EAAE,GAAG,YAAW;AACtB,KAAK;AACL;AACA,IAAI,IAAI,MAAM,GAAG,YAAY;AAC7B,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAC;AACpC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;AAChD,UAAU,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACvD,QAAQ,MAAM,GAAE;AAChB,OAAO;AACP,MAAK;AACL,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAC;AACtB;AACA,IAAI,OAAO,MAAM;AACjB,IAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,SAAS,MAAM,IAAI;AAClC,IAAI,IAAI,CAAC,MAAM,IAAIpP,cAAM,CAAC,OAAO,KAAKoP,SAAO,EAAE;AAC/C,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,MAAM,GAAG,MAAK;AAClB;AACA,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;AACnC,MAAM,IAAI;AACV,QAAQA,SAAO,CAAC,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,EAAC;AACtD,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE;AACrB,KAAK,EAAC;AACN,IAAIA,SAAO,CAAC,IAAI,GAAG,oBAAmB;AACtC,IAAIA,SAAO,CAAC,UAAU,GAAG,0BAAyB;AAClD,IAAI,OAAO,CAAC,KAAK,IAAI,EAAC;AACtB,IAAG;AACH,2BAAuB,GAAG,OAAM;AAChC;AACA,EAAE,IAAI,IAAI,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;AACjD,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAChC,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAI;AACjC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC;AACrC,IAAG;AACH;AACA;AACA,EAAE,IAAI,YAAY,GAAG,GAAE;AACvB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;AACjC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,QAAQ,IAAI;AAC7C,MAAM,IAAIA,SAAO,KAAKpP,cAAM,CAAC,OAAO,EAAE;AACtC,QAAQ,MAAM;AACd,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM,IAAI,SAAS,GAAGoP,SAAO,CAAC,SAAS,CAAC,GAAG,EAAC;AAC5C,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE;AAC9C,QAAQ,MAAM,GAAE;AAChB,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAC;AAC/B;AACA,QAAQ,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,EAAC;AACpC;AACA,QAAQ,IAAI,KAAK,IAAI,GAAG,KAAK,QAAQ,EAAE;AACvC;AACA;AACA,UAAU,GAAG,GAAG,SAAQ;AACxB,SAAS;AACT,QAAQA,SAAO,CAAC,IAAI,CAACA,SAAO,CAAC,GAAG,EAAE,GAAG,EAAC;AACtC,OAAO;AACP,MAAK;AACL,GAAG,EAAC;AACJ;AACA,4BAAwB,GAAG,YAAY;AACvC,IAAI,OAAO,OAAO;AAClB,IAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,MAAK;AACpB;AACA,EAAE,IAAI,IAAI,GAAG,SAAS,IAAI,IAAI;AAC9B,IAAI,IAAI,MAAM,IAAIA,SAAO,KAAKpP,cAAM,CAAC,OAAO,EAAE;AAC9C,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,MAAM,GAAG,KAAI;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,KAAK,IAAI,EAAC;AACtB;AACA,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE;AAC5C,MAAM,IAAI;AACV,QAAQoP,SAAO,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,EAAC;AAC1C,QAAQ,OAAO,IAAI;AACnB,OAAO,CAAC,OAAO,EAAE,EAAE;AACnB,QAAQ,OAAO,KAAK;AACpB,OAAO;AACP,KAAK,EAAC;AACN;AACA,IAAIA,SAAO,CAAC,IAAI,GAAG,YAAW;AAC9B,IAAIA,SAAO,CAAC,UAAU,GAAG,kBAAiB;AAC1C,IAAG;AACH,yBAAqB,GAAG,KAAI;AAC5B;AACA,EAAE,IAAI,yBAAyB,GAAGA,SAAO,CAAC,WAAU;AACpD,EAAE,IAAI,iBAAiB,GAAG,SAAS,iBAAiB,EAAE,IAAI,EAAE;AAC5D,IAAI,IAAIA,SAAO,KAAKpP,cAAM,CAAC,OAAO,EAAE;AACpC,MAAM,MAAM;AACZ,KAAK;AACL,IAAIoP,SAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAC;AAChC,IAAI,IAAI,CAAC,MAAM,EAAEA,SAAO,CAAC,QAAQ,EAAE,IAAI,EAAC;AACxC;AACA,IAAI,IAAI,CAAC,WAAW,EAAEA,SAAO,CAAC,QAAQ,EAAE,IAAI,EAAC;AAC7C;AACA,IAAI,yBAAyB,CAAC,IAAI,CAACA,SAAO,EAAEA,SAAO,CAAC,QAAQ,EAAC;AAC7D,IAAG;AACH;AACA,EAAE,IAAI,mBAAmB,GAAGA,SAAO,CAAC,KAAI;AACxC,EAAE,IAAI,WAAW,GAAG,SAAS,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE;AACnD,IAAI,IAAI,EAAE,KAAK,MAAM,IAAIA,SAAO,KAAKpP,cAAM,CAAC,OAAO,EAAE;AACrD,MAAM,IAAI,GAAG,KAAK,SAAS,EAAE;AAC7B,QAAQoP,SAAO,CAAC,QAAQ,GAAG,IAAG;AAC9B,OAAO;AACP,MAAM,IAAI,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAC;AAC1D,MAAM,IAAI,CAAC,MAAM,EAAEA,SAAO,CAAC,QAAQ,EAAE,IAAI,EAAC;AAC1C;AACA,MAAM,IAAI,CAAC,WAAW,EAAEA,SAAO,CAAC,QAAQ,EAAE,IAAI,EAAC;AAC/C,MAAM,OAAO,GAAG;AAChB,KAAK,MAAM;AACX,MAAM,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AACvD,KAAK;AACL,IAAG;AACH;;AChLA,MAAMhY,IAAE,GAAGhB,qBAAa,CAAC;AACzB,MAAM,MAAM,GAAGU,kBAAsB,CAAC;AACtC;AACA,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC;AAC5C;AACA;AACA,MAAMwY,aAAW,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAG,EAAE,KAAK;AAChE,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AACF;AACA,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK;AAC9D,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE;AACpD,EAAE,OAAO;AACT,EAAE;AACF;AACA,CAAC,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM;AAC5B,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAClB,EAAE,EAAE,OAAO,CAAC,CAAC;AACb;AACA;AACA;AACA;AACA;AACA,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACd,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACZ,EAAE;AACF,CAAC,CAAC;AACF;AACA,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,KAAK;AACzE,CAAC,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,qBAAqB,KAAK,KAAK,IAAI,UAAU,CAAC;AAC3E,CAAC,CAAC;AACF;AACA,MAAM,SAAS,GAAG,MAAM,IAAI;AAC5B,CAAC,OAAO,MAAM,KAAKlY,IAAE,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO;AAC/C,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC;AACrE,CAAC,CAAC;AACF;AACA,MAAM,wBAAwB,GAAG,CAAC,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK;AACrE,CAAC,IAAI,qBAAqB,KAAK,IAAI,EAAE;AACrC,EAAE,OAAO,0BAA0B,CAAC;AACpC,EAAE;AACF;AACA,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,qBAAqB,GAAG,CAAC,EAAE;AAC3E,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,kFAAkF,EAAE,qBAAqB,CAAC,IAAI,EAAE,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;AACxK,EAAE;AACF;AACA,CAAC,OAAO,qBAAqB,CAAC;AAC9B,CAAC,CAAC;AACF;AACA;AACA,MAAMmY,eAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK;AAC5C,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;AACnC;AACA,CAAC,IAAI,UAAU,EAAE;AACjB,EAAE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AAC5B,EAAE;AACF,CAAC,CAAC;AACF;AACA,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK;AACjD,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AACF;AACA;AACA,MAAMC,cAAY,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC,EAAE,cAAc,KAAK;AACrF,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,SAAS,EAAE;AAC7C,EAAE,OAAO,cAAc,CAAC;AACxB,EAAE;AACF;AACA,CAAC,IAAI,SAAS,CAAC;AACf,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACzD,EAAE,SAAS,GAAG,UAAU,CAAC,MAAM;AAC/B,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAC5C,GAAG,EAAE,OAAO,CAAC,CAAC;AACd,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM;AACzD,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;AAC1B,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC;AACF;AACA,MAAMC,iBAAe,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK;AACvC,CAAC,IAAI,OAAO,KAAK,SAAS,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE;AAC1E,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,oEAAoE,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9H,EAAE;AACF,CAAC,CAAC;AACF;AACA;AACA,MAAMC,gBAAc,GAAG,OAAO,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,YAAY,KAAK;AAC7E,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;AAC3B,EAAE,OAAO,YAAY,CAAC;AACtB,EAAE;AACF;AACA,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM;AACxC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM;AACnC,EAAE,iBAAiB,EAAE,CAAC;AACtB,EAAE,CAAC,CAAC;AACJ,CAAC,CAAC;AACF;IACA,IAAc,GAAG;AACjB,cAACJ,aAAW;AACZ,gBAACC,eAAa;AACd,eAACC,cAAY;AACb,kBAACC,iBAAe;AAChB,iBAACC,gBAAc;AACf,CAAC;;AChHD,MAAMC,UAAQ,GAAG,MAAM;AACvB,CAAC,MAAM,KAAK,IAAI;AAChB,CAAC,OAAO,MAAM,KAAK,QAAQ;AAC3B,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC;AACAA,UAAQ,CAAC,QAAQ,GAAG,MAAM;AAC1B,CAACA,UAAQ,CAAC,MAAM,CAAC;AACjB,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;AAC1B,CAAC,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU;AACpC,CAAC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC;AAC3C;AACAA,UAAQ,CAAC,QAAQ,GAAG,MAAM;AAC1B,CAACA,UAAQ,CAAC,MAAM,CAAC;AACjB,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;AAC1B,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU;AACnC,CAAC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC;AAC3C;AACAA,UAAQ,CAAC,MAAM,GAAG,MAAM;AACxB,CAACA,UAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,CAACA,UAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3B;AACAA,UAAQ,CAAC,SAAS,GAAG,MAAM;AAC3B,CAACA,UAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;AACxB,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC;AACzC;IACA,UAAc,GAAGA,UAAQ;;;;AC1BzB,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC,GAAGvZ,qBAAiB,CAAC;AAC3D;IACAwZ,cAAc,GAAG,OAAO,IAAI;AAC5B,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AACxB;AACA,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AACzB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;AAC1B,CAAC,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC;AACxC,CAAC,IAAI,UAAU,GAAG,KAAK,CAAC;AACxB;AACA,CAAC,IAAI,KAAK,EAAE;AACZ,EAAE,UAAU,GAAG,EAAE,QAAQ,IAAI,QAAQ,CAAC,CAAC;AACvC,EAAE,MAAM;AACR,EAAE,QAAQ,GAAG,QAAQ,IAAI,MAAM,CAAC;AAChC,EAAE;AACF;AACA,CAAC,IAAI,QAAQ,EAAE;AACf,EAAE,QAAQ,GAAG,IAAI,CAAC;AAClB,EAAE;AACF;AACA,CAAC,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACpD;AACA,CAAC,IAAI,QAAQ,EAAE;AACf,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/B,EAAE;AACF;AACA,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AAChB,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;AACnB;AACA,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI;AAC5B,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,IAAI,UAAU,EAAE;AAClB,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC1B,GAAG,MAAM;AACT,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;AAC1B,GAAG;AACH,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,MAAM,CAAC,gBAAgB,GAAG,MAAM;AACjC,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,OAAO,MAAM,CAAC;AACjB,GAAG;AACH;AACA,EAAE,OAAO,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpE,EAAE,CAAC;AACH;AACA,CAAC,MAAM,CAAC,iBAAiB,GAAG,MAAM,MAAM,CAAC;AACzC;AACA,CAAC,OAAO,MAAM,CAAC;AACf,CAAC;;AClDD,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,GAAGxZ,qBAAiB,CAAC;AACvD,MAAM0I,QAAM,GAAGhI,qBAAiB,CAAC;AACjC,MAAM,CAAC,SAAS,CAAC,GAAGO,qBAAe,CAAC;AACpC,MAAM,YAAY,GAAGuB,cAA0B,CAAC;AAChD;AACA,MAAM,yBAAyB,GAAG,SAAS,CAACkG,QAAM,CAAC,QAAQ,CAAC,CAAC;AAC7D;AACA,MAAM,cAAc,SAAS,KAAK,CAAC;AACnC,CAAC,WAAW,GAAG;AACf,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAC9B,EAAE,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;AAC/B,EAAE;AACF,CAAC;AACD;AACA,eAAe+Q,WAAS,CAAC,WAAW,EAAE,OAAO,EAAE;AAC/C,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,EAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACvC,EAAE;AACF;AACA,CAAC,OAAO,GAAG;AACX,EAAE,SAAS,EAAE,QAAQ;AACrB,EAAE,GAAG,OAAO;AACZ,EAAE,CAAC;AACH;AACA,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;AAC7B,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AACtC;AACA,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACxC,EAAE,MAAM,aAAa,GAAG,KAAK,IAAI;AACjC;AACA,GAAG,IAAI,KAAK,IAAI,MAAM,CAAC,iBAAiB,EAAE,IAAI,eAAe,CAAC,UAAU,EAAE;AAC1E,IAAI,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;AACnD,IAAI;AACJ;AACA,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACjB,GAAG,CAAC;AACJ;AACA,EAAE,CAAC,YAAY;AACf,GAAG,IAAI;AACP,IAAI,MAAM,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACzD,IAAI,OAAO,EAAE,CAAC;AACd,IAAI,CAAC,OAAO,KAAK,EAAE;AACnB,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI;AACJ,GAAG,GAAG,CAAC;AACP;AACA,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM;AAC1B,GAAG,IAAI,MAAM,CAAC,iBAAiB,EAAE,GAAG,SAAS,EAAE;AAC/C,IAAI,aAAa,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;AACxC,IAAI;AACJ,GAAG,CAAC,CAAC;AACL,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,OAAO,MAAM,CAAC,gBAAgB,EAAE,CAAC;AAClC,CAAC;AACD;AACAC,mBAAc,GAAGD,WAAS,CAAC;0BACN,GAAG,CAAC,MAAM,EAAE,OAAO,KAAKA,WAAS,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;yBAC7E,GAAG,CAAC,MAAM,EAAE,OAAO,KAAKA,WAAS,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE;kCAC5D,GAAG;;AC1DhC,MAAM,EAAE,WAAW,EAAE,GAAGzZ,qBAAiB,CAAC;AAC1C;IACA2Z,aAAc,GAAG,0BAA0B;AAC3C,EAAE,IAAI,OAAO,GAAG,GAAE;AAClB,EAAE,IAAI,MAAM,IAAI,IAAI,WAAW,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,EAAC;AACnD;AACA,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,EAAC;AAC3B;AACA,EAAE,MAAM,CAAC,GAAG,GAAG,IAAG;AAClB,EAAE,MAAM,CAAC,OAAO,GAAG,QAAO;AAC1B;AACA,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAC;AAC7B;AACA,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAC;AACpD;AACA,EAAE,OAAO,MAAM;AACf;AACA,EAAE,SAAS,GAAG,EAAE,MAAM,EAAE;AACxB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC/B,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAC;AACzB,MAAM,OAAO,IAAI;AACjB,KAAK;AACL;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAC;AACjD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAC;AAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAC;AACrC,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,SAAS,OAAO,IAAI;AACtB,IAAI,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;AAC/B,GAAG;AACH;AACA,EAAE,SAAS,MAAM,EAAE,MAAM,EAAE;AAC3B,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,EAAC;AACpE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,GAAE,EAAE;AAC5D,GAAG;AACH;;ACvCA,MAAM,QAAQ,GAAG3Z,UAAoB,CAAC;AACtC,MAAM,SAAS,GAAGU,mBAAqB,CAAC;AACxC,MAAM,WAAW,GAAGO,aAAuB,CAAC;AAC5C;AACA;AACA,MAAM2Y,aAAW,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK;AACxC;AACA;AACA,CAAC,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AACzD,EAAE,OAAO;AACT,EAAE;AACF;AACA,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACtB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5B,EAAE,MAAM;AACR,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3B,EAAE;AACF,CAAC,CAAC;AACF;AACA;AACA,MAAMC,eAAa,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK;AAC1C,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACnD,EAAE,OAAO;AACT,EAAE;AACF;AACA,CAAC,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;AAC7B;AACA,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;AACrB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5B,EAAE;AACF;AACA,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;AACrB,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5B,EAAE;AACF;AACA,CAAC,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA,MAAM,eAAe,GAAG,OAAO,MAAM,EAAE,aAAa,KAAK;AACzD,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,EAAE,OAAO;AACT,EAAE;AACF;AACA,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AAClB;AACA,CAAC,IAAI;AACL,EAAE,OAAO,MAAM,aAAa,CAAC;AAC7B,EAAE,CAAC,OAAO,KAAK,EAAE;AACjB,EAAE,OAAO,KAAK,CAAC,YAAY,CAAC;AAC5B,EAAE;AACF,CAAC,CAAC;AACF;AACA,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK;AACpE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AACzB,EAAE,OAAO;AACT,EAAE;AACF;AACA,CAAC,IAAI,QAAQ,EAAE;AACf,EAAE,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAClD,EAAE;AACF;AACA,CAAC,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC;AACF;AACA;AACA,MAAMC,kBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,WAAW,KAAK;AACtG,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/E,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/E,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AACxF;AACA,CAAC,IAAI;AACL,EAAE,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;AACpF,EAAE,CAAC,OAAO,KAAK,EAAE;AACjB,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;AACrB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;AAC1D,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC;AACzC,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC;AACzC,GAAG,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC;AACnC,GAAG,CAAC,CAAC;AACL,EAAE;AACF,CAAC,CAAC;AACF;AACA,MAAMC,mBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK;AACvC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACtB,EAAE,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;AAC5E,EAAE;AACF,CAAC,CAAC;AACF;IACA,MAAc,GAAG;AACjB,cAACH,aAAW;AACZ,gBAACC,eAAa;AACd,mBAACC,kBAAgB;AACjB,oBAACC,mBAAiB;AAClB,CAAC;;AC7FD,MAAM,sBAAsB,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC;AACxE,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI;AACjE,CAAC,QAAQ;AACT,CAAC,OAAO,CAAC,wBAAwB,CAAC,sBAAsB,EAAE,QAAQ,CAAC;AACnE,CAAC,CAAC,CAAC;AACH;AACA;AACA,MAAMC,cAAY,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK;AAC3C,CAAC,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE;AACnD;AACA,EAAE,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,UAAU;AAC7C,GAAG,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC;AAChE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC;AACA,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE,EAAE;AACF;AACA,CAAC,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AACF;AACA;AACA,MAAMC,mBAAiB,GAAG,OAAO,IAAI;AACrC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACzC,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK;AAC3C,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI;AAC/B,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACjB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE;AACrB,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI;AACtC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,IAAI,CAAC,CAAC;AACN,GAAG;AACH,EAAE,CAAC,CAAC;AACJ,CAAC,CAAC;AACF;IACA,OAAc,GAAG;AACjB,eAACD,cAAY;AACb,oBAACC,mBAAiB;AAClB,CAAC;;AC3CD,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,KAAK;AAC3C,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC3B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AACxB,CAAC,CAAC;AACF;AACA,MAAM,gBAAgB,GAAG,WAAW,CAAC;AACrC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC;AACA,MAAM,SAAS,GAAG,GAAG,IAAI;AACzB,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC5D,EAAE,OAAO,GAAG,CAAC;AACb,EAAE;AACF;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC;AACF;AACA,MAAMC,aAAW,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK;AACpC,CAAC,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC;AACF;AACA,MAAMC,mBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK;AAC1C,CAAC,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC,CAAC;AACF;AACA,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B;AACA;AACA,MAAMC,cAAY,GAAG,OAAO,IAAI;AAChC,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;AACnB,CAAC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;AAC1D;AACA,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,EAAE,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACrD;AACA,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACxE,GAAG,MAAM;AACT,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtB,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AACF;IACA,OAAc,GAAG;AACjB,cAACF,aAAW;AACZ,oBAACC,mBAAiB;AAClB,eAACC,cAAY;AACb,CAAC;;AClDD,MAAM9W,MAAI,GAAGtD,aAAe,CAAC;AAC7B,MAAMsX,cAAY,GAAG5W,qBAAwB,CAAC;AAC9C,MAAM,UAAU,GAAGO,oBAAsB,CAAC;AAC1C,MAAM,iBAAiB,GAAGuB,mBAA8B,CAAC;AACzD,MAAM,UAAU,GAAGwF,oBAAuB,CAAC;AAC3C,MAAM,OAAO,GAAGc,iBAAkB,CAAC;AACnC,MAAM,SAAS,GAAGC,KAAsB,CAAC;AACzC,MAAM,cAAc,GAAGqG,aAAsB,CAAC;AAC9C,MAAM,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,CAAC,GAAGM,IAAqB,CAAC;AAC1G,MAAM,CAAC,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,CAAC,GAAGC,MAAuB,CAAC;AAClG,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG4E,OAAwB,CAAC;AACnE,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,iBAAiB,CAAC,GAAG3E,OAAwB,CAAC;AAChF;AACA,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAC7C;AACA,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK;AACjF,CAAC,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;AACpE;AACA,CAAC,IAAI,WAAW,EAAE;AAClB,EAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxD,EAAE;AACF;AACA,CAAC,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AACF;AACA,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,KAAK;AACtD,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACvB,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B;AACA,CAAC,OAAO,GAAG;AACX,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,iBAAiB,EAAE,IAAI;AACzB,EAAE,SAAS,EAAE,IAAI;AACjB,EAAE,WAAW,EAAE,KAAK;AACpB,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;AACxC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAC5B,EAAE,QAAQ,EAAE,MAAM;AAClB,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,WAAW,EAAE,IAAI;AACnB,EAAE,GAAG,OAAO;AACZ,EAAE,CAAC;AACH;AACA,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B;AACA,CAAC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AACzC;AACA,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAItM,MAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,KAAK,EAAE;AAC5E;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC,CAAC;AACF;AACA,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK;AAChD,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3D;AACA,EAAE,OAAO,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,EAAE,CAAC;AAC9C,EAAE;AACF;AACA,CAAC,IAAI,OAAO,CAAC,iBAAiB,EAAE;AAChC,EAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,EAAE;AACF;AACA,CAAC,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AACF;AACA,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK;AACvC,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtD;AACA,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACjC;AACA,CAAC,IAAI,OAAO,CAAC;AACb,CAAC,IAAI;AACL,EAAE,OAAO,GAAGgU,cAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACzE,EAAE,CAAC,OAAO,KAAK,EAAE;AACjB;AACA,EAAE,MAAM,YAAY,GAAG,IAAIA,cAAY,CAAC,YAAY,EAAE,CAAC;AACvD,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;AAChD,GAAG,KAAK;AACR,GAAG,MAAM,EAAE,EAAE;AACb,GAAG,MAAM,EAAE,EAAE;AACb,GAAG,GAAG,EAAE,EAAE;AACV,GAAG,OAAO;AACV,GAAG,cAAc;AACjB,GAAG,MAAM;AACT,GAAG,QAAQ,EAAE,KAAK;AAClB,GAAG,UAAU,EAAE,KAAK;AACpB,GAAG,MAAM,EAAE,KAAK;AAChB,GAAG,CAAC,CAAC,CAAC;AACN,EAAE,OAAO,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAClD,EAAE;AACF;AACA,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC5E,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC3E;AACA,CAAC,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACrC;AACA,CAAC,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7D;AACA,CAAC,MAAM,aAAa,GAAG,YAAY;AACnC,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACpJ,EAAE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC5D,EAAE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC5D,EAAE,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACtD;AACA,EAAE,IAAI,KAAK,IAAI,QAAQ,KAAK,CAAC,IAAI,MAAM,KAAK,IAAI,EAAE;AAClD,GAAG,MAAM,aAAa,GAAG,SAAS,CAAC;AACnC,IAAI,KAAK;AACT,IAAI,QAAQ;AACZ,IAAI,MAAM;AACV,IAAI,MAAM;AACV,IAAI,MAAM;AACV,IAAI,GAAG;AACP,IAAI,OAAO;AACX,IAAI,cAAc;AAClB,IAAI,MAAM;AACV,IAAI,QAAQ;AACZ,IAAI,UAAU,EAAE,OAAO,CAAC,UAAU;AAClC,IAAI,MAAM,EAAE,OAAO,CAAC,MAAM;AAC1B,IAAI,CAAC,CAAC;AACN;AACA,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AAC/B,IAAI,OAAO,aAAa,CAAC;AACzB,IAAI;AACJ;AACA,GAAG,MAAM,aAAa,CAAC;AACvB,GAAG;AACH;AACA,EAAE,OAAO;AACT,GAAG,OAAO;AACV,GAAG,cAAc;AACjB,GAAG,QAAQ,EAAE,CAAC;AACd,GAAG,MAAM;AACT,GAAG,MAAM;AACT,GAAG,GAAG;AACN,GAAG,MAAM,EAAE,KAAK;AAChB,GAAG,QAAQ,EAAE,KAAK;AAClB,GAAG,UAAU,EAAE,KAAK;AACpB,GAAG,MAAM,EAAE,KAAK;AAChB,GAAG,CAAC;AACJ,EAAE,CAAC;AACH;AACA,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAClD;AACA,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C;AACA,CAAC,OAAO,CAAC,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACtD;AACA,CAAC,OAAO,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACjD,CAAC,CAAC;AACF;AACA+C,eAAc,GAAG,KAAK,CAAC;AACvB;oBACmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK;AAC/C,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtD;AACA,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC;AACA,CAAC,IAAI,MAAM,CAAC;AACZ,CAAC,IAAI;AACL,EAAE,MAAM,GAAG/C,cAAY,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5E,EAAE,CAAC,OAAO,KAAK,EAAE;AACjB,EAAE,MAAM,SAAS,CAAC;AAClB,GAAG,KAAK;AACR,GAAG,MAAM,EAAE,EAAE;AACb,GAAG,MAAM,EAAE,EAAE;AACb,GAAG,GAAG,EAAE,EAAE;AACV,GAAG,OAAO;AACV,GAAG,cAAc;AACjB,GAAG,MAAM;AACT,GAAG,QAAQ,EAAE,KAAK;AAClB,GAAG,UAAU,EAAE,KAAK;AACpB,GAAG,MAAM,EAAE,KAAK;AAChB,GAAG,CAAC,CAAC;AACL,EAAE;AACF;AACA,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E;AACA,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE;AACpE,EAAE,MAAM,KAAK,GAAG,SAAS,CAAC;AAC1B,GAAG,MAAM;AACT,GAAG,MAAM;AACT,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK;AACtB,GAAG,MAAM,EAAE,MAAM,CAAC,MAAM;AACxB,GAAG,QAAQ,EAAE,MAAM,CAAC,MAAM;AAC1B,GAAG,OAAO;AACV,GAAG,cAAc;AACjB,GAAG,MAAM;AACT,GAAG,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW;AAC9D,GAAG,UAAU,EAAE,KAAK;AACpB,GAAG,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,IAAI;AACjC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AAC9B,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG;AACH;AACA,EAAE,MAAM,KAAK,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO;AACR,EAAE,OAAO;AACT,EAAE,cAAc;AAChB,EAAE,QAAQ,EAAE,CAAC;AACb,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,QAAQ,EAAE,KAAK;AACjB,EAAE,UAAU,EAAE,KAAK;AACnB,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,CAAC;AACH,EAAE;AACF;uBACsB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK;AAC/C,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,EAAE;AACF;2BAC0B,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK;AACnD,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACxC,EAAE;AACF;oBACmB,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,KAAK;AAC1D,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC/D,EAAE,OAAO,GAAG,IAAI,CAAC;AACjB,EAAE,IAAI,GAAG,EAAE,CAAC;AACZ,EAAE;AACF;AACA,CAAC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AACtF;AACA,CAAC,MAAM;AACP,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAC7B,EAAE,WAAW,GAAG,eAAe;AAC/B,EAAE,GAAG,OAAO,CAAC;AACb;AACA,CAAC,OAAO,KAAK;AACb,EAAE,QAAQ;AACV,EAAE;AACF,GAAG,GAAG,WAAW;AACjB,GAAG,UAAU;AACb,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;AACvC,GAAG;AACH,EAAE;AACF,GAAG,GAAG,OAAO;AACb,GAAG,KAAK,EAAE,SAAS;AACnB,GAAG,MAAM,EAAE,SAAS;AACpB,GAAG,MAAM,EAAE,SAAS;AACpB,GAAG,KAAK;AACR,GAAG,KAAK,EAAE,KAAK;AACf,GAAG;AACH,EAAE,CAAC;AACH;;;;AC3QA;;;;;;;;;AAiBA;AACA,MAAM,UAAU,GAAG,eAAe,CAAA;AAElC;;;;SAIgB,WAAW,CACzB,GAAW,EACX,GAAkB,EAClB,MAAc;;;IAId,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAA;IACzE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACzC,OAAO,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;KAC/C;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;QAC3C,OAAO,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;KACzC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkB,EAAE,GAAW,EAAE,MAAc;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACvC,MAAM,KAAK,GAAGgD,OAAK,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE;QAC3D,KAAK,EAAE,SAAS;KACjB,CAAC,CAAA;IACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI;QACrB,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,MAAM,CAAC,KAAK,CACV7X,MAAK,CAAC,GAAG,CACP,qEAAqEA,MAAK,CAAC,IAAI,CAC7E,UAAU,CACX,qBAAqB,IAAI,GAAG,CAC9B,EACD,EAAE,KAAK,EAAE,IAAI,EAAE,CAChB,CAAA;SACF;KACF,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,OAA2B,EAAE,GAAW;;;;;IAKnE,MAAM,kCAAkC,GACtC,OAAO,CAAC,QAAQ,KAAK,QAAQ,KAAK,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,UAAU,CAAC,CAAA;IAE7E,IAAI,kCAAkC,EAAE;QACtC,IAAI;;;YAGF8X,qBAAQ,CAAC,+BAA+B,CAAC,CAAA;YACzCA,qBAAQ,CAAC,oCAAoC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE;gBACpE,GAAG,EAAEjX,aAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;gBACrE,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;SACZ;QAAC,OAAO,GAAG,EAAE;;SAEb;KACF;;;;;IAMD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,MAAM,EAAE;QACvD,OAAO,GAAG,SAAS,CAAA;KACpB;;;IAID,IAAI;QACF,MAAM,OAAO,GAAiB,OAAO,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAA;QACvE0Q,MAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,SAAQ,CAAC,CAAA;QAClC,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,KAAK,CAAA;KACb;AACH;;;;AClGA,IAAI,gBAAgB,GAAG,qBAAqB,CAAC;AAC7C;IACA,kBAAc,GAAG,UAAU,GAAG,EAAE;AAChC,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC9B,EAAE,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;AAC3C,EAAE;AACF;AACA,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;;;;;;ICRD,SAAc,GAAG;AACjB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAChC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACtB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1B,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACpB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAC7B,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACvB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC5B,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACxB,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClC,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACzB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACtB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACxB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1B,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAChC,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACzB,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAC7B,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;AAChC,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5B,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAC7B,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAChC,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC/B,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC9B,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC9B,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/B,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAC5B,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAC3B,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3B,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/B,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;AAC7B,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACzB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACtB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC5B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACrB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC9B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxB,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3B,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACvB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzB,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACjC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3B,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAChC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/B,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAChC,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAChC,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClC,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClC,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClC,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/B,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACpB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;AAC3B,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACzB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpC,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAC1B,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAC/B,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAChC,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjC,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnC,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACnC,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAClC,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC9B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/B,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACpB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACvB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC5B,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACxB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1B,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACjC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACjC,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACjC,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACvB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACxB,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAChC,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7B,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1B,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC7B,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;AAC1B,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACxB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1B,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAC5B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAC7B,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACvB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACtB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACxB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAC5B,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC1B,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC9B,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACxB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC9B,CAAC;;;;ACtJD,IAAI,WAAW,GAAGhU,SAAqB,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG,EAAE,CAAC;AACzB,KAAK,IAAI,GAAG,IAAI,WAAW,EAAE;AAC7B,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AACtC,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAC1C,EAAE;AACF,CAAC;AACD;AACA,IAAIE,SAAO,GAAGsa,qBAAc,GAAG;AAC/B,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC;AACpC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC,CAAC;AACF;AACA;AACA,KAAK,IAAI,KAAK,IAAIta,SAAO,EAAE;AAC3B,CAAC,IAAIA,SAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AACpC,EAAE,IAAI,EAAE,UAAU,IAAIA,SAAO,CAAC,KAAK,CAAC,CAAC,EAAE;AACvC,GAAG,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,KAAK,CAAC,CAAC;AAC1D,GAAG;AACH;AACA,EAAE,IAAI,EAAE,QAAQ,IAAIA,SAAO,CAAC,KAAK,CAAC,CAAC,EAAE;AACrC,GAAG,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,KAAK,CAAC,CAAC;AAChE,GAAG;AACH;AACA,EAAE,IAAIA,SAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAKA,SAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AAChE,GAAG,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,KAAK,CAAC,CAAC;AAClE,GAAG;AACH;AACA,EAAE,IAAI,QAAQ,GAAGA,SAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AACzC,EAAE,IAAI,MAAM,GAAGA,SAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACrC,EAAE,OAAOA,SAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AACjC,EAAE,OAAOA,SAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAC/B,EAAE,MAAM,CAAC,cAAc,CAACA,SAAO,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvE,EAAE,MAAM,CAAC,cAAc,CAACA,SAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACnE,EAAE;AACF,CAAC;AACD;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AACvB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE;AAClB,EAAE,CAAC,GAAG,CAAC,CAAC;AACR,EAAE,MAAM,IAAI,CAAC,KAAK,GAAG,EAAE;AACvB,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;AACtB,EAAE,MAAM,IAAI,CAAC,KAAK,GAAG,EAAE;AACvB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;AAC1B,EAAE,MAAM,IAAI,CAAC,KAAK,GAAG,EAAE;AACvB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;AAC1B,EAAE;AACF;AACA,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;AAC3B;AACA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACZ,EAAE,CAAC,IAAI,GAAG,CAAC;AACX,EAAE;AACF;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;AACrB;AACA,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE;AAClB,EAAE,CAAC,GAAG,CAAC,CAAC;AACR,EAAE,MAAM,IAAI,CAAC,IAAI,GAAG,EAAE;AACtB,EAAE,CAAC,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AAC1B,EAAE,MAAM;AACR,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC9B,EAAE;AACF;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,IAAI,CAAC;AACV,CAAC,IAAI,IAAI,CAAC;AACV,CAAC,IAAI,IAAI,CAAC;AACV,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC,IAAI,KAAK,GAAG,UAAU,CAAC,EAAE;AAC1B,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,EAAE,CAAC;AACH;AACA,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;AACjB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,MAAM;AACR,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AACf,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACf,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACnB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE;AACtB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC;AAC7B,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE;AACtB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC;AAC7B,GAAG;AACH,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACb,GAAG,CAAC,IAAI,CAAC,CAAC;AACV,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;AACpB,GAAG,CAAC,IAAI,CAAC,CAAC;AACV,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO;AACR,EAAE,CAAC,GAAG,GAAG;AACT,EAAE,CAAC,GAAG,GAAG;AACT,EAAE,CAAC,GAAG,GAAG;AACT,EAAE,CAAC;AACH,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAGA,SAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,IAAI,GAAG,UAAU,GAAG,EAAE;AAClC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChC;AACA,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7C,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE;AACnC,CAAC;AACD,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1B,GAAG;AACH,CAAC;AACD;AACAA,SAAO,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,GAAG,EAAE;AACrC,CAAC,IAAI,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC,IAAI,QAAQ,EAAE;AACf,EAAE,OAAO,QAAQ,CAAC;AAClB,EAAE;AACF;AACA,CAAC,IAAI,sBAAsB,GAAG,QAAQ,CAAC;AACvC,CAAC,IAAI,qBAAqB,CAAC;AAC3B;AACA,CAAC,KAAK,IAAI,OAAO,IAAI,WAAW,EAAE;AAClC,EAAE,IAAI,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;AAC3C,GAAG,IAAI,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACpC;AACA;AACA,GAAG,IAAI,QAAQ,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClD;AACA;AACA,GAAG,IAAI,QAAQ,GAAG,sBAAsB,EAAE;AAC1C,IAAI,sBAAsB,GAAG,QAAQ,CAAC;AACtC,IAAI,qBAAqB,GAAG,OAAO,CAAC;AACpC,IAAI;AACJ,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,qBAAqB,CAAC;AAC9B,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,OAAO,CAAC,GAAG,GAAG,UAAU,OAAO,EAAE;AACzC,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB;AACA;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AACtE,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AACtE,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AACtE;AACA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACpD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACpD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACpD;AACA,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,GAAG,GAAGA,SAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,CAAC,IAAI,MAAM,CAAC;AACb,CAAC,CAAC,IAAI,GAAG,CAAC;AACV,CAAC,CAAC,IAAI,OAAO,CAAC;AACd;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;AAClE,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;AAClE,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;AAClE;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,EAAE,CAAC;AACR,CAAC,IAAI,EAAE,CAAC;AACR,CAAC,IAAI,EAAE,CAAC;AACR,CAAC,IAAI,GAAG,CAAC;AACT,CAAC,IAAI,GAAG,CAAC;AACT;AACA,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACd,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAChB,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACzB,EAAE;AACF;AACA,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;AACd,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,EAAE,MAAM;AACR,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,EAAE;AACF;AACA,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACjB;AACA,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjB,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7B,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;AACd,GAAG,EAAE,EAAE,CAAC;AACR,GAAG;AACH,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;AACd,GAAG,EAAE,EAAE,CAAC;AACR,GAAG;AACH;AACA,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AAClB,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACjC,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AACzB,GAAG,GAAG,GAAG,EAAE,CAAC;AACZ,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AACzB,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAC3C,GAAG,MAAM;AACT,GAAG,GAAG,GAAG,EAAE,CAAC;AACZ,GAAG;AACH;AACA,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AACrB,EAAE;AACF;AACA,CAAC,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;AACd,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC,IAAI,EAAE,CAAC;AACR,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,CAAC,IAAI,CAAC,CAAC;AACR,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;AACrC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B;AACA,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC,IAAI,GAAG,CAAC;AACV;AACA,CAAC,QAAQ,EAAE;AACX,EAAE,KAAK,CAAC;AACR,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpB,EAAE,KAAK,CAAC;AACR,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpB,EAAE,KAAK,CAAC;AACR,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpB,EAAE,KAAK,CAAC;AACR,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpB,EAAE,KAAK,CAAC;AACR,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpB,EAAE,KAAK,CAAC;AACR,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpB,EAAE;AACF,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC,IAAI,IAAI,CAAC;AACV,CAAC,IAAI,EAAE,CAAC;AACR,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AACvB,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AACf,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;AACrC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACd,CAAC,CAAC,IAAI,CAAC,CAAC;AACR;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC;AACF;AACA;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;AACrB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA;AACA,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AAChB,EAAE,EAAE,IAAI,KAAK,CAAC;AACd,EAAE,EAAE,IAAI,KAAK,CAAC;AACd,EAAE;AACF;AACA,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf;AACA,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;AACvB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE;AACF;AACA,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvB;AACA,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,QAAQ,CAAC;AACV,EAAE,QAAQ;AACV,EAAE,KAAK,CAAC,CAAC;AACT,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM;AACtC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM;AACtC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACtC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACtC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACtC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACtC,EAAE;AACF;AACA,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACnC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC;AACA,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACjD,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACjD;AACA;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;AAClB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK;AAC7C,IAAI,CAAC,GAAG,KAAK,CAAC;AACd;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;AAClB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK;AAC7C,IAAI,CAAC,GAAG,KAAK,CAAC;AACd;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;AAClB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK;AAC7C,IAAI,CAAC,GAAG,KAAK,CAAC;AACd;AACA,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC;AACA,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,CAAC,IAAI,MAAM,CAAC;AACb,CAAC,CAAC,IAAI,GAAG,CAAC;AACV,CAAC,CAAC,IAAI,OAAO,CAAC;AACd;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;AAClE,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;AAClE,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC;AAClE;AACA,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;AACpB,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACjB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACjB;AACA,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC;AACjD,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC;AACjD,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC;AACjD;AACA,CAAC,CAAC,IAAI,MAAM,CAAC;AACb,CAAC,CAAC,IAAI,GAAG,CAAC;AACV,CAAC,CAAC,IAAI,OAAO,CAAC;AACd;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,EAAE,CAAC;AACR,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP;AACA,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC5B;AACA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACZ,EAAE,CAAC,IAAI,GAAG,CAAC;AACX,EAAE;AACF;AACA,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,CAAC,CAAC;AACP,CAAC,IAAI,EAAE,CAAC;AACR;AACA,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC5B,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtB;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE;AACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAGA,SAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE;AACA,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;AAChC;AACA,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AAClB,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE;AACF;AACA,CAAC,IAAI,IAAI,GAAG,EAAE;AACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AAC9B,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACzB;AACA,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AAClB,EAAE,IAAI,IAAI,EAAE,CAAC;AACb,EAAE;AACF;AACA,CAAC,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE;AACrC;AACA;AACA,CAAC,OAAOA,SAAO,CAAC,GAAG,CAAC,MAAM,CAACA,SAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE;AACtC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB;AACA;AACA;AACA,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACzB,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACb,GAAG,OAAO,EAAE,CAAC;AACb,GAAG;AACH;AACA,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;AACf,GAAG,OAAO,GAAG,CAAC;AACd,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;AAChD,EAAE;AACF;AACA,CAAC,IAAI,IAAI,GAAG,EAAE;AACd,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAClC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5B;AACA,CAAC,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,MAAM,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACrC,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AACvB;AACA;AACA,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AACjC,EAAE,IAAI,IAAI,GAAG,EAAE,EAAE;AACjB,GAAG,KAAK,IAAI,GAAG,CAAC;AAChB,GAAG;AACH;AACA,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC;AAC7B;AACA,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/B,EAAE;AACF;AACA,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AACtC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC;AACpC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC;AAC3C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC;AAC3C;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,OAAO,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACtC;AACA,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE;AAClB,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;AAChC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnB,EAAE;AACF;AACA,CAAC,IAAI,IAAI,EAAE,CAAC;AACZ;AACA,CAAC,IAAI,GAAG,CAAC;AACT,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACzC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACrD,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC7B;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AAClC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE;AAClD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AACvC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjC;AACA,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACjD,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AACnD,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AAClC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACjE,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnB,EAAE;AACF;AACA,CAAC,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5B;AACA,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,EAAE,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;AAC1D,GAAG,OAAO,IAAI,GAAG,IAAI,CAAC;AACtB,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,EAAE;AACF;AACA,CAAC,IAAI,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC;AAChC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC;AAC/B,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;AACxB;AACA,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AAC1B,CAAC,IAAI,SAAS,CAAC;AACf,CAAC,IAAI,GAAG,CAAC;AACT;AACA,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACjB,EAAE,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACjC,EAAE,MAAM;AACR,EAAE,SAAS,GAAG,CAAC,CAAC;AAChB,EAAE;AACF;AACA,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;AAClB,EAAE,GAAG,GAAG,CAAC,CAAC;AACV,EAAE;AACF,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE;AAChB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC;AAC/B,EAAE;AACF,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE;AAChB,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;AAC7B,EAAE,MAAM;AACR,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AACjC,EAAE;AACF;AACA,CAAC,GAAG,IAAI,CAAC,CAAC;AACV,CAAC,GAAG,IAAI,CAAC,CAAC;AACV;AACA,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;AACnD,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACX,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACX;AACA,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;AACd,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAClB,EAAE,MAAM;AACR,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1B,EAAE;AACF;AACA,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;AACd,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAChC,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACnC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB;AACA,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACX;AACA,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;AACd,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACnC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB;AACA,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE;AAChB,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACrC,EAAE;AACF;AACA,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAChB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACZ;AACA,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACvB,EAAE,KAAK,CAAC;AACR,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD,EAAE,KAAK,CAAC;AACR,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD,EAAE,KAAK,CAAC;AACR,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD,EAAE,KAAK,CAAC;AACR,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD,EAAE,KAAK,CAAC;AACR,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD,EAAE;AACF,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACzC,EAAE;AACF;AACA,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB;AACA,CAAC,OAAO;AACR,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG;AAC1B,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG;AAC1B,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG;AAC1B,EAAE,CAAC;AACH,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB;AACA,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACX;AACA,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;AACd,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACnC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB;AACA,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACjC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACX;AACA,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE;AACzB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClB,EAAE;AACF,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE;AAC1B,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACnC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AAC/C,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;AACjC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACX;AACA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACZ,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACnC,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,KAAK,EAAE;AACrC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AACvF,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,GAAG,EAAE;AACnC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC;AACjF,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACnC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACxE,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,IAAI,CAAC,GAAG,GAAGA,SAAO,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACtD,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACnC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,IAAI,EAAE;AACpC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACnC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;AACnC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;AAClD,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AAC9C;AACA,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACjD,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AACnD,CAAC,CAAC;AACF;AACAA,SAAO,CAAC,GAAG,CAAC,IAAI,GAAG,UAAU,GAAG,EAAE;AAClC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC1B,CAAC;;ACn2BD,IAAIC,aAAW,GAAGH,qBAAwB,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,GAAG;AACtB,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;AAChB;AACA,CAAC,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAACG,aAAW,CAAC,CAAC;AACvC;AACA,CAAC,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACpD,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;AACrB;AACA;AACA,GAAG,QAAQ,EAAE,CAAC,CAAC;AACf,GAAG,MAAM,EAAE,IAAI;AACf,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,OAAO,KAAK,CAAC;AACd,CAAC;AACD;AACA;AACA,SAAS,SAAS,CAAC,SAAS,EAAE;AAC9B,CAAC,IAAI,KAAK,GAAG,UAAU,EAAE,CAAC;AAC1B,CAAC,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;AACzB;AACA,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC/B;AACA,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE;AACtB,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAC5B,EAAE,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAACA,aAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD;AACA,EAAE,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACxD,GAAG,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,GAAG,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9B;AACA,GAAG,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,EAAE;AAC7B,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;AAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5B,IAAI;AACJ,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,KAAK,CAAC;AACd,CAAC;AACD;AACA,SAAS,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE;AACxB,CAAC,OAAO,UAAU,IAAI,EAAE;AACxB,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,EAAE,CAAC;AACH,CAAC;AACD;AACA,SAAS,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE;AACxC,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC,IAAI,EAAE,GAAGA,aAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AACtD;AACA,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACjC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AAC3B,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAClC,EAAE,EAAE,GAAG,IAAI,CAACA,aAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAC1B,EAAE;AACF;AACA,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC;AACtB,CAAC,OAAO,EAAE,CAAC;AACX,CAAC;AACD;IACAM,OAAc,GAAG,UAAU,SAAS,EAAE;AACtC,CAAC,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,IAAI,UAAU,GAAG,EAAE,CAAC;AACrB;AACA,CAAC,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACpD,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5B;AACA,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AAC5B;AACA,GAAG,SAAS;AACZ,GAAG;AACH;AACA,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACvD,EAAE;AACF;AACA,CAAC,OAAO,UAAU,CAAC;AACnB,CAAC;;AC/FD,IAAI,WAAW,GAAGT,qBAAwB,CAAC;AAC3C,IAAI,KAAK,GAAGU,OAAkB,CAAC;AAC/B;AACA,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB;AACA,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACtC;AACA,SAAS,OAAO,CAAC,EAAE,EAAE;AACrB,CAAC,IAAI,SAAS,GAAG,UAAU,IAAI,EAAE;AACjC,EAAE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;AAC3C,GAAG,OAAO,IAAI,CAAC;AACf,GAAG;AACH;AACA,EAAE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,GAAG,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChD,GAAG;AACH;AACA,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,EAAE,CAAC;AACH;AACA;AACA,CAAC,IAAI,YAAY,IAAI,EAAE,EAAE;AACzB,EAAE,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;AACvC,EAAE;AACF;AACA,CAAC,OAAO,SAAS,CAAC;AAClB,CAAC;AACD;AACA,SAAS,WAAW,CAAC,EAAE,EAAE;AACzB,CAAC,IAAI,SAAS,GAAG,UAAU,IAAI,EAAE;AACjC,EAAE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;AAC3C,GAAG,OAAO,IAAI,CAAC;AACf,GAAG;AACH;AACA,EAAE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,GAAG,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChD,GAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACxB;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAClC,GAAG,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACtD,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,IAAI;AACJ,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA,CAAC,IAAI,YAAY,IAAI,EAAE,EAAE;AACzB,EAAE,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;AACvC,EAAE;AACF;AACA,CAAC,OAAO,SAAS,CAAC;AAClB,CAAC;AACD;AACA,MAAM,CAAC,OAAO,CAAC,UAAU,SAAS,EAAE;AACpC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACzB;AACA,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjG,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7F;AACA,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC;AACA,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,OAAO,EAAE;AACxC,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3B;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;AAChD,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AAChD,EAAE,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AACH;IACA,YAAc,GAAG,OAAO;;;AC5ExB,MAAMI,cAAY,GAAGd,YAAwB,CAAC;AAC9C;AACA,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY;AAC/C,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAACc,cAAY,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AACF;AACA,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY;AAChD,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAACA,cAAY,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AACF;AACA,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY;AAChD,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAACA,cAAY,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AACF;AACA,SAAS,cAAc,GAAG;AAC1B,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AACzB,CAAC,MAAM,MAAM,GAAG;AAChB,EAAE,QAAQ,EAAE;AACZ,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAChB;AACA,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAChB,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACf,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAClB,GAAG,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACrB,GAAG,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACnB,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAClB,GAAG,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACzB,GAAG;AACH,EAAE,KAAK,EAAE;AACT,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAClB,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAChB,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAClB,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACpB,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAClB,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB;AACA;AACA,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACtB,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACxB,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACzB,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACvB,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAC1B,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACvB,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACxB,GAAG;AACH,EAAE,OAAO,EAAE;AACX,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACpB,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAClB,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACpB,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACrB,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACtB,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACpB;AACA;AACA,GAAG,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AAC3B,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AACzB,GAAG,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AAC3B,GAAG,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AAC5B,GAAG,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AAC1B,GAAG,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AAC7B,GAAG,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AAC1B,GAAG,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AAC3B,GAAG;AACH,EAAE,CAAC;AACH;AACA;AACA,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AACvC;AACA,CAAC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC9C,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAClC;AACA,EAAE,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9C,GAAG,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC;AACA,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG;AACvB,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,IAAI,CAAC;AACL;AACA,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACxC;AACA,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,GAAG;AACH;AACA,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;AAC3C,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,UAAU,EAAE,KAAK;AACpB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE;AACzC,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,UAAU,EAAE,KAAK;AACpB,GAAG,CAAC,CAAC;AACL,EAAE;AACF;AACA,CAAC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC;AACA,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC;AACnC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;AACrC;AACA,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG;AACrB,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;AAChC,EAAE,CAAC;AACH,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG;AACxB,EAAE,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;AACpC,EAAE,CAAC;AACH,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG;AACxB,EAAE,GAAG,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9B,EAAE,CAAC;AACH;AACA,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG;AACvB,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;AACjC,EAAE,CAAC;AACH,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG;AAC1B,EAAE,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC;AACrC,EAAE,CAAC;AACH,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG;AAC1B,EAAE,GAAG,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;AAC/B,EAAE,CAAC;AACH;AACA,CAAC,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAACA,cAAY,CAAC,EAAE;AAC5C,EAAE,IAAI,OAAOA,cAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC7C,GAAG,SAAS;AACZ,GAAG;AACH;AACA,EAAE,MAAM,KAAK,GAAGA,cAAY,CAAC,GAAG,CAAC,CAAC;AAClC;AACA,EAAE,IAAI,GAAG,KAAK,QAAQ,EAAE;AACxB,GAAG,GAAG,GAAG,MAAM,CAAC;AAChB,GAAG;AACH;AACA,EAAE,IAAI,QAAQ,IAAI,KAAK,EAAE;AACzB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACxD,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3D,GAAG;AACH;AACA,EAAE,IAAI,SAAS,IAAI,KAAK,EAAE;AAC1B,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC7D,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAChE,GAAG;AACH;AACA,EAAE,IAAI,KAAK,IAAI,KAAK,EAAE;AACtB,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACzD,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC5D,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,MAAM,CAAC;AACf,CAAC;AACD;AACA;AACA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;AACzC,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,GAAG,EAAE,cAAc;AACpB,CAAC,CAAC;;;ICnKFC,SAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK;AACjC,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;AAC7B,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;AAC7E,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACzC,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,aAAa,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,aAAa,CAAC,CAAC;AAC1E,CAAC;;ACND,MAAMC,IAAE,GAAGhB,qBAAa,CAAC;AACzB,MAAM,OAAO,GAAGU,SAAmB,CAAC;AACpC;AACA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AACxB;AACA,IAAI,UAAU,CAAC;AACf,IAAI,OAAO,CAAC,UAAU,CAAC;AACvB,CAAC,OAAO,CAAC,WAAW,CAAC;AACrB,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACzB,CAAC,UAAU,GAAG,KAAK,CAAC;AACpB,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;AAC3B,CAAC,OAAO,CAAC,QAAQ,CAAC;AAClB,CAAC,OAAO,CAAC,YAAY,CAAC;AACtB,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AAC1B,CAAC,UAAU,GAAG,IAAI,CAAC;AACnB,CAAC;AACD,IAAI,aAAa,IAAI,GAAG,EAAE;AAC1B,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAClF,CAAC;AACD;AACA,SAAS,cAAc,CAAC,KAAK,EAAE;AAC/B,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AAClB,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,OAAO;AACR,EAAE,KAAK;AACP,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AACpB,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AACpB,EAAE,CAAC;AACH,CAAC;AACD;AACA,SAAS,aAAa,CAAC,MAAM,EAAE;AAC/B,CAAC,IAAI,UAAU,KAAK,KAAK,EAAE;AAC3B,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC;AACzB,EAAE,OAAO,CAAC,YAAY,CAAC;AACvB,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE;AAC9B,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;AAC3B,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,UAAU,KAAK,IAAI,EAAE;AACrD,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC;AACA,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,GAAGM,IAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,EAAE;AACF,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7B,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK;AAChC,IAAI;AACJ,GAAG,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAChD,GAAG;AACH;AACA,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE;AAClB,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE;AAC/G,GAAG,OAAO,CAAC,CAAC;AACZ,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC;AACb,EAAE;AACF;AACA,CAAC,IAAI,kBAAkB,IAAI,GAAG,EAAE;AAChC,EAAE,OAAO,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,EAAE;AACF;AACA,CAAC,IAAI,GAAG,CAAC,SAAS,KAAK,WAAW,EAAE;AACpC,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,IAAI,cAAc,IAAI,GAAG,EAAE;AAC5B,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/E;AACA,EAAE,QAAQ,GAAG,CAAC,YAAY;AAC1B,GAAG,KAAK,WAAW;AACnB,IAAI,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,GAAG,KAAK,gBAAgB;AACxB,IAAI,OAAO,CAAC,CAAC;AACb;AACA,GAAG;AACH,EAAE;AACF;AACA,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtC,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,IAAI,6DAA6D,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACnF,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,IAAI,WAAW,IAAI,GAAG,EAAE;AACzB,EAAE,OAAO,CAAC,CAAC;AACX,EAAE;AACF;AACA,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AAC1B,EAAE,OAAO,GAAG,CAAC;AACb,EAAE;AACF;AACA,CAAC,OAAO,GAAG,CAAC;AACZ,CAAC;AACD;AACA,SAAS,eAAe,CAAC,MAAM,EAAE;AACjC,CAAC,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AACD;IACA,eAAc,GAAG;AACjB,CAAC,aAAa,EAAE,eAAe;AAC/B,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;AACxC,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;AACxC,CAAC;;ACjID,MAAM,cAAc,GAAG,sIAAsI,CAAC;AAC9J,MAAM,WAAW,GAAG,gCAAgC,CAAC;AACrD,MAAM,YAAY,GAAG,kCAAkC,CAAC;AACxD,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAC/D;AACA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;AACxB,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACZ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACZ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACZ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACZ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACZ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACZ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;AACZ,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACb,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChB,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChB,CAAC,CAAC,CAAC;AACH;AACA,SAASgB,UAAQ,CAAC,CAAC,EAAE;AACrB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAC3E,EAAE,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACvD,EAAE;AACF;AACA,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AACD;AACA,SAAS,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE;AACpC,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AACpB,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC,IAAI,OAAO,CAAC;AACb;AACA,CAAC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC7B,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACrB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,GAAG,MAAM,KAAK,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;AACpD,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,MAAM,GAAGA,UAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACvG,GAAG,MAAM;AACT,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,uCAAuC,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3F,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,OAAO,CAAC;AAChB,CAAC;AACD;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;AAC3B,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;AAC3B;AACA,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AACpB,CAAC,IAAI,OAAO,CAAC;AACb;AACA,CAAC,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;AACtD,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B;AACA,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;AAClB,GAAG,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,GAAG,MAAM;AACT,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,OAAO,CAAC;AAChB,CAAC;AACD;AACA,SAAS,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;AACnC,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AACpB;AACA,CAAC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC7B,EAAE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACpC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,GAAG;AACH,EAAE;AACF;AACA,CAAC,IAAI,OAAO,GAAG,KAAK,CAAC;AACrB,CAAC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC/C,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE;AACzC,GAAG,IAAI,EAAE,SAAS,IAAI,OAAO,CAAC,EAAE;AAChC,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACzD,IAAI;AACJ;AACA,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AACpE,IAAI,MAAM;AACV,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACjC,IAAI;AACJ,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,OAAO,CAAC;AAChB,CAAC;AACD;IACA,SAAc,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK;AACjC,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;AACnB,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;AACnB,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;AAChB;AACA;AACA,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK;AAC5E,EAAE,IAAI,UAAU,EAAE;AAClB,GAAG,KAAK,CAAC,IAAI,CAACA,UAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACpC,GAAG,MAAM,IAAI,KAAK,EAAE;AACpB,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9B,GAAG,KAAK,GAAG,EAAE,CAAC;AACd,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,GAAG,MAAM,IAAI,KAAK,EAAE;AACpB,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,IAAI,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACpE,IAAI;AACJ;AACA,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,GAAG,KAAK,GAAG,EAAE,CAAC;AACd,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAChB,GAAG,MAAM;AACT,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,GAAG;AACH,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B;AACA,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,EAAE,MAAM,MAAM,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/H,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1B,EAAE;AACF;AACA,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;;;AC9HD,MAAMyY,oBAAkB,GAAGza,kBAA+B,CAAC;AAC3D,MAAMqC,YAAU,GAAG3B,kBAAsB,CAAC;AAC1C,MAAM,WAAW,GAAGO,eAAyB,CAAC,MAAM,CAAC;AACrD;AACA,MAAM,QAAQ,GAAGuB,SAAyB,CAAC;AAC3C;AACA,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACxH;AACA;AACA,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC5D;AACA;AACA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC;AACA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC;AACA,SAAS,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE;AACpC,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AACzB;AACA;AACA,CAAC,MAAM,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;AACrD,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AACnE,CAAC,GAAG,CAAC,OAAO,GAAG,SAAS,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AACtE,CAAC;AACD;AACA,SAAS,KAAK,CAAC,OAAO,EAAE;AACxB;AACA;AACA,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,YAAY,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzD,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AACnB,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC/B;AACA,EAAE,KAAK,CAAC,QAAQ,GAAG,YAAY;AAC/B,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,GAAG,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAChD,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/C;AACA,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC;AACrC;AACA,EAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,EAAE;AACF;AACA,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC;AACD;AACA;AACA,IAAI,mBAAmB,EAAE;AACzB,CAACH,YAAU,CAAC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;AACrC,CAAC;AACD;AACA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAACA,YAAU,CAAC,EAAE;AAC3C,CAACA,YAAU,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,MAAM,CAACoY,oBAAkB,CAACpY,YAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AACtF;AACA,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;AACf,EAAE,GAAG,GAAG;AACR,GAAG,MAAM,KAAK,GAAGA,YAAU,CAAC,GAAG,CAAC,CAAC;AACjC,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClG,GAAG;AACH,EAAE,CAAC;AACH,CAAC;AACD;AACA,MAAM,CAAC,OAAO,GAAG;AACjB,CAAC,GAAG,GAAG;AACP,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC/D,EAAE;AACF,CAAC,CAAC;AACF;AACAA,YAAU,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,MAAM,CAACoY,oBAAkB,CAACpY,YAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AACvF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAACA,YAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACxD,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5B,EAAE,SAAS;AACX,EAAE;AACF;AACA,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;AACjB,EAAE,GAAG,GAAG;AACR,GAAG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,GAAG,OAAO,YAAY;AACtB,IAAI,MAAM,IAAI,GAAGA,YAAU,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACrF,IAAI,MAAM,KAAK,GAAG;AAClB,KAAK,IAAI;AACT,KAAK,KAAK,EAAEA,YAAU,CAAC,KAAK,CAAC,KAAK;AAClC,KAAK,OAAO,EAAEA,YAAU,CAAC,KAAK,CAAC,OAAO;AACtC,KAAK,CAAC;AACN,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrG,IAAI,CAAC;AACL,GAAG;AACH,EAAE,CAAC;AACH,CAAC;AACD;AACAA,YAAU,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,MAAM,CAACoY,oBAAkB,CAACpY,YAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAACA,YAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC1D,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5B,EAAE,SAAS;AACX,EAAE;AACF;AACA,CAAC,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;AACnB,EAAE,GAAG,GAAG;AACR,GAAG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,GAAG,OAAO,YAAY;AACtB,IAAI,MAAM,IAAI,GAAGA,YAAU,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvF,IAAI,MAAM,KAAK,GAAG;AAClB,KAAK,IAAI;AACT,KAAK,KAAK,EAAEA,YAAU,CAAC,OAAO,CAAC,KAAK;AACpC,KAAK,OAAO,EAAEA,YAAU,CAAC,OAAO,CAAC,OAAO;AACxC,KAAK,CAAC;AACN,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrG,IAAI,CAAC;AACL,GAAG;AACH,EAAE,CAAC;AACH,CAAC;AACD;AACA,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;AACxD;AACA,SAAS,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;AACrC,CAAC,MAAM,OAAO,GAAG,YAAY;AAC7B,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC9C,EAAE,CAAC;AACH;AACA,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB;AACA,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC;AACnB;AACA,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE;AACzC,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,GAAG,GAAG;AACR,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC;AACrB,GAAG;AACH,EAAE,GAAG,CAAC,KAAK,EAAE;AACb,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACtB,GAAG;AACH,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE;AAC3C,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,GAAG,GAAG;AACR,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC;AACvB,GAAG;AACH,EAAE,GAAG,CAAC,OAAO,EAAE;AACf,GAAG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,GAAG;AACH,EAAE,CAAC,CAAC;AACJ;AACA;AACA,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC;AACpE;AACA;AACA;AACA,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AAC3B;AACA,CAAC,OAAO,OAAO,CAAC;AAChB,CAAC;AACD;AACA,SAAS,UAAU,GAAG;AACtB;AACA,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC;AACxB,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC;AACA,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE;AACpB,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE;AACF;AACA,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE;AAClB;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AACpC,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,GAAG;AACH,EAAE;AACF;AACA,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAC/C,EAAE,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC;AAChC,EAAE;AACF;AACA;AACA;AACA;AACA,CAAC,MAAM,WAAW,GAAGA,YAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzC,CAAC,IAAI,mBAAmB,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1C,EAAEA,YAAU,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;AAC3B,EAAE;AACF;AACA,CAAC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;AACpD;AACA;AACA;AACA,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACtE;AACA;AACA;AACA;AACA,EAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7D,EAAE;AACF;AACA;AACA,CAACA,YAAU,CAAC,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC;AACnC;AACA,CAAC,OAAO,GAAG,CAAC;AACZ,CAAC;AACD;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE;AAClC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC9B;AACA;AACA,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,EAAE;AACF;AACA,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC;AACA,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7D,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE;AACF;AACA,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AACD;AACA,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACjD;AACA,iBAAiB,KAAK,EAAE,CAAC;AACzB,+BAA+B,WAAW,CAAC;AAC3C,yBAAyB,MAAM,CAAC,OAAO,CAAC;;;;;kBCnO3B,GAAG,UAAU,EAAE,EAAE;AAC9B,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC/B,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACxC,YAAY,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChD,SAAS;AACT,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAClD,YAAY,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC;AAC7D,SAAS;AACT,aAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACnC,YAAY,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC;AAChE,SAAS;AACT,aAAa;AACb,YAAY,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,4CAA4C,EAAE,QAAQ,CAAC,CAAC;AAC7F,SAAS;AACT,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjB,EAAE;AACF;AACA;AACA;AACA,IAAI,OAAO,GAAG,KAAK,GAAG;AACtB,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW;AAC3E,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,IAAI,GAAG,aAAa,CAAC;AACzB,IAAI,QAAQ,GAAG,WAAW,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,KAAK,CAAC;AAChE,IAAI,YAAY,GAAG,oBAAoB,CAAC;AACxC,IAAI,YAAY,GAAG,wBAAwB,CAAC;AAC5C;AACA,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5B,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzD,CAAC;AACD;kBACa,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;AACxC,IAAI,IAAI,MAAM,GAAGW,OAAK,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACrC,IAAI,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,OAAO,MAAM,CAAC;AACjD,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;AAC3C,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxD,QAAQ,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACzE,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,QAAQ,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC9D,YAAY,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC7C,gBAAgB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,aAAa;AACb,iBAAiB,OAAO,CAAC,CAAC;AAC1B,SAAS,CAAC,CAAC,CAAC;AACZ,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,EAAE;AACF;AACA,SAASA,OAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;AAC9B,IAAI,IAAI,OAAO,GAAG,IAAI,MAAM,CAAC;AAC7B,QAAQ,GAAG,GAAG,OAAO,GAAG,GAAG;AAC3B,QAAQ,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,YAAY,GAAG,IAAI;AACvE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACtB,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC;AAC1B;AACA,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;AAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;AACvB,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;AACzB,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;AACrC,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACjD,YAAY,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC;AACrB,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC;AACrB,QAAQ,IAAI,EAAE,GAAG,GAAG,CAAC;AACrB,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;AACrC,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC;AAC1B,QAAQ,IAAI,GAAG,GAAG,KAAK,CAAC;AACxB,QAAQ,IAAI,GAAG,GAAG,EAAE,CAAC;AACrB,QAAQ,IAAI,MAAM,GAAG,KAAK,CAAC;AAC3B;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACtD,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChC,YAAY,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACpE,YAAY,IAAI,GAAG,EAAE;AACrB,gBAAgB,GAAG,IAAI,CAAC,CAAC;AACzB,gBAAgB,GAAG,GAAG,KAAK,CAAC;AAC5B,aAAa;AACb,iBAAiB,IAAI,KAAK,EAAE;AAC5B,gBAAgB,IAAI,CAAC,KAAK,KAAK,EAAE;AACjC,oBAAoB,KAAK,GAAG,KAAK,CAAC;AAClC,iBAAiB;AACjB,qBAAqB,IAAI,KAAK,IAAI,EAAE,EAAE;AACtC,oBAAoB,GAAG,IAAI,CAAC,CAAC;AAC7B,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,KAAK,EAAE,EAAE;AAClC,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAC/B,wBAAwB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,wBAAwB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;AAC9D,4BAA4B,GAAG,IAAI,CAAC,CAAC;AACrC,yBAAyB,MAAM;AAC/B,4BAA4B,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;AAC1C,yBAAyB;AACzB,qBAAqB;AACrB,yBAAyB,IAAI,CAAC,KAAK,EAAE,EAAE;AACvC,wBAAwB,GAAG,IAAI,WAAW,EAAE,CAAC;AAC7C,qBAAqB;AACrB,yBAAyB;AACzB,wBAAwB,GAAG,IAAI,CAAC,CAAC;AACjC,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,iBAAiB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;AAC3C,gBAAgB,KAAK,GAAG,CAAC,CAAC;AAC1B,aAAa;AACb,iBAAiB,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC1D,gBAAgB,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACjC,aAAa;AACb,iBAAiB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC5C,gBAAgB,SAAS,GAAG,IAAI,CAAC;AACjC,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC;AAC/B,oBAAoB,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACzF,iBAAiB;AACjB,gBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChF,aAAa;AACb,iBAAiB,IAAI,CAAC,KAAK,EAAE,EAAE;AAC/B,gBAAgB,GAAG,GAAG,IAAI,CAAC;AAC3B,aAAa;AACb,iBAAiB,IAAI,CAAC,KAAK,EAAE,EAAE;AAC/B,gBAAgB,GAAG,IAAI,WAAW,EAAE,CAAC;AACrC,aAAa;AACb,iBAAiB,GAAG,IAAI,CAAC,CAAC;AAC1B,SAAS;AACT;AACA,QAAQ,IAAI,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AACtD;AACA,QAAQ,OAAO,GAAG,CAAC;AACnB;AACA,QAAQ,SAAS,WAAW,GAAG;AAC/B,YAAY,CAAC,IAAI,CAAC,CAAC;AACnB,YAAY,IAAI,MAAM,EAAE,OAAO,CAAC;AAChC;AACA,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACrC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACvB,gBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACzC,oBAAoB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/E,iBAAiB;AACjB,gBAAgB,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3C,gBAAgB,IAAI,MAAM,GAAG,CAAC,EAAE;AAChC,oBAAoB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,iBAAiB;AACjB,gBAAgB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,gBAAgB,CAAC,GAAG,MAAM,CAAC;AAC3B,aAAa;AACb,iBAAiB,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACtD,gBAAgB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACvB,aAAa;AACb,iBAAiB;AACjB,gBAAgB,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACvD,gBAAgB,IAAI,CAAC,MAAM,EAAE;AAC7B,oBAAoB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACjC,iBAAiB,MAAM;AACvB,oBAAoB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,oBAAoB,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1C,iBAAiB;AACjB,aAAa;AACb,YAAY,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAC7C,SAAS;AACT,KAAK,CAAC;AACN;AACA,KAAK,MAAM,CAAC,SAAS,IAAI,EAAE,GAAG,CAAC;AAC/B,QAAQ,IAAI,GAAG,KAAK,SAAS,CAAC;AAC9B,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC,KAAK,CAAC,EAAE,CAAC,CAAC;AACV;AACA,IAAI,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC,QAAQ,IAAI,CAAC,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE,QAAQ,IAAI,CAAC,KAAK,SAAS,IAAI,GAAG,IAAI,EAAE;AACxC,YAAY,CAAC,GAAG,EAAE,CAAC;AACnB,aAAa,IAAI,CAAC,KAAK,SAAS;AAChC,YAAY,CAAC,GAAG,GAAG,CAAC;AACpB;AACA,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACnC,YAAY,OAAO,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC3D,SAAS;AACT,aAAa,OAAO,GAAG,GAAG,CAAC,CAAC;AAC5B,KAAK;AACL;;ICtMA,GAAc,GAAG;AACjB,EAAE,4CAA4C,EAAE,MAAM;AACtD,EAAE,sDAAsD;AACxD,IAAI,sDAAsD;AAC1D,EAAE,oDAAoD,EAAE,UAAU;AAClE,EAAE,4DAA4D;AAC9D,IAAI,gEAAgE;AACpE,EAAE,gEAAgE;AAClE,IAAI,kEAAkE;AACtE,EAAE,gEAAgE;AAClE,IAAI,oEAAoE;AACxE,EAAE,8DAA8D,EAAE,MAAM;AACxE,EAAE,yEAAyE;AAC3E,IAAI,eAAe;AACnB,EAAE,kDAAkD;AACpD,IAAI,kDAAkD;AACtD,EAAE,8CAA8C;AAChD,IAAI,8CAA8C;AAClD,EAAE,qDAAqD;AACvD,IAAI,qDAAqD;AACzD,EAAE,oDAAoD;AACtD,IAAI,oDAAoD;AACxD,EAAE,kDAAkD;AACpD,IAAI,kDAAkD;AACtD,EAAE,qDAAqD;AACvD,IAAI,qDAAqD;AACzD,EAAE,oDAAoD;AACtD,IAAI,oDAAoD;AACxD,EAAE,oDAAoD;AACtD,IAAI,oDAAoD;AACxD;;IC9BA,KAAc,GAAG;AACjB,EAAE,IAAI,EAAE,MAAM;AACd,EAAE,QAAQ,EAAE,UAAU;AACtB,EAAE,IAAI,EAAE,MAAM;AACd,EAAE,KAAK,EAAE,OAAO;AAChB,EAAE,SAAS,EAAE,MAAM;AACnB,EAAE,aAAa,EAAE,UAAU;AAC3B,EAAE,YAAY,EAAE,SAAS;AACzB,EAAE,aAAa,EAAE,UAAU;AAC3B,EAAE,YAAY,EAAE,MAAM;AACtB,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,aAAa,EAAE,UAAU;AAC3B;;ICZA,OAAc,GAAG;AACjB,EAAE,cAAc;AAChB,EAAE,UAAU;AACZ,EAAE,UAAU;AACZ,EAAE,kBAAkB;AACpB,EAAE,eAAe;AACjB,EAAE,WAAW;AACb,EAAE,aAAa;AACf,EAAE,UAAU;AACZ,EAAE,YAAY;AACd,EAAE,cAAc;AAChB,EAAE,gBAAgB;AAClB,EAAE,aAAa;AACf,EAAE,eAAe;AACjB,EAAE,cAAc;AAChB,EAAE,gBAAgB;AAClB,EAAE,cAAc;AAChB,EAAE,gBAAgB;AAClB;;AClBA,MAAMM,MAAI,GAAGtD,cAAe;AAC5B,MAAM,UAAU,GAAGU,aAAsB;AACzC,MAAM4W,cAAY,GAAGrW,sBAAwB;AAC7C;AACA;AACA;AACA;AACA,MAAM,kBAAkB,GAAGuB,IAA4B;AACvD,MAAM,oBAAoB,GAAGwF,MAA8B;AAC3D,MAAM,kBAAkB,GAAGc,QAAgC;AAC3D;IACA,KAAc,GAAG,SAAS,WAAW,EAAE,eAAe,EAAE;AACxD,EAAE,IAAI,eAAe,EAAE;AACvB,IAAI,OAAO,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC;AAC5C,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI;AACN,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACvC,MAAM,MAAM,MAAM,GAAGwO,cAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAE;AAC7D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAC;AAC1D,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpD,QAAQ,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,EAAC;AAC3C,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;AAChD,UAAU,OAAO,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;AAClD,SAAS;AACT,OAAO;AACP,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC7C,MAAM,MAAM,MAAM,GAAGA,cAAY;AACjC,SAAS,QAAQ,CAAC,wDAAwD,EAAE;AAC5E,UAAU,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;AAC3C,SAAS,CAAC;AACV,SAAS,QAAQ,GAAE;AACnB,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAC;AACnD,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxD;AACA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;AAClC,UAAU,QAAQ;AAClB,SAAS;AACT;AACA,QAAQ,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,GAAE;AAC1D,QAAQ,MAAM,gBAAgB,GAAGhU,MAAI,CAAC,QAAQ,CAAC,eAAe,EAAC;AAC/D;AACA,QAAQ,IAAI,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE;AACjE,UAAU,OAAO,CAAC,eAAe,CAAC;AAClC,SAAS;AACT,OAAO;AACP,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC7C;AACA;AACA;AACA,MAAM,MAAM,MAAM,GAAGgU,cAAY;AACjC,SAAS,QAAQ,CAAC,uCAAuC,CAAC;AAC1D,SAAS,QAAQ,GAAE;AACnB,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAC;AAC5D,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpD,QAAQ,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,EAAC;AAC3C,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;AAChD,UAAU,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AACpD,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB;AACA,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;AAC1B,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/B,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;AACjC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/B,GAAG;AACH;AACA,EAAE,OAAO,CAAC,IAAI,CAAC;AACf;;AC3EA,MAAMhU,MAAI,GAAGtD,cAAe;AAC5B;AACA;IACA,OAAc,GAAG,SAAS,uBAAuB;AACjD,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,UAAU;AACZ,EAAE,YAAY,GAAG,CAAC;AAClB,EAAE;AACF,EAAE,MAAM,cAAc,GAAGsD,MAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,EAAC;AAC/E,EAAE,QAAQ,cAAc;AACxB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,WAAW,CAAC;AACrB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,SAAS,CAAC;AACnB,IAAI,KAAK,cAAc,CAAC;AACxB,IAAI,KAAK,QAAQ,CAAC;AAClB,IAAI,KAAK,OAAO;AAChB,MAAM,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1D,IAAI,KAAK,WAAW;AACpB,MAAM,OAAO,CAAC,IAAI,GAAG,UAAU,EAAE,QAAQ,CAAC;AAC1C,IAAI,KAAK,KAAK,CAAC;AACf,IAAI,KAAK,MAAM;AACf,MAAM,OAAO,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AACvE,IAAI,KAAK,KAAK;AACd,MAAM,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC9C,IAAI,KAAK,OAAO,CAAC;AACjB,IAAI,KAAK,aAAa;AACtB,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC;AACzD,IAAI,KAAK,OAAO,CAAC;AACjB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,MAAM;AACf,MAAM,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;AAC7C,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,eAAe,CAAC;AACzB,IAAI,KAAK,MAAM;AACf,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AACtE,IAAI,KAAK,SAAS,CAAC;AACnB,IAAI,KAAK,OAAO,CAAC;AACjB,IAAI,KAAK,SAAS,CAAC;AACnB,IAAI,KAAK,MAAM,CAAC;AAChB,IAAI,KAAK,QAAQ,CAAC;AAClB,IAAI,KAAK,UAAU,CAAC;AACpB,IAAI,KAAK,YAAY,CAAC;AACtB,IAAI,KAAK,SAAS,CAAC;AACnB,IAAI,KAAK,WAAW,CAAC;AACrB,IAAI,KAAK,UAAU,CAAC;AACpB,IAAI,KAAK,YAAY,CAAC;AACtB,IAAI,KAAK,UAAU,CAAC;AACpB,IAAI,KAAK,YAAY;AACrB,MAAM,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,QAAQ,CAAC;AACnB;;;;;;;;;;;;AChDA,MAAMyB,IAAE,GAAG/E,YAAa;AACxB,MAAMgB,IAAE,GAAGN,sBAAa;AACxB,MAAM4C,MAAI,GAAGrC,cAAe;AAC5B,MAAM,KAAK,GAAGuB,gBAAgB;AAC9B,MAAM,YAAY,GAAGwF,sBAAwB;AAC7C;AACA,MAAM,WAAW,GAAGc,MAAkB;AACtC,MAAM,uBAAuB,GAAGC,QAAqB;AACrD;AACA,SAAS,iBAAiB,EAAE,EAAE,EAAE;AAChC,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK;AACrC,IAAI,OAAO,CAAC,GAAG,GAAE;AACjB,IAAI,OAAO,CAAC,GAAG;AACf,MAAM,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAGzF,MAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC;AAChF,MAAK;AACL,IAAI,IAAI,YAAY,EAAE;AACtB,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;AACzD,QAAQ,YAAY,IAAI,IAAG;AAC3B,OAAO;AACP,MAAM,OAAO,CAAC,GAAG;AACjB,QAAQ,KAAK,CAAC,GAAG,CAAC,2CAA2C,GAAG,YAAY,CAAC;AAC7E,QAAO;AACP,KAAK;AACL,IAAI,OAAO,CAAC,GAAG,GAAE;AACjB,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAC;AACtC,GAAG;AACH,CAAC;AACD;AACA,SAAS,gBAAgB,EAAE,MAAM,EAAE;AACnC,EAAE,QAAQ,MAAM;AAChB,IAAI,KAAK,KAAK,CAAC;AACf,IAAI,KAAK,OAAO,CAAC;AACjB,IAAI,KAAK,MAAM;AACf,MAAM,OAAO,IAAI;AACjB,GAAG;AACH,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA,MAAM,UAAU,GAAG,mBAAkB;AACrC,SAAS,SAAS,EAAE,IAAI,EAAE;AAC1B,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,EAAC;AAC/C,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAC;AACtC,EAAE,MAAM,UAAU,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAC;AACtC,EAAE,MAAM,YAAY,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAC;AACxC,EAAE,OAAO;AACT,IAAI,QAAQ;AACZ,IAAI,UAAU;AACd,IAAI,YAAY;AAChB,GAAG;AACH,CAAC;AACD;AACA,IAAI,aAAa,GAAG,KAAI;AACxB;AACA,SAAS,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE;AAC/D,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAC;AAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAM;AAC3B,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,OAAM;AAC7C;AACA,EAAE,IAAI,CAACyB,IAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAChC,IAAI,MAAM;AACV,GAAG;AACH;AACA,EAAE,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;AAC7C,IAAI,eAAe,GAAG,gBAAe;AACrC,IAAI,eAAe,GAAG,UAAS;AAC/B,GAAG;AACH;AACA,EAAE,eAAe,GAAG,iBAAiB,CAAC,eAAe,EAAC;AACtD;AACA,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,eAAe,EAAC;AACxD,EAAE,IAAI,CAAC,MAAM,EAAE;AACf,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAC;AACnC,IAAI,MAAM;AACV,GAAG;AACH;AACA,EAAE;AACF,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;AAChC,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;AAChC,IAAI,YAAY,CAAC,IAAI,CAAC/D,IAAE,CAAC,OAAO,EAAE,CAAC;AACnC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAGsC,MAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAC;AAC1C,GAAG;AACH;AACA,EAAE,IAAI,UAAU,EAAE;AAClB,IAAI,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAC;AACzF,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAC;AACpC,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAC;AACvB,GAAG;AACH;AACA,EAAE,IAAI,aAAa,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;AACjD;AACA;AACA;AACA,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,EAAC;AACjC,GAAG;AACH;AACA,EAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AACpC;AACA;AACA,IAAI,aAAa,GAAG,YAAY,CAAC,KAAK;AACtC,MAAM,SAAS;AACf,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AACjC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1B,MAAK;AACL,GAAG,MAAM;AACT,IAAI,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAC;AAC1E,GAAG;AACH,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,SAAS,EAAE;AAChD,IAAI,aAAa,GAAG,KAAI;AACxB;AACA,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,GAAG,EAAC;AAC3D,KAAK;AACL,GAAG,EAAC;AACJ;AACA,EAAE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE;AAC7C,IAAI,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAC;AAC5C,GAAG,EAAC;AACJ,CAAC;AACD;IACA,cAAc,GAAG;;ACzIjB,MAAM,GAAG,GAAGtD,sBAAc;AAC1B,MAAMsD,MAAI,GAAG5C,cAAe;AAC5B,MAAM,MAAM,GAAGO,eAAwB;AACvC;IACA,sBAAc,GAAG,CAAC,eAAe,EAAE,OAAO,EAAE,eAAe,KAAK;AAChE,EAAE,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;AAC7C,IAAI,eAAe,GAAG,gBAAe;AACrC,IAAI,eAAe,GAAG,UAAS;AAC/B,GAAG;AACH;AACA,EAAE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACrC,IAAI,eAAe,GAAG,QAAO;AAC7B,IAAI,OAAO,GAAG,UAAS;AACvB,GAAG;AACH;AACA,EAAE,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,GAAE;AACpC;AACA,EAAE,OAAO,SAAS,sBAAsB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAC1D,IAAI,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,GAAE;AACzD,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,GAAG,CAAC,UAAU,GAAG,IAAG;AAC1B,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,iEAAiE,CAAC,EAAC;AAClF,KAAK,MAAM;AACX,MAAM,MAAM,CAACqC,MAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,eAAe,EAAE,eAAe,EAAC;AAC3E,MAAM,GAAG,CAAC,GAAG,GAAE;AACf,KAAK;AACL,GAAG;AACH;;ACdA,MAAM,aAAa,GAAG;IACpB,KAAK;;IAEL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,SAAS;;IAET,KAAK;IACL,QAAQ;IACR,OAAO;IACP,OAAO;;;IAGP,KAAK;IACL,KAAK;IACL,GAAG,iBAAiB;CACrB,CAAA;SAEe,gBAAgB,CAC9B,SAAiC,EACjC,WAAwC,EACxC,MAAsB,EACtB,GAAa;;IAGb,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;;IAGxD,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,CACd,EAAU,EACV,QAAgB,EAChB,IAAgB,EAChB,UAAmB;QAEnB,IAAI,SAAiB,CAAA;;;QAGrB,IAAI,UAAU,EAAE;YACd,SAAS,GAAGO,eAAa,CAACP,aAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAA;SACtD;aAAM;;YAEL,SAAS,GAAG,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;SACnE;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,eAAe,GAAG,QAAQ,CAAA;QACxE,OAAO,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;KAC/C,CAAA;IAED,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,KAAK,CAAC,KAAK;;YAET,KAAK,CAAC,SAAS,CACb;gBACE,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;aACpE,EACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACjC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAClD,IAAI,QAAQ,EAAE;oBACZ,OAAO;wBACL,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,IAAI;qBACf,CAAA;iBACF;aACF,CACF,CAAA;YAED,SAAS,YAAY,CAAC,EAAU;gBAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;gBAC5B,IAAI,MAAM,IAAI,SAAS,EAAE;oBACvB,OAAO;wBACL,IAAI,EAAE,MAAM;wBACZ,SAAS,EAAE,KAAK;qBACjB,CAAA;iBACF;aACF;YAED,KAAK,CAAC,SAAS,CACb,EAAE,MAAM,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;;gBAEjC,IAAI,KAAsD,CAAA;;gBAE1D,IAAI,CAAC,QAAQ,EAAE;oBACb,KAAK,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC;wBAAG,OAAO,KAAK,CAAA;;oBAE5C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACnD,IAAI,OAAO,KAAK,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE;wBAC9C,OAAO,KAAK,CAAA;qBACb;iBACF;;gBAGD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAClD,IAAI,QAAQ,EAAE;oBACZ,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;wBAC1C,OAAO;4BACL,IAAI,EAAE,EAAE;4BACR,SAAS,EAAE,kBAAkB;yBAC9B,CAAA;qBACF;oBACD,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;wBAC3B,OAAO;4BACL,IAAI,EAAE,QAAQ;4BACd,QAAQ,EAAE,IAAI;yBACf,CAAA;qBACF;oBACD,OAAO;wBACL,IAAI,EAAEA,aAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;qBAC7B,CAAA;iBACF;aACF,CACF,CAAA;;;;;;;;;YAUD,MAAM,IAAI,GAAGA,aAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACtC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC5D,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;gBAE/B,IAAI,YAAY,GAAGO,eAAa,CAACP,aAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;gBAChE,IACE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC9B,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;oBAC/B,YAAY,KAAK,GAAG,EACpB;oBACA,YAAY,GAAG,KAAK,YAAY,EAAE,CAAA;iBACnC;gBAED,IAAI,QAAQ,GAAG,EAAE,CAAA;gBACjB,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;gBAC5B,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;gBAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;oBAEtC,QAAQ,IAAI,2BAA2B,YAAY,KAAK,CAAA;iBACzD;qBAAM;oBACL,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;wBAC/B,QAAQ,IAAI,kBAAkB,YAAY,qBAAqB,CAAA;qBAChE;oBACD,IACE,IAAI,CAAC,YAAY;wBACjB,OAAO,CAAC,MAAM,GAAG,CAAC;wBAClB,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EACxB;wBACA,QAAQ,IAAI,oBAAoB,YAAY,GAAG,CAAA;qBAChD;iBACF;gBAED,IAAI,GAAG,GAAGA,aAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC1C,IAAI,GAAG,KAAK,KAAK;oBAAE,GAAG,GAAG,IAAI,CAAA;gBAC7B,OAAO;oBACL,MAAM,EAAE,GAAa;oBACrB,QAAQ;oBACR,UAAU,EAAE,IAAI;iBACjB,CAAA;aACF,CAAC,CAAA;YAEF,KAAK,CAAC,MAAM,CACV,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAC/C,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBACX,OAAO;oBACL,QAAQ,EACN;;+BAEiB,EAAE,8BAA8B;wBACjD;;GAEX;iBACQ,CAAA;aACF,CACF,CAAA;;YAGD,IAAI,oBAAoB,EAAE;gBACxB,KAAK,CAAC,SAAS,CACb,EAAE,MAAM,EAAE,IAAI,EAAE,EAChB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM;;oBAE/C,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;iBACtD,CAAC,CACH,CAAA;gBACD,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,IAAI,MAAM;oBAC9C,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC1D,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC,CAAA;aACJ;SACF;KACF,CAAA;AACH;;AClMA,MAAMmB,OAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;AAmFlC,eAAe,YAAY,CAChC,MAAsB,EACtB,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAC3B,SAAS,GAAG,KAAK,EACjB,OAAgC;AAChC,GAAa;;IAEb,MAAM,GAAG;QACP,GAAG,MAAM;QACT,OAAO,EAAE,OAAO;KACjB,CAAA;IAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;IACzC,MAAM,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC,IAAI,GAAGA,OAAK,CAAA;IAE3C,IAAI,CAAC,QAAQ,EAAE;QACb,GAAG,CAAC,+BAA+B,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,QAAQ,GAAGnB,aAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACzC,MAAM,IAAI,GAA4B;QACpC,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,EAAE;KACd,CAAA;IAED,IAAI,CAAC,KAAK,EAAE;QACV,IAAI,QAA6C,CAAA;QACjD,IAAI;YACF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAACyB,WAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;SAC1D;QAAC,OAAO,CAAC,EAAE,GAAE;;QAEd,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;YAC3C,GAAG,CAAC,wDAAwD,CAAC,CAAA;YAC7D,OAAO,QAAQ,CAAA;SAChB;KACF;IAED,IAAIA,WAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC3B,QAAQ,CAAC,QAAQ,CAAC,CAAA;KACnB;SAAM;QACLA,WAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;KAC5C;;;IAGD,SAAS,CACPzB,aAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,EACtC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CACnC,CAAA;IAED,IAAI,IAA4B,EAAE,OAA+B,CAAA;IACjE,IAAI,CAAC,OAAO,EAAE;QACX,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,EAAC;KACjD;SAAM;QACL,IAAI,GAAG,OAAO,CAAA;QACd,OAAO,GAAG,EAAE,CAAA;KACb;;IAGD,IAAI,CAAC,WAAW,GAAGuC,qBAAU,CAAC,QAAQ,CAAC;SACpC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACxC,MAAM,CAAC,KAAK,CAAC;SACb,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAEf,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,UAAU,CAAC,MAAM,EAAE;QACrB,MAAM,IAAI,KAAK,CACb,2EAA2E,UAAU;aAClF,GAAG,CACF,CAAC,EAAE,KACD,GAAGpD,MAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAIA,MAAK,CAAC,KAAK,CAAC,GAAG,CAClC,gBAAgB,OAAO,CAAC,EAAE,CAAC,GAAG,CAC/B,EAAE,CACN;aACA,IAAI,CAAC,MAAM,CAAC,yBAAyB,CACzC,CAAA;KACF;IAED,MAAM,OAAO,GAAG,MAAA,MAAM,CAAC,YAAY,0CAAE,OAAO,CAAA;IAC5C,IAAI,OAAO,EAAE;QACX,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACvD,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE;;;YAGxB,MAAM,YAAY,GAAG2B,aAAW,CAAC,EAAE,CAAC,CAAA;YACpC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBACvB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAA;gBAC/B,IAAI,KAAK,EAAE;oBACT,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAA;iBAC3B;qBAAM;oBACL,MAAM,IAAI,KAAK,CACb,gDAAgD3B,MAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CACjE,CAAA;iBACF;aACF;SACF;KACF;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEtC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACxB,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,4CAA4C,CAAC,CAAA;QACjD,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;IACjC,MAAM,SAAS,GAAG,CAAC,CAAA;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAGA,MAAK,CAAC,MAAM,CAC7B,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;SACvC,KAAK,GAAG,CAAC,GAAG,eAAe,KAAK,QAAQ,GAAG,EAAE,CAAC,CAClD,CAAA;IACD,IAAI,CAAC,SAAS,EAAE;QACd,IAAI,CAAC,OAAO,EAAE;;;YAGZ,MAAM,CAAC,IAAI,CACTA,MAAK,CAAC,WAAW,CAAC,iCAAiC,UAAU,EAAE,CAAC,CACjE,CAAA;YACD,MAAM,CAAC,IAAI,CACT,uEAAuE,CACxE,CAAA;SACF;KACF;SAAM;QACL,MAAM,CAAC,IAAI,CAACA,MAAK,CAAC,WAAW,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC,CAAA;KAC5E;;;;;;;IAQD,MAAM,UAAU,GAA2B,EAAE,CAAA;IAC7C,MAAM,WAAW,GAAgC,EAAE,CAAA;IACnD,MAAM,eAAe,GAAgC,EAAE,CAAA;IAEvD,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,cAAc,EAAE,GACvC,MAAA,MAAA,MAAM,CAAC,YAAY,0CAAE,cAAc,mCAAI,EAAE,CAAA;IAE3C,MAAM,IAAI,CAAA;IACV,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;QAC5B,MAAM,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QAChD,MAAM,YAAY,GAAGsC,WAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACvD,IAAI,WAAwB,CAAA;QAC5B,IAAI;YACF,WAAW,GAAG/B,OAAK,CAAC,YAAY,CAAgB,CAAA;SACjD;QAAC,MAAM;YACNyB,OAAK,CACH,+BAA+B,EAAE,sCAAsC,CACxE,CAAA;YACD,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,YAAY,EAAE,QAAQ,EAAE;gBACrE,MAAM,EAAE,KAAK;aACd,CAAC,CAAA;;;YAGF,cAAc,CAAC,MAAM,GAAG;gBACtB,KAAK,EAAE,KAAK;gBACZ,GAAG,cAAc,CAAC,MAAM;aACzB,CAAA;YACD,WAAW,GAAGzB,OAAK,CAAC,WAAW,CAAC,IAAI,CAAgB,CAAA;SACrD;QACD,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;YACvC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;YACtC,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAClC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAA;aAChC;SACF;QACD,WAAW,CAAC,EAAE,CAAC,GAAG,WAAW,CAAA;QAC7B,eAAe,CAAC,MAAM,CAAC,GAAG,WAAW,CAAA;KACtC;IAED,MAAM,MAAM,GAA2B;QACrC,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;KACpD,CAAA;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;KACxE;IAED,MAAM,KAAK,GAAG6B,sBAAW,CAAC,GAAG,EAAE,CAAA;IAE/B,MAAM,MAAM,GAAG,MAAM0M,aAAK,CAAC;QACzB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;QAC5B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS;QACxC,QAAQ,EAAE,MAAA,MAAM,CAAC,YAAY,0CAAE,OAAO;QACtC,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,IAAI;QACvB,QAAQ,EAAE,IAAI;QACd,MAAM;QACN,OAAO,EAAE;YACP,GAAG,OAAO;YACV,gBAAgB,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,CAAC;SAC3D;QACD,GAAG,cAAc;KAClB,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,MAAM,CAAC,QAAS,CAAA;;IAG7B,MAAM,kBAAkB,GAAGjO,aAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAEjE,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;QACtB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG;YACnB,IAAI,EAAEO,eAAa,CAACP,aAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YAClE,GAAG,EAAE,KAAK;YACV,YAAY,EAAE,YAAY,CACxB,EAAE,EACF,WAAW,CAAC,EAAE,CAAC,EACf,IAAI,CAAC,OAAO,EACZ,kBAAkB,CACnB;SACF,CAAA;KACF;IAED,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAElDmB,OAAK,CAAC,mBAAmB,CAACI,sBAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACpE,OAAO,IAAI,CAAA;AACb,CAAC;AAED;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE7C,SAAS,YAAY,CACnB,EAAU,EACV,WAAwB,EACxB,OAA4B,EAC5B,kBAA0B;IAE1B,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAA;KACZ;IACD,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,WAAW,CAAA;;IAEtC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACtC,OAAO,IAAI,CAAA;KACZ;;;;IAKD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;IACpC,IAAI,gBAAsC,CAAA;IAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IACEhB,eAAa,CAAC,MAAM,CAAC;YACrBA,eAAa,CAACP,aAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,EACpD;YACA,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAA;YAC1C,MAAK;SACN;KACF;IAED,IACE,CAAC,gBAAgB;SAChB,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,EAC5E;QACA,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA0B;IACvD,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;AACzD,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAA;AAE5E,SAAS,UAAU,CAAC,IAAY,EAAE,MAAsB;;IACtD,IAAI,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,CAAA;;;IAGrD,OAAO,IAAI,IAAI,CAAC,SAAS,CACvB;QACE,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC1C,YAAY,EAAE;YACZ,OAAO,EAAE,MAAA,MAAM,CAAC,YAAY,0CAAE,OAAO;YACrC,OAAO,EAAE,MAAA,MAAM,CAAC,YAAY,0CAAE,OAAO;SACtC;KACF,EACD,CAAC,CAAC,EAAE,KAAK;QACP,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,YAAY,MAAM,EAAE;YAC1D,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;SACxB;QACD,OAAO,KAAK,CAAA;KACb,CACF,CAAA;IACD,OAAOuC,qBAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACxE;;;;;;;;;;;;;;;AC1ZA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,kEAAkE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChG;AACA;AACA;AACA;eACc,GAAG,UAAU,MAAM,EAAE;AACnC,EAAE,IAAI,CAAC,IAAI,MAAM,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;AACnD,IAAI,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAChC,GAAG;AACH,EAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,GAAG,MAAM,CAAC,CAAC;AAC7D,EAAE;AACF;AACA;AACA;AACA;AACA;eACc,GAAG,UAAU,QAAQ,EAAE;AACrC,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAChB,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAChB;AACA,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;AACnB,EAAE,IAAI,OAAO,GAAG,GAAG,CAAC;AACpB;AACA,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAChB,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAChB;AACA,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAChB,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;AACjB;AACA,EAAE,IAAI,YAAY,GAAG,EAAE,CAAC;AACxB,EAAE,IAAI,YAAY,GAAG,EAAE,CAAC;AACxB;AACA;AACA,EAAE,IAAI,IAAI,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE;AAC5C,IAAI,QAAQ,QAAQ,GAAG,IAAI,EAAE;AAC7B,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,IAAI,QAAQ,IAAI,QAAQ,IAAI,OAAO,EAAE;AAClD,IAAI,QAAQ,QAAQ,GAAG,OAAO,GAAG,YAAY,EAAE;AAC/C,GAAG;AACH;AACA;AACA,EAAE,IAAI,IAAI,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE;AAC5C,IAAI,QAAQ,QAAQ,GAAG,IAAI,GAAG,YAAY,EAAE;AAC5C,GAAG;AACH;AACA;AACA,EAAE,IAAI,QAAQ,IAAI,IAAI,EAAE;AACxB,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH;AACA;AACA,EAAE,IAAI,QAAQ,IAAI,KAAK,EAAE;AACzB,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH;AACA;AACA,EAAE,OAAO,CAAC,CAAC,CAAC;AACZ;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG7F,QAAmB,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB;AACA;AACA,IAAI,QAAQ,GAAG,CAAC,IAAI,cAAc,CAAC;AACnC;AACA;AACA,IAAI,aAAa,GAAG,QAAQ,GAAG,CAAC,CAAC;AACjC;AACA;AACA,IAAI,oBAAoB,GAAG,QAAQ,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,MAAM,EAAE;AAC7B,EAAE,OAAO,MAAM,GAAG,CAAC;AACnB,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC;AAC1B,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,MAAM,EAAE;AAC/B,EAAE,IAAI,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;AACtC,EAAE,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,CAAC;AAC5B,EAAE,OAAO,UAAU;AACnB,MAAM,CAAC,OAAO;AACd,MAAM,OAAO,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;gBACc,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;AACnD,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;AACnB,EAAE,IAAI,KAAK,CAAC;AACZ;AACA,EAAE,IAAI,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAChC;AACA,EAAE,GAAG;AACL,IAAI,KAAK,GAAG,GAAG,GAAG,aAAa,CAAC;AAChC,IAAI,GAAG,MAAM,cAAc,CAAC;AAC5B,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE;AACjB;AACA;AACA,MAAM,KAAK,IAAI,oBAAoB,CAAC;AACpC,KAAK;AACL,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,GAAG,QAAQ,GAAG,GAAG,CAAC,EAAE;AACpB;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,EAAE;AACF;AACA;AACA;AACA;AACA;gBACc,GAAG,SAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;AACpE,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;AACjB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,IAAI,YAAY,EAAE,KAAK,CAAC;AAC1B;AACA,EAAE,GAAG;AACL,IAAI,IAAI,MAAM,IAAI,MAAM,EAAE;AAC1B,MAAM,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;AACpE,KAAK;AACL;AACA,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACrD,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACtB,MAAM,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1E,KAAK;AACL;AACA,IAAI,YAAY,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC,CAAC;AACpD,IAAI,KAAK,IAAI,aAAa,CAAC;AAC3B,IAAI,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC;AACvC,IAAI,KAAK,IAAI,cAAc,CAAC;AAC5B,GAAG,QAAQ,YAAY,EAAE;AACzB;AACA,EAAE,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,EAAE,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;AAC1B;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;AAC7C,EAAE,IAAI,KAAK,IAAI,KAAK,EAAE;AACtB,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACxB,GAAG,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,IAAI,OAAO,aAAa,CAAC;AACzB,GAAG,MAAM;AACT,IAAI,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,GAAG,2BAA2B,CAAC,CAAC;AAC/D,GAAG;AACH,CAAC;AACD,iBAAiB,MAAM,CAAC;AACxB;AACA,IAAI,SAAS,GAAG,gEAAgE,CAAC;AACjF,IAAI,aAAa,GAAG,eAAe,CAAC;AACpC;AACA,SAAS,QAAQ,CAAC,IAAI,EAAE;AACxB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACpC,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH,EAAE,OAAO;AACT,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACpB,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClB,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClB,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClB,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClB,GAAG,CAAC;AACJ,CAAC;AACD,mBAAmB,QAAQ,CAAC;AAC5B;AACA,SAAS,WAAW,CAAC,UAAU,EAAE;AACjC,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;AACf,EAAE,IAAI,UAAU,CAAC,MAAM,EAAE;AACzB,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC;AACnC,GAAG;AACH,EAAE,GAAG,IAAI,IAAI,CAAC;AACd,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;AACvB,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;AACjC,GAAG;AACH,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;AACvB,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;AAC3B,GAAG;AACH,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;AACvB,IAAI,GAAG,IAAI,GAAG,GAAG,UAAU,CAAC,KAAI;AAChC,GAAG;AACH,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE;AACvB,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;AAC3B,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AACD,sBAAsB,WAAW,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE;AAC1B,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC;AACnB,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5B,EAAE,IAAI,GAAG,EAAE;AACX,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACnB,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACpB,GAAG;AACH,EAAE,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5C;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChC,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5D,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE;AACtB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AAC9B,MAAM,EAAE,EAAE,CAAC;AACX,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,EAAE;AACvB,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;AACvB;AACA;AACA;AACA,QAAQ,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACf,OAAO,MAAM;AACb,QAAQ,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,QAAQ,EAAE,EAAE,CAAC;AACb,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB;AACA,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;AACnB,IAAI,IAAI,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,GAAG;AACH;AACA,EAAE,IAAI,GAAG,EAAE;AACX,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AACpB,IAAI,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC5B,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD,oBAAoB,SAAS,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE;AAC5B,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE;AACpB,IAAI,KAAK,GAAG,GAAG,CAAC;AAChB,GAAG;AACH,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE;AACpB,IAAI,KAAK,GAAG,GAAG,CAAC;AAChB,GAAG;AACH,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC;AACjC,GAAG;AACH;AACA;AACA,EAAE,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpC,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AACxC,KAAK;AACL,IAAI,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AACjC,GAAG;AACH;AACA,EAAE,IAAI,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;AAC9C,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA,EAAE,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpD,IAAI,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;AAC1B,IAAI,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AACjC,GAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AACtC,MAAM,KAAK;AACX,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;AACzD;AACA,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;AAC3B,IAAI,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AACjC,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,eAAe,IAAI,CAAC;AACpB;AACA,qBAAqB,UAAU,KAAK,EAAE;AACtC,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE;AAChC,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE;AACpB,IAAI,KAAK,GAAG,GAAG,CAAC;AAChB,GAAG;AACH;AACA,EAAE,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3C,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACvC,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE;AACnB,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAClC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;AAC1C,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA,IAAI,EAAE,KAAK,CAAC;AACZ,GAAG;AACH;AACA;AACA,EAAE,OAAO,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvE,CAAC;AACD,mBAAmB,QAAQ,CAAC;AAC5B;AACA,IAAI,iBAAiB,IAAI,YAAY;AACrC,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChC,EAAE,OAAO,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC;AAC/B,CAAC,EAAE,CAAC,CAAC;AACL;AACA,SAAS,QAAQ,EAAE,CAAC,EAAE;AACtB,EAAE,OAAO,CAAC,CAAC;AACX,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE;AAC3B,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AAC3B,IAAI,OAAO,GAAG,GAAG,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD,sBAAsB,iBAAiB,GAAG,QAAQ,GAAG,WAAW,CAAC;AACjE;AACA,SAAS,aAAa,CAAC,IAAI,EAAE;AAC7B,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AAC3B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD,wBAAwB,iBAAiB,GAAG,QAAQ,GAAG,aAAa,CAAC;AACrE;AACA,SAAS,aAAa,CAAC,CAAC,EAAE;AAC1B,EAAE,IAAI,CAAC,CAAC,EAAE;AACV,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AACxB;AACA,EAAE,IAAI,MAAM,GAAG,CAAC,2BAA2B;AAC3C,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;AACrC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;AACrC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;AACtC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;AACtC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;AACtC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;AACtC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;AACtC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;AACrC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,aAAa;AAClD,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY;AAC1C,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE;AAC7E,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrD,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;AACtD,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;AAC1D,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,mBAAmB,EAAE;AACxC,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;AAC5D,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;AACxD,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AACD,qCAAqC,0BAA0B,CAAC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mCAAmC,CAAC,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AACvF,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;AAC5D,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;AAC5D,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,oBAAoB,EAAE;AACzC,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjD,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;AACtD,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;AAC1D,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AACD,8CAA8C,mCAAmC,CAAC;AAClF;AACA,SAAS,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE;AAC9B,EAAE,IAAI,KAAK,KAAK,KAAK,EAAE;AACvB,IAAI,OAAO,CAAC,CAAC;AACb,GAAG;AACH;AACA,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE;AACtB,IAAI,OAAO,CAAC,CAAC;AACb,GAAG;AACH;AACA,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE;AACtB,IAAI,OAAO,CAAC,CAAC,CAAC;AACd,GAAG;AACH;AACA,EAAE,IAAI,KAAK,GAAG,KAAK,EAAE;AACrB,IAAI,OAAO,CAAC,CAAC;AACb,GAAG;AACH;AACA,EAAE,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,mCAAmC,CAAC,QAAQ,EAAE,QAAQ,EAAE;AACjE,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;AAC5D,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;AAC5D,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjD,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;AACtD,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,GAAG,GAAG,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;AAC1D,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AACD,8CAA8C,mCAAmC,CAAC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,GAAG,EAAE;AAClC,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AACD,8BAA8B,mBAAmB,CAAC;AAClD;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE;AAC/D,EAAE,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;AAC9B;AACA,EAAE,IAAI,UAAU,EAAE;AAClB;AACA,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC3E,MAAM,UAAU,IAAI,GAAG,CAAC;AACxB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AACvC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,YAAY,EAAE;AACpB,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AACxC,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AAC1D,KAAK;AACL,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE;AACrB;AACA,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,IAAI,KAAK,IAAI,CAAC,EAAE;AACtB,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC1D,OAAO;AACP,KAAK;AACL,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AACrD,GAAG;AACH;AACA,EAAE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AAC9B,CAAC;AACD,2BAA2B,gBAAgB;;;;;;;ACte3C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI0B,MAAI,GAAG1B,MAAiB,CAAC;AAC7B,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AAC1C,IAAI,YAAY,GAAG,OAAO,GAAG,KAAK,WAAW,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS0a,UAAQ,GAAG;AACpB,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACnB,EAAE,IAAI,CAAC,IAAI,GAAG,YAAY,GAAG,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC;AACD;AACA;AACA;AACA;AACAA,UAAQ,CAAC,SAAS,GAAG,SAAS,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE;AAC3E,EAAE,IAAI,GAAG,GAAG,IAAIA,UAAQ,EAAE,CAAC;AAC3B,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACrD,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACzC,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACAA,UAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,aAAa,GAAG;AACnD,EAAE,OAAO,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACtF,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACAA,UAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE;AACvE,EAAE,IAAI,IAAI,GAAG,YAAY,GAAG,IAAI,GAAGhZ,MAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1D,EAAE,IAAI,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9E,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/B,EAAE,IAAI,CAAC,WAAW,IAAI,gBAAgB,EAAE;AACxC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,GAAG;AACH,EAAE,IAAI,CAAC,WAAW,EAAE;AACpB,IAAI,IAAI,YAAY,EAAE;AACtB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/B,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC5B,KAAK;AACL,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACAgZ,UAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,YAAY,CAAC,IAAI,EAAE;AACrD,EAAE,IAAI,YAAY,EAAE;AACpB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,GAAG,MAAM;AACT,IAAI,IAAI,IAAI,GAAGhZ,MAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACAgZ,UAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAC7D,EAAE,IAAI,YAAY,EAAE;AACpB,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE;AAClB,QAAQ,OAAO,GAAG,CAAC;AACnB,KAAK;AACL,GAAG,MAAM;AACT,IAAI,IAAI,IAAI,GAAGhZ,MAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AACnC,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,KAAK;AACL,GAAG;AACH;AACA,EAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,sBAAsB,CAAC,CAAC;AACvD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACAgZ,UAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,WAAW,CAAC,IAAI,EAAE;AACnD,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC9C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,GAAG;AACH,EAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;AACnD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACAA,UAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,gBAAgB,GAAG;AACzD,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAC7B,CAAC,CAAC;AACF;iBACgB,GAAGA;;;;;;ACvHnB;AACA;AACA;AACA;AACA;AACA;AACA,IAAIhZ,MAAI,GAAG1B,MAAiB,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE;AACpD;AACA,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC;AACrC,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC;AACrC,EAAE,IAAI,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC;AACzC,EAAE,IAAI,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC;AACzC,EAAE,OAAO,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO;AAC9D,SAAS0B,MAAI,CAAC,mCAAmC,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASiZ,aAAW,GAAG;AACvB,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACnB,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACAA,aAAW,CAAC,SAAS,CAAC,eAAe;AACrC,EAAE,SAAS,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE;AACpD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC7C,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACAA,aAAW,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,eAAe,CAAC,QAAQ,EAAE;AAC/D,EAAE,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;AACpD,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACzB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAA,aAAW,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,mBAAmB,GAAG;AAC/D,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAACjZ,MAAI,CAAC,mCAAmC,CAAC,CAAC;AAC/D,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC,CAAC;AACF;uBACmB,GAAGiZ;;;;AC7EtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAIC,WAAS,GAAG5a,SAAuB,CAAC;AACxC,IAAI0B,MAAI,GAAGhB,MAAiB,CAAC;AAC7B,IAAIga,UAAQ,GAAGzZ,QAAsB,CAAC,QAAQ,CAAC;AAC/C,IAAI,WAAW,GAAGuB,WAAyB,CAAC,WAAW,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASqY,oBAAkB,CAAC,KAAK,EAAE;AACnC,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,GAAG;AACH,EAAE,IAAI,CAAC,KAAK,GAAGnZ,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAChD,EAAE,IAAI,CAAC,WAAW,GAAGA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5D,EAAE,IAAI,CAAC,eAAe,GAAGA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACrE,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAIgZ,UAAQ,EAAE,CAAC;AACjC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAIA,UAAQ,EAAE,CAAC;AAC/B,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;AACrC,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC/B,CAAC;AACD;AACAG,oBAAkB,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACAA,oBAAkB,CAAC,aAAa;AAChC,EAAE,SAAS,gCAAgC,CAAC,kBAAkB,EAAE;AAChE,IAAI,IAAI,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC;AACnD,IAAI,IAAI,SAAS,GAAG,IAAIA,oBAAkB,CAAC;AAC3C,MAAM,IAAI,EAAE,kBAAkB,CAAC,IAAI;AACnC,MAAM,UAAU,EAAE,UAAU;AAC5B,KAAK,CAAC,CAAC;AACP,IAAI,kBAAkB,CAAC,WAAW,CAAC,UAAU,OAAO,EAAE;AACtD,MAAM,IAAI,UAAU,GAAG;AACvB,QAAQ,SAAS,EAAE;AACnB,UAAU,IAAI,EAAE,OAAO,CAAC,aAAa;AACrC,UAAU,MAAM,EAAE,OAAO,CAAC,eAAe;AACzC,SAAS;AACT,OAAO,CAAC;AACR;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;AAClC,QAAQ,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC3C,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,UAAU,UAAU,CAAC,MAAM,GAAGnZ,MAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3E,SAAS;AACT;AACA,QAAQ,UAAU,CAAC,QAAQ,GAAG;AAC9B,UAAU,IAAI,EAAE,OAAO,CAAC,YAAY;AACpC,UAAU,MAAM,EAAE,OAAO,CAAC,cAAc;AACxC,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;AAClC,UAAU,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AACzC,SAAS;AACT,OAAO;AACP;AACA,MAAM,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACvC,KAAK,CAAC,CAAC;AACP,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,UAAU,EAAE;AAC7D,MAAM,IAAI,cAAc,GAAG,UAAU,CAAC;AACtC,MAAM,IAAI,UAAU,KAAK,IAAI,EAAE;AAC/B,QAAQ,cAAc,GAAGA,MAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC/D,OAAO;AACP;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;AACnD,QAAQ,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC/C,OAAO;AACP;AACA,MAAM,IAAI,OAAO,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACpE,MAAM,IAAI,OAAO,IAAI,IAAI,EAAE;AAC3B,QAAQ,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACxD,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAmZ,oBAAkB,CAAC,SAAS,CAAC,UAAU;AACvC,EAAE,SAAS,6BAA6B,CAAC,KAAK,EAAE;AAChD,IAAI,IAAI,SAAS,GAAGnZ,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACpD,IAAI,IAAI,QAAQ,GAAGA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACxD,IAAI,IAAI,MAAM,GAAGA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpD,IAAI,IAAI,IAAI,GAAGA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAChD;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC/B,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/D,KAAK;AACL;AACA,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;AACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACtC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClC,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACvB,MAAM,aAAa,EAAE,SAAS,CAAC,IAAI;AACnC,MAAM,eAAe,EAAE,SAAS,CAAC,MAAM;AACvC,MAAM,YAAY,EAAE,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI;AACrD,MAAM,cAAc,EAAE,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM;AACzD,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACAmZ,oBAAkB,CAAC,SAAS,CAAC,gBAAgB;AAC7C,EAAE,SAAS,mCAAmC,CAAC,WAAW,EAAE,cAAc,EAAE;AAC5E,IAAI,IAAI,MAAM,GAAG,WAAW,CAAC;AAC7B,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;AAClC,MAAM,MAAM,GAAGnZ,MAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACvD,KAAK;AACL;AACA,IAAI,IAAI,cAAc,IAAI,IAAI,EAAE;AAChC;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAClC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpD,OAAO;AACP,MAAM,IAAI,CAAC,gBAAgB,CAACA,MAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC;AACvE,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACtC;AACA;AACA,MAAM,OAAO,IAAI,CAAC,gBAAgB,CAACA,MAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3D,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACrC,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAmZ,oBAAkB,CAAC,SAAS,CAAC,cAAc;AAC3C,EAAE,SAAS,iCAAiC,CAAC,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE;AAC9F,IAAI,IAAI,UAAU,GAAG,WAAW,CAAC;AACjC;AACA,IAAI,IAAI,WAAW,IAAI,IAAI,EAAE;AAC7B,MAAM,IAAI,kBAAkB,CAAC,IAAI,IAAI,IAAI,EAAE;AAC3C,QAAQ,MAAM,IAAI,KAAK;AACvB,UAAU,uFAAuF;AACjG,UAAU,0DAA0D;AACpE,SAAS,CAAC;AACV,OAAO;AACP,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAC3C,KAAK;AACL,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;AACtC;AACA,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE;AAC5B,MAAM,UAAU,GAAGnZ,MAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AACzD,KAAK;AACL;AACA;AACA,IAAI,IAAI,UAAU,GAAG,IAAIgZ,UAAQ,EAAE,CAAC;AACpC,IAAI,IAAI,QAAQ,GAAG,IAAIA,UAAQ,EAAE,CAAC;AAClC;AACA;AACA,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,OAAO,EAAE;AACtD,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,YAAY,IAAI,IAAI,EAAE;AACzE;AACA,QAAQ,IAAI,QAAQ,GAAG,kBAAkB,CAAC,mBAAmB,CAAC;AAC9D,UAAU,IAAI,EAAE,OAAO,CAAC,YAAY;AACpC,UAAU,MAAM,EAAE,OAAO,CAAC,cAAc;AACxC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE;AACrC;AACA,UAAU,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC3C,UAAU,IAAI,cAAc,IAAI,IAAI,EAAE;AACtC,YAAY,OAAO,CAAC,MAAM,GAAGhZ,MAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,EAAC;AACtE,WAAW;AACX,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE;AAClC,YAAY,OAAO,CAAC,MAAM,GAAGA,MAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACvE,WAAW;AACX,UAAU,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC/C,UAAU,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;AACnD,UAAU,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE;AACrC,YAAY,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;AACzC,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAClC,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACrD,QAAQ,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/B,OAAO;AACP;AACA,MAAM,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAC9B,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC/C,QAAQ,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3B,OAAO;AACP;AACA,KAAK,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC/B,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC3B;AACA;AACA,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,UAAU,EAAE;AAC7D,MAAM,IAAI,OAAO,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACpE,MAAM,IAAI,OAAO,IAAI,IAAI,EAAE;AAC3B,QAAQ,IAAI,cAAc,IAAI,IAAI,EAAE;AACpC,UAAU,UAAU,GAAGA,MAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC7D,SAAS;AACT,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChC,UAAU,UAAU,GAAGA,MAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC7D,SAAS;AACT,QAAQ,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACnD,OAAO;AACP,KAAK,EAAE,IAAI,CAAC,CAAC;AACb,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAmZ,oBAAkB,CAAC,SAAS,CAAC,gBAAgB;AAC7C,EAAE,SAAS,kCAAkC,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO;AAC5E,8CAA8C,KAAK,EAAE;AACrD;AACA;AACA;AACA;AACA,IAAI,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,EAAE;AACjG,QAAQ,MAAM,IAAI,KAAK;AACvB,YAAY,kFAAkF;AAC9F,YAAY,iFAAiF;AAC7F,YAAY,+EAA+E;AAC3F,SAAS,CAAC;AACV,KAAK;AACL;AACA,IAAI,IAAI,UAAU,IAAI,MAAM,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU;AACpE,WAAW,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;AACxD,WAAW,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;AAC7C;AACA,MAAM,OAAO;AACb,KAAK;AACL,SAAS,IAAI,UAAU,IAAI,MAAM,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU;AACzE,gBAAgB,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,QAAQ,IAAI,SAAS;AACzE,gBAAgB,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;AAC7D,gBAAgB,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC;AAC3D,gBAAgB,OAAO,EAAE;AACzB;AACA,MAAM,OAAO;AACb,KAAK;AACL,SAAS;AACT,MAAM,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3D,QAAQ,SAAS,EAAE,UAAU;AAC7B,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAQ,QAAQ,EAAE,SAAS;AAC3B,QAAQ,IAAI,EAAE,KAAK;AACnB,OAAO,CAAC,CAAC,CAAC;AACV,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACAA,oBAAkB,CAAC,SAAS,CAAC,kBAAkB;AAC/C,EAAE,SAAS,oCAAoC,GAAG;AAClD,IAAI,IAAI,uBAAuB,GAAG,CAAC,CAAC;AACpC,IAAI,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAClC,IAAI,IAAI,sBAAsB,GAAG,CAAC,CAAC;AACnC,IAAI,IAAI,oBAAoB,GAAG,CAAC,CAAC;AACjC,IAAI,IAAI,YAAY,GAAG,CAAC,CAAC;AACzB,IAAI,IAAI,cAAc,GAAG,CAAC,CAAC;AAC3B,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC;AACpB,IAAI,IAAI,IAAI,CAAC;AACb,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,IAAI,SAAS,CAAC;AAClB;AACA,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC5C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,MAAM,IAAI,GAAG,GAAE;AACf;AACA,MAAM,IAAI,OAAO,CAAC,aAAa,KAAK,qBAAqB,EAAE;AAC3D,QAAQ,uBAAuB,GAAG,CAAC,CAAC;AACpC,QAAQ,OAAO,OAAO,CAAC,aAAa,KAAK,qBAAqB,EAAE;AAChE,UAAU,IAAI,IAAI,GAAG,CAAC;AACtB,UAAU,qBAAqB,EAAE,CAAC;AAClC,SAAS;AACT,OAAO;AACP,WAAW;AACX,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;AACnB,UAAU,IAAI,CAACnZ,MAAI,CAAC,mCAAmC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACnF,YAAY,SAAS;AACrB,WAAW;AACX,UAAU,IAAI,IAAI,GAAG,CAAC;AACtB,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,IAAIkZ,WAAS,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe;AACtD,mCAAmC,uBAAuB,CAAC,CAAC;AAC5D,MAAM,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC;AACxD;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;AAClC,QAAQ,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1D,QAAQ,IAAI,IAAIA,WAAS,CAAC,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC,CAAC;AAC7D,QAAQ,cAAc,GAAG,SAAS,CAAC;AACnC;AACA;AACA,QAAQ,IAAI,IAAIA,WAAS,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC;AACzD,qCAAqC,oBAAoB,CAAC,CAAC;AAC3D,QAAQ,oBAAoB,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;AACxD;AACA,QAAQ,IAAI,IAAIA,WAAS,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc;AACvD,qCAAqC,sBAAsB,CAAC,CAAC;AAC7D,QAAQ,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;AACxD;AACA,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;AAClC,UAAU,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACtD,UAAU,IAAI,IAAIA,WAAS,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;AAC3D,UAAU,YAAY,GAAG,OAAO,CAAC;AACjC,SAAS;AACT,OAAO;AACP;AACA,MAAM,MAAM,IAAI,IAAI,CAAC;AACrB,KAAK;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC;AACJ;AACAC,oBAAkB,CAAC,SAAS,CAAC,uBAAuB;AACpD,EAAE,SAAS,yCAAyC,CAAC,QAAQ,EAAE,WAAW,EAAE;AAC5E,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,MAAM,EAAE;AAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,MAAM,IAAI,WAAW,IAAI,IAAI,EAAE;AAC/B,QAAQ,MAAM,GAAGnZ,MAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACpD,OAAO;AACP,MAAM,IAAI,GAAG,GAAGA,MAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACzC,MAAM,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAC7E,UAAU,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACpC,UAAU,IAAI,CAAC;AACf,KAAK,EAAE,IAAI,CAAC,CAAC;AACb,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACAmZ,oBAAkB,CAAC,SAAS,CAAC,MAAM;AACnC,EAAE,SAAS,yBAAyB,GAAG;AACvC,IAAI,IAAI,GAAG,GAAG;AACd,MAAM,OAAO,EAAE,IAAI,CAAC,QAAQ;AAC5B,MAAM,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACtC,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAClC,MAAM,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE;AACzC,KAAK,CAAC;AACN,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;AAC5B,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;AAClC,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;AACxC,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC/B,MAAM,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AACrF,KAAK;AACL;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACAA,oBAAkB,CAAC,SAAS,CAAC,QAAQ;AACrC,EAAE,SAAS,2BAA2B,GAAG;AACzC,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,GAAG,CAAC;AACJ;qCAC0B,GAAGA;;;;;;;;;ACva7B;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,CAAC,CAAC;AACjC,4BAA4B,CAAC,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAClD,EAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AACpD,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE;AACjB;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH,OAAO,IAAI,GAAG,GAAG,CAAC,EAAE;AACpB;AACA,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE;AACzB;AACA,MAAM,OAAO,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9E,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,KAAK,IAAI,OAAO,CAAC,iBAAiB,EAAE;AAC5C,MAAM,OAAO,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;AACnD,KAAK,MAAM;AACX,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK;AACL,GAAG;AACH,OAAO;AACP;AACA,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE;AACxB;AACA,MAAM,OAAO,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7E,KAAK;AACL;AACA;AACA,IAAI,IAAI,KAAK,IAAI,OAAO,CAAC,iBAAiB,EAAE;AAC5C,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,MAAM;AACX,MAAM,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAClC,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACtE,EAAE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,IAAI,OAAO,CAAC,CAAC,CAAC;AACd,GAAG;AACH;AACA,EAAE,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS;AACtE,8BAA8B,QAAQ,EAAE,KAAK,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC/E,EAAE,IAAI,KAAK,GAAG,CAAC,EAAE;AACjB,IAAI,OAAO,CAAC,CAAC,CAAC;AACd,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;AACzB,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACtE,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,EAAE,KAAK,CAAC;AACZ,GAAG;AACH;AACA,EAAE,OAAO,KAAK,CAAC;AACf,CAAC;;;;;;;AC7GD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AACzB,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE;AACrC,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE;AAC5C;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,UAAU,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClB;AACA,IAAI,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAC7B,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChC,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC;AACf,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClB;AACA;AACA;AACA,IAAI,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAI,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;qBACiB,GAAG,UAAU,GAAG,EAAE,UAAU,EAAE;AAC/C,EAAE,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA,IAAInZ,MAAI,GAAG1B,MAAiB,CAAC;AAC7B,IAAI,YAAY,GAAGU,cAA0B,CAAC;AAC9C,IAAI,QAAQ,GAAGO,QAAsB,CAAC,QAAQ,CAAC;AAC/C,IAAI,SAAS,GAAGuB,SAAuB,CAAC;AACxC,IAAI,SAAS,GAAGwF,WAAuB,CAAC,SAAS,CAAC;AAClD;AACA,SAAS8S,mBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE;AACtD,EAAE,IAAI,SAAS,GAAG,UAAU,CAAC;AAC7B,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,IAAI,SAAS,GAAGpZ,MAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrD,GAAG;AACH;AACA,EAAE,OAAO,SAAS,CAAC,QAAQ,IAAI,IAAI;AACnC,MAAM,IAAI,wBAAwB,CAAC,SAAS,EAAE,aAAa,CAAC;AAC5D,MAAM,IAAI,sBAAsB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AACD;AACAoZ,mBAAiB,CAAC,aAAa,GAAG,SAAS,UAAU,EAAE,aAAa,EAAE;AACtE,EAAE,OAAO,sBAAsB,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzE,EAAC;AACD;AACA;AACA;AACA;AACAA,mBAAiB,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAA,mBAAiB,CAAC,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACvD,MAAM,CAAC,cAAc,CAACA,mBAAiB,CAAC,SAAS,EAAE,oBAAoB,EAAE;AACzE,EAAE,YAAY,EAAE,IAAI;AACpB,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,GAAG,EAAE,YAAY;AACnB,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACnC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3D,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,mBAAmB,CAAC;AACpC,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACAA,mBAAiB,CAAC,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACtD,MAAM,CAAC,cAAc,CAACA,mBAAiB,CAAC,SAAS,EAAE,mBAAmB,EAAE;AACxE,EAAE,YAAY,EAAE,IAAI;AACpB,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,GAAG,EAAE,YAAY;AACnB,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAClC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3D,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,kBAAkB,CAAC;AACnC,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACAA,mBAAiB,CAAC,SAAS,CAAC,uBAAuB;AACnD,EAAE,SAAS,wCAAwC,CAAC,IAAI,EAAE,KAAK,EAAE;AACjE,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AAClC,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACAA,mBAAiB,CAAC,SAAS,CAAC,cAAc;AAC1C,EAAE,SAAS,+BAA+B,CAAC,IAAI,EAAE,WAAW,EAAE;AAC9D,IAAI,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAChE,GAAG,CAAC;AACJ;AACAA,mBAAiB,CAAC,eAAe,GAAG,CAAC,CAAC;AACtCA,mBAAiB,CAAC,cAAc,GAAG,CAAC,CAAC;AACrC;AACAA,mBAAiB,CAAC,oBAAoB,GAAG,CAAC,CAAC;AAC3CA,mBAAiB,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAA,mBAAiB,CAAC,SAAS,CAAC,WAAW;AACvC,EAAE,SAAS,6BAA6B,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE;AACtE,IAAI,IAAI,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC;AACnC,IAAI,IAAI,KAAK,GAAG,MAAM,IAAIA,mBAAiB,CAAC,eAAe,CAAC;AAC5D;AACA,IAAI,IAAI,QAAQ,CAAC;AACjB,IAAI,QAAQ,KAAK;AACjB,IAAI,KAAKA,mBAAiB,CAAC,eAAe;AAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACzC,MAAM,MAAM;AACZ,IAAI,KAAKA,mBAAiB,CAAC,cAAc;AACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACxC,MAAM,MAAM;AACZ,IAAI;AACJ,MAAM,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACrD,KAAK;AACL;AACA,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE;AACpC,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrF,MAAM,MAAM,GAAGpZ,MAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7E,MAAM,OAAO;AACb,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,aAAa,EAAE,OAAO,CAAC,aAAa;AAC5C,QAAQ,eAAe,EAAE,OAAO,CAAC,eAAe;AAChD,QAAQ,YAAY,EAAE,OAAO,CAAC,YAAY;AAC1C,QAAQ,cAAc,EAAE,OAAO,CAAC,cAAc;AAC9C,QAAQ,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;AACzE,OAAO,CAAC;AACR,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACzC,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAoZ,mBAAiB,CAAC,SAAS,CAAC,wBAAwB;AACpD,EAAE,SAAS,0CAA0C,CAAC,KAAK,EAAE;AAC7D,IAAI,IAAI,IAAI,GAAGpZ,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC1C;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,MAAM,EAAEA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC1C,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,cAAc,EAAEA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrD,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzD,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,GAAG,EAAE,CAAC;AACtB;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AACxC,kCAAkC,IAAI,CAAC,iBAAiB;AACxD,kCAAkC,cAAc;AAChD,kCAAkC,gBAAgB;AAClD,kCAAkCA,MAAI,CAAC,0BAA0B;AACjE,kCAAkC,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAClE,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;AACpB,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClD;AACA,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AACtC,QAAQ,IAAI,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,YAAY,EAAE;AACjE,UAAU,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAY,IAAI,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC;AAC7D,YAAY,MAAM,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,CAAC;AACjE,YAAY,UAAU,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,CAAC;AACzE,WAAW,CAAC,CAAC;AACb;AACA,UAAU,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;AACpD,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,OAAO;AACtB,eAAe,OAAO,CAAC,YAAY,KAAK,IAAI;AAC5C,eAAe,OAAO,CAAC,cAAc,IAAI,cAAc,EAAE;AACzD,UAAU,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAY,IAAI,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC;AAC7D,YAAY,MAAM,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,CAAC;AACjE,YAAY,UAAU,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,CAAC;AACzE,WAAW,CAAC,CAAC;AACb;AACA,UAAU,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;AACpD,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG,CAAC;AACJ;mCACyB,GAAGoZ,oBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,UAAU,EAAE,aAAa,EAAE;AAC3D,EAAE,IAAI,SAAS,GAAG,UAAU,CAAC;AAC7B,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,IAAI,SAAS,GAAGpZ,MAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrD,GAAG;AACH;AACA,EAAE,IAAI,OAAO,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAClD,EAAE,IAAI,OAAO,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAClD;AACA;AACA,EAAE,IAAI,KAAK,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AAClD,EAAE,IAAI,UAAU,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AAC9D,EAAE,IAAI,cAAc,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACtE,EAAE,IAAI,QAAQ,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACpD,EAAE,IAAI,IAAI,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAClD;AACA;AACA;AACA,EAAE,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AAChC,IAAI,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,OAAO,CAAC,CAAC;AACvD,GAAG;AACH;AACA,EAAE,IAAI,UAAU,EAAE;AAClB,IAAI,UAAU,GAAGA,MAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5C,GAAG;AACH;AACA,EAAE,OAAO,GAAG,OAAO;AACnB,KAAK,GAAG,CAAC,MAAM,CAAC;AAChB;AACA;AACA;AACA,KAAK,GAAG,CAACA,MAAI,CAAC,SAAS,CAAC;AACxB;AACA;AACA;AACA;AACA,KAAK,GAAG,CAAC,UAAU,MAAM,EAAE;AAC3B,MAAM,OAAO,UAAU,IAAIA,MAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAIA,MAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACjF,UAAUA,MAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;AAC3C,UAAU,MAAM,CAAC;AACjB,KAAK,CAAC,CAAC;AACP;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5D,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACpD;AACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACnE,IAAI,OAAOA,MAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AAC/D,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC/B,EAAE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AACvC,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC5B,EAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACrC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACnB,CAAC;AACD;AACA,sBAAsB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAACoZ,mBAAiB,CAAC,SAAS,CAAC,CAAC;AAC9E,sBAAsB,CAAC,SAAS,CAAC,QAAQ,GAAGA,mBAAiB,CAAC;AAC9D;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,gBAAgB,GAAG,SAAS,OAAO,EAAE;AACtE,EAAE,IAAI,cAAc,GAAG,OAAO,CAAC;AAC/B,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AAC/B,IAAI,cAAc,GAAGpZ,MAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AACpE,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;AACzC,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA,EAAE,IAAI,CAAC,CAAC;AACR,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACrD,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE;AAC7C,MAAM,OAAO,CAAC,CAAC;AACf,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,aAAa;AACpC,EAAE,SAAS,+BAA+B,CAAC,UAAU,EAAE,aAAa,EAAE;AACtE,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;AACnF,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;AACzF,IAAI,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC;AAC5C,IAAI,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE;AAClF,4DAA4D,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5E,IAAI,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAChC,IAAI,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC;AACtC,IAAI,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACnE,MAAM,OAAOA,MAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACrE,KAAK,CAAC,CAAC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;AACnE,IAAI,IAAI,qBAAqB,GAAG,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC7D,IAAI,IAAI,oBAAoB,GAAG,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC3D;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACxE,MAAM,IAAI,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC5C,MAAM,IAAI,WAAW,GAAG,IAAI,OAAO,CAAC;AACpC,MAAM,WAAW,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;AAC3D,MAAM,WAAW,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC;AAC/D;AACA,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE;AAC7B,QAAQ,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChE,QAAQ,WAAW,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AAC3D,QAAQ,WAAW,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;AAC/D;AACA,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE;AAC7B,UAAU,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5D,SAAS;AACT;AACA,QAAQ,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC/C,OAAO;AACP;AACA,MAAM,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9C,KAAK;AACL;AACA,IAAI,SAAS,CAAC,GAAG,CAAC,kBAAkB,EAAEA,MAAI,CAAC,0BAA0B,CAAC,CAAC;AACvE;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE;AACnE,EAAE,GAAG,EAAE,YAAY;AACnB,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AACzC,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA,SAAS,OAAO,GAAG;AACnB,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AACzB,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AAC3B,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC3B,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC7B,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACnB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,cAAc;AAC/C,EAAE,SAAS,+BAA+B,CAAC,IAAI,EAAE,WAAW,EAAE;AAC9D,IAAI,IAAI,aAAa,GAAG,CAAC,CAAC;AAC1B,IAAI,IAAI,uBAAuB,GAAG,CAAC,CAAC;AACpC,IAAI,IAAI,oBAAoB,GAAG,CAAC,CAAC;AACjC,IAAI,IAAI,sBAAsB,GAAG,CAAC,CAAC;AACnC,IAAI,IAAI,cAAc,GAAG,CAAC,CAAC;AAC3B,IAAI,IAAI,YAAY,GAAG,CAAC,CAAC;AACzB,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;AAClB,IAAI,IAAI,cAAc,GAAG,EAAE,CAAC;AAC5B,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;AAClB,IAAI,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAC9B,IAAI,IAAI,iBAAiB,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;AAC1C;AACA,IAAI,OAAO,KAAK,GAAG,MAAM,EAAE;AAC3B,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;AACtC,QAAQ,aAAa,EAAE,CAAC;AACxB,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,uBAAuB,GAAG,CAAC,CAAC;AACpC,OAAO;AACP,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;AAC3C,QAAQ,KAAK,EAAE,CAAC;AAChB,OAAO;AACP,WAAW;AACX,QAAQ,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAChC,QAAQ,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,KAAK,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE;AAC/C,UAAU,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AACvD,YAAY,MAAM;AAClB,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrC;AACA,QAAQ,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AACtC,QAAQ,IAAI,OAAO,EAAE;AACrB,UAAU,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;AAC9B,SAAS,MAAM;AACf,UAAU,OAAO,GAAG,EAAE,CAAC;AACvB,UAAU,OAAO,KAAK,GAAG,GAAG,EAAE;AAC9B,YAAY,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAChD,YAAY,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC/B,YAAY,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AAC9B,YAAY,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,WAAW;AACX;AACA,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AACtE,WAAW;AACX;AACA,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AACtE,WAAW;AACX;AACA,UAAU,cAAc,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AACxC,SAAS;AACT;AACA;AACA,QAAQ,OAAO,CAAC,eAAe,GAAG,uBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACvE,QAAQ,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1D;AACA,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC;AACA,UAAU,OAAO,CAAC,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACvD,UAAU,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AACvC;AACA;AACA,UAAU,OAAO,CAAC,YAAY,GAAG,oBAAoB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,UAAU,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;AACtD;AACA,UAAU,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;AACpC;AACA;AACA,UAAU,OAAO,CAAC,cAAc,GAAG,sBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACvE,UAAU,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;AAC1D;AACA,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC;AACA,YAAY,OAAO,CAAC,IAAI,GAAG,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACrD,YAAY,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AACvC,WAAW;AACX,SAAS;AACT;AACA,QAAQ,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,QAAQ,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,EAAE;AACtD,UAAU,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,SAAS,CAAC,iBAAiB,EAAEA,MAAI,CAAC,mCAAmC,CAAC,CAAC;AAC3E,IAAI,IAAI,CAAC,mBAAmB,GAAG,iBAAiB,CAAC;AACjD;AACA,IAAI,SAAS,CAAC,gBAAgB,EAAEA,MAAI,CAAC,0BAA0B,CAAC,CAAC;AACjE,IAAI,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;AAC/C,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,YAAY;AAC7C,EAAE,SAAS,6BAA6B,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS;AACtE,yCAAyC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACjC,MAAM,MAAM,IAAI,SAAS,CAAC,+CAA+C;AACzE,4BAA4B,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAChD,KAAK;AACL,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AAClC,MAAM,MAAM,IAAI,SAAS,CAAC,iDAAiD;AAC3E,4BAA4B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AAClD,KAAK;AACL;AACA,IAAI,OAAO,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AACvE,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,kBAAkB;AACnD,EAAE,SAAS,oCAAoC,GAAG;AAClD,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;AACzE,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnD;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACtD,QAAQ,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7D;AACA,QAAQ,IAAI,OAAO,CAAC,aAAa,KAAK,WAAW,CAAC,aAAa,EAAE;AACjE,UAAU,OAAO,CAAC,mBAAmB,GAAG,WAAW,CAAC,eAAe,GAAG,CAAC,CAAC;AACxE,UAAU,SAAS;AACnB,SAAS;AACT,OAAO;AACP;AACA;AACA,MAAM,OAAO,CAAC,mBAAmB,GAAG,QAAQ,CAAC;AAC7C,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,mBAAmB;AACpD,EAAE,SAAS,qCAAqC,CAAC,KAAK,EAAE;AACxD,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,aAAa,EAAEA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;AAC/C,MAAM,eAAe,EAAEA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;AACnD,KAAK,CAAC;AACN;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY;AACjC,MAAM,MAAM;AACZ,MAAM,IAAI,CAAC,kBAAkB;AAC7B,MAAM,eAAe;AACrB,MAAM,iBAAiB;AACvB,MAAMA,MAAI,CAAC,mCAAmC;AAC9C,MAAMA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAEoZ,mBAAiB,CAAC,oBAAoB,CAAC;AACxE,KAAK,CAAC;AACN;AACA,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;AACpB,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnD;AACA,MAAM,IAAI,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,EAAE;AAC1D,QAAQ,IAAI,MAAM,GAAGpZ,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1D,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;AAC7B,UAAU,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAC5C,UAAU,MAAM,GAAGA,MAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACtF,SAAS;AACT,QAAQ,IAAI,IAAI,GAAGA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACtD,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AAC3B,UAAU,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACtC,SAAS;AACT,QAAQ,OAAO;AACf,UAAU,MAAM,EAAE,MAAM;AACxB,UAAU,IAAI,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC;AAC1D,UAAU,MAAM,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC;AAC9D,UAAU,IAAI,EAAE,IAAI;AACpB,SAAS,CAAC;AACV,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO;AACX,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,uBAAuB;AACxD,EAAE,SAAS,8CAA8C,GAAG;AAC5D,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9B,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC7D,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACtE,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,gBAAgB;AACjD,EAAE,SAAS,kCAAkC,CAAC,OAAO,EAAE,aAAa,EAAE;AACtE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9B,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC/C,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;AACpB,MAAM,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACxC,KAAK;AACL;AACA,IAAI,IAAI,cAAc,GAAG,OAAO,CAAC;AACjC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AACjC,MAAM,cAAc,GAAGA,MAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AACtE,KAAK;AACL;AACA,IAAI,IAAI,GAAG,CAAC;AACZ,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;AAC/B,YAAY,GAAG,GAAGA,MAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE;AACnD;AACA;AACA;AACA;AACA,MAAM,IAAI,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACpE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;AAC9B,aAAa,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;AAChD,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACzE,OAAO;AACP;AACA,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG;AACvC,aAAa,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE;AACtD,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC;AAChF,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,aAAa,EAAE;AACvB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,SAAS;AACT,MAAM,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,cAAc,GAAG,4BAA4B,CAAC,CAAC;AAC3E,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,CAAC,SAAS,CAAC,oBAAoB;AACrD,EAAE,SAAS,sCAAsC,CAAC,KAAK,EAAE;AACzD,IAAI,IAAI,MAAM,GAAGA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9C,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC3C,IAAI,IAAI,MAAM,GAAG,CAAC,EAAE;AACpB,MAAM,OAAO;AACb,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,UAAU,EAAE,IAAI;AACxB,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,YAAY,EAAEA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;AAC9C,MAAM,cAAc,EAAEA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;AAClD,KAAK,CAAC;AACN;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY;AACjC,MAAM,MAAM;AACZ,MAAM,IAAI,CAAC,iBAAiB;AAC5B,MAAM,cAAc;AACpB,MAAM,gBAAgB;AACtB,MAAMA,MAAI,CAAC,0BAA0B;AACrC,MAAMA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAEoZ,mBAAiB,CAAC,oBAAoB,CAAC;AACxE,KAAK,CAAC;AACN;AACA,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;AACpB,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClD;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;AAC5C,QAAQ,OAAO;AACf,UAAU,IAAI,EAAEpZ,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC;AAC3D,UAAU,MAAM,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,CAAC;AAC/D,UAAU,UAAU,EAAEA,MAAI,CAAC,MAAM,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,CAAC;AACvE,SAAS,CAAC;AACV,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,UAAU,EAAE,IAAI;AACtB,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;wCAC8B,GAAG,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,UAAU,EAAE,aAAa,EAAE;AAC7D,EAAE,IAAI,SAAS,GAAG,UAAU,CAAC;AAC7B,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,IAAI,SAAS,GAAGA,MAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrD,GAAG;AACH;AACA,EAAE,IAAI,OAAO,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAClD,EAAE,IAAI,QAAQ,GAAGA,MAAI,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACpD;AACA,EAAE,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AAChC,IAAI,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,OAAO,CAAC,CAAC;AACvD,GAAG;AACH;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AACjC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC/B;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,IAAI,EAAE,CAAC,CAAC;AACZ,IAAI,MAAM,EAAE,CAAC;AACb,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC7C,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE;AACf;AACA;AACA,MAAM,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AAC5E,KAAK;AACL,IAAI,IAAI,MAAM,GAAGA,MAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC1C,IAAI,IAAI,UAAU,GAAGA,MAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjD,IAAI,IAAI,YAAY,GAAGA,MAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACrD;AACA,IAAI,IAAI,UAAU,GAAG,UAAU,CAAC,IAAI;AACpC,SAAS,UAAU,KAAK,UAAU,CAAC,IAAI,IAAI,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE;AAC9E,MAAM,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;AAC9E,KAAK;AACL,IAAI,UAAU,GAAG,MAAM,CAAC;AACxB;AACA,IAAI,OAAO;AACX,MAAM,eAAe,EAAE;AACvB;AACA;AACA,QAAQ,aAAa,EAAE,UAAU,GAAG,CAAC;AACrC,QAAQ,eAAe,EAAE,YAAY,GAAG,CAAC;AACzC,OAAO;AACP,MAAM,QAAQ,EAAE,IAAIoZ,mBAAiB,CAACpZ,MAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,CAAC;AAC3E,KAAK;AACL,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA,wBAAwB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAACoZ,mBAAiB,CAAC,SAAS,CAAC,CAAC;AAChF,wBAAwB,CAAC,SAAS,CAAC,WAAW,GAAGA,mBAAiB,CAAC;AACnE;AACA;AACA;AACA;AACA,wBAAwB,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;AAChD;AACA;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,EAAE,SAAS,EAAE;AACrE,EAAE,GAAG,EAAE,YAAY;AACnB,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpD,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1E,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,OAAO;AACP,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,CAAC,SAAS,CAAC,mBAAmB;AACtD,EAAE,SAAS,4CAA4C,CAAC,KAAK,EAAE;AAC/D,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,aAAa,EAAEpZ,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;AAC/C,MAAM,eAAe,EAAEA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;AACnD,KAAK,CAAC;AACN;AACA;AACA;AACA,IAAI,IAAI,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS;AACjE,MAAM,SAAS,MAAM,EAAE,OAAO,EAAE;AAChC,QAAQ,IAAI,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC;AAC/E,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,OAAO,GAAG,CAAC;AACrB,SAAS;AACT;AACA,QAAQ,QAAQ,MAAM,CAAC,eAAe;AACtC,gBAAgB,OAAO,CAAC,eAAe,CAAC,eAAe,EAAE;AACzD,OAAO,CAAC,CAAC;AACT,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AAC/C;AACA,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,OAAO;AACb,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI,EAAE,IAAI;AAClB,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAChD,MAAM,IAAI,EAAE,MAAM,CAAC,aAAa;AAChC,SAAS,OAAO,CAAC,eAAe,CAAC,aAAa,GAAG,CAAC,CAAC;AACnD,MAAM,MAAM,EAAE,MAAM,CAAC,eAAe;AACpC,SAAS,OAAO,CAAC,eAAe,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa;AACvE,WAAW,OAAO,CAAC,eAAe,CAAC,eAAe,GAAG,CAAC;AACtD,WAAW,CAAC,CAAC;AACb,MAAM,IAAI,EAAE,KAAK,CAAC,IAAI;AACtB,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,wBAAwB,CAAC,SAAS,CAAC,uBAAuB;AAC1D,EAAE,SAAS,gDAAgD,GAAG;AAC9D,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AAC7C,MAAM,OAAO,CAAC,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;AAClD,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,CAAC,SAAS,CAAC,gBAAgB;AACnD,EAAE,SAAS,yCAAyC,CAAC,OAAO,EAAE,aAAa,EAAE;AAC7E,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpD,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtC;AACA,MAAM,IAAI,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrE,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,OAAO,OAAO,CAAC;AACvB,OAAO;AACP,KAAK;AACL,IAAI,IAAI,aAAa,EAAE;AACvB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,SAAS;AACT,MAAM,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,4BAA4B,CAAC,CAAC;AACpE,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,CAAC,SAAS,CAAC,oBAAoB;AACvD,EAAE,SAAS,6CAA6C,CAAC,KAAK,EAAE;AAChE,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpD,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtC;AACA;AACA;AACA,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAACA,MAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AAClF,QAAQ,SAAS;AACjB,OAAO;AACP,MAAM,IAAI,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC3E,MAAM,IAAI,iBAAiB,EAAE;AAC7B,QAAQ,IAAI,GAAG,GAAG;AAClB,UAAU,IAAI,EAAE,iBAAiB,CAAC,IAAI;AACtC,aAAa,OAAO,CAAC,eAAe,CAAC,aAAa,GAAG,CAAC,CAAC;AACvD,UAAU,MAAM,EAAE,iBAAiB,CAAC,MAAM;AAC1C,aAAa,OAAO,CAAC,eAAe,CAAC,aAAa,KAAK,iBAAiB,CAAC,IAAI;AAC7E,eAAe,OAAO,CAAC,eAAe,CAAC,eAAe,GAAG,CAAC;AAC1D,eAAe,CAAC,CAAC;AACjB,SAAS,CAAC;AACV,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,MAAM,EAAE,IAAI;AAClB,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,CAAC,SAAS,CAAC,cAAc;AACjD,EAAE,SAAS,sCAAsC,CAAC,IAAI,EAAE,WAAW,EAAE;AACrE,IAAI,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAClC,IAAI,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AACjC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpD,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,IAAI,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAChE,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvD,QAAQ,IAAI,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AACzC;AACA,QAAQ,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClE,QAAQ,MAAM,GAAGA,MAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAChG,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClC,QAAQ,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/C;AACA,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AACxB,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;AAC1B,UAAU,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1D,UAAU,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,UAAU,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,eAAe,GAAG;AAC9B,UAAU,MAAM,EAAE,MAAM;AACxB,UAAU,aAAa,EAAE,OAAO,CAAC,aAAa;AAC9C,aAAa,OAAO,CAAC,eAAe,CAAC,aAAa,GAAG,CAAC,CAAC;AACvD,UAAU,eAAe,EAAE,OAAO,CAAC,eAAe;AAClD,aAAa,OAAO,CAAC,eAAe,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa;AAC5E,cAAc,OAAO,CAAC,eAAe,CAAC,eAAe,GAAG,CAAC;AACzD,cAAc,CAAC,CAAC;AAChB,UAAU,YAAY,EAAE,OAAO,CAAC,YAAY;AAC5C,UAAU,cAAc,EAAE,OAAO,CAAC,cAAc;AAChD,UAAU,IAAI,EAAE,IAAI;AACpB,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACvD,QAAQ,IAAI,OAAO,eAAe,CAAC,YAAY,KAAK,QAAQ,EAAE;AAC9D,UAAU,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxD,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAEA,MAAI,CAAC,mCAAmC,CAAC,CAAC;AAClF,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAEA,MAAI,CAAC,0BAA0B,CAAC,CAAC;AACxE,GAAG,CAAC;AACJ;0CACgC,GAAG;;;;ACvnCnC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG1B,kBAAiC,CAAC,kBAAkB,CAAC;AAC9E,IAAI,IAAI,GAAGU,MAAiB,CAAC;AAC7B;AACA;AACA;AACA,IAAI,aAAa,GAAG,SAAS,CAAC;AAC9B;AACA;AACA,IAAI,YAAY,GAAG,EAAE,CAAC;AACtB;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,oBAAoB,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7D,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACrB,EAAE,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AAC3B,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAC3C,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;AACjD,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;AACjD,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAC3C,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AAC5B,EAAE,IAAI,OAAO,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,uBAAuB;AAClC,EAAE,SAAS,kCAAkC,CAAC,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE;AACjG;AACA;AACA,IAAI,IAAI,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC7D,IAAI,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAChC,IAAI,IAAI,aAAa,GAAG,WAAW;AACnC,MAAM,IAAI,YAAY,GAAG,WAAW,EAAE,CAAC;AACvC;AACA,MAAM,IAAI,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC;AACxC,MAAM,OAAO,YAAY,GAAG,OAAO,CAAC;AACpC;AACA,MAAM,SAAS,WAAW,GAAG;AAC7B,QAAQ,OAAO,mBAAmB,GAAG,cAAc,CAAC,MAAM;AAC1D,YAAY,cAAc,CAAC,mBAAmB,EAAE,CAAC,GAAG,SAAS,CAAC;AAC9D,OAAO;AACP,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,iBAAiB,GAAG,CAAC,EAAE,mBAAmB,GAAG,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC;AAC3B;AACA,IAAI,kBAAkB,CAAC,WAAW,CAAC,UAAU,OAAO,EAAE;AACtD,MAAM,IAAI,WAAW,KAAK,IAAI,EAAE;AAChC;AACA;AACA,QAAQ,IAAI,iBAAiB,GAAG,OAAO,CAAC,aAAa,EAAE;AACvD;AACA,UAAU,kBAAkB,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;AAC3D,UAAU,iBAAiB,EAAE,CAAC;AAC9B,UAAU,mBAAmB,GAAG,CAAC,CAAC;AAClC;AACA,SAAS,MAAM;AACf;AACA;AACA;AACA,UAAU,IAAI,QAAQ,GAAG,cAAc,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;AACnE,UAAU,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,eAAe;AAC/D,wCAAwC,mBAAmB,CAAC,CAAC;AAC7D,UAAU,cAAc,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe;AACvF,8CAA8C,mBAAmB,CAAC,CAAC;AACnE,UAAU,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;AACxD,UAAU,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAChD;AACA,UAAU,WAAW,GAAG,OAAO,CAAC;AAChC,UAAU,OAAO;AACjB,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,MAAM,OAAO,iBAAiB,GAAG,OAAO,CAAC,aAAa,EAAE;AACxD,QAAQ,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;AAClC,QAAQ,iBAAiB,EAAE,CAAC;AAC5B,OAAO;AACP,MAAM,IAAI,mBAAmB,GAAG,OAAO,CAAC,eAAe,EAAE;AACzD,QAAQ,IAAI,QAAQ,GAAG,cAAc,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;AACjE,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AAC9D,QAAQ,cAAc,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACvF,QAAQ,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;AACtD,OAAO;AACP,MAAM,WAAW,GAAG,OAAO,CAAC;AAC5B,KAAK,EAAE,IAAI,CAAC,CAAC;AACb;AACA,IAAI,IAAI,mBAAmB,GAAG,cAAc,CAAC,MAAM,EAAE;AACrD,MAAM,IAAI,WAAW,EAAE;AACvB;AACA,QAAQ,kBAAkB,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;AACzD,OAAO;AACP;AACA,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,KAAK;AACL;AACA;AACA,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,UAAU,EAAE;AAC7D,MAAM,IAAI,OAAO,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACpE,MAAM,IAAI,OAAO,IAAI,IAAI,EAAE;AAC3B,QAAQ,IAAI,aAAa,IAAI,IAAI,EAAE;AACnC,UAAU,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAC5D,SAAS;AACT,QAAQ,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACnD,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,IAAI,CAAC;AAChB;AACA,IAAI,SAAS,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE;AAC/C,MAAM,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;AAC5D,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvB,OAAO,MAAM;AACb,QAAQ,IAAI,MAAM,GAAG,aAAa;AAClC,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC;AACpD,YAAY,OAAO,CAAC,MAAM,CAAC;AAC3B,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,YAAY;AACpD,gCAAgC,OAAO,CAAC,cAAc;AACtD,gCAAgC,MAAM;AACtC,gCAAgC,IAAI;AACpC,gCAAgC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,cAAc,CAAC,MAAM,EAAE;AAC3D,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC7B,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;AACpC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtB,KAAK,EAAE,IAAI,CAAC,CAAC;AACb,GAAG;AACH,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC/D,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,KAAK;AACL,GAAG;AACH,OAAO;AACP,IAAI,MAAM,IAAI,SAAS;AACvB,MAAM,6EAA6E,GAAG,MAAM;AAC5F,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,kBAAkB,CAAC,MAAM,EAAE;AACnE,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC7B,IAAI,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,KAAK;AACL,GAAG;AACH,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC/D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClC,GAAG;AACH,OAAO;AACP,IAAI,MAAM,IAAI,SAAS;AACvB,MAAM,6EAA6E,GAAG,MAAM;AAC5F,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,eAAe,CAAC,GAAG,EAAE;AAC1D,EAAE,IAAI,KAAK,CAAC;AACZ,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5D,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAI,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;AAC7B,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtB,KAAK;AACL,SAAS;AACT,MAAM,IAAI,KAAK,KAAK,EAAE,EAAE;AACxB,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;AACxC,qBAAqB,IAAI,EAAE,IAAI,CAAC,IAAI;AACpC,qBAAqB,MAAM,EAAE,IAAI,CAAC,MAAM;AACxC,qBAAqB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACxC,OAAO;AACP,KAAK;AACL,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,eAAe,CAAC,IAAI,EAAE;AAC3D,EAAE,IAAI,WAAW,CAAC;AAClB,EAAE,IAAI,CAAC,CAAC;AACR,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,EAAE,IAAI,GAAG,GAAG,CAAC,EAAE;AACf,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAChC,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AAChC,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,uBAAuB,CAAC,QAAQ,EAAE,YAAY,EAAE;AAC7F,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1D,EAAE,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;AAC/B,IAAI,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACnD,GAAG;AACH,OAAO,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACxF,GAAG;AACH,OAAO;AACP,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AAC3D,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,gBAAgB;AACrC,EAAE,SAAS,2BAA2B,CAAC,WAAW,EAAE,cAAc,EAAE;AACpE,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC;AACxE,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,kBAAkB;AACvC,EAAE,SAAS,6BAA6B,CAAC,GAAG,EAAE;AAC9C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9D,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;AAC1C,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACjD,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACnD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACxD,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,mBAAmB,GAAG;AAC/D,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;AACf,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE;AAC7B,IAAI,GAAG,IAAI,KAAK,CAAC;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,SAAS,CAAC,qBAAqB,GAAG,SAAS,gCAAgC,CAAC,KAAK,EAAE;AAC9F,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,MAAM,EAAE,CAAC;AACb,GAAG,CAAC;AACJ,EAAE,IAAI,GAAG,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC1C,EAAE,IAAI,mBAAmB,GAAG,KAAK,CAAC;AAClC,EAAE,IAAI,kBAAkB,GAAG,IAAI,CAAC;AAChC,EAAE,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAC9B,EAAE,IAAI,kBAAkB,GAAG,IAAI,CAAC;AAChC,EAAE,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAC9B,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC;AAC5B,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI;AAChC,WAAW,QAAQ,CAAC,IAAI,KAAK,IAAI;AACjC,WAAW,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;AACrC,MAAM,GAAG,kBAAkB,KAAK,QAAQ,CAAC,MAAM;AAC/C,YAAY,gBAAgB,KAAK,QAAQ,CAAC,IAAI;AAC9C,YAAY,kBAAkB,KAAK,QAAQ,CAAC,MAAM;AAClD,YAAY,gBAAgB,KAAK,QAAQ,CAAC,IAAI,EAAE;AAChD,QAAQ,GAAG,CAAC,UAAU,CAAC;AACvB,UAAU,MAAM,EAAE,QAAQ,CAAC,MAAM;AACjC,UAAU,QAAQ,EAAE;AACpB,YAAY,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC/B,YAAY,MAAM,EAAE,QAAQ,CAAC,MAAM;AACnC,WAAW;AACX,UAAU,SAAS,EAAE;AACrB,YAAY,IAAI,EAAE,SAAS,CAAC,IAAI;AAChC,YAAY,MAAM,EAAE,SAAS,CAAC,MAAM;AACpC,WAAW;AACX,UAAU,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC7B,SAAS,CAAC,CAAC;AACX,OAAO;AACP,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC3C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC;AACvC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC3C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC;AACvC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,KAAK,MAAM,IAAI,mBAAmB,EAAE;AACpC,MAAM,GAAG,CAAC,UAAU,CAAC;AACrB,QAAQ,SAAS,EAAE;AACnB,UAAU,IAAI,EAAE,SAAS,CAAC,IAAI;AAC9B,UAAU,MAAM,EAAE,SAAS,CAAC,MAAM;AAClC,SAAS;AACT,OAAO,CAAC,CAAC;AACT,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAClC,KAAK;AACL,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE;AAClE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,YAAY,EAAE;AAClD,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;AACzB,QAAQ,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7B;AACA,QAAQ,IAAI,GAAG,GAAG,CAAC,KAAK,MAAM,EAAE;AAChC,UAAU,kBAAkB,GAAG,IAAI,CAAC;AACpC,UAAU,mBAAmB,GAAG,KAAK,CAAC;AACtC,SAAS,MAAM,IAAI,mBAAmB,EAAE;AACxC,UAAU,GAAG,CAAC,UAAU,CAAC;AACzB,YAAY,MAAM,EAAE,QAAQ,CAAC,MAAM;AACnC,YAAY,QAAQ,EAAE;AACtB,cAAc,IAAI,EAAE,QAAQ,CAAC,IAAI;AACjC,cAAc,MAAM,EAAE,QAAQ,CAAC,MAAM;AACrC,aAAa;AACb,YAAY,SAAS,EAAE;AACvB,cAAc,IAAI,EAAE,SAAS,CAAC,IAAI;AAClC,cAAc,MAAM,EAAE,SAAS,CAAC,MAAM;AACtC,aAAa;AACb,YAAY,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC/B,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,SAAS,CAAC,MAAM,EAAE,CAAC;AAC3B,OAAO;AACP,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,UAAU,EAAE,aAAa,EAAE;AAC/D,IAAI,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACpD,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5C,CAAC;;;;;;;ACpZD,wBAA4BA,iBAAoC,CAAC,iBAAiB;;ACHlF,IAAI,MAAc,CAAA;AAClB,IAAI;IACF,IAAI,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAA;CACrC;AAAC,OAAO,CAAC,EAAE;;;;IAIV,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CACnC;SAEe,oBAAoB,CAClC,KAAa,EACb,WAAwB;IAExB,OAAO,KAAK;SACT,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,OAAO,CACjB,sDAAsD,EACtD,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM;;YAChC,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAA;YAEtB,MAAM,GAAG,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/C,MAAM,YAAY,GAAG,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,0CAAE,GAAG,CAAA;YAEjD,IAAI,CAAC,YAAY,EAAE;gBACjB,OAAO,KAAK,CAAA;aACb;YAED,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC,YAAuC,CACxC,CAAA;YAED,MAAM,GAAG,GAAG,QAAQ,CAAC,mBAAmB,CAAC;gBACvC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;gBACtB,IAAI,EAAE,iBAAiB,CAAC,iBAAiB;aAC1C,CAAC,CAAA;YAEF,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACf,OAAO,KAAK,CAAA;aACb;YAED,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;YAClE,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE;gBAClC,OAAO,UAAU,MAAM,EAAE,CAAA;aAC1B;iBAAM;gBACL,OAAO,UAAU,OAAO,KAAK,MAAM,GAAG,CAAA;aACvC;SACF,CACF,CAAA;KACF,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;SAEe,qBAAqB,CAAC,CAAQ,EAAE,UAAkB;IAChE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,wBAAwB,CAChE,CAAC,EACD,OAAO,CACP,CAAA;IACF,IAAI,YAAY,EAAE;QAChB,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;YAChC,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;KACH;SAAM,IAAI,QAAQ,EAAE;QACnB,CAAC,CAAC,KAAK,GAAG,UAAU,CAAA;KACrB;AACH;;AC9CA,MAAM,cAAc,GAAG,IAAI,GAAG,EAA8B,CAAA;AAC5D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAA;AAE3C,eAAe,aAAa,CACjC,GAAW,EACX,MAAqB,EACrB,UAAsB,EAAE,MAAM,EAAE,EAChC,WAAqB,EAAE;IAEvB,GAAG,GAAGyD,UAAQ,CAAC,GAAG,CAAC,CAAA;;;;;IAMnB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACvC,IAAI,OAAO,EAAE;QACX,OAAO,OAAO,CAAA;KACf;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IACvE,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IACtC,aAAa;SACV,KAAK,CAAC;QACL,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;KAC3B,CAAC;SACD,OAAO,CAAC;QACP,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;KAC3B,CAAC,CAAA;IACJ,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,eAAe,iBAAiB,CAC9B,GAAW,EACX,MAAqB,EACrB,UAAsB,EAAE,MAAM,EAAE,EAChC,WAAqB,EAAE;IAEvB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IAC9B,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAErD,IAAI,GAAG,CAAC,SAAS,EAAE;QACjB,OAAO,GAAG,CAAC,SAAS,CAAA;KACrB;IAED,MAAM,MAAM,GACV,GAAG,CAAC,kBAAkB;SACrB,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACtD,IAAI,CAAC,MAAM,EAAE;;QAEX,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAA;KACzD;IAED,MAAM,SAAS,GAAG;QAChB,CAAC,MAAM,CAAC,WAAW,GAAG,QAAQ;KAC/B,CAAA;IACD,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;;;IAI/D,GAAG,CAAC,SAAS,GAAG,SAAS,CAAA;IAEzB,MAAM,aAAa,GAAG;;QAEpB,GAAG,EAAES,0BAAa,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC,QAAQ,EAAE;KACzC,CAAA;IAED,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,UAAU,GAAG,CAAC,GAAW,KAAK,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;;;IAI1D,MAAM,WAAW,GAAa,EAAE,CAAA;IAEhC,MAAM,SAAS,GAAG,OAAO,GAAW;;QAClC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACpC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;SAChD;QACD,GAAG,GAAGT,UAAQ,CAAC,GAAG,CAAC,CAAA;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAC,MAAA,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,0CAAE,IAAI,CAAC,UAAU,CAAC,CAAA,EAAE;YAClE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACrB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;aACrC;YACD,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;YACnD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;aAC3B;iBAAM;gBACL,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;aAChD;SACF;QACD,OAAO,MAAA,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,0CAAE,SAAS,CAAA;KACtD,CAAA;IAED,MAAM,gBAAgB,GAAG,CAAC,GAAW;;;QAGnC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAClB,GAAG,GAAGb,aAAI,CAAC,KAAK,CAAC,OAAO,CAACA,aAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;SACjD;QACD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;KACtB,CAAA;IAED,SAAS,YAAY,CAAC,YAAiB;QACrC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;YAC9B,IAAI,GAAG,KAAK,SAAS,EAAE;gBACrB,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE;oBACpC,UAAU,EAAE,IAAI;oBAChB,YAAY,EAAE,IAAI;oBAClB,GAAG;wBACD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAA;qBACzB;iBACF,CAAC,CAAA;aACH;SACF;KACF;IAED,IAAI;;QAEF,MAAM,aAAa,GAAG,qBAAoB,CAAC,WAA8B,CAAA;QACzE,MAAM,UAAU,GAAG,IAAI,aAAa,CAClC,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,MAAM,CAAC,IAAI,GAAG,mBAAmB,GAAG,CAAC,GAAG,EAAE,CAC3C,CAAA;QACD,MAAM,UAAU,CACd,OAAO,CAAC,MAAM,EACd,SAAS,EACT,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,YAAY,CACb,CAAA;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QAC7D,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CACxB,oCAAoC,GAAG,MAAM,UAAU,EAAE,EACzD;YACE,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;YAChC,KAAK,EAAE,CAAC;SACT,CACF,CAAA;QACD,MAAM,CAAC,CAAA;KACR;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AAED;AACA,eAAe,UAAU,CACvB,EAAU,EACV,QAAuB,EACvB,MAA+B;IAE/B,IAAI,GAAW,CAAA;;IAEf,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;QAC3C,GAAG,GAAG,EAAE,CAAA;KACT;SAAM;QACL,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC3E,IAAI,kBAAkB,EAAE;YACtB,GAAG,GAAGsB,0BAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;SACpC;KACF;IACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IACpC,OAAO,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;AAC1B,CAAC;AAED;AACA,SAAS,QAAQ,CAAC,EAAU,EAAE,GAAQ;IACpC,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU;UAChC,GAAG,CAAC,OAAO;UACX,GAAG,CAAC,OAAO;cACX,GAAG,CAAC,OAAO;cACX,GAAG,CAAA;IACP,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACpB,GAAG,CAAC,GAAG,EAAE,IAAI;YACX,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,aAAa,CAAA;YAC5C,OAAO,GAAG,CAAC,IAAI,CAAC,CAAA;SACjB;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;AAE9C,SAAS,OAAO,CACd,EAAU,EACV,QAAuB,EACvB,IAAY,EACZ,gBAAyB;IAEzB,MAAM,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAA;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAA;KACd;IACD,MAAM,UAAU,GACd,QAAQ,IAAIG,WAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;UACzCzB,aAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;UACtB,IAAI,CAAA;IACV,MAAM,QAAQ,GAAGgB,aAAW,CAAC,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAA;IACpE,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC/B,OAAO,QAAQ,CAAA;AACjB;;ACxOA;;;;AAIA,MAAM,UAAU,GAAG,GAAG,CAAA;SAEN,+BAA+B,CAC7C,MAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;IAChC,IAAI,cAAc,GAAG,MAAM,CAAC,qBAAsB,CAAC,SAAS,CAAA;IAC5D,IAAI,cAAc,GAA2B,EAAE,CAAA;IAC/C,IAAI,MAAsB,CAAA;IAE1B,IAAI,cAAc,GAAwB,IAAI,CAAA;IAE9C,eAAe,KAAK,CAAC,GAAwB;QAC3C,MAAM,OAAO,GAAG,cAAc,CAAA;QAC9B,cAAc,GAAG,EAAE,CAAA;QAEnB,MAAM,CAAC,IAAI,CACT7B,MAAK,CAAC,MAAM,CACV,2BAA2B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAClD,IAAI,CACL,eAAe,CACjB,EACD;YACE,SAAS,EAAE,IAAI;SAChB,CACF,CAAA;QAED,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE;YAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAA;SACrC;QAED,IAAI;;;YAGF,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAA;YACjC,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAA;YAEnC,MAAM,OAAO,IAAI,MAAM,CAAC,qBAAqB,GAAG,MAAM,YAAY,CAChE,MAAM,CAAC,MAAM,EACb,IAAI,EACJ,KAAK,EACL,OAAO,EACP,GAAG,CACJ,CAAC,CAAA;YACF,cAAc,GAAG,OAAQ,CAAC,SAAS,CAAA;;YAGnC,MAAM,CAAC,aAAa,GAAG,kBAAkB,CACvC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAC5B,CAAA;YAED,MAAM,CAAC,IAAI,CACTA,MAAK,CAAC,WAAW,CAAC,2CAA2C,CAAC,EAC9D,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAA;SACF;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CACVA,MAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,KAAK,EAAE,CAAC,EAC3D,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAC9B,CAAA;SACF;gBAAS;YACR,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAA;YAClC,cAAc,IAAI,cAAc,EAAE,CAAA;YAClC,MAAM,CAAC,cAAc,GAAG,cAAc,GAAG,IAAI,CAAA;SAC9C;;;;QAKD,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,CAAA;QAElC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,GAAG;SACV,CAAC,CAAA;KACH;IAED,OAAO,SAAS,qBAAqB,CACnC,EAAU,EACV,QAAgB,EAChB,GAAa;QAEb,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;YACvB,cAAc,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAA;YAC7B,IAAI,MAAM;gBAAE,YAAY,CAAC,MAAM,CAAC,CAAA;YAChC,MAAM,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAA;YACjD,MAAM,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;gBACpC,cAAc,GAAG,CAAC,CAAA;aACnB,CAAC,CAAA;SACH;KACF,CAAA;AACH;;ACjGA;AACA,MAAM,UAAU,GAAG;;;IAIjB,qBAAqB;;;;;;CAQtB,CAAA;AAED;AACA;AACA,SAAS,uBAAuB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAGwN,WAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IACvC,IAAI;QACFlL,WAAE,CAAC,UAAU,CAAC,IAAI,EAAEA,WAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;KACvC;IAAC,MAAM;QACN,OAAO,KAAK,CAAA;KACb;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAACA,WAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;IAChE,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAA;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAKA,WAAE,CAAC,UAAU,CAACkL,WAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,IAAI,GAAGA,WAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IACvC,OAAOlL,WAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAED;;;SAGgB,oBAAoB,CAAC,OAAe,EAAE,IAAI,GAAG,OAAO;IAClE,IAAI,cAAc,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAE3C,MAAM,GAAG,GAAGgL,cAAO,CAAC,OAAO,CAAC,CAAA;;IAE5B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IAExC,OAAO,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACxC,CAAC;AAED;;;SAGgB,sBAAsB,CACpC,OAAe,EACf,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC;IAEpC,IAAI,WAAW,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IACxC,IAAI,uBAAuB,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAEpD,MAAM,GAAG,GAAGA,cAAO,CAAC,OAAO,CAAC,CAAA;;IAE5B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IAExC,OAAO,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAC1C;;AC0PO,eAAe,YAAY,CAChC,eAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;IACxE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAA;IAClC,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACrD,IAAI,EAAE,cAAc,EAAE,GAAG,YAAY,CAAA;IACrC,IAAI,cAAc,KAAK,IAAI,EAAE;QAC3B,cAAc,GAAG,KAAK,CAAA;KACvB;IAED,MAAM,WAAW,GAAG,OAAO,EAAoB,CAAA;IAC/C,MAAM,UAAU,GAAG,cAAc;UAC7B,IAAI;UACJ,MAAM,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IACpE,MAAM,EAAE,GAAG,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;IAElE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE,CAAA;IAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAACzM,aAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACjD,OAAO,EAAE;YACP,oBAAoB;YACpB,YAAY;YACZ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;SAClD;QACD,aAAa,EAAE,IAAI;QACnB,sBAAsB,EAAE,IAAI;QAC5B,eAAe,EAAE,IAAI;QACrB,GAAG,YAAY;KAChB,CAAc,CAAA;IAEf,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAC9B,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,eAAe,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;;IAGvD,IAAI,WAAuB,CAAA;IAE3B,MAAM,MAAM,GAAkB;QAC5B,MAAM;QACN,WAAW;QACX,IAAI,GAAG;YACL,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,yEAAyE,CAC1E,CAAA;YACD,OAAO,WAAW,CAAA;SACnB;QACD,UAAU;QACV,OAAO;QACP,eAAe,EAAE,SAAS;QAC1B,EAAE;QACF,WAAW;QACX,oBAAoB;QACpB,gBAAgB,CAAC,GAAG,EAAE,OAAO;YAC3B,OAAO,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;SAC9C;QACD,kBAAkB,EAAE,IAAK;QACzB,aAAa,CAAC,GAAG;YACf,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBACzB,MAAM,CAAC,aAAa,GAAG,kBAAkB,CACvC,MAAM,EACN,MAAM,CAAC,qBAAqB;sBACxB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC;sBACnD,EAAE,CACP,CAAA;aACF;YACD,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;SAClC;QACD,gBAAgB,CAAC,CAAC;YAChB,IAAI,CAAC,CAAC,KAAK,EAAE;gBACX,MAAM,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;gBAC7D,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;aACrC;SACF;QACD,MAAM,CAAC,IAAa,EAAE,SAAmB;YACvC,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;SAC5C;QACD,MAAM,KAAK;YACT,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;YAEnC,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,EAAE;gBAChD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;aACtC;YAED,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,OAAO,CAAC,KAAK,EAAE;gBACf,EAAE,CAAC,KAAK,EAAE;gBACV,SAAS,CAAC,KAAK,EAAE;gBACjB,eAAe,EAAE;aAClB,CAAC,CAAA;SACH;QACD,SAAS;YACP,IAAI,UAAU,EAAE;gBACd,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;aACxC;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;aAChE;SACF;QACD,qBAAqB,EAAE,IAAI;QAC3B,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACnC,mBAAmB,EAAE,KAAK;QAC1B,sBAAsB,EAAE,IAAI;QAC5B,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;KACtC,CAAA;IAED,MAAM,CAAC,kBAAkB,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAE5D,WAAW,GAAG;QACZ,IAAI;YACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;SACrB;gBAAS;YACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAChB;KACF,CAAA;IAED,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IAEpC,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,EAAE;QAChD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;KACrC;IAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,IAAI;QAC9B,IAAI,GAAGO,eAAa,CAAC,IAAI,CAAC,CAAA;;QAE1B,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,YAAY,CAAC,GAAG,KAAK,KAAK,EAAE;YAC9B,IAAI;gBACF,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;aACpC;YAAC,OAAO,GAAG,EAAE;gBACZ,EAAE,CAAC,IAAI,CAAC;oBACN,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC;iBACvB,CAAC,CAAA;aACH;SACF;KACF,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI;QACrB,mBAAmB,CAACA,eAAa,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;KACjD,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI;QACxB,mBAAmB,CAACA,eAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;KACvD,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,IAAI,UAAU,EAAE;QACjC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE;;YAE3B,YAAY,CAAC,IAAI,GAAI,UAAU,CAAC,OAAO,EAAkB,CAAC,IAAI,CAAA;SAC/D,CAAC,CAAA;KACH;;IAGD,MAAM,SAAS,GAA4B,EAAE,CAAA;IAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,MAAM,CAAC,eAAe,EAAE;YAC1B,SAAS,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAA;SACrD;KACF;;;IAKD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;QACrB,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAA;KACtC;;IAGD,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAA;IAC7B,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,IAAI,KAAK,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;KACvE;;IAGD,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAA;IAC9B,IAAI,KAAK,EAAE;QACT,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;KACrD;;IAGD,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE;QACvB,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;KACxC;;IAGD,WAAW,CAAC,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,CAAC,CAAA;;;IAI9D,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,qBAAqB,CAAC,CAAC,EAAE,GAAG;QACnE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;KAChB,CAAC,CAAA;;;;IAKF,IAAI,MAAM,CAAC,SAAS,EAAE;QACpB,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;KACzD;;IAGD,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;;IAG5C,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7C,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;;IAGpD,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,MAAM,EAAE;QAChD,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAA;KAC7C;;;;IAKD,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;IAErC,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,MAAM,EAAE;;QAEhD,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;;;QAG5C,WAAW,CAAC,GAAG,CAAC,SAAS,iBAAiB,CAAC,CAAC,EAAE,GAAG;YAC/C,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;YACpB,GAAG,CAAC,GAAG,EAAE,CAAA;SACV,CAAC,CAAA;KACH;;IAGD,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;IAE1D,MAAM,WAAW,GAAG;QAClB,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAA;YACjC,IAAI;gBACF,MAAM,CAAC,qBAAqB,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAA;aAC1D;oBAAS;gBACR,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAA;aACnC;YACD,MAAM,CAAC,sBAAsB,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAA;SACxE;KACF,CAAA;IAED,IAAI,CAAC,cAAc,IAAI,UAAU,EAAE;QACjC,IAAI,WAAW,GAAG,KAAK,CAAA;;QAEvB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjD,UAAU,CAAC,MAAM,IAAI,OAAO,IAAY,EAAE,GAAG,IAAW;YACtD,IAAI,CAAC,WAAW,EAAE;gBAChB,IAAI;oBACF,MAAM,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;oBAC9B,MAAM,WAAW,EAAE,CAAA;oBACnB,WAAW,GAAG,IAAI,CAAA;iBACnB;gBAAC,OAAO,CAAC,EAAE;oBACV,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;oBAC3B,OAAM;iBACP;aACF;YACD,OAAO,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;SAC7B,CAAQ,CAAA;KACV;SAAM;QACL,MAAM,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAC9B,MAAM,WAAW,EAAE,CAAA;KACpB;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,eAAe,WAAW,CACxB,MAAqB,EACrB,UAAmB,EACnB,YAAqB,KAAK;IAE1B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IACpC,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;KACjE;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAA;IACpC,MAAM,IAAI,GAAG,UAAU,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;IAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,GAAG,MAAM,CAAA;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAA;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAA;IAE/B,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE;QACnD,IAAI;QACJ,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;KAC7B,CAAC,CAAA;;IAGF,MAAM,cAAc,GAAG,MAAM,CAAC,sBAAsB,CAAA;IACpD,IAAI,cAAc,EAAE;QAClB,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAQ,EAAE,EAAE,OAAO,EAAO;;YAE9D,IAAI,CAAC,GAAG,EAAE;gBACR,MAAM,OAAO,GAAGP,aAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;gBACzDyB,WAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;gBAClD,IAAI,CACFtC,MAAK,CAAC,MAAM,CAAC,4BAA4BA,MAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CACvE,CAAA;aACF;iBAAM;gBACL,MAAM,GAAG,CAAA;aACV;SACF,CAAC,CAAA;KACH;IAED,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;QAC9B,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;QACnE,WAAW,CACT,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;cACnB,IAAI;cACJ,GAAG,QAAQ,MAAM,QAAQ,CAAC,IAAI,IAAI,UAAU,GAAG,IAAI,EAAE,EACzD,IAAI,EACJ,MAAM,CAAC,MAAM,CAAC,MAAM,CACrB,CAAA;KACF;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA0B;IACrD,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAQ,CAAA;KAChB;IAED,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAA;IAEzC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM;QAC7B,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACvB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE;YACjB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;SAC3B,CAAC,CAAA;KACH,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;QACvB,WAAW,GAAG,IAAI,CAAA;KACnB,CAAC,CAAA;IAEF,OAAO,MACL,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM;QAChC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACvC,IAAI,WAAW,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG;gBACf,IAAI,GAAG,EAAE;oBACP,MAAM,CAAC,GAAG,CAAC,CAAA;iBACZ;qBAAM;oBACL,OAAO,EAAE,CAAA;iBACV;aACF,CAAC,CAAA;SACH;aAAM;YACL,OAAO,EAAE,CAAA;SACV;KACF,CAAC,CAAA;AACN,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,GAAW;IACjD,OAAO,kBAAkB,CAACoB,eAAa,CAACP,aAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;AACnE,CAAC;SAEe,oBAAoB,CAClC,IAAY,EACZ,GAAmB;;IAEnB,MAAM,MAAM,GAAG,GAAG,IAAI,EAAE,CAAA;IACxB,IAAI,SAAS,GAAG,MAAA,MAAM,CAAC,EAAE,0CAAE,KAAK,CAAA;IAEhC,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAA;KAC3C;IAED,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;;IAG3D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC5D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3D,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;KAClC;IAED,MAAM,CAAC,EAAE,GAAG;;QAEV,MAAM,EAAE,MAAA,MAAM,CAAC,EAAE,0CAAE,MAAM;QACzB,KAAK,EAAE,SAAS;KACjB,CAAA;IACD,OAAO,MAA+B,CAAA;AACxC;;;;;;;;;ACvsBA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;AACxB,SAAS,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE;AACpC,IAAI,IAAI,OAAO,YAAY,MAAM,EAAE;AACnC,QAAQ,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtC,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;AAC1C,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,IAAI,QAAQ,KAAK,OAAO,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClE,IAAI,MAAM,wBAAwB,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AACnF,IAAI,OAAO,qBAAqB,IAAI,wBAAwB,CAAC;AAC7D,CAAC;AACD,SAAS,WAAW,CAAC,EAAE,EAAE;AACzB,IAAI,OAAO,EAAE,CAAC;AACd,CAAC;AACD,SAAS,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE;AACjC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,OAAO,EAAE,CAAC;AAClB,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAChC,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACzD,QAAQ,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACjD,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,iBAAiB,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE;AACxD,IAAI,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;AAC9C,QAAQ,OAAO,cAAc,CAAC;AAC9B,KAAK;AACL,IAAI,IAAI,cAAc,IAAI,OAAO,cAAc,CAAC,SAAS,KAAK,UAAU,EAAE;AAC1E,QAAQ,OAAO,cAAc,CAAC,SAAS,CAAC;AACxC,KAAK;AACL,IAAI,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU,EAAE;AACtD,QAAQ,OAAO,OAAO,CAAC,cAAc,CAAC;AACtC,KAAK;AACL,IAAI,IAAI,OAAO,CAAC,cAAc,IAAI,OAAO,OAAO,CAAC,cAAc,CAAC,SAAS,KAAK,UAAU,EAAE;AAC1F,QAAQ,OAAO,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC;AAChD,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,KAAK,CAAC,OAAO,GAAG,EAAE,EAAE;AAC7B,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AACxC,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,OAAO;AACzB,YAAY,SAAS,EAAE,IAAI;AAC3B,SAAS,CAAC;AACV,KAAK;AACL,IAAI,OAAO;AACX,QAAQ,IAAI,EAAE,OAAO;AACrB,QAAQ,UAAU,CAAC,YAAY,EAAE;AACjC,YAAY,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,cAAc;AAC/F,gBAAgB,OAAO,cAAc,KAAK,QAAQ;AAClD,gBAAgB,OAAO,cAAc,CAAC,UAAU,KAAK,UAAU;AAC/D,gBAAgB,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;AAChF;AACA,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE;AACtC,YAAY,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AACrD,YAAY,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AACrD;AACA,YAAY,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1F,YAAY,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;AAC9C,gBAAgB,OAAO,IAAI,CAAC;AAC5B,aAAa;AACb,YAAY,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;AAC3G,YAAY,MAAM,cAAc,GAAG,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC5E,YAAY,IAAI,cAAc,EAAE;AAChC,gBAAgB,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;AAC5E,aAAa;AACb,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK;AAC5F,gBAAgB,IAAI,WAAW,GAAG,QAAQ,CAAC;AAC3C,gBAAgB,IAAI,CAAC,WAAW,EAAE;AAClC,oBAAoB,WAAW,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;AACpD,iBAAiB;AACjB,gBAAgB,OAAO,WAAW,CAAC;AACnC,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK,CAAC;AACN;;ACpFA;;;;;;;AA0BA;AACA,MAAM,SAAS,GAAG,2CAA2C,CAAA;SAE7C,UAAU,CACxB,UAAuB,EAAE,EACzB,OAAgB;IAEhB,OAAO;QACL,IAAI,EAAE,WAAW;QAEjB,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAA;YACpC,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAA;YAE1C,IAAI;gBACF,IAAI,OAAO,CAAC,SAAS,EAAE;oBACrB,IAAI,OAAO,EAAE;wBACX,OAAO;;;4BAGL,IAAI,EAAE,6BAA6B,IAAI,CAAC,SAAS,CAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACjC,GAAG;4BACJ,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;yBACtB,CAAA;qBACF;yBAAM;wBACL,OAAO,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAA;qBAC5D;iBACF;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC/B,OAAO;oBACL,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE;wBACtB,WAAW,EAAE,IAAI;wBACjB,YAAY,EAAE,OAAO,CAAC,YAAY;qBACnC,CAAC;oBACF,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;iBACtB,CAAA;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;gBAChD,MAAM,QAAQ,GAAG,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACtE,MAAM,GAAG,GAAG,QAAQ;sBAChB,uCAAuC,QAAQ,EAAE;sBACjD,GAAG,CAAA;gBACP,IAAI,CAAC,KAAK,CAAC,2BAA2B,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;aACrD;SACF;KACF,CAAA;AACH;;AC5BA,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;AACnC,MAAMmB,OAAK,GAAG,cAAc,CAAC,sBAAsB,CAAC,CAAA;AAEpD,MAAM,SAAS,GAAGZ,eAAa,CAAC,UAAU,CAAC,CAAA;AAE3C,MAAM,MAAM,GAAG,eAAe,CAAA;AAC9B,MAAM,OAAO,GAAG,CAAC,EAAU,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA;AAEzE,SAAS,wBAAwB,CAAC,GAAW;IAC3C,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE;QACjC,OAAO,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;KAClC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA6BgB,oBAAoB,CAAC,MAAsB;IACzD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAC7B,MAAM,gBAAgB,GAAGP,aAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAElE,IAAI,MAAqB,CAAA;IAEzB,OAAO;QACL,IAAI,EAAE,sBAAsB;QAE5B,eAAe,CAAC,OAAO;YACrB,MAAM,GAAG,OAAO,CAAA;SACjB;QAED,MAAM,SAAS,CAACyX,QAAM,EAAE,QAAQ,EAAE,GAAG;YACnC,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAElD,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACrB,OAAO,IAAItW,OAAK,CAAChC,MAAK,CAAC,GAAG,CAAC,aAAa,cAAc,EAAE,CAAC,CAAC,CAAA;gBAC1D,OAAO,IAAI,CAAA;aACZ;YAED,MAAM,KAAK,GAAGoC,sBAAW,CAAC,GAAG,EAAE,CAAA;YAC/B,MAAM,IAAI,CAAA;YACV,IAAI,OAAO,GAA+B,EAAE,CAAA;;YAE5C,IAAIkW,QAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;gBACnCA,QAAM,GAAGA,QAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aACzB;YACD,IAAI;gBACF,OAAO,GAAGxN,OAAY,CAACwN,QAAM,CAAC,CAAC,CAAC,CAAC,CAAA;aAClC;YAAC,OAAO,CAAM,EAAE;gBACf,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBACvC,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAA;gBAEhD,MAAM,GAAG,GAAG,KAAK;sBACb,kDAAkD;sBAClD,QAAQ;0BACR,mFAAmF;0BACnF,6DAA6DzX,aAAI,CAAC,OAAO,CACvE,QAAQ,CACT,eAAe,CAAA;gBAEpB,IAAI,CAAC,KAAK,CACR,iEAAiE;oBAC/D,8BAA8B;oBAC9B,GAAG,EACL,CAAC,CAAC,GAAG,CACN,CAAA;aACF;YAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACnB,OAAO;oBACLmB,OAAK,CACH,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAIhC,MAAK,CAAC,GAAG,CAAC,gBAAgB,cAAc,EAAE,CAAC,EAAE,CACpE,CAAA;gBACH,OAAOsY,QAAM,CAAA;aACd;YAED,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,IAAI,eAAe,GAAG,KAAK,CAAA;YAC3B,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,IAAI,qBAAqB,GAAG,KAAK,CAAA;YACjC,IAAI,CAA0B,CAAA;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,WAAW,CAACA,QAAM,CAAC,CAAC,CAAA;;YAEpD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;;;YAG9B,MAAM,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAE,CAAA;YAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;YACtC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAA;YAC5C,MAAM,YAAY,GAAG,IAAI,GAAG,EAIxB,CAAA;YACJ,MAAM,aAAa,GAAG,CAAC,GAAW,KAChCzX,aAAI,CAAC,KAAK,CAAC,OAAO,CAACA,aAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;YAEjE,MAAM,YAAY,GAAG,OACnB,GAAW,EACX,GAAW;gBAEX,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBACxC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;iBAC7B;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;gBAElD,IAAI,CAAC,QAAQ,EAAE;oBACb,IAAI,CAAC,KAAK,CACR,6BAA6B,GAAG,WAAWA,aAAI,CAAC,QAAQ,CACtD,OAAO,CAAC,GAAG,EAAE,EACb,QAAQ,CACT,yBAAyB,EAC1B,GAAG,CACJ,CAAA;iBACF;gBAED,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;gBACtC,MAAM,YAAY,GAAG,CAAC,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAA;;;gBAIxE,IAAI,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE;;oBAEtC,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;iBACrC;qBAAM,IAAIyB,WAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;;oBAE/C,GAAG,GAAGzB,aAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;iBAC/C;qBAAM;oBACL,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAA;iBAClB;gBAED,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;oBACtB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;iBAClB;;;;gBAKD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBAChD,GAAG;wBACD,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;iBACrE;;gBAGD,IAAI,CAAC,GAAG,EAAE;;oBAER,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;;;;;oBAM7B,IAAI,CAAC,UAAU,IAAI,YAAY,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;wBAChE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;wBACnD,IAAI,YAAY,EAAE;4BAChB,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;yBACxC;qBACF;;;;oBAKD,IAAI;wBACF,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;wBAC3D,IAAI,SAAS,CAAC,gBAAgB,GAAG,CAAC,EAAE;4BAClC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAA;yBAC1D;qBACF;oBAAC,OAAO,CAAM,EAAE;;;wBAGf,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;wBACX,MAAM,CAAC,CAAA;qBACR;;oBAGD,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;iBACpC;gBAED,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;aAC1B,CAAA;YAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACnD,MAAM,EACJ,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,GAAG,EACN,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,YAAY;;;;gBAIf,CAAC,EAAE,SAAS,EACb,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;gBAElB,MAAM,MAAM,GAAGyX,QAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;;gBAGvC,IAAI,MAAM,KAAK,aAAa,EAAE;oBAC5B,MAAM,IAAI,GAAGA,QAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;oBACvC,IAAI,IAAI,KAAK,MAAM,EAAE;wBACnB,MAAM,GAAG,IAAI,CAAA;wBACb,IAAIA,QAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,SAAS,EAAE;;4BAEjD,IACE,kBAAkB,CAChBA,QAAM,EACNA,QAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EACjC,YAAY,CACb,EACD;gCACA,eAAe,GAAG,IAAI,CAAA;6BACvB;yBACF;qBACF;yBAAM,IAAI,IAAI,KAAK,MAAM,EAAE;wBAC1B,MAAM,GAAG,IAAI,CAAA;qBACd;yBAAM,IAAI,IAAI,KAAK,MAAM,IAAIA,QAAM,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;;;wBAGrD,MAAM,EACJ,OAAO,EACP,aAAa,EACb,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,OAAO,EACR,GAAG,MAAM,mBAAmB,CAC3BA,QAAM,EACN,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,YAAY,CACb,CAAA;wBACD,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;wBAC5B,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA;wBACxC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG;4BAClB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;4BAC5B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;4BACrB,IAAI,OAAO;gCAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;yBACzC,CAAC,CAAA;wBACF,IAAI,EAAE,cAAc,CAAC,IAAK,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE;4BACpD,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,IAAK,CAAC,GAAG;gCAC5C,MAAM,EAAE,cAAc;gCACtB,WAAW,EAAE,EAAE;6BAChB,CAAA;yBACF;wBACD,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,IAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;4BAC3D,IAAI;4BACJ,OAAO;yBACR,CAAC,CAAA;qBACH;oBACD,SAAQ;iBACT;gBAED,MAAM,eAAe,GAAG,YAAY,IAAI,CAAC,CAAA;;;gBAIzC,IAAI,SAAS,EAAE;;oBAEb,IAAI,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;wBACpD,SAAQ;qBACT;;oBAED,IAAI,GAAG,EAAE;wBACP,IACE,MAAM,CAAC,aAAa;4BACpB,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,EACxD;4BACA,SAAQ;yBACT;wBACD,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;4BACxB,SAAQ;yBACT;qBACF;;oBAED,IAAI,SAAS,KAAK,gBAAgB,EAAE;wBAClC,SAAQ;qBACT;;oBAGD,IACE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;wBACzB,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;wBAC1C,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAC5B,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,EAClC;wBACA,MAAM,IAAI,KAAK,CACb,gCAAgC,SAAS,2BAA2B;4BAClE,4DAA4D;4BAC5D,iEAAiE,CACpE,CAAA;qBACF;;oBAGD,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,MAAM,YAAY,CACpD,SAAS,EACT,KAAK,CACN,CAAA;oBACD,IAAI,GAAG,GAAG,aAAa,CAAA;;oBAGvB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAC,eAAe,CAAC,GAAG,CACrC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAC3C,CAAA;;oBAGD,IAAI,GAAG,KAAK,SAAS,EAAE;;;wBAGrB,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;4BACtC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;4BACvB,IAAI,eAAe,EAAE;;gCAEnB,GAAG,EAAE,CAAC,SAAS,CACb,YAAY,EACZ,GAAG,GAAG,CAAC,EACP,WAAW,GAAG,sGAAsG,CACrH,CAAA;6BACF;iCAAM;gCACL,MAAM,GAAG,GAAGA,QAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gCAC1C,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;gCAC7D,IAAI,SAAS,EAAE;oCACb,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;iCAC7C;qCAAM;;oCAEL,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;iCACjC;6BACF;yBACF;6BAAM;4BACL,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;yBAChE;qBACF;;;oBAID,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;oBAC7C,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;oBAChC,IAAI,CAAC,eAAe,EAAE;;wBAEpB,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;qBACvC;iBACF;qBAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;;oBAElD,MAAM,aAAa,GAAG,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAE/D,MAAM,GAAG,GAAG,MAAM;yBACf,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC;yBACnD,IAAI,EAAE,CAAA;oBACT,IAAI,CAAC,aAAa,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE;wBACpD,IAAI,CAAC,IAAI,CACP,IAAI;4BACFtY,MAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;4BAC/B,IAAI;4BACJ,iBAAiB,CAACsY,QAAM,EAAE,KAAK,CAAC;4BAChC,0DAA0D;4BAC1D,OAAOtY,MAAK,CAAC,IAAI,CACf,wFAAwF,CACzF,GAAG;4BACJ,wCAAwC;4BACxC,wDAAwD;4BACxD,iFAAiF,CACpF,CAAA;qBACF;oBACD,IACE,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC/B,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC1C;wBACA,qBAAqB,GAAG,IAAI,CAAA;wBAC5B,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,uBAAuB,GAAG,aAAa,CAAC,CAAA;qBACrE;iBACF;aACF;YAED,IAAI,MAAM,EAAE;;gBAEV,IAAI,GAAG,GAAG,qBAAqB,IAAI,CAAC,SAAS,CAAC;oBAC5C,GAAG,MAAM,CAAC,GAAG;oBACb,GAAG,EAAE,CAAC,CAAC,GAAG;iBACX,CAAC,GAAG,CAAA;;gBAEL,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE;oBAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;wBACtC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;wBAC9B,GAAG,IAAI,GAAG,GAAG,MACX,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACpD,GAAG,CAAA;qBACJ;iBACF;gBACD,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;aACnB;YAED,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE;gBAClB,QAAQ,CACN,GACE,eAAe;sBACX,gBAAgB;sBAChB,YAAY,CAAC,IAAI;0BACjB,gBAAgB;0BAChB,sBACN,IAAI,cAAc,EAAE,CACrB,CAAA;;gBAED,GAAG,EAAE,CAAC,OAAO,CACX,iEAAiE,gBAAgB,IAAI;oBACnF,8CAA8C,IAAI,CAAC,SAAS,CAC1D,cAAc,CAAC,GAAG,CACnB,IAAI,CACR,CAAA;aACF;YAED,IAAI,qBAAqB,EAAE;gBACzB,GAAG,EAAE,CAAC,OAAO,CACX,uDAAuD,gBAAgB,IAAI,CAC5E,CAAA;aACF;;YAGD,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAA;YAChD,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,YAAY,EAAE;gBAC9C,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,WAAW,CAAC,UAAU,CAC/C,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CACvC,CAAA;gBACD,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBACtC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;aACxD;;;;YAKD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;;gBAE3B,MAAM,aAAa,GAAI,IAAY,CAAC,aAEvB,CAAA;gBACb,IAAI,aAAa,EAAE;oBAChB,CACC,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CACpD,EACD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;iBAC5C;gBACD,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,gBAAgB,CACtD,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,eAAe,CAChB,CAAA;gBACD,IAAI,MAAM,IAAI,aAAa,EAAE;oBAC3B,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;iBAC3C;aACF;YAED,OAAO;gBACLgC,OAAK,CACH,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAIhC,MAAK,CAAC,GAAG,CAC7B,IAAI,YAAY,CAAC,IAAI,uBAAuB,cAAc,EAAE,CAC7D,EAAE,CACJ,CAAA;;YAGH,IAAI,kBAAkB,CAAC,IAAI,EAAE;gBAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG;oBAC7B,gBAAgB,CAAC0B,UAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;iBACpE,CAAC,CAAA;aACH;YAED,IAAI,CAAC,EAAE;gBACL,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;aACpB;iBAAM;gBACL,OAAO4W,QAAM,CAAA;aACd;SACF;KACF,CAAA;AACH,CAAC;AAED;;;;AAIA,SAAS,wBAAwB,CAAC,GAAW;IAC3C,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;;IAE7B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACnD,OAAO,KAAK,CAAA;KACb;;IAED,IAAI,CAACzX,aAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,KAAK,CAAA;KACb;;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;QACvE,OAAO,KAAK,CAAA;KACb;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAID;;;;;;;;;;;;;AAaA,SAAS,kBAAkB,CACzB,SAAiB,EACjB,GAAW,EACX,MAAc,EACd,WAAmB;IAEnB,MAAM,IAAI,GACR0X,OAAO,CAAC,SAAS,EAAE;QACjB,WAAW,EAAE,QAAQ;QACrB,UAAU,EAAE,QAAQ;KACrB,CACF,CAAC,IAAI,CAAC,CAAC,CAAS,CAAA;IAEjB,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC3B,OAAO,WAAW,GAAG,GAAG,CAAA;SACzB;QAED,MAAM,WAAW,GAA0B,EAAE,CAAA;QAC7C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,IACE,IAAI,CAAC,IAAI,KAAK,iBAAiB;gBAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,EACnC;gBACA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA;gBACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;gBACjC,WAAW,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAA;aAC9C;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,EAAE;gBACjD,WAAW,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,SAAS;oBACvB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;iBAC3B,CAAC,CAAA;aACH;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,0BAA0B,EAAE;gBACnD,WAAW,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;aACpE;SACF;;;QAID,MAAM,aAAa,GAAG9N,qBAAmB,CACvC,oBAAoB,WAAW,IAAI,MAAM,EAAE,CAC5C,CAAA;QACD,MAAM,KAAK,GAAa,CAAC,UAAU,aAAa,UAAU,GAAG,GAAG,CAAC,CAAA;QACjE,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE;YAC9C,IAAI,YAAY,KAAK,GAAG,EAAE;gBACxB,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,MAAM,aAAa,EAAE,CAAC,CAAA;aACpD;iBAAM,IAAI,YAAY,KAAK,SAAS,EAAE;gBACrC,KAAK,CAAC,IAAI,CACR,SAAS,SAAS,MAAM,aAAa,iBAAiB,aAAa,cAAc,aAAa,EAAE,CACjG,CAAA;aACF;iBAAM;gBACL,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,MAAM,aAAa,KAAK,YAAY,IAAI,CAAC,CAAA;aACvE;SACF,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACxB;AACH;;AChoBA;AACA,MAAM,qBAAqB,GAAGrJ,eAAa,CAAC,YAAY,CAAC,CAAA;AACzD,MAAM,kBAAkB,GAAGA,eAAa,CAAC,SAAS,CAAC,CAAA;AAEnD;;;;SAIgB,sBAAsB,CAAC,MAAsB;IAC3D,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,EAAE,KAAK,qBAAqB,IAAI,EAAE,KAAK,kBAAkB,EAAE;gBAC7D,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA;gBAC/B,OAAO,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,SAAS,GAAG,OAAO,GAAG,EAAE,CAAA;gBAChE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;gBACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAA;gBACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAA;gBACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAA;gBACzC,IAAI,IAAiC,CAAA;gBACrC,IAAIiB,UAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;oBAC/B,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAA;iBAC9D;gBACD,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;oBAChC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAA;iBAC7B;qBAAM;oBACL,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAK,CAAC,CAAA;iBAC3D;gBACD,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAA;gBACzB,IAAI,OAAO,CAAC,IAAI,EAAE;oBAChB,OAAO,GAAGxB,aAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;iBACjD;gBACD,IAAI,OAAO,KAAK,GAAG,EAAE;oBACnB,IAAI,GAAGA,aAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC,CAAA;iBACjD;gBAED,OAAO,IAAI;qBACR,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBAChD,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBAChD,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;qBAC5D,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;qBACrD,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;qBACjD,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;qBAC7C,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;qBACnD,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;aAC9D;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;;gBAEhD,OAAO,IAAI,CAAC,OAAO,CACjB,6BAA6B,EAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAC5B,CAAA;aACF;SACF;KACF,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAA2B;IAClD,IAAI,GAAG,GAAG,GAAG,CAAA;IACb,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACvB,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAC3B,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAC3D,IAAI,CAAA;KACL;IACD,OAAO,GAAG,GAAG,GAAG,CAAA;AAClB;;ACnEA,MAAM,YAAY,GAAG,qBAAqB,CAAA;AAE1C,MAAM,UAAU,GAAG,OAAO,IAAI,GAAG,EAAE,EAAE,GAAW;IAC9C,IAAI,MAAM,CAAA;IACV,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;;QAE3B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAA;QAC9D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;SACtC;;QAED,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KACpD;SAAM;;;;;;;QAOL,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QAC9D;;QAEE,sBAAsB,IAAI,WAAW;YACrC,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAC1C;;YAEA,MAAM,GAAG,MAAM,WAAW,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;SAChE;aAAM;YACL,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;;YAE3C,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;SACrD;KACF;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAA;AAChC,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;AAErC,MAAM,UAAU,GAAG,CAAC,MAAsB;IAC/C,OAAO;QACL,IAAI,EAAE,WAAW;QAEjB,SAAS,CAAC,EAAE;YACV,IAAI,EAAE,KAAK,YAAY,EAAE;gBACvB,OAAO,EAAE,CAAA;aACV;SACF;QAED,MAAM,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,KAAK,YAAY,EAAE;gBACvB,OAAO,kBAAkB,cAAc,EAAE,CAAA;aAC1C;YAED,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBACzB,OAAM;aACP;YAED,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;YAE7C,OAAO;wBACW,YAAY;wCACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;CAC1D,CAAA;SACI;KACF,CAAA;AACH,CAAC;;AC5DD,SAAS,kBAAkB,CAAC,EAAU;IACpC,MAAM,EAAE,MAAM,EAAE,GAAGsC,kBAAQ,CAAC,EAAE,CAAC,CAAA;IAC/B,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,IAAIqV,4BAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,YAAY,GAAG,aAAa,CAAA;SAElB,eAAe,CAAC,MAAsB;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,CAAA;IAE1C,OAAO;QACL,IAAI,EAAE,aAAa;QAEnB,IAAI,CAAC,EAAE;;YACL,IAAI,OAAO,EAAE;gBACX,MAAM,WAAW,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAA;gBAC1C,IACE,WAAW;oBACX,CAAC,MAAA,WAAW,CAAC,MAAM,mCAAI,WAAW,CAAC,YAAY,KAAK,IAAI,EACxD;oBACA,OAAO,EAAE,CAAA;iBACV;aACF;SACF;QAED,MAAM,SAAS,CAAC,CAAC,EAAE,EAAE;;YACnB,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAA;YACpC,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE;gBACxC,OAAO;oBACL,IAAI,EAAE,WAAW,eAAe,KAAK,GAAG,CAAC;iBAC1C,CAAA;aACF;YACD,IACE,KAAK,IAAI,IAAI;iBACZ,KAAK,IAAI,CAAC,MAAA,KAAK,CAAC,MAAM,mCAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,EACvD;gBACA,OAAM;aACP;YAED,IAAI,GAAW,CAAA;YACf,IAAI,OAAO,EAAE;;gBAEX,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAkB,CAAA;gBACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBACjC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACnB,OAAO,EAAE,MAAM,cAAc,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;oBACxD,MAAM,CAAC,OAAO,EAAE,IAAI;wBAClB,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;qBACvC;iBACF,CAAC,CAAA;gBACF,IAAI,IAAY,CAAA;gBAChB,IAAI;oBACF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;wBACvC,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;qBAClC,CAAC,CAAA;oBACF,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;iBACtB;wBAAS;oBACR,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;iBACrB;gBACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjC,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;;oBAExB,OAAO,sBAAsB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;;;;;;;;;cASnD,CAAA;iBACL;qBAAM;oBACL,MAAM,QAAQ,GAAG3X,aAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;oBAC9C,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;oBACzC,MAAM,QAAQ,GAAGA,aAAI,CAAC,KAAK,CAAC,IAAI,CAC9B,MAAM,CAAC,KAAK,CAAC,SAAS,EACtB,GAAG,QAAQ,IAAI,WAAW,KAAK,CAChC,CAAA;oBACD,GAAG,GAAG,iBAAiB,IAAI,CAAC,QAAQ,CAAC;wBACnC,QAAQ;wBACR,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,IAAI;qBACb,CAAC,IAAI,CAAA;iBACP;aACF;iBAAM;gBACL,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;gBACjD,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;aACrC;YAED,MAAM,iBAAiB,GACrB,KAAK,CAAC,YAAY,IAAI,IAAI,GAAG,cAAc,GAAG,QAAQ,CAAA;YACxD,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;YAExC,OAAO;qBACQ,iBAAiB,IAAI,IAAI,CAAC,SAAS,CAChD,GAAG,CACJ,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAA;SACH;KACF,CAAA;AACH;;AC/GA;;;SAGgB,cAAc;IAC5B,IAAI,MAAqB,CAAA;IACzB,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,eAAe,CAAC,OAAO;YACrB,MAAM,GAAG,OAAO,CAAA;SACjB;QACD,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG;YAC5B,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACjC,OAAO,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;aACjD;SACF;KACF,CAAA;AACH;;SCfgB,YAAY,CAAC,MAAsB;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,CAAA;IAE1C,MAAM,UAAU,GAA2B,EAAE,CAAA;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC9B,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;KACtE;;IAGD,MAAM,cAAc,GAA2B,EAAE,CAAA;IACjD,IAAI,OAAO,EAAE;QACX,MAAM,GAAG,GAAwB;YAC/B,GAAG,MAAM,CAAC,GAAG;YACb,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;SACxB,CAAA;QACD,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;YACrB,cAAc,CAAC,mBAAmB,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;SACpE;QACD,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;YAC5B,kBAAkB,EAAE,OAAO;YAC3B,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7C,iBAAiB,EAAE,OAAO;SAC3B,CAAC,CAAA;KACH;IAED,MAAM,YAAY,GAAuC;QACvD,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC;QAC3E,6BAA6B,EAAE,IAAI,CAAC,SAAS,CAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CACpC;QACD,iCAAiC,EAAE,IAAI,CAAC,SAAS,CAC/C,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CACpC;QACD,GAAG,UAAU;QACb,GAAG,cAAc;QACjB,cAAc,EAAE,OAAO;QACvB,qBAAqB,EAAE,OAAO;QAC9B,yBAAyB,EAAE,OAAO;KACnC,CAAA;IAED,MAAM,OAAO,GAAG,IAAI,MAAM;;IAExB,yBAAyB;QACvB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;aACtB,GAAG,CAAC,CAAC,GAAG;YACP,OAAO,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;SACpD,CAAC;aACD,IAAI,CAAC,GAAG,CAAC;QACZ,MAAM,EACR,GAAG,CACJ,CAAA;IAED,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG;YACrB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;;;gBAGpB,OAAM;aACP;YAED;;YAEE,YAAY,CAAC,EAAE,CAAC;gBAChB,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,EACxB;gBACA,OAAM;aACP;YAED,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;;gBAEnB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK;oBACpC,OAAO,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;iBAChC,CAAC,CAAA;aACH;YAED,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,WAAW,GAAG,KAAK,CAAA;YACvB,IAAI,KAA6B,CAAA;YAEjC,QAAQ,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACnC,WAAW,GAAG,IAAI,CAAA;gBAClB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;gBACzB,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;gBACnC,MAAM,WAAW,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC/C,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,CAAA;aACrC;YAED,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,IAAI,CAAA;aACZ;YAED,MAAM,MAAM,GAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAA;YACtD,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;gBAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;aAC5C;YACD,OAAO,MAAM,CAAA;SACd;KACF,CAAA;AACH;;ACzFO,eAAe,cAAc,CAClC,MAAsB,EACtB,UAAoB,EACpB,aAAuB,EACvB,WAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,CAAA;IAE1C,MAAM,YAAY,GAAG,OAAO;UACxB,CAAC,MAAM,uDAAkB,EAAE,mBAAmB,CAAC,MAAM,CAAC;UACtD,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IAEzB,OAAO;QACL,OAAO,GAAG,IAAI,GAAG,cAAc,EAAE;QACjC4X,KAAW,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC9C,GAAG,UAAU;QACb,MAAM,CAAC,KAAK,CAAC,qBAAqB;cAC9B,2BAA2B,CAAC,MAAM,CAAC;cACnC,IAAI;QACR,aAAa,CAAC;YACZ,GAAG,MAAM,CAAC,OAAO;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,OAAO;YACP,SAAS,EAAE,MAAM,CAAC,GAAG;YACrB,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,2BAA2B,CAAC,MAAM,CAAC;QACnC,SAAS,CAAC,MAAM,CAAC;QACjB,MAAM,CAAC,OAAO,KAAK,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI;QAC/D,UAAU,CACR;YACE,YAAY,EAAE,IAAI;YAClB,GAAG,MAAM,CAAC,IAAI;SACf,EACD,OAAO,CACR;QACD,UAAU,CAAC,MAAM,CAAC;QAClB,eAAe,CAAC,MAAM,CAAC;QACvB,WAAW,CAAC,MAAM,CAAC;QACnB,GAAG,aAAa;QAChB,YAAY,CAAC,MAAM,CAAC;QACpB,aAAa,CAAC,MAAM,CAAC;QACrB,GAAG,YAAY,CAAC,GAAG;QACnB,GAAG,WAAW;QACd,GAAG,YAAY,CAAC,IAAI;;QAEpB,IAAI,OAAO;cACP,EAAE;cACF,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;KACpE,CAAC,MAAM,CAAC,OAAO,CAAa,CAAA;AAC/B;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,EAAE,GAAGlb,YAAa;AACxB,MAAM,IAAI,GAAGU,cAAe;AAC5B,MAAM,EAAE,GAAGO,sBAAa;AACxB;AACA,SAAS,GAAG,EAAE,OAAO,gBAAgB;AACrC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,EAAC;AAC3C,CAAC;AACD;AACA,MAAM,OAAO,GAAG,KAAI;AACpB,MAAM,cAAc,GAAG,gCAA+B;AACtD,MAAM,WAAW,GAAG,OAAM;AAC1B,MAAM,cAAc,GAAG,aAAY;AACnC;AACA;AACA,SAAS+B,OAAK,EAAE,GAAG,yBAAyB,OAAO,sDAAsD;AACzG,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAC;AACjD,EAAE,MAAM,GAAG,GAAG,GAAE;AAChB;AACA;AACA,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG,EAAE;AACpE;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAC;AAClD;AACA,IAAI,IAAI,WAAW,IAAI,IAAI,EAAE;AAC7B,MAAM,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,EAAC;AAChC;AACA,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC;AACtC,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,EAAC;AAChC,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAG;AAC/D,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAG;AAC/D;AACA;AACA,MAAM,IAAI,cAAc,IAAI,cAAc,EAAE;AAC5C,QAAQ,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAC;AACnC;AACA;AACA,QAAQ,IAAI,cAAc,EAAE;AAC5B,UAAU,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAC;AACjD,SAAS;AACT,OAAO,MAAM;AACb;AACA,QAAQ,GAAG,GAAG,GAAG,CAAC,IAAI,GAAE;AACxB,OAAO;AACP;AACA,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAG;AACpB,KAAK,MAAM,IAAI,KAAK,EAAE;AACtB,MAAM,GAAG,CAAC,CAAC,8CAA8C,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAC;AAC9E,KAAK;AACL,GAAG,EAAC;AACJ;AACA,EAAE,OAAO,GAAG;AACZ,CAAC;AACD;AACA,SAAS,WAAW,EAAE,OAAO,EAAE;AAC/B,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACjF,CAAC;AACD;AACA;AACA,SAAS,MAAM,EAAE,OAAO,wDAAwD;AAChF,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAC;AACtD,EAAE,IAAI,QAAQ,iBAAiB,OAAM;AACrC,EAAE,IAAI,KAAK,GAAG,MAAK;AACnB;AACA,EAAE,IAAI,OAAO,EAAE;AACf,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;AAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAC;AAC5C,KAAK;AACL,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;AAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAQ;AACjC,KAAK;AACL,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;AAC/B,MAAM,KAAK,GAAG,KAAI;AAClB,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI;AACN;AACA,IAAI,MAAM,MAAM,GAAGA,OAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAC;AAC9E;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;AAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AACnE,QAAQ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,EAAC;AACtC,OAAO,MAAM,IAAI,KAAK,EAAE;AACxB,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,mEAAmE,CAAC,EAAC;AACzF,OAAO;AACP,KAAK,EAAC;AACN;AACA,IAAI,OAAO,EAAE,MAAM,EAAE;AACrB,GAAG,CAAC,OAAO,CAAC,EAAE;AACd,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;AACvB,GAAG;AACH,CAAC;AACD;aACqB,GAAG,OAAM;YACV,GAAGA;;ACnHvB,IAAI,YAAY,GAAG,UAAU,MAAM,EAAE;AACrC;AACA,EAAE,IAAI,WAAW,GAAG,MAAM,CAAC,gBAAgB,GAAG,EAAE,GAAG,OAAO,CAAC,IAAG;AAC9D;AACA,EAAE,IAAI,WAAW,GAAG,UAAU,QAAQ,EAAE;AACxC,IAAI,IAAI,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,+BAA+B,CAAC,IAAI,GAAE;AACvE;AACA,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,MAAM,EAAE,KAAK,EAAE;AACnD,MAAM,IAAI,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,EAAC;AAC3D,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,EAAC;AAC3B;AACA,MAAM,IAAI,KAAK,EAAE,YAAW;AAC5B;AACA,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE;AAC3B,QAAQ,WAAW,GAAG,KAAK,CAAC,CAAC,EAAC;AAC9B,QAAQ,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAC;AAC/C,OAAO,MAAM;AACb,QAAQ,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,EAAC;AAC1B,QAAQ,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAC;AACvD;AACA,QAAQ,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAC;AAC/F;AACA;AACA,QAAQ,KAAK,GAAG,WAAW,CAAC,KAAK,EAAC;AAClC,OAAO;AACP;AACA,MAAM,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;AAC/C,KAAK,EAAE,QAAQ,CAAC;AAChB,IAAG;AACH;AACA,EAAE,KAAK,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE;AACvC,IAAI,IAAI,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAC;AACzG;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,KAAK,EAAC;AACjD,GAAG;AACH;AACA,EAAE,KAAK,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE;AACxC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAC;AACvD,GAAG;AACH;AACA,EAAE,OAAO,MAAM;AACf,EAAC;AACD;IACA,IAAc,GAAG;;ACAjB,MAAMyB,OAAK,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;AAY3C;;;;;;SAMgB,YAAY,CAAC,MAAwB;IACnD,OAAO,MAAM,CAAA;AACf,CAAC;AAgLM,eAAe,aAAa,CACjC,YAA0B,EAC1B,OAA0B,EAC1B,WAAW,GAAG,aAAa;;IAE3B,IAAI,MAAM,GAAG,YAAY,CAAA;IACzB,IAAI,sBAAsB,GAAa,EAAE,CAAA;IACzC,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,WAAW,CAAA;;;;IAK3C,IAAI,IAAI,KAAK,YAAY,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAA;KACpC;IAED,MAAM,SAAS,GAAG;QAChB,IAAI;QACJ,OAAO;KACR,CAAA;IAED,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC3B,IAAI,UAAU,KAAK,KAAK,EAAE;QACxB,MAAM,UAAU,GAAG,MAAM,kBAAkB,CACzC,SAAS,EACT,UAAU,EACV,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,CAChB,CAAA;QACD,IAAI,UAAU,EAAE;YACd,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC/C,UAAU,GAAG,UAAU,CAAC,IAAI,CAAA;YAC5B,sBAAsB,GAAG,UAAU,CAAC,YAAY,CAAA;SACjD;KACF;;IAGD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC3C,gBAAgB,EAAE,MAAM,CAAC,WAAW;QACpC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAA;;IAGF,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,CAAA;IAC/C,SAAS,CAAC,IAAI,GAAG,IAAI,CAAA;;IAGrB,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAC,EAAE;YACN,OAAO,KAAK,CAAA;SACb;aAAM,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE;YACnB,OAAO,IAAI,CAAA;SACZ;aAAM,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,EAAE;YACxC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,CAAA;SAC/C;aAAM;YACL,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAA;SAC3B;KACF,CAAa,CAAA;IACd,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,GAC5C,eAAe,CAAC,cAAc,CAAC,CAAA;;IAGjC,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,CAAA;IACrE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE;QAC3B,IAAI,CAAC,CAAC,MAAM,EAAE;YACZ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC7C,IAAI,GAAG,EAAE;gBACP,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;aAClC;SACF;KACF;;IAGD,MAAM,YAAY,GAAGZ,eAAa,CAChC,MAAM,CAAC,IAAI,GAAGP,aAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CACxD,CAAA;IAED,MAAM,WAAW,GAAG;QAClB,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,EAAE;QAC1D,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,YAAY,EAAE;KACjE,CAAA;;IAGD,MAAM,aAAa,GAAG,UAAU;;;IAG9B,WAAW,EACX,CAAA,MAAA,MAAM,CAAC,OAAO,0CAAE,KAAK,KAAI,MAAM,CAAC,KAAK,IAAI,EAAE,CAC5C,CAAA;IAED,MAAM,cAAc,GAA8B;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,MAAM,CAAC,OAAO;QACjB,KAAK,EAAE,aAAa;KACrB,CAAA;;IAGD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;UACxBO,eAAa,CAACP,aAAI,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;UACxD,YAAY,CAAA;IAChB,MAAM,OAAO,GACX,YAAY,CAAC,OAAO,KAAK,KAAK;QAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAA;;;;IAKjD,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,MAAM,YAAY,CAAA;IAC9E,IAAI,YAAY,EAAE;;QAEhB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAA;KACpC;;IAGD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,EAAE,MAAM,CAAC,CAAA;IACzE,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;;IAG9D,MAAM,OAAO,GAAG,UAAU,CACxB,YAAY,EACZ,CAAC,cAAc,CAAC,EAChB,IAAI,gBACL,CAAA;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;UAC5BA,aAAI,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;UAC3C,OAAO,IAAIA,aAAI,CAAC,IAAI,CAACA,aAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAA;IAErE,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa;UACrCwJ,cAAY,CAAC,MAAM,CAAC,aAAa,CAAC;UAClC,MAAM,KAAK,CAAA;;;IAIf,MAAM,cAAc,GAAqC,CAAC,OAAO;QAC/D,IAAI,cAA2C,CAAA;QAC/C,IAAI,iBAA8C,CAAA;QAClD,OAAO,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG;;YACxC,IAAI,SAA0B,CAAA;YAC9B,IAAI,SAAS,EAAE;gBACb,SAAS;oBACP,cAAc;yBACb,cAAc,GAAG,MAAM,qBAAqB,CAAC;4BAC5C,GAAG,QAAQ;4BACX,OAAO,EAAE,CAACoO,KAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;yBAC5D,CAAC,CAAC,CAAA;aACN;iBAAM;gBACL,SAAS;oBACP,iBAAiB;yBAChB,iBAAiB,GAAG,MAAM,qBAAqB,CAAC;4BAC/C,GAAG,QAAQ;4BACX,OAAO,EAAE;gCACPA,KAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gCAChD,aAAa,CAAC;oCACZ,GAAG,QAAQ,CAAC,OAAO;oCACnB,IAAI,EAAE,YAAY;oCAClB,YAAY;oCACZ,OAAO,EAAE,OAAO,KAAK,OAAO;oCAC5B,SAAS,EAAE,QAAQ,CAAC,GAAG;oCACvB,KAAK,EAAE,IAAI;oCACX,cAAc,EAAE,KAAK;oCACrB,QAAQ,EAAE,IAAI;oCACd,GAAG,OAAO;iCACX,CAAC;6BACH;yBACF,CAAC,CAAC,CAAA;aACN;YACD,OAAO,OAAC,MAAM,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,0CAAE,EAAE,CAAA;SACrE,CAAA;KACF,CAAA;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IAC5B,MAAM,iBAAiB,GACrB,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,EAAE;UACnC5X,aAAI,CAAC,OAAO,CACV,YAAY,EACZ,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,QAAQ,CACrD;UACD,EAAE,CAAA;IAER,MAAM,QAAQ,GAAmB;QAC/B,GAAG,MAAM;QACT,UAAU,EAAE,UAAU,GAAGO,eAAa,CAAC,UAAU,CAAC,GAAG,SAAS;QAC9D,sBAAsB;QACtB,YAAY;QACZ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,cAAc;QACvB,SAAS,EAAE,iBAAiB;QAC5B,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,YAAY;QACZ,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;QACzD,KAAK,EAAE,oBAAoB;QAC3B,GAAG,EAAE;YACH,GAAG,OAAO;YACV,QAAQ;YACR,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,CAAC,YAAY;YAClB,IAAI,EAAE,YAAY;SACnB;QACD,aAAa,CAAC,IAAY;YACxB,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;SAC1D;QACD,MAAM;QACN,cAAc;QACd,YAAY,EAAE;YACZ,GAAG,MAAM,CAAC,YAAY;YACtB,cAAc,EAAE;gBACd,SAAS,EAAE,MAAA,MAAM,CAAC,YAAY,0CAAE,SAAS;gBACzC,gBAAgB,EAAE,MAAA,MAAM,CAAC,OAAO,0CAAE,gBAAgB;gBAClD,GAAG,MAAA,MAAM,CAAC,YAAY,0CAAE,cAAc;aACvC;SACF;KACF,CAEA;IAAC,QAAQ,CAAC,OAAoB,GAAG,MAAM,cAAc,CACpD,QAAQ,EACR,UAAU,EACV,aAAa,EACb,WAAW,CACZ,CAAA;;IAGD,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,eAAK,OAAA,MAAA,CAAC,CAAC,cAAc,+CAAhB,CAAC,EAAkB,QAAQ,CAAC,CAAA,EAAA,CAAC,CAAC,CAAA;IAEvE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;QACrBY,OAAK,CAAC,2BAA2B,EAAE;YACjC,GAAG,QAAQ;YACX,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;SAC7C,CAAC,CAAA;KACH;;IAID,MAAM,qBAAqB,GAAG,CAC5B,gBAAwB,EACxB,IAAY,EACZ,KAAa;QAEb,MAAM,CAAC,IAAI,CACThC,MAAK,CAAC,MAAM,CAAC,IAAI,CACf,QAAQ,gBAAgB,2BAA2B,IAAI,GACrD,KAAK,GAAG,KAAK,KAAK,CAAC,KAAK,EAAE,GAAG,EAC/B,EAAE,CACH,CACF,CAAA;KACF,CAAA;IAED,IAAI,MAAA,MAAM,CAAC,KAAK,0CAAE,IAAI,EAAE;QACtB,qBAAqB,CACnB,YAAY,EACZ,2CAA2C,CAC5C,CAAA;QACD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA;KAChC;IACD,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE;QAClD,UAAU,EAAE,KAAK;QACjB,GAAG;YACD,qBAAqB,CACnB,YAAY,EACZ,2CAA2C,EAC3C,IAAI,KAAK,EAAE,CACZ,CAAA;YACD,OAAO,QAAQ,CAAC,IAAI,CAAA;SACrB;KACF,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,qBAAqB,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAA;KAC/D;IACD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE;QACvC,UAAU,EAAE,KAAK;QACjB,GAAG;YACD,qBAAqB,CACnB,OAAO,EACP,8BAA8B,EAC9B,IAAI,KAAK,EAAE,CACZ,CAAA;YACD,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAA;SAC9B;KACF,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,qBAAqB,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAA;KACjE;IACD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE;QACxC,UAAU,EAAE,KAAK;QACjB,GAAG;YACD,qBAAqB,CACnB,QAAQ,EACR,+BAA+B,EAC/B,IAAI,KAAK,EAAE,CACZ,CAAA;YACD,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAA;SAC/B;KACF,CAAC,CAAA;IAEF,IAAI,MAAA,MAAM,CAAC,YAAY,0CAAE,SAAS,EAAE;QAClC,qBAAqB,CACnB,wBAAwB,EACxB,sDAAsD,CACvD,CAAA;KACF;IACD,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE;QACxD,UAAU,EAAE,KAAK;QACjB,GAAG;;YACD,qBAAqB,CACnB,wBAAwB,EACxB,sDAAsD,EACtD,IAAI,KAAK,EAAE,CACZ,CAAA;YACD,OAAO,MAAA,QAAQ,CAAC,YAAY,CAAC,cAAc,0CAAE,SAAS,CAAA;SACvD;KACF,CAAC,CAAA;IAEF,IAAI,MAAA,MAAM,CAAC,KAAK,0CAAE,qBAAqB,EAAE;QACvC,qBAAqB,CACnB,6BAA6B,EAC7B,oIAAoI,CACrI,CAAA;KACF;IAED,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,uBAAuB,EAAE;QACnE,UAAU,EAAE,KAAK;QACjB,GAAG;YACD,qBAAqB,CACnB,6BAA6B,EAC7B,oIAAoI,EACpI,IAAI,KAAK,EAAE,CACZ,CAAA;YACD,OAAO,KAAK,CAAA;SACb;KACF,CAAC,CAAA;IAEF,IAAI,MAAA,MAAM,CAAC,KAAK,0CAAE,eAAe,EAAE;QACjC,qBAAqB,CACnB,uBAAuB,EACvB,6CAA6C,CAC9C,CAAA;KACF;IAED,IAAI,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,aAAa,KAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;QACpE,MAAM,CAAC,IAAI,CACTA,MAAK,CAAC,MAAM,CACV,8EAA8E;YAC5E,uEAAuE;YACvE,8CAA8C,CACjD,CACF,CAAA;KACF;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;AAIA,SAAS,cAAc,CACrB,OAA2B,GAAG,EAC9B,OAAgB,EAChB,MAAc;;IAGd,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE;QAChC,OAAO,OAAO,GAAG,IAAI,GAAG,GAAG,CAAA;KAC5B;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACxB,MAAM,CAAC,IAAI,CACTA,MAAK,CAAC,MAAM,CAAC,IAAI,CACf,8BAA8B,IAAI,sCAAsC;YACtE,8BAA8B,CACjC,CACF,CAAA;QACD,IAAI,GAAG,GAAG,CAAA;KACX;;IAGD,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;QACvB,IAAI,CAAC,OAAO,EAAE;;YAEZ,MAAM,MAAM,GAAGmD,kBAAQ,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAA;SAC9B;KACF;SAAM;;QAEL,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,CAAC,IAAI,CACTnD,MAAK,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAClE,CAAA;YACD,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;SAClB;KACF;;IAGD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACvB,MAAM,CAAC,IAAI,CAACA,MAAK,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAA;QAC5E,IAAI,IAAI,GAAG,CAAA;KACZ;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,sBAAsB,CAC7B,CAAsB,EACtB,CAAsB,EACtB,QAAgB;IAEhB,MAAM,MAAM,GAAwB,EAAE,GAAG,CAAC,EAAE,CAAA;IAC5C,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE;QACnB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACpB,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,SAAQ;SACT;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAA;YACrC,SAAQ;SACT;QACD,IAAIqC,UAAQ,CAAC,QAAQ,CAAC,IAAIA,UAAQ,CAAC,KAAK,CAAC,EAAE;YACzC,MAAM,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAClC,QAAQ,EACR,KAAK,EACL,QAAQ,GAAG,GAAG,QAAQ,IAAI,GAAG,EAAE,GAAG,GAAG,CACtC,CAAA;YACD,SAAQ;SACT;;QAGD,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,IAAI,GAAG,KAAK,OAAO,KAAK,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,CAAC,EAAE;gBAClE,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;gBACzC,SAAQ;aACT;iBAAM,IAAI,GAAG,KAAK,eAAe,IAAI,QAAQ,KAAK,EAAE,EAAE;gBACrD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;gBACxC,SAAQ;aACT;iBAAM,IAAI,GAAG,KAAK,YAAY,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACpD,SAAQ;aACT;SACF;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;KACpB;IACD,OAAO,MAAM,CAAA;AACf,CAAC;SAEe,WAAW,CACzB,CAAsB,EACtB,CAAsB,EACtB,MAAM,GAAG,IAAI;IAEb,OAAO,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,CAAA;AACxD,CAAC;AAED,SAAS,UAAU,CAAC,IAAkB,EAAE,EAAE,IAAkB,EAAE;IAC5D,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,CAAe;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;UACnB,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC;UAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KACtB,oBAAoB,CAAC;YACnB,IAAI;YACJ,WAAW,EAAG,CAAS,CAAC,IAAI,CAAC;SAC9B,CAAC,CACH,CAAA;AACP,CAAC;AAED;AACA;AACA,SAAS,oBAAoB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAS;IACxD,IACE,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EACzB;QACA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACrC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;KAC3D;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;AAC9B,CAAC;SAEe,eAAe,CAC7B,OAA0C;IAE1C,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,MAAM,aAAa,GAAa,EAAE,CAAA;IAElC,IAAI,OAAO,EAAE;QACX,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;iBACtC,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;gBAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;;gBAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAC3B,CAAC,CAAA;KACH;IAED,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,CAAA;AACjD,CAAC;AAEM,eAAe,kBAAkB,CACtC,SAAoB,EACpB,UAAmB,EACnB,aAAqB,OAAO,CAAC,GAAG,EAAE,EAClC,QAAmB;IAMnB,MAAM,KAAK,GAAGD,sBAAW,CAAC,GAAG,EAAE,CAAA;IAC/B,MAAM,OAAO,GAAG,MAAM,GAAG,CAACA,sBAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IAEnE,IAAI,YAAgC,CAAA;IACpC,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,IAAI,YAAY,GAAa,EAAE,CAAA;;IAG/B,IAAI;QACF,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;QACpD,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC5C,KAAK,GAAG,IAAI,CAAA;SACb;KACF;IAAC,OAAO,CAAC,EAAE,GAAE;IAEd,IAAI,UAAU,EAAE;;QAEd,YAAY,GAAGvB,aAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACvC,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAEjC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC/B,KAAK,GAAG,IAAI,CAAA;SACb;KACF;SAAM;;;QAGL,MAAM,YAAY,GAAGA,aAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;QAC/D,IAAIyB,WAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;YAC/B,YAAY,GAAG,YAAY,CAAA;SAC5B;QAED,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,aAAa,GAAGzB,aAAI,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACjE,IAAIyB,WAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;gBAChC,YAAY,GAAG,aAAa,CAAA;gBAC5B,KAAK,GAAG,IAAI,CAAA;aACb;SACF;QAED,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,YAAY,GAAGzB,aAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;YAC/D,IAAIyB,WAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;gBAC/B,YAAY,GAAG,YAAY,CAAA;gBAC3B,IAAI,GAAG,IAAI,CAAA;aACZ;SACF;KACF;IAED,IAAI,CAAC,YAAY,EAAE;QACjBN,OAAK,CAAC,uBAAuB,CAAC,CAAA;QAC9B,OAAO,IAAI,CAAA;KACZ;IAED,IAAI;QACF,IAAI,UAAwC,CAAA;QAE5C,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;YAC1D,IAAI,IAAI,EAAE;;;;;gBAKR,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;gBAC1D,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;gBACnCM,WAAE,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;gBACpD,UAAU,GAAG,CAAC,MAAM,aAAa,CAAC,GAAG,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;qBAC/D,OAAO,CAAA;gBACVA,WAAE,CAAC,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC,CAAA;gBACnCN,OAAK,CAAC,oCAAoC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;aAChE;iBAAM;;;;gBAIL,UAAU,GAAG,CAAC,MAAM,aAAa,CAAC,GAAG,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,CAAA;gBACxEA,OAAK,CAAC,+BAA+B,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;aAC3D;SACF;QAED,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;;YAElC,IAAI;;gBAEF,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAA;gBACnD,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;gBAClCA,OAAK,CAAC,wBAAwB,OAAO,EAAE,EAAE,CAAC,CAAA;aAC3C;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB;oBACE,6BAA6B;oBAC7B,mCAAmC;;;oBAGnC,kBAAkB;oBAClB,uBAAuB;iBACxB,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAA;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;oBAC5B,MAAM,CAAC,CAAA;iBACR;aACF;SACF;QAED,IAAI,CAAC,UAAU,EAAE;;;;;YAKf,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAA;YACpD,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;YACnC,UAAU,GAAG,MAAM,yBAAyB,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YACxEA,OAAK,CAAC,iCAAiC,OAAO,EAAE,EAAE,CAAC,CAAA;SACpD;QAED,MAAM,MAAM,GAAG,OAAO,OAAO,UAAU,KAAK,UAAU;cAClD,UAAU,CAAC,SAAS,CAAC;cACrB,UAAU,CAAC,CAAA;QACf,IAAI,CAACK,UAAQ,CAAC,MAAM,CAAC,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;SAC3D;QACD,OAAO;YACL,IAAI,EAAEjB,eAAa,CAAC,YAAY,CAAC;YACjC,MAAM;YACN,YAAY;SACb,CAAA;KACF;IAAC,OAAO,CAAC,EAAE;QACV,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,CAC1BpB,MAAK,CAAC,GAAG,CAAC,8BAA8B,YAAY,EAAE,CAAC,EACvD,EAAE,KAAK,EAAE,CAAC,EAAE,CACb,CAAA;QACD,MAAM,CAAC,CAAA;KACR;AACH,CAAC;AAED,eAAe,gBAAgB,CAC7B,QAAgB,EAChB,GAAG,GAAG,KAAK;IAEX,MAAM,MAAM,GAAG,MAAM8O,aAAK,CAAC;QACzB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;QAC5B,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvB,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,GAAG,GAAG,KAAK,GAAG,KAAK;QAC3B,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,kBAAkB;gBACxB,KAAK,CAAC,KAAK;oBACT,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;wBACrC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;wBACpB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAACjO,aAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;4BACzC,OAAO;gCACL,QAAQ,EAAE,IAAI;6BACf,CAAA;yBACF;qBACF,CAAC,CAAA;iBACH;aACF;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,CAAC,KAAK;oBACT,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,IAAI;wBAC9C,MAAM,QAAQ,GAAG,MAAMyB,WAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;wBAC9D,OAAO;4BACL,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI;4BAC/C,QAAQ,EAAE,QAAQ;iCACf,OAAO,CACN,wBAAwB,EACxB,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CACtC;iCACA,OAAO,CACN,gBAAgB,EAChB,IAAI,CAAC,SAAS,CAACzB,aAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACxC;iCACA,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACzD,CAAA;qBACF,CAAC,CAAA;iBACH;aACF;SACF;KACF,CAAC,CAAA;IACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACtC,OAAO;QACL,IAAI,EAAE,IAAI;QACV,YAAY,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;KACzE,CAAA;AACH,CAAC;AAMD,eAAe,yBAAyB,CACtC,QAAgB,EAChB,WAAmB;IAEnB,MAAM,SAAS,GAAGA,aAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAE,CAAA;IACpD,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAkB,EAAE,QAAgB;QACnE,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACvB,MAAgC,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;SACnE;aAAM;YACL,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;SAChC;KACF,CAAA;;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAA;IACjD,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,aAAa,CAAA;IAC7C,OAAO,MAAM,CAAA;AACf,CAAC;SAEe,OAAO,CACrB,IAAY,EACZ,MAAc,EACd,WAA8B,OAAO;IAErC,IAAI,IAAI,KAAK,OAAO,EAAE;QACpB,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,oCAAoC,CACvC,CAAA;KACF;IACD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC5B,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,MAAM,QAAQ,GAAG;+BACQ,QAAQ,IAAI,QAAQ;yBAC1B,QAAQ,IAAI,EAAE;0BACb,YAAY;4BACV,MAAM;KAC3B,CAAA;;;IAID,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAC7B,IACE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACjD,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EACtB;YACA,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAW,CAAA;SACtC;KACF;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;QAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;QAC7C,IAAI,IAAI,EAAE;YACR,MAAM,MAAM,GAAG6X,MAAM,CAAC,KAAK,CAACpW,WAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;gBACjD,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS;aACxC,CAAC,CAAA;;YAGFqW,IAAY,CAAC;gBACX,MAAM;;gBAEN,gBAAgB,EAAE,IAAI;aAChB,CAAC,CAAA;;YAGT,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACjD,IACE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACjD,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EACtB;oBACA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;iBACjB;qBAAM,IAAI,GAAG,KAAK,UAAU,EAAE;;oBAE7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,KAAK,CAAA;iBACvC;aACF;SACF;KACF;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;SAEe,gBAAgB,CAAC,EAC/B,SAAS,GAAG,OAAO,EACR;IACX,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAC9B,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,EAAE,CAAC,EAAE;QAC7C,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAA;KACF;IACD,OAAO,SAAS,CAAA;AAClB;;;;;;;;;;;;;;;AC5gCA;AACA;AACA;AACA;AACA;AACA;AACAC,eAAc,GAAG,iBAAiB,CAAC;iCACH,GAAG,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG,6BAA6B,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,MAAM,EAAE;AACpC,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,IAAI,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACrD;AACA,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;AAC7B,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE;AAC9B,EAAE,IAAI,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC;AAC1B;AACA,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAChB,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAC;AACpC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACxB,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAQ,MAAM;AACd,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,OAAO,EAAE,OAAO;AACpB,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,CAAC,EAAE,CAAC;AACR,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;AACtD,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,IAAI,IAAI,IAAI,GAAGC,SAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACpD;AACA,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;AACzF,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;AACvC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;AAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,GAAG;AACpC,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,KAAK;AACZ,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,CAAC,EAAE,CAAC;AACR,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE;AAC7C;AACA,EAAE,IAAI,OAAO,GAAG,kBAAkB,CAAC,MAAM,KAAK,SAAS,GAAG,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC;AAC9E;AACA,EAAE,IAAI,CAAC,QAAQ,EAAE;AACjB;AACA,IAAI,OAAO,OAAO;AAClB,OAAO,MAAM,CAACC,WAAS,CAAC;AACxB,OAAO,IAAI,CAACC,cAAY,CAAC;AACzB,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;AAClE,IAAI,OAAO,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACpD,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,OAAO,UAAU,CAAC,MAAM,CAACD,WAAS,CAAC,CAAC,IAAI,CAACC,cAAY,CAAC,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,QAAQ,EAAE;AAC3F,IAAI,OAAO,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,cAAY,CAAC,CAAC,EAAE,CAAC,EAAE;AAC5B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,IAAI,EAAE;AAC9B,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,WAAS,CAAC,IAAI,EAAE;AACzB,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB;;;;;;;;;;;AC/JA;AACA;AACA;AACA;AACA;AACA;AACAE,gBAAc,GAAG,kBAAkB,CAAC;mCACH,GAAG,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,GAAG,6BAA6B,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,MAAM,EAAE;AACrC,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,EAAE,IAAI,WAAW,GAAG,KAAK,CAAC;AAC1B,EAAE,IAAI,UAAU,GAAG,CAAC,CAAC;AACrB;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,IAAI,IAAI,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACvD;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;AAC9B,MAAM,WAAW,GAAG,WAAW,IAAIH,SAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACjE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,CAAC,WAAW,EAAE;AACpB;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG;AACnB,MAAM,QAAQ,EAAE,UAAU;AAC1B,MAAM,CAAC,EAAE,UAAU;AACnB,MAAM,CAAC,EAAE,CAAC;AACV,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE;AAC/B,EAAE,IAAI,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC;AAC1B;AACA,EAAE,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAChB,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACxB,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAQ,MAAM;AACd,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,QAAQ,EAAE,QAAQ;AACtB,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,CAAC,EAAE,CAAC;AACR,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;AACxD,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,IAAI,IAAI,IAAI,GAAGA,SAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrD;AACA,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;AACzF,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;AACxC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC5D,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,GAAG;AACrC,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,KAAK;AACZ,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,CAAC,EAAE,CAAC;AACR,GAAG;AACH,CACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE;AAC9C,EAAE,IAAI,OAAO,GAAG,mBAAmB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAClD;AACA,EAAE,IAAI,CAAC,QAAQ,EAAE;AACjB;AACA,IAAI,OAAO,OAAO;AAClB,OAAO,MAAM,CAACC,WAAS,CAAC;AACxB,OAAO,IAAI,CAACC,cAAY,CAAC;AACzB,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;AAClE,IAAI,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACrD,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,OAAO,UAAU,CAAC,MAAM,CAACD,WAAS,CAAC,CAAC,IAAI,CAACC,cAAY,CAAC,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,QAAQ,EAAE;AAC5F,IAAI,OAAO,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,cAAY,CAAC,CAAC,EAAE,CAAC,EAAE;AAC5B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,IAAI,EAAE;AAC/B,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,WAAS,CAAC,IAAI,EAAE;AACzB,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB;;;;;;;;;;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACAG,gBAAc,GAAG,kBAAkB,CAAC;mCACH,GAAG,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,GAAG,8CAA8C,CAAC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,MAAM,EAAE;AACrC,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,IAAI,IAAI,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACvD;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;AAC9B,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE;AAC/B,EAAE,IAAI,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC;AAC1B;AACA,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AACvB,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,IAAI,IAAI,GAAG,MAAM,CAAC;AAClB;AACA,EAAE,IAAI,MAAM,EAAE,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC;AACnC;AACA,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAChB,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAC;AACpC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,IAAI,EAAE,IAAI;AACd,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;AACxD,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,IAAI,IAAI,IAAI,GAAGJ,SAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrD;AACA,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;AACzF,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;AACxC,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,EAAC;AACjC,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC;AACtB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACtD,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACjE,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;AACjE,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG;AACjC,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,KAAK;AACZ,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,CAAC,EAAE,CAAC;AACR,GAAG;AACH,CACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE;AAC9C;AACA,EAAE,IAAI,OAAO,GAAG,mBAAmB,CAAC,MAAM,KAAK,SAAS,GAAG,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC;AAC/E;AACA,EAAE,IAAI,CAAC,QAAQ,EAAE;AACjB;AACA,IAAI,OAAO,OAAO;AAClB,OAAO,MAAM,CAACC,WAAS,CAAC;AACxB,OAAO,IAAI,CAACC,cAAY,CAAC;AACzB,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;AAClE,IAAI,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACrD,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,OAAO,UAAU,CAAC,MAAM,CAACD,WAAS,CAAC,CAAC,IAAI,CAACC,cAAY,CAAC,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,QAAQ,EAAE;AAC5F,IAAI,OAAO,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,cAAY,CAAC,CAAC,EAAE,CAAC,EAAE;AAC5B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,IAAI,EAAE;AAC/B,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,WAAS,CAAC,IAAI,EAAE;AACzB,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB;;;;;;;;;;;ACzKA;AACA;AACA;AACA;AACA;AACA;AACAI,iBAAc,GAAG,mBAAmB,CAAC;qCACH,GAAG,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG,0CAA0C,CAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,MAAM,EAAE;AAC7B,EAAE,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AACxC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,IAAI,IAAI,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD;AACA,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;AAC/B,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE;AAChC,EAAE,IAAI,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9C,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC;AAC1B;AACA,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB;AACA,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAChB,IAAI,IAAI,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAChE;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACtC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB;AACA;AACA,MAAM,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;AACtE,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACvC,UAAU,GAAG,CAAC;AACd;AACA,MAAM,IAAI,GAAG,KAAK,GAAG,EAAE;AACvB,QAAQ,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAQ,MAAM;AACd,OAAO;AACP;AACA;AACA,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1B,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,OAAO,EAAE,OAAO;AACpB,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,CAAC,EAAE,CAAC;AACR,IAAI,CAAC,EAAE,CAAC;AACR,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AACrD,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACjD;AACA,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;AACzF,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;AACpC,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AAC/B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ;AACA,EAAE,IAAI,CAAC,CAAC,EAAE;AACV,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACtD,IAAI,CAAC,IAAI,EAAC;AACV,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;AAC9B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AAC5D,IAAI,CAAC,IAAI,EAAC;AACV,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE;AACjC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AAChC,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;AAChH,KAAK,CAAC,EAAE;AACR,MAAM,CAAC,IAAI,EAAC;AACZ,KAAK,MAAM;AACX,MAAM,OAAO,IAAI;AACjB,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,KAAK;AACZ,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,IAAI,CAAC,EAAE,CAAC;AACR,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE;AAC/C;AACA,EAAE,IAAI,OAAO,GAAG,WAAW,CAAC,MAAM,KAAK,SAAS,GAAG,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC;AACzE;AACA,EAAE,IAAI,CAAC,QAAQ,EAAE;AACjB;AACA,IAAI,OAAO,OAAO;AAClB,OAAO,MAAM,CAAC,SAAS,CAAC;AACxB,OAAO,IAAI,CAAC,YAAY,CAAC;AACzB,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC;AACxB,GAAG;AACH;AACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;AAClE,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACtD,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,OAAO,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,QAAQ,EAAE;AACxF,IAAI,OAAO,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE;AAC5B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE;AAC3B,EAAE,OAAO,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AACxC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,IAAI,EAAE;AACzB,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE;AAC5B,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB;AACA,EAAE,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE;AACtD,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,KAAK,EAAE,CAAC;AACZ,GAAG;AACH;AACA,EAAE,OAAO,KAAK,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,GAAG,EAAE;AAChC,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/B,EAAE,IAAI,GAAG,CAAC;AACV,EAAE,IAAI,GAAG,CAAC;AACV;AACA,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACpB,IAAI,GAAG,GAAG,GAAG,CAAC;AACd,GAAG,MAAM;AACT,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,MAAM,EAAE;AACjC,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAChC,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACrC,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,GAAG,EAAE;AAC9B,EAAE,IAAI,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5C,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,KAAK,MAAM;AACX,MAAM,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5B;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,GAAG;AACH;AACA,EAAE,OAAO,UAAU,CAAC;AACpB;;;;;;;;;AC5RA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACAC,kBAAc,GAAGC,YAAU,CAAC;6BACH,GAAGA,aAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAU,CAAC,OAAO,EAAE;AAC7B,EAAE,IAAI,EAAE,IAAI,YAAYA,YAAU,CAAC,EAAE;AACrC,IAAI,OAAO,IAAIA,YAAU,CAAC,OAAO,CAAC,CAAC;AACnC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,CAAC;AACD;AACAA,YAAU,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,SAAS,EAAE;AAC3D,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrC,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AACF;AACAA,YAAU,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,SAAS,EAAE;AAC7D,EAAE,IAAI,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC;AAClE,EAAE,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC,CAAC;AAC9E,CAAC,CAAC;AACF;AACAA,YAAU,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,SAAS,EAAE;AAC7D,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACtC,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AACF;AACAA,YAAU,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,SAAS,EAAE;AAC/D,EAAE,IAAI,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC;AACrE,EAAE,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,CAAC;AAChF,CAAC,CAAC;AACF;AACAA,YAAU,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,SAAS,EAAE;AAC7D,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACtC,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AACF;AACAA,YAAU,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,SAAS,EAAE;AAC/D,EAAE,IAAI,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC;AACrE,EAAE,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,CAAC;AAChF,CAAC,CAAC;AACF;AACAA,YAAU,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,SAAS,EAAE;AAC/D,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACvC,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AACF;AACAA,YAAU,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,SAAS,EAAE;AACjE,EAAE,IAAI,mBAAmB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,mBAAmB,CAAC;AACxE,EAAE,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACrE,CAAC,CAAC;AACF;AACA;AACAA,YAAU,CAAC,SAAS,CAAC,gBAAgB,GAAGA,YAAU,CAAC,SAAS,CAAC,OAAO,CAAC;AACrEA,YAAU,CAAC,SAAS,CAAC,iBAAiB,GAAGA,YAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvEA,YAAU,CAAC,SAAS,CAAC,iBAAiB,GAAGA,YAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvEA,YAAU,CAAC,SAAS,CAAC,kBAAkB,GAAGA,YAAU,CAAC,SAAS,CAAC,SAAS,CAAC;AACzEA,YAAU,CAAC,SAAS,CAAC,iBAAiB,GAAGA,YAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvEA,YAAU,CAAC,SAAS,CAAC,kBAAkB,GAAGA,YAAU,CAAC,SAAS,CAAC,SAAS,CAAC;AACzEA,YAAU,CAAC,SAAS,CAAC,kBAAkB,GAAGA,YAAU,CAAC,SAAS,CAAC,SAAS,CAAC;AACzEA,YAAU,CAAC,SAAS,CAAC,mBAAmB,GAAGA,YAAU,CAAC,SAAS,CAAC,UAAU,CAAC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,UAAU,EAAE;AAChC,EAAE,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC;AACA,EAAE,IAAI,MAAM,KAAK,SAAS,EAAE;AAC5B,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA,EAAE,QAAQ,UAAU;AACpB,IAAI,KAAK,SAAS;AAClB,MAAM,MAAM,GAAG7b,eAAwB,CAAC;AACxC,MAAM,MAAM;AACZ,IAAI,KAAK,UAAU;AACnB,MAAM,MAAM,GAAGU,gBAAyB,CAAC;AACzC,MAAM,MAAM;AACZ,IAAI,KAAK,UAAU;AACnB,MAAM,MAAM,GAAGO,gBAAyB,CAAC;AACzC,MAAM,MAAM;AACZ,IAAI,KAAK,WAAW;AACpB,MAAM,MAAM,GAAGuB,iBAA0B,CAAC;AAC1C,MAAM,MAAM;AACZ,IAAI;AACJ,MAAM,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;AACnE,GAAG;AACH;AACA;AACA,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;AAC/B;AACA,EAAE,OAAO,MAAM,CAAC;AAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-a5b4350d.js b/packages/astro/vendor/vite/dist/node/chunks/dep-a5b4350d.js
deleted file mode 100755
index dc1863eb3..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-a5b4350d.js
+++ /dev/null
@@ -1,8734 +0,0 @@
-'use strict';
-
-var build = require('./dep-35df7f96.js');
-
-function _mergeNamespaces(n, m) {
- for (var i = 0; i < m.length; i++) {
- var e = m[i];
- for (var k in e) {
- if (k !== 'default' && !(k in n)) {
- n[k] = e[k];
- }
- }
- }
- return n;
-}
-
-var compilerDom_cjs$2 = {};
-
-/**
- * Make a map and return a function for checking if a key
- * is in that map.
- * IMPORTANT: all calls of this function must be prefixed with
- * \/\*#\_\_PURE\_\_\*\/
- * So that rollup can tree-shake them if necessary.
- */
-function makeMap(str, expectsLowerCase) {
- const map = Object.create(null);
- const list = str.split(',');
- for (let i = 0; i < list.length; i++) {
- map[list[i]] = true;
- }
- return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];
-}
-
-/**
- * dev only flag -> name mapping
- */
-const PatchFlagNames = {
- [1 /* TEXT */]: `TEXT`,
- [2 /* CLASS */]: `CLASS`,
- [4 /* STYLE */]: `STYLE`,
- [8 /* PROPS */]: `PROPS`,
- [16 /* FULL_PROPS */]: `FULL_PROPS`,
- [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,
- [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,
- [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,
- [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,
- [512 /* NEED_PATCH */]: `NEED_PATCH`,
- [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,
- [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,
- [-1 /* HOISTED */]: `HOISTED`,
- [-2 /* BAIL */]: `BAIL`
-};
-
-/**
- * Dev only
- */
-const slotFlagsText = {
- [1 /* STABLE */]: 'STABLE',
- [2 /* DYNAMIC */]: 'DYNAMIC',
- [3 /* FORWARDED */]: 'FORWARDED'
-};
-
-const GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +
- 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +
- 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';
-const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);
-
-const range = 2;
-function generateCodeFrame(source, start = 0, end = source.length) {
- // Split the content into individual lines but capture the newline sequence
- // that separated each line. This is important because the actual sequence is
- // needed to properly take into account the full line length for offset
- // comparison
- let lines = source.split(/(\r?\n)/);
- // Separate the lines and newline sequences into separate arrays for easier referencing
- const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);
- lines = lines.filter((_, idx) => idx % 2 === 0);
- let count = 0;
- const res = [];
- for (let i = 0; i < lines.length; i++) {
- count +=
- lines[i].length +
- ((newlineSequences[i] && newlineSequences[i].length) || 0);
- if (count >= start) {
- for (let j = i - range; j <= i + range || end > count; j++) {
- if (j < 0 || j >= lines.length)
- continue;
- const line = j + 1;
- res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`);
- const lineLength = lines[j].length;
- const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;
- if (j === i) {
- // push underline
- const pad = start - (count - (lineLength + newLineSeqLength));
- const length = Math.max(1, end > count ? lineLength - pad : end - start);
- res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length));
- }
- else if (j > i) {
- if (end > count) {
- const length = Math.max(Math.min(end - count, lineLength), 1);
- res.push(` | ` + '^'.repeat(length));
- }
- count += lineLength + newLineSeqLength;
- }
- }
- break;
- }
- }
- return res.join('\n');
-}
-
-/**
- * On the client we only need to offer special cases for boolean attributes that
- * have different names from their corresponding dom properties:
- * - itemscope -> N/A
- * - allowfullscreen -> allowFullscreen
- * - formnovalidate -> formNoValidate
- * - ismap -> isMap
- * - nomodule -> noModule
- * - novalidate -> noValidate
- * - readonly -> readOnly
- */
-const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
-const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);
-/**
- * The full list is needed during SSR to produce the correct initial markup.
- */
-const isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +
- `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +
- `loop,open,required,reversed,scoped,seamless,` +
- `checked,muted,multiple,selected`);
-/**
- * Boolean attributes should be included if the value is truthy or ''.
- * e.g. <select multiple> compiles to { multiple: '' }
- */
-function includeBooleanAttr(value) {
- return !!value || value === '';
-}
-const unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/;
-const attrValidationCache = {};
-function isSSRSafeAttrName(name) {
- if (attrValidationCache.hasOwnProperty(name)) {
- return attrValidationCache[name];
- }
- const isUnsafe = unsafeAttrCharRE.test(name);
- if (isUnsafe) {
- console.error(`unsafe attribute name: ${name}`);
- }
- return (attrValidationCache[name] = !isUnsafe);
-}
-const propsToAttrMap = {
- acceptCharset: 'accept-charset',
- className: 'class',
- htmlFor: 'for',
- httpEquiv: 'http-equiv'
-};
-/**
- * CSS properties that accept plain numbers
- */
-const isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +
- `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +
- `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +
- `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +
- `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +
- `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +
- // SVG
- `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +
- `stroke-miterlimit,stroke-opacity,stroke-width`);
-/**
- * Known attributes, this is used for stringification of runtime static nodes
- * so that we don't stringify bindings that cannot be set from HTML.
- * Don't also forget to allow `data-*` and `aria-*`!
- * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes
- */
-const isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +
- `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +
- `border,buffered,capture,challenge,charset,checked,cite,class,code,` +
- `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +
- `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +
- `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +
- `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +
- `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +
- `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +
- `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +
- `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +
- `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +
- `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +
- `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +
- `value,width,wrap`);
-/**
- * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute
- */
-const isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +
- `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +
- `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +
- `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +
- `color-interpolation-filters,color-profile,color-rendering,` +
- `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +
- `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +
- `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +
- `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +
- `font-family,font-size,font-size-adjust,font-stretch,font-style,` +
- `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +
- `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +
- `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +
- `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +
- `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +
- `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +
- `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +
- `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +
- `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +
- `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +
- `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +
- `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +
- `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +
- `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +
- `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +
- `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +
- `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +
- `strikethrough-position,strikethrough-thickness,string,stroke,` +
- `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +
- `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +
- `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +
- `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +
- `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +
- `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +
- `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +
- `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +
- `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +
- `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +
- `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);
-
-function normalizeStyle(value) {
- if (isArray(value)) {
- const res = {};
- for (let i = 0; i < value.length; i++) {
- const item = value[i];
- const normalized = isString(item)
- ? parseStringStyle(item)
- : normalizeStyle(item);
- if (normalized) {
- for (const key in normalized) {
- res[key] = normalized[key];
- }
- }
- }
- return res;
- }
- else if (isString(value)) {
- return value;
- }
- else if (isObject(value)) {
- return value;
- }
-}
-const listDelimiterRE = /;(?![^(]*\))/g;
-const propertyDelimiterRE = /:(.+)/;
-function parseStringStyle(cssText) {
- const ret = {};
- cssText.split(listDelimiterRE).forEach(item => {
- if (item) {
- const tmp = item.split(propertyDelimiterRE);
- tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
- }
- });
- return ret;
-}
-function stringifyStyle(styles) {
- let ret = '';
- if (!styles || isString(styles)) {
- return ret;
- }
- for (const key in styles) {
- const value = styles[key];
- const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);
- if (isString(value) ||
- (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {
- // only render valid values
- ret += `${normalizedKey}:${value};`;
- }
- }
- return ret;
-}
-function normalizeClass(value) {
- let res = '';
- if (isString(value)) {
- res = value;
- }
- else if (isArray(value)) {
- for (let i = 0; i < value.length; i++) {
- const normalized = normalizeClass(value[i]);
- if (normalized) {
- res += normalized + ' ';
- }
- }
- }
- else if (isObject(value)) {
- for (const name in value) {
- if (value[name]) {
- res += name + ' ';
- }
- }
- }
- return res.trim();
-}
-function normalizeProps(props) {
- if (!props)
- return null;
- let { class: klass, style } = props;
- if (klass && !isString(klass)) {
- props.class = normalizeClass(klass);
- }
- if (style) {
- props.style = normalizeStyle(style);
- }
- return props;
-}
-
-// These tag configs are shared between compiler-dom and runtime-dom, so they
-// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
-const HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +
- 'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +
- 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +
- 'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +
- 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +
- 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +
- 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +
- 'option,output,progress,select,textarea,details,dialog,menu,' +
- 'summary,template,blockquote,iframe,tfoot';
-// https://developer.mozilla.org/en-US/docs/Web/SVG/Element
-const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +
- 'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +
- 'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +
- 'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +
- 'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +
- 'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +
- 'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +
- 'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +
- 'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +
- 'text,textPath,title,tspan,unknown,use,view';
-const VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';
-const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);
-const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);
-const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);
-
-const escapeRE = /["'&<>]/;
-function escapeHtml(string) {
- const str = '' + string;
- const match = escapeRE.exec(str);
- if (!match) {
- return str;
- }
- let html = '';
- let escaped;
- let index;
- let lastIndex = 0;
- for (index = match.index; index < str.length; index++) {
- switch (str.charCodeAt(index)) {
- case 34: // "
- escaped = '&quot;';
- break;
- case 38: // &
- escaped = '&amp;';
- break;
- case 39: // '
- escaped = '&#39;';
- break;
- case 60: // <
- escaped = '&lt;';
- break;
- case 62: // >
- escaped = '&gt;';
- break;
- default:
- continue;
- }
- if (lastIndex !== index) {
- html += str.substring(lastIndex, index);
- }
- lastIndex = index + 1;
- html += escaped;
- }
- return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
-}
-// https://www.w3.org/TR/html52/syntax.html#comments
-const commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;
-function escapeHtmlComment(src) {
- return src.replace(commentStripRE, '');
-}
-
-function looseCompareArrays(a, b) {
- if (a.length !== b.length)
- return false;
- let equal = true;
- for (let i = 0; equal && i < a.length; i++) {
- equal = looseEqual(a[i], b[i]);
- }
- return equal;
-}
-function looseEqual(a, b) {
- if (a === b)
- return true;
- let aValidType = isDate(a);
- let bValidType = isDate(b);
- if (aValidType || bValidType) {
- return aValidType && bValidType ? a.getTime() === b.getTime() : false;
- }
- aValidType = isArray(a);
- bValidType = isArray(b);
- if (aValidType || bValidType) {
- return aValidType && bValidType ? looseCompareArrays(a, b) : false;
- }
- aValidType = isObject(a);
- bValidType = isObject(b);
- if (aValidType || bValidType) {
- /* istanbul ignore if: this if will probably never be called */
- if (!aValidType || !bValidType) {
- return false;
- }
- const aKeysCount = Object.keys(a).length;
- const bKeysCount = Object.keys(b).length;
- if (aKeysCount !== bKeysCount) {
- return false;
- }
- for (const key in a) {
- const aHasKey = a.hasOwnProperty(key);
- const bHasKey = b.hasOwnProperty(key);
- if ((aHasKey && !bHasKey) ||
- (!aHasKey && bHasKey) ||
- !looseEqual(a[key], b[key])) {
- return false;
- }
- }
- }
- return String(a) === String(b);
-}
-function looseIndexOf(arr, val) {
- return arr.findIndex(item => looseEqual(item, val));
-}
-
-/**
- * For converting {{ interpolation }} values to displayed strings.
- * @private
- */
-const toDisplayString = (val) => {
- return val == null
- ? ''
- : isArray(val) ||
- (isObject(val) &&
- (val.toString === objectToString || !isFunction(val.toString)))
- ? JSON.stringify(val, replacer, 2)
- : String(val);
-};
-const replacer = (_key, val) => {
- // can't use isRef here since @vue/shared has no deps
- if (val && val.__v_isRef) {
- return replacer(_key, val.value);
- }
- else if (isMap(val)) {
- return {
- [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {
- entries[`${key} =>`] = val;
- return entries;
- }, {})
- };
- }
- else if (isSet(val)) {
- return {
- [`Set(${val.size})`]: [...val.values()]
- };
- }
- else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
- return String(val);
- }
- return val;
-};
-
-/**
- * List of @babel/parser plugins that are used for template expression
- * transforms and SFC script transforms. By default we enable proposals slated
- * for ES2020. This will need to be updated as the spec moves forward.
- * Full list at https://babeljs.io/docs/en/next/babel-parser#plugins
- */
-const babelParserDefaultPlugins = [
- 'bigInt',
- 'optionalChaining',
- 'nullishCoalescingOperator'
-];
-const EMPTY_OBJ = (process.env.NODE_ENV !== 'production')
- ? Object.freeze({})
- : {};
-const EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];
-const NOOP = () => { };
-/**
- * Always return false.
- */
-const NO = () => false;
-const onRE = /^on[^a-z]/;
-const isOn = (key) => onRE.test(key);
-const isModelListener = (key) => key.startsWith('onUpdate:');
-const extend = Object.assign;
-const remove = (arr, el) => {
- const i = arr.indexOf(el);
- if (i > -1) {
- arr.splice(i, 1);
- }
-};
-const hasOwnProperty = Object.prototype.hasOwnProperty;
-const hasOwn = (val, key) => hasOwnProperty.call(val, key);
-const isArray = Array.isArray;
-const isMap = (val) => toTypeString(val) === '[object Map]';
-const isSet = (val) => toTypeString(val) === '[object Set]';
-const isDate = (val) => val instanceof Date;
-const isFunction = (val) => typeof val === 'function';
-const isString = (val) => typeof val === 'string';
-const isSymbol = (val) => typeof val === 'symbol';
-const isObject = (val) => val !== null && typeof val === 'object';
-const isPromise = (val) => {
- return isObject(val) && isFunction(val.then) && isFunction(val.catch);
-};
-const objectToString = Object.prototype.toString;
-const toTypeString = (value) => objectToString.call(value);
-const toRawType = (value) => {
- // extract "RawType" from strings like "[object RawType]"
- return toTypeString(value).slice(8, -1);
-};
-const isPlainObject = (val) => toTypeString(val) === '[object Object]';
-const isIntegerKey = (key) => isString(key) &&
- key !== 'NaN' &&
- key[0] !== '-' &&
- '' + parseInt(key, 10) === key;
-const isReservedProp = /*#__PURE__*/ makeMap(
-// the leading comma is intentional so empty string "" is also included
-',key,ref,' +
- 'onVnodeBeforeMount,onVnodeMounted,' +
- 'onVnodeBeforeUpdate,onVnodeUpdated,' +
- 'onVnodeBeforeUnmount,onVnodeUnmounted');
-const cacheStringFunction$1 = (fn) => {
- const cache = Object.create(null);
- return ((str) => {
- const hit = cache[str];
- return hit || (cache[str] = fn(str));
- });
-};
-const camelizeRE$1 = /-(\w)/g;
-/**
- * @private
- */
-const camelize$1 = cacheStringFunction$1((str) => {
- return str.replace(camelizeRE$1, (_, c) => (c ? c.toUpperCase() : ''));
-});
-const hyphenateRE = /\B([A-Z])/g;
-/**
- * @private
- */
-const hyphenate = cacheStringFunction$1((str) => str.replace(hyphenateRE, '-$1').toLowerCase());
-/**
- * @private
- */
-const capitalize = cacheStringFunction$1((str) => str.charAt(0).toUpperCase() + str.slice(1));
-/**
- * @private
- */
-const toHandlerKey = cacheStringFunction$1((str) => str ? `on${capitalize(str)}` : ``);
-// compare whether a value has changed, accounting for NaN.
-const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
-const invokeArrayFns = (fns, arg) => {
- for (let i = 0; i < fns.length; i++) {
- fns[i](arg);
- }
-};
-const def = (obj, key, value) => {
- Object.defineProperty(obj, key, {
- configurable: true,
- enumerable: false,
- value
- });
-};
-const toNumber = (val) => {
- const n = parseFloat(val);
- return isNaN(n) ? val : n;
-};
-let _globalThis;
-const getGlobalThis = () => {
- return (_globalThis ||
- (_globalThis =
- typeof globalThis !== 'undefined'
- ? globalThis
- : typeof self !== 'undefined'
- ? self
- : typeof window !== 'undefined'
- ? window
- : typeof global !== 'undefined'
- ? global
- : {}));
-};
-
-var shared_esmBundler = {
- __proto__: null,
- EMPTY_ARR: EMPTY_ARR,
- EMPTY_OBJ: EMPTY_OBJ,
- NO: NO,
- NOOP: NOOP,
- PatchFlagNames: PatchFlagNames,
- babelParserDefaultPlugins: babelParserDefaultPlugins,
- camelize: camelize$1,
- capitalize: capitalize,
- def: def,
- escapeHtml: escapeHtml,
- escapeHtmlComment: escapeHtmlComment,
- extend: extend,
- generateCodeFrame: generateCodeFrame,
- getGlobalThis: getGlobalThis,
- hasChanged: hasChanged,
- hasOwn: hasOwn,
- hyphenate: hyphenate,
- includeBooleanAttr: includeBooleanAttr,
- invokeArrayFns: invokeArrayFns,
- isArray: isArray,
- isBooleanAttr: isBooleanAttr,
- isDate: isDate,
- isFunction: isFunction,
- isGloballyWhitelisted: isGloballyWhitelisted,
- isHTMLTag: isHTMLTag,
- isIntegerKey: isIntegerKey,
- isKnownHtmlAttr: isKnownHtmlAttr,
- isKnownSvgAttr: isKnownSvgAttr,
- isMap: isMap,
- isModelListener: isModelListener,
- isNoUnitNumericStyleProp: isNoUnitNumericStyleProp,
- isObject: isObject,
- isOn: isOn,
- isPlainObject: isPlainObject,
- isPromise: isPromise,
- isReservedProp: isReservedProp,
- isSSRSafeAttrName: isSSRSafeAttrName,
- isSVGTag: isSVGTag,
- isSet: isSet,
- isSpecialBooleanAttr: isSpecialBooleanAttr,
- isString: isString,
- isSymbol: isSymbol,
- isVoidTag: isVoidTag,
- looseEqual: looseEqual,
- looseIndexOf: looseIndexOf,
- makeMap: makeMap,
- normalizeClass: normalizeClass,
- normalizeProps: normalizeProps,
- normalizeStyle: normalizeStyle,
- objectToString: objectToString,
- parseStringStyle: parseStringStyle,
- propsToAttrMap: propsToAttrMap,
- remove: remove,
- slotFlagsText: slotFlagsText,
- stringifyStyle: stringifyStyle,
- toDisplayString: toDisplayString,
- toHandlerKey: toHandlerKey,
- toNumber: toNumber,
- toRawType: toRawType,
- toTypeString: toTypeString
-};
-
-function defaultOnError(error) {
- throw error;
-}
-function defaultOnWarn(msg) {
- (process.env.NODE_ENV !== 'production') && console.warn(`[Vue warn] ${msg.message}`);
-}
-function createCompilerError(code, loc, messages, additionalMessage) {
- const msg = (process.env.NODE_ENV !== 'production') || !true
- ? (messages || errorMessages)[code] + (additionalMessage || ``)
- : code;
- const error = new SyntaxError(String(msg));
- error.code = code;
- error.loc = loc;
- return error;
-}
-const errorMessages = {
- // parse errors
- [0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',
- [1 /* CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',
- [2 /* DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',
- [3 /* END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',
- [4 /* END_TAG_WITH_TRAILING_SOLIDUS */]: "Illegal '/' in tags.",
- [5 /* EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',
- [6 /* EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',
- [7 /* EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',
- [8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',
- [9 /* EOF_IN_TAG */]: 'Unexpected EOF in tag.',
- [10 /* INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',
- [11 /* INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',
- [12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: "Illegal tag name. Use '&lt;' to print '<'.",
- [13 /* MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',
- [14 /* MISSING_END_TAG_NAME */]: 'End tag name was expected.',
- [15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',
- [16 /* NESTED_COMMENT */]: "Unexpected '<!--' in comment.",
- [17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 ("), U+0027 (\'), and U+003C (<).',
- [18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 ("), U+0027 (\'), U+003C (<), U+003D (=), and U+0060 (`).',
- [19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: "Attribute name cannot start with '='.",
- [21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: "'<?' is allowed only in XML context.",
- [20 /* UNEXPECTED_NULL_CHARACTER */]: `Unexpected null character.`,
- [22 /* UNEXPECTED_SOLIDUS_IN_TAG */]: "Illegal '/' in tags.",
- // Vue-specific parse errors
- [23 /* X_INVALID_END_TAG */]: 'Invalid end tag.',
- [24 /* X_MISSING_END_TAG */]: 'Element is missing end tag.',
- [25 /* X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',
- [27 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +
- 'Note that dynamic directive argument cannot contain spaces.',
- [26 /* X_MISSING_DIRECTIVE_NAME */]: 'Legal directive name was expected.',
- // transform errors
- [28 /* X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,
- [29 /* X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,
- [30 /* X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,
- [31 /* X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,
- [32 /* X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,
- [33 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,
- [34 /* X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,
- [35 /* X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,
- [36 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,
- [37 /* X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>.` +
- `When there are multiple named slots, all slots should use <template> ` +
- `syntax to avoid scope ambiguity.`,
- [38 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,
- [39 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +
- `default slot. These children will be ignored.`,
- [40 /* X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,
- [41 /* X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,
- [42 /* X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,
- [43 /* X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,
- [44 /* X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,
- [45 /* X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,
- // generic errors
- [46 /* X_PREFIX_ID_NOT_SUPPORTED */]: `"prefixIdentifiers" option is not supported in this build of compiler.`,
- [47 /* X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,
- [48 /* X_CACHE_HANDLER_NOT_SUPPORTED */]: `"cacheHandlers" option is only supported when the "prefixIdentifiers" option is enabled.`,
- [49 /* X_SCOPE_ID_NOT_SUPPORTED */]: `"scopeId" option is only supported in module mode.`,
- // just to fulfill types
- [50 /* __EXTEND_POINT__ */]: ``
-};
-
-const FRAGMENT = Symbol((process.env.NODE_ENV !== 'production') ? `Fragment` : ``);
-const TELEPORT = Symbol((process.env.NODE_ENV !== 'production') ? `Teleport` : ``);
-const SUSPENSE = Symbol((process.env.NODE_ENV !== 'production') ? `Suspense` : ``);
-const KEEP_ALIVE = Symbol((process.env.NODE_ENV !== 'production') ? `KeepAlive` : ``);
-const BASE_TRANSITION = Symbol((process.env.NODE_ENV !== 'production') ? `BaseTransition` : ``);
-const OPEN_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `openBlock` : ``);
-const CREATE_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `createBlock` : ``);
-const CREATE_ELEMENT_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `createElementBlock` : ``);
-const CREATE_VNODE = Symbol((process.env.NODE_ENV !== 'production') ? `createVNode` : ``);
-const CREATE_ELEMENT_VNODE = Symbol((process.env.NODE_ENV !== 'production') ? `createElementVNode` : ``);
-const CREATE_COMMENT = Symbol((process.env.NODE_ENV !== 'production') ? `createCommentVNode` : ``);
-const CREATE_TEXT = Symbol((process.env.NODE_ENV !== 'production') ? `createTextVNode` : ``);
-const CREATE_STATIC = Symbol((process.env.NODE_ENV !== 'production') ? `createStaticVNode` : ``);
-const RESOLVE_COMPONENT = Symbol((process.env.NODE_ENV !== 'production') ? `resolveComponent` : ``);
-const RESOLVE_DYNAMIC_COMPONENT = Symbol((process.env.NODE_ENV !== 'production') ? `resolveDynamicComponent` : ``);
-const RESOLVE_DIRECTIVE = Symbol((process.env.NODE_ENV !== 'production') ? `resolveDirective` : ``);
-const RESOLVE_FILTER = Symbol((process.env.NODE_ENV !== 'production') ? `resolveFilter` : ``);
-const WITH_DIRECTIVES = Symbol((process.env.NODE_ENV !== 'production') ? `withDirectives` : ``);
-const RENDER_LIST = Symbol((process.env.NODE_ENV !== 'production') ? `renderList` : ``);
-const RENDER_SLOT = Symbol((process.env.NODE_ENV !== 'production') ? `renderSlot` : ``);
-const CREATE_SLOTS = Symbol((process.env.NODE_ENV !== 'production') ? `createSlots` : ``);
-const TO_DISPLAY_STRING = Symbol((process.env.NODE_ENV !== 'production') ? `toDisplayString` : ``);
-const MERGE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `mergeProps` : ``);
-const NORMALIZE_CLASS = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeClass` : ``);
-const NORMALIZE_STYLE = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeStyle` : ``);
-const NORMALIZE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeProps` : ``);
-const GUARD_REACTIVE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `guardReactiveProps` : ``);
-const TO_HANDLERS = Symbol((process.env.NODE_ENV !== 'production') ? `toHandlers` : ``);
-const CAMELIZE = Symbol((process.env.NODE_ENV !== 'production') ? `camelize` : ``);
-const CAPITALIZE = Symbol((process.env.NODE_ENV !== 'production') ? `capitalize` : ``);
-const TO_HANDLER_KEY = Symbol((process.env.NODE_ENV !== 'production') ? `toHandlerKey` : ``);
-const SET_BLOCK_TRACKING = Symbol((process.env.NODE_ENV !== 'production') ? `setBlockTracking` : ``);
-const PUSH_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `pushScopeId` : ``);
-const POP_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `popScopeId` : ``);
-const WITH_CTX = Symbol((process.env.NODE_ENV !== 'production') ? `withCtx` : ``);
-const UNREF = Symbol((process.env.NODE_ENV !== 'production') ? `unref` : ``);
-const IS_REF = Symbol((process.env.NODE_ENV !== 'production') ? `isRef` : ``);
-const WITH_MEMO = Symbol((process.env.NODE_ENV !== 'production') ? `withMemo` : ``);
-const IS_MEMO_SAME = Symbol((process.env.NODE_ENV !== 'production') ? `isMemoSame` : ``);
-// Name mapping for runtime helpers that need to be imported from 'vue' in
-// generated code. Make sure these are correctly exported in the runtime!
-// Using `any` here because TS doesn't allow symbols as index type.
-const helperNameMap = {
- [FRAGMENT]: `Fragment`,
- [TELEPORT]: `Teleport`,
- [SUSPENSE]: `Suspense`,
- [KEEP_ALIVE]: `KeepAlive`,
- [BASE_TRANSITION]: `BaseTransition`,
- [OPEN_BLOCK]: `openBlock`,
- [CREATE_BLOCK]: `createBlock`,
- [CREATE_ELEMENT_BLOCK]: `createElementBlock`,
- [CREATE_VNODE]: `createVNode`,
- [CREATE_ELEMENT_VNODE]: `createElementVNode`,
- [CREATE_COMMENT]: `createCommentVNode`,
- [CREATE_TEXT]: `createTextVNode`,
- [CREATE_STATIC]: `createStaticVNode`,
- [RESOLVE_COMPONENT]: `resolveComponent`,
- [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,
- [RESOLVE_DIRECTIVE]: `resolveDirective`,
- [RESOLVE_FILTER]: `resolveFilter`,
- [WITH_DIRECTIVES]: `withDirectives`,
- [RENDER_LIST]: `renderList`,
- [RENDER_SLOT]: `renderSlot`,
- [CREATE_SLOTS]: `createSlots`,
- [TO_DISPLAY_STRING]: `toDisplayString`,
- [MERGE_PROPS]: `mergeProps`,
- [NORMALIZE_CLASS]: `normalizeClass`,
- [NORMALIZE_STYLE]: `normalizeStyle`,
- [NORMALIZE_PROPS]: `normalizeProps`,
- [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,
- [TO_HANDLERS]: `toHandlers`,
- [CAMELIZE]: `camelize`,
- [CAPITALIZE]: `capitalize`,
- [TO_HANDLER_KEY]: `toHandlerKey`,
- [SET_BLOCK_TRACKING]: `setBlockTracking`,
- [PUSH_SCOPE_ID]: `pushScopeId`,
- [POP_SCOPE_ID]: `popScopeId`,
- [WITH_CTX]: `withCtx`,
- [UNREF]: `unref`,
- [IS_REF]: `isRef`,
- [WITH_MEMO]: `withMemo`,
- [IS_MEMO_SAME]: `isMemoSame`
-};
-function registerRuntimeHelpers(helpers) {
- Object.getOwnPropertySymbols(helpers).forEach(s => {
- helperNameMap[s] = helpers[s];
- });
-}
-
-// AST Utilities ---------------------------------------------------------------
-// Some expressions, e.g. sequence and conditional expressions, are never
-// associated with template nodes, so their source locations are just a stub.
-// Container types like CompoundExpression also don't need a real location.
-const locStub = {
- source: '',
- start: { line: 1, column: 1, offset: 0 },
- end: { line: 1, column: 1, offset: 0 }
-};
-function createRoot(children, loc = locStub) {
- return {
- type: 0 /* ROOT */,
- children,
- helpers: [],
- components: [],
- directives: [],
- hoists: [],
- imports: [],
- cached: 0,
- temps: 0,
- codegenNode: undefined,
- loc
- };
-}
-function createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {
- if (context) {
- if (isBlock) {
- context.helper(OPEN_BLOCK);
- context.helper(getVNodeBlockHelper(context.inSSR, isComponent));
- }
- else {
- context.helper(getVNodeHelper(context.inSSR, isComponent));
- }
- if (directives) {
- context.helper(WITH_DIRECTIVES);
- }
- }
- return {
- type: 13 /* VNODE_CALL */,
- tag,
- props,
- children,
- patchFlag,
- dynamicProps,
- directives,
- isBlock,
- disableTracking,
- isComponent,
- loc
- };
-}
-function createArrayExpression(elements, loc = locStub) {
- return {
- type: 17 /* JS_ARRAY_EXPRESSION */,
- loc,
- elements
- };
-}
-function createObjectExpression(properties, loc = locStub) {
- return {
- type: 15 /* JS_OBJECT_EXPRESSION */,
- loc,
- properties
- };
-}
-function createObjectProperty(key, value) {
- return {
- type: 16 /* JS_PROPERTY */,
- loc: locStub,
- key: isString(key) ? createSimpleExpression(key, true) : key,
- value
- };
-}
-function createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* NOT_CONSTANT */) {
- return {
- type: 4 /* SIMPLE_EXPRESSION */,
- loc,
- content,
- isStatic,
- constType: isStatic ? 3 /* CAN_STRINGIFY */ : constType
- };
-}
-function createInterpolation(content, loc) {
- return {
- type: 5 /* INTERPOLATION */,
- loc,
- content: isString(content)
- ? createSimpleExpression(content, false, loc)
- : content
- };
-}
-function createCompoundExpression(children, loc = locStub) {
- return {
- type: 8 /* COMPOUND_EXPRESSION */,
- loc,
- children
- };
-}
-function createCallExpression(callee, args = [], loc = locStub) {
- return {
- type: 14 /* JS_CALL_EXPRESSION */,
- loc,
- callee,
- arguments: args
- };
-}
-function createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {
- return {
- type: 18 /* JS_FUNCTION_EXPRESSION */,
- params,
- returns,
- newline,
- isSlot,
- loc
- };
-}
-function createConditionalExpression(test, consequent, alternate, newline = true) {
- return {
- type: 19 /* JS_CONDITIONAL_EXPRESSION */,
- test,
- consequent,
- alternate,
- newline,
- loc: locStub
- };
-}
-function createCacheExpression(index, value, isVNode = false) {
- return {
- type: 20 /* JS_CACHE_EXPRESSION */,
- index,
- value,
- isVNode,
- loc: locStub
- };
-}
-function createBlockStatement(body) {
- return {
- type: 21 /* JS_BLOCK_STATEMENT */,
- body,
- loc: locStub
- };
-}
-function createTemplateLiteral(elements) {
- return {
- type: 22 /* JS_TEMPLATE_LITERAL */,
- elements,
- loc: locStub
- };
-}
-function createIfStatement(test, consequent, alternate) {
- return {
- type: 23 /* JS_IF_STATEMENT */,
- test,
- consequent,
- alternate,
- loc: locStub
- };
-}
-function createAssignmentExpression(left, right) {
- return {
- type: 24 /* JS_ASSIGNMENT_EXPRESSION */,
- left,
- right,
- loc: locStub
- };
-}
-function createSequenceExpression(expressions) {
- return {
- type: 25 /* JS_SEQUENCE_EXPRESSION */,
- expressions,
- loc: locStub
- };
-}
-function createReturnStatement(returns) {
- return {
- type: 26 /* JS_RETURN_STATEMENT */,
- returns,
- loc: locStub
- };
-}
-
-const isStaticExp = (p) => p.type === 4 /* SIMPLE_EXPRESSION */ && p.isStatic;
-const isBuiltInType = (tag, expected) => tag === expected || tag === hyphenate(expected);
-function isCoreComponent(tag) {
- if (isBuiltInType(tag, 'Teleport')) {
- return TELEPORT;
- }
- else if (isBuiltInType(tag, 'Suspense')) {
- return SUSPENSE;
- }
- else if (isBuiltInType(tag, 'KeepAlive')) {
- return KEEP_ALIVE;
- }
- else if (isBuiltInType(tag, 'BaseTransition')) {
- return BASE_TRANSITION;
- }
-}
-const nonIdentifierRE = /^\d|[^\$\w]/;
-const isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);
-const validFirstIdentCharRE = /[A-Za-z_$\xA0-\uFFFF]/;
-const validIdentCharRE = /[\.\?\w$\xA0-\uFFFF]/;
-const whitespaceRE = /\s+[.[]\s*|\s*[.[]\s+/g;
-/**
- * Simple lexer to check if an expression is a member expression. This is
- * lax and only checks validity at the root level (i.e. does not validate exps
- * inside square brackets), but it's ok since these are only used on template
- * expressions and false positives are invalid expressions in the first place.
- */
-const isMemberExpressionBrowser = (path) => {
- // remove whitespaces around . or [ first
- path = path.trim().replace(whitespaceRE, s => s.trim());
- let state = 0 /* inMemberExp */;
- let stateStack = [];
- let currentOpenBracketCount = 0;
- let currentOpenParensCount = 0;
- let currentStringType = null;
- for (let i = 0; i < path.length; i++) {
- const char = path.charAt(i);
- switch (state) {
- case 0 /* inMemberExp */:
- if (char === '[') {
- stateStack.push(state);
- state = 1 /* inBrackets */;
- currentOpenBracketCount++;
- }
- else if (char === '(') {
- stateStack.push(state);
- state = 2 /* inParens */;
- currentOpenParensCount++;
- }
- else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {
- return false;
- }
- break;
- case 1 /* inBrackets */:
- if (char === `'` || char === `"` || char === '`') {
- stateStack.push(state);
- state = 3 /* inString */;
- currentStringType = char;
- }
- else if (char === `[`) {
- currentOpenBracketCount++;
- }
- else if (char === `]`) {
- if (!--currentOpenBracketCount) {
- state = stateStack.pop();
- }
- }
- break;
- case 2 /* inParens */:
- if (char === `'` || char === `"` || char === '`') {
- stateStack.push(state);
- state = 3 /* inString */;
- currentStringType = char;
- }
- else if (char === `(`) {
- currentOpenParensCount++;
- }
- else if (char === `)`) {
- // if the exp ends as a call then it should not be considered valid
- if (i === path.length - 1) {
- return false;
- }
- if (!--currentOpenParensCount) {
- state = stateStack.pop();
- }
- }
- break;
- case 3 /* inString */:
- if (char === currentStringType) {
- state = stateStack.pop();
- currentStringType = null;
- }
- break;
- }
- }
- return !currentOpenBracketCount && !currentOpenParensCount;
-};
-const isMemberExpressionNode = NOOP
- ;
-const isMemberExpression = isMemberExpressionBrowser
- ;
-function getInnerRange(loc, offset, length) {
- const source = loc.source.substr(offset, length);
- const newLoc = {
- source,
- start: advancePositionWithClone(loc.start, loc.source, offset),
- end: loc.end
- };
- if (length != null) {
- newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);
- }
- return newLoc;
-}
-function advancePositionWithClone(pos, source, numberOfCharacters = source.length) {
- return advancePositionWithMutation(extend({}, pos), source, numberOfCharacters);
-}
-// advance by mutation without cloning (for performance reasons), since this
-// gets called a lot in the parser
-function advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {
- let linesCount = 0;
- let lastNewLinePos = -1;
- for (let i = 0; i < numberOfCharacters; i++) {
- if (source.charCodeAt(i) === 10 /* newline char code */) {
- linesCount++;
- lastNewLinePos = i;
- }
- }
- pos.offset += numberOfCharacters;
- pos.line += linesCount;
- pos.column =
- lastNewLinePos === -1
- ? pos.column + numberOfCharacters
- : numberOfCharacters - lastNewLinePos;
- return pos;
-}
-function assert(condition, msg) {
- /* istanbul ignore if */
- if (!condition) {
- throw new Error(msg || `unexpected compiler condition`);
- }
-}
-function findDir(node, name, allowEmpty = false) {
- for (let i = 0; i < node.props.length; i++) {
- const p = node.props[i];
- if (p.type === 7 /* DIRECTIVE */ &&
- (allowEmpty || p.exp) &&
- (isString(name) ? p.name === name : name.test(p.name))) {
- return p;
- }
- }
-}
-function findProp(node, name, dynamicOnly = false, allowEmpty = false) {
- for (let i = 0; i < node.props.length; i++) {
- const p = node.props[i];
- if (p.type === 6 /* ATTRIBUTE */) {
- if (dynamicOnly)
- continue;
- if (p.name === name && (p.value || allowEmpty)) {
- return p;
- }
- }
- else if (p.name === 'bind' &&
- (p.exp || allowEmpty) &&
- isBindKey(p.arg, name)) {
- return p;
- }
- }
-}
-function isBindKey(arg, name) {
- return !!(arg && isStaticExp(arg) && arg.content === name);
-}
-function hasDynamicKeyVBind(node) {
- return node.props.some(p => p.type === 7 /* DIRECTIVE */ &&
- p.name === 'bind' &&
- (!p.arg || // v-bind="obj"
- p.arg.type !== 4 /* SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]
- !p.arg.isStatic) // v-bind:[foo]
- );
-}
-function isText(node) {
- return node.type === 5 /* INTERPOLATION */ || node.type === 2 /* TEXT */;
-}
-function isVSlot(p) {
- return p.type === 7 /* DIRECTIVE */ && p.name === 'slot';
-}
-function isTemplateNode(node) {
- return (node.type === 1 /* ELEMENT */ && node.tagType === 3 /* TEMPLATE */);
-}
-function isSlotOutlet(node) {
- return node.type === 1 /* ELEMENT */ && node.tagType === 2 /* SLOT */;
-}
-function getVNodeHelper(ssr, isComponent) {
- return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;
-}
-function getVNodeBlockHelper(ssr, isComponent) {
- return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;
-}
-const propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);
-function getUnnormalizedProps(props, callPath = []) {
- if (props &&
- !isString(props) &&
- props.type === 14 /* JS_CALL_EXPRESSION */) {
- const callee = props.callee;
- if (!isString(callee) && propsHelperSet.has(callee)) {
- return getUnnormalizedProps(props.arguments[0], callPath.concat(props));
- }
- }
- return [props, callPath];
-}
-function injectProp(node, prop, context) {
- let propsWithInjection;
- const originalProps = node.type === 13 /* VNODE_CALL */ ? node.props : node.arguments[2];
- /**
- * 1. mergeProps(...)
- * 2. toHandlers(...)
- * 3. normalizeProps(...)
- * 4. normalizeProps(guardReactiveProps(...))
- *
- * we need to get the real props before normalization
- */
- let props = originalProps;
- let callPath = [];
- let parentCall;
- if (props &&
- !isString(props) &&
- props.type === 14 /* JS_CALL_EXPRESSION */) {
- const ret = getUnnormalizedProps(props);
- props = ret[0];
- callPath = ret[1];
- parentCall = callPath[callPath.length - 1];
- }
- if (props == null || isString(props)) {
- propsWithInjection = createObjectExpression([prop]);
- }
- else if (props.type === 14 /* JS_CALL_EXPRESSION */) {
- // merged props... add ours
- // only inject key to object literal if it's the first argument so that
- // if doesn't override user provided keys
- const first = props.arguments[0];
- if (!isString(first) && first.type === 15 /* JS_OBJECT_EXPRESSION */) {
- first.properties.unshift(prop);
- }
- else {
- if (props.callee === TO_HANDLERS) {
- // #2366
- propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [
- createObjectExpression([prop]),
- props
- ]);
- }
- else {
- props.arguments.unshift(createObjectExpression([prop]));
- }
- }
- !propsWithInjection && (propsWithInjection = props);
- }
- else if (props.type === 15 /* JS_OBJECT_EXPRESSION */) {
- let alreadyExists = false;
- // check existing key to avoid overriding user provided keys
- if (prop.key.type === 4 /* SIMPLE_EXPRESSION */) {
- const propKeyName = prop.key.content;
- alreadyExists = props.properties.some(p => p.key.type === 4 /* SIMPLE_EXPRESSION */ &&
- p.key.content === propKeyName);
- }
- if (!alreadyExists) {
- props.properties.unshift(prop);
- }
- propsWithInjection = props;
- }
- else {
- // single v-bind with expression, return a merged replacement
- propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [
- createObjectExpression([prop]),
- props
- ]);
- // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,
- // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,
- // the `guardReactiveProps` will no longer be needed
- if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {
- parentCall = callPath[callPath.length - 2];
- }
- }
- if (node.type === 13 /* VNODE_CALL */) {
- if (parentCall) {
- parentCall.arguments[0] = propsWithInjection;
- }
- else {
- node.props = propsWithInjection;
- }
- }
- else {
- if (parentCall) {
- parentCall.arguments[0] = propsWithInjection;
- }
- else {
- node.arguments[2] = propsWithInjection;
- }
- }
-}
-function toValidAssetId(name, type) {
- // see issue#4422, we need adding identifier on validAssetId if variable `name` has specific character
- return `_${type}_${name.replace(/[^\w]/g, (searchValue, replaceValue) => {
- return searchValue === '-' ? '_' : name.charCodeAt(replaceValue).toString();
- })}`;
-}
-// Check if a node contains expressions that reference current context scope ids
-function hasScopeRef(node, ids) {
- if (!node || Object.keys(ids).length === 0) {
- return false;
- }
- switch (node.type) {
- case 1 /* ELEMENT */:
- for (let i = 0; i < node.props.length; i++) {
- const p = node.props[i];
- if (p.type === 7 /* DIRECTIVE */ &&
- (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {
- return true;
- }
- }
- return node.children.some(c => hasScopeRef(c, ids));
- case 11 /* FOR */:
- if (hasScopeRef(node.source, ids)) {
- return true;
- }
- return node.children.some(c => hasScopeRef(c, ids));
- case 9 /* IF */:
- return node.branches.some(b => hasScopeRef(b, ids));
- case 10 /* IF_BRANCH */:
- if (hasScopeRef(node.condition, ids)) {
- return true;
- }
- return node.children.some(c => hasScopeRef(c, ids));
- case 4 /* SIMPLE_EXPRESSION */:
- return (!node.isStatic &&
- isSimpleIdentifier(node.content) &&
- !!ids[node.content]);
- case 8 /* COMPOUND_EXPRESSION */:
- return node.children.some(c => isObject(c) && hasScopeRef(c, ids));
- case 5 /* INTERPOLATION */:
- case 12 /* TEXT_CALL */:
- return hasScopeRef(node.content, ids);
- case 2 /* TEXT */:
- case 3 /* COMMENT */:
- return false;
- default:
- if ((process.env.NODE_ENV !== 'production')) ;
- return false;
- }
-}
-function getMemoedVNodeCall(node) {
- if (node.type === 14 /* JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {
- return node.arguments[1].returns;
- }
- else {
- return node;
- }
-}
-function makeBlock(node, { helper, removeHelper, inSSR }) {
- if (!node.isBlock) {
- node.isBlock = true;
- removeHelper(getVNodeHelper(inSSR, node.isComponent));
- helper(OPEN_BLOCK);
- helper(getVNodeBlockHelper(inSSR, node.isComponent));
- }
-}
-
-const deprecationData = {
- ["COMPILER_IS_ON_ELEMENT" /* COMPILER_IS_ON_ELEMENT */]: {
- message: `Platform-native elements with "is" prop will no longer be ` +
- `treated as components in Vue 3 unless the "is" value is explicitly ` +
- `prefixed with "vue:".`,
- link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`
- },
- ["COMPILER_V_BIND_SYNC" /* COMPILER_V_BIND_SYNC */]: {
- message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +
- `argument instead. \`v-bind:${key}.sync\` should be changed to ` +
- `\`v-model:${key}\`.`,
- link: `https://v3.vuejs.org/guide/migration/v-model.html`
- },
- ["COMPILER_V_BIND_PROP" /* COMPILER_V_BIND_PROP */]: {
- message: `.prop modifier for v-bind has been removed and no longer necessary. ` +
- `Vue 3 will automatically set a binding as DOM property when appropriate.`
- },
- ["COMPILER_V_BIND_OBJECT_ORDER" /* COMPILER_V_BIND_OBJECT_ORDER */]: {
- message: `v-bind="obj" usage is now order sensitive and behaves like JavaScript ` +
- `object spread: it will now overwrite an existing non-mergeable attribute ` +
- `that appears before v-bind in the case of conflict. ` +
- `To retain 2.x behavior, move v-bind to make it the first attribute. ` +
- `You can also suppress this warning if the usage is intended.`,
- link: `https://v3.vuejs.org/guide/migration/v-bind.html`
- },
- ["COMPILER_V_ON_NATIVE" /* COMPILER_V_ON_NATIVE */]: {
- message: `.native modifier for v-on has been removed as is no longer necessary.`,
- link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`
- },
- ["COMPILER_V_IF_V_FOR_PRECEDENCE" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {
- message: `v-if / v-for precedence when used on the same element has changed ` +
- `in Vue 3: v-if now takes higher precedence and will no longer have ` +
- `access to v-for scope variables. It is best to avoid the ambiguity ` +
- `with <template> tags or use a computed property that filters v-for ` +
- `data source.`,
- link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`
- },
- ["COMPILER_V_FOR_REF" /* COMPILER_V_FOR_REF */]: {
- message: `Ref usage on v-for no longer creates array ref values in Vue 3. ` +
- `Consider using function refs or refactor to avoid ref usage altogether.`,
- link: `https://v3.vuejs.org/guide/migration/array-refs.html`
- },
- ["COMPILER_NATIVE_TEMPLATE" /* COMPILER_NATIVE_TEMPLATE */]: {
- message: `<template> with no special directives will render as a native template ` +
- `element instead of its inner content in Vue 3.`
- },
- ["COMPILER_INLINE_TEMPLATE" /* COMPILER_INLINE_TEMPLATE */]: {
- message: `"inline-template" has been removed in Vue 3.`,
- link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`
- },
- ["COMPILER_FILTER" /* COMPILER_FILTERS */]: {
- message: `filters have been removed in Vue 3. ` +
- `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` +
- `Use method calls or computed properties instead.`,
- link: `https://v3.vuejs.org/guide/migration/filters.html`
- }
-};
-function getCompatValue(key, context) {
- const config = context.options
- ? context.options.compatConfig
- : context.compatConfig;
- const value = config && config[key];
- if (key === 'MODE') {
- return value || 3; // compiler defaults to v3 behavior
- }
- else {
- return value;
- }
-}
-function isCompatEnabled(key, context) {
- const mode = getCompatValue('MODE', context);
- const value = getCompatValue(key, context);
- // in v3 mode, only enable if explicitly set to true
- // otherwise enable for any non-false value
- return mode === 3 ? value === true : value !== false;
-}
-function checkCompatEnabled(key, context, loc, ...args) {
- const enabled = isCompatEnabled(key, context);
- if ((process.env.NODE_ENV !== 'production') && enabled) {
- warnDeprecation(key, context, loc, ...args);
- }
- return enabled;
-}
-function warnDeprecation(key, context, loc, ...args) {
- const val = getCompatValue(key, context);
- if (val === 'suppress-warning') {
- return;
- }
- const { message, link } = deprecationData[key];
- const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\n Details: ${link}` : ``}`;
- const err = new SyntaxError(msg);
- err.code = key;
- if (loc)
- err.loc = loc;
- context.onWarn(err);
-}
-
-// The default decoder only provides escapes for characters reserved as part of
-// the template syntax, and is only used if the custom renderer did not provide
-// a platform-specific decoder.
-const decodeRE = /&(gt|lt|amp|apos|quot);/g;
-const decodeMap = {
- gt: '>',
- lt: '<',
- amp: '&',
- apos: "'",
- quot: '"'
-};
-const defaultParserOptions = {
- delimiters: [`{{`, `}}`],
- getNamespace: () => 0 /* HTML */,
- getTextMode: () => 0 /* DATA */,
- isVoidTag: NO,
- isPreTag: NO,
- isCustomElement: NO,
- decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),
- onError: defaultOnError,
- onWarn: defaultOnWarn,
- comments: (process.env.NODE_ENV !== 'production')
-};
-function baseParse(content, options = {}) {
- const context = createParserContext(content, options);
- const start = getCursor(context);
- return createRoot(parseChildren(context, 0 /* DATA */, []), getSelection(context, start));
-}
-function createParserContext(content, rawOptions) {
- const options = extend({}, defaultParserOptions);
- let key;
- for (key in rawOptions) {
- // @ts-ignore
- options[key] =
- rawOptions[key] === undefined
- ? defaultParserOptions[key]
- : rawOptions[key];
- }
- return {
- options,
- column: 1,
- line: 1,
- offset: 0,
- originalSource: content,
- source: content,
- inPre: false,
- inVPre: false,
- onWarn: options.onWarn
- };
-}
-function parseChildren(context, mode, ancestors) {
- const parent = last(ancestors);
- const ns = parent ? parent.ns : 0 /* HTML */;
- const nodes = [];
- while (!isEnd(context, mode, ancestors)) {
- const s = context.source;
- let node = undefined;
- if (mode === 0 /* DATA */ || mode === 1 /* RCDATA */) {
- if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {
- // '{{'
- node = parseInterpolation(context, mode);
- }
- else if (mode === 0 /* DATA */ && s[0] === '<') {
- // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state
- if (s.length === 1) {
- emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 1);
- }
- else if (s[1] === '!') {
- // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state
- if (startsWith(s, '<!--')) {
- node = parseComment(context);
- }
- else if (startsWith(s, '<!DOCTYPE')) {
- // Ignore DOCTYPE by a limitation.
- node = parseBogusComment(context);
- }
- else if (startsWith(s, '<![CDATA[')) {
- if (ns !== 0 /* HTML */) {
- node = parseCDATA(context, ancestors);
- }
- else {
- emitError(context, 1 /* CDATA_IN_HTML_CONTENT */);
- node = parseBogusComment(context);
- }
- }
- else {
- emitError(context, 11 /* INCORRECTLY_OPENED_COMMENT */);
- node = parseBogusComment(context);
- }
- }
- else if (s[1] === '/') {
- // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state
- if (s.length === 2) {
- emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 2);
- }
- else if (s[2] === '>') {
- emitError(context, 14 /* MISSING_END_TAG_NAME */, 2);
- advanceBy(context, 3);
- continue;
- }
- else if (/[a-z]/i.test(s[2])) {
- emitError(context, 23 /* X_INVALID_END_TAG */);
- parseTag(context, 1 /* End */, parent);
- continue;
- }
- else {
- emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);
- node = parseBogusComment(context);
- }
- }
- else if (/[a-z]/i.test(s[1])) {
- node = parseElement(context, ancestors);
- // 2.x <template> with no directive compat
- if (isCompatEnabled("COMPILER_NATIVE_TEMPLATE" /* COMPILER_NATIVE_TEMPLATE */, context) &&
- node &&
- node.tag === 'template' &&
- !node.props.some(p => p.type === 7 /* DIRECTIVE */ &&
- isSpecialTemplateDirective(p.name))) {
- (process.env.NODE_ENV !== 'production') &&
- warnDeprecation("COMPILER_NATIVE_TEMPLATE" /* COMPILER_NATIVE_TEMPLATE */, context, node.loc);
- node = node.children;
- }
- }
- else if (s[1] === '?') {
- emitError(context, 21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);
- node = parseBogusComment(context);
- }
- else {
- emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);
- }
- }
- }
- if (!node) {
- node = parseText(context, mode);
- }
- if (isArray(node)) {
- for (let i = 0; i < node.length; i++) {
- pushNode(nodes, node[i]);
- }
- }
- else {
- pushNode(nodes, node);
- }
- }
- // Whitespace handling strategy like v2
- let removedWhitespace = false;
- if (mode !== 2 /* RAWTEXT */ && mode !== 1 /* RCDATA */) {
- const shouldCondense = context.options.whitespace !== 'preserve';
- for (let i = 0; i < nodes.length; i++) {
- const node = nodes[i];
- if (!context.inPre && node.type === 2 /* TEXT */) {
- if (!/[^\t\r\n\f ]/.test(node.content)) {
- const prev = nodes[i - 1];
- const next = nodes[i + 1];
- // Remove if:
- // - the whitespace is the first or last node, or:
- // - (condense mode) the whitespace is adjacent to a comment, or:
- // - (condense mode) the whitespace is between two elements AND contains newline
- if (!prev ||
- !next ||
- (shouldCondense &&
- (prev.type === 3 /* COMMENT */ ||
- next.type === 3 /* COMMENT */ ||
- (prev.type === 1 /* ELEMENT */ &&
- next.type === 1 /* ELEMENT */ &&
- /[\r\n]/.test(node.content))))) {
- removedWhitespace = true;
- nodes[i] = null;
- }
- else {
- // Otherwise, the whitespace is condensed into a single space
- node.content = ' ';
- }
- }
- else if (shouldCondense) {
- // in condense mode, consecutive whitespaces in text are condensed
- // down to a single space.
- node.content = node.content.replace(/[\t\r\n\f ]+/g, ' ');
- }
- }
- // Remove comment nodes if desired by configuration.
- else if (node.type === 3 /* COMMENT */ && !context.options.comments) {
- removedWhitespace = true;
- nodes[i] = null;
- }
- }
- if (context.inPre && parent && context.options.isPreTag(parent.tag)) {
- // remove leading newline per html spec
- // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element
- const first = nodes[0];
- if (first && first.type === 2 /* TEXT */) {
- first.content = first.content.replace(/^\r?\n/, '');
- }
- }
- }
- return removedWhitespace ? nodes.filter(Boolean) : nodes;
-}
-function pushNode(nodes, node) {
- if (node.type === 2 /* TEXT */) {
- const prev = last(nodes);
- // Merge if both this and the previous node are text and those are
- // consecutive. This happens for cases like "a < b".
- if (prev &&
- prev.type === 2 /* TEXT */ &&
- prev.loc.end.offset === node.loc.start.offset) {
- prev.content += node.content;
- prev.loc.end = node.loc.end;
- prev.loc.source += node.loc.source;
- return;
- }
- }
- nodes.push(node);
-}
-function parseCDATA(context, ancestors) {
- advanceBy(context, 9);
- const nodes = parseChildren(context, 3 /* CDATA */, ancestors);
- if (context.source.length === 0) {
- emitError(context, 6 /* EOF_IN_CDATA */);
- }
- else {
- advanceBy(context, 3);
- }
- return nodes;
-}
-function parseComment(context) {
- const start = getCursor(context);
- let content;
- // Regular comment.
- const match = /--(\!)?>/.exec(context.source);
- if (!match) {
- content = context.source.slice(4);
- advanceBy(context, context.source.length);
- emitError(context, 7 /* EOF_IN_COMMENT */);
- }
- else {
- if (match.index <= 3) {
- emitError(context, 0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */);
- }
- if (match[1]) {
- emitError(context, 10 /* INCORRECTLY_CLOSED_COMMENT */);
- }
- content = context.source.slice(4, match.index);
- // Advancing with reporting nested comments.
- const s = context.source.slice(0, match.index);
- let prevIndex = 1, nestedIndex = 0;
- while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {
- advanceBy(context, nestedIndex - prevIndex + 1);
- if (nestedIndex + 4 < s.length) {
- emitError(context, 16 /* NESTED_COMMENT */);
- }
- prevIndex = nestedIndex + 1;
- }
- advanceBy(context, match.index + match[0].length - prevIndex + 1);
- }
- return {
- type: 3 /* COMMENT */,
- content,
- loc: getSelection(context, start)
- };
-}
-function parseBogusComment(context) {
- const start = getCursor(context);
- const contentStart = context.source[1] === '?' ? 1 : 2;
- let content;
- const closeIndex = context.source.indexOf('>');
- if (closeIndex === -1) {
- content = context.source.slice(contentStart);
- advanceBy(context, context.source.length);
- }
- else {
- content = context.source.slice(contentStart, closeIndex);
- advanceBy(context, closeIndex + 1);
- }
- return {
- type: 3 /* COMMENT */,
- content,
- loc: getSelection(context, start)
- };
-}
-function parseElement(context, ancestors) {
- // Start tag.
- const wasInPre = context.inPre;
- const wasInVPre = context.inVPre;
- const parent = last(ancestors);
- const element = parseTag(context, 0 /* Start */, parent);
- const isPreBoundary = context.inPre && !wasInPre;
- const isVPreBoundary = context.inVPre && !wasInVPre;
- if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {
- // #4030 self-closing <pre> tag
- if (isPreBoundary) {
- context.inPre = false;
- }
- if (isVPreBoundary) {
- context.inVPre = false;
- }
- return element;
- }
- // Children.
- ancestors.push(element);
- const mode = context.options.getTextMode(element, parent);
- const children = parseChildren(context, mode, ancestors);
- ancestors.pop();
- // 2.x inline-template compat
- {
- const inlineTemplateProp = element.props.find(p => p.type === 6 /* ATTRIBUTE */ && p.name === 'inline-template');
- if (inlineTemplateProp &&
- checkCompatEnabled("COMPILER_INLINE_TEMPLATE" /* COMPILER_INLINE_TEMPLATE */, context, inlineTemplateProp.loc)) {
- const loc = getSelection(context, element.loc.end);
- inlineTemplateProp.value = {
- type: 2 /* TEXT */,
- content: loc.source,
- loc
- };
- }
- }
- element.children = children;
- // End tag.
- if (startsWithEndTagOpen(context.source, element.tag)) {
- parseTag(context, 1 /* End */, parent);
- }
- else {
- emitError(context, 24 /* X_MISSING_END_TAG */, 0, element.loc.start);
- if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {
- const first = children[0];
- if (first && startsWith(first.loc.source, '<!--')) {
- emitError(context, 8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);
- }
- }
- }
- element.loc = getSelection(context, element.loc.start);
- if (isPreBoundary) {
- context.inPre = false;
- }
- if (isVPreBoundary) {
- context.inVPre = false;
- }
- return element;
-}
-const isSpecialTemplateDirective = /*#__PURE__*/ makeMap(`if,else,else-if,for,slot`);
-function parseTag(context, type, parent) {
- // Tag open.
- const start = getCursor(context);
- const match = /^<\/?([a-z][^\t\r\n\f />]*)/i.exec(context.source);
- const tag = match[1];
- const ns = context.options.getNamespace(tag, parent);
- advanceBy(context, match[0].length);
- advanceSpaces(context);
- // save current state in case we need to re-parse attributes with v-pre
- const cursor = getCursor(context);
- const currentSource = context.source;
- // check <pre> tag
- if (context.options.isPreTag(tag)) {
- context.inPre = true;
- }
- // Attributes.
- let props = parseAttributes(context, type);
- // check v-pre
- if (type === 0 /* Start */ &&
- !context.inVPre &&
- props.some(p => p.type === 7 /* DIRECTIVE */ && p.name === 'pre')) {
- context.inVPre = true;
- // reset context
- extend(context, cursor);
- context.source = currentSource;
- // re-parse attrs and filter out v-pre itself
- props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');
- }
- // Tag close.
- let isSelfClosing = false;
- if (context.source.length === 0) {
- emitError(context, 9 /* EOF_IN_TAG */);
- }
- else {
- isSelfClosing = startsWith(context.source, '/>');
- if (type === 1 /* End */ && isSelfClosing) {
- emitError(context, 4 /* END_TAG_WITH_TRAILING_SOLIDUS */);
- }
- advanceBy(context, isSelfClosing ? 2 : 1);
- }
- if (type === 1 /* End */) {
- return;
- }
- // 2.x deprecation checks
- if ((process.env.NODE_ENV !== 'production') &&
- isCompatEnabled("COMPILER_V_IF_V_FOR_PRECEDENCE" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context)) {
- let hasIf = false;
- let hasFor = false;
- for (let i = 0; i < props.length; i++) {
- const p = props[i];
- if (p.type === 7 /* DIRECTIVE */) {
- if (p.name === 'if') {
- hasIf = true;
- }
- else if (p.name === 'for') {
- hasFor = true;
- }
- }
- if (hasIf && hasFor) {
- warnDeprecation("COMPILER_V_IF_V_FOR_PRECEDENCE" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context, getSelection(context, start));
- }
- }
- }
- let tagType = 0 /* ELEMENT */;
- if (!context.inVPre) {
- if (tag === 'slot') {
- tagType = 2 /* SLOT */;
- }
- else if (tag === 'template') {
- if (props.some(p => p.type === 7 /* DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {
- tagType = 3 /* TEMPLATE */;
- }
- }
- else if (isComponent(tag, props, context)) {
- tagType = 1 /* COMPONENT */;
- }
- }
- return {
- type: 1 /* ELEMENT */,
- ns,
- tag,
- tagType,
- props,
- isSelfClosing,
- children: [],
- loc: getSelection(context, start),
- codegenNode: undefined // to be created during transform phase
- };
-}
-function isComponent(tag, props, context) {
- const options = context.options;
- if (options.isCustomElement(tag)) {
- return false;
- }
- if (tag === 'component' ||
- /^[A-Z]/.test(tag) ||
- isCoreComponent(tag) ||
- (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||
- (options.isNativeTag && !options.isNativeTag(tag))) {
- return true;
- }
- // at this point the tag should be a native tag, but check for potential "is"
- // casting
- for (let i = 0; i < props.length; i++) {
- const p = props[i];
- if (p.type === 6 /* ATTRIBUTE */) {
- if (p.name === 'is' && p.value) {
- if (p.value.content.startsWith('vue:')) {
- return true;
- }
- else if (checkCompatEnabled("COMPILER_IS_ON_ELEMENT" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {
- return true;
- }
- }
- }
- else {
- // directive
- // v-is (TODO Deprecate)
- if (p.name === 'is') {
- return true;
- }
- else if (
- // :is on plain element - only treat as component in compat mode
- p.name === 'bind' &&
- isBindKey(p.arg, 'is') &&
- true &&
- checkCompatEnabled("COMPILER_IS_ON_ELEMENT" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {
- return true;
- }
- }
- }
-}
-function parseAttributes(context, type) {
- const props = [];
- const attributeNames = new Set();
- while (context.source.length > 0 &&
- !startsWith(context.source, '>') &&
- !startsWith(context.source, '/>')) {
- if (startsWith(context.source, '/')) {
- emitError(context, 22 /* UNEXPECTED_SOLIDUS_IN_TAG */);
- advanceBy(context, 1);
- advanceSpaces(context);
- continue;
- }
- if (type === 1 /* End */) {
- emitError(context, 3 /* END_TAG_WITH_ATTRIBUTES */);
- }
- const attr = parseAttribute(context, attributeNames);
- // Trim whitespace between class
- // https://github.com/vuejs/vue-next/issues/4251
- if (attr.type === 6 /* ATTRIBUTE */ &&
- attr.value &&
- attr.name === 'class') {
- attr.value.content = attr.value.content.replace(/\s+/g, ' ').trim();
- }
- if (type === 0 /* Start */) {
- props.push(attr);
- }
- if (/^[^\t\r\n\f />]/.test(context.source)) {
- emitError(context, 15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);
- }
- advanceSpaces(context);
- }
- return props;
-}
-function parseAttribute(context, nameSet) {
- // Name.
- const start = getCursor(context);
- const match = /^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(context.source);
- const name = match[0];
- if (nameSet.has(name)) {
- emitError(context, 2 /* DUPLICATE_ATTRIBUTE */);
- }
- nameSet.add(name);
- if (name[0] === '=') {
- emitError(context, 19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);
- }
- {
- const pattern = /["'<]/g;
- let m;
- while ((m = pattern.exec(name))) {
- emitError(context, 17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);
- }
- }
- advanceBy(context, name.length);
- // Value
- let value = undefined;
- if (/^[\t\r\n\f ]*=/.test(context.source)) {
- advanceSpaces(context);
- advanceBy(context, 1);
- advanceSpaces(context);
- value = parseAttributeValue(context);
- if (!value) {
- emitError(context, 13 /* MISSING_ATTRIBUTE_VALUE */);
- }
- }
- const loc = getSelection(context, start);
- if (!context.inVPre && /^(v-[A-Za-z0-9-]|:|\.|@|#)/.test(name)) {
- const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\.|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(name);
- let isPropShorthand = startsWith(name, '.');
- let dirName = match[1] ||
- (isPropShorthand || startsWith(name, ':')
- ? 'bind'
- : startsWith(name, '@')
- ? 'on'
- : 'slot');
- let arg;
- if (match[2]) {
- const isSlot = dirName === 'slot';
- const startOffset = name.lastIndexOf(match[2]);
- const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));
- let content = match[2];
- let isStatic = true;
- if (content.startsWith('[')) {
- isStatic = false;
- if (!content.endsWith(']')) {
- emitError(context, 27 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);
- content = content.substr(1);
- }
- else {
- content = content.substr(1, content.length - 2);
- }
- }
- else if (isSlot) {
- // #1241 special case for v-slot: vuetify relies extensively on slot
- // names containing dots. v-slot doesn't have any modifiers and Vue 2.x
- // supports such usage so we are keeping it consistent with 2.x.
- content += match[3] || '';
- }
- arg = {
- type: 4 /* SIMPLE_EXPRESSION */,
- content,
- isStatic,
- constType: isStatic
- ? 3 /* CAN_STRINGIFY */
- : 0 /* NOT_CONSTANT */,
- loc
- };
- }
- if (value && value.isQuoted) {
- const valueLoc = value.loc;
- valueLoc.start.offset++;
- valueLoc.start.column++;
- valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);
- valueLoc.source = valueLoc.source.slice(1, -1);
- }
- const modifiers = match[3] ? match[3].substr(1).split('.') : [];
- if (isPropShorthand)
- modifiers.push('prop');
- // 2.x compat v-bind:foo.sync -> v-model:foo
- if (dirName === 'bind' && arg) {
- if (modifiers.includes('sync') &&
- checkCompatEnabled("COMPILER_V_BIND_SYNC" /* COMPILER_V_BIND_SYNC */, context, loc, arg.loc.source)) {
- dirName = 'model';
- modifiers.splice(modifiers.indexOf('sync'), 1);
- }
- if ((process.env.NODE_ENV !== 'production') && modifiers.includes('prop')) {
- checkCompatEnabled("COMPILER_V_BIND_PROP" /* COMPILER_V_BIND_PROP */, context, loc);
- }
- }
- return {
- type: 7 /* DIRECTIVE */,
- name: dirName,
- exp: value && {
- type: 4 /* SIMPLE_EXPRESSION */,
- content: value.content,
- isStatic: false,
- // Treat as non-constant by default. This can be potentially set to
- // other values by `transformExpression` to make it eligible for hoisting.
- constType: 0 /* NOT_CONSTANT */,
- loc: value.loc
- },
- arg,
- modifiers,
- loc
- };
- }
- // missing directive name or illegal directive name
- if (!context.inVPre && startsWith(name, 'v-')) {
- emitError(context, 26 /* X_MISSING_DIRECTIVE_NAME */);
- }
- return {
- type: 6 /* ATTRIBUTE */,
- name,
- value: value && {
- type: 2 /* TEXT */,
- content: value.content,
- loc: value.loc
- },
- loc
- };
-}
-function parseAttributeValue(context) {
- const start = getCursor(context);
- let content;
- const quote = context.source[0];
- const isQuoted = quote === `"` || quote === `'`;
- if (isQuoted) {
- // Quoted value.
- advanceBy(context, 1);
- const endIndex = context.source.indexOf(quote);
- if (endIndex === -1) {
- content = parseTextData(context, context.source.length, 4 /* ATTRIBUTE_VALUE */);
- }
- else {
- content = parseTextData(context, endIndex, 4 /* ATTRIBUTE_VALUE */);
- advanceBy(context, 1);
- }
- }
- else {
- // Unquoted
- const match = /^[^\t\r\n\f >]+/.exec(context.source);
- if (!match) {
- return undefined;
- }
- const unexpectedChars = /["'<=`]/g;
- let m;
- while ((m = unexpectedChars.exec(match[0]))) {
- emitError(context, 18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);
- }
- content = parseTextData(context, match[0].length, 4 /* ATTRIBUTE_VALUE */);
- }
- return { content, isQuoted, loc: getSelection(context, start) };
-}
-function parseInterpolation(context, mode) {
- const [open, close] = context.options.delimiters;
- const closeIndex = context.source.indexOf(close, open.length);
- if (closeIndex === -1) {
- emitError(context, 25 /* X_MISSING_INTERPOLATION_END */);
- return undefined;
- }
- const start = getCursor(context);
- advanceBy(context, open.length);
- const innerStart = getCursor(context);
- const innerEnd = getCursor(context);
- const rawContentLength = closeIndex - open.length;
- const rawContent = context.source.slice(0, rawContentLength);
- const preTrimContent = parseTextData(context, rawContentLength, mode);
- const content = preTrimContent.trim();
- const startOffset = preTrimContent.indexOf(content);
- if (startOffset > 0) {
- advancePositionWithMutation(innerStart, rawContent, startOffset);
- }
- const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);
- advancePositionWithMutation(innerEnd, rawContent, endOffset);
- advanceBy(context, close.length);
- return {
- type: 5 /* INTERPOLATION */,
- content: {
- type: 4 /* SIMPLE_EXPRESSION */,
- isStatic: false,
- // Set `isConstant` to false by default and will decide in transformExpression
- constType: 0 /* NOT_CONSTANT */,
- content,
- loc: getSelection(context, innerStart, innerEnd)
- },
- loc: getSelection(context, start)
- };
-}
-function parseText(context, mode) {
- const endTokens = mode === 3 /* CDATA */ ? [']]>'] : ['<', context.options.delimiters[0]];
- let endIndex = context.source.length;
- for (let i = 0; i < endTokens.length; i++) {
- const index = context.source.indexOf(endTokens[i], 1);
- if (index !== -1 && endIndex > index) {
- endIndex = index;
- }
- }
- const start = getCursor(context);
- const content = parseTextData(context, endIndex, mode);
- return {
- type: 2 /* TEXT */,
- content,
- loc: getSelection(context, start)
- };
-}
-/**
- * Get text data with a given length from the current location.
- * This translates HTML entities in the text data.
- */
-function parseTextData(context, length, mode) {
- const rawText = context.source.slice(0, length);
- advanceBy(context, length);
- if (mode === 2 /* RAWTEXT */ ||
- mode === 3 /* CDATA */ ||
- rawText.indexOf('&') === -1) {
- return rawText;
- }
- else {
- // DATA or RCDATA containing "&"". Entity decoding required.
- return context.options.decodeEntities(rawText, mode === 4 /* ATTRIBUTE_VALUE */);
- }
-}
-function getCursor(context) {
- const { column, line, offset } = context;
- return { column, line, offset };
-}
-function getSelection(context, start, end) {
- end = end || getCursor(context);
- return {
- start,
- end,
- source: context.originalSource.slice(start.offset, end.offset)
- };
-}
-function last(xs) {
- return xs[xs.length - 1];
-}
-function startsWith(source, searchString) {
- return source.startsWith(searchString);
-}
-function advanceBy(context, numberOfCharacters) {
- const { source } = context;
- advancePositionWithMutation(context, source, numberOfCharacters);
- context.source = source.slice(numberOfCharacters);
-}
-function advanceSpaces(context) {
- const match = /^[\t\r\n\f ]+/.exec(context.source);
- if (match) {
- advanceBy(context, match[0].length);
- }
-}
-function getNewPosition(context, start, numberOfCharacters) {
- return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);
-}
-function emitError(context, code, offset, loc = getCursor(context)) {
- if (offset) {
- loc.offset += offset;
- loc.column += offset;
- }
- context.options.onError(createCompilerError(code, {
- start: loc,
- end: loc,
- source: ''
- }));
-}
-function isEnd(context, mode, ancestors) {
- const s = context.source;
- switch (mode) {
- case 0 /* DATA */:
- if (startsWith(s, '</')) {
- // TODO: probably bad performance
- for (let i = ancestors.length - 1; i >= 0; --i) {
- if (startsWithEndTagOpen(s, ancestors[i].tag)) {
- return true;
- }
- }
- }
- break;
- case 1 /* RCDATA */:
- case 2 /* RAWTEXT */: {
- const parent = last(ancestors);
- if (parent && startsWithEndTagOpen(s, parent.tag)) {
- return true;
- }
- break;
- }
- case 3 /* CDATA */:
- if (startsWith(s, ']]>')) {
- return true;
- }
- break;
- }
- return !s;
-}
-function startsWithEndTagOpen(source, tag) {
- return (startsWith(source, '</') &&
- source.substr(2, tag.length).toLowerCase() === tag.toLowerCase() &&
- /[\t\r\n\f />]/.test(source[2 + tag.length] || '>'));
-}
-
-function hoistStatic(root, context) {
- walk(root, context,
- // Root node is unfortunately non-hoistable due to potential parent
- // fallthrough attributes.
- isSingleElementRoot(root, root.children[0]));
-}
-function isSingleElementRoot(root, child) {
- const { children } = root;
- return (children.length === 1 &&
- child.type === 1 /* ELEMENT */ &&
- !isSlotOutlet(child));
-}
-function walk(node, context, doNotHoistNode = false) {
- // Some transforms, e.g. transformAssetUrls from @vue/compiler-sfc, replaces
- // static bindings with expressions. These expressions are guaranteed to be
- // constant so they are still eligible for hoisting, but they are only
- // available at runtime and therefore cannot be evaluated ahead of time.
- // This is only a concern for pre-stringification (via transformHoist by
- // @vue/compiler-dom), but doing it here allows us to perform only one full
- // walk of the AST and allow `stringifyStatic` to stop walking as soon as its
- // stringification threshold is met.
- let canStringify = true;
- const { children } = node;
- const originalCount = children.length;
- let hoistedCount = 0;
- for (let i = 0; i < children.length; i++) {
- const child = children[i];
- // only plain elements & text calls are eligible for hoisting.
- if (child.type === 1 /* ELEMENT */ &&
- child.tagType === 0 /* ELEMENT */) {
- const constantType = doNotHoistNode
- ? 0 /* NOT_CONSTANT */
- : getConstantType(child, context);
- if (constantType > 0 /* NOT_CONSTANT */) {
- if (constantType < 3 /* CAN_STRINGIFY */) {
- canStringify = false;
- }
- if (constantType >= 2 /* CAN_HOIST */) {
- child.codegenNode.patchFlag =
- -1 /* HOISTED */ + ((process.env.NODE_ENV !== 'production') ? ` /* HOISTED */` : ``);
- child.codegenNode = context.hoist(child.codegenNode);
- hoistedCount++;
- continue;
- }
- }
- else {
- // node may contain dynamic children, but its props may be eligible for
- // hoisting.
- const codegenNode = child.codegenNode;
- if (codegenNode.type === 13 /* VNODE_CALL */) {
- const flag = getPatchFlag(codegenNode);
- if ((!flag ||
- flag === 512 /* NEED_PATCH */ ||
- flag === 1 /* TEXT */) &&
- getGeneratedPropsConstantType(child, context) >=
- 2 /* CAN_HOIST */) {
- const props = getNodeProps(child);
- if (props) {
- codegenNode.props = context.hoist(props);
- }
- }
- if (codegenNode.dynamicProps) {
- codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);
- }
- }
- }
- }
- else if (child.type === 12 /* TEXT_CALL */) {
- const contentType = getConstantType(child.content, context);
- if (contentType > 0) {
- if (contentType < 3 /* CAN_STRINGIFY */) {
- canStringify = false;
- }
- if (contentType >= 2 /* CAN_HOIST */) {
- child.codegenNode = context.hoist(child.codegenNode);
- hoistedCount++;
- }
- }
- }
- // walk further
- if (child.type === 1 /* ELEMENT */) {
- const isComponent = child.tagType === 1 /* COMPONENT */;
- if (isComponent) {
- context.scopes.vSlot++;
- }
- walk(child, context);
- if (isComponent) {
- context.scopes.vSlot--;
- }
- }
- else if (child.type === 11 /* FOR */) {
- // Do not hoist v-for single child because it has to be a block
- walk(child, context, child.children.length === 1);
- }
- else if (child.type === 9 /* IF */) {
- for (let i = 0; i < child.branches.length; i++) {
- // Do not hoist v-if single child because it has to be a block
- walk(child.branches[i], context, child.branches[i].children.length === 1);
- }
- }
- }
- if (canStringify && hoistedCount && context.transformHoist) {
- context.transformHoist(children, context, node);
- }
- // all children were hoisted - the entire children array is hoistable.
- if (hoistedCount &&
- hoistedCount === originalCount &&
- node.type === 1 /* ELEMENT */ &&
- node.tagType === 0 /* ELEMENT */ &&
- node.codegenNode &&
- node.codegenNode.type === 13 /* VNODE_CALL */ &&
- isArray(node.codegenNode.children)) {
- node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));
- }
-}
-function getConstantType(node, context) {
- const { constantCache } = context;
- switch (node.type) {
- case 1 /* ELEMENT */:
- if (node.tagType !== 0 /* ELEMENT */) {
- return 0 /* NOT_CONSTANT */;
- }
- const cached = constantCache.get(node);
- if (cached !== undefined) {
- return cached;
- }
- const codegenNode = node.codegenNode;
- if (codegenNode.type !== 13 /* VNODE_CALL */) {
- return 0 /* NOT_CONSTANT */;
- }
- const flag = getPatchFlag(codegenNode);
- if (!flag) {
- let returnType = 3 /* CAN_STRINGIFY */;
- // Element itself has no patch flag. However we still need to check:
- // 1. Even for a node with no patch flag, it is possible for it to contain
- // non-hoistable expressions that refers to scope variables, e.g. compiler
- // injected keys or cached event handlers. Therefore we need to always
- // check the codegenNode's props to be sure.
- const generatedPropsType = getGeneratedPropsConstantType(node, context);
- if (generatedPropsType === 0 /* NOT_CONSTANT */) {
- constantCache.set(node, 0 /* NOT_CONSTANT */);
- return 0 /* NOT_CONSTANT */;
- }
- if (generatedPropsType < returnType) {
- returnType = generatedPropsType;
- }
- // 2. its children.
- for (let i = 0; i < node.children.length; i++) {
- const childType = getConstantType(node.children[i], context);
- if (childType === 0 /* NOT_CONSTANT */) {
- constantCache.set(node, 0 /* NOT_CONSTANT */);
- return 0 /* NOT_CONSTANT */;
- }
- if (childType < returnType) {
- returnType = childType;
- }
- }
- // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0
- // type, check if any of the props can cause the type to be lowered
- // we can skip can_patch because it's guaranteed by the absence of a
- // patchFlag.
- if (returnType > 1 /* CAN_SKIP_PATCH */) {
- for (let i = 0; i < node.props.length; i++) {
- const p = node.props[i];
- if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind' && p.exp) {
- const expType = getConstantType(p.exp, context);
- if (expType === 0 /* NOT_CONSTANT */) {
- constantCache.set(node, 0 /* NOT_CONSTANT */);
- return 0 /* NOT_CONSTANT */;
- }
- if (expType < returnType) {
- returnType = expType;
- }
- }
- }
- }
- // only svg/foreignObject could be block here, however if they are
- // static then they don't need to be blocks since there will be no
- // nested updates.
- if (codegenNode.isBlock) {
- context.removeHelper(OPEN_BLOCK);
- context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));
- codegenNode.isBlock = false;
- context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));
- }
- constantCache.set(node, returnType);
- return returnType;
- }
- else {
- constantCache.set(node, 0 /* NOT_CONSTANT */);
- return 0 /* NOT_CONSTANT */;
- }
- case 2 /* TEXT */:
- case 3 /* COMMENT */:
- return 3 /* CAN_STRINGIFY */;
- case 9 /* IF */:
- case 11 /* FOR */:
- case 10 /* IF_BRANCH */:
- return 0 /* NOT_CONSTANT */;
- case 5 /* INTERPOLATION */:
- case 12 /* TEXT_CALL */:
- return getConstantType(node.content, context);
- case 4 /* SIMPLE_EXPRESSION */:
- return node.constType;
- case 8 /* COMPOUND_EXPRESSION */:
- let returnType = 3 /* CAN_STRINGIFY */;
- for (let i = 0; i < node.children.length; i++) {
- const child = node.children[i];
- if (isString(child) || isSymbol(child)) {
- continue;
- }
- const childType = getConstantType(child, context);
- if (childType === 0 /* NOT_CONSTANT */) {
- return 0 /* NOT_CONSTANT */;
- }
- else if (childType < returnType) {
- returnType = childType;
- }
- }
- return returnType;
- default:
- if ((process.env.NODE_ENV !== 'production')) ;
- return 0 /* NOT_CONSTANT */;
- }
-}
-const allowHoistedHelperSet = new Set([
- NORMALIZE_CLASS,
- NORMALIZE_STYLE,
- NORMALIZE_PROPS,
- GUARD_REACTIVE_PROPS
-]);
-function getConstantTypeOfHelperCall(value, context) {
- if (value.type === 14 /* JS_CALL_EXPRESSION */ &&
- !isString(value.callee) &&
- allowHoistedHelperSet.has(value.callee)) {
- const arg = value.arguments[0];
- if (arg.type === 4 /* SIMPLE_EXPRESSION */) {
- return getConstantType(arg, context);
- }
- else if (arg.type === 14 /* JS_CALL_EXPRESSION */) {
- // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`
- return getConstantTypeOfHelperCall(arg, context);
- }
- }
- return 0 /* NOT_CONSTANT */;
-}
-function getGeneratedPropsConstantType(node, context) {
- let returnType = 3 /* CAN_STRINGIFY */;
- const props = getNodeProps(node);
- if (props && props.type === 15 /* JS_OBJECT_EXPRESSION */) {
- const { properties } = props;
- for (let i = 0; i < properties.length; i++) {
- const { key, value } = properties[i];
- const keyType = getConstantType(key, context);
- if (keyType === 0 /* NOT_CONSTANT */) {
- return keyType;
- }
- if (keyType < returnType) {
- returnType = keyType;
- }
- let valueType;
- if (value.type === 4 /* SIMPLE_EXPRESSION */) {
- valueType = getConstantType(value, context);
- }
- else if (value.type === 14 /* JS_CALL_EXPRESSION */) {
- // some helper calls can be hoisted,
- // such as the `normalizeProps` generated by the compiler for pre-normalize class,
- // in this case we need to respect the ConstantType of the helper's argments
- valueType = getConstantTypeOfHelperCall(value, context);
- }
- else {
- valueType = 0 /* NOT_CONSTANT */;
- }
- if (valueType === 0 /* NOT_CONSTANT */) {
- return valueType;
- }
- if (valueType < returnType) {
- returnType = valueType;
- }
- }
- }
- return returnType;
-}
-function getNodeProps(node) {
- const codegenNode = node.codegenNode;
- if (codegenNode.type === 13 /* VNODE_CALL */) {
- return codegenNode.props;
- }
-}
-function getPatchFlag(node) {
- const flag = node.patchFlag;
- return flag ? parseInt(flag, 10) : undefined;
-}
-
-function createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = NOOP, isCustomElement = NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {
- const nameMatch = filename.replace(/\?.*$/, '').match(/([^/\\]+)\.\w+$/);
- const context = {
- // options
- selfName: nameMatch && capitalize(camelize$1(nameMatch[1])),
- prefixIdentifiers,
- hoistStatic,
- cacheHandlers,
- nodeTransforms,
- directiveTransforms,
- transformHoist,
- isBuiltInComponent,
- isCustomElement,
- expressionPlugins,
- scopeId,
- slotted,
- ssr,
- inSSR,
- ssrCssVars,
- bindingMetadata,
- inline,
- isTS,
- onError,
- onWarn,
- compatConfig,
- // state
- root,
- helpers: new Map(),
- components: new Set(),
- directives: new Set(),
- hoists: [],
- imports: [],
- constantCache: new Map(),
- temps: 0,
- cached: 0,
- identifiers: Object.create(null),
- scopes: {
- vFor: 0,
- vSlot: 0,
- vPre: 0,
- vOnce: 0
- },
- parent: null,
- currentNode: root,
- childIndex: 0,
- inVOnce: false,
- // methods
- helper(name) {
- const count = context.helpers.get(name) || 0;
- context.helpers.set(name, count + 1);
- return name;
- },
- removeHelper(name) {
- const count = context.helpers.get(name);
- if (count) {
- const currentCount = count - 1;
- if (!currentCount) {
- context.helpers.delete(name);
- }
- else {
- context.helpers.set(name, currentCount);
- }
- }
- },
- helperString(name) {
- return `_${helperNameMap[context.helper(name)]}`;
- },
- replaceNode(node) {
- /* istanbul ignore if */
- if ((process.env.NODE_ENV !== 'production')) {
- if (!context.currentNode) {
- throw new Error(`Node being replaced is already removed.`);
- }
- if (!context.parent) {
- throw new Error(`Cannot replace root node.`);
- }
- }
- context.parent.children[context.childIndex] = context.currentNode = node;
- },
- removeNode(node) {
- if ((process.env.NODE_ENV !== 'production') && !context.parent) {
- throw new Error(`Cannot remove root node.`);
- }
- const list = context.parent.children;
- const removalIndex = node
- ? list.indexOf(node)
- : context.currentNode
- ? context.childIndex
- : -1;
- /* istanbul ignore if */
- if ((process.env.NODE_ENV !== 'production') && removalIndex < 0) {
- throw new Error(`node being removed is not a child of current parent`);
- }
- if (!node || node === context.currentNode) {
- // current node removed
- context.currentNode = null;
- context.onNodeRemoved();
- }
- else {
- // sibling node removed
- if (context.childIndex > removalIndex) {
- context.childIndex--;
- context.onNodeRemoved();
- }
- }
- context.parent.children.splice(removalIndex, 1);
- },
- onNodeRemoved: () => { },
- addIdentifiers(exp) {
- },
- removeIdentifiers(exp) {
- },
- hoist(exp) {
- if (isString(exp))
- exp = createSimpleExpression(exp);
- context.hoists.push(exp);
- const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* CAN_HOIST */);
- identifier.hoisted = exp;
- return identifier;
- },
- cache(exp, isVNode = false) {
- return createCacheExpression(context.cached++, exp, isVNode);
- }
- };
- {
- context.filters = new Set();
- }
- return context;
-}
-function transform(root, options) {
- const context = createTransformContext(root, options);
- traverseNode(root, context);
- if (options.hoistStatic) {
- hoistStatic(root, context);
- }
- if (!options.ssr) {
- createRootCodegen(root, context);
- }
- // finalize meta information
- root.helpers = [...context.helpers.keys()];
- root.components = [...context.components];
- root.directives = [...context.directives];
- root.imports = context.imports;
- root.hoists = context.hoists;
- root.temps = context.temps;
- root.cached = context.cached;
- {
- root.filters = [...context.filters];
- }
-}
-function createRootCodegen(root, context) {
- const { helper } = context;
- const { children } = root;
- if (children.length === 1) {
- const child = children[0];
- // if the single child is an element, turn it into a block.
- if (isSingleElementRoot(root, child) && child.codegenNode) {
- // single element root is never hoisted so codegenNode will never be
- // SimpleExpressionNode
- const codegenNode = child.codegenNode;
- if (codegenNode.type === 13 /* VNODE_CALL */) {
- makeBlock(codegenNode, context);
- }
- root.codegenNode = codegenNode;
- }
- else {
- // - single <slot/>, IfNode, ForNode: already blocks.
- // - single text node: always patched.
- // root codegen falls through via genNode()
- root.codegenNode = child;
- }
- }
- else if (children.length > 1) {
- // root has multiple nodes - return a fragment block.
- let patchFlag = 64 /* STABLE_FRAGMENT */;
- let patchFlagText = PatchFlagNames[64 /* STABLE_FRAGMENT */];
- // check if the fragment actually contains a single valid child with
- // the rest being comments
- if ((process.env.NODE_ENV !== 'production') &&
- children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {
- patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;
- patchFlagText += `, ${PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;
- }
- root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${patchFlagText} */` : ``), undefined, undefined, true, undefined, false /* isComponent */);
- }
- else ;
-}
-function traverseChildren(parent, context) {
- let i = 0;
- const nodeRemoved = () => {
- i--;
- };
- for (; i < parent.children.length; i++) {
- const child = parent.children[i];
- if (isString(child))
- continue;
- context.parent = parent;
- context.childIndex = i;
- context.onNodeRemoved = nodeRemoved;
- traverseNode(child, context);
- }
-}
-function traverseNode(node, context) {
- context.currentNode = node;
- // apply transform plugins
- const { nodeTransforms } = context;
- const exitFns = [];
- for (let i = 0; i < nodeTransforms.length; i++) {
- const onExit = nodeTransforms[i](node, context);
- if (onExit) {
- if (isArray(onExit)) {
- exitFns.push(...onExit);
- }
- else {
- exitFns.push(onExit);
- }
- }
- if (!context.currentNode) {
- // node was removed
- return;
- }
- else {
- // node may have been replaced
- node = context.currentNode;
- }
- }
- switch (node.type) {
- case 3 /* COMMENT */:
- if (!context.ssr) {
- // inject import for the Comment symbol, which is needed for creating
- // comment nodes with `createVNode`
- context.helper(CREATE_COMMENT);
- }
- break;
- case 5 /* INTERPOLATION */:
- // no need to traverse, but we need to inject toString helper
- if (!context.ssr) {
- context.helper(TO_DISPLAY_STRING);
- }
- break;
- // for container types, further traverse downwards
- case 9 /* IF */:
- for (let i = 0; i < node.branches.length; i++) {
- traverseNode(node.branches[i], context);
- }
- break;
- case 10 /* IF_BRANCH */:
- case 11 /* FOR */:
- case 1 /* ELEMENT */:
- case 0 /* ROOT */:
- traverseChildren(node, context);
- break;
- }
- // exit transforms
- context.currentNode = node;
- let i = exitFns.length;
- while (i--) {
- exitFns[i]();
- }
-}
-function createStructuralDirectiveTransform(name, fn) {
- const matches = isString(name)
- ? (n) => n === name
- : (n) => name.test(n);
- return (node, context) => {
- if (node.type === 1 /* ELEMENT */) {
- const { props } = node;
- // structural directive transforms are not concerned with slots
- // as they are handled separately in vSlot.ts
- if (node.tagType === 3 /* TEMPLATE */ && props.some(isVSlot)) {
- return;
- }
- const exitFns = [];
- for (let i = 0; i < props.length; i++) {
- const prop = props[i];
- if (prop.type === 7 /* DIRECTIVE */ && matches(prop.name)) {
- // structural directives are removed to avoid infinite recursion
- // also we remove them *before* applying so that it can further
- // traverse itself in case it moves the node around
- props.splice(i, 1);
- i--;
- const onExit = fn(node, prop, context);
- if (onExit)
- exitFns.push(onExit);
- }
- }
- return exitFns;
- }
- };
-}
-
-const PURE_ANNOTATION = `/*#__PURE__*/`;
-function createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssrRuntimeModuleName = 'vue/server-renderer', ssr = false, isTS = false, inSSR = false }) {
- const context = {
- mode,
- prefixIdentifiers,
- sourceMap,
- filename,
- scopeId,
- optimizeImports,
- runtimeGlobalName,
- runtimeModuleName,
- ssrRuntimeModuleName,
- ssr,
- isTS,
- inSSR,
- source: ast.loc.source,
- code: ``,
- column: 1,
- line: 1,
- offset: 0,
- indentLevel: 0,
- pure: false,
- map: undefined,
- helper(key) {
- return `_${helperNameMap[key]}`;
- },
- push(code, node) {
- context.code += code;
- },
- indent() {
- newline(++context.indentLevel);
- },
- deindent(withoutNewLine = false) {
- if (withoutNewLine) {
- --context.indentLevel;
- }
- else {
- newline(--context.indentLevel);
- }
- },
- newline() {
- newline(context.indentLevel);
- }
- };
- function newline(n) {
- context.push('\n' + ` `.repeat(n));
- }
- return context;
-}
-function generate(ast, options = {}) {
- const context = createCodegenContext(ast, options);
- if (options.onContextCreated)
- options.onContextCreated(context);
- const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;
- const hasHelpers = ast.helpers.length > 0;
- const useWithBlock = !prefixIdentifiers && mode !== 'module';
- // preambles
- // in setup() inline mode, the preamble is generated in a sub context
- // and returned separately.
- const preambleContext = context;
- {
- genFunctionPreamble(ast, preambleContext);
- }
- // enter render function
- const functionName = ssr ? `ssrRender` : `render`;
- const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];
- const signature = args.join(', ');
- {
- push(`function ${functionName}(${signature}) {`);
- }
- indent();
- if (useWithBlock) {
- push(`with (_ctx) {`);
- indent();
- // function mode const declarations should be inside with block
- // also they should be renamed to avoid collision with user properties
- if (hasHelpers) {
- push(`const { ${ast.helpers
- .map(s => `${helperNameMap[s]}: _${helperNameMap[s]}`)
- .join(', ')} } = _Vue`);
- push(`\n`);
- newline();
- }
- }
- // generate asset resolution statements
- if (ast.components.length) {
- genAssets(ast.components, 'component', context);
- if (ast.directives.length || ast.temps > 0) {
- newline();
- }
- }
- if (ast.directives.length) {
- genAssets(ast.directives, 'directive', context);
- if (ast.temps > 0) {
- newline();
- }
- }
- if (ast.filters && ast.filters.length) {
- newline();
- genAssets(ast.filters, 'filter', context);
- newline();
- }
- if (ast.temps > 0) {
- push(`let `);
- for (let i = 0; i < ast.temps; i++) {
- push(`${i > 0 ? `, ` : ``}_temp${i}`);
- }
- }
- if (ast.components.length || ast.directives.length || ast.temps) {
- push(`\n`);
- newline();
- }
- // generate the VNode tree expression
- if (!ssr) {
- push(`return `);
- }
- if (ast.codegenNode) {
- genNode(ast.codegenNode, context);
- }
- else {
- push(`null`);
- }
- if (useWithBlock) {
- deindent();
- push(`}`);
- }
- deindent();
- push(`}`);
- return {
- ast,
- code: context.code,
- preamble: ``,
- // SourceMapGenerator does have toJSON() method but it's not in the types
- map: context.map ? context.map.toJSON() : undefined
- };
-}
-function genFunctionPreamble(ast, context) {
- const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName, ssrRuntimeModuleName } = context;
- const VueBinding = runtimeGlobalName;
- const aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;
- // Generate const declaration for helpers
- // In prefix mode, we place the const declaration at top so it's done
- // only once; But if we not prefixing, we place the declaration inside the
- // with block so it doesn't incur the `in` check cost for every helper access.
- if (ast.helpers.length > 0) {
- {
- // "with" mode.
- // save Vue in a separate variable to avoid collision
- push(`const _Vue = ${VueBinding}\n`);
- // in "with" mode, helpers are declared inside the with block to avoid
- // has check cost, but hoists are lifted out of the function - we need
- // to provide the helper here.
- if (ast.hoists.length) {
- const staticHelpers = [
- CREATE_VNODE,
- CREATE_ELEMENT_VNODE,
- CREATE_COMMENT,
- CREATE_TEXT,
- CREATE_STATIC
- ]
- .filter(helper => ast.helpers.includes(helper))
- .map(aliasHelper)
- .join(', ');
- push(`const { ${staticHelpers} } = _Vue\n`);
- }
- }
- }
- genHoists(ast.hoists, context);
- newline();
- push(`return `);
-}
-function genAssets(assets, type, { helper, push, newline, isTS }) {
- const resolver = helper(type === 'filter'
- ? RESOLVE_FILTER
- : type === 'component'
- ? RESOLVE_COMPONENT
- : RESOLVE_DIRECTIVE);
- for (let i = 0; i < assets.length; i++) {
- let id = assets[i];
- // potential component implicit self-reference inferred from SFC filename
- const maybeSelfReference = id.endsWith('__self');
- if (maybeSelfReference) {
- id = id.slice(0, -6);
- }
- push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);
- if (i < assets.length - 1) {
- newline();
- }
- }
-}
-function genHoists(hoists, context) {
- if (!hoists.length) {
- return;
- }
- context.pure = true;
- const { push, newline, helper, scopeId, mode } = context;
- newline();
- for (let i = 0; i < hoists.length; i++) {
- const exp = hoists[i];
- if (exp) {
- push(`const _hoisted_${i + 1} = ${``}`);
- genNode(exp, context);
- newline();
- }
- }
- context.pure = false;
-}
-function isText$1(n) {
- return (isString(n) ||
- n.type === 4 /* SIMPLE_EXPRESSION */ ||
- n.type === 2 /* TEXT */ ||
- n.type === 5 /* INTERPOLATION */ ||
- n.type === 8 /* COMPOUND_EXPRESSION */);
-}
-function genNodeListAsArray(nodes, context) {
- const multilines = nodes.length > 3 ||
- (((process.env.NODE_ENV !== 'production')) && nodes.some(n => isArray(n) || !isText$1(n)));
- context.push(`[`);
- multilines && context.indent();
- genNodeList(nodes, context, multilines);
- multilines && context.deindent();
- context.push(`]`);
-}
-function genNodeList(nodes, context, multilines = false, comma = true) {
- const { push, newline } = context;
- for (let i = 0; i < nodes.length; i++) {
- const node = nodes[i];
- if (isString(node)) {
- push(node);
- }
- else if (isArray(node)) {
- genNodeListAsArray(node, context);
- }
- else {
- genNode(node, context);
- }
- if (i < nodes.length - 1) {
- if (multilines) {
- comma && push(',');
- newline();
- }
- else {
- comma && push(', ');
- }
- }
- }
-}
-function genNode(node, context) {
- if (isString(node)) {
- context.push(node);
- return;
- }
- if (isSymbol(node)) {
- context.push(context.helper(node));
- return;
- }
- switch (node.type) {
- case 1 /* ELEMENT */:
- case 9 /* IF */:
- case 11 /* FOR */:
- (process.env.NODE_ENV !== 'production') &&
- assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +
- `Apply appropriate transforms first.`);
- genNode(node.codegenNode, context);
- break;
- case 2 /* TEXT */:
- genText(node, context);
- break;
- case 4 /* SIMPLE_EXPRESSION */:
- genExpression(node, context);
- break;
- case 5 /* INTERPOLATION */:
- genInterpolation(node, context);
- break;
- case 12 /* TEXT_CALL */:
- genNode(node.codegenNode, context);
- break;
- case 8 /* COMPOUND_EXPRESSION */:
- genCompoundExpression(node, context);
- break;
- case 3 /* COMMENT */:
- genComment(node, context);
- break;
- case 13 /* VNODE_CALL */:
- genVNodeCall(node, context);
- break;
- case 14 /* JS_CALL_EXPRESSION */:
- genCallExpression(node, context);
- break;
- case 15 /* JS_OBJECT_EXPRESSION */:
- genObjectExpression(node, context);
- break;
- case 17 /* JS_ARRAY_EXPRESSION */:
- genArrayExpression(node, context);
- break;
- case 18 /* JS_FUNCTION_EXPRESSION */:
- genFunctionExpression(node, context);
- break;
- case 19 /* JS_CONDITIONAL_EXPRESSION */:
- genConditionalExpression(node, context);
- break;
- case 20 /* JS_CACHE_EXPRESSION */:
- genCacheExpression(node, context);
- break;
- case 21 /* JS_BLOCK_STATEMENT */:
- genNodeList(node.body, context, true, false);
- break;
- // SSR only types
- case 22 /* JS_TEMPLATE_LITERAL */:
- break;
- case 23 /* JS_IF_STATEMENT */:
- break;
- case 24 /* JS_ASSIGNMENT_EXPRESSION */:
- break;
- case 25 /* JS_SEQUENCE_EXPRESSION */:
- break;
- case 26 /* JS_RETURN_STATEMENT */:
- break;
- /* istanbul ignore next */
- case 10 /* IF_BRANCH */:
- // noop
- break;
- default:
- if ((process.env.NODE_ENV !== 'production')) {
- assert(false, `unhandled codegen node type: ${node.type}`);
- // make sure we exhaust all possible types
- const exhaustiveCheck = node;
- return exhaustiveCheck;
- }
- }
-}
-function genText(node, context) {
- context.push(JSON.stringify(node.content), node);
-}
-function genExpression(node, context) {
- const { content, isStatic } = node;
- context.push(isStatic ? JSON.stringify(content) : content, node);
-}
-function genInterpolation(node, context) {
- const { push, helper, pure } = context;
- if (pure)
- push(PURE_ANNOTATION);
- push(`${helper(TO_DISPLAY_STRING)}(`);
- genNode(node.content, context);
- push(`)`);
-}
-function genCompoundExpression(node, context) {
- for (let i = 0; i < node.children.length; i++) {
- const child = node.children[i];
- if (isString(child)) {
- context.push(child);
- }
- else {
- genNode(child, context);
- }
- }
-}
-function genExpressionAsPropertyKey(node, context) {
- const { push } = context;
- if (node.type === 8 /* COMPOUND_EXPRESSION */) {
- push(`[`);
- genCompoundExpression(node, context);
- push(`]`);
- }
- else if (node.isStatic) {
- // only quote keys if necessary
- const text = isSimpleIdentifier(node.content)
- ? node.content
- : JSON.stringify(node.content);
- push(text, node);
- }
- else {
- push(`[${node.content}]`, node);
- }
-}
-function genComment(node, context) {
- const { push, helper, pure } = context;
- if (pure) {
- push(PURE_ANNOTATION);
- }
- push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);
-}
-function genVNodeCall(node, context) {
- const { push, helper, pure } = context;
- const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;
- if (directives) {
- push(helper(WITH_DIRECTIVES) + `(`);
- }
- if (isBlock) {
- push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);
- }
- if (pure) {
- push(PURE_ANNOTATION);
- }
- const callHelper = isBlock
- ? getVNodeBlockHelper(context.inSSR, isComponent)
- : getVNodeHelper(context.inSSR, isComponent);
- push(helper(callHelper) + `(`, node);
- genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);
- push(`)`);
- if (isBlock) {
- push(`)`);
- }
- if (directives) {
- push(`, `);
- genNode(directives, context);
- push(`)`);
- }
-}
-function genNullableArgs(args) {
- let i = args.length;
- while (i--) {
- if (args[i] != null)
- break;
- }
- return args.slice(0, i + 1).map(arg => arg || `null`);
-}
-// JavaScript
-function genCallExpression(node, context) {
- const { push, helper, pure } = context;
- const callee = isString(node.callee) ? node.callee : helper(node.callee);
- if (pure) {
- push(PURE_ANNOTATION);
- }
- push(callee + `(`, node);
- genNodeList(node.arguments, context);
- push(`)`);
-}
-function genObjectExpression(node, context) {
- const { push, indent, deindent, newline } = context;
- const { properties } = node;
- if (!properties.length) {
- push(`{}`, node);
- return;
- }
- const multilines = properties.length > 1 ||
- (((process.env.NODE_ENV !== 'production')) &&
- properties.some(p => p.value.type !== 4 /* SIMPLE_EXPRESSION */));
- push(multilines ? `{` : `{ `);
- multilines && indent();
- for (let i = 0; i < properties.length; i++) {
- const { key, value } = properties[i];
- // key
- genExpressionAsPropertyKey(key, context);
- push(`: `);
- // value
- genNode(value, context);
- if (i < properties.length - 1) {
- // will only reach this if it's multilines
- push(`,`);
- newline();
- }
- }
- multilines && deindent();
- push(multilines ? `}` : ` }`);
-}
-function genArrayExpression(node, context) {
- genNodeListAsArray(node.elements, context);
-}
-function genFunctionExpression(node, context) {
- const { push, indent, deindent } = context;
- const { params, returns, body, newline, isSlot } = node;
- if (isSlot) {
- // wrap slot functions with owner context
- push(`_${helperNameMap[WITH_CTX]}(`);
- }
- push(`(`, node);
- if (isArray(params)) {
- genNodeList(params, context);
- }
- else if (params) {
- genNode(params, context);
- }
- push(`) => `);
- if (newline || body) {
- push(`{`);
- indent();
- }
- if (returns) {
- if (newline) {
- push(`return `);
- }
- if (isArray(returns)) {
- genNodeListAsArray(returns, context);
- }
- else {
- genNode(returns, context);
- }
- }
- else if (body) {
- genNode(body, context);
- }
- if (newline || body) {
- deindent();
- push(`}`);
- }
- if (isSlot) {
- if (node.isNonScopedSlot) {
- push(`, undefined, true`);
- }
- push(`)`);
- }
-}
-function genConditionalExpression(node, context) {
- const { test, consequent, alternate, newline: needNewline } = node;
- const { push, indent, deindent, newline } = context;
- if (test.type === 4 /* SIMPLE_EXPRESSION */) {
- const needsParens = !isSimpleIdentifier(test.content);
- needsParens && push(`(`);
- genExpression(test, context);
- needsParens && push(`)`);
- }
- else {
- push(`(`);
- genNode(test, context);
- push(`)`);
- }
- needNewline && indent();
- context.indentLevel++;
- needNewline || push(` `);
- push(`? `);
- genNode(consequent, context);
- context.indentLevel--;
- needNewline && newline();
- needNewline || push(` `);
- push(`: `);
- const isNested = alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */;
- if (!isNested) {
- context.indentLevel++;
- }
- genNode(alternate, context);
- if (!isNested) {
- context.indentLevel--;
- }
- needNewline && deindent(true /* without newline */);
-}
-function genCacheExpression(node, context) {
- const { push, helper, indent, deindent, newline } = context;
- push(`_cache[${node.index}] || (`);
- if (node.isVNode) {
- indent();
- push(`${helper(SET_BLOCK_TRACKING)}(-1),`);
- newline();
- }
- push(`_cache[${node.index}] = `);
- genNode(node.value, context);
- if (node.isVNode) {
- push(`,`);
- newline();
- push(`${helper(SET_BLOCK_TRACKING)}(1),`);
- newline();
- push(`_cache[${node.index}]`);
- deindent();
- }
- push(`)`);
-}
-
-function walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = Object.create(null)) {
- {
- return;
- }
-}
-function isReferencedIdentifier(id, parent, parentStack) {
- {
- return false;
- }
-}
-function isInDestructureAssignment(parent, parentStack) {
- if (parent &&
- (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {
- let i = parentStack.length;
- while (i--) {
- const p = parentStack[i];
- if (p.type === 'AssignmentExpression') {
- return true;
- }
- else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {
- break;
- }
- }
- }
- return false;
-}
-function walkFunctionParams(node, onIdent) {
- for (const p of node.params) {
- for (const id of extractIdentifiers(p)) {
- onIdent(id);
- }
- }
-}
-function walkBlockDeclarations(block, onIdent) {
- for (const stmt of block.body) {
- if (stmt.type === 'VariableDeclaration') {
- if (stmt.declare)
- continue;
- for (const decl of stmt.declarations) {
- for (const id of extractIdentifiers(decl.id)) {
- onIdent(id);
- }
- }
- }
- else if (stmt.type === 'FunctionDeclaration' ||
- stmt.type === 'ClassDeclaration') {
- if (stmt.declare || !stmt.id)
- continue;
- onIdent(stmt.id);
- }
- }
-}
-function extractIdentifiers(param, nodes = []) {
- switch (param.type) {
- case 'Identifier':
- nodes.push(param);
- break;
- case 'MemberExpression':
- let object = param;
- while (object.type === 'MemberExpression') {
- object = object.object;
- }
- nodes.push(object);
- break;
- case 'ObjectPattern':
- for (const prop of param.properties) {
- if (prop.type === 'RestElement') {
- extractIdentifiers(prop.argument, nodes);
- }
- else {
- extractIdentifiers(prop.value, nodes);
- }
- }
- break;
- case 'ArrayPattern':
- param.elements.forEach(element => {
- if (element)
- extractIdentifiers(element, nodes);
- });
- break;
- case 'RestElement':
- extractIdentifiers(param.argument, nodes);
- break;
- case 'AssignmentPattern':
- extractIdentifiers(param.left, nodes);
- break;
- }
- return nodes;
-}
-const isFunctionType = (node) => {
- return /Function(?:Expression|Declaration)$|Method$/.test(node.type);
-};
-const isStaticProperty = (node) => node &&
- (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&
- !node.computed;
-const isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;
-
-// these keywords should not appear inside expressions, but operators like
-// typeof, instanceof and in are allowed
-const prohibitedKeywordRE = new RegExp('\\b' +
- ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
- 'super,throw,while,yield,delete,export,import,return,switch,default,' +
- 'extends,finally,continue,debugger,function,arguments,typeof,void')
- .split(',')
- .join('\\b|\\b') +
- '\\b');
-// strip strings in expressions
-const stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
-/**
- * Validate a non-prefixed expression.
- * This is only called when using the in-browser runtime compiler since it
- * doesn't prefix expressions.
- */
-function validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {
- const exp = node.content;
- // empty expressions are validated per-directive since some directives
- // do allow empty expressions.
- if (!exp.trim()) {
- return;
- }
- try {
- new Function(asRawStatements
- ? ` ${exp} `
- : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`);
- }
- catch (e) {
- let message = e.message;
- const keywordMatch = exp
- .replace(stripStringRE, '')
- .match(prohibitedKeywordRE);
- if (keywordMatch) {
- message = `avoid using JavaScript keyword as property name: "${keywordMatch[0]}"`;
- }
- context.onError(createCompilerError(44 /* X_INVALID_EXPRESSION */, node.loc, undefined, message));
- }
-}
-
-const transformExpression = (node, context) => {
- if (node.type === 5 /* INTERPOLATION */) {
- node.content = processExpression(node.content, context);
- }
- else if (node.type === 1 /* ELEMENT */) {
- // handle directives on element
- for (let i = 0; i < node.props.length; i++) {
- const dir = node.props[i];
- // do not process for v-on & v-for since they are special handled
- if (dir.type === 7 /* DIRECTIVE */ && dir.name !== 'for') {
- const exp = dir.exp;
- const arg = dir.arg;
- // do not process exp if this is v-on:arg - we need special handling
- // for wrapping inline statements.
- if (exp &&
- exp.type === 4 /* SIMPLE_EXPRESSION */ &&
- !(dir.name === 'on' && arg)) {
- dir.exp = processExpression(exp, context,
- // slot args must be processed as function params
- dir.name === 'slot');
- }
- if (arg && arg.type === 4 /* SIMPLE_EXPRESSION */ && !arg.isStatic) {
- dir.arg = processExpression(arg, context);
- }
- }
- }
- }
-};
-// Important: since this function uses Node.js only dependencies, it should
-// always be used with a leading !true check so that it can be
-// tree-shaken from the browser build.
-function processExpression(node, context,
-// some expressions like v-slot props & v-for aliases should be parsed as
-// function params
-asParams = false,
-// v-on handler values may contain multiple statements
-asRawStatements = false, localVars = Object.create(context.identifiers)) {
- {
- if ((process.env.NODE_ENV !== 'production')) {
- // simple in-browser validation (same logic in 2.x)
- validateBrowserExpression(node, context, asParams, asRawStatements);
- }
- return node;
- }
-}
-
-const transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {
- return processIf(node, dir, context, (ifNode, branch, isRoot) => {
- // #1587: We need to dynamically increment the key based on the current
- // node's sibling nodes, since chained v-if/else branches are
- // rendered at the same depth
- const siblings = context.parent.children;
- let i = siblings.indexOf(ifNode);
- let key = 0;
- while (i-- >= 0) {
- const sibling = siblings[i];
- if (sibling && sibling.type === 9 /* IF */) {
- key += sibling.branches.length;
- }
- }
- // Exit callback. Complete the codegenNode when all children have been
- // transformed.
- return () => {
- if (isRoot) {
- ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);
- }
- else {
- // attach this branch's codegen node to the v-if root.
- const parentCondition = getParentCondition(ifNode.codegenNode);
- parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);
- }
- };
- });
-});
-// target-agnostic transform used for both Client and SSR
-function processIf(node, dir, context, processCodegen) {
- if (dir.name !== 'else' &&
- (!dir.exp || !dir.exp.content.trim())) {
- const loc = dir.exp ? dir.exp.loc : node.loc;
- context.onError(createCompilerError(28 /* X_V_IF_NO_EXPRESSION */, dir.loc));
- dir.exp = createSimpleExpression(`true`, false, loc);
- }
- if ((process.env.NODE_ENV !== 'production') && true && dir.exp) {
- validateBrowserExpression(dir.exp, context);
- }
- if (dir.name === 'if') {
- const branch = createIfBranch(node, dir);
- const ifNode = {
- type: 9 /* IF */,
- loc: node.loc,
- branches: [branch]
- };
- context.replaceNode(ifNode);
- if (processCodegen) {
- return processCodegen(ifNode, branch, true);
- }
- }
- else {
- // locate the adjacent v-if
- const siblings = context.parent.children;
- const comments = [];
- let i = siblings.indexOf(node);
- while (i-- >= -1) {
- const sibling = siblings[i];
- if ((process.env.NODE_ENV !== 'production') && sibling && sibling.type === 3 /* COMMENT */) {
- context.removeNode(sibling);
- comments.unshift(sibling);
- continue;
- }
- if (sibling &&
- sibling.type === 2 /* TEXT */ &&
- !sibling.content.trim().length) {
- context.removeNode(sibling);
- continue;
- }
- if (sibling && sibling.type === 9 /* IF */) {
- // Check if v-else was followed by v-else-if
- if (dir.name === 'else-if' &&
- sibling.branches[sibling.branches.length - 1].condition === undefined) {
- context.onError(createCompilerError(30 /* X_V_ELSE_NO_ADJACENT_IF */, node.loc));
- }
- // move the node to the if node's branches
- context.removeNode();
- const branch = createIfBranch(node, dir);
- if ((process.env.NODE_ENV !== 'production') &&
- comments.length &&
- // #3619 ignore comments if the v-if is direct child of <transition>
- !(context.parent &&
- context.parent.type === 1 /* ELEMENT */ &&
- isBuiltInType(context.parent.tag, 'transition'))) {
- branch.children = [...comments, ...branch.children];
- }
- // check if user is forcing same key on different branches
- if ((process.env.NODE_ENV !== 'production') || !true) {
- const key = branch.userKey;
- if (key) {
- sibling.branches.forEach(({ userKey }) => {
- if (isSameKey(userKey, key)) {
- context.onError(createCompilerError(29 /* X_V_IF_SAME_KEY */, branch.userKey.loc));
- }
- });
- }
- }
- sibling.branches.push(branch);
- const onExit = processCodegen && processCodegen(sibling, branch, false);
- // since the branch was removed, it will not be traversed.
- // make sure to traverse here.
- traverseNode(branch, context);
- // call on exit
- if (onExit)
- onExit();
- // make sure to reset currentNode after traversal to indicate this
- // node has been removed.
- context.currentNode = null;
- }
- else {
- context.onError(createCompilerError(30 /* X_V_ELSE_NO_ADJACENT_IF */, node.loc));
- }
- break;
- }
- }
-}
-function createIfBranch(node, dir) {
- return {
- type: 10 /* IF_BRANCH */,
- loc: node.loc,
- condition: dir.name === 'else' ? undefined : dir.exp,
- children: node.tagType === 3 /* TEMPLATE */ && !findDir(node, 'for')
- ? node.children
- : [node],
- userKey: findProp(node, `key`)
- };
-}
-function createCodegenNodeForBranch(branch, keyIndex, context) {
- if (branch.condition) {
- return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context),
- // make sure to pass in asBlock: true so that the comment node call
- // closes the current block.
- createCallExpression(context.helper(CREATE_COMMENT), [
- (process.env.NODE_ENV !== 'production') ? '"v-if"' : '""',
- 'true'
- ]));
- }
- else {
- return createChildrenCodegenNode(branch, keyIndex, context);
- }
-}
-function createChildrenCodegenNode(branch, keyIndex, context) {
- const { helper } = context;
- const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* CAN_HOIST */));
- const { children } = branch;
- const firstChild = children[0];
- const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* ELEMENT */;
- if (needFragmentWrapper) {
- if (children.length === 1 && firstChild.type === 11 /* FOR */) {
- // optimize away nested fragments when child is a ForNode
- const vnodeCall = firstChild.codegenNode;
- injectProp(vnodeCall, keyProperty, context);
- return vnodeCall;
- }
- else {
- let patchFlag = 64 /* STABLE_FRAGMENT */;
- let patchFlagText = PatchFlagNames[64 /* STABLE_FRAGMENT */];
- // check if the fragment actually contains a single valid child with
- // the rest being comments
- if ((process.env.NODE_ENV !== 'production') &&
- children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {
- patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;
- patchFlagText += `, ${PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;
- }
- return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${patchFlagText} */` : ``), undefined, undefined, true, false, false /* isComponent */, branch.loc);
- }
- }
- else {
- const ret = firstChild.codegenNode;
- const vnodeCall = getMemoedVNodeCall(ret);
- // Change createVNode to createBlock.
- if (vnodeCall.type === 13 /* VNODE_CALL */) {
- makeBlock(vnodeCall, context);
- }
- // inject branch key
- injectProp(vnodeCall, keyProperty, context);
- return ret;
- }
-}
-function isSameKey(a, b) {
- if (!a || a.type !== b.type) {
- return false;
- }
- if (a.type === 6 /* ATTRIBUTE */) {
- if (a.value.content !== b.value.content) {
- return false;
- }
- }
- else {
- // directive
- const exp = a.exp;
- const branchExp = b.exp;
- if (exp.type !== branchExp.type) {
- return false;
- }
- if (exp.type !== 4 /* SIMPLE_EXPRESSION */ ||
- exp.isStatic !== branchExp.isStatic ||
- exp.content !== branchExp.content) {
- return false;
- }
- }
- return true;
-}
-function getParentCondition(node) {
- while (true) {
- if (node.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {
- if (node.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {
- node = node.alternate;
- }
- else {
- return node;
- }
- }
- else if (node.type === 20 /* JS_CACHE_EXPRESSION */) {
- node = node.value;
- }
- }
-}
-
-const transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {
- const { helper, removeHelper } = context;
- return processFor(node, dir, context, forNode => {
- // create the loop render function expression now, and add the
- // iterator on exit after all children have been traversed
- const renderExp = createCallExpression(helper(RENDER_LIST), [
- forNode.source
- ]);
- const memo = findDir(node, 'memo');
- const keyProp = findProp(node, `key`);
- const keyExp = keyProp &&
- (keyProp.type === 6 /* ATTRIBUTE */
- ? createSimpleExpression(keyProp.value.content, true)
- : keyProp.exp);
- const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;
- const isStableFragment = forNode.source.type === 4 /* SIMPLE_EXPRESSION */ &&
- forNode.source.constType > 0 /* NOT_CONSTANT */;
- const fragmentFlag = isStableFragment
- ? 64 /* STABLE_FRAGMENT */
- : keyProp
- ? 128 /* KEYED_FRAGMENT */
- : 256 /* UNKEYED_FRAGMENT */;
- forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +
- ((process.env.NODE_ENV !== 'production') ? ` /* ${PatchFlagNames[fragmentFlag]} */` : ``), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);
- return () => {
- // finish the codegen now that all children have been traversed
- let childBlock;
- const isTemplate = isTemplateNode(node);
- const { children } = forNode;
- // check <template v-for> key placement
- if (((process.env.NODE_ENV !== 'production') || !true) && isTemplate) {
- node.children.some(c => {
- if (c.type === 1 /* ELEMENT */) {
- const key = findProp(c, 'key');
- if (key) {
- context.onError(createCompilerError(33 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));
- return true;
- }
- }
- });
- }
- const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* ELEMENT */;
- const slotOutlet = isSlotOutlet(node)
- ? node
- : isTemplate &&
- node.children.length === 1 &&
- isSlotOutlet(node.children[0])
- ? node.children[0] // api-extractor somehow fails to infer this
- : null;
- if (slotOutlet) {
- // <slot v-for="..."> or <template v-for="..."><slot/></template>
- childBlock = slotOutlet.codegenNode;
- if (isTemplate && keyProperty) {
- // <template v-for="..." :key="..."><slot/></template>
- // we need to inject the key to the renderSlot() call.
- // the props for renderSlot is passed as the 3rd argument.
- injectProp(childBlock, keyProperty, context);
- }
- }
- else if (needFragmentWrapper) {
- // <template v-for="..."> with text or multi-elements
- // should generate a fragment block for each loop
- childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* STABLE_FRAGMENT */ +
- ((process.env.NODE_ENV !== 'production')
- ? ` /* ${PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`
- : ``), undefined, undefined, true, undefined, false /* isComponent */);
- }
- else {
- // Normal element v-for. Directly use the child's codegenNode
- // but mark it as a block.
- childBlock = children[0]
- .codegenNode;
- if (isTemplate && keyProperty) {
- injectProp(childBlock, keyProperty, context);
- }
- if (childBlock.isBlock !== !isStableFragment) {
- if (childBlock.isBlock) {
- // switch from block to vnode
- removeHelper(OPEN_BLOCK);
- removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));
- }
- else {
- // switch from vnode to block
- removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));
- }
- }
- childBlock.isBlock = !isStableFragment;
- if (childBlock.isBlock) {
- helper(OPEN_BLOCK);
- helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));
- }
- else {
- helper(getVNodeHelper(context.inSSR, childBlock.isComponent));
- }
- }
- if (memo) {
- const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [
- createSimpleExpression(`_cached`)
- ]));
- loop.body = createBlockStatement([
- createCompoundExpression([`const _memo = (`, memo.exp, `)`]),
- createCompoundExpression([
- `if (_cached`,
- ...(keyExp ? [` && _cached.key === `, keyExp] : []),
- ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`
- ]),
- createCompoundExpression([`const _item = `, childBlock]),
- createSimpleExpression(`_item.memo = _memo`),
- createSimpleExpression(`return _item`)
- ]);
- renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));
- }
- else {
- renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));
- }
- };
- });
-});
-// target-agnostic transform used for both Client and SSR
-function processFor(node, dir, context, processCodegen) {
- if (!dir.exp) {
- context.onError(createCompilerError(31 /* X_V_FOR_NO_EXPRESSION */, dir.loc));
- return;
- }
- const parseResult = parseForExpression(
- // can only be simple expression because vFor transform is applied
- // before expression transform.
- dir.exp, context);
- if (!parseResult) {
- context.onError(createCompilerError(32 /* X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));
- return;
- }
- const { addIdentifiers, removeIdentifiers, scopes } = context;
- const { source, value, key, index } = parseResult;
- const forNode = {
- type: 11 /* FOR */,
- loc: dir.loc,
- source,
- valueAlias: value,
- keyAlias: key,
- objectIndexAlias: index,
- parseResult,
- children: isTemplateNode(node) ? node.children : [node]
- };
- context.replaceNode(forNode);
- // bookkeeping
- scopes.vFor++;
- const onExit = processCodegen && processCodegen(forNode);
- return () => {
- scopes.vFor--;
- if (onExit)
- onExit();
- };
-}
-const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
-// This regex doesn't cover the case if key or index aliases have destructuring,
-// but those do not make sense in the first place, so this works in practice.
-const forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
-const stripParensRE = /^\(|\)$/g;
-function parseForExpression(input, context) {
- const loc = input.loc;
- const exp = input.content;
- const inMatch = exp.match(forAliasRE);
- if (!inMatch)
- return;
- const [, LHS, RHS] = inMatch;
- const result = {
- source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),
- value: undefined,
- key: undefined,
- index: undefined
- };
- if ((process.env.NODE_ENV !== 'production') && true) {
- validateBrowserExpression(result.source, context);
- }
- let valueContent = LHS.trim().replace(stripParensRE, '').trim();
- const trimmedOffset = LHS.indexOf(valueContent);
- const iteratorMatch = valueContent.match(forIteratorRE);
- if (iteratorMatch) {
- valueContent = valueContent.replace(forIteratorRE, '').trim();
- const keyContent = iteratorMatch[1].trim();
- let keyOffset;
- if (keyContent) {
- keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);
- result.key = createAliasExpression(loc, keyContent, keyOffset);
- if ((process.env.NODE_ENV !== 'production') && true) {
- validateBrowserExpression(result.key, context, true);
- }
- }
- if (iteratorMatch[2]) {
- const indexContent = iteratorMatch[2].trim();
- if (indexContent) {
- result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key
- ? keyOffset + keyContent.length
- : trimmedOffset + valueContent.length));
- if ((process.env.NODE_ENV !== 'production') && true) {
- validateBrowserExpression(result.index, context, true);
- }
- }
- }
- }
- if (valueContent) {
- result.value = createAliasExpression(loc, valueContent, trimmedOffset);
- if ((process.env.NODE_ENV !== 'production') && true) {
- validateBrowserExpression(result.value, context, true);
- }
- }
- return result;
-}
-function createAliasExpression(range, content, offset) {
- return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));
-}
-function createForLoopParams({ value, key, index }, memoArgs = []) {
- return createParamsList([value, key, index, ...memoArgs]);
-}
-function createParamsList(args) {
- let i = args.length;
- while (i--) {
- if (args[i])
- break;
- }
- return args
- .slice(0, i + 1)
- .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));
-}
-
-const defaultFallback = createSimpleExpression(`undefined`, false);
-// A NodeTransform that:
-// 1. Tracks scope identifiers for scoped slots so that they don't get prefixed
-// by transformExpression. This is only applied in non-browser builds with
-// { prefixIdentifiers: true }.
-// 2. Track v-slot depths so that we know a slot is inside another slot.
-// Note the exit callback is executed before buildSlots() on the same node,
-// so only nested slots see positive numbers.
-const trackSlotScopes = (node, context) => {
- if (node.type === 1 /* ELEMENT */ &&
- (node.tagType === 1 /* COMPONENT */ ||
- node.tagType === 3 /* TEMPLATE */)) {
- // We are only checking non-empty v-slot here
- // since we only care about slots that introduce scope variables.
- const vSlot = findDir(node, 'slot');
- if (vSlot) {
- context.scopes.vSlot++;
- return () => {
- context.scopes.vSlot--;
- };
- }
- }
-};
-// A NodeTransform that tracks scope identifiers for scoped slots with v-for.
-// This transform is only applied in non-browser builds with { prefixIdentifiers: true }
-const trackVForSlotScopes = (node, context) => {
- let vFor;
- if (isTemplateNode(node) &&
- node.props.some(isVSlot) &&
- (vFor = findDir(node, 'for'))) {
- const result = (vFor.parseResult = parseForExpression(vFor.exp, context));
- if (result) {
- const { value, key, index } = result;
- const { addIdentifiers, removeIdentifiers } = context;
- value && addIdentifiers(value);
- key && addIdentifiers(key);
- index && addIdentifiers(index);
- return () => {
- value && removeIdentifiers(value);
- key && removeIdentifiers(key);
- index && removeIdentifiers(index);
- };
- }
- }
-};
-const buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);
-// Instead of being a DirectiveTransform, v-slot processing is called during
-// transformElement to build the slots object for a component.
-function buildSlots(node, context, buildSlotFn = buildClientSlotFn) {
- context.helper(WITH_CTX);
- const { children, loc } = node;
- const slotsProperties = [];
- const dynamicSlots = [];
- // If the slot is inside a v-for or another v-slot, force it to be dynamic
- // since it likely uses a scope variable.
- let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;
- // 1. Check for slot with slotProps on component itself.
- // <Comp v-slot="{ prop }"/>
- const onComponentSlot = findDir(node, 'slot', true);
- if (onComponentSlot) {
- const { arg, exp } = onComponentSlot;
- if (arg && !isStaticExp(arg)) {
- hasDynamicSlots = true;
- }
- slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));
- }
- // 2. Iterate through children and check for template slots
- // <template v-slot:foo="{ prop }">
- let hasTemplateSlots = false;
- let hasNamedDefaultSlot = false;
- const implicitDefaultChildren = [];
- const seenSlotNames = new Set();
- for (let i = 0; i < children.length; i++) {
- const slotElement = children[i];
- let slotDir;
- if (!isTemplateNode(slotElement) ||
- !(slotDir = findDir(slotElement, 'slot', true))) {
- // not a <template v-slot>, skip.
- if (slotElement.type !== 3 /* COMMENT */) {
- implicitDefaultChildren.push(slotElement);
- }
- continue;
- }
- if (onComponentSlot) {
- // already has on-component slot - this is incorrect usage.
- context.onError(createCompilerError(37 /* X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));
- break;
- }
- hasTemplateSlots = true;
- const { children: slotChildren, loc: slotLoc } = slotElement;
- const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;
- // check if name is dynamic.
- let staticSlotName;
- if (isStaticExp(slotName)) {
- staticSlotName = slotName ? slotName.content : `default`;
- }
- else {
- hasDynamicSlots = true;
- }
- const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);
- // check if this slot is conditional (v-if/v-for)
- let vIf;
- let vElse;
- let vFor;
- if ((vIf = findDir(slotElement, 'if'))) {
- hasDynamicSlots = true;
- dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback));
- }
- else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {
- // find adjacent v-if
- let j = i;
- let prev;
- while (j--) {
- prev = children[j];
- if (prev.type !== 3 /* COMMENT */) {
- break;
- }
- }
- if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {
- // remove node
- children.splice(i, 1);
- i--;
- // attach this slot to previous conditional
- let conditional = dynamicSlots[dynamicSlots.length - 1];
- while (conditional.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {
- conditional = conditional.alternate;
- }
- conditional.alternate = vElse.exp
- ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback)
- : buildDynamicSlot(slotName, slotFunction);
- }
- else {
- context.onError(createCompilerError(30 /* X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));
- }
- }
- else if ((vFor = findDir(slotElement, 'for'))) {
- hasDynamicSlots = true;
- const parseResult = vFor.parseResult ||
- parseForExpression(vFor.exp, context);
- if (parseResult) {
- // Render the dynamic slots as an array and add it to the createSlot()
- // args. The runtime knows how to handle it appropriately.
- dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [
- parseResult.source,
- createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)
- ]));
- }
- else {
- context.onError(createCompilerError(32 /* X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));
- }
- }
- else {
- // check duplicate static names
- if (staticSlotName) {
- if (seenSlotNames.has(staticSlotName)) {
- context.onError(createCompilerError(38 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));
- continue;
- }
- seenSlotNames.add(staticSlotName);
- if (staticSlotName === 'default') {
- hasNamedDefaultSlot = true;
- }
- }
- slotsProperties.push(createObjectProperty(slotName, slotFunction));
- }
- }
- if (!onComponentSlot) {
- const buildDefaultSlotProperty = (props, children) => {
- const fn = buildSlotFn(props, children, loc);
- if (context.compatConfig) {
- fn.isNonScopedSlot = true;
- }
- return createObjectProperty(`default`, fn);
- };
- if (!hasTemplateSlots) {
- // implicit default slot (on component)
- slotsProperties.push(buildDefaultSlotProperty(undefined, children));
- }
- else if (implicitDefaultChildren.length &&
- // #3766
- // with whitespace: 'preserve', whitespaces between slots will end up in
- // implicitDefaultChildren. Ignore if all implicit children are whitespaces.
- implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {
- // implicit default slot (mixed with named slots)
- if (hasNamedDefaultSlot) {
- context.onError(createCompilerError(39 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));
- }
- else {
- slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));
- }
- }
- }
- const slotFlag = hasDynamicSlots
- ? 2 /* DYNAMIC */
- : hasForwardedSlots(node.children)
- ? 3 /* FORWARDED */
- : 1 /* STABLE */;
- let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`,
- // 2 = compiled but dynamic = can skip normalization, but must run diff
- // 1 = compiled and static = can skip normalization AND diff as optimized
- createSimpleExpression(slotFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${slotFlagsText[slotFlag]} */` : ``), false))), loc);
- if (dynamicSlots.length) {
- slots = createCallExpression(context.helper(CREATE_SLOTS), [
- slots,
- createArrayExpression(dynamicSlots)
- ]);
- }
- return {
- slots,
- hasDynamicSlots
- };
-}
-function buildDynamicSlot(name, fn) {
- return createObjectExpression([
- createObjectProperty(`name`, name),
- createObjectProperty(`fn`, fn)
- ]);
-}
-function hasForwardedSlots(children) {
- for (let i = 0; i < children.length; i++) {
- const child = children[i];
- switch (child.type) {
- case 1 /* ELEMENT */:
- if (child.tagType === 2 /* SLOT */ ||
- hasForwardedSlots(child.children)) {
- return true;
- }
- break;
- case 9 /* IF */:
- if (hasForwardedSlots(child.branches))
- return true;
- break;
- case 10 /* IF_BRANCH */:
- case 11 /* FOR */:
- if (hasForwardedSlots(child.children))
- return true;
- break;
- }
- }
- return false;
-}
-function isNonWhitespaceContent(node) {
- if (node.type !== 2 /* TEXT */ && node.type !== 12 /* TEXT_CALL */)
- return true;
- return node.type === 2 /* TEXT */
- ? !!node.content.trim()
- : isNonWhitespaceContent(node.content);
-}
-
-// some directive transforms (e.g. v-model) may return a symbol for runtime
-// import, which should be used instead of a resolveDirective call.
-const directiveImportMap = new WeakMap();
-// generate a JavaScript AST for this element's codegen
-const transformElement = (node, context) => {
- // perform the work on exit, after all child expressions have been
- // processed and merged.
- return function postTransformElement() {
- node = context.currentNode;
- if (!(node.type === 1 /* ELEMENT */ &&
- (node.tagType === 0 /* ELEMENT */ ||
- node.tagType === 1 /* COMPONENT */))) {
- return;
- }
- const { tag, props } = node;
- const isComponent = node.tagType === 1 /* COMPONENT */;
- // The goal of the transform is to create a codegenNode implementing the
- // VNodeCall interface.
- let vnodeTag = isComponent
- ? resolveComponentType(node, context)
- : `"${tag}"`;
- const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;
- let vnodeProps;
- let vnodeChildren;
- let vnodePatchFlag;
- let patchFlag = 0;
- let vnodeDynamicProps;
- let dynamicPropNames;
- let vnodeDirectives;
- let shouldUseBlock =
- // dynamic component may resolve to plain elements
- isDynamicComponent ||
- vnodeTag === TELEPORT ||
- vnodeTag === SUSPENSE ||
- (!isComponent &&
- // <svg> and <foreignObject> must be forced into blocks so that block
- // updates inside get proper isSVG flag at runtime. (#639, #643)
- // This is technically web-specific, but splitting the logic out of core
- // leads to too much unnecessary complexity.
- (tag === 'svg' ||
- tag === 'foreignObject' ||
- // #938: elements with dynamic keys should be forced into blocks
- findProp(node, 'key', true)));
- // props
- if (props.length > 0) {
- const propsBuildResult = buildProps(node, context);
- vnodeProps = propsBuildResult.props;
- patchFlag = propsBuildResult.patchFlag;
- dynamicPropNames = propsBuildResult.dynamicPropNames;
- const directives = propsBuildResult.directives;
- vnodeDirectives =
- directives && directives.length
- ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))
- : undefined;
- }
- // children
- if (node.children.length > 0) {
- if (vnodeTag === KEEP_ALIVE) {
- // Although a built-in component, we compile KeepAlive with raw children
- // instead of slot functions so that it can be used inside Transition
- // or other Transition-wrapping HOCs.
- // To ensure correct updates with block optimizations, we need to:
- // 1. Force keep-alive into a block. This avoids its children being
- // collected by a parent block.
- shouldUseBlock = true;
- // 2. Force keep-alive to always be updated, since it uses raw children.
- patchFlag |= 1024 /* DYNAMIC_SLOTS */;
- if ((process.env.NODE_ENV !== 'production') && node.children.length > 1) {
- context.onError(createCompilerError(45 /* X_KEEP_ALIVE_INVALID_CHILDREN */, {
- start: node.children[0].loc.start,
- end: node.children[node.children.length - 1].loc.end,
- source: ''
- }));
- }
- }
- const shouldBuildAsSlots = isComponent &&
- // Teleport is not a real component and has dedicated runtime handling
- vnodeTag !== TELEPORT &&
- // explained above.
- vnodeTag !== KEEP_ALIVE;
- if (shouldBuildAsSlots) {
- const { slots, hasDynamicSlots } = buildSlots(node, context);
- vnodeChildren = slots;
- if (hasDynamicSlots) {
- patchFlag |= 1024 /* DYNAMIC_SLOTS */;
- }
- }
- else if (node.children.length === 1 && vnodeTag !== TELEPORT) {
- const child = node.children[0];
- const type = child.type;
- // check for dynamic text children
- const hasDynamicTextChild = type === 5 /* INTERPOLATION */ ||
- type === 8 /* COMPOUND_EXPRESSION */;
- if (hasDynamicTextChild &&
- getConstantType(child, context) === 0 /* NOT_CONSTANT */) {
- patchFlag |= 1 /* TEXT */;
- }
- // pass directly if the only child is a text node
- // (plain / interpolation / expression)
- if (hasDynamicTextChild || type === 2 /* TEXT */) {
- vnodeChildren = child;
- }
- else {
- vnodeChildren = node.children;
- }
- }
- else {
- vnodeChildren = node.children;
- }
- }
- // patchFlag & dynamicPropNames
- if (patchFlag !== 0) {
- if ((process.env.NODE_ENV !== 'production')) {
- if (patchFlag < 0) {
- // special flags (negative and mutually exclusive)
- vnodePatchFlag = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;
- }
- else {
- // bitwise flags
- const flagNames = Object.keys(PatchFlagNames)
- .map(Number)
- .filter(n => n > 0 && patchFlag & n)
- .map(n => PatchFlagNames[n])
- .join(`, `);
- vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;
- }
- }
- else {
- vnodePatchFlag = String(patchFlag);
- }
- if (dynamicPropNames && dynamicPropNames.length) {
- vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);
- }
- }
- node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);
- };
-};
-function resolveComponentType(node, context, ssr = false) {
- let { tag } = node;
- // 1. dynamic component
- const isExplicitDynamic = isComponentTag(tag);
- const isProp = findProp(node, 'is');
- if (isProp) {
- if (isExplicitDynamic ||
- (isCompatEnabled("COMPILER_IS_ON_ELEMENT" /* COMPILER_IS_ON_ELEMENT */, context))) {
- const exp = isProp.type === 6 /* ATTRIBUTE */
- ? isProp.value && createSimpleExpression(isProp.value.content, true)
- : isProp.exp;
- if (exp) {
- return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [
- exp
- ]);
- }
- }
- else if (isProp.type === 6 /* ATTRIBUTE */ &&
- isProp.value.content.startsWith('vue:')) {
- // <button is="vue:xxx">
- // if not <component>, only is value that starts with "vue:" will be
- // treated as component by the parse phase and reach here, unless it's
- // compat mode where all is values are considered components
- tag = isProp.value.content.slice(4);
- }
- }
- // 1.5 v-is (TODO: Deprecate)
- const isDir = !isExplicitDynamic && findDir(node, 'is');
- if (isDir && isDir.exp) {
- return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [
- isDir.exp
- ]);
- }
- // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)
- const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);
- if (builtIn) {
- // built-ins are simply fallthroughs / have special handling during ssr
- // so we don't need to import their runtime equivalents
- if (!ssr)
- context.helper(builtIn);
- return builtIn;
- }
- // 5. user component (resolve)
- context.helper(RESOLVE_COMPONENT);
- context.components.add(tag);
- return toValidAssetId(tag, `component`);
-}
-function buildProps(node, context, props = node.props, ssr = false) {
- const { tag, loc: elementLoc } = node;
- const isComponent = node.tagType === 1 /* COMPONENT */;
- let properties = [];
- const mergeArgs = [];
- const runtimeDirectives = [];
- // patchFlag analysis
- let patchFlag = 0;
- let hasRef = false;
- let hasClassBinding = false;
- let hasStyleBinding = false;
- let hasHydrationEventBinding = false;
- let hasDynamicKeys = false;
- let hasVnodeHook = false;
- const dynamicPropNames = [];
- const analyzePatchFlag = ({ key, value }) => {
- if (isStaticExp(key)) {
- const name = key.content;
- const isEventHandler = isOn(name);
- if (!isComponent &&
- isEventHandler &&
- // omit the flag for click handlers because hydration gives click
- // dedicated fast path.
- name.toLowerCase() !== 'onclick' &&
- // omit v-model handlers
- name !== 'onUpdate:modelValue' &&
- // omit onVnodeXXX hooks
- !isReservedProp(name)) {
- hasHydrationEventBinding = true;
- }
- if (isEventHandler && isReservedProp(name)) {
- hasVnodeHook = true;
- }
- if (value.type === 20 /* JS_CACHE_EXPRESSION */ ||
- ((value.type === 4 /* SIMPLE_EXPRESSION */ ||
- value.type === 8 /* COMPOUND_EXPRESSION */) &&
- getConstantType(value, context) > 0)) {
- // skip if the prop is a cached handler or has constant value
- return;
- }
- if (name === 'ref') {
- hasRef = true;
- }
- else if (name === 'class') {
- hasClassBinding = true;
- }
- else if (name === 'style') {
- hasStyleBinding = true;
- }
- else if (name !== 'key' && !dynamicPropNames.includes(name)) {
- dynamicPropNames.push(name);
- }
- // treat the dynamic class and style binding of the component as dynamic props
- if (isComponent &&
- (name === 'class' || name === 'style') &&
- !dynamicPropNames.includes(name)) {
- dynamicPropNames.push(name);
- }
- }
- else {
- hasDynamicKeys = true;
- }
- };
- for (let i = 0; i < props.length; i++) {
- // static attribute
- const prop = props[i];
- if (prop.type === 6 /* ATTRIBUTE */) {
- const { loc, name, value } = prop;
- let valueNode = createSimpleExpression(value ? value.content : '', true, value ? value.loc : loc);
- if (name === 'ref') {
- hasRef = true;
- }
- // skip is on <component>, or is="vue:xxx"
- if (name === 'is' &&
- (isComponentTag(tag) ||
- (value && value.content.startsWith('vue:')) ||
- (isCompatEnabled("COMPILER_IS_ON_ELEMENT" /* COMPILER_IS_ON_ELEMENT */, context)))) {
- continue;
- }
- properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), valueNode));
- }
- else {
- // directives
- const { name, arg, exp, loc } = prop;
- const isVBind = name === 'bind';
- const isVOn = name === 'on';
- // skip v-slot - it is handled by its dedicated transform.
- if (name === 'slot') {
- if (!isComponent) {
- context.onError(createCompilerError(40 /* X_V_SLOT_MISPLACED */, loc));
- }
- continue;
- }
- // skip v-once/v-memo - they are handled by dedicated transforms.
- if (name === 'once' || name === 'memo') {
- continue;
- }
- // skip v-is and :is on <component>
- if (name === 'is' ||
- (isVBind &&
- isBindKey(arg, 'is') &&
- (isComponentTag(tag) ||
- (isCompatEnabled("COMPILER_IS_ON_ELEMENT" /* COMPILER_IS_ON_ELEMENT */, context))))) {
- continue;
- }
- // skip v-on in SSR compilation
- if (isVOn && ssr) {
- continue;
- }
- // special case for v-bind and v-on with no argument
- if (!arg && (isVBind || isVOn)) {
- hasDynamicKeys = true;
- if (exp) {
- if (properties.length) {
- mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));
- properties = [];
- }
- if (isVBind) {
- {
- // 2.x v-bind object order compat
- if ((process.env.NODE_ENV !== 'production')) {
- const hasOverridableKeys = mergeArgs.some(arg => {
- if (arg.type === 15 /* JS_OBJECT_EXPRESSION */) {
- return arg.properties.some(({ key }) => {
- if (key.type !== 4 /* SIMPLE_EXPRESSION */ ||
- !key.isStatic) {
- return true;
- }
- return (key.content !== 'class' &&
- key.content !== 'style' &&
- !isOn(key.content));
- });
- }
- else {
- // dynamic expression
- return true;
- }
- });
- if (hasOverridableKeys) {
- checkCompatEnabled("COMPILER_V_BIND_OBJECT_ORDER" /* COMPILER_V_BIND_OBJECT_ORDER */, context, loc);
- }
- }
- if (isCompatEnabled("COMPILER_V_BIND_OBJECT_ORDER" /* COMPILER_V_BIND_OBJECT_ORDER */, context)) {
- mergeArgs.unshift(exp);
- continue;
- }
- }
- mergeArgs.push(exp);
- }
- else {
- // v-on="obj" -> toHandlers(obj)
- mergeArgs.push({
- type: 14 /* JS_CALL_EXPRESSION */,
- loc,
- callee: context.helper(TO_HANDLERS),
- arguments: [exp]
- });
- }
- }
- else {
- context.onError(createCompilerError(isVBind
- ? 34 /* X_V_BIND_NO_EXPRESSION */
- : 35 /* X_V_ON_NO_EXPRESSION */, loc));
- }
- continue;
- }
- const directiveTransform = context.directiveTransforms[name];
- if (directiveTransform) {
- // has built-in directive transform.
- const { props, needRuntime } = directiveTransform(prop, node, context);
- !ssr && props.forEach(analyzePatchFlag);
- properties.push(...props);
- if (needRuntime) {
- runtimeDirectives.push(prop);
- if (isSymbol(needRuntime)) {
- directiveImportMap.set(prop, needRuntime);
- }
- }
- }
- else {
- // no built-in transform, this is a user custom directive.
- runtimeDirectives.push(prop);
- }
- }
- if (prop.type === 6 /* ATTRIBUTE */ &&
- prop.name === 'ref' &&
- context.scopes.vFor > 0 &&
- checkCompatEnabled("COMPILER_V_FOR_REF" /* COMPILER_V_FOR_REF */, context, prop.loc)) {
- properties.push(createObjectProperty(createSimpleExpression('refInFor', true), createSimpleExpression('true', false)));
- }
- }
- let propsExpression = undefined;
- // has v-bind="object" or v-on="object", wrap with mergeProps
- if (mergeArgs.length) {
- if (properties.length) {
- mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));
- }
- if (mergeArgs.length > 1) {
- propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);
- }
- else {
- // single v-bind with nothing else - no need for a mergeProps call
- propsExpression = mergeArgs[0];
- }
- }
- else if (properties.length) {
- propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);
- }
- // patchFlag analysis
- if (hasDynamicKeys) {
- patchFlag |= 16 /* FULL_PROPS */;
- }
- else {
- if (hasClassBinding && !isComponent) {
- patchFlag |= 2 /* CLASS */;
- }
- if (hasStyleBinding && !isComponent) {
- patchFlag |= 4 /* STYLE */;
- }
- if (dynamicPropNames.length) {
- patchFlag |= 8 /* PROPS */;
- }
- if (hasHydrationEventBinding) {
- patchFlag |= 32 /* HYDRATE_EVENTS */;
- }
- }
- if ((patchFlag === 0 || patchFlag === 32 /* HYDRATE_EVENTS */) &&
- (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {
- patchFlag |= 512 /* NEED_PATCH */;
- }
- // pre-normalize props, SSR is skipped for now
- if (!context.inSSR && propsExpression) {
- switch (propsExpression.type) {
- case 15 /* JS_OBJECT_EXPRESSION */:
- // means that there is no v-bind,
- // but still need to deal with dynamic key binding
- let classKeyIndex = -1;
- let styleKeyIndex = -1;
- let hasDynamicKey = false;
- for (let i = 0; i < propsExpression.properties.length; i++) {
- const key = propsExpression.properties[i].key;
- if (isStaticExp(key)) {
- if (key.content === 'class') {
- classKeyIndex = i;
- }
- else if (key.content === 'style') {
- styleKeyIndex = i;
- }
- }
- else if (!key.isHandlerKey) {
- hasDynamicKey = true;
- }
- }
- const classProp = propsExpression.properties[classKeyIndex];
- const styleProp = propsExpression.properties[styleKeyIndex];
- // no dynamic key
- if (!hasDynamicKey) {
- if (classProp && !isStaticExp(classProp.value)) {
- classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);
- }
- if (styleProp &&
- !isStaticExp(styleProp.value) &&
- // the static style is compiled into an object,
- // so use `hasStyleBinding` to ensure that it is a dynamic style binding
- (hasStyleBinding ||
- // v-bind:style and style both exist,
- // v-bind:style with static literal object
- styleProp.value.type === 17 /* JS_ARRAY_EXPRESSION */)) {
- styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);
- }
- }
- else {
- // dynamic key binding, wrap with `normalizeProps`
- propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);
- }
- break;
- case 14 /* JS_CALL_EXPRESSION */:
- // mergeProps call, do nothing
- break;
- default:
- // single v-bind
- propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [
- createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [
- propsExpression
- ])
- ]);
- break;
- }
- }
- return {
- props: propsExpression,
- directives: runtimeDirectives,
- patchFlag,
- dynamicPropNames
- };
-}
-// Dedupe props in an object literal.
-// Literal duplicated attributes would have been warned during the parse phase,
-// however, it's possible to encounter duplicated `onXXX` handlers with different
-// modifiers. We also need to merge static and dynamic class / style attributes.
-// - onXXX handlers / style: merge into array
-// - class: merge into single expression with concatenation
-function dedupeProperties(properties) {
- const knownProps = new Map();
- const deduped = [];
- for (let i = 0; i < properties.length; i++) {
- const prop = properties[i];
- // dynamic keys are always allowed
- if (prop.key.type === 8 /* COMPOUND_EXPRESSION */ || !prop.key.isStatic) {
- deduped.push(prop);
- continue;
- }
- const name = prop.key.content;
- const existing = knownProps.get(name);
- if (existing) {
- if (name === 'style' || name === 'class' || isOn(name)) {
- mergeAsArray(existing, prop);
- }
- // unexpected duplicate, should have emitted error during parse
- }
- else {
- knownProps.set(name, prop);
- deduped.push(prop);
- }
- }
- return deduped;
-}
-function mergeAsArray(existing, incoming) {
- if (existing.value.type === 17 /* JS_ARRAY_EXPRESSION */) {
- existing.value.elements.push(incoming.value);
- }
- else {
- existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);
- }
-}
-function buildDirectiveArgs(dir, context) {
- const dirArgs = [];
- const runtime = directiveImportMap.get(dir);
- if (runtime) {
- // built-in directive with runtime
- dirArgs.push(context.helperString(runtime));
- }
- else {
- {
- // inject statement for resolving directive
- context.helper(RESOLVE_DIRECTIVE);
- context.directives.add(dir.name);
- dirArgs.push(toValidAssetId(dir.name, `directive`));
- }
- }
- const { loc } = dir;
- if (dir.exp)
- dirArgs.push(dir.exp);
- if (dir.arg) {
- if (!dir.exp) {
- dirArgs.push(`void 0`);
- }
- dirArgs.push(dir.arg);
- }
- if (Object.keys(dir.modifiers).length) {
- if (!dir.arg) {
- if (!dir.exp) {
- dirArgs.push(`void 0`);
- }
- dirArgs.push(`void 0`);
- }
- const trueExpression = createSimpleExpression(`true`, false, loc);
- dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));
- }
- return createArrayExpression(dirArgs, dir.loc);
-}
-function stringifyDynamicPropNames(props) {
- let propsNamesString = `[`;
- for (let i = 0, l = props.length; i < l; i++) {
- propsNamesString += JSON.stringify(props[i]);
- if (i < l - 1)
- propsNamesString += ', ';
- }
- return propsNamesString + `]`;
-}
-function isComponentTag(tag) {
- return tag[0].toLowerCase() + tag.slice(1) === 'component';
-}
-
-(process.env.NODE_ENV !== 'production')
- ? Object.freeze({})
- : {};
-(process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];
-const cacheStringFunction = (fn) => {
- const cache = Object.create(null);
- return ((str) => {
- const hit = cache[str];
- return hit || (cache[str] = fn(str));
- });
-};
-const camelizeRE = /-(\w)/g;
-/**
- * @private
- */
-const camelize = cacheStringFunction((str) => {
- return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
-});
-
-const transformSlotOutlet = (node, context) => {
- if (isSlotOutlet(node)) {
- const { children, loc } = node;
- const { slotName, slotProps } = processSlotOutlet(node, context);
- const slotArgs = [
- context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,
- slotName,
- '{}',
- 'undefined',
- 'true'
- ];
- let expectedLen = 2;
- if (slotProps) {
- slotArgs[2] = slotProps;
- expectedLen = 3;
- }
- if (children.length) {
- slotArgs[3] = createFunctionExpression([], children, false, false, loc);
- expectedLen = 4;
- }
- if (context.scopeId && !context.slotted) {
- expectedLen = 5;
- }
- slotArgs.splice(expectedLen); // remove unused arguments
- node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);
- }
-};
-function processSlotOutlet(node, context) {
- let slotName = `"default"`;
- let slotProps = undefined;
- const nonNameProps = [];
- for (let i = 0; i < node.props.length; i++) {
- const p = node.props[i];
- if (p.type === 6 /* ATTRIBUTE */) {
- if (p.value) {
- if (p.name === 'name') {
- slotName = JSON.stringify(p.value.content);
- }
- else {
- p.name = camelize(p.name);
- nonNameProps.push(p);
- }
- }
- }
- else {
- if (p.name === 'bind' && isBindKey(p.arg, 'name')) {
- if (p.exp)
- slotName = p.exp;
- }
- else {
- if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {
- p.arg.content = camelize(p.arg.content);
- }
- nonNameProps.push(p);
- }
- }
- }
- if (nonNameProps.length > 0) {
- const { props, directives } = buildProps(node, context, nonNameProps);
- slotProps = props;
- if (directives.length) {
- context.onError(createCompilerError(36 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));
- }
- }
- return {
- slotName,
- slotProps
- };
-}
-
-const fnExpRE = /^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/;
-const transformOn = (dir, node, context, augmentor) => {
- const { loc, modifiers, arg } = dir;
- if (!dir.exp && !modifiers.length) {
- context.onError(createCompilerError(35 /* X_V_ON_NO_EXPRESSION */, loc));
- }
- let eventName;
- if (arg.type === 4 /* SIMPLE_EXPRESSION */) {
- if (arg.isStatic) {
- const rawName = arg.content;
- // for all event listeners, auto convert it to camelCase. See issue #2249
- eventName = createSimpleExpression(toHandlerKey(camelize$1(rawName)), true, arg.loc);
- }
- else {
- // #2388
- eventName = createCompoundExpression([
- `${context.helperString(TO_HANDLER_KEY)}(`,
- arg,
- `)`
- ]);
- }
- }
- else {
- // already a compound expression.
- eventName = arg;
- eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);
- eventName.children.push(`)`);
- }
- // handler processing
- let exp = dir.exp;
- if (exp && !exp.content.trim()) {
- exp = undefined;
- }
- let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;
- if (exp) {
- const isMemberExp = isMemberExpression(exp.content);
- const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));
- const hasMultipleStatements = exp.content.includes(`;`);
- if ((process.env.NODE_ENV !== 'production') && true) {
- validateBrowserExpression(exp, context, false, hasMultipleStatements);
- }
- if (isInlineStatement || (shouldCache && isMemberExp)) {
- // wrap inline statement in a function expression
- exp = createCompoundExpression([
- `${isInlineStatement
- ? `$event`
- : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,
- exp,
- hasMultipleStatements ? `}` : `)`
- ]);
- }
- }
- let ret = {
- props: [
- createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))
- ]
- };
- // apply extended compiler augmentor
- if (augmentor) {
- ret = augmentor(ret);
- }
- if (shouldCache) {
- // cache handlers so that it's always the same handler being passed down.
- // this avoids unnecessary re-renders when users use inline handlers on
- // components.
- ret.props[0].value = context.cache(ret.props[0].value);
- }
- // mark the key as handler for props normalization check
- ret.props.forEach(p => (p.key.isHandlerKey = true));
- return ret;
-};
-
-// v-bind without arg is handled directly in ./transformElements.ts due to it affecting
-// codegen for the entire props object. This transform here is only for v-bind
-// *with* args.
-const transformBind = (dir, _node, context) => {
- const { exp, modifiers, loc } = dir;
- const arg = dir.arg;
- if (arg.type !== 4 /* SIMPLE_EXPRESSION */) {
- arg.children.unshift(`(`);
- arg.children.push(`) || ""`);
- }
- else if (!arg.isStatic) {
- arg.content = `${arg.content} || ""`;
- }
- // .sync is replaced by v-model:arg
- if (modifiers.includes('camel')) {
- if (arg.type === 4 /* SIMPLE_EXPRESSION */) {
- if (arg.isStatic) {
- arg.content = camelize$1(arg.content);
- }
- else {
- arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;
- }
- }
- else {
- arg.children.unshift(`${context.helperString(CAMELIZE)}(`);
- arg.children.push(`)`);
- }
- }
- if (!context.inSSR) {
- if (modifiers.includes('prop')) {
- injectPrefix(arg, '.');
- }
- if (modifiers.includes('attr')) {
- injectPrefix(arg, '^');
- }
- }
- if (!exp ||
- (exp.type === 4 /* SIMPLE_EXPRESSION */ && !exp.content.trim())) {
- context.onError(createCompilerError(34 /* X_V_BIND_NO_EXPRESSION */, loc));
- return {
- props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]
- };
- }
- return {
- props: [createObjectProperty(arg, exp)]
- };
-};
-const injectPrefix = (arg, prefix) => {
- if (arg.type === 4 /* SIMPLE_EXPRESSION */) {
- if (arg.isStatic) {
- arg.content = prefix + arg.content;
- }
- else {
- arg.content = `\`${prefix}\${${arg.content}}\``;
- }
- }
- else {
- arg.children.unshift(`'${prefix}' + (`);
- arg.children.push(`)`);
- }
-};
-
-// Merge adjacent text nodes and expressions into a single expression
-// e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.
-const transformText = (node, context) => {
- if (node.type === 0 /* ROOT */ ||
- node.type === 1 /* ELEMENT */ ||
- node.type === 11 /* FOR */ ||
- node.type === 10 /* IF_BRANCH */) {
- // perform the transform on node exit so that all expressions have already
- // been processed.
- return () => {
- const children = node.children;
- let currentContainer = undefined;
- let hasText = false;
- for (let i = 0; i < children.length; i++) {
- const child = children[i];
- if (isText(child)) {
- hasText = true;
- for (let j = i + 1; j < children.length; j++) {
- const next = children[j];
- if (isText(next)) {
- if (!currentContainer) {
- currentContainer = children[i] = {
- type: 8 /* COMPOUND_EXPRESSION */,
- loc: child.loc,
- children: [child]
- };
- }
- // merge adjacent text node into current
- currentContainer.children.push(` + `, next);
- children.splice(j, 1);
- j--;
- }
- else {
- currentContainer = undefined;
- break;
- }
- }
- }
- }
- if (!hasText ||
- // if this is a plain element with a single text child, leave it
- // as-is since the runtime has dedicated fast path for this by directly
- // setting textContent of the element.
- // for component root it's always normalized anyway.
- (children.length === 1 &&
- (node.type === 0 /* ROOT */ ||
- (node.type === 1 /* ELEMENT */ &&
- node.tagType === 0 /* ELEMENT */ &&
- // #3756
- // custom directives can potentially add DOM elements arbitrarily,
- // we need to avoid setting textContent of the element at runtime
- // to avoid accidentally overwriting the DOM elements added
- // by the user through custom directives.
- !node.props.find(p => p.type === 7 /* DIRECTIVE */ &&
- !context.directiveTransforms[p.name]) &&
- // in compat mode, <template> tags with no special directives
- // will be rendered as a fragment so its children must be
- // converted into vnodes.
- !(node.tag === 'template'))))) {
- return;
- }
- // pre-convert text nodes into createTextVNode(text) calls to avoid
- // runtime normalization.
- for (let i = 0; i < children.length; i++) {
- const child = children[i];
- if (isText(child) || child.type === 8 /* COMPOUND_EXPRESSION */) {
- const callArgs = [];
- // createTextVNode defaults to single whitespace, so if it is a
- // single space the code could be an empty call to save bytes.
- if (child.type !== 2 /* TEXT */ || child.content !== ' ') {
- callArgs.push(child);
- }
- // mark dynamic text with flag so it gets patched inside a block
- if (!context.ssr &&
- getConstantType(child, context) === 0 /* NOT_CONSTANT */) {
- callArgs.push(1 /* TEXT */ +
- ((process.env.NODE_ENV !== 'production') ? ` /* ${PatchFlagNames[1 /* TEXT */]} */` : ``));
- }
- children[i] = {
- type: 12 /* TEXT_CALL */,
- content: child,
- loc: child.loc,
- codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)
- };
- }
- }
- };
- }
-};
-
-const seen = new WeakSet();
-const transformOnce = (node, context) => {
- if (node.type === 1 /* ELEMENT */ && findDir(node, 'once', true)) {
- if (seen.has(node) || context.inVOnce) {
- return;
- }
- seen.add(node);
- context.inVOnce = true;
- context.helper(SET_BLOCK_TRACKING);
- return () => {
- context.inVOnce = false;
- const cur = context.currentNode;
- if (cur.codegenNode) {
- cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);
- }
- };
- }
-};
-
-const transformModel = (dir, node, context) => {
- const { exp, arg } = dir;
- if (!exp) {
- context.onError(createCompilerError(41 /* X_V_MODEL_NO_EXPRESSION */, dir.loc));
- return createTransformProps();
- }
- const rawExp = exp.loc.source;
- const expString = exp.type === 4 /* SIMPLE_EXPRESSION */ ? exp.content : rawExp;
- const maybeRef = !true /* SETUP_CONST */;
- if (!expString.trim() ||
- (!isMemberExpression(expString) && !maybeRef)) {
- context.onError(createCompilerError(42 /* X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));
- return createTransformProps();
- }
- const propName = arg ? arg : createSimpleExpression('modelValue', true);
- const eventName = arg
- ? isStaticExp(arg)
- ? `onUpdate:${arg.content}`
- : createCompoundExpression(['"onUpdate:" + ', arg])
- : `onUpdate:modelValue`;
- let assignmentExp;
- const eventArg = context.isTS ? `($event: any)` : `$event`;
- {
- assignmentExp = createCompoundExpression([
- `${eventArg} => ((`,
- exp,
- `) = $event)`
- ]);
- }
- const props = [
- // modelValue: foo
- createObjectProperty(propName, dir.exp),
- // "onUpdate:modelValue": $event => (foo = $event)
- createObjectProperty(eventName, assignmentExp)
- ];
- // modelModifiers: { foo: true, "bar-baz": true }
- if (dir.modifiers.length && node.tagType === 1 /* COMPONENT */) {
- const modifiers = dir.modifiers
- .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)
- .join(`, `);
- const modifiersKey = arg
- ? isStaticExp(arg)
- ? `${arg.content}Modifiers`
- : createCompoundExpression([arg, ' + "Modifiers"'])
- : `modelModifiers`;
- props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* CAN_HOIST */)));
- }
- return createTransformProps(props);
-};
-function createTransformProps(props = []) {
- return { props };
-}
-
-const validDivisionCharRE = /[\w).+\-_$\]]/;
-const transformFilter = (node, context) => {
- if (!isCompatEnabled("COMPILER_FILTER" /* COMPILER_FILTERS */, context)) {
- return;
- }
- if (node.type === 5 /* INTERPOLATION */) {
- // filter rewrite is applied before expression transform so only
- // simple expressions are possible at this stage
- rewriteFilter(node.content, context);
- }
- if (node.type === 1 /* ELEMENT */) {
- node.props.forEach((prop) => {
- if (prop.type === 7 /* DIRECTIVE */ &&
- prop.name !== 'for' &&
- prop.exp) {
- rewriteFilter(prop.exp, context);
- }
- });
- }
-};
-function rewriteFilter(node, context) {
- if (node.type === 4 /* SIMPLE_EXPRESSION */) {
- parseFilter(node, context);
- }
- else {
- for (let i = 0; i < node.children.length; i++) {
- const child = node.children[i];
- if (typeof child !== 'object')
- continue;
- if (child.type === 4 /* SIMPLE_EXPRESSION */) {
- parseFilter(child, context);
- }
- else if (child.type === 8 /* COMPOUND_EXPRESSION */) {
- rewriteFilter(node, context);
- }
- else if (child.type === 5 /* INTERPOLATION */) {
- rewriteFilter(child.content, context);
- }
- }
- }
-}
-function parseFilter(node, context) {
- const exp = node.content;
- let inSingle = false;
- let inDouble = false;
- let inTemplateString = false;
- let inRegex = false;
- let curly = 0;
- let square = 0;
- let paren = 0;
- let lastFilterIndex = 0;
- let c, prev, i, expression, filters = [];
- for (i = 0; i < exp.length; i++) {
- prev = c;
- c = exp.charCodeAt(i);
- if (inSingle) {
- if (c === 0x27 && prev !== 0x5c)
- inSingle = false;
- }
- else if (inDouble) {
- if (c === 0x22 && prev !== 0x5c)
- inDouble = false;
- }
- else if (inTemplateString) {
- if (c === 0x60 && prev !== 0x5c)
- inTemplateString = false;
- }
- else if (inRegex) {
- if (c === 0x2f && prev !== 0x5c)
- inRegex = false;
- }
- else if (c === 0x7c && // pipe
- exp.charCodeAt(i + 1) !== 0x7c &&
- exp.charCodeAt(i - 1) !== 0x7c &&
- !curly &&
- !square &&
- !paren) {
- if (expression === undefined) {
- // first filter, end of expression
- lastFilterIndex = i + 1;
- expression = exp.slice(0, i).trim();
- }
- else {
- pushFilter();
- }
- }
- else {
- switch (c) {
- case 0x22:
- inDouble = true;
- break; // "
- case 0x27:
- inSingle = true;
- break; // '
- case 0x60:
- inTemplateString = true;
- break; // `
- case 0x28:
- paren++;
- break; // (
- case 0x29:
- paren--;
- break; // )
- case 0x5b:
- square++;
- break; // [
- case 0x5d:
- square--;
- break; // ]
- case 0x7b:
- curly++;
- break; // {
- case 0x7d:
- curly--;
- break; // }
- }
- if (c === 0x2f) {
- // /
- let j = i - 1;
- let p;
- // find first non-whitespace prev char
- for (; j >= 0; j--) {
- p = exp.charAt(j);
- if (p !== ' ')
- break;
- }
- if (!p || !validDivisionCharRE.test(p)) {
- inRegex = true;
- }
- }
- }
- }
- if (expression === undefined) {
- expression = exp.slice(0, i).trim();
- }
- else if (lastFilterIndex !== 0) {
- pushFilter();
- }
- function pushFilter() {
- filters.push(exp.slice(lastFilterIndex, i).trim());
- lastFilterIndex = i + 1;
- }
- if (filters.length) {
- (process.env.NODE_ENV !== 'production') &&
- warnDeprecation("COMPILER_FILTER" /* COMPILER_FILTERS */, context, node.loc);
- for (i = 0; i < filters.length; i++) {
- expression = wrapFilter(expression, filters[i], context);
- }
- node.content = expression;
- }
-}
-function wrapFilter(exp, filter, context) {
- context.helper(RESOLVE_FILTER);
- const i = filter.indexOf('(');
- if (i < 0) {
- context.filters.add(filter);
- return `${toValidAssetId(filter, 'filter')}(${exp})`;
- }
- else {
- const name = filter.slice(0, i);
- const args = filter.slice(i + 1);
- context.filters.add(name);
- return `${toValidAssetId(name, 'filter')}(${exp}${args !== ')' ? ',' + args : args}`;
- }
-}
-
-const seen$1 = new WeakSet();
-const transformMemo = (node, context) => {
- if (node.type === 1 /* ELEMENT */) {
- const dir = findDir(node, 'memo');
- if (!dir || seen$1.has(node)) {
- return;
- }
- seen$1.add(node);
- return () => {
- const codegenNode = node.codegenNode ||
- context.currentNode.codegenNode;
- if (codegenNode && codegenNode.type === 13 /* VNODE_CALL */) {
- // non-component sub tree should be turned into a block
- if (node.tagType !== 1 /* COMPONENT */) {
- makeBlock(codegenNode, context);
- }
- node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [
- dir.exp,
- createFunctionExpression(undefined, codegenNode),
- `_cache`,
- String(context.cached++)
- ]);
- }
- };
- }
-};
-
-function getBaseTransformPreset(prefixIdentifiers) {
- return [
- [
- transformOnce,
- transformIf,
- transformMemo,
- transformFor,
- ...([transformFilter] ),
- ...((process.env.NODE_ENV !== 'production')
- ? [transformExpression]
- : []),
- transformSlotOutlet,
- transformElement,
- trackSlotScopes,
- transformText
- ],
- {
- on: transformOn,
- bind: transformBind,
- model: transformModel
- }
- ];
-}
-// we name it `baseCompile` so that higher order compilers like
-// @vue/compiler-dom can export `compile` while re-exporting everything else.
-function baseCompile(template, options = {}) {
- const onError = options.onError || defaultOnError;
- const isModuleMode = options.mode === 'module';
- /* istanbul ignore if */
- {
- if (options.prefixIdentifiers === true) {
- onError(createCompilerError(46 /* X_PREFIX_ID_NOT_SUPPORTED */));
- }
- else if (isModuleMode) {
- onError(createCompilerError(47 /* X_MODULE_MODE_NOT_SUPPORTED */));
- }
- }
- const prefixIdentifiers = !true ;
- if (options.cacheHandlers) {
- onError(createCompilerError(48 /* X_CACHE_HANDLER_NOT_SUPPORTED */));
- }
- if (options.scopeId && !isModuleMode) {
- onError(createCompilerError(49 /* X_SCOPE_ID_NOT_SUPPORTED */));
- }
- const ast = isString(template) ? baseParse(template, options) : template;
- const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();
- transform(ast, extend({}, options, {
- prefixIdentifiers,
- nodeTransforms: [
- ...nodeTransforms,
- ...(options.nodeTransforms || []) // user transforms
- ],
- directiveTransforms: extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms
- )
- }));
- return generate(ast, extend({}, options, {
- prefixIdentifiers
- }));
-}
-
-const noopDirectiveTransform = () => ({ props: [] });
-
-var compilerCore_esmBundler = {
- __proto__: null,
- BASE_TRANSITION: BASE_TRANSITION,
- CAMELIZE: CAMELIZE,
- CAPITALIZE: CAPITALIZE,
- CREATE_BLOCK: CREATE_BLOCK,
- CREATE_COMMENT: CREATE_COMMENT,
- CREATE_ELEMENT_BLOCK: CREATE_ELEMENT_BLOCK,
- CREATE_ELEMENT_VNODE: CREATE_ELEMENT_VNODE,
- CREATE_SLOTS: CREATE_SLOTS,
- CREATE_STATIC: CREATE_STATIC,
- CREATE_TEXT: CREATE_TEXT,
- CREATE_VNODE: CREATE_VNODE,
- FRAGMENT: FRAGMENT,
- GUARD_REACTIVE_PROPS: GUARD_REACTIVE_PROPS,
- IS_MEMO_SAME: IS_MEMO_SAME,
- IS_REF: IS_REF,
- KEEP_ALIVE: KEEP_ALIVE,
- MERGE_PROPS: MERGE_PROPS,
- NORMALIZE_CLASS: NORMALIZE_CLASS,
- NORMALIZE_PROPS: NORMALIZE_PROPS,
- NORMALIZE_STYLE: NORMALIZE_STYLE,
- OPEN_BLOCK: OPEN_BLOCK,
- POP_SCOPE_ID: POP_SCOPE_ID,
- PUSH_SCOPE_ID: PUSH_SCOPE_ID,
- RENDER_LIST: RENDER_LIST,
- RENDER_SLOT: RENDER_SLOT,
- RESOLVE_COMPONENT: RESOLVE_COMPONENT,
- RESOLVE_DIRECTIVE: RESOLVE_DIRECTIVE,
- RESOLVE_DYNAMIC_COMPONENT: RESOLVE_DYNAMIC_COMPONENT,
- RESOLVE_FILTER: RESOLVE_FILTER,
- SET_BLOCK_TRACKING: SET_BLOCK_TRACKING,
- SUSPENSE: SUSPENSE,
- TELEPORT: TELEPORT,
- TO_DISPLAY_STRING: TO_DISPLAY_STRING,
- TO_HANDLERS: TO_HANDLERS,
- TO_HANDLER_KEY: TO_HANDLER_KEY,
- UNREF: UNREF,
- WITH_CTX: WITH_CTX,
- WITH_DIRECTIVES: WITH_DIRECTIVES,
- WITH_MEMO: WITH_MEMO,
- advancePositionWithClone: advancePositionWithClone,
- advancePositionWithMutation: advancePositionWithMutation,
- assert: assert,
- baseCompile: baseCompile,
- baseParse: baseParse,
- buildProps: buildProps,
- buildSlots: buildSlots,
- checkCompatEnabled: checkCompatEnabled,
- createArrayExpression: createArrayExpression,
- createAssignmentExpression: createAssignmentExpression,
- createBlockStatement: createBlockStatement,
- createCacheExpression: createCacheExpression,
- createCallExpression: createCallExpression,
- createCompilerError: createCompilerError,
- createCompoundExpression: createCompoundExpression,
- createConditionalExpression: createConditionalExpression,
- createForLoopParams: createForLoopParams,
- createFunctionExpression: createFunctionExpression,
- createIfStatement: createIfStatement,
- createInterpolation: createInterpolation,
- createObjectExpression: createObjectExpression,
- createObjectProperty: createObjectProperty,
- createReturnStatement: createReturnStatement,
- createRoot: createRoot,
- createSequenceExpression: createSequenceExpression,
- createSimpleExpression: createSimpleExpression,
- createStructuralDirectiveTransform: createStructuralDirectiveTransform,
- createTemplateLiteral: createTemplateLiteral,
- createTransformContext: createTransformContext,
- createVNodeCall: createVNodeCall,
- extractIdentifiers: extractIdentifiers,
- findDir: findDir,
- findProp: findProp,
- generate: generate,
- getBaseTransformPreset: getBaseTransformPreset,
- getInnerRange: getInnerRange,
- getMemoedVNodeCall: getMemoedVNodeCall,
- getVNodeBlockHelper: getVNodeBlockHelper,
- getVNodeHelper: getVNodeHelper,
- hasDynamicKeyVBind: hasDynamicKeyVBind,
- hasScopeRef: hasScopeRef,
- helperNameMap: helperNameMap,
- injectProp: injectProp,
- isBindKey: isBindKey,
- isBuiltInType: isBuiltInType,
- isCoreComponent: isCoreComponent,
- isFunctionType: isFunctionType,
- isInDestructureAssignment: isInDestructureAssignment,
- isMemberExpression: isMemberExpression,
- isMemberExpressionBrowser: isMemberExpressionBrowser,
- isMemberExpressionNode: isMemberExpressionNode,
- isReferencedIdentifier: isReferencedIdentifier,
- isSimpleIdentifier: isSimpleIdentifier,
- isSlotOutlet: isSlotOutlet,
- isStaticExp: isStaticExp,
- isStaticProperty: isStaticProperty,
- isStaticPropertyKey: isStaticPropertyKey,
- isTemplateNode: isTemplateNode,
- isText: isText,
- isVSlot: isVSlot,
- locStub: locStub,
- makeBlock: makeBlock,
- noopDirectiveTransform: noopDirectiveTransform,
- processExpression: processExpression,
- processFor: processFor,
- processIf: processIf,
- processSlotOutlet: processSlotOutlet,
- registerRuntimeHelpers: registerRuntimeHelpers,
- resolveComponentType: resolveComponentType,
- toValidAssetId: toValidAssetId,
- trackSlotScopes: trackSlotScopes,
- trackVForSlotScopes: trackVForSlotScopes,
- transform: transform,
- transformBind: transformBind,
- transformElement: transformElement,
- transformExpression: transformExpression,
- transformModel: transformModel,
- transformOn: transformOn,
- traverseNode: traverseNode,
- walkBlockDeclarations: walkBlockDeclarations,
- walkFunctionParams: walkFunctionParams,
- walkIdentifiers: walkIdentifiers,
- warnDeprecation: warnDeprecation,
- generateCodeFrame: generateCodeFrame
-};
-
-var require$$0 = /*@__PURE__*/build.getAugmentedNamespace(compilerCore_esmBundler);
-
-var require$$1 = /*@__PURE__*/build.getAugmentedNamespace(shared_esmBundler);
-
-(function (exports) {
-
-Object.defineProperty(exports, '__esModule', { value: true });
-
-var compilerCore = require$$0;
-var shared = require$$1;
-
-const V_MODEL_RADIO = Symbol(`vModelRadio` );
-const V_MODEL_CHECKBOX = Symbol(`vModelCheckbox` );
-const V_MODEL_TEXT = Symbol(`vModelText` );
-const V_MODEL_SELECT = Symbol(`vModelSelect` );
-const V_MODEL_DYNAMIC = Symbol(`vModelDynamic` );
-const V_ON_WITH_MODIFIERS = Symbol(`vOnModifiersGuard` );
-const V_ON_WITH_KEYS = Symbol(`vOnKeysGuard` );
-const V_SHOW = Symbol(`vShow` );
-const TRANSITION = Symbol(`Transition` );
-const TRANSITION_GROUP = Symbol(`TransitionGroup` );
-compilerCore.registerRuntimeHelpers({
- [V_MODEL_RADIO]: `vModelRadio`,
- [V_MODEL_CHECKBOX]: `vModelCheckbox`,
- [V_MODEL_TEXT]: `vModelText`,
- [V_MODEL_SELECT]: `vModelSelect`,
- [V_MODEL_DYNAMIC]: `vModelDynamic`,
- [V_ON_WITH_MODIFIERS]: `withModifiers`,
- [V_ON_WITH_KEYS]: `withKeys`,
- [V_SHOW]: `vShow`,
- [TRANSITION]: `Transition`,
- [TRANSITION_GROUP]: `TransitionGroup`
-});
-
-var namedCharacterReferences = {
- GT: ">",
- gt: ">",
- LT: "<",
- lt: "<",
- "ac;": "∾",
- "af;": "⁡",
- AMP: "&",
- amp: "&",
- "ap;": "≈",
- "DD;": "ⅅ",
- "dd;": "ⅆ",
- deg: "°",
- "ee;": "ⅇ",
- "eg;": "⪚",
- "el;": "⪙",
- ETH: "Ð",
- eth: "ð",
- "gE;": "≧",
- "ge;": "≥",
- "Gg;": "⋙",
- "gg;": "≫",
- "gl;": "≷",
- "GT;": ">",
- "Gt;": "≫",
- "gt;": ">",
- "ic;": "⁣",
- "ii;": "ⅈ",
- "Im;": "ℑ",
- "in;": "∈",
- "it;": "⁢",
- "lE;": "≦",
- "le;": "≤",
- "lg;": "≶",
- "Ll;": "⋘",
- "ll;": "≪",
- "LT;": "<",
- "Lt;": "≪",
- "lt;": "<",
- "mp;": "∓",
- "Mu;": "Μ",
- "mu;": "μ",
- "ne;": "≠",
- "ni;": "∋",
- not: "¬",
- "Nu;": "Ν",
- "nu;": "ν",
- "Or;": "⩔",
- "or;": "∨",
- "oS;": "Ⓢ",
- "Pi;": "Π",
- "pi;": "π",
- "pm;": "±",
- "Pr;": "⪻",
- "pr;": "≺",
- "Re;": "ℜ",
- REG: "®",
- reg: "®",
- "rx;": "℞",
- "Sc;": "⪼",
- "sc;": "≻",
- shy: "­",
- uml: "¨",
- "wp;": "℘",
- "wr;": "≀",
- "Xi;": "Ξ",
- "xi;": "ξ",
- yen: "¥",
- "acd;": "∿",
- "acE;": "∾̳",
- "Acy;": "А",
- "acy;": "а",
- "Afr;": "𝔄",
- "afr;": "𝔞",
- "AMP;": "&",
- "amp;": "&",
- "And;": "⩓",
- "and;": "∧",
- "ang;": "∠",
- "apE;": "⩰",
- "ape;": "≊",
- "ast;": "*",
- Auml: "Ä",
- auml: "ä",
- "Bcy;": "Б",
- "bcy;": "б",
- "Bfr;": "𝔅",
- "bfr;": "𝔟",
- "bne;": "=⃥",
- "bot;": "⊥",
- "Cap;": "⋒",
- "cap;": "∩",
- cent: "¢",
- "Cfr;": "ℭ",
- "cfr;": "𝔠",
- "Chi;": "Χ",
- "chi;": "χ",
- "cir;": "○",
- COPY: "©",
- copy: "©",
- "Cup;": "⋓",
- "cup;": "∪",
- "Dcy;": "Д",
- "dcy;": "д",
- "deg;": "°",
- "Del;": "∇",
- "Dfr;": "𝔇",
- "dfr;": "𝔡",
- "die;": "¨",
- "div;": "÷",
- "Dot;": "¨",
- "dot;": "˙",
- "Ecy;": "Э",
- "ecy;": "э",
- "Efr;": "𝔈",
- "efr;": "𝔢",
- "egs;": "⪖",
- "ell;": "ℓ",
- "els;": "⪕",
- "ENG;": "Ŋ",
- "eng;": "ŋ",
- "Eta;": "Η",
- "eta;": "η",
- "ETH;": "Ð",
- "eth;": "ð",
- Euml: "Ë",
- euml: "ë",
- "Fcy;": "Ф",
- "fcy;": "ф",
- "Ffr;": "𝔉",
- "ffr;": "𝔣",
- "gap;": "⪆",
- "Gcy;": "Г",
- "gcy;": "г",
- "gEl;": "⪌",
- "gel;": "⋛",
- "geq;": "≥",
- "ges;": "⩾",
- "Gfr;": "𝔊",
- "gfr;": "𝔤",
- "ggg;": "⋙",
- "gla;": "⪥",
- "glE;": "⪒",
- "glj;": "⪤",
- "gnE;": "≩",
- "gne;": "⪈",
- "Hat;": "^",
- "Hfr;": "ℌ",
- "hfr;": "𝔥",
- "Icy;": "И",
- "icy;": "и",
- "iff;": "⇔",
- "Ifr;": "ℑ",
- "ifr;": "𝔦",
- "Int;": "∬",
- "int;": "∫",
- Iuml: "Ï",
- iuml: "ï",
- "Jcy;": "Й",
- "jcy;": "й",
- "Jfr;": "𝔍",
- "jfr;": "𝔧",
- "Kcy;": "К",
- "kcy;": "к",
- "Kfr;": "𝔎",
- "kfr;": "𝔨",
- "lap;": "⪅",
- "lat;": "⪫",
- "Lcy;": "Л",
- "lcy;": "л",
- "lEg;": "⪋",
- "leg;": "⋚",
- "leq;": "≤",
- "les;": "⩽",
- "Lfr;": "𝔏",
- "lfr;": "𝔩",
- "lgE;": "⪑",
- "lnE;": "≨",
- "lne;": "⪇",
- "loz;": "◊",
- "lrm;": "‎",
- "Lsh;": "↰",
- "lsh;": "↰",
- macr: "¯",
- "Map;": "⤅",
- "map;": "↦",
- "Mcy;": "М",
- "mcy;": "м",
- "Mfr;": "𝔐",
- "mfr;": "𝔪",
- "mho;": "℧",
- "mid;": "∣",
- "nap;": "≉",
- nbsp: " ",
- "Ncy;": "Н",
- "ncy;": "н",
- "Nfr;": "𝔑",
- "nfr;": "𝔫",
- "ngE;": "≧̸",
- "nge;": "≱",
- "nGg;": "⋙̸",
- "nGt;": "≫⃒",
- "ngt;": "≯",
- "nis;": "⋼",
- "niv;": "∋",
- "nlE;": "≦̸",
- "nle;": "≰",
- "nLl;": "⋘̸",
- "nLt;": "≪⃒",
- "nlt;": "≮",
- "Not;": "⫬",
- "not;": "¬",
- "npr;": "⊀",
- "nsc;": "⊁",
- "num;": "#",
- "Ocy;": "О",
- "ocy;": "о",
- "Ofr;": "𝔒",
- "ofr;": "𝔬",
- "ogt;": "⧁",
- "ohm;": "Ω",
- "olt;": "⧀",
- "ord;": "⩝",
- ordf: "ª",
- ordm: "º",
- "orv;": "⩛",
- Ouml: "Ö",
- ouml: "ö",
- "par;": "∥",
- para: "¶",
- "Pcy;": "П",
- "pcy;": "п",
- "Pfr;": "𝔓",
- "pfr;": "𝔭",
- "Phi;": "Φ",
- "phi;": "φ",
- "piv;": "ϖ",
- "prE;": "⪳",
- "pre;": "⪯",
- "Psi;": "Ψ",
- "psi;": "ψ",
- "Qfr;": "𝔔",
- "qfr;": "𝔮",
- QUOT: "\"",
- quot: "\"",
- "Rcy;": "Р",
- "rcy;": "р",
- "REG;": "®",
- "reg;": "®",
- "Rfr;": "ℜ",
- "rfr;": "𝔯",
- "Rho;": "Ρ",
- "rho;": "ρ",
- "rlm;": "‏",
- "Rsh;": "↱",
- "rsh;": "↱",
- "scE;": "⪴",
- "sce;": "⪰",
- "Scy;": "С",
- "scy;": "с",
- sect: "§",
- "Sfr;": "𝔖",
- "sfr;": "𝔰",
- "shy;": "­",
- "sim;": "∼",
- "smt;": "⪪",
- "sol;": "/",
- "squ;": "□",
- "Sub;": "⋐",
- "sub;": "⊂",
- "Sum;": "∑",
- "sum;": "∑",
- "Sup;": "⋑",
- "sup;": "⊃",
- sup1: "¹",
- sup2: "²",
- sup3: "³",
- "Tab;": "\t",
- "Tau;": "Τ",
- "tau;": "τ",
- "Tcy;": "Т",
- "tcy;": "т",
- "Tfr;": "𝔗",
- "tfr;": "𝔱",
- "top;": "⊤",
- "Ucy;": "У",
- "ucy;": "у",
- "Ufr;": "𝔘",
- "ufr;": "𝔲",
- "uml;": "¨",
- Uuml: "Ü",
- uuml: "ü",
- "Vcy;": "В",
- "vcy;": "в",
- "Vee;": "⋁",
- "vee;": "∨",
- "Vfr;": "𝔙",
- "vfr;": "𝔳",
- "Wfr;": "𝔚",
- "wfr;": "𝔴",
- "Xfr;": "𝔛",
- "xfr;": "𝔵",
- "Ycy;": "Ы",
- "ycy;": "ы",
- "yen;": "¥",
- "Yfr;": "𝔜",
- "yfr;": "𝔶",
- yuml: "ÿ",
- "Zcy;": "З",
- "zcy;": "з",
- "Zfr;": "ℨ",
- "zfr;": "𝔷",
- "zwj;": "‍",
- Acirc: "Â",
- acirc: "â",
- acute: "´",
- AElig: "Æ",
- aelig: "æ",
- "andd;": "⩜",
- "andv;": "⩚",
- "ange;": "⦤",
- "Aopf;": "𝔸",
- "aopf;": "𝕒",
- "apid;": "≋",
- "apos;": "'",
- Aring: "Å",
- aring: "å",
- "Ascr;": "𝒜",
- "ascr;": "𝒶",
- "Auml;": "Ä",
- "auml;": "ä",
- "Barv;": "⫧",
- "bbrk;": "⎵",
- "Beta;": "Β",
- "beta;": "β",
- "beth;": "ℶ",
- "bNot;": "⫭",
- "bnot;": "⌐",
- "Bopf;": "𝔹",
- "bopf;": "𝕓",
- "boxH;": "═",
- "boxh;": "─",
- "boxV;": "║",
- "boxv;": "│",
- "Bscr;": "ℬ",
- "bscr;": "𝒷",
- "bsim;": "∽",
- "bsol;": "\\",
- "bull;": "•",
- "bump;": "≎",
- "caps;": "∩︀",
- "Cdot;": "Ċ",
- "cdot;": "ċ",
- cedil: "¸",
- "cent;": "¢",
- "CHcy;": "Ч",
- "chcy;": "ч",
- "circ;": "ˆ",
- "cirE;": "⧃",
- "cire;": "≗",
- "comp;": "∁",
- "cong;": "≅",
- "Copf;": "ℂ",
- "copf;": "𝕔",
- "COPY;": "©",
- "copy;": "©",
- "Cscr;": "𝒞",
- "cscr;": "𝒸",
- "csub;": "⫏",
- "csup;": "⫐",
- "cups;": "∪︀",
- "Darr;": "↡",
- "dArr;": "⇓",
- "darr;": "↓",
- "dash;": "‐",
- "dHar;": "⥥",
- "diam;": "⋄",
- "DJcy;": "Ђ",
- "djcy;": "ђ",
- "Dopf;": "𝔻",
- "dopf;": "𝕕",
- "Dscr;": "𝒟",
- "dscr;": "𝒹",
- "DScy;": "Ѕ",
- "dscy;": "ѕ",
- "dsol;": "⧶",
- "dtri;": "▿",
- "DZcy;": "Џ",
- "dzcy;": "џ",
- "ecir;": "≖",
- Ecirc: "Ê",
- ecirc: "ê",
- "Edot;": "Ė",
- "eDot;": "≑",
- "edot;": "ė",
- "emsp;": " ",
- "ensp;": " ",
- "Eopf;": "𝔼",
- "eopf;": "𝕖",
- "epar;": "⋕",
- "epsi;": "ε",
- "Escr;": "ℰ",
- "escr;": "ℯ",
- "Esim;": "⩳",
- "esim;": "≂",
- "Euml;": "Ë",
- "euml;": "ë",
- "euro;": "€",
- "excl;": "!",
- "flat;": "♭",
- "fnof;": "ƒ",
- "Fopf;": "𝔽",
- "fopf;": "𝕗",
- "fork;": "⋔",
- "Fscr;": "ℱ",
- "fscr;": "𝒻",
- "Gdot;": "Ġ",
- "gdot;": "ġ",
- "geqq;": "≧",
- "gesl;": "⋛︀",
- "GJcy;": "Ѓ",
- "gjcy;": "ѓ",
- "gnap;": "⪊",
- "gneq;": "⪈",
- "Gopf;": "𝔾",
- "gopf;": "𝕘",
- "Gscr;": "𝒢",
- "gscr;": "ℊ",
- "gsim;": "≳",
- "gtcc;": "⪧",
- "gvnE;": "≩︀",
- "half;": "½",
- "hArr;": "⇔",
- "harr;": "↔",
- "hbar;": "ℏ",
- "Hopf;": "ℍ",
- "hopf;": "𝕙",
- "Hscr;": "ℋ",
- "hscr;": "𝒽",
- Icirc: "Î",
- icirc: "î",
- "Idot;": "İ",
- "IEcy;": "Е",
- "iecy;": "е",
- iexcl: "¡",
- "imof;": "⊷",
- "IOcy;": "Ё",
- "iocy;": "ё",
- "Iopf;": "𝕀",
- "iopf;": "𝕚",
- "Iota;": "Ι",
- "iota;": "ι",
- "Iscr;": "ℐ",
- "iscr;": "𝒾",
- "isin;": "∈",
- "Iuml;": "Ï",
- "iuml;": "ï",
- "Jopf;": "𝕁",
- "jopf;": "𝕛",
- "Jscr;": "𝒥",
- "jscr;": "𝒿",
- "KHcy;": "Х",
- "khcy;": "х",
- "KJcy;": "Ќ",
- "kjcy;": "ќ",
- "Kopf;": "𝕂",
- "kopf;": "𝕜",
- "Kscr;": "𝒦",
- "kscr;": "𝓀",
- "Lang;": "⟪",
- "lang;": "⟨",
- laquo: "«",
- "Larr;": "↞",
- "lArr;": "⇐",
- "larr;": "←",
- "late;": "⪭",
- "lcub;": "{",
- "ldca;": "⤶",
- "ldsh;": "↲",
- "leqq;": "≦",
- "lesg;": "⋚︀",
- "lHar;": "⥢",
- "LJcy;": "Љ",
- "ljcy;": "љ",
- "lnap;": "⪉",
- "lneq;": "⪇",
- "Lopf;": "𝕃",
- "lopf;": "𝕝",
- "lozf;": "⧫",
- "lpar;": "(",
- "Lscr;": "ℒ",
- "lscr;": "𝓁",
- "lsim;": "≲",
- "lsqb;": "[",
- "ltcc;": "⪦",
- "ltri;": "◃",
- "lvnE;": "≨︀",
- "macr;": "¯",
- "male;": "♂",
- "malt;": "✠",
- micro: "µ",
- "mlcp;": "⫛",
- "mldr;": "…",
- "Mopf;": "𝕄",
- "mopf;": "𝕞",
- "Mscr;": "ℳ",
- "mscr;": "𝓂",
- "nang;": "∠⃒",
- "napE;": "⩰̸",
- "nbsp;": " ",
- "ncap;": "⩃",
- "ncup;": "⩂",
- "ngeq;": "≱",
- "nges;": "⩾̸",
- "ngtr;": "≯",
- "nGtv;": "≫̸",
- "nisd;": "⋺",
- "NJcy;": "Њ",
- "njcy;": "њ",
- "nldr;": "‥",
- "nleq;": "≰",
- "nles;": "⩽̸",
- "nLtv;": "≪̸",
- "nmid;": "∤",
- "Nopf;": "ℕ",
- "nopf;": "𝕟",
- "npar;": "∦",
- "npre;": "⪯̸",
- "nsce;": "⪰̸",
- "Nscr;": "𝒩",
- "nscr;": "𝓃",
- "nsim;": "≁",
- "nsub;": "⊄",
- "nsup;": "⊅",
- "ntgl;": "≹",
- "ntlg;": "≸",
- "nvap;": "≍⃒",
- "nvge;": "≥⃒",
- "nvgt;": ">⃒",
- "nvle;": "≤⃒",
- "nvlt;": "<⃒",
- "oast;": "⊛",
- "ocir;": "⊚",
- Ocirc: "Ô",
- ocirc: "ô",
- "odiv;": "⨸",
- "odot;": "⊙",
- "ogon;": "˛",
- "oint;": "∮",
- "omid;": "⦶",
- "Oopf;": "𝕆",
- "oopf;": "𝕠",
- "opar;": "⦷",
- "ordf;": "ª",
- "ordm;": "º",
- "oror;": "⩖",
- "Oscr;": "𝒪",
- "oscr;": "ℴ",
- "osol;": "⊘",
- "Ouml;": "Ö",
- "ouml;": "ö",
- "para;": "¶",
- "part;": "∂",
- "perp;": "⊥",
- "phiv;": "ϕ",
- "plus;": "+",
- "Popf;": "ℙ",
- "popf;": "𝕡",
- pound: "£",
- "prap;": "⪷",
- "prec;": "≺",
- "prnE;": "⪵",
- "prod;": "∏",
- "prop;": "∝",
- "Pscr;": "𝒫",
- "pscr;": "𝓅",
- "qint;": "⨌",
- "Qopf;": "ℚ",
- "qopf;": "𝕢",
- "Qscr;": "𝒬",
- "qscr;": "𝓆",
- "QUOT;": "\"",
- "quot;": "\"",
- "race;": "∽̱",
- "Rang;": "⟫",
- "rang;": "⟩",
- raquo: "»",
- "Rarr;": "↠",
- "rArr;": "⇒",
- "rarr;": "→",
- "rcub;": "}",
- "rdca;": "⤷",
- "rdsh;": "↳",
- "real;": "ℜ",
- "rect;": "▭",
- "rHar;": "⥤",
- "rhov;": "ϱ",
- "ring;": "˚",
- "Ropf;": "ℝ",
- "ropf;": "𝕣",
- "rpar;": ")",
- "Rscr;": "ℛ",
- "rscr;": "𝓇",
- "rsqb;": "]",
- "rtri;": "▹",
- "scap;": "⪸",
- "scnE;": "⪶",
- "sdot;": "⋅",
- "sect;": "§",
- "semi;": ";",
- "sext;": "✶",
- "SHcy;": "Ш",
- "shcy;": "ш",
- "sime;": "≃",
- "simg;": "⪞",
- "siml;": "⪝",
- "smid;": "∣",
- "smte;": "⪬",
- "solb;": "⧄",
- "Sopf;": "𝕊",
- "sopf;": "𝕤",
- "spar;": "∥",
- "Sqrt;": "√",
- "squf;": "▪",
- "Sscr;": "𝒮",
- "sscr;": "𝓈",
- "Star;": "⋆",
- "star;": "☆",
- "subE;": "⫅",
- "sube;": "⊆",
- "succ;": "≻",
- "sung;": "♪",
- "sup1;": "¹",
- "sup2;": "²",
- "sup3;": "³",
- "supE;": "⫆",
- "supe;": "⊇",
- szlig: "ß",
- "tbrk;": "⎴",
- "tdot;": "⃛",
- THORN: "Þ",
- thorn: "þ",
- times: "×",
- "tint;": "∭",
- "toea;": "⤨",
- "Topf;": "𝕋",
- "topf;": "𝕥",
- "tosa;": "⤩",
- "trie;": "≜",
- "Tscr;": "𝒯",
- "tscr;": "𝓉",
- "TScy;": "Ц",
- "tscy;": "ц",
- "Uarr;": "↟",
- "uArr;": "⇑",
- "uarr;": "↑",
- Ucirc: "Û",
- ucirc: "û",
- "uHar;": "⥣",
- "Uopf;": "𝕌",
- "uopf;": "𝕦",
- "Upsi;": "ϒ",
- "upsi;": "υ",
- "Uscr;": "𝒰",
- "uscr;": "𝓊",
- "utri;": "▵",
- "Uuml;": "Ü",
- "uuml;": "ü",
- "vArr;": "⇕",
- "varr;": "↕",
- "Vbar;": "⫫",
- "vBar;": "⫨",
- "Vert;": "‖",
- "vert;": "|",
- "Vopf;": "𝕍",
- "vopf;": "𝕧",
- "Vscr;": "𝒱",
- "vscr;": "𝓋",
- "Wopf;": "𝕎",
- "wopf;": "𝕨",
- "Wscr;": "𝒲",
- "wscr;": "𝓌",
- "xcap;": "⋂",
- "xcup;": "⋃",
- "xmap;": "⟼",
- "xnis;": "⋻",
- "Xopf;": "𝕏",
- "xopf;": "𝕩",
- "Xscr;": "𝒳",
- "xscr;": "𝓍",
- "xvee;": "⋁",
- "YAcy;": "Я",
- "yacy;": "я",
- "YIcy;": "Ї",
- "yicy;": "ї",
- "Yopf;": "𝕐",
- "yopf;": "𝕪",
- "Yscr;": "𝒴",
- "yscr;": "𝓎",
- "YUcy;": "Ю",
- "yucy;": "ю",
- "Yuml;": "Ÿ",
- "yuml;": "ÿ",
- "Zdot;": "Ż",
- "zdot;": "ż",
- "Zeta;": "Ζ",
- "zeta;": "ζ",
- "ZHcy;": "Ж",
- "zhcy;": "ж",
- "Zopf;": "ℤ",
- "zopf;": "𝕫",
- "Zscr;": "𝒵",
- "zscr;": "𝓏",
- "zwnj;": "‌",
- Aacute: "Á",
- aacute: "á",
- "Acirc;": "Â",
- "acirc;": "â",
- "acute;": "´",
- "AElig;": "Æ",
- "aelig;": "æ",
- Agrave: "À",
- agrave: "à",
- "aleph;": "ℵ",
- "Alpha;": "Α",
- "alpha;": "α",
- "Amacr;": "Ā",
- "amacr;": "ā",
- "amalg;": "⨿",
- "angle;": "∠",
- "angrt;": "∟",
- "angst;": "Å",
- "Aogon;": "Ą",
- "aogon;": "ą",
- "Aring;": "Å",
- "aring;": "å",
- "asymp;": "≈",
- Atilde: "Ã",
- atilde: "ã",
- "awint;": "⨑",
- "bcong;": "≌",
- "bdquo;": "„",
- "bepsi;": "϶",
- "blank;": "␣",
- "blk12;": "▒",
- "blk14;": "░",
- "blk34;": "▓",
- "block;": "█",
- "boxDL;": "╗",
- "boxDl;": "╖",
- "boxdL;": "╕",
- "boxdl;": "┐",
- "boxDR;": "╔",
- "boxDr;": "╓",
- "boxdR;": "╒",
- "boxdr;": "┌",
- "boxHD;": "╦",
- "boxHd;": "╤",
- "boxhD;": "╥",
- "boxhd;": "┬",
- "boxHU;": "╩",
- "boxHu;": "╧",
- "boxhU;": "╨",
- "boxhu;": "┴",
- "boxUL;": "╝",
- "boxUl;": "╜",
- "boxuL;": "╛",
- "boxul;": "┘",
- "boxUR;": "╚",
- "boxUr;": "╙",
- "boxuR;": "╘",
- "boxur;": "└",
- "boxVH;": "╬",
- "boxVh;": "╫",
- "boxvH;": "╪",
- "boxvh;": "┼",
- "boxVL;": "╣",
- "boxVl;": "╢",
- "boxvL;": "╡",
- "boxvl;": "┤",
- "boxVR;": "╠",
- "boxVr;": "╟",
- "boxvR;": "╞",
- "boxvr;": "├",
- "Breve;": "˘",
- "breve;": "˘",
- brvbar: "¦",
- "bsemi;": "⁏",
- "bsime;": "⋍",
- "bsolb;": "⧅",
- "bumpE;": "⪮",
- "bumpe;": "≏",
- "caret;": "⁁",
- "caron;": "ˇ",
- "ccaps;": "⩍",
- Ccedil: "Ç",
- ccedil: "ç",
- "Ccirc;": "Ĉ",
- "ccirc;": "ĉ",
- "ccups;": "⩌",
- "cedil;": "¸",
- "check;": "✓",
- "clubs;": "♣",
- "Colon;": "∷",
- "colon;": ":",
- "comma;": ",",
- "crarr;": "↵",
- "Cross;": "⨯",
- "cross;": "✗",
- "csube;": "⫑",
- "csupe;": "⫒",
- "ctdot;": "⋯",
- "cuepr;": "⋞",
- "cuesc;": "⋟",
- "cupor;": "⩅",
- curren: "¤",
- "cuvee;": "⋎",
- "cuwed;": "⋏",
- "cwint;": "∱",
- "Dashv;": "⫤",
- "dashv;": "⊣",
- "dblac;": "˝",
- "ddarr;": "⇊",
- "Delta;": "Δ",
- "delta;": "δ",
- "dharl;": "⇃",
- "dharr;": "⇂",
- "diams;": "♦",
- "disin;": "⋲",
- divide: "÷",
- "doteq;": "≐",
- "dtdot;": "⋱",
- "dtrif;": "▾",
- "duarr;": "⇵",
- "duhar;": "⥯",
- Eacute: "É",
- eacute: "é",
- "Ecirc;": "Ê",
- "ecirc;": "ê",
- "eDDot;": "⩷",
- "efDot;": "≒",
- Egrave: "È",
- egrave: "è",
- "Emacr;": "Ē",
- "emacr;": "ē",
- "empty;": "∅",
- "Eogon;": "Ę",
- "eogon;": "ę",
- "eplus;": "⩱",
- "epsiv;": "ϵ",
- "eqsim;": "≂",
- "Equal;": "⩵",
- "equiv;": "≡",
- "erarr;": "⥱",
- "erDot;": "≓",
- "esdot;": "≐",
- "exist;": "∃",
- "fflig;": "ff",
- "filig;": "fi",
- "fjlig;": "fj",
- "fllig;": "fl",
- "fltns;": "▱",
- "forkv;": "⫙",
- frac12: "½",
- frac14: "¼",
- frac34: "¾",
- "frasl;": "⁄",
- "frown;": "⌢",
- "Gamma;": "Γ",
- "gamma;": "γ",
- "Gcirc;": "Ĝ",
- "gcirc;": "ĝ",
- "gescc;": "⪩",
- "gimel;": "ℷ",
- "gneqq;": "≩",
- "gnsim;": "⋧",
- "grave;": "`",
- "gsime;": "⪎",
- "gsiml;": "⪐",
- "gtcir;": "⩺",
- "gtdot;": "⋗",
- "Hacek;": "ˇ",
- "harrw;": "↭",
- "Hcirc;": "Ĥ",
- "hcirc;": "ĥ",
- "hoarr;": "⇿",
- Iacute: "Í",
- iacute: "í",
- "Icirc;": "Î",
- "icirc;": "î",
- "iexcl;": "¡",
- Igrave: "Ì",
- igrave: "ì",
- "iiint;": "∭",
- "iiota;": "℩",
- "IJlig;": "IJ",
- "ijlig;": "ij",
- "Imacr;": "Ī",
- "imacr;": "ī",
- "image;": "ℑ",
- "imath;": "ı",
- "imped;": "Ƶ",
- "infin;": "∞",
- "Iogon;": "Į",
- "iogon;": "į",
- "iprod;": "⨼",
- iquest: "¿",
- "isinE;": "⋹",
- "isins;": "⋴",
- "isinv;": "∈",
- "Iukcy;": "І",
- "iukcy;": "і",
- "Jcirc;": "Ĵ",
- "jcirc;": "ĵ",
- "jmath;": "ȷ",
- "Jukcy;": "Є",
- "jukcy;": "є",
- "Kappa;": "Κ",
- "kappa;": "κ",
- "lAarr;": "⇚",
- "langd;": "⦑",
- "laquo;": "«",
- "larrb;": "⇤",
- "lates;": "⪭︀",
- "lBarr;": "⤎",
- "lbarr;": "⤌",
- "lbbrk;": "❲",
- "lbrke;": "⦋",
- "lceil;": "⌈",
- "ldquo;": "“",
- "lescc;": "⪨",
- "lhard;": "↽",
- "lharu;": "↼",
- "lhblk;": "▄",
- "llarr;": "⇇",
- "lltri;": "◺",
- "lneqq;": "≨",
- "lnsim;": "⋦",
- "loang;": "⟬",
- "loarr;": "⇽",
- "lobrk;": "⟦",
- "lopar;": "⦅",
- "lrarr;": "⇆",
- "lrhar;": "⇋",
- "lrtri;": "⊿",
- "lsime;": "⪍",
- "lsimg;": "⪏",
- "lsquo;": "‘",
- "ltcir;": "⩹",
- "ltdot;": "⋖",
- "ltrie;": "⊴",
- "ltrif;": "◂",
- "mdash;": "—",
- "mDDot;": "∺",
- "micro;": "µ",
- middot: "·",
- "minus;": "−",
- "mumap;": "⊸",
- "nabla;": "∇",
- "napid;": "≋̸",
- "napos;": "ʼn",
- "natur;": "♮",
- "nbump;": "≎̸",
- "ncong;": "≇",
- "ndash;": "–",
- "neArr;": "⇗",
- "nearr;": "↗",
- "nedot;": "≐̸",
- "nesim;": "≂̸",
- "ngeqq;": "≧̸",
- "ngsim;": "≵",
- "nhArr;": "⇎",
- "nharr;": "↮",
- "nhpar;": "⫲",
- "nlArr;": "⇍",
- "nlarr;": "↚",
- "nleqq;": "≦̸",
- "nless;": "≮",
- "nlsim;": "≴",
- "nltri;": "⋪",
- "notin;": "∉",
- "notni;": "∌",
- "npart;": "∂̸",
- "nprec;": "⊀",
- "nrArr;": "⇏",
- "nrarr;": "↛",
- "nrtri;": "⋫",
- "nsime;": "≄",
- "nsmid;": "∤",
- "nspar;": "∦",
- "nsubE;": "⫅̸",
- "nsube;": "⊈",
- "nsucc;": "⊁",
- "nsupE;": "⫆̸",
- "nsupe;": "⊉",
- Ntilde: "Ñ",
- ntilde: "ñ",
- "numsp;": " ",
- "nvsim;": "∼⃒",
- "nwArr;": "⇖",
- "nwarr;": "↖",
- Oacute: "Ó",
- oacute: "ó",
- "Ocirc;": "Ô",
- "ocirc;": "ô",
- "odash;": "⊝",
- "OElig;": "Œ",
- "oelig;": "œ",
- "ofcir;": "⦿",
- Ograve: "Ò",
- ograve: "ò",
- "ohbar;": "⦵",
- "olarr;": "↺",
- "olcir;": "⦾",
- "oline;": "‾",
- "Omacr;": "Ō",
- "omacr;": "ō",
- "Omega;": "Ω",
- "omega;": "ω",
- "operp;": "⦹",
- "oplus;": "⊕",
- "orarr;": "↻",
- "order;": "ℴ",
- Oslash: "Ø",
- oslash: "ø",
- Otilde: "Õ",
- otilde: "õ",
- "ovbar;": "⌽",
- "parsl;": "⫽",
- "phone;": "☎",
- "plusb;": "⊞",
- "pluse;": "⩲",
- plusmn: "±",
- "pound;": "£",
- "prcue;": "≼",
- "Prime;": "″",
- "prime;": "′",
- "prnap;": "⪹",
- "prsim;": "≾",
- "quest;": "?",
- "rAarr;": "⇛",
- "radic;": "√",
- "rangd;": "⦒",
- "range;": "⦥",
- "raquo;": "»",
- "rarrb;": "⇥",
- "rarrc;": "⤳",
- "rarrw;": "↝",
- "ratio;": "∶",
- "RBarr;": "⤐",
- "rBarr;": "⤏",
- "rbarr;": "⤍",
- "rbbrk;": "❳",
- "rbrke;": "⦌",
- "rceil;": "⌉",
- "rdquo;": "”",
- "reals;": "ℝ",
- "rhard;": "⇁",
- "rharu;": "⇀",
- "rlarr;": "⇄",
- "rlhar;": "⇌",
- "rnmid;": "⫮",
- "roang;": "⟭",
- "roarr;": "⇾",
- "robrk;": "⟧",
- "ropar;": "⦆",
- "rrarr;": "⇉",
- "rsquo;": "’",
- "rtrie;": "⊵",
- "rtrif;": "▸",
- "sbquo;": "‚",
- "sccue;": "≽",
- "Scirc;": "Ŝ",
- "scirc;": "ŝ",
- "scnap;": "⪺",
- "scsim;": "≿",
- "sdotb;": "⊡",
- "sdote;": "⩦",
- "seArr;": "⇘",
- "searr;": "↘",
- "setmn;": "∖",
- "sharp;": "♯",
- "Sigma;": "Σ",
- "sigma;": "σ",
- "simeq;": "≃",
- "simgE;": "⪠",
- "simlE;": "⪟",
- "simne;": "≆",
- "slarr;": "←",
- "smile;": "⌣",
- "smtes;": "⪬︀",
- "sqcap;": "⊓",
- "sqcup;": "⊔",
- "sqsub;": "⊏",
- "sqsup;": "⊐",
- "srarr;": "→",
- "starf;": "★",
- "strns;": "¯",
- "subnE;": "⫋",
- "subne;": "⊊",
- "supnE;": "⫌",
- "supne;": "⊋",
- "swArr;": "⇙",
- "swarr;": "↙",
- "szlig;": "ß",
- "Theta;": "Θ",
- "theta;": "θ",
- "thkap;": "≈",
- "THORN;": "Þ",
- "thorn;": "þ",
- "Tilde;": "∼",
- "tilde;": "˜",
- "times;": "×",
- "TRADE;": "™",
- "trade;": "™",
- "trisb;": "⧍",
- "TSHcy;": "Ћ",
- "tshcy;": "ћ",
- "twixt;": "≬",
- Uacute: "Ú",
- uacute: "ú",
- "Ubrcy;": "Ў",
- "ubrcy;": "ў",
- "Ucirc;": "Û",
- "ucirc;": "û",
- "udarr;": "⇅",
- "udhar;": "⥮",
- Ugrave: "Ù",
- ugrave: "ù",
- "uharl;": "↿",
- "uharr;": "↾",
- "uhblk;": "▀",
- "ultri;": "◸",
- "Umacr;": "Ū",
- "umacr;": "ū",
- "Union;": "⋃",
- "Uogon;": "Ų",
- "uogon;": "ų",
- "uplus;": "⊎",
- "upsih;": "ϒ",
- "UpTee;": "⊥",
- "Uring;": "Ů",
- "uring;": "ů",
- "urtri;": "◹",
- "utdot;": "⋰",
- "utrif;": "▴",
- "uuarr;": "⇈",
- "varpi;": "ϖ",
- "vBarv;": "⫩",
- "VDash;": "⊫",
- "Vdash;": "⊩",
- "vDash;": "⊨",
- "vdash;": "⊢",
- "veeeq;": "≚",
- "vltri;": "⊲",
- "vnsub;": "⊂⃒",
- "vnsup;": "⊃⃒",
- "vprop;": "∝",
- "vrtri;": "⊳",
- "Wcirc;": "Ŵ",
- "wcirc;": "ŵ",
- "Wedge;": "⋀",
- "wedge;": "∧",
- "xcirc;": "◯",
- "xdtri;": "▽",
- "xhArr;": "⟺",
- "xharr;": "⟷",
- "xlArr;": "⟸",
- "xlarr;": "⟵",
- "xodot;": "⨀",
- "xrArr;": "⟹",
- "xrarr;": "⟶",
- "xutri;": "△",
- Yacute: "Ý",
- yacute: "ý",
- "Ycirc;": "Ŷ",
- "ycirc;": "ŷ",
- "Aacute;": "Á",
- "aacute;": "á",
- "Abreve;": "Ă",
- "abreve;": "ă",
- "Agrave;": "À",
- "agrave;": "à",
- "andand;": "⩕",
- "angmsd;": "∡",
- "angsph;": "∢",
- "apacir;": "⩯",
- "approx;": "≈",
- "Assign;": "≔",
- "Atilde;": "Ã",
- "atilde;": "ã",
- "barvee;": "⊽",
- "Barwed;": "⌆",
- "barwed;": "⌅",
- "becaus;": "∵",
- "bernou;": "ℬ",
- "bigcap;": "⋂",
- "bigcup;": "⋃",
- "bigvee;": "⋁",
- "bkarow;": "⤍",
- "bottom;": "⊥",
- "bowtie;": "⋈",
- "boxbox;": "⧉",
- "bprime;": "‵",
- "brvbar;": "¦",
- "bullet;": "•",
- "Bumpeq;": "≎",
- "bumpeq;": "≏",
- "Cacute;": "Ć",
- "cacute;": "ć",
- "capand;": "⩄",
- "capcap;": "⩋",
- "capcup;": "⩇",
- "capdot;": "⩀",
- "Ccaron;": "Č",
- "ccaron;": "č",
- "Ccedil;": "Ç",
- "ccedil;": "ç",
- "circeq;": "≗",
- "cirmid;": "⫯",
- "Colone;": "⩴",
- "colone;": "≔",
- "commat;": "@",
- "compfn;": "∘",
- "Conint;": "∯",
- "conint;": "∮",
- "coprod;": "∐",
- "copysr;": "℗",
- "cularr;": "↶",
- "CupCap;": "≍",
- "cupcap;": "⩆",
- "cupcup;": "⩊",
- "cupdot;": "⊍",
- "curarr;": "↷",
- "curren;": "¤",
- "cylcty;": "⌭",
- "Dagger;": "‡",
- "dagger;": "†",
- "daleth;": "ℸ",
- "Dcaron;": "Ď",
- "dcaron;": "ď",
- "dfisht;": "⥿",
- "divide;": "÷",
- "divonx;": "⋇",
- "dlcorn;": "⌞",
- "dlcrop;": "⌍",
- "dollar;": "$",
- "DotDot;": "⃜",
- "drcorn;": "⌟",
- "drcrop;": "⌌",
- "Dstrok;": "Đ",
- "dstrok;": "đ",
- "Eacute;": "É",
- "eacute;": "é",
- "easter;": "⩮",
- "Ecaron;": "Ě",
- "ecaron;": "ě",
- "ecolon;": "≕",
- "Egrave;": "È",
- "egrave;": "è",
- "egsdot;": "⪘",
- "elsdot;": "⪗",
- "emptyv;": "∅",
- "emsp13;": " ",
- "emsp14;": " ",
- "eparsl;": "⧣",
- "eqcirc;": "≖",
- "equals;": "=",
- "equest;": "≟",
- "Exists;": "∃",
- "female;": "♀",
- "ffilig;": "ffi",
- "ffllig;": "ffl",
- "ForAll;": "∀",
- "forall;": "∀",
- "frac12;": "½",
- "frac13;": "⅓",
- "frac14;": "¼",
- "frac15;": "⅕",
- "frac16;": "⅙",
- "frac18;": "⅛",
- "frac23;": "⅔",
- "frac25;": "⅖",
- "frac34;": "¾",
- "frac35;": "⅗",
- "frac38;": "⅜",
- "frac45;": "⅘",
- "frac56;": "⅚",
- "frac58;": "⅝",
- "frac78;": "⅞",
- "gacute;": "ǵ",
- "Gammad;": "Ϝ",
- "gammad;": "ϝ",
- "Gbreve;": "Ğ",
- "gbreve;": "ğ",
- "Gcedil;": "Ģ",
- "gesdot;": "⪀",
- "gesles;": "⪔",
- "gtlPar;": "⦕",
- "gtrarr;": "⥸",
- "gtrdot;": "⋗",
- "gtrsim;": "≳",
- "hairsp;": " ",
- "hamilt;": "ℋ",
- "HARDcy;": "Ъ",
- "hardcy;": "ъ",
- "hearts;": "♥",
- "hellip;": "…",
- "hercon;": "⊹",
- "homtht;": "∻",
- "horbar;": "―",
- "hslash;": "ℏ",
- "Hstrok;": "Ħ",
- "hstrok;": "ħ",
- "hybull;": "⁃",
- "hyphen;": "‐",
- "Iacute;": "Í",
- "iacute;": "í",
- "Igrave;": "Ì",
- "igrave;": "ì",
- "iiiint;": "⨌",
- "iinfin;": "⧜",
- "incare;": "℅",
- "inodot;": "ı",
- "intcal;": "⊺",
- "iquest;": "¿",
- "isinsv;": "⋳",
- "Itilde;": "Ĩ",
- "itilde;": "ĩ",
- "Jsercy;": "Ј",
- "jsercy;": "ј",
- "kappav;": "ϰ",
- "Kcedil;": "Ķ",
- "kcedil;": "ķ",
- "kgreen;": "ĸ",
- "Lacute;": "Ĺ",
- "lacute;": "ĺ",
- "lagran;": "ℒ",
- "Lambda;": "Λ",
- "lambda;": "λ",
- "langle;": "⟨",
- "larrfs;": "⤝",
- "larrhk;": "↩",
- "larrlp;": "↫",
- "larrpl;": "⤹",
- "larrtl;": "↢",
- "lAtail;": "⤛",
- "latail;": "⤙",
- "lbrace;": "{",
- "lbrack;": "[",
- "Lcaron;": "Ľ",
- "lcaron;": "ľ",
- "Lcedil;": "Ļ",
- "lcedil;": "ļ",
- "ldquor;": "„",
- "lesdot;": "⩿",
- "lesges;": "⪓",
- "lfisht;": "⥼",
- "lfloor;": "⌊",
- "lharul;": "⥪",
- "llhard;": "⥫",
- "Lmidot;": "Ŀ",
- "lmidot;": "ŀ",
- "lmoust;": "⎰",
- "loplus;": "⨭",
- "lowast;": "∗",
- "lowbar;": "_",
- "lparlt;": "⦓",
- "lrhard;": "⥭",
- "lsaquo;": "‹",
- "lsquor;": "‚",
- "Lstrok;": "Ł",
- "lstrok;": "ł",
- "lthree;": "⋋",
- "ltimes;": "⋉",
- "ltlarr;": "⥶",
- "ltrPar;": "⦖",
- "mapsto;": "↦",
- "marker;": "▮",
- "mcomma;": "⨩",
- "midast;": "*",
- "midcir;": "⫰",
- "middot;": "·",
- "minusb;": "⊟",
- "minusd;": "∸",
- "mnplus;": "∓",
- "models;": "⊧",
- "mstpos;": "∾",
- "Nacute;": "Ń",
- "nacute;": "ń",
- "nbumpe;": "≏̸",
- "Ncaron;": "Ň",
- "ncaron;": "ň",
- "Ncedil;": "Ņ",
- "ncedil;": "ņ",
- "nearhk;": "⤤",
- "nequiv;": "≢",
- "nesear;": "⤨",
- "nexist;": "∄",
- "nltrie;": "⋬",
- "notinE;": "⋹̸",
- "nparsl;": "⫽⃥",
- "nprcue;": "⋠",
- "nrarrc;": "⤳̸",
- "nrarrw;": "↝̸",
- "nrtrie;": "⋭",
- "nsccue;": "⋡",
- "nsimeq;": "≄",
- "Ntilde;": "Ñ",
- "ntilde;": "ñ",
- "numero;": "№",
- "nVDash;": "⊯",
- "nVdash;": "⊮",
- "nvDash;": "⊭",
- "nvdash;": "⊬",
- "nvHarr;": "⤄",
- "nvlArr;": "⤂",
- "nvrArr;": "⤃",
- "nwarhk;": "⤣",
- "nwnear;": "⤧",
- "Oacute;": "Ó",
- "oacute;": "ó",
- "Odblac;": "Ő",
- "odblac;": "ő",
- "odsold;": "⦼",
- "Ograve;": "Ò",
- "ograve;": "ò",
- "ominus;": "⊖",
- "origof;": "⊶",
- "Oslash;": "Ø",
- "oslash;": "ø",
- "Otilde;": "Õ",
- "otilde;": "õ",
- "Otimes;": "⨷",
- "otimes;": "⊗",
- "parsim;": "⫳",
- "percnt;": "%",
- "period;": ".",
- "permil;": "‰",
- "phmmat;": "ℳ",
- "planck;": "ℏ",
- "plankv;": "ℏ",
- "plusdo;": "∔",
- "plusdu;": "⨥",
- "plusmn;": "±",
- "preceq;": "⪯",
- "primes;": "ℙ",
- "prnsim;": "⋨",
- "propto;": "∝",
- "prurel;": "⊰",
- "puncsp;": " ",
- "qprime;": "⁗",
- "Racute;": "Ŕ",
- "racute;": "ŕ",
- "rangle;": "⟩",
- "rarrap;": "⥵",
- "rarrfs;": "⤞",
- "rarrhk;": "↪",
- "rarrlp;": "↬",
- "rarrpl;": "⥅",
- "Rarrtl;": "⤖",
- "rarrtl;": "↣",
- "rAtail;": "⤜",
- "ratail;": "⤚",
- "rbrace;": "}",
- "rbrack;": "]",
- "Rcaron;": "Ř",
- "rcaron;": "ř",
- "Rcedil;": "Ŗ",
- "rcedil;": "ŗ",
- "rdquor;": "”",
- "rfisht;": "⥽",
- "rfloor;": "⌋",
- "rharul;": "⥬",
- "rmoust;": "⎱",
- "roplus;": "⨮",
- "rpargt;": "⦔",
- "rsaquo;": "›",
- "rsquor;": "’",
- "rthree;": "⋌",
- "rtimes;": "⋊",
- "Sacute;": "Ś",
- "sacute;": "ś",
- "Scaron;": "Š",
- "scaron;": "š",
- "Scedil;": "Ş",
- "scedil;": "ş",
- "scnsim;": "⋩",
- "searhk;": "⤥",
- "seswar;": "⤩",
- "sfrown;": "⌢",
- "SHCHcy;": "Щ",
- "shchcy;": "щ",
- "sigmaf;": "ς",
- "sigmav;": "ς",
- "simdot;": "⩪",
- "smashp;": "⨳",
- "SOFTcy;": "Ь",
- "softcy;": "ь",
- "solbar;": "⌿",
- "spades;": "♠",
- "sqcaps;": "⊓︀",
- "sqcups;": "⊔︀",
- "sqsube;": "⊑",
- "sqsupe;": "⊒",
- "Square;": "□",
- "square;": "□",
- "squarf;": "▪",
- "ssetmn;": "∖",
- "ssmile;": "⌣",
- "sstarf;": "⋆",
- "subdot;": "⪽",
- "Subset;": "⋐",
- "subset;": "⊂",
- "subsim;": "⫇",
- "subsub;": "⫕",
- "subsup;": "⫓",
- "succeq;": "⪰",
- "supdot;": "⪾",
- "Supset;": "⋑",
- "supset;": "⊃",
- "supsim;": "⫈",
- "supsub;": "⫔",
- "supsup;": "⫖",
- "swarhk;": "⤦",
- "swnwar;": "⤪",
- "target;": "⌖",
- "Tcaron;": "Ť",
- "tcaron;": "ť",
- "Tcedil;": "Ţ",
- "tcedil;": "ţ",
- "telrec;": "⌕",
- "there4;": "∴",
- "thetav;": "ϑ",
- "thinsp;": " ",
- "thksim;": "∼",
- "timesb;": "⊠",
- "timesd;": "⨰",
- "topbot;": "⌶",
- "topcir;": "⫱",
- "tprime;": "‴",
- "tridot;": "◬",
- "Tstrok;": "Ŧ",
- "tstrok;": "ŧ",
- "Uacute;": "Ú",
- "uacute;": "ú",
- "Ubreve;": "Ŭ",
- "ubreve;": "ŭ",
- "Udblac;": "Ű",
- "udblac;": "ű",
- "ufisht;": "⥾",
- "Ugrave;": "Ù",
- "ugrave;": "ù",
- "ulcorn;": "⌜",
- "ulcrop;": "⌏",
- "urcorn;": "⌝",
- "urcrop;": "⌎",
- "Utilde;": "Ũ",
- "utilde;": "ũ",
- "vangrt;": "⦜",
- "varphi;": "ϕ",
- "varrho;": "ϱ",
- "Vdashl;": "⫦",
- "veebar;": "⊻",
- "vellip;": "⋮",
- "Verbar;": "‖",
- "verbar;": "|",
- "vsubnE;": "⫋︀",
- "vsubne;": "⊊︀",
- "vsupnE;": "⫌︀",
- "vsupne;": "⊋︀",
- "Vvdash;": "⊪",
- "wedbar;": "⩟",
- "wedgeq;": "≙",
- "weierp;": "℘",
- "wreath;": "≀",
- "xoplus;": "⨁",
- "xotime;": "⨂",
- "xsqcup;": "⨆",
- "xuplus;": "⨄",
- "xwedge;": "⋀",
- "Yacute;": "Ý",
- "yacute;": "ý",
- "Zacute;": "Ź",
- "zacute;": "ź",
- "Zcaron;": "Ž",
- "zcaron;": "ž",
- "zeetrf;": "ℨ",
- "alefsym;": "ℵ",
- "angrtvb;": "⊾",
- "angzarr;": "⍼",
- "asympeq;": "≍",
- "backsim;": "∽",
- "Because;": "∵",
- "because;": "∵",
- "bemptyv;": "⦰",
- "between;": "≬",
- "bigcirc;": "◯",
- "bigodot;": "⨀",
- "bigstar;": "★",
- "bnequiv;": "≡⃥",
- "boxplus;": "⊞",
- "Cayleys;": "ℭ",
- "Cconint;": "∰",
- "ccupssm;": "⩐",
- "Cedilla;": "¸",
- "cemptyv;": "⦲",
- "cirscir;": "⧂",
- "coloneq;": "≔",
- "congdot;": "⩭",
- "cudarrl;": "⤸",
- "cudarrr;": "⤵",
- "cularrp;": "⤽",
- "curarrm;": "⤼",
- "dbkarow;": "⤏",
- "ddagger;": "‡",
- "ddotseq;": "⩷",
- "demptyv;": "⦱",
- "Diamond;": "⋄",
- "diamond;": "⋄",
- "digamma;": "ϝ",
- "dotplus;": "∔",
- "DownTee;": "⊤",
- "dwangle;": "⦦",
- "Element;": "∈",
- "Epsilon;": "Ε",
- "epsilon;": "ε",
- "eqcolon;": "≕",
- "equivDD;": "⩸",
- "gesdoto;": "⪂",
- "gtquest;": "⩼",
- "gtrless;": "≷",
- "harrcir;": "⥈",
- "Implies;": "⇒",
- "intprod;": "⨼",
- "isindot;": "⋵",
- "larrbfs;": "⤟",
- "larrsim;": "⥳",
- "lbrksld;": "⦏",
- "lbrkslu;": "⦍",
- "ldrdhar;": "⥧",
- "LeftTee;": "⊣",
- "lesdoto;": "⪁",
- "lessdot;": "⋖",
- "lessgtr;": "≶",
- "lesssim;": "≲",
- "lotimes;": "⨴",
- "lozenge;": "◊",
- "ltquest;": "⩻",
- "luruhar;": "⥦",
- "maltese;": "✠",
- "minusdu;": "⨪",
- "napprox;": "≉",
- "natural;": "♮",
- "nearrow;": "↗",
- "NewLine;": "\n",
- "nexists;": "∄",
- "NoBreak;": "⁠",
- "notinva;": "∉",
- "notinvb;": "⋷",
- "notinvc;": "⋶",
- "NotLess;": "≮",
- "notniva;": "∌",
- "notnivb;": "⋾",
- "notnivc;": "⋽",
- "npolint;": "⨔",
- "npreceq;": "⪯̸",
- "nsqsube;": "⋢",
- "nsqsupe;": "⋣",
- "nsubset;": "⊂⃒",
- "nsucceq;": "⪰̸",
- "nsupset;": "⊃⃒",
- "nvinfin;": "⧞",
- "nvltrie;": "⊴⃒",
- "nvrtrie;": "⊵⃒",
- "nwarrow;": "↖",
- "olcross;": "⦻",
- "Omicron;": "Ο",
- "omicron;": "ο",
- "orderof;": "ℴ",
- "orslope;": "⩗",
- "OverBar;": "‾",
- "pertenk;": "‱",
- "planckh;": "ℎ",
- "pluscir;": "⨢",
- "plussim;": "⨦",
- "plustwo;": "⨧",
- "precsim;": "≾",
- "Product;": "∏",
- "quatint;": "⨖",
- "questeq;": "≟",
- "rarrbfs;": "⤠",
- "rarrsim;": "⥴",
- "rbrksld;": "⦎",
- "rbrkslu;": "⦐",
- "rdldhar;": "⥩",
- "realine;": "ℛ",
- "rotimes;": "⨵",
- "ruluhar;": "⥨",
- "searrow;": "↘",
- "simplus;": "⨤",
- "simrarr;": "⥲",
- "subedot;": "⫃",
- "submult;": "⫁",
- "subplus;": "⪿",
- "subrarr;": "⥹",
- "succsim;": "≿",
- "supdsub;": "⫘",
- "supedot;": "⫄",
- "suphsol;": "⟉",
- "suphsub;": "⫗",
- "suplarr;": "⥻",
- "supmult;": "⫂",
- "supplus;": "⫀",
- "swarrow;": "↙",
- "topfork;": "⫚",
- "triplus;": "⨹",
- "tritime;": "⨻",
- "UpArrow;": "↑",
- "Uparrow;": "⇑",
- "uparrow;": "↑",
- "Upsilon;": "Υ",
- "upsilon;": "υ",
- "uwangle;": "⦧",
- "vzigzag;": "⦚",
- "zigrarr;": "⇝",
- "andslope;": "⩘",
- "angmsdaa;": "⦨",
- "angmsdab;": "⦩",
- "angmsdac;": "⦪",
- "angmsdad;": "⦫",
- "angmsdae;": "⦬",
- "angmsdaf;": "⦭",
- "angmsdag;": "⦮",
- "angmsdah;": "⦯",
- "angrtvbd;": "⦝",
- "approxeq;": "≊",
- "awconint;": "∳",
- "backcong;": "≌",
- "barwedge;": "⌅",
- "bbrktbrk;": "⎶",
- "bigoplus;": "⨁",
- "bigsqcup;": "⨆",
- "biguplus;": "⨄",
- "bigwedge;": "⋀",
- "boxminus;": "⊟",
- "boxtimes;": "⊠",
- "bsolhsub;": "⟈",
- "capbrcup;": "⩉",
- "circledR;": "®",
- "circledS;": "Ⓢ",
- "cirfnint;": "⨐",
- "clubsuit;": "♣",
- "cupbrcap;": "⩈",
- "curlyvee;": "⋎",
- "cwconint;": "∲",
- "DDotrahd;": "⤑",
- "doteqdot;": "≑",
- "DotEqual;": "≐",
- "dotminus;": "∸",
- "drbkarow;": "⤐",
- "dzigrarr;": "⟿",
- "elinters;": "⏧",
- "emptyset;": "∅",
- "eqvparsl;": "⧥",
- "fpartint;": "⨍",
- "geqslant;": "⩾",
- "gesdotol;": "⪄",
- "gnapprox;": "⪊",
- "hksearow;": "⤥",
- "hkswarow;": "⤦",
- "imagline;": "ℐ",
- "imagpart;": "ℑ",
- "infintie;": "⧝",
- "integers;": "ℤ",
- "Integral;": "∫",
- "intercal;": "⊺",
- "intlarhk;": "⨗",
- "laemptyv;": "⦴",
- "ldrushar;": "⥋",
- "leqslant;": "⩽",
- "lesdotor;": "⪃",
- "LessLess;": "⪡",
- "llcorner;": "⌞",
- "lnapprox;": "⪉",
- "lrcorner;": "⌟",
- "lurdshar;": "⥊",
- "mapstoup;": "↥",
- "multimap;": "⊸",
- "naturals;": "ℕ",
- "ncongdot;": "⩭̸",
- "NotEqual;": "≠",
- "notindot;": "⋵̸",
- "NotTilde;": "≁",
- "otimesas;": "⨶",
- "parallel;": "∥",
- "PartialD;": "∂",
- "plusacir;": "⨣",
- "pointint;": "⨕",
- "Precedes;": "≺",
- "precneqq;": "⪵",
- "precnsim;": "⋨",
- "profalar;": "⌮",
- "profline;": "⌒",
- "profsurf;": "⌓",
- "raemptyv;": "⦳",
- "realpart;": "ℜ",
- "RightTee;": "⊢",
- "rppolint;": "⨒",
- "rtriltri;": "⧎",
- "scpolint;": "⨓",
- "setminus;": "∖",
- "shortmid;": "∣",
- "smeparsl;": "⧤",
- "sqsubset;": "⊏",
- "sqsupset;": "⊐",
- "subseteq;": "⊆",
- "Succeeds;": "≻",
- "succneqq;": "⪶",
- "succnsim;": "⋩",
- "SuchThat;": "∋",
- "Superset;": "⊃",
- "supseteq;": "⊇",
- "thetasym;": "ϑ",
- "thicksim;": "∼",
- "timesbar;": "⨱",
- "triangle;": "▵",
- "triminus;": "⨺",
- "trpezium;": "⏢",
- "Uarrocir;": "⥉",
- "ulcorner;": "⌜",
- "UnderBar;": "_",
- "urcorner;": "⌝",
- "varkappa;": "ϰ",
- "varsigma;": "ς",
- "vartheta;": "ϑ",
- "backprime;": "‵",
- "backsimeq;": "⋍",
- "Backslash;": "∖",
- "bigotimes;": "⨂",
- "CenterDot;": "·",
- "centerdot;": "·",
- "checkmark;": "✓",
- "CircleDot;": "⊙",
- "complexes;": "ℂ",
- "Congruent;": "≡",
- "Coproduct;": "∐",
- "dotsquare;": "⊡",
- "DoubleDot;": "¨",
- "DownArrow;": "↓",
- "Downarrow;": "⇓",
- "downarrow;": "↓",
- "DownBreve;": "̑",
- "gtrapprox;": "⪆",
- "gtreqless;": "⋛",
- "gvertneqq;": "≩︀",
- "heartsuit;": "♥",
- "HumpEqual;": "≏",
- "LeftArrow;": "←",
- "Leftarrow;": "⇐",
- "leftarrow;": "←",
- "LeftFloor;": "⌊",
- "lesseqgtr;": "⋚",
- "LessTilde;": "≲",
- "lvertneqq;": "≨︀",
- "Mellintrf;": "ℳ",
- "MinusPlus;": "∓",
- "ngeqslant;": "⩾̸",
- "nleqslant;": "⩽̸",
- "NotCupCap;": "≭",
- "NotExists;": "∄",
- "NotSubset;": "⊂⃒",
- "nparallel;": "∦",
- "nshortmid;": "∤",
- "nsubseteq;": "⊈",
- "nsupseteq;": "⊉",
- "OverBrace;": "⏞",
- "pitchfork;": "⋔",
- "PlusMinus;": "±",
- "rationals;": "ℚ",
- "spadesuit;": "♠",
- "subseteqq;": "⫅",
- "subsetneq;": "⊊",
- "supseteqq;": "⫆",
- "supsetneq;": "⊋",
- "Therefore;": "∴",
- "therefore;": "∴",
- "ThinSpace;": " ",
- "triangleq;": "≜",
- "TripleDot;": "⃛",
- "UnionPlus;": "⊎",
- "varpropto;": "∝",
- "Bernoullis;": "ℬ",
- "circledast;": "⊛",
- "CirclePlus;": "⊕",
- "complement;": "∁",
- "curlywedge;": "⋏",
- "eqslantgtr;": "⪖",
- "EqualTilde;": "≂",
- "Fouriertrf;": "ℱ",
- "gtreqqless;": "⪌",
- "ImaginaryI;": "ⅈ",
- "Laplacetrf;": "ℒ",
- "LeftVector;": "↼",
- "lessapprox;": "⪅",
- "lesseqqgtr;": "⪋",
- "Lleftarrow;": "⇚",
- "lmoustache;": "⎰",
- "longmapsto;": "⟼",
- "mapstodown;": "↧",
- "mapstoleft;": "↤",
- "nLeftarrow;": "⇍",
- "nleftarrow;": "↚",
- "NotElement;": "∉",
- "NotGreater;": "≯",
- "nsubseteqq;": "⫅̸",
- "nsupseteqq;": "⫆̸",
- "precapprox;": "⪷",
- "Proportion;": "∷",
- "RightArrow;": "→",
- "Rightarrow;": "⇒",
- "rightarrow;": "→",
- "RightFloor;": "⌋",
- "rmoustache;": "⎱",
- "sqsubseteq;": "⊑",
- "sqsupseteq;": "⊒",
- "subsetneqq;": "⫋",
- "succapprox;": "⪸",
- "supsetneqq;": "⫌",
- "ThickSpace;": "  ",
- "TildeEqual;": "≃",
- "TildeTilde;": "≈",
- "UnderBrace;": "⏟",
- "UpArrowBar;": "⤒",
- "UpTeeArrow;": "↥",
- "upuparrows;": "⇈",
- "varepsilon;": "ϵ",
- "varnothing;": "∅",
- "backepsilon;": "϶",
- "blacksquare;": "▪",
- "circledcirc;": "⊚",
- "circleddash;": "⊝",
- "CircleMinus;": "⊖",
- "CircleTimes;": "⊗",
- "curlyeqprec;": "⋞",
- "curlyeqsucc;": "⋟",
- "diamondsuit;": "♦",
- "eqslantless;": "⪕",
- "Equilibrium;": "⇌",
- "expectation;": "ℰ",
- "GreaterLess;": "≷",
- "LeftCeiling;": "⌈",
- "LessGreater;": "≶",
- "MediumSpace;": " ",
- "NotLessLess;": "≪̸",
- "NotPrecedes;": "⊀",
- "NotSucceeds;": "⊁",
- "NotSuperset;": "⊃⃒",
- "nRightarrow;": "⇏",
- "nrightarrow;": "↛",
- "OverBracket;": "⎴",
- "preccurlyeq;": "≼",
- "precnapprox;": "⪹",
- "quaternions;": "ℍ",
- "RightVector;": "⇀",
- "Rrightarrow;": "⇛",
- "RuleDelayed;": "⧴",
- "SmallCircle;": "∘",
- "SquareUnion;": "⊔",
- "straightphi;": "ϕ",
- "SubsetEqual;": "⊆",
- "succcurlyeq;": "≽",
- "succnapprox;": "⪺",
- "thickapprox;": "≈",
- "UpDownArrow;": "↕",
- "Updownarrow;": "⇕",
- "updownarrow;": "↕",
- "VerticalBar;": "∣",
- "blacklozenge;": "⧫",
- "DownArrowBar;": "⤓",
- "DownTeeArrow;": "↧",
- "ExponentialE;": "ⅇ",
- "exponentiale;": "ⅇ",
- "GreaterEqual;": "≥",
- "GreaterTilde;": "≳",
- "HilbertSpace;": "ℋ",
- "HumpDownHump;": "≎",
- "Intersection;": "⋂",
- "LeftArrowBar;": "⇤",
- "LeftTeeArrow;": "↤",
- "LeftTriangle;": "⊲",
- "LeftUpVector;": "↿",
- "NotCongruent;": "≢",
- "NotHumpEqual;": "≏̸",
- "NotLessEqual;": "≰",
- "NotLessTilde;": "≴",
- "Proportional;": "∝",
- "RightCeiling;": "⌉",
- "risingdotseq;": "≓",
- "RoundImplies;": "⥰",
- "ShortUpArrow;": "↑",
- "SquareSubset;": "⊏",
- "triangledown;": "▿",
- "triangleleft;": "◃",
- "UnderBracket;": "⎵",
- "varsubsetneq;": "⊊︀",
- "varsupsetneq;": "⊋︀",
- "VerticalLine;": "|",
- "ApplyFunction;": "⁡",
- "bigtriangleup;": "△",
- "blacktriangle;": "▴",
- "DifferentialD;": "ⅆ",
- "divideontimes;": "⋇",
- "DoubleLeftTee;": "⫤",
- "DoubleUpArrow;": "⇑",
- "fallingdotseq;": "≒",
- "hookleftarrow;": "↩",
- "leftarrowtail;": "↢",
- "leftharpoonup;": "↼",
- "LeftTeeVector;": "⥚",
- "LeftVectorBar;": "⥒",
- "LessFullEqual;": "≦",
- "LongLeftArrow;": "⟵",
- "Longleftarrow;": "⟸",
- "longleftarrow;": "⟵",
- "looparrowleft;": "↫",
- "measuredangle;": "∡",
- "NotEqualTilde;": "≂̸",
- "NotTildeEqual;": "≄",
- "NotTildeTilde;": "≉",
- "ntriangleleft;": "⋪",
- "Poincareplane;": "ℌ",
- "PrecedesEqual;": "⪯",
- "PrecedesTilde;": "≾",
- "RightArrowBar;": "⇥",
- "RightTeeArrow;": "↦",
- "RightTriangle;": "⊳",
- "RightUpVector;": "↾",
- "shortparallel;": "∥",
- "smallsetminus;": "∖",
- "SucceedsEqual;": "⪰",
- "SucceedsTilde;": "≿",
- "SupersetEqual;": "⊇",
- "triangleright;": "▹",
- "UpEquilibrium;": "⥮",
- "upharpoonleft;": "↿",
- "varsubsetneqq;": "⫋︀",
- "varsupsetneqq;": "⫌︀",
- "VerticalTilde;": "≀",
- "VeryThinSpace;": " ",
- "curvearrowleft;": "↶",
- "DiacriticalDot;": "˙",
- "doublebarwedge;": "⌆",
- "DoubleRightTee;": "⊨",
- "downdownarrows;": "⇊",
- "DownLeftVector;": "↽",
- "GreaterGreater;": "⪢",
- "hookrightarrow;": "↪",
- "HorizontalLine;": "─",
- "InvisibleComma;": "⁣",
- "InvisibleTimes;": "⁢",
- "LeftDownVector;": "⇃",
- "leftleftarrows;": "⇇",
- "LeftRightArrow;": "↔",
- "Leftrightarrow;": "⇔",
- "leftrightarrow;": "↔",
- "leftthreetimes;": "⋋",
- "LessSlantEqual;": "⩽",
- "LongRightArrow;": "⟶",
- "Longrightarrow;": "⟹",
- "longrightarrow;": "⟶",
- "looparrowright;": "↬",
- "LowerLeftArrow;": "↙",
- "NestedLessLess;": "≪",
- "NotGreaterLess;": "≹",
- "NotLessGreater;": "≸",
- "NotSubsetEqual;": "⊈",
- "NotVerticalBar;": "∤",
- "nshortparallel;": "∦",
- "ntriangleright;": "⋫",
- "OpenCurlyQuote;": "‘",
- "ReverseElement;": "∋",
- "rightarrowtail;": "↣",
- "rightharpoonup;": "⇀",
- "RightTeeVector;": "⥛",
- "RightVectorBar;": "⥓",
- "ShortDownArrow;": "↓",
- "ShortLeftArrow;": "←",
- "SquareSuperset;": "⊐",
- "TildeFullEqual;": "≅",
- "trianglelefteq;": "⊴",
- "upharpoonright;": "↾",
- "UpperLeftArrow;": "↖",
- "ZeroWidthSpace;": "​",
- "bigtriangledown;": "▽",
- "circlearrowleft;": "↺",
- "CloseCurlyQuote;": "’",
- "ContourIntegral;": "∮",
- "curvearrowright;": "↷",
- "DoubleDownArrow;": "⇓",
- "DoubleLeftArrow;": "⇐",
- "downharpoonleft;": "⇃",
- "DownRightVector;": "⇁",
- "leftharpoondown;": "↽",
- "leftrightarrows;": "⇆",
- "LeftRightVector;": "⥎",
- "LeftTriangleBar;": "⧏",
- "LeftUpTeeVector;": "⥠",
- "LeftUpVectorBar;": "⥘",
- "LowerRightArrow;": "↘",
- "nLeftrightarrow;": "⇎",
- "nleftrightarrow;": "↮",
- "NotGreaterEqual;": "≱",
- "NotGreaterTilde;": "≵",
- "NotHumpDownHump;": "≎̸",
- "NotLeftTriangle;": "⋪",
- "NotSquareSubset;": "⊏̸",
- "ntrianglelefteq;": "⋬",
- "OverParenthesis;": "⏜",
- "RightDownVector;": "⇂",
- "rightleftarrows;": "⇄",
- "rightsquigarrow;": "↝",
- "rightthreetimes;": "⋌",
- "ShortRightArrow;": "→",
- "straightepsilon;": "ϵ",
- "trianglerighteq;": "⊵",
- "UpperRightArrow;": "↗",
- "vartriangleleft;": "⊲",
- "circlearrowright;": "↻",
- "DiacriticalAcute;": "´",
- "DiacriticalGrave;": "`",
- "DiacriticalTilde;": "˜",
- "DoubleRightArrow;": "⇒",
- "DownArrowUpArrow;": "⇵",
- "downharpoonright;": "⇂",
- "EmptySmallSquare;": "◻",
- "GreaterEqualLess;": "⋛",
- "GreaterFullEqual;": "≧",
- "LeftAngleBracket;": "⟨",
- "LeftUpDownVector;": "⥑",
- "LessEqualGreater;": "⋚",
- "NonBreakingSpace;": " ",
- "NotPrecedesEqual;": "⪯̸",
- "NotRightTriangle;": "⋫",
- "NotSucceedsEqual;": "⪰̸",
- "NotSucceedsTilde;": "≿̸",
- "NotSupersetEqual;": "⊉",
- "ntrianglerighteq;": "⋭",
- "rightharpoondown;": "⇁",
- "rightrightarrows;": "⇉",
- "RightTriangleBar;": "⧐",
- "RightUpTeeVector;": "⥜",
- "RightUpVectorBar;": "⥔",
- "twoheadleftarrow;": "↞",
- "UnderParenthesis;": "⏝",
- "UpArrowDownArrow;": "⇅",
- "vartriangleright;": "⊳",
- "blacktriangledown;": "▾",
- "blacktriangleleft;": "◂",
- "DoubleUpDownArrow;": "⇕",
- "DoubleVerticalBar;": "∥",
- "DownLeftTeeVector;": "⥞",
- "DownLeftVectorBar;": "⥖",
- "FilledSmallSquare;": "◼",
- "GreaterSlantEqual;": "⩾",
- "LeftDoubleBracket;": "⟦",
- "LeftDownTeeVector;": "⥡",
- "LeftDownVectorBar;": "⥙",
- "leftrightharpoons;": "⇋",
- "LeftTriangleEqual;": "⊴",
- "NegativeThinSpace;": "​",
- "NotGreaterGreater;": "≫̸",
- "NotLessSlantEqual;": "⩽̸",
- "NotNestedLessLess;": "⪡̸",
- "NotReverseElement;": "∌",
- "NotSquareSuperset;": "⊐̸",
- "NotTildeFullEqual;": "≇",
- "RightAngleBracket;": "⟩",
- "rightleftharpoons;": "⇌",
- "RightUpDownVector;": "⥏",
- "SquareSubsetEqual;": "⊑",
- "twoheadrightarrow;": "↠",
- "VerticalSeparator;": "❘",
- "blacktriangleright;": "▸",
- "DownRightTeeVector;": "⥟",
- "DownRightVectorBar;": "⥗",
- "LongLeftRightArrow;": "⟷",
- "Longleftrightarrow;": "⟺",
- "longleftrightarrow;": "⟷",
- "NegativeThickSpace;": "​",
- "NotLeftTriangleBar;": "⧏̸",
- "PrecedesSlantEqual;": "≼",
- "ReverseEquilibrium;": "⇋",
- "RightDoubleBracket;": "⟧",
- "RightDownTeeVector;": "⥝",
- "RightDownVectorBar;": "⥕",
- "RightTriangleEqual;": "⊵",
- "SquareIntersection;": "⊓",
- "SucceedsSlantEqual;": "≽",
- "DoubleLongLeftArrow;": "⟸",
- "DownLeftRightVector;": "⥐",
- "LeftArrowRightArrow;": "⇆",
- "leftrightsquigarrow;": "↭",
- "NegativeMediumSpace;": "​",
- "NotGreaterFullEqual;": "≧̸",
- "NotRightTriangleBar;": "⧐̸",
- "RightArrowLeftArrow;": "⇄",
- "SquareSupersetEqual;": "⊒",
- "CapitalDifferentialD;": "ⅅ",
- "DoubleLeftRightArrow;": "⇔",
- "DoubleLongRightArrow;": "⟹",
- "EmptyVerySmallSquare;": "▫",
- "NestedGreaterGreater;": "≫",
- "NotDoubleVerticalBar;": "∦",
- "NotGreaterSlantEqual;": "⩾̸",
- "NotLeftTriangleEqual;": "⋬",
- "NotSquareSubsetEqual;": "⋢",
- "OpenCurlyDoubleQuote;": "“",
- "ReverseUpEquilibrium;": "⥯",
- "CloseCurlyDoubleQuote;": "”",
- "DoubleContourIntegral;": "∯",
- "FilledVerySmallSquare;": "▪",
- "NegativeVeryThinSpace;": "​",
- "NotPrecedesSlantEqual;": "⋠",
- "NotRightTriangleEqual;": "⋭",
- "NotSucceedsSlantEqual;": "⋡",
- "DiacriticalDoubleAcute;": "˝",
- "NotSquareSupersetEqual;": "⋣",
- "NotNestedGreaterGreater;": "⪢̸",
- "ClockwiseContourIntegral;": "∲",
- "DoubleLongLeftRightArrow;": "⟺",
- "CounterClockwiseContourIntegral;": "∳"
-};
-
-// lazy compute this to make this file tree-shakable for browser
-let maxCRNameLength;
-const decodeHtml = (rawText, asAttr) => {
- let offset = 0;
- const end = rawText.length;
- let decodedText = '';
- function advance(length) {
- offset += length;
- rawText = rawText.slice(length);
- }
- while (offset < end) {
- const head = /&(?:#x?)?/i.exec(rawText);
- if (!head || offset + head.index >= end) {
- const remaining = end - offset;
- decodedText += rawText.slice(0, remaining);
- advance(remaining);
- break;
- }
- // Advance to the "&".
- decodedText += rawText.slice(0, head.index);
- advance(head.index);
- if (head[0] === '&') {
- // Named character reference.
- let name = '';
- let value = undefined;
- if (/[0-9a-z]/i.test(rawText[1])) {
- if (!maxCRNameLength) {
- maxCRNameLength = Object.keys(namedCharacterReferences).reduce((max, name) => Math.max(max, name.length), 0);
- }
- for (let length = maxCRNameLength; !value && length > 0; --length) {
- name = rawText.substr(1, length);
- value = namedCharacterReferences[name];
- }
- if (value) {
- const semi = name.endsWith(';');
- if (asAttr &&
- !semi &&
- /[=a-z0-9]/i.test(rawText[name.length + 1] || '')) {
- decodedText += '&' + name;
- advance(1 + name.length);
- }
- else {
- decodedText += value;
- advance(1 + name.length);
- }
- }
- else {
- decodedText += '&' + name;
- advance(1 + name.length);
- }
- }
- else {
- decodedText += '&';
- advance(1);
- }
- }
- else {
- // Numeric character reference.
- const hex = head[0] === '&#x';
- const pattern = hex ? /^&#x([0-9a-f]+);?/i : /^&#([0-9]+);?/;
- const body = pattern.exec(rawText);
- if (!body) {
- decodedText += head[0];
- advance(head[0].length);
- }
- else {
- // https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state
- let cp = Number.parseInt(body[1], hex ? 16 : 10);
- if (cp === 0) {
- cp = 0xfffd;
- }
- else if (cp > 0x10ffff) {
- cp = 0xfffd;
- }
- else if (cp >= 0xd800 && cp <= 0xdfff) {
- cp = 0xfffd;
- }
- else if ((cp >= 0xfdd0 && cp <= 0xfdef) || (cp & 0xfffe) === 0xfffe) ;
- else if ((cp >= 0x01 && cp <= 0x08) ||
- cp === 0x0b ||
- (cp >= 0x0d && cp <= 0x1f) ||
- (cp >= 0x7f && cp <= 0x9f)) {
- cp = CCR_REPLACEMENTS[cp] || cp;
- }
- decodedText += String.fromCodePoint(cp);
- advance(body[0].length);
- }
- }
- }
- return decodedText;
-};
-// https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state
-const CCR_REPLACEMENTS = {
- 0x80: 0x20ac,
- 0x82: 0x201a,
- 0x83: 0x0192,
- 0x84: 0x201e,
- 0x85: 0x2026,
- 0x86: 0x2020,
- 0x87: 0x2021,
- 0x88: 0x02c6,
- 0x89: 0x2030,
- 0x8a: 0x0160,
- 0x8b: 0x2039,
- 0x8c: 0x0152,
- 0x8e: 0x017d,
- 0x91: 0x2018,
- 0x92: 0x2019,
- 0x93: 0x201c,
- 0x94: 0x201d,
- 0x95: 0x2022,
- 0x96: 0x2013,
- 0x97: 0x2014,
- 0x98: 0x02dc,
- 0x99: 0x2122,
- 0x9a: 0x0161,
- 0x9b: 0x203a,
- 0x9c: 0x0153,
- 0x9e: 0x017e,
- 0x9f: 0x0178
-};
-
-const isRawTextContainer = /*#__PURE__*/ shared.makeMap('style,iframe,script,noscript', true);
-const parserOptions = {
- isVoidTag: shared.isVoidTag,
- isNativeTag: tag => shared.isHTMLTag(tag) || shared.isSVGTag(tag),
- isPreTag: tag => tag === 'pre',
- decodeEntities: decodeHtml,
- isBuiltInComponent: (tag) => {
- if (compilerCore.isBuiltInType(tag, `Transition`)) {
- return TRANSITION;
- }
- else if (compilerCore.isBuiltInType(tag, `TransitionGroup`)) {
- return TRANSITION_GROUP;
- }
- },
- // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher
- getNamespace(tag, parent) {
- let ns = parent ? parent.ns : 0 /* HTML */;
- if (parent && ns === 2 /* MATH_ML */) {
- if (parent.tag === 'annotation-xml') {
- if (tag === 'svg') {
- return 1 /* SVG */;
- }
- if (parent.props.some(a => a.type === 6 /* ATTRIBUTE */ &&
- a.name === 'encoding' &&
- a.value != null &&
- (a.value.content === 'text/html' ||
- a.value.content === 'application/xhtml+xml'))) {
- ns = 0 /* HTML */;
- }
- }
- else if (/^m(?:[ions]|text)$/.test(parent.tag) &&
- tag !== 'mglyph' &&
- tag !== 'malignmark') {
- ns = 0 /* HTML */;
- }
- }
- else if (parent && ns === 1 /* SVG */) {
- if (parent.tag === 'foreignObject' ||
- parent.tag === 'desc' ||
- parent.tag === 'title') {
- ns = 0 /* HTML */;
- }
- }
- if (ns === 0 /* HTML */) {
- if (tag === 'svg') {
- return 1 /* SVG */;
- }
- if (tag === 'math') {
- return 2 /* MATH_ML */;
- }
- }
- return ns;
- },
- // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments
- getTextMode({ tag, ns }) {
- if (ns === 0 /* HTML */) {
- if (tag === 'textarea' || tag === 'title') {
- return 1 /* RCDATA */;
- }
- if (isRawTextContainer(tag)) {
- return 2 /* RAWTEXT */;
- }
- }
- return 0 /* DATA */;
- }
-};
-
-// Parse inline CSS strings for static style attributes into an object.
-// This is a NodeTransform since it works on the static `style` attribute and
-// converts it into a dynamic equivalent:
-// style="color: red" -> :style='{ "color": "red" }'
-// It is then processed by `transformElement` and included in the generated
-// props.
-const transformStyle = node => {
- if (node.type === 1 /* ELEMENT */) {
- node.props.forEach((p, i) => {
- if (p.type === 6 /* ATTRIBUTE */ && p.name === 'style' && p.value) {
- // replace p with an expression node
- node.props[i] = {
- type: 7 /* DIRECTIVE */,
- name: `bind`,
- arg: compilerCore.createSimpleExpression(`style`, true, p.loc),
- exp: parseInlineCSS(p.value.content, p.loc),
- modifiers: [],
- loc: p.loc
- };
- }
- });
- }
-};
-const parseInlineCSS = (cssText, loc) => {
- const normalized = shared.parseStringStyle(cssText);
- return compilerCore.createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* CAN_STRINGIFY */);
-};
-
-function createDOMCompilerError(code, loc) {
- return compilerCore.createCompilerError(code, loc, DOMErrorMessages );
-}
-const DOMErrorMessages = {
- [50 /* X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,
- [51 /* X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,
- [52 /* X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,
- [53 /* X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,
- [54 /* X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,
- [55 /* X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,
- [56 /* X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,
- [57 /* X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,
- [58 /* X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,
- [59 /* X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,
- [60 /* X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`
-};
-
-const transformVHtml = (dir, node, context) => {
- const { exp, loc } = dir;
- if (!exp) {
- context.onError(createDOMCompilerError(50 /* X_V_HTML_NO_EXPRESSION */, loc));
- }
- if (node.children.length) {
- context.onError(createDOMCompilerError(51 /* X_V_HTML_WITH_CHILDREN */, loc));
- node.children.length = 0;
- }
- return {
- props: [
- compilerCore.createObjectProperty(compilerCore.createSimpleExpression(`innerHTML`, true, loc), exp || compilerCore.createSimpleExpression('', true))
- ]
- };
-};
-
-const transformVText = (dir, node, context) => {
- const { exp, loc } = dir;
- if (!exp) {
- context.onError(createDOMCompilerError(52 /* X_V_TEXT_NO_EXPRESSION */, loc));
- }
- if (node.children.length) {
- context.onError(createDOMCompilerError(53 /* X_V_TEXT_WITH_CHILDREN */, loc));
- node.children.length = 0;
- }
- return {
- props: [
- compilerCore.createObjectProperty(compilerCore.createSimpleExpression(`textContent`, true), exp
- ? compilerCore.createCallExpression(context.helperString(compilerCore.TO_DISPLAY_STRING), [exp], loc)
- : compilerCore.createSimpleExpression('', true))
- ]
- };
-};
-
-const transformModel = (dir, node, context) => {
- const baseResult = compilerCore.transformModel(dir, node, context);
- // base transform has errors OR component v-model (only need props)
- if (!baseResult.props.length || node.tagType === 1 /* COMPONENT */) {
- return baseResult;
- }
- if (dir.arg) {
- context.onError(createDOMCompilerError(55 /* X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));
- }
- function checkDuplicatedValue() {
- const value = compilerCore.findProp(node, 'value');
- if (value) {
- context.onError(createDOMCompilerError(57 /* X_V_MODEL_UNNECESSARY_VALUE */, value.loc));
- }
- }
- const { tag } = node;
- const isCustomElement = context.isCustomElement(tag);
- if (tag === 'input' ||
- tag === 'textarea' ||
- tag === 'select' ||
- isCustomElement) {
- let directiveToUse = V_MODEL_TEXT;
- let isInvalidType = false;
- if (tag === 'input' || isCustomElement) {
- const type = compilerCore.findProp(node, `type`);
- if (type) {
- if (type.type === 7 /* DIRECTIVE */) {
- // :type="foo"
- directiveToUse = V_MODEL_DYNAMIC;
- }
- else if (type.value) {
- switch (type.value.content) {
- case 'radio':
- directiveToUse = V_MODEL_RADIO;
- break;
- case 'checkbox':
- directiveToUse = V_MODEL_CHECKBOX;
- break;
- case 'file':
- isInvalidType = true;
- context.onError(createDOMCompilerError(56 /* X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));
- break;
- default:
- // text type
- checkDuplicatedValue();
- break;
- }
- }
- }
- else if (compilerCore.hasDynamicKeyVBind(node)) {
- // element has bindings with dynamic keys, which can possibly contain
- // "type".
- directiveToUse = V_MODEL_DYNAMIC;
- }
- else {
- // text type
- checkDuplicatedValue();
- }
- }
- else if (tag === 'select') {
- directiveToUse = V_MODEL_SELECT;
- }
- else {
- // textarea
- checkDuplicatedValue();
- }
- // inject runtime directive
- // by returning the helper symbol via needRuntime
- // the import will replaced a resolveDirective call.
- if (!isInvalidType) {
- baseResult.needRuntime = context.helper(directiveToUse);
- }
- }
- else {
- context.onError(createDOMCompilerError(54 /* X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));
- }
- // native vmodel doesn't need the `modelValue` props since they are also
- // passed to the runtime as `binding.value`. removing it reduces code size.
- baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* SIMPLE_EXPRESSION */ &&
- p.key.content === 'modelValue'));
- return baseResult;
-};
-
-const isEventOptionModifier = /*#__PURE__*/ shared.makeMap(`passive,once,capture`);
-const isNonKeyModifier = /*#__PURE__*/ shared.makeMap(
-// event propagation management
-`stop,prevent,self,` +
- // system modifiers + exact
- `ctrl,shift,alt,meta,exact,` +
- // mouse
- `middle`);
-// left & right could be mouse or key modifiers based on event type
-const maybeKeyModifier = /*#__PURE__*/ shared.makeMap('left,right');
-const isKeyboardEvent = /*#__PURE__*/ shared.makeMap(`onkeyup,onkeydown,onkeypress`, true);
-const resolveModifiers = (key, modifiers, context, loc) => {
- const keyModifiers = [];
- const nonKeyModifiers = [];
- const eventOptionModifiers = [];
- for (let i = 0; i < modifiers.length; i++) {
- const modifier = modifiers[i];
- if (modifier === 'native' &&
- compilerCore.checkCompatEnabled("COMPILER_V_ON_NATIVE" /* COMPILER_V_ON_NATIVE */, context, loc)) {
- eventOptionModifiers.push(modifier);
- }
- else if (isEventOptionModifier(modifier)) {
- // eventOptionModifiers: modifiers for addEventListener() options,
- // e.g. .passive & .capture
- eventOptionModifiers.push(modifier);
- }
- else {
- // runtimeModifiers: modifiers that needs runtime guards
- if (maybeKeyModifier(modifier)) {
- if (compilerCore.isStaticExp(key)) {
- if (isKeyboardEvent(key.content)) {
- keyModifiers.push(modifier);
- }
- else {
- nonKeyModifiers.push(modifier);
- }
- }
- else {
- keyModifiers.push(modifier);
- nonKeyModifiers.push(modifier);
- }
- }
- else {
- if (isNonKeyModifier(modifier)) {
- nonKeyModifiers.push(modifier);
- }
- else {
- keyModifiers.push(modifier);
- }
- }
- }
- }
- return {
- keyModifiers,
- nonKeyModifiers,
- eventOptionModifiers
- };
-};
-const transformClick = (key, event) => {
- const isStaticClick = compilerCore.isStaticExp(key) && key.content.toLowerCase() === 'onclick';
- return isStaticClick
- ? compilerCore.createSimpleExpression(event, true)
- : key.type !== 4 /* SIMPLE_EXPRESSION */
- ? compilerCore.createCompoundExpression([
- `(`,
- key,
- `) === "onClick" ? "${event}" : (`,
- key,
- `)`
- ])
- : key;
-};
-const transformOn = (dir, node, context) => {
- return compilerCore.transformOn(dir, node, context, baseResult => {
- const { modifiers } = dir;
- if (!modifiers.length)
- return baseResult;
- let { key, value: handlerExp } = baseResult.props[0];
- const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);
- // normalize click.right and click.middle since they don't actually fire
- if (nonKeyModifiers.includes('right')) {
- key = transformClick(key, `onContextmenu`);
- }
- if (nonKeyModifiers.includes('middle')) {
- key = transformClick(key, `onMouseup`);
- }
- if (nonKeyModifiers.length) {
- handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [
- handlerExp,
- JSON.stringify(nonKeyModifiers)
- ]);
- }
- if (keyModifiers.length &&
- // if event name is dynamic, always wrap with keys guard
- (!compilerCore.isStaticExp(key) || isKeyboardEvent(key.content))) {
- handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_KEYS), [
- handlerExp,
- JSON.stringify(keyModifiers)
- ]);
- }
- if (eventOptionModifiers.length) {
- const modifierPostfix = eventOptionModifiers.map(shared.capitalize).join('');
- key = compilerCore.isStaticExp(key)
- ? compilerCore.createSimpleExpression(`${key.content}${modifierPostfix}`, true)
- : compilerCore.createCompoundExpression([`(`, key, `) + "${modifierPostfix}"`]);
- }
- return {
- props: [compilerCore.createObjectProperty(key, handlerExp)]
- };
- });
-};
-
-const transformShow = (dir, node, context) => {
- const { exp, loc } = dir;
- if (!exp) {
- context.onError(createDOMCompilerError(58 /* X_V_SHOW_NO_EXPRESSION */, loc));
- }
- return {
- props: [],
- needRuntime: context.helper(V_SHOW)
- };
-};
-
-const warnTransitionChildren = (node, context) => {
- if (node.type === 1 /* ELEMENT */ &&
- node.tagType === 1 /* COMPONENT */) {
- const component = context.isBuiltInComponent(node.tag);
- if (component === TRANSITION) {
- return () => {
- if (node.children.length && hasMultipleChildren(node)) {
- context.onError(createDOMCompilerError(59 /* X_TRANSITION_INVALID_CHILDREN */, {
- start: node.children[0].loc.start,
- end: node.children[node.children.length - 1].loc.end,
- source: ''
- }));
- }
- };
- }
- }
-};
-function hasMultipleChildren(node) {
- // #1352 filter out potential comment nodes.
- const children = (node.children = node.children.filter(c => c.type !== 3 /* COMMENT */ &&
- !(c.type === 2 /* TEXT */ && !c.content.trim())));
- const child = children[0];
- return (children.length !== 1 ||
- child.type === 11 /* FOR */ ||
- (child.type === 9 /* IF */ && child.branches.some(hasMultipleChildren)));
-}
-
-/**
- * This module is Node-only.
- */
-/**
- * Turn eligible hoisted static trees into stringified static nodes, e.g.
- *
- * ```js
- * const _hoisted_1 = createStaticVNode(`<div class="foo">bar</div>`)
- * ```
- *
- * A single static vnode can contain stringified content for **multiple**
- * consecutive nodes (element and plain text), called a "chunk".
- * `@vue/runtime-dom` will create the content via innerHTML in a hidden
- * container element and insert all the nodes in place. The call must also
- * provide the number of nodes contained in the chunk so that during hydration
- * we can know how many nodes the static vnode should adopt.
- *
- * The optimization scans a children list that contains hoisted nodes, and
- * tries to find the largest chunk of consecutive hoisted nodes before running
- * into a non-hoisted node or the end of the list. A chunk is then converted
- * into a single static vnode and replaces the hoisted expression of the first
- * node in the chunk. Other nodes in the chunk are considered "merged" and
- * therefore removed from both the hoist list and the children array.
- *
- * This optimization is only performed in Node.js.
- */
-const stringifyStatic = (children, context, parent) => {
- // bail stringification for slot content
- if (context.scopes.vSlot > 0) {
- return;
- }
- let nc = 0; // current node count
- let ec = 0; // current element with binding count
- const currentChunk = [];
- const stringifyCurrentChunk = (currentIndex) => {
- if (nc >= 20 /* NODE_COUNT */ ||
- ec >= 5 /* ELEMENT_WITH_BINDING_COUNT */) {
- // combine all currently eligible nodes into a single static vnode call
- const staticCall = compilerCore.createCallExpression(context.helper(compilerCore.CREATE_STATIC), [
- JSON.stringify(currentChunk.map(node => stringifyNode(node, context)).join('')),
- // the 2nd argument indicates the number of DOM nodes this static vnode
- // will insert / hydrate
- String(currentChunk.length)
- ]);
- // replace the first node's hoisted expression with the static vnode call
- replaceHoist(currentChunk[0], staticCall, context);
- if (currentChunk.length > 1) {
- for (let i = 1; i < currentChunk.length; i++) {
- // for the merged nodes, set their hoisted expression to null
- replaceHoist(currentChunk[i], null, context);
- }
- // also remove merged nodes from children
- const deleteCount = currentChunk.length - 1;
- children.splice(currentIndex - currentChunk.length + 1, deleteCount);
- return deleteCount;
- }
- }
- return 0;
- };
- let i = 0;
- for (; i < children.length; i++) {
- const child = children[i];
- const hoisted = getHoistedNode(child);
- if (hoisted) {
- // presence of hoisted means child must be a stringifiable node
- const node = child;
- const result = analyzeNode(node);
- if (result) {
- // node is stringifiable, record state
- nc += result[0];
- ec += result[1];
- currentChunk.push(node);
- continue;
- }
- }
- // we only reach here if we ran into a node that is not stringifiable
- // check if currently analyzed nodes meet criteria for stringification.
- // adjust iteration index
- i -= stringifyCurrentChunk(i);
- // reset state
- nc = 0;
- ec = 0;
- currentChunk.length = 0;
- }
- // in case the last node was also stringifiable
- stringifyCurrentChunk(i);
-};
-const getHoistedNode = (node) => ((node.type === 1 /* ELEMENT */ && node.tagType === 0 /* ELEMENT */) ||
- node.type == 12 /* TEXT_CALL */) &&
- node.codegenNode &&
- node.codegenNode.type === 4 /* SIMPLE_EXPRESSION */ &&
- node.codegenNode.hoisted;
-const dataAriaRE = /^(data|aria)-/;
-const isStringifiableAttr = (name, ns) => {
- return ((ns === 0 /* HTML */
- ? shared.isKnownHtmlAttr(name)
- : ns === 1 /* SVG */
- ? shared.isKnownSvgAttr(name)
- : false) || dataAriaRE.test(name));
-};
-const replaceHoist = (node, replacement, context) => {
- const hoistToReplace = node.codegenNode.hoisted;
- context.hoists[context.hoists.indexOf(hoistToReplace)] = replacement;
-};
-const isNonStringifiable = /*#__PURE__*/ shared.makeMap(`caption,thead,tr,th,tbody,td,tfoot,colgroup,col`);
-/**
- * for a hoisted node, analyze it and return:
- * - false: bailed (contains runtime constant)
- * - [nc, ec] where
- * - nc is the number of nodes inside
- * - ec is the number of element with bindings inside
- */
-function analyzeNode(node) {
- if (node.type === 1 /* ELEMENT */ && isNonStringifiable(node.tag)) {
- return false;
- }
- if (node.type === 12 /* TEXT_CALL */) {
- return [1, 0];
- }
- let nc = 1; // node count
- let ec = node.props.length > 0 ? 1 : 0; // element w/ binding count
- let bailed = false;
- const bail = () => {
- bailed = true;
- return false;
- };
- // TODO: check for cases where using innerHTML will result in different
- // output compared to imperative node insertions.
- // probably only need to check for most common case
- // i.e. non-phrasing-content tags inside `<p>`
- function walk(node) {
- for (let i = 0; i < node.props.length; i++) {
- const p = node.props[i];
- // bail on non-attr bindings
- if (p.type === 6 /* ATTRIBUTE */ &&
- !isStringifiableAttr(p.name, node.ns)) {
- return bail();
- }
- if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind') {
- // bail on non-attr bindings
- if (p.arg &&
- (p.arg.type === 8 /* COMPOUND_EXPRESSION */ ||
- (p.arg.isStatic && !isStringifiableAttr(p.arg.content, node.ns)))) {
- return bail();
- }
- }
- }
- for (let i = 0; i < node.children.length; i++) {
- nc++;
- const child = node.children[i];
- if (child.type === 1 /* ELEMENT */) {
- if (child.props.length > 0) {
- ec++;
- }
- walk(child);
- if (bailed) {
- return false;
- }
- }
- }
- return true;
- }
- return walk(node) ? [nc, ec] : false;
-}
-function stringifyNode(node, context) {
- if (shared.isString(node)) {
- return node;
- }
- if (shared.isSymbol(node)) {
- return ``;
- }
- switch (node.type) {
- case 1 /* ELEMENT */:
- return stringifyElement(node, context);
- case 2 /* TEXT */:
- return shared.escapeHtml(node.content);
- case 3 /* COMMENT */:
- return `<!--${shared.escapeHtml(node.content)}-->`;
- case 5 /* INTERPOLATION */:
- return shared.escapeHtml(shared.toDisplayString(evaluateConstant(node.content)));
- case 8 /* COMPOUND_EXPRESSION */:
- return shared.escapeHtml(evaluateConstant(node));
- case 12 /* TEXT_CALL */:
- return stringifyNode(node.content, context);
- default:
- // static trees will not contain if/for nodes
- return '';
- }
-}
-function stringifyElement(node, context) {
- let res = `<${node.tag}`;
- for (let i = 0; i < node.props.length; i++) {
- const p = node.props[i];
- if (p.type === 6 /* ATTRIBUTE */) {
- res += ` ${p.name}`;
- if (p.value) {
- res += `="${shared.escapeHtml(p.value.content)}"`;
- }
- }
- else if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind') {
- // constant v-bind, e.g. :foo="1"
- let evaluated = evaluateConstant(p.exp);
- if (evaluated != null) {
- const arg = p.arg && p.arg.content;
- if (arg === 'class') {
- evaluated = shared.normalizeClass(evaluated);
- }
- else if (arg === 'style') {
- evaluated = shared.stringifyStyle(shared.normalizeStyle(evaluated));
- }
- res += ` ${p.arg.content}="${shared.escapeHtml(evaluated)}"`;
- }
- }
- }
- if (context.scopeId) {
- res += ` ${context.scopeId}`;
- }
- res += `>`;
- for (let i = 0; i < node.children.length; i++) {
- res += stringifyNode(node.children[i], context);
- }
- if (!shared.isVoidTag(node.tag)) {
- res += `</${node.tag}>`;
- }
- return res;
-}
-// __UNSAFE__
-// Reason: eval.
-// It's technically safe to eval because only constant expressions are possible
-// here, e.g. `{{ 1 }}` or `{{ 'foo' }}`
-// in addition, constant exps bail on presence of parens so you can't even
-// run JSFuck in here. But we mark it unsafe for security review purposes.
-// (see compiler-core/src/transformExpressions)
-function evaluateConstant(exp) {
- if (exp.type === 4 /* SIMPLE_EXPRESSION */) {
- return new Function(`return ${exp.content}`)();
- }
- else {
- // compound
- let res = ``;
- exp.children.forEach(c => {
- if (shared.isString(c) || shared.isSymbol(c)) {
- return;
- }
- if (c.type === 2 /* TEXT */) {
- res += c.content;
- }
- else if (c.type === 5 /* INTERPOLATION */) {
- res += shared.toDisplayString(evaluateConstant(c.content));
- }
- else {
- res += evaluateConstant(c);
- }
- });
- return res;
- }
-}
-
-const ignoreSideEffectTags = (node, context) => {
- if (node.type === 1 /* ELEMENT */ &&
- node.tagType === 0 /* ELEMENT */ &&
- (node.tag === 'script' || node.tag === 'style')) {
- context.onError(createDOMCompilerError(60 /* X_IGNORED_SIDE_EFFECT_TAG */, node.loc));
- context.removeNode();
- }
-};
-
-const DOMNodeTransforms = [
- transformStyle,
- ...([warnTransitionChildren] )
-];
-const DOMDirectiveTransforms = {
- cloak: compilerCore.noopDirectiveTransform,
- html: transformVHtml,
- text: transformVText,
- model: transformModel,
- on: transformOn,
- show: transformShow
-};
-function compile(template, options = {}) {
- return compilerCore.baseCompile(template, shared.extend({}, parserOptions, options, {
- nodeTransforms: [
- // ignore <script> and <tag>
- // this is not put inside DOMNodeTransforms because that list is used
- // by compiler-ssr to generate vnode fallback branches
- ignoreSideEffectTags,
- ...DOMNodeTransforms,
- ...(options.nodeTransforms || [])
- ],
- directiveTransforms: shared.extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),
- transformHoist: stringifyStatic
- }));
-}
-function parse(template, options = {}) {
- return compilerCore.baseParse(template, shared.extend({}, parserOptions, options));
-}
-
-Object.keys(compilerCore).forEach(function (k) {
- if (k !== 'default') exports[k] = compilerCore[k];
-});
-exports.DOMDirectiveTransforms = DOMDirectiveTransforms;
-exports.DOMNodeTransforms = DOMNodeTransforms;
-exports.TRANSITION = TRANSITION;
-exports.TRANSITION_GROUP = TRANSITION_GROUP;
-exports.V_MODEL_CHECKBOX = V_MODEL_CHECKBOX;
-exports.V_MODEL_DYNAMIC = V_MODEL_DYNAMIC;
-exports.V_MODEL_RADIO = V_MODEL_RADIO;
-exports.V_MODEL_SELECT = V_MODEL_SELECT;
-exports.V_MODEL_TEXT = V_MODEL_TEXT;
-exports.V_ON_WITH_KEYS = V_ON_WITH_KEYS;
-exports.V_ON_WITH_MODIFIERS = V_ON_WITH_MODIFIERS;
-exports.V_SHOW = V_SHOW;
-exports.compile = compile;
-exports.createDOMCompilerError = createDOMCompilerError;
-exports.parse = parse;
-exports.parserOptions = parserOptions;
-exports.transformStyle = transformStyle;
-}(compilerDom_cjs$2));
-
-var compilerDom_cjs = /*@__PURE__*/build.getDefaultExportFromCjs(compilerDom_cjs$2);
-
-var compilerDom_cjs$1 = /*#__PURE__*/_mergeNamespaces({
- __proto__: null,
- 'default': compilerDom_cjs
-}, [compilerDom_cjs$2]);
-
-exports.compilerDom_cjs = compilerDom_cjs$1;
-//# sourceMappingURL=dep-a5b4350d.js.map
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-a5b4350d.js.map b/packages/astro/vendor/vite/dist/node/chunks/dep-a5b4350d.js.map
deleted file mode 100755
index 65f9ebb07..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-a5b4350d.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"dep-a5b4350d.js","sources":["../../../../../node_modules/.pnpm/@vue+shared@3.2.19/node_modules/@vue/shared/dist/shared.esm-bundler.js","../../../../../node_modules/.pnpm/@vue+compiler-core@3.2.19/node_modules/@vue/compiler-core/dist/compiler-core.esm-bundler.js","../../../../../node_modules/.pnpm/@vue+compiler-dom@3.2.19/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.js"],"sourcesContent":["/**\r\n * Make a map and return a function for checking if a key\r\n * is in that map.\r\n * IMPORTANT: all calls of this function must be prefixed with\r\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\r\n * So that rollup can tree-shake them if necessary.\r\n */\r\nfunction makeMap(str, expectsLowerCase) {\r\n const map = Object.create(null);\r\n const list = str.split(',');\r\n for (let i = 0; i < list.length; i++) {\r\n map[list[i]] = true;\r\n }\r\n return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\r\n}\n\n/**\r\n * dev only flag -> name mapping\r\n */\r\nconst PatchFlagNames = {\r\n [1 /* TEXT */]: `TEXT`,\r\n [2 /* CLASS */]: `CLASS`,\r\n [4 /* STYLE */]: `STYLE`,\r\n [8 /* PROPS */]: `PROPS`,\r\n [16 /* FULL_PROPS */]: `FULL_PROPS`,\r\n [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\r\n [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\r\n [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\r\n [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\r\n [512 /* NEED_PATCH */]: `NEED_PATCH`,\r\n [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\r\n [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\r\n [-1 /* HOISTED */]: `HOISTED`,\r\n [-2 /* BAIL */]: `BAIL`\r\n};\n\n/**\r\n * Dev only\r\n */\r\nconst slotFlagsText = {\r\n [1 /* STABLE */]: 'STABLE',\r\n [2 /* DYNAMIC */]: 'DYNAMIC',\r\n [3 /* FORWARDED */]: 'FORWARDED'\r\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\r\n 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\r\n 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\r\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\r\nfunction generateCodeFrame(source, start = 0, end = source.length) {\r\n // Split the content into individual lines but capture the newline sequence\r\n // that separated each line. This is important because the actual sequence is\r\n // needed to properly take into account the full line length for offset\r\n // comparison\r\n let lines = source.split(/(\\r?\\n)/);\r\n // Separate the lines and newline sequences into separate arrays for easier referencing\r\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\r\n lines = lines.filter((_, idx) => idx % 2 === 0);\r\n let count = 0;\r\n const res = [];\r\n for (let i = 0; i < lines.length; i++) {\r\n count +=\r\n lines[i].length +\r\n ((newlineSequences[i] && newlineSequences[i].length) || 0);\r\n if (count >= start) {\r\n for (let j = i - range; j <= i + range || end > count; j++) {\r\n if (j < 0 || j >= lines.length)\r\n continue;\r\n const line = j + 1;\r\n res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`);\r\n const lineLength = lines[j].length;\r\n const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\r\n if (j === i) {\r\n // push underline\r\n const pad = start - (count - (lineLength + newLineSeqLength));\r\n const length = Math.max(1, end > count ? lineLength - pad : end - start);\r\n res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length));\r\n }\r\n else if (j > i) {\r\n if (end > count) {\r\n const length = Math.max(Math.min(end - count, lineLength), 1);\r\n res.push(` | ` + '^'.repeat(length));\r\n }\r\n count += lineLength + newLineSeqLength;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return res.join('\\n');\r\n}\n\n/**\r\n * On the client we only need to offer special cases for boolean attributes that\r\n * have different names from their corresponding dom properties:\r\n * - itemscope -> N/A\r\n * - allowfullscreen -> allowFullscreen\r\n * - formnovalidate -> formNoValidate\r\n * - ismap -> isMap\r\n * - nomodule -> noModule\r\n * - novalidate -> noValidate\r\n * - readonly -> readOnly\r\n */\r\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\r\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\r\n/**\r\n * The full list is needed during SSR to produce the correct initial markup.\r\n */\r\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\r\n `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\r\n `loop,open,required,reversed,scoped,seamless,` +\r\n `checked,muted,multiple,selected`);\r\n/**\r\n * Boolean attributes should be included if the value is truthy or ''.\r\n * e.g. <select multiple> compiles to { multiple: '' }\r\n */\r\nfunction includeBooleanAttr(value) {\r\n return !!value || value === '';\r\n}\r\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\r\nconst attrValidationCache = {};\r\nfunction isSSRSafeAttrName(name) {\r\n if (attrValidationCache.hasOwnProperty(name)) {\r\n return attrValidationCache[name];\r\n }\r\n const isUnsafe = unsafeAttrCharRE.test(name);\r\n if (isUnsafe) {\r\n console.error(`unsafe attribute name: ${name}`);\r\n }\r\n return (attrValidationCache[name] = !isUnsafe);\r\n}\r\nconst propsToAttrMap = {\r\n acceptCharset: 'accept-charset',\r\n className: 'class',\r\n htmlFor: 'for',\r\n httpEquiv: 'http-equiv'\r\n};\r\n/**\r\n * CSS properties that accept plain numbers\r\n */\r\nconst isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +\r\n `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +\r\n `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +\r\n `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +\r\n `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +\r\n `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +\r\n // SVG\r\n `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +\r\n `stroke-miterlimit,stroke-opacity,stroke-width`);\r\n/**\r\n * Known attributes, this is used for stringification of runtime static nodes\r\n * so that we don't stringify bindings that cannot be set from HTML.\r\n * Don't also forget to allow `data-*` and `aria-*`!\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\r\n */\r\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\r\n `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\r\n `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\r\n `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\r\n `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\r\n `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\r\n `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\r\n `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\r\n `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\r\n `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\r\n `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\r\n `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\r\n `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\r\n `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\r\n `value,width,wrap`);\r\n/**\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\r\n */\r\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\r\n `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\r\n `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\r\n `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\r\n `color-interpolation-filters,color-profile,color-rendering,` +\r\n `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\r\n `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\r\n `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\r\n `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\r\n `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\r\n `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\r\n `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\r\n `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\r\n `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\r\n `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\r\n `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\r\n `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\r\n `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\r\n `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\r\n `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\r\n `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\r\n `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\r\n `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\r\n `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\r\n `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\r\n `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\r\n `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\r\n `strikethrough-position,strikethrough-thickness,string,stroke,` +\r\n `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\r\n `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\r\n `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\r\n `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\r\n `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\r\n `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\r\n `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\r\n `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\r\n `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\r\n `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\r\n `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nfunction normalizeStyle(value) {\r\n if (isArray(value)) {\r\n const res = {};\r\n for (let i = 0; i < value.length; i++) {\r\n const item = value[i];\r\n const normalized = isString(item)\r\n ? parseStringStyle(item)\r\n : normalizeStyle(item);\r\n if (normalized) {\r\n for (const key in normalized) {\r\n res[key] = normalized[key];\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n else if (isString(value)) {\r\n return value;\r\n }\r\n else if (isObject(value)) {\r\n return value;\r\n }\r\n}\r\nconst listDelimiterRE = /;(?![^(]*\\))/g;\r\nconst propertyDelimiterRE = /:(.+)/;\r\nfunction parseStringStyle(cssText) {\r\n const ret = {};\r\n cssText.split(listDelimiterRE).forEach(item => {\r\n if (item) {\r\n const tmp = item.split(propertyDelimiterRE);\r\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\r\n }\r\n });\r\n return ret;\r\n}\r\nfunction stringifyStyle(styles) {\r\n let ret = '';\r\n if (!styles || isString(styles)) {\r\n return ret;\r\n }\r\n for (const key in styles) {\r\n const value = styles[key];\r\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\r\n if (isString(value) ||\r\n (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {\r\n // only render valid values\r\n ret += `${normalizedKey}:${value};`;\r\n }\r\n }\r\n return ret;\r\n}\r\nfunction normalizeClass(value) {\r\n let res = '';\r\n if (isString(value)) {\r\n res = value;\r\n }\r\n else if (isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n const normalized = normalizeClass(value[i]);\r\n if (normalized) {\r\n res += normalized + ' ';\r\n }\r\n }\r\n }\r\n else if (isObject(value)) {\r\n for (const name in value) {\r\n if (value[name]) {\r\n res += name + ' ';\r\n }\r\n }\r\n }\r\n return res.trim();\r\n}\r\nfunction normalizeProps(props) {\r\n if (!props)\r\n return null;\r\n let { class: klass, style } = props;\r\n if (klass && !isString(klass)) {\r\n props.class = normalizeClass(klass);\r\n }\r\n if (style) {\r\n props.style = normalizeStyle(style);\r\n }\r\n return props;\r\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\r\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\r\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\r\n 'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\r\n 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\r\n 'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\r\n 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\r\n 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\r\n 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\r\n 'option,output,progress,select,textarea,details,dialog,menu,' +\r\n 'summary,template,blockquote,iframe,tfoot';\r\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\r\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\r\n 'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\r\n 'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\r\n 'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\r\n 'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\r\n 'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\r\n 'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\r\n 'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\r\n 'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\r\n 'text,textPath,title,tspan,unknown,use,view';\r\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\r\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\r\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\r\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\nconst escapeRE = /[\"'&<>]/;\r\nfunction escapeHtml(string) {\r\n const str = '' + string;\r\n const match = escapeRE.exec(str);\r\n if (!match) {\r\n return str;\r\n }\r\n let html = '';\r\n let escaped;\r\n let index;\r\n let lastIndex = 0;\r\n for (index = match.index; index < str.length; index++) {\r\n switch (str.charCodeAt(index)) {\r\n case 34: // \"\r\n escaped = '&quot;';\r\n break;\r\n case 38: // &\r\n escaped = '&amp;';\r\n break;\r\n case 39: // '\r\n escaped = '&#39;';\r\n break;\r\n case 60: // <\r\n escaped = '&lt;';\r\n break;\r\n case 62: // >\r\n escaped = '&gt;';\r\n break;\r\n default:\r\n continue;\r\n }\r\n if (lastIndex !== index) {\r\n html += str.substring(lastIndex, index);\r\n }\r\n lastIndex = index + 1;\r\n html += escaped;\r\n }\r\n return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\r\n}\r\n// https://www.w3.org/TR/html52/syntax.html#comments\r\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\r\nfunction escapeHtmlComment(src) {\r\n return src.replace(commentStripRE, '');\r\n}\n\nfunction looseCompareArrays(a, b) {\r\n if (a.length !== b.length)\r\n return false;\r\n let equal = true;\r\n for (let i = 0; equal && i < a.length; i++) {\r\n equal = looseEqual(a[i], b[i]);\r\n }\r\n return equal;\r\n}\r\nfunction looseEqual(a, b) {\r\n if (a === b)\r\n return true;\r\n let aValidType = isDate(a);\r\n let bValidType = isDate(b);\r\n if (aValidType || bValidType) {\r\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\r\n }\r\n aValidType = isArray(a);\r\n bValidType = isArray(b);\r\n if (aValidType || bValidType) {\r\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\r\n }\r\n aValidType = isObject(a);\r\n bValidType = isObject(b);\r\n if (aValidType || bValidType) {\r\n /* istanbul ignore if: this if will probably never be called */\r\n if (!aValidType || !bValidType) {\r\n return false;\r\n }\r\n const aKeysCount = Object.keys(a).length;\r\n const bKeysCount = Object.keys(b).length;\r\n if (aKeysCount !== bKeysCount) {\r\n return false;\r\n }\r\n for (const key in a) {\r\n const aHasKey = a.hasOwnProperty(key);\r\n const bHasKey = b.hasOwnProperty(key);\r\n if ((aHasKey && !bHasKey) ||\r\n (!aHasKey && bHasKey) ||\r\n !looseEqual(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n }\r\n return String(a) === String(b);\r\n}\r\nfunction looseIndexOf(arr, val) {\r\n return arr.findIndex(item => looseEqual(item, val));\r\n}\n\n/**\r\n * For converting {{ interpolation }} values to displayed strings.\r\n * @private\r\n */\r\nconst toDisplayString = (val) => {\r\n return val == null\r\n ? ''\r\n : isArray(val) ||\r\n (isObject(val) &&\r\n (val.toString === objectToString || !isFunction(val.toString)))\r\n ? JSON.stringify(val, replacer, 2)\r\n : String(val);\r\n};\r\nconst replacer = (_key, val) => {\r\n // can't use isRef here since @vue/shared has no deps\r\n if (val && val.__v_isRef) {\r\n return replacer(_key, val.value);\r\n }\r\n else if (isMap(val)) {\r\n return {\r\n [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\r\n entries[`${key} =>`] = val;\r\n return entries;\r\n }, {})\r\n };\r\n }\r\n else if (isSet(val)) {\r\n return {\r\n [`Set(${val.size})`]: [...val.values()]\r\n };\r\n }\r\n else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\r\n return String(val);\r\n }\r\n return val;\r\n};\n\n/**\r\n * List of @babel/parser plugins that are used for template expression\r\n * transforms and SFC script transforms. By default we enable proposals slated\r\n * for ES2020. This will need to be updated as the spec moves forward.\r\n * Full list at https://babeljs.io/docs/en/next/babel-parser#plugins\r\n */\r\nconst babelParserDefaultPlugins = [\r\n 'bigInt',\r\n 'optionalChaining',\r\n 'nullishCoalescingOperator'\r\n];\r\nconst EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\r\n ? Object.freeze({})\r\n : {};\r\nconst EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst NOOP = () => { };\r\n/**\r\n * Always return false.\r\n */\r\nconst NO = () => false;\r\nconst onRE = /^on[^a-z]/;\r\nconst isOn = (key) => onRE.test(key);\r\nconst isModelListener = (key) => key.startsWith('onUpdate:');\r\nconst extend = Object.assign;\r\nconst remove = (arr, el) => {\r\n const i = arr.indexOf(el);\r\n if (i > -1) {\r\n arr.splice(i, 1);\r\n }\r\n};\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\r\nconst isArray = Array.isArray;\r\nconst isMap = (val) => toTypeString(val) === '[object Map]';\r\nconst isSet = (val) => toTypeString(val) === '[object Set]';\r\nconst isDate = (val) => val instanceof Date;\r\nconst isFunction = (val) => typeof val === 'function';\r\nconst isString = (val) => typeof val === 'string';\r\nconst isSymbol = (val) => typeof val === 'symbol';\r\nconst isObject = (val) => val !== null && typeof val === 'object';\r\nconst isPromise = (val) => {\r\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n};\r\nconst objectToString = Object.prototype.toString;\r\nconst toTypeString = (value) => objectToString.call(value);\r\nconst toRawType = (value) => {\r\n // extract \"RawType\" from strings like \"[object RawType]\"\r\n return toTypeString(value).slice(8, -1);\r\n};\r\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\r\nconst isIntegerKey = (key) => isString(key) &&\r\n key !== 'NaN' &&\r\n key[0] !== '-' &&\r\n '' + parseInt(key, 10) === key;\r\nconst isReservedProp = /*#__PURE__*/ makeMap(\r\n// the leading comma is intentional so empty string \"\" is also included\r\n',key,ref,' +\r\n 'onVnodeBeforeMount,onVnodeMounted,' +\r\n 'onVnodeBeforeUpdate,onVnodeUpdated,' +\r\n 'onVnodeBeforeUnmount,onVnodeUnmounted');\r\nconst cacheStringFunction = (fn) => {\r\n const cache = Object.create(null);\r\n return ((str) => {\r\n const hit = cache[str];\r\n return hit || (cache[str] = fn(str));\r\n });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\r\nconst hyphenateRE = /\\B([A-Z])/g;\r\n/**\r\n * @private\r\n */\r\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\r\n/**\r\n * @private\r\n */\r\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\r\n/**\r\n * @private\r\n */\r\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\r\n// compare whether a value has changed, accounting for NaN.\r\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\r\nconst invokeArrayFns = (fns, arg) => {\r\n for (let i = 0; i < fns.length; i++) {\r\n fns[i](arg);\r\n }\r\n};\r\nconst def = (obj, key, value) => {\r\n Object.defineProperty(obj, key, {\r\n configurable: true,\r\n enumerable: false,\r\n value\r\n });\r\n};\r\nconst toNumber = (val) => {\r\n const n = parseFloat(val);\r\n return isNaN(n) ? val : n;\r\n};\r\nlet _globalThis;\r\nconst getGlobalThis = () => {\r\n return (_globalThis ||\r\n (_globalThis =\r\n typeof globalThis !== 'undefined'\r\n ? globalThis\r\n : typeof self !== 'undefined'\r\n ? self\r\n : typeof window !== 'undefined'\r\n ? window\r\n : typeof global !== 'undefined'\r\n ? global\r\n : {}));\r\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, babelParserDefaultPlugins, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isNoUnitNumericStyleProp, isObject, isOn, isPlainObject, isPromise, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","import { isString, hyphenate, NOOP, extend, isObject, NO, isArray, makeMap, isSymbol, EMPTY_OBJ, capitalize, camelize as camelize$1, PatchFlagNames, slotFlagsText, isOn, isReservedProp, toHandlerKey } from '@vue/shared';\nexport { generateCodeFrame } from '@vue/shared';\n\nfunction defaultOnError(error) {\r\n throw error;\r\n}\r\nfunction defaultOnWarn(msg) {\r\n (process.env.NODE_ENV !== 'production') && console.warn(`[Vue warn] ${msg.message}`);\r\n}\r\nfunction createCompilerError(code, loc, messages, additionalMessage) {\r\n const msg = (process.env.NODE_ENV !== 'production') || !true\r\n ? (messages || errorMessages)[code] + (additionalMessage || ``)\r\n : code;\r\n const error = new SyntaxError(String(msg));\r\n error.code = code;\r\n error.loc = loc;\r\n return error;\r\n}\r\nconst errorMessages = {\r\n // parse errors\r\n [0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',\r\n [1 /* CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',\r\n [2 /* DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',\r\n [3 /* END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',\r\n [4 /* END_TAG_WITH_TRAILING_SOLIDUS */]: \"Illegal '/' in tags.\",\r\n [5 /* EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',\r\n [6 /* EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',\r\n [7 /* EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',\r\n [8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',\r\n [9 /* EOF_IN_TAG */]: 'Unexpected EOF in tag.',\r\n [10 /* INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',\r\n [11 /* INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',\r\n [12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: \"Illegal tag name. Use '&lt;' to print '<'.\",\r\n [13 /* MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',\r\n [14 /* MISSING_END_TAG_NAME */]: 'End tag name was expected.',\r\n [15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',\r\n [16 /* NESTED_COMMENT */]: \"Unexpected '<!--' in comment.\",\r\n [17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 (\"), U+0027 (\\'), and U+003C (<).',\r\n [18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 (\"), U+0027 (\\'), U+003C (<), U+003D (=), and U+0060 (`).',\r\n [19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: \"Attribute name cannot start with '='.\",\r\n [21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: \"'<?' is allowed only in XML context.\",\r\n [20 /* UNEXPECTED_NULL_CHARACTER */]: `Unexpected null character.`,\r\n [22 /* UNEXPECTED_SOLIDUS_IN_TAG */]: \"Illegal '/' in tags.\",\r\n // Vue-specific parse errors\r\n [23 /* X_INVALID_END_TAG */]: 'Invalid end tag.',\r\n [24 /* X_MISSING_END_TAG */]: 'Element is missing end tag.',\r\n [25 /* X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',\r\n [27 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +\r\n 'Note that dynamic directive argument cannot contain spaces.',\r\n [26 /* X_MISSING_DIRECTIVE_NAME */]: 'Legal directive name was expected.',\r\n // transform errors\r\n [28 /* X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,\r\n [29 /* X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,\r\n [30 /* X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\r\n [31 /* X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,\r\n [32 /* X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,\r\n [33 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,\r\n [34 /* X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,\r\n [35 /* X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,\r\n [36 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,\r\n [37 /* X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>.` +\r\n `When there are multiple named slots, all slots should use <template> ` +\r\n `syntax to avoid scope ambiguity.`,\r\n [38 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,\r\n [39 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +\r\n `default slot. These children will be ignored.`,\r\n [40 /* X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,\r\n [41 /* X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,\r\n [42 /* X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,\r\n [43 /* X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\r\n [44 /* X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,\r\n [45 /* X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,\r\n // generic errors\r\n [46 /* X_PREFIX_ID_NOT_SUPPORTED */]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\r\n [47 /* X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,\r\n [48 /* X_CACHE_HANDLER_NOT_SUPPORTED */]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\r\n [49 /* X_SCOPE_ID_NOT_SUPPORTED */]: `\"scopeId\" option is only supported in module mode.`,\r\n // just to fulfill types\r\n [50 /* __EXTEND_POINT__ */]: ``\r\n};\n\nconst FRAGMENT = Symbol((process.env.NODE_ENV !== 'production') ? `Fragment` : ``);\r\nconst TELEPORT = Symbol((process.env.NODE_ENV !== 'production') ? `Teleport` : ``);\r\nconst SUSPENSE = Symbol((process.env.NODE_ENV !== 'production') ? `Suspense` : ``);\r\nconst KEEP_ALIVE = Symbol((process.env.NODE_ENV !== 'production') ? `KeepAlive` : ``);\r\nconst BASE_TRANSITION = Symbol((process.env.NODE_ENV !== 'production') ? `BaseTransition` : ``);\r\nconst OPEN_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `openBlock` : ``);\r\nconst CREATE_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `createBlock` : ``);\r\nconst CREATE_ELEMENT_BLOCK = Symbol((process.env.NODE_ENV !== 'production') ? `createElementBlock` : ``);\r\nconst CREATE_VNODE = Symbol((process.env.NODE_ENV !== 'production') ? `createVNode` : ``);\r\nconst CREATE_ELEMENT_VNODE = Symbol((process.env.NODE_ENV !== 'production') ? `createElementVNode` : ``);\r\nconst CREATE_COMMENT = Symbol((process.env.NODE_ENV !== 'production') ? `createCommentVNode` : ``);\r\nconst CREATE_TEXT = Symbol((process.env.NODE_ENV !== 'production') ? `createTextVNode` : ``);\r\nconst CREATE_STATIC = Symbol((process.env.NODE_ENV !== 'production') ? `createStaticVNode` : ``);\r\nconst RESOLVE_COMPONENT = Symbol((process.env.NODE_ENV !== 'production') ? `resolveComponent` : ``);\r\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol((process.env.NODE_ENV !== 'production') ? `resolveDynamicComponent` : ``);\r\nconst RESOLVE_DIRECTIVE = Symbol((process.env.NODE_ENV !== 'production') ? `resolveDirective` : ``);\r\nconst RESOLVE_FILTER = Symbol((process.env.NODE_ENV !== 'production') ? `resolveFilter` : ``);\r\nconst WITH_DIRECTIVES = Symbol((process.env.NODE_ENV !== 'production') ? `withDirectives` : ``);\r\nconst RENDER_LIST = Symbol((process.env.NODE_ENV !== 'production') ? `renderList` : ``);\r\nconst RENDER_SLOT = Symbol((process.env.NODE_ENV !== 'production') ? `renderSlot` : ``);\r\nconst CREATE_SLOTS = Symbol((process.env.NODE_ENV !== 'production') ? `createSlots` : ``);\r\nconst TO_DISPLAY_STRING = Symbol((process.env.NODE_ENV !== 'production') ? `toDisplayString` : ``);\r\nconst MERGE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `mergeProps` : ``);\r\nconst NORMALIZE_CLASS = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeClass` : ``);\r\nconst NORMALIZE_STYLE = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeStyle` : ``);\r\nconst NORMALIZE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `normalizeProps` : ``);\r\nconst GUARD_REACTIVE_PROPS = Symbol((process.env.NODE_ENV !== 'production') ? `guardReactiveProps` : ``);\r\nconst TO_HANDLERS = Symbol((process.env.NODE_ENV !== 'production') ? `toHandlers` : ``);\r\nconst CAMELIZE = Symbol((process.env.NODE_ENV !== 'production') ? `camelize` : ``);\r\nconst CAPITALIZE = Symbol((process.env.NODE_ENV !== 'production') ? `capitalize` : ``);\r\nconst TO_HANDLER_KEY = Symbol((process.env.NODE_ENV !== 'production') ? `toHandlerKey` : ``);\r\nconst SET_BLOCK_TRACKING = Symbol((process.env.NODE_ENV !== 'production') ? `setBlockTracking` : ``);\r\nconst PUSH_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `pushScopeId` : ``);\r\nconst POP_SCOPE_ID = Symbol((process.env.NODE_ENV !== 'production') ? `popScopeId` : ``);\r\nconst WITH_CTX = Symbol((process.env.NODE_ENV !== 'production') ? `withCtx` : ``);\r\nconst UNREF = Symbol((process.env.NODE_ENV !== 'production') ? `unref` : ``);\r\nconst IS_REF = Symbol((process.env.NODE_ENV !== 'production') ? `isRef` : ``);\r\nconst WITH_MEMO = Symbol((process.env.NODE_ENV !== 'production') ? `withMemo` : ``);\r\nconst IS_MEMO_SAME = Symbol((process.env.NODE_ENV !== 'production') ? `isMemoSame` : ``);\r\n// Name mapping for runtime helpers that need to be imported from 'vue' in\r\n// generated code. Make sure these are correctly exported in the runtime!\r\n// Using `any` here because TS doesn't allow symbols as index type.\r\nconst helperNameMap = {\r\n [FRAGMENT]: `Fragment`,\r\n [TELEPORT]: `Teleport`,\r\n [SUSPENSE]: `Suspense`,\r\n [KEEP_ALIVE]: `KeepAlive`,\r\n [BASE_TRANSITION]: `BaseTransition`,\r\n [OPEN_BLOCK]: `openBlock`,\r\n [CREATE_BLOCK]: `createBlock`,\r\n [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\r\n [CREATE_VNODE]: `createVNode`,\r\n [CREATE_ELEMENT_VNODE]: `createElementVNode`,\r\n [CREATE_COMMENT]: `createCommentVNode`,\r\n [CREATE_TEXT]: `createTextVNode`,\r\n [CREATE_STATIC]: `createStaticVNode`,\r\n [RESOLVE_COMPONENT]: `resolveComponent`,\r\n [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\r\n [RESOLVE_DIRECTIVE]: `resolveDirective`,\r\n [RESOLVE_FILTER]: `resolveFilter`,\r\n [WITH_DIRECTIVES]: `withDirectives`,\r\n [RENDER_LIST]: `renderList`,\r\n [RENDER_SLOT]: `renderSlot`,\r\n [CREATE_SLOTS]: `createSlots`,\r\n [TO_DISPLAY_STRING]: `toDisplayString`,\r\n [MERGE_PROPS]: `mergeProps`,\r\n [NORMALIZE_CLASS]: `normalizeClass`,\r\n [NORMALIZE_STYLE]: `normalizeStyle`,\r\n [NORMALIZE_PROPS]: `normalizeProps`,\r\n [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\r\n [TO_HANDLERS]: `toHandlers`,\r\n [CAMELIZE]: `camelize`,\r\n [CAPITALIZE]: `capitalize`,\r\n [TO_HANDLER_KEY]: `toHandlerKey`,\r\n [SET_BLOCK_TRACKING]: `setBlockTracking`,\r\n [PUSH_SCOPE_ID]: `pushScopeId`,\r\n [POP_SCOPE_ID]: `popScopeId`,\r\n [WITH_CTX]: `withCtx`,\r\n [UNREF]: `unref`,\r\n [IS_REF]: `isRef`,\r\n [WITH_MEMO]: `withMemo`,\r\n [IS_MEMO_SAME]: `isMemoSame`\r\n};\r\nfunction registerRuntimeHelpers(helpers) {\r\n Object.getOwnPropertySymbols(helpers).forEach(s => {\r\n helperNameMap[s] = helpers[s];\r\n });\r\n}\n\n// AST Utilities ---------------------------------------------------------------\r\n// Some expressions, e.g. sequence and conditional expressions, are never\r\n// associated with template nodes, so their source locations are just a stub.\r\n// Container types like CompoundExpression also don't need a real location.\r\nconst locStub = {\r\n source: '',\r\n start: { line: 1, column: 1, offset: 0 },\r\n end: { line: 1, column: 1, offset: 0 }\r\n};\r\nfunction createRoot(children, loc = locStub) {\r\n return {\r\n type: 0 /* ROOT */,\r\n children,\r\n helpers: [],\r\n components: [],\r\n directives: [],\r\n hoists: [],\r\n imports: [],\r\n cached: 0,\r\n temps: 0,\r\n codegenNode: undefined,\r\n loc\r\n };\r\n}\r\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\r\n if (context) {\r\n if (isBlock) {\r\n context.helper(OPEN_BLOCK);\r\n context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\r\n }\r\n else {\r\n context.helper(getVNodeHelper(context.inSSR, isComponent));\r\n }\r\n if (directives) {\r\n context.helper(WITH_DIRECTIVES);\r\n }\r\n }\r\n return {\r\n type: 13 /* VNODE_CALL */,\r\n tag,\r\n props,\r\n children,\r\n patchFlag,\r\n dynamicProps,\r\n directives,\r\n isBlock,\r\n disableTracking,\r\n isComponent,\r\n loc\r\n };\r\n}\r\nfunction createArrayExpression(elements, loc = locStub) {\r\n return {\r\n type: 17 /* JS_ARRAY_EXPRESSION */,\r\n loc,\r\n elements\r\n };\r\n}\r\nfunction createObjectExpression(properties, loc = locStub) {\r\n return {\r\n type: 15 /* JS_OBJECT_EXPRESSION */,\r\n loc,\r\n properties\r\n };\r\n}\r\nfunction createObjectProperty(key, value) {\r\n return {\r\n type: 16 /* JS_PROPERTY */,\r\n loc: locStub,\r\n key: isString(key) ? createSimpleExpression(key, true) : key,\r\n value\r\n };\r\n}\r\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* NOT_CONSTANT */) {\r\n return {\r\n type: 4 /* SIMPLE_EXPRESSION */,\r\n loc,\r\n content,\r\n isStatic,\r\n constType: isStatic ? 3 /* CAN_STRINGIFY */ : constType\r\n };\r\n}\r\nfunction createInterpolation(content, loc) {\r\n return {\r\n type: 5 /* INTERPOLATION */,\r\n loc,\r\n content: isString(content)\r\n ? createSimpleExpression(content, false, loc)\r\n : content\r\n };\r\n}\r\nfunction createCompoundExpression(children, loc = locStub) {\r\n return {\r\n type: 8 /* COMPOUND_EXPRESSION */,\r\n loc,\r\n children\r\n };\r\n}\r\nfunction createCallExpression(callee, args = [], loc = locStub) {\r\n return {\r\n type: 14 /* JS_CALL_EXPRESSION */,\r\n loc,\r\n callee,\r\n arguments: args\r\n };\r\n}\r\nfunction createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {\r\n return {\r\n type: 18 /* JS_FUNCTION_EXPRESSION */,\r\n params,\r\n returns,\r\n newline,\r\n isSlot,\r\n loc\r\n };\r\n}\r\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\r\n return {\r\n type: 19 /* JS_CONDITIONAL_EXPRESSION */,\r\n test,\r\n consequent,\r\n alternate,\r\n newline,\r\n loc: locStub\r\n };\r\n}\r\nfunction createCacheExpression(index, value, isVNode = false) {\r\n return {\r\n type: 20 /* JS_CACHE_EXPRESSION */,\r\n index,\r\n value,\r\n isVNode,\r\n loc: locStub\r\n };\r\n}\r\nfunction createBlockStatement(body) {\r\n return {\r\n type: 21 /* JS_BLOCK_STATEMENT */,\r\n body,\r\n loc: locStub\r\n };\r\n}\r\nfunction createTemplateLiteral(elements) {\r\n return {\r\n type: 22 /* JS_TEMPLATE_LITERAL */,\r\n elements,\r\n loc: locStub\r\n };\r\n}\r\nfunction createIfStatement(test, consequent, alternate) {\r\n return {\r\n type: 23 /* JS_IF_STATEMENT */,\r\n test,\r\n consequent,\r\n alternate,\r\n loc: locStub\r\n };\r\n}\r\nfunction createAssignmentExpression(left, right) {\r\n return {\r\n type: 24 /* JS_ASSIGNMENT_EXPRESSION */,\r\n left,\r\n right,\r\n loc: locStub\r\n };\r\n}\r\nfunction createSequenceExpression(expressions) {\r\n return {\r\n type: 25 /* JS_SEQUENCE_EXPRESSION */,\r\n expressions,\r\n loc: locStub\r\n };\r\n}\r\nfunction createReturnStatement(returns) {\r\n return {\r\n type: 26 /* JS_RETURN_STATEMENT */,\r\n returns,\r\n loc: locStub\r\n };\r\n}\n\nconst isStaticExp = (p) => p.type === 4 /* SIMPLE_EXPRESSION */ && p.isStatic;\r\nconst isBuiltInType = (tag, expected) => tag === expected || tag === hyphenate(expected);\r\nfunction isCoreComponent(tag) {\r\n if (isBuiltInType(tag, 'Teleport')) {\r\n return TELEPORT;\r\n }\r\n else if (isBuiltInType(tag, 'Suspense')) {\r\n return SUSPENSE;\r\n }\r\n else if (isBuiltInType(tag, 'KeepAlive')) {\r\n return KEEP_ALIVE;\r\n }\r\n else if (isBuiltInType(tag, 'BaseTransition')) {\r\n return BASE_TRANSITION;\r\n }\r\n}\r\nconst nonIdentifierRE = /^\\d|[^\\$\\w]/;\r\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\r\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\r\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\r\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\r\n/**\r\n * Simple lexer to check if an expression is a member expression. This is\r\n * lax and only checks validity at the root level (i.e. does not validate exps\r\n * inside square brackets), but it's ok since these are only used on template\r\n * expressions and false positives are invalid expressions in the first place.\r\n */\r\nconst isMemberExpressionBrowser = (path) => {\r\n // remove whitespaces around . or [ first\r\n path = path.trim().replace(whitespaceRE, s => s.trim());\r\n let state = 0 /* inMemberExp */;\r\n let stateStack = [];\r\n let currentOpenBracketCount = 0;\r\n let currentOpenParensCount = 0;\r\n let currentStringType = null;\r\n for (let i = 0; i < path.length; i++) {\r\n const char = path.charAt(i);\r\n switch (state) {\r\n case 0 /* inMemberExp */:\r\n if (char === '[') {\r\n stateStack.push(state);\r\n state = 1 /* inBrackets */;\r\n currentOpenBracketCount++;\r\n }\r\n else if (char === '(') {\r\n stateStack.push(state);\r\n state = 2 /* inParens */;\r\n currentOpenParensCount++;\r\n }\r\n else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\r\n return false;\r\n }\r\n break;\r\n case 1 /* inBrackets */:\r\n if (char === `'` || char === `\"` || char === '`') {\r\n stateStack.push(state);\r\n state = 3 /* inString */;\r\n currentStringType = char;\r\n }\r\n else if (char === `[`) {\r\n currentOpenBracketCount++;\r\n }\r\n else if (char === `]`) {\r\n if (!--currentOpenBracketCount) {\r\n state = stateStack.pop();\r\n }\r\n }\r\n break;\r\n case 2 /* inParens */:\r\n if (char === `'` || char === `\"` || char === '`') {\r\n stateStack.push(state);\r\n state = 3 /* inString */;\r\n currentStringType = char;\r\n }\r\n else if (char === `(`) {\r\n currentOpenParensCount++;\r\n }\r\n else if (char === `)`) {\r\n // if the exp ends as a call then it should not be considered valid\r\n if (i === path.length - 1) {\r\n return false;\r\n }\r\n if (!--currentOpenParensCount) {\r\n state = stateStack.pop();\r\n }\r\n }\r\n break;\r\n case 3 /* inString */:\r\n if (char === currentStringType) {\r\n state = stateStack.pop();\r\n currentStringType = null;\r\n }\r\n break;\r\n }\r\n }\r\n return !currentOpenBracketCount && !currentOpenParensCount;\r\n};\r\nconst isMemberExpressionNode = NOOP\r\n ;\r\nconst isMemberExpression = isMemberExpressionBrowser\r\n ;\r\nfunction getInnerRange(loc, offset, length) {\r\n const source = loc.source.substr(offset, length);\r\n const newLoc = {\r\n source,\r\n start: advancePositionWithClone(loc.start, loc.source, offset),\r\n end: loc.end\r\n };\r\n if (length != null) {\r\n newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);\r\n }\r\n return newLoc;\r\n}\r\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\r\n return advancePositionWithMutation(extend({}, pos), source, numberOfCharacters);\r\n}\r\n// advance by mutation without cloning (for performance reasons), since this\r\n// gets called a lot in the parser\r\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\r\n let linesCount = 0;\r\n let lastNewLinePos = -1;\r\n for (let i = 0; i < numberOfCharacters; i++) {\r\n if (source.charCodeAt(i) === 10 /* newline char code */) {\r\n linesCount++;\r\n lastNewLinePos = i;\r\n }\r\n }\r\n pos.offset += numberOfCharacters;\r\n pos.line += linesCount;\r\n pos.column =\r\n lastNewLinePos === -1\r\n ? pos.column + numberOfCharacters\r\n : numberOfCharacters - lastNewLinePos;\r\n return pos;\r\n}\r\nfunction assert(condition, msg) {\r\n /* istanbul ignore if */\r\n if (!condition) {\r\n throw new Error(msg || `unexpected compiler condition`);\r\n }\r\n}\r\nfunction findDir(node, name, allowEmpty = false) {\r\n for (let i = 0; i < node.props.length; i++) {\r\n const p = node.props[i];\r\n if (p.type === 7 /* DIRECTIVE */ &&\r\n (allowEmpty || p.exp) &&\r\n (isString(name) ? p.name === name : name.test(p.name))) {\r\n return p;\r\n }\r\n }\r\n}\r\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\r\n for (let i = 0; i < node.props.length; i++) {\r\n const p = node.props[i];\r\n if (p.type === 6 /* ATTRIBUTE */) {\r\n if (dynamicOnly)\r\n continue;\r\n if (p.name === name && (p.value || allowEmpty)) {\r\n return p;\r\n }\r\n }\r\n else if (p.name === 'bind' &&\r\n (p.exp || allowEmpty) &&\r\n isBindKey(p.arg, name)) {\r\n return p;\r\n }\r\n }\r\n}\r\nfunction isBindKey(arg, name) {\r\n return !!(arg && isStaticExp(arg) && arg.content === name);\r\n}\r\nfunction hasDynamicKeyVBind(node) {\r\n return node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n p.name === 'bind' &&\r\n (!p.arg || // v-bind=\"obj\"\r\n p.arg.type !== 4 /* SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]\r\n !p.arg.isStatic) // v-bind:[foo]\r\n );\r\n}\r\nfunction isText(node) {\r\n return node.type === 5 /* INTERPOLATION */ || node.type === 2 /* TEXT */;\r\n}\r\nfunction isVSlot(p) {\r\n return p.type === 7 /* DIRECTIVE */ && p.name === 'slot';\r\n}\r\nfunction isTemplateNode(node) {\r\n return (node.type === 1 /* ELEMENT */ && node.tagType === 3 /* TEMPLATE */);\r\n}\r\nfunction isSlotOutlet(node) {\r\n return node.type === 1 /* ELEMENT */ && node.tagType === 2 /* SLOT */;\r\n}\r\nfunction getVNodeHelper(ssr, isComponent) {\r\n return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\r\n}\r\nfunction getVNodeBlockHelper(ssr, isComponent) {\r\n return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\r\n}\r\nconst propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\r\nfunction getUnnormalizedProps(props, callPath = []) {\r\n if (props &&\r\n !isString(props) &&\r\n props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n const callee = props.callee;\r\n if (!isString(callee) && propsHelperSet.has(callee)) {\r\n return getUnnormalizedProps(props.arguments[0], callPath.concat(props));\r\n }\r\n }\r\n return [props, callPath];\r\n}\r\nfunction injectProp(node, prop, context) {\r\n let propsWithInjection;\r\n const originalProps = node.type === 13 /* VNODE_CALL */ ? node.props : node.arguments[2];\r\n /**\r\n * 1. mergeProps(...)\r\n * 2. toHandlers(...)\r\n * 3. normalizeProps(...)\r\n * 4. normalizeProps(guardReactiveProps(...))\r\n *\r\n * we need to get the real props before normalization\r\n */\r\n let props = originalProps;\r\n let callPath = [];\r\n let parentCall;\r\n if (props &&\r\n !isString(props) &&\r\n props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n const ret = getUnnormalizedProps(props);\r\n props = ret[0];\r\n callPath = ret[1];\r\n parentCall = callPath[callPath.length - 1];\r\n }\r\n if (props == null || isString(props)) {\r\n propsWithInjection = createObjectExpression([prop]);\r\n }\r\n else if (props.type === 14 /* JS_CALL_EXPRESSION */) {\r\n // merged props... add ours\r\n // only inject key to object literal if it's the first argument so that\r\n // if doesn't override user provided keys\r\n const first = props.arguments[0];\r\n if (!isString(first) && first.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n first.properties.unshift(prop);\r\n }\r\n else {\r\n if (props.callee === TO_HANDLERS) {\r\n // #2366\r\n propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n createObjectExpression([prop]),\r\n props\r\n ]);\r\n }\r\n else {\r\n props.arguments.unshift(createObjectExpression([prop]));\r\n }\r\n }\r\n !propsWithInjection && (propsWithInjection = props);\r\n }\r\n else if (props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n let alreadyExists = false;\r\n // check existing key to avoid overriding user provided keys\r\n if (prop.key.type === 4 /* SIMPLE_EXPRESSION */) {\r\n const propKeyName = prop.key.content;\r\n alreadyExists = props.properties.some(p => p.key.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n p.key.content === propKeyName);\r\n }\r\n if (!alreadyExists) {\r\n props.properties.unshift(prop);\r\n }\r\n propsWithInjection = props;\r\n }\r\n else {\r\n // single v-bind with expression, return a merged replacement\r\n propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\r\n createObjectExpression([prop]),\r\n props\r\n ]);\r\n // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,\r\n // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,\r\n // the `guardReactiveProps` will no longer be needed\r\n if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\r\n parentCall = callPath[callPath.length - 2];\r\n }\r\n }\r\n if (node.type === 13 /* VNODE_CALL */) {\r\n if (parentCall) {\r\n parentCall.arguments[0] = propsWithInjection;\r\n }\r\n else {\r\n node.props = propsWithInjection;\r\n }\r\n }\r\n else {\r\n if (parentCall) {\r\n parentCall.arguments[0] = propsWithInjection;\r\n }\r\n else {\r\n node.arguments[2] = propsWithInjection;\r\n }\r\n }\r\n}\r\nfunction toValidAssetId(name, type) {\r\n // see issue#4422, we need adding identifier on validAssetId if variable `name` has specific character\r\n return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\r\n return searchValue === '-' ? '_' : name.charCodeAt(replaceValue).toString();\r\n })}`;\r\n}\r\n// Check if a node contains expressions that reference current context scope ids\r\nfunction hasScopeRef(node, ids) {\r\n if (!node || Object.keys(ids).length === 0) {\r\n return false;\r\n }\r\n switch (node.type) {\r\n case 1 /* ELEMENT */:\r\n for (let i = 0; i < node.props.length; i++) {\r\n const p = node.props[i];\r\n if (p.type === 7 /* DIRECTIVE */ &&\r\n (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\r\n return true;\r\n }\r\n }\r\n return node.children.some(c => hasScopeRef(c, ids));\r\n case 11 /* FOR */:\r\n if (hasScopeRef(node.source, ids)) {\r\n return true;\r\n }\r\n return node.children.some(c => hasScopeRef(c, ids));\r\n case 9 /* IF */:\r\n return node.branches.some(b => hasScopeRef(b, ids));\r\n case 10 /* IF_BRANCH */:\r\n if (hasScopeRef(node.condition, ids)) {\r\n return true;\r\n }\r\n return node.children.some(c => hasScopeRef(c, ids));\r\n case 4 /* SIMPLE_EXPRESSION */:\r\n return (!node.isStatic &&\r\n isSimpleIdentifier(node.content) &&\r\n !!ids[node.content]);\r\n case 8 /* COMPOUND_EXPRESSION */:\r\n return node.children.some(c => isObject(c) && hasScopeRef(c, ids));\r\n case 5 /* INTERPOLATION */:\r\n case 12 /* TEXT_CALL */:\r\n return hasScopeRef(node.content, ids);\r\n case 2 /* TEXT */:\r\n case 3 /* COMMENT */:\r\n return false;\r\n default:\r\n if ((process.env.NODE_ENV !== 'production')) ;\r\n return false;\r\n }\r\n}\r\nfunction getMemoedVNodeCall(node) {\r\n if (node.type === 14 /* JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {\r\n return node.arguments[1].returns;\r\n }\r\n else {\r\n return node;\r\n }\r\n}\r\nfunction makeBlock(node, { helper, removeHelper, inSSR }) {\r\n if (!node.isBlock) {\r\n node.isBlock = true;\r\n removeHelper(getVNodeHelper(inSSR, node.isComponent));\r\n helper(OPEN_BLOCK);\r\n helper(getVNodeBlockHelper(inSSR, node.isComponent));\r\n }\r\n}\n\nconst deprecationData = {\r\n [\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */]: {\r\n message: `Platform-native elements with \"is\" prop will no longer be ` +\r\n `treated as components in Vue 3 unless the \"is\" value is explicitly ` +\r\n `prefixed with \"vue:\".`,\r\n link: `https://v3.vuejs.org/guide/migration/custom-elements-interop.html`\r\n },\r\n [\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */]: {\r\n message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +\r\n `argument instead. \\`v-bind:${key}.sync\\` should be changed to ` +\r\n `\\`v-model:${key}\\`.`,\r\n link: `https://v3.vuejs.org/guide/migration/v-model.html`\r\n },\r\n [\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */]: {\r\n message: `.prop modifier for v-bind has been removed and no longer necessary. ` +\r\n `Vue 3 will automatically set a binding as DOM property when appropriate.`\r\n },\r\n [\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */]: {\r\n message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript ` +\r\n `object spread: it will now overwrite an existing non-mergeable attribute ` +\r\n `that appears before v-bind in the case of conflict. ` +\r\n `To retain 2.x behavior, move v-bind to make it the first attribute. ` +\r\n `You can also suppress this warning if the usage is intended.`,\r\n link: `https://v3.vuejs.org/guide/migration/v-bind.html`\r\n },\r\n [\"COMPILER_V_ON_NATIVE\" /* COMPILER_V_ON_NATIVE */]: {\r\n message: `.native modifier for v-on has been removed as is no longer necessary.`,\r\n link: `https://v3.vuejs.org/guide/migration/v-on-native-modifier-removed.html`\r\n },\r\n [\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */]: {\r\n message: `v-if / v-for precedence when used on the same element has changed ` +\r\n `in Vue 3: v-if now takes higher precedence and will no longer have ` +\r\n `access to v-for scope variables. It is best to avoid the ambiguity ` +\r\n `with <template> tags or use a computed property that filters v-for ` +\r\n `data source.`,\r\n link: `https://v3.vuejs.org/guide/migration/v-if-v-for.html`\r\n },\r\n [\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */]: {\r\n message: `Ref usage on v-for no longer creates array ref values in Vue 3. ` +\r\n `Consider using function refs or refactor to avoid ref usage altogether.`,\r\n link: `https://v3.vuejs.org/guide/migration/array-refs.html`\r\n },\r\n [\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */]: {\r\n message: `<template> with no special directives will render as a native template ` +\r\n `element instead of its inner content in Vue 3.`\r\n },\r\n [\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */]: {\r\n message: `\"inline-template\" has been removed in Vue 3.`,\r\n link: `https://v3.vuejs.org/guide/migration/inline-template-attribute.html`\r\n },\r\n [\"COMPILER_FILTER\" /* COMPILER_FILTERS */]: {\r\n message: `filters have been removed in Vue 3. ` +\r\n `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\r\n `Use method calls or computed properties instead.`,\r\n link: `https://v3.vuejs.org/guide/migration/filters.html`\r\n }\r\n};\r\nfunction getCompatValue(key, context) {\r\n const config = context.options\r\n ? context.options.compatConfig\r\n : context.compatConfig;\r\n const value = config && config[key];\r\n if (key === 'MODE') {\r\n return value || 3; // compiler defaults to v3 behavior\r\n }\r\n else {\r\n return value;\r\n }\r\n}\r\nfunction isCompatEnabled(key, context) {\r\n const mode = getCompatValue('MODE', context);\r\n const value = getCompatValue(key, context);\r\n // in v3 mode, only enable if explicitly set to true\r\n // otherwise enable for any non-false value\r\n return mode === 3 ? value === true : value !== false;\r\n}\r\nfunction checkCompatEnabled(key, context, loc, ...args) {\r\n const enabled = isCompatEnabled(key, context);\r\n if ((process.env.NODE_ENV !== 'production') && enabled) {\r\n warnDeprecation(key, context, loc, ...args);\r\n }\r\n return enabled;\r\n}\r\nfunction warnDeprecation(key, context, loc, ...args) {\r\n const val = getCompatValue(key, context);\r\n if (val === 'suppress-warning') {\r\n return;\r\n }\r\n const { message, link } = deprecationData[key];\r\n const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n Details: ${link}` : ``}`;\r\n const err = new SyntaxError(msg);\r\n err.code = key;\r\n if (loc)\r\n err.loc = loc;\r\n context.onWarn(err);\r\n}\n\n// The default decoder only provides escapes for characters reserved as part of\r\n// the template syntax, and is only used if the custom renderer did not provide\r\n// a platform-specific decoder.\r\nconst decodeRE = /&(gt|lt|amp|apos|quot);/g;\r\nconst decodeMap = {\r\n gt: '>',\r\n lt: '<',\r\n amp: '&',\r\n apos: \"'\",\r\n quot: '\"'\r\n};\r\nconst defaultParserOptions = {\r\n delimiters: [`{{`, `}}`],\r\n getNamespace: () => 0 /* HTML */,\r\n getTextMode: () => 0 /* DATA */,\r\n isVoidTag: NO,\r\n isPreTag: NO,\r\n isCustomElement: NO,\r\n decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),\r\n onError: defaultOnError,\r\n onWarn: defaultOnWarn,\r\n comments: (process.env.NODE_ENV !== 'production')\r\n};\r\nfunction baseParse(content, options = {}) {\r\n const context = createParserContext(content, options);\r\n const start = getCursor(context);\r\n return createRoot(parseChildren(context, 0 /* DATA */, []), getSelection(context, start));\r\n}\r\nfunction createParserContext(content, rawOptions) {\r\n const options = extend({}, defaultParserOptions);\r\n let key;\r\n for (key in rawOptions) {\r\n // @ts-ignore\r\n options[key] =\r\n rawOptions[key] === undefined\r\n ? defaultParserOptions[key]\r\n : rawOptions[key];\r\n }\r\n return {\r\n options,\r\n column: 1,\r\n line: 1,\r\n offset: 0,\r\n originalSource: content,\r\n source: content,\r\n inPre: false,\r\n inVPre: false,\r\n onWarn: options.onWarn\r\n };\r\n}\r\nfunction parseChildren(context, mode, ancestors) {\r\n const parent = last(ancestors);\r\n const ns = parent ? parent.ns : 0 /* HTML */;\r\n const nodes = [];\r\n while (!isEnd(context, mode, ancestors)) {\r\n const s = context.source;\r\n let node = undefined;\r\n if (mode === 0 /* DATA */ || mode === 1 /* RCDATA */) {\r\n if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {\r\n // '{{'\r\n node = parseInterpolation(context, mode);\r\n }\r\n else if (mode === 0 /* DATA */ && s[0] === '<') {\r\n // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state\r\n if (s.length === 1) {\r\n emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 1);\r\n }\r\n else if (s[1] === '!') {\r\n // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\r\n if (startsWith(s, '<!--')) {\r\n node = parseComment(context);\r\n }\r\n else if (startsWith(s, '<!DOCTYPE')) {\r\n // Ignore DOCTYPE by a limitation.\r\n node = parseBogusComment(context);\r\n }\r\n else if (startsWith(s, '<![CDATA[')) {\r\n if (ns !== 0 /* HTML */) {\r\n node = parseCDATA(context, ancestors);\r\n }\r\n else {\r\n emitError(context, 1 /* CDATA_IN_HTML_CONTENT */);\r\n node = parseBogusComment(context);\r\n }\r\n }\r\n else {\r\n emitError(context, 11 /* INCORRECTLY_OPENED_COMMENT */);\r\n node = parseBogusComment(context);\r\n }\r\n }\r\n else if (s[1] === '/') {\r\n // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state\r\n if (s.length === 2) {\r\n emitError(context, 5 /* EOF_BEFORE_TAG_NAME */, 2);\r\n }\r\n else if (s[2] === '>') {\r\n emitError(context, 14 /* MISSING_END_TAG_NAME */, 2);\r\n advanceBy(context, 3);\r\n continue;\r\n }\r\n else if (/[a-z]/i.test(s[2])) {\r\n emitError(context, 23 /* X_INVALID_END_TAG */);\r\n parseTag(context, 1 /* End */, parent);\r\n continue;\r\n }\r\n else {\r\n emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);\r\n node = parseBogusComment(context);\r\n }\r\n }\r\n else if (/[a-z]/i.test(s[1])) {\r\n node = parseElement(context, ancestors);\r\n // 2.x <template> with no directive compat\r\n if (isCompatEnabled(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context) &&\r\n node &&\r\n node.tag === 'template' &&\r\n !node.props.some(p => p.type === 7 /* DIRECTIVE */ &&\r\n isSpecialTemplateDirective(p.name))) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warnDeprecation(\"COMPILER_NATIVE_TEMPLATE\" /* COMPILER_NATIVE_TEMPLATE */, context, node.loc);\r\n node = node.children;\r\n }\r\n }\r\n else if (s[1] === '?') {\r\n emitError(context, 21 /* UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);\r\n node = parseBogusComment(context);\r\n }\r\n else {\r\n emitError(context, 12 /* INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);\r\n }\r\n }\r\n }\r\n if (!node) {\r\n node = parseText(context, mode);\r\n }\r\n if (isArray(node)) {\r\n for (let i = 0; i < node.length; i++) {\r\n pushNode(nodes, node[i]);\r\n }\r\n }\r\n else {\r\n pushNode(nodes, node);\r\n }\r\n }\r\n // Whitespace handling strategy like v2\r\n let removedWhitespace = false;\r\n if (mode !== 2 /* RAWTEXT */ && mode !== 1 /* RCDATA */) {\r\n const shouldCondense = context.options.whitespace !== 'preserve';\r\n for (let i = 0; i < nodes.length; i++) {\r\n const node = nodes[i];\r\n if (!context.inPre && node.type === 2 /* TEXT */) {\r\n if (!/[^\\t\\r\\n\\f ]/.test(node.content)) {\r\n const prev = nodes[i - 1];\r\n const next = nodes[i + 1];\r\n // Remove if:\r\n // - the whitespace is the first or last node, or:\r\n // - (condense mode) the whitespace is adjacent to a comment, or:\r\n // - (condense mode) the whitespace is between two elements AND contains newline\r\n if (!prev ||\r\n !next ||\r\n (shouldCondense &&\r\n (prev.type === 3 /* COMMENT */ ||\r\n next.type === 3 /* COMMENT */ ||\r\n (prev.type === 1 /* ELEMENT */ &&\r\n next.type === 1 /* ELEMENT */ &&\r\n /[\\r\\n]/.test(node.content))))) {\r\n removedWhitespace = true;\r\n nodes[i] = null;\r\n }\r\n else {\r\n // Otherwise, the whitespace is condensed into a single space\r\n node.content = ' ';\r\n }\r\n }\r\n else if (shouldCondense) {\r\n // in condense mode, consecutive whitespaces in text are condensed\r\n // down to a single space.\r\n node.content = node.content.replace(/[\\t\\r\\n\\f ]+/g, ' ');\r\n }\r\n }\r\n // Remove comment nodes if desired by configuration.\r\n else if (node.type === 3 /* COMMENT */ && !context.options.comments) {\r\n removedWhitespace = true;\r\n nodes[i] = null;\r\n }\r\n }\r\n if (context.inPre && parent && context.options.isPreTag(parent.tag)) {\r\n // remove leading newline per html spec\r\n // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\r\n const first = nodes[0];\r\n if (first && first.type === 2 /* TEXT */) {\r\n first.content = first.content.replace(/^\\r?\\n/, '');\r\n }\r\n }\r\n }\r\n return removedWhitespace ? nodes.filter(Boolean) : nodes;\r\n}\r\nfunction pushNode(nodes, node) {\r\n if (node.type === 2 /* TEXT */) {\r\n const prev = last(nodes);\r\n // Merge if both this and the previous node are text and those are\r\n // consecutive. This happens for cases like \"a < b\".\r\n if (prev &&\r\n prev.type === 2 /* TEXT */ &&\r\n prev.loc.end.offset === node.loc.start.offset) {\r\n prev.content += node.content;\r\n prev.loc.end = node.loc.end;\r\n prev.loc.source += node.loc.source;\r\n return;\r\n }\r\n }\r\n nodes.push(node);\r\n}\r\nfunction parseCDATA(context, ancestors) {\r\n advanceBy(context, 9);\r\n const nodes = parseChildren(context, 3 /* CDATA */, ancestors);\r\n if (context.source.length === 0) {\r\n emitError(context, 6 /* EOF_IN_CDATA */);\r\n }\r\n else {\r\n advanceBy(context, 3);\r\n }\r\n return nodes;\r\n}\r\nfunction parseComment(context) {\r\n const start = getCursor(context);\r\n let content;\r\n // Regular comment.\r\n const match = /--(\\!)?>/.exec(context.source);\r\n if (!match) {\r\n content = context.source.slice(4);\r\n advanceBy(context, context.source.length);\r\n emitError(context, 7 /* EOF_IN_COMMENT */);\r\n }\r\n else {\r\n if (match.index <= 3) {\r\n emitError(context, 0 /* ABRUPT_CLOSING_OF_EMPTY_COMMENT */);\r\n }\r\n if (match[1]) {\r\n emitError(context, 10 /* INCORRECTLY_CLOSED_COMMENT */);\r\n }\r\n content = context.source.slice(4, match.index);\r\n // Advancing with reporting nested comments.\r\n const s = context.source.slice(0, match.index);\r\n let prevIndex = 1, nestedIndex = 0;\r\n while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {\r\n advanceBy(context, nestedIndex - prevIndex + 1);\r\n if (nestedIndex + 4 < s.length) {\r\n emitError(context, 16 /* NESTED_COMMENT */);\r\n }\r\n prevIndex = nestedIndex + 1;\r\n }\r\n advanceBy(context, match.index + match[0].length - prevIndex + 1);\r\n }\r\n return {\r\n type: 3 /* COMMENT */,\r\n content,\r\n loc: getSelection(context, start)\r\n };\r\n}\r\nfunction parseBogusComment(context) {\r\n const start = getCursor(context);\r\n const contentStart = context.source[1] === '?' ? 1 : 2;\r\n let content;\r\n const closeIndex = context.source.indexOf('>');\r\n if (closeIndex === -1) {\r\n content = context.source.slice(contentStart);\r\n advanceBy(context, context.source.length);\r\n }\r\n else {\r\n content = context.source.slice(contentStart, closeIndex);\r\n advanceBy(context, closeIndex + 1);\r\n }\r\n return {\r\n type: 3 /* COMMENT */,\r\n content,\r\n loc: getSelection(context, start)\r\n };\r\n}\r\nfunction parseElement(context, ancestors) {\r\n // Start tag.\r\n const wasInPre = context.inPre;\r\n const wasInVPre = context.inVPre;\r\n const parent = last(ancestors);\r\n const element = parseTag(context, 0 /* Start */, parent);\r\n const isPreBoundary = context.inPre && !wasInPre;\r\n const isVPreBoundary = context.inVPre && !wasInVPre;\r\n if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {\r\n // #4030 self-closing <pre> tag\r\n if (isPreBoundary) {\r\n context.inPre = false;\r\n }\r\n if (isVPreBoundary) {\r\n context.inVPre = false;\r\n }\r\n return element;\r\n }\r\n // Children.\r\n ancestors.push(element);\r\n const mode = context.options.getTextMode(element, parent);\r\n const children = parseChildren(context, mode, ancestors);\r\n ancestors.pop();\r\n // 2.x inline-template compat\r\n {\r\n const inlineTemplateProp = element.props.find(p => p.type === 6 /* ATTRIBUTE */ && p.name === 'inline-template');\r\n if (inlineTemplateProp &&\r\n checkCompatEnabled(\"COMPILER_INLINE_TEMPLATE\" /* COMPILER_INLINE_TEMPLATE */, context, inlineTemplateProp.loc)) {\r\n const loc = getSelection(context, element.loc.end);\r\n inlineTemplateProp.value = {\r\n type: 2 /* TEXT */,\r\n content: loc.source,\r\n loc\r\n };\r\n }\r\n }\r\n element.children = children;\r\n // End tag.\r\n if (startsWithEndTagOpen(context.source, element.tag)) {\r\n parseTag(context, 1 /* End */, parent);\r\n }\r\n else {\r\n emitError(context, 24 /* X_MISSING_END_TAG */, 0, element.loc.start);\r\n if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {\r\n const first = children[0];\r\n if (first && startsWith(first.loc.source, '<!--')) {\r\n emitError(context, 8 /* EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);\r\n }\r\n }\r\n }\r\n element.loc = getSelection(context, element.loc.start);\r\n if (isPreBoundary) {\r\n context.inPre = false;\r\n }\r\n if (isVPreBoundary) {\r\n context.inVPre = false;\r\n }\r\n return element;\r\n}\r\nconst isSpecialTemplateDirective = /*#__PURE__*/ makeMap(`if,else,else-if,for,slot`);\r\nfunction parseTag(context, type, parent) {\r\n // Tag open.\r\n const start = getCursor(context);\r\n const match = /^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(context.source);\r\n const tag = match[1];\r\n const ns = context.options.getNamespace(tag, parent);\r\n advanceBy(context, match[0].length);\r\n advanceSpaces(context);\r\n // save current state in case we need to re-parse attributes with v-pre\r\n const cursor = getCursor(context);\r\n const currentSource = context.source;\r\n // check <pre> tag\r\n if (context.options.isPreTag(tag)) {\r\n context.inPre = true;\r\n }\r\n // Attributes.\r\n let props = parseAttributes(context, type);\r\n // check v-pre\r\n if (type === 0 /* Start */ &&\r\n !context.inVPre &&\r\n props.some(p => p.type === 7 /* DIRECTIVE */ && p.name === 'pre')) {\r\n context.inVPre = true;\r\n // reset context\r\n extend(context, cursor);\r\n context.source = currentSource;\r\n // re-parse attrs and filter out v-pre itself\r\n props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');\r\n }\r\n // Tag close.\r\n let isSelfClosing = false;\r\n if (context.source.length === 0) {\r\n emitError(context, 9 /* EOF_IN_TAG */);\r\n }\r\n else {\r\n isSelfClosing = startsWith(context.source, '/>');\r\n if (type === 1 /* End */ && isSelfClosing) {\r\n emitError(context, 4 /* END_TAG_WITH_TRAILING_SOLIDUS */);\r\n }\r\n advanceBy(context, isSelfClosing ? 2 : 1);\r\n }\r\n if (type === 1 /* End */) {\r\n return;\r\n }\r\n // 2.x deprecation checks\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n isCompatEnabled(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context)) {\r\n let hasIf = false;\r\n let hasFor = false;\r\n for (let i = 0; i < props.length; i++) {\r\n const p = props[i];\r\n if (p.type === 7 /* DIRECTIVE */) {\r\n if (p.name === 'if') {\r\n hasIf = true;\r\n }\r\n else if (p.name === 'for') {\r\n hasFor = true;\r\n }\r\n }\r\n if (hasIf && hasFor) {\r\n warnDeprecation(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* COMPILER_V_IF_V_FOR_PRECEDENCE */, context, getSelection(context, start));\r\n }\r\n }\r\n }\r\n let tagType = 0 /* ELEMENT */;\r\n if (!context.inVPre) {\r\n if (tag === 'slot') {\r\n tagType = 2 /* SLOT */;\r\n }\r\n else if (tag === 'template') {\r\n if (props.some(p => p.type === 7 /* DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {\r\n tagType = 3 /* TEMPLATE */;\r\n }\r\n }\r\n else if (isComponent(tag, props, context)) {\r\n tagType = 1 /* COMPONENT */;\r\n }\r\n }\r\n return {\r\n type: 1 /* ELEMENT */,\r\n ns,\r\n tag,\r\n tagType,\r\n props,\r\n isSelfClosing,\r\n children: [],\r\n loc: getSelection(context, start),\r\n codegenNode: undefined // to be created during transform phase\r\n };\r\n}\r\nfunction isComponent(tag, props, context) {\r\n const options = context.options;\r\n if (options.isCustomElement(tag)) {\r\n return false;\r\n }\r\n if (tag === 'component' ||\r\n /^[A-Z]/.test(tag) ||\r\n isCoreComponent(tag) ||\r\n (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||\r\n (options.isNativeTag && !options.isNativeTag(tag))) {\r\n return true;\r\n }\r\n // at this point the tag should be a native tag, but check for potential \"is\"\r\n // casting\r\n for (let i = 0; i < props.length; i++) {\r\n const p = props[i];\r\n if (p.type === 6 /* ATTRIBUTE */) {\r\n if (p.name === 'is' && p.value) {\r\n if (p.value.content.startsWith('vue:')) {\r\n return true;\r\n }\r\n else if (checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n return true;\r\n }\r\n }\r\n }\r\n else {\r\n // directive\r\n // v-is (TODO Deprecate)\r\n if (p.name === 'is') {\r\n return true;\r\n }\r\n else if (\r\n // :is on plain element - only treat as component in compat mode\r\n p.name === 'bind' &&\r\n isBindKey(p.arg, 'is') &&\r\n true &&\r\n checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\r\n return true;\r\n }\r\n }\r\n }\r\n}\r\nfunction parseAttributes(context, type) {\r\n const props = [];\r\n const attributeNames = new Set();\r\n while (context.source.length > 0 &&\r\n !startsWith(context.source, '>') &&\r\n !startsWith(context.source, '/>')) {\r\n if (startsWith(context.source, '/')) {\r\n emitError(context, 22 /* UNEXPECTED_SOLIDUS_IN_TAG */);\r\n advanceBy(context, 1);\r\n advanceSpaces(context);\r\n continue;\r\n }\r\n if (type === 1 /* End */) {\r\n emitError(context, 3 /* END_TAG_WITH_ATTRIBUTES */);\r\n }\r\n const attr = parseAttribute(context, attributeNames);\r\n // Trim whitespace between class\r\n // https://github.com/vuejs/vue-next/issues/4251\r\n if (attr.type === 6 /* ATTRIBUTE */ &&\r\n attr.value &&\r\n attr.name === 'class') {\r\n attr.value.content = attr.value.content.replace(/\\s+/g, ' ').trim();\r\n }\r\n if (type === 0 /* Start */) {\r\n props.push(attr);\r\n }\r\n if (/^[^\\t\\r\\n\\f />]/.test(context.source)) {\r\n emitError(context, 15 /* MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);\r\n }\r\n advanceSpaces(context);\r\n }\r\n return props;\r\n}\r\nfunction parseAttribute(context, nameSet) {\r\n // Name.\r\n const start = getCursor(context);\r\n const match = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(context.source);\r\n const name = match[0];\r\n if (nameSet.has(name)) {\r\n emitError(context, 2 /* DUPLICATE_ATTRIBUTE */);\r\n }\r\n nameSet.add(name);\r\n if (name[0] === '=') {\r\n emitError(context, 19 /* UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);\r\n }\r\n {\r\n const pattern = /[\"'<]/g;\r\n let m;\r\n while ((m = pattern.exec(name))) {\r\n emitError(context, 17 /* UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);\r\n }\r\n }\r\n advanceBy(context, name.length);\r\n // Value\r\n let value = undefined;\r\n if (/^[\\t\\r\\n\\f ]*=/.test(context.source)) {\r\n advanceSpaces(context);\r\n advanceBy(context, 1);\r\n advanceSpaces(context);\r\n value = parseAttributeValue(context);\r\n if (!value) {\r\n emitError(context, 13 /* MISSING_ATTRIBUTE_VALUE */);\r\n }\r\n }\r\n const loc = getSelection(context, start);\r\n if (!context.inVPre && /^(v-[A-Za-z0-9-]|:|\\.|@|#)/.test(name)) {\r\n const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(name);\r\n let isPropShorthand = startsWith(name, '.');\r\n let dirName = match[1] ||\r\n (isPropShorthand || startsWith(name, ':')\r\n ? 'bind'\r\n : startsWith(name, '@')\r\n ? 'on'\r\n : 'slot');\r\n let arg;\r\n if (match[2]) {\r\n const isSlot = dirName === 'slot';\r\n const startOffset = name.lastIndexOf(match[2]);\r\n const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));\r\n let content = match[2];\r\n let isStatic = true;\r\n if (content.startsWith('[')) {\r\n isStatic = false;\r\n if (!content.endsWith(']')) {\r\n emitError(context, 27 /* X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);\r\n content = content.substr(1);\r\n }\r\n else {\r\n content = content.substr(1, content.length - 2);\r\n }\r\n }\r\n else if (isSlot) {\r\n // #1241 special case for v-slot: vuetify relies extensively on slot\r\n // names containing dots. v-slot doesn't have any modifiers and Vue 2.x\r\n // supports such usage so we are keeping it consistent with 2.x.\r\n content += match[3] || '';\r\n }\r\n arg = {\r\n type: 4 /* SIMPLE_EXPRESSION */,\r\n content,\r\n isStatic,\r\n constType: isStatic\r\n ? 3 /* CAN_STRINGIFY */\r\n : 0 /* NOT_CONSTANT */,\r\n loc\r\n };\r\n }\r\n if (value && value.isQuoted) {\r\n const valueLoc = value.loc;\r\n valueLoc.start.offset++;\r\n valueLoc.start.column++;\r\n valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);\r\n valueLoc.source = valueLoc.source.slice(1, -1);\r\n }\r\n const modifiers = match[3] ? match[3].substr(1).split('.') : [];\r\n if (isPropShorthand)\r\n modifiers.push('prop');\r\n // 2.x compat v-bind:foo.sync -> v-model:foo\r\n if (dirName === 'bind' && arg) {\r\n if (modifiers.includes('sync') &&\r\n checkCompatEnabled(\"COMPILER_V_BIND_SYNC\" /* COMPILER_V_BIND_SYNC */, context, loc, arg.loc.source)) {\r\n dirName = 'model';\r\n modifiers.splice(modifiers.indexOf('sync'), 1);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && modifiers.includes('prop')) {\r\n checkCompatEnabled(\"COMPILER_V_BIND_PROP\" /* COMPILER_V_BIND_PROP */, context, loc);\r\n }\r\n }\r\n return {\r\n type: 7 /* DIRECTIVE */,\r\n name: dirName,\r\n exp: value && {\r\n type: 4 /* SIMPLE_EXPRESSION */,\r\n content: value.content,\r\n isStatic: false,\r\n // Treat as non-constant by default. This can be potentially set to\r\n // other values by `transformExpression` to make it eligible for hoisting.\r\n constType: 0 /* NOT_CONSTANT */,\r\n loc: value.loc\r\n },\r\n arg,\r\n modifiers,\r\n loc\r\n };\r\n }\r\n // missing directive name or illegal directive name\r\n if (!context.inVPre && startsWith(name, 'v-')) {\r\n emitError(context, 26 /* X_MISSING_DIRECTIVE_NAME */);\r\n }\r\n return {\r\n type: 6 /* ATTRIBUTE */,\r\n name,\r\n value: value && {\r\n type: 2 /* TEXT */,\r\n content: value.content,\r\n loc: value.loc\r\n },\r\n loc\r\n };\r\n}\r\nfunction parseAttributeValue(context) {\r\n const start = getCursor(context);\r\n let content;\r\n const quote = context.source[0];\r\n const isQuoted = quote === `\"` || quote === `'`;\r\n if (isQuoted) {\r\n // Quoted value.\r\n advanceBy(context, 1);\r\n const endIndex = context.source.indexOf(quote);\r\n if (endIndex === -1) {\r\n content = parseTextData(context, context.source.length, 4 /* ATTRIBUTE_VALUE */);\r\n }\r\n else {\r\n content = parseTextData(context, endIndex, 4 /* ATTRIBUTE_VALUE */);\r\n advanceBy(context, 1);\r\n }\r\n }\r\n else {\r\n // Unquoted\r\n const match = /^[^\\t\\r\\n\\f >]+/.exec(context.source);\r\n if (!match) {\r\n return undefined;\r\n }\r\n const unexpectedChars = /[\"'<=`]/g;\r\n let m;\r\n while ((m = unexpectedChars.exec(match[0]))) {\r\n emitError(context, 18 /* UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);\r\n }\r\n content = parseTextData(context, match[0].length, 4 /* ATTRIBUTE_VALUE */);\r\n }\r\n return { content, isQuoted, loc: getSelection(context, start) };\r\n}\r\nfunction parseInterpolation(context, mode) {\r\n const [open, close] = context.options.delimiters;\r\n const closeIndex = context.source.indexOf(close, open.length);\r\n if (closeIndex === -1) {\r\n emitError(context, 25 /* X_MISSING_INTERPOLATION_END */);\r\n return undefined;\r\n }\r\n const start = getCursor(context);\r\n advanceBy(context, open.length);\r\n const innerStart = getCursor(context);\r\n const innerEnd = getCursor(context);\r\n const rawContentLength = closeIndex - open.length;\r\n const rawContent = context.source.slice(0, rawContentLength);\r\n const preTrimContent = parseTextData(context, rawContentLength, mode);\r\n const content = preTrimContent.trim();\r\n const startOffset = preTrimContent.indexOf(content);\r\n if (startOffset > 0) {\r\n advancePositionWithMutation(innerStart, rawContent, startOffset);\r\n }\r\n const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);\r\n advancePositionWithMutation(innerEnd, rawContent, endOffset);\r\n advanceBy(context, close.length);\r\n return {\r\n type: 5 /* INTERPOLATION */,\r\n content: {\r\n type: 4 /* SIMPLE_EXPRESSION */,\r\n isStatic: false,\r\n // Set `isConstant` to false by default and will decide in transformExpression\r\n constType: 0 /* NOT_CONSTANT */,\r\n content,\r\n loc: getSelection(context, innerStart, innerEnd)\r\n },\r\n loc: getSelection(context, start)\r\n };\r\n}\r\nfunction parseText(context, mode) {\r\n const endTokens = mode === 3 /* CDATA */ ? [']]>'] : ['<', context.options.delimiters[0]];\r\n let endIndex = context.source.length;\r\n for (let i = 0; i < endTokens.length; i++) {\r\n const index = context.source.indexOf(endTokens[i], 1);\r\n if (index !== -1 && endIndex > index) {\r\n endIndex = index;\r\n }\r\n }\r\n const start = getCursor(context);\r\n const content = parseTextData(context, endIndex, mode);\r\n return {\r\n type: 2 /* TEXT */,\r\n content,\r\n loc: getSelection(context, start)\r\n };\r\n}\r\n/**\r\n * Get text data with a given length from the current location.\r\n * This translates HTML entities in the text data.\r\n */\r\nfunction parseTextData(context, length, mode) {\r\n const rawText = context.source.slice(0, length);\r\n advanceBy(context, length);\r\n if (mode === 2 /* RAWTEXT */ ||\r\n mode === 3 /* CDATA */ ||\r\n rawText.indexOf('&') === -1) {\r\n return rawText;\r\n }\r\n else {\r\n // DATA or RCDATA containing \"&\"\". Entity decoding required.\r\n return context.options.decodeEntities(rawText, mode === 4 /* ATTRIBUTE_VALUE */);\r\n }\r\n}\r\nfunction getCursor(context) {\r\n const { column, line, offset } = context;\r\n return { column, line, offset };\r\n}\r\nfunction getSelection(context, start, end) {\r\n end = end || getCursor(context);\r\n return {\r\n start,\r\n end,\r\n source: context.originalSource.slice(start.offset, end.offset)\r\n };\r\n}\r\nfunction last(xs) {\r\n return xs[xs.length - 1];\r\n}\r\nfunction startsWith(source, searchString) {\r\n return source.startsWith(searchString);\r\n}\r\nfunction advanceBy(context, numberOfCharacters) {\r\n const { source } = context;\r\n advancePositionWithMutation(context, source, numberOfCharacters);\r\n context.source = source.slice(numberOfCharacters);\r\n}\r\nfunction advanceSpaces(context) {\r\n const match = /^[\\t\\r\\n\\f ]+/.exec(context.source);\r\n if (match) {\r\n advanceBy(context, match[0].length);\r\n }\r\n}\r\nfunction getNewPosition(context, start, numberOfCharacters) {\r\n return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);\r\n}\r\nfunction emitError(context, code, offset, loc = getCursor(context)) {\r\n if (offset) {\r\n loc.offset += offset;\r\n loc.column += offset;\r\n }\r\n context.options.onError(createCompilerError(code, {\r\n start: loc,\r\n end: loc,\r\n source: ''\r\n }));\r\n}\r\nfunction isEnd(context, mode, ancestors) {\r\n const s = context.source;\r\n switch (mode) {\r\n case 0 /* DATA */:\r\n if (startsWith(s, '</')) {\r\n // TODO: probably bad performance\r\n for (let i = ancestors.length - 1; i >= 0; --i) {\r\n if (startsWithEndTagOpen(s, ancestors[i].tag)) {\r\n return true;\r\n }\r\n }\r\n }\r\n break;\r\n case 1 /* RCDATA */:\r\n case 2 /* RAWTEXT */: {\r\n const parent = last(ancestors);\r\n if (parent && startsWithEndTagOpen(s, parent.tag)) {\r\n return true;\r\n }\r\n break;\r\n }\r\n case 3 /* CDATA */:\r\n if (startsWith(s, ']]>')) {\r\n return true;\r\n }\r\n break;\r\n }\r\n return !s;\r\n}\r\nfunction startsWithEndTagOpen(source, tag) {\r\n return (startsWith(source, '</') &&\r\n source.substr(2, tag.length).toLowerCase() === tag.toLowerCase() &&\r\n /[\\t\\r\\n\\f />]/.test(source[2 + tag.length] || '>'));\r\n}\n\nfunction hoistStatic(root, context) {\r\n walk(root, context, \r\n // Root node is unfortunately non-hoistable due to potential parent\r\n // fallthrough attributes.\r\n isSingleElementRoot(root, root.children[0]));\r\n}\r\nfunction isSingleElementRoot(root, child) {\r\n const { children } = root;\r\n return (children.length === 1 &&\r\n child.type === 1 /* ELEMENT */ &&\r\n !isSlotOutlet(child));\r\n}\r\nfunction walk(node, context, doNotHoistNode = false) {\r\n // Some transforms, e.g. transformAssetUrls from @vue/compiler-sfc, replaces\r\n // static bindings with expressions. These expressions are guaranteed to be\r\n // constant so they are still eligible for hoisting, but they are only\r\n // available at runtime and therefore cannot be evaluated ahead of time.\r\n // This is only a concern for pre-stringification (via transformHoist by\r\n // @vue/compiler-dom), but doing it here allows us to perform only one full\r\n // walk of the AST and allow `stringifyStatic` to stop walking as soon as its\r\n // stringification threshold is met.\r\n let canStringify = true;\r\n const { children } = node;\r\n const originalCount = children.length;\r\n let hoistedCount = 0;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n // only plain elements & text calls are eligible for hoisting.\r\n if (child.type === 1 /* ELEMENT */ &&\r\n child.tagType === 0 /* ELEMENT */) {\r\n const constantType = doNotHoistNode\r\n ? 0 /* NOT_CONSTANT */\r\n : getConstantType(child, context);\r\n if (constantType > 0 /* NOT_CONSTANT */) {\r\n if (constantType < 3 /* CAN_STRINGIFY */) {\r\n canStringify = false;\r\n }\r\n if (constantType >= 2 /* CAN_HOIST */) {\r\n child.codegenNode.patchFlag =\r\n -1 /* HOISTED */ + ((process.env.NODE_ENV !== 'production') ? ` /* HOISTED */` : ``);\r\n child.codegenNode = context.hoist(child.codegenNode);\r\n hoistedCount++;\r\n continue;\r\n }\r\n }\r\n else {\r\n // node may contain dynamic children, but its props may be eligible for\r\n // hoisting.\r\n const codegenNode = child.codegenNode;\r\n if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n const flag = getPatchFlag(codegenNode);\r\n if ((!flag ||\r\n flag === 512 /* NEED_PATCH */ ||\r\n flag === 1 /* TEXT */) &&\r\n getGeneratedPropsConstantType(child, context) >=\r\n 2 /* CAN_HOIST */) {\r\n const props = getNodeProps(child);\r\n if (props) {\r\n codegenNode.props = context.hoist(props);\r\n }\r\n }\r\n if (codegenNode.dynamicProps) {\r\n codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\r\n }\r\n }\r\n }\r\n }\r\n else if (child.type === 12 /* TEXT_CALL */) {\r\n const contentType = getConstantType(child.content, context);\r\n if (contentType > 0) {\r\n if (contentType < 3 /* CAN_STRINGIFY */) {\r\n canStringify = false;\r\n }\r\n if (contentType >= 2 /* CAN_HOIST */) {\r\n child.codegenNode = context.hoist(child.codegenNode);\r\n hoistedCount++;\r\n }\r\n }\r\n }\r\n // walk further\r\n if (child.type === 1 /* ELEMENT */) {\r\n const isComponent = child.tagType === 1 /* COMPONENT */;\r\n if (isComponent) {\r\n context.scopes.vSlot++;\r\n }\r\n walk(child, context);\r\n if (isComponent) {\r\n context.scopes.vSlot--;\r\n }\r\n }\r\n else if (child.type === 11 /* FOR */) {\r\n // Do not hoist v-for single child because it has to be a block\r\n walk(child, context, child.children.length === 1);\r\n }\r\n else if (child.type === 9 /* IF */) {\r\n for (let i = 0; i < child.branches.length; i++) {\r\n // Do not hoist v-if single child because it has to be a block\r\n walk(child.branches[i], context, child.branches[i].children.length === 1);\r\n }\r\n }\r\n }\r\n if (canStringify && hoistedCount && context.transformHoist) {\r\n context.transformHoist(children, context, node);\r\n }\r\n // all children were hoisted - the entire children array is hoistable.\r\n if (hoistedCount &&\r\n hoistedCount === originalCount &&\r\n node.type === 1 /* ELEMENT */ &&\r\n node.tagType === 0 /* ELEMENT */ &&\r\n node.codegenNode &&\r\n node.codegenNode.type === 13 /* VNODE_CALL */ &&\r\n isArray(node.codegenNode.children)) {\r\n node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));\r\n }\r\n}\r\nfunction getConstantType(node, context) {\r\n const { constantCache } = context;\r\n switch (node.type) {\r\n case 1 /* ELEMENT */:\r\n if (node.tagType !== 0 /* ELEMENT */) {\r\n return 0 /* NOT_CONSTANT */;\r\n }\r\n const cached = constantCache.get(node);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n const codegenNode = node.codegenNode;\r\n if (codegenNode.type !== 13 /* VNODE_CALL */) {\r\n return 0 /* NOT_CONSTANT */;\r\n }\r\n const flag = getPatchFlag(codegenNode);\r\n if (!flag) {\r\n let returnType = 3 /* CAN_STRINGIFY */;\r\n // Element itself has no patch flag. However we still need to check:\r\n // 1. Even for a node with no patch flag, it is possible for it to contain\r\n // non-hoistable expressions that refers to scope variables, e.g. compiler\r\n // injected keys or cached event handlers. Therefore we need to always\r\n // check the codegenNode's props to be sure.\r\n const generatedPropsType = getGeneratedPropsConstantType(node, context);\r\n if (generatedPropsType === 0 /* NOT_CONSTANT */) {\r\n constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n return 0 /* NOT_CONSTANT */;\r\n }\r\n if (generatedPropsType < returnType) {\r\n returnType = generatedPropsType;\r\n }\r\n // 2. its children.\r\n for (let i = 0; i < node.children.length; i++) {\r\n const childType = getConstantType(node.children[i], context);\r\n if (childType === 0 /* NOT_CONSTANT */) {\r\n constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n return 0 /* NOT_CONSTANT */;\r\n }\r\n if (childType < returnType) {\r\n returnType = childType;\r\n }\r\n }\r\n // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0\r\n // type, check if any of the props can cause the type to be lowered\r\n // we can skip can_patch because it's guaranteed by the absence of a\r\n // patchFlag.\r\n if (returnType > 1 /* CAN_SKIP_PATCH */) {\r\n for (let i = 0; i < node.props.length; i++) {\r\n const p = node.props[i];\r\n if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind' && p.exp) {\r\n const expType = getConstantType(p.exp, context);\r\n if (expType === 0 /* NOT_CONSTANT */) {\r\n constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n return 0 /* NOT_CONSTANT */;\r\n }\r\n if (expType < returnType) {\r\n returnType = expType;\r\n }\r\n }\r\n }\r\n }\r\n // only svg/foreignObject could be block here, however if they are\r\n // static then they don't need to be blocks since there will be no\r\n // nested updates.\r\n if (codegenNode.isBlock) {\r\n context.removeHelper(OPEN_BLOCK);\r\n context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));\r\n codegenNode.isBlock = false;\r\n context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\r\n }\r\n constantCache.set(node, returnType);\r\n return returnType;\r\n }\r\n else {\r\n constantCache.set(node, 0 /* NOT_CONSTANT */);\r\n return 0 /* NOT_CONSTANT */;\r\n }\r\n case 2 /* TEXT */:\r\n case 3 /* COMMENT */:\r\n return 3 /* CAN_STRINGIFY */;\r\n case 9 /* IF */:\r\n case 11 /* FOR */:\r\n case 10 /* IF_BRANCH */:\r\n return 0 /* NOT_CONSTANT */;\r\n case 5 /* INTERPOLATION */:\r\n case 12 /* TEXT_CALL */:\r\n return getConstantType(node.content, context);\r\n case 4 /* SIMPLE_EXPRESSION */:\r\n return node.constType;\r\n case 8 /* COMPOUND_EXPRESSION */:\r\n let returnType = 3 /* CAN_STRINGIFY */;\r\n for (let i = 0; i < node.children.length; i++) {\r\n const child = node.children[i];\r\n if (isString(child) || isSymbol(child)) {\r\n continue;\r\n }\r\n const childType = getConstantType(child, context);\r\n if (childType === 0 /* NOT_CONSTANT */) {\r\n return 0 /* NOT_CONSTANT */;\r\n }\r\n else if (childType < returnType) {\r\n returnType = childType;\r\n }\r\n }\r\n return returnType;\r\n default:\r\n if ((process.env.NODE_ENV !== 'production')) ;\r\n return 0 /* NOT_CONSTANT */;\r\n }\r\n}\r\nconst allowHoistedHelperSet = new Set([\r\n NORMALIZE_CLASS,\r\n NORMALIZE_STYLE,\r\n NORMALIZE_PROPS,\r\n GUARD_REACTIVE_PROPS\r\n]);\r\nfunction getConstantTypeOfHelperCall(value, context) {\r\n if (value.type === 14 /* JS_CALL_EXPRESSION */ &&\r\n !isString(value.callee) &&\r\n allowHoistedHelperSet.has(value.callee)) {\r\n const arg = value.arguments[0];\r\n if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n return getConstantType(arg, context);\r\n }\r\n else if (arg.type === 14 /* JS_CALL_EXPRESSION */) {\r\n // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`\r\n return getConstantTypeOfHelperCall(arg, context);\r\n }\r\n }\r\n return 0 /* NOT_CONSTANT */;\r\n}\r\nfunction getGeneratedPropsConstantType(node, context) {\r\n let returnType = 3 /* CAN_STRINGIFY */;\r\n const props = getNodeProps(node);\r\n if (props && props.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n const { properties } = props;\r\n for (let i = 0; i < properties.length; i++) {\r\n const { key, value } = properties[i];\r\n const keyType = getConstantType(key, context);\r\n if (keyType === 0 /* NOT_CONSTANT */) {\r\n return keyType;\r\n }\r\n if (keyType < returnType) {\r\n returnType = keyType;\r\n }\r\n let valueType;\r\n if (value.type === 4 /* SIMPLE_EXPRESSION */) {\r\n valueType = getConstantType(value, context);\r\n }\r\n else if (value.type === 14 /* JS_CALL_EXPRESSION */) {\r\n // some helper calls can be hoisted,\r\n // such as the `normalizeProps` generated by the compiler for pre-normalize class,\r\n // in this case we need to respect the ConstantType of the helper's argments\r\n valueType = getConstantTypeOfHelperCall(value, context);\r\n }\r\n else {\r\n valueType = 0 /* NOT_CONSTANT */;\r\n }\r\n if (valueType === 0 /* NOT_CONSTANT */) {\r\n return valueType;\r\n }\r\n if (valueType < returnType) {\r\n returnType = valueType;\r\n }\r\n }\r\n }\r\n return returnType;\r\n}\r\nfunction getNodeProps(node) {\r\n const codegenNode = node.codegenNode;\r\n if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n return codegenNode.props;\r\n }\r\n}\r\nfunction getPatchFlag(node) {\r\n const flag = node.patchFlag;\r\n return flag ? parseInt(flag, 10) : undefined;\r\n}\n\nfunction createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = NOOP, isCustomElement = NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {\r\n const nameMatch = filename.replace(/\\?.*$/, '').match(/([^/\\\\]+)\\.\\w+$/);\r\n const context = {\r\n // options\r\n selfName: nameMatch && capitalize(camelize$1(nameMatch[1])),\r\n prefixIdentifiers,\r\n hoistStatic,\r\n cacheHandlers,\r\n nodeTransforms,\r\n directiveTransforms,\r\n transformHoist,\r\n isBuiltInComponent,\r\n isCustomElement,\r\n expressionPlugins,\r\n scopeId,\r\n slotted,\r\n ssr,\r\n inSSR,\r\n ssrCssVars,\r\n bindingMetadata,\r\n inline,\r\n isTS,\r\n onError,\r\n onWarn,\r\n compatConfig,\r\n // state\r\n root,\r\n helpers: new Map(),\r\n components: new Set(),\r\n directives: new Set(),\r\n hoists: [],\r\n imports: [],\r\n constantCache: new Map(),\r\n temps: 0,\r\n cached: 0,\r\n identifiers: Object.create(null),\r\n scopes: {\r\n vFor: 0,\r\n vSlot: 0,\r\n vPre: 0,\r\n vOnce: 0\r\n },\r\n parent: null,\r\n currentNode: root,\r\n childIndex: 0,\r\n inVOnce: false,\r\n // methods\r\n helper(name) {\r\n const count = context.helpers.get(name) || 0;\r\n context.helpers.set(name, count + 1);\r\n return name;\r\n },\r\n removeHelper(name) {\r\n const count = context.helpers.get(name);\r\n if (count) {\r\n const currentCount = count - 1;\r\n if (!currentCount) {\r\n context.helpers.delete(name);\r\n }\r\n else {\r\n context.helpers.set(name, currentCount);\r\n }\r\n }\r\n },\r\n helperString(name) {\r\n return `_${helperNameMap[context.helper(name)]}`;\r\n },\r\n replaceNode(node) {\r\n /* istanbul ignore if */\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (!context.currentNode) {\r\n throw new Error(`Node being replaced is already removed.`);\r\n }\r\n if (!context.parent) {\r\n throw new Error(`Cannot replace root node.`);\r\n }\r\n }\r\n context.parent.children[context.childIndex] = context.currentNode = node;\r\n },\r\n removeNode(node) {\r\n if ((process.env.NODE_ENV !== 'production') && !context.parent) {\r\n throw new Error(`Cannot remove root node.`);\r\n }\r\n const list = context.parent.children;\r\n const removalIndex = node\r\n ? list.indexOf(node)\r\n : context.currentNode\r\n ? context.childIndex\r\n : -1;\r\n /* istanbul ignore if */\r\n if ((process.env.NODE_ENV !== 'production') && removalIndex < 0) {\r\n throw new Error(`node being removed is not a child of current parent`);\r\n }\r\n if (!node || node === context.currentNode) {\r\n // current node removed\r\n context.currentNode = null;\r\n context.onNodeRemoved();\r\n }\r\n else {\r\n // sibling node removed\r\n if (context.childIndex > removalIndex) {\r\n context.childIndex--;\r\n context.onNodeRemoved();\r\n }\r\n }\r\n context.parent.children.splice(removalIndex, 1);\r\n },\r\n onNodeRemoved: () => { },\r\n addIdentifiers(exp) {\r\n },\r\n removeIdentifiers(exp) {\r\n },\r\n hoist(exp) {\r\n if (isString(exp))\r\n exp = createSimpleExpression(exp);\r\n context.hoists.push(exp);\r\n const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* CAN_HOIST */);\r\n identifier.hoisted = exp;\r\n return identifier;\r\n },\r\n cache(exp, isVNode = false) {\r\n return createCacheExpression(context.cached++, exp, isVNode);\r\n }\r\n };\r\n {\r\n context.filters = new Set();\r\n }\r\n return context;\r\n}\r\nfunction transform(root, options) {\r\n const context = createTransformContext(root, options);\r\n traverseNode(root, context);\r\n if (options.hoistStatic) {\r\n hoistStatic(root, context);\r\n }\r\n if (!options.ssr) {\r\n createRootCodegen(root, context);\r\n }\r\n // finalize meta information\r\n root.helpers = [...context.helpers.keys()];\r\n root.components = [...context.components];\r\n root.directives = [...context.directives];\r\n root.imports = context.imports;\r\n root.hoists = context.hoists;\r\n root.temps = context.temps;\r\n root.cached = context.cached;\r\n {\r\n root.filters = [...context.filters];\r\n }\r\n}\r\nfunction createRootCodegen(root, context) {\r\n const { helper } = context;\r\n const { children } = root;\r\n if (children.length === 1) {\r\n const child = children[0];\r\n // if the single child is an element, turn it into a block.\r\n if (isSingleElementRoot(root, child) && child.codegenNode) {\r\n // single element root is never hoisted so codegenNode will never be\r\n // SimpleExpressionNode\r\n const codegenNode = child.codegenNode;\r\n if (codegenNode.type === 13 /* VNODE_CALL */) {\r\n makeBlock(codegenNode, context);\r\n }\r\n root.codegenNode = codegenNode;\r\n }\r\n else {\r\n // - single <slot/>, IfNode, ForNode: already blocks.\r\n // - single text node: always patched.\r\n // root codegen falls through via genNode()\r\n root.codegenNode = child;\r\n }\r\n }\r\n else if (children.length > 1) {\r\n // root has multiple nodes - return a fragment block.\r\n let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n let patchFlagText = PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n // check if the fragment actually contains a single valid child with\r\n // the rest being comments\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n patchFlagText += `, ${PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n }\r\n root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${patchFlagText} */` : ``), undefined, undefined, true, undefined, false /* isComponent */);\r\n }\r\n else ;\r\n}\r\nfunction traverseChildren(parent, context) {\r\n let i = 0;\r\n const nodeRemoved = () => {\r\n i--;\r\n };\r\n for (; i < parent.children.length; i++) {\r\n const child = parent.children[i];\r\n if (isString(child))\r\n continue;\r\n context.parent = parent;\r\n context.childIndex = i;\r\n context.onNodeRemoved = nodeRemoved;\r\n traverseNode(child, context);\r\n }\r\n}\r\nfunction traverseNode(node, context) {\r\n context.currentNode = node;\r\n // apply transform plugins\r\n const { nodeTransforms } = context;\r\n const exitFns = [];\r\n for (let i = 0; i < nodeTransforms.length; i++) {\r\n const onExit = nodeTransforms[i](node, context);\r\n if (onExit) {\r\n if (isArray(onExit)) {\r\n exitFns.push(...onExit);\r\n }\r\n else {\r\n exitFns.push(onExit);\r\n }\r\n }\r\n if (!context.currentNode) {\r\n // node was removed\r\n return;\r\n }\r\n else {\r\n // node may have been replaced\r\n node = context.currentNode;\r\n }\r\n }\r\n switch (node.type) {\r\n case 3 /* COMMENT */:\r\n if (!context.ssr) {\r\n // inject import for the Comment symbol, which is needed for creating\r\n // comment nodes with `createVNode`\r\n context.helper(CREATE_COMMENT);\r\n }\r\n break;\r\n case 5 /* INTERPOLATION */:\r\n // no need to traverse, but we need to inject toString helper\r\n if (!context.ssr) {\r\n context.helper(TO_DISPLAY_STRING);\r\n }\r\n break;\r\n // for container types, further traverse downwards\r\n case 9 /* IF */:\r\n for (let i = 0; i < node.branches.length; i++) {\r\n traverseNode(node.branches[i], context);\r\n }\r\n break;\r\n case 10 /* IF_BRANCH */:\r\n case 11 /* FOR */:\r\n case 1 /* ELEMENT */:\r\n case 0 /* ROOT */:\r\n traverseChildren(node, context);\r\n break;\r\n }\r\n // exit transforms\r\n context.currentNode = node;\r\n let i = exitFns.length;\r\n while (i--) {\r\n exitFns[i]();\r\n }\r\n}\r\nfunction createStructuralDirectiveTransform(name, fn) {\r\n const matches = isString(name)\r\n ? (n) => n === name\r\n : (n) => name.test(n);\r\n return (node, context) => {\r\n if (node.type === 1 /* ELEMENT */) {\r\n const { props } = node;\r\n // structural directive transforms are not concerned with slots\r\n // as they are handled separately in vSlot.ts\r\n if (node.tagType === 3 /* TEMPLATE */ && props.some(isVSlot)) {\r\n return;\r\n }\r\n const exitFns = [];\r\n for (let i = 0; i < props.length; i++) {\r\n const prop = props[i];\r\n if (prop.type === 7 /* DIRECTIVE */ && matches(prop.name)) {\r\n // structural directives are removed to avoid infinite recursion\r\n // also we remove them *before* applying so that it can further\r\n // traverse itself in case it moves the node around\r\n props.splice(i, 1);\r\n i--;\r\n const onExit = fn(node, prop, context);\r\n if (onExit)\r\n exitFns.push(onExit);\r\n }\r\n }\r\n return exitFns;\r\n }\r\n };\r\n}\n\nconst PURE_ANNOTATION = `/*#__PURE__*/`;\r\nfunction createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssrRuntimeModuleName = 'vue/server-renderer', ssr = false, isTS = false, inSSR = false }) {\r\n const context = {\r\n mode,\r\n prefixIdentifiers,\r\n sourceMap,\r\n filename,\r\n scopeId,\r\n optimizeImports,\r\n runtimeGlobalName,\r\n runtimeModuleName,\r\n ssrRuntimeModuleName,\r\n ssr,\r\n isTS,\r\n inSSR,\r\n source: ast.loc.source,\r\n code: ``,\r\n column: 1,\r\n line: 1,\r\n offset: 0,\r\n indentLevel: 0,\r\n pure: false,\r\n map: undefined,\r\n helper(key) {\r\n return `_${helperNameMap[key]}`;\r\n },\r\n push(code, node) {\r\n context.code += code;\r\n },\r\n indent() {\r\n newline(++context.indentLevel);\r\n },\r\n deindent(withoutNewLine = false) {\r\n if (withoutNewLine) {\r\n --context.indentLevel;\r\n }\r\n else {\r\n newline(--context.indentLevel);\r\n }\r\n },\r\n newline() {\r\n newline(context.indentLevel);\r\n }\r\n };\r\n function newline(n) {\r\n context.push('\\n' + ` `.repeat(n));\r\n }\r\n return context;\r\n}\r\nfunction generate(ast, options = {}) {\r\n const context = createCodegenContext(ast, options);\r\n if (options.onContextCreated)\r\n options.onContextCreated(context);\r\n const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;\r\n const hasHelpers = ast.helpers.length > 0;\r\n const useWithBlock = !prefixIdentifiers && mode !== 'module';\r\n // preambles\r\n // in setup() inline mode, the preamble is generated in a sub context\r\n // and returned separately.\r\n const preambleContext = context;\r\n {\r\n genFunctionPreamble(ast, preambleContext);\r\n }\r\n // enter render function\r\n const functionName = ssr ? `ssrRender` : `render`;\r\n const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];\r\n const signature = args.join(', ');\r\n {\r\n push(`function ${functionName}(${signature}) {`);\r\n }\r\n indent();\r\n if (useWithBlock) {\r\n push(`with (_ctx) {`);\r\n indent();\r\n // function mode const declarations should be inside with block\r\n // also they should be renamed to avoid collision with user properties\r\n if (hasHelpers) {\r\n push(`const { ${ast.helpers\r\n .map(s => `${helperNameMap[s]}: _${helperNameMap[s]}`)\r\n .join(', ')} } = _Vue`);\r\n push(`\\n`);\r\n newline();\r\n }\r\n }\r\n // generate asset resolution statements\r\n if (ast.components.length) {\r\n genAssets(ast.components, 'component', context);\r\n if (ast.directives.length || ast.temps > 0) {\r\n newline();\r\n }\r\n }\r\n if (ast.directives.length) {\r\n genAssets(ast.directives, 'directive', context);\r\n if (ast.temps > 0) {\r\n newline();\r\n }\r\n }\r\n if (ast.filters && ast.filters.length) {\r\n newline();\r\n genAssets(ast.filters, 'filter', context);\r\n newline();\r\n }\r\n if (ast.temps > 0) {\r\n push(`let `);\r\n for (let i = 0; i < ast.temps; i++) {\r\n push(`${i > 0 ? `, ` : ``}_temp${i}`);\r\n }\r\n }\r\n if (ast.components.length || ast.directives.length || ast.temps) {\r\n push(`\\n`);\r\n newline();\r\n }\r\n // generate the VNode tree expression\r\n if (!ssr) {\r\n push(`return `);\r\n }\r\n if (ast.codegenNode) {\r\n genNode(ast.codegenNode, context);\r\n }\r\n else {\r\n push(`null`);\r\n }\r\n if (useWithBlock) {\r\n deindent();\r\n push(`}`);\r\n }\r\n deindent();\r\n push(`}`);\r\n return {\r\n ast,\r\n code: context.code,\r\n preamble: ``,\r\n // SourceMapGenerator does have toJSON() method but it's not in the types\r\n map: context.map ? context.map.toJSON() : undefined\r\n };\r\n}\r\nfunction genFunctionPreamble(ast, context) {\r\n const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName, ssrRuntimeModuleName } = context;\r\n const VueBinding = runtimeGlobalName;\r\n const aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\r\n // Generate const declaration for helpers\r\n // In prefix mode, we place the const declaration at top so it's done\r\n // only once; But if we not prefixing, we place the declaration inside the\r\n // with block so it doesn't incur the `in` check cost for every helper access.\r\n if (ast.helpers.length > 0) {\r\n {\r\n // \"with\" mode.\r\n // save Vue in a separate variable to avoid collision\r\n push(`const _Vue = ${VueBinding}\\n`);\r\n // in \"with\" mode, helpers are declared inside the with block to avoid\r\n // has check cost, but hoists are lifted out of the function - we need\r\n // to provide the helper here.\r\n if (ast.hoists.length) {\r\n const staticHelpers = [\r\n CREATE_VNODE,\r\n CREATE_ELEMENT_VNODE,\r\n CREATE_COMMENT,\r\n CREATE_TEXT,\r\n CREATE_STATIC\r\n ]\r\n .filter(helper => ast.helpers.includes(helper))\r\n .map(aliasHelper)\r\n .join(', ');\r\n push(`const { ${staticHelpers} } = _Vue\\n`);\r\n }\r\n }\r\n }\r\n genHoists(ast.hoists, context);\r\n newline();\r\n push(`return `);\r\n}\r\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\r\n const resolver = helper(type === 'filter'\r\n ? RESOLVE_FILTER\r\n : type === 'component'\r\n ? RESOLVE_COMPONENT\r\n : RESOLVE_DIRECTIVE);\r\n for (let i = 0; i < assets.length; i++) {\r\n let id = assets[i];\r\n // potential component implicit self-reference inferred from SFC filename\r\n const maybeSelfReference = id.endsWith('__self');\r\n if (maybeSelfReference) {\r\n id = id.slice(0, -6);\r\n }\r\n push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);\r\n if (i < assets.length - 1) {\r\n newline();\r\n }\r\n }\r\n}\r\nfunction genHoists(hoists, context) {\r\n if (!hoists.length) {\r\n return;\r\n }\r\n context.pure = true;\r\n const { push, newline, helper, scopeId, mode } = context;\r\n newline();\r\n for (let i = 0; i < hoists.length; i++) {\r\n const exp = hoists[i];\r\n if (exp) {\r\n push(`const _hoisted_${i + 1} = ${``}`);\r\n genNode(exp, context);\r\n newline();\r\n }\r\n }\r\n context.pure = false;\r\n}\r\nfunction isText$1(n) {\r\n return (isString(n) ||\r\n n.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n n.type === 2 /* TEXT */ ||\r\n n.type === 5 /* INTERPOLATION */ ||\r\n n.type === 8 /* COMPOUND_EXPRESSION */);\r\n}\r\nfunction genNodeListAsArray(nodes, context) {\r\n const multilines = nodes.length > 3 ||\r\n (((process.env.NODE_ENV !== 'production')) && nodes.some(n => isArray(n) || !isText$1(n)));\r\n context.push(`[`);\r\n multilines && context.indent();\r\n genNodeList(nodes, context, multilines);\r\n multilines && context.deindent();\r\n context.push(`]`);\r\n}\r\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\r\n const { push, newline } = context;\r\n for (let i = 0; i < nodes.length; i++) {\r\n const node = nodes[i];\r\n if (isString(node)) {\r\n push(node);\r\n }\r\n else if (isArray(node)) {\r\n genNodeListAsArray(node, context);\r\n }\r\n else {\r\n genNode(node, context);\r\n }\r\n if (i < nodes.length - 1) {\r\n if (multilines) {\r\n comma && push(',');\r\n newline();\r\n }\r\n else {\r\n comma && push(', ');\r\n }\r\n }\r\n }\r\n}\r\nfunction genNode(node, context) {\r\n if (isString(node)) {\r\n context.push(node);\r\n return;\r\n }\r\n if (isSymbol(node)) {\r\n context.push(context.helper(node));\r\n return;\r\n }\r\n switch (node.type) {\r\n case 1 /* ELEMENT */:\r\n case 9 /* IF */:\r\n case 11 /* FOR */:\r\n (process.env.NODE_ENV !== 'production') &&\r\n assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +\r\n `Apply appropriate transforms first.`);\r\n genNode(node.codegenNode, context);\r\n break;\r\n case 2 /* TEXT */:\r\n genText(node, context);\r\n break;\r\n case 4 /* SIMPLE_EXPRESSION */:\r\n genExpression(node, context);\r\n break;\r\n case 5 /* INTERPOLATION */:\r\n genInterpolation(node, context);\r\n break;\r\n case 12 /* TEXT_CALL */:\r\n genNode(node.codegenNode, context);\r\n break;\r\n case 8 /* COMPOUND_EXPRESSION */:\r\n genCompoundExpression(node, context);\r\n break;\r\n case 3 /* COMMENT */:\r\n genComment(node, context);\r\n break;\r\n case 13 /* VNODE_CALL */:\r\n genVNodeCall(node, context);\r\n break;\r\n case 14 /* JS_CALL_EXPRESSION */:\r\n genCallExpression(node, context);\r\n break;\r\n case 15 /* JS_OBJECT_EXPRESSION */:\r\n genObjectExpression(node, context);\r\n break;\r\n case 17 /* JS_ARRAY_EXPRESSION */:\r\n genArrayExpression(node, context);\r\n break;\r\n case 18 /* JS_FUNCTION_EXPRESSION */:\r\n genFunctionExpression(node, context);\r\n break;\r\n case 19 /* JS_CONDITIONAL_EXPRESSION */:\r\n genConditionalExpression(node, context);\r\n break;\r\n case 20 /* JS_CACHE_EXPRESSION */:\r\n genCacheExpression(node, context);\r\n break;\r\n case 21 /* JS_BLOCK_STATEMENT */:\r\n genNodeList(node.body, context, true, false);\r\n break;\r\n // SSR only types\r\n case 22 /* JS_TEMPLATE_LITERAL */:\r\n break;\r\n case 23 /* JS_IF_STATEMENT */:\r\n break;\r\n case 24 /* JS_ASSIGNMENT_EXPRESSION */:\r\n break;\r\n case 25 /* JS_SEQUENCE_EXPRESSION */:\r\n break;\r\n case 26 /* JS_RETURN_STATEMENT */:\r\n break;\r\n /* istanbul ignore next */\r\n case 10 /* IF_BRANCH */:\r\n // noop\r\n break;\r\n default:\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n assert(false, `unhandled codegen node type: ${node.type}`);\r\n // make sure we exhaust all possible types\r\n const exhaustiveCheck = node;\r\n return exhaustiveCheck;\r\n }\r\n }\r\n}\r\nfunction genText(node, context) {\r\n context.push(JSON.stringify(node.content), node);\r\n}\r\nfunction genExpression(node, context) {\r\n const { content, isStatic } = node;\r\n context.push(isStatic ? JSON.stringify(content) : content, node);\r\n}\r\nfunction genInterpolation(node, context) {\r\n const { push, helper, pure } = context;\r\n if (pure)\r\n push(PURE_ANNOTATION);\r\n push(`${helper(TO_DISPLAY_STRING)}(`);\r\n genNode(node.content, context);\r\n push(`)`);\r\n}\r\nfunction genCompoundExpression(node, context) {\r\n for (let i = 0; i < node.children.length; i++) {\r\n const child = node.children[i];\r\n if (isString(child)) {\r\n context.push(child);\r\n }\r\n else {\r\n genNode(child, context);\r\n }\r\n }\r\n}\r\nfunction genExpressionAsPropertyKey(node, context) {\r\n const { push } = context;\r\n if (node.type === 8 /* COMPOUND_EXPRESSION */) {\r\n push(`[`);\r\n genCompoundExpression(node, context);\r\n push(`]`);\r\n }\r\n else if (node.isStatic) {\r\n // only quote keys if necessary\r\n const text = isSimpleIdentifier(node.content)\r\n ? node.content\r\n : JSON.stringify(node.content);\r\n push(text, node);\r\n }\r\n else {\r\n push(`[${node.content}]`, node);\r\n }\r\n}\r\nfunction genComment(node, context) {\r\n const { push, helper, pure } = context;\r\n if (pure) {\r\n push(PURE_ANNOTATION);\r\n }\r\n push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);\r\n}\r\nfunction genVNodeCall(node, context) {\r\n const { push, helper, pure } = context;\r\n const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;\r\n if (directives) {\r\n push(helper(WITH_DIRECTIVES) + `(`);\r\n }\r\n if (isBlock) {\r\n push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\r\n }\r\n if (pure) {\r\n push(PURE_ANNOTATION);\r\n }\r\n const callHelper = isBlock\r\n ? getVNodeBlockHelper(context.inSSR, isComponent)\r\n : getVNodeHelper(context.inSSR, isComponent);\r\n push(helper(callHelper) + `(`, node);\r\n genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);\r\n push(`)`);\r\n if (isBlock) {\r\n push(`)`);\r\n }\r\n if (directives) {\r\n push(`, `);\r\n genNode(directives, context);\r\n push(`)`);\r\n }\r\n}\r\nfunction genNullableArgs(args) {\r\n let i = args.length;\r\n while (i--) {\r\n if (args[i] != null)\r\n break;\r\n }\r\n return args.slice(0, i + 1).map(arg => arg || `null`);\r\n}\r\n// JavaScript\r\nfunction genCallExpression(node, context) {\r\n const { push, helper, pure } = context;\r\n const callee = isString(node.callee) ? node.callee : helper(node.callee);\r\n if (pure) {\r\n push(PURE_ANNOTATION);\r\n }\r\n push(callee + `(`, node);\r\n genNodeList(node.arguments, context);\r\n push(`)`);\r\n}\r\nfunction genObjectExpression(node, context) {\r\n const { push, indent, deindent, newline } = context;\r\n const { properties } = node;\r\n if (!properties.length) {\r\n push(`{}`, node);\r\n return;\r\n }\r\n const multilines = properties.length > 1 ||\r\n (((process.env.NODE_ENV !== 'production')) &&\r\n properties.some(p => p.value.type !== 4 /* SIMPLE_EXPRESSION */));\r\n push(multilines ? `{` : `{ `);\r\n multilines && indent();\r\n for (let i = 0; i < properties.length; i++) {\r\n const { key, value } = properties[i];\r\n // key\r\n genExpressionAsPropertyKey(key, context);\r\n push(`: `);\r\n // value\r\n genNode(value, context);\r\n if (i < properties.length - 1) {\r\n // will only reach this if it's multilines\r\n push(`,`);\r\n newline();\r\n }\r\n }\r\n multilines && deindent();\r\n push(multilines ? `}` : ` }`);\r\n}\r\nfunction genArrayExpression(node, context) {\r\n genNodeListAsArray(node.elements, context);\r\n}\r\nfunction genFunctionExpression(node, context) {\r\n const { push, indent, deindent } = context;\r\n const { params, returns, body, newline, isSlot } = node;\r\n if (isSlot) {\r\n // wrap slot functions with owner context\r\n push(`_${helperNameMap[WITH_CTX]}(`);\r\n }\r\n push(`(`, node);\r\n if (isArray(params)) {\r\n genNodeList(params, context);\r\n }\r\n else if (params) {\r\n genNode(params, context);\r\n }\r\n push(`) => `);\r\n if (newline || body) {\r\n push(`{`);\r\n indent();\r\n }\r\n if (returns) {\r\n if (newline) {\r\n push(`return `);\r\n }\r\n if (isArray(returns)) {\r\n genNodeListAsArray(returns, context);\r\n }\r\n else {\r\n genNode(returns, context);\r\n }\r\n }\r\n else if (body) {\r\n genNode(body, context);\r\n }\r\n if (newline || body) {\r\n deindent();\r\n push(`}`);\r\n }\r\n if (isSlot) {\r\n if (node.isNonScopedSlot) {\r\n push(`, undefined, true`);\r\n }\r\n push(`)`);\r\n }\r\n}\r\nfunction genConditionalExpression(node, context) {\r\n const { test, consequent, alternate, newline: needNewline } = node;\r\n const { push, indent, deindent, newline } = context;\r\n if (test.type === 4 /* SIMPLE_EXPRESSION */) {\r\n const needsParens = !isSimpleIdentifier(test.content);\r\n needsParens && push(`(`);\r\n genExpression(test, context);\r\n needsParens && push(`)`);\r\n }\r\n else {\r\n push(`(`);\r\n genNode(test, context);\r\n push(`)`);\r\n }\r\n needNewline && indent();\r\n context.indentLevel++;\r\n needNewline || push(` `);\r\n push(`? `);\r\n genNode(consequent, context);\r\n context.indentLevel--;\r\n needNewline && newline();\r\n needNewline || push(` `);\r\n push(`: `);\r\n const isNested = alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */;\r\n if (!isNested) {\r\n context.indentLevel++;\r\n }\r\n genNode(alternate, context);\r\n if (!isNested) {\r\n context.indentLevel--;\r\n }\r\n needNewline && deindent(true /* without newline */);\r\n}\r\nfunction genCacheExpression(node, context) {\r\n const { push, helper, indent, deindent, newline } = context;\r\n push(`_cache[${node.index}] || (`);\r\n if (node.isVNode) {\r\n indent();\r\n push(`${helper(SET_BLOCK_TRACKING)}(-1),`);\r\n newline();\r\n }\r\n push(`_cache[${node.index}] = `);\r\n genNode(node.value, context);\r\n if (node.isVNode) {\r\n push(`,`);\r\n newline();\r\n push(`${helper(SET_BLOCK_TRACKING)}(1),`);\r\n newline();\r\n push(`_cache[${node.index}]`);\r\n deindent();\r\n }\r\n push(`)`);\r\n}\n\nfunction walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = Object.create(null)) {\r\n {\r\n return;\r\n }\r\n}\r\nfunction isReferencedIdentifier(id, parent, parentStack) {\r\n {\r\n return false;\r\n }\r\n}\r\nfunction isInDestructureAssignment(parent, parentStack) {\r\n if (parent &&\r\n (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {\r\n let i = parentStack.length;\r\n while (i--) {\r\n const p = parentStack[i];\r\n if (p.type === 'AssignmentExpression') {\r\n return true;\r\n }\r\n else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {\r\n break;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction walkFunctionParams(node, onIdent) {\r\n for (const p of node.params) {\r\n for (const id of extractIdentifiers(p)) {\r\n onIdent(id);\r\n }\r\n }\r\n}\r\nfunction walkBlockDeclarations(block, onIdent) {\r\n for (const stmt of block.body) {\r\n if (stmt.type === 'VariableDeclaration') {\r\n if (stmt.declare)\r\n continue;\r\n for (const decl of stmt.declarations) {\r\n for (const id of extractIdentifiers(decl.id)) {\r\n onIdent(id);\r\n }\r\n }\r\n }\r\n else if (stmt.type === 'FunctionDeclaration' ||\r\n stmt.type === 'ClassDeclaration') {\r\n if (stmt.declare || !stmt.id)\r\n continue;\r\n onIdent(stmt.id);\r\n }\r\n }\r\n}\r\nfunction extractIdentifiers(param, nodes = []) {\r\n switch (param.type) {\r\n case 'Identifier':\r\n nodes.push(param);\r\n break;\r\n case 'MemberExpression':\r\n let object = param;\r\n while (object.type === 'MemberExpression') {\r\n object = object.object;\r\n }\r\n nodes.push(object);\r\n break;\r\n case 'ObjectPattern':\r\n for (const prop of param.properties) {\r\n if (prop.type === 'RestElement') {\r\n extractIdentifiers(prop.argument, nodes);\r\n }\r\n else {\r\n extractIdentifiers(prop.value, nodes);\r\n }\r\n }\r\n break;\r\n case 'ArrayPattern':\r\n param.elements.forEach(element => {\r\n if (element)\r\n extractIdentifiers(element, nodes);\r\n });\r\n break;\r\n case 'RestElement':\r\n extractIdentifiers(param.argument, nodes);\r\n break;\r\n case 'AssignmentPattern':\r\n extractIdentifiers(param.left, nodes);\r\n break;\r\n }\r\n return nodes;\r\n}\r\nconst isFunctionType = (node) => {\r\n return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\r\n};\r\nconst isStaticProperty = (node) => node &&\r\n (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&\r\n !node.computed;\r\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\n\n// these keywords should not appear inside expressions, but operators like\r\n// typeof, instanceof and in are allowed\r\nconst prohibitedKeywordRE = new RegExp('\\\\b' +\r\n ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\r\n 'super,throw,while,yield,delete,export,import,return,switch,default,' +\r\n 'extends,finally,continue,debugger,function,arguments,typeof,void')\r\n .split(',')\r\n .join('\\\\b|\\\\b') +\r\n '\\\\b');\r\n// strip strings in expressions\r\nconst stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\r\n/**\r\n * Validate a non-prefixed expression.\r\n * This is only called when using the in-browser runtime compiler since it\r\n * doesn't prefix expressions.\r\n */\r\nfunction validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {\r\n const exp = node.content;\r\n // empty expressions are validated per-directive since some directives\r\n // do allow empty expressions.\r\n if (!exp.trim()) {\r\n return;\r\n }\r\n try {\r\n new Function(asRawStatements\r\n ? ` ${exp} `\r\n : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`);\r\n }\r\n catch (e) {\r\n let message = e.message;\r\n const keywordMatch = exp\r\n .replace(stripStringRE, '')\r\n .match(prohibitedKeywordRE);\r\n if (keywordMatch) {\r\n message = `avoid using JavaScript keyword as property name: \"${keywordMatch[0]}\"`;\r\n }\r\n context.onError(createCompilerError(44 /* X_INVALID_EXPRESSION */, node.loc, undefined, message));\r\n }\r\n}\n\nconst transformExpression = (node, context) => {\r\n if (node.type === 5 /* INTERPOLATION */) {\r\n node.content = processExpression(node.content, context);\r\n }\r\n else if (node.type === 1 /* ELEMENT */) {\r\n // handle directives on element\r\n for (let i = 0; i < node.props.length; i++) {\r\n const dir = node.props[i];\r\n // do not process for v-on & v-for since they are special handled\r\n if (dir.type === 7 /* DIRECTIVE */ && dir.name !== 'for') {\r\n const exp = dir.exp;\r\n const arg = dir.arg;\r\n // do not process exp if this is v-on:arg - we need special handling\r\n // for wrapping inline statements.\r\n if (exp &&\r\n exp.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n !(dir.name === 'on' && arg)) {\r\n dir.exp = processExpression(exp, context, \r\n // slot args must be processed as function params\r\n dir.name === 'slot');\r\n }\r\n if (arg && arg.type === 4 /* SIMPLE_EXPRESSION */ && !arg.isStatic) {\r\n dir.arg = processExpression(arg, context);\r\n }\r\n }\r\n }\r\n }\r\n};\r\n// Important: since this function uses Node.js only dependencies, it should\r\n// always be used with a leading !true check so that it can be\r\n// tree-shaken from the browser build.\r\nfunction processExpression(node, context, \r\n// some expressions like v-slot props & v-for aliases should be parsed as\r\n// function params\r\nasParams = false, \r\n// v-on handler values may contain multiple statements\r\nasRawStatements = false, localVars = Object.create(context.identifiers)) {\r\n {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n // simple in-browser validation (same logic in 2.x)\r\n validateBrowserExpression(node, context, asParams, asRawStatements);\r\n }\r\n return node;\r\n }\r\n}\n\nconst transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {\r\n return processIf(node, dir, context, (ifNode, branch, isRoot) => {\r\n // #1587: We need to dynamically increment the key based on the current\r\n // node's sibling nodes, since chained v-if/else branches are\r\n // rendered at the same depth\r\n const siblings = context.parent.children;\r\n let i = siblings.indexOf(ifNode);\r\n let key = 0;\r\n while (i-- >= 0) {\r\n const sibling = siblings[i];\r\n if (sibling && sibling.type === 9 /* IF */) {\r\n key += sibling.branches.length;\r\n }\r\n }\r\n // Exit callback. Complete the codegenNode when all children have been\r\n // transformed.\r\n return () => {\r\n if (isRoot) {\r\n ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);\r\n }\r\n else {\r\n // attach this branch's codegen node to the v-if root.\r\n const parentCondition = getParentCondition(ifNode.codegenNode);\r\n parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);\r\n }\r\n };\r\n });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processIf(node, dir, context, processCodegen) {\r\n if (dir.name !== 'else' &&\r\n (!dir.exp || !dir.exp.content.trim())) {\r\n const loc = dir.exp ? dir.exp.loc : node.loc;\r\n context.onError(createCompilerError(28 /* X_V_IF_NO_EXPRESSION */, dir.loc));\r\n dir.exp = createSimpleExpression(`true`, false, loc);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && true && dir.exp) {\r\n validateBrowserExpression(dir.exp, context);\r\n }\r\n if (dir.name === 'if') {\r\n const branch = createIfBranch(node, dir);\r\n const ifNode = {\r\n type: 9 /* IF */,\r\n loc: node.loc,\r\n branches: [branch]\r\n };\r\n context.replaceNode(ifNode);\r\n if (processCodegen) {\r\n return processCodegen(ifNode, branch, true);\r\n }\r\n }\r\n else {\r\n // locate the adjacent v-if\r\n const siblings = context.parent.children;\r\n const comments = [];\r\n let i = siblings.indexOf(node);\r\n while (i-- >= -1) {\r\n const sibling = siblings[i];\r\n if ((process.env.NODE_ENV !== 'production') && sibling && sibling.type === 3 /* COMMENT */) {\r\n context.removeNode(sibling);\r\n comments.unshift(sibling);\r\n continue;\r\n }\r\n if (sibling &&\r\n sibling.type === 2 /* TEXT */ &&\r\n !sibling.content.trim().length) {\r\n context.removeNode(sibling);\r\n continue;\r\n }\r\n if (sibling && sibling.type === 9 /* IF */) {\r\n // Check if v-else was followed by v-else-if\r\n if (dir.name === 'else-if' &&\r\n sibling.branches[sibling.branches.length - 1].condition === undefined) {\r\n context.onError(createCompilerError(30 /* X_V_ELSE_NO_ADJACENT_IF */, node.loc));\r\n }\r\n // move the node to the if node's branches\r\n context.removeNode();\r\n const branch = createIfBranch(node, dir);\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n comments.length &&\r\n // #3619 ignore comments if the v-if is direct child of <transition>\r\n !(context.parent &&\r\n context.parent.type === 1 /* ELEMENT */ &&\r\n isBuiltInType(context.parent.tag, 'transition'))) {\r\n branch.children = [...comments, ...branch.children];\r\n }\r\n // check if user is forcing same key on different branches\r\n if ((process.env.NODE_ENV !== 'production') || !true) {\r\n const key = branch.userKey;\r\n if (key) {\r\n sibling.branches.forEach(({ userKey }) => {\r\n if (isSameKey(userKey, key)) {\r\n context.onError(createCompilerError(29 /* X_V_IF_SAME_KEY */, branch.userKey.loc));\r\n }\r\n });\r\n }\r\n }\r\n sibling.branches.push(branch);\r\n const onExit = processCodegen && processCodegen(sibling, branch, false);\r\n // since the branch was removed, it will not be traversed.\r\n // make sure to traverse here.\r\n traverseNode(branch, context);\r\n // call on exit\r\n if (onExit)\r\n onExit();\r\n // make sure to reset currentNode after traversal to indicate this\r\n // node has been removed.\r\n context.currentNode = null;\r\n }\r\n else {\r\n context.onError(createCompilerError(30 /* X_V_ELSE_NO_ADJACENT_IF */, node.loc));\r\n }\r\n break;\r\n }\r\n }\r\n}\r\nfunction createIfBranch(node, dir) {\r\n return {\r\n type: 10 /* IF_BRANCH */,\r\n loc: node.loc,\r\n condition: dir.name === 'else' ? undefined : dir.exp,\r\n children: node.tagType === 3 /* TEMPLATE */ && !findDir(node, 'for')\r\n ? node.children\r\n : [node],\r\n userKey: findProp(node, `key`)\r\n };\r\n}\r\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\r\n if (branch.condition) {\r\n return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), \r\n // make sure to pass in asBlock: true so that the comment node call\r\n // closes the current block.\r\n createCallExpression(context.helper(CREATE_COMMENT), [\r\n (process.env.NODE_ENV !== 'production') ? '\"v-if\"' : '\"\"',\r\n 'true'\r\n ]));\r\n }\r\n else {\r\n return createChildrenCodegenNode(branch, keyIndex, context);\r\n }\r\n}\r\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\r\n const { helper } = context;\r\n const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* CAN_HOIST */));\r\n const { children } = branch;\r\n const firstChild = children[0];\r\n const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* ELEMENT */;\r\n if (needFragmentWrapper) {\r\n if (children.length === 1 && firstChild.type === 11 /* FOR */) {\r\n // optimize away nested fragments when child is a ForNode\r\n const vnodeCall = firstChild.codegenNode;\r\n injectProp(vnodeCall, keyProperty, context);\r\n return vnodeCall;\r\n }\r\n else {\r\n let patchFlag = 64 /* STABLE_FRAGMENT */;\r\n let patchFlagText = PatchFlagNames[64 /* STABLE_FRAGMENT */];\r\n // check if the fragment actually contains a single valid child with\r\n // the rest being comments\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n children.filter(c => c.type !== 3 /* COMMENT */).length === 1) {\r\n patchFlag |= 2048 /* DEV_ROOT_FRAGMENT */;\r\n patchFlagText += `, ${PatchFlagNames[2048 /* DEV_ROOT_FRAGMENT */]}`;\r\n }\r\n return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${patchFlagText} */` : ``), undefined, undefined, true, false, false /* isComponent */, branch.loc);\r\n }\r\n }\r\n else {\r\n const ret = firstChild.codegenNode;\r\n const vnodeCall = getMemoedVNodeCall(ret);\r\n // Change createVNode to createBlock.\r\n if (vnodeCall.type === 13 /* VNODE_CALL */) {\r\n makeBlock(vnodeCall, context);\r\n }\r\n // inject branch key\r\n injectProp(vnodeCall, keyProperty, context);\r\n return ret;\r\n }\r\n}\r\nfunction isSameKey(a, b) {\r\n if (!a || a.type !== b.type) {\r\n return false;\r\n }\r\n if (a.type === 6 /* ATTRIBUTE */) {\r\n if (a.value.content !== b.value.content) {\r\n return false;\r\n }\r\n }\r\n else {\r\n // directive\r\n const exp = a.exp;\r\n const branchExp = b.exp;\r\n if (exp.type !== branchExp.type) {\r\n return false;\r\n }\r\n if (exp.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n exp.isStatic !== branchExp.isStatic ||\r\n exp.content !== branchExp.content) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction getParentCondition(node) {\r\n while (true) {\r\n if (node.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n if (node.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n node = node.alternate;\r\n }\r\n else {\r\n return node;\r\n }\r\n }\r\n else if (node.type === 20 /* JS_CACHE_EXPRESSION */) {\r\n node = node.value;\r\n }\r\n }\r\n}\n\nconst transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {\r\n const { helper, removeHelper } = context;\r\n return processFor(node, dir, context, forNode => {\r\n // create the loop render function expression now, and add the\r\n // iterator on exit after all children have been traversed\r\n const renderExp = createCallExpression(helper(RENDER_LIST), [\r\n forNode.source\r\n ]);\r\n const memo = findDir(node, 'memo');\r\n const keyProp = findProp(node, `key`);\r\n const keyExp = keyProp &&\r\n (keyProp.type === 6 /* ATTRIBUTE */\r\n ? createSimpleExpression(keyProp.value.content, true)\r\n : keyProp.exp);\r\n const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;\r\n const isStableFragment = forNode.source.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n forNode.source.constType > 0 /* NOT_CONSTANT */;\r\n const fragmentFlag = isStableFragment\r\n ? 64 /* STABLE_FRAGMENT */\r\n : keyProp\r\n ? 128 /* KEYED_FRAGMENT */\r\n : 256 /* UNKEYED_FRAGMENT */;\r\n forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +\r\n ((process.env.NODE_ENV !== 'production') ? ` /* ${PatchFlagNames[fragmentFlag]} */` : ``), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);\r\n return () => {\r\n // finish the codegen now that all children have been traversed\r\n let childBlock;\r\n const isTemplate = isTemplateNode(node);\r\n const { children } = forNode;\r\n // check <template v-for> key placement\r\n if (((process.env.NODE_ENV !== 'production') || !true) && isTemplate) {\r\n node.children.some(c => {\r\n if (c.type === 1 /* ELEMENT */) {\r\n const key = findProp(c, 'key');\r\n if (key) {\r\n context.onError(createCompilerError(33 /* X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));\r\n return true;\r\n }\r\n }\r\n });\r\n }\r\n const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* ELEMENT */;\r\n const slotOutlet = isSlotOutlet(node)\r\n ? node\r\n : isTemplate &&\r\n node.children.length === 1 &&\r\n isSlotOutlet(node.children[0])\r\n ? node.children[0] // api-extractor somehow fails to infer this\r\n : null;\r\n if (slotOutlet) {\r\n // <slot v-for=\"...\"> or <template v-for=\"...\"><slot/></template>\r\n childBlock = slotOutlet.codegenNode;\r\n if (isTemplate && keyProperty) {\r\n // <template v-for=\"...\" :key=\"...\"><slot/></template>\r\n // we need to inject the key to the renderSlot() call.\r\n // the props for renderSlot is passed as the 3rd argument.\r\n injectProp(childBlock, keyProperty, context);\r\n }\r\n }\r\n else if (needFragmentWrapper) {\r\n // <template v-for=\"...\"> with text or multi-elements\r\n // should generate a fragment block for each loop\r\n childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* STABLE_FRAGMENT */ +\r\n ((process.env.NODE_ENV !== 'production')\r\n ? ` /* ${PatchFlagNames[64 /* STABLE_FRAGMENT */]} */`\r\n : ``), undefined, undefined, true, undefined, false /* isComponent */);\r\n }\r\n else {\r\n // Normal element v-for. Directly use the child's codegenNode\r\n // but mark it as a block.\r\n childBlock = children[0]\r\n .codegenNode;\r\n if (isTemplate && keyProperty) {\r\n injectProp(childBlock, keyProperty, context);\r\n }\r\n if (childBlock.isBlock !== !isStableFragment) {\r\n if (childBlock.isBlock) {\r\n // switch from block to vnode\r\n removeHelper(OPEN_BLOCK);\r\n removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n }\r\n else {\r\n // switch from vnode to block\r\n removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n }\r\n }\r\n childBlock.isBlock = !isStableFragment;\r\n if (childBlock.isBlock) {\r\n helper(OPEN_BLOCK);\r\n helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\r\n }\r\n else {\r\n helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\r\n }\r\n }\r\n if (memo) {\r\n const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [\r\n createSimpleExpression(`_cached`)\r\n ]));\r\n loop.body = createBlockStatement([\r\n createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\r\n createCompoundExpression([\r\n `if (_cached`,\r\n ...(keyExp ? [` && _cached.key === `, keyExp] : []),\r\n ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`\r\n ]),\r\n createCompoundExpression([`const _item = `, childBlock]),\r\n createSimpleExpression(`_item.memo = _memo`),\r\n createSimpleExpression(`return _item`)\r\n ]);\r\n renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));\r\n }\r\n else {\r\n renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));\r\n }\r\n };\r\n });\r\n});\r\n// target-agnostic transform used for both Client and SSR\r\nfunction processFor(node, dir, context, processCodegen) {\r\n if (!dir.exp) {\r\n context.onError(createCompilerError(31 /* X_V_FOR_NO_EXPRESSION */, dir.loc));\r\n return;\r\n }\r\n const parseResult = parseForExpression(\r\n // can only be simple expression because vFor transform is applied\r\n // before expression transform.\r\n dir.exp, context);\r\n if (!parseResult) {\r\n context.onError(createCompilerError(32 /* X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));\r\n return;\r\n }\r\n const { addIdentifiers, removeIdentifiers, scopes } = context;\r\n const { source, value, key, index } = parseResult;\r\n const forNode = {\r\n type: 11 /* FOR */,\r\n loc: dir.loc,\r\n source,\r\n valueAlias: value,\r\n keyAlias: key,\r\n objectIndexAlias: index,\r\n parseResult,\r\n children: isTemplateNode(node) ? node.children : [node]\r\n };\r\n context.replaceNode(forNode);\r\n // bookkeeping\r\n scopes.vFor++;\r\n const onExit = processCodegen && processCodegen(forNode);\r\n return () => {\r\n scopes.vFor--;\r\n if (onExit)\r\n onExit();\r\n };\r\n}\r\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\r\n// This regex doesn't cover the case if key or index aliases have destructuring,\r\n// but those do not make sense in the first place, so this works in practice.\r\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\r\nconst stripParensRE = /^\\(|\\)$/g;\r\nfunction parseForExpression(input, context) {\r\n const loc = input.loc;\r\n const exp = input.content;\r\n const inMatch = exp.match(forAliasRE);\r\n if (!inMatch)\r\n return;\r\n const [, LHS, RHS] = inMatch;\r\n const result = {\r\n source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),\r\n value: undefined,\r\n key: undefined,\r\n index: undefined\r\n };\r\n if ((process.env.NODE_ENV !== 'production') && true) {\r\n validateBrowserExpression(result.source, context);\r\n }\r\n let valueContent = LHS.trim().replace(stripParensRE, '').trim();\r\n const trimmedOffset = LHS.indexOf(valueContent);\r\n const iteratorMatch = valueContent.match(forIteratorRE);\r\n if (iteratorMatch) {\r\n valueContent = valueContent.replace(forIteratorRE, '').trim();\r\n const keyContent = iteratorMatch[1].trim();\r\n let keyOffset;\r\n if (keyContent) {\r\n keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\r\n result.key = createAliasExpression(loc, keyContent, keyOffset);\r\n if ((process.env.NODE_ENV !== 'production') && true) {\r\n validateBrowserExpression(result.key, context, true);\r\n }\r\n }\r\n if (iteratorMatch[2]) {\r\n const indexContent = iteratorMatch[2].trim();\r\n if (indexContent) {\r\n result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key\r\n ? keyOffset + keyContent.length\r\n : trimmedOffset + valueContent.length));\r\n if ((process.env.NODE_ENV !== 'production') && true) {\r\n validateBrowserExpression(result.index, context, true);\r\n }\r\n }\r\n }\r\n }\r\n if (valueContent) {\r\n result.value = createAliasExpression(loc, valueContent, trimmedOffset);\r\n if ((process.env.NODE_ENV !== 'production') && true) {\r\n validateBrowserExpression(result.value, context, true);\r\n }\r\n }\r\n return result;\r\n}\r\nfunction createAliasExpression(range, content, offset) {\r\n return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));\r\n}\r\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\r\n return createParamsList([value, key, index, ...memoArgs]);\r\n}\r\nfunction createParamsList(args) {\r\n let i = args.length;\r\n while (i--) {\r\n if (args[i])\r\n break;\r\n }\r\n return args\r\n .slice(0, i + 1)\r\n .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));\r\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\r\n// A NodeTransform that:\r\n// 1. Tracks scope identifiers for scoped slots so that they don't get prefixed\r\n// by transformExpression. This is only applied in non-browser builds with\r\n// { prefixIdentifiers: true }.\r\n// 2. Track v-slot depths so that we know a slot is inside another slot.\r\n// Note the exit callback is executed before buildSlots() on the same node,\r\n// so only nested slots see positive numbers.\r\nconst trackSlotScopes = (node, context) => {\r\n if (node.type === 1 /* ELEMENT */ &&\r\n (node.tagType === 1 /* COMPONENT */ ||\r\n node.tagType === 3 /* TEMPLATE */)) {\r\n // We are only checking non-empty v-slot here\r\n // since we only care about slots that introduce scope variables.\r\n const vSlot = findDir(node, 'slot');\r\n if (vSlot) {\r\n vSlot.exp;\r\n context.scopes.vSlot++;\r\n return () => {\r\n context.scopes.vSlot--;\r\n };\r\n }\r\n }\r\n};\r\n// A NodeTransform that tracks scope identifiers for scoped slots with v-for.\r\n// This transform is only applied in non-browser builds with { prefixIdentifiers: true }\r\nconst trackVForSlotScopes = (node, context) => {\r\n let vFor;\r\n if (isTemplateNode(node) &&\r\n node.props.some(isVSlot) &&\r\n (vFor = findDir(node, 'for'))) {\r\n const result = (vFor.parseResult = parseForExpression(vFor.exp, context));\r\n if (result) {\r\n const { value, key, index } = result;\r\n const { addIdentifiers, removeIdentifiers } = context;\r\n value && addIdentifiers(value);\r\n key && addIdentifiers(key);\r\n index && addIdentifiers(index);\r\n return () => {\r\n value && removeIdentifiers(value);\r\n key && removeIdentifiers(key);\r\n index && removeIdentifiers(index);\r\n };\r\n }\r\n }\r\n};\r\nconst buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);\r\n// Instead of being a DirectiveTransform, v-slot processing is called during\r\n// transformElement to build the slots object for a component.\r\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\r\n context.helper(WITH_CTX);\r\n const { children, loc } = node;\r\n const slotsProperties = [];\r\n const dynamicSlots = [];\r\n // If the slot is inside a v-for or another v-slot, force it to be dynamic\r\n // since it likely uses a scope variable.\r\n let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\r\n // 1. Check for slot with slotProps on component itself.\r\n // <Comp v-slot=\"{ prop }\"/>\r\n const onComponentSlot = findDir(node, 'slot', true);\r\n if (onComponentSlot) {\r\n const { arg, exp } = onComponentSlot;\r\n if (arg && !isStaticExp(arg)) {\r\n hasDynamicSlots = true;\r\n }\r\n slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));\r\n }\r\n // 2. Iterate through children and check for template slots\r\n // <template v-slot:foo=\"{ prop }\">\r\n let hasTemplateSlots = false;\r\n let hasNamedDefaultSlot = false;\r\n const implicitDefaultChildren = [];\r\n const seenSlotNames = new Set();\r\n for (let i = 0; i < children.length; i++) {\r\n const slotElement = children[i];\r\n let slotDir;\r\n if (!isTemplateNode(slotElement) ||\r\n !(slotDir = findDir(slotElement, 'slot', true))) {\r\n // not a <template v-slot>, skip.\r\n if (slotElement.type !== 3 /* COMMENT */) {\r\n implicitDefaultChildren.push(slotElement);\r\n }\r\n continue;\r\n }\r\n if (onComponentSlot) {\r\n // already has on-component slot - this is incorrect usage.\r\n context.onError(createCompilerError(37 /* X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));\r\n break;\r\n }\r\n hasTemplateSlots = true;\r\n const { children: slotChildren, loc: slotLoc } = slotElement;\r\n const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;\r\n // check if name is dynamic.\r\n let staticSlotName;\r\n if (isStaticExp(slotName)) {\r\n staticSlotName = slotName ? slotName.content : `default`;\r\n }\r\n else {\r\n hasDynamicSlots = true;\r\n }\r\n const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);\r\n // check if this slot is conditional (v-if/v-for)\r\n let vIf;\r\n let vElse;\r\n let vFor;\r\n if ((vIf = findDir(slotElement, 'if'))) {\r\n hasDynamicSlots = true;\r\n dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback));\r\n }\r\n else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {\r\n // find adjacent v-if\r\n let j = i;\r\n let prev;\r\n while (j--) {\r\n prev = children[j];\r\n if (prev.type !== 3 /* COMMENT */) {\r\n break;\r\n }\r\n }\r\n if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {\r\n // remove node\r\n children.splice(i, 1);\r\n i--;\r\n // attach this slot to previous conditional\r\n let conditional = dynamicSlots[dynamicSlots.length - 1];\r\n while (conditional.alternate.type === 19 /* JS_CONDITIONAL_EXPRESSION */) {\r\n conditional = conditional.alternate;\r\n }\r\n conditional.alternate = vElse.exp\r\n ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction), defaultFallback)\r\n : buildDynamicSlot(slotName, slotFunction);\r\n }\r\n else {\r\n context.onError(createCompilerError(30 /* X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));\r\n }\r\n }\r\n else if ((vFor = findDir(slotElement, 'for'))) {\r\n hasDynamicSlots = true;\r\n const parseResult = vFor.parseResult ||\r\n parseForExpression(vFor.exp, context);\r\n if (parseResult) {\r\n // Render the dynamic slots as an array and add it to the createSlot()\r\n // args. The runtime knows how to handle it appropriately.\r\n dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [\r\n parseResult.source,\r\n createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)\r\n ]));\r\n }\r\n else {\r\n context.onError(createCompilerError(32 /* X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));\r\n }\r\n }\r\n else {\r\n // check duplicate static names\r\n if (staticSlotName) {\r\n if (seenSlotNames.has(staticSlotName)) {\r\n context.onError(createCompilerError(38 /* X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));\r\n continue;\r\n }\r\n seenSlotNames.add(staticSlotName);\r\n if (staticSlotName === 'default') {\r\n hasNamedDefaultSlot = true;\r\n }\r\n }\r\n slotsProperties.push(createObjectProperty(slotName, slotFunction));\r\n }\r\n }\r\n if (!onComponentSlot) {\r\n const buildDefaultSlotProperty = (props, children) => {\r\n const fn = buildSlotFn(props, children, loc);\r\n if (context.compatConfig) {\r\n fn.isNonScopedSlot = true;\r\n }\r\n return createObjectProperty(`default`, fn);\r\n };\r\n if (!hasTemplateSlots) {\r\n // implicit default slot (on component)\r\n slotsProperties.push(buildDefaultSlotProperty(undefined, children));\r\n }\r\n else if (implicitDefaultChildren.length &&\r\n // #3766\r\n // with whitespace: 'preserve', whitespaces between slots will end up in\r\n // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\r\n implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {\r\n // implicit default slot (mixed with named slots)\r\n if (hasNamedDefaultSlot) {\r\n context.onError(createCompilerError(39 /* X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));\r\n }\r\n else {\r\n slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));\r\n }\r\n }\r\n }\r\n const slotFlag = hasDynamicSlots\r\n ? 2 /* DYNAMIC */\r\n : hasForwardedSlots(node.children)\r\n ? 3 /* FORWARDED */\r\n : 1 /* STABLE */;\r\n let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`, \r\n // 2 = compiled but dynamic = can skip normalization, but must run diff\r\n // 1 = compiled and static = can skip normalization AND diff as optimized\r\n createSimpleExpression(slotFlag + ((process.env.NODE_ENV !== 'production') ? ` /* ${slotFlagsText[slotFlag]} */` : ``), false))), loc);\r\n if (dynamicSlots.length) {\r\n slots = createCallExpression(context.helper(CREATE_SLOTS), [\r\n slots,\r\n createArrayExpression(dynamicSlots)\r\n ]);\r\n }\r\n return {\r\n slots,\r\n hasDynamicSlots\r\n };\r\n}\r\nfunction buildDynamicSlot(name, fn) {\r\n return createObjectExpression([\r\n createObjectProperty(`name`, name),\r\n createObjectProperty(`fn`, fn)\r\n ]);\r\n}\r\nfunction hasForwardedSlots(children) {\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n switch (child.type) {\r\n case 1 /* ELEMENT */:\r\n if (child.tagType === 2 /* SLOT */ ||\r\n hasForwardedSlots(child.children)) {\r\n return true;\r\n }\r\n break;\r\n case 9 /* IF */:\r\n if (hasForwardedSlots(child.branches))\r\n return true;\r\n break;\r\n case 10 /* IF_BRANCH */:\r\n case 11 /* FOR */:\r\n if (hasForwardedSlots(child.children))\r\n return true;\r\n break;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction isNonWhitespaceContent(node) {\r\n if (node.type !== 2 /* TEXT */ && node.type !== 12 /* TEXT_CALL */)\r\n return true;\r\n return node.type === 2 /* TEXT */\r\n ? !!node.content.trim()\r\n : isNonWhitespaceContent(node.content);\r\n}\n\n// some directive transforms (e.g. v-model) may return a symbol for runtime\r\n// import, which should be used instead of a resolveDirective call.\r\nconst directiveImportMap = new WeakMap();\r\n// generate a JavaScript AST for this element's codegen\r\nconst transformElement = (node, context) => {\r\n // perform the work on exit, after all child expressions have been\r\n // processed and merged.\r\n return function postTransformElement() {\r\n node = context.currentNode;\r\n if (!(node.type === 1 /* ELEMENT */ &&\r\n (node.tagType === 0 /* ELEMENT */ ||\r\n node.tagType === 1 /* COMPONENT */))) {\r\n return;\r\n }\r\n const { tag, props } = node;\r\n const isComponent = node.tagType === 1 /* COMPONENT */;\r\n // The goal of the transform is to create a codegenNode implementing the\r\n // VNodeCall interface.\r\n let vnodeTag = isComponent\r\n ? resolveComponentType(node, context)\r\n : `\"${tag}\"`;\r\n const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\r\n let vnodeProps;\r\n let vnodeChildren;\r\n let vnodePatchFlag;\r\n let patchFlag = 0;\r\n let vnodeDynamicProps;\r\n let dynamicPropNames;\r\n let vnodeDirectives;\r\n let shouldUseBlock = \r\n // dynamic component may resolve to plain elements\r\n isDynamicComponent ||\r\n vnodeTag === TELEPORT ||\r\n vnodeTag === SUSPENSE ||\r\n (!isComponent &&\r\n // <svg> and <foreignObject> must be forced into blocks so that block\r\n // updates inside get proper isSVG flag at runtime. (#639, #643)\r\n // This is technically web-specific, but splitting the logic out of core\r\n // leads to too much unnecessary complexity.\r\n (tag === 'svg' ||\r\n tag === 'foreignObject' ||\r\n // #938: elements with dynamic keys should be forced into blocks\r\n findProp(node, 'key', true)));\r\n // props\r\n if (props.length > 0) {\r\n const propsBuildResult = buildProps(node, context);\r\n vnodeProps = propsBuildResult.props;\r\n patchFlag = propsBuildResult.patchFlag;\r\n dynamicPropNames = propsBuildResult.dynamicPropNames;\r\n const directives = propsBuildResult.directives;\r\n vnodeDirectives =\r\n directives && directives.length\r\n ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))\r\n : undefined;\r\n }\r\n // children\r\n if (node.children.length > 0) {\r\n if (vnodeTag === KEEP_ALIVE) {\r\n // Although a built-in component, we compile KeepAlive with raw children\r\n // instead of slot functions so that it can be used inside Transition\r\n // or other Transition-wrapping HOCs.\r\n // To ensure correct updates with block optimizations, we need to:\r\n // 1. Force keep-alive into a block. This avoids its children being\r\n // collected by a parent block.\r\n shouldUseBlock = true;\r\n // 2. Force keep-alive to always be updated, since it uses raw children.\r\n patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n if ((process.env.NODE_ENV !== 'production') && node.children.length > 1) {\r\n context.onError(createCompilerError(45 /* X_KEEP_ALIVE_INVALID_CHILDREN */, {\r\n start: node.children[0].loc.start,\r\n end: node.children[node.children.length - 1].loc.end,\r\n source: ''\r\n }));\r\n }\r\n }\r\n const shouldBuildAsSlots = isComponent &&\r\n // Teleport is not a real component and has dedicated runtime handling\r\n vnodeTag !== TELEPORT &&\r\n // explained above.\r\n vnodeTag !== KEEP_ALIVE;\r\n if (shouldBuildAsSlots) {\r\n const { slots, hasDynamicSlots } = buildSlots(node, context);\r\n vnodeChildren = slots;\r\n if (hasDynamicSlots) {\r\n patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n }\r\n }\r\n else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\r\n const child = node.children[0];\r\n const type = child.type;\r\n // check for dynamic text children\r\n const hasDynamicTextChild = type === 5 /* INTERPOLATION */ ||\r\n type === 8 /* COMPOUND_EXPRESSION */;\r\n if (hasDynamicTextChild &&\r\n getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n patchFlag |= 1 /* TEXT */;\r\n }\r\n // pass directly if the only child is a text node\r\n // (plain / interpolation / expression)\r\n if (hasDynamicTextChild || type === 2 /* TEXT */) {\r\n vnodeChildren = child;\r\n }\r\n else {\r\n vnodeChildren = node.children;\r\n }\r\n }\r\n else {\r\n vnodeChildren = node.children;\r\n }\r\n }\r\n // patchFlag & dynamicPropNames\r\n if (patchFlag !== 0) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (patchFlag < 0) {\r\n // special flags (negative and mutually exclusive)\r\n vnodePatchFlag = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\r\n }\r\n else {\r\n // bitwise flags\r\n const flagNames = Object.keys(PatchFlagNames)\r\n .map(Number)\r\n .filter(n => n > 0 && patchFlag & n)\r\n .map(n => PatchFlagNames[n])\r\n .join(`, `);\r\n vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;\r\n }\r\n }\r\n else {\r\n vnodePatchFlag = String(patchFlag);\r\n }\r\n if (dynamicPropNames && dynamicPropNames.length) {\r\n vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\r\n }\r\n }\r\n node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);\r\n };\r\n};\r\nfunction resolveComponentType(node, context, ssr = false) {\r\n let { tag } = node;\r\n // 1. dynamic component\r\n const isExplicitDynamic = isComponentTag(tag);\r\n const isProp = findProp(node, 'is');\r\n if (isProp) {\r\n if (isExplicitDynamic ||\r\n (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))) {\r\n const exp = isProp.type === 6 /* ATTRIBUTE */\r\n ? isProp.value && createSimpleExpression(isProp.value.content, true)\r\n : isProp.exp;\r\n if (exp) {\r\n return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n exp\r\n ]);\r\n }\r\n }\r\n else if (isProp.type === 6 /* ATTRIBUTE */ &&\r\n isProp.value.content.startsWith('vue:')) {\r\n // <button is=\"vue:xxx\">\r\n // if not <component>, only is value that starts with \"vue:\" will be\r\n // treated as component by the parse phase and reach here, unless it's\r\n // compat mode where all is values are considered components\r\n tag = isProp.value.content.slice(4);\r\n }\r\n }\r\n // 1.5 v-is (TODO: Deprecate)\r\n const isDir = !isExplicitDynamic && findDir(node, 'is');\r\n if (isDir && isDir.exp) {\r\n return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\r\n isDir.exp\r\n ]);\r\n }\r\n // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)\r\n const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\r\n if (builtIn) {\r\n // built-ins are simply fallthroughs / have special handling during ssr\r\n // so we don't need to import their runtime equivalents\r\n if (!ssr)\r\n context.helper(builtIn);\r\n return builtIn;\r\n }\r\n // 5. user component (resolve)\r\n context.helper(RESOLVE_COMPONENT);\r\n context.components.add(tag);\r\n return toValidAssetId(tag, `component`);\r\n}\r\nfunction buildProps(node, context, props = node.props, ssr = false) {\r\n const { tag, loc: elementLoc } = node;\r\n const isComponent = node.tagType === 1 /* COMPONENT */;\r\n let properties = [];\r\n const mergeArgs = [];\r\n const runtimeDirectives = [];\r\n // patchFlag analysis\r\n let patchFlag = 0;\r\n let hasRef = false;\r\n let hasClassBinding = false;\r\n let hasStyleBinding = false;\r\n let hasHydrationEventBinding = false;\r\n let hasDynamicKeys = false;\r\n let hasVnodeHook = false;\r\n const dynamicPropNames = [];\r\n const analyzePatchFlag = ({ key, value }) => {\r\n if (isStaticExp(key)) {\r\n const name = key.content;\r\n const isEventHandler = isOn(name);\r\n if (!isComponent &&\r\n isEventHandler &&\r\n // omit the flag for click handlers because hydration gives click\r\n // dedicated fast path.\r\n name.toLowerCase() !== 'onclick' &&\r\n // omit v-model handlers\r\n name !== 'onUpdate:modelValue' &&\r\n // omit onVnodeXXX hooks\r\n !isReservedProp(name)) {\r\n hasHydrationEventBinding = true;\r\n }\r\n if (isEventHandler && isReservedProp(name)) {\r\n hasVnodeHook = true;\r\n }\r\n if (value.type === 20 /* JS_CACHE_EXPRESSION */ ||\r\n ((value.type === 4 /* SIMPLE_EXPRESSION */ ||\r\n value.type === 8 /* COMPOUND_EXPRESSION */) &&\r\n getConstantType(value, context) > 0)) {\r\n // skip if the prop is a cached handler or has constant value\r\n return;\r\n }\r\n if (name === 'ref') {\r\n hasRef = true;\r\n }\r\n else if (name === 'class') {\r\n hasClassBinding = true;\r\n }\r\n else if (name === 'style') {\r\n hasStyleBinding = true;\r\n }\r\n else if (name !== 'key' && !dynamicPropNames.includes(name)) {\r\n dynamicPropNames.push(name);\r\n }\r\n // treat the dynamic class and style binding of the component as dynamic props\r\n if (isComponent &&\r\n (name === 'class' || name === 'style') &&\r\n !dynamicPropNames.includes(name)) {\r\n dynamicPropNames.push(name);\r\n }\r\n }\r\n else {\r\n hasDynamicKeys = true;\r\n }\r\n };\r\n for (let i = 0; i < props.length; i++) {\r\n // static attribute\r\n const prop = props[i];\r\n if (prop.type === 6 /* ATTRIBUTE */) {\r\n const { loc, name, value } = prop;\r\n let valueNode = createSimpleExpression(value ? value.content : '', true, value ? value.loc : loc);\r\n if (name === 'ref') {\r\n hasRef = true;\r\n }\r\n // skip is on <component>, or is=\"vue:xxx\"\r\n if (name === 'is' &&\r\n (isComponentTag(tag) ||\r\n (value && value.content.startsWith('vue:')) ||\r\n (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context)))) {\r\n continue;\r\n }\r\n properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), valueNode));\r\n }\r\n else {\r\n // directives\r\n const { name, arg, exp, loc } = prop;\r\n const isVBind = name === 'bind';\r\n const isVOn = name === 'on';\r\n // skip v-slot - it is handled by its dedicated transform.\r\n if (name === 'slot') {\r\n if (!isComponent) {\r\n context.onError(createCompilerError(40 /* X_V_SLOT_MISPLACED */, loc));\r\n }\r\n continue;\r\n }\r\n // skip v-once/v-memo - they are handled by dedicated transforms.\r\n if (name === 'once' || name === 'memo') {\r\n continue;\r\n }\r\n // skip v-is and :is on <component>\r\n if (name === 'is' ||\r\n (isVBind &&\r\n isBindKey(arg, 'is') &&\r\n (isComponentTag(tag) ||\r\n (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* COMPILER_IS_ON_ELEMENT */, context))))) {\r\n continue;\r\n }\r\n // skip v-on in SSR compilation\r\n if (isVOn && ssr) {\r\n continue;\r\n }\r\n // special case for v-bind and v-on with no argument\r\n if (!arg && (isVBind || isVOn)) {\r\n hasDynamicKeys = true;\r\n if (exp) {\r\n if (properties.length) {\r\n mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n properties = [];\r\n }\r\n if (isVBind) {\r\n {\r\n // 2.x v-bind object order compat\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const hasOverridableKeys = mergeArgs.some(arg => {\r\n if (arg.type === 15 /* JS_OBJECT_EXPRESSION */) {\r\n return arg.properties.some(({ key }) => {\r\n if (key.type !== 4 /* SIMPLE_EXPRESSION */ ||\r\n !key.isStatic) {\r\n return true;\r\n }\r\n return (key.content !== 'class' &&\r\n key.content !== 'style' &&\r\n !isOn(key.content));\r\n });\r\n }\r\n else {\r\n // dynamic expression\r\n return true;\r\n }\r\n });\r\n if (hasOverridableKeys) {\r\n checkCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context, loc);\r\n }\r\n }\r\n if (isCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* COMPILER_V_BIND_OBJECT_ORDER */, context)) {\r\n mergeArgs.unshift(exp);\r\n continue;\r\n }\r\n }\r\n mergeArgs.push(exp);\r\n }\r\n else {\r\n // v-on=\"obj\" -> toHandlers(obj)\r\n mergeArgs.push({\r\n type: 14 /* JS_CALL_EXPRESSION */,\r\n loc,\r\n callee: context.helper(TO_HANDLERS),\r\n arguments: [exp]\r\n });\r\n }\r\n }\r\n else {\r\n context.onError(createCompilerError(isVBind\r\n ? 34 /* X_V_BIND_NO_EXPRESSION */\r\n : 35 /* X_V_ON_NO_EXPRESSION */, loc));\r\n }\r\n continue;\r\n }\r\n const directiveTransform = context.directiveTransforms[name];\r\n if (directiveTransform) {\r\n // has built-in directive transform.\r\n const { props, needRuntime } = directiveTransform(prop, node, context);\r\n !ssr && props.forEach(analyzePatchFlag);\r\n properties.push(...props);\r\n if (needRuntime) {\r\n runtimeDirectives.push(prop);\r\n if (isSymbol(needRuntime)) {\r\n directiveImportMap.set(prop, needRuntime);\r\n }\r\n }\r\n }\r\n else {\r\n // no built-in transform, this is a user custom directive.\r\n runtimeDirectives.push(prop);\r\n }\r\n }\r\n if (prop.type === 6 /* ATTRIBUTE */ &&\r\n prop.name === 'ref' &&\r\n context.scopes.vFor > 0 &&\r\n checkCompatEnabled(\"COMPILER_V_FOR_REF\" /* COMPILER_V_FOR_REF */, context, prop.loc)) {\r\n properties.push(createObjectProperty(createSimpleExpression('refInFor', true), createSimpleExpression('true', false)));\r\n }\r\n }\r\n let propsExpression = undefined;\r\n // has v-bind=\"object\" or v-on=\"object\", wrap with mergeProps\r\n if (mergeArgs.length) {\r\n if (properties.length) {\r\n mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\r\n }\r\n if (mergeArgs.length > 1) {\r\n propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);\r\n }\r\n else {\r\n // single v-bind with nothing else - no need for a mergeProps call\r\n propsExpression = mergeArgs[0];\r\n }\r\n }\r\n else if (properties.length) {\r\n propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);\r\n }\r\n // patchFlag analysis\r\n if (hasDynamicKeys) {\r\n patchFlag |= 16 /* FULL_PROPS */;\r\n }\r\n else {\r\n if (hasClassBinding && !isComponent) {\r\n patchFlag |= 2 /* CLASS */;\r\n }\r\n if (hasStyleBinding && !isComponent) {\r\n patchFlag |= 4 /* STYLE */;\r\n }\r\n if (dynamicPropNames.length) {\r\n patchFlag |= 8 /* PROPS */;\r\n }\r\n if (hasHydrationEventBinding) {\r\n patchFlag |= 32 /* HYDRATE_EVENTS */;\r\n }\r\n }\r\n if ((patchFlag === 0 || patchFlag === 32 /* HYDRATE_EVENTS */) &&\r\n (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\r\n patchFlag |= 512 /* NEED_PATCH */;\r\n }\r\n // pre-normalize props, SSR is skipped for now\r\n if (!context.inSSR && propsExpression) {\r\n switch (propsExpression.type) {\r\n case 15 /* JS_OBJECT_EXPRESSION */:\r\n // means that there is no v-bind,\r\n // but still need to deal with dynamic key binding\r\n let classKeyIndex = -1;\r\n let styleKeyIndex = -1;\r\n let hasDynamicKey = false;\r\n for (let i = 0; i < propsExpression.properties.length; i++) {\r\n const key = propsExpression.properties[i].key;\r\n if (isStaticExp(key)) {\r\n if (key.content === 'class') {\r\n classKeyIndex = i;\r\n }\r\n else if (key.content === 'style') {\r\n styleKeyIndex = i;\r\n }\r\n }\r\n else if (!key.isHandlerKey) {\r\n hasDynamicKey = true;\r\n }\r\n }\r\n const classProp = propsExpression.properties[classKeyIndex];\r\n const styleProp = propsExpression.properties[styleKeyIndex];\r\n // no dynamic key\r\n if (!hasDynamicKey) {\r\n if (classProp && !isStaticExp(classProp.value)) {\r\n classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);\r\n }\r\n if (styleProp &&\r\n !isStaticExp(styleProp.value) &&\r\n // the static style is compiled into an object,\r\n // so use `hasStyleBinding` to ensure that it is a dynamic style binding\r\n (hasStyleBinding ||\r\n // v-bind:style and style both exist,\r\n // v-bind:style with static literal object\r\n styleProp.value.type === 17 /* JS_ARRAY_EXPRESSION */)) {\r\n styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);\r\n }\r\n }\r\n else {\r\n // dynamic key binding, wrap with `normalizeProps`\r\n propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);\r\n }\r\n break;\r\n case 14 /* JS_CALL_EXPRESSION */:\r\n // mergeProps call, do nothing\r\n break;\r\n default:\r\n // single v-bind\r\n propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [\r\n createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\r\n propsExpression\r\n ])\r\n ]);\r\n break;\r\n }\r\n }\r\n return {\r\n props: propsExpression,\r\n directives: runtimeDirectives,\r\n patchFlag,\r\n dynamicPropNames\r\n };\r\n}\r\n// Dedupe props in an object literal.\r\n// Literal duplicated attributes would have been warned during the parse phase,\r\n// however, it's possible to encounter duplicated `onXXX` handlers with different\r\n// modifiers. We also need to merge static and dynamic class / style attributes.\r\n// - onXXX handlers / style: merge into array\r\n// - class: merge into single expression with concatenation\r\nfunction dedupeProperties(properties) {\r\n const knownProps = new Map();\r\n const deduped = [];\r\n for (let i = 0; i < properties.length; i++) {\r\n const prop = properties[i];\r\n // dynamic keys are always allowed\r\n if (prop.key.type === 8 /* COMPOUND_EXPRESSION */ || !prop.key.isStatic) {\r\n deduped.push(prop);\r\n continue;\r\n }\r\n const name = prop.key.content;\r\n const existing = knownProps.get(name);\r\n if (existing) {\r\n if (name === 'style' || name === 'class' || isOn(name)) {\r\n mergeAsArray(existing, prop);\r\n }\r\n // unexpected duplicate, should have emitted error during parse\r\n }\r\n else {\r\n knownProps.set(name, prop);\r\n deduped.push(prop);\r\n }\r\n }\r\n return deduped;\r\n}\r\nfunction mergeAsArray(existing, incoming) {\r\n if (existing.value.type === 17 /* JS_ARRAY_EXPRESSION */) {\r\n existing.value.elements.push(incoming.value);\r\n }\r\n else {\r\n existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);\r\n }\r\n}\r\nfunction buildDirectiveArgs(dir, context) {\r\n const dirArgs = [];\r\n const runtime = directiveImportMap.get(dir);\r\n if (runtime) {\r\n // built-in directive with runtime\r\n dirArgs.push(context.helperString(runtime));\r\n }\r\n else {\r\n {\r\n // inject statement for resolving directive\r\n context.helper(RESOLVE_DIRECTIVE);\r\n context.directives.add(dir.name);\r\n dirArgs.push(toValidAssetId(dir.name, `directive`));\r\n }\r\n }\r\n const { loc } = dir;\r\n if (dir.exp)\r\n dirArgs.push(dir.exp);\r\n if (dir.arg) {\r\n if (!dir.exp) {\r\n dirArgs.push(`void 0`);\r\n }\r\n dirArgs.push(dir.arg);\r\n }\r\n if (Object.keys(dir.modifiers).length) {\r\n if (!dir.arg) {\r\n if (!dir.exp) {\r\n dirArgs.push(`void 0`);\r\n }\r\n dirArgs.push(`void 0`);\r\n }\r\n const trueExpression = createSimpleExpression(`true`, false, loc);\r\n dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));\r\n }\r\n return createArrayExpression(dirArgs, dir.loc);\r\n}\r\nfunction stringifyDynamicPropNames(props) {\r\n let propsNamesString = `[`;\r\n for (let i = 0, l = props.length; i < l; i++) {\r\n propsNamesString += JSON.stringify(props[i]);\r\n if (i < l - 1)\r\n propsNamesString += ', ';\r\n }\r\n return propsNamesString + `]`;\r\n}\r\nfunction isComponentTag(tag) {\r\n return tag[0].toLowerCase() + tag.slice(1) === 'component';\r\n}\n\n(process.env.NODE_ENV !== 'production')\r\n ? Object.freeze({})\r\n : {};\r\n(process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst cacheStringFunction = (fn) => {\r\n const cache = Object.create(null);\r\n return ((str) => {\r\n const hit = cache[str];\r\n return hit || (cache[str] = fn(str));\r\n });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\n\nconst transformSlotOutlet = (node, context) => {\r\n if (isSlotOutlet(node)) {\r\n const { children, loc } = node;\r\n const { slotName, slotProps } = processSlotOutlet(node, context);\r\n const slotArgs = [\r\n context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\r\n slotName,\r\n '{}',\r\n 'undefined',\r\n 'true'\r\n ];\r\n let expectedLen = 2;\r\n if (slotProps) {\r\n slotArgs[2] = slotProps;\r\n expectedLen = 3;\r\n }\r\n if (children.length) {\r\n slotArgs[3] = createFunctionExpression([], children, false, false, loc);\r\n expectedLen = 4;\r\n }\r\n if (context.scopeId && !context.slotted) {\r\n expectedLen = 5;\r\n }\r\n slotArgs.splice(expectedLen); // remove unused arguments\r\n node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);\r\n }\r\n};\r\nfunction processSlotOutlet(node, context) {\r\n let slotName = `\"default\"`;\r\n let slotProps = undefined;\r\n const nonNameProps = [];\r\n for (let i = 0; i < node.props.length; i++) {\r\n const p = node.props[i];\r\n if (p.type === 6 /* ATTRIBUTE */) {\r\n if (p.value) {\r\n if (p.name === 'name') {\r\n slotName = JSON.stringify(p.value.content);\r\n }\r\n else {\r\n p.name = camelize(p.name);\r\n nonNameProps.push(p);\r\n }\r\n }\r\n }\r\n else {\r\n if (p.name === 'bind' && isBindKey(p.arg, 'name')) {\r\n if (p.exp)\r\n slotName = p.exp;\r\n }\r\n else {\r\n if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {\r\n p.arg.content = camelize(p.arg.content);\r\n }\r\n nonNameProps.push(p);\r\n }\r\n }\r\n }\r\n if (nonNameProps.length > 0) {\r\n const { props, directives } = buildProps(node, context, nonNameProps);\r\n slotProps = props;\r\n if (directives.length) {\r\n context.onError(createCompilerError(36 /* X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));\r\n }\r\n }\r\n return {\r\n slotName,\r\n slotProps\r\n };\r\n}\n\nconst fnExpRE = /^\\s*([\\w$_]+|(async\\s*)?\\([^)]*?\\))\\s*=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\r\nconst transformOn = (dir, node, context, augmentor) => {\r\n const { loc, modifiers, arg } = dir;\r\n if (!dir.exp && !modifiers.length) {\r\n context.onError(createCompilerError(35 /* X_V_ON_NO_EXPRESSION */, loc));\r\n }\r\n let eventName;\r\n if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n if (arg.isStatic) {\r\n const rawName = arg.content;\r\n // for all event listeners, auto convert it to camelCase. See issue #2249\r\n eventName = createSimpleExpression(toHandlerKey(camelize$1(rawName)), true, arg.loc);\r\n }\r\n else {\r\n // #2388\r\n eventName = createCompoundExpression([\r\n `${context.helperString(TO_HANDLER_KEY)}(`,\r\n arg,\r\n `)`\r\n ]);\r\n }\r\n }\r\n else {\r\n // already a compound expression.\r\n eventName = arg;\r\n eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\r\n eventName.children.push(`)`);\r\n }\r\n // handler processing\r\n let exp = dir.exp;\r\n if (exp && !exp.content.trim()) {\r\n exp = undefined;\r\n }\r\n let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\r\n if (exp) {\r\n const isMemberExp = isMemberExpression(exp.content);\r\n const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));\r\n const hasMultipleStatements = exp.content.includes(`;`);\r\n if ((process.env.NODE_ENV !== 'production') && true) {\r\n validateBrowserExpression(exp, context, false, hasMultipleStatements);\r\n }\r\n if (isInlineStatement || (shouldCache && isMemberExp)) {\r\n // wrap inline statement in a function expression\r\n exp = createCompoundExpression([\r\n `${isInlineStatement\r\n ? `$event`\r\n : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\r\n exp,\r\n hasMultipleStatements ? `}` : `)`\r\n ]);\r\n }\r\n }\r\n let ret = {\r\n props: [\r\n createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))\r\n ]\r\n };\r\n // apply extended compiler augmentor\r\n if (augmentor) {\r\n ret = augmentor(ret);\r\n }\r\n if (shouldCache) {\r\n // cache handlers so that it's always the same handler being passed down.\r\n // this avoids unnecessary re-renders when users use inline handlers on\r\n // components.\r\n ret.props[0].value = context.cache(ret.props[0].value);\r\n }\r\n // mark the key as handler for props normalization check\r\n ret.props.forEach(p => (p.key.isHandlerKey = true));\r\n return ret;\r\n};\n\n// v-bind without arg is handled directly in ./transformElements.ts due to it affecting\r\n// codegen for the entire props object. This transform here is only for v-bind\r\n// *with* args.\r\nconst transformBind = (dir, _node, context) => {\r\n const { exp, modifiers, loc } = dir;\r\n const arg = dir.arg;\r\n if (arg.type !== 4 /* SIMPLE_EXPRESSION */) {\r\n arg.children.unshift(`(`);\r\n arg.children.push(`) || \"\"`);\r\n }\r\n else if (!arg.isStatic) {\r\n arg.content = `${arg.content} || \"\"`;\r\n }\r\n // .sync is replaced by v-model:arg\r\n if (modifiers.includes('camel')) {\r\n if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n if (arg.isStatic) {\r\n arg.content = camelize$1(arg.content);\r\n }\r\n else {\r\n arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\r\n }\r\n }\r\n else {\r\n arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\r\n arg.children.push(`)`);\r\n }\r\n }\r\n if (!context.inSSR) {\r\n if (modifiers.includes('prop')) {\r\n injectPrefix(arg, '.');\r\n }\r\n if (modifiers.includes('attr')) {\r\n injectPrefix(arg, '^');\r\n }\r\n }\r\n if (!exp ||\r\n (exp.type === 4 /* SIMPLE_EXPRESSION */ && !exp.content.trim())) {\r\n context.onError(createCompilerError(34 /* X_V_BIND_NO_EXPRESSION */, loc));\r\n return {\r\n props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]\r\n };\r\n }\r\n return {\r\n props: [createObjectProperty(arg, exp)]\r\n };\r\n};\r\nconst injectPrefix = (arg, prefix) => {\r\n if (arg.type === 4 /* SIMPLE_EXPRESSION */) {\r\n if (arg.isStatic) {\r\n arg.content = prefix + arg.content;\r\n }\r\n else {\r\n arg.content = `\\`${prefix}\\${${arg.content}}\\``;\r\n }\r\n }\r\n else {\r\n arg.children.unshift(`'${prefix}' + (`);\r\n arg.children.push(`)`);\r\n }\r\n};\n\n// Merge adjacent text nodes and expressions into a single expression\r\n// e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.\r\nconst transformText = (node, context) => {\r\n if (node.type === 0 /* ROOT */ ||\r\n node.type === 1 /* ELEMENT */ ||\r\n node.type === 11 /* FOR */ ||\r\n node.type === 10 /* IF_BRANCH */) {\r\n // perform the transform on node exit so that all expressions have already\r\n // been processed.\r\n return () => {\r\n const children = node.children;\r\n let currentContainer = undefined;\r\n let hasText = false;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isText(child)) {\r\n hasText = true;\r\n for (let j = i + 1; j < children.length; j++) {\r\n const next = children[j];\r\n if (isText(next)) {\r\n if (!currentContainer) {\r\n currentContainer = children[i] = {\r\n type: 8 /* COMPOUND_EXPRESSION */,\r\n loc: child.loc,\r\n children: [child]\r\n };\r\n }\r\n // merge adjacent text node into current\r\n currentContainer.children.push(` + `, next);\r\n children.splice(j, 1);\r\n j--;\r\n }\r\n else {\r\n currentContainer = undefined;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!hasText ||\r\n // if this is a plain element with a single text child, leave it\r\n // as-is since the runtime has dedicated fast path for this by directly\r\n // setting textContent of the element.\r\n // for component root it's always normalized anyway.\r\n (children.length === 1 &&\r\n (node.type === 0 /* ROOT */ ||\r\n (node.type === 1 /* ELEMENT */ &&\r\n node.tagType === 0 /* ELEMENT */ &&\r\n // #3756\r\n // custom directives can potentially add DOM elements arbitrarily,\r\n // we need to avoid setting textContent of the element at runtime\r\n // to avoid accidentally overwriting the DOM elements added\r\n // by the user through custom directives.\r\n !node.props.find(p => p.type === 7 /* DIRECTIVE */ &&\r\n !context.directiveTransforms[p.name]) &&\r\n // in compat mode, <template> tags with no special directives\r\n // will be rendered as a fragment so its children must be\r\n // converted into vnodes.\r\n !(node.tag === 'template'))))) {\r\n return;\r\n }\r\n // pre-convert text nodes into createTextVNode(text) calls to avoid\r\n // runtime normalization.\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isText(child) || child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n const callArgs = [];\r\n // createTextVNode defaults to single whitespace, so if it is a\r\n // single space the code could be an empty call to save bytes.\r\n if (child.type !== 2 /* TEXT */ || child.content !== ' ') {\r\n callArgs.push(child);\r\n }\r\n // mark dynamic text with flag so it gets patched inside a block\r\n if (!context.ssr &&\r\n getConstantType(child, context) === 0 /* NOT_CONSTANT */) {\r\n callArgs.push(1 /* TEXT */ +\r\n ((process.env.NODE_ENV !== 'production') ? ` /* ${PatchFlagNames[1 /* TEXT */]} */` : ``));\r\n }\r\n children[i] = {\r\n type: 12 /* TEXT_CALL */,\r\n content: child,\r\n loc: child.loc,\r\n codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)\r\n };\r\n }\r\n }\r\n };\r\n }\r\n};\n\nconst seen = new WeakSet();\r\nconst transformOnce = (node, context) => {\r\n if (node.type === 1 /* ELEMENT */ && findDir(node, 'once', true)) {\r\n if (seen.has(node) || context.inVOnce) {\r\n return;\r\n }\r\n seen.add(node);\r\n context.inVOnce = true;\r\n context.helper(SET_BLOCK_TRACKING);\r\n return () => {\r\n context.inVOnce = false;\r\n const cur = context.currentNode;\r\n if (cur.codegenNode) {\r\n cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);\r\n }\r\n };\r\n }\r\n};\n\nconst transformModel = (dir, node, context) => {\r\n const { exp, arg } = dir;\r\n if (!exp) {\r\n context.onError(createCompilerError(41 /* X_V_MODEL_NO_EXPRESSION */, dir.loc));\r\n return createTransformProps();\r\n }\r\n const rawExp = exp.loc.source;\r\n const expString = exp.type === 4 /* SIMPLE_EXPRESSION */ ? exp.content : rawExp;\r\n // im SFC <script setup> inline mode, the exp may have been transformed into\r\n // _unref(exp)\r\n context.bindingMetadata[rawExp];\r\n const maybeRef = !true /* SETUP_CONST */;\r\n if (!expString.trim() ||\r\n (!isMemberExpression(expString) && !maybeRef)) {\r\n context.onError(createCompilerError(42 /* X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));\r\n return createTransformProps();\r\n }\r\n const propName = arg ? arg : createSimpleExpression('modelValue', true);\r\n const eventName = arg\r\n ? isStaticExp(arg)\r\n ? `onUpdate:${arg.content}`\r\n : createCompoundExpression(['\"onUpdate:\" + ', arg])\r\n : `onUpdate:modelValue`;\r\n let assignmentExp;\r\n const eventArg = context.isTS ? `($event: any)` : `$event`;\r\n {\r\n assignmentExp = createCompoundExpression([\r\n `${eventArg} => ((`,\r\n exp,\r\n `) = $event)`\r\n ]);\r\n }\r\n const props = [\r\n // modelValue: foo\r\n createObjectProperty(propName, dir.exp),\r\n // \"onUpdate:modelValue\": $event => (foo = $event)\r\n createObjectProperty(eventName, assignmentExp)\r\n ];\r\n // modelModifiers: { foo: true, \"bar-baz\": true }\r\n if (dir.modifiers.length && node.tagType === 1 /* COMPONENT */) {\r\n const modifiers = dir.modifiers\r\n .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)\r\n .join(`, `);\r\n const modifiersKey = arg\r\n ? isStaticExp(arg)\r\n ? `${arg.content}Modifiers`\r\n : createCompoundExpression([arg, ' + \"Modifiers\"'])\r\n : `modelModifiers`;\r\n props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* CAN_HOIST */)));\r\n }\r\n return createTransformProps(props);\r\n};\r\nfunction createTransformProps(props = []) {\r\n return { props };\r\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\r\nconst transformFilter = (node, context) => {\r\n if (!isCompatEnabled(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context)) {\r\n return;\r\n }\r\n if (node.type === 5 /* INTERPOLATION */) {\r\n // filter rewrite is applied before expression transform so only\r\n // simple expressions are possible at this stage\r\n rewriteFilter(node.content, context);\r\n }\r\n if (node.type === 1 /* ELEMENT */) {\r\n node.props.forEach((prop) => {\r\n if (prop.type === 7 /* DIRECTIVE */ &&\r\n prop.name !== 'for' &&\r\n prop.exp) {\r\n rewriteFilter(prop.exp, context);\r\n }\r\n });\r\n }\r\n};\r\nfunction rewriteFilter(node, context) {\r\n if (node.type === 4 /* SIMPLE_EXPRESSION */) {\r\n parseFilter(node, context);\r\n }\r\n else {\r\n for (let i = 0; i < node.children.length; i++) {\r\n const child = node.children[i];\r\n if (typeof child !== 'object')\r\n continue;\r\n if (child.type === 4 /* SIMPLE_EXPRESSION */) {\r\n parseFilter(child, context);\r\n }\r\n else if (child.type === 8 /* COMPOUND_EXPRESSION */) {\r\n rewriteFilter(node, context);\r\n }\r\n else if (child.type === 5 /* INTERPOLATION */) {\r\n rewriteFilter(child.content, context);\r\n }\r\n }\r\n }\r\n}\r\nfunction parseFilter(node, context) {\r\n const exp = node.content;\r\n let inSingle = false;\r\n let inDouble = false;\r\n let inTemplateString = false;\r\n let inRegex = false;\r\n let curly = 0;\r\n let square = 0;\r\n let paren = 0;\r\n let lastFilterIndex = 0;\r\n let c, prev, i, expression, filters = [];\r\n for (i = 0; i < exp.length; i++) {\r\n prev = c;\r\n c = exp.charCodeAt(i);\r\n if (inSingle) {\r\n if (c === 0x27 && prev !== 0x5c)\r\n inSingle = false;\r\n }\r\n else if (inDouble) {\r\n if (c === 0x22 && prev !== 0x5c)\r\n inDouble = false;\r\n }\r\n else if (inTemplateString) {\r\n if (c === 0x60 && prev !== 0x5c)\r\n inTemplateString = false;\r\n }\r\n else if (inRegex) {\r\n if (c === 0x2f && prev !== 0x5c)\r\n inRegex = false;\r\n }\r\n else if (c === 0x7c && // pipe\r\n exp.charCodeAt(i + 1) !== 0x7c &&\r\n exp.charCodeAt(i - 1) !== 0x7c &&\r\n !curly &&\r\n !square &&\r\n !paren) {\r\n if (expression === undefined) {\r\n // first filter, end of expression\r\n lastFilterIndex = i + 1;\r\n expression = exp.slice(0, i).trim();\r\n }\r\n else {\r\n pushFilter();\r\n }\r\n }\r\n else {\r\n switch (c) {\r\n case 0x22:\r\n inDouble = true;\r\n break; // \"\r\n case 0x27:\r\n inSingle = true;\r\n break; // '\r\n case 0x60:\r\n inTemplateString = true;\r\n break; // `\r\n case 0x28:\r\n paren++;\r\n break; // (\r\n case 0x29:\r\n paren--;\r\n break; // )\r\n case 0x5b:\r\n square++;\r\n break; // [\r\n case 0x5d:\r\n square--;\r\n break; // ]\r\n case 0x7b:\r\n curly++;\r\n break; // {\r\n case 0x7d:\r\n curly--;\r\n break; // }\r\n }\r\n if (c === 0x2f) {\r\n // /\r\n let j = i - 1;\r\n let p;\r\n // find first non-whitespace prev char\r\n for (; j >= 0; j--) {\r\n p = exp.charAt(j);\r\n if (p !== ' ')\r\n break;\r\n }\r\n if (!p || !validDivisionCharRE.test(p)) {\r\n inRegex = true;\r\n }\r\n }\r\n }\r\n }\r\n if (expression === undefined) {\r\n expression = exp.slice(0, i).trim();\r\n }\r\n else if (lastFilterIndex !== 0) {\r\n pushFilter();\r\n }\r\n function pushFilter() {\r\n filters.push(exp.slice(lastFilterIndex, i).trim());\r\n lastFilterIndex = i + 1;\r\n }\r\n if (filters.length) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warnDeprecation(\"COMPILER_FILTER\" /* COMPILER_FILTERS */, context, node.loc);\r\n for (i = 0; i < filters.length; i++) {\r\n expression = wrapFilter(expression, filters[i], context);\r\n }\r\n node.content = expression;\r\n }\r\n}\r\nfunction wrapFilter(exp, filter, context) {\r\n context.helper(RESOLVE_FILTER);\r\n const i = filter.indexOf('(');\r\n if (i < 0) {\r\n context.filters.add(filter);\r\n return `${toValidAssetId(filter, 'filter')}(${exp})`;\r\n }\r\n else {\r\n const name = filter.slice(0, i);\r\n const args = filter.slice(i + 1);\r\n context.filters.add(name);\r\n return `${toValidAssetId(name, 'filter')}(${exp}${args !== ')' ? ',' + args : args}`;\r\n }\r\n}\n\nconst seen$1 = new WeakSet();\r\nconst transformMemo = (node, context) => {\r\n if (node.type === 1 /* ELEMENT */) {\r\n const dir = findDir(node, 'memo');\r\n if (!dir || seen$1.has(node)) {\r\n return;\r\n }\r\n seen$1.add(node);\r\n return () => {\r\n const codegenNode = node.codegenNode ||\r\n context.currentNode.codegenNode;\r\n if (codegenNode && codegenNode.type === 13 /* VNODE_CALL */) {\r\n // non-component sub tree should be turned into a block\r\n if (node.tagType !== 1 /* COMPONENT */) {\r\n makeBlock(codegenNode, context);\r\n }\r\n node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\r\n dir.exp,\r\n createFunctionExpression(undefined, codegenNode),\r\n `_cache`,\r\n String(context.cached++)\r\n ]);\r\n }\r\n };\r\n }\r\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\r\n return [\r\n [\r\n transformOnce,\r\n transformIf,\r\n transformMemo,\r\n transformFor,\r\n ...([transformFilter] ),\r\n ...((process.env.NODE_ENV !== 'production')\r\n ? [transformExpression]\r\n : []),\r\n transformSlotOutlet,\r\n transformElement,\r\n trackSlotScopes,\r\n transformText\r\n ],\r\n {\r\n on: transformOn,\r\n bind: transformBind,\r\n model: transformModel\r\n }\r\n ];\r\n}\r\n// we name it `baseCompile` so that higher order compilers like\r\n// @vue/compiler-dom can export `compile` while re-exporting everything else.\r\nfunction baseCompile(template, options = {}) {\r\n const onError = options.onError || defaultOnError;\r\n const isModuleMode = options.mode === 'module';\r\n /* istanbul ignore if */\r\n {\r\n if (options.prefixIdentifiers === true) {\r\n onError(createCompilerError(46 /* X_PREFIX_ID_NOT_SUPPORTED */));\r\n }\r\n else if (isModuleMode) {\r\n onError(createCompilerError(47 /* X_MODULE_MODE_NOT_SUPPORTED */));\r\n }\r\n }\r\n const prefixIdentifiers = !true ;\r\n if (options.cacheHandlers) {\r\n onError(createCompilerError(48 /* X_CACHE_HANDLER_NOT_SUPPORTED */));\r\n }\r\n if (options.scopeId && !isModuleMode) {\r\n onError(createCompilerError(49 /* X_SCOPE_ID_NOT_SUPPORTED */));\r\n }\r\n const ast = isString(template) ? baseParse(template, options) : template;\r\n const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();\r\n transform(ast, extend({}, options, {\r\n prefixIdentifiers,\r\n nodeTransforms: [\r\n ...nodeTransforms,\r\n ...(options.nodeTransforms || []) // user transforms\r\n ],\r\n directiveTransforms: extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms\r\n )\r\n }));\r\n return generate(ast, extend({}, options, {\r\n prefixIdentifiers\r\n }));\r\n}\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexport { BASE_TRANSITION, CAMELIZE, CAPITALIZE, CREATE_BLOCK, CREATE_COMMENT, CREATE_ELEMENT_BLOCK, CREATE_ELEMENT_VNODE, CREATE_SLOTS, CREATE_STATIC, CREATE_TEXT, CREATE_VNODE, FRAGMENT, GUARD_REACTIVE_PROPS, IS_MEMO_SAME, IS_REF, KEEP_ALIVE, MERGE_PROPS, NORMALIZE_CLASS, NORMALIZE_PROPS, NORMALIZE_STYLE, OPEN_BLOCK, POP_SCOPE_ID, PUSH_SCOPE_ID, RENDER_LIST, RENDER_SLOT, RESOLVE_COMPONENT, RESOLVE_DIRECTIVE, RESOLVE_DYNAMIC_COMPONENT, RESOLVE_FILTER, SET_BLOCK_TRACKING, SUSPENSE, TELEPORT, TO_DISPLAY_STRING, TO_HANDLERS, TO_HANDLER_KEY, UNREF, WITH_CTX, WITH_DIRECTIVES, WITH_MEMO, advancePositionWithClone, advancePositionWithMutation, assert, baseCompile, baseParse, buildProps, buildSlots, checkCompatEnabled, createArrayExpression, createAssignmentExpression, createBlockStatement, createCacheExpression, createCallExpression, createCompilerError, createCompoundExpression, createConditionalExpression, createForLoopParams, createFunctionExpression, createIfStatement, createInterpolation, createObjectExpression, createObjectProperty, createReturnStatement, createRoot, createSequenceExpression, createSimpleExpression, createStructuralDirectiveTransform, createTemplateLiteral, createTransformContext, createVNodeCall, extractIdentifiers, findDir, findProp, generate, getBaseTransformPreset, getInnerRange, getMemoedVNodeCall, getVNodeBlockHelper, getVNodeHelper, hasDynamicKeyVBind, hasScopeRef, helperNameMap, injectProp, isBindKey, isBuiltInType, isCoreComponent, isFunctionType, isInDestructureAssignment, isMemberExpression, isMemberExpressionBrowser, isMemberExpressionNode, isReferencedIdentifier, isSimpleIdentifier, isSlotOutlet, isStaticExp, isStaticProperty, isStaticPropertyKey, isTemplateNode, isText, isVSlot, locStub, makeBlock, noopDirectiveTransform, processExpression, processFor, processIf, processSlotOutlet, registerRuntimeHelpers, resolveComponentType, toValidAssetId, trackSlotScopes, trackVForSlotScopes, transform, transformBind, transformElement, transformExpression, transformModel, transformOn, traverseNode, walkBlockDeclarations, walkFunctionParams, walkIdentifiers, warnDeprecation };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerCore = require('@vue/compiler-core');\nvar shared = require('@vue/shared');\n\nconst V_MODEL_RADIO = Symbol(`vModelRadio` );\r\nconst V_MODEL_CHECKBOX = Symbol(`vModelCheckbox` );\r\nconst V_MODEL_TEXT = Symbol(`vModelText` );\r\nconst V_MODEL_SELECT = Symbol(`vModelSelect` );\r\nconst V_MODEL_DYNAMIC = Symbol(`vModelDynamic` );\r\nconst V_ON_WITH_MODIFIERS = Symbol(`vOnModifiersGuard` );\r\nconst V_ON_WITH_KEYS = Symbol(`vOnKeysGuard` );\r\nconst V_SHOW = Symbol(`vShow` );\r\nconst TRANSITION = Symbol(`Transition` );\r\nconst TRANSITION_GROUP = Symbol(`TransitionGroup` );\r\ncompilerCore.registerRuntimeHelpers({\r\n [V_MODEL_RADIO]: `vModelRadio`,\r\n [V_MODEL_CHECKBOX]: `vModelCheckbox`,\r\n [V_MODEL_TEXT]: `vModelText`,\r\n [V_MODEL_SELECT]: `vModelSelect`,\r\n [V_MODEL_DYNAMIC]: `vModelDynamic`,\r\n [V_ON_WITH_MODIFIERS]: `withModifiers`,\r\n [V_ON_WITH_KEYS]: `withKeys`,\r\n [V_SHOW]: `vShow`,\r\n [TRANSITION]: `Transition`,\r\n [TRANSITION_GROUP]: `TransitionGroup`\r\n});\n\nvar namedCharacterReferences = {\n\tGT: \">\",\n\tgt: \">\",\n\tLT: \"<\",\n\tlt: \"<\",\n\t\"ac;\": \"∾\",\n\t\"af;\": \"⁡\",\n\tAMP: \"&\",\n\tamp: \"&\",\n\t\"ap;\": \"≈\",\n\t\"DD;\": \"ⅅ\",\n\t\"dd;\": \"ⅆ\",\n\tdeg: \"°\",\n\t\"ee;\": \"ⅇ\",\n\t\"eg;\": \"⪚\",\n\t\"el;\": \"⪙\",\n\tETH: \"Ð\",\n\teth: \"ð\",\n\t\"gE;\": \"≧\",\n\t\"ge;\": \"≥\",\n\t\"Gg;\": \"⋙\",\n\t\"gg;\": \"≫\",\n\t\"gl;\": \"≷\",\n\t\"GT;\": \">\",\n\t\"Gt;\": \"≫\",\n\t\"gt;\": \">\",\n\t\"ic;\": \"⁣\",\n\t\"ii;\": \"ⅈ\",\n\t\"Im;\": \"ℑ\",\n\t\"in;\": \"∈\",\n\t\"it;\": \"⁢\",\n\t\"lE;\": \"≦\",\n\t\"le;\": \"≤\",\n\t\"lg;\": \"≶\",\n\t\"Ll;\": \"⋘\",\n\t\"ll;\": \"≪\",\n\t\"LT;\": \"<\",\n\t\"Lt;\": \"≪\",\n\t\"lt;\": \"<\",\n\t\"mp;\": \"∓\",\n\t\"Mu;\": \"Μ\",\n\t\"mu;\": \"μ\",\n\t\"ne;\": \"≠\",\n\t\"ni;\": \"∋\",\n\tnot: \"¬\",\n\t\"Nu;\": \"Ν\",\n\t\"nu;\": \"ν\",\n\t\"Or;\": \"⩔\",\n\t\"or;\": \"∨\",\n\t\"oS;\": \"Ⓢ\",\n\t\"Pi;\": \"Π\",\n\t\"pi;\": \"π\",\n\t\"pm;\": \"±\",\n\t\"Pr;\": \"⪻\",\n\t\"pr;\": \"≺\",\n\t\"Re;\": \"ℜ\",\n\tREG: \"®\",\n\treg: \"®\",\n\t\"rx;\": \"℞\",\n\t\"Sc;\": \"⪼\",\n\t\"sc;\": \"≻\",\n\tshy: \"­\",\n\tuml: \"¨\",\n\t\"wp;\": \"℘\",\n\t\"wr;\": \"≀\",\n\t\"Xi;\": \"Ξ\",\n\t\"xi;\": \"ξ\",\n\tyen: \"¥\",\n\t\"acd;\": \"∿\",\n\t\"acE;\": \"∾̳\",\n\t\"Acy;\": \"А\",\n\t\"acy;\": \"а\",\n\t\"Afr;\": \"𝔄\",\n\t\"afr;\": \"𝔞\",\n\t\"AMP;\": \"&\",\n\t\"amp;\": \"&\",\n\t\"And;\": \"⩓\",\n\t\"and;\": \"∧\",\n\t\"ang;\": \"∠\",\n\t\"apE;\": \"⩰\",\n\t\"ape;\": \"≊\",\n\t\"ast;\": \"*\",\n\tAuml: \"Ä\",\n\tauml: \"ä\",\n\t\"Bcy;\": \"Б\",\n\t\"bcy;\": \"б\",\n\t\"Bfr;\": \"𝔅\",\n\t\"bfr;\": \"𝔟\",\n\t\"bne;\": \"=⃥\",\n\t\"bot;\": \"⊥\",\n\t\"Cap;\": \"⋒\",\n\t\"cap;\": \"∩\",\n\tcent: \"¢\",\n\t\"Cfr;\": \"ℭ\",\n\t\"cfr;\": \"𝔠\",\n\t\"Chi;\": \"Χ\",\n\t\"chi;\": \"χ\",\n\t\"cir;\": \"○\",\n\tCOPY: \"©\",\n\tcopy: \"©\",\n\t\"Cup;\": \"⋓\",\n\t\"cup;\": \"∪\",\n\t\"Dcy;\": \"Д\",\n\t\"dcy;\": \"д\",\n\t\"deg;\": \"°\",\n\t\"Del;\": \"∇\",\n\t\"Dfr;\": \"𝔇\",\n\t\"dfr;\": \"𝔡\",\n\t\"die;\": \"¨\",\n\t\"div;\": \"÷\",\n\t\"Dot;\": \"¨\",\n\t\"dot;\": \"˙\",\n\t\"Ecy;\": \"Э\",\n\t\"ecy;\": \"э\",\n\t\"Efr;\": \"𝔈\",\n\t\"efr;\": \"𝔢\",\n\t\"egs;\": \"⪖\",\n\t\"ell;\": \"ℓ\",\n\t\"els;\": \"⪕\",\n\t\"ENG;\": \"Ŋ\",\n\t\"eng;\": \"ŋ\",\n\t\"Eta;\": \"Η\",\n\t\"eta;\": \"η\",\n\t\"ETH;\": \"Ð\",\n\t\"eth;\": \"ð\",\n\tEuml: \"Ë\",\n\teuml: \"ë\",\n\t\"Fcy;\": \"Ф\",\n\t\"fcy;\": \"ф\",\n\t\"Ffr;\": \"𝔉\",\n\t\"ffr;\": \"𝔣\",\n\t\"gap;\": \"⪆\",\n\t\"Gcy;\": \"Г\",\n\t\"gcy;\": \"г\",\n\t\"gEl;\": \"⪌\",\n\t\"gel;\": \"⋛\",\n\t\"geq;\": \"≥\",\n\t\"ges;\": \"⩾\",\n\t\"Gfr;\": \"𝔊\",\n\t\"gfr;\": \"𝔤\",\n\t\"ggg;\": \"⋙\",\n\t\"gla;\": \"⪥\",\n\t\"glE;\": \"⪒\",\n\t\"glj;\": \"⪤\",\n\t\"gnE;\": \"≩\",\n\t\"gne;\": \"⪈\",\n\t\"Hat;\": \"^\",\n\t\"Hfr;\": \"ℌ\",\n\t\"hfr;\": \"𝔥\",\n\t\"Icy;\": \"И\",\n\t\"icy;\": \"и\",\n\t\"iff;\": \"⇔\",\n\t\"Ifr;\": \"ℑ\",\n\t\"ifr;\": \"𝔦\",\n\t\"Int;\": \"∬\",\n\t\"int;\": \"∫\",\n\tIuml: \"Ï\",\n\tiuml: \"ï\",\n\t\"Jcy;\": \"Й\",\n\t\"jcy;\": \"й\",\n\t\"Jfr;\": \"𝔍\",\n\t\"jfr;\": \"𝔧\",\n\t\"Kcy;\": \"К\",\n\t\"kcy;\": \"к\",\n\t\"Kfr;\": \"𝔎\",\n\t\"kfr;\": \"𝔨\",\n\t\"lap;\": \"⪅\",\n\t\"lat;\": \"⪫\",\n\t\"Lcy;\": \"Л\",\n\t\"lcy;\": \"л\",\n\t\"lEg;\": \"⪋\",\n\t\"leg;\": \"⋚\",\n\t\"leq;\": \"≤\",\n\t\"les;\": \"⩽\",\n\t\"Lfr;\": \"𝔏\",\n\t\"lfr;\": \"𝔩\",\n\t\"lgE;\": \"⪑\",\n\t\"lnE;\": \"≨\",\n\t\"lne;\": \"⪇\",\n\t\"loz;\": \"◊\",\n\t\"lrm;\": \"‎\",\n\t\"Lsh;\": \"↰\",\n\t\"lsh;\": \"↰\",\n\tmacr: \"¯\",\n\t\"Map;\": \"⤅\",\n\t\"map;\": \"↦\",\n\t\"Mcy;\": \"М\",\n\t\"mcy;\": \"м\",\n\t\"Mfr;\": \"𝔐\",\n\t\"mfr;\": \"𝔪\",\n\t\"mho;\": \"℧\",\n\t\"mid;\": \"∣\",\n\t\"nap;\": \"≉\",\n\tnbsp: \" \",\n\t\"Ncy;\": \"Н\",\n\t\"ncy;\": \"н\",\n\t\"Nfr;\": \"𝔑\",\n\t\"nfr;\": \"𝔫\",\n\t\"ngE;\": \"≧̸\",\n\t\"nge;\": \"≱\",\n\t\"nGg;\": \"⋙̸\",\n\t\"nGt;\": \"≫⃒\",\n\t\"ngt;\": \"≯\",\n\t\"nis;\": \"⋼\",\n\t\"niv;\": \"∋\",\n\t\"nlE;\": \"≦̸\",\n\t\"nle;\": \"≰\",\n\t\"nLl;\": \"⋘̸\",\n\t\"nLt;\": \"≪⃒\",\n\t\"nlt;\": \"≮\",\n\t\"Not;\": \"⫬\",\n\t\"not;\": \"¬\",\n\t\"npr;\": \"⊀\",\n\t\"nsc;\": \"⊁\",\n\t\"num;\": \"#\",\n\t\"Ocy;\": \"О\",\n\t\"ocy;\": \"о\",\n\t\"Ofr;\": \"𝔒\",\n\t\"ofr;\": \"𝔬\",\n\t\"ogt;\": \"⧁\",\n\t\"ohm;\": \"Ω\",\n\t\"olt;\": \"⧀\",\n\t\"ord;\": \"⩝\",\n\tordf: \"ª\",\n\tordm: \"º\",\n\t\"orv;\": \"⩛\",\n\tOuml: \"Ö\",\n\touml: \"ö\",\n\t\"par;\": \"∥\",\n\tpara: \"¶\",\n\t\"Pcy;\": \"П\",\n\t\"pcy;\": \"п\",\n\t\"Pfr;\": \"𝔓\",\n\t\"pfr;\": \"𝔭\",\n\t\"Phi;\": \"Φ\",\n\t\"phi;\": \"φ\",\n\t\"piv;\": \"ϖ\",\n\t\"prE;\": \"⪳\",\n\t\"pre;\": \"⪯\",\n\t\"Psi;\": \"Ψ\",\n\t\"psi;\": \"ψ\",\n\t\"Qfr;\": \"𝔔\",\n\t\"qfr;\": \"𝔮\",\n\tQUOT: \"\\\"\",\n\tquot: \"\\\"\",\n\t\"Rcy;\": \"Р\",\n\t\"rcy;\": \"р\",\n\t\"REG;\": \"®\",\n\t\"reg;\": \"®\",\n\t\"Rfr;\": \"ℜ\",\n\t\"rfr;\": \"𝔯\",\n\t\"Rho;\": \"Ρ\",\n\t\"rho;\": \"ρ\",\n\t\"rlm;\": \"‏\",\n\t\"Rsh;\": \"↱\",\n\t\"rsh;\": \"↱\",\n\t\"scE;\": \"⪴\",\n\t\"sce;\": \"⪰\",\n\t\"Scy;\": \"С\",\n\t\"scy;\": \"с\",\n\tsect: \"§\",\n\t\"Sfr;\": \"𝔖\",\n\t\"sfr;\": \"𝔰\",\n\t\"shy;\": \"­\",\n\t\"sim;\": \"∼\",\n\t\"smt;\": \"⪪\",\n\t\"sol;\": \"/\",\n\t\"squ;\": \"□\",\n\t\"Sub;\": \"⋐\",\n\t\"sub;\": \"⊂\",\n\t\"Sum;\": \"∑\",\n\t\"sum;\": \"∑\",\n\t\"Sup;\": \"⋑\",\n\t\"sup;\": \"⊃\",\n\tsup1: \"¹\",\n\tsup2: \"²\",\n\tsup3: \"³\",\n\t\"Tab;\": \"\\t\",\n\t\"Tau;\": \"Τ\",\n\t\"tau;\": \"τ\",\n\t\"Tcy;\": \"Т\",\n\t\"tcy;\": \"т\",\n\t\"Tfr;\": \"𝔗\",\n\t\"tfr;\": \"𝔱\",\n\t\"top;\": \"⊤\",\n\t\"Ucy;\": \"У\",\n\t\"ucy;\": \"у\",\n\t\"Ufr;\": \"𝔘\",\n\t\"ufr;\": \"𝔲\",\n\t\"uml;\": \"¨\",\n\tUuml: \"Ü\",\n\tuuml: \"ü\",\n\t\"Vcy;\": \"В\",\n\t\"vcy;\": \"в\",\n\t\"Vee;\": \"⋁\",\n\t\"vee;\": \"∨\",\n\t\"Vfr;\": \"𝔙\",\n\t\"vfr;\": \"𝔳\",\n\t\"Wfr;\": \"𝔚\",\n\t\"wfr;\": \"𝔴\",\n\t\"Xfr;\": \"𝔛\",\n\t\"xfr;\": \"𝔵\",\n\t\"Ycy;\": \"Ы\",\n\t\"ycy;\": \"ы\",\n\t\"yen;\": \"¥\",\n\t\"Yfr;\": \"𝔜\",\n\t\"yfr;\": \"𝔶\",\n\tyuml: \"ÿ\",\n\t\"Zcy;\": \"З\",\n\t\"zcy;\": \"з\",\n\t\"Zfr;\": \"ℨ\",\n\t\"zfr;\": \"𝔷\",\n\t\"zwj;\": \"‍\",\n\tAcirc: \"Â\",\n\tacirc: \"â\",\n\tacute: \"´\",\n\tAElig: \"Æ\",\n\taelig: \"æ\",\n\t\"andd;\": \"⩜\",\n\t\"andv;\": \"⩚\",\n\t\"ange;\": \"⦤\",\n\t\"Aopf;\": \"𝔸\",\n\t\"aopf;\": \"𝕒\",\n\t\"apid;\": \"≋\",\n\t\"apos;\": \"'\",\n\tAring: \"Å\",\n\taring: \"å\",\n\t\"Ascr;\": \"𝒜\",\n\t\"ascr;\": \"𝒶\",\n\t\"Auml;\": \"Ä\",\n\t\"auml;\": \"ä\",\n\t\"Barv;\": \"⫧\",\n\t\"bbrk;\": \"⎵\",\n\t\"Beta;\": \"Β\",\n\t\"beta;\": \"β\",\n\t\"beth;\": \"ℶ\",\n\t\"bNot;\": \"⫭\",\n\t\"bnot;\": \"⌐\",\n\t\"Bopf;\": \"𝔹\",\n\t\"bopf;\": \"𝕓\",\n\t\"boxH;\": \"═\",\n\t\"boxh;\": \"─\",\n\t\"boxV;\": \"║\",\n\t\"boxv;\": \"│\",\n\t\"Bscr;\": \"ℬ\",\n\t\"bscr;\": \"𝒷\",\n\t\"bsim;\": \"∽\",\n\t\"bsol;\": \"\\\\\",\n\t\"bull;\": \"•\",\n\t\"bump;\": \"≎\",\n\t\"caps;\": \"∩︀\",\n\t\"Cdot;\": \"Ċ\",\n\t\"cdot;\": \"ċ\",\n\tcedil: \"¸\",\n\t\"cent;\": \"¢\",\n\t\"CHcy;\": \"Ч\",\n\t\"chcy;\": \"ч\",\n\t\"circ;\": \"ˆ\",\n\t\"cirE;\": \"⧃\",\n\t\"cire;\": \"≗\",\n\t\"comp;\": \"∁\",\n\t\"cong;\": \"≅\",\n\t\"Copf;\": \"ℂ\",\n\t\"copf;\": \"𝕔\",\n\t\"COPY;\": \"©\",\n\t\"copy;\": \"©\",\n\t\"Cscr;\": \"𝒞\",\n\t\"cscr;\": \"𝒸\",\n\t\"csub;\": \"⫏\",\n\t\"csup;\": \"⫐\",\n\t\"cups;\": \"∪︀\",\n\t\"Darr;\": \"↡\",\n\t\"dArr;\": \"⇓\",\n\t\"darr;\": \"↓\",\n\t\"dash;\": \"‐\",\n\t\"dHar;\": \"⥥\",\n\t\"diam;\": \"⋄\",\n\t\"DJcy;\": \"Ђ\",\n\t\"djcy;\": \"ђ\",\n\t\"Dopf;\": \"𝔻\",\n\t\"dopf;\": \"𝕕\",\n\t\"Dscr;\": \"𝒟\",\n\t\"dscr;\": \"𝒹\",\n\t\"DScy;\": \"Ѕ\",\n\t\"dscy;\": \"ѕ\",\n\t\"dsol;\": \"⧶\",\n\t\"dtri;\": \"▿\",\n\t\"DZcy;\": \"Џ\",\n\t\"dzcy;\": \"џ\",\n\t\"ecir;\": \"≖\",\n\tEcirc: \"Ê\",\n\tecirc: \"ê\",\n\t\"Edot;\": \"Ė\",\n\t\"eDot;\": \"≑\",\n\t\"edot;\": \"ė\",\n\t\"emsp;\": \" \",\n\t\"ensp;\": \" \",\n\t\"Eopf;\": \"𝔼\",\n\t\"eopf;\": \"𝕖\",\n\t\"epar;\": \"⋕\",\n\t\"epsi;\": \"ε\",\n\t\"Escr;\": \"ℰ\",\n\t\"escr;\": \"ℯ\",\n\t\"Esim;\": \"⩳\",\n\t\"esim;\": \"≂\",\n\t\"Euml;\": \"Ë\",\n\t\"euml;\": \"ë\",\n\t\"euro;\": \"€\",\n\t\"excl;\": \"!\",\n\t\"flat;\": \"♭\",\n\t\"fnof;\": \"ƒ\",\n\t\"Fopf;\": \"𝔽\",\n\t\"fopf;\": \"𝕗\",\n\t\"fork;\": \"⋔\",\n\t\"Fscr;\": \"ℱ\",\n\t\"fscr;\": \"𝒻\",\n\t\"Gdot;\": \"Ġ\",\n\t\"gdot;\": \"ġ\",\n\t\"geqq;\": \"≧\",\n\t\"gesl;\": \"⋛︀\",\n\t\"GJcy;\": \"Ѓ\",\n\t\"gjcy;\": \"ѓ\",\n\t\"gnap;\": \"⪊\",\n\t\"gneq;\": \"⪈\",\n\t\"Gopf;\": \"𝔾\",\n\t\"gopf;\": \"𝕘\",\n\t\"Gscr;\": \"𝒢\",\n\t\"gscr;\": \"ℊ\",\n\t\"gsim;\": \"≳\",\n\t\"gtcc;\": \"⪧\",\n\t\"gvnE;\": \"≩︀\",\n\t\"half;\": \"½\",\n\t\"hArr;\": \"⇔\",\n\t\"harr;\": \"↔\",\n\t\"hbar;\": \"ℏ\",\n\t\"Hopf;\": \"ℍ\",\n\t\"hopf;\": \"𝕙\",\n\t\"Hscr;\": \"ℋ\",\n\t\"hscr;\": \"𝒽\",\n\tIcirc: \"Î\",\n\ticirc: \"î\",\n\t\"Idot;\": \"İ\",\n\t\"IEcy;\": \"Е\",\n\t\"iecy;\": \"е\",\n\tiexcl: \"¡\",\n\t\"imof;\": \"⊷\",\n\t\"IOcy;\": \"Ё\",\n\t\"iocy;\": \"ё\",\n\t\"Iopf;\": \"𝕀\",\n\t\"iopf;\": \"𝕚\",\n\t\"Iota;\": \"Ι\",\n\t\"iota;\": \"ι\",\n\t\"Iscr;\": \"ℐ\",\n\t\"iscr;\": \"𝒾\",\n\t\"isin;\": \"∈\",\n\t\"Iuml;\": \"Ï\",\n\t\"iuml;\": \"ï\",\n\t\"Jopf;\": \"𝕁\",\n\t\"jopf;\": \"𝕛\",\n\t\"Jscr;\": \"𝒥\",\n\t\"jscr;\": \"𝒿\",\n\t\"KHcy;\": \"Х\",\n\t\"khcy;\": \"х\",\n\t\"KJcy;\": \"Ќ\",\n\t\"kjcy;\": \"ќ\",\n\t\"Kopf;\": \"𝕂\",\n\t\"kopf;\": \"𝕜\",\n\t\"Kscr;\": \"𝒦\",\n\t\"kscr;\": \"𝓀\",\n\t\"Lang;\": \"⟪\",\n\t\"lang;\": \"⟨\",\n\tlaquo: \"«\",\n\t\"Larr;\": \"↞\",\n\t\"lArr;\": \"⇐\",\n\t\"larr;\": \"←\",\n\t\"late;\": \"⪭\",\n\t\"lcub;\": \"{\",\n\t\"ldca;\": \"⤶\",\n\t\"ldsh;\": \"↲\",\n\t\"leqq;\": \"≦\",\n\t\"lesg;\": \"⋚︀\",\n\t\"lHar;\": \"⥢\",\n\t\"LJcy;\": \"Љ\",\n\t\"ljcy;\": \"љ\",\n\t\"lnap;\": \"⪉\",\n\t\"lneq;\": \"⪇\",\n\t\"Lopf;\": \"𝕃\",\n\t\"lopf;\": \"𝕝\",\n\t\"lozf;\": \"⧫\",\n\t\"lpar;\": \"(\",\n\t\"Lscr;\": \"ℒ\",\n\t\"lscr;\": \"𝓁\",\n\t\"lsim;\": \"≲\",\n\t\"lsqb;\": \"[\",\n\t\"ltcc;\": \"⪦\",\n\t\"ltri;\": \"◃\",\n\t\"lvnE;\": \"≨︀\",\n\t\"macr;\": \"¯\",\n\t\"male;\": \"♂\",\n\t\"malt;\": \"✠\",\n\tmicro: \"µ\",\n\t\"mlcp;\": \"⫛\",\n\t\"mldr;\": \"…\",\n\t\"Mopf;\": \"𝕄\",\n\t\"mopf;\": \"𝕞\",\n\t\"Mscr;\": \"ℳ\",\n\t\"mscr;\": \"𝓂\",\n\t\"nang;\": \"∠⃒\",\n\t\"napE;\": \"⩰̸\",\n\t\"nbsp;\": \" \",\n\t\"ncap;\": \"⩃\",\n\t\"ncup;\": \"⩂\",\n\t\"ngeq;\": \"≱\",\n\t\"nges;\": \"⩾̸\",\n\t\"ngtr;\": \"≯\",\n\t\"nGtv;\": \"≫̸\",\n\t\"nisd;\": \"⋺\",\n\t\"NJcy;\": \"Њ\",\n\t\"njcy;\": \"њ\",\n\t\"nldr;\": \"‥\",\n\t\"nleq;\": \"≰\",\n\t\"nles;\": \"⩽̸\",\n\t\"nLtv;\": \"≪̸\",\n\t\"nmid;\": \"∤\",\n\t\"Nopf;\": \"ℕ\",\n\t\"nopf;\": \"𝕟\",\n\t\"npar;\": \"∦\",\n\t\"npre;\": \"⪯̸\",\n\t\"nsce;\": \"⪰̸\",\n\t\"Nscr;\": \"𝒩\",\n\t\"nscr;\": \"𝓃\",\n\t\"nsim;\": \"≁\",\n\t\"nsub;\": \"⊄\",\n\t\"nsup;\": \"⊅\",\n\t\"ntgl;\": \"≹\",\n\t\"ntlg;\": \"≸\",\n\t\"nvap;\": \"≍⃒\",\n\t\"nvge;\": \"≥⃒\",\n\t\"nvgt;\": \">⃒\",\n\t\"nvle;\": \"≤⃒\",\n\t\"nvlt;\": \"<⃒\",\n\t\"oast;\": \"⊛\",\n\t\"ocir;\": \"⊚\",\n\tOcirc: \"Ô\",\n\tocirc: \"ô\",\n\t\"odiv;\": \"⨸\",\n\t\"odot;\": \"⊙\",\n\t\"ogon;\": \"˛\",\n\t\"oint;\": \"∮\",\n\t\"omid;\": \"⦶\",\n\t\"Oopf;\": \"𝕆\",\n\t\"oopf;\": \"𝕠\",\n\t\"opar;\": \"⦷\",\n\t\"ordf;\": \"ª\",\n\t\"ordm;\": \"º\",\n\t\"oror;\": \"⩖\",\n\t\"Oscr;\": \"𝒪\",\n\t\"oscr;\": \"ℴ\",\n\t\"osol;\": \"⊘\",\n\t\"Ouml;\": \"Ö\",\n\t\"ouml;\": \"ö\",\n\t\"para;\": \"¶\",\n\t\"part;\": \"∂\",\n\t\"perp;\": \"⊥\",\n\t\"phiv;\": \"ϕ\",\n\t\"plus;\": \"+\",\n\t\"Popf;\": \"ℙ\",\n\t\"popf;\": \"𝕡\",\n\tpound: \"£\",\n\t\"prap;\": \"⪷\",\n\t\"prec;\": \"≺\",\n\t\"prnE;\": \"⪵\",\n\t\"prod;\": \"∏\",\n\t\"prop;\": \"∝\",\n\t\"Pscr;\": \"𝒫\",\n\t\"pscr;\": \"𝓅\",\n\t\"qint;\": \"⨌\",\n\t\"Qopf;\": \"ℚ\",\n\t\"qopf;\": \"𝕢\",\n\t\"Qscr;\": \"𝒬\",\n\t\"qscr;\": \"𝓆\",\n\t\"QUOT;\": \"\\\"\",\n\t\"quot;\": \"\\\"\",\n\t\"race;\": \"∽̱\",\n\t\"Rang;\": \"⟫\",\n\t\"rang;\": \"⟩\",\n\traquo: \"»\",\n\t\"Rarr;\": \"↠\",\n\t\"rArr;\": \"⇒\",\n\t\"rarr;\": \"→\",\n\t\"rcub;\": \"}\",\n\t\"rdca;\": \"⤷\",\n\t\"rdsh;\": \"↳\",\n\t\"real;\": \"ℜ\",\n\t\"rect;\": \"▭\",\n\t\"rHar;\": \"⥤\",\n\t\"rhov;\": \"ϱ\",\n\t\"ring;\": \"˚\",\n\t\"Ropf;\": \"ℝ\",\n\t\"ropf;\": \"𝕣\",\n\t\"rpar;\": \")\",\n\t\"Rscr;\": \"ℛ\",\n\t\"rscr;\": \"𝓇\",\n\t\"rsqb;\": \"]\",\n\t\"rtri;\": \"▹\",\n\t\"scap;\": \"⪸\",\n\t\"scnE;\": \"⪶\",\n\t\"sdot;\": \"⋅\",\n\t\"sect;\": \"§\",\n\t\"semi;\": \";\",\n\t\"sext;\": \"✶\",\n\t\"SHcy;\": \"Ш\",\n\t\"shcy;\": \"ш\",\n\t\"sime;\": \"≃\",\n\t\"simg;\": \"⪞\",\n\t\"siml;\": \"⪝\",\n\t\"smid;\": \"∣\",\n\t\"smte;\": \"⪬\",\n\t\"solb;\": \"⧄\",\n\t\"Sopf;\": \"𝕊\",\n\t\"sopf;\": \"𝕤\",\n\t\"spar;\": \"∥\",\n\t\"Sqrt;\": \"√\",\n\t\"squf;\": \"▪\",\n\t\"Sscr;\": \"𝒮\",\n\t\"sscr;\": \"𝓈\",\n\t\"Star;\": \"⋆\",\n\t\"star;\": \"☆\",\n\t\"subE;\": \"⫅\",\n\t\"sube;\": \"⊆\",\n\t\"succ;\": \"≻\",\n\t\"sung;\": \"♪\",\n\t\"sup1;\": \"¹\",\n\t\"sup2;\": \"²\",\n\t\"sup3;\": \"³\",\n\t\"supE;\": \"⫆\",\n\t\"supe;\": \"⊇\",\n\tszlig: \"ß\",\n\t\"tbrk;\": \"⎴\",\n\t\"tdot;\": \"⃛\",\n\tTHORN: \"Þ\",\n\tthorn: \"þ\",\n\ttimes: \"×\",\n\t\"tint;\": \"∭\",\n\t\"toea;\": \"⤨\",\n\t\"Topf;\": \"𝕋\",\n\t\"topf;\": \"𝕥\",\n\t\"tosa;\": \"⤩\",\n\t\"trie;\": \"≜\",\n\t\"Tscr;\": \"𝒯\",\n\t\"tscr;\": \"𝓉\",\n\t\"TScy;\": \"Ц\",\n\t\"tscy;\": \"ц\",\n\t\"Uarr;\": \"↟\",\n\t\"uArr;\": \"⇑\",\n\t\"uarr;\": \"↑\",\n\tUcirc: \"Û\",\n\tucirc: \"û\",\n\t\"uHar;\": \"⥣\",\n\t\"Uopf;\": \"𝕌\",\n\t\"uopf;\": \"𝕦\",\n\t\"Upsi;\": \"ϒ\",\n\t\"upsi;\": \"υ\",\n\t\"Uscr;\": \"𝒰\",\n\t\"uscr;\": \"𝓊\",\n\t\"utri;\": \"▵\",\n\t\"Uuml;\": \"Ü\",\n\t\"uuml;\": \"ü\",\n\t\"vArr;\": \"⇕\",\n\t\"varr;\": \"↕\",\n\t\"Vbar;\": \"⫫\",\n\t\"vBar;\": \"⫨\",\n\t\"Vert;\": \"‖\",\n\t\"vert;\": \"|\",\n\t\"Vopf;\": \"𝕍\",\n\t\"vopf;\": \"𝕧\",\n\t\"Vscr;\": \"𝒱\",\n\t\"vscr;\": \"𝓋\",\n\t\"Wopf;\": \"𝕎\",\n\t\"wopf;\": \"𝕨\",\n\t\"Wscr;\": \"𝒲\",\n\t\"wscr;\": \"𝓌\",\n\t\"xcap;\": \"⋂\",\n\t\"xcup;\": \"⋃\",\n\t\"xmap;\": \"⟼\",\n\t\"xnis;\": \"⋻\",\n\t\"Xopf;\": \"𝕏\",\n\t\"xopf;\": \"𝕩\",\n\t\"Xscr;\": \"𝒳\",\n\t\"xscr;\": \"𝓍\",\n\t\"xvee;\": \"⋁\",\n\t\"YAcy;\": \"Я\",\n\t\"yacy;\": \"я\",\n\t\"YIcy;\": \"Ї\",\n\t\"yicy;\": \"ї\",\n\t\"Yopf;\": \"𝕐\",\n\t\"yopf;\": \"𝕪\",\n\t\"Yscr;\": \"𝒴\",\n\t\"yscr;\": \"𝓎\",\n\t\"YUcy;\": \"Ю\",\n\t\"yucy;\": \"ю\",\n\t\"Yuml;\": \"Ÿ\",\n\t\"yuml;\": \"ÿ\",\n\t\"Zdot;\": \"Ż\",\n\t\"zdot;\": \"ż\",\n\t\"Zeta;\": \"Ζ\",\n\t\"zeta;\": \"ζ\",\n\t\"ZHcy;\": \"Ж\",\n\t\"zhcy;\": \"ж\",\n\t\"Zopf;\": \"ℤ\",\n\t\"zopf;\": \"𝕫\",\n\t\"Zscr;\": \"𝒵\",\n\t\"zscr;\": \"𝓏\",\n\t\"zwnj;\": \"‌\",\n\tAacute: \"Á\",\n\taacute: \"á\",\n\t\"Acirc;\": \"Â\",\n\t\"acirc;\": \"â\",\n\t\"acute;\": \"´\",\n\t\"AElig;\": \"Æ\",\n\t\"aelig;\": \"æ\",\n\tAgrave: \"À\",\n\tagrave: \"à\",\n\t\"aleph;\": \"ℵ\",\n\t\"Alpha;\": \"Α\",\n\t\"alpha;\": \"α\",\n\t\"Amacr;\": \"Ā\",\n\t\"amacr;\": \"ā\",\n\t\"amalg;\": \"⨿\",\n\t\"angle;\": \"∠\",\n\t\"angrt;\": \"∟\",\n\t\"angst;\": \"Å\",\n\t\"Aogon;\": \"Ą\",\n\t\"aogon;\": \"ą\",\n\t\"Aring;\": \"Å\",\n\t\"aring;\": \"å\",\n\t\"asymp;\": \"≈\",\n\tAtilde: \"Ã\",\n\tatilde: \"ã\",\n\t\"awint;\": \"⨑\",\n\t\"bcong;\": \"≌\",\n\t\"bdquo;\": \"„\",\n\t\"bepsi;\": \"϶\",\n\t\"blank;\": \"␣\",\n\t\"blk12;\": \"▒\",\n\t\"blk14;\": \"░\",\n\t\"blk34;\": \"▓\",\n\t\"block;\": \"█\",\n\t\"boxDL;\": \"╗\",\n\t\"boxDl;\": \"╖\",\n\t\"boxdL;\": \"╕\",\n\t\"boxdl;\": \"┐\",\n\t\"boxDR;\": \"╔\",\n\t\"boxDr;\": \"╓\",\n\t\"boxdR;\": \"╒\",\n\t\"boxdr;\": \"┌\",\n\t\"boxHD;\": \"╦\",\n\t\"boxHd;\": \"╤\",\n\t\"boxhD;\": \"╥\",\n\t\"boxhd;\": \"┬\",\n\t\"boxHU;\": \"╩\",\n\t\"boxHu;\": \"╧\",\n\t\"boxhU;\": \"╨\",\n\t\"boxhu;\": \"┴\",\n\t\"boxUL;\": \"╝\",\n\t\"boxUl;\": \"╜\",\n\t\"boxuL;\": \"╛\",\n\t\"boxul;\": \"┘\",\n\t\"boxUR;\": \"╚\",\n\t\"boxUr;\": \"╙\",\n\t\"boxuR;\": \"╘\",\n\t\"boxur;\": \"└\",\n\t\"boxVH;\": \"╬\",\n\t\"boxVh;\": \"╫\",\n\t\"boxvH;\": \"╪\",\n\t\"boxvh;\": \"┼\",\n\t\"boxVL;\": \"╣\",\n\t\"boxVl;\": \"╢\",\n\t\"boxvL;\": \"╡\",\n\t\"boxvl;\": \"┤\",\n\t\"boxVR;\": \"╠\",\n\t\"boxVr;\": \"╟\",\n\t\"boxvR;\": \"╞\",\n\t\"boxvr;\": \"├\",\n\t\"Breve;\": \"˘\",\n\t\"breve;\": \"˘\",\n\tbrvbar: \"¦\",\n\t\"bsemi;\": \"⁏\",\n\t\"bsime;\": \"⋍\",\n\t\"bsolb;\": \"⧅\",\n\t\"bumpE;\": \"⪮\",\n\t\"bumpe;\": \"≏\",\n\t\"caret;\": \"⁁\",\n\t\"caron;\": \"ˇ\",\n\t\"ccaps;\": \"⩍\",\n\tCcedil: \"Ç\",\n\tccedil: \"ç\",\n\t\"Ccirc;\": \"Ĉ\",\n\t\"ccirc;\": \"ĉ\",\n\t\"ccups;\": \"⩌\",\n\t\"cedil;\": \"¸\",\n\t\"check;\": \"✓\",\n\t\"clubs;\": \"♣\",\n\t\"Colon;\": \"∷\",\n\t\"colon;\": \":\",\n\t\"comma;\": \",\",\n\t\"crarr;\": \"↵\",\n\t\"Cross;\": \"⨯\",\n\t\"cross;\": \"✗\",\n\t\"csube;\": \"⫑\",\n\t\"csupe;\": \"⫒\",\n\t\"ctdot;\": \"⋯\",\n\t\"cuepr;\": \"⋞\",\n\t\"cuesc;\": \"⋟\",\n\t\"cupor;\": \"⩅\",\n\tcurren: \"¤\",\n\t\"cuvee;\": \"⋎\",\n\t\"cuwed;\": \"⋏\",\n\t\"cwint;\": \"∱\",\n\t\"Dashv;\": \"⫤\",\n\t\"dashv;\": \"⊣\",\n\t\"dblac;\": \"˝\",\n\t\"ddarr;\": \"⇊\",\n\t\"Delta;\": \"Δ\",\n\t\"delta;\": \"δ\",\n\t\"dharl;\": \"⇃\",\n\t\"dharr;\": \"⇂\",\n\t\"diams;\": \"♦\",\n\t\"disin;\": \"⋲\",\n\tdivide: \"÷\",\n\t\"doteq;\": \"≐\",\n\t\"dtdot;\": \"⋱\",\n\t\"dtrif;\": \"▾\",\n\t\"duarr;\": \"⇵\",\n\t\"duhar;\": \"⥯\",\n\tEacute: \"É\",\n\teacute: \"é\",\n\t\"Ecirc;\": \"Ê\",\n\t\"ecirc;\": \"ê\",\n\t\"eDDot;\": \"⩷\",\n\t\"efDot;\": \"≒\",\n\tEgrave: \"È\",\n\tegrave: \"è\",\n\t\"Emacr;\": \"Ē\",\n\t\"emacr;\": \"ē\",\n\t\"empty;\": \"∅\",\n\t\"Eogon;\": \"Ę\",\n\t\"eogon;\": \"ę\",\n\t\"eplus;\": \"⩱\",\n\t\"epsiv;\": \"ϵ\",\n\t\"eqsim;\": \"≂\",\n\t\"Equal;\": \"⩵\",\n\t\"equiv;\": \"≡\",\n\t\"erarr;\": \"⥱\",\n\t\"erDot;\": \"≓\",\n\t\"esdot;\": \"≐\",\n\t\"exist;\": \"∃\",\n\t\"fflig;\": \"ff\",\n\t\"filig;\": \"fi\",\n\t\"fjlig;\": \"fj\",\n\t\"fllig;\": \"fl\",\n\t\"fltns;\": \"▱\",\n\t\"forkv;\": \"⫙\",\n\tfrac12: \"½\",\n\tfrac14: \"¼\",\n\tfrac34: \"¾\",\n\t\"frasl;\": \"⁄\",\n\t\"frown;\": \"⌢\",\n\t\"Gamma;\": \"Γ\",\n\t\"gamma;\": \"γ\",\n\t\"Gcirc;\": \"Ĝ\",\n\t\"gcirc;\": \"ĝ\",\n\t\"gescc;\": \"⪩\",\n\t\"gimel;\": \"ℷ\",\n\t\"gneqq;\": \"≩\",\n\t\"gnsim;\": \"⋧\",\n\t\"grave;\": \"`\",\n\t\"gsime;\": \"⪎\",\n\t\"gsiml;\": \"⪐\",\n\t\"gtcir;\": \"⩺\",\n\t\"gtdot;\": \"⋗\",\n\t\"Hacek;\": \"ˇ\",\n\t\"harrw;\": \"↭\",\n\t\"Hcirc;\": \"Ĥ\",\n\t\"hcirc;\": \"ĥ\",\n\t\"hoarr;\": \"⇿\",\n\tIacute: \"Í\",\n\tiacute: \"í\",\n\t\"Icirc;\": \"Î\",\n\t\"icirc;\": \"î\",\n\t\"iexcl;\": \"¡\",\n\tIgrave: \"Ì\",\n\tigrave: \"ì\",\n\t\"iiint;\": \"∭\",\n\t\"iiota;\": \"℩\",\n\t\"IJlig;\": \"IJ\",\n\t\"ijlig;\": \"ij\",\n\t\"Imacr;\": \"Ī\",\n\t\"imacr;\": \"ī\",\n\t\"image;\": \"ℑ\",\n\t\"imath;\": \"ı\",\n\t\"imped;\": \"Ƶ\",\n\t\"infin;\": \"∞\",\n\t\"Iogon;\": \"Į\",\n\t\"iogon;\": \"į\",\n\t\"iprod;\": \"⨼\",\n\tiquest: \"¿\",\n\t\"isinE;\": \"⋹\",\n\t\"isins;\": \"⋴\",\n\t\"isinv;\": \"∈\",\n\t\"Iukcy;\": \"І\",\n\t\"iukcy;\": \"і\",\n\t\"Jcirc;\": \"Ĵ\",\n\t\"jcirc;\": \"ĵ\",\n\t\"jmath;\": \"ȷ\",\n\t\"Jukcy;\": \"Є\",\n\t\"jukcy;\": \"є\",\n\t\"Kappa;\": \"Κ\",\n\t\"kappa;\": \"κ\",\n\t\"lAarr;\": \"⇚\",\n\t\"langd;\": \"⦑\",\n\t\"laquo;\": \"«\",\n\t\"larrb;\": \"⇤\",\n\t\"lates;\": \"⪭︀\",\n\t\"lBarr;\": \"⤎\",\n\t\"lbarr;\": \"⤌\",\n\t\"lbbrk;\": \"❲\",\n\t\"lbrke;\": \"⦋\",\n\t\"lceil;\": \"⌈\",\n\t\"ldquo;\": \"“\",\n\t\"lescc;\": \"⪨\",\n\t\"lhard;\": \"↽\",\n\t\"lharu;\": \"↼\",\n\t\"lhblk;\": \"▄\",\n\t\"llarr;\": \"⇇\",\n\t\"lltri;\": \"◺\",\n\t\"lneqq;\": \"≨\",\n\t\"lnsim;\": \"⋦\",\n\t\"loang;\": \"⟬\",\n\t\"loarr;\": \"⇽\",\n\t\"lobrk;\": \"⟦\",\n\t\"lopar;\": \"⦅\",\n\t\"lrarr;\": \"⇆\",\n\t\"lrhar;\": \"⇋\",\n\t\"lrtri;\": \"⊿\",\n\t\"lsime;\": \"⪍\",\n\t\"lsimg;\": \"⪏\",\n\t\"lsquo;\": \"‘\",\n\t\"ltcir;\": \"⩹\",\n\t\"ltdot;\": \"⋖\",\n\t\"ltrie;\": \"⊴\",\n\t\"ltrif;\": \"◂\",\n\t\"mdash;\": \"—\",\n\t\"mDDot;\": \"∺\",\n\t\"micro;\": \"µ\",\n\tmiddot: \"·\",\n\t\"minus;\": \"−\",\n\t\"mumap;\": \"⊸\",\n\t\"nabla;\": \"∇\",\n\t\"napid;\": \"≋̸\",\n\t\"napos;\": \"ʼn\",\n\t\"natur;\": \"♮\",\n\t\"nbump;\": \"≎̸\",\n\t\"ncong;\": \"≇\",\n\t\"ndash;\": \"–\",\n\t\"neArr;\": \"⇗\",\n\t\"nearr;\": \"↗\",\n\t\"nedot;\": \"≐̸\",\n\t\"nesim;\": \"≂̸\",\n\t\"ngeqq;\": \"≧̸\",\n\t\"ngsim;\": \"≵\",\n\t\"nhArr;\": \"⇎\",\n\t\"nharr;\": \"↮\",\n\t\"nhpar;\": \"⫲\",\n\t\"nlArr;\": \"⇍\",\n\t\"nlarr;\": \"↚\",\n\t\"nleqq;\": \"≦̸\",\n\t\"nless;\": \"≮\",\n\t\"nlsim;\": \"≴\",\n\t\"nltri;\": \"⋪\",\n\t\"notin;\": \"∉\",\n\t\"notni;\": \"∌\",\n\t\"npart;\": \"∂̸\",\n\t\"nprec;\": \"⊀\",\n\t\"nrArr;\": \"⇏\",\n\t\"nrarr;\": \"↛\",\n\t\"nrtri;\": \"⋫\",\n\t\"nsime;\": \"≄\",\n\t\"nsmid;\": \"∤\",\n\t\"nspar;\": \"∦\",\n\t\"nsubE;\": \"⫅̸\",\n\t\"nsube;\": \"⊈\",\n\t\"nsucc;\": \"⊁\",\n\t\"nsupE;\": \"⫆̸\",\n\t\"nsupe;\": \"⊉\",\n\tNtilde: \"Ñ\",\n\tntilde: \"ñ\",\n\t\"numsp;\": \" \",\n\t\"nvsim;\": \"∼⃒\",\n\t\"nwArr;\": \"⇖\",\n\t\"nwarr;\": \"↖\",\n\tOacute: \"Ó\",\n\toacute: \"ó\",\n\t\"Ocirc;\": \"Ô\",\n\t\"ocirc;\": \"ô\",\n\t\"odash;\": \"⊝\",\n\t\"OElig;\": \"Œ\",\n\t\"oelig;\": \"œ\",\n\t\"ofcir;\": \"⦿\",\n\tOgrave: \"Ò\",\n\tograve: \"ò\",\n\t\"ohbar;\": \"⦵\",\n\t\"olarr;\": \"↺\",\n\t\"olcir;\": \"⦾\",\n\t\"oline;\": \"‾\",\n\t\"Omacr;\": \"Ō\",\n\t\"omacr;\": \"ō\",\n\t\"Omega;\": \"Ω\",\n\t\"omega;\": \"ω\",\n\t\"operp;\": \"⦹\",\n\t\"oplus;\": \"⊕\",\n\t\"orarr;\": \"↻\",\n\t\"order;\": \"ℴ\",\n\tOslash: \"Ø\",\n\toslash: \"ø\",\n\tOtilde: \"Õ\",\n\totilde: \"õ\",\n\t\"ovbar;\": \"⌽\",\n\t\"parsl;\": \"⫽\",\n\t\"phone;\": \"☎\",\n\t\"plusb;\": \"⊞\",\n\t\"pluse;\": \"⩲\",\n\tplusmn: \"±\",\n\t\"pound;\": \"£\",\n\t\"prcue;\": \"≼\",\n\t\"Prime;\": \"″\",\n\t\"prime;\": \"′\",\n\t\"prnap;\": \"⪹\",\n\t\"prsim;\": \"≾\",\n\t\"quest;\": \"?\",\n\t\"rAarr;\": \"⇛\",\n\t\"radic;\": \"√\",\n\t\"rangd;\": \"⦒\",\n\t\"range;\": \"⦥\",\n\t\"raquo;\": \"»\",\n\t\"rarrb;\": \"⇥\",\n\t\"rarrc;\": \"⤳\",\n\t\"rarrw;\": \"↝\",\n\t\"ratio;\": \"∶\",\n\t\"RBarr;\": \"⤐\",\n\t\"rBarr;\": \"⤏\",\n\t\"rbarr;\": \"⤍\",\n\t\"rbbrk;\": \"❳\",\n\t\"rbrke;\": \"⦌\",\n\t\"rceil;\": \"⌉\",\n\t\"rdquo;\": \"”\",\n\t\"reals;\": \"ℝ\",\n\t\"rhard;\": \"⇁\",\n\t\"rharu;\": \"⇀\",\n\t\"rlarr;\": \"⇄\",\n\t\"rlhar;\": \"⇌\",\n\t\"rnmid;\": \"⫮\",\n\t\"roang;\": \"⟭\",\n\t\"roarr;\": \"⇾\",\n\t\"robrk;\": \"⟧\",\n\t\"ropar;\": \"⦆\",\n\t\"rrarr;\": \"⇉\",\n\t\"rsquo;\": \"’\",\n\t\"rtrie;\": \"⊵\",\n\t\"rtrif;\": \"▸\",\n\t\"sbquo;\": \"‚\",\n\t\"sccue;\": \"≽\",\n\t\"Scirc;\": \"Ŝ\",\n\t\"scirc;\": \"ŝ\",\n\t\"scnap;\": \"⪺\",\n\t\"scsim;\": \"≿\",\n\t\"sdotb;\": \"⊡\",\n\t\"sdote;\": \"⩦\",\n\t\"seArr;\": \"⇘\",\n\t\"searr;\": \"↘\",\n\t\"setmn;\": \"∖\",\n\t\"sharp;\": \"♯\",\n\t\"Sigma;\": \"Σ\",\n\t\"sigma;\": \"σ\",\n\t\"simeq;\": \"≃\",\n\t\"simgE;\": \"⪠\",\n\t\"simlE;\": \"⪟\",\n\t\"simne;\": \"≆\",\n\t\"slarr;\": \"←\",\n\t\"smile;\": \"⌣\",\n\t\"smtes;\": \"⪬︀\",\n\t\"sqcap;\": \"⊓\",\n\t\"sqcup;\": \"⊔\",\n\t\"sqsub;\": \"⊏\",\n\t\"sqsup;\": \"⊐\",\n\t\"srarr;\": \"→\",\n\t\"starf;\": \"★\",\n\t\"strns;\": \"¯\",\n\t\"subnE;\": \"⫋\",\n\t\"subne;\": \"⊊\",\n\t\"supnE;\": \"⫌\",\n\t\"supne;\": \"⊋\",\n\t\"swArr;\": \"⇙\",\n\t\"swarr;\": \"↙\",\n\t\"szlig;\": \"ß\",\n\t\"Theta;\": \"Θ\",\n\t\"theta;\": \"θ\",\n\t\"thkap;\": \"≈\",\n\t\"THORN;\": \"Þ\",\n\t\"thorn;\": \"þ\",\n\t\"Tilde;\": \"∼\",\n\t\"tilde;\": \"˜\",\n\t\"times;\": \"×\",\n\t\"TRADE;\": \"™\",\n\t\"trade;\": \"™\",\n\t\"trisb;\": \"⧍\",\n\t\"TSHcy;\": \"Ћ\",\n\t\"tshcy;\": \"ћ\",\n\t\"twixt;\": \"≬\",\n\tUacute: \"Ú\",\n\tuacute: \"ú\",\n\t\"Ubrcy;\": \"Ў\",\n\t\"ubrcy;\": \"ў\",\n\t\"Ucirc;\": \"Û\",\n\t\"ucirc;\": \"û\",\n\t\"udarr;\": \"⇅\",\n\t\"udhar;\": \"⥮\",\n\tUgrave: \"Ù\",\n\tugrave: \"ù\",\n\t\"uharl;\": \"↿\",\n\t\"uharr;\": \"↾\",\n\t\"uhblk;\": \"▀\",\n\t\"ultri;\": \"◸\",\n\t\"Umacr;\": \"Ū\",\n\t\"umacr;\": \"ū\",\n\t\"Union;\": \"⋃\",\n\t\"Uogon;\": \"Ų\",\n\t\"uogon;\": \"ų\",\n\t\"uplus;\": \"⊎\",\n\t\"upsih;\": \"ϒ\",\n\t\"UpTee;\": \"⊥\",\n\t\"Uring;\": \"Ů\",\n\t\"uring;\": \"ů\",\n\t\"urtri;\": \"◹\",\n\t\"utdot;\": \"⋰\",\n\t\"utrif;\": \"▴\",\n\t\"uuarr;\": \"⇈\",\n\t\"varpi;\": \"ϖ\",\n\t\"vBarv;\": \"⫩\",\n\t\"VDash;\": \"⊫\",\n\t\"Vdash;\": \"⊩\",\n\t\"vDash;\": \"⊨\",\n\t\"vdash;\": \"⊢\",\n\t\"veeeq;\": \"≚\",\n\t\"vltri;\": \"⊲\",\n\t\"vnsub;\": \"⊂⃒\",\n\t\"vnsup;\": \"⊃⃒\",\n\t\"vprop;\": \"∝\",\n\t\"vrtri;\": \"⊳\",\n\t\"Wcirc;\": \"Ŵ\",\n\t\"wcirc;\": \"ŵ\",\n\t\"Wedge;\": \"⋀\",\n\t\"wedge;\": \"∧\",\n\t\"xcirc;\": \"◯\",\n\t\"xdtri;\": \"▽\",\n\t\"xhArr;\": \"⟺\",\n\t\"xharr;\": \"⟷\",\n\t\"xlArr;\": \"⟸\",\n\t\"xlarr;\": \"⟵\",\n\t\"xodot;\": \"⨀\",\n\t\"xrArr;\": \"⟹\",\n\t\"xrarr;\": \"⟶\",\n\t\"xutri;\": \"△\",\n\tYacute: \"Ý\",\n\tyacute: \"ý\",\n\t\"Ycirc;\": \"Ŷ\",\n\t\"ycirc;\": \"ŷ\",\n\t\"Aacute;\": \"Á\",\n\t\"aacute;\": \"á\",\n\t\"Abreve;\": \"Ă\",\n\t\"abreve;\": \"ă\",\n\t\"Agrave;\": \"À\",\n\t\"agrave;\": \"à\",\n\t\"andand;\": \"⩕\",\n\t\"angmsd;\": \"∡\",\n\t\"angsph;\": \"∢\",\n\t\"apacir;\": \"⩯\",\n\t\"approx;\": \"≈\",\n\t\"Assign;\": \"≔\",\n\t\"Atilde;\": \"Ã\",\n\t\"atilde;\": \"ã\",\n\t\"barvee;\": \"⊽\",\n\t\"Barwed;\": \"⌆\",\n\t\"barwed;\": \"⌅\",\n\t\"becaus;\": \"∵\",\n\t\"bernou;\": \"ℬ\",\n\t\"bigcap;\": \"⋂\",\n\t\"bigcup;\": \"⋃\",\n\t\"bigvee;\": \"⋁\",\n\t\"bkarow;\": \"⤍\",\n\t\"bottom;\": \"⊥\",\n\t\"bowtie;\": \"⋈\",\n\t\"boxbox;\": \"⧉\",\n\t\"bprime;\": \"‵\",\n\t\"brvbar;\": \"¦\",\n\t\"bullet;\": \"•\",\n\t\"Bumpeq;\": \"≎\",\n\t\"bumpeq;\": \"≏\",\n\t\"Cacute;\": \"Ć\",\n\t\"cacute;\": \"ć\",\n\t\"capand;\": \"⩄\",\n\t\"capcap;\": \"⩋\",\n\t\"capcup;\": \"⩇\",\n\t\"capdot;\": \"⩀\",\n\t\"Ccaron;\": \"Č\",\n\t\"ccaron;\": \"č\",\n\t\"Ccedil;\": \"Ç\",\n\t\"ccedil;\": \"ç\",\n\t\"circeq;\": \"≗\",\n\t\"cirmid;\": \"⫯\",\n\t\"Colone;\": \"⩴\",\n\t\"colone;\": \"≔\",\n\t\"commat;\": \"@\",\n\t\"compfn;\": \"∘\",\n\t\"Conint;\": \"∯\",\n\t\"conint;\": \"∮\",\n\t\"coprod;\": \"∐\",\n\t\"copysr;\": \"℗\",\n\t\"cularr;\": \"↶\",\n\t\"CupCap;\": \"≍\",\n\t\"cupcap;\": \"⩆\",\n\t\"cupcup;\": \"⩊\",\n\t\"cupdot;\": \"⊍\",\n\t\"curarr;\": \"↷\",\n\t\"curren;\": \"¤\",\n\t\"cylcty;\": \"⌭\",\n\t\"Dagger;\": \"‡\",\n\t\"dagger;\": \"†\",\n\t\"daleth;\": \"ℸ\",\n\t\"Dcaron;\": \"Ď\",\n\t\"dcaron;\": \"ď\",\n\t\"dfisht;\": \"⥿\",\n\t\"divide;\": \"÷\",\n\t\"divonx;\": \"⋇\",\n\t\"dlcorn;\": \"⌞\",\n\t\"dlcrop;\": \"⌍\",\n\t\"dollar;\": \"$\",\n\t\"DotDot;\": \"⃜\",\n\t\"drcorn;\": \"⌟\",\n\t\"drcrop;\": \"⌌\",\n\t\"Dstrok;\": \"Đ\",\n\t\"dstrok;\": \"đ\",\n\t\"Eacute;\": \"É\",\n\t\"eacute;\": \"é\",\n\t\"easter;\": \"⩮\",\n\t\"Ecaron;\": \"Ě\",\n\t\"ecaron;\": \"ě\",\n\t\"ecolon;\": \"≕\",\n\t\"Egrave;\": \"È\",\n\t\"egrave;\": \"è\",\n\t\"egsdot;\": \"⪘\",\n\t\"elsdot;\": \"⪗\",\n\t\"emptyv;\": \"∅\",\n\t\"emsp13;\": \" \",\n\t\"emsp14;\": \" \",\n\t\"eparsl;\": \"⧣\",\n\t\"eqcirc;\": \"≖\",\n\t\"equals;\": \"=\",\n\t\"equest;\": \"≟\",\n\t\"Exists;\": \"∃\",\n\t\"female;\": \"♀\",\n\t\"ffilig;\": \"ffi\",\n\t\"ffllig;\": \"ffl\",\n\t\"ForAll;\": \"∀\",\n\t\"forall;\": \"∀\",\n\t\"frac12;\": \"½\",\n\t\"frac13;\": \"⅓\",\n\t\"frac14;\": \"¼\",\n\t\"frac15;\": \"⅕\",\n\t\"frac16;\": \"⅙\",\n\t\"frac18;\": \"⅛\",\n\t\"frac23;\": \"⅔\",\n\t\"frac25;\": \"⅖\",\n\t\"frac34;\": \"¾\",\n\t\"frac35;\": \"⅗\",\n\t\"frac38;\": \"⅜\",\n\t\"frac45;\": \"⅘\",\n\t\"frac56;\": \"⅚\",\n\t\"frac58;\": \"⅝\",\n\t\"frac78;\": \"⅞\",\n\t\"gacute;\": \"ǵ\",\n\t\"Gammad;\": \"Ϝ\",\n\t\"gammad;\": \"ϝ\",\n\t\"Gbreve;\": \"Ğ\",\n\t\"gbreve;\": \"ğ\",\n\t\"Gcedil;\": \"Ģ\",\n\t\"gesdot;\": \"⪀\",\n\t\"gesles;\": \"⪔\",\n\t\"gtlPar;\": \"⦕\",\n\t\"gtrarr;\": \"⥸\",\n\t\"gtrdot;\": \"⋗\",\n\t\"gtrsim;\": \"≳\",\n\t\"hairsp;\": \" \",\n\t\"hamilt;\": \"ℋ\",\n\t\"HARDcy;\": \"Ъ\",\n\t\"hardcy;\": \"ъ\",\n\t\"hearts;\": \"♥\",\n\t\"hellip;\": \"…\",\n\t\"hercon;\": \"⊹\",\n\t\"homtht;\": \"∻\",\n\t\"horbar;\": \"―\",\n\t\"hslash;\": \"ℏ\",\n\t\"Hstrok;\": \"Ħ\",\n\t\"hstrok;\": \"ħ\",\n\t\"hybull;\": \"⁃\",\n\t\"hyphen;\": \"‐\",\n\t\"Iacute;\": \"Í\",\n\t\"iacute;\": \"í\",\n\t\"Igrave;\": \"Ì\",\n\t\"igrave;\": \"ì\",\n\t\"iiiint;\": \"⨌\",\n\t\"iinfin;\": \"⧜\",\n\t\"incare;\": \"℅\",\n\t\"inodot;\": \"ı\",\n\t\"intcal;\": \"⊺\",\n\t\"iquest;\": \"¿\",\n\t\"isinsv;\": \"⋳\",\n\t\"Itilde;\": \"Ĩ\",\n\t\"itilde;\": \"ĩ\",\n\t\"Jsercy;\": \"Ј\",\n\t\"jsercy;\": \"ј\",\n\t\"kappav;\": \"ϰ\",\n\t\"Kcedil;\": \"Ķ\",\n\t\"kcedil;\": \"ķ\",\n\t\"kgreen;\": \"ĸ\",\n\t\"Lacute;\": \"Ĺ\",\n\t\"lacute;\": \"ĺ\",\n\t\"lagran;\": \"ℒ\",\n\t\"Lambda;\": \"Λ\",\n\t\"lambda;\": \"λ\",\n\t\"langle;\": \"⟨\",\n\t\"larrfs;\": \"⤝\",\n\t\"larrhk;\": \"↩\",\n\t\"larrlp;\": \"↫\",\n\t\"larrpl;\": \"⤹\",\n\t\"larrtl;\": \"↢\",\n\t\"lAtail;\": \"⤛\",\n\t\"latail;\": \"⤙\",\n\t\"lbrace;\": \"{\",\n\t\"lbrack;\": \"[\",\n\t\"Lcaron;\": \"Ľ\",\n\t\"lcaron;\": \"ľ\",\n\t\"Lcedil;\": \"Ļ\",\n\t\"lcedil;\": \"ļ\",\n\t\"ldquor;\": \"„\",\n\t\"lesdot;\": \"⩿\",\n\t\"lesges;\": \"⪓\",\n\t\"lfisht;\": \"⥼\",\n\t\"lfloor;\": \"⌊\",\n\t\"lharul;\": \"⥪\",\n\t\"llhard;\": \"⥫\",\n\t\"Lmidot;\": \"Ŀ\",\n\t\"lmidot;\": \"ŀ\",\n\t\"lmoust;\": \"⎰\",\n\t\"loplus;\": \"⨭\",\n\t\"lowast;\": \"∗\",\n\t\"lowbar;\": \"_\",\n\t\"lparlt;\": \"⦓\",\n\t\"lrhard;\": \"⥭\",\n\t\"lsaquo;\": \"‹\",\n\t\"lsquor;\": \"‚\",\n\t\"Lstrok;\": \"Ł\",\n\t\"lstrok;\": \"ł\",\n\t\"lthree;\": \"⋋\",\n\t\"ltimes;\": \"⋉\",\n\t\"ltlarr;\": \"⥶\",\n\t\"ltrPar;\": \"⦖\",\n\t\"mapsto;\": \"↦\",\n\t\"marker;\": \"▮\",\n\t\"mcomma;\": \"⨩\",\n\t\"midast;\": \"*\",\n\t\"midcir;\": \"⫰\",\n\t\"middot;\": \"·\",\n\t\"minusb;\": \"⊟\",\n\t\"minusd;\": \"∸\",\n\t\"mnplus;\": \"∓\",\n\t\"models;\": \"⊧\",\n\t\"mstpos;\": \"∾\",\n\t\"Nacute;\": \"Ń\",\n\t\"nacute;\": \"ń\",\n\t\"nbumpe;\": \"≏̸\",\n\t\"Ncaron;\": \"Ň\",\n\t\"ncaron;\": \"ň\",\n\t\"Ncedil;\": \"Ņ\",\n\t\"ncedil;\": \"ņ\",\n\t\"nearhk;\": \"⤤\",\n\t\"nequiv;\": \"≢\",\n\t\"nesear;\": \"⤨\",\n\t\"nexist;\": \"∄\",\n\t\"nltrie;\": \"⋬\",\n\t\"notinE;\": \"⋹̸\",\n\t\"nparsl;\": \"⫽⃥\",\n\t\"nprcue;\": \"⋠\",\n\t\"nrarrc;\": \"⤳̸\",\n\t\"nrarrw;\": \"↝̸\",\n\t\"nrtrie;\": \"⋭\",\n\t\"nsccue;\": \"⋡\",\n\t\"nsimeq;\": \"≄\",\n\t\"Ntilde;\": \"Ñ\",\n\t\"ntilde;\": \"ñ\",\n\t\"numero;\": \"№\",\n\t\"nVDash;\": \"⊯\",\n\t\"nVdash;\": \"⊮\",\n\t\"nvDash;\": \"⊭\",\n\t\"nvdash;\": \"⊬\",\n\t\"nvHarr;\": \"⤄\",\n\t\"nvlArr;\": \"⤂\",\n\t\"nvrArr;\": \"⤃\",\n\t\"nwarhk;\": \"⤣\",\n\t\"nwnear;\": \"⤧\",\n\t\"Oacute;\": \"Ó\",\n\t\"oacute;\": \"ó\",\n\t\"Odblac;\": \"Ő\",\n\t\"odblac;\": \"ő\",\n\t\"odsold;\": \"⦼\",\n\t\"Ograve;\": \"Ò\",\n\t\"ograve;\": \"ò\",\n\t\"ominus;\": \"⊖\",\n\t\"origof;\": \"⊶\",\n\t\"Oslash;\": \"Ø\",\n\t\"oslash;\": \"ø\",\n\t\"Otilde;\": \"Õ\",\n\t\"otilde;\": \"õ\",\n\t\"Otimes;\": \"⨷\",\n\t\"otimes;\": \"⊗\",\n\t\"parsim;\": \"⫳\",\n\t\"percnt;\": \"%\",\n\t\"period;\": \".\",\n\t\"permil;\": \"‰\",\n\t\"phmmat;\": \"ℳ\",\n\t\"planck;\": \"ℏ\",\n\t\"plankv;\": \"ℏ\",\n\t\"plusdo;\": \"∔\",\n\t\"plusdu;\": \"⨥\",\n\t\"plusmn;\": \"±\",\n\t\"preceq;\": \"⪯\",\n\t\"primes;\": \"ℙ\",\n\t\"prnsim;\": \"⋨\",\n\t\"propto;\": \"∝\",\n\t\"prurel;\": \"⊰\",\n\t\"puncsp;\": \" \",\n\t\"qprime;\": \"⁗\",\n\t\"Racute;\": \"Ŕ\",\n\t\"racute;\": \"ŕ\",\n\t\"rangle;\": \"⟩\",\n\t\"rarrap;\": \"⥵\",\n\t\"rarrfs;\": \"⤞\",\n\t\"rarrhk;\": \"↪\",\n\t\"rarrlp;\": \"↬\",\n\t\"rarrpl;\": \"⥅\",\n\t\"Rarrtl;\": \"⤖\",\n\t\"rarrtl;\": \"↣\",\n\t\"rAtail;\": \"⤜\",\n\t\"ratail;\": \"⤚\",\n\t\"rbrace;\": \"}\",\n\t\"rbrack;\": \"]\",\n\t\"Rcaron;\": \"Ř\",\n\t\"rcaron;\": \"ř\",\n\t\"Rcedil;\": \"Ŗ\",\n\t\"rcedil;\": \"ŗ\",\n\t\"rdquor;\": \"”\",\n\t\"rfisht;\": \"⥽\",\n\t\"rfloor;\": \"⌋\",\n\t\"rharul;\": \"⥬\",\n\t\"rmoust;\": \"⎱\",\n\t\"roplus;\": \"⨮\",\n\t\"rpargt;\": \"⦔\",\n\t\"rsaquo;\": \"›\",\n\t\"rsquor;\": \"’\",\n\t\"rthree;\": \"⋌\",\n\t\"rtimes;\": \"⋊\",\n\t\"Sacute;\": \"Ś\",\n\t\"sacute;\": \"ś\",\n\t\"Scaron;\": \"Š\",\n\t\"scaron;\": \"š\",\n\t\"Scedil;\": \"Ş\",\n\t\"scedil;\": \"ş\",\n\t\"scnsim;\": \"⋩\",\n\t\"searhk;\": \"⤥\",\n\t\"seswar;\": \"⤩\",\n\t\"sfrown;\": \"⌢\",\n\t\"SHCHcy;\": \"Щ\",\n\t\"shchcy;\": \"щ\",\n\t\"sigmaf;\": \"ς\",\n\t\"sigmav;\": \"ς\",\n\t\"simdot;\": \"⩪\",\n\t\"smashp;\": \"⨳\",\n\t\"SOFTcy;\": \"Ь\",\n\t\"softcy;\": \"ь\",\n\t\"solbar;\": \"⌿\",\n\t\"spades;\": \"♠\",\n\t\"sqcaps;\": \"⊓︀\",\n\t\"sqcups;\": \"⊔︀\",\n\t\"sqsube;\": \"⊑\",\n\t\"sqsupe;\": \"⊒\",\n\t\"Square;\": \"□\",\n\t\"square;\": \"□\",\n\t\"squarf;\": \"▪\",\n\t\"ssetmn;\": \"∖\",\n\t\"ssmile;\": \"⌣\",\n\t\"sstarf;\": \"⋆\",\n\t\"subdot;\": \"⪽\",\n\t\"Subset;\": \"⋐\",\n\t\"subset;\": \"⊂\",\n\t\"subsim;\": \"⫇\",\n\t\"subsub;\": \"⫕\",\n\t\"subsup;\": \"⫓\",\n\t\"succeq;\": \"⪰\",\n\t\"supdot;\": \"⪾\",\n\t\"Supset;\": \"⋑\",\n\t\"supset;\": \"⊃\",\n\t\"supsim;\": \"⫈\",\n\t\"supsub;\": \"⫔\",\n\t\"supsup;\": \"⫖\",\n\t\"swarhk;\": \"⤦\",\n\t\"swnwar;\": \"⤪\",\n\t\"target;\": \"⌖\",\n\t\"Tcaron;\": \"Ť\",\n\t\"tcaron;\": \"ť\",\n\t\"Tcedil;\": \"Ţ\",\n\t\"tcedil;\": \"ţ\",\n\t\"telrec;\": \"⌕\",\n\t\"there4;\": \"∴\",\n\t\"thetav;\": \"ϑ\",\n\t\"thinsp;\": \" \",\n\t\"thksim;\": \"∼\",\n\t\"timesb;\": \"⊠\",\n\t\"timesd;\": \"⨰\",\n\t\"topbot;\": \"⌶\",\n\t\"topcir;\": \"⫱\",\n\t\"tprime;\": \"‴\",\n\t\"tridot;\": \"◬\",\n\t\"Tstrok;\": \"Ŧ\",\n\t\"tstrok;\": \"ŧ\",\n\t\"Uacute;\": \"Ú\",\n\t\"uacute;\": \"ú\",\n\t\"Ubreve;\": \"Ŭ\",\n\t\"ubreve;\": \"ŭ\",\n\t\"Udblac;\": \"Ű\",\n\t\"udblac;\": \"ű\",\n\t\"ufisht;\": \"⥾\",\n\t\"Ugrave;\": \"Ù\",\n\t\"ugrave;\": \"ù\",\n\t\"ulcorn;\": \"⌜\",\n\t\"ulcrop;\": \"⌏\",\n\t\"urcorn;\": \"⌝\",\n\t\"urcrop;\": \"⌎\",\n\t\"Utilde;\": \"Ũ\",\n\t\"utilde;\": \"ũ\",\n\t\"vangrt;\": \"⦜\",\n\t\"varphi;\": \"ϕ\",\n\t\"varrho;\": \"ϱ\",\n\t\"Vdashl;\": \"⫦\",\n\t\"veebar;\": \"⊻\",\n\t\"vellip;\": \"⋮\",\n\t\"Verbar;\": \"‖\",\n\t\"verbar;\": \"|\",\n\t\"vsubnE;\": \"⫋︀\",\n\t\"vsubne;\": \"⊊︀\",\n\t\"vsupnE;\": \"⫌︀\",\n\t\"vsupne;\": \"⊋︀\",\n\t\"Vvdash;\": \"⊪\",\n\t\"wedbar;\": \"⩟\",\n\t\"wedgeq;\": \"≙\",\n\t\"weierp;\": \"℘\",\n\t\"wreath;\": \"≀\",\n\t\"xoplus;\": \"⨁\",\n\t\"xotime;\": \"⨂\",\n\t\"xsqcup;\": \"⨆\",\n\t\"xuplus;\": \"⨄\",\n\t\"xwedge;\": \"⋀\",\n\t\"Yacute;\": \"Ý\",\n\t\"yacute;\": \"ý\",\n\t\"Zacute;\": \"Ź\",\n\t\"zacute;\": \"ź\",\n\t\"Zcaron;\": \"Ž\",\n\t\"zcaron;\": \"ž\",\n\t\"zeetrf;\": \"ℨ\",\n\t\"alefsym;\": \"ℵ\",\n\t\"angrtvb;\": \"⊾\",\n\t\"angzarr;\": \"⍼\",\n\t\"asympeq;\": \"≍\",\n\t\"backsim;\": \"∽\",\n\t\"Because;\": \"∵\",\n\t\"because;\": \"∵\",\n\t\"bemptyv;\": \"⦰\",\n\t\"between;\": \"≬\",\n\t\"bigcirc;\": \"◯\",\n\t\"bigodot;\": \"⨀\",\n\t\"bigstar;\": \"★\",\n\t\"bnequiv;\": \"≡⃥\",\n\t\"boxplus;\": \"⊞\",\n\t\"Cayleys;\": \"ℭ\",\n\t\"Cconint;\": \"∰\",\n\t\"ccupssm;\": \"⩐\",\n\t\"Cedilla;\": \"¸\",\n\t\"cemptyv;\": \"⦲\",\n\t\"cirscir;\": \"⧂\",\n\t\"coloneq;\": \"≔\",\n\t\"congdot;\": \"⩭\",\n\t\"cudarrl;\": \"⤸\",\n\t\"cudarrr;\": \"⤵\",\n\t\"cularrp;\": \"⤽\",\n\t\"curarrm;\": \"⤼\",\n\t\"dbkarow;\": \"⤏\",\n\t\"ddagger;\": \"‡\",\n\t\"ddotseq;\": \"⩷\",\n\t\"demptyv;\": \"⦱\",\n\t\"Diamond;\": \"⋄\",\n\t\"diamond;\": \"⋄\",\n\t\"digamma;\": \"ϝ\",\n\t\"dotplus;\": \"∔\",\n\t\"DownTee;\": \"⊤\",\n\t\"dwangle;\": \"⦦\",\n\t\"Element;\": \"∈\",\n\t\"Epsilon;\": \"Ε\",\n\t\"epsilon;\": \"ε\",\n\t\"eqcolon;\": \"≕\",\n\t\"equivDD;\": \"⩸\",\n\t\"gesdoto;\": \"⪂\",\n\t\"gtquest;\": \"⩼\",\n\t\"gtrless;\": \"≷\",\n\t\"harrcir;\": \"⥈\",\n\t\"Implies;\": \"⇒\",\n\t\"intprod;\": \"⨼\",\n\t\"isindot;\": \"⋵\",\n\t\"larrbfs;\": \"⤟\",\n\t\"larrsim;\": \"⥳\",\n\t\"lbrksld;\": \"⦏\",\n\t\"lbrkslu;\": \"⦍\",\n\t\"ldrdhar;\": \"⥧\",\n\t\"LeftTee;\": \"⊣\",\n\t\"lesdoto;\": \"⪁\",\n\t\"lessdot;\": \"⋖\",\n\t\"lessgtr;\": \"≶\",\n\t\"lesssim;\": \"≲\",\n\t\"lotimes;\": \"⨴\",\n\t\"lozenge;\": \"◊\",\n\t\"ltquest;\": \"⩻\",\n\t\"luruhar;\": \"⥦\",\n\t\"maltese;\": \"✠\",\n\t\"minusdu;\": \"⨪\",\n\t\"napprox;\": \"≉\",\n\t\"natural;\": \"♮\",\n\t\"nearrow;\": \"↗\",\n\t\"NewLine;\": \"\\n\",\n\t\"nexists;\": \"∄\",\n\t\"NoBreak;\": \"⁠\",\n\t\"notinva;\": \"∉\",\n\t\"notinvb;\": \"⋷\",\n\t\"notinvc;\": \"⋶\",\n\t\"NotLess;\": \"≮\",\n\t\"notniva;\": \"∌\",\n\t\"notnivb;\": \"⋾\",\n\t\"notnivc;\": \"⋽\",\n\t\"npolint;\": \"⨔\",\n\t\"npreceq;\": \"⪯̸\",\n\t\"nsqsube;\": \"⋢\",\n\t\"nsqsupe;\": \"⋣\",\n\t\"nsubset;\": \"⊂⃒\",\n\t\"nsucceq;\": \"⪰̸\",\n\t\"nsupset;\": \"⊃⃒\",\n\t\"nvinfin;\": \"⧞\",\n\t\"nvltrie;\": \"⊴⃒\",\n\t\"nvrtrie;\": \"⊵⃒\",\n\t\"nwarrow;\": \"↖\",\n\t\"olcross;\": \"⦻\",\n\t\"Omicron;\": \"Ο\",\n\t\"omicron;\": \"ο\",\n\t\"orderof;\": \"ℴ\",\n\t\"orslope;\": \"⩗\",\n\t\"OverBar;\": \"‾\",\n\t\"pertenk;\": \"‱\",\n\t\"planckh;\": \"ℎ\",\n\t\"pluscir;\": \"⨢\",\n\t\"plussim;\": \"⨦\",\n\t\"plustwo;\": \"⨧\",\n\t\"precsim;\": \"≾\",\n\t\"Product;\": \"∏\",\n\t\"quatint;\": \"⨖\",\n\t\"questeq;\": \"≟\",\n\t\"rarrbfs;\": \"⤠\",\n\t\"rarrsim;\": \"⥴\",\n\t\"rbrksld;\": \"⦎\",\n\t\"rbrkslu;\": \"⦐\",\n\t\"rdldhar;\": \"⥩\",\n\t\"realine;\": \"ℛ\",\n\t\"rotimes;\": \"⨵\",\n\t\"ruluhar;\": \"⥨\",\n\t\"searrow;\": \"↘\",\n\t\"simplus;\": \"⨤\",\n\t\"simrarr;\": \"⥲\",\n\t\"subedot;\": \"⫃\",\n\t\"submult;\": \"⫁\",\n\t\"subplus;\": \"⪿\",\n\t\"subrarr;\": \"⥹\",\n\t\"succsim;\": \"≿\",\n\t\"supdsub;\": \"⫘\",\n\t\"supedot;\": \"⫄\",\n\t\"suphsol;\": \"⟉\",\n\t\"suphsub;\": \"⫗\",\n\t\"suplarr;\": \"⥻\",\n\t\"supmult;\": \"⫂\",\n\t\"supplus;\": \"⫀\",\n\t\"swarrow;\": \"↙\",\n\t\"topfork;\": \"⫚\",\n\t\"triplus;\": \"⨹\",\n\t\"tritime;\": \"⨻\",\n\t\"UpArrow;\": \"↑\",\n\t\"Uparrow;\": \"⇑\",\n\t\"uparrow;\": \"↑\",\n\t\"Upsilon;\": \"Υ\",\n\t\"upsilon;\": \"υ\",\n\t\"uwangle;\": \"⦧\",\n\t\"vzigzag;\": \"⦚\",\n\t\"zigrarr;\": \"⇝\",\n\t\"andslope;\": \"⩘\",\n\t\"angmsdaa;\": \"⦨\",\n\t\"angmsdab;\": \"⦩\",\n\t\"angmsdac;\": \"⦪\",\n\t\"angmsdad;\": \"⦫\",\n\t\"angmsdae;\": \"⦬\",\n\t\"angmsdaf;\": \"⦭\",\n\t\"angmsdag;\": \"⦮\",\n\t\"angmsdah;\": \"⦯\",\n\t\"angrtvbd;\": \"⦝\",\n\t\"approxeq;\": \"≊\",\n\t\"awconint;\": \"∳\",\n\t\"backcong;\": \"≌\",\n\t\"barwedge;\": \"⌅\",\n\t\"bbrktbrk;\": \"⎶\",\n\t\"bigoplus;\": \"⨁\",\n\t\"bigsqcup;\": \"⨆\",\n\t\"biguplus;\": \"⨄\",\n\t\"bigwedge;\": \"⋀\",\n\t\"boxminus;\": \"⊟\",\n\t\"boxtimes;\": \"⊠\",\n\t\"bsolhsub;\": \"⟈\",\n\t\"capbrcup;\": \"⩉\",\n\t\"circledR;\": \"®\",\n\t\"circledS;\": \"Ⓢ\",\n\t\"cirfnint;\": \"⨐\",\n\t\"clubsuit;\": \"♣\",\n\t\"cupbrcap;\": \"⩈\",\n\t\"curlyvee;\": \"⋎\",\n\t\"cwconint;\": \"∲\",\n\t\"DDotrahd;\": \"⤑\",\n\t\"doteqdot;\": \"≑\",\n\t\"DotEqual;\": \"≐\",\n\t\"dotminus;\": \"∸\",\n\t\"drbkarow;\": \"⤐\",\n\t\"dzigrarr;\": \"⟿\",\n\t\"elinters;\": \"⏧\",\n\t\"emptyset;\": \"∅\",\n\t\"eqvparsl;\": \"⧥\",\n\t\"fpartint;\": \"⨍\",\n\t\"geqslant;\": \"⩾\",\n\t\"gesdotol;\": \"⪄\",\n\t\"gnapprox;\": \"⪊\",\n\t\"hksearow;\": \"⤥\",\n\t\"hkswarow;\": \"⤦\",\n\t\"imagline;\": \"ℐ\",\n\t\"imagpart;\": \"ℑ\",\n\t\"infintie;\": \"⧝\",\n\t\"integers;\": \"ℤ\",\n\t\"Integral;\": \"∫\",\n\t\"intercal;\": \"⊺\",\n\t\"intlarhk;\": \"⨗\",\n\t\"laemptyv;\": \"⦴\",\n\t\"ldrushar;\": \"⥋\",\n\t\"leqslant;\": \"⩽\",\n\t\"lesdotor;\": \"⪃\",\n\t\"LessLess;\": \"⪡\",\n\t\"llcorner;\": \"⌞\",\n\t\"lnapprox;\": \"⪉\",\n\t\"lrcorner;\": \"⌟\",\n\t\"lurdshar;\": \"⥊\",\n\t\"mapstoup;\": \"↥\",\n\t\"multimap;\": \"⊸\",\n\t\"naturals;\": \"ℕ\",\n\t\"ncongdot;\": \"⩭̸\",\n\t\"NotEqual;\": \"≠\",\n\t\"notindot;\": \"⋵̸\",\n\t\"NotTilde;\": \"≁\",\n\t\"otimesas;\": \"⨶\",\n\t\"parallel;\": \"∥\",\n\t\"PartialD;\": \"∂\",\n\t\"plusacir;\": \"⨣\",\n\t\"pointint;\": \"⨕\",\n\t\"Precedes;\": \"≺\",\n\t\"precneqq;\": \"⪵\",\n\t\"precnsim;\": \"⋨\",\n\t\"profalar;\": \"⌮\",\n\t\"profline;\": \"⌒\",\n\t\"profsurf;\": \"⌓\",\n\t\"raemptyv;\": \"⦳\",\n\t\"realpart;\": \"ℜ\",\n\t\"RightTee;\": \"⊢\",\n\t\"rppolint;\": \"⨒\",\n\t\"rtriltri;\": \"⧎\",\n\t\"scpolint;\": \"⨓\",\n\t\"setminus;\": \"∖\",\n\t\"shortmid;\": \"∣\",\n\t\"smeparsl;\": \"⧤\",\n\t\"sqsubset;\": \"⊏\",\n\t\"sqsupset;\": \"⊐\",\n\t\"subseteq;\": \"⊆\",\n\t\"Succeeds;\": \"≻\",\n\t\"succneqq;\": \"⪶\",\n\t\"succnsim;\": \"⋩\",\n\t\"SuchThat;\": \"∋\",\n\t\"Superset;\": \"⊃\",\n\t\"supseteq;\": \"⊇\",\n\t\"thetasym;\": \"ϑ\",\n\t\"thicksim;\": \"∼\",\n\t\"timesbar;\": \"⨱\",\n\t\"triangle;\": \"▵\",\n\t\"triminus;\": \"⨺\",\n\t\"trpezium;\": \"⏢\",\n\t\"Uarrocir;\": \"⥉\",\n\t\"ulcorner;\": \"⌜\",\n\t\"UnderBar;\": \"_\",\n\t\"urcorner;\": \"⌝\",\n\t\"varkappa;\": \"ϰ\",\n\t\"varsigma;\": \"ς\",\n\t\"vartheta;\": \"ϑ\",\n\t\"backprime;\": \"‵\",\n\t\"backsimeq;\": \"⋍\",\n\t\"Backslash;\": \"∖\",\n\t\"bigotimes;\": \"⨂\",\n\t\"CenterDot;\": \"·\",\n\t\"centerdot;\": \"·\",\n\t\"checkmark;\": \"✓\",\n\t\"CircleDot;\": \"⊙\",\n\t\"complexes;\": \"ℂ\",\n\t\"Congruent;\": \"≡\",\n\t\"Coproduct;\": \"∐\",\n\t\"dotsquare;\": \"⊡\",\n\t\"DoubleDot;\": \"¨\",\n\t\"DownArrow;\": \"↓\",\n\t\"Downarrow;\": \"⇓\",\n\t\"downarrow;\": \"↓\",\n\t\"DownBreve;\": \"̑\",\n\t\"gtrapprox;\": \"⪆\",\n\t\"gtreqless;\": \"⋛\",\n\t\"gvertneqq;\": \"≩︀\",\n\t\"heartsuit;\": \"♥\",\n\t\"HumpEqual;\": \"≏\",\n\t\"LeftArrow;\": \"←\",\n\t\"Leftarrow;\": \"⇐\",\n\t\"leftarrow;\": \"←\",\n\t\"LeftFloor;\": \"⌊\",\n\t\"lesseqgtr;\": \"⋚\",\n\t\"LessTilde;\": \"≲\",\n\t\"lvertneqq;\": \"≨︀\",\n\t\"Mellintrf;\": \"ℳ\",\n\t\"MinusPlus;\": \"∓\",\n\t\"ngeqslant;\": \"⩾̸\",\n\t\"nleqslant;\": \"⩽̸\",\n\t\"NotCupCap;\": \"≭\",\n\t\"NotExists;\": \"∄\",\n\t\"NotSubset;\": \"⊂⃒\",\n\t\"nparallel;\": \"∦\",\n\t\"nshortmid;\": \"∤\",\n\t\"nsubseteq;\": \"⊈\",\n\t\"nsupseteq;\": \"⊉\",\n\t\"OverBrace;\": \"⏞\",\n\t\"pitchfork;\": \"⋔\",\n\t\"PlusMinus;\": \"±\",\n\t\"rationals;\": \"ℚ\",\n\t\"spadesuit;\": \"♠\",\n\t\"subseteqq;\": \"⫅\",\n\t\"subsetneq;\": \"⊊\",\n\t\"supseteqq;\": \"⫆\",\n\t\"supsetneq;\": \"⊋\",\n\t\"Therefore;\": \"∴\",\n\t\"therefore;\": \"∴\",\n\t\"ThinSpace;\": \" \",\n\t\"triangleq;\": \"≜\",\n\t\"TripleDot;\": \"⃛\",\n\t\"UnionPlus;\": \"⊎\",\n\t\"varpropto;\": \"∝\",\n\t\"Bernoullis;\": \"ℬ\",\n\t\"circledast;\": \"⊛\",\n\t\"CirclePlus;\": \"⊕\",\n\t\"complement;\": \"∁\",\n\t\"curlywedge;\": \"⋏\",\n\t\"eqslantgtr;\": \"⪖\",\n\t\"EqualTilde;\": \"≂\",\n\t\"Fouriertrf;\": \"ℱ\",\n\t\"gtreqqless;\": \"⪌\",\n\t\"ImaginaryI;\": \"ⅈ\",\n\t\"Laplacetrf;\": \"ℒ\",\n\t\"LeftVector;\": \"↼\",\n\t\"lessapprox;\": \"⪅\",\n\t\"lesseqqgtr;\": \"⪋\",\n\t\"Lleftarrow;\": \"⇚\",\n\t\"lmoustache;\": \"⎰\",\n\t\"longmapsto;\": \"⟼\",\n\t\"mapstodown;\": \"↧\",\n\t\"mapstoleft;\": \"↤\",\n\t\"nLeftarrow;\": \"⇍\",\n\t\"nleftarrow;\": \"↚\",\n\t\"NotElement;\": \"∉\",\n\t\"NotGreater;\": \"≯\",\n\t\"nsubseteqq;\": \"⫅̸\",\n\t\"nsupseteqq;\": \"⫆̸\",\n\t\"precapprox;\": \"⪷\",\n\t\"Proportion;\": \"∷\",\n\t\"RightArrow;\": \"→\",\n\t\"Rightarrow;\": \"⇒\",\n\t\"rightarrow;\": \"→\",\n\t\"RightFloor;\": \"⌋\",\n\t\"rmoustache;\": \"⎱\",\n\t\"sqsubseteq;\": \"⊑\",\n\t\"sqsupseteq;\": \"⊒\",\n\t\"subsetneqq;\": \"⫋\",\n\t\"succapprox;\": \"⪸\",\n\t\"supsetneqq;\": \"⫌\",\n\t\"ThickSpace;\": \"  \",\n\t\"TildeEqual;\": \"≃\",\n\t\"TildeTilde;\": \"≈\",\n\t\"UnderBrace;\": \"⏟\",\n\t\"UpArrowBar;\": \"⤒\",\n\t\"UpTeeArrow;\": \"↥\",\n\t\"upuparrows;\": \"⇈\",\n\t\"varepsilon;\": \"ϵ\",\n\t\"varnothing;\": \"∅\",\n\t\"backepsilon;\": \"϶\",\n\t\"blacksquare;\": \"▪\",\n\t\"circledcirc;\": \"⊚\",\n\t\"circleddash;\": \"⊝\",\n\t\"CircleMinus;\": \"⊖\",\n\t\"CircleTimes;\": \"⊗\",\n\t\"curlyeqprec;\": \"⋞\",\n\t\"curlyeqsucc;\": \"⋟\",\n\t\"diamondsuit;\": \"♦\",\n\t\"eqslantless;\": \"⪕\",\n\t\"Equilibrium;\": \"⇌\",\n\t\"expectation;\": \"ℰ\",\n\t\"GreaterLess;\": \"≷\",\n\t\"LeftCeiling;\": \"⌈\",\n\t\"LessGreater;\": \"≶\",\n\t\"MediumSpace;\": \" \",\n\t\"NotLessLess;\": \"≪̸\",\n\t\"NotPrecedes;\": \"⊀\",\n\t\"NotSucceeds;\": \"⊁\",\n\t\"NotSuperset;\": \"⊃⃒\",\n\t\"nRightarrow;\": \"⇏\",\n\t\"nrightarrow;\": \"↛\",\n\t\"OverBracket;\": \"⎴\",\n\t\"preccurlyeq;\": \"≼\",\n\t\"precnapprox;\": \"⪹\",\n\t\"quaternions;\": \"ℍ\",\n\t\"RightVector;\": \"⇀\",\n\t\"Rrightarrow;\": \"⇛\",\n\t\"RuleDelayed;\": \"⧴\",\n\t\"SmallCircle;\": \"∘\",\n\t\"SquareUnion;\": \"⊔\",\n\t\"straightphi;\": \"ϕ\",\n\t\"SubsetEqual;\": \"⊆\",\n\t\"succcurlyeq;\": \"≽\",\n\t\"succnapprox;\": \"⪺\",\n\t\"thickapprox;\": \"≈\",\n\t\"UpDownArrow;\": \"↕\",\n\t\"Updownarrow;\": \"⇕\",\n\t\"updownarrow;\": \"↕\",\n\t\"VerticalBar;\": \"∣\",\n\t\"blacklozenge;\": \"⧫\",\n\t\"DownArrowBar;\": \"⤓\",\n\t\"DownTeeArrow;\": \"↧\",\n\t\"ExponentialE;\": \"ⅇ\",\n\t\"exponentiale;\": \"ⅇ\",\n\t\"GreaterEqual;\": \"≥\",\n\t\"GreaterTilde;\": \"≳\",\n\t\"HilbertSpace;\": \"ℋ\",\n\t\"HumpDownHump;\": \"≎\",\n\t\"Intersection;\": \"⋂\",\n\t\"LeftArrowBar;\": \"⇤\",\n\t\"LeftTeeArrow;\": \"↤\",\n\t\"LeftTriangle;\": \"⊲\",\n\t\"LeftUpVector;\": \"↿\",\n\t\"NotCongruent;\": \"≢\",\n\t\"NotHumpEqual;\": \"≏̸\",\n\t\"NotLessEqual;\": \"≰\",\n\t\"NotLessTilde;\": \"≴\",\n\t\"Proportional;\": \"∝\",\n\t\"RightCeiling;\": \"⌉\",\n\t\"risingdotseq;\": \"≓\",\n\t\"RoundImplies;\": \"⥰\",\n\t\"ShortUpArrow;\": \"↑\",\n\t\"SquareSubset;\": \"⊏\",\n\t\"triangledown;\": \"▿\",\n\t\"triangleleft;\": \"◃\",\n\t\"UnderBracket;\": \"⎵\",\n\t\"varsubsetneq;\": \"⊊︀\",\n\t\"varsupsetneq;\": \"⊋︀\",\n\t\"VerticalLine;\": \"|\",\n\t\"ApplyFunction;\": \"⁡\",\n\t\"bigtriangleup;\": \"△\",\n\t\"blacktriangle;\": \"▴\",\n\t\"DifferentialD;\": \"ⅆ\",\n\t\"divideontimes;\": \"⋇\",\n\t\"DoubleLeftTee;\": \"⫤\",\n\t\"DoubleUpArrow;\": \"⇑\",\n\t\"fallingdotseq;\": \"≒\",\n\t\"hookleftarrow;\": \"↩\",\n\t\"leftarrowtail;\": \"↢\",\n\t\"leftharpoonup;\": \"↼\",\n\t\"LeftTeeVector;\": \"⥚\",\n\t\"LeftVectorBar;\": \"⥒\",\n\t\"LessFullEqual;\": \"≦\",\n\t\"LongLeftArrow;\": \"⟵\",\n\t\"Longleftarrow;\": \"⟸\",\n\t\"longleftarrow;\": \"⟵\",\n\t\"looparrowleft;\": \"↫\",\n\t\"measuredangle;\": \"∡\",\n\t\"NotEqualTilde;\": \"≂̸\",\n\t\"NotTildeEqual;\": \"≄\",\n\t\"NotTildeTilde;\": \"≉\",\n\t\"ntriangleleft;\": \"⋪\",\n\t\"Poincareplane;\": \"ℌ\",\n\t\"PrecedesEqual;\": \"⪯\",\n\t\"PrecedesTilde;\": \"≾\",\n\t\"RightArrowBar;\": \"⇥\",\n\t\"RightTeeArrow;\": \"↦\",\n\t\"RightTriangle;\": \"⊳\",\n\t\"RightUpVector;\": \"↾\",\n\t\"shortparallel;\": \"∥\",\n\t\"smallsetminus;\": \"∖\",\n\t\"SucceedsEqual;\": \"⪰\",\n\t\"SucceedsTilde;\": \"≿\",\n\t\"SupersetEqual;\": \"⊇\",\n\t\"triangleright;\": \"▹\",\n\t\"UpEquilibrium;\": \"⥮\",\n\t\"upharpoonleft;\": \"↿\",\n\t\"varsubsetneqq;\": \"⫋︀\",\n\t\"varsupsetneqq;\": \"⫌︀\",\n\t\"VerticalTilde;\": \"≀\",\n\t\"VeryThinSpace;\": \" \",\n\t\"curvearrowleft;\": \"↶\",\n\t\"DiacriticalDot;\": \"˙\",\n\t\"doublebarwedge;\": \"⌆\",\n\t\"DoubleRightTee;\": \"⊨\",\n\t\"downdownarrows;\": \"⇊\",\n\t\"DownLeftVector;\": \"↽\",\n\t\"GreaterGreater;\": \"⪢\",\n\t\"hookrightarrow;\": \"↪\",\n\t\"HorizontalLine;\": \"─\",\n\t\"InvisibleComma;\": \"⁣\",\n\t\"InvisibleTimes;\": \"⁢\",\n\t\"LeftDownVector;\": \"⇃\",\n\t\"leftleftarrows;\": \"⇇\",\n\t\"LeftRightArrow;\": \"↔\",\n\t\"Leftrightarrow;\": \"⇔\",\n\t\"leftrightarrow;\": \"↔\",\n\t\"leftthreetimes;\": \"⋋\",\n\t\"LessSlantEqual;\": \"⩽\",\n\t\"LongRightArrow;\": \"⟶\",\n\t\"Longrightarrow;\": \"⟹\",\n\t\"longrightarrow;\": \"⟶\",\n\t\"looparrowright;\": \"↬\",\n\t\"LowerLeftArrow;\": \"↙\",\n\t\"NestedLessLess;\": \"≪\",\n\t\"NotGreaterLess;\": \"≹\",\n\t\"NotLessGreater;\": \"≸\",\n\t\"NotSubsetEqual;\": \"⊈\",\n\t\"NotVerticalBar;\": \"∤\",\n\t\"nshortparallel;\": \"∦\",\n\t\"ntriangleright;\": \"⋫\",\n\t\"OpenCurlyQuote;\": \"‘\",\n\t\"ReverseElement;\": \"∋\",\n\t\"rightarrowtail;\": \"↣\",\n\t\"rightharpoonup;\": \"⇀\",\n\t\"RightTeeVector;\": \"⥛\",\n\t\"RightVectorBar;\": \"⥓\",\n\t\"ShortDownArrow;\": \"↓\",\n\t\"ShortLeftArrow;\": \"←\",\n\t\"SquareSuperset;\": \"⊐\",\n\t\"TildeFullEqual;\": \"≅\",\n\t\"trianglelefteq;\": \"⊴\",\n\t\"upharpoonright;\": \"↾\",\n\t\"UpperLeftArrow;\": \"↖\",\n\t\"ZeroWidthSpace;\": \"​\",\n\t\"bigtriangledown;\": \"▽\",\n\t\"circlearrowleft;\": \"↺\",\n\t\"CloseCurlyQuote;\": \"’\",\n\t\"ContourIntegral;\": \"∮\",\n\t\"curvearrowright;\": \"↷\",\n\t\"DoubleDownArrow;\": \"⇓\",\n\t\"DoubleLeftArrow;\": \"⇐\",\n\t\"downharpoonleft;\": \"⇃\",\n\t\"DownRightVector;\": \"⇁\",\n\t\"leftharpoondown;\": \"↽\",\n\t\"leftrightarrows;\": \"⇆\",\n\t\"LeftRightVector;\": \"⥎\",\n\t\"LeftTriangleBar;\": \"⧏\",\n\t\"LeftUpTeeVector;\": \"⥠\",\n\t\"LeftUpVectorBar;\": \"⥘\",\n\t\"LowerRightArrow;\": \"↘\",\n\t\"nLeftrightarrow;\": \"⇎\",\n\t\"nleftrightarrow;\": \"↮\",\n\t\"NotGreaterEqual;\": \"≱\",\n\t\"NotGreaterTilde;\": \"≵\",\n\t\"NotHumpDownHump;\": \"≎̸\",\n\t\"NotLeftTriangle;\": \"⋪\",\n\t\"NotSquareSubset;\": \"⊏̸\",\n\t\"ntrianglelefteq;\": \"⋬\",\n\t\"OverParenthesis;\": \"⏜\",\n\t\"RightDownVector;\": \"⇂\",\n\t\"rightleftarrows;\": \"⇄\",\n\t\"rightsquigarrow;\": \"↝\",\n\t\"rightthreetimes;\": \"⋌\",\n\t\"ShortRightArrow;\": \"→\",\n\t\"straightepsilon;\": \"ϵ\",\n\t\"trianglerighteq;\": \"⊵\",\n\t\"UpperRightArrow;\": \"↗\",\n\t\"vartriangleleft;\": \"⊲\",\n\t\"circlearrowright;\": \"↻\",\n\t\"DiacriticalAcute;\": \"´\",\n\t\"DiacriticalGrave;\": \"`\",\n\t\"DiacriticalTilde;\": \"˜\",\n\t\"DoubleRightArrow;\": \"⇒\",\n\t\"DownArrowUpArrow;\": \"⇵\",\n\t\"downharpoonright;\": \"⇂\",\n\t\"EmptySmallSquare;\": \"◻\",\n\t\"GreaterEqualLess;\": \"⋛\",\n\t\"GreaterFullEqual;\": \"≧\",\n\t\"LeftAngleBracket;\": \"⟨\",\n\t\"LeftUpDownVector;\": \"⥑\",\n\t\"LessEqualGreater;\": \"⋚\",\n\t\"NonBreakingSpace;\": \" \",\n\t\"NotPrecedesEqual;\": \"⪯̸\",\n\t\"NotRightTriangle;\": \"⋫\",\n\t\"NotSucceedsEqual;\": \"⪰̸\",\n\t\"NotSucceedsTilde;\": \"≿̸\",\n\t\"NotSupersetEqual;\": \"⊉\",\n\t\"ntrianglerighteq;\": \"⋭\",\n\t\"rightharpoondown;\": \"⇁\",\n\t\"rightrightarrows;\": \"⇉\",\n\t\"RightTriangleBar;\": \"⧐\",\n\t\"RightUpTeeVector;\": \"⥜\",\n\t\"RightUpVectorBar;\": \"⥔\",\n\t\"twoheadleftarrow;\": \"↞\",\n\t\"UnderParenthesis;\": \"⏝\",\n\t\"UpArrowDownArrow;\": \"⇅\",\n\t\"vartriangleright;\": \"⊳\",\n\t\"blacktriangledown;\": \"▾\",\n\t\"blacktriangleleft;\": \"◂\",\n\t\"DoubleUpDownArrow;\": \"⇕\",\n\t\"DoubleVerticalBar;\": \"∥\",\n\t\"DownLeftTeeVector;\": \"⥞\",\n\t\"DownLeftVectorBar;\": \"⥖\",\n\t\"FilledSmallSquare;\": \"◼\",\n\t\"GreaterSlantEqual;\": \"⩾\",\n\t\"LeftDoubleBracket;\": \"⟦\",\n\t\"LeftDownTeeVector;\": \"⥡\",\n\t\"LeftDownVectorBar;\": \"⥙\",\n\t\"leftrightharpoons;\": \"⇋\",\n\t\"LeftTriangleEqual;\": \"⊴\",\n\t\"NegativeThinSpace;\": \"​\",\n\t\"NotGreaterGreater;\": \"≫̸\",\n\t\"NotLessSlantEqual;\": \"⩽̸\",\n\t\"NotNestedLessLess;\": \"⪡̸\",\n\t\"NotReverseElement;\": \"∌\",\n\t\"NotSquareSuperset;\": \"⊐̸\",\n\t\"NotTildeFullEqual;\": \"≇\",\n\t\"RightAngleBracket;\": \"⟩\",\n\t\"rightleftharpoons;\": \"⇌\",\n\t\"RightUpDownVector;\": \"⥏\",\n\t\"SquareSubsetEqual;\": \"⊑\",\n\t\"twoheadrightarrow;\": \"↠\",\n\t\"VerticalSeparator;\": \"❘\",\n\t\"blacktriangleright;\": \"▸\",\n\t\"DownRightTeeVector;\": \"⥟\",\n\t\"DownRightVectorBar;\": \"⥗\",\n\t\"LongLeftRightArrow;\": \"⟷\",\n\t\"Longleftrightarrow;\": \"⟺\",\n\t\"longleftrightarrow;\": \"⟷\",\n\t\"NegativeThickSpace;\": \"​\",\n\t\"NotLeftTriangleBar;\": \"⧏̸\",\n\t\"PrecedesSlantEqual;\": \"≼\",\n\t\"ReverseEquilibrium;\": \"⇋\",\n\t\"RightDoubleBracket;\": \"⟧\",\n\t\"RightDownTeeVector;\": \"⥝\",\n\t\"RightDownVectorBar;\": \"⥕\",\n\t\"RightTriangleEqual;\": \"⊵\",\n\t\"SquareIntersection;\": \"⊓\",\n\t\"SucceedsSlantEqual;\": \"≽\",\n\t\"DoubleLongLeftArrow;\": \"⟸\",\n\t\"DownLeftRightVector;\": \"⥐\",\n\t\"LeftArrowRightArrow;\": \"⇆\",\n\t\"leftrightsquigarrow;\": \"↭\",\n\t\"NegativeMediumSpace;\": \"​\",\n\t\"NotGreaterFullEqual;\": \"≧̸\",\n\t\"NotRightTriangleBar;\": \"⧐̸\",\n\t\"RightArrowLeftArrow;\": \"⇄\",\n\t\"SquareSupersetEqual;\": \"⊒\",\n\t\"CapitalDifferentialD;\": \"ⅅ\",\n\t\"DoubleLeftRightArrow;\": \"⇔\",\n\t\"DoubleLongRightArrow;\": \"⟹\",\n\t\"EmptyVerySmallSquare;\": \"▫\",\n\t\"NestedGreaterGreater;\": \"≫\",\n\t\"NotDoubleVerticalBar;\": \"∦\",\n\t\"NotGreaterSlantEqual;\": \"⩾̸\",\n\t\"NotLeftTriangleEqual;\": \"⋬\",\n\t\"NotSquareSubsetEqual;\": \"⋢\",\n\t\"OpenCurlyDoubleQuote;\": \"“\",\n\t\"ReverseUpEquilibrium;\": \"⥯\",\n\t\"CloseCurlyDoubleQuote;\": \"”\",\n\t\"DoubleContourIntegral;\": \"∯\",\n\t\"FilledVerySmallSquare;\": \"▪\",\n\t\"NegativeVeryThinSpace;\": \"​\",\n\t\"NotPrecedesSlantEqual;\": \"⋠\",\n\t\"NotRightTriangleEqual;\": \"⋭\",\n\t\"NotSucceedsSlantEqual;\": \"⋡\",\n\t\"DiacriticalDoubleAcute;\": \"˝\",\n\t\"NotSquareSupersetEqual;\": \"⋣\",\n\t\"NotNestedGreaterGreater;\": \"⪢̸\",\n\t\"ClockwiseContourIntegral;\": \"∲\",\n\t\"DoubleLongLeftRightArrow;\": \"⟺\",\n\t\"CounterClockwiseContourIntegral;\": \"∳\"\n};\n\n// lazy compute this to make this file tree-shakable for browser\r\nlet maxCRNameLength;\r\nconst decodeHtml = (rawText, asAttr) => {\r\n let offset = 0;\r\n const end = rawText.length;\r\n let decodedText = '';\r\n function advance(length) {\r\n offset += length;\r\n rawText = rawText.slice(length);\r\n }\r\n while (offset < end) {\r\n const head = /&(?:#x?)?/i.exec(rawText);\r\n if (!head || offset + head.index >= end) {\r\n const remaining = end - offset;\r\n decodedText += rawText.slice(0, remaining);\r\n advance(remaining);\r\n break;\r\n }\r\n // Advance to the \"&\".\r\n decodedText += rawText.slice(0, head.index);\r\n advance(head.index);\r\n if (head[0] === '&') {\r\n // Named character reference.\r\n let name = '';\r\n let value = undefined;\r\n if (/[0-9a-z]/i.test(rawText[1])) {\r\n if (!maxCRNameLength) {\r\n maxCRNameLength = Object.keys(namedCharacterReferences).reduce((max, name) => Math.max(max, name.length), 0);\r\n }\r\n for (let length = maxCRNameLength; !value && length > 0; --length) {\r\n name = rawText.substr(1, length);\r\n value = namedCharacterReferences[name];\r\n }\r\n if (value) {\r\n const semi = name.endsWith(';');\r\n if (asAttr &&\r\n !semi &&\r\n /[=a-z0-9]/i.test(rawText[name.length + 1] || '')) {\r\n decodedText += '&' + name;\r\n advance(1 + name.length);\r\n }\r\n else {\r\n decodedText += value;\r\n advance(1 + name.length);\r\n }\r\n }\r\n else {\r\n decodedText += '&' + name;\r\n advance(1 + name.length);\r\n }\r\n }\r\n else {\r\n decodedText += '&';\r\n advance(1);\r\n }\r\n }\r\n else {\r\n // Numeric character reference.\r\n const hex = head[0] === '&#x';\r\n const pattern = hex ? /^&#x([0-9a-f]+);?/i : /^&#([0-9]+);?/;\r\n const body = pattern.exec(rawText);\r\n if (!body) {\r\n decodedText += head[0];\r\n advance(head[0].length);\r\n }\r\n else {\r\n // https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\r\n let cp = Number.parseInt(body[1], hex ? 16 : 10);\r\n if (cp === 0) {\r\n cp = 0xfffd;\r\n }\r\n else if (cp > 0x10ffff) {\r\n cp = 0xfffd;\r\n }\r\n else if (cp >= 0xd800 && cp <= 0xdfff) {\r\n cp = 0xfffd;\r\n }\r\n else if ((cp >= 0xfdd0 && cp <= 0xfdef) || (cp & 0xfffe) === 0xfffe) ;\r\n else if ((cp >= 0x01 && cp <= 0x08) ||\r\n cp === 0x0b ||\r\n (cp >= 0x0d && cp <= 0x1f) ||\r\n (cp >= 0x7f && cp <= 0x9f)) {\r\n cp = CCR_REPLACEMENTS[cp] || cp;\r\n }\r\n decodedText += String.fromCodePoint(cp);\r\n advance(body[0].length);\r\n }\r\n }\r\n }\r\n return decodedText;\r\n};\r\n// https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\r\nconst CCR_REPLACEMENTS = {\r\n 0x80: 0x20ac,\r\n 0x82: 0x201a,\r\n 0x83: 0x0192,\r\n 0x84: 0x201e,\r\n 0x85: 0x2026,\r\n 0x86: 0x2020,\r\n 0x87: 0x2021,\r\n 0x88: 0x02c6,\r\n 0x89: 0x2030,\r\n 0x8a: 0x0160,\r\n 0x8b: 0x2039,\r\n 0x8c: 0x0152,\r\n 0x8e: 0x017d,\r\n 0x91: 0x2018,\r\n 0x92: 0x2019,\r\n 0x93: 0x201c,\r\n 0x94: 0x201d,\r\n 0x95: 0x2022,\r\n 0x96: 0x2013,\r\n 0x97: 0x2014,\r\n 0x98: 0x02dc,\r\n 0x99: 0x2122,\r\n 0x9a: 0x0161,\r\n 0x9b: 0x203a,\r\n 0x9c: 0x0153,\r\n 0x9e: 0x017e,\r\n 0x9f: 0x0178\r\n};\n\nconst isRawTextContainer = /*#__PURE__*/ shared.makeMap('style,iframe,script,noscript', true);\r\nconst parserOptions = {\r\n isVoidTag: shared.isVoidTag,\r\n isNativeTag: tag => shared.isHTMLTag(tag) || shared.isSVGTag(tag),\r\n isPreTag: tag => tag === 'pre',\r\n decodeEntities: decodeHtml,\r\n isBuiltInComponent: (tag) => {\r\n if (compilerCore.isBuiltInType(tag, `Transition`)) {\r\n return TRANSITION;\r\n }\r\n else if (compilerCore.isBuiltInType(tag, `TransitionGroup`)) {\r\n return TRANSITION_GROUP;\r\n }\r\n },\r\n // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\r\n getNamespace(tag, parent) {\r\n let ns = parent ? parent.ns : 0 /* HTML */;\r\n if (parent && ns === 2 /* MATH_ML */) {\r\n if (parent.tag === 'annotation-xml') {\r\n if (tag === 'svg') {\r\n return 1 /* SVG */;\r\n }\r\n if (parent.props.some(a => a.type === 6 /* ATTRIBUTE */ &&\r\n a.name === 'encoding' &&\r\n a.value != null &&\r\n (a.value.content === 'text/html' ||\r\n a.value.content === 'application/xhtml+xml'))) {\r\n ns = 0 /* HTML */;\r\n }\r\n }\r\n else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\r\n tag !== 'mglyph' &&\r\n tag !== 'malignmark') {\r\n ns = 0 /* HTML */;\r\n }\r\n }\r\n else if (parent && ns === 1 /* SVG */) {\r\n if (parent.tag === 'foreignObject' ||\r\n parent.tag === 'desc' ||\r\n parent.tag === 'title') {\r\n ns = 0 /* HTML */;\r\n }\r\n }\r\n if (ns === 0 /* HTML */) {\r\n if (tag === 'svg') {\r\n return 1 /* SVG */;\r\n }\r\n if (tag === 'math') {\r\n return 2 /* MATH_ML */;\r\n }\r\n }\r\n return ns;\r\n },\r\n // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\r\n getTextMode({ tag, ns }) {\r\n if (ns === 0 /* HTML */) {\r\n if (tag === 'textarea' || tag === 'title') {\r\n return 1 /* RCDATA */;\r\n }\r\n if (isRawTextContainer(tag)) {\r\n return 2 /* RAWTEXT */;\r\n }\r\n }\r\n return 0 /* DATA */;\r\n }\r\n};\n\n// Parse inline CSS strings for static style attributes into an object.\r\n// This is a NodeTransform since it works on the static `style` attribute and\r\n// converts it into a dynamic equivalent:\r\n// style=\"color: red\" -> :style='{ \"color\": \"red\" }'\r\n// It is then processed by `transformElement` and included in the generated\r\n// props.\r\nconst transformStyle = node => {\r\n if (node.type === 1 /* ELEMENT */) {\r\n node.props.forEach((p, i) => {\r\n if (p.type === 6 /* ATTRIBUTE */ && p.name === 'style' && p.value) {\r\n // replace p with an expression node\r\n node.props[i] = {\r\n type: 7 /* DIRECTIVE */,\r\n name: `bind`,\r\n arg: compilerCore.createSimpleExpression(`style`, true, p.loc),\r\n exp: parseInlineCSS(p.value.content, p.loc),\r\n modifiers: [],\r\n loc: p.loc\r\n };\r\n }\r\n });\r\n }\r\n};\r\nconst parseInlineCSS = (cssText, loc) => {\r\n const normalized = shared.parseStringStyle(cssText);\r\n return compilerCore.createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* CAN_STRINGIFY */);\r\n};\n\nfunction createDOMCompilerError(code, loc) {\r\n return compilerCore.createCompilerError(code, loc, DOMErrorMessages );\r\n}\r\nconst DOMErrorMessages = {\r\n [50 /* X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\r\n [51 /* X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\r\n [52 /* X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\r\n [53 /* X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\r\n [54 /* X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\r\n [55 /* X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\r\n [56 /* X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\r\n [57 /* X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\r\n [58 /* X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\r\n [59 /* X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\r\n [60 /* X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\r\n};\n\nconst transformVHtml = (dir, node, context) => {\r\n const { exp, loc } = dir;\r\n if (!exp) {\r\n context.onError(createDOMCompilerError(50 /* X_V_HTML_NO_EXPRESSION */, loc));\r\n }\r\n if (node.children.length) {\r\n context.onError(createDOMCompilerError(51 /* X_V_HTML_WITH_CHILDREN */, loc));\r\n node.children.length = 0;\r\n }\r\n return {\r\n props: [\r\n compilerCore.createObjectProperty(compilerCore.createSimpleExpression(`innerHTML`, true, loc), exp || compilerCore.createSimpleExpression('', true))\r\n ]\r\n };\r\n};\n\nconst transformVText = (dir, node, context) => {\r\n const { exp, loc } = dir;\r\n if (!exp) {\r\n context.onError(createDOMCompilerError(52 /* X_V_TEXT_NO_EXPRESSION */, loc));\r\n }\r\n if (node.children.length) {\r\n context.onError(createDOMCompilerError(53 /* X_V_TEXT_WITH_CHILDREN */, loc));\r\n node.children.length = 0;\r\n }\r\n return {\r\n props: [\r\n compilerCore.createObjectProperty(compilerCore.createSimpleExpression(`textContent`, true), exp\r\n ? compilerCore.createCallExpression(context.helperString(compilerCore.TO_DISPLAY_STRING), [exp], loc)\r\n : compilerCore.createSimpleExpression('', true))\r\n ]\r\n };\r\n};\n\nconst transformModel = (dir, node, context) => {\r\n const baseResult = compilerCore.transformModel(dir, node, context);\r\n // base transform has errors OR component v-model (only need props)\r\n if (!baseResult.props.length || node.tagType === 1 /* COMPONENT */) {\r\n return baseResult;\r\n }\r\n if (dir.arg) {\r\n context.onError(createDOMCompilerError(55 /* X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\r\n }\r\n function checkDuplicatedValue() {\r\n const value = compilerCore.findProp(node, 'value');\r\n if (value) {\r\n context.onError(createDOMCompilerError(57 /* X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\r\n }\r\n }\r\n const { tag } = node;\r\n const isCustomElement = context.isCustomElement(tag);\r\n if (tag === 'input' ||\r\n tag === 'textarea' ||\r\n tag === 'select' ||\r\n isCustomElement) {\r\n let directiveToUse = V_MODEL_TEXT;\r\n let isInvalidType = false;\r\n if (tag === 'input' || isCustomElement) {\r\n const type = compilerCore.findProp(node, `type`);\r\n if (type) {\r\n if (type.type === 7 /* DIRECTIVE */) {\r\n // :type=\"foo\"\r\n directiveToUse = V_MODEL_DYNAMIC;\r\n }\r\n else if (type.value) {\r\n switch (type.value.content) {\r\n case 'radio':\r\n directiveToUse = V_MODEL_RADIO;\r\n break;\r\n case 'checkbox':\r\n directiveToUse = V_MODEL_CHECKBOX;\r\n break;\r\n case 'file':\r\n isInvalidType = true;\r\n context.onError(createDOMCompilerError(56 /* X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\r\n break;\r\n default:\r\n // text type\r\n checkDuplicatedValue();\r\n break;\r\n }\r\n }\r\n }\r\n else if (compilerCore.hasDynamicKeyVBind(node)) {\r\n // element has bindings with dynamic keys, which can possibly contain\r\n // \"type\".\r\n directiveToUse = V_MODEL_DYNAMIC;\r\n }\r\n else {\r\n // text type\r\n checkDuplicatedValue();\r\n }\r\n }\r\n else if (tag === 'select') {\r\n directiveToUse = V_MODEL_SELECT;\r\n }\r\n else {\r\n // textarea\r\n checkDuplicatedValue();\r\n }\r\n // inject runtime directive\r\n // by returning the helper symbol via needRuntime\r\n // the import will replaced a resolveDirective call.\r\n if (!isInvalidType) {\r\n baseResult.needRuntime = context.helper(directiveToUse);\r\n }\r\n }\r\n else {\r\n context.onError(createDOMCompilerError(54 /* X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\r\n }\r\n // native vmodel doesn't need the `modelValue` props since they are also\r\n // passed to the runtime as `binding.value`. removing it reduces code size.\r\n baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n p.key.content === 'modelValue'));\r\n return baseResult;\r\n};\n\nconst isEventOptionModifier = /*#__PURE__*/ shared.makeMap(`passive,once,capture`);\r\nconst isNonKeyModifier = /*#__PURE__*/ shared.makeMap(\r\n// event propagation management\r\n`stop,prevent,self,` +\r\n // system modifiers + exact\r\n `ctrl,shift,alt,meta,exact,` +\r\n // mouse\r\n `middle`);\r\n// left & right could be mouse or key modifiers based on event type\r\nconst maybeKeyModifier = /*#__PURE__*/ shared.makeMap('left,right');\r\nconst isKeyboardEvent = /*#__PURE__*/ shared.makeMap(`onkeyup,onkeydown,onkeypress`, true);\r\nconst resolveModifiers = (key, modifiers, context, loc) => {\r\n const keyModifiers = [];\r\n const nonKeyModifiers = [];\r\n const eventOptionModifiers = [];\r\n for (let i = 0; i < modifiers.length; i++) {\r\n const modifier = modifiers[i];\r\n if (modifier === 'native' &&\r\n compilerCore.checkCompatEnabled(\"COMPILER_V_ON_NATIVE\" /* COMPILER_V_ON_NATIVE */, context, loc)) {\r\n eventOptionModifiers.push(modifier);\r\n }\r\n else if (isEventOptionModifier(modifier)) {\r\n // eventOptionModifiers: modifiers for addEventListener() options,\r\n // e.g. .passive & .capture\r\n eventOptionModifiers.push(modifier);\r\n }\r\n else {\r\n // runtimeModifiers: modifiers that needs runtime guards\r\n if (maybeKeyModifier(modifier)) {\r\n if (compilerCore.isStaticExp(key)) {\r\n if (isKeyboardEvent(key.content)) {\r\n keyModifiers.push(modifier);\r\n }\r\n else {\r\n nonKeyModifiers.push(modifier);\r\n }\r\n }\r\n else {\r\n keyModifiers.push(modifier);\r\n nonKeyModifiers.push(modifier);\r\n }\r\n }\r\n else {\r\n if (isNonKeyModifier(modifier)) {\r\n nonKeyModifiers.push(modifier);\r\n }\r\n else {\r\n keyModifiers.push(modifier);\r\n }\r\n }\r\n }\r\n }\r\n return {\r\n keyModifiers,\r\n nonKeyModifiers,\r\n eventOptionModifiers\r\n };\r\n};\r\nconst transformClick = (key, event) => {\r\n const isStaticClick = compilerCore.isStaticExp(key) && key.content.toLowerCase() === 'onclick';\r\n return isStaticClick\r\n ? compilerCore.createSimpleExpression(event, true)\r\n : key.type !== 4 /* SIMPLE_EXPRESSION */\r\n ? compilerCore.createCompoundExpression([\r\n `(`,\r\n key,\r\n `) === \"onClick\" ? \"${event}\" : (`,\r\n key,\r\n `)`\r\n ])\r\n : key;\r\n};\r\nconst transformOn = (dir, node, context) => {\r\n return compilerCore.transformOn(dir, node, context, baseResult => {\r\n const { modifiers } = dir;\r\n if (!modifiers.length)\r\n return baseResult;\r\n let { key, value: handlerExp } = baseResult.props[0];\r\n const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\r\n // normalize click.right and click.middle since they don't actually fire\r\n if (nonKeyModifiers.includes('right')) {\r\n key = transformClick(key, `onContextmenu`);\r\n }\r\n if (nonKeyModifiers.includes('middle')) {\r\n key = transformClick(key, `onMouseup`);\r\n }\r\n if (nonKeyModifiers.length) {\r\n handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\r\n handlerExp,\r\n JSON.stringify(nonKeyModifiers)\r\n ]);\r\n }\r\n if (keyModifiers.length &&\r\n // if event name is dynamic, always wrap with keys guard\r\n (!compilerCore.isStaticExp(key) || isKeyboardEvent(key.content))) {\r\n handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_KEYS), [\r\n handlerExp,\r\n JSON.stringify(keyModifiers)\r\n ]);\r\n }\r\n if (eventOptionModifiers.length) {\r\n const modifierPostfix = eventOptionModifiers.map(shared.capitalize).join('');\r\n key = compilerCore.isStaticExp(key)\r\n ? compilerCore.createSimpleExpression(`${key.content}${modifierPostfix}`, true)\r\n : compilerCore.createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\r\n }\r\n return {\r\n props: [compilerCore.createObjectProperty(key, handlerExp)]\r\n };\r\n });\r\n};\n\nconst transformShow = (dir, node, context) => {\r\n const { exp, loc } = dir;\r\n if (!exp) {\r\n context.onError(createDOMCompilerError(58 /* X_V_SHOW_NO_EXPRESSION */, loc));\r\n }\r\n return {\r\n props: [],\r\n needRuntime: context.helper(V_SHOW)\r\n };\r\n};\n\nconst warnTransitionChildren = (node, context) => {\r\n if (node.type === 1 /* ELEMENT */ &&\r\n node.tagType === 1 /* COMPONENT */) {\r\n const component = context.isBuiltInComponent(node.tag);\r\n if (component === TRANSITION) {\r\n return () => {\r\n if (node.children.length && hasMultipleChildren(node)) {\r\n context.onError(createDOMCompilerError(59 /* X_TRANSITION_INVALID_CHILDREN */, {\r\n start: node.children[0].loc.start,\r\n end: node.children[node.children.length - 1].loc.end,\r\n source: ''\r\n }));\r\n }\r\n };\r\n }\r\n }\r\n};\r\nfunction hasMultipleChildren(node) {\r\n // #1352 filter out potential comment nodes.\r\n const children = (node.children = node.children.filter(c => c.type !== 3 /* COMMENT */ &&\r\n !(c.type === 2 /* TEXT */ && !c.content.trim())));\r\n const child = children[0];\r\n return (children.length !== 1 ||\r\n child.type === 11 /* FOR */ ||\r\n (child.type === 9 /* IF */ && child.branches.some(hasMultipleChildren)));\r\n}\n\n/**\r\n * This module is Node-only.\r\n */\r\n/**\r\n * Turn eligible hoisted static trees into stringified static nodes, e.g.\r\n *\r\n * ```js\r\n * const _hoisted_1 = createStaticVNode(`<div class=\"foo\">bar</div>`)\r\n * ```\r\n *\r\n * A single static vnode can contain stringified content for **multiple**\r\n * consecutive nodes (element and plain text), called a \"chunk\".\r\n * `@vue/runtime-dom` will create the content via innerHTML in a hidden\r\n * container element and insert all the nodes in place. The call must also\r\n * provide the number of nodes contained in the chunk so that during hydration\r\n * we can know how many nodes the static vnode should adopt.\r\n *\r\n * The optimization scans a children list that contains hoisted nodes, and\r\n * tries to find the largest chunk of consecutive hoisted nodes before running\r\n * into a non-hoisted node or the end of the list. A chunk is then converted\r\n * into a single static vnode and replaces the hoisted expression of the first\r\n * node in the chunk. Other nodes in the chunk are considered \"merged\" and\r\n * therefore removed from both the hoist list and the children array.\r\n *\r\n * This optimization is only performed in Node.js.\r\n */\r\nconst stringifyStatic = (children, context, parent) => {\r\n // bail stringification for slot content\r\n if (context.scopes.vSlot > 0) {\r\n return;\r\n }\r\n let nc = 0; // current node count\r\n let ec = 0; // current element with binding count\r\n const currentChunk = [];\r\n const stringifyCurrentChunk = (currentIndex) => {\r\n if (nc >= 20 /* NODE_COUNT */ ||\r\n ec >= 5 /* ELEMENT_WITH_BINDING_COUNT */) {\r\n // combine all currently eligible nodes into a single static vnode call\r\n const staticCall = compilerCore.createCallExpression(context.helper(compilerCore.CREATE_STATIC), [\r\n JSON.stringify(currentChunk.map(node => stringifyNode(node, context)).join('')),\r\n // the 2nd argument indicates the number of DOM nodes this static vnode\r\n // will insert / hydrate\r\n String(currentChunk.length)\r\n ]);\r\n // replace the first node's hoisted expression with the static vnode call\r\n replaceHoist(currentChunk[0], staticCall, context);\r\n if (currentChunk.length > 1) {\r\n for (let i = 1; i < currentChunk.length; i++) {\r\n // for the merged nodes, set their hoisted expression to null\r\n replaceHoist(currentChunk[i], null, context);\r\n }\r\n // also remove merged nodes from children\r\n const deleteCount = currentChunk.length - 1;\r\n children.splice(currentIndex - currentChunk.length + 1, deleteCount);\r\n return deleteCount;\r\n }\r\n }\r\n return 0;\r\n };\r\n let i = 0;\r\n for (; i < children.length; i++) {\r\n const child = children[i];\r\n const hoisted = getHoistedNode(child);\r\n if (hoisted) {\r\n // presence of hoisted means child must be a stringifiable node\r\n const node = child;\r\n const result = analyzeNode(node);\r\n if (result) {\r\n // node is stringifiable, record state\r\n nc += result[0];\r\n ec += result[1];\r\n currentChunk.push(node);\r\n continue;\r\n }\r\n }\r\n // we only reach here if we ran into a node that is not stringifiable\r\n // check if currently analyzed nodes meet criteria for stringification.\r\n // adjust iteration index\r\n i -= stringifyCurrentChunk(i);\r\n // reset state\r\n nc = 0;\r\n ec = 0;\r\n currentChunk.length = 0;\r\n }\r\n // in case the last node was also stringifiable\r\n stringifyCurrentChunk(i);\r\n};\r\nconst getHoistedNode = (node) => ((node.type === 1 /* ELEMENT */ && node.tagType === 0 /* ELEMENT */) ||\r\n node.type == 12 /* TEXT_CALL */) &&\r\n node.codegenNode &&\r\n node.codegenNode.type === 4 /* SIMPLE_EXPRESSION */ &&\r\n node.codegenNode.hoisted;\r\nconst dataAriaRE = /^(data|aria)-/;\r\nconst isStringifiableAttr = (name, ns) => {\r\n return ((ns === 0 /* HTML */\r\n ? shared.isKnownHtmlAttr(name)\r\n : ns === 1 /* SVG */\r\n ? shared.isKnownSvgAttr(name)\r\n : false) || dataAriaRE.test(name));\r\n};\r\nconst replaceHoist = (node, replacement, context) => {\r\n const hoistToReplace = node.codegenNode.hoisted;\r\n context.hoists[context.hoists.indexOf(hoistToReplace)] = replacement;\r\n};\r\nconst isNonStringifiable = /*#__PURE__*/ shared.makeMap(`caption,thead,tr,th,tbody,td,tfoot,colgroup,col`);\r\n/**\r\n * for a hoisted node, analyze it and return:\r\n * - false: bailed (contains runtime constant)\r\n * - [nc, ec] where\r\n * - nc is the number of nodes inside\r\n * - ec is the number of element with bindings inside\r\n */\r\nfunction analyzeNode(node) {\r\n if (node.type === 1 /* ELEMENT */ && isNonStringifiable(node.tag)) {\r\n return false;\r\n }\r\n if (node.type === 12 /* TEXT_CALL */) {\r\n return [1, 0];\r\n }\r\n let nc = 1; // node count\r\n let ec = node.props.length > 0 ? 1 : 0; // element w/ binding count\r\n let bailed = false;\r\n const bail = () => {\r\n bailed = true;\r\n return false;\r\n };\r\n // TODO: check for cases where using innerHTML will result in different\r\n // output compared to imperative node insertions.\r\n // probably only need to check for most common case\r\n // i.e. non-phrasing-content tags inside `<p>`\r\n function walk(node) {\r\n for (let i = 0; i < node.props.length; i++) {\r\n const p = node.props[i];\r\n // bail on non-attr bindings\r\n if (p.type === 6 /* ATTRIBUTE */ &&\r\n !isStringifiableAttr(p.name, node.ns)) {\r\n return bail();\r\n }\r\n if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind') {\r\n // bail on non-attr bindings\r\n if (p.arg &&\r\n (p.arg.type === 8 /* COMPOUND_EXPRESSION */ ||\r\n (p.arg.isStatic && !isStringifiableAttr(p.arg.content, node.ns)))) {\r\n return bail();\r\n }\r\n }\r\n }\r\n for (let i = 0; i < node.children.length; i++) {\r\n nc++;\r\n const child = node.children[i];\r\n if (child.type === 1 /* ELEMENT */) {\r\n if (child.props.length > 0) {\r\n ec++;\r\n }\r\n walk(child);\r\n if (bailed) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n return walk(node) ? [nc, ec] : false;\r\n}\r\nfunction stringifyNode(node, context) {\r\n if (shared.isString(node)) {\r\n return node;\r\n }\r\n if (shared.isSymbol(node)) {\r\n return ``;\r\n }\r\n switch (node.type) {\r\n case 1 /* ELEMENT */:\r\n return stringifyElement(node, context);\r\n case 2 /* TEXT */:\r\n return shared.escapeHtml(node.content);\r\n case 3 /* COMMENT */:\r\n return `<!--${shared.escapeHtml(node.content)}-->`;\r\n case 5 /* INTERPOLATION */:\r\n return shared.escapeHtml(shared.toDisplayString(evaluateConstant(node.content)));\r\n case 8 /* COMPOUND_EXPRESSION */:\r\n return shared.escapeHtml(evaluateConstant(node));\r\n case 12 /* TEXT_CALL */:\r\n return stringifyNode(node.content, context);\r\n default:\r\n // static trees will not contain if/for nodes\r\n return '';\r\n }\r\n}\r\nfunction stringifyElement(node, context) {\r\n let res = `<${node.tag}`;\r\n for (let i = 0; i < node.props.length; i++) {\r\n const p = node.props[i];\r\n if (p.type === 6 /* ATTRIBUTE */) {\r\n res += ` ${p.name}`;\r\n if (p.value) {\r\n res += `=\"${shared.escapeHtml(p.value.content)}\"`;\r\n }\r\n }\r\n else if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind') {\r\n // constant v-bind, e.g. :foo=\"1\"\r\n let evaluated = evaluateConstant(p.exp);\r\n if (evaluated != null) {\r\n const arg = p.arg && p.arg.content;\r\n if (arg === 'class') {\r\n evaluated = shared.normalizeClass(evaluated);\r\n }\r\n else if (arg === 'style') {\r\n evaluated = shared.stringifyStyle(shared.normalizeStyle(evaluated));\r\n }\r\n res += ` ${p.arg.content}=\"${shared.escapeHtml(evaluated)}\"`;\r\n }\r\n }\r\n }\r\n if (context.scopeId) {\r\n res += ` ${context.scopeId}`;\r\n }\r\n res += `>`;\r\n for (let i = 0; i < node.children.length; i++) {\r\n res += stringifyNode(node.children[i], context);\r\n }\r\n if (!shared.isVoidTag(node.tag)) {\r\n res += `</${node.tag}>`;\r\n }\r\n return res;\r\n}\r\n// __UNSAFE__\r\n// Reason: eval.\r\n// It's technically safe to eval because only constant expressions are possible\r\n// here, e.g. `{{ 1 }}` or `{{ 'foo' }}`\r\n// in addition, constant exps bail on presence of parens so you can't even\r\n// run JSFuck in here. But we mark it unsafe for security review purposes.\r\n// (see compiler-core/src/transformExpressions)\r\nfunction evaluateConstant(exp) {\r\n if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n return new Function(`return ${exp.content}`)();\r\n }\r\n else {\r\n // compound\r\n let res = ``;\r\n exp.children.forEach(c => {\r\n if (shared.isString(c) || shared.isSymbol(c)) {\r\n return;\r\n }\r\n if (c.type === 2 /* TEXT */) {\r\n res += c.content;\r\n }\r\n else if (c.type === 5 /* INTERPOLATION */) {\r\n res += shared.toDisplayString(evaluateConstant(c.content));\r\n }\r\n else {\r\n res += evaluateConstant(c);\r\n }\r\n });\r\n return res;\r\n }\r\n}\n\nconst ignoreSideEffectTags = (node, context) => {\r\n if (node.type === 1 /* ELEMENT */ &&\r\n node.tagType === 0 /* ELEMENT */ &&\r\n (node.tag === 'script' || node.tag === 'style')) {\r\n context.onError(createDOMCompilerError(60 /* X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\r\n context.removeNode();\r\n }\r\n};\n\nconst DOMNodeTransforms = [\r\n transformStyle,\r\n ...([warnTransitionChildren] )\r\n];\r\nconst DOMDirectiveTransforms = {\r\n cloak: compilerCore.noopDirectiveTransform,\r\n html: transformVHtml,\r\n text: transformVText,\r\n model: transformModel,\r\n on: transformOn,\r\n show: transformShow\r\n};\r\nfunction compile(template, options = {}) {\r\n return compilerCore.baseCompile(template, shared.extend({}, parserOptions, options, {\r\n nodeTransforms: [\r\n // ignore <script> and <tag>\r\n // this is not put inside DOMNodeTransforms because that list is used\r\n // by compiler-ssr to generate vnode fallback branches\r\n ignoreSideEffectTags,\r\n ...DOMNodeTransforms,\r\n ...(options.nodeTransforms || [])\r\n ],\r\n directiveTransforms: shared.extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\r\n transformHoist: stringifyStatic\r\n }));\r\n}\r\nfunction parse(template, options = {}) {\r\n return compilerCore.baseParse(template, shared.extend({}, parserOptions, options));\r\n}\n\nObject.keys(compilerCore).forEach(function (k) {\n if (k !== 'default') exports[k] = compilerCore[k];\n});\nexports.DOMDirectiveTransforms = DOMDirectiveTransforms;\nexports.DOMNodeTransforms = DOMNodeTransforms;\nexports.TRANSITION = TRANSITION;\nexports.TRANSITION_GROUP = TRANSITION_GROUP;\nexports.V_MODEL_CHECKBOX = V_MODEL_CHECKBOX;\nexports.V_MODEL_DYNAMIC = V_MODEL_DYNAMIC;\nexports.V_MODEL_RADIO = V_MODEL_RADIO;\nexports.V_MODEL_SELECT = V_MODEL_SELECT;\nexports.V_MODEL_TEXT = V_MODEL_TEXT;\nexports.V_ON_WITH_KEYS = V_ON_WITH_KEYS;\nexports.V_ON_WITH_MODIFIERS = V_ON_WITH_MODIFIERS;\nexports.V_SHOW = V_SHOW;\nexports.compile = compile;\nexports.createDOMCompilerError = createDOMCompilerError;\nexports.parse = parse;\nexports.parserOptions = parserOptions;\nexports.transformStyle = transformStyle;\n"],"names":["cacheStringFunction","camelizeRE","camelize"],"mappings":"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;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,GAAG,EAAE,GAAG;AACT,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,GAAG,EAAE,GAAG;AACT,CAAC,GAAG,EAAE,GAAG;AACT,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,GAAG,EAAE,GAAG;AACT,CAAC,GAAG,EAAE,GAAG;AACT,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,GAAG,EAAE,GAAG;AACT,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,IAAI,EAAE,IAAI;AACX,CAAC,IAAI,EAAE,IAAI;AACX,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,IAAI,EAAE,GAAG;AACV,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,IAAI;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,KAAK,EAAE,GAAG;AACX,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,IAAI;AACd,CAAC,OAAO,EAAE,GAAG;AACb,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,IAAI;AACf,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,MAAM,EAAE,GAAG;AACZ,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,QAAQ,EAAE,GAAG;AACd,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,IAAI;AAChB,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,SAAS,EAAE,GAAG;AACf,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,UAAU,EAAE,IAAI;AACjB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,UAAU,EAAE,GAAG;AAChB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,IAAI;AAClB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,IAAI;AAClB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,WAAW,EAAE,GAAG;AACjB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,IAAI;AACnB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,IAAI;AACnB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,IAAI;AACnB,CAAC,YAAY,EAAE,IAAI;AACnB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,IAAI;AACnB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,YAAY,EAAE,GAAG;AAClB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,IAAI;AACpB,CAAC,aAAa,EAAE,IAAI;AACpB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,IAAI;AACpB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,aAAa,EAAE,GAAG;AACnB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,IAAI;AACrB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,IAAI;AACrB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,cAAc,EAAE,GAAG;AACpB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,IAAI;AACtB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,eAAe,EAAE,IAAI;AACtB,CAAC,eAAe,EAAE,IAAI;AACtB,CAAC,eAAe,EAAE,GAAG;AACrB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,IAAI;AACvB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,IAAI;AACvB,CAAC,gBAAgB,EAAE,IAAI;AACvB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,gBAAgB,EAAE,GAAG;AACtB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,iBAAiB,EAAE,GAAG;AACvB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,IAAI;AACzB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,IAAI;AACzB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,kBAAkB,EAAE,GAAG;AACxB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,IAAI;AAC1B,CAAC,mBAAmB,EAAE,GAAG;AACzB,CAAC,mBAAmB,EAAE,IAAI;AAC1B,CAAC,mBAAmB,EAAE,IAAI;AAC1B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"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-ac1b4bf9.js b/packages/astro/vendor/vite/dist/node/chunks/dep-ac1b4bf9.js
deleted file mode 100755
index ff764091a..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-ac1b4bf9.js
+++ /dev/null
@@ -1,531 +0,0 @@
-'use strict';
-
-var openParentheses = "(".charCodeAt(0);
-var closeParentheses = ")".charCodeAt(0);
-var singleQuote = "'".charCodeAt(0);
-var doubleQuote = '"'.charCodeAt(0);
-var backslash = "\\".charCodeAt(0);
-var slash = "/".charCodeAt(0);
-var comma = ",".charCodeAt(0);
-var colon = ":".charCodeAt(0);
-var star = "*".charCodeAt(0);
-var uLower = "u".charCodeAt(0);
-var uUpper = "U".charCodeAt(0);
-var plus$1 = "+".charCodeAt(0);
-var isUnicodeRange = /^[a-f0-9?-]+$/i;
-
-var parse$1 = function(input) {
- var tokens = [];
- var value = input;
-
- var next,
- quote,
- prev,
- token,
- escape,
- escapePos,
- whitespacePos,
- parenthesesOpenPos;
- var pos = 0;
- var code = value.charCodeAt(pos);
- var max = value.length;
- var stack = [{ nodes: tokens }];
- var balanced = 0;
- var parent;
-
- var name = "";
- var before = "";
- var after = "";
-
- while (pos < max) {
- // Whitespaces
- if (code <= 32) {
- next = pos;
- do {
- next += 1;
- code = value.charCodeAt(next);
- } while (code <= 32);
- token = value.slice(pos, next);
-
- prev = tokens[tokens.length - 1];
- if (code === closeParentheses && balanced) {
- after = token;
- } else if (prev && prev.type === "div") {
- prev.after = token;
- } else if (
- code === comma ||
- code === colon ||
- (code === slash &&
- value.charCodeAt(next + 1) !== star &&
- (!parent ||
- (parent && parent.type === "function" && parent.value !== "calc")))
- ) {
- before = token;
- } else {
- tokens.push({
- type: "space",
- sourceIndex: pos,
- value: token
- });
- }
-
- pos = next;
-
- // Quotes
- } else if (code === singleQuote || code === doubleQuote) {
- next = pos;
- quote = code === singleQuote ? "'" : '"';
- token = {
- type: "string",
- sourceIndex: pos,
- quote: quote
- };
- do {
- escape = false;
- next = value.indexOf(quote, next + 1);
- if (~next) {
- escapePos = next;
- while (value.charCodeAt(escapePos - 1) === backslash) {
- escapePos -= 1;
- escape = !escape;
- }
- } else {
- value += quote;
- next = value.length - 1;
- token.unclosed = true;
- }
- } while (escape);
- token.value = value.slice(pos + 1, next);
-
- tokens.push(token);
- pos = next + 1;
- code = value.charCodeAt(pos);
-
- // Comments
- } else if (code === slash && value.charCodeAt(pos + 1) === star) {
- token = {
- type: "comment",
- sourceIndex: pos
- };
-
- next = value.indexOf("*/", pos);
- if (next === -1) {
- token.unclosed = true;
- next = value.length;
- }
-
- token.value = value.slice(pos + 2, next);
- tokens.push(token);
-
- pos = next + 2;
- code = value.charCodeAt(pos);
-
- // Operation within calc
- } else if (
- (code === slash || code === star) &&
- parent &&
- parent.type === "function" &&
- parent.value === "calc"
- ) {
- token = value[pos];
- tokens.push({
- type: "word",
- sourceIndex: pos - before.length,
- value: token
- });
- pos += 1;
- code = value.charCodeAt(pos);
-
- // Dividers
- } else if (code === slash || code === comma || code === colon) {
- token = value[pos];
-
- tokens.push({
- type: "div",
- sourceIndex: pos - before.length,
- value: token,
- before: before,
- after: ""
- });
- before = "";
-
- pos += 1;
- code = value.charCodeAt(pos);
-
- // Open parentheses
- } else if (openParentheses === code) {
- // Whitespaces after open parentheses
- next = pos;
- do {
- next += 1;
- code = value.charCodeAt(next);
- } while (code <= 32);
- parenthesesOpenPos = pos;
- token = {
- type: "function",
- sourceIndex: pos - name.length,
- value: name,
- before: value.slice(parenthesesOpenPos + 1, next)
- };
- pos = next;
-
- if (name === "url" && code !== singleQuote && code !== doubleQuote) {
- next -= 1;
- do {
- escape = false;
- next = value.indexOf(")", next + 1);
- if (~next) {
- escapePos = next;
- while (value.charCodeAt(escapePos - 1) === backslash) {
- escapePos -= 1;
- escape = !escape;
- }
- } else {
- value += ")";
- next = value.length - 1;
- token.unclosed = true;
- }
- } while (escape);
- // Whitespaces before closed
- whitespacePos = next;
- do {
- whitespacePos -= 1;
- code = value.charCodeAt(whitespacePos);
- } while (code <= 32);
- if (parenthesesOpenPos < whitespacePos) {
- if (pos !== whitespacePos + 1) {
- token.nodes = [
- {
- type: "word",
- sourceIndex: pos,
- value: value.slice(pos, whitespacePos + 1)
- }
- ];
- } else {
- token.nodes = [];
- }
- if (token.unclosed && whitespacePos + 1 !== next) {
- token.after = "";
- token.nodes.push({
- type: "space",
- sourceIndex: whitespacePos + 1,
- value: value.slice(whitespacePos + 1, next)
- });
- } else {
- token.after = value.slice(whitespacePos + 1, next);
- }
- } else {
- token.after = "";
- token.nodes = [];
- }
- pos = next + 1;
- code = value.charCodeAt(pos);
- tokens.push(token);
- } else {
- balanced += 1;
- token.after = "";
- tokens.push(token);
- stack.push(token);
- tokens = token.nodes = [];
- parent = token;
- }
- name = "";
-
- // Close parentheses
- } else if (closeParentheses === code && balanced) {
- pos += 1;
- code = value.charCodeAt(pos);
-
- parent.after = after;
- after = "";
- balanced -= 1;
- stack.pop();
- parent = stack[balanced];
- tokens = parent.nodes;
-
- // Words
- } else {
- next = pos;
- do {
- if (code === backslash) {
- next += 1;
- }
- next += 1;
- code = value.charCodeAt(next);
- } while (
- next < max &&
- !(
- code <= 32 ||
- code === singleQuote ||
- code === doubleQuote ||
- code === comma ||
- code === colon ||
- code === slash ||
- code === openParentheses ||
- (code === star &&
- parent &&
- parent.type === "function" &&
- parent.value === "calc") ||
- (code === slash &&
- parent.type === "function" &&
- parent.value === "calc") ||
- (code === closeParentheses && balanced)
- )
- );
- token = value.slice(pos, next);
-
- if (openParentheses === code) {
- name = token;
- } else if (
- (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&
- plus$1 === token.charCodeAt(1) &&
- isUnicodeRange.test(token.slice(2))
- ) {
- tokens.push({
- type: "unicode-range",
- sourceIndex: pos,
- value: token
- });
- } else {
- tokens.push({
- type: "word",
- sourceIndex: pos,
- value: token
- });
- }
-
- pos = next;
- }
- }
-
- for (pos = stack.length - 1; pos; pos -= 1) {
- stack[pos].unclosed = true;
- }
-
- return stack[0].nodes;
-};
-
-var walk$1 = function walk(nodes, cb, bubble) {
- var i, max, node, result;
-
- for (i = 0, max = nodes.length; i < max; i += 1) {
- node = nodes[i];
- if (!bubble) {
- result = cb(node, i, nodes);
- }
-
- if (
- result !== false &&
- node.type === "function" &&
- Array.isArray(node.nodes)
- ) {
- walk(node.nodes, cb, bubble);
- }
-
- if (bubble) {
- cb(node, i, nodes);
- }
- }
-};
-
-function stringifyNode(node, custom) {
- var type = node.type;
- var value = node.value;
- var buf;
- var customResult;
-
- if (custom && (customResult = custom(node)) !== undefined) {
- return customResult;
- } else if (type === "word" || type === "space") {
- return value;
- } else if (type === "string") {
- buf = node.quote || "";
- return buf + value + (node.unclosed ? "" : buf);
- } else if (type === "comment") {
- return "/*" + value + (node.unclosed ? "" : "*/");
- } else if (type === "div") {
- return (node.before || "") + value + (node.after || "");
- } else if (Array.isArray(node.nodes)) {
- buf = stringify$1(node.nodes, custom);
- if (type !== "function") {
- return buf;
- }
- return (
- value +
- "(" +
- (node.before || "") +
- buf +
- (node.after || "") +
- (node.unclosed ? "" : ")")
- );
- }
- return value;
-}
-
-function stringify$1(nodes, custom) {
- var result, i;
-
- if (Array.isArray(nodes)) {
- result = "";
- for (i = nodes.length - 1; ~i; i -= 1) {
- result = stringifyNode(nodes[i], custom) + result;
- }
- return result;
- }
- return stringifyNode(nodes, custom);
-}
-
-var stringify_1 = stringify$1;
-
-var minus = "-".charCodeAt(0);
-var plus = "+".charCodeAt(0);
-var dot = ".".charCodeAt(0);
-var exp = "e".charCodeAt(0);
-var EXP = "E".charCodeAt(0);
-
-// Check if three code points would start a number
-// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
-function likeNumber(value) {
- var code = value.charCodeAt(0);
- var nextCode;
-
- if (code === plus || code === minus) {
- nextCode = value.charCodeAt(1);
-
- if (nextCode >= 48 && nextCode <= 57) {
- return true;
- }
-
- var nextNextCode = value.charCodeAt(2);
-
- if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
- return true;
- }
-
- return false;
- }
-
- if (code === dot) {
- nextCode = value.charCodeAt(1);
-
- if (nextCode >= 48 && nextCode <= 57) {
- return true;
- }
-
- return false;
- }
-
- if (code >= 48 && code <= 57) {
- return true;
- }
-
- return false;
-}
-
-// Consume a number
-// https://www.w3.org/TR/css-syntax-3/#consume-number
-var unit = function(value) {
- var pos = 0;
- var length = value.length;
- var code;
- var nextCode;
- var nextNextCode;
-
- if (length === 0 || !likeNumber(value)) {
- return false;
- }
-
- code = value.charCodeAt(pos);
-
- if (code === plus || code === minus) {
- pos++;
- }
-
- while (pos < length) {
- code = value.charCodeAt(pos);
-
- if (code < 48 || code > 57) {
- break;
- }
-
- pos += 1;
- }
-
- code = value.charCodeAt(pos);
- nextCode = value.charCodeAt(pos + 1);
-
- if (code === dot && nextCode >= 48 && nextCode <= 57) {
- pos += 2;
-
- while (pos < length) {
- code = value.charCodeAt(pos);
-
- if (code < 48 || code > 57) {
- break;
- }
-
- pos += 1;
- }
- }
-
- code = value.charCodeAt(pos);
- nextCode = value.charCodeAt(pos + 1);
- nextNextCode = value.charCodeAt(pos + 2);
-
- if (
- (code === exp || code === EXP) &&
- ((nextCode >= 48 && nextCode <= 57) ||
- ((nextCode === plus || nextCode === minus) &&
- nextNextCode >= 48 &&
- nextNextCode <= 57))
- ) {
- pos += nextCode === plus || nextCode === minus ? 3 : 2;
-
- while (pos < length) {
- code = value.charCodeAt(pos);
-
- if (code < 48 || code > 57) {
- break;
- }
-
- pos += 1;
- }
- }
-
- return {
- number: value.slice(0, pos),
- unit: value.slice(pos)
- };
-};
-
-var parse = parse$1;
-var walk = walk$1;
-var stringify = stringify_1;
-
-function ValueParser(value) {
- if (this instanceof ValueParser) {
- this.nodes = parse(value);
- return this;
- }
- return new ValueParser(value);
-}
-
-ValueParser.prototype.toString = function() {
- return Array.isArray(this.nodes) ? stringify(this.nodes) : "";
-};
-
-ValueParser.prototype.walk = function(cb, bubble) {
- walk(this.nodes, cb, bubble);
- return this;
-};
-
-ValueParser.unit = unit;
-
-ValueParser.walk = walk;
-
-ValueParser.stringify = stringify;
-
-var lib = ValueParser;
-
-exports.lib = lib;
-//# sourceMappingURL=dep-ac1b4bf9.js.map
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-ac1b4bf9.js.map b/packages/astro/vendor/vite/dist/node/chunks/dep-ac1b4bf9.js.map
deleted file mode 100755
index 8a91ca1bd..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-ac1b4bf9.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"dep-ac1b4bf9.js","sources":["../../../../../node_modules/.pnpm/postcss-value-parser@4.1.0/node_modules/postcss-value-parser/lib/parse.js","../../../../../node_modules/.pnpm/postcss-value-parser@4.1.0/node_modules/postcss-value-parser/lib/walk.js","../../../../../node_modules/.pnpm/postcss-value-parser@4.1.0/node_modules/postcss-value-parser/lib/stringify.js","../../../../../node_modules/.pnpm/postcss-value-parser@4.1.0/node_modules/postcss-value-parser/lib/unit.js","../../../../../node_modules/.pnpm/postcss-value-parser@4.1.0/node_modules/postcss-value-parser/lib/index.js"],"sourcesContent":["var openParentheses = \"(\".charCodeAt(0);\nvar closeParentheses = \")\".charCodeAt(0);\nvar singleQuote = \"'\".charCodeAt(0);\nvar doubleQuote = '\"'.charCodeAt(0);\nvar backslash = \"\\\\\".charCodeAt(0);\nvar slash = \"/\".charCodeAt(0);\nvar comma = \",\".charCodeAt(0);\nvar colon = \":\".charCodeAt(0);\nvar star = \"*\".charCodeAt(0);\nvar uLower = \"u\".charCodeAt(0);\nvar uUpper = \"U\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar isUnicodeRange = /^[a-f0-9?-]+$/i;\n\nmodule.exports = function(input) {\n var tokens = [];\n var value = input;\n\n var next,\n quote,\n prev,\n token,\n escape,\n escapePos,\n whitespacePos,\n parenthesesOpenPos;\n var pos = 0;\n var code = value.charCodeAt(pos);\n var max = value.length;\n var stack = [{ nodes: tokens }];\n var balanced = 0;\n var parent;\n\n var name = \"\";\n var before = \"\";\n var after = \"\";\n\n while (pos < max) {\n // Whitespaces\n if (code <= 32) {\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n token = value.slice(pos, next);\n\n prev = tokens[tokens.length - 1];\n if (code === closeParentheses && balanced) {\n after = token;\n } else if (prev && prev.type === \"div\") {\n prev.after = token;\n } else if (\n code === comma ||\n code === colon ||\n (code === slash &&\n value.charCodeAt(next + 1) !== star &&\n (!parent ||\n (parent && parent.type === \"function\" && parent.value !== \"calc\")))\n ) {\n before = token;\n } else {\n tokens.push({\n type: \"space\",\n sourceIndex: pos,\n value: token\n });\n }\n\n pos = next;\n\n // Quotes\n } else if (code === singleQuote || code === doubleQuote) {\n next = pos;\n quote = code === singleQuote ? \"'\" : '\"';\n token = {\n type: \"string\",\n sourceIndex: pos,\n quote: quote\n };\n do {\n escape = false;\n next = value.indexOf(quote, next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += quote;\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n token.value = value.slice(pos + 1, next);\n\n tokens.push(token);\n pos = next + 1;\n code = value.charCodeAt(pos);\n\n // Comments\n } else if (code === slash && value.charCodeAt(pos + 1) === star) {\n token = {\n type: \"comment\",\n sourceIndex: pos\n };\n\n next = value.indexOf(\"*/\", pos);\n if (next === -1) {\n token.unclosed = true;\n next = value.length;\n }\n\n token.value = value.slice(pos + 2, next);\n tokens.push(token);\n\n pos = next + 2;\n code = value.charCodeAt(pos);\n\n // Operation within calc\n } else if (\n (code === slash || code === star) &&\n parent &&\n parent.type === \"function\" &&\n parent.value === \"calc\"\n ) {\n token = value[pos];\n tokens.push({\n type: \"word\",\n sourceIndex: pos - before.length,\n value: token\n });\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Dividers\n } else if (code === slash || code === comma || code === colon) {\n token = value[pos];\n\n tokens.push({\n type: \"div\",\n sourceIndex: pos - before.length,\n value: token,\n before: before,\n after: \"\"\n });\n before = \"\";\n\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Open parentheses\n } else if (openParentheses === code) {\n // Whitespaces after open parentheses\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n parenthesesOpenPos = pos;\n token = {\n type: \"function\",\n sourceIndex: pos - name.length,\n value: name,\n before: value.slice(parenthesesOpenPos + 1, next)\n };\n pos = next;\n\n if (name === \"url\" && code !== singleQuote && code !== doubleQuote) {\n next -= 1;\n do {\n escape = false;\n next = value.indexOf(\")\", next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += \")\";\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n // Whitespaces before closed\n whitespacePos = next;\n do {\n whitespacePos -= 1;\n code = value.charCodeAt(whitespacePos);\n } while (code <= 32);\n if (parenthesesOpenPos < whitespacePos) {\n if (pos !== whitespacePos + 1) {\n token.nodes = [\n {\n type: \"word\",\n sourceIndex: pos,\n value: value.slice(pos, whitespacePos + 1)\n }\n ];\n } else {\n token.nodes = [];\n }\n if (token.unclosed && whitespacePos + 1 !== next) {\n token.after = \"\";\n token.nodes.push({\n type: \"space\",\n sourceIndex: whitespacePos + 1,\n value: value.slice(whitespacePos + 1, next)\n });\n } else {\n token.after = value.slice(whitespacePos + 1, next);\n }\n } else {\n token.after = \"\";\n token.nodes = [];\n }\n pos = next + 1;\n code = value.charCodeAt(pos);\n tokens.push(token);\n } else {\n balanced += 1;\n token.after = \"\";\n tokens.push(token);\n stack.push(token);\n tokens = token.nodes = [];\n parent = token;\n }\n name = \"\";\n\n // Close parentheses\n } else if (closeParentheses === code && balanced) {\n pos += 1;\n code = value.charCodeAt(pos);\n\n parent.after = after;\n after = \"\";\n balanced -= 1;\n stack.pop();\n parent = stack[balanced];\n tokens = parent.nodes;\n\n // Words\n } else {\n next = pos;\n do {\n if (code === backslash) {\n next += 1;\n }\n next += 1;\n code = value.charCodeAt(next);\n } while (\n next < max &&\n !(\n code <= 32 ||\n code === singleQuote ||\n code === doubleQuote ||\n code === comma ||\n code === colon ||\n code === slash ||\n code === openParentheses ||\n (code === star &&\n parent &&\n parent.type === \"function\" &&\n parent.value === \"calc\") ||\n (code === slash &&\n parent.type === \"function\" &&\n parent.value === \"calc\") ||\n (code === closeParentheses && balanced)\n )\n );\n token = value.slice(pos, next);\n\n if (openParentheses === code) {\n name = token;\n } else if (\n (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&\n plus === token.charCodeAt(1) &&\n isUnicodeRange.test(token.slice(2))\n ) {\n tokens.push({\n type: \"unicode-range\",\n sourceIndex: pos,\n value: token\n });\n } else {\n tokens.push({\n type: \"word\",\n sourceIndex: pos,\n value: token\n });\n }\n\n pos = next;\n }\n }\n\n for (pos = stack.length - 1; pos; pos -= 1) {\n stack[pos].unclosed = true;\n }\n\n return stack[0].nodes;\n};\n","module.exports = function walk(nodes, cb, bubble) {\n var i, max, node, result;\n\n for (i = 0, max = nodes.length; i < max; i += 1) {\n node = nodes[i];\n if (!bubble) {\n result = cb(node, i, nodes);\n }\n\n if (\n result !== false &&\n node.type === \"function\" &&\n Array.isArray(node.nodes)\n ) {\n walk(node.nodes, cb, bubble);\n }\n\n if (bubble) {\n cb(node, i, nodes);\n }\n }\n};\n","function stringifyNode(node, custom) {\n var type = node.type;\n var value = node.value;\n var buf;\n var customResult;\n\n if (custom && (customResult = custom(node)) !== undefined) {\n return customResult;\n } else if (type === \"word\" || type === \"space\") {\n return value;\n } else if (type === \"string\") {\n buf = node.quote || \"\";\n return buf + value + (node.unclosed ? \"\" : buf);\n } else if (type === \"comment\") {\n return \"/*\" + value + (node.unclosed ? \"\" : \"*/\");\n } else if (type === \"div\") {\n return (node.before || \"\") + value + (node.after || \"\");\n } else if (Array.isArray(node.nodes)) {\n buf = stringify(node.nodes, custom);\n if (type !== \"function\") {\n return buf;\n }\n return (\n value +\n \"(\" +\n (node.before || \"\") +\n buf +\n (node.after || \"\") +\n (node.unclosed ? \"\" : \")\")\n );\n }\n return value;\n}\n\nfunction stringify(nodes, custom) {\n var result, i;\n\n if (Array.isArray(nodes)) {\n result = \"\";\n for (i = nodes.length - 1; ~i; i -= 1) {\n result = stringifyNode(nodes[i], custom) + result;\n }\n return result;\n }\n return stringifyNode(nodes, custom);\n}\n\nmodule.exports = stringify;\n","var minus = \"-\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar dot = \".\".charCodeAt(0);\nvar exp = \"e\".charCodeAt(0);\nvar EXP = \"E\".charCodeAt(0);\n\n// Check if three code points would start a number\n// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number\nfunction likeNumber(value) {\n var code = value.charCodeAt(0);\n var nextCode;\n\n if (code === plus || code === minus) {\n nextCode = value.charCodeAt(1);\n\n if (nextCode >= 48 && nextCode <= 57) {\n return true;\n }\n\n var nextNextCode = value.charCodeAt(2);\n\n if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {\n return true;\n }\n\n return false;\n }\n\n if (code === dot) {\n nextCode = value.charCodeAt(1);\n\n if (nextCode >= 48 && nextCode <= 57) {\n return true;\n }\n\n return false;\n }\n\n if (code >= 48 && code <= 57) {\n return true;\n }\n\n return false;\n}\n\n// Consume a number\n// https://www.w3.org/TR/css-syntax-3/#consume-number\nmodule.exports = function(value) {\n var pos = 0;\n var length = value.length;\n var code;\n var nextCode;\n var nextNextCode;\n\n if (length === 0 || !likeNumber(value)) {\n return false;\n }\n\n code = value.charCodeAt(pos);\n\n if (code === plus || code === minus) {\n pos++;\n }\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n\n code = value.charCodeAt(pos);\n nextCode = value.charCodeAt(pos + 1);\n\n if (code === dot && nextCode >= 48 && nextCode <= 57) {\n pos += 2;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n }\n\n code = value.charCodeAt(pos);\n nextCode = value.charCodeAt(pos + 1);\n nextNextCode = value.charCodeAt(pos + 2);\n\n if (\n (code === exp || code === EXP) &&\n ((nextCode >= 48 && nextCode <= 57) ||\n ((nextCode === plus || nextCode === minus) &&\n nextNextCode >= 48 &&\n nextNextCode <= 57))\n ) {\n pos += nextCode === plus || nextCode === minus ? 3 : 2;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code < 48 || code > 57) {\n break;\n }\n\n pos += 1;\n }\n }\n\n return {\n number: value.slice(0, pos),\n unit: value.slice(pos)\n };\n};\n","var parse = require(\"./parse\");\nvar walk = require(\"./walk\");\nvar stringify = require(\"./stringify\");\n\nfunction ValueParser(value) {\n if (this instanceof ValueParser) {\n this.nodes = parse(value);\n return this;\n }\n return new ValueParser(value);\n}\n\nValueParser.prototype.toString = function() {\n return Array.isArray(this.nodes) ? stringify(this.nodes) : \"\";\n};\n\nValueParser.prototype.walk = function(cb, bubble) {\n walk(this.nodes, cb, bubble);\n return this;\n};\n\nValueParser.unit = require(\"./unit\");\n\nValueParser.walk = walk;\n\nValueParser.stringify = stringify;\n\nmodule.exports = ValueParser;\n"],"names":["plus","parse","walk","stringify","require$$0","require$$1","require$$2","require$$3"],"mappings":"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"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-dab866a6.js b/packages/astro/vendor/vite/dist/node/chunks/dep-dab866a6.js
deleted file mode 100755
index 57e076b75..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-dab866a6.js
+++ /dev/null
@@ -1,11404 +0,0 @@
-'use strict';
-
-var require$$0 = require('postcss');
-var build$2 = require('./dep-35df7f96.js');
-var path$4 = require('path');
-var require$$1 = require('crypto');
-var fs = require('fs');
-var require$$0$1 = require('util');
-var index$1 = require('./dep-ac1b4bf9.js');
-
-function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
-
-function _mergeNamespaces(n, m) {
- for (var i = 0; i < m.length; i++) {
- var e = m[i];
- for (var k in e) {
- if (k !== 'default' && !(k in n)) {
- n[k] = e[k];
- }
- }
- }
- return n;
-}
-
-var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
-var path__default = /*#__PURE__*/_interopDefaultLegacy(path$4);
-var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);
-var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
-var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
-
-var build$1 = {exports: {}};
-
-/**
- * lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright jQuery Foundation and other contributors <https://jquery.org/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/** `Object#toString` result references. */
-var symbolTag = '[object Symbol]';
-
-/** Used to match words composed of alphanumeric characters. */
-var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
-
-/** Used to match Latin Unicode letters (excluding mathematical operators). */
-var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
-
-/** Used to compose unicode character classes. */
-var rsAstralRange = '\\ud800-\\udfff',
- rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
- rsComboSymbolsRange = '\\u20d0-\\u20f0',
- rsDingbatRange = '\\u2700-\\u27bf',
- rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
- rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
- rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
- rsPunctuationRange = '\\u2000-\\u206f',
- rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
- rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
- rsVarRange = '\\ufe0e\\ufe0f',
- rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
-
-/** Used to compose unicode capture groups. */
-var rsApos = "['\u2019]",
- rsAstral = '[' + rsAstralRange + ']',
- rsBreak = '[' + rsBreakRange + ']',
- rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
- rsDigits = '\\d+',
- rsDingbat = '[' + rsDingbatRange + ']',
- rsLower = '[' + rsLowerRange + ']',
- rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
- rsFitz = '\\ud83c[\\udffb-\\udfff]',
- rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
- rsNonAstral = '[^' + rsAstralRange + ']',
- rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
- rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
- rsUpper = '[' + rsUpperRange + ']',
- rsZWJ = '\\u200d';
-
-/** Used to compose unicode regexes. */
-var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',
- rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',
- rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
- rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
- reOptMod = rsModifier + '?',
- rsOptVar = '[' + rsVarRange + ']?',
- rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
- rsSeq = rsOptVar + reOptMod + rsOptJoin,
- rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
- rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
-
-/** Used to match apostrophes. */
-var reApos = RegExp(rsApos, 'g');
-
-/**
- * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
- * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
- */
-var reComboMark = RegExp(rsCombo, 'g');
-
-/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
-var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
-
-/** Used to match complex or compound words. */
-var reUnicodeWord = RegExp([
- rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
- rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',
- rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,
- rsUpper + '+' + rsOptUpperContr,
- rsDigits,
- rsEmoji
-].join('|'), 'g');
-
-/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
-
-/** Used to detect strings that need a more robust regexp to match words. */
-var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
-
-/** Used to map Latin Unicode letters to basic Latin letters. */
-var deburredLetters = {
- // Latin-1 Supplement block.
- '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
- '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
- '\xc7': 'C', '\xe7': 'c',
- '\xd0': 'D', '\xf0': 'd',
- '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
- '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
- '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
- '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
- '\xd1': 'N', '\xf1': 'n',
- '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
- '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
- '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
- '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
- '\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
- '\xc6': 'Ae', '\xe6': 'ae',
- '\xde': 'Th', '\xfe': 'th',
- '\xdf': 'ss',
- // Latin Extended-A block.
- '\u0100': 'A', '\u0102': 'A', '\u0104': 'A',
- '\u0101': 'a', '\u0103': 'a', '\u0105': 'a',
- '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
- '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
- '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
- '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
- '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
- '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
- '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
- '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
- '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
- '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
- '\u0134': 'J', '\u0135': 'j',
- '\u0136': 'K', '\u0137': 'k', '\u0138': 'k',
- '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
- '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
- '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
- '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
- '\u014c': 'O', '\u014e': 'O', '\u0150': 'O',
- '\u014d': 'o', '\u014f': 'o', '\u0151': 'o',
- '\u0154': 'R', '\u0156': 'R', '\u0158': 'R',
- '\u0155': 'r', '\u0157': 'r', '\u0159': 'r',
- '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
- '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's',
- '\u0162': 'T', '\u0164': 'T', '\u0166': 'T',
- '\u0163': 't', '\u0165': 't', '\u0167': 't',
- '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
- '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
- '\u0174': 'W', '\u0175': 'w',
- '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y',
- '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z',
- '\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
- '\u0132': 'IJ', '\u0133': 'ij',
- '\u0152': 'Oe', '\u0153': 'oe',
- '\u0149': "'n", '\u017f': 'ss'
-};
-
-/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof build$2.commonjsGlobal == 'object' && build$2.commonjsGlobal && build$2.commonjsGlobal.Object === Object && build$2.commonjsGlobal;
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root$2 = freeGlobal || freeSelf || Function('return this')();
-
-/**
- * A specialized version of `_.reduce` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {*} [accumulator] The initial value.
- * @param {boolean} [initAccum] Specify using the first element of `array` as
- * the initial value.
- * @returns {*} Returns the accumulated value.
- */
-function arrayReduce(array, iteratee, accumulator, initAccum) {
- var index = -1,
- length = array ? array.length : 0;
-
- if (initAccum && length) {
- accumulator = array[++index];
- }
- while (++index < length) {
- accumulator = iteratee(accumulator, array[index], index, array);
- }
- return accumulator;
-}
-
-/**
- * Converts an ASCII `string` to an array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the converted array.
- */
-function asciiToArray(string) {
- return string.split('');
-}
-
-/**
- * Splits an ASCII `string` into an array of its words.
- *
- * @private
- * @param {string} The string to inspect.
- * @returns {Array} Returns the words of `string`.
- */
-function asciiWords(string) {
- return string.match(reAsciiWord) || [];
-}
-
-/**
- * The base implementation of `_.propertyOf` without support for deep paths.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Function} Returns the new accessor function.
- */
-function basePropertyOf(object) {
- return function(key) {
- return object == null ? undefined : object[key];
- };
-}
-
-/**
- * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
- * letters to basic Latin letters.
- *
- * @private
- * @param {string} letter The matched letter to deburr.
- * @returns {string} Returns the deburred letter.
- */
-var deburrLetter = basePropertyOf(deburredLetters);
-
-/**
- * Checks if `string` contains Unicode symbols.
- *
- * @private
- * @param {string} string The string to inspect.
- * @returns {boolean} Returns `true` if a symbol is found, else `false`.
- */
-function hasUnicode(string) {
- return reHasUnicode.test(string);
-}
-
-/**
- * Checks if `string` contains a word composed of Unicode symbols.
- *
- * @private
- * @param {string} string The string to inspect.
- * @returns {boolean} Returns `true` if a word is found, else `false`.
- */
-function hasUnicodeWord(string) {
- return reHasUnicodeWord.test(string);
-}
-
-/**
- * Converts `string` to an array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the converted array.
- */
-function stringToArray(string) {
- return hasUnicode(string)
- ? unicodeToArray(string)
- : asciiToArray(string);
-}
-
-/**
- * Converts a Unicode `string` to an array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the converted array.
- */
-function unicodeToArray(string) {
- return string.match(reUnicode) || [];
-}
-
-/**
- * Splits a Unicode `string` into an array of its words.
- *
- * @private
- * @param {string} The string to inspect.
- * @returns {Array} Returns the words of `string`.
- */
-function unicodeWords(string) {
- return string.match(reUnicodeWord) || [];
-}
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var objectToString = objectProto.toString;
-
-/** Built-in value references. */
-var Symbol$1 = root$2.Symbol;
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined,
- symbolToString = symbolProto ? symbolProto.toString : undefined;
-
-/**
- * The base implementation of `_.slice` without an iteratee call guard.
- *
- * @private
- * @param {Array} array The array to slice.
- * @param {number} [start=0] The start position.
- * @param {number} [end=array.length] The end position.
- * @returns {Array} Returns the slice of `array`.
- */
-function baseSlice(array, start, end) {
- var index = -1,
- length = array.length;
-
- if (start < 0) {
- start = -start > length ? 0 : (length + start);
- }
- end = end > length ? length : end;
- if (end < 0) {
- end += length;
- }
- length = start > end ? 0 : ((end - start) >>> 0);
- start >>>= 0;
-
- var result = Array(length);
- while (++index < length) {
- result[index] = array[index + start];
- }
- return result;
-}
-
-/**
- * The base implementation of `_.toString` which doesn't convert nullish
- * values to empty strings.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
-function baseToString(value) {
- // Exit early for strings to avoid a performance hit in some environments.
- if (typeof value == 'string') {
- return value;
- }
- if (isSymbol(value)) {
- return symbolToString ? symbolToString.call(value) : '';
- }
- var result = (value + '');
- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-/**
- * Casts `array` to a slice if it's needed.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {number} start The start position.
- * @param {number} [end=array.length] The end position.
- * @returns {Array} Returns the cast slice.
- */
-function castSlice(array, start, end) {
- var length = array.length;
- end = end === undefined ? length : end;
- return (!start && end >= length) ? array : baseSlice(array, start, end);
-}
-
-/**
- * Creates a function like `_.lowerFirst`.
- *
- * @private
- * @param {string} methodName The name of the `String` case method to use.
- * @returns {Function} Returns the new case function.
- */
-function createCaseFirst(methodName) {
- return function(string) {
- string = toString(string);
-
- var strSymbols = hasUnicode(string)
- ? stringToArray(string)
- : undefined;
-
- var chr = strSymbols
- ? strSymbols[0]
- : string.charAt(0);
-
- var trailing = strSymbols
- ? castSlice(strSymbols, 1).join('')
- : string.slice(1);
-
- return chr[methodName]() + trailing;
- };
-}
-
-/**
- * Creates a function like `_.camelCase`.
- *
- * @private
- * @param {Function} callback The function to combine each word.
- * @returns {Function} Returns the new compounder function.
- */
-function createCompounder(callback) {
- return function(string) {
- return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
- };
-}
-
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
- return !!value && typeof value == 'object';
-}
-
-/**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
-function isSymbol(value) {
- return typeof value == 'symbol' ||
- (isObjectLike(value) && objectToString.call(value) == symbolTag);
-}
-
-/**
- * Converts `value` to a string. An empty string is returned for `null`
- * and `undefined` values. The sign of `-0` is preserved.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- * @example
- *
- * _.toString(null);
- * // => ''
- *
- * _.toString(-0);
- * // => '-0'
- *
- * _.toString([1, 2, 3]);
- * // => '1,2,3'
- */
-function toString(value) {
- return value == null ? '' : baseToString(value);
-}
-
-/**
- * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category String
- * @param {string} [string=''] The string to convert.
- * @returns {string} Returns the camel cased string.
- * @example
- *
- * _.camelCase('Foo Bar');
- * // => 'fooBar'
- *
- * _.camelCase('--foo-bar--');
- * // => 'fooBar'
- *
- * _.camelCase('__FOO_BAR__');
- * // => 'fooBar'
- */
-var camelCase = createCompounder(function(result, word, index) {
- word = word.toLowerCase();
- return result + (index ? capitalize(word) : word);
-});
-
-/**
- * Converts the first character of `string` to upper case and the remaining
- * to lower case.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category String
- * @param {string} [string=''] The string to capitalize.
- * @returns {string} Returns the capitalized string.
- * @example
- *
- * _.capitalize('FRED');
- * // => 'Fred'
- */
-function capitalize(string) {
- return upperFirst(toString(string).toLowerCase());
-}
-
-/**
- * Deburrs `string` by converting
- * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
- * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
- * letters to basic Latin letters and removing
- * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category String
- * @param {string} [string=''] The string to deburr.
- * @returns {string} Returns the deburred string.
- * @example
- *
- * _.deburr('déjà vu');
- * // => 'deja vu'
- */
-function deburr(string) {
- string = toString(string);
- return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
-}
-
-/**
- * Converts the first character of `string` to upper case.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category String
- * @param {string} [string=''] The string to convert.
- * @returns {string} Returns the converted string.
- * @example
- *
- * _.upperFirst('fred');
- * // => 'Fred'
- *
- * _.upperFirst('FRED');
- * // => 'FRED'
- */
-var upperFirst = createCaseFirst('toUpperCase');
-
-/**
- * Splits `string` into an array of its words.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category String
- * @param {string} [string=''] The string to inspect.
- * @param {RegExp|string} [pattern] The pattern to match words.
- * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
- * @returns {Array} Returns the words of `string`.
- * @example
- *
- * _.words('fred, barney, & pebbles');
- * // => ['fred', 'barney', 'pebbles']
- *
- * _.words('fred, barney, & pebbles', /[^, ]+/g);
- * // => ['fred', 'barney', '&', 'pebbles']
- */
-function words(string, pattern, guard) {
- string = toString(string);
- pattern = guard ? undefined : pattern;
-
- if (pattern === undefined) {
- return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
- }
- return string.match(pattern) || [];
-}
-
-var lodash_camelcase = camelCase;
-
-var lib$2 = {};
-
-var lib$1 = {exports: {}};
-
-var parse = {exports: {}};
-
-var util$1 = {};
-
-var unicode$1 = {};
-
-Object.defineProperty(unicode$1,"__esModule",{value:true});unicode$1.Space_Separator=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/;unicode$1.ID_Start=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/;unicode$1.ID_Continue=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/;
-
-Object.defineProperty(util$1,'__esModule',{value:true});util$1.isSpaceSeparator=isSpaceSeparator;util$1.isIdStartChar=isIdStartChar;util$1.isIdContinueChar=isIdContinueChar;util$1.isDigit=isDigit;util$1.isHexDigit=isHexDigit;var _unicode=unicode$1;var unicode=_interopRequireWildcard(_unicode);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else {var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj}}function isSpaceSeparator(c){return unicode.Space_Separator.test(c)}function isIdStartChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c==='$'||c==='_'||unicode.ID_Start.test(c)}function isIdContinueChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9'||c==='$'||c==='_'||c==='\u200C'||c==='\u200D'||unicode.ID_Continue.test(c)}function isDigit(c){return /[0-9]/.test(c)}function isHexDigit(c){return /[0-9A-Fa-f]/.test(c)}
-
-(function (module, exports) {
-Object.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=parse;var _util=util$1;var util=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else {var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj}}var source=void 0;var parseState=void 0;var stack=void 0;var pos=void 0;var line=void 0;var column=void 0;var token=void 0;var key=void 0;var root=void 0;function parse(text,reviver){source=String(text);parseState='start';stack=[];pos=0;line=1;column=0;token=undefined;key=undefined;root=undefined;do{token=lex();parseStates[parseState]();}while(token.type!=='eof');if(typeof reviver==='function'){return internalize({'':root},'',reviver)}return root}function internalize(holder,name,reviver){var value=holder[name];if(value!=null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){for(var _key in value){var replacement=internalize(value,_key,reviver);if(replacement===undefined){delete value[_key];}else {value[_key]=replacement;}}}return reviver.call(holder,name,value)}var lexState=void 0;var buffer=void 0;var doubleQuote=void 0;var _sign=void 0;var c=void 0;function lex(){lexState='default';buffer='';doubleQuote=false;_sign=1;for(;;){c=peek();var _token=lexStates[lexState]();if(_token){return _token}}}function peek(){if(source[pos]){return String.fromCodePoint(source.codePointAt(pos))}}function read(){var c=peek();if(c==='\n'){line++;column=0;}else if(c){column+=c.length;}else {column++;}if(c){pos+=c.length;}return c}var lexStates={default:function _default(){switch(c){case'\t':case'\x0B':case'\f':case' ':case'\xA0':case'\uFEFF':case'\n':case'\r':case'\u2028':case'\u2029':read();return;case'/':read();lexState='comment';return;case undefined:read();return newToken('eof');}if(util.isSpaceSeparator(c)){read();return}return lexStates[parseState]()},comment:function comment(){switch(c){case'*':read();lexState='multiLineComment';return;case'/':read();lexState='singleLineComment';return;}throw invalidChar(read())},multiLineComment:function multiLineComment(){switch(c){case'*':read();lexState='multiLineCommentAsterisk';return;case undefined:throw invalidChar(read());}read();},multiLineCommentAsterisk:function multiLineCommentAsterisk(){switch(c){case'*':read();return;case'/':read();lexState='default';return;case undefined:throw invalidChar(read());}read();lexState='multiLineComment';},singleLineComment:function singleLineComment(){switch(c){case'\n':case'\r':case'\u2028':case'\u2029':read();lexState='default';return;case undefined:read();return newToken('eof');}read();},value:function value(){switch(c){case'{':case'[':return newToken('punctuator',read());case'n':read();literal('ull');return newToken('null',null);case't':read();literal('rue');return newToken('boolean',true);case'f':read();literal('alse');return newToken('boolean',false);case'-':case'+':if(read()==='-'){_sign=-1;}lexState='sign';return;case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);case'"':case'\'':doubleQuote=read()==='"';buffer='';lexState='string';return;}throw invalidChar(read())},identifierNameStartEscape:function identifierNameStartEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':break;default:if(!util.isIdStartChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName';},identifierName:function identifierName(){switch(c){case'$':case'_':case'\u200C':case'\u200D':buffer+=read();return;case'\\':read();lexState='identifierNameEscape';return;}if(util.isIdContinueChar(c)){buffer+=read();return}return newToken('identifier',buffer)},identifierNameEscape:function identifierNameEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':case'\u200C':case'\u200D':break;default:if(!util.isIdContinueChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName';},sign:function sign(){switch(c){case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',_sign*Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);}throw invalidChar(read())},zero:function zero(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;case'x':case'X':buffer+=read();lexState='hexadecimal';return;}return newToken('numeric',_sign*0)},decimalInteger:function decimalInteger(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalPointLeading:function decimalPointLeading(){if(util.isDigit(c)){buffer+=read();lexState='decimalFraction';return}throw invalidChar(read())},decimalPoint:function decimalPoint(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();lexState='decimalFraction';return}return newToken('numeric',_sign*Number(buffer))},decimalFraction:function decimalFraction(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalExponent:function decimalExponent(){switch(c){case'+':case'-':buffer+=read();lexState='decimalExponentSign';return;}if(util.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentSign:function decimalExponentSign(){if(util.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentInteger:function decimalExponentInteger(){if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},hexadecimal:function hexadecimal(){if(util.isHexDigit(c)){buffer+=read();lexState='hexadecimalInteger';return}throw invalidChar(read())},hexadecimalInteger:function hexadecimalInteger(){if(util.isHexDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},string:function string(){switch(c){case'\\':read();buffer+=escape();return;case'"':if(doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\'':if(!doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\n':case'\r':throw invalidChar(read());case'\u2028':case'\u2029':separatorChar(c);break;case undefined:throw invalidChar(read());}buffer+=read();},start:function start(){switch(c){case'{':case'[':return newToken('punctuator',read());}lexState='value';},beforePropertyName:function beforePropertyName(){switch(c){case'$':case'_':buffer=read();lexState='identifierName';return;case'\\':read();lexState='identifierNameStartEscape';return;case'}':return newToken('punctuator',read());case'"':case'\'':doubleQuote=read()==='"';lexState='string';return;}if(util.isIdStartChar(c)){buffer+=read();lexState='identifierName';return}throw invalidChar(read())},afterPropertyName:function afterPropertyName(){if(c===':'){return newToken('punctuator',read())}throw invalidChar(read())},beforePropertyValue:function beforePropertyValue(){lexState='value';},afterPropertyValue:function afterPropertyValue(){switch(c){case',':case'}':return newToken('punctuator',read());}throw invalidChar(read())},beforeArrayValue:function beforeArrayValue(){if(c===']'){return newToken('punctuator',read())}lexState='value';},afterArrayValue:function afterArrayValue(){switch(c){case',':case']':return newToken('punctuator',read());}throw invalidChar(read())},end:function end(){throw invalidChar(read())}};function newToken(type,value){return {type:type,value:value,line:line,column:column}}function literal(s){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=s[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _c=_step.value;var p=peek();if(p!==_c){throw invalidChar(read())}read();}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError}}}}function escape(){var c=peek();switch(c){case'b':read();return '\b';case'f':read();return '\f';case'n':read();return '\n';case'r':read();return '\r';case't':read();return '\t';case'v':read();return '\x0B';case'0':read();if(util.isDigit(peek())){throw invalidChar(read())}return '\0';case'x':read();return hexEscape();case'u':read();return unicodeEscape();case'\n':case'\u2028':case'\u2029':read();return '';case'\r':read();if(peek()==='\n'){read();}return '';case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':throw invalidChar(read());case undefined:throw invalidChar(read());}return read()}function hexEscape(){var buffer='';var c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read();c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read();return String.fromCodePoint(parseInt(buffer,16))}function unicodeEscape(){var buffer='';var count=4;while(count-->0){var _c2=peek();if(!util.isHexDigit(_c2)){throw invalidChar(read())}buffer+=read();}return String.fromCodePoint(parseInt(buffer,16))}var parseStates={start:function start(){if(token.type==='eof'){throw invalidEOF()}push();},beforePropertyName:function beforePropertyName(){switch(token.type){case'identifier':case'string':key=token.value;parseState='afterPropertyName';return;case'punctuator':pop();return;case'eof':throw invalidEOF();}},afterPropertyName:function afterPropertyName(){if(token.type==='eof'){throw invalidEOF()}parseState='beforePropertyValue';},beforePropertyValue:function beforePropertyValue(){if(token.type==='eof'){throw invalidEOF()}push();},beforeArrayValue:function beforeArrayValue(){if(token.type==='eof'){throw invalidEOF()}if(token.type==='punctuator'&&token.value===']'){pop();return}push();},afterPropertyValue:function afterPropertyValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforePropertyName';return;case'}':pop();}},afterArrayValue:function afterArrayValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforeArrayValue';return;case']':pop();}},end:function end(){}};function push(){var value=void 0;switch(token.type){case'punctuator':switch(token.value){case'{':value={};break;case'[':value=[];break;}break;case'null':case'boolean':case'numeric':case'string':value=token.value;break;}if(root===undefined){root=value;}else {var parent=stack[stack.length-1];if(Array.isArray(parent)){parent.push(value);}else {parent[key]=value;}}if(value!==null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){stack.push(value);if(Array.isArray(value)){parseState='beforeArrayValue';}else {parseState='beforePropertyName';}}else {var current=stack[stack.length-1];if(current==null){parseState='end';}else if(Array.isArray(current)){parseState='afterArrayValue';}else {parseState='afterPropertyValue';}}}function pop(){stack.pop();var current=stack[stack.length-1];if(current==null){parseState='end';}else if(Array.isArray(current)){parseState='afterArrayValue';}else {parseState='afterPropertyValue';}}function invalidChar(c){if(c===undefined){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}return syntaxError('JSON5: invalid character \''+formatChar(c)+'\' at '+line+':'+column)}function invalidEOF(){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}function invalidIdentifier(){column-=5;return syntaxError('JSON5: invalid identifier character at '+line+':'+column)}function separatorChar(c){console.warn('JSON5: \''+c+'\' is not valid ECMAScript; consider escaping');}function formatChar(c){var replacements={'\'':'\\\'','"':'\\"','\\':'\\\\','\b':'\\b','\f':'\\f','\n':'\\n','\r':'\\r','\t':'\\t','\x0B':'\\v','\0':'\\0','\u2028':'\\u2028','\u2029':'\\u2029'};if(replacements[c]){return replacements[c]}if(c<' '){var hexString=c.charCodeAt(0).toString(16);return '\\x'+('00'+hexString).substring(hexString.length)}return c}function syntaxError(message){var err=new SyntaxError(message);err.lineNumber=line;err.columnNumber=column;return err}module.exports=exports['default'];
-}(parse, parse.exports));
-
-var stringify = {exports: {}};
-
-(function (module, exports) {
-Object.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=stringify;var _util=util$1;var util=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else {var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj}}function stringify(value,replacer,space){var stack=[];var indent='';var propertyList=void 0;var replacerFunc=void 0;var gap='';var quote=void 0;if(replacer!=null&&(typeof replacer==='undefined'?'undefined':_typeof(replacer))==='object'&&!Array.isArray(replacer)){space=replacer.space;quote=replacer.quote;replacer=replacer.replacer;}if(typeof replacer==='function'){replacerFunc=replacer;}else if(Array.isArray(replacer)){propertyList=[];var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=replacer[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var v=_step.value;var item=void 0;if(typeof v==='string'){item=v;}else if(typeof v==='number'||v instanceof String||v instanceof Number){item=String(v);}if(item!==undefined&&propertyList.indexOf(item)<0){propertyList.push(item);}}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError}}}}if(space instanceof Number){space=Number(space);}else if(space instanceof String){space=String(space);}if(typeof space==='number'){if(space>0){space=Math.min(10,Math.floor(space));gap=' '.substr(0,space);}}else if(typeof space==='string'){gap=space.substr(0,10);}return serializeProperty('',{'':value});function serializeProperty(key,holder){var value=holder[key];if(value!=null){if(typeof value.toJSON5==='function'){value=value.toJSON5(key);}else if(typeof value.toJSON==='function'){value=value.toJSON(key);}}if(replacerFunc){value=replacerFunc.call(holder,key,value);}if(value instanceof Number){value=Number(value);}else if(value instanceof String){value=String(value);}else if(value instanceof Boolean){value=value.valueOf();}switch(value){case null:return 'null';case true:return 'true';case false:return 'false';}if(typeof value==='string'){return quoteString(value)}if(typeof value==='number'){return String(value)}if((typeof value==='undefined'?'undefined':_typeof(value))==='object'){return Array.isArray(value)?serializeArray(value):serializeObject(value)}return undefined}function quoteString(value){var quotes={'\'':0.1,'"':0.2};var replacements={'\'':'\\\'','"':'\\"','\\':'\\\\','\b':'\\b','\f':'\\f','\n':'\\n','\r':'\\r','\t':'\\t','\x0B':'\\v','\0':'\\0','\u2028':'\\u2028','\u2029':'\\u2029'};var product='';var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=value[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var c=_step2.value;switch(c){case'\'':case'"':quotes[c]++;product+=c;continue;}if(replacements[c]){product+=replacements[c];continue}if(c<' '){var hexString=c.charCodeAt(0).toString(16);product+='\\x'+('00'+hexString).substring(hexString.length);continue}product+=c;}}catch(err){_didIteratorError2=true;_iteratorError2=err;}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return();}}finally{if(_didIteratorError2){throw _iteratorError2}}}var quoteChar=quote||Object.keys(quotes).reduce(function(a,b){return quotes[a]<quotes[b]?a:b});product=product.replace(new RegExp(quoteChar,'g'),replacements[quoteChar]);return quoteChar+product+quoteChar}function serializeObject(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var keys=propertyList||Object.keys(value);var partial=[];var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=keys[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var key=_step3.value;var propertyString=serializeProperty(key,value);if(propertyString!==undefined){var member=serializeKey(key)+':';if(gap!==''){member+=' ';}member+=propertyString;partial.push(member);}}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3}}}var final=void 0;if(partial.length===0){final='{}';}else {var properties=void 0;if(gap===''){properties=partial.join(',');final='{'+properties+'}';}else {var separator=',\n'+indent;properties=partial.join(separator);final='{\n'+indent+properties+',\n'+stepback+'}';}}stack.pop();indent=stepback;return final}function serializeKey(key){if(key.length===0){return quoteString(key)}var firstChar=String.fromCodePoint(key.codePointAt(0));if(!util.isIdStartChar(firstChar)){return quoteString(key)}for(var i=firstChar.length;i<key.length;i++){if(!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))){return quoteString(key)}}return key}function serializeArray(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var partial=[];for(var i=0;i<value.length;i++){var propertyString=serializeProperty(String(i),value);partial.push(propertyString!==undefined?propertyString:'null');}var final=void 0;if(partial.length===0){final='[]';}else {if(gap===''){var properties=partial.join(',');final='['+properties+']';}else {var separator=',\n'+indent;var _properties=partial.join(separator);final='[\n'+indent+_properties+',\n'+stepback+']';}}stack.pop();indent=stepback;return final}}module.exports=exports['default'];
-}(stringify, stringify.exports));
-
-(function (module, exports) {
-Object.defineProperty(exports,'__esModule',{value:true});var _parse=parse.exports;var _parse2=_interopRequireDefault(_parse);var _stringify=stringify.exports;var _stringify2=_interopRequireDefault(_stringify);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default={parse:_parse2.default,stringify:_stringify2.default};module.exports=exports['default'];
-}(lib$1, lib$1.exports));
-
-const JSON5 = lib$1.exports;
-
-const specialValues = {
- null: null,
- true: true,
- false: false,
-};
-
-function parseQuery$2(query) {
- if (query.substr(0, 1) !== '?') {
- throw new Error(
- "A valid query string passed to parseQuery should begin with '?'"
- );
- }
-
- query = query.substr(1);
-
- if (!query) {
- return {};
- }
-
- if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {
- return JSON5.parse(query);
- }
-
- const queryArgs = query.split(/[,&]/g);
- const result = {};
-
- queryArgs.forEach((arg) => {
- const idx = arg.indexOf('=');
-
- if (idx >= 0) {
- let name = arg.substr(0, idx);
- let value = decodeURIComponent(arg.substr(idx + 1));
-
- if (specialValues.hasOwnProperty(value)) {
- value = specialValues[value];
- }
-
- if (name.substr(-2) === '[]') {
- name = decodeURIComponent(name.substr(0, name.length - 2));
-
- if (!Array.isArray(result[name])) {
- result[name] = [];
- }
-
- result[name].push(value);
- } else {
- name = decodeURIComponent(name);
- result[name] = value;
- }
- } else {
- if (arg.substr(0, 1) === '-') {
- result[decodeURIComponent(arg.substr(1))] = false;
- } else if (arg.substr(0, 1) === '+') {
- result[decodeURIComponent(arg.substr(1))] = true;
- } else {
- result[decodeURIComponent(arg)] = true;
- }
- }
- });
-
- return result;
-}
-
-var parseQuery_1 = parseQuery$2;
-
-const parseQuery$1 = parseQuery_1;
-
-function getOptions$1(loaderContext) {
- const query = loaderContext.query;
-
- if (typeof query === 'string' && query !== '') {
- return parseQuery$1(loaderContext.query);
- }
-
- if (!query || typeof query !== 'object') {
- // Not object-like queries are not supported.
- return null;
- }
-
- return query;
-}
-
-var getOptions_1 = getOptions$1;
-
-const path$3 = path__default;
-
-const matchRelativePath = /^\.\.?[/\\]/;
-
-function isAbsolutePath(str) {
- return path$3.posix.isAbsolute(str) || path$3.win32.isAbsolute(str);
-}
-
-function isRelativePath(str) {
- return matchRelativePath.test(str);
-}
-
-function stringifyRequest$1(loaderContext, request) {
- const splitted = request.split('!');
- const context =
- loaderContext.context ||
- (loaderContext.options && loaderContext.options.context);
-
- return JSON.stringify(
- splitted
- .map((part) => {
- // First, separate singlePath from query, because the query might contain paths again
- const splittedPart = part.match(/^(.*?)(\?.*)/);
- const query = splittedPart ? splittedPart[2] : '';
- let singlePath = splittedPart ? splittedPart[1] : part;
-
- if (isAbsolutePath(singlePath) && context) {
- singlePath = path$3.relative(context, singlePath);
-
- if (isAbsolutePath(singlePath)) {
- // If singlePath still matches an absolute path, singlePath was on a different drive than context.
- // In this case, we leave the path platform-specific without replacing any separators.
- // @see https://github.com/webpack/loader-utils/pull/14
- return singlePath + query;
- }
-
- if (isRelativePath(singlePath) === false) {
- // Ensure that the relative path starts at least with ./ otherwise it would be a request into the modules directory (like node_modules).
- singlePath = './' + singlePath;
- }
- }
-
- return singlePath.replace(/\\/g, '/') + query;
- })
- .join('!')
- );
-}
-
-var stringifyRequest_1 = stringifyRequest$1;
-
-function getRemainingRequest$1(loaderContext) {
- if (loaderContext.remainingRequest) {
- return loaderContext.remainingRequest;
- }
-
- const request = loaderContext.loaders
- .slice(loaderContext.loaderIndex + 1)
- .map((obj) => obj.request)
- .concat([loaderContext.resource]);
-
- return request.join('!');
-}
-
-var getRemainingRequest_1 = getRemainingRequest$1;
-
-function getCurrentRequest$1(loaderContext) {
- if (loaderContext.currentRequest) {
- return loaderContext.currentRequest;
- }
-
- const request = loaderContext.loaders
- .slice(loaderContext.loaderIndex)
- .map((obj) => obj.request)
- .concat([loaderContext.resource]);
-
- return request.join('!');
-}
-
-var getCurrentRequest_1 = getCurrentRequest$1;
-
-const path$2 = path__default;
-
-function isUrlRequest$1(url, root) {
- // An URL is not an request if
-
- // 1. It's an absolute url and it is not `windows` path like `C:\dir\file`
- if (/^[a-z][a-z0-9+.-]*:/i.test(url) && !path$2.win32.isAbsolute(url)) {
- return false;
- }
-
- // 2. It's a protocol-relative
- if (/^\/\//.test(url)) {
- return false;
- }
-
- // 3. It's some kind of url for a template
- if (/^[{}[\]#*;,'§$%&(=?`´^°<>]/.test(url)) {
- return false;
- }
-
- // 4. It's also not an request if root isn't set and it's a root-relative url
- if ((root === undefined || root === false) && /^\//.test(url)) {
- return false;
- }
-
- return true;
-}
-
-var isUrlRequest_1 = isUrlRequest$1;
-
-// we can't use path.win32.isAbsolute because it also matches paths starting with a forward slash
-const matchNativeWin32Path = /^[A-Z]:[/\\]|^\\\\/i;
-
-function urlToRequest$1(url, root) {
- // Do not rewrite an empty url
- if (url === '') {
- return '';
- }
-
- const moduleRequestRegex = /^[^?]*~/;
- let request;
-
- if (matchNativeWin32Path.test(url)) {
- // absolute windows path, keep it
- request = url;
- } else if (root !== undefined && root !== false && /^\//.test(url)) {
- // if root is set and the url is root-relative
- switch (typeof root) {
- // 1. root is a string: root is prefixed to the url
- case 'string':
- // special case: `~` roots convert to module request
- if (moduleRequestRegex.test(root)) {
- request = root.replace(/([^~/])$/, '$1/') + url.slice(1);
- } else {
- request = root + url;
- }
- break;
- // 2. root is `true`: absolute paths are allowed
- // *nix only, windows-style absolute paths are always allowed as they doesn't start with a `/`
- case 'boolean':
- request = url;
- break;
- default:
- throw new Error(
- "Unexpected parameters to loader-utils 'urlToRequest': url = " +
- url +
- ', root = ' +
- root +
- '.'
- );
- }
- } else if (/^\.\.?\//.test(url)) {
- // A relative url stays
- request = url;
- } else {
- // every other url is threaded like a relative url
- request = './' + url;
- }
-
- // A `~` makes the url an module
- if (moduleRequestRegex.test(request)) {
- request = request.replace(moduleRequestRegex, '');
- }
-
- return request;
-}
-
-var urlToRequest_1 = urlToRequest$1;
-
-function parseString$1(str) {
- try {
- if (str[0] === '"') {
- return JSON.parse(str);
- }
-
- if (str[0] === "'" && str.substr(str.length - 1) === "'") {
- return parseString$1(
- str
- .replace(/\\.|"/g, (x) => (x === '"' ? '\\"' : x))
- .replace(/^'|'$/g, '"')
- );
- }
-
- return JSON.parse('"' + str + '"');
- } catch (e) {
- return str;
- }
-}
-
-var parseString_1 = parseString$1;
-
-var big = {exports: {}};
-
-/*
- * big.js v5.2.2
- * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.
- * Copyright (c) 2018 Michael Mclaughlin <M8ch88l@gmail.com>
- * https://github.com/MikeMcl/big.js/LICENCE
- */
-
-(function (module) {
-(function (GLOBAL) {
- var Big,
-
-
-/************************************** EDITABLE DEFAULTS *****************************************/
-
-
- // The default values below must be integers within the stated ranges.
-
- /*
- * The maximum number of decimal places (DP) of the results of operations involving division:
- * div and sqrt, and pow with negative exponents.
- */
- DP = 20, // 0 to MAX_DP
-
- /*
- * The rounding mode (RM) used when rounding to the above decimal places.
- *
- * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)
- * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)
- * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)
- * 3 Away from zero. (ROUND_UP)
- */
- RM = 1, // 0, 1, 2 or 3
-
- // The maximum value of DP and Big.DP.
- MAX_DP = 1E6, // 0 to 1000000
-
- // The maximum magnitude of the exponent argument to the pow method.
- MAX_POWER = 1E6, // 1 to 1000000
-
- /*
- * The negative exponent (NE) at and beneath which toString returns exponential notation.
- * (JavaScript numbers: -7)
- * -1000000 is the minimum recommended exponent value of a Big.
- */
- NE = -7, // 0 to -1000000
-
- /*
- * The positive exponent (PE) at and above which toString returns exponential notation.
- * (JavaScript numbers: 21)
- * 1000000 is the maximum recommended exponent value of a Big.
- * (This limit is not enforced or checked.)
- */
- PE = 21, // 0 to 1000000
-
-
-/**************************************************************************************************/
-
-
- // Error messages.
- NAME = '[big.js] ',
- INVALID = NAME + 'Invalid ',
- INVALID_DP = INVALID + 'decimal places',
- INVALID_RM = INVALID + 'rounding mode',
- DIV_BY_ZERO = NAME + 'Division by zero',
-
- // The shared prototype object.
- P = {},
- UNDEFINED = void 0,
- NUMERIC = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;
-
-
- /*
- * Create and return a Big constructor.
- *
- */
- function _Big_() {
-
- /*
- * The Big constructor and exported function.
- * Create and return a new instance of a Big number object.
- *
- * n {number|string|Big} A numeric value.
- */
- function Big(n) {
- var x = this;
-
- // Enable constructor usage without new.
- if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);
-
- // Duplicate.
- if (n instanceof Big) {
- x.s = n.s;
- x.e = n.e;
- x.c = n.c.slice();
- } else {
- parse(x, n);
- }
-
- /*
- * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which
- * points to Object.
- */
- x.constructor = Big;
- }
-
- Big.prototype = P;
- Big.DP = DP;
- Big.RM = RM;
- Big.NE = NE;
- Big.PE = PE;
- Big.version = '5.2.2';
-
- return Big;
- }
-
-
- /*
- * Parse the number or string value passed to a Big constructor.
- *
- * x {Big} A Big number instance.
- * n {number|string} A numeric value.
- */
- function parse(x, n) {
- var e, i, nl;
-
- // Minus zero?
- if (n === 0 && 1 / n < 0) n = '-0';
- else if (!NUMERIC.test(n += '')) throw Error(INVALID + 'number');
-
- // Determine sign.
- x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;
-
- // Decimal point?
- if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');
-
- // Exponential form?
- if ((i = n.search(/e/i)) > 0) {
-
- // Determine exponent.
- if (e < 0) e = i;
- e += +n.slice(i + 1);
- n = n.substring(0, i);
- } else if (e < 0) {
-
- // Integer.
- e = n.length;
- }
-
- nl = n.length;
-
- // Determine leading zeros.
- for (i = 0; i < nl && n.charAt(i) == '0';) ++i;
-
- if (i == nl) {
-
- // Zero.
- x.c = [x.e = 0];
- } else {
-
- // Determine trailing zeros.
- for (; nl > 0 && n.charAt(--nl) == '0';);
- x.e = e - i - 1;
- x.c = [];
-
- // Convert string to array of digits without leading/trailing zeros.
- for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);
- }
-
- return x;
- }
-
-
- /*
- * Round Big x to a maximum of dp decimal places using rounding mode rm.
- * Called by stringify, P.div, P.round and P.sqrt.
- *
- * x {Big} The Big to round.
- * dp {number} Integer, 0 to MAX_DP inclusive.
- * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)
- * [more] {boolean} Whether the result of division was truncated.
- */
- function round(x, dp, rm, more) {
- var xc = x.c,
- i = x.e + dp + 1;
-
- if (i < xc.length) {
- if (rm === 1) {
-
- // xc[i] is the digit after the digit that may be rounded up.
- more = xc[i] >= 5;
- } else if (rm === 2) {
- more = xc[i] > 5 || xc[i] == 5 &&
- (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1);
- } else if (rm === 3) {
- more = more || !!xc[0];
- } else {
- more = false;
- if (rm !== 0) throw Error(INVALID_RM);
- }
-
- if (i < 1) {
- xc.length = 1;
-
- if (more) {
-
- // 1, 0.1, 0.01, 0.001, 0.0001 etc.
- x.e = -dp;
- xc[0] = 1;
- } else {
-
- // Zero.
- xc[0] = x.e = 0;
- }
- } else {
-
- // Remove any digits after the required decimal places.
- xc.length = i--;
-
- // Round up?
- if (more) {
-
- // Rounding up may mean the previous digit has to be rounded up.
- for (; ++xc[i] > 9;) {
- xc[i] = 0;
- if (!i--) {
- ++x.e;
- xc.unshift(1);
- }
- }
- }
-
- // Remove trailing zeros.
- for (i = xc.length; !xc[--i];) xc.pop();
- }
- } else if (rm < 0 || rm > 3 || rm !== ~~rm) {
- throw Error(INVALID_RM);
- }
-
- return x;
- }
-
-
- /*
- * Return a string representing the value of Big x in normal or exponential notation.
- * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.
- *
- * x {Big}
- * id? {number} Caller id.
- * 1 toExponential
- * 2 toFixed
- * 3 toPrecision
- * 4 valueOf
- * n? {number|undefined} Caller's argument.
- * k? {number|undefined}
- */
- function stringify(x, id, n, k) {
- var e, s,
- Big = x.constructor,
- z = !x.c[0];
-
- if (n !== UNDEFINED) {
- if (n !== ~~n || n < (id == 3) || n > MAX_DP) {
- throw Error(id == 3 ? INVALID + 'precision' : INVALID_DP);
- }
-
- x = new Big(x);
-
- // The index of the digit that may be rounded up.
- n = k - x.e;
-
- // Round?
- if (x.c.length > ++k) round(x, n, Big.RM);
-
- // toFixed: recalculate k as x.e may have changed if value rounded up.
- if (id == 2) k = x.e + n + 1;
-
- // Append zeros?
- for (; x.c.length < k;) x.c.push(0);
- }
-
- e = x.e;
- s = x.c.join('');
- n = s.length;
-
- // Exponential notation?
- if (id != 2 && (id == 1 || id == 3 && k <= e || e <= Big.NE || e >= Big.PE)) {
- s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;
-
- // Normal notation.
- } else if (e < 0) {
- for (; ++e;) s = '0' + s;
- s = '0.' + s;
- } else if (e > 0) {
- if (++e > n) for (e -= n; e--;) s += '0';
- else if (e < n) s = s.slice(0, e) + '.' + s.slice(e);
- } else if (n > 1) {
- s = s.charAt(0) + '.' + s.slice(1);
- }
-
- return x.s < 0 && (!z || id == 4) ? '-' + s : s;
- }
-
-
- // Prototype/instance methods
-
-
- /*
- * Return a new Big whose value is the absolute value of this Big.
- */
- P.abs = function () {
- var x = new this.constructor(this);
- x.s = 1;
- return x;
- };
-
-
- /*
- * Return 1 if the value of this Big is greater than the value of Big y,
- * -1 if the value of this Big is less than the value of Big y, or
- * 0 if they have the same value.
- */
- P.cmp = function (y) {
- var isneg,
- x = this,
- xc = x.c,
- yc = (y = new x.constructor(y)).c,
- i = x.s,
- j = y.s,
- k = x.e,
- l = y.e;
-
- // Either zero?
- if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;
-
- // Signs differ?
- if (i != j) return i;
-
- isneg = i < 0;
-
- // Compare exponents.
- if (k != l) return k > l ^ isneg ? 1 : -1;
-
- j = (k = xc.length) < (l = yc.length) ? k : l;
-
- // Compare digit by digit.
- for (i = -1; ++i < j;) {
- if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;
- }
-
- // Compare lengths.
- return k == l ? 0 : k > l ^ isneg ? 1 : -1;
- };
-
-
- /*
- * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,
- * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.
- */
- P.div = function (y) {
- var x = this,
- Big = x.constructor,
- a = x.c, // dividend
- b = (y = new Big(y)).c, // divisor
- k = x.s == y.s ? 1 : -1,
- dp = Big.DP;
-
- if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(INVALID_DP);
-
- // Divisor is zero?
- if (!b[0]) throw Error(DIV_BY_ZERO);
-
- // Dividend is 0? Return +-0.
- if (!a[0]) return new Big(k * 0);
-
- var bl, bt, n, cmp, ri,
- bz = b.slice(),
- ai = bl = b.length,
- al = a.length,
- r = a.slice(0, bl), // remainder
- rl = r.length,
- q = y, // quotient
- qc = q.c = [],
- qi = 0,
- d = dp + (q.e = x.e - y.e) + 1; // number of digits of the result
-
- q.s = k;
- k = d < 0 ? 0 : d;
-
- // Create version of divisor with leading zero.
- bz.unshift(0);
-
- // Add zeros to make remainder as long as divisor.
- for (; rl++ < bl;) r.push(0);
-
- do {
-
- // n is how many times the divisor goes into current remainder.
- for (n = 0; n < 10; n++) {
-
- // Compare divisor and remainder.
- if (bl != (rl = r.length)) {
- cmp = bl > rl ? 1 : -1;
- } else {
- for (ri = -1, cmp = 0; ++ri < bl;) {
- if (b[ri] != r[ri]) {
- cmp = b[ri] > r[ri] ? 1 : -1;
- break;
- }
- }
- }
-
- // If divisor < remainder, subtract divisor from remainder.
- if (cmp < 0) {
-
- // Remainder can't be more than 1 digit longer than divisor.
- // Equalise lengths using divisor with extra leading zero?
- for (bt = rl == bl ? b : bz; rl;) {
- if (r[--rl] < bt[rl]) {
- ri = rl;
- for (; ri && !r[--ri];) r[ri] = 9;
- --r[ri];
- r[rl] += 10;
- }
- r[rl] -= bt[rl];
- }
-
- for (; !r[0];) r.shift();
- } else {
- break;
- }
- }
-
- // Add the digit n to the result array.
- qc[qi++] = cmp ? n : ++n;
-
- // Update the remainder.
- if (r[0] && cmp) r[rl] = a[ai] || 0;
- else r = [a[ai]];
-
- } while ((ai++ < al || r[0] !== UNDEFINED) && k--);
-
- // Leading zero? Do not remove if result is simply zero (qi == 1).
- if (!qc[0] && qi != 1) {
-
- // There can't be more than one zero.
- qc.shift();
- q.e--;
- }
-
- // Round?
- if (qi > d) round(q, dp, Big.RM, r[0] !== UNDEFINED);
-
- return q;
- };
-
-
- /*
- * Return true if the value of this Big is equal to the value of Big y, otherwise return false.
- */
- P.eq = function (y) {
- return !this.cmp(y);
- };
-
-
- /*
- * Return true if the value of this Big is greater than the value of Big y, otherwise return
- * false.
- */
- P.gt = function (y) {
- return this.cmp(y) > 0;
- };
-
-
- /*
- * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise
- * return false.
- */
- P.gte = function (y) {
- return this.cmp(y) > -1;
- };
-
-
- /*
- * Return true if the value of this Big is less than the value of Big y, otherwise return false.
- */
- P.lt = function (y) {
- return this.cmp(y) < 0;
- };
-
-
- /*
- * Return true if the value of this Big is less than or equal to the value of Big y, otherwise
- * return false.
- */
- P.lte = function (y) {
- return this.cmp(y) < 1;
- };
-
-
- /*
- * Return a new Big whose value is the value of this Big minus the value of Big y.
- */
- P.minus = P.sub = function (y) {
- var i, j, t, xlty,
- x = this,
- Big = x.constructor,
- a = x.s,
- b = (y = new Big(y)).s;
-
- // Signs differ?
- if (a != b) {
- y.s = -b;
- return x.plus(y);
- }
-
- var xc = x.c.slice(),
- xe = x.e,
- yc = y.c,
- ye = y.e;
-
- // Either zero?
- if (!xc[0] || !yc[0]) {
-
- // y is non-zero? x is non-zero? Or both are zero.
- return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);
- }
-
- // Determine which is the bigger number. Prepend zeros to equalise exponents.
- if (a = xe - ye) {
-
- if (xlty = a < 0) {
- a = -a;
- t = xc;
- } else {
- ye = xe;
- t = yc;
- }
-
- t.reverse();
- for (b = a; b--;) t.push(0);
- t.reverse();
- } else {
-
- // Exponents equal. Check digit by digit.
- j = ((xlty = xc.length < yc.length) ? xc : yc).length;
-
- for (a = b = 0; b < j; b++) {
- if (xc[b] != yc[b]) {
- xlty = xc[b] < yc[b];
- break;
- }
- }
- }
-
- // x < y? Point xc to the array of the bigger number.
- if (xlty) {
- t = xc;
- xc = yc;
- yc = t;
- y.s = -y.s;
- }
-
- /*
- * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only
- * needs to start at yc.length.
- */
- if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;
-
- // Subtract yc from xc.
- for (b = i; j > a;) {
- if (xc[--j] < yc[j]) {
- for (i = j; i && !xc[--i];) xc[i] = 9;
- --xc[i];
- xc[j] += 10;
- }
-
- xc[j] -= yc[j];
- }
-
- // Remove trailing zeros.
- for (; xc[--b] === 0;) xc.pop();
-
- // Remove leading zeros and adjust exponent accordingly.
- for (; xc[0] === 0;) {
- xc.shift();
- --ye;
- }
-
- if (!xc[0]) {
-
- // n - n = +0
- y.s = 1;
-
- // Result must be zero.
- xc = [ye = 0];
- }
-
- y.c = xc;
- y.e = ye;
-
- return y;
- };
-
-
- /*
- * Return a new Big whose value is the value of this Big modulo the value of Big y.
- */
- P.mod = function (y) {
- var ygtx,
- x = this,
- Big = x.constructor,
- a = x.s,
- b = (y = new Big(y)).s;
-
- if (!y.c[0]) throw Error(DIV_BY_ZERO);
-
- x.s = y.s = 1;
- ygtx = y.cmp(x) == 1;
- x.s = a;
- y.s = b;
-
- if (ygtx) return new Big(x);
-
- a = Big.DP;
- b = Big.RM;
- Big.DP = Big.RM = 0;
- x = x.div(y);
- Big.DP = a;
- Big.RM = b;
-
- return this.minus(x.times(y));
- };
-
-
- /*
- * Return a new Big whose value is the value of this Big plus the value of Big y.
- */
- P.plus = P.add = function (y) {
- var t,
- x = this,
- Big = x.constructor,
- a = x.s,
- b = (y = new Big(y)).s;
-
- // Signs differ?
- if (a != b) {
- y.s = -b;
- return x.minus(y);
- }
-
- var xe = x.e,
- xc = x.c,
- ye = y.e,
- yc = y.c;
-
- // Either zero? y is non-zero? x is non-zero? Or both are zero.
- if (!xc[0] || !yc[0]) return yc[0] ? y : new Big(xc[0] ? x : a * 0);
-
- xc = xc.slice();
-
- // Prepend zeros to equalise exponents.
- // Note: reverse faster than unshifts.
- if (a = xe - ye) {
- if (a > 0) {
- ye = xe;
- t = yc;
- } else {
- a = -a;
- t = xc;
- }
-
- t.reverse();
- for (; a--;) t.push(0);
- t.reverse();
- }
-
- // Point xc to the longer array.
- if (xc.length - yc.length < 0) {
- t = yc;
- yc = xc;
- xc = t;
- }
-
- a = yc.length;
-
- // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.
- for (b = 0; a; xc[a] %= 10) b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;
-
- // No need to check for zero, as +x + +y != 0 && -x + -y != 0
-
- if (b) {
- xc.unshift(b);
- ++ye;
- }
-
- // Remove trailing zeros.
- for (a = xc.length; xc[--a] === 0;) xc.pop();
-
- y.c = xc;
- y.e = ye;
-
- return y;
- };
-
-
- /*
- * Return a Big whose value is the value of this Big raised to the power n.
- * If n is negative, round to a maximum of Big.DP decimal places using rounding
- * mode Big.RM.
- *
- * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.
- */
- P.pow = function (n) {
- var x = this,
- one = new x.constructor(1),
- y = one,
- isneg = n < 0;
-
- if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) throw Error(INVALID + 'exponent');
- if (isneg) n = -n;
-
- for (;;) {
- if (n & 1) y = y.times(x);
- n >>= 1;
- if (!n) break;
- x = x.times(x);
- }
-
- return isneg ? one.div(y) : y;
- };
-
-
- /*
- * Return a new Big whose value is the value of this Big rounded using rounding mode rm
- * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a
- * multiple of 10**-dp.
- * If dp is not specified, round to 0 decimal places.
- * If rm is not specified, use Big.RM.
- *
- * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.
- * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)
- */
- P.round = function (dp, rm) {
- var Big = this.constructor;
- if (dp === UNDEFINED) dp = 0;
- else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) throw Error(INVALID_DP);
- return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm);
- };
-
-
- /*
- * Return a new Big whose value is the square root of the value of this Big, rounded, if
- * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.
- */
- P.sqrt = function () {
- var r, c, t,
- x = this,
- Big = x.constructor,
- s = x.s,
- e = x.e,
- half = new Big(0.5);
-
- // Zero?
- if (!x.c[0]) return new Big(x);
-
- // Negative?
- if (s < 0) throw Error(NAME + 'No square root');
-
- // Estimate.
- s = Math.sqrt(x + '');
-
- // Math.sqrt underflow/overflow?
- // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.
- if (s === 0 || s === 1 / 0) {
- c = x.c.join('');
- if (!(c.length + e & 1)) c += '0';
- s = Math.sqrt(c);
- e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);
- r = new Big((s == 1 / 0 ? '1e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);
- } else {
- r = new Big(s);
- }
-
- e = r.e + (Big.DP += 4);
-
- // Newton-Raphson iteration.
- do {
- t = r;
- r = half.times(t.plus(x.div(t)));
- } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));
-
- return round(r, Big.DP -= 4, Big.RM);
- };
-
-
- /*
- * Return a new Big whose value is the value of this Big times the value of Big y.
- */
- P.times = P.mul = function (y) {
- var c,
- x = this,
- Big = x.constructor,
- xc = x.c,
- yc = (y = new Big(y)).c,
- a = xc.length,
- b = yc.length,
- i = x.e,
- j = y.e;
-
- // Determine sign of result.
- y.s = x.s == y.s ? 1 : -1;
-
- // Return signed 0 if either 0.
- if (!xc[0] || !yc[0]) return new Big(y.s * 0);
-
- // Initialise exponent of result as x.e + y.e.
- y.e = i + j;
-
- // If array xc has fewer digits than yc, swap xc and yc, and lengths.
- if (a < b) {
- c = xc;
- xc = yc;
- yc = c;
- j = a;
- a = b;
- b = j;
- }
-
- // Initialise coefficient array of result with zeros.
- for (c = new Array(j = a + b); j--;) c[j] = 0;
-
- // Multiply.
-
- // i is initially xc.length.
- for (i = b; i--;) {
- b = 0;
-
- // a is yc.length.
- for (j = a + i; j > i;) {
-
- // Current sum of products at this digit position, plus carry.
- b = c[j] + yc[i] * xc[j - i - 1] + b;
- c[j--] = b % 10;
-
- // carry
- b = b / 10 | 0;
- }
-
- c[j] = (c[j] + b) % 10;
- }
-
- // Increment result exponent if there is a final carry, otherwise remove leading zero.
- if (b) ++y.e;
- else c.shift();
-
- // Remove trailing zeros.
- for (i = c.length; !c[--i];) c.pop();
- y.c = c;
-
- return y;
- };
-
-
- /*
- * Return a string representing the value of this Big in exponential notation to dp fixed decimal
- * places and rounded using Big.RM.
- *
- * dp? {number} Integer, 0 to MAX_DP inclusive.
- */
- P.toExponential = function (dp) {
- return stringify(this, 1, dp, dp);
- };
-
-
- /*
- * Return a string representing the value of this Big in normal notation to dp fixed decimal
- * places and rounded using Big.RM.
- *
- * dp? {number} Integer, 0 to MAX_DP inclusive.
- *
- * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.
- * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
- */
- P.toFixed = function (dp) {
- return stringify(this, 2, dp, this.e + dp);
- };
-
-
- /*
- * Return a string representing the value of this Big rounded to sd significant digits using
- * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent
- * the integer part of the value in normal notation.
- *
- * sd {number} Integer, 1 to MAX_DP inclusive.
- */
- P.toPrecision = function (sd) {
- return stringify(this, 3, sd, sd - 1);
- };
-
-
- /*
- * Return a string representing the value of this Big.
- * Return exponential notation if this Big has a positive exponent equal to or greater than
- * Big.PE, or a negative exponent equal to or less than Big.NE.
- * Omit the sign for negative zero.
- */
- P.toString = function () {
- return stringify(this);
- };
-
-
- /*
- * Return a string representing the value of this Big.
- * Return exponential notation if this Big has a positive exponent equal to or greater than
- * Big.PE, or a negative exponent equal to or less than Big.NE.
- * Include the sign for negative zero.
- */
- P.valueOf = P.toJSON = function () {
- return stringify(this, 4);
- };
-
-
- // Export
-
-
- Big = _Big_();
-
- Big['default'] = Big.Big = Big;
-
- //AMD.
- if (module.exports) {
- module.exports = Big;
-
- //Browser.
- } else {
- GLOBAL.Big = Big;
- }
-})(build$2.commonjsGlobal);
-}(big));
-
-const baseEncodeTables = {
- 26: 'abcdefghijklmnopqrstuvwxyz',
- 32: '123456789abcdefghjkmnpqrstuvwxyz', // no 0lio
- 36: '0123456789abcdefghijklmnopqrstuvwxyz',
- 49: 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no lIO
- 52: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
- 58: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no 0lIO
- 62: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
- 64: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_',
-};
-
-function encodeBufferToBase(buffer, base) {
- const encodeTable = baseEncodeTables[base];
- if (!encodeTable) {
- throw new Error('Unknown encoding base' + base);
- }
-
- const readLength = buffer.length;
- const Big = big.exports;
-
- Big.RM = Big.DP = 0;
- let b = new Big(0);
-
- for (let i = readLength - 1; i >= 0; i--) {
- b = b.times(256).plus(buffer[i]);
- }
-
- let output = '';
- while (b.gt(0)) {
- output = encodeTable[b.mod(base)] + output;
- b = b.div(base);
- }
-
- Big.DP = 20;
- Big.RM = 1;
-
- return output;
-}
-
-function getHashDigest$2(buffer, hashType, digestType, maxLength) {
- hashType = hashType || 'md5';
- maxLength = maxLength || 9999;
-
- const hash = require$$1__default.createHash(hashType);
-
- hash.update(buffer);
-
- if (
- digestType === 'base26' ||
- digestType === 'base32' ||
- digestType === 'base36' ||
- digestType === 'base49' ||
- digestType === 'base52' ||
- digestType === 'base58' ||
- digestType === 'base62' ||
- digestType === 'base64'
- ) {
- return encodeBufferToBase(hash.digest(), digestType.substr(4)).substr(
- 0,
- maxLength
- );
- } else {
- return hash.digest(digestType || 'hex').substr(0, maxLength);
- }
-}
-
-var getHashDigest_1 = getHashDigest$2;
-
-var emojisList$1 = [
- "🀄️",
- "🃏",
- "🅰️",
- "🅱️",
- "🅾️",
- "🅿️",
- "🆎",
- "🆑",
- "🆒",
- "🆓",
- "🆔",
- "🆕",
- "🆖",
- "🆗",
- "🆘",
- "🆙",
- "🆚",
- "🇦🇨",
- "🇦🇩",
- "🇦🇪",
- "🇦🇫",
- "🇦🇬",
- "🇦🇮",
- "🇦🇱",
- "🇦🇲",
- "🇦🇴",
- "🇦🇶",
- "🇦🇷",
- "🇦🇸",
- "🇦🇹",
- "🇦🇺",
- "🇦🇼",
- "🇦🇽",
- "🇦🇿",
- "🇦",
- "🇧🇦",
- "🇧🇧",
- "🇧🇩",
- "🇧🇪",
- "🇧🇫",
- "🇧🇬",
- "🇧🇭",
- "🇧🇮",
- "🇧🇯",
- "🇧🇱",
- "🇧🇲",
- "🇧🇳",
- "🇧🇴",
- "🇧🇶",
- "🇧🇷",
- "🇧🇸",
- "🇧🇹",
- "🇧🇻",
- "🇧🇼",
- "🇧🇾",
- "🇧🇿",
- "🇧",
- "🇨🇦",
- "🇨🇨",
- "🇨🇩",
- "🇨🇫",
- "🇨🇬",
- "🇨🇭",
- "🇨🇮",
- "🇨🇰",
- "🇨🇱",
- "🇨🇲",
- "🇨🇳",
- "🇨🇴",
- "🇨🇵",
- "🇨🇷",
- "🇨🇺",
- "🇨🇻",
- "🇨🇼",
- "🇨🇽",
- "🇨🇾",
- "🇨🇿",
- "🇨",
- "🇩🇪",
- "🇩🇬",
- "🇩🇯",
- "🇩🇰",
- "🇩🇲",
- "🇩🇴",
- "🇩🇿",
- "🇩",
- "🇪🇦",
- "🇪🇨",
- "🇪🇪",
- "🇪🇬",
- "🇪🇭",
- "🇪🇷",
- "🇪🇸",
- "🇪🇹",
- "🇪🇺",
- "🇪",
- "🇫🇮",
- "🇫🇯",
- "🇫🇰",
- "🇫🇲",
- "🇫🇴",
- "🇫🇷",
- "🇫",
- "🇬🇦",
- "🇬🇧",
- "🇬🇩",
- "🇬🇪",
- "🇬🇫",
- "🇬🇬",
- "🇬🇭",
- "🇬🇮",
- "🇬🇱",
- "🇬🇲",
- "🇬🇳",
- "🇬🇵",
- "🇬🇶",
- "🇬🇷",
- "🇬🇸",
- "🇬🇹",
- "🇬🇺",
- "🇬🇼",
- "🇬🇾",
- "🇬",
- "🇭🇰",
- "🇭🇲",
- "🇭🇳",
- "🇭🇷",
- "🇭🇹",
- "🇭🇺",
- "🇭",
- "🇮🇨",
- "🇮🇩",
- "🇮🇪",
- "🇮🇱",
- "🇮🇲",
- "🇮🇳",
- "🇮🇴",
- "🇮🇶",
- "🇮🇷",
- "🇮🇸",
- "🇮🇹",
- "🇮",
- "🇯🇪",
- "🇯🇲",
- "🇯🇴",
- "🇯🇵",
- "🇯",
- "🇰🇪",
- "🇰🇬",
- "🇰🇭",
- "🇰🇮",
- "🇰🇲",
- "🇰🇳",
- "🇰🇵",
- "🇰🇷",
- "🇰🇼",
- "🇰🇾",
- "🇰🇿",
- "🇰",
- "🇱🇦",
- "🇱🇧",
- "🇱🇨",
- "🇱🇮",
- "🇱🇰",
- "🇱🇷",
- "🇱🇸",
- "🇱🇹",
- "🇱🇺",
- "🇱🇻",
- "🇱🇾",
- "🇱",
- "🇲🇦",
- "🇲🇨",
- "🇲🇩",
- "🇲🇪",
- "🇲🇫",
- "🇲🇬",
- "🇲🇭",
- "🇲🇰",
- "🇲🇱",
- "🇲🇲",
- "🇲🇳",
- "🇲🇴",
- "🇲🇵",
- "🇲🇶",
- "🇲🇷",
- "🇲🇸",
- "🇲🇹",
- "🇲🇺",
- "🇲🇻",
- "🇲🇼",
- "🇲🇽",
- "🇲🇾",
- "🇲🇿",
- "🇲",
- "🇳🇦",
- "🇳🇨",
- "🇳🇪",
- "🇳🇫",
- "🇳🇬",
- "🇳🇮",
- "🇳🇱",
- "🇳🇴",
- "🇳🇵",
- "🇳🇷",
- "🇳🇺",
- "🇳🇿",
- "🇳",
- "🇴🇲",
- "🇴",
- "🇵🇦",
- "🇵🇪",
- "🇵🇫",
- "🇵🇬",
- "🇵🇭",
- "🇵🇰",
- "🇵🇱",
- "🇵🇲",
- "🇵🇳",
- "🇵🇷",
- "🇵🇸",
- "🇵🇹",
- "🇵🇼",
- "🇵🇾",
- "🇵",
- "🇶🇦",
- "🇶",
- "🇷🇪",
- "🇷🇴",
- "🇷🇸",
- "🇷🇺",
- "🇷🇼",
- "🇷",
- "🇸🇦",
- "🇸🇧",
- "🇸🇨",
- "🇸🇩",
- "🇸🇪",
- "🇸🇬",
- "🇸🇭",
- "🇸🇮",
- "🇸🇯",
- "🇸🇰",
- "🇸🇱",
- "🇸🇲",
- "🇸🇳",
- "🇸🇴",
- "🇸🇷",
- "🇸🇸",
- "🇸🇹",
- "🇸🇻",
- "🇸🇽",
- "🇸🇾",
- "🇸🇿",
- "🇸",
- "🇹🇦",
- "🇹🇨",
- "🇹🇩",
- "🇹🇫",
- "🇹🇬",
- "🇹🇭",
- "🇹🇯",
- "🇹🇰",
- "🇹🇱",
- "🇹🇲",
- "🇹🇳",
- "🇹🇴",
- "🇹🇷",
- "🇹🇹",
- "🇹🇻",
- "🇹🇼",
- "🇹🇿",
- "🇹",
- "🇺🇦",
- "🇺🇬",
- "🇺🇲",
- "🇺🇳",
- "🇺🇸",
- "🇺🇾",
- "🇺🇿",
- "🇺",
- "🇻🇦",
- "🇻🇨",
- "🇻🇪",
- "🇻🇬",
- "🇻🇮",
- "🇻🇳",
- "🇻🇺",
- "🇻",
- "🇼🇫",
- "🇼🇸",
- "🇼",
- "🇽🇰",
- "🇽",
- "🇾🇪",
- "🇾🇹",
- "🇾",
- "🇿🇦",
- "🇿🇲",
- "🇿🇼",
- "🇿",
- "🈁",
- "🈂️",
- "🈚️",
- "🈯️",
- "🈲",
- "🈳",
- "🈴",
- "🈵",
- "🈶",
- "🈷️",
- "🈸",
- "🈹",
- "🈺",
- "🉐",
- "🉑",
- "🌀",
- "🌁",
- "🌂",
- "🌃",
- "🌄",
- "🌅",
- "🌆",
- "🌇",
- "🌈",
- "🌉",
- "🌊",
- "🌋",
- "🌌",
- "🌍",
- "🌎",
- "🌏",
- "🌐",
- "🌑",
- "🌒",
- "🌓",
- "🌔",
- "🌕",
- "🌖",
- "🌗",
- "🌘",
- "🌙",
- "🌚",
- "🌛",
- "🌜",
- "🌝",
- "🌞",
- "🌟",
- "🌠",
- "🌡️",
- "🌤️",
- "🌥️",
- "🌦️",
- "🌧️",
- "🌨️",
- "🌩️",
- "🌪️",
- "🌫️",
- "🌬️",
- "🌭",
- "🌮",
- "🌯",
- "🌰",
- "🌱",
- "🌲",
- "🌳",
- "🌴",
- "🌵",
- "🌶️",
- "🌷",
- "🌸",
- "🌹",
- "🌺",
- "🌻",
- "🌼",
- "🌽",
- "🌾",
- "🌿",
- "🍀",
- "🍁",
- "🍂",
- "🍃",
- "🍄",
- "🍅",
- "🍆",
- "🍇",
- "🍈",
- "🍉",
- "🍊",
- "🍋",
- "🍌",
- "🍍",
- "🍎",
- "🍏",
- "🍐",
- "🍑",
- "🍒",
- "🍓",
- "🍔",
- "🍕",
- "🍖",
- "🍗",
- "🍘",
- "🍙",
- "🍚",
- "🍛",
- "🍜",
- "🍝",
- "🍞",
- "🍟",
- "🍠",
- "🍡",
- "🍢",
- "🍣",
- "🍤",
- "🍥",
- "🍦",
- "🍧",
- "🍨",
- "🍩",
- "🍪",
- "🍫",
- "🍬",
- "🍭",
- "🍮",
- "🍯",
- "🍰",
- "🍱",
- "🍲",
- "🍳",
- "🍴",
- "🍵",
- "🍶",
- "🍷",
- "🍸",
- "🍹",
- "🍺",
- "🍻",
- "🍼",
- "🍽️",
- "🍾",
- "🍿",
- "🎀",
- "🎁",
- "🎂",
- "🎃",
- "🎄",
- "🎅🏻",
- "🎅🏼",
- "🎅🏽",
- "🎅🏾",
- "🎅🏿",
- "🎅",
- "🎆",
- "🎇",
- "🎈",
- "🎉",
- "🎊",
- "🎋",
- "🎌",
- "🎍",
- "🎎",
- "🎏",
- "🎐",
- "🎑",
- "🎒",
- "🎓",
- "🎖️",
- "🎗️",
- "🎙️",
- "🎚️",
- "🎛️",
- "🎞️",
- "🎟️",
- "🎠",
- "🎡",
- "🎢",
- "🎣",
- "🎤",
- "🎥",
- "🎦",
- "🎧",
- "🎨",
- "🎩",
- "🎪",
- "🎫",
- "🎬",
- "🎭",
- "🎮",
- "🎯",
- "🎰",
- "🎱",
- "🎲",
- "🎳",
- "🎴",
- "🎵",
- "🎶",
- "🎷",
- "🎸",
- "🎹",
- "🎺",
- "🎻",
- "🎼",
- "🎽",
- "🎾",
- "🎿",
- "🏀",
- "🏁",
- "🏂🏻",
- "🏂🏼",
- "🏂🏽",
- "🏂🏾",
- "🏂🏿",
- "🏂",
- "🏃🏻‍♀️",
- "🏃🏻‍♂️",
- "🏃🏻",
- "🏃🏼‍♀️",
- "🏃🏼‍♂️",
- "🏃🏼",
- "🏃🏽‍♀️",
- "🏃🏽‍♂️",
- "🏃🏽",
- "🏃🏾‍♀️",
- "🏃🏾‍♂️",
- "🏃🏾",
- "🏃🏿‍♀️",
- "🏃🏿‍♂️",
- "🏃🏿",
- "🏃‍♀️",
- "🏃‍♂️",
- "🏃",
- "🏄🏻‍♀️",
- "🏄🏻‍♂️",
- "🏄🏻",
- "🏄🏼‍♀️",
- "🏄🏼‍♂️",
- "🏄🏼",
- "🏄🏽‍♀️",
- "🏄🏽‍♂️",
- "🏄🏽",
- "🏄🏾‍♀️",
- "🏄🏾‍♂️",
- "🏄🏾",
- "🏄🏿‍♀️",
- "🏄🏿‍♂️",
- "🏄🏿",
- "🏄‍♀️",
- "🏄‍♂️",
- "🏄",
- "🏅",
- "🏆",
- "🏇🏻",
- "🏇🏼",
- "🏇🏽",
- "🏇🏾",
- "🏇🏿",
- "🏇",
- "🏈",
- "🏉",
- "🏊🏻‍♀️",
- "🏊🏻‍♂️",
- "🏊🏻",
- "🏊🏼‍♀️",
- "🏊🏼‍♂️",
- "🏊🏼",
- "🏊🏽‍♀️",
- "🏊🏽‍♂️",
- "🏊🏽",
- "🏊🏾‍♀️",
- "🏊🏾‍♂️",
- "🏊🏾",
- "🏊🏿‍♀️",
- "🏊🏿‍♂️",
- "🏊🏿",
- "🏊‍♀️",
- "🏊‍♂️",
- "🏊",
- "🏋🏻‍♀️",
- "🏋🏻‍♂️",
- "🏋🏻",
- "🏋🏼‍♀️",
- "🏋🏼‍♂️",
- "🏋🏼",
- "🏋🏽‍♀️",
- "🏋🏽‍♂️",
- "🏋🏽",
- "🏋🏾‍♀️",
- "🏋🏾‍♂️",
- "🏋🏾",
- "🏋🏿‍♀️",
- "🏋🏿‍♂️",
- "🏋🏿",
- "🏋️‍♀️",
- "🏋️‍♂️",
- "🏋️",
- "🏌🏻‍♀️",
- "🏌🏻‍♂️",
- "🏌🏻",
- "🏌🏼‍♀️",
- "🏌🏼‍♂️",
- "🏌🏼",
- "🏌🏽‍♀️",
- "🏌🏽‍♂️",
- "🏌🏽",
- "🏌🏾‍♀️",
- "🏌🏾‍♂️",
- "🏌🏾",
- "🏌🏿‍♀️",
- "🏌🏿‍♂️",
- "🏌🏿",
- "🏌️‍♀️",
- "🏌️‍♂️",
- "🏌️",
- "🏍️",
- "🏎️",
- "🏏",
- "🏐",
- "🏑",
- "🏒",
- "🏓",
- "🏔️",
- "🏕️",
- "🏖️",
- "🏗️",
- "🏘️",
- "🏙️",
- "🏚️",
- "🏛️",
- "🏜️",
- "🏝️",
- "🏞️",
- "🏟️",
- "🏠",
- "🏡",
- "🏢",
- "🏣",
- "🏤",
- "🏥",
- "🏦",
- "🏧",
- "🏨",
- "🏩",
- "🏪",
- "🏫",
- "🏬",
- "🏭",
- "🏮",
- "🏯",
- "🏰",
- "🏳️‍🌈",
- "🏳️",
- "🏴‍☠️",
- "🏴󠁧󠁢󠁥󠁮󠁧󠁿",
- "🏴󠁧󠁢󠁳󠁣󠁴󠁿",
- "🏴󠁧󠁢󠁷󠁬󠁳󠁿",
- "🏴",
- "🏵️",
- "🏷️",
- "🏸",
- "🏹",
- "🏺",
- "🏻",
- "🏼",
- "🏽",
- "🏾",
- "🏿",
- "🐀",
- "🐁",
- "🐂",
- "🐃",
- "🐄",
- "🐅",
- "🐆",
- "🐇",
- "🐈",
- "🐉",
- "🐊",
- "🐋",
- "🐌",
- "🐍",
- "🐎",
- "🐏",
- "🐐",
- "🐑",
- "🐒",
- "🐓",
- "🐔",
- "🐕‍🦺",
- "🐕",
- "🐖",
- "🐗",
- "🐘",
- "🐙",
- "🐚",
- "🐛",
- "🐜",
- "🐝",
- "🐞",
- "🐟",
- "🐠",
- "🐡",
- "🐢",
- "🐣",
- "🐤",
- "🐥",
- "🐦",
- "🐧",
- "🐨",
- "🐩",
- "🐪",
- "🐫",
- "🐬",
- "🐭",
- "🐮",
- "🐯",
- "🐰",
- "🐱",
- "🐲",
- "🐳",
- "🐴",
- "🐵",
- "🐶",
- "🐷",
- "🐸",
- "🐹",
- "🐺",
- "🐻",
- "🐼",
- "🐽",
- "🐾",
- "🐿️",
- "👀",
- "👁‍🗨",
- "👁️",
- "👂🏻",
- "👂🏼",
- "👂🏽",
- "👂🏾",
- "👂🏿",
- "👂",
- "👃🏻",
- "👃🏼",
- "👃🏽",
- "👃🏾",
- "👃🏿",
- "👃",
- "👄",
- "👅",
- "👆🏻",
- "👆🏼",
- "👆🏽",
- "👆🏾",
- "👆🏿",
- "👆",
- "👇🏻",
- "👇🏼",
- "👇🏽",
- "👇🏾",
- "👇🏿",
- "👇",
- "👈🏻",
- "👈🏼",
- "👈🏽",
- "👈🏾",
- "👈🏿",
- "👈",
- "👉🏻",
- "👉🏼",
- "👉🏽",
- "👉🏾",
- "👉🏿",
- "👉",
- "👊🏻",
- "👊🏼",
- "👊🏽",
- "👊🏾",
- "👊🏿",
- "👊",
- "👋🏻",
- "👋🏼",
- "👋🏽",
- "👋🏾",
- "👋🏿",
- "👋",
- "👌🏻",
- "👌🏼",
- "👌🏽",
- "👌🏾",
- "👌🏿",
- "👌",
- "👍🏻",
- "👍🏼",
- "👍🏽",
- "👍🏾",
- "👍🏿",
- "👍",
- "👎🏻",
- "👎🏼",
- "👎🏽",
- "👎🏾",
- "👎🏿",
- "👎",
- "👏🏻",
- "👏🏼",
- "👏🏽",
- "👏🏾",
- "👏🏿",
- "👏",
- "👐🏻",
- "👐🏼",
- "👐🏽",
- "👐🏾",
- "👐🏿",
- "👐",
- "👑",
- "👒",
- "👓",
- "👔",
- "👕",
- "👖",
- "👗",
- "👘",
- "👙",
- "👚",
- "👛",
- "👜",
- "👝",
- "👞",
- "👟",
- "👠",
- "👡",
- "👢",
- "👣",
- "👤",
- "👥",
- "👦🏻",
- "👦🏼",
- "👦🏽",
- "👦🏾",
- "👦🏿",
- "👦",
- "👧🏻",
- "👧🏼",
- "👧🏽",
- "👧🏾",
- "👧🏿",
- "👧",
- "👨🏻‍🌾",
- "👨🏻‍🍳",
- "👨🏻‍🎓",
- "👨🏻‍🎤",
- "👨🏻‍🎨",
- "👨🏻‍🏫",
- "👨🏻‍🏭",
- "👨🏻‍💻",
- "👨🏻‍💼",
- "👨🏻‍🔧",
- "👨🏻‍🔬",
- "👨🏻‍🚀",
- "👨🏻‍🚒",
- "👨🏻‍🦯",
- "👨🏻‍🦰",
- "👨🏻‍🦱",
- "👨🏻‍🦲",
- "👨🏻‍🦳",
- "👨🏻‍🦼",
- "👨🏻‍🦽",
- "👨🏻‍⚕️",
- "👨🏻‍⚖️",
- "👨🏻‍✈️",
- "👨🏻",
- "👨🏼‍🌾",
- "👨🏼‍🍳",
- "👨🏼‍🎓",
- "👨🏼‍🎤",
- "👨🏼‍🎨",
- "👨🏼‍🏫",
- "👨🏼‍🏭",
- "👨🏼‍💻",
- "👨🏼‍💼",
- "👨🏼‍🔧",
- "👨🏼‍🔬",
- "👨🏼‍🚀",
- "👨🏼‍🚒",
- "👨🏼‍🤝‍👨🏻",
- "👨🏼‍🦯",
- "👨🏼‍🦰",
- "👨🏼‍🦱",
- "👨🏼‍🦲",
- "👨🏼‍🦳",
- "👨🏼‍🦼",
- "👨🏼‍🦽",
- "👨🏼‍⚕️",
- "👨🏼‍⚖️",
- "👨🏼‍✈️",
- "👨🏼",
- "👨🏽‍🌾",
- "👨🏽‍🍳",
- "👨🏽‍🎓",
- "👨🏽‍🎤",
- "👨🏽‍🎨",
- "👨🏽‍🏫",
- "👨🏽‍🏭",
- "👨🏽‍💻",
- "👨🏽‍💼",
- "👨🏽‍🔧",
- "👨🏽‍🔬",
- "👨🏽‍🚀",
- "👨🏽‍🚒",
- "👨🏽‍🤝‍👨🏻",
- "👨🏽‍🤝‍👨🏼",
- "👨🏽‍🦯",
- "👨🏽‍🦰",
- "👨🏽‍🦱",
- "👨🏽‍🦲",
- "👨🏽‍🦳",
- "👨🏽‍🦼",
- "👨🏽‍🦽",
- "👨🏽‍⚕️",
- "👨🏽‍⚖️",
- "👨🏽‍✈️",
- "👨🏽",
- "👨🏾‍🌾",
- "👨🏾‍🍳",
- "👨🏾‍🎓",
- "👨🏾‍🎤",
- "👨🏾‍🎨",
- "👨🏾‍🏫",
- "👨🏾‍🏭",
- "👨🏾‍💻",
- "👨🏾‍💼",
- "👨🏾‍🔧",
- "👨🏾‍🔬",
- "👨🏾‍🚀",
- "👨🏾‍🚒",
- "👨🏾‍🤝‍👨🏻",
- "👨🏾‍🤝‍👨🏼",
- "👨🏾‍🤝‍👨🏽",
- "👨🏾‍🦯",
- "👨🏾‍🦰",
- "👨🏾‍🦱",
- "👨🏾‍🦲",
- "👨🏾‍🦳",
- "👨🏾‍🦼",
- "👨🏾‍🦽",
- "👨🏾‍⚕️",
- "👨🏾‍⚖️",
- "👨🏾‍✈️",
- "👨🏾",
- "👨🏿‍🌾",
- "👨🏿‍🍳",
- "👨🏿‍🎓",
- "👨🏿‍🎤",
- "👨🏿‍🎨",
- "👨🏿‍🏫",
- "👨🏿‍🏭",
- "👨🏿‍💻",
- "👨🏿‍💼",
- "👨🏿‍🔧",
- "👨🏿‍🔬",
- "👨🏿‍🚀",
- "👨🏿‍🚒",
- "👨🏿‍🤝‍👨🏻",
- "👨🏿‍🤝‍👨🏼",
- "👨🏿‍🤝‍👨🏽",
- "👨🏿‍🤝‍👨🏾",
- "👨🏿‍🦯",
- "👨🏿‍🦰",
- "👨🏿‍🦱",
- "👨🏿‍🦲",
- "👨🏿‍🦳",
- "👨🏿‍🦼",
- "👨🏿‍🦽",
- "👨🏿‍⚕️",
- "👨🏿‍⚖️",
- "👨🏿‍✈️",
- "👨🏿",
- "👨‍🌾",
- "👨‍🍳",
- "👨‍🎓",
- "👨‍🎤",
- "👨‍🎨",
- "👨‍🏫",
- "👨‍🏭",
- "👨‍👦‍👦",
- "👨‍👦",
- "👨‍👧‍👦",
- "👨‍👧‍👧",
- "👨‍👧",
- "👨‍👨‍👦‍👦",
- "👨‍👨‍👦",
- "👨‍👨‍👧‍👦",
- "👨‍👨‍👧‍👧",
- "👨‍👨‍👧",
- "👨‍👩‍👦‍👦",
- "👨‍👩‍👦",
- "👨‍👩‍👧‍👦",
- "👨‍👩‍👧‍👧",
- "👨‍👩‍👧",
- "👨‍💻",
- "👨‍💼",
- "👨‍🔧",
- "👨‍🔬",
- "👨‍🚀",
- "👨‍🚒",
- "👨‍🦯",
- "👨‍🦰",
- "👨‍🦱",
- "👨‍🦲",
- "👨‍🦳",
- "👨‍🦼",
- "👨‍🦽",
- "👨‍⚕️",
- "👨‍⚖️",
- "👨‍✈️",
- "👨‍❤️‍👨",
- "👨‍❤️‍💋‍👨",
- "👨",
- "👩🏻‍🌾",
- "👩🏻‍🍳",
- "👩🏻‍🎓",
- "👩🏻‍🎤",
- "👩🏻‍🎨",
- "👩🏻‍🏫",
- "👩🏻‍🏭",
- "👩🏻‍💻",
- "👩🏻‍💼",
- "👩🏻‍🔧",
- "👩🏻‍🔬",
- "👩🏻‍🚀",
- "👩🏻‍🚒",
- "👩🏻‍🤝‍👨🏼",
- "👩🏻‍🤝‍👨🏽",
- "👩🏻‍🤝‍👨🏾",
- "👩🏻‍🤝‍👨🏿",
- "👩🏻‍🦯",
- "👩🏻‍🦰",
- "👩🏻‍🦱",
- "👩🏻‍🦲",
- "👩🏻‍🦳",
- "👩🏻‍🦼",
- "👩🏻‍🦽",
- "👩🏻‍⚕️",
- "👩🏻‍⚖️",
- "👩🏻‍✈️",
- "👩🏻",
- "👩🏼‍🌾",
- "👩🏼‍🍳",
- "👩🏼‍🎓",
- "👩🏼‍🎤",
- "👩🏼‍🎨",
- "👩🏼‍🏫",
- "👩🏼‍🏭",
- "👩🏼‍💻",
- "👩🏼‍💼",
- "👩🏼‍🔧",
- "👩🏼‍🔬",
- "👩🏼‍🚀",
- "👩🏼‍🚒",
- "👩🏼‍🤝‍👨🏻",
- "👩🏼‍🤝‍👨🏽",
- "👩🏼‍🤝‍👨🏾",
- "👩🏼‍🤝‍👨🏿",
- "👩🏼‍🤝‍👩🏻",
- "👩🏼‍🦯",
- "👩🏼‍🦰",
- "👩🏼‍🦱",
- "👩🏼‍🦲",
- "👩🏼‍🦳",
- "👩🏼‍🦼",
- "👩🏼‍🦽",
- "👩🏼‍⚕️",
- "👩🏼‍⚖️",
- "👩🏼‍✈️",
- "👩🏼",
- "👩🏽‍🌾",
- "👩🏽‍🍳",
- "👩🏽‍🎓",
- "👩🏽‍🎤",
- "👩🏽‍🎨",
- "👩🏽‍🏫",
- "👩🏽‍🏭",
- "👩🏽‍💻",
- "👩🏽‍💼",
- "👩🏽‍🔧",
- "👩🏽‍🔬",
- "👩🏽‍🚀",
- "👩🏽‍🚒",
- "👩🏽‍🤝‍👨🏻",
- "👩🏽‍🤝‍👨🏼",
- "👩🏽‍🤝‍👨🏾",
- "👩🏽‍🤝‍👨🏿",
- "👩🏽‍🤝‍👩🏻",
- "👩🏽‍🤝‍👩🏼",
- "👩🏽‍🦯",
- "👩🏽‍🦰",
- "👩🏽‍🦱",
- "👩🏽‍🦲",
- "👩🏽‍🦳",
- "👩🏽‍🦼",
- "👩🏽‍🦽",
- "👩🏽‍⚕️",
- "👩🏽‍⚖️",
- "👩🏽‍✈️",
- "👩🏽",
- "👩🏾‍🌾",
- "👩🏾‍🍳",
- "👩🏾‍🎓",
- "👩🏾‍🎤",
- "👩🏾‍🎨",
- "👩🏾‍🏫",
- "👩🏾‍🏭",
- "👩🏾‍💻",
- "👩🏾‍💼",
- "👩🏾‍🔧",
- "👩🏾‍🔬",
- "👩🏾‍🚀",
- "👩🏾‍🚒",
- "👩🏾‍🤝‍👨🏻",
- "👩🏾‍🤝‍👨🏼",
- "👩🏾‍🤝‍👨🏽",
- "👩🏾‍🤝‍👨🏿",
- "👩🏾‍🤝‍👩🏻",
- "👩🏾‍🤝‍👩🏼",
- "👩🏾‍🤝‍👩🏽",
- "👩🏾‍🦯",
- "👩🏾‍🦰",
- "👩🏾‍🦱",
- "👩🏾‍🦲",
- "👩🏾‍🦳",
- "👩🏾‍🦼",
- "👩🏾‍🦽",
- "👩🏾‍⚕️",
- "👩🏾‍⚖️",
- "👩🏾‍✈️",
- "👩🏾",
- "👩🏿‍🌾",
- "👩🏿‍🍳",
- "👩🏿‍🎓",
- "👩🏿‍🎤",
- "👩🏿‍🎨",
- "👩🏿‍🏫",
- "👩🏿‍🏭",
- "👩🏿‍💻",
- "👩🏿‍💼",
- "👩🏿‍🔧",
- "👩🏿‍🔬",
- "👩🏿‍🚀",
- "👩🏿‍🚒",
- "👩🏿‍🤝‍👨🏻",
- "👩🏿‍🤝‍👨🏼",
- "👩🏿‍🤝‍👨🏽",
- "👩🏿‍🤝‍👨🏾",
- "👩🏿‍🤝‍👩🏻",
- "👩🏿‍🤝‍👩🏼",
- "👩🏿‍🤝‍👩🏽",
- "👩🏿‍🤝‍👩🏾",
- "👩🏿‍🦯",
- "👩🏿‍🦰",
- "👩🏿‍🦱",
- "👩🏿‍🦲",
- "👩🏿‍🦳",
- "👩🏿‍🦼",
- "👩🏿‍🦽",
- "👩🏿‍⚕️",
- "👩🏿‍⚖️",
- "👩🏿‍✈️",
- "👩🏿",
- "👩‍🌾",
- "👩‍🍳",
- "👩‍🎓",
- "👩‍🎤",
- "👩‍🎨",
- "👩‍🏫",
- "👩‍🏭",
- "👩‍👦‍👦",
- "👩‍👦",
- "👩‍👧‍👦",
- "👩‍👧‍👧",
- "👩‍👧",
- "👩‍👩‍👦‍👦",
- "👩‍👩‍👦",
- "👩‍👩‍👧‍👦",
- "👩‍👩‍👧‍👧",
- "👩‍👩‍👧",
- "👩‍💻",
- "👩‍💼",
- "👩‍🔧",
- "👩‍🔬",
- "👩‍🚀",
- "👩‍🚒",
- "👩‍🦯",
- "👩‍🦰",
- "👩‍🦱",
- "👩‍🦲",
- "👩‍🦳",
- "👩‍🦼",
- "👩‍🦽",
- "👩‍⚕️",
- "👩‍⚖️",
- "👩‍✈️",
- "👩‍❤️‍👨",
- "👩‍❤️‍👩",
- "👩‍❤️‍💋‍👨",
- "👩‍❤️‍💋‍👩",
- "👩",
- "👪",
- "👫🏻",
- "👫🏼",
- "👫🏽",
- "👫🏾",
- "👫🏿",
- "👫",
- "👬🏻",
- "👬🏼",
- "👬🏽",
- "👬🏾",
- "👬🏿",
- "👬",
- "👭🏻",
- "👭🏼",
- "👭🏽",
- "👭🏾",
- "👭🏿",
- "👭",
- "👮🏻‍♀️",
- "👮🏻‍♂️",
- "👮🏻",
- "👮🏼‍♀️",
- "👮🏼‍♂️",
- "👮🏼",
- "👮🏽‍♀️",
- "👮🏽‍♂️",
- "👮🏽",
- "👮🏾‍♀️",
- "👮🏾‍♂️",
- "👮🏾",
- "👮🏿‍♀️",
- "👮🏿‍♂️",
- "👮🏿",
- "👮‍♀️",
- "👮‍♂️",
- "👮",
- "👯‍♀️",
- "👯‍♂️",
- "👯",
- "👰🏻",
- "👰🏼",
- "👰🏽",
- "👰🏾",
- "👰🏿",
- "👰",
- "👱🏻‍♀️",
- "👱🏻‍♂️",
- "👱🏻",
- "👱🏼‍♀️",
- "👱🏼‍♂️",
- "👱🏼",
- "👱🏽‍♀️",
- "👱🏽‍♂️",
- "👱🏽",
- "👱🏾‍♀️",
- "👱🏾‍♂️",
- "👱🏾",
- "👱🏿‍♀️",
- "👱🏿‍♂️",
- "👱🏿",
- "👱‍♀️",
- "👱‍♂️",
- "👱",
- "👲🏻",
- "👲🏼",
- "👲🏽",
- "👲🏾",
- "👲🏿",
- "👲",
- "👳🏻‍♀️",
- "👳🏻‍♂️",
- "👳🏻",
- "👳🏼‍♀️",
- "👳🏼‍♂️",
- "👳🏼",
- "👳🏽‍♀️",
- "👳🏽‍♂️",
- "👳🏽",
- "👳🏾‍♀️",
- "👳🏾‍♂️",
- "👳🏾",
- "👳🏿‍♀️",
- "👳🏿‍♂️",
- "👳🏿",
- "👳‍♀️",
- "👳‍♂️",
- "👳",
- "👴🏻",
- "👴🏼",
- "👴🏽",
- "👴🏾",
- "👴🏿",
- "👴",
- "👵🏻",
- "👵🏼",
- "👵🏽",
- "👵🏾",
- "👵🏿",
- "👵",
- "👶🏻",
- "👶🏼",
- "👶🏽",
- "👶🏾",
- "👶🏿",
- "👶",
- "👷🏻‍♀️",
- "👷🏻‍♂️",
- "👷🏻",
- "👷🏼‍♀️",
- "👷🏼‍♂️",
- "👷🏼",
- "👷🏽‍♀️",
- "👷🏽‍♂️",
- "👷🏽",
- "👷🏾‍♀️",
- "👷🏾‍♂️",
- "👷🏾",
- "👷🏿‍♀️",
- "👷🏿‍♂️",
- "👷🏿",
- "👷‍♀️",
- "👷‍♂️",
- "👷",
- "👸🏻",
- "👸🏼",
- "👸🏽",
- "👸🏾",
- "👸🏿",
- "👸",
- "👹",
- "👺",
- "👻",
- "👼🏻",
- "👼🏼",
- "👼🏽",
- "👼🏾",
- "👼🏿",
- "👼",
- "👽",
- "👾",
- "👿",
- "💀",
- "💁🏻‍♀️",
- "💁🏻‍♂️",
- "💁🏻",
- "💁🏼‍♀️",
- "💁🏼‍♂️",
- "💁🏼",
- "💁🏽‍♀️",
- "💁🏽‍♂️",
- "💁🏽",
- "💁🏾‍♀️",
- "💁🏾‍♂️",
- "💁🏾",
- "💁🏿‍♀️",
- "💁🏿‍♂️",
- "💁🏿",
- "💁‍♀️",
- "💁‍♂️",
- "💁",
- "💂🏻‍♀️",
- "💂🏻‍♂️",
- "💂🏻",
- "💂🏼‍♀️",
- "💂🏼‍♂️",
- "💂🏼",
- "💂🏽‍♀️",
- "💂🏽‍♂️",
- "💂🏽",
- "💂🏾‍♀️",
- "💂🏾‍♂️",
- "💂🏾",
- "💂🏿‍♀️",
- "💂🏿‍♂️",
- "💂🏿",
- "💂‍♀️",
- "💂‍♂️",
- "💂",
- "💃🏻",
- "💃🏼",
- "💃🏽",
- "💃🏾",
- "💃🏿",
- "💃",
- "💄",
- "💅🏻",
- "💅🏼",
- "💅🏽",
- "💅🏾",
- "💅🏿",
- "💅",
- "💆🏻‍♀️",
- "💆🏻‍♂️",
- "💆🏻",
- "💆🏼‍♀️",
- "💆🏼‍♂️",
- "💆🏼",
- "💆🏽‍♀️",
- "💆🏽‍♂️",
- "💆🏽",
- "💆🏾‍♀️",
- "💆🏾‍♂️",
- "💆🏾",
- "💆🏿‍♀️",
- "💆🏿‍♂️",
- "💆🏿",
- "💆‍♀️",
- "💆‍♂️",
- "💆",
- "💇🏻‍♀️",
- "💇🏻‍♂️",
- "💇🏻",
- "💇🏼‍♀️",
- "💇🏼‍♂️",
- "💇🏼",
- "💇🏽‍♀️",
- "💇🏽‍♂️",
- "💇🏽",
- "💇🏾‍♀️",
- "💇🏾‍♂️",
- "💇🏾",
- "💇🏿‍♀️",
- "💇🏿‍♂️",
- "💇🏿",
- "💇‍♀️",
- "💇‍♂️",
- "💇",
- "💈",
- "💉",
- "💊",
- "💋",
- "💌",
- "💍",
- "💎",
- "💏",
- "💐",
- "💑",
- "💒",
- "💓",
- "💔",
- "💕",
- "💖",
- "💗",
- "💘",
- "💙",
- "💚",
- "💛",
- "💜",
- "💝",
- "💞",
- "💟",
- "💠",
- "💡",
- "💢",
- "💣",
- "💤",
- "💥",
- "💦",
- "💧",
- "💨",
- "💩",
- "💪🏻",
- "💪🏼",
- "💪🏽",
- "💪🏾",
- "💪🏿",
- "💪",
- "💫",
- "💬",
- "💭",
- "💮",
- "💯",
- "💰",
- "💱",
- "💲",
- "💳",
- "💴",
- "💵",
- "💶",
- "💷",
- "💸",
- "💹",
- "💺",
- "💻",
- "💼",
- "💽",
- "💾",
- "💿",
- "📀",
- "📁",
- "📂",
- "📃",
- "📄",
- "📅",
- "📆",
- "📇",
- "📈",
- "📉",
- "📊",
- "📋",
- "📌",
- "📍",
- "📎",
- "📏",
- "📐",
- "📑",
- "📒",
- "📓",
- "📔",
- "📕",
- "📖",
- "📗",
- "📘",
- "📙",
- "📚",
- "📛",
- "📜",
- "📝",
- "📞",
- "📟",
- "📠",
- "📡",
- "📢",
- "📣",
- "📤",
- "📥",
- "📦",
- "📧",
- "📨",
- "📩",
- "📪",
- "📫",
- "📬",
- "📭",
- "📮",
- "📯",
- "📰",
- "📱",
- "📲",
- "📳",
- "📴",
- "📵",
- "📶",
- "📷",
- "📸",
- "📹",
- "📺",
- "📻",
- "📼",
- "📽️",
- "📿",
- "🔀",
- "🔁",
- "🔂",
- "🔃",
- "🔄",
- "🔅",
- "🔆",
- "🔇",
- "🔈",
- "🔉",
- "🔊",
- "🔋",
- "🔌",
- "🔍",
- "🔎",
- "🔏",
- "🔐",
- "🔑",
- "🔒",
- "🔓",
- "🔔",
- "🔕",
- "🔖",
- "🔗",
- "🔘",
- "🔙",
- "🔚",
- "🔛",
- "🔜",
- "🔝",
- "🔞",
- "🔟",
- "🔠",
- "🔡",
- "🔢",
- "🔣",
- "🔤",
- "🔥",
- "🔦",
- "🔧",
- "🔨",
- "🔩",
- "🔪",
- "🔫",
- "🔬",
- "🔭",
- "🔮",
- "🔯",
- "🔰",
- "🔱",
- "🔲",
- "🔳",
- "🔴",
- "🔵",
- "🔶",
- "🔷",
- "🔸",
- "🔹",
- "🔺",
- "🔻",
- "🔼",
- "🔽",
- "🕉️",
- "🕊️",
- "🕋",
- "🕌",
- "🕍",
- "🕎",
- "🕐",
- "🕑",
- "🕒",
- "🕓",
- "🕔",
- "🕕",
- "🕖",
- "🕗",
- "🕘",
- "🕙",
- "🕚",
- "🕛",
- "🕜",
- "🕝",
- "🕞",
- "🕟",
- "🕠",
- "🕡",
- "🕢",
- "🕣",
- "🕤",
- "🕥",
- "🕦",
- "🕧",
- "🕯️",
- "🕰️",
- "🕳️",
- "🕴🏻‍♀️",
- "🕴🏻‍♂️",
- "🕴🏻",
- "🕴🏼‍♀️",
- "🕴🏼‍♂️",
- "🕴🏼",
- "🕴🏽‍♀️",
- "🕴🏽‍♂️",
- "🕴🏽",
- "🕴🏾‍♀️",
- "🕴🏾‍♂️",
- "🕴🏾",
- "🕴🏿‍♀️",
- "🕴🏿‍♂️",
- "🕴🏿",
- "🕴️‍♀️",
- "🕴️‍♂️",
- "🕴️",
- "🕵🏻‍♀️",
- "🕵🏻‍♂️",
- "🕵🏻",
- "🕵🏼‍♀️",
- "🕵🏼‍♂️",
- "🕵🏼",
- "🕵🏽‍♀️",
- "🕵🏽‍♂️",
- "🕵🏽",
- "🕵🏾‍♀️",
- "🕵🏾‍♂️",
- "🕵🏾",
- "🕵🏿‍♀️",
- "🕵🏿‍♂️",
- "🕵🏿",
- "🕵️‍♀️",
- "🕵️‍♂️",
- "🕵️",
- "🕶️",
- "🕷️",
- "🕸️",
- "🕹️",
- "🕺🏻",
- "🕺🏼",
- "🕺🏽",
- "🕺🏾",
- "🕺🏿",
- "🕺",
- "🖇️",
- "🖊️",
- "🖋️",
- "🖌️",
- "🖍️",
- "🖐🏻",
- "🖐🏼",
- "🖐🏽",
- "🖐🏾",
- "🖐🏿",
- "🖐️",
- "🖕🏻",
- "🖕🏼",
- "🖕🏽",
- "🖕🏾",
- "🖕🏿",
- "🖕",
- "🖖🏻",
- "🖖🏼",
- "🖖🏽",
- "🖖🏾",
- "🖖🏿",
- "🖖",
- "🖤",
- "🖥️",
- "🖨️",
- "🖱️",
- "🖲️",
- "🖼️",
- "🗂️",
- "🗃️",
- "🗄️",
- "🗑️",
- "🗒️",
- "🗓️",
- "🗜️",
- "🗝️",
- "🗞️",
- "🗡️",
- "🗣️",
- "🗨️",
- "🗯️",
- "🗳️",
- "🗺️",
- "🗻",
- "🗼",
- "🗽",
- "🗾",
- "🗿",
- "😀",
- "😁",
- "😂",
- "😃",
- "😄",
- "😅",
- "😆",
- "😇",
- "😈",
- "😉",
- "😊",
- "😋",
- "😌",
- "😍",
- "😎",
- "😏",
- "😐",
- "😑",
- "😒",
- "😓",
- "😔",
- "😕",
- "😖",
- "😗",
- "😘",
- "😙",
- "😚",
- "😛",
- "😜",
- "😝",
- "😞",
- "😟",
- "😠",
- "😡",
- "😢",
- "😣",
- "😤",
- "😥",
- "😦",
- "😧",
- "😨",
- "😩",
- "😪",
- "😫",
- "😬",
- "😭",
- "😮",
- "😯",
- "😰",
- "😱",
- "😲",
- "😳",
- "😴",
- "😵",
- "😶",
- "😷",
- "😸",
- "😹",
- "😺",
- "😻",
- "😼",
- "😽",
- "😾",
- "😿",
- "🙀",
- "🙁",
- "🙂",
- "🙃",
- "🙄",
- "🙅🏻‍♀️",
- "🙅🏻‍♂️",
- "🙅🏻",
- "🙅🏼‍♀️",
- "🙅🏼‍♂️",
- "🙅🏼",
- "🙅🏽‍♀️",
- "🙅🏽‍♂️",
- "🙅🏽",
- "🙅🏾‍♀️",
- "🙅🏾‍♂️",
- "🙅🏾",
- "🙅🏿‍♀️",
- "🙅🏿‍♂️",
- "🙅🏿",
- "🙅‍♀️",
- "🙅‍♂️",
- "🙅",
- "🙆🏻‍♀️",
- "🙆🏻‍♂️",
- "🙆🏻",
- "🙆🏼‍♀️",
- "🙆🏼‍♂️",
- "🙆🏼",
- "🙆🏽‍♀️",
- "🙆🏽‍♂️",
- "🙆🏽",
- "🙆🏾‍♀️",
- "🙆🏾‍♂️",
- "🙆🏾",
- "🙆🏿‍♀️",
- "🙆🏿‍♂️",
- "🙆🏿",
- "🙆‍♀️",
- "🙆‍♂️",
- "🙆",
- "🙇🏻‍♀️",
- "🙇🏻‍♂️",
- "🙇🏻",
- "🙇🏼‍♀️",
- "🙇🏼‍♂️",
- "🙇🏼",
- "🙇🏽‍♀️",
- "🙇🏽‍♂️",
- "🙇🏽",
- "🙇🏾‍♀️",
- "🙇🏾‍♂️",
- "🙇🏾",
- "🙇🏿‍♀️",
- "🙇🏿‍♂️",
- "🙇🏿",
- "🙇‍♀️",
- "🙇‍♂️",
- "🙇",
- "🙈",
- "🙉",
- "🙊",
- "🙋🏻‍♀️",
- "🙋🏻‍♂️",
- "🙋🏻",
- "🙋🏼‍♀️",
- "🙋🏼‍♂️",
- "🙋🏼",
- "🙋🏽‍♀️",
- "🙋🏽‍♂️",
- "🙋🏽",
- "🙋🏾‍♀️",
- "🙋🏾‍♂️",
- "🙋🏾",
- "🙋🏿‍♀️",
- "🙋🏿‍♂️",
- "🙋🏿",
- "🙋‍♀️",
- "🙋‍♂️",
- "🙋",
- "🙌🏻",
- "🙌🏼",
- "🙌🏽",
- "🙌🏾",
- "🙌🏿",
- "🙌",
- "🙍🏻‍♀️",
- "🙍🏻‍♂️",
- "🙍🏻",
- "🙍🏼‍♀️",
- "🙍🏼‍♂️",
- "🙍🏼",
- "🙍🏽‍♀️",
- "🙍🏽‍♂️",
- "🙍🏽",
- "🙍🏾‍♀️",
- "🙍🏾‍♂️",
- "🙍🏾",
- "🙍🏿‍♀️",
- "🙍🏿‍♂️",
- "🙍🏿",
- "🙍‍♀️",
- "🙍‍♂️",
- "🙍",
- "🙎🏻‍♀️",
- "🙎🏻‍♂️",
- "🙎🏻",
- "🙎🏼‍♀️",
- "🙎🏼‍♂️",
- "🙎🏼",
- "🙎🏽‍♀️",
- "🙎🏽‍♂️",
- "🙎🏽",
- "🙎🏾‍♀️",
- "🙎🏾‍♂️",
- "🙎🏾",
- "🙎🏿‍♀️",
- "🙎🏿‍♂️",
- "🙎🏿",
- "🙎‍♀️",
- "🙎‍♂️",
- "🙎",
- "🙏🏻",
- "🙏🏼",
- "🙏🏽",
- "🙏🏾",
- "🙏🏿",
- "🙏",
- "🚀",
- "🚁",
- "🚂",
- "🚃",
- "🚄",
- "🚅",
- "🚆",
- "🚇",
- "🚈",
- "🚉",
- "🚊",
- "🚋",
- "🚌",
- "🚍",
- "🚎",
- "🚏",
- "🚐",
- "🚑",
- "🚒",
- "🚓",
- "🚔",
- "🚕",
- "🚖",
- "🚗",
- "🚘",
- "🚙",
- "🚚",
- "🚛",
- "🚜",
- "🚝",
- "🚞",
- "🚟",
- "🚠",
- "🚡",
- "🚢",
- "🚣🏻‍♀️",
- "🚣🏻‍♂️",
- "🚣🏻",
- "🚣🏼‍♀️",
- "🚣🏼‍♂️",
- "🚣🏼",
- "🚣🏽‍♀️",
- "🚣🏽‍♂️",
- "🚣🏽",
- "🚣🏾‍♀️",
- "🚣🏾‍♂️",
- "🚣🏾",
- "🚣🏿‍♀️",
- "🚣🏿‍♂️",
- "🚣🏿",
- "🚣‍♀️",
- "🚣‍♂️",
- "🚣",
- "🚤",
- "🚥",
- "🚦",
- "🚧",
- "🚨",
- "🚩",
- "🚪",
- "🚫",
- "🚬",
- "🚭",
- "🚮",
- "🚯",
- "🚰",
- "🚱",
- "🚲",
- "🚳",
- "🚴🏻‍♀️",
- "🚴🏻‍♂️",
- "🚴🏻",
- "🚴🏼‍♀️",
- "🚴🏼‍♂️",
- "🚴🏼",
- "🚴🏽‍♀️",
- "🚴🏽‍♂️",
- "🚴🏽",
- "🚴🏾‍♀️",
- "🚴🏾‍♂️",
- "🚴🏾",
- "🚴🏿‍♀️",
- "🚴🏿‍♂️",
- "🚴🏿",
- "🚴‍♀️",
- "🚴‍♂️",
- "🚴",
- "🚵🏻‍♀️",
- "🚵🏻‍♂️",
- "🚵🏻",
- "🚵🏼‍♀️",
- "🚵🏼‍♂️",
- "🚵🏼",
- "🚵🏽‍♀️",
- "🚵🏽‍♂️",
- "🚵🏽",
- "🚵🏾‍♀️",
- "🚵🏾‍♂️",
- "🚵🏾",
- "🚵🏿‍♀️",
- "🚵🏿‍♂️",
- "🚵🏿",
- "🚵‍♀️",
- "🚵‍♂️",
- "🚵",
- "🚶🏻‍♀️",
- "🚶🏻‍♂️",
- "🚶🏻",
- "🚶🏼‍♀️",
- "🚶🏼‍♂️",
- "🚶🏼",
- "🚶🏽‍♀️",
- "🚶🏽‍♂️",
- "🚶🏽",
- "🚶🏾‍♀️",
- "🚶🏾‍♂️",
- "🚶🏾",
- "🚶🏿‍♀️",
- "🚶🏿‍♂️",
- "🚶🏿",
- "🚶‍♀️",
- "🚶‍♂️",
- "🚶",
- "🚷",
- "🚸",
- "🚹",
- "🚺",
- "🚻",
- "🚼",
- "🚽",
- "🚾",
- "🚿",
- "🛀🏻",
- "🛀🏼",
- "🛀🏽",
- "🛀🏾",
- "🛀🏿",
- "🛀",
- "🛁",
- "🛂",
- "🛃",
- "🛄",
- "🛅",
- "🛋️",
- "🛌🏻",
- "🛌🏼",
- "🛌🏽",
- "🛌🏾",
- "🛌🏿",
- "🛌",
- "🛍️",
- "🛎️",
- "🛏️",
- "🛐",
- "🛑",
- "🛒",
- "🛕",
- "🛠️",
- "🛡️",
- "🛢️",
- "🛣️",
- "🛤️",
- "🛥️",
- "🛩️",
- "🛫",
- "🛬",
- "🛰️",
- "🛳️",
- "🛴",
- "🛵",
- "🛶",
- "🛷",
- "🛸",
- "🛹",
- "🛺",
- "🟠",
- "🟡",
- "🟢",
- "🟣",
- "🟤",
- "🟥",
- "🟦",
- "🟧",
- "🟨",
- "🟩",
- "🟪",
- "🟫",
- "🤍",
- "🤎",
- "🤏🏻",
- "🤏🏼",
- "🤏🏽",
- "🤏🏾",
- "🤏🏿",
- "🤏",
- "🤐",
- "🤑",
- "🤒",
- "🤓",
- "🤔",
- "🤕",
- "🤖",
- "🤗",
- "🤘🏻",
- "🤘🏼",
- "🤘🏽",
- "🤘🏾",
- "🤘🏿",
- "🤘",
- "🤙🏻",
- "🤙🏼",
- "🤙🏽",
- "🤙🏾",
- "🤙🏿",
- "🤙",
- "🤚🏻",
- "🤚🏼",
- "🤚🏽",
- "🤚🏾",
- "🤚🏿",
- "🤚",
- "🤛🏻",
- "🤛🏼",
- "🤛🏽",
- "🤛🏾",
- "🤛🏿",
- "🤛",
- "🤜🏻",
- "🤜🏼",
- "🤜🏽",
- "🤜🏾",
- "🤜🏿",
- "🤜",
- "🤝",
- "🤞🏻",
- "🤞🏼",
- "🤞🏽",
- "🤞🏾",
- "🤞🏿",
- "🤞",
- "🤟🏻",
- "🤟🏼",
- "🤟🏽",
- "🤟🏾",
- "🤟🏿",
- "🤟",
- "🤠",
- "🤡",
- "🤢",
- "🤣",
- "🤤",
- "🤥",
- "🤦🏻‍♀️",
- "🤦🏻‍♂️",
- "🤦🏻",
- "🤦🏼‍♀️",
- "🤦🏼‍♂️",
- "🤦🏼",
- "🤦🏽‍♀️",
- "🤦🏽‍♂️",
- "🤦🏽",
- "🤦🏾‍♀️",
- "🤦🏾‍♂️",
- "🤦🏾",
- "🤦🏿‍♀️",
- "🤦🏿‍♂️",
- "🤦🏿",
- "🤦‍♀️",
- "🤦‍♂️",
- "🤦",
- "🤧",
- "🤨",
- "🤩",
- "🤪",
- "🤫",
- "🤬",
- "🤭",
- "🤮",
- "🤯",
- "🤰🏻",
- "🤰🏼",
- "🤰🏽",
- "🤰🏾",
- "🤰🏿",
- "🤰",
- "🤱🏻",
- "🤱🏼",
- "🤱🏽",
- "🤱🏾",
- "🤱🏿",
- "🤱",
- "🤲🏻",
- "🤲🏼",
- "🤲🏽",
- "🤲🏾",
- "🤲🏿",
- "🤲",
- "🤳🏻",
- "🤳🏼",
- "🤳🏽",
- "🤳🏾",
- "🤳🏿",
- "🤳",
- "🤴🏻",
- "🤴🏼",
- "🤴🏽",
- "🤴🏾",
- "🤴🏿",
- "🤴",
- "🤵🏻‍♀️",
- "🤵🏻‍♂️",
- "🤵🏻",
- "🤵🏼‍♀️",
- "🤵🏼‍♂️",
- "🤵🏼",
- "🤵🏽‍♀️",
- "🤵🏽‍♂️",
- "🤵🏽",
- "🤵🏾‍♀️",
- "🤵🏾‍♂️",
- "🤵🏾",
- "🤵🏿‍♀️",
- "🤵🏿‍♂️",
- "🤵🏿",
- "🤵‍♀️",
- "🤵‍♂️",
- "🤵",
- "🤶🏻",
- "🤶🏼",
- "🤶🏽",
- "🤶🏾",
- "🤶🏿",
- "🤶",
- "🤷🏻‍♀️",
- "🤷🏻‍♂️",
- "🤷🏻",
- "🤷🏼‍♀️",
- "🤷🏼‍♂️",
- "🤷🏼",
- "🤷🏽‍♀️",
- "🤷🏽‍♂️",
- "🤷🏽",
- "🤷🏾‍♀️",
- "🤷🏾‍♂️",
- "🤷🏾",
- "🤷🏿‍♀️",
- "🤷🏿‍♂️",
- "🤷🏿",
- "🤷‍♀️",
- "🤷‍♂️",
- "🤷",
- "🤸🏻‍♀️",
- "🤸🏻‍♂️",
- "🤸🏻",
- "🤸🏼‍♀️",
- "🤸🏼‍♂️",
- "🤸🏼",
- "🤸🏽‍♀️",
- "🤸🏽‍♂️",
- "🤸🏽",
- "🤸🏾‍♀️",
- "🤸🏾‍♂️",
- "🤸🏾",
- "🤸🏿‍♀️",
- "🤸🏿‍♂️",
- "🤸🏿",
- "🤸‍♀️",
- "🤸‍♂️",
- "🤸",
- "🤹🏻‍♀️",
- "🤹🏻‍♂️",
- "🤹🏻",
- "🤹🏼‍♀️",
- "🤹🏼‍♂️",
- "🤹🏼",
- "🤹🏽‍♀️",
- "🤹🏽‍♂️",
- "🤹🏽",
- "🤹🏾‍♀️",
- "🤹🏾‍♂️",
- "🤹🏾",
- "🤹🏿‍♀️",
- "🤹🏿‍♂️",
- "🤹🏿",
- "🤹‍♀️",
- "🤹‍♂️",
- "🤹",
- "🤺",
- "🤼‍♀️",
- "🤼‍♂️",
- "🤼",
- "🤽🏻‍♀️",
- "🤽🏻‍♂️",
- "🤽🏻",
- "🤽🏼‍♀️",
- "🤽🏼‍♂️",
- "🤽🏼",
- "🤽🏽‍♀️",
- "🤽🏽‍♂️",
- "🤽🏽",
- "🤽🏾‍♀️",
- "🤽🏾‍♂️",
- "🤽🏾",
- "🤽🏿‍♀️",
- "🤽🏿‍♂️",
- "🤽🏿",
- "🤽‍♀️",
- "🤽‍♂️",
- "🤽",
- "🤾🏻‍♀️",
- "🤾🏻‍♂️",
- "🤾🏻",
- "🤾🏼‍♀️",
- "🤾🏼‍♂️",
- "🤾🏼",
- "🤾🏽‍♀️",
- "🤾🏽‍♂️",
- "🤾🏽",
- "🤾🏾‍♀️",
- "🤾🏾‍♂️",
- "🤾🏾",
- "🤾🏿‍♀️",
- "🤾🏿‍♂️",
- "🤾🏿",
- "🤾‍♀️",
- "🤾‍♂️",
- "🤾",
- "🤿",
- "🥀",
- "🥁",
- "🥂",
- "🥃",
- "🥄",
- "🥅",
- "🥇",
- "🥈",
- "🥉",
- "🥊",
- "🥋",
- "🥌",
- "🥍",
- "🥎",
- "🥏",
- "🥐",
- "🥑",
- "🥒",
- "🥓",
- "🥔",
- "🥕",
- "🥖",
- "🥗",
- "🥘",
- "🥙",
- "🥚",
- "🥛",
- "🥜",
- "🥝",
- "🥞",
- "🥟",
- "🥠",
- "🥡",
- "🥢",
- "🥣",
- "🥤",
- "🥥",
- "🥦",
- "🥧",
- "🥨",
- "🥩",
- "🥪",
- "🥫",
- "🥬",
- "🥭",
- "🥮",
- "🥯",
- "🥰",
- "🥱",
- "🥳",
- "🥴",
- "🥵",
- "🥶",
- "🥺",
- "🥻",
- "🥼",
- "🥽",
- "🥾",
- "🥿",
- "🦀",
- "🦁",
- "🦂",
- "🦃",
- "🦄",
- "🦅",
- "🦆",
- "🦇",
- "🦈",
- "🦉",
- "🦊",
- "🦋",
- "🦌",
- "🦍",
- "🦎",
- "🦏",
- "🦐",
- "🦑",
- "🦒",
- "🦓",
- "🦔",
- "🦕",
- "🦖",
- "🦗",
- "🦘",
- "🦙",
- "🦚",
- "🦛",
- "🦜",
- "🦝",
- "🦞",
- "🦟",
- "🦠",
- "🦡",
- "🦢",
- "🦥",
- "🦦",
- "🦧",
- "🦨",
- "🦩",
- "🦪",
- "🦮",
- "🦯",
- "🦰",
- "🦱",
- "🦲",
- "🦳",
- "🦴",
- "🦵🏻",
- "🦵🏼",
- "🦵🏽",
- "🦵🏾",
- "🦵🏿",
- "🦵",
- "🦶🏻",
- "🦶🏼",
- "🦶🏽",
- "🦶🏾",
- "🦶🏿",
- "🦶",
- "🦷",
- "🦸🏻‍♀️",
- "🦸🏻‍♂️",
- "🦸🏻",
- "🦸🏼‍♀️",
- "🦸🏼‍♂️",
- "🦸🏼",
- "🦸🏽‍♀️",
- "🦸🏽‍♂️",
- "🦸🏽",
- "🦸🏾‍♀️",
- "🦸🏾‍♂️",
- "🦸🏾",
- "🦸🏿‍♀️",
- "🦸🏿‍♂️",
- "🦸🏿",
- "🦸‍♀️",
- "🦸‍♂️",
- "🦸",
- "🦹🏻‍♀️",
- "🦹🏻‍♂️",
- "🦹🏻",
- "🦹🏼‍♀️",
- "🦹🏼‍♂️",
- "🦹🏼",
- "🦹🏽‍♀️",
- "🦹🏽‍♂️",
- "🦹🏽",
- "🦹🏾‍♀️",
- "🦹🏾‍♂️",
- "🦹🏾",
- "🦹🏿‍♀️",
- "🦹🏿‍♂️",
- "🦹🏿",
- "🦹‍♀️",
- "🦹‍♂️",
- "🦹",
- "🦺",
- "🦻🏻",
- "🦻🏼",
- "🦻🏽",
- "🦻🏾",
- "🦻🏿",
- "🦻",
- "🦼",
- "🦽",
- "🦾",
- "🦿",
- "🧀",
- "🧁",
- "🧂",
- "🧃",
- "🧄",
- "🧅",
- "🧆",
- "🧇",
- "🧈",
- "🧉",
- "🧊",
- "🧍🏻‍♀️",
- "🧍🏻‍♂️",
- "🧍🏻",
- "🧍🏼‍♀️",
- "🧍🏼‍♂️",
- "🧍🏼",
- "🧍🏽‍♀️",
- "🧍🏽‍♂️",
- "🧍🏽",
- "🧍🏾‍♀️",
- "🧍🏾‍♂️",
- "🧍🏾",
- "🧍🏿‍♀️",
- "🧍🏿‍♂️",
- "🧍🏿",
- "🧍‍♀️",
- "🧍‍♂️",
- "🧍",
- "🧎🏻‍♀️",
- "🧎🏻‍♂️",
- "🧎🏻",
- "🧎🏼‍♀️",
- "🧎🏼‍♂️",
- "🧎🏼",
- "🧎🏽‍♀️",
- "🧎🏽‍♂️",
- "🧎🏽",
- "🧎🏾‍♀️",
- "🧎🏾‍♂️",
- "🧎🏾",
- "🧎🏿‍♀️",
- "🧎🏿‍♂️",
- "🧎🏿",
- "🧎‍♀️",
- "🧎‍♂️",
- "🧎",
- "🧏🏻‍♀️",
- "🧏🏻‍♂️",
- "🧏🏻",
- "🧏🏼‍♀️",
- "🧏🏼‍♂️",
- "🧏🏼",
- "🧏🏽‍♀️",
- "🧏🏽‍♂️",
- "🧏🏽",
- "🧏🏾‍♀️",
- "🧏🏾‍♂️",
- "🧏🏾",
- "🧏🏿‍♀️",
- "🧏🏿‍♂️",
- "🧏🏿",
- "🧏‍♀️",
- "🧏‍♂️",
- "🧏",
- "🧐",
- "🧑🏻‍🤝‍🧑🏻",
- "🧑🏻",
- "🧑🏼‍🤝‍🧑🏻",
- "🧑🏼‍🤝‍🧑🏼",
- "🧑🏼",
- "🧑🏽‍🤝‍🧑🏻",
- "🧑🏽‍🤝‍🧑🏼",
- "🧑🏽‍🤝‍🧑🏽",
- "🧑🏽",
- "🧑🏾‍🤝‍🧑🏻",
- "🧑🏾‍🤝‍🧑🏼",
- "🧑🏾‍🤝‍🧑🏽",
- "🧑🏾‍🤝‍🧑🏾",
- "🧑🏾",
- "🧑🏿‍🤝‍🧑🏻",
- "🧑🏿‍🤝‍🧑🏼",
- "🧑🏿‍🤝‍🧑🏽",
- "🧑🏿‍🤝‍🧑🏾",
- "🧑🏿‍🤝‍🧑🏿",
- "🧑🏿",
- "🧑‍🤝‍🧑",
- "🧑",
- "🧒🏻",
- "🧒🏼",
- "🧒🏽",
- "🧒🏾",
- "🧒🏿",
- "🧒",
- "🧓🏻",
- "🧓🏼",
- "🧓🏽",
- "🧓🏾",
- "🧓🏿",
- "🧓",
- "🧔🏻",
- "🧔🏼",
- "🧔🏽",
- "🧔🏾",
- "🧔🏿",
- "🧔",
- "🧕🏻",
- "🧕🏼",
- "🧕🏽",
- "🧕🏾",
- "🧕🏿",
- "🧕",
- "🧖🏻‍♀️",
- "🧖🏻‍♂️",
- "🧖🏻",
- "🧖🏼‍♀️",
- "🧖🏼‍♂️",
- "🧖🏼",
- "🧖🏽‍♀️",
- "🧖🏽‍♂️",
- "🧖🏽",
- "🧖🏾‍♀️",
- "🧖🏾‍♂️",
- "🧖🏾",
- "🧖🏿‍♀️",
- "🧖🏿‍♂️",
- "🧖🏿",
- "🧖‍♀️",
- "🧖‍♂️",
- "🧖",
- "🧗🏻‍♀️",
- "🧗🏻‍♂️",
- "🧗🏻",
- "🧗🏼‍♀️",
- "🧗🏼‍♂️",
- "🧗🏼",
- "🧗🏽‍♀️",
- "🧗🏽‍♂️",
- "🧗🏽",
- "🧗🏾‍♀️",
- "🧗🏾‍♂️",
- "🧗🏾",
- "🧗🏿‍♀️",
- "🧗🏿‍♂️",
- "🧗🏿",
- "🧗‍♀️",
- "🧗‍♂️",
- "🧗",
- "🧘🏻‍♀️",
- "🧘🏻‍♂️",
- "🧘🏻",
- "🧘🏼‍♀️",
- "🧘🏼‍♂️",
- "🧘🏼",
- "🧘🏽‍♀️",
- "🧘🏽‍♂️",
- "🧘🏽",
- "🧘🏾‍♀️",
- "🧘🏾‍♂️",
- "🧘🏾",
- "🧘🏿‍♀️",
- "🧘🏿‍♂️",
- "🧘🏿",
- "🧘‍♀️",
- "🧘‍♂️",
- "🧘",
- "🧙🏻‍♀️",
- "🧙🏻‍♂️",
- "🧙🏻",
- "🧙🏼‍♀️",
- "🧙🏼‍♂️",
- "🧙🏼",
- "🧙🏽‍♀️",
- "🧙🏽‍♂️",
- "🧙🏽",
- "🧙🏾‍♀️",
- "🧙🏾‍♂️",
- "🧙🏾",
- "🧙🏿‍♀️",
- "🧙🏿‍♂️",
- "🧙🏿",
- "🧙‍♀️",
- "🧙‍♂️",
- "🧙",
- "🧚🏻‍♀️",
- "🧚🏻‍♂️",
- "🧚🏻",
- "🧚🏼‍♀️",
- "🧚🏼‍♂️",
- "🧚🏼",
- "🧚🏽‍♀️",
- "🧚🏽‍♂️",
- "🧚🏽",
- "🧚🏾‍♀️",
- "🧚🏾‍♂️",
- "🧚🏾",
- "🧚🏿‍♀️",
- "🧚🏿‍♂️",
- "🧚🏿",
- "🧚‍♀️",
- "🧚‍♂️",
- "🧚",
- "🧛🏻‍♀️",
- "🧛🏻‍♂️",
- "🧛🏻",
- "🧛🏼‍♀️",
- "🧛🏼‍♂️",
- "🧛🏼",
- "🧛🏽‍♀️",
- "🧛🏽‍♂️",
- "🧛🏽",
- "🧛🏾‍♀️",
- "🧛🏾‍♂️",
- "🧛🏾",
- "🧛🏿‍♀️",
- "🧛🏿‍♂️",
- "🧛🏿",
- "🧛‍♀️",
- "🧛‍♂️",
- "🧛",
- "🧜🏻‍♀️",
- "🧜🏻‍♂️",
- "🧜🏻",
- "🧜🏼‍♀️",
- "🧜🏼‍♂️",
- "🧜🏼",
- "🧜🏽‍♀️",
- "🧜🏽‍♂️",
- "🧜🏽",
- "🧜🏾‍♀️",
- "🧜🏾‍♂️",
- "🧜🏾",
- "🧜🏿‍♀️",
- "🧜🏿‍♂️",
- "🧜🏿",
- "🧜‍♀️",
- "🧜‍♂️",
- "🧜",
- "🧝🏻‍♀️",
- "🧝🏻‍♂️",
- "🧝🏻",
- "🧝🏼‍♀️",
- "🧝🏼‍♂️",
- "🧝🏼",
- "🧝🏽‍♀️",
- "🧝🏽‍♂️",
- "🧝🏽",
- "🧝🏾‍♀️",
- "🧝🏾‍♂️",
- "🧝🏾",
- "🧝🏿‍♀️",
- "🧝🏿‍♂️",
- "🧝🏿",
- "🧝‍♀️",
- "🧝‍♂️",
- "🧝",
- "🧞‍♀️",
- "🧞‍♂️",
- "🧞",
- "🧟‍♀️",
- "🧟‍♂️",
- "🧟",
- "🧠",
- "🧡",
- "🧢",
- "🧣",
- "🧤",
- "🧥",
- "🧦",
- "🧧",
- "🧨",
- "🧩",
- "🧪",
- "🧫",
- "🧬",
- "🧭",
- "🧮",
- "🧯",
- "🧰",
- "🧱",
- "🧲",
- "🧳",
- "🧴",
- "🧵",
- "🧶",
- "🧷",
- "🧸",
- "🧹",
- "🧺",
- "🧻",
- "🧼",
- "🧽",
- "🧾",
- "🧿",
- "🩰",
- "🩱",
- "🩲",
- "🩳",
- "🩸",
- "🩹",
- "🩺",
- "🪀",
- "🪁",
- "🪂",
- "🪐",
- "🪑",
- "🪒",
- "🪓",
- "🪔",
- "🪕",
- "‼️",
- "⁉️",
- "™️",
- "ℹ️",
- "↔️",
- "↕️",
- "↖️",
- "↗️",
- "↘️",
- "↙️",
- "↩️",
- "↪️",
- "#⃣",
- "⌚️",
- "⌛️",
- "⌨️",
- "⏏️",
- "⏩",
- "⏪",
- "⏫",
- "⏬",
- "⏭️",
- "⏮️",
- "⏯️",
- "⏰",
- "⏱️",
- "⏲️",
- "⏳",
- "⏸️",
- "⏹️",
- "⏺️",
- "Ⓜ️",
- "▪️",
- "▫️",
- "▶️",
- "◀️",
- "◻️",
- "◼️",
- "◽️",
- "◾️",
- "☀️",
- "☁️",
- "☂️",
- "☃️",
- "☄️",
- "☎️",
- "☑️",
- "☔️",
- "☕️",
- "☘️",
- "☝🏻",
- "☝🏼",
- "☝🏽",
- "☝🏾",
- "☝🏿",
- "☝️",
- "☠️",
- "☢️",
- "☣️",
- "☦️",
- "☪️",
- "☮️",
- "☯️",
- "☸️",
- "☹️",
- "☺️",
- "♀️",
- "♂️",
- "♈️",
- "♉️",
- "♊️",
- "♋️",
- "♌️",
- "♍️",
- "♎️",
- "♏️",
- "♐️",
- "♑️",
- "♒️",
- "♓️",
- "♟️",
- "♠️",
- "♣️",
- "♥️",
- "♦️",
- "♨️",
- "♻️",
- "♾",
- "♿️",
- "⚒️",
- "⚓️",
- "⚔️",
- "⚕️",
- "⚖️",
- "⚗️",
- "⚙️",
- "⚛️",
- "⚜️",
- "⚠️",
- "⚡️",
- "⚪️",
- "⚫️",
- "⚰️",
- "⚱️",
- "⚽️",
- "⚾️",
- "⛄️",
- "⛅️",
- "⛈️",
- "⛎",
- "⛏️",
- "⛑️",
- "⛓️",
- "⛔️",
- "⛩️",
- "⛪️",
- "⛰️",
- "⛱️",
- "⛲️",
- "⛳️",
- "⛴️",
- "⛵️",
- "⛷🏻",
- "⛷🏼",
- "⛷🏽",
- "⛷🏾",
- "⛷🏿",
- "⛷️",
- "⛸️",
- "⛹🏻‍♀️",
- "⛹🏻‍♂️",
- "⛹🏻",
- "⛹🏼‍♀️",
- "⛹🏼‍♂️",
- "⛹🏼",
- "⛹🏽‍♀️",
- "⛹🏽‍♂️",
- "⛹🏽",
- "⛹🏾‍♀️",
- "⛹🏾‍♂️",
- "⛹🏾",
- "⛹🏿‍♀️",
- "⛹🏿‍♂️",
- "⛹🏿",
- "⛹️‍♀️",
- "⛹️‍♂️",
- "⛹️",
- "⛺️",
- "⛽️",
- "✂️",
- "✅",
- "✈️",
- "✉️",
- "✊🏻",
- "✊🏼",
- "✊🏽",
- "✊🏾",
- "✊🏿",
- "✊",
- "✋🏻",
- "✋🏼",
- "✋🏽",
- "✋🏾",
- "✋🏿",
- "✋",
- "✌🏻",
- "✌🏼",
- "✌🏽",
- "✌🏾",
- "✌🏿",
- "✌️",
- "✍🏻",
- "✍🏼",
- "✍🏽",
- "✍🏾",
- "✍🏿",
- "✍️",
- "✏️",
- "✒️",
- "✔️",
- "✖️",
- "✝️",
- "✡️",
- "✨",
- "✳️",
- "✴️",
- "❄️",
- "❇️",
- "❌",
- "❎",
- "❓",
- "❔",
- "❕",
- "❗️",
- "❣️",
- "❤️",
- "➕",
- "➖",
- "➗",
- "➡️",
- "➰",
- "➿",
- "⤴️",
- "⤵️",
- "*⃣",
- "⬅️",
- "⬆️",
- "⬇️",
- "⬛️",
- "⬜️",
- "⭐️",
- "⭕️",
- "0⃣",
- "〰️",
- "〽️",
- "1⃣",
- "2⃣",
- "㊗️",
- "㊙️",
- "3⃣",
- "4⃣",
- "5⃣",
- "6⃣",
- "7⃣",
- "8⃣",
- "9⃣",
- "©️",
- "®️",
- ""
-];
-
-const path$1 = path__default;
-const emojisList = emojisList$1;
-const getHashDigest$1 = getHashDigest_1;
-
-const emojiRegex = /[\uD800-\uDFFF]./;
-const emojiList = emojisList.filter((emoji) => emojiRegex.test(emoji));
-const emojiCache = {};
-
-function encodeStringToEmoji(content, length) {
- if (emojiCache[content]) {
- return emojiCache[content];
- }
-
- length = length || 1;
-
- const emojis = [];
-
- do {
- if (!emojiList.length) {
- throw new Error('Ran out of emoji');
- }
-
- const index = Math.floor(Math.random() * emojiList.length);
-
- emojis.push(emojiList[index]);
- emojiList.splice(index, 1);
- } while (--length > 0);
-
- const emojiEncoding = emojis.join('');
-
- emojiCache[content] = emojiEncoding;
-
- return emojiEncoding;
-}
-
-function interpolateName$2(loaderContext, name, options) {
- let filename;
-
- const hasQuery =
- loaderContext.resourceQuery && loaderContext.resourceQuery.length > 1;
-
- if (typeof name === 'function') {
- filename = name(
- loaderContext.resourcePath,
- hasQuery ? loaderContext.resourceQuery : undefined
- );
- } else {
- filename = name || '[hash].[ext]';
- }
-
- const context = options.context;
- const content = options.content;
- const regExp = options.regExp;
-
- let ext = 'bin';
- let basename = 'file';
- let directory = '';
- let folder = '';
- let query = '';
-
- if (loaderContext.resourcePath) {
- const parsed = path$1.parse(loaderContext.resourcePath);
- let resourcePath = loaderContext.resourcePath;
-
- if (parsed.ext) {
- ext = parsed.ext.substr(1);
- }
-
- if (parsed.dir) {
- basename = parsed.name;
- resourcePath = parsed.dir + path$1.sep;
- }
-
- if (typeof context !== 'undefined') {
- directory = path$1
- .relative(context, resourcePath + '_')
- .replace(/\\/g, '/')
- .replace(/\.\.(\/)?/g, '_$1');
- directory = directory.substr(0, directory.length - 1);
- } else {
- directory = resourcePath.replace(/\\/g, '/').replace(/\.\.(\/)?/g, '_$1');
- }
-
- if (directory.length === 1) {
- directory = '';
- } else if (directory.length > 1) {
- folder = path$1.basename(directory);
- }
- }
-
- if (loaderContext.resourceQuery && loaderContext.resourceQuery.length > 1) {
- query = loaderContext.resourceQuery;
-
- const hashIdx = query.indexOf('#');
-
- if (hashIdx >= 0) {
- query = query.substr(0, hashIdx);
- }
- }
-
- let url = filename;
-
- if (content) {
- // Match hash template
- url = url
- // `hash` and `contenthash` are same in `loader-utils` context
- // let's keep `hash` for backward compatibility
- .replace(
- /\[(?:([^:\]]+):)?(?:hash|contenthash)(?::([a-z]+\d*))?(?::(\d+))?\]/gi,
- (all, hashType, digestType, maxLength) =>
- getHashDigest$1(content, hashType, digestType, parseInt(maxLength, 10))
- )
- .replace(/\[emoji(?::(\d+))?\]/gi, (all, length) =>
- encodeStringToEmoji(content, parseInt(length, 10))
- );
- }
-
- url = url
- .replace(/\[ext\]/gi, () => ext)
- .replace(/\[name\]/gi, () => basename)
- .replace(/\[path\]/gi, () => directory)
- .replace(/\[folder\]/gi, () => folder)
- .replace(/\[query\]/gi, () => query);
-
- if (regExp && loaderContext.resourcePath) {
- const match = loaderContext.resourcePath.match(new RegExp(regExp));
-
- match &&
- match.forEach((matched, i) => {
- url = url.replace(new RegExp('\\[' + i + '\\]', 'ig'), matched);
- });
- }
-
- if (
- typeof loaderContext.options === 'object' &&
- typeof loaderContext.options.customInterpolateName === 'function'
- ) {
- url = loaderContext.options.customInterpolateName.call(
- loaderContext,
- url,
- name,
- options
- );
- }
-
- return url;
-}
-
-var interpolateName_1 = interpolateName$2;
-
-const getOptions = getOptions_1;
-const parseQuery = parseQuery_1;
-const stringifyRequest = stringifyRequest_1;
-const getRemainingRequest = getRemainingRequest_1;
-const getCurrentRequest = getCurrentRequest_1;
-const isUrlRequest = isUrlRequest_1;
-const urlToRequest = urlToRequest_1;
-const parseString = parseString_1;
-const getHashDigest = getHashDigest_1;
-const interpolateName$1 = interpolateName_1;
-
-lib$2.getOptions = getOptions;
-lib$2.parseQuery = parseQuery;
-lib$2.stringifyRequest = stringifyRequest;
-lib$2.getRemainingRequest = getRemainingRequest;
-lib$2.getCurrentRequest = getCurrentRequest;
-lib$2.isUrlRequest = isUrlRequest;
-lib$2.urlToRequest = urlToRequest;
-lib$2.parseString = parseString;
-lib$2.getHashDigest = getHashDigest;
-lib$2.interpolateName = interpolateName$1;
-
-var interpolateName = lib$2.interpolateName;
-var path = path__default;
-
-/**
- * @param {string} pattern
- * @param {object} options
- * @param {string} options.context
- * @param {string} options.hashPrefix
- * @return {function}
- */
-var genericNames = function createGenerator(pattern, options) {
- options = options || {};
- var context =
- options && typeof options.context === "string"
- ? options.context
- : process.cwd();
- var hashPrefix =
- options && typeof options.hashPrefix === "string" ? options.hashPrefix : "";
-
- /**
- * @param {string} localName Usually a class name
- * @param {string} filepath Absolute path
- * @return {string}
- */
- return function generate(localName, filepath) {
- var name = pattern.replace(/\[local\]/gi, localName);
- var loaderContext = {
- resourcePath: filepath
- };
-
- var loaderOptions = {
- content:
- hashPrefix +
- path.relative(context, filepath).replace(/\\/g, "/") +
- "+" +
- localName,
- context: context
- };
-
- var genericName = interpolateName(loaderContext, name, loaderOptions);
- return genericName
- .replace(new RegExp("[^a-zA-Z0-9\\-_\u00A0-\uFFFF]", "g"), "-")
- .replace(/^((-?[0-9])|--)/, "_$1");
- };
-};
-
-var unquote$1 = {};
-
-Object.defineProperty(unquote$1, "__esModule", {
- value: true
-});
-unquote$1.default = unquote;
-// copied from https://github.com/lakenen/node-unquote
-
-var reg = /['"]/;
-
-function unquote(str) {
- if (!str) {
- return "";
- }
- if (reg.test(str.charAt(0))) {
- str = str.substr(1);
- }
- if (reg.test(str.charAt(str.length - 1))) {
- str = str.substr(0, str.length - 1);
- }
- return str;
-}
-
-var parser$1 = {};
-
-var lib = {};
-
-Object.defineProperty(lib, "__esModule", {
- value: true
-});
-lib.replaceAll = replaceAll;
-var matchConstName = /[$#]?[\w-\.]+/g;
-
-function replaceAll(replacements, text) {
- var matches = void 0;
- while (matches = matchConstName.exec(text)) {
- var replacement = replacements[matches[0]];
- if (replacement) {
- text = text.slice(0, matches.index) + replacement + text.slice(matchConstName.lastIndex);
- matchConstName.lastIndex -= matches[0].length - replacement.length;
- }
- }
- return text;
-}
-
-lib.default = function (css, translations) {
- css.walkDecls(function (decl) {
- return decl.value = replaceAll(translations, decl.value);
- });
- css.walkAtRules('media', function (atRule) {
- return atRule.params = replaceAll(translations, atRule.params);
- });
-};
-
-Object.defineProperty(parser$1, "__esModule", {
- value: true
-});
-
-var _icssReplaceSymbols = lib;
-
-var _icssReplaceSymbols2 = _interopRequireDefault$6(_icssReplaceSymbols);
-
-function _interopRequireDefault$6(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-// Copied from https://github.com/css-modules/css-modules-loader-core
-
-const importRegexp = /^:import\((.+)\)$/;
-class Parser {
- constructor(pathFetcher, trace) {
- this.pathFetcher = pathFetcher;
- this.plugin = this.plugin.bind(this);
- this.exportTokens = {};
- this.translations = {};
- this.trace = trace;
- }
-
- plugin() {
- const parser = this;
- return {
- postcssPlugin: "css-modules-parser",
- OnceExit(css) {
- return Promise.all(parser.fetchAllImports(css)).then(() => parser.linkImportedSymbols(css)).then(() => parser.extractExports(css));
- }
- };
- }
-
- fetchAllImports(css) {
- let imports = [];
- css.each(node => {
- if (node.type == "rule" && node.selector.match(importRegexp)) {
- imports.push(this.fetchImport(node, css.source.input.from, imports.length));
- }
- });
- return imports;
- }
-
- linkImportedSymbols(css) {
- (0, _icssReplaceSymbols2.default)(css, this.translations);
- }
-
- extractExports(css) {
- css.each(node => {
- if (node.type == "rule" && node.selector == ":export") this.handleExport(node);
- });
- }
-
- handleExport(exportNode) {
- exportNode.each(decl => {
- if (decl.type == "decl") {
- Object.keys(this.translations).forEach(translation => {
- decl.value = decl.value.replace(translation, this.translations[translation]);
- });
- this.exportTokens[decl.prop] = decl.value;
- }
- });
- exportNode.remove();
- }
-
- fetchImport(importNode, relativeTo, depNr) {
- let file = importNode.selector.match(importRegexp)[1],
- depTrace = this.trace + String.fromCharCode(depNr);
- return this.pathFetcher(file, relativeTo, depTrace).then(exports => {
- importNode.each(decl => {
- if (decl.type == "decl") {
- this.translations[decl.prop] = exports[decl.value];
- }
- });
- importNode.remove();
- }, err => console.log(err));
- }
-}
-parser$1.default = Parser;
-
-var loader = {};
-
-Object.defineProperty(loader, "__esModule", {
- value: true
-});
-
-var _postcss$1 = require$$0__default;
-
-var _postcss2$1 = _interopRequireDefault$5(_postcss$1);
-
-var _fs$1 = fs__default;
-
-var _fs2 = _interopRequireDefault$5(_fs$1);
-
-var _path = path__default;
-
-var _path2 = _interopRequireDefault$5(_path);
-
-var _parser$1 = parser$1;
-
-var _parser2$1 = _interopRequireDefault$5(_parser$1);
-
-function _interopRequireDefault$5(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-// Copied from https://github.com/css-modules/css-modules-loader-core
-
-class Core {
- constructor(plugins) {
- this.plugins = plugins || Core.defaultPlugins;
- }
-
- load(sourceString, sourcePath, trace, pathFetcher) {
- let parser = new _parser2$1.default(pathFetcher, trace);
-
- return (0, _postcss2$1.default)(this.plugins.concat([parser.plugin()])).process(sourceString, { from: "/" + sourcePath }).then(result => {
- return {
- injectableSource: result.css,
- exportTokens: parser.exportTokens
- };
- });
- }
-}
-
-// Sorts dependencies in the following way:
-// AAA comes before AA and A
-// AB comes after AA and before A
-// All Bs come after all As
-// This ensures that the files are always returned in the following order:
-// - In the order they were required, except
-// - After all their dependencies
-const traceKeySorter = (a, b) => {
- if (a.length < b.length) {
- return a < b.substring(0, a.length) ? -1 : 1;
- } else if (a.length > b.length) {
- return a.substring(0, b.length) <= b ? -1 : 1;
- } else {
- return a < b ? -1 : 1;
- }
-};
-
-class FileSystemLoader {
- constructor(root, plugins) {
- this.root = root;
- this.sources = {};
- this.traces = {};
- this.importNr = 0;
- this.core = new Core(plugins);
- this.tokensByFile = {};
- }
-
- fetch(_newPath, relativeTo, _trace) {
- let newPath = _newPath.replace(/^["']|["']$/g, ""),
- trace = _trace || String.fromCharCode(this.importNr++);
- return new Promise((resolve, reject) => {
- let relativeDir = _path2.default.dirname(relativeTo),
- rootRelativePath = _path2.default.resolve(relativeDir, newPath),
- fileRelativePath = _path2.default.resolve(_path2.default.join(this.root, relativeDir), newPath);
-
- // if the path is not relative or absolute, try to resolve it in node_modules
- if (newPath[0] !== "." && newPath[0] !== "/") {
- try {
- fileRelativePath = require.resolve(newPath);
- } catch (e) {
- // noop
- }
- }
-
- const tokens = this.tokensByFile[fileRelativePath];
- if (tokens) {
- return resolve(tokens);
- }
-
- _fs2.default.readFile(fileRelativePath, "utf-8", (err, source) => {
- if (err) reject(err);
- this.core.load(source, rootRelativePath, trace, this.fetch.bind(this)).then(({ injectableSource, exportTokens }) => {
- this.sources[fileRelativePath] = injectableSource;
- this.traces[trace] = fileRelativePath;
- this.tokensByFile[fileRelativePath] = exportTokens;
- resolve(exportTokens);
- }, reject);
- });
- });
- }
-
- get finalSource() {
- const traces = this.traces;
- const sources = this.sources;
- let written = new Set();
-
- return Object.keys(traces).sort(traceKeySorter).map(key => {
- const filename = traces[key];
- if (written.has(filename)) {
- return null;
- }
- written.add(filename);
-
- return sources[filename];
- }).join("");
- }
-}
-loader.default = FileSystemLoader;
-
-var generateScopedName$1 = {};
-
-function hash(str) {
- var hash = 5381,
- i = str.length;
-
- while(i) {
- hash = (hash * 33) ^ str.charCodeAt(--i);
- }
-
- /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed
- * integers. Since we want the results to be always positive, convert the
- * signed int to an unsigned by doing an unsigned bitshift. */
- return hash >>> 0;
-}
-
-var stringHash = hash;
-
-Object.defineProperty(generateScopedName$1, "__esModule", {
- value: true
-});
-generateScopedName$1.default = generateScopedName;
-
-var _stringHash = stringHash;
-
-var _stringHash2 = _interopRequireDefault$4(_stringHash);
-
-function _interopRequireDefault$4(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function generateScopedName(name, filename, css) {
- const i = css.indexOf(`.${name}`);
- const lineNumber = css.substr(0, i).split(/[\r\n]/).length;
- const hash = (0, _stringHash2.default)(css).toString(36).substr(0, 5);
-
- return `_${name}_${hash}_${lineNumber}`;
-}
-
-var saveJSON$1 = {};
-
-Object.defineProperty(saveJSON$1, "__esModule", {
- value: true
-});
-saveJSON$1.default = saveJSON;
-
-var _fs = fs__default;
-
-function saveJSON(cssFile, json) {
- return new Promise((resolve, reject) => {
- (0, _fs.writeFile)(`${cssFile}.json`, JSON.stringify(json), e => e ? reject(e) : resolve(json));
- });
-}
-
-var behaviours$1 = {};
-
-var src$4 = {exports: {}};
-
-var dist = {exports: {}};
-
-var processor = {exports: {}};
-
-var parser = {exports: {}};
-
-var root$1 = {exports: {}};
-
-var container = {exports: {}};
-
-var node$1 = {exports: {}};
-
-var util = {};
-
-var unesc = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = unesc;
-
-// Many thanks for this post which made this migration much easier.
-// https://mathiasbynens.be/notes/css-escapes
-
-/**
- *
- * @param {string} str
- * @returns {[string, number]|undefined}
- */
-function gobbleHex(str) {
- var lower = str.toLowerCase();
- var hex = '';
- var spaceTerminated = false;
-
- for (var i = 0; i < 6 && lower[i] !== undefined; i++) {
- var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]
-
- var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point
-
- spaceTerminated = code === 32;
-
- if (!valid) {
- break;
- }
-
- hex += lower[i];
- }
-
- if (hex.length === 0) {
- return undefined;
- }
-
- var codePoint = parseInt(hex, 16);
- var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for
- // "If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point"
- // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point
-
- if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {
- return ["\uFFFD", hex.length + (spaceTerminated ? 1 : 0)];
- }
-
- return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];
-}
-
-var CONTAINS_ESCAPE = /\\/;
-
-function unesc(str) {
- var needToProcess = CONTAINS_ESCAPE.test(str);
-
- if (!needToProcess) {
- return str;
- }
-
- var ret = "";
-
- for (var i = 0; i < str.length; i++) {
- if (str[i] === "\\") {
- var gobbled = gobbleHex(str.slice(i + 1, i + 7));
-
- if (gobbled !== undefined) {
- ret += gobbled[0];
- i += gobbled[1];
- continue;
- } // Retain a pair of \\ if double escaped `\\\\`
- // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e
-
-
- if (str[i + 1] === "\\") {
- ret += "\\";
- i++;
- continue;
- } // if \\ is at the end of the string retain it
- // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb
-
-
- if (str.length === i + 1) {
- ret += str[i];
- }
-
- continue;
- }
-
- ret += str[i];
- }
-
- return ret;
-}
-
-module.exports = exports.default;
-}(unesc, unesc.exports));
-
-var getProp = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = getProp;
-
-function getProp(obj) {
- for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- props[_key - 1] = arguments[_key];
- }
-
- while (props.length > 0) {
- var prop = props.shift();
-
- if (!obj[prop]) {
- return undefined;
- }
-
- obj = obj[prop];
- }
-
- return obj;
-}
-
-module.exports = exports.default;
-}(getProp, getProp.exports));
-
-var ensureObject = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = ensureObject;
-
-function ensureObject(obj) {
- for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- props[_key - 1] = arguments[_key];
- }
-
- while (props.length > 0) {
- var prop = props.shift();
-
- if (!obj[prop]) {
- obj[prop] = {};
- }
-
- obj = obj[prop];
- }
-}
-
-module.exports = exports.default;
-}(ensureObject, ensureObject.exports));
-
-var stripComments = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = stripComments;
-
-function stripComments(str) {
- var s = "";
- var commentStart = str.indexOf("/*");
- var lastEnd = 0;
-
- while (commentStart >= 0) {
- s = s + str.slice(lastEnd, commentStart);
- var commentEnd = str.indexOf("*/", commentStart + 2);
-
- if (commentEnd < 0) {
- return s;
- }
-
- lastEnd = commentEnd + 2;
- commentStart = str.indexOf("/*", lastEnd);
- }
-
- s = s + str.slice(lastEnd);
- return s;
-}
-
-module.exports = exports.default;
-}(stripComments, stripComments.exports));
-
-util.__esModule = true;
-util.stripComments = util.ensureObject = util.getProp = util.unesc = void 0;
-
-var _unesc = _interopRequireDefault$3(unesc.exports);
-
-util.unesc = _unesc["default"];
-
-var _getProp = _interopRequireDefault$3(getProp.exports);
-
-util.getProp = _getProp["default"];
-
-var _ensureObject = _interopRequireDefault$3(ensureObject.exports);
-
-util.ensureObject = _ensureObject["default"];
-
-var _stripComments = _interopRequireDefault$3(stripComments.exports);
-
-util.stripComments = _stripComments["default"];
-
-function _interopRequireDefault$3(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _util = util;
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-var cloneNode = function cloneNode(obj, parent) {
- if (typeof obj !== 'object' || obj === null) {
- return obj;
- }
-
- var cloned = new obj.constructor();
-
- for (var i in obj) {
- if (!obj.hasOwnProperty(i)) {
- continue;
- }
-
- var value = obj[i];
- var type = typeof value;
-
- if (i === 'parent' && type === 'object') {
- if (parent) {
- cloned[i] = parent;
- }
- } else if (value instanceof Array) {
- cloned[i] = value.map(function (j) {
- return cloneNode(j, cloned);
- });
- } else {
- cloned[i] = cloneNode(value, cloned);
- }
- }
-
- return cloned;
-};
-
-var Node = /*#__PURE__*/function () {
- function Node(opts) {
- if (opts === void 0) {
- opts = {};
- }
-
- Object.assign(this, opts);
- this.spaces = this.spaces || {};
- this.spaces.before = this.spaces.before || '';
- this.spaces.after = this.spaces.after || '';
- }
-
- var _proto = Node.prototype;
-
- _proto.remove = function remove() {
- if (this.parent) {
- this.parent.removeChild(this);
- }
-
- this.parent = undefined;
- return this;
- };
-
- _proto.replaceWith = function replaceWith() {
- if (this.parent) {
- for (var index in arguments) {
- this.parent.insertBefore(this, arguments[index]);
- }
-
- this.remove();
- }
-
- return this;
- };
-
- _proto.next = function next() {
- return this.parent.at(this.parent.index(this) + 1);
- };
-
- _proto.prev = function prev() {
- return this.parent.at(this.parent.index(this) - 1);
- };
-
- _proto.clone = function clone(overrides) {
- if (overrides === void 0) {
- overrides = {};
- }
-
- var cloned = cloneNode(this);
-
- for (var name in overrides) {
- cloned[name] = overrides[name];
- }
-
- return cloned;
- }
- /**
- * Some non-standard syntax doesn't follow normal escaping rules for css.
- * This allows non standard syntax to be appended to an existing property
- * by specifying the escaped value. By specifying the escaped value,
- * illegal characters are allowed to be directly inserted into css output.
- * @param {string} name the property to set
- * @param {any} value the unescaped value of the property
- * @param {string} valueEscaped optional. the escaped value of the property.
- */
- ;
-
- _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {
- if (!this.raws) {
- this.raws = {};
- }
-
- var originalValue = this[name];
- var originalEscaped = this.raws[name];
- this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.
-
- if (originalEscaped || valueEscaped !== value) {
- this.raws[name] = (originalEscaped || originalValue) + valueEscaped;
- } else {
- delete this.raws[name]; // delete any escaped value that was created by the setter.
- }
- }
- /**
- * Some non-standard syntax doesn't follow normal escaping rules for css.
- * This allows the escaped value to be specified directly, allowing illegal
- * characters to be directly inserted into css output.
- * @param {string} name the property to set
- * @param {any} value the unescaped value of the property
- * @param {string} valueEscaped the escaped value of the property.
- */
- ;
-
- _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {
- if (!this.raws) {
- this.raws = {};
- }
-
- this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.
-
- this.raws[name] = valueEscaped;
- }
- /**
- * When you want a value to passed through to CSS directly. This method
- * deletes the corresponding raw value causing the stringifier to fallback
- * to the unescaped value.
- * @param {string} name the property to set.
- * @param {any} value The value that is both escaped and unescaped.
- */
- ;
-
- _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {
- this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.
-
- if (this.raws) {
- delete this.raws[name];
- }
- }
- /**
- *
- * @param {number} line The number (starting with 1)
- * @param {number} column The column number (starting with 1)
- */
- ;
-
- _proto.isAtPosition = function isAtPosition(line, column) {
- if (this.source && this.source.start && this.source.end) {
- if (this.source.start.line > line) {
- return false;
- }
-
- if (this.source.end.line < line) {
- return false;
- }
-
- if (this.source.start.line === line && this.source.start.column > column) {
- return false;
- }
-
- if (this.source.end.line === line && this.source.end.column < column) {
- return false;
- }
-
- return true;
- }
-
- return undefined;
- };
-
- _proto.stringifyProperty = function stringifyProperty(name) {
- return this.raws && this.raws[name] || this[name];
- };
-
- _proto.valueToString = function valueToString() {
- return String(this.stringifyProperty("value"));
- };
-
- _proto.toString = function toString() {
- return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');
- };
-
- _createClass(Node, [{
- key: "rawSpaceBefore",
- get: function get() {
- var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;
-
- if (rawSpace === undefined) {
- rawSpace = this.spaces && this.spaces.before;
- }
-
- return rawSpace || "";
- },
- set: function set(raw) {
- (0, _util.ensureObject)(this, "raws", "spaces");
- this.raws.spaces.before = raw;
- }
- }, {
- key: "rawSpaceAfter",
- get: function get() {
- var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;
-
- if (rawSpace === undefined) {
- rawSpace = this.spaces.after;
- }
-
- return rawSpace || "";
- },
- set: function set(raw) {
- (0, _util.ensureObject)(this, "raws", "spaces");
- this.raws.spaces.after = raw;
- }
- }]);
-
- return Node;
-}();
-
-exports["default"] = Node;
-module.exports = exports.default;
-}(node$1, node$1.exports));
-
-var types = {};
-
-types.__esModule = true;
-types.UNIVERSAL = types.ATTRIBUTE = types.CLASS = types.COMBINATOR = types.COMMENT = types.ID = types.NESTING = types.PSEUDO = types.ROOT = types.SELECTOR = types.STRING = types.TAG = void 0;
-var TAG = 'tag';
-types.TAG = TAG;
-var STRING = 'string';
-types.STRING = STRING;
-var SELECTOR = 'selector';
-types.SELECTOR = SELECTOR;
-var ROOT = 'root';
-types.ROOT = ROOT;
-var PSEUDO = 'pseudo';
-types.PSEUDO = PSEUDO;
-var NESTING = 'nesting';
-types.NESTING = NESTING;
-var ID = 'id';
-types.ID = ID;
-var COMMENT = 'comment';
-types.COMMENT = COMMENT;
-var COMBINATOR = 'combinator';
-types.COMBINATOR = COMBINATOR;
-var CLASS = 'class';
-types.CLASS = CLASS;
-var ATTRIBUTE = 'attribute';
-types.ATTRIBUTE = ATTRIBUTE;
-var UNIVERSAL = 'universal';
-types.UNIVERSAL = UNIVERSAL;
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _node = _interopRequireDefault(node$1.exports);
-
-var types$1 = _interopRequireWildcard(types);
-
-function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
-
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Container = /*#__PURE__*/function (_Node) {
- _inheritsLoose(Container, _Node);
-
- function Container(opts) {
- var _this;
-
- _this = _Node.call(this, opts) || this;
-
- if (!_this.nodes) {
- _this.nodes = [];
- }
-
- return _this;
- }
-
- var _proto = Container.prototype;
-
- _proto.append = function append(selector) {
- selector.parent = this;
- this.nodes.push(selector);
- return this;
- };
-
- _proto.prepend = function prepend(selector) {
- selector.parent = this;
- this.nodes.unshift(selector);
- return this;
- };
-
- _proto.at = function at(index) {
- return this.nodes[index];
- };
-
- _proto.index = function index(child) {
- if (typeof child === 'number') {
- return child;
- }
-
- return this.nodes.indexOf(child);
- };
-
- _proto.removeChild = function removeChild(child) {
- child = this.index(child);
- this.at(child).parent = undefined;
- this.nodes.splice(child, 1);
- var index;
-
- for (var id in this.indexes) {
- index = this.indexes[id];
-
- if (index >= child) {
- this.indexes[id] = index - 1;
- }
- }
-
- return this;
- };
-
- _proto.removeAll = function removeAll() {
- for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {
- var node = _step.value;
- node.parent = undefined;
- }
-
- this.nodes = [];
- return this;
- };
-
- _proto.empty = function empty() {
- return this.removeAll();
- };
-
- _proto.insertAfter = function insertAfter(oldNode, newNode) {
- newNode.parent = this;
- var oldIndex = this.index(oldNode);
- this.nodes.splice(oldIndex + 1, 0, newNode);
- newNode.parent = this;
- var index;
-
- for (var id in this.indexes) {
- index = this.indexes[id];
-
- if (oldIndex <= index) {
- this.indexes[id] = index + 1;
- }
- }
-
- return this;
- };
-
- _proto.insertBefore = function insertBefore(oldNode, newNode) {
- newNode.parent = this;
- var oldIndex = this.index(oldNode);
- this.nodes.splice(oldIndex, 0, newNode);
- newNode.parent = this;
- var index;
-
- for (var id in this.indexes) {
- index = this.indexes[id];
-
- if (index <= oldIndex) {
- this.indexes[id] = index + 1;
- }
- }
-
- return this;
- };
-
- _proto._findChildAtPosition = function _findChildAtPosition(line, col) {
- var found = undefined;
- this.each(function (node) {
- if (node.atPosition) {
- var foundChild = node.atPosition(line, col);
-
- if (foundChild) {
- found = foundChild;
- return false;
- }
- } else if (node.isAtPosition(line, col)) {
- found = node;
- return false;
- }
- });
- return found;
- }
- /**
- * Return the most specific node at the line and column number given.
- * The source location is based on the original parsed location, locations aren't
- * updated as selector nodes are mutated.
- *
- * Note that this location is relative to the location of the first character
- * of the selector, and not the location of the selector in the overall document
- * when used in conjunction with postcss.
- *
- * If not found, returns undefined.
- * @param {number} line The line number of the node to find. (1-based index)
- * @param {number} col The column number of the node to find. (1-based index)
- */
- ;
-
- _proto.atPosition = function atPosition(line, col) {
- if (this.isAtPosition(line, col)) {
- return this._findChildAtPosition(line, col) || this;
- } else {
- return undefined;
- }
- };
-
- _proto._inferEndPosition = function _inferEndPosition() {
- if (this.last && this.last.source && this.last.source.end) {
- this.source = this.source || {};
- this.source.end = this.source.end || {};
- Object.assign(this.source.end, this.last.source.end);
- }
- };
-
- _proto.each = function each(callback) {
- if (!this.lastEach) {
- this.lastEach = 0;
- }
-
- if (!this.indexes) {
- this.indexes = {};
- }
-
- this.lastEach++;
- var id = this.lastEach;
- this.indexes[id] = 0;
-
- if (!this.length) {
- return undefined;
- }
-
- var index, result;
-
- while (this.indexes[id] < this.length) {
- index = this.indexes[id];
- result = callback(this.at(index), index);
-
- if (result === false) {
- break;
- }
-
- this.indexes[id] += 1;
- }
-
- delete this.indexes[id];
-
- if (result === false) {
- return false;
- }
- };
-
- _proto.walk = function walk(callback) {
- return this.each(function (node, i) {
- var result = callback(node, i);
-
- if (result !== false && node.length) {
- result = node.walk(callback);
- }
-
- if (result === false) {
- return false;
- }
- });
- };
-
- _proto.walkAttributes = function walkAttributes(callback) {
- var _this2 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.ATTRIBUTE) {
- return callback.call(_this2, selector);
- }
- });
- };
-
- _proto.walkClasses = function walkClasses(callback) {
- var _this3 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.CLASS) {
- return callback.call(_this3, selector);
- }
- });
- };
-
- _proto.walkCombinators = function walkCombinators(callback) {
- var _this4 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.COMBINATOR) {
- return callback.call(_this4, selector);
- }
- });
- };
-
- _proto.walkComments = function walkComments(callback) {
- var _this5 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.COMMENT) {
- return callback.call(_this5, selector);
- }
- });
- };
-
- _proto.walkIds = function walkIds(callback) {
- var _this6 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.ID) {
- return callback.call(_this6, selector);
- }
- });
- };
-
- _proto.walkNesting = function walkNesting(callback) {
- var _this7 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.NESTING) {
- return callback.call(_this7, selector);
- }
- });
- };
-
- _proto.walkPseudos = function walkPseudos(callback) {
- var _this8 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.PSEUDO) {
- return callback.call(_this8, selector);
- }
- });
- };
-
- _proto.walkTags = function walkTags(callback) {
- var _this9 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.TAG) {
- return callback.call(_this9, selector);
- }
- });
- };
-
- _proto.walkUniversals = function walkUniversals(callback) {
- var _this10 = this;
-
- return this.walk(function (selector) {
- if (selector.type === types$1.UNIVERSAL) {
- return callback.call(_this10, selector);
- }
- });
- };
-
- _proto.split = function split(callback) {
- var _this11 = this;
-
- var current = [];
- return this.reduce(function (memo, node, index) {
- var split = callback.call(_this11, node);
- current.push(node);
-
- if (split) {
- memo.push(current);
- current = [];
- } else if (index === _this11.length - 1) {
- memo.push(current);
- }
-
- return memo;
- }, []);
- };
-
- _proto.map = function map(callback) {
- return this.nodes.map(callback);
- };
-
- _proto.reduce = function reduce(callback, memo) {
- return this.nodes.reduce(callback, memo);
- };
-
- _proto.every = function every(callback) {
- return this.nodes.every(callback);
- };
-
- _proto.some = function some(callback) {
- return this.nodes.some(callback);
- };
-
- _proto.filter = function filter(callback) {
- return this.nodes.filter(callback);
- };
-
- _proto.sort = function sort(callback) {
- return this.nodes.sort(callback);
- };
-
- _proto.toString = function toString() {
- return this.map(String).join('');
- };
-
- _createClass(Container, [{
- key: "first",
- get: function get() {
- return this.at(0);
- }
- }, {
- key: "last",
- get: function get() {
- return this.at(this.length - 1);
- }
- }, {
- key: "length",
- get: function get() {
- return this.nodes.length;
- }
- }]);
-
- return Container;
-}(_node["default"]);
-
-exports["default"] = Container;
-module.exports = exports.default;
-}(container, container.exports));
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _container = _interopRequireDefault(container.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Root = /*#__PURE__*/function (_Container) {
- _inheritsLoose(Root, _Container);
-
- function Root(opts) {
- var _this;
-
- _this = _Container.call(this, opts) || this;
- _this.type = _types.ROOT;
- return _this;
- }
-
- var _proto = Root.prototype;
-
- _proto.toString = function toString() {
- var str = this.reduce(function (memo, selector) {
- memo.push(String(selector));
- return memo;
- }, []).join(',');
- return this.trailingComma ? str + ',' : str;
- };
-
- _proto.error = function error(message, options) {
- if (this._error) {
- return this._error(message, options);
- } else {
- return new Error(message);
- }
- };
-
- _createClass(Root, [{
- key: "errorGenerator",
- set: function set(handler) {
- this._error = handler;
- }
- }]);
-
- return Root;
-}(_container["default"]);
-
-exports["default"] = Root;
-module.exports = exports.default;
-}(root$1, root$1.exports));
-
-var selector$1 = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _container = _interopRequireDefault(container.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Selector = /*#__PURE__*/function (_Container) {
- _inheritsLoose(Selector, _Container);
-
- function Selector(opts) {
- var _this;
-
- _this = _Container.call(this, opts) || this;
- _this.type = _types.SELECTOR;
- return _this;
- }
-
- return Selector;
-}(_container["default"]);
-
-exports["default"] = Selector;
-module.exports = exports.default;
-}(selector$1, selector$1.exports));
-
-var className$1 = {exports: {}};
-
-/*! https://mths.be/cssesc v3.0.0 by @mathias */
-
-var object = {};
-var hasOwnProperty$1 = object.hasOwnProperty;
-var merge = function merge(options, defaults) {
- if (!options) {
- return defaults;
- }
- var result = {};
- for (var key in defaults) {
- // `if (defaults.hasOwnProperty(key) { … }` is not needed here, since
- // only recognized option names are used.
- result[key] = hasOwnProperty$1.call(options, key) ? options[key] : defaults[key];
- }
- return result;
-};
-
-var regexAnySingleEscape = /[ -,\.\/:-@\[-\^`\{-~]/;
-var regexSingleEscape = /[ -,\.\/:-@\[\]\^`\{-~]/;
-var regexExcessiveSpaces = /(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g;
-
-// https://mathiasbynens.be/notes/css-escapes#css
-var cssesc = function cssesc(string, options) {
- options = merge(options, cssesc.options);
- if (options.quotes != 'single' && options.quotes != 'double') {
- options.quotes = 'single';
- }
- var quote = options.quotes == 'double' ? '"' : '\'';
- var isIdentifier = options.isIdentifier;
-
- var firstChar = string.charAt(0);
- var output = '';
- var counter = 0;
- var length = string.length;
- while (counter < length) {
- var character = string.charAt(counter++);
- var codePoint = character.charCodeAt();
- var value = void 0;
- // If it’s not a printable ASCII character…
- if (codePoint < 0x20 || codePoint > 0x7E) {
- if (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {
- // It’s a high surrogate, and there is a next character.
- var extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) {
- // next character is low surrogate
- codePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;
- } else {
- // It’s an unmatched surrogate; only append this code unit, in case
- // the next code unit is the high surrogate of a surrogate pair.
- counter--;
- }
- }
- value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
- } else {
- if (options.escapeEverything) {
- if (regexAnySingleEscape.test(character)) {
- value = '\\' + character;
- } else {
- value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
- }
- } else if (/[\t\n\f\r\x0B]/.test(character)) {
- value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
- } else if (character == '\\' || !isIdentifier && (character == '"' && quote == character || character == '\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {
- value = '\\' + character;
- } else {
- value = character;
- }
- }
- output += value;
- }
-
- if (isIdentifier) {
- if (/^-[-\d]/.test(output)) {
- output = '\\-' + output.slice(1);
- } else if (/\d/.test(firstChar)) {
- output = '\\3' + firstChar + ' ' + output.slice(1);
- }
- }
-
- // Remove spaces after `\HEX` escapes that are not followed by a hex digit,
- // since they’re redundant. Note that this is only possible if the escape
- // sequence isn’t preceded by an odd number of backslashes.
- output = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {
- if ($1 && $1.length % 2) {
- // It’s not safe to remove the space, so don’t.
- return $0;
- }
- // Strip the space.
- return ($1 || '') + $2;
- });
-
- if (!isIdentifier && options.wrap) {
- return quote + output + quote;
- }
- return output;
-};
-
-// Expose default options (so they can be overridden globally).
-cssesc.options = {
- 'escapeEverything': false,
- 'isIdentifier': false,
- 'quotes': 'single',
- 'wrap': false
-};
-
-cssesc.version = '3.0.0';
-
-var cssesc_1 = cssesc;
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _cssesc = _interopRequireDefault(cssesc_1);
-
-var _util = util;
-
-var _node = _interopRequireDefault(node$1.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var ClassName = /*#__PURE__*/function (_Node) {
- _inheritsLoose(ClassName, _Node);
-
- function ClassName(opts) {
- var _this;
-
- _this = _Node.call(this, opts) || this;
- _this.type = _types.CLASS;
- _this._constructed = true;
- return _this;
- }
-
- var _proto = ClassName.prototype;
-
- _proto.valueToString = function valueToString() {
- return '.' + _Node.prototype.valueToString.call(this);
- };
-
- _createClass(ClassName, [{
- key: "value",
- get: function get() {
- return this._value;
- },
- set: function set(v) {
- if (this._constructed) {
- var escaped = (0, _cssesc["default"])(v, {
- isIdentifier: true
- });
-
- if (escaped !== v) {
- (0, _util.ensureObject)(this, "raws");
- this.raws.value = escaped;
- } else if (this.raws) {
- delete this.raws.value;
- }
- }
-
- this._value = v;
- }
- }]);
-
- return ClassName;
-}(_node["default"]);
-
-exports["default"] = ClassName;
-module.exports = exports.default;
-}(className$1, className$1.exports));
-
-var comment$2 = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _node = _interopRequireDefault(node$1.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Comment = /*#__PURE__*/function (_Node) {
- _inheritsLoose(Comment, _Node);
-
- function Comment(opts) {
- var _this;
-
- _this = _Node.call(this, opts) || this;
- _this.type = _types.COMMENT;
- return _this;
- }
-
- return Comment;
-}(_node["default"]);
-
-exports["default"] = Comment;
-module.exports = exports.default;
-}(comment$2, comment$2.exports));
-
-var id$1 = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _node = _interopRequireDefault(node$1.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var ID = /*#__PURE__*/function (_Node) {
- _inheritsLoose(ID, _Node);
-
- function ID(opts) {
- var _this;
-
- _this = _Node.call(this, opts) || this;
- _this.type = _types.ID;
- return _this;
- }
-
- var _proto = ID.prototype;
-
- _proto.valueToString = function valueToString() {
- return '#' + _Node.prototype.valueToString.call(this);
- };
-
- return ID;
-}(_node["default"]);
-
-exports["default"] = ID;
-module.exports = exports.default;
-}(id$1, id$1.exports));
-
-var tag$1 = {exports: {}};
-
-var namespace = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _cssesc = _interopRequireDefault(cssesc_1);
-
-var _util = util;
-
-var _node = _interopRequireDefault(node$1.exports);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Namespace = /*#__PURE__*/function (_Node) {
- _inheritsLoose(Namespace, _Node);
-
- function Namespace() {
- return _Node.apply(this, arguments) || this;
- }
-
- var _proto = Namespace.prototype;
-
- _proto.qualifiedName = function qualifiedName(value) {
- if (this.namespace) {
- return this.namespaceString + "|" + value;
- } else {
- return value;
- }
- };
-
- _proto.valueToString = function valueToString() {
- return this.qualifiedName(_Node.prototype.valueToString.call(this));
- };
-
- _createClass(Namespace, [{
- key: "namespace",
- get: function get() {
- return this._namespace;
- },
- set: function set(namespace) {
- if (namespace === true || namespace === "*" || namespace === "&") {
- this._namespace = namespace;
-
- if (this.raws) {
- delete this.raws.namespace;
- }
-
- return;
- }
-
- var escaped = (0, _cssesc["default"])(namespace, {
- isIdentifier: true
- });
- this._namespace = namespace;
-
- if (escaped !== namespace) {
- (0, _util.ensureObject)(this, "raws");
- this.raws.namespace = escaped;
- } else if (this.raws) {
- delete this.raws.namespace;
- }
- }
- }, {
- key: "ns",
- get: function get() {
- return this._namespace;
- },
- set: function set(namespace) {
- this.namespace = namespace;
- }
- }, {
- key: "namespaceString",
- get: function get() {
- if (this.namespace) {
- var ns = this.stringifyProperty("namespace");
-
- if (ns === true) {
- return '';
- } else {
- return ns;
- }
- } else {
- return '';
- }
- }
- }]);
-
- return Namespace;
-}(_node["default"]);
-
-exports["default"] = Namespace;
-module.exports = exports.default;
-}(namespace, namespace.exports));
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _namespace = _interopRequireDefault(namespace.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Tag = /*#__PURE__*/function (_Namespace) {
- _inheritsLoose(Tag, _Namespace);
-
- function Tag(opts) {
- var _this;
-
- _this = _Namespace.call(this, opts) || this;
- _this.type = _types.TAG;
- return _this;
- }
-
- return Tag;
-}(_namespace["default"]);
-
-exports["default"] = Tag;
-module.exports = exports.default;
-}(tag$1, tag$1.exports));
-
-var string$1 = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _node = _interopRequireDefault(node$1.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var String = /*#__PURE__*/function (_Node) {
- _inheritsLoose(String, _Node);
-
- function String(opts) {
- var _this;
-
- _this = _Node.call(this, opts) || this;
- _this.type = _types.STRING;
- return _this;
- }
-
- return String;
-}(_node["default"]);
-
-exports["default"] = String;
-module.exports = exports.default;
-}(string$1, string$1.exports));
-
-var pseudo$1 = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _container = _interopRequireDefault(container.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Pseudo = /*#__PURE__*/function (_Container) {
- _inheritsLoose(Pseudo, _Container);
-
- function Pseudo(opts) {
- var _this;
-
- _this = _Container.call(this, opts) || this;
- _this.type = _types.PSEUDO;
- return _this;
- }
-
- var _proto = Pseudo.prototype;
-
- _proto.toString = function toString() {
- var params = this.length ? '(' + this.map(String).join(',') + ')' : '';
- return [this.rawSpaceBefore, this.stringifyProperty("value"), params, this.rawSpaceAfter].join('');
- };
-
- return Pseudo;
-}(_container["default"]);
-
-exports["default"] = Pseudo;
-module.exports = exports.default;
-}(pseudo$1, pseudo$1.exports));
-
-var attribute$1 = {};
-
-/**
- * For Node.js, simply re-export the core `util.deprecate` function.
- */
-
-var node = require$$0__default$1.deprecate;
-
-(function (exports) {
-
-exports.__esModule = true;
-exports.unescapeValue = unescapeValue;
-exports["default"] = void 0;
-
-var _cssesc = _interopRequireDefault(cssesc_1);
-
-var _unesc = _interopRequireDefault(unesc.exports);
-
-var _namespace = _interopRequireDefault(namespace.exports);
-
-var _types = types;
-
-var _CSSESC_QUOTE_OPTIONS;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var deprecate = node;
-
-var WRAPPED_IN_QUOTES = /^('|")([^]*)\1$/;
-var warnOfDeprecatedValueAssignment = deprecate(function () {}, "Assigning an attribute a value containing characters that might need to be escaped is deprecated. " + "Call attribute.setValue() instead.");
-var warnOfDeprecatedQuotedAssignment = deprecate(function () {}, "Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.");
-var warnOfDeprecatedConstructor = deprecate(function () {}, "Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.");
-
-function unescapeValue(value) {
- var deprecatedUsage = false;
- var quoteMark = null;
- var unescaped = value;
- var m = unescaped.match(WRAPPED_IN_QUOTES);
-
- if (m) {
- quoteMark = m[1];
- unescaped = m[2];
- }
-
- unescaped = (0, _unesc["default"])(unescaped);
-
- if (unescaped !== value) {
- deprecatedUsage = true;
- }
-
- return {
- deprecatedUsage: deprecatedUsage,
- unescaped: unescaped,
- quoteMark: quoteMark
- };
-}
-
-function handleDeprecatedContructorOpts(opts) {
- if (opts.quoteMark !== undefined) {
- return opts;
- }
-
- if (opts.value === undefined) {
- return opts;
- }
-
- warnOfDeprecatedConstructor();
-
- var _unescapeValue = unescapeValue(opts.value),
- quoteMark = _unescapeValue.quoteMark,
- unescaped = _unescapeValue.unescaped;
-
- if (!opts.raws) {
- opts.raws = {};
- }
-
- if (opts.raws.value === undefined) {
- opts.raws.value = opts.value;
- }
-
- opts.value = unescaped;
- opts.quoteMark = quoteMark;
- return opts;
-}
-
-var Attribute = /*#__PURE__*/function (_Namespace) {
- _inheritsLoose(Attribute, _Namespace);
-
- function Attribute(opts) {
- var _this;
-
- if (opts === void 0) {
- opts = {};
- }
-
- _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;
- _this.type = _types.ATTRIBUTE;
- _this.raws = _this.raws || {};
- Object.defineProperty(_this.raws, 'unquoted', {
- get: deprecate(function () {
- return _this.value;
- }, "attr.raws.unquoted is deprecated. Call attr.value instead."),
- set: deprecate(function () {
- return _this.value;
- }, "Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.")
- });
- _this._constructed = true;
- return _this;
- }
- /**
- * Returns the Attribute's value quoted such that it would be legal to use
- * in the value of a css file. The original value's quotation setting
- * used for stringification is left unchanged. See `setValue(value, options)`
- * if you want to control the quote settings of a new value for the attribute.
- *
- * You can also change the quotation used for the current value by setting quoteMark.
- *
- * Options:
- * * quoteMark {'"' | "'" | null} - Use this value to quote the value. If this
- * option is not set, the original value for quoteMark will be used. If
- * indeterminate, a double quote is used. The legal values are:
- * * `null` - the value will be unquoted and characters will be escaped as necessary.
- * * `'` - the value will be quoted with a single quote and single quotes are escaped.
- * * `"` - the value will be quoted with a double quote and double quotes are escaped.
- * * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark
- * over the quoteMark option value.
- * * smart {boolean} - if true, will select a quote mark based on the value
- * and the other options specified here. See the `smartQuoteMark()`
- * method.
- **/
-
-
- var _proto = Attribute.prototype;
-
- _proto.getQuotedValue = function getQuotedValue(options) {
- if (options === void 0) {
- options = {};
- }
-
- var quoteMark = this._determineQuoteMark(options);
-
- var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];
- var escaped = (0, _cssesc["default"])(this._value, cssescopts);
- return escaped;
- };
-
- _proto._determineQuoteMark = function _determineQuoteMark(options) {
- return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);
- }
- /**
- * Set the unescaped value with the specified quotation options. The value
- * provided must not include any wrapping quote marks -- those quotes will
- * be interpreted as part of the value and escaped accordingly.
- */
- ;
-
- _proto.setValue = function setValue(value, options) {
- if (options === void 0) {
- options = {};
- }
-
- this._value = value;
- this._quoteMark = this._determineQuoteMark(options);
-
- this._syncRawValue();
- }
- /**
- * Intelligently select a quoteMark value based on the value's contents. If
- * the value is a legal CSS ident, it will not be quoted. Otherwise a quote
- * mark will be picked that minimizes the number of escapes.
- *
- * If there's no clear winner, the quote mark from these options is used,
- * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is
- * true). If the quoteMark is unspecified, a double quote is used.
- *
- * @param options This takes the quoteMark and preferCurrentQuoteMark options
- * from the quoteValue method.
- */
- ;
-
- _proto.smartQuoteMark = function smartQuoteMark(options) {
- var v = this.value;
- var numSingleQuotes = v.replace(/[^']/g, '').length;
- var numDoubleQuotes = v.replace(/[^"]/g, '').length;
-
- if (numSingleQuotes + numDoubleQuotes === 0) {
- var escaped = (0, _cssesc["default"])(v, {
- isIdentifier: true
- });
-
- if (escaped === v) {
- return Attribute.NO_QUOTE;
- } else {
- var pref = this.preferredQuoteMark(options);
-
- if (pref === Attribute.NO_QUOTE) {
- // pick a quote mark that isn't none and see if it's smaller
- var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;
- var opts = CSSESC_QUOTE_OPTIONS[quote];
- var quoteValue = (0, _cssesc["default"])(v, opts);
-
- if (quoteValue.length < escaped.length) {
- return quote;
- }
- }
-
- return pref;
- }
- } else if (numDoubleQuotes === numSingleQuotes) {
- return this.preferredQuoteMark(options);
- } else if (numDoubleQuotes < numSingleQuotes) {
- return Attribute.DOUBLE_QUOTE;
- } else {
- return Attribute.SINGLE_QUOTE;
- }
- }
- /**
- * Selects the preferred quote mark based on the options and the current quote mark value.
- * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`
- * instead.
- */
- ;
-
- _proto.preferredQuoteMark = function preferredQuoteMark(options) {
- var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;
-
- if (quoteMark === undefined) {
- quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;
- }
-
- if (quoteMark === undefined) {
- quoteMark = Attribute.DOUBLE_QUOTE;
- }
-
- return quoteMark;
- };
-
- _proto._syncRawValue = function _syncRawValue() {
- var rawValue = (0, _cssesc["default"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);
-
- if (rawValue === this._value) {
- if (this.raws) {
- delete this.raws.value;
- }
- } else {
- this.raws.value = rawValue;
- }
- };
-
- _proto._handleEscapes = function _handleEscapes(prop, value) {
- if (this._constructed) {
- var escaped = (0, _cssesc["default"])(value, {
- isIdentifier: true
- });
-
- if (escaped !== value) {
- this.raws[prop] = escaped;
- } else {
- delete this.raws[prop];
- }
- }
- };
-
- _proto._spacesFor = function _spacesFor(name) {
- var attrSpaces = {
- before: '',
- after: ''
- };
- var spaces = this.spaces[name] || {};
- var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};
- return Object.assign(attrSpaces, spaces, rawSpaces);
- };
-
- _proto._stringFor = function _stringFor(name, spaceName, concat) {
- if (spaceName === void 0) {
- spaceName = name;
- }
-
- if (concat === void 0) {
- concat = defaultAttrConcat;
- }
-
- var attrSpaces = this._spacesFor(spaceName);
-
- return concat(this.stringifyProperty(name), attrSpaces);
- }
- /**
- * returns the offset of the attribute part specified relative to the
- * start of the node of the output string.
- *
- * * "ns" - alias for "namespace"
- * * "namespace" - the namespace if it exists.
- * * "attribute" - the attribute name
- * * "attributeNS" - the start of the attribute or its namespace
- * * "operator" - the match operator of the attribute
- * * "value" - The value (string or identifier)
- * * "insensitive" - the case insensitivity flag;
- * @param part One of the possible values inside an attribute.
- * @returns -1 if the name is invalid or the value doesn't exist in this attribute.
- */
- ;
-
- _proto.offsetOf = function offsetOf(name) {
- var count = 1;
-
- var attributeSpaces = this._spacesFor("attribute");
-
- count += attributeSpaces.before.length;
-
- if (name === "namespace" || name === "ns") {
- return this.namespace ? count : -1;
- }
-
- if (name === "attributeNS") {
- return count;
- }
-
- count += this.namespaceString.length;
-
- if (this.namespace) {
- count += 1;
- }
-
- if (name === "attribute") {
- return count;
- }
-
- count += this.stringifyProperty("attribute").length;
- count += attributeSpaces.after.length;
-
- var operatorSpaces = this._spacesFor("operator");
-
- count += operatorSpaces.before.length;
- var operator = this.stringifyProperty("operator");
-
- if (name === "operator") {
- return operator ? count : -1;
- }
-
- count += operator.length;
- count += operatorSpaces.after.length;
-
- var valueSpaces = this._spacesFor("value");
-
- count += valueSpaces.before.length;
- var value = this.stringifyProperty("value");
-
- if (name === "value") {
- return value ? count : -1;
- }
-
- count += value.length;
- count += valueSpaces.after.length;
-
- var insensitiveSpaces = this._spacesFor("insensitive");
-
- count += insensitiveSpaces.before.length;
-
- if (name === "insensitive") {
- return this.insensitive ? count : -1;
- }
-
- return -1;
- };
-
- _proto.toString = function toString() {
- var _this2 = this;
-
- var selector = [this.rawSpaceBefore, '['];
- selector.push(this._stringFor('qualifiedAttribute', 'attribute'));
-
- if (this.operator && (this.value || this.value === '')) {
- selector.push(this._stringFor('operator'));
- selector.push(this._stringFor('value'));
- selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) {
- if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {
- attrSpaces.before = " ";
- }
-
- return defaultAttrConcat(attrValue, attrSpaces);
- }));
- }
-
- selector.push(']');
- selector.push(this.rawSpaceAfter);
- return selector.join('');
- };
-
- _createClass(Attribute, [{
- key: "quoted",
- get: function get() {
- var qm = this.quoteMark;
- return qm === "'" || qm === '"';
- },
- set: function set(value) {
- warnOfDeprecatedQuotedAssignment();
- }
- /**
- * returns a single (`'`) or double (`"`) quote character if the value is quoted.
- * returns `null` if the value is not quoted.
- * returns `undefined` if the quotation state is unknown (this can happen when
- * the attribute is constructed without specifying a quote mark.)
- */
-
- }, {
- key: "quoteMark",
- get: function get() {
- return this._quoteMark;
- }
- /**
- * Set the quote mark to be used by this attribute's value.
- * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute
- * value is updated accordingly.
- *
- * @param {"'" | '"' | null} quoteMark The quote mark or `null` if the value should be unquoted.
- */
- ,
- set: function set(quoteMark) {
- if (!this._constructed) {
- this._quoteMark = quoteMark;
- return;
- }
-
- if (this._quoteMark !== quoteMark) {
- this._quoteMark = quoteMark;
-
- this._syncRawValue();
- }
- }
- }, {
- key: "qualifiedAttribute",
- get: function get() {
- return this.qualifiedName(this.raws.attribute || this.attribute);
- }
- }, {
- key: "insensitiveFlag",
- get: function get() {
- return this.insensitive ? 'i' : '';
- }
- }, {
- key: "value",
- get: function get() {
- return this._value;
- }
- /**
- * Before 3.0, the value had to be set to an escaped value including any wrapped
- * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value
- * is unescaped during parsing and any quote marks are removed.
- *
- * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,
- * a deprecation warning is raised when the new value contains any characters that would
- * require escaping (including if it contains wrapped quotes).
- *
- * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe
- * how the new value is quoted.
- */
- ,
- set: function set(v) {
- if (this._constructed) {
- var _unescapeValue2 = unescapeValue(v),
- deprecatedUsage = _unescapeValue2.deprecatedUsage,
- unescaped = _unescapeValue2.unescaped,
- quoteMark = _unescapeValue2.quoteMark;
-
- if (deprecatedUsage) {
- warnOfDeprecatedValueAssignment();
- }
-
- if (unescaped === this._value && quoteMark === this._quoteMark) {
- return;
- }
-
- this._value = unescaped;
- this._quoteMark = quoteMark;
-
- this._syncRawValue();
- } else {
- this._value = v;
- }
- }
- }, {
- key: "attribute",
- get: function get() {
- return this._attribute;
- },
- set: function set(name) {
- this._handleEscapes("attribute", name);
-
- this._attribute = name;
- }
- }]);
-
- return Attribute;
-}(_namespace["default"]);
-
-exports["default"] = Attribute;
-Attribute.NO_QUOTE = null;
-Attribute.SINGLE_QUOTE = "'";
-Attribute.DOUBLE_QUOTE = '"';
-var CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {
- "'": {
- quotes: 'single',
- wrap: true
- },
- '"': {
- quotes: 'double',
- wrap: true
- }
-}, _CSSESC_QUOTE_OPTIONS[null] = {
- isIdentifier: true
-}, _CSSESC_QUOTE_OPTIONS);
-
-function defaultAttrConcat(attrValue, attrSpaces) {
- return "" + attrSpaces.before + attrValue + attrSpaces.after;
-}
-}(attribute$1));
-
-var universal$1 = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _namespace = _interopRequireDefault(namespace.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Universal = /*#__PURE__*/function (_Namespace) {
- _inheritsLoose(Universal, _Namespace);
-
- function Universal(opts) {
- var _this;
-
- _this = _Namespace.call(this, opts) || this;
- _this.type = _types.UNIVERSAL;
- _this.value = '*';
- return _this;
- }
-
- return Universal;
-}(_namespace["default"]);
-
-exports["default"] = Universal;
-module.exports = exports.default;
-}(universal$1, universal$1.exports));
-
-var combinator$2 = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _node = _interopRequireDefault(node$1.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Combinator = /*#__PURE__*/function (_Node) {
- _inheritsLoose(Combinator, _Node);
-
- function Combinator(opts) {
- var _this;
-
- _this = _Node.call(this, opts) || this;
- _this.type = _types.COMBINATOR;
- return _this;
- }
-
- return Combinator;
-}(_node["default"]);
-
-exports["default"] = Combinator;
-module.exports = exports.default;
-}(combinator$2, combinator$2.exports));
-
-var nesting$1 = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _node = _interopRequireDefault(node$1.exports);
-
-var _types = types;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
-function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
-var Nesting = /*#__PURE__*/function (_Node) {
- _inheritsLoose(Nesting, _Node);
-
- function Nesting(opts) {
- var _this;
-
- _this = _Node.call(this, opts) || this;
- _this.type = _types.NESTING;
- _this.value = '&';
- return _this;
- }
-
- return Nesting;
-}(_node["default"]);
-
-exports["default"] = Nesting;
-module.exports = exports.default;
-}(nesting$1, nesting$1.exports));
-
-var sortAscending = {exports: {}};
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = sortAscending;
-
-function sortAscending(list) {
- return list.sort(function (a, b) {
- return a - b;
- });
-}
-module.exports = exports.default;
-}(sortAscending, sortAscending.exports));
-
-var tokenize = {};
-
-var tokenTypes = {};
-
-tokenTypes.__esModule = true;
-tokenTypes.combinator = tokenTypes.word = tokenTypes.comment = tokenTypes.str = tokenTypes.tab = tokenTypes.newline = tokenTypes.feed = tokenTypes.cr = tokenTypes.backslash = tokenTypes.bang = tokenTypes.slash = tokenTypes.doubleQuote = tokenTypes.singleQuote = tokenTypes.space = tokenTypes.greaterThan = tokenTypes.pipe = tokenTypes.equals = tokenTypes.plus = tokenTypes.caret = tokenTypes.tilde = tokenTypes.dollar = tokenTypes.closeSquare = tokenTypes.openSquare = tokenTypes.closeParenthesis = tokenTypes.openParenthesis = tokenTypes.semicolon = tokenTypes.colon = tokenTypes.comma = tokenTypes.at = tokenTypes.asterisk = tokenTypes.ampersand = void 0;
-var ampersand = 38; // `&`.charCodeAt(0);
-
-tokenTypes.ampersand = ampersand;
-var asterisk = 42; // `*`.charCodeAt(0);
-
-tokenTypes.asterisk = asterisk;
-var at = 64; // `@`.charCodeAt(0);
-
-tokenTypes.at = at;
-var comma = 44; // `,`.charCodeAt(0);
-
-tokenTypes.comma = comma;
-var colon = 58; // `:`.charCodeAt(0);
-
-tokenTypes.colon = colon;
-var semicolon = 59; // `;`.charCodeAt(0);
-
-tokenTypes.semicolon = semicolon;
-var openParenthesis = 40; // `(`.charCodeAt(0);
-
-tokenTypes.openParenthesis = openParenthesis;
-var closeParenthesis = 41; // `)`.charCodeAt(0);
-
-tokenTypes.closeParenthesis = closeParenthesis;
-var openSquare = 91; // `[`.charCodeAt(0);
-
-tokenTypes.openSquare = openSquare;
-var closeSquare = 93; // `]`.charCodeAt(0);
-
-tokenTypes.closeSquare = closeSquare;
-var dollar = 36; // `$`.charCodeAt(0);
-
-tokenTypes.dollar = dollar;
-var tilde = 126; // `~`.charCodeAt(0);
-
-tokenTypes.tilde = tilde;
-var caret = 94; // `^`.charCodeAt(0);
-
-tokenTypes.caret = caret;
-var plus = 43; // `+`.charCodeAt(0);
-
-tokenTypes.plus = plus;
-var equals = 61; // `=`.charCodeAt(0);
-
-tokenTypes.equals = equals;
-var pipe = 124; // `|`.charCodeAt(0);
-
-tokenTypes.pipe = pipe;
-var greaterThan = 62; // `>`.charCodeAt(0);
-
-tokenTypes.greaterThan = greaterThan;
-var space = 32; // ` `.charCodeAt(0);
-
-tokenTypes.space = space;
-var singleQuote = 39; // `'`.charCodeAt(0);
-
-tokenTypes.singleQuote = singleQuote;
-var doubleQuote = 34; // `"`.charCodeAt(0);
-
-tokenTypes.doubleQuote = doubleQuote;
-var slash = 47; // `/`.charCodeAt(0);
-
-tokenTypes.slash = slash;
-var bang = 33; // `!`.charCodeAt(0);
-
-tokenTypes.bang = bang;
-var backslash = 92; // '\\'.charCodeAt(0);
-
-tokenTypes.backslash = backslash;
-var cr = 13; // '\r'.charCodeAt(0);
-
-tokenTypes.cr = cr;
-var feed = 12; // '\f'.charCodeAt(0);
-
-tokenTypes.feed = feed;
-var newline = 10; // '\n'.charCodeAt(0);
-
-tokenTypes.newline = newline;
-var tab = 9; // '\t'.charCodeAt(0);
-// Expose aliases primarily for readability.
-
-tokenTypes.tab = tab;
-var str = singleQuote; // No good single character representation!
-
-tokenTypes.str = str;
-var comment$1 = -1;
-tokenTypes.comment = comment$1;
-var word = -2;
-tokenTypes.word = word;
-var combinator$1 = -3;
-tokenTypes.combinator = combinator$1;
-
-(function (exports) {
-
-exports.__esModule = true;
-exports["default"] = tokenize;
-exports.FIELDS = void 0;
-
-var t = _interopRequireWildcard(tokenTypes);
-
-var _unescapable, _wordDelimiters;
-
-function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
-
-var unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);
-var wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);
-var hex = {};
-var hexChars = "0123456789abcdefABCDEF";
-
-for (var i = 0; i < hexChars.length; i++) {
- hex[hexChars.charCodeAt(i)] = true;
-}
-/**
- * Returns the last index of the bar css word
- * @param {string} css The string in which the word begins
- * @param {number} start The index into the string where word's first letter occurs
- */
-
-
-function consumeWord(css, start) {
- var next = start;
- var code;
-
- do {
- code = css.charCodeAt(next);
-
- if (wordDelimiters[code]) {
- return next - 1;
- } else if (code === t.backslash) {
- next = consumeEscape(css, next) + 1;
- } else {
- // All other characters are part of the word
- next++;
- }
- } while (next < css.length);
-
- return next - 1;
-}
-/**
- * Returns the last index of the escape sequence
- * @param {string} css The string in which the sequence begins
- * @param {number} start The index into the string where escape character (`\`) occurs.
- */
-
-
-function consumeEscape(css, start) {
- var next = start;
- var code = css.charCodeAt(next + 1);
-
- if (unescapable[code]) ; else if (hex[code]) {
- var hexDigits = 0; // consume up to 6 hex chars
-
- do {
- next++;
- hexDigits++;
- code = css.charCodeAt(next + 1);
- } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape
-
-
- if (hexDigits < 6 && code === t.space) {
- next++;
- }
- } else {
- // the next char is part of the current word
- next++;
- }
-
- return next;
-}
-
-var FIELDS = {
- TYPE: 0,
- START_LINE: 1,
- START_COL: 2,
- END_LINE: 3,
- END_COL: 4,
- START_POS: 5,
- END_POS: 6
-};
-exports.FIELDS = FIELDS;
-
-function tokenize(input) {
- var tokens = [];
- var css = input.css.valueOf();
- var _css = css,
- length = _css.length;
- var offset = -1;
- var line = 1;
- var start = 0;
- var end = 0;
- var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;
-
- function unclosed(what, fix) {
- if (input.safe) {
- // fyi: this is never set to true.
- css += fix;
- next = css.length - 1;
- } else {
- throw input.error('Unclosed ' + what, line, start - offset, start);
- }
- }
-
- while (start < length) {
- code = css.charCodeAt(start);
-
- if (code === t.newline) {
- offset = start;
- line += 1;
- }
-
- switch (code) {
- case t.space:
- case t.tab:
- case t.newline:
- case t.cr:
- case t.feed:
- next = start;
-
- do {
- next += 1;
- code = css.charCodeAt(next);
-
- if (code === t.newline) {
- offset = next;
- line += 1;
- }
- } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);
-
- tokenType = t.space;
- endLine = line;
- endColumn = next - offset - 1;
- end = next;
- break;
-
- case t.plus:
- case t.greaterThan:
- case t.tilde:
- case t.pipe:
- next = start;
-
- do {
- next += 1;
- code = css.charCodeAt(next);
- } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);
-
- tokenType = t.combinator;
- endLine = line;
- endColumn = start - offset;
- end = next;
- break;
- // Consume these characters as single tokens.
-
- case t.asterisk:
- case t.ampersand:
- case t.bang:
- case t.comma:
- case t.equals:
- case t.dollar:
- case t.caret:
- case t.openSquare:
- case t.closeSquare:
- case t.colon:
- case t.semicolon:
- case t.openParenthesis:
- case t.closeParenthesis:
- next = start;
- tokenType = code;
- endLine = line;
- endColumn = start - offset;
- end = next + 1;
- break;
-
- case t.singleQuote:
- case t.doubleQuote:
- quote = code === t.singleQuote ? "'" : '"';
- next = start;
-
- do {
- escaped = false;
- next = css.indexOf(quote, next + 1);
-
- if (next === -1) {
- unclosed('quote', quote);
- }
-
- escapePos = next;
-
- while (css.charCodeAt(escapePos - 1) === t.backslash) {
- escapePos -= 1;
- escaped = !escaped;
- }
- } while (escaped);
-
- tokenType = t.str;
- endLine = line;
- endColumn = start - offset;
- end = next + 1;
- break;
-
- default:
- if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {
- next = css.indexOf('*/', start + 2) + 1;
-
- if (next === 0) {
- unclosed('comment', '*/');
- }
-
- content = css.slice(start, next + 1);
- lines = content.split('\n');
- last = lines.length - 1;
-
- if (last > 0) {
- nextLine = line + last;
- nextOffset = next - lines[last].length;
- } else {
- nextLine = line;
- nextOffset = offset;
- }
-
- tokenType = t.comment;
- line = nextLine;
- endLine = nextLine;
- endColumn = next - nextOffset;
- } else if (code === t.slash) {
- next = start;
- tokenType = code;
- endLine = line;
- endColumn = start - offset;
- end = next + 1;
- } else {
- next = consumeWord(css, start);
- tokenType = t.word;
- endLine = line;
- endColumn = next - offset;
- }
-
- end = next + 1;
- break;
- } // Ensure that the token structure remains consistent
-
-
- tokens.push([tokenType, // [0] Token type
- line, // [1] Starting line
- start - offset, // [2] Starting column
- endLine, // [3] Ending line
- endColumn, // [4] Ending column
- start, // [5] Start position / Source index
- end // [6] End position
- ]); // Reset offset for the next token
-
- if (nextOffset) {
- offset = nextOffset;
- nextOffset = null;
- }
-
- start = end;
- }
-
- return tokens;
-}
-}(tokenize));
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _root = _interopRequireDefault(root$1.exports);
-
-var _selector = _interopRequireDefault(selector$1.exports);
-
-var _className = _interopRequireDefault(className$1.exports);
-
-var _comment = _interopRequireDefault(comment$2.exports);
-
-var _id = _interopRequireDefault(id$1.exports);
-
-var _tag = _interopRequireDefault(tag$1.exports);
-
-var _string = _interopRequireDefault(string$1.exports);
-
-var _pseudo = _interopRequireDefault(pseudo$1.exports);
-
-var _attribute = _interopRequireWildcard(attribute$1);
-
-var _universal = _interopRequireDefault(universal$1.exports);
-
-var _combinator = _interopRequireDefault(combinator$2.exports);
-
-var _nesting = _interopRequireDefault(nesting$1.exports);
-
-var _sortAscending = _interopRequireDefault(sortAscending.exports);
-
-var _tokenize = _interopRequireWildcard(tokenize);
-
-var tokens = _interopRequireWildcard(tokenTypes);
-
-var types$1 = _interopRequireWildcard(types);
-
-var _util = util;
-
-var _WHITESPACE_TOKENS, _Object$assign;
-
-function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-var WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);
-var WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));
-
-function tokenStart(token) {
- return {
- line: token[_tokenize.FIELDS.START_LINE],
- column: token[_tokenize.FIELDS.START_COL]
- };
-}
-
-function tokenEnd(token) {
- return {
- line: token[_tokenize.FIELDS.END_LINE],
- column: token[_tokenize.FIELDS.END_COL]
- };
-}
-
-function getSource(startLine, startColumn, endLine, endColumn) {
- return {
- start: {
- line: startLine,
- column: startColumn
- },
- end: {
- line: endLine,
- column: endColumn
- }
- };
-}
-
-function getTokenSource(token) {
- return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);
-}
-
-function getTokenSourceSpan(startToken, endToken) {
- if (!startToken) {
- return undefined;
- }
-
- return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);
-}
-
-function unescapeProp(node, prop) {
- var value = node[prop];
-
- if (typeof value !== "string") {
- return;
- }
-
- if (value.indexOf("\\") !== -1) {
- (0, _util.ensureObject)(node, 'raws');
- node[prop] = (0, _util.unesc)(value);
-
- if (node.raws[prop] === undefined) {
- node.raws[prop] = value;
- }
- }
-
- return node;
-}
-
-function indexesOf(array, item) {
- var i = -1;
- var indexes = [];
-
- while ((i = array.indexOf(item, i + 1)) !== -1) {
- indexes.push(i);
- }
-
- return indexes;
-}
-
-function uniqs() {
- var list = Array.prototype.concat.apply([], arguments);
- return list.filter(function (item, i) {
- return i === list.indexOf(item);
- });
-}
-
-var Parser = /*#__PURE__*/function () {
- function Parser(rule, options) {
- if (options === void 0) {
- options = {};
- }
-
- this.rule = rule;
- this.options = Object.assign({
- lossy: false,
- safe: false
- }, options);
- this.position = 0;
- this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector;
- this.tokens = (0, _tokenize["default"])({
- css: this.css,
- error: this._errorGenerator(),
- safe: this.options.safe
- });
- var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);
- this.root = new _root["default"]({
- source: rootSource
- });
- this.root.errorGenerator = this._errorGenerator();
- var selector = new _selector["default"]({
- source: {
- start: {
- line: 1,
- column: 1
- }
- }
- });
- this.root.append(selector);
- this.current = selector;
- this.loop();
- }
-
- var _proto = Parser.prototype;
-
- _proto._errorGenerator = function _errorGenerator() {
- var _this = this;
-
- return function (message, errorOptions) {
- if (typeof _this.rule === 'string') {
- return new Error(message);
- }
-
- return _this.rule.error(message, errorOptions);
- };
- };
-
- _proto.attribute = function attribute() {
- var attr = [];
- var startingToken = this.currToken;
- this.position++;
-
- while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
- attr.push(this.currToken);
- this.position++;
- }
-
- if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
- return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);
- }
-
- var len = attr.length;
- var node = {
- source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),
- sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
- };
-
- if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {
- return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);
- }
-
- var pos = 0;
- var spaceBefore = '';
- var commentBefore = '';
- var lastAdded = null;
- var spaceAfterMeaningfulToken = false;
-
- while (pos < len) {
- var token = attr[pos];
- var content = this.content(token);
- var next = attr[pos + 1];
-
- switch (token[_tokenize.FIELDS.TYPE]) {
- case tokens.space:
- // if (
- // len === 1 ||
- // pos === 0 && this.content(next) === '|'
- // ) {
- // return this.expected('attribute', token[TOKEN.START_POS], content);
- // }
- spaceAfterMeaningfulToken = true;
-
- if (this.options.lossy) {
- break;
- }
-
- if (lastAdded) {
- (0, _util.ensureObject)(node, 'spaces', lastAdded);
- var prevContent = node.spaces[lastAdded].after || '';
- node.spaces[lastAdded].after = prevContent + content;
- var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;
-
- if (existingComment) {
- node.raws.spaces[lastAdded].after = existingComment + content;
- }
- } else {
- spaceBefore = spaceBefore + content;
- commentBefore = commentBefore + content;
- }
-
- break;
-
- case tokens.asterisk:
- if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
- node.operator = content;
- lastAdded = 'operator';
- } else if ((!node.namespace || lastAdded === "namespace" && !spaceAfterMeaningfulToken) && next) {
- if (spaceBefore) {
- (0, _util.ensureObject)(node, 'spaces', 'attribute');
- node.spaces.attribute.before = spaceBefore;
- spaceBefore = '';
- }
-
- if (commentBefore) {
- (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');
- node.raws.spaces.attribute.before = spaceBefore;
- commentBefore = '';
- }
-
- node.namespace = (node.namespace || "") + content;
- var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;
-
- if (rawValue) {
- node.raws.namespace += content;
- }
-
- lastAdded = 'namespace';
- }
-
- spaceAfterMeaningfulToken = false;
- break;
-
- case tokens.dollar:
- if (lastAdded === "value") {
- var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');
- node.value += "$";
-
- if (oldRawValue) {
- node.raws.value = oldRawValue + "$";
- }
-
- break;
- }
-
- // Falls through
-
- case tokens.caret:
- if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
- node.operator = content;
- lastAdded = 'operator';
- }
-
- spaceAfterMeaningfulToken = false;
- break;
-
- case tokens.combinator:
- if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {
- node.operator = content;
- lastAdded = 'operator';
- }
-
- if (content !== '|') {
- spaceAfterMeaningfulToken = false;
- break;
- }
-
- if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
- node.operator = content;
- lastAdded = 'operator';
- } else if (!node.namespace && !node.attribute) {
- node.namespace = true;
- }
-
- spaceAfterMeaningfulToken = false;
- break;
-
- case tokens.word:
- if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.
- !node.operator && !node.namespace) {
- node.namespace = content;
- lastAdded = 'namespace';
- } else if (!node.attribute || lastAdded === "attribute" && !spaceAfterMeaningfulToken) {
- if (spaceBefore) {
- (0, _util.ensureObject)(node, 'spaces', 'attribute');
- node.spaces.attribute.before = spaceBefore;
- spaceBefore = '';
- }
-
- if (commentBefore) {
- (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');
- node.raws.spaces.attribute.before = commentBefore;
- commentBefore = '';
- }
-
- node.attribute = (node.attribute || "") + content;
-
- var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;
-
- if (_rawValue) {
- node.raws.attribute += content;
- }
-
- lastAdded = 'attribute';
- } else if (!node.value && node.value !== "" || lastAdded === "value" && !spaceAfterMeaningfulToken) {
- var _unescaped = (0, _util.unesc)(content);
-
- var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';
-
- var oldValue = node.value || '';
- node.value = oldValue + _unescaped;
- node.quoteMark = null;
-
- if (_unescaped !== content || _oldRawValue) {
- (0, _util.ensureObject)(node, 'raws');
- node.raws.value = (_oldRawValue || oldValue) + content;
- }
-
- lastAdded = 'value';
- } else {
- var insensitive = content === 'i' || content === "I";
-
- if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {
- node.insensitive = insensitive;
-
- if (!insensitive || content === "I") {
- (0, _util.ensureObject)(node, 'raws');
- node.raws.insensitiveFlag = content;
- }
-
- lastAdded = 'insensitive';
-
- if (spaceBefore) {
- (0, _util.ensureObject)(node, 'spaces', 'insensitive');
- node.spaces.insensitive.before = spaceBefore;
- spaceBefore = '';
- }
-
- if (commentBefore) {
- (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');
- node.raws.spaces.insensitive.before = commentBefore;
- commentBefore = '';
- }
- } else if (node.value || node.value === '') {
- lastAdded = 'value';
- node.value += content;
-
- if (node.raws.value) {
- node.raws.value += content;
- }
- }
- }
-
- spaceAfterMeaningfulToken = false;
- break;
-
- case tokens.str:
- if (!node.attribute || !node.operator) {
- return this.error("Expected an attribute followed by an operator preceding the string.", {
- index: token[_tokenize.FIELDS.START_POS]
- });
- }
-
- var _unescapeValue = (0, _attribute.unescapeValue)(content),
- unescaped = _unescapeValue.unescaped,
- quoteMark = _unescapeValue.quoteMark;
-
- node.value = unescaped;
- node.quoteMark = quoteMark;
- lastAdded = 'value';
- (0, _util.ensureObject)(node, 'raws');
- node.raws.value = content;
- spaceAfterMeaningfulToken = false;
- break;
-
- case tokens.equals:
- if (!node.attribute) {
- return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);
- }
-
- if (node.value) {
- return this.error('Unexpected "=" found; an operator was already defined.', {
- index: token[_tokenize.FIELDS.START_POS]
- });
- }
-
- node.operator = node.operator ? node.operator + content : content;
- lastAdded = 'operator';
- spaceAfterMeaningfulToken = false;
- break;
-
- case tokens.comment:
- if (lastAdded) {
- if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {
- var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || '';
- var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment;
- (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded);
- node.raws.spaces[lastAdded].after = rawLastComment + content;
- } else {
- var lastValue = node[lastAdded] || '';
- var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue;
- (0, _util.ensureObject)(node, 'raws');
- node.raws[lastAdded] = rawLastValue + content;
- }
- } else {
- commentBefore = commentBefore + content;
- }
-
- break;
-
- default:
- return this.error("Unexpected \"" + content + "\" found.", {
- index: token[_tokenize.FIELDS.START_POS]
- });
- }
-
- pos++;
- }
-
- unescapeProp(node, "attribute");
- unescapeProp(node, "namespace");
- this.newNode(new _attribute["default"](node));
- this.position++;
- }
- /**
- * return a node containing meaningless garbage up to (but not including) the specified token position.
- * if the token position is negative, all remaining tokens are consumed.
- *
- * This returns an array containing a single string node if all whitespace,
- * otherwise an array of comment nodes with space before and after.
- *
- * These tokens are not added to the current selector, the caller can add them or use them to amend
- * a previous node's space metadata.
- *
- * In lossy mode, this returns only comments.
- */
- ;
-
- _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {
- if (stopPosition < 0) {
- stopPosition = this.tokens.length;
- }
-
- var startPosition = this.position;
- var nodes = [];
- var space = "";
- var lastComment = undefined;
-
- do {
- if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {
- if (!this.options.lossy) {
- space += this.content();
- }
- } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {
- var spaces = {};
-
- if (space) {
- spaces.before = space;
- space = "";
- }
-
- lastComment = new _comment["default"]({
- value: this.content(),
- source: getTokenSource(this.currToken),
- sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],
- spaces: spaces
- });
- nodes.push(lastComment);
- }
- } while (++this.position < stopPosition);
-
- if (space) {
- if (lastComment) {
- lastComment.spaces.after = space;
- } else if (!this.options.lossy) {
- var firstToken = this.tokens[startPosition];
- var lastToken = this.tokens[this.position - 1];
- nodes.push(new _string["default"]({
- value: '',
- source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),
- sourceIndex: firstToken[_tokenize.FIELDS.START_POS],
- spaces: {
- before: space,
- after: ''
- }
- }));
- }
- }
-
- return nodes;
- }
- /**
- *
- * @param {*} nodes
- */
- ;
-
- _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {
- var _this2 = this;
-
- if (requiredSpace === void 0) {
- requiredSpace = false;
- }
-
- var space = "";
- var rawSpace = "";
- nodes.forEach(function (n) {
- var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);
-
- var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);
-
- space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);
- rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);
- });
-
- if (rawSpace === space) {
- rawSpace = undefined;
- }
-
- var result = {
- space: space,
- rawSpace: rawSpace
- };
- return result;
- };
-
- _proto.isNamedCombinator = function isNamedCombinator(position) {
- if (position === void 0) {
- position = this.position;
- }
-
- return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;
- };
-
- _proto.namedCombinator = function namedCombinator() {
- if (this.isNamedCombinator()) {
- var nameRaw = this.content(this.tokens[this.position + 1]);
- var name = (0, _util.unesc)(nameRaw).toLowerCase();
- var raws = {};
-
- if (name !== nameRaw) {
- raws.value = "/" + nameRaw + "/";
- }
-
- var node = new _combinator["default"]({
- value: "/" + name + "/",
- source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),
- sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],
- raws: raws
- });
- this.position = this.position + 3;
- return node;
- } else {
- this.unexpected();
- }
- };
-
- _proto.combinator = function combinator() {
- var _this3 = this;
-
- if (this.content() === '|') {
- return this.namespace();
- } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.
-
-
- var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);
-
- if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {
- var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
-
- if (nodes.length > 0) {
- var last = this.current.last;
-
- if (last) {
- var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),
- space = _this$convertWhitespa.space,
- rawSpace = _this$convertWhitespa.rawSpace;
-
- if (rawSpace !== undefined) {
- last.rawSpaceAfter += rawSpace;
- }
-
- last.spaces.after += space;
- } else {
- nodes.forEach(function (n) {
- return _this3.newNode(n);
- });
- }
- }
-
- return;
- }
-
- var firstToken = this.currToken;
- var spaceOrDescendantSelectorNodes = undefined;
-
- if (nextSigTokenPos > this.position) {
- spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
- }
-
- var node;
-
- if (this.isNamedCombinator()) {
- node = this.namedCombinator();
- } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {
- node = new _combinator["default"]({
- value: this.content(),
- source: getTokenSource(this.currToken),
- sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]
- });
- this.position++;
- } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) ; else if (!spaceOrDescendantSelectorNodes) {
- this.unexpected();
- }
-
- if (node) {
- if (spaceOrDescendantSelectorNodes) {
- var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),
- _space = _this$convertWhitespa2.space,
- _rawSpace = _this$convertWhitespa2.rawSpace;
-
- node.spaces.before = _space;
- node.rawSpaceBefore = _rawSpace;
- }
- } else {
- // descendant combinator
- var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),
- _space2 = _this$convertWhitespa3.space,
- _rawSpace2 = _this$convertWhitespa3.rawSpace;
-
- if (!_rawSpace2) {
- _rawSpace2 = _space2;
- }
-
- var spaces = {};
- var raws = {
- spaces: {}
- };
-
- if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {
- spaces.before = _space2.slice(0, _space2.length - 1);
- raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);
- } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {
- spaces.after = _space2.slice(1);
- raws.spaces.after = _rawSpace2.slice(1);
- } else {
- raws.value = _rawSpace2;
- }
-
- node = new _combinator["default"]({
- value: ' ',
- source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),
- sourceIndex: firstToken[_tokenize.FIELDS.START_POS],
- spaces: spaces,
- raws: raws
- });
- }
-
- if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {
- node.spaces.after = this.optionalSpace(this.content());
- this.position++;
- }
-
- return this.newNode(node);
- };
-
- _proto.comma = function comma() {
- if (this.position === this.tokens.length - 1) {
- this.root.trailingComma = true;
- this.position++;
- return;
- }
-
- this.current._inferEndPosition();
-
- var selector = new _selector["default"]({
- source: {
- start: tokenStart(this.tokens[this.position + 1])
- }
- });
- this.current.parent.append(selector);
- this.current = selector;
- this.position++;
- };
-
- _proto.comment = function comment() {
- var current = this.currToken;
- this.newNode(new _comment["default"]({
- value: this.content(),
- source: getTokenSource(current),
- sourceIndex: current[_tokenize.FIELDS.START_POS]
- }));
- this.position++;
- };
-
- _proto.error = function error(message, opts) {
- throw this.root.error(message, opts);
- };
-
- _proto.missingBackslash = function missingBackslash() {
- return this.error('Expected a backslash preceding the semicolon.', {
- index: this.currToken[_tokenize.FIELDS.START_POS]
- });
- };
-
- _proto.missingParenthesis = function missingParenthesis() {
- return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);
- };
-
- _proto.missingSquareBracket = function missingSquareBracket() {
- return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);
- };
-
- _proto.unexpected = function unexpected() {
- return this.error("Unexpected '" + this.content() + "'. Escaping special characters with \\ may help.", this.currToken[_tokenize.FIELDS.START_POS]);
- };
-
- _proto.namespace = function namespace() {
- var before = this.prevToken && this.content(this.prevToken) || true;
-
- if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {
- this.position++;
- return this.word(before);
- } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {
- this.position++;
- return this.universal(before);
- }
- };
-
- _proto.nesting = function nesting() {
- if (this.nextToken) {
- var nextContent = this.content(this.nextToken);
-
- if (nextContent === "|") {
- this.position++;
- return;
- }
- }
-
- var current = this.currToken;
- this.newNode(new _nesting["default"]({
- value: this.content(),
- source: getTokenSource(current),
- sourceIndex: current[_tokenize.FIELDS.START_POS]
- }));
- this.position++;
- };
-
- _proto.parentheses = function parentheses() {
- var last = this.current.last;
- var unbalanced = 1;
- this.position++;
-
- if (last && last.type === types$1.PSEUDO) {
- var selector = new _selector["default"]({
- source: {
- start: tokenStart(this.tokens[this.position - 1])
- }
- });
- var cache = this.current;
- last.append(selector);
- this.current = selector;
-
- while (this.position < this.tokens.length && unbalanced) {
- if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
- unbalanced++;
- }
-
- if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
- unbalanced--;
- }
-
- if (unbalanced) {
- this.parse();
- } else {
- this.current.source.end = tokenEnd(this.currToken);
- this.current.parent.source.end = tokenEnd(this.currToken);
- this.position++;
- }
- }
-
- this.current = cache;
- } else {
- // I think this case should be an error. It's used to implement a basic parse of media queries
- // but I don't think it's a good idea.
- var parenStart = this.currToken;
- var parenValue = "(";
- var parenEnd;
-
- while (this.position < this.tokens.length && unbalanced) {
- if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
- unbalanced++;
- }
-
- if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
- unbalanced--;
- }
-
- parenEnd = this.currToken;
- parenValue += this.parseParenthesisToken(this.currToken);
- this.position++;
- }
-
- if (last) {
- last.appendToPropertyAndEscape("value", parenValue, parenValue);
- } else {
- this.newNode(new _string["default"]({
- value: parenValue,
- source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),
- sourceIndex: parenStart[_tokenize.FIELDS.START_POS]
- }));
- }
- }
-
- if (unbalanced) {
- return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);
- }
- };
-
- _proto.pseudo = function pseudo() {
- var _this4 = this;
-
- var pseudoStr = '';
- var startingToken = this.currToken;
-
- while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {
- pseudoStr += this.content();
- this.position++;
- }
-
- if (!this.currToken) {
- return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);
- }
-
- if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {
- this.splitWord(false, function (first, length) {
- pseudoStr += first;
-
- _this4.newNode(new _pseudo["default"]({
- value: pseudoStr,
- source: getTokenSourceSpan(startingToken, _this4.currToken),
- sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
- }));
-
- if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
- _this4.error('Misplaced parenthesis.', {
- index: _this4.nextToken[_tokenize.FIELDS.START_POS]
- });
- }
- });
- } else {
- return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);
- }
- };
-
- _proto.space = function space() {
- var content = this.content(); // Handle space before and after the selector
-
- if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {
- return node.type === 'comment';
- })) {
- this.spaces = this.optionalSpace(content);
- this.position++;
- } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
- this.current.last.spaces.after = this.optionalSpace(content);
- this.position++;
- } else {
- this.combinator();
- }
- };
-
- _proto.string = function string() {
- var current = this.currToken;
- this.newNode(new _string["default"]({
- value: this.content(),
- source: getTokenSource(current),
- sourceIndex: current[_tokenize.FIELDS.START_POS]
- }));
- this.position++;
- };
-
- _proto.universal = function universal(namespace) {
- var nextToken = this.nextToken;
-
- if (nextToken && this.content(nextToken) === '|') {
- this.position++;
- return this.namespace();
- }
-
- var current = this.currToken;
- this.newNode(new _universal["default"]({
- value: this.content(),
- source: getTokenSource(current),
- sourceIndex: current[_tokenize.FIELDS.START_POS]
- }), namespace);
- this.position++;
- };
-
- _proto.splitWord = function splitWord(namespace, firstCallback) {
- var _this5 = this;
-
- var nextToken = this.nextToken;
- var word = this.content();
-
- while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {
- this.position++;
- var current = this.content();
- word += current;
-
- if (current.lastIndexOf('\\') === current.length - 1) {
- var next = this.nextToken;
-
- if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {
- word += this.requiredSpace(this.content(next));
- this.position++;
- }
- }
-
- nextToken = this.nextToken;
- }
-
- var hasClass = indexesOf(word, '.').filter(function (i) {
- return word[i - 1] !== '\\';
- });
- var hasId = indexesOf(word, '#').filter(function (i) {
- return word[i - 1] !== '\\';
- }); // Eliminate Sass interpolations from the list of id indexes
-
- var interpolations = indexesOf(word, '#{');
-
- if (interpolations.length) {
- hasId = hasId.filter(function (hashIndex) {
- return !~interpolations.indexOf(hashIndex);
- });
- }
-
- var indices = (0, _sortAscending["default"])(uniqs([0].concat(hasClass, hasId)));
- indices.forEach(function (ind, i) {
- var index = indices[i + 1] || word.length;
- var value = word.slice(ind, index);
-
- if (i === 0 && firstCallback) {
- return firstCallback.call(_this5, value, indices.length);
- }
-
- var node;
- var current = _this5.currToken;
- var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];
- var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));
-
- if (~hasClass.indexOf(ind)) {
- var classNameOpts = {
- value: value.slice(1),
- source: source,
- sourceIndex: sourceIndex
- };
- node = new _className["default"](unescapeProp(classNameOpts, "value"));
- } else if (~hasId.indexOf(ind)) {
- var idOpts = {
- value: value.slice(1),
- source: source,
- sourceIndex: sourceIndex
- };
- node = new _id["default"](unescapeProp(idOpts, "value"));
- } else {
- var tagOpts = {
- value: value,
- source: source,
- sourceIndex: sourceIndex
- };
- unescapeProp(tagOpts, "value");
- node = new _tag["default"](tagOpts);
- }
-
- _this5.newNode(node, namespace); // Ensure that the namespace is used only once
-
-
- namespace = null;
- });
- this.position++;
- };
-
- _proto.word = function word(namespace) {
- var nextToken = this.nextToken;
-
- if (nextToken && this.content(nextToken) === '|') {
- this.position++;
- return this.namespace();
- }
-
- return this.splitWord(namespace);
- };
-
- _proto.loop = function loop() {
- while (this.position < this.tokens.length) {
- this.parse(true);
- }
-
- this.current._inferEndPosition();
-
- return this.root;
- };
-
- _proto.parse = function parse(throwOnParenthesis) {
- switch (this.currToken[_tokenize.FIELDS.TYPE]) {
- case tokens.space:
- this.space();
- break;
-
- case tokens.comment:
- this.comment();
- break;
-
- case tokens.openParenthesis:
- this.parentheses();
- break;
-
- case tokens.closeParenthesis:
- if (throwOnParenthesis) {
- this.missingParenthesis();
- }
-
- break;
-
- case tokens.openSquare:
- this.attribute();
- break;
-
- case tokens.dollar:
- case tokens.caret:
- case tokens.equals:
- case tokens.word:
- this.word();
- break;
-
- case tokens.colon:
- this.pseudo();
- break;
-
- case tokens.comma:
- this.comma();
- break;
-
- case tokens.asterisk:
- this.universal();
- break;
-
- case tokens.ampersand:
- this.nesting();
- break;
-
- case tokens.slash:
- case tokens.combinator:
- this.combinator();
- break;
-
- case tokens.str:
- this.string();
- break;
- // These cases throw; no break needed.
-
- case tokens.closeSquare:
- this.missingSquareBracket();
-
- case tokens.semicolon:
- this.missingBackslash();
-
- default:
- this.unexpected();
- }
- }
- /**
- * Helpers
- */
- ;
-
- _proto.expected = function expected(description, index, found) {
- if (Array.isArray(description)) {
- var last = description.pop();
- description = description.join(', ') + " or " + last;
- }
-
- var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';
-
- if (!found) {
- return this.error("Expected " + an + " " + description + ".", {
- index: index
- });
- }
-
- return this.error("Expected " + an + " " + description + ", found \"" + found + "\" instead.", {
- index: index
- });
- };
-
- _proto.requiredSpace = function requiredSpace(space) {
- return this.options.lossy ? ' ' : space;
- };
-
- _proto.optionalSpace = function optionalSpace(space) {
- return this.options.lossy ? '' : space;
- };
-
- _proto.lossySpace = function lossySpace(space, required) {
- if (this.options.lossy) {
- return required ? ' ' : '';
- } else {
- return space;
- }
- };
-
- _proto.parseParenthesisToken = function parseParenthesisToken(token) {
- var content = this.content(token);
-
- if (token[_tokenize.FIELDS.TYPE] === tokens.space) {
- return this.requiredSpace(content);
- } else {
- return content;
- }
- };
-
- _proto.newNode = function newNode(node, namespace) {
- if (namespace) {
- if (/^ +$/.test(namespace)) {
- if (!this.options.lossy) {
- this.spaces = (this.spaces || '') + namespace;
- }
-
- namespace = true;
- }
-
- node.namespace = namespace;
- unescapeProp(node, "namespace");
- }
-
- if (this.spaces) {
- node.spaces.before = this.spaces;
- this.spaces = '';
- }
-
- return this.current.append(node);
- };
-
- _proto.content = function content(token) {
- if (token === void 0) {
- token = this.currToken;
- }
-
- return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);
- };
-
- /**
- * returns the index of the next non-whitespace, non-comment token.
- * returns -1 if no meaningful token is found.
- */
- _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {
- if (startPosition === void 0) {
- startPosition = this.position + 1;
- }
-
- var searchPosition = startPosition;
-
- while (searchPosition < this.tokens.length) {
- if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {
- searchPosition++;
- continue;
- } else {
- return searchPosition;
- }
- }
-
- return -1;
- };
-
- _createClass(Parser, [{
- key: "currToken",
- get: function get() {
- return this.tokens[this.position];
- }
- }, {
- key: "nextToken",
- get: function get() {
- return this.tokens[this.position + 1];
- }
- }, {
- key: "prevToken",
- get: function get() {
- return this.tokens[this.position - 1];
- }
- }]);
-
- return Parser;
-}();
-
-exports["default"] = Parser;
-module.exports = exports.default;
-}(parser, parser.exports));
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _parser = _interopRequireDefault(parser.exports);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-var Processor = /*#__PURE__*/function () {
- function Processor(func, options) {
- this.func = func || function noop() {};
-
- this.funcRes = null;
- this.options = options;
- }
-
- var _proto = Processor.prototype;
-
- _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {
- if (options === void 0) {
- options = {};
- }
-
- var merged = Object.assign({}, this.options, options);
-
- if (merged.updateSelector === false) {
- return false;
- } else {
- return typeof rule !== "string";
- }
- };
-
- _proto._isLossy = function _isLossy(options) {
- if (options === void 0) {
- options = {};
- }
-
- var merged = Object.assign({}, this.options, options);
-
- if (merged.lossless === false) {
- return true;
- } else {
- return false;
- }
- };
-
- _proto._root = function _root(rule, options) {
- if (options === void 0) {
- options = {};
- }
-
- var parser = new _parser["default"](rule, this._parseOptions(options));
- return parser.root;
- };
-
- _proto._parseOptions = function _parseOptions(options) {
- return {
- lossy: this._isLossy(options)
- };
- };
-
- _proto._run = function _run(rule, options) {
- var _this = this;
-
- if (options === void 0) {
- options = {};
- }
-
- return new Promise(function (resolve, reject) {
- try {
- var root = _this._root(rule, options);
-
- Promise.resolve(_this.func(root)).then(function (transform) {
- var string = undefined;
-
- if (_this._shouldUpdateSelector(rule, options)) {
- string = root.toString();
- rule.selector = string;
- }
-
- return {
- transform: transform,
- root: root,
- string: string
- };
- }).then(resolve, reject);
- } catch (e) {
- reject(e);
- return;
- }
- });
- };
-
- _proto._runSync = function _runSync(rule, options) {
- if (options === void 0) {
- options = {};
- }
-
- var root = this._root(rule, options);
-
- var transform = this.func(root);
-
- if (transform && typeof transform.then === "function") {
- throw new Error("Selector processor returned a promise to a synchronous call.");
- }
-
- var string = undefined;
-
- if (options.updateSelector && typeof rule !== "string") {
- string = root.toString();
- rule.selector = string;
- }
-
- return {
- transform: transform,
- root: root,
- string: string
- };
- }
- /**
- * Process rule into a selector AST.
- *
- * @param rule {postcss.Rule | string} The css selector to be processed
- * @param options The options for processing
- * @returns {Promise<parser.Root>} The AST of the selector after processing it.
- */
- ;
-
- _proto.ast = function ast(rule, options) {
- return this._run(rule, options).then(function (result) {
- return result.root;
- });
- }
- /**
- * Process rule into a selector AST synchronously.
- *
- * @param rule {postcss.Rule | string} The css selector to be processed
- * @param options The options for processing
- * @returns {parser.Root} The AST of the selector after processing it.
- */
- ;
-
- _proto.astSync = function astSync(rule, options) {
- return this._runSync(rule, options).root;
- }
- /**
- * Process a selector into a transformed value asynchronously
- *
- * @param rule {postcss.Rule | string} The css selector to be processed
- * @param options The options for processing
- * @returns {Promise<any>} The value returned by the processor.
- */
- ;
-
- _proto.transform = function transform(rule, options) {
- return this._run(rule, options).then(function (result) {
- return result.transform;
- });
- }
- /**
- * Process a selector into a transformed value synchronously.
- *
- * @param rule {postcss.Rule | string} The css selector to be processed
- * @param options The options for processing
- * @returns {any} The value returned by the processor.
- */
- ;
-
- _proto.transformSync = function transformSync(rule, options) {
- return this._runSync(rule, options).transform;
- }
- /**
- * Process a selector into a new selector string asynchronously.
- *
- * @param rule {postcss.Rule | string} The css selector to be processed
- * @param options The options for processing
- * @returns {string} the selector after processing.
- */
- ;
-
- _proto.process = function process(rule, options) {
- return this._run(rule, options).then(function (result) {
- return result.string || result.root.toString();
- });
- }
- /**
- * Process a selector into a new selector string synchronously.
- *
- * @param rule {postcss.Rule | string} The css selector to be processed
- * @param options The options for processing
- * @returns {string} the selector after processing.
- */
- ;
-
- _proto.processSync = function processSync(rule, options) {
- var result = this._runSync(rule, options);
-
- return result.string || result.root.toString();
- };
-
- return Processor;
-}();
-
-exports["default"] = Processor;
-module.exports = exports.default;
-}(processor, processor.exports));
-
-var selectors = {};
-
-var constructors = {};
-
-constructors.__esModule = true;
-constructors.universal = constructors.tag = constructors.string = constructors.selector = constructors.root = constructors.pseudo = constructors.nesting = constructors.id = constructors.comment = constructors.combinator = constructors.className = constructors.attribute = void 0;
-
-var _attribute = _interopRequireDefault$2(attribute$1);
-
-var _className = _interopRequireDefault$2(className$1.exports);
-
-var _combinator = _interopRequireDefault$2(combinator$2.exports);
-
-var _comment = _interopRequireDefault$2(comment$2.exports);
-
-var _id = _interopRequireDefault$2(id$1.exports);
-
-var _nesting = _interopRequireDefault$2(nesting$1.exports);
-
-var _pseudo = _interopRequireDefault$2(pseudo$1.exports);
-
-var _root = _interopRequireDefault$2(root$1.exports);
-
-var _selector = _interopRequireDefault$2(selector$1.exports);
-
-var _string = _interopRequireDefault$2(string$1.exports);
-
-var _tag = _interopRequireDefault$2(tag$1.exports);
-
-var _universal = _interopRequireDefault$2(universal$1.exports);
-
-function _interopRequireDefault$2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-var attribute = function attribute(opts) {
- return new _attribute["default"](opts);
-};
-
-constructors.attribute = attribute;
-
-var className = function className(opts) {
- return new _className["default"](opts);
-};
-
-constructors.className = className;
-
-var combinator = function combinator(opts) {
- return new _combinator["default"](opts);
-};
-
-constructors.combinator = combinator;
-
-var comment = function comment(opts) {
- return new _comment["default"](opts);
-};
-
-constructors.comment = comment;
-
-var id = function id(opts) {
- return new _id["default"](opts);
-};
-
-constructors.id = id;
-
-var nesting = function nesting(opts) {
- return new _nesting["default"](opts);
-};
-
-constructors.nesting = nesting;
-
-var pseudo = function pseudo(opts) {
- return new _pseudo["default"](opts);
-};
-
-constructors.pseudo = pseudo;
-
-var root = function root(opts) {
- return new _root["default"](opts);
-};
-
-constructors.root = root;
-
-var selector = function selector(opts) {
- return new _selector["default"](opts);
-};
-
-constructors.selector = selector;
-
-var string = function string(opts) {
- return new _string["default"](opts);
-};
-
-constructors.string = string;
-
-var tag = function tag(opts) {
- return new _tag["default"](opts);
-};
-
-constructors.tag = tag;
-
-var universal = function universal(opts) {
- return new _universal["default"](opts);
-};
-
-constructors.universal = universal;
-
-var guards = {};
-
-guards.__esModule = true;
-guards.isNode = isNode;
-guards.isPseudoElement = isPseudoElement;
-guards.isPseudoClass = isPseudoClass;
-guards.isContainer = isContainer;
-guards.isNamespace = isNamespace;
-guards.isUniversal = guards.isTag = guards.isString = guards.isSelector = guards.isRoot = guards.isPseudo = guards.isNesting = guards.isIdentifier = guards.isComment = guards.isCombinator = guards.isClassName = guards.isAttribute = void 0;
-
-var _types = types;
-
-var _IS_TYPE;
-
-var IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);
-
-function isNode(node) {
- return typeof node === "object" && IS_TYPE[node.type];
-}
-
-function isNodeType(type, node) {
- return isNode(node) && node.type === type;
-}
-
-var isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);
-guards.isAttribute = isAttribute;
-var isClassName = isNodeType.bind(null, _types.CLASS);
-guards.isClassName = isClassName;
-var isCombinator = isNodeType.bind(null, _types.COMBINATOR);
-guards.isCombinator = isCombinator;
-var isComment = isNodeType.bind(null, _types.COMMENT);
-guards.isComment = isComment;
-var isIdentifier = isNodeType.bind(null, _types.ID);
-guards.isIdentifier = isIdentifier;
-var isNesting = isNodeType.bind(null, _types.NESTING);
-guards.isNesting = isNesting;
-var isPseudo = isNodeType.bind(null, _types.PSEUDO);
-guards.isPseudo = isPseudo;
-var isRoot = isNodeType.bind(null, _types.ROOT);
-guards.isRoot = isRoot;
-var isSelector = isNodeType.bind(null, _types.SELECTOR);
-guards.isSelector = isSelector;
-var isString = isNodeType.bind(null, _types.STRING);
-guards.isString = isString;
-var isTag = isNodeType.bind(null, _types.TAG);
-guards.isTag = isTag;
-var isUniversal = isNodeType.bind(null, _types.UNIVERSAL);
-guards.isUniversal = isUniversal;
-
-function isPseudoElement(node) {
- return isPseudo(node) && node.value && (node.value.startsWith("::") || node.value.toLowerCase() === ":before" || node.value.toLowerCase() === ":after");
-}
-
-function isPseudoClass(node) {
- return isPseudo(node) && !isPseudoElement(node);
-}
-
-function isContainer(node) {
- return !!(isNode(node) && node.walk);
-}
-
-function isNamespace(node) {
- return isAttribute(node) || isTag(node);
-}
-
-(function (exports) {
-
-exports.__esModule = true;
-
-var _types = types;
-
-Object.keys(_types).forEach(function (key) {
- if (key === "default" || key === "__esModule") return;
- if (key in exports && exports[key] === _types[key]) return;
- exports[key] = _types[key];
-});
-
-var _constructors = constructors;
-
-Object.keys(_constructors).forEach(function (key) {
- if (key === "default" || key === "__esModule") return;
- if (key in exports && exports[key] === _constructors[key]) return;
- exports[key] = _constructors[key];
-});
-
-var _guards = guards;
-
-Object.keys(_guards).forEach(function (key) {
- if (key === "default" || key === "__esModule") return;
- if (key in exports && exports[key] === _guards[key]) return;
- exports[key] = _guards[key];
-});
-}(selectors));
-
-(function (module, exports) {
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _processor = _interopRequireDefault(processor.exports);
-
-var selectors$1 = _interopRequireWildcard(selectors);
-
-function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-var parser = function parser(processor) {
- return new _processor["default"](processor);
-};
-
-Object.assign(parser, selectors$1);
-delete parser.__esModule;
-var _default = parser;
-exports["default"] = _default;
-module.exports = exports.default;
-}(dist, dist.exports));
-
-const matchValueName = /[$]?[\w-]+/g;
-
-const replaceValueSymbols$2 = (value, replacements) => {
- let matches;
-
- while ((matches = matchValueName.exec(value))) {
- const replacement = replacements[matches[0]];
-
- if (replacement) {
- value =
- value.slice(0, matches.index) +
- replacement +
- value.slice(matchValueName.lastIndex);
-
- matchValueName.lastIndex -= matches[0].length - replacement.length;
- }
- }
-
- return value;
-};
-
-var replaceValueSymbols_1 = replaceValueSymbols$2;
-
-const replaceValueSymbols$1 = replaceValueSymbols_1;
-
-const replaceSymbols$1 = (css, replacements) => {
- css.walk((node) => {
- if (node.type === "decl" && node.value) {
- node.value = replaceValueSymbols$1(node.value.toString(), replacements);
- } else if (node.type === "rule" && node.selector) {
- node.selector = replaceValueSymbols$1(
- node.selector.toString(),
- replacements
- );
- } else if (node.type === "atrule" && node.params) {
- node.params = replaceValueSymbols$1(node.params.toString(), replacements);
- }
- });
-};
-
-var replaceSymbols_1 = replaceSymbols$1;
-
-const importPattern = /^:import\(("[^"]*"|'[^']*'|[^"']+)\)$/;
-const balancedQuotes = /^("[^"]*"|'[^']*'|[^"']+)$/;
-
-const getDeclsObject = (rule) => {
- const object = {};
-
- rule.walkDecls((decl) => {
- const before = decl.raws.before ? decl.raws.before.trim() : "";
-
- object[before + decl.prop] = decl.value;
- });
-
- return object;
-};
-/**
- *
- * @param {string} css
- * @param {boolean} removeRules
- * @param {'auto' | 'rule' | 'at-rule'} mode
- */
-const extractICSS$2 = (css, removeRules = true, mode = "auto") => {
- const icssImports = {};
- const icssExports = {};
-
- function addImports(node, path) {
- const unquoted = path.replace(/'|"/g, "");
- icssImports[unquoted] = Object.assign(
- icssImports[unquoted] || {},
- getDeclsObject(node)
- );
-
- if (removeRules) {
- node.remove();
- }
- }
-
- function addExports(node) {
- Object.assign(icssExports, getDeclsObject(node));
- if (removeRules) {
- node.remove();
- }
- }
-
- css.each((node) => {
- if (node.type === "rule" && mode !== "at-rule") {
- if (node.selector.slice(0, 7) === ":import") {
- const matches = importPattern.exec(node.selector);
-
- if (matches) {
- addImports(node, matches[1]);
- }
- }
-
- if (node.selector === ":export") {
- addExports(node);
- }
- }
-
- if (node.type === "atrule" && mode !== "rule") {
- if (node.name === "icss-import") {
- const matches = balancedQuotes.exec(node.params);
-
- if (matches) {
- addImports(node, matches[1]);
- }
- }
- if (node.name === "icss-export") {
- addExports(node);
- }
- }
- });
-
- return { icssImports, icssExports };
-};
-
-var extractICSS_1 = extractICSS$2;
-
-const createImports = (imports, postcss, mode = "rule") => {
- return Object.keys(imports).map((path) => {
- const aliases = imports[path];
- const declarations = Object.keys(aliases).map((key) =>
- postcss.decl({
- prop: key,
- value: aliases[key],
- raws: { before: "\n " },
- })
- );
-
- const hasDeclarations = declarations.length > 0;
-
- const rule =
- mode === "rule"
- ? postcss.rule({
- selector: `:import('${path}')`,
- raws: { after: hasDeclarations ? "\n" : "" },
- })
- : postcss.atRule({
- name: "icss-import",
- params: `'${path}'`,
- raws: { after: hasDeclarations ? "\n" : "" },
- });
-
- if (hasDeclarations) {
- rule.append(declarations);
- }
-
- return rule;
- });
-};
-
-const createExports = (exports, postcss, mode = "rule") => {
- const declarations = Object.keys(exports).map((key) =>
- postcss.decl({
- prop: key,
- value: exports[key],
- raws: { before: "\n " },
- })
- );
-
- if (declarations.length === 0) {
- return [];
- }
- const rule =
- mode === "rule"
- ? postcss.rule({
- selector: `:export`,
- raws: { after: "\n" },
- })
- : postcss.atRule({
- name: "icss-export",
- raws: { after: "\n" },
- });
-
- rule.append(declarations);
-
- return [rule];
-};
-
-const createICSSRules$1 = (imports, exports, postcss, mode) => [
- ...createImports(imports, postcss, mode),
- ...createExports(exports, postcss, mode),
-];
-
-var createICSSRules_1 = createICSSRules$1;
-
-const replaceValueSymbols = replaceValueSymbols_1;
-const replaceSymbols = replaceSymbols_1;
-const extractICSS$1 = extractICSS_1;
-const createICSSRules = createICSSRules_1;
-
-var src$3 = {
- replaceValueSymbols,
- replaceSymbols,
- extractICSS: extractICSS$1,
- createICSSRules,
-};
-
-const selectorParser$1 = dist.exports;
-const valueParser = index$1.lib;
-const { extractICSS } = src$3;
-
-const isSpacing = (node) => node.type === "combinator" && node.value === " ";
-
-function normalizeNodeArray(nodes) {
- const array = [];
-
- nodes.forEach((x) => {
- if (Array.isArray(x)) {
- normalizeNodeArray(x).forEach((item) => {
- array.push(item);
- });
- } else if (x) {
- array.push(x);
- }
- });
-
- if (array.length > 0 && isSpacing(array[array.length - 1])) {
- array.pop();
- }
- return array;
-}
-
-function localizeNode(rule, mode, localAliasMap) {
- const transform = (node, context) => {
- if (context.ignoreNextSpacing && !isSpacing(node)) {
- throw new Error("Missing whitespace after " + context.ignoreNextSpacing);
- }
-
- if (context.enforceNoSpacing && isSpacing(node)) {
- throw new Error("Missing whitespace before " + context.enforceNoSpacing);
- }
-
- let newNodes;
-
- switch (node.type) {
- case "root": {
- let resultingGlobal;
-
- context.hasPureGlobals = false;
-
- newNodes = node.nodes.map((n) => {
- const nContext = {
- global: context.global,
- lastWasSpacing: true,
- hasLocals: false,
- explicit: false,
- };
-
- n = transform(n, nContext);
-
- if (typeof resultingGlobal === "undefined") {
- resultingGlobal = nContext.global;
- } else if (resultingGlobal !== nContext.global) {
- throw new Error(
- 'Inconsistent rule global/local result in rule "' +
- node +
- '" (multiple selectors must result in the same mode for the rule)'
- );
- }
-
- if (!nContext.hasLocals) {
- context.hasPureGlobals = true;
- }
-
- return n;
- });
-
- context.global = resultingGlobal;
-
- node.nodes = normalizeNodeArray(newNodes);
- break;
- }
- case "selector": {
- newNodes = node.map((childNode) => transform(childNode, context));
-
- node = node.clone();
- node.nodes = normalizeNodeArray(newNodes);
- break;
- }
- case "combinator": {
- if (isSpacing(node)) {
- if (context.ignoreNextSpacing) {
- context.ignoreNextSpacing = false;
- context.lastWasSpacing = false;
- context.enforceNoSpacing = false;
- return null;
- }
- context.lastWasSpacing = true;
- return node;
- }
- break;
- }
- case "pseudo": {
- let childContext;
- const isNested = !!node.length;
- const isScoped = node.value === ":local" || node.value === ":global";
- const isImportExport =
- node.value === ":import" || node.value === ":export";
-
- if (isImportExport) {
- context.hasLocals = true;
- // :local(.foo)
- } else if (isNested) {
- if (isScoped) {
- if (node.nodes.length === 0) {
- throw new Error(`${node.value}() can't be empty`);
- }
-
- if (context.inside) {
- throw new Error(
- `A ${node.value} is not allowed inside of a ${context.inside}(...)`
- );
- }
-
- childContext = {
- global: node.value === ":global",
- inside: node.value,
- hasLocals: false,
- explicit: true,
- };
-
- newNodes = node
- .map((childNode) => transform(childNode, childContext))
- .reduce((acc, next) => acc.concat(next.nodes), []);
-
- if (newNodes.length) {
- const { before, after } = node.spaces;
-
- const first = newNodes[0];
- const last = newNodes[newNodes.length - 1];
-
- first.spaces = { before, after: first.spaces.after };
- last.spaces = { before: last.spaces.before, after };
- }
-
- node = newNodes;
-
- break;
- } else {
- childContext = {
- global: context.global,
- inside: context.inside,
- lastWasSpacing: true,
- hasLocals: false,
- explicit: context.explicit,
- };
- newNodes = node.map((childNode) =>
- transform(childNode, childContext)
- );
-
- node = node.clone();
- node.nodes = normalizeNodeArray(newNodes);
-
- if (childContext.hasLocals) {
- context.hasLocals = true;
- }
- }
- break;
-
- //:local .foo .bar
- } else if (isScoped) {
- if (context.inside) {
- throw new Error(
- `A ${node.value} is not allowed inside of a ${context.inside}(...)`
- );
- }
-
- const addBackSpacing = !!node.spaces.before;
-
- context.ignoreNextSpacing = context.lastWasSpacing
- ? node.value
- : false;
-
- context.enforceNoSpacing = context.lastWasSpacing
- ? false
- : node.value;
-
- context.global = node.value === ":global";
- context.explicit = true;
-
- // because this node has spacing that is lost when we remove it
- // we make up for it by adding an extra combinator in since adding
- // spacing on the parent selector doesn't work
- return addBackSpacing
- ? selectorParser$1.combinator({ value: " " })
- : null;
- }
- break;
- }
- case "id":
- case "class": {
- if (!node.value) {
- throw new Error("Invalid class or id selector syntax");
- }
-
- if (context.global) {
- break;
- }
-
- const isImportedValue = localAliasMap.has(node.value);
- const isImportedWithExplicitScope = isImportedValue && context.explicit;
-
- if (!isImportedValue || isImportedWithExplicitScope) {
- const innerNode = node.clone();
- innerNode.spaces = { before: "", after: "" };
-
- node = selectorParser$1.pseudo({
- value: ":local",
- nodes: [innerNode],
- spaces: node.spaces,
- });
-
- context.hasLocals = true;
- }
-
- break;
- }
- }
-
- context.lastWasSpacing = false;
- context.ignoreNextSpacing = false;
- context.enforceNoSpacing = false;
-
- return node;
- };
-
- const rootContext = {
- global: mode === "global",
- hasPureGlobals: false,
- };
-
- rootContext.selector = selectorParser$1((root) => {
- transform(root, rootContext);
- }).processSync(rule, { updateSelector: false, lossless: true });
-
- return rootContext;
-}
-
-function localizeDeclNode(node, context) {
- switch (node.type) {
- case "word":
- if (context.localizeNextItem) {
- if (!context.localAliasMap.has(node.value)) {
- node.value = ":local(" + node.value + ")";
- context.localizeNextItem = false;
- }
- }
- break;
-
- case "function":
- if (
- context.options &&
- context.options.rewriteUrl &&
- node.value.toLowerCase() === "url"
- ) {
- node.nodes.map((nestedNode) => {
- if (nestedNode.type !== "string" && nestedNode.type !== "word") {
- return;
- }
-
- let newUrl = context.options.rewriteUrl(
- context.global,
- nestedNode.value
- );
-
- switch (nestedNode.type) {
- case "string":
- if (nestedNode.quote === "'") {
- newUrl = newUrl.replace(/(\\)/g, "\\$1").replace(/'/g, "\\'");
- }
-
- if (nestedNode.quote === '"') {
- newUrl = newUrl.replace(/(\\)/g, "\\$1").replace(/"/g, '\\"');
- }
-
- break;
- case "word":
- newUrl = newUrl.replace(/("|'|\)|\\)/g, "\\$1");
- break;
- }
-
- nestedNode.value = newUrl;
- });
- }
- break;
- }
- return node;
-}
-
-function isWordAFunctionArgument(wordNode, functionNode) {
- return functionNode
- ? functionNode.nodes.some(
- (functionNodeChild) =>
- functionNodeChild.sourceIndex === wordNode.sourceIndex
- )
- : false;
-}
-
-function localizeDeclarationValues(localize, declaration, context) {
- const valueNodes = valueParser(declaration.value);
-
- valueNodes.walk((node, index, nodes) => {
- const subContext = {
- options: context.options,
- global: context.global,
- localizeNextItem: localize && !context.global,
- localAliasMap: context.localAliasMap,
- };
- nodes[index] = localizeDeclNode(node, subContext);
- });
-
- declaration.value = valueNodes.toString();
-}
-
-function localizeDeclaration(declaration, context) {
- const isAnimation = /animation$/i.test(declaration.prop);
-
- if (isAnimation) {
- const validIdent = /^-?[_a-z][_a-z0-9-]*$/i;
-
- /*
- The spec defines some keywords that you can use to describe properties such as the timing
- function. These are still valid animation names, so as long as there is a property that accepts
- a keyword, it is given priority. Only when all the properties that can take a keyword are
- exhausted can the animation name be set to the keyword. I.e.
-
- animation: infinite infinite;
-
- The animation will repeat an infinite number of times from the first argument, and will have an
- animation name of infinite from the second.
- */
- const animationKeywords = {
- $alternate: 1,
- "$alternate-reverse": 1,
- $backwards: 1,
- $both: 1,
- $ease: 1,
- "$ease-in": 1,
- "$ease-in-out": 1,
- "$ease-out": 1,
- $forwards: 1,
- $infinite: 1,
- $linear: 1,
- $none: Infinity, // No matter how many times you write none, it will never be an animation name
- $normal: 1,
- $paused: 1,
- $reverse: 1,
- $running: 1,
- "$step-end": 1,
- "$step-start": 1,
- $initial: Infinity,
- $inherit: Infinity,
- $unset: Infinity,
- };
- let parsedAnimationKeywords = {};
- let stepsFunctionNode = null;
- const valueNodes = valueParser(declaration.value).walk((node) => {
- /* If div-token appeared (represents as comma ','), a possibility of an animation-keywords should be reflesh. */
- if (node.type === "div") {
- parsedAnimationKeywords = {};
- }
- if (node.type === "function" && node.value.toLowerCase() === "steps") {
- stepsFunctionNode = node;
- }
- const value =
- node.type === "word" &&
- !isWordAFunctionArgument(node, stepsFunctionNode)
- ? node.value.toLowerCase()
- : null;
-
- let shouldParseAnimationName = false;
-
- if (value && validIdent.test(value)) {
- if ("$" + value in animationKeywords) {
- parsedAnimationKeywords["$" + value] =
- "$" + value in parsedAnimationKeywords
- ? parsedAnimationKeywords["$" + value] + 1
- : 0;
-
- shouldParseAnimationName =
- parsedAnimationKeywords["$" + value] >=
- animationKeywords["$" + value];
- } else {
- shouldParseAnimationName = true;
- }
- }
-
- const subContext = {
- options: context.options,
- global: context.global,
- localizeNextItem: shouldParseAnimationName && !context.global,
- localAliasMap: context.localAliasMap,
- };
- return localizeDeclNode(node, subContext);
- });
-
- declaration.value = valueNodes.toString();
-
- return;
- }
-
- const isAnimationName = /animation(-name)?$/i.test(declaration.prop);
-
- if (isAnimationName) {
- return localizeDeclarationValues(true, declaration, context);
- }
-
- const hasUrl = /url\(/i.test(declaration.value);
-
- if (hasUrl) {
- return localizeDeclarationValues(false, declaration, context);
- }
-}
-
-src$4.exports = (options = {}) => {
- if (
- options &&
- options.mode &&
- options.mode !== "global" &&
- options.mode !== "local" &&
- options.mode !== "pure"
- ) {
- throw new Error(
- 'options.mode must be either "global", "local" or "pure" (default "local")'
- );
- }
-
- const pureMode = options && options.mode === "pure";
- const globalMode = options && options.mode === "global";
-
- return {
- postcssPlugin: "postcss-modules-local-by-default",
- prepare() {
- const localAliasMap = new Map();
-
- return {
- Once(root) {
- const { icssImports } = extractICSS(root, false);
-
- Object.keys(icssImports).forEach((key) => {
- Object.keys(icssImports[key]).forEach((prop) => {
- localAliasMap.set(prop, icssImports[key][prop]);
- });
- });
-
- root.walkAtRules((atRule) => {
- if (/keyframes$/i.test(atRule.name)) {
- const globalMatch = /^\s*:global\s*\((.+)\)\s*$/.exec(
- atRule.params
- );
- const localMatch = /^\s*:local\s*\((.+)\)\s*$/.exec(
- atRule.params
- );
-
- let globalKeyframes = globalMode;
-
- if (globalMatch) {
- if (pureMode) {
- throw atRule.error(
- "@keyframes :global(...) is not allowed in pure mode"
- );
- }
- atRule.params = globalMatch[1];
- globalKeyframes = true;
- } else if (localMatch) {
- atRule.params = localMatch[0];
- globalKeyframes = false;
- } else if (!globalMode) {
- if (atRule.params && !localAliasMap.has(atRule.params)) {
- atRule.params = ":local(" + atRule.params + ")";
- }
- }
-
- atRule.walkDecls((declaration) => {
- localizeDeclaration(declaration, {
- localAliasMap,
- options: options,
- global: globalKeyframes,
- });
- });
- } else if (atRule.nodes) {
- atRule.nodes.forEach((declaration) => {
- if (declaration.type === "decl") {
- localizeDeclaration(declaration, {
- localAliasMap,
- options: options,
- global: globalMode,
- });
- }
- });
- }
- });
-
- root.walkRules((rule) => {
- if (
- rule.parent &&
- rule.parent.type === "atrule" &&
- /keyframes$/i.test(rule.parent.name)
- ) {
- // ignore keyframe rules
- return;
- }
-
- const context = localizeNode(rule, options.mode, localAliasMap);
-
- context.options = options;
- context.localAliasMap = localAliasMap;
-
- if (pureMode && context.hasPureGlobals) {
- throw rule.error(
- 'Selector "' +
- rule.selector +
- '" is not pure ' +
- "(pure selectors must contain at least one local class or id)"
- );
- }
-
- rule.selector = context.selector;
-
- // Less-syntax mixins parse as rules with no nodes
- if (rule.nodes) {
- rule.nodes.forEach((declaration) =>
- localizeDeclaration(declaration, context)
- );
- }
- });
- },
- };
- },
- };
-};
-src$4.exports.postcss = true;
-
-var src$2 = {exports: {}};
-
-const PERMANENT_MARKER = 2;
-const TEMPORARY_MARKER = 1;
-
-function createError(node, graph) {
- const er = new Error("Nondeterministic import's order");
-
- const related = graph[node];
- const relatedNode = related.find(
- (relatedNode) => graph[relatedNode].indexOf(node) > -1
- );
-
- er.nodes = [node, relatedNode];
-
- return er;
-}
-
-function walkGraph(node, graph, state, result, strict) {
- if (state[node] === PERMANENT_MARKER) {
- return;
- }
-
- if (state[node] === TEMPORARY_MARKER) {
- if (strict) {
- return createError(node, graph);
- }
-
- return;
- }
-
- state[node] = TEMPORARY_MARKER;
-
- const children = graph[node];
- const length = children.length;
-
- for (let i = 0; i < length; ++i) {
- const error = walkGraph(children[i], graph, state, result, strict);
-
- if (error instanceof Error) {
- return error;
- }
- }
-
- state[node] = PERMANENT_MARKER;
-
- result.push(node);
-}
-
-function topologicalSort$1(graph, strict) {
- const result = [];
- const state = {};
-
- const nodes = Object.keys(graph);
- const length = nodes.length;
-
- for (let i = 0; i < length; ++i) {
- const er = walkGraph(nodes[i], graph, state, result, strict);
-
- if (er instanceof Error) {
- return er;
- }
- }
-
- return result;
-}
-
-var topologicalSort_1 = topologicalSort$1;
-
-const topologicalSort = topologicalSort_1;
-
-const matchImports$1 = /^(.+?)\s+from\s+(?:"([^"]+)"|'([^']+)'|(global))$/;
-const icssImport = /^:import\((?:"([^"]+)"|'([^']+)')\)/;
-
-const VISITED_MARKER = 1;
-
-/**
- * :import('G') {}
- *
- * Rule
- * composes: ... from 'A'
- * composes: ... from 'B'
-
- * Rule
- * composes: ... from 'A'
- * composes: ... from 'A'
- * composes: ... from 'C'
- *
- * Results in:
- *
- * graph: {
- * G: [],
- * A: [],
- * B: ['A'],
- * C: ['A'],
- * }
- */
-function addImportToGraph(importId, parentId, graph, visited) {
- const siblingsId = parentId + "_" + "siblings";
- const visitedId = parentId + "_" + importId;
-
- if (visited[visitedId] !== VISITED_MARKER) {
- if (!Array.isArray(visited[siblingsId])) {
- visited[siblingsId] = [];
- }
-
- const siblings = visited[siblingsId];
-
- if (Array.isArray(graph[importId])) {
- graph[importId] = graph[importId].concat(siblings);
- } else {
- graph[importId] = siblings.slice();
- }
-
- visited[visitedId] = VISITED_MARKER;
-
- siblings.push(importId);
- }
-}
-
-src$2.exports = (options = {}) => {
- let importIndex = 0;
- const createImportedName =
- typeof options.createImportedName !== "function"
- ? (importName /*, path*/) =>
- `i__imported_${importName.replace(/\W/g, "_")}_${importIndex++}`
- : options.createImportedName;
- const failOnWrongOrder = options.failOnWrongOrder;
-
- return {
- postcssPlugin: "postcss-modules-extract-imports",
- prepare() {
- const graph = {};
- const visited = {};
- const existingImports = {};
- const importDecls = {};
- const imports = {};
-
- return {
- Once(root, postcss) {
- // Check the existing imports order and save refs
- root.walkRules((rule) => {
- const matches = icssImport.exec(rule.selector);
-
- if (matches) {
- const [, /*match*/ doubleQuotePath, singleQuotePath] = matches;
- const importPath = doubleQuotePath || singleQuotePath;
-
- addImportToGraph(importPath, "root", graph, visited);
-
- existingImports[importPath] = rule;
- }
- });
-
- root.walkDecls(/^composes$/, (declaration) => {
- const matches = declaration.value.match(matchImports$1);
-
- if (!matches) {
- return;
- }
-
- let tmpSymbols;
- let [
- ,
- /*match*/ symbols,
- doubleQuotePath,
- singleQuotePath,
- global,
- ] = matches;
-
- if (global) {
- // Composing globals simply means changing these classes to wrap them in global(name)
- tmpSymbols = symbols.split(/\s+/).map((s) => `global(${s})`);
- } else {
- const importPath = doubleQuotePath || singleQuotePath;
-
- let parent = declaration.parent;
- let parentIndexes = "";
-
- while (parent.type !== "root") {
- parentIndexes =
- parent.parent.index(parent) + "_" + parentIndexes;
- parent = parent.parent;
- }
-
- const { selector } = declaration.parent;
- const parentRule = `_${parentIndexes}${selector}`;
-
- addImportToGraph(importPath, parentRule, graph, visited);
-
- importDecls[importPath] = declaration;
- imports[importPath] = imports[importPath] || {};
-
- tmpSymbols = symbols.split(/\s+/).map((s) => {
- if (!imports[importPath][s]) {
- imports[importPath][s] = createImportedName(s, importPath);
- }
-
- return imports[importPath][s];
- });
- }
-
- declaration.value = tmpSymbols.join(" ");
- });
-
- const importsOrder = topologicalSort(graph, failOnWrongOrder);
-
- if (importsOrder instanceof Error) {
- const importPath = importsOrder.nodes.find((importPath) =>
- // eslint-disable-next-line no-prototype-builtins
- importDecls.hasOwnProperty(importPath)
- );
- const decl = importDecls[importPath];
-
- throw decl.error(
- "Failed to resolve order of composed modules " +
- importsOrder.nodes
- .map((importPath) => "`" + importPath + "`")
- .join(", ") +
- ".",
- {
- plugin: "postcss-modules-extract-imports",
- word: "composes",
- }
- );
- }
-
- let lastImportRule;
-
- importsOrder.forEach((path) => {
- const importedSymbols = imports[path];
- let rule = existingImports[path];
-
- if (!rule && importedSymbols) {
- rule = postcss.rule({
- selector: `:import("${path}")`,
- raws: { after: "\n" },
- });
-
- if (lastImportRule) {
- root.insertAfter(lastImportRule, rule);
- } else {
- root.prepend(rule);
- }
- }
-
- lastImportRule = rule;
-
- if (!importedSymbols) {
- return;
- }
-
- Object.keys(importedSymbols).forEach((importedSymbol) => {
- rule.append(
- postcss.decl({
- value: importedSymbol,
- prop: importedSymbols[importedSymbol],
- raws: { before: "\n " },
- })
- );
- });
- });
- },
- };
- },
- };
-};
-
-src$2.exports.postcss = true;
-
-const selectorParser = dist.exports;
-
-const hasOwnProperty = Object.prototype.hasOwnProperty;
-
-function getSingleLocalNamesForComposes(root) {
- return root.nodes.map((node) => {
- if (node.type !== "selector" || node.nodes.length !== 1) {
- throw new Error(
- `composition is only allowed when selector is single :local class name not in "${root}"`
- );
- }
-
- node = node.nodes[0];
-
- if (
- node.type !== "pseudo" ||
- node.value !== ":local" ||
- node.nodes.length !== 1
- ) {
- throw new Error(
- 'composition is only allowed when selector is single :local class name not in "' +
- root +
- '", "' +
- node +
- '" is weird'
- );
- }
-
- node = node.first;
-
- if (node.type !== "selector" || node.length !== 1) {
- throw new Error(
- 'composition is only allowed when selector is single :local class name not in "' +
- root +
- '", "' +
- node +
- '" is weird'
- );
- }
-
- node = node.first;
-
- if (node.type !== "class") {
- // 'id' is not possible, because you can't compose ids
- throw new Error(
- 'composition is only allowed when selector is single :local class name not in "' +
- root +
- '", "' +
- node +
- '" is weird'
- );
- }
-
- return node.value;
- });
-}
-
-const whitespace = "[\\x20\\t\\r\\n\\f]";
-const unescapeRegExp = new RegExp(
- "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)",
- "ig"
-);
-
-function unescape(str) {
- return str.replace(unescapeRegExp, (_, escaped, escapedWhitespace) => {
- const high = "0x" + escaped - 0x10000;
-
- // NaN means non-codepoint
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace
- ? escaped
- : high < 0
- ? // BMP codepoint
- String.fromCharCode(high + 0x10000)
- : // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00);
- });
-}
-
-const plugin = (options = {}) => {
- const generateScopedName =
- (options && options.generateScopedName) || plugin.generateScopedName;
- const generateExportEntry =
- (options && options.generateExportEntry) || plugin.generateExportEntry;
- const exportGlobals = options && options.exportGlobals;
-
- return {
- postcssPlugin: "postcss-modules-scope",
- Once(root, { rule }) {
- const exports = Object.create(null);
-
- function exportScopedName(name, rawName) {
- const scopedName = generateScopedName(
- rawName ? rawName : name,
- root.source.input.from,
- root.source.input.css
- );
- const exportEntry = generateExportEntry(
- rawName ? rawName : name,
- scopedName,
- root.source.input.from,
- root.source.input.css
- );
- const { key, value } = exportEntry;
-
- exports[key] = exports[key] || [];
-
- if (exports[key].indexOf(value) < 0) {
- exports[key].push(value);
- }
-
- return scopedName;
- }
-
- function localizeNode(node) {
- switch (node.type) {
- case "selector":
- node.nodes = node.map(localizeNode);
- return node;
- case "class":
- return selectorParser.className({
- value: exportScopedName(
- node.value,
- node.raws && node.raws.value ? node.raws.value : null
- ),
- });
- case "id": {
- return selectorParser.id({
- value: exportScopedName(
- node.value,
- node.raws && node.raws.value ? node.raws.value : null
- ),
- });
- }
- }
-
- throw new Error(
- `${node.type} ("${node}") is not allowed in a :local block`
- );
- }
-
- function traverseNode(node) {
- switch (node.type) {
- case "pseudo":
- if (node.value === ":local") {
- if (node.nodes.length !== 1) {
- throw new Error('Unexpected comma (",") in :local block');
- }
-
- const selector = localizeNode(node.first);
- // move the spaces that were around the psuedo selector to the first
- // non-container node
- selector.first.spaces = node.spaces;
-
- const nextNode = node.next();
-
- if (
- nextNode &&
- nextNode.type === "combinator" &&
- nextNode.value === " " &&
- /\\[A-F0-9]{1,6}$/.test(selector.last.value)
- ) {
- selector.last.spaces.after = " ";
- }
-
- node.replaceWith(selector);
-
- return;
- }
- /* falls through */
- case "root":
- case "selector": {
- node.each(traverseNode);
- break;
- }
- case "id":
- case "class":
- if (exportGlobals) {
- exports[node.value] = [node.value];
- }
- break;
- }
- return node;
- }
-
- // Find any :import and remember imported names
- const importedNames = {};
-
- root.walkRules(/^:import\(.+\)$/, (rule) => {
- rule.walkDecls((decl) => {
- importedNames[decl.prop] = true;
- });
- });
-
- // Find any :local selectors
- root.walkRules((rule) => {
- let parsedSelector = selectorParser().astSync(rule);
-
- rule.selector = traverseNode(parsedSelector.clone()).toString();
-
- rule.walkDecls(/composes|compose-with/i, (decl) => {
- const localNames = getSingleLocalNamesForComposes(parsedSelector);
- const classes = decl.value.split(/\s+/);
-
- classes.forEach((className) => {
- const global = /^global\(([^)]+)\)$/.exec(className);
-
- if (global) {
- localNames.forEach((exportedName) => {
- exports[exportedName].push(global[1]);
- });
- } else if (hasOwnProperty.call(importedNames, className)) {
- localNames.forEach((exportedName) => {
- exports[exportedName].push(className);
- });
- } else if (hasOwnProperty.call(exports, className)) {
- localNames.forEach((exportedName) => {
- exports[className].forEach((item) => {
- exports[exportedName].push(item);
- });
- });
- } else {
- throw decl.error(
- `referenced class name "${className}" in ${decl.prop} not found`
- );
- }
- });
-
- decl.remove();
- });
-
- // Find any :local values
- rule.walkDecls((decl) => {
- if (!/:local\s*\((.+?)\)/.test(decl.value)) {
- return;
- }
-
- let tokens = decl.value.split(/(,|'[^']*'|"[^"]*")/);
-
- tokens = tokens.map((token, idx) => {
- if (idx === 0 || tokens[idx - 1] === ",") {
- let result = token;
-
- const localMatch = /:local\s*\((.+?)\)/.exec(token);
-
- if (localMatch) {
- const input = localMatch.input;
- const matchPattern = localMatch[0];
- const matchVal = localMatch[1];
- const newVal = exportScopedName(matchVal);
-
- result = input.replace(matchPattern, newVal);
- } else {
- return token;
- }
-
- return result;
- } else {
- return token;
- }
- });
-
- decl.value = tokens.join("");
- });
- });
-
- // Find any :local keyframes
- root.walkAtRules(/keyframes$/i, (atRule) => {
- const localMatch = /^\s*:local\s*\((.+?)\)\s*$/.exec(atRule.params);
-
- if (!localMatch) {
- return;
- }
-
- atRule.params = exportScopedName(localMatch[1]);
- });
-
- // If we found any :locals, insert an :export rule
- const exportedNames = Object.keys(exports);
-
- if (exportedNames.length > 0) {
- const exportRule = rule({ selector: ":export" });
-
- exportedNames.forEach((exportedName) =>
- exportRule.append({
- prop: exportedName,
- value: exports[exportedName].join(" "),
- raws: { before: "\n " },
- })
- );
-
- root.append(exportRule);
- }
- },
- };
-};
-
-plugin.postcss = true;
-
-plugin.generateScopedName = function (name, path) {
- const sanitisedPath = path
- .replace(/\.[^./\\]+$/, "")
- .replace(/[\W_]+/g, "_")
- .replace(/^_|_$/g, "");
-
- return `_${sanitisedPath}__${name}`.trim();
-};
-
-plugin.generateExportEntry = function (name, scopedName) {
- return {
- key: unescape(name),
- value: unescape(scopedName),
- };
-};
-
-var src$1 = plugin;
-
-var src = {exports: {}};
-
-const ICSSUtils = src$3;
-
-const matchImports = /^(.+?|\([\s\S]+?\))\s+from\s+("[^"]*"|'[^']*'|[\w-]+)$/;
-const matchValueDefinition = /(?:\s+|^)([\w-]+):?(.*?)$/;
-const matchImport = /^([\w-]+)(?:\s+as\s+([\w-]+))?/;
-
-src.exports = (options) => {
- let importIndex = 0;
- const createImportedName =
- (options && options.createImportedName) ||
- ((importName /*, path*/) =>
- `i__const_${importName.replace(/\W/g, "_")}_${importIndex++}`);
-
- return {
- postcssPlugin: "postcss-modules-values",
- prepare(result) {
- const importAliases = [];
- const definitions = {};
-
- return {
- Once(root, postcss) {
- root.walkAtRules(/value/i, (atRule) => {
- const matches = atRule.params.match(matchImports);
-
- if (matches) {
- let [, /*match*/ aliases, path] = matches;
-
- // We can use constants for path names
- if (definitions[path]) {
- path = definitions[path];
- }
-
- const imports = aliases
- .replace(/^\(\s*([\s\S]+)\s*\)$/, "$1")
- .split(/\s*,\s*/)
- .map((alias) => {
- const tokens = matchImport.exec(alias);
-
- if (tokens) {
- const [, /*match*/ theirName, myName = theirName] = tokens;
- const importedName = createImportedName(myName);
- definitions[myName] = importedName;
- return { theirName, importedName };
- } else {
- throw new Error(`@import statement "${alias}" is invalid!`);
- }
- });
-
- importAliases.push({ path, imports });
-
- atRule.remove();
-
- return;
- }
-
- if (atRule.params.indexOf("@value") !== -1) {
- result.warn("Invalid value definition: " + atRule.params);
- }
-
- let [, key, value] = `${atRule.params}${atRule.raws.between}`.match(
- matchValueDefinition
- );
-
- const normalizedValue = value.replace(/\/\*((?!\*\/).*?)\*\//g, "");
-
- if (normalizedValue.length === 0) {
- result.warn("Invalid value definition: " + atRule.params);
- atRule.remove();
-
- return;
- }
-
- let isOnlySpace = /^\s+$/.test(normalizedValue);
-
- if (!isOnlySpace) {
- value = value.trim();
- }
-
- // Add to the definitions, knowing that values can refer to each other
- definitions[key] = ICSSUtils.replaceValueSymbols(
- value,
- definitions
- );
-
- atRule.remove();
- });
-
- /* If we have no definitions, don't continue */
- if (!Object.keys(definitions).length) {
- return;
- }
-
- /* Perform replacements */
- ICSSUtils.replaceSymbols(root, definitions);
-
- /* We want to export anything defined by now, but don't add it to the CSS yet or it well get picked up by the replacement stuff */
- const exportDeclarations = Object.keys(definitions).map((key) =>
- postcss.decl({
- value: definitions[key],
- prop: key,
- raws: { before: "\n " },
- })
- );
-
- /* Add export rules if any */
- if (exportDeclarations.length > 0) {
- const exportRule = postcss.rule({
- selector: ":export",
- raws: { after: "\n" },
- });
-
- exportRule.append(exportDeclarations);
-
- root.prepend(exportRule);
- }
-
- /* Add import rules */
- importAliases.reverse().forEach(({ path, imports }) => {
- const importRule = postcss.rule({
- selector: `:import(${path})`,
- raws: { after: "\n" },
- });
-
- imports.forEach(({ theirName, importedName }) => {
- importRule.append({
- value: theirName,
- prop: importedName,
- raws: { before: "\n " },
- });
- });
-
- root.prepend(importRule);
- });
- },
- };
- },
- };
-};
-
-src.exports.postcss = true;
-
-Object.defineProperty(behaviours$1, "__esModule", {
- value: true
-});
-behaviours$1.behaviours = undefined;
-behaviours$1.getDefaultPlugins = getDefaultPlugins;
-behaviours$1.isValidBehaviour = isValidBehaviour;
-
-var _postcssModulesLocalByDefault = src$4.exports;
-
-var _postcssModulesLocalByDefault2 = _interopRequireDefault$1(_postcssModulesLocalByDefault);
-
-var _postcssModulesExtractImports = src$2.exports;
-
-var _postcssModulesExtractImports2 = _interopRequireDefault$1(_postcssModulesExtractImports);
-
-var _postcssModulesScope = src$1;
-
-var _postcssModulesScope2 = _interopRequireDefault$1(_postcssModulesScope);
-
-var _postcssModulesValues = src.exports;
-
-var _postcssModulesValues2 = _interopRequireDefault$1(_postcssModulesValues);
-
-function _interopRequireDefault$1(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-const behaviours = behaviours$1.behaviours = {
- LOCAL: "local",
- GLOBAL: "global"
-};
-
-function getDefaultPlugins({
- behaviour,
- generateScopedName,
- exportGlobals
-}) {
- const scope = (0, _postcssModulesScope2.default)({ generateScopedName, exportGlobals });
-
- const plugins = {
- [behaviours.LOCAL]: [_postcssModulesValues2.default, _postcssModulesLocalByDefault2.default, _postcssModulesExtractImports2.default, scope],
- [behaviours.GLOBAL]: [_postcssModulesValues2.default, _postcssModulesExtractImports2.default, scope]
- };
-
- return plugins[behaviour];
-}
-
-function isValidBehaviour(behaviour) {
- return Object.keys(behaviours).map(key => behaviours[key]).indexOf(behaviour) > -1;
-}
-
-var _postcss = require$$0__default;
-
-var _postcss2 = _interopRequireDefault(_postcss);
-
-var _lodash = lodash_camelcase;
-
-var _lodash2 = _interopRequireDefault(_lodash);
-
-var _genericNames = genericNames;
-
-var _genericNames2 = _interopRequireDefault(_genericNames);
-
-var _unquote = unquote$1;
-
-var _unquote2 = _interopRequireDefault(_unquote);
-
-var _parser = parser$1;
-
-var _parser2 = _interopRequireDefault(_parser);
-
-var _loader = loader;
-
-var _loader2 = _interopRequireDefault(_loader);
-
-var _generateScopedName = generateScopedName$1;
-
-var _generateScopedName2 = _interopRequireDefault(_generateScopedName);
-
-var _saveJSON = saveJSON$1;
-
-var _saveJSON2 = _interopRequireDefault(_saveJSON);
-
-var _behaviours = behaviours$1;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
-
-const PLUGIN_NAME = "postcss-modules";
-
-function getDefaultScopeBehaviour(opts) {
- if (opts.scopeBehaviour && (0, _behaviours.isValidBehaviour)(opts.scopeBehaviour)) {
- return opts.scopeBehaviour;
- }
-
- return _behaviours.behaviours.LOCAL;
-}
-
-function getScopedNameGenerator(opts) {
- const scopedNameGenerator = opts.generateScopedName || _generateScopedName2.default;
-
- if (typeof scopedNameGenerator === "function") return scopedNameGenerator;
- return (0, _genericNames2.default)(scopedNameGenerator, {
- context: process.cwd(),
- hashPrefix: opts.hashPrefix
- });
-}
-
-function getLoader(opts, plugins) {
- const root = typeof opts.root === "undefined" ? "/" : opts.root;
- return typeof opts.Loader === "function" ? new opts.Loader(root, plugins) : new _loader2.default(root, plugins);
-}
-
-function isGlobalModule(globalModules, inputFile) {
- return globalModules.some(regex => inputFile.match(regex));
-}
-
-function getDefaultPluginsList(opts, inputFile) {
- const globalModulesList = opts.globalModulePaths || null;
- const exportGlobals = opts.exportGlobals || false;
- const defaultBehaviour = getDefaultScopeBehaviour(opts);
- const generateScopedName = getScopedNameGenerator(opts);
-
- if (globalModulesList && isGlobalModule(globalModulesList, inputFile)) {
- return (0, _behaviours.getDefaultPlugins)({
- behaviour: _behaviours.behaviours.GLOBAL,
- generateScopedName,
- exportGlobals
- });
- }
-
- return (0, _behaviours.getDefaultPlugins)({
- behaviour: defaultBehaviour,
- generateScopedName,
- exportGlobals
- });
-}
-
-function isOurPlugin(plugin) {
- return plugin.postcssPlugin === PLUGIN_NAME;
-}
-
-function dashesCamelCase(string) {
- return string.replace(/-+(\w)/g, (_, firstLetter) => firstLetter.toUpperCase());
-}
-
-build$1.exports = (opts = {}) => {
- return {
- postcssPlugin: PLUGIN_NAME,
- OnceExit(css, { result }) {
- return _asyncToGenerator(function* () {
- const getJSON = opts.getJSON || _saveJSON2.default;
- const inputFile = css.source.input.file;
- const pluginList = getDefaultPluginsList(opts, inputFile);
- const resultPluginIndex = result.processor.plugins.findIndex(function (plugin) {
- return isOurPlugin(plugin);
- });
- if (resultPluginIndex === -1) {
- throw new Error('Plugin missing from options.');
- }
- const earlierPlugins = result.processor.plugins.slice(0, resultPluginIndex);
- const loaderPlugins = [...earlierPlugins, ...pluginList];
- const loader = getLoader(opts, loaderPlugins);
- const fetcher = function fetcher(file, relativeTo, depTrace) {
- const unquoteFile = (0, _unquote2.default)(file);
- const resolvedResult = typeof opts.resolve === 'function' && opts.resolve(unquoteFile);
- const resolvedFile = resolvedResult instanceof Promise ? resolvedResult : Promise.resolve(resolvedResult);
-
- return resolvedFile.then(function (f) {
- return loader.fetch.call(loader, `"${f || unquoteFile}"`, relativeTo, depTrace);
- });
- };
- const parser = new _parser2.default(fetcher);
-
- yield (0, _postcss2.default)([...pluginList, parser.plugin()]).process(css, {
- from: inputFile
- });
-
- const out = loader.finalSource;
- if (out) css.prepend(out);
-
- if (opts.localsConvention) {
- const isFunc = typeof opts.localsConvention === "function";
-
- parser.exportTokens = Object.entries(parser.exportTokens).reduce(function (tokens, [className, value]) {
- if (isFunc) {
- tokens[opts.localsConvention(className, value, inputFile)] = value;
-
- return tokens;
- }
-
- switch (opts.localsConvention) {
- case "camelCase":
- tokens[className] = value;
- tokens[(0, _lodash2.default)(className)] = value;
-
- break;
- case "camelCaseOnly":
- tokens[(0, _lodash2.default)(className)] = value;
-
- break;
- case "dashes":
- tokens[className] = value;
- tokens[dashesCamelCase(className)] = value;
-
- break;
- case "dashesOnly":
- tokens[dashesCamelCase(className)] = value;
-
- break;
- }
-
- return tokens;
- }, {});
- }
-
- result.messages.push({
- type: "export",
- plugin: "postcss-modules",
- exportTokens: parser.exportTokens
- });
-
- // getJSON may return a promise
- return getJSON(css.source.input.file, parser.exportTokens, result.opts.to);
- })();
- }
- };
-};
-
-var postcss = build$1.exports.postcss = true;
-
-var build = build$1.exports;
-
-var index = /*#__PURE__*/_mergeNamespaces({
- __proto__: null,
- 'default': build,
- postcss: postcss
-}, [build$1.exports]);
-
-exports.index = index;
-//# sourceMappingURL=dep-dab866a6.js.map
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-dab866a6.js.map b/packages/astro/vendor/vite/dist/node/chunks/dep-dab866a6.js.map
deleted file mode 100755
index bc125df26..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-dab866a6.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"dep-dab866a6.js","sources":["../../../../../node_modules/.pnpm/lodash.camelcase@4.3.0/node_modules/lodash.camelcase/index.js","../../../../../node_modules/.pnpm/json5@1.0.1/node_modules/json5/lib/unicode.js","../../../../../node_modules/.pnpm/json5@1.0.1/node_modules/json5/lib/util.js","../../../../../node_modules/.pnpm/json5@1.0.1/node_modules/json5/lib/parse.js","../../../../../node_modules/.pnpm/json5@1.0.1/node_modules/json5/lib/stringify.js","../../../../../node_modules/.pnpm/json5@1.0.1/node_modules/json5/lib/index.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/parseQuery.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/getOptions.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/stringifyRequest.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/getRemainingRequest.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/getCurrentRequest.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/isUrlRequest.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/urlToRequest.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/parseString.js","../../../../../node_modules/.pnpm/big.js@5.2.2/node_modules/big.js/big.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/getHashDigest.js","../../../../../node_modules/.pnpm/emojis-list@3.0.0/node_modules/emojis-list/index.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/interpolateName.js","../../../../../node_modules/.pnpm/loader-utils@1.4.0/node_modules/loader-utils/lib/index.js","../../../../../node_modules/.pnpm/generic-names@2.0.1/node_modules/generic-names/index.js","../../../../../node_modules/.pnpm/postcss-modules@4.2.2_postcss@8.3.8/node_modules/postcss-modules/build/unquote/index.js","../../../../../node_modules/.pnpm/icss-replace-symbols@1.1.0/node_modules/icss-replace-symbols/lib/index.js","../../../../../node_modules/.pnpm/postcss-modules@4.2.2_postcss@8.3.8/node_modules/postcss-modules/build/css-loader-core/parser.js","../../../../../node_modules/.pnpm/postcss-modules@4.2.2_postcss@8.3.8/node_modules/postcss-modules/build/css-loader-core/loader.js","../../../../../node_modules/.pnpm/string-hash@1.1.3/node_modules/string-hash/index.js","../../../../../node_modules/.pnpm/postcss-modules@4.2.2_postcss@8.3.8/node_modules/postcss-modules/build/generateScopedName.js","../../../../../node_modules/.pnpm/postcss-modules@4.2.2_postcss@8.3.8/node_modules/postcss-modules/build/saveJSON.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/util/unesc.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/util/getProp.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/util/ensureObject.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/util/stripComments.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/util/index.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/node.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/types.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/container.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/root.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/selector.js","../../../../../node_modules/.pnpm/cssesc@3.0.0/node_modules/cssesc/cssesc.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/className.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/comment.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/id.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/namespace.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/tag.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/string.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/pseudo.js","../../../../../node_modules/.pnpm/util-deprecate@1.0.2/node_modules/util-deprecate/node.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/attribute.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/universal.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/combinator.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/nesting.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/sortAscending.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/tokenTypes.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/tokenize.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/parser.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/processor.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/constructors.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/guards.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/selectors/index.js","../../../../../node_modules/.pnpm/postcss-selector-parser@6.0.6/node_modules/postcss-selector-parser/dist/index.js","../../../../../node_modules/.pnpm/icss-utils@5.1.0_postcss@8.3.8/node_modules/icss-utils/src/replaceValueSymbols.js","../../../../../node_modules/.pnpm/icss-utils@5.1.0_postcss@8.3.8/node_modules/icss-utils/src/replaceSymbols.js","../../../../../node_modules/.pnpm/icss-utils@5.1.0_postcss@8.3.8/node_modules/icss-utils/src/extractICSS.js","../../../../../node_modules/.pnpm/icss-utils@5.1.0_postcss@8.3.8/node_modules/icss-utils/src/createICSSRules.js","../../../../../node_modules/.pnpm/icss-utils@5.1.0_postcss@8.3.8/node_modules/icss-utils/src/index.js","../../../../../node_modules/.pnpm/postcss-modules-local-by-default@4.0.0_postcss@8.3.8/node_modules/postcss-modules-local-by-default/src/index.js","../../../../../node_modules/.pnpm/postcss-modules-extract-imports@3.0.0_postcss@8.3.8/node_modules/postcss-modules-extract-imports/src/topologicalSort.js","../../../../../node_modules/.pnpm/postcss-modules-extract-imports@3.0.0_postcss@8.3.8/node_modules/postcss-modules-extract-imports/src/index.js","../../../../../node_modules/.pnpm/postcss-modules-scope@3.0.0_postcss@8.3.8/node_modules/postcss-modules-scope/src/index.js","../../../../../node_modules/.pnpm/postcss-modules-values@4.0.0_postcss@8.3.8/node_modules/postcss-modules-values/src/index.js","../../../../../node_modules/.pnpm/postcss-modules@4.2.2_postcss@8.3.8/node_modules/postcss-modules/build/behaviours.js","../../../../../node_modules/.pnpm/postcss-modules@4.2.2_postcss@8.3.8/node_modules/postcss-modules/build/index.js"],"sourcesContent":["/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n rsUpper + '+' + rsOptUpperContr,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = camelCase;\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});var Space_Separator=exports.Space_Separator=/[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;var ID_Start=exports.ID_Start=/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]/;var ID_Continue=exports.ID_Continue=/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/;","'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.isSpaceSeparator=isSpaceSeparator;exports.isIdStartChar=isIdStartChar;exports.isIdContinueChar=isIdContinueChar;exports.isDigit=isDigit;exports.isHexDigit=isHexDigit;var _unicode=require('../lib/unicode');var unicode=_interopRequireWildcard(_unicode);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function isSpaceSeparator(c){return unicode.Space_Separator.test(c)}function isIdStartChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c==='$'||c==='_'||unicode.ID_Start.test(c)}function isIdContinueChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9'||c==='$'||c==='_'||c==='\\u200C'||c==='\\u200D'||unicode.ID_Continue.test(c)}function isDigit(c){return /[0-9]/.test(c)}function isHexDigit(c){return /[0-9A-Fa-f]/.test(c)}","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=parse;var _util=require('./util');var util=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}var source=void 0;var parseState=void 0;var stack=void 0;var pos=void 0;var line=void 0;var column=void 0;var token=void 0;var key=void 0;var root=void 0;function parse(text,reviver){source=String(text);parseState='start';stack=[];pos=0;line=1;column=0;token=undefined;key=undefined;root=undefined;do{token=lex();parseStates[parseState]()}while(token.type!=='eof');if(typeof reviver==='function'){return internalize({'':root},'',reviver)}return root}function internalize(holder,name,reviver){var value=holder[name];if(value!=null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){for(var _key in value){var replacement=internalize(value,_key,reviver);if(replacement===undefined){delete value[_key]}else{value[_key]=replacement}}}return reviver.call(holder,name,value)}var lexState=void 0;var buffer=void 0;var doubleQuote=void 0;var _sign=void 0;var c=void 0;function lex(){lexState='default';buffer='';doubleQuote=false;_sign=1;for(;;){c=peek();var _token=lexStates[lexState]();if(_token){return _token}}}function peek(){if(source[pos]){return String.fromCodePoint(source.codePointAt(pos))}}function read(){var c=peek();if(c==='\\n'){line++;column=0}else if(c){column+=c.length}else{column++}if(c){pos+=c.length}return c}var lexStates={default:function _default(){switch(c){case'\\t':case'\\x0B':case'\\f':case' ':case'\\xA0':case'\\uFEFF':case'\\n':case'\\r':case'\\u2028':case'\\u2029':read();return;case'/':read();lexState='comment';return;case undefined:read();return newToken('eof');}if(util.isSpaceSeparator(c)){read();return}return lexStates[parseState]()},comment:function comment(){switch(c){case'*':read();lexState='multiLineComment';return;case'/':read();lexState='singleLineComment';return;}throw invalidChar(read())},multiLineComment:function multiLineComment(){switch(c){case'*':read();lexState='multiLineCommentAsterisk';return;case undefined:throw invalidChar(read());}read()},multiLineCommentAsterisk:function multiLineCommentAsterisk(){switch(c){case'*':read();return;case'/':read();lexState='default';return;case undefined:throw invalidChar(read());}read();lexState='multiLineComment'},singleLineComment:function singleLineComment(){switch(c){case'\\n':case'\\r':case'\\u2028':case'\\u2029':read();lexState='default';return;case undefined:read();return newToken('eof');}read()},value:function value(){switch(c){case'{':case'[':return newToken('punctuator',read());case'n':read();literal('ull');return newToken('null',null);case't':read();literal('rue');return newToken('boolean',true);case'f':read();literal('alse');return newToken('boolean',false);case'-':case'+':if(read()==='-'){_sign=-1}lexState='sign';return;case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);case'\"':case'\\'':doubleQuote=read()==='\"';buffer='';lexState='string';return;}throw invalidChar(read())},identifierNameStartEscape:function identifierNameStartEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':break;default:if(!util.isIdStartChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName'},identifierName:function identifierName(){switch(c){case'$':case'_':case'\\u200C':case'\\u200D':buffer+=read();return;case'\\\\':read();lexState='identifierNameEscape';return;}if(util.isIdContinueChar(c)){buffer+=read();return}return newToken('identifier',buffer)},identifierNameEscape:function identifierNameEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':case'\\u200C':case'\\u200D':break;default:if(!util.isIdContinueChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName'},sign:function sign(){switch(c){case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',_sign*Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);}throw invalidChar(read())},zero:function zero(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;case'x':case'X':buffer+=read();lexState='hexadecimal';return;}return newToken('numeric',_sign*0)},decimalInteger:function decimalInteger(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalPointLeading:function decimalPointLeading(){if(util.isDigit(c)){buffer+=read();lexState='decimalFraction';return}throw invalidChar(read())},decimalPoint:function decimalPoint(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();lexState='decimalFraction';return}return newToken('numeric',_sign*Number(buffer))},decimalFraction:function decimalFraction(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalExponent:function decimalExponent(){switch(c){case'+':case'-':buffer+=read();lexState='decimalExponentSign';return;}if(util.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentSign:function decimalExponentSign(){if(util.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentInteger:function decimalExponentInteger(){if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},hexadecimal:function hexadecimal(){if(util.isHexDigit(c)){buffer+=read();lexState='hexadecimalInteger';return}throw invalidChar(read())},hexadecimalInteger:function hexadecimalInteger(){if(util.isHexDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},string:function string(){switch(c){case'\\\\':read();buffer+=escape();return;case'\"':if(doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\\'':if(!doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\\n':case'\\r':throw invalidChar(read());case'\\u2028':case'\\u2029':separatorChar(c);break;case undefined:throw invalidChar(read());}buffer+=read()},start:function start(){switch(c){case'{':case'[':return newToken('punctuator',read());}lexState='value'},beforePropertyName:function beforePropertyName(){switch(c){case'$':case'_':buffer=read();lexState='identifierName';return;case'\\\\':read();lexState='identifierNameStartEscape';return;case'}':return newToken('punctuator',read());case'\"':case'\\'':doubleQuote=read()==='\"';lexState='string';return;}if(util.isIdStartChar(c)){buffer+=read();lexState='identifierName';return}throw invalidChar(read())},afterPropertyName:function afterPropertyName(){if(c===':'){return newToken('punctuator',read())}throw invalidChar(read())},beforePropertyValue:function beforePropertyValue(){lexState='value'},afterPropertyValue:function afterPropertyValue(){switch(c){case',':case'}':return newToken('punctuator',read());}throw invalidChar(read())},beforeArrayValue:function beforeArrayValue(){if(c===']'){return newToken('punctuator',read())}lexState='value'},afterArrayValue:function afterArrayValue(){switch(c){case',':case']':return newToken('punctuator',read());}throw invalidChar(read())},end:function end(){throw invalidChar(read())}};function newToken(type,value){return{type:type,value:value,line:line,column:column}}function literal(s){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=s[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _c=_step.value;var p=peek();if(p!==_c){throw invalidChar(read())}read()}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}function escape(){var c=peek();switch(c){case'b':read();return'\\b';case'f':read();return'\\f';case'n':read();return'\\n';case'r':read();return'\\r';case't':read();return'\\t';case'v':read();return'\\x0B';case'0':read();if(util.isDigit(peek())){throw invalidChar(read())}return'\\0';case'x':read();return hexEscape();case'u':read();return unicodeEscape();case'\\n':case'\\u2028':case'\\u2029':read();return'';case'\\r':read();if(peek()==='\\n'){read()}return'';case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':throw invalidChar(read());case undefined:throw invalidChar(read());}return read()}function hexEscape(){var buffer='';var c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read();c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read();return String.fromCodePoint(parseInt(buffer,16))}function unicodeEscape(){var buffer='';var count=4;while(count-->0){var _c2=peek();if(!util.isHexDigit(_c2)){throw invalidChar(read())}buffer+=read()}return String.fromCodePoint(parseInt(buffer,16))}var parseStates={start:function start(){if(token.type==='eof'){throw invalidEOF()}push()},beforePropertyName:function beforePropertyName(){switch(token.type){case'identifier':case'string':key=token.value;parseState='afterPropertyName';return;case'punctuator':pop();return;case'eof':throw invalidEOF();}},afterPropertyName:function afterPropertyName(){if(token.type==='eof'){throw invalidEOF()}parseState='beforePropertyValue'},beforePropertyValue:function beforePropertyValue(){if(token.type==='eof'){throw invalidEOF()}push()},beforeArrayValue:function beforeArrayValue(){if(token.type==='eof'){throw invalidEOF()}if(token.type==='punctuator'&&token.value===']'){pop();return}push()},afterPropertyValue:function afterPropertyValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforePropertyName';return;case'}':pop();}},afterArrayValue:function afterArrayValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforeArrayValue';return;case']':pop();}},end:function end(){}};function push(){var value=void 0;switch(token.type){case'punctuator':switch(token.value){case'{':value={};break;case'[':value=[];break;}break;case'null':case'boolean':case'numeric':case'string':value=token.value;break;}if(root===undefined){root=value}else{var parent=stack[stack.length-1];if(Array.isArray(parent)){parent.push(value)}else{parent[key]=value}}if(value!==null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){stack.push(value);if(Array.isArray(value)){parseState='beforeArrayValue'}else{parseState='beforePropertyName'}}else{var current=stack[stack.length-1];if(current==null){parseState='end'}else if(Array.isArray(current)){parseState='afterArrayValue'}else{parseState='afterPropertyValue'}}}function pop(){stack.pop();var current=stack[stack.length-1];if(current==null){parseState='end'}else if(Array.isArray(current)){parseState='afterArrayValue'}else{parseState='afterPropertyValue'}}function invalidChar(c){if(c===undefined){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}return syntaxError('JSON5: invalid character \\''+formatChar(c)+'\\' at '+line+':'+column)}function invalidEOF(){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}function invalidIdentifier(){column-=5;return syntaxError('JSON5: invalid identifier character at '+line+':'+column)}function separatorChar(c){console.warn('JSON5: \\''+c+'\\' is not valid ECMAScript; consider escaping')}function formatChar(c){var replacements={'\\'':'\\\\\\'','\"':'\\\\\"','\\\\':'\\\\\\\\','\\b':'\\\\b','\\f':'\\\\f','\\n':'\\\\n','\\r':'\\\\r','\\t':'\\\\t','\\x0B':'\\\\v','\\0':'\\\\0','\\u2028':'\\\\u2028','\\u2029':'\\\\u2029'};if(replacements[c]){return replacements[c]}if(c<' '){var hexString=c.charCodeAt(0).toString(16);return'\\\\x'+('00'+hexString).substring(hexString.length)}return c}function syntaxError(message){var err=new SyntaxError(message);err.lineNumber=line;err.columnNumber=column;return err}module.exports=exports['default'];","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=stringify;var _util=require('./util');var util=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function stringify(value,replacer,space){var stack=[];var indent='';var propertyList=void 0;var replacerFunc=void 0;var gap='';var quote=void 0;if(replacer!=null&&(typeof replacer==='undefined'?'undefined':_typeof(replacer))==='object'&&!Array.isArray(replacer)){space=replacer.space;quote=replacer.quote;replacer=replacer.replacer}if(typeof replacer==='function'){replacerFunc=replacer}else if(Array.isArray(replacer)){propertyList=[];var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=replacer[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var v=_step.value;var item=void 0;if(typeof v==='string'){item=v}else if(typeof v==='number'||v instanceof String||v instanceof Number){item=String(v)}if(item!==undefined&&propertyList.indexOf(item)<0){propertyList.push(item)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}if(space instanceof Number){space=Number(space)}else if(space instanceof String){space=String(space)}if(typeof space==='number'){if(space>0){space=Math.min(10,Math.floor(space));gap=' '.substr(0,space)}}else if(typeof space==='string'){gap=space.substr(0,10)}return serializeProperty('',{'':value});function serializeProperty(key,holder){var value=holder[key];if(value!=null){if(typeof value.toJSON5==='function'){value=value.toJSON5(key)}else if(typeof value.toJSON==='function'){value=value.toJSON(key)}}if(replacerFunc){value=replacerFunc.call(holder,key,value)}if(value instanceof Number){value=Number(value)}else if(value instanceof String){value=String(value)}else if(value instanceof Boolean){value=value.valueOf()}switch(value){case null:return'null';case true:return'true';case false:return'false';}if(typeof value==='string'){return quoteString(value,false)}if(typeof value==='number'){return String(value)}if((typeof value==='undefined'?'undefined':_typeof(value))==='object'){return Array.isArray(value)?serializeArray(value):serializeObject(value)}return undefined}function quoteString(value){var quotes={'\\'':0.1,'\"':0.2};var replacements={'\\'':'\\\\\\'','\"':'\\\\\"','\\\\':'\\\\\\\\','\\b':'\\\\b','\\f':'\\\\f','\\n':'\\\\n','\\r':'\\\\r','\\t':'\\\\t','\\x0B':'\\\\v','\\0':'\\\\0','\\u2028':'\\\\u2028','\\u2029':'\\\\u2029'};var product='';var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=value[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var c=_step2.value;switch(c){case'\\'':case'\"':quotes[c]++;product+=c;continue;}if(replacements[c]){product+=replacements[c];continue}if(c<' '){var hexString=c.charCodeAt(0).toString(16);product+='\\\\x'+('00'+hexString).substring(hexString.length);continue}product+=c}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2}}}var quoteChar=quote||Object.keys(quotes).reduce(function(a,b){return quotes[a]<quotes[b]?a:b});product=product.replace(new RegExp(quoteChar,'g'),replacements[quoteChar]);return quoteChar+product+quoteChar}function serializeObject(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var keys=propertyList||Object.keys(value);var partial=[];var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=keys[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var key=_step3.value;var propertyString=serializeProperty(key,value);if(propertyString!==undefined){var member=serializeKey(key)+':';if(gap!==''){member+=' '}member+=propertyString;partial.push(member)}}}catch(err){_didIteratorError3=true;_iteratorError3=err}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return()}}finally{if(_didIteratorError3){throw _iteratorError3}}}var final=void 0;if(partial.length===0){final='{}'}else{var properties=void 0;if(gap===''){properties=partial.join(',');final='{'+properties+'}'}else{var separator=',\\n'+indent;properties=partial.join(separator);final='{\\n'+indent+properties+',\\n'+stepback+'}'}}stack.pop();indent=stepback;return final}function serializeKey(key){if(key.length===0){return quoteString(key,true)}var firstChar=String.fromCodePoint(key.codePointAt(0));if(!util.isIdStartChar(firstChar)){return quoteString(key,true)}for(var i=firstChar.length;i<key.length;i++){if(!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))){return quoteString(key,true)}}return key}function serializeArray(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var partial=[];for(var i=0;i<value.length;i++){var propertyString=serializeProperty(String(i),value);partial.push(propertyString!==undefined?propertyString:'null')}var final=void 0;if(partial.length===0){final='[]'}else{if(gap===''){var properties=partial.join(',');final='['+properties+']'}else{var separator=',\\n'+indent;var _properties=partial.join(separator);final='[\\n'+indent+_properties+',\\n'+stepback+']'}}stack.pop();indent=stepback;return final}}module.exports=exports['default'];","'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _parse=require('./parse');var _parse2=_interopRequireDefault(_parse);var _stringify=require('./stringify');var _stringify2=_interopRequireDefault(_stringify);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default={parse:_parse2.default,stringify:_stringify2.default};module.exports=exports['default'];","'use strict';\n\nconst JSON5 = require('json5');\n\nconst specialValues = {\n null: null,\n true: true,\n false: false,\n};\n\nfunction parseQuery(query) {\n if (query.substr(0, 1) !== '?') {\n throw new Error(\n \"A valid query string passed to parseQuery should begin with '?'\"\n );\n }\n\n query = query.substr(1);\n\n if (!query) {\n return {};\n }\n\n if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {\n return JSON5.parse(query);\n }\n\n const queryArgs = query.split(/[,&]/g);\n const result = {};\n\n queryArgs.forEach((arg) => {\n const idx = arg.indexOf('=');\n\n if (idx >= 0) {\n let name = arg.substr(0, idx);\n let value = decodeURIComponent(arg.substr(idx + 1));\n\n if (specialValues.hasOwnProperty(value)) {\n value = specialValues[value];\n }\n\n if (name.substr(-2) === '[]') {\n name = decodeURIComponent(name.substr(0, name.length - 2));\n\n if (!Array.isArray(result[name])) {\n result[name] = [];\n }\n\n result[name].push(value);\n } else {\n name = decodeURIComponent(name);\n result[name] = value;\n }\n } else {\n if (arg.substr(0, 1) === '-') {\n result[decodeURIComponent(arg.substr(1))] = false;\n } else if (arg.substr(0, 1) === '+') {\n result[decodeURIComponent(arg.substr(1))] = true;\n } else {\n result[decodeURIComponent(arg)] = true;\n }\n }\n });\n\n return result;\n}\n\nmodule.exports = parseQuery;\n","'use strict';\n\nconst parseQuery = require('./parseQuery');\n\nfunction getOptions(loaderContext) {\n const query = loaderContext.query;\n\n if (typeof query === 'string' && query !== '') {\n return parseQuery(loaderContext.query);\n }\n\n if (!query || typeof query !== 'object') {\n // Not object-like queries are not supported.\n return null;\n }\n\n return query;\n}\n\nmodule.exports = getOptions;\n","'use strict';\n\nconst path = require('path');\n\nconst matchRelativePath = /^\\.\\.?[/\\\\]/;\n\nfunction isAbsolutePath(str) {\n return path.posix.isAbsolute(str) || path.win32.isAbsolute(str);\n}\n\nfunction isRelativePath(str) {\n return matchRelativePath.test(str);\n}\n\nfunction stringifyRequest(loaderContext, request) {\n const splitted = request.split('!');\n const context =\n loaderContext.context ||\n (loaderContext.options && loaderContext.options.context);\n\n return JSON.stringify(\n splitted\n .map((part) => {\n // First, separate singlePath from query, because the query might contain paths again\n const splittedPart = part.match(/^(.*?)(\\?.*)/);\n const query = splittedPart ? splittedPart[2] : '';\n let singlePath = splittedPart ? splittedPart[1] : part;\n\n if (isAbsolutePath(singlePath) && context) {\n singlePath = path.relative(context, singlePath);\n\n if (isAbsolutePath(singlePath)) {\n // If singlePath still matches an absolute path, singlePath was on a different drive than context.\n // In this case, we leave the path platform-specific without replacing any separators.\n // @see https://github.com/webpack/loader-utils/pull/14\n return singlePath + query;\n }\n\n if (isRelativePath(singlePath) === false) {\n // Ensure that the relative path starts at least with ./ otherwise it would be a request into the modules directory (like node_modules).\n singlePath = './' + singlePath;\n }\n }\n\n return singlePath.replace(/\\\\/g, '/') + query;\n })\n .join('!')\n );\n}\n\nmodule.exports = stringifyRequest;\n","'use strict';\n\nfunction getRemainingRequest(loaderContext) {\n if (loaderContext.remainingRequest) {\n return loaderContext.remainingRequest;\n }\n\n const request = loaderContext.loaders\n .slice(loaderContext.loaderIndex + 1)\n .map((obj) => obj.request)\n .concat([loaderContext.resource]);\n\n return request.join('!');\n}\n\nmodule.exports = getRemainingRequest;\n","'use strict';\n\nfunction getCurrentRequest(loaderContext) {\n if (loaderContext.currentRequest) {\n return loaderContext.currentRequest;\n }\n\n const request = loaderContext.loaders\n .slice(loaderContext.loaderIndex)\n .map((obj) => obj.request)\n .concat([loaderContext.resource]);\n\n return request.join('!');\n}\n\nmodule.exports = getCurrentRequest;\n","'use strict';\n\nconst path = require('path');\n\nfunction isUrlRequest(url, root) {\n // An URL is not an request if\n\n // 1. It's an absolute url and it is not `windows` path like `C:\\dir\\file`\n if (/^[a-z][a-z0-9+.-]*:/i.test(url) && !path.win32.isAbsolute(url)) {\n return false;\n }\n\n // 2. It's a protocol-relative\n if (/^\\/\\//.test(url)) {\n return false;\n }\n\n // 3. It's some kind of url for a template\n if (/^[{}[\\]#*;,'§$%&(=?`´^°<>]/.test(url)) {\n return false;\n }\n\n // 4. It's also not an request if root isn't set and it's a root-relative url\n if ((root === undefined || root === false) && /^\\//.test(url)) {\n return false;\n }\n\n return true;\n}\n\nmodule.exports = isUrlRequest;\n","'use strict';\n\n// we can't use path.win32.isAbsolute because it also matches paths starting with a forward slash\nconst matchNativeWin32Path = /^[A-Z]:[/\\\\]|^\\\\\\\\/i;\n\nfunction urlToRequest(url, root) {\n // Do not rewrite an empty url\n if (url === '') {\n return '';\n }\n\n const moduleRequestRegex = /^[^?]*~/;\n let request;\n\n if (matchNativeWin32Path.test(url)) {\n // absolute windows path, keep it\n request = url;\n } else if (root !== undefined && root !== false && /^\\//.test(url)) {\n // if root is set and the url is root-relative\n switch (typeof root) {\n // 1. root is a string: root is prefixed to the url\n case 'string':\n // special case: `~` roots convert to module request\n if (moduleRequestRegex.test(root)) {\n request = root.replace(/([^~/])$/, '$1/') + url.slice(1);\n } else {\n request = root + url;\n }\n break;\n // 2. root is `true`: absolute paths are allowed\n // *nix only, windows-style absolute paths are always allowed as they doesn't start with a `/`\n case 'boolean':\n request = url;\n break;\n default:\n throw new Error(\n \"Unexpected parameters to loader-utils 'urlToRequest': url = \" +\n url +\n ', root = ' +\n root +\n '.'\n );\n }\n } else if (/^\\.\\.?\\//.test(url)) {\n // A relative url stays\n request = url;\n } else {\n // every other url is threaded like a relative url\n request = './' + url;\n }\n\n // A `~` makes the url an module\n if (moduleRequestRegex.test(request)) {\n request = request.replace(moduleRequestRegex, '');\n }\n\n return request;\n}\n\nmodule.exports = urlToRequest;\n","'use strict';\n\nfunction parseString(str) {\n try {\n if (str[0] === '\"') {\n return JSON.parse(str);\n }\n\n if (str[0] === \"'\" && str.substr(str.length - 1) === \"'\") {\n return parseString(\n str\n .replace(/\\\\.|\"/g, (x) => (x === '\"' ? '\\\\\"' : x))\n .replace(/^'|'$/g, '\"')\n );\n }\n\n return JSON.parse('\"' + str + '\"');\n } catch (e) {\n return str;\n }\n}\n\nmodule.exports = parseString;\n","/*\r\n * big.js v5.2.2\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2018 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * https://github.com/MikeMcl/big.js/LICENCE\r\n */\r\n;(function (GLOBAL) {\r\n 'use strict';\r\n var Big,\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\n DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big.\r\n * (This limit is not enforced or checked.)\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n /*\r\n * Create and return a Big constructor.\r\n *\r\n */\r\n function _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n parse(x, n);\r\n }\r\n\r\n /*\r\n * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which\r\n * points to Object.\r\n */\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.version = '5.2.2';\r\n\r\n return Big;\r\n }\r\n\r\n\r\n /*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\n function parse(x, n) {\r\n var e, i, nl;\r\n\r\n // Minus zero?\r\n if (n === 0 && 1 / n < 0) n = '-0';\r\n else if (!NUMERIC.test(n += '')) throw Error(INVALID + 'number');\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Round Big x to a maximum of dp decimal places using rounding mode rm.\r\n * Called by stringify, P.div, P.round and P.sqrt.\r\n *\r\n * x {Big} The Big to round.\r\n * dp {number} Integer, 0 to MAX_DP inclusive.\r\n * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\n function round(x, dp, rm, more) {\r\n var xc = x.c,\r\n i = x.e + dp + 1;\r\n\r\n if (i < xc.length) {\r\n if (rm === 1) {\r\n\r\n // xc[i] is the digit after the digit that may be rounded up.\r\n more = xc[i] >= 5;\r\n } else if (rm === 2) {\r\n more = xc[i] > 5 || xc[i] == 5 &&\r\n (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1);\r\n } else if (rm === 3) {\r\n more = more || !!xc[0];\r\n } else {\r\n more = false;\r\n if (rm !== 0) throw Error(INVALID_RM);\r\n }\r\n\r\n if (i < 1) {\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = -dp;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else {\r\n\r\n // Remove any digits after the required decimal places.\r\n xc.length = i--;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[i] > 9;) {\r\n xc[i] = 0;\r\n if (!i--) {\r\n ++x.e;\r\n xc.unshift(1);\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; !xc[--i];) xc.pop();\r\n }\r\n } else if (rm < 0 || rm > 3 || rm !== ~~rm) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n *\r\n * x {Big}\r\n * id? {number} Caller id.\r\n * 1 toExponential\r\n * 2 toFixed\r\n * 3 toPrecision\r\n * 4 valueOf\r\n * n? {number|undefined} Caller's argument.\r\n * k? {number|undefined}\r\n */\r\n function stringify(x, id, n, k) {\r\n var e, s,\r\n Big = x.constructor,\r\n z = !x.c[0];\r\n\r\n if (n !== UNDEFINED) {\r\n if (n !== ~~n || n < (id == 3) || n > MAX_DP) {\r\n throw Error(id == 3 ? INVALID + 'precision' : INVALID_DP);\r\n }\r\n\r\n x = new Big(x);\r\n\r\n // The index of the digit that may be rounded up.\r\n n = k - x.e;\r\n\r\n // Round?\r\n if (x.c.length > ++k) round(x, n, Big.RM);\r\n\r\n // toFixed: recalculate k as x.e may have changed if value rounded up.\r\n if (id == 2) k = x.e + n + 1;\r\n\r\n // Append zeros?\r\n for (; x.c.length < k;) x.c.push(0);\r\n }\r\n\r\n e = x.e;\r\n s = x.c.join('');\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (id != 2 && (id == 1 || id == 3 && k <= e || e <= Big.NE || e >= Big.PE)) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) for (e -= n; e--;) s += '0';\r\n else if (e < n) s = s.slice(0, e) + '.' + s.slice(e);\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && (!z || id == 4) ? '-' + s : s;\r\n }\r\n\r\n\r\n // Prototype/instance methods\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\n P.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\n P.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\n P.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(INVALID_DP);\r\n\r\n // Divisor is zero?\r\n if (!b[0]) throw Error(DIV_BY_ZERO);\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) return new Big(k * 0);\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n d = dp + (q.e = x.e - y.e) + 1; // number of digits of the result\r\n\r\n q.s = k;\r\n k = d < 0 ? 0 : d;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n }\r\n\r\n // Round?\r\n if (qi > d) round(q, dp, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\n P.eq = function (y) {\r\n return !this.cmp(y);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\n P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\n P.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\n P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\n P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\n P.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // y is non-zero? x is non-zero? Or both are zero.\r\n return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\n P.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) throw Error(DIV_BY_ZERO);\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\n P.plus = P.add = function (y) {\r\n var t,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero? y is non-zero? x is non-zero? Or both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new Big(xc[0] ? x : a * 0);\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n a = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (b = 0; a; xc[a] %= 10) b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (b) {\r\n xc.unshift(b);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (a = xc.length; xc[--a] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\n P.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor(1),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) throw Error(INVALID + 'exponent');\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big rounded using rounding mode rm\r\n * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a\r\n * multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n * If rm is not specified, use Big.RM.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)\r\n */\r\n P.round = function (dp, rm) {\r\n var Big = this.constructor;\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) throw Error(INVALID_DP);\r\n return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\n P.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big(0.5);\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) throw Error(NAME + 'No square root');\r\n\r\n // Estimate.\r\n s = Math.sqrt(x + '');\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '1e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s);\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, Big.DP -= 4, Big.RM);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\n P.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) return new Big(y.s * 0);\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = (c[j] + b) % 10;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big in exponential notation to dp fixed decimal\r\n * places and rounded using Big.RM.\r\n *\r\n * dp? {number} Integer, 0 to MAX_DP inclusive.\r\n */\r\n P.toExponential = function (dp) {\r\n return stringify(this, 1, dp, dp);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big in normal notation to dp fixed decimal\r\n * places and rounded using Big.RM.\r\n *\r\n * dp? {number} Integer, 0 to MAX_DP inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\n P.toFixed = function (dp) {\r\n return stringify(this, 2, dp, this.e + dp);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Integer, 1 to MAX_DP inclusive.\r\n */\r\n P.toPrecision = function (sd) {\r\n return stringify(this, 3, sd, sd - 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\n P.toString = function () {\r\n return stringify(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return stringify(this, 4);\r\n };\r\n\r\n\r\n // Export\r\n\r\n\r\n Big = _Big_();\r\n\r\n Big['default'] = Big.Big = Big;\r\n\r\n //AMD.\r\n if (typeof define === 'function' && define.amd) {\r\n define(function () { return Big; });\r\n\r\n // Node and other CommonJS-like environments that support module.exports.\r\n } else if (typeof module !== 'undefined' && module.exports) {\r\n module.exports = Big;\r\n\r\n //Browser.\r\n } else {\r\n GLOBAL.Big = Big;\r\n }\r\n})(this);\r\n","'use strict';\n\nconst baseEncodeTables = {\n 26: 'abcdefghijklmnopqrstuvwxyz',\n 32: '123456789abcdefghjkmnpqrstuvwxyz', // no 0lio\n 36: '0123456789abcdefghijklmnopqrstuvwxyz',\n 49: 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no lIO\n 52: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',\n 58: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no 0lIO\n 62: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',\n 64: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_',\n};\n\nfunction encodeBufferToBase(buffer, base) {\n const encodeTable = baseEncodeTables[base];\n if (!encodeTable) {\n throw new Error('Unknown encoding base' + base);\n }\n\n const readLength = buffer.length;\n const Big = require('big.js');\n\n Big.RM = Big.DP = 0;\n let b = new Big(0);\n\n for (let i = readLength - 1; i >= 0; i--) {\n b = b.times(256).plus(buffer[i]);\n }\n\n let output = '';\n while (b.gt(0)) {\n output = encodeTable[b.mod(base)] + output;\n b = b.div(base);\n }\n\n Big.DP = 20;\n Big.RM = 1;\n\n return output;\n}\n\nfunction getHashDigest(buffer, hashType, digestType, maxLength) {\n hashType = hashType || 'md5';\n maxLength = maxLength || 9999;\n\n const hash = require('crypto').createHash(hashType);\n\n hash.update(buffer);\n\n if (\n digestType === 'base26' ||\n digestType === 'base32' ||\n digestType === 'base36' ||\n digestType === 'base49' ||\n digestType === 'base52' ||\n digestType === 'base58' ||\n digestType === 'base62' ||\n digestType === 'base64'\n ) {\n return encodeBufferToBase(hash.digest(), digestType.substr(4)).substr(\n 0,\n maxLength\n );\n } else {\n return hash.digest(digestType || 'hex').substr(0, maxLength);\n }\n}\n\nmodule.exports = getHashDigest;\n","module.exports = [\n \"🀄️\",\n \"🃏\",\n \"🅰️\",\n \"🅱️\",\n \"🅾️\",\n \"🅿️\",\n \"🆎\",\n \"🆑\",\n \"🆒\",\n \"🆓\",\n \"🆔\",\n \"🆕\",\n \"🆖\",\n \"🆗\",\n \"🆘\",\n \"🆙\",\n \"🆚\",\n \"🇦🇨\",\n \"🇦🇩\",\n \"🇦🇪\",\n \"🇦🇫\",\n \"🇦🇬\",\n \"🇦🇮\",\n \"🇦🇱\",\n \"🇦🇲\",\n \"🇦🇴\",\n \"🇦🇶\",\n \"🇦🇷\",\n \"🇦🇸\",\n \"🇦🇹\",\n \"🇦🇺\",\n \"🇦🇼\",\n \"🇦🇽\",\n \"🇦🇿\",\n \"🇦\",\n \"🇧🇦\",\n \"🇧🇧\",\n \"🇧🇩\",\n \"🇧🇪\",\n \"🇧🇫\",\n \"🇧🇬\",\n \"🇧🇭\",\n \"🇧🇮\",\n \"🇧🇯\",\n \"🇧🇱\",\n \"🇧🇲\",\n \"🇧🇳\",\n \"🇧🇴\",\n \"🇧🇶\",\n \"🇧🇷\",\n \"🇧🇸\",\n \"🇧🇹\",\n \"🇧🇻\",\n \"🇧🇼\",\n \"🇧🇾\",\n \"🇧🇿\",\n \"🇧\",\n \"🇨🇦\",\n \"🇨🇨\",\n \"🇨🇩\",\n \"🇨🇫\",\n \"🇨🇬\",\n \"🇨🇭\",\n \"🇨🇮\",\n \"🇨🇰\",\n \"🇨🇱\",\n \"🇨🇲\",\n \"🇨🇳\",\n \"🇨🇴\",\n \"🇨🇵\",\n \"🇨🇷\",\n \"🇨🇺\",\n \"🇨🇻\",\n \"🇨🇼\",\n \"🇨🇽\",\n \"🇨🇾\",\n \"🇨🇿\",\n \"🇨\",\n \"🇩🇪\",\n \"🇩🇬\",\n \"🇩🇯\",\n \"🇩🇰\",\n \"🇩🇲\",\n \"🇩🇴\",\n \"🇩🇿\",\n \"🇩\",\n \"🇪🇦\",\n \"🇪🇨\",\n \"🇪🇪\",\n \"🇪🇬\",\n \"🇪🇭\",\n \"🇪🇷\",\n \"🇪🇸\",\n \"🇪🇹\",\n \"🇪🇺\",\n \"🇪\",\n \"🇫🇮\",\n \"🇫🇯\",\n \"🇫🇰\",\n \"🇫🇲\",\n \"🇫🇴\",\n \"🇫🇷\",\n \"🇫\",\n \"🇬🇦\",\n \"🇬🇧\",\n \"🇬🇩\",\n \"🇬🇪\",\n \"🇬🇫\",\n \"🇬🇬\",\n \"🇬🇭\",\n \"🇬🇮\",\n \"🇬🇱\",\n \"🇬🇲\",\n \"🇬🇳\",\n \"🇬🇵\",\n \"🇬🇶\",\n \"🇬🇷\",\n \"🇬🇸\",\n \"🇬🇹\",\n \"🇬🇺\",\n \"🇬🇼\",\n \"🇬🇾\",\n \"🇬\",\n \"🇭🇰\",\n \"🇭🇲\",\n \"🇭🇳\",\n \"🇭🇷\",\n \"🇭🇹\",\n \"🇭🇺\",\n \"🇭\",\n \"🇮🇨\",\n \"🇮🇩\",\n \"🇮🇪\",\n \"🇮🇱\",\n \"🇮🇲\",\n \"🇮🇳\",\n \"🇮🇴\",\n \"🇮🇶\",\n \"🇮🇷\",\n \"🇮🇸\",\n \"🇮🇹\",\n \"🇮\",\n \"🇯🇪\",\n \"🇯🇲\",\n \"🇯🇴\",\n \"🇯🇵\",\n \"🇯\",\n \"🇰🇪\",\n \"🇰🇬\",\n \"🇰🇭\",\n \"🇰🇮\",\n \"🇰🇲\",\n \"🇰🇳\",\n \"🇰🇵\",\n \"🇰🇷\",\n \"🇰🇼\",\n \"🇰🇾\",\n \"🇰🇿\",\n \"🇰\",\n \"🇱🇦\",\n \"🇱🇧\",\n \"🇱🇨\",\n \"🇱🇮\",\n \"🇱🇰\",\n \"🇱🇷\",\n \"🇱🇸\",\n \"🇱🇹\",\n \"🇱🇺\",\n \"🇱🇻\",\n \"🇱🇾\",\n \"🇱\",\n \"🇲🇦\",\n \"🇲🇨\",\n \"🇲🇩\",\n \"🇲🇪\",\n \"🇲🇫\",\n \"🇲🇬\",\n \"🇲🇭\",\n \"🇲🇰\",\n \"🇲🇱\",\n \"🇲🇲\",\n \"🇲🇳\",\n \"🇲🇴\",\n \"🇲🇵\",\n \"🇲🇶\",\n \"🇲🇷\",\n \"🇲🇸\",\n \"🇲🇹\",\n \"🇲🇺\",\n \"🇲🇻\",\n \"🇲🇼\",\n \"🇲🇽\",\n \"🇲🇾\",\n \"🇲🇿\",\n \"🇲\",\n \"🇳🇦\",\n \"🇳🇨\",\n \"🇳🇪\",\n \"🇳🇫\",\n \"🇳🇬\",\n \"🇳🇮\",\n \"🇳🇱\",\n \"🇳🇴\",\n \"🇳🇵\",\n \"🇳🇷\",\n \"🇳🇺\",\n \"🇳🇿\",\n \"🇳\",\n \"🇴🇲\",\n \"🇴\",\n \"🇵🇦\",\n \"🇵🇪\",\n \"🇵🇫\",\n \"🇵🇬\",\n \"🇵🇭\",\n \"🇵🇰\",\n \"🇵🇱\",\n \"🇵🇲\",\n \"🇵🇳\",\n \"🇵🇷\",\n \"🇵🇸\",\n \"🇵🇹\",\n \"🇵🇼\",\n \"🇵🇾\",\n \"🇵\",\n \"🇶🇦\",\n \"🇶\",\n \"🇷🇪\",\n \"🇷🇴\",\n \"🇷🇸\",\n \"🇷🇺\",\n \"🇷🇼\",\n \"🇷\",\n \"🇸🇦\",\n \"🇸🇧\",\n \"🇸🇨\",\n \"🇸🇩\",\n \"🇸🇪\",\n \"🇸🇬\",\n \"🇸🇭\",\n \"🇸🇮\",\n \"🇸🇯\",\n \"🇸🇰\",\n \"🇸🇱\",\n \"🇸🇲\",\n \"🇸🇳\",\n \"🇸🇴\",\n \"🇸🇷\",\n \"🇸🇸\",\n \"🇸🇹\",\n \"🇸🇻\",\n \"🇸🇽\",\n \"🇸🇾\",\n \"🇸🇿\",\n \"🇸\",\n \"🇹🇦\",\n \"🇹🇨\",\n \"🇹🇩\",\n \"🇹🇫\",\n \"🇹🇬\",\n \"🇹🇭\",\n \"🇹🇯\",\n \"🇹🇰\",\n \"🇹🇱\",\n \"🇹🇲\",\n \"🇹🇳\",\n \"🇹🇴\",\n \"🇹🇷\",\n \"🇹🇹\",\n \"🇹🇻\",\n \"🇹🇼\",\n \"🇹🇿\",\n \"🇹\",\n \"🇺🇦\",\n \"🇺🇬\",\n \"🇺🇲\",\n \"🇺🇳\",\n \"🇺🇸\",\n \"🇺🇾\",\n \"🇺🇿\",\n \"🇺\",\n \"🇻🇦\",\n \"🇻🇨\",\n \"🇻🇪\",\n \"🇻🇬\",\n \"🇻🇮\",\n \"🇻🇳\",\n \"🇻🇺\",\n \"🇻\",\n \"🇼🇫\",\n \"🇼🇸\",\n \"🇼\",\n \"🇽🇰\",\n \"🇽\",\n \"🇾🇪\",\n \"🇾🇹\",\n \"🇾\",\n \"🇿🇦\",\n \"🇿🇲\",\n \"🇿🇼\",\n \"🇿\",\n \"🈁\",\n \"🈂️\",\n \"🈚️\",\n \"🈯️\",\n \"🈲\",\n \"🈳\",\n \"🈴\",\n \"🈵\",\n \"🈶\",\n \"🈷️\",\n \"🈸\",\n \"🈹\",\n \"🈺\",\n \"🉐\",\n \"🉑\",\n \"🌀\",\n \"🌁\",\n \"🌂\",\n \"🌃\",\n \"🌄\",\n \"🌅\",\n \"🌆\",\n \"🌇\",\n \"🌈\",\n \"🌉\",\n \"🌊\",\n \"🌋\",\n \"🌌\",\n \"🌍\",\n \"🌎\",\n \"🌏\",\n \"🌐\",\n \"🌑\",\n \"🌒\",\n \"🌓\",\n \"🌔\",\n \"🌕\",\n \"🌖\",\n \"🌗\",\n \"🌘\",\n \"🌙\",\n \"🌚\",\n \"🌛\",\n \"🌜\",\n \"🌝\",\n \"🌞\",\n \"🌟\",\n \"🌠\",\n \"🌡️\",\n \"🌤️\",\n \"🌥️\",\n \"🌦️\",\n \"🌧️\",\n \"🌨️\",\n \"🌩️\",\n \"🌪️\",\n \"🌫️\",\n \"🌬️\",\n \"🌭\",\n \"🌮\",\n \"🌯\",\n \"🌰\",\n \"🌱\",\n \"🌲\",\n \"🌳\",\n \"🌴\",\n \"🌵\",\n \"🌶️\",\n \"🌷\",\n \"🌸\",\n \"🌹\",\n \"🌺\",\n \"🌻\",\n \"🌼\",\n \"🌽\",\n \"🌾\",\n \"🌿\",\n \"🍀\",\n \"🍁\",\n \"🍂\",\n \"🍃\",\n \"🍄\",\n \"🍅\",\n \"🍆\",\n \"🍇\",\n \"🍈\",\n \"🍉\",\n \"🍊\",\n \"🍋\",\n \"🍌\",\n \"🍍\",\n \"🍎\",\n \"🍏\",\n \"🍐\",\n \"🍑\",\n \"🍒\",\n \"🍓\",\n \"🍔\",\n \"🍕\",\n \"🍖\",\n \"🍗\",\n \"🍘\",\n \"🍙\",\n \"🍚\",\n \"🍛\",\n \"🍜\",\n \"🍝\",\n \"🍞\",\n \"🍟\",\n \"🍠\",\n \"🍡\",\n \"🍢\",\n \"🍣\",\n \"🍤\",\n \"🍥\",\n \"🍦\",\n \"🍧\",\n \"🍨\",\n \"🍩\",\n \"🍪\",\n \"🍫\",\n \"🍬\",\n \"🍭\",\n \"🍮\",\n \"🍯\",\n \"🍰\",\n \"🍱\",\n \"🍲\",\n \"🍳\",\n \"🍴\",\n \"🍵\",\n \"🍶\",\n \"🍷\",\n \"🍸\",\n \"🍹\",\n \"🍺\",\n \"🍻\",\n \"🍼\",\n \"🍽️\",\n \"🍾\",\n \"🍿\",\n \"🎀\",\n \"🎁\",\n \"🎂\",\n \"🎃\",\n \"🎄\",\n \"🎅🏻\",\n \"🎅🏼\",\n \"🎅🏽\",\n \"🎅🏾\",\n \"🎅🏿\",\n \"🎅\",\n \"🎆\",\n \"🎇\",\n \"🎈\",\n \"🎉\",\n \"🎊\",\n \"🎋\",\n \"🎌\",\n \"🎍\",\n \"🎎\",\n \"🎏\",\n \"🎐\",\n \"🎑\",\n \"🎒\",\n \"🎓\",\n \"🎖️\",\n \"🎗️\",\n \"🎙️\",\n \"🎚️\",\n \"🎛️\",\n \"🎞️\",\n \"🎟️\",\n \"🎠\",\n \"🎡\",\n \"🎢\",\n \"🎣\",\n \"🎤\",\n \"🎥\",\n \"🎦\",\n \"🎧\",\n \"🎨\",\n \"🎩\",\n \"🎪\",\n \"🎫\",\n \"🎬\",\n \"🎭\",\n \"🎮\",\n \"🎯\",\n \"🎰\",\n \"🎱\",\n \"🎲\",\n \"🎳\",\n \"🎴\",\n \"🎵\",\n \"🎶\",\n \"🎷\",\n \"🎸\",\n \"🎹\",\n \"🎺\",\n \"🎻\",\n \"🎼\",\n \"🎽\",\n \"🎾\",\n \"🎿\",\n \"🏀\",\n \"🏁\",\n \"🏂🏻\",\n \"🏂🏼\",\n \"🏂🏽\",\n \"🏂🏾\",\n \"🏂🏿\",\n \"🏂\",\n \"🏃🏻‍♀️\",\n \"🏃🏻‍♂️\",\n \"🏃🏻\",\n \"🏃🏼‍♀️\",\n \"🏃🏼‍♂️\",\n \"🏃🏼\",\n \"🏃🏽‍♀️\",\n \"🏃🏽‍♂️\",\n \"🏃🏽\",\n \"🏃🏾‍♀️\",\n \"🏃🏾‍♂️\",\n \"🏃🏾\",\n \"🏃🏿‍♀️\",\n \"🏃🏿‍♂️\",\n \"🏃🏿\",\n \"🏃‍♀️\",\n \"🏃‍♂️\",\n \"🏃\",\n \"🏄🏻‍♀️\",\n \"🏄🏻‍♂️\",\n \"🏄🏻\",\n \"🏄🏼‍♀️\",\n \"🏄🏼‍♂️\",\n \"🏄🏼\",\n \"🏄🏽‍♀️\",\n \"🏄🏽‍♂️\",\n \"🏄🏽\",\n \"🏄🏾‍♀️\",\n \"🏄🏾‍♂️\",\n \"🏄🏾\",\n \"🏄🏿‍♀️\",\n \"🏄🏿‍♂️\",\n \"🏄🏿\",\n \"🏄‍♀️\",\n \"🏄‍♂️\",\n \"🏄\",\n \"🏅\",\n \"🏆\",\n \"🏇🏻\",\n \"🏇🏼\",\n \"🏇🏽\",\n \"🏇🏾\",\n \"🏇🏿\",\n \"🏇\",\n \"🏈\",\n \"🏉\",\n \"🏊🏻‍♀️\",\n \"🏊🏻‍♂️\",\n \"🏊🏻\",\n \"🏊🏼‍♀️\",\n \"🏊🏼‍♂️\",\n \"🏊🏼\",\n \"🏊🏽‍♀️\",\n \"🏊🏽‍♂️\",\n \"🏊🏽\",\n \"🏊🏾‍♀️\",\n \"🏊🏾‍♂️\",\n \"🏊🏾\",\n \"🏊🏿‍♀️\",\n \"🏊🏿‍♂️\",\n \"🏊🏿\",\n \"🏊‍♀️\",\n \"🏊‍♂️\",\n \"🏊\",\n \"🏋🏻‍♀️\",\n \"🏋🏻‍♂️\",\n \"🏋🏻\",\n \"🏋🏼‍♀️\",\n \"🏋🏼‍♂️\",\n \"🏋🏼\",\n \"🏋🏽‍♀️\",\n \"🏋🏽‍♂️\",\n \"🏋🏽\",\n \"🏋🏾‍♀️\",\n \"🏋🏾‍♂️\",\n \"🏋🏾\",\n \"🏋🏿‍♀️\",\n \"🏋🏿‍♂️\",\n \"🏋🏿\",\n \"🏋️‍♀️\",\n \"🏋️‍♂️\",\n \"🏋️\",\n \"🏌🏻‍♀️\",\n \"🏌🏻‍♂️\",\n \"🏌🏻\",\n \"🏌🏼‍♀️\",\n \"🏌🏼‍♂️\",\n \"🏌🏼\",\n \"🏌🏽‍♀️\",\n \"🏌🏽‍♂️\",\n \"🏌🏽\",\n \"🏌🏾‍♀️\",\n \"🏌🏾‍♂️\",\n \"🏌🏾\",\n \"🏌🏿‍♀️\",\n \"🏌🏿‍♂️\",\n \"🏌🏿\",\n \"🏌️‍♀️\",\n \"🏌️‍♂️\",\n \"🏌️\",\n \"🏍️\",\n \"🏎️\",\n \"🏏\",\n \"🏐\",\n \"🏑\",\n \"🏒\",\n \"🏓\",\n \"🏔️\",\n \"🏕️\",\n \"🏖️\",\n \"🏗️\",\n \"🏘️\",\n \"🏙️\",\n \"🏚️\",\n \"🏛️\",\n \"🏜️\",\n \"🏝️\",\n \"🏞️\",\n \"🏟️\",\n \"🏠\",\n \"🏡\",\n \"🏢\",\n \"🏣\",\n \"🏤\",\n \"🏥\",\n \"🏦\",\n \"🏧\",\n \"🏨\",\n \"🏩\",\n \"🏪\",\n \"🏫\",\n \"🏬\",\n \"🏭\",\n \"🏮\",\n \"🏯\",\n \"🏰\",\n \"🏳️‍🌈\",\n \"🏳️\",\n \"🏴‍☠️\",\n \"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\n \"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\n \"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\n \"🏴\",\n \"🏵️\",\n \"🏷️\",\n \"🏸\",\n \"🏹\",\n \"🏺\",\n \"🏻\",\n \"🏼\",\n \"🏽\",\n \"🏾\",\n \"🏿\",\n \"🐀\",\n \"🐁\",\n \"🐂\",\n \"🐃\",\n \"🐄\",\n \"🐅\",\n \"🐆\",\n \"🐇\",\n \"🐈\",\n \"🐉\",\n \"🐊\",\n \"🐋\",\n \"🐌\",\n \"🐍\",\n \"🐎\",\n \"🐏\",\n \"🐐\",\n \"🐑\",\n \"🐒\",\n \"🐓\",\n \"🐔\",\n \"🐕‍🦺\",\n \"🐕\",\n \"🐖\",\n \"🐗\",\n \"🐘\",\n \"🐙\",\n \"🐚\",\n \"🐛\",\n \"🐜\",\n \"🐝\",\n \"🐞\",\n \"🐟\",\n \"🐠\",\n \"🐡\",\n \"🐢\",\n \"🐣\",\n \"🐤\",\n \"🐥\",\n \"🐦\",\n \"🐧\",\n \"🐨\",\n \"🐩\",\n \"🐪\",\n \"🐫\",\n \"🐬\",\n \"🐭\",\n \"🐮\",\n \"🐯\",\n \"🐰\",\n \"🐱\",\n \"🐲\",\n \"🐳\",\n \"🐴\",\n \"🐵\",\n \"🐶\",\n \"🐷\",\n \"🐸\",\n \"🐹\",\n \"🐺\",\n \"🐻\",\n \"🐼\",\n \"🐽\",\n \"🐾\",\n \"🐿️\",\n \"👀\",\n \"👁‍🗨\",\n \"👁️\",\n \"👂🏻\",\n \"👂🏼\",\n \"👂🏽\",\n \"👂🏾\",\n \"👂🏿\",\n \"👂\",\n \"👃🏻\",\n \"👃🏼\",\n \"👃🏽\",\n \"👃🏾\",\n \"👃🏿\",\n \"👃\",\n \"👄\",\n \"👅\",\n \"👆🏻\",\n \"👆🏼\",\n \"👆🏽\",\n \"👆🏾\",\n \"👆🏿\",\n \"👆\",\n \"👇🏻\",\n \"👇🏼\",\n \"👇🏽\",\n \"👇🏾\",\n \"👇🏿\",\n \"👇\",\n \"👈🏻\",\n \"👈🏼\",\n \"👈🏽\",\n \"👈🏾\",\n \"👈🏿\",\n \"👈\",\n \"👉🏻\",\n \"👉🏼\",\n \"👉🏽\",\n \"👉🏾\",\n \"👉🏿\",\n \"👉\",\n \"👊🏻\",\n \"👊🏼\",\n \"👊🏽\",\n \"👊🏾\",\n \"👊🏿\",\n \"👊\",\n \"👋🏻\",\n \"👋🏼\",\n \"👋🏽\",\n \"👋🏾\",\n \"👋🏿\",\n \"👋\",\n \"👌🏻\",\n \"👌🏼\",\n \"👌🏽\",\n \"👌🏾\",\n \"👌🏿\",\n \"👌\",\n \"👍🏻\",\n \"👍🏼\",\n \"👍🏽\",\n \"👍🏾\",\n \"👍🏿\",\n \"👍\",\n \"👎🏻\",\n \"👎🏼\",\n \"👎🏽\",\n \"👎🏾\",\n \"👎🏿\",\n \"👎\",\n \"👏🏻\",\n \"👏🏼\",\n \"👏🏽\",\n \"👏🏾\",\n \"👏🏿\",\n \"👏\",\n \"👐🏻\",\n \"👐🏼\",\n \"👐🏽\",\n \"👐🏾\",\n \"👐🏿\",\n \"👐\",\n \"👑\",\n \"👒\",\n \"👓\",\n \"👔\",\n \"👕\",\n \"👖\",\n \"👗\",\n \"👘\",\n \"👙\",\n \"👚\",\n \"👛\",\n \"👜\",\n \"👝\",\n \"👞\",\n \"👟\",\n \"👠\",\n \"👡\",\n \"👢\",\n \"👣\",\n \"👤\",\n \"👥\",\n \"👦🏻\",\n \"👦🏼\",\n \"👦🏽\",\n \"👦🏾\",\n \"👦🏿\",\n \"👦\",\n \"👧🏻\",\n \"👧🏼\",\n \"👧🏽\",\n \"👧🏾\",\n \"👧🏿\",\n \"👧\",\n \"👨🏻‍🌾\",\n \"👨🏻‍🍳\",\n \"👨🏻‍🎓\",\n \"👨🏻‍🎤\",\n \"👨🏻‍🎨\",\n \"👨🏻‍🏫\",\n \"👨🏻‍🏭\",\n \"👨🏻‍💻\",\n \"👨🏻‍💼\",\n \"👨🏻‍🔧\",\n \"👨🏻‍🔬\",\n \"👨🏻‍🚀\",\n \"👨🏻‍🚒\",\n \"👨🏻‍🦯\",\n \"👨🏻‍🦰\",\n \"👨🏻‍🦱\",\n \"👨🏻‍🦲\",\n \"👨🏻‍🦳\",\n \"👨🏻‍🦼\",\n \"👨🏻‍🦽\",\n \"👨🏻‍⚕️\",\n \"👨🏻‍⚖️\",\n \"👨🏻‍✈️\",\n \"👨🏻\",\n \"👨🏼‍🌾\",\n \"👨🏼‍🍳\",\n \"👨🏼‍🎓\",\n \"👨🏼‍🎤\",\n \"👨🏼‍🎨\",\n \"👨🏼‍🏫\",\n \"👨🏼‍🏭\",\n \"👨🏼‍💻\",\n \"👨🏼‍💼\",\n \"👨🏼‍🔧\",\n \"👨🏼‍🔬\",\n \"👨🏼‍🚀\",\n \"👨🏼‍🚒\",\n \"👨🏼‍🤝‍👨🏻\",\n \"👨🏼‍🦯\",\n \"👨🏼‍🦰\",\n \"👨🏼‍🦱\",\n \"👨🏼‍🦲\",\n \"👨🏼‍🦳\",\n \"👨🏼‍🦼\",\n \"👨🏼‍🦽\",\n \"👨🏼‍⚕️\",\n \"👨🏼‍⚖️\",\n \"👨🏼‍✈️\",\n \"👨🏼\",\n \"👨🏽‍🌾\",\n \"👨🏽‍🍳\",\n \"👨🏽‍🎓\",\n \"👨🏽‍🎤\",\n \"👨🏽‍🎨\",\n \"👨🏽‍🏫\",\n \"👨🏽‍🏭\",\n \"👨🏽‍💻\",\n \"👨🏽‍💼\",\n \"👨🏽‍🔧\",\n \"👨🏽‍🔬\",\n \"👨🏽‍🚀\",\n \"👨🏽‍🚒\",\n \"👨🏽‍🤝‍👨🏻\",\n \"👨🏽‍🤝‍👨🏼\",\n \"👨🏽‍🦯\",\n \"👨🏽‍🦰\",\n \"👨🏽‍🦱\",\n \"👨🏽‍🦲\",\n \"👨🏽‍🦳\",\n \"👨🏽‍🦼\",\n \"👨🏽‍🦽\",\n \"👨🏽‍⚕️\",\n \"👨🏽‍⚖️\",\n \"👨🏽‍✈️\",\n \"👨🏽\",\n \"👨🏾‍🌾\",\n \"👨🏾‍🍳\",\n \"👨🏾‍🎓\",\n \"👨🏾‍🎤\",\n \"👨🏾‍🎨\",\n \"👨🏾‍🏫\",\n \"👨🏾‍🏭\",\n \"👨🏾‍💻\",\n \"👨🏾‍💼\",\n \"👨🏾‍🔧\",\n \"👨🏾‍🔬\",\n \"👨🏾‍🚀\",\n \"👨🏾‍🚒\",\n \"👨🏾‍🤝‍👨🏻\",\n \"👨🏾‍🤝‍👨🏼\",\n \"👨🏾‍🤝‍👨🏽\",\n \"👨🏾‍🦯\",\n \"👨🏾‍🦰\",\n \"👨🏾‍🦱\",\n \"👨🏾‍🦲\",\n \"👨🏾‍🦳\",\n \"👨🏾‍🦼\",\n \"👨🏾‍🦽\",\n \"👨🏾‍⚕️\",\n \"👨🏾‍⚖️\",\n \"👨🏾‍✈️\",\n \"👨🏾\",\n \"👨🏿‍🌾\",\n \"👨🏿‍🍳\",\n \"👨🏿‍🎓\",\n \"👨🏿‍🎤\",\n \"👨🏿‍🎨\",\n \"👨🏿‍🏫\",\n \"👨🏿‍🏭\",\n \"👨🏿‍💻\",\n \"👨🏿‍💼\",\n \"👨🏿‍🔧\",\n \"👨🏿‍🔬\",\n \"👨🏿‍🚀\",\n \"👨🏿‍🚒\",\n \"👨🏿‍🤝‍👨🏻\",\n \"👨🏿‍🤝‍👨🏼\",\n \"👨🏿‍🤝‍👨🏽\",\n \"👨🏿‍🤝‍👨🏾\",\n \"👨🏿‍🦯\",\n \"👨🏿‍🦰\",\n \"👨🏿‍🦱\",\n \"👨🏿‍🦲\",\n \"👨🏿‍🦳\",\n \"👨🏿‍🦼\",\n \"👨🏿‍🦽\",\n \"👨🏿‍⚕️\",\n \"👨🏿‍⚖️\",\n \"👨🏿‍✈️\",\n \"👨🏿\",\n \"👨‍🌾\",\n \"👨‍🍳\",\n \"👨‍🎓\",\n \"👨‍🎤\",\n \"👨‍🎨\",\n \"👨‍🏫\",\n \"👨‍🏭\",\n \"👨‍👦‍👦\",\n \"👨‍👦\",\n \"👨‍👧‍👦\",\n \"👨‍👧‍👧\",\n \"👨‍👧\",\n \"👨‍👨‍👦‍👦\",\n \"👨‍👨‍👦\",\n \"👨‍👨‍👧‍👦\",\n \"👨‍👨‍👧‍👧\",\n \"👨‍👨‍👧\",\n \"👨‍👩‍👦‍👦\",\n \"👨‍👩‍👦\",\n \"👨‍👩‍👧‍👦\",\n \"👨‍👩‍👧‍👧\",\n \"👨‍👩‍👧\",\n \"👨‍💻\",\n \"👨‍💼\",\n \"👨‍🔧\",\n \"👨‍🔬\",\n \"👨‍🚀\",\n \"👨‍🚒\",\n \"👨‍🦯\",\n \"👨‍🦰\",\n \"👨‍🦱\",\n \"👨‍🦲\",\n \"👨‍🦳\",\n \"👨‍🦼\",\n \"👨‍🦽\",\n \"👨‍⚕️\",\n \"👨‍⚖️\",\n \"👨‍✈️\",\n \"👨‍❤️‍👨\",\n \"👨‍❤️‍💋‍👨\",\n \"👨\",\n \"👩🏻‍🌾\",\n \"👩🏻‍🍳\",\n \"👩🏻‍🎓\",\n \"👩🏻‍🎤\",\n \"👩🏻‍🎨\",\n \"👩🏻‍🏫\",\n \"👩🏻‍🏭\",\n \"👩🏻‍💻\",\n \"👩🏻‍💼\",\n \"👩🏻‍🔧\",\n \"👩🏻‍🔬\",\n \"👩🏻‍🚀\",\n \"👩🏻‍🚒\",\n \"👩🏻‍🤝‍👨🏼\",\n \"👩🏻‍🤝‍👨🏽\",\n \"👩🏻‍🤝‍👨🏾\",\n \"👩🏻‍🤝‍👨🏿\",\n \"👩🏻‍🦯\",\n \"👩🏻‍🦰\",\n \"👩🏻‍🦱\",\n \"👩🏻‍🦲\",\n \"👩🏻‍🦳\",\n \"👩🏻‍🦼\",\n \"👩🏻‍🦽\",\n \"👩🏻‍⚕️\",\n \"👩🏻‍⚖️\",\n \"👩🏻‍✈️\",\n \"👩🏻\",\n \"👩🏼‍🌾\",\n \"👩🏼‍🍳\",\n \"👩🏼‍🎓\",\n \"👩🏼‍🎤\",\n \"👩🏼‍🎨\",\n \"👩🏼‍🏫\",\n \"👩🏼‍🏭\",\n \"👩🏼‍💻\",\n \"👩🏼‍💼\",\n \"👩🏼‍🔧\",\n \"👩🏼‍🔬\",\n \"👩🏼‍🚀\",\n \"👩🏼‍🚒\",\n \"👩🏼‍🤝‍👨🏻\",\n \"👩🏼‍🤝‍👨🏽\",\n \"👩🏼‍🤝‍👨🏾\",\n \"👩🏼‍🤝‍👨🏿\",\n \"👩🏼‍🤝‍👩🏻\",\n \"👩🏼‍🦯\",\n \"👩🏼‍🦰\",\n \"👩🏼‍🦱\",\n \"👩🏼‍🦲\",\n \"👩🏼‍🦳\",\n \"👩🏼‍🦼\",\n \"👩🏼‍🦽\",\n \"👩🏼‍⚕️\",\n \"👩🏼‍⚖️\",\n \"👩🏼‍✈️\",\n \"👩🏼\",\n \"👩🏽‍🌾\",\n \"👩🏽‍🍳\",\n \"👩🏽‍🎓\",\n \"👩🏽‍🎤\",\n \"👩🏽‍🎨\",\n \"👩🏽‍🏫\",\n \"👩🏽‍🏭\",\n \"👩🏽‍💻\",\n \"👩🏽‍💼\",\n \"👩🏽‍🔧\",\n \"👩🏽‍🔬\",\n \"👩🏽‍🚀\",\n \"👩🏽‍🚒\",\n \"👩🏽‍🤝‍👨🏻\",\n \"👩🏽‍🤝‍👨🏼\",\n \"👩🏽‍🤝‍👨🏾\",\n \"👩🏽‍🤝‍👨🏿\",\n \"👩🏽‍🤝‍👩🏻\",\n \"👩🏽‍🤝‍👩🏼\",\n \"👩🏽‍🦯\",\n \"👩🏽‍🦰\",\n \"👩🏽‍🦱\",\n \"👩🏽‍🦲\",\n \"👩🏽‍🦳\",\n \"👩🏽‍🦼\",\n \"👩🏽‍🦽\",\n \"👩🏽‍⚕️\",\n \"👩🏽‍⚖️\",\n \"👩🏽‍✈️\",\n \"👩🏽\",\n \"👩🏾‍🌾\",\n \"👩🏾‍🍳\",\n \"👩🏾‍🎓\",\n \"👩🏾‍🎤\",\n \"👩🏾‍🎨\",\n \"👩🏾‍🏫\",\n \"👩🏾‍🏭\",\n \"👩🏾‍💻\",\n \"👩🏾‍💼\",\n \"👩🏾‍🔧\",\n \"👩🏾‍🔬\",\n \"👩🏾‍🚀\",\n \"👩🏾‍🚒\",\n \"👩🏾‍🤝‍👨🏻\",\n \"👩🏾‍🤝‍👨🏼\",\n \"👩🏾‍🤝‍👨🏽\",\n \"👩🏾‍🤝‍👨🏿\",\n \"👩🏾‍🤝‍👩🏻\",\n \"👩🏾‍🤝‍👩🏼\",\n \"👩🏾‍🤝‍👩🏽\",\n \"👩🏾‍🦯\",\n \"👩🏾‍🦰\",\n \"👩🏾‍🦱\",\n \"👩🏾‍🦲\",\n \"👩🏾‍🦳\",\n \"👩🏾‍🦼\",\n \"👩🏾‍🦽\",\n \"👩🏾‍⚕️\",\n \"👩🏾‍⚖️\",\n \"👩🏾‍✈️\",\n \"👩🏾\",\n \"👩🏿‍🌾\",\n \"👩🏿‍🍳\",\n \"👩🏿‍🎓\",\n \"👩🏿‍🎤\",\n \"👩🏿‍🎨\",\n \"👩🏿‍🏫\",\n \"👩🏿‍🏭\",\n \"👩🏿‍💻\",\n \"👩🏿‍💼\",\n \"👩🏿‍🔧\",\n \"👩🏿‍🔬\",\n \"👩🏿‍🚀\",\n \"👩🏿‍🚒\",\n \"👩🏿‍🤝‍👨🏻\",\n \"👩🏿‍🤝‍👨🏼\",\n \"👩🏿‍🤝‍👨🏽\",\n \"👩🏿‍🤝‍👨🏾\",\n \"👩🏿‍🤝‍👩🏻\",\n \"👩🏿‍🤝‍👩🏼\",\n \"👩🏿‍🤝‍👩🏽\",\n \"👩🏿‍🤝‍👩🏾\",\n \"👩🏿‍🦯\",\n \"👩🏿‍🦰\",\n \"👩🏿‍🦱\",\n \"👩🏿‍🦲\",\n \"👩🏿‍🦳\",\n \"👩🏿‍🦼\",\n \"👩🏿‍🦽\",\n \"👩🏿‍⚕️\",\n \"👩🏿‍⚖️\",\n \"👩🏿‍✈️\",\n \"👩🏿\",\n \"👩‍🌾\",\n \"👩‍🍳\",\n \"👩‍🎓\",\n \"👩‍🎤\",\n \"👩‍🎨\",\n \"👩‍🏫\",\n \"👩‍🏭\",\n \"👩‍👦‍👦\",\n \"👩‍👦\",\n \"👩‍👧‍👦\",\n \"👩‍👧‍👧\",\n \"👩‍👧\",\n \"👩‍👩‍👦‍👦\",\n \"👩‍👩‍👦\",\n \"👩‍👩‍👧‍👦\",\n \"👩‍👩‍👧‍👧\",\n \"👩‍👩‍👧\",\n \"👩‍💻\",\n \"👩‍💼\",\n \"👩‍🔧\",\n \"👩‍🔬\",\n \"👩‍🚀\",\n \"👩‍🚒\",\n \"👩‍🦯\",\n \"👩‍🦰\",\n \"👩‍🦱\",\n \"👩‍🦲\",\n \"👩‍🦳\",\n \"👩‍🦼\",\n \"👩‍🦽\",\n \"👩‍⚕️\",\n \"👩‍⚖️\",\n \"👩‍✈️\",\n \"👩‍❤️‍👨\",\n \"👩‍❤️‍👩\",\n \"👩‍❤️‍💋‍👨\",\n \"👩‍❤️‍💋‍👩\",\n \"👩\",\n \"👪\",\n \"👫🏻\",\n \"👫🏼\",\n \"👫🏽\",\n \"👫🏾\",\n \"👫🏿\",\n \"👫\",\n \"👬🏻\",\n \"👬🏼\",\n \"👬🏽\",\n \"👬🏾\",\n \"👬🏿\",\n \"👬\",\n \"👭🏻\",\n \"👭🏼\",\n \"👭🏽\",\n \"👭🏾\",\n \"👭🏿\",\n \"👭\",\n \"👮🏻‍♀️\",\n \"👮🏻‍♂️\",\n \"👮🏻\",\n \"👮🏼‍♀️\",\n \"👮🏼‍♂️\",\n \"👮🏼\",\n \"👮🏽‍♀️\",\n \"👮🏽‍♂️\",\n \"👮🏽\",\n \"👮🏾‍♀️\",\n \"👮🏾‍♂️\",\n \"👮🏾\",\n \"👮🏿‍♀️\",\n \"👮🏿‍♂️\",\n \"👮🏿\",\n \"👮‍♀️\",\n \"👮‍♂️\",\n \"👮\",\n \"👯‍♀️\",\n \"👯‍♂️\",\n \"👯\",\n \"👰🏻\",\n \"👰🏼\",\n \"👰🏽\",\n \"👰🏾\",\n \"👰🏿\",\n \"👰\",\n \"👱🏻‍♀️\",\n \"👱🏻‍♂️\",\n \"👱🏻\",\n \"👱🏼‍♀️\",\n \"👱🏼‍♂️\",\n \"👱🏼\",\n \"👱🏽‍♀️\",\n \"👱🏽‍♂️\",\n \"👱🏽\",\n \"👱🏾‍♀️\",\n \"👱🏾‍♂️\",\n \"👱🏾\",\n \"👱🏿‍♀️\",\n \"👱🏿‍♂️\",\n \"👱🏿\",\n \"👱‍♀️\",\n \"👱‍♂️\",\n \"👱\",\n \"👲🏻\",\n \"👲🏼\",\n \"👲🏽\",\n \"👲🏾\",\n \"👲🏿\",\n \"👲\",\n \"👳🏻‍♀️\",\n \"👳🏻‍♂️\",\n \"👳🏻\",\n \"👳🏼‍♀️\",\n \"👳🏼‍♂️\",\n \"👳🏼\",\n \"👳🏽‍♀️\",\n \"👳🏽‍♂️\",\n \"👳🏽\",\n \"👳🏾‍♀️\",\n \"👳🏾‍♂️\",\n \"👳🏾\",\n \"👳🏿‍♀️\",\n \"👳🏿‍♂️\",\n \"👳🏿\",\n \"👳‍♀️\",\n \"👳‍♂️\",\n \"👳\",\n \"👴🏻\",\n \"👴🏼\",\n \"👴🏽\",\n \"👴🏾\",\n \"👴🏿\",\n \"👴\",\n \"👵🏻\",\n \"👵🏼\",\n \"👵🏽\",\n \"👵🏾\",\n \"👵🏿\",\n \"👵\",\n \"👶🏻\",\n \"👶🏼\",\n \"👶🏽\",\n \"👶🏾\",\n \"👶🏿\",\n \"👶\",\n \"👷🏻‍♀️\",\n \"👷🏻‍♂️\",\n \"👷🏻\",\n \"👷🏼‍♀️\",\n \"👷🏼‍♂️\",\n \"👷🏼\",\n \"👷🏽‍♀️\",\n \"👷🏽‍♂️\",\n \"👷🏽\",\n \"👷🏾‍♀️\",\n \"👷🏾‍♂️\",\n \"👷🏾\",\n \"👷🏿‍♀️\",\n \"👷🏿‍♂️\",\n \"👷🏿\",\n \"👷‍♀️\",\n \"👷‍♂️\",\n \"👷\",\n \"👸🏻\",\n \"👸🏼\",\n \"👸🏽\",\n \"👸🏾\",\n \"👸🏿\",\n \"👸\",\n \"👹\",\n \"👺\",\n \"👻\",\n \"👼🏻\",\n \"👼🏼\",\n \"👼🏽\",\n \"👼🏾\",\n \"👼🏿\",\n \"👼\",\n \"👽\",\n \"👾\",\n \"👿\",\n \"💀\",\n \"💁🏻‍♀️\",\n \"💁🏻‍♂️\",\n \"💁🏻\",\n \"💁🏼‍♀️\",\n \"💁🏼‍♂️\",\n \"💁🏼\",\n \"💁🏽‍♀️\",\n \"💁🏽‍♂️\",\n \"💁🏽\",\n \"💁🏾‍♀️\",\n \"💁🏾‍♂️\",\n \"💁🏾\",\n \"💁🏿‍♀️\",\n \"💁🏿‍♂️\",\n \"💁🏿\",\n \"💁‍♀️\",\n \"💁‍♂️\",\n \"💁\",\n \"💂🏻‍♀️\",\n \"💂🏻‍♂️\",\n \"💂🏻\",\n \"💂🏼‍♀️\",\n \"💂🏼‍♂️\",\n \"💂🏼\",\n \"💂🏽‍♀️\",\n \"💂🏽‍♂️\",\n \"💂🏽\",\n \"💂🏾‍♀️\",\n \"💂🏾‍♂️\",\n \"💂🏾\",\n \"💂🏿‍♀️\",\n \"💂🏿‍♂️\",\n \"💂🏿\",\n \"💂‍♀️\",\n \"💂‍♂️\",\n \"💂\",\n \"💃🏻\",\n \"💃🏼\",\n \"💃🏽\",\n \"💃🏾\",\n \"💃🏿\",\n \"💃\",\n \"💄\",\n \"💅🏻\",\n \"💅🏼\",\n \"💅🏽\",\n \"💅🏾\",\n \"💅🏿\",\n \"💅\",\n \"💆🏻‍♀️\",\n \"💆🏻‍♂️\",\n \"💆🏻\",\n \"💆🏼‍♀️\",\n \"💆🏼‍♂️\",\n \"💆🏼\",\n \"💆🏽‍♀️\",\n \"💆🏽‍♂️\",\n \"💆🏽\",\n \"💆🏾‍♀️\",\n \"💆🏾‍♂️\",\n \"💆🏾\",\n \"💆🏿‍♀️\",\n \"💆🏿‍♂️\",\n \"💆🏿\",\n \"💆‍♀️\",\n \"💆‍♂️\",\n \"💆\",\n \"💇🏻‍♀️\",\n \"💇🏻‍♂️\",\n \"💇🏻\",\n \"💇🏼‍♀️\",\n \"💇🏼‍♂️\",\n \"💇🏼\",\n \"💇🏽‍♀️\",\n \"💇🏽‍♂️\",\n \"💇🏽\",\n \"💇🏾‍♀️\",\n \"💇🏾‍♂️\",\n \"💇🏾\",\n \"💇🏿‍♀️\",\n \"💇🏿‍♂️\",\n \"💇🏿\",\n \"💇‍♀️\",\n \"💇‍♂️\",\n \"💇\",\n \"💈\",\n \"💉\",\n \"💊\",\n \"💋\",\n \"💌\",\n \"💍\",\n \"💎\",\n \"💏\",\n \"💐\",\n \"💑\",\n \"💒\",\n \"💓\",\n \"💔\",\n \"💕\",\n \"💖\",\n \"💗\",\n \"💘\",\n \"💙\",\n \"💚\",\n \"💛\",\n \"💜\",\n \"💝\",\n \"💞\",\n \"💟\",\n \"💠\",\n \"💡\",\n \"💢\",\n \"💣\",\n \"💤\",\n \"💥\",\n \"💦\",\n \"💧\",\n \"💨\",\n \"💩\",\n \"💪🏻\",\n \"💪🏼\",\n \"💪🏽\",\n \"💪🏾\",\n \"💪🏿\",\n \"💪\",\n \"💫\",\n \"💬\",\n \"💭\",\n \"💮\",\n \"💯\",\n \"💰\",\n \"💱\",\n \"💲\",\n \"💳\",\n \"💴\",\n \"💵\",\n \"💶\",\n \"💷\",\n \"💸\",\n \"💹\",\n \"💺\",\n \"💻\",\n \"💼\",\n \"💽\",\n \"💾\",\n \"💿\",\n \"📀\",\n \"📁\",\n \"📂\",\n \"📃\",\n \"📄\",\n \"📅\",\n \"📆\",\n \"📇\",\n \"📈\",\n \"📉\",\n \"📊\",\n \"📋\",\n \"📌\",\n \"📍\",\n \"📎\",\n \"📏\",\n \"📐\",\n \"📑\",\n \"📒\",\n \"📓\",\n \"📔\",\n \"📕\",\n \"📖\",\n \"📗\",\n \"📘\",\n \"📙\",\n \"📚\",\n \"📛\",\n \"📜\",\n \"📝\",\n \"📞\",\n \"📟\",\n \"📠\",\n \"📡\",\n \"📢\",\n \"📣\",\n \"📤\",\n \"📥\",\n \"📦\",\n \"📧\",\n \"📨\",\n \"📩\",\n \"📪\",\n \"📫\",\n \"📬\",\n \"📭\",\n \"📮\",\n \"📯\",\n \"📰\",\n \"📱\",\n \"📲\",\n \"📳\",\n \"📴\",\n \"📵\",\n \"📶\",\n \"📷\",\n \"📸\",\n \"📹\",\n \"📺\",\n \"📻\",\n \"📼\",\n \"📽️\",\n \"📿\",\n \"🔀\",\n \"🔁\",\n \"🔂\",\n \"🔃\",\n \"🔄\",\n \"🔅\",\n \"🔆\",\n \"🔇\",\n \"🔈\",\n \"🔉\",\n \"🔊\",\n \"🔋\",\n \"🔌\",\n \"🔍\",\n \"🔎\",\n \"🔏\",\n \"🔐\",\n \"🔑\",\n \"🔒\",\n \"🔓\",\n \"🔔\",\n \"🔕\",\n \"🔖\",\n \"🔗\",\n \"🔘\",\n \"🔙\",\n \"🔚\",\n \"🔛\",\n \"🔜\",\n \"🔝\",\n \"🔞\",\n \"🔟\",\n \"🔠\",\n \"🔡\",\n \"🔢\",\n \"🔣\",\n \"🔤\",\n \"🔥\",\n \"🔦\",\n \"🔧\",\n \"🔨\",\n \"🔩\",\n \"🔪\",\n \"🔫\",\n \"🔬\",\n \"🔭\",\n \"🔮\",\n \"🔯\",\n \"🔰\",\n \"🔱\",\n \"🔲\",\n \"🔳\",\n \"🔴\",\n \"🔵\",\n \"🔶\",\n \"🔷\",\n \"🔸\",\n \"🔹\",\n \"🔺\",\n \"🔻\",\n \"🔼\",\n \"🔽\",\n \"🕉️\",\n \"🕊️\",\n \"🕋\",\n \"🕌\",\n \"🕍\",\n \"🕎\",\n \"🕐\",\n \"🕑\",\n \"🕒\",\n \"🕓\",\n \"🕔\",\n \"🕕\",\n \"🕖\",\n \"🕗\",\n \"🕘\",\n \"🕙\",\n \"🕚\",\n \"🕛\",\n \"🕜\",\n \"🕝\",\n \"🕞\",\n \"🕟\",\n \"🕠\",\n \"🕡\",\n \"🕢\",\n \"🕣\",\n \"🕤\",\n \"🕥\",\n \"🕦\",\n \"🕧\",\n \"🕯️\",\n \"🕰️\",\n \"🕳️\",\n \"🕴🏻‍♀️\",\n \"🕴🏻‍♂️\",\n \"🕴🏻\",\n \"🕴🏼‍♀️\",\n \"🕴🏼‍♂️\",\n \"🕴🏼\",\n \"🕴🏽‍♀️\",\n \"🕴🏽‍♂️\",\n \"🕴🏽\",\n \"🕴🏾‍♀️\",\n \"🕴🏾‍♂️\",\n \"🕴🏾\",\n \"🕴🏿‍♀️\",\n \"🕴🏿‍♂️\",\n \"🕴🏿\",\n \"🕴️‍♀️\",\n \"🕴️‍♂️\",\n \"🕴️\",\n \"🕵🏻‍♀️\",\n \"🕵🏻‍♂️\",\n \"🕵🏻\",\n \"🕵🏼‍♀️\",\n \"🕵🏼‍♂️\",\n \"🕵🏼\",\n \"🕵🏽‍♀️\",\n \"🕵🏽‍♂️\",\n \"🕵🏽\",\n \"🕵🏾‍♀️\",\n \"🕵🏾‍♂️\",\n \"🕵🏾\",\n \"🕵🏿‍♀️\",\n \"🕵🏿‍♂️\",\n \"🕵🏿\",\n \"🕵️‍♀️\",\n \"🕵️‍♂️\",\n \"🕵️\",\n \"🕶️\",\n \"🕷️\",\n \"🕸️\",\n \"🕹️\",\n \"🕺🏻\",\n \"🕺🏼\",\n \"🕺🏽\",\n \"🕺🏾\",\n \"🕺🏿\",\n \"🕺\",\n \"🖇️\",\n \"🖊️\",\n \"🖋️\",\n \"🖌️\",\n \"🖍️\",\n \"🖐🏻\",\n \"🖐🏼\",\n \"🖐🏽\",\n \"🖐🏾\",\n \"🖐🏿\",\n \"🖐️\",\n \"🖕🏻\",\n \"🖕🏼\",\n \"🖕🏽\",\n \"🖕🏾\",\n \"🖕🏿\",\n \"🖕\",\n \"🖖🏻\",\n \"🖖🏼\",\n \"🖖🏽\",\n \"🖖🏾\",\n \"🖖🏿\",\n \"🖖\",\n \"🖤\",\n \"🖥️\",\n \"🖨️\",\n \"🖱️\",\n \"🖲️\",\n \"🖼️\",\n \"🗂️\",\n \"🗃️\",\n \"🗄️\",\n \"🗑️\",\n \"🗒️\",\n \"🗓️\",\n \"🗜️\",\n \"🗝️\",\n \"🗞️\",\n \"🗡️\",\n \"🗣️\",\n \"🗨️\",\n \"🗯️\",\n \"🗳️\",\n \"🗺️\",\n \"🗻\",\n \"🗼\",\n \"🗽\",\n \"🗾\",\n \"🗿\",\n \"😀\",\n \"😁\",\n \"😂\",\n \"😃\",\n \"😄\",\n \"😅\",\n \"😆\",\n \"😇\",\n \"😈\",\n \"😉\",\n \"😊\",\n \"😋\",\n \"😌\",\n \"😍\",\n \"😎\",\n \"😏\",\n \"😐\",\n \"😑\",\n \"😒\",\n \"😓\",\n \"😔\",\n \"😕\",\n \"😖\",\n \"😗\",\n \"😘\",\n \"😙\",\n \"😚\",\n \"😛\",\n \"😜\",\n \"😝\",\n \"😞\",\n \"😟\",\n \"😠\",\n \"😡\",\n \"😢\",\n \"😣\",\n \"😤\",\n \"😥\",\n \"😦\",\n \"😧\",\n \"😨\",\n \"😩\",\n \"😪\",\n \"😫\",\n \"😬\",\n \"😭\",\n \"😮\",\n \"😯\",\n \"😰\",\n \"😱\",\n \"😲\",\n \"😳\",\n \"😴\",\n \"😵\",\n \"😶\",\n \"😷\",\n \"😸\",\n \"😹\",\n \"😺\",\n \"😻\",\n \"😼\",\n \"😽\",\n \"😾\",\n \"😿\",\n \"🙀\",\n \"🙁\",\n \"🙂\",\n \"🙃\",\n \"🙄\",\n \"🙅🏻‍♀️\",\n \"🙅🏻‍♂️\",\n \"🙅🏻\",\n \"🙅🏼‍♀️\",\n \"🙅🏼‍♂️\",\n \"🙅🏼\",\n \"🙅🏽‍♀️\",\n \"🙅🏽‍♂️\",\n \"🙅🏽\",\n \"🙅🏾‍♀️\",\n \"🙅🏾‍♂️\",\n \"🙅🏾\",\n \"🙅🏿‍♀️\",\n \"🙅🏿‍♂️\",\n \"🙅🏿\",\n \"🙅‍♀️\",\n \"🙅‍♂️\",\n \"🙅\",\n \"🙆🏻‍♀️\",\n \"🙆🏻‍♂️\",\n \"🙆🏻\",\n \"🙆🏼‍♀️\",\n \"🙆🏼‍♂️\",\n \"🙆🏼\",\n \"🙆🏽‍♀️\",\n \"🙆🏽‍♂️\",\n \"🙆🏽\",\n \"🙆🏾‍♀️\",\n \"🙆🏾‍♂️\",\n \"🙆🏾\",\n \"🙆🏿‍♀️\",\n \"🙆🏿‍♂️\",\n \"🙆🏿\",\n \"🙆‍♀️\",\n \"🙆‍♂️\",\n \"🙆\",\n \"🙇🏻‍♀️\",\n \"🙇🏻‍♂️\",\n \"🙇🏻\",\n \"🙇🏼‍♀️\",\n \"🙇🏼‍♂️\",\n \"🙇🏼\",\n \"🙇🏽‍♀️\",\n \"🙇🏽‍♂️\",\n \"🙇🏽\",\n \"🙇🏾‍♀️\",\n \"🙇🏾‍♂️\",\n \"🙇🏾\",\n \"🙇🏿‍♀️\",\n \"🙇🏿‍♂️\",\n \"🙇🏿\",\n \"🙇‍♀️\",\n \"🙇‍♂️\",\n \"🙇\",\n \"🙈\",\n \"🙉\",\n \"🙊\",\n \"🙋🏻‍♀️\",\n \"🙋🏻‍♂️\",\n \"🙋🏻\",\n \"🙋🏼‍♀️\",\n \"🙋🏼‍♂️\",\n \"🙋🏼\",\n \"🙋🏽‍♀️\",\n \"🙋🏽‍♂️\",\n \"🙋🏽\",\n \"🙋🏾‍♀️\",\n \"🙋🏾‍♂️\",\n \"🙋🏾\",\n \"🙋🏿‍♀️\",\n \"🙋🏿‍♂️\",\n \"🙋🏿\",\n \"🙋‍♀️\",\n \"🙋‍♂️\",\n \"🙋\",\n \"🙌🏻\",\n \"🙌🏼\",\n \"🙌🏽\",\n \"🙌🏾\",\n \"🙌🏿\",\n \"🙌\",\n \"🙍🏻‍♀️\",\n \"🙍🏻‍♂️\",\n \"🙍🏻\",\n \"🙍🏼‍♀️\",\n \"🙍🏼‍♂️\",\n \"🙍🏼\",\n \"🙍🏽‍♀️\",\n \"🙍🏽‍♂️\",\n \"🙍🏽\",\n \"🙍🏾‍♀️\",\n \"🙍🏾‍♂️\",\n \"🙍🏾\",\n \"🙍🏿‍♀️\",\n \"🙍🏿‍♂️\",\n \"🙍🏿\",\n \"🙍‍♀️\",\n \"🙍‍♂️\",\n \"🙍\",\n \"🙎🏻‍♀️\",\n \"🙎🏻‍♂️\",\n \"🙎🏻\",\n \"🙎🏼‍♀️\",\n \"🙎🏼‍♂️\",\n \"🙎🏼\",\n \"🙎🏽‍♀️\",\n \"🙎🏽‍♂️\",\n \"🙎🏽\",\n \"🙎🏾‍♀️\",\n \"🙎🏾‍♂️\",\n \"🙎🏾\",\n \"🙎🏿‍♀️\",\n \"🙎🏿‍♂️\",\n \"🙎🏿\",\n \"🙎‍♀️\",\n \"🙎‍♂️\",\n \"🙎\",\n \"🙏🏻\",\n \"🙏🏼\",\n \"🙏🏽\",\n \"🙏🏾\",\n \"🙏🏿\",\n \"🙏\",\n \"🚀\",\n \"🚁\",\n \"🚂\",\n \"🚃\",\n \"🚄\",\n \"🚅\",\n \"🚆\",\n \"🚇\",\n \"🚈\",\n \"🚉\",\n \"🚊\",\n \"🚋\",\n \"🚌\",\n \"🚍\",\n \"🚎\",\n \"🚏\",\n \"🚐\",\n \"🚑\",\n \"🚒\",\n \"🚓\",\n \"🚔\",\n \"🚕\",\n \"🚖\",\n \"🚗\",\n \"🚘\",\n \"🚙\",\n \"🚚\",\n \"🚛\",\n \"🚜\",\n \"🚝\",\n \"🚞\",\n \"🚟\",\n \"🚠\",\n \"🚡\",\n \"🚢\",\n \"🚣🏻‍♀️\",\n \"🚣🏻‍♂️\",\n \"🚣🏻\",\n \"🚣🏼‍♀️\",\n \"🚣🏼‍♂️\",\n \"🚣🏼\",\n \"🚣🏽‍♀️\",\n \"🚣🏽‍♂️\",\n \"🚣🏽\",\n \"🚣🏾‍♀️\",\n \"🚣🏾‍♂️\",\n \"🚣🏾\",\n \"🚣🏿‍♀️\",\n \"🚣🏿‍♂️\",\n \"🚣🏿\",\n \"🚣‍♀️\",\n \"🚣‍♂️\",\n \"🚣\",\n \"🚤\",\n \"🚥\",\n \"🚦\",\n \"🚧\",\n \"🚨\",\n \"🚩\",\n \"🚪\",\n \"🚫\",\n \"🚬\",\n \"🚭\",\n \"🚮\",\n \"🚯\",\n \"🚰\",\n \"🚱\",\n \"🚲\",\n \"🚳\",\n \"🚴🏻‍♀️\",\n \"🚴🏻‍♂️\",\n \"🚴🏻\",\n \"🚴🏼‍♀️\",\n \"🚴🏼‍♂️\",\n \"🚴🏼\",\n \"🚴🏽‍♀️\",\n \"🚴🏽‍♂️\",\n \"🚴🏽\",\n \"🚴🏾‍♀️\",\n \"🚴🏾‍♂️\",\n \"🚴🏾\",\n \"🚴🏿‍♀️\",\n \"🚴🏿‍♂️\",\n \"🚴🏿\",\n \"🚴‍♀️\",\n \"🚴‍♂️\",\n \"🚴\",\n \"🚵🏻‍♀️\",\n \"🚵🏻‍♂️\",\n \"🚵🏻\",\n \"🚵🏼‍♀️\",\n \"🚵🏼‍♂️\",\n \"🚵🏼\",\n \"🚵🏽‍♀️\",\n \"🚵🏽‍♂️\",\n \"🚵🏽\",\n \"🚵🏾‍♀️\",\n \"🚵🏾‍♂️\",\n \"🚵🏾\",\n \"🚵🏿‍♀️\",\n \"🚵🏿‍♂️\",\n \"🚵🏿\",\n \"🚵‍♀️\",\n \"🚵‍♂️\",\n \"🚵\",\n \"🚶🏻‍♀️\",\n \"🚶🏻‍♂️\",\n \"🚶🏻\",\n \"🚶🏼‍♀️\",\n \"🚶🏼‍♂️\",\n \"🚶🏼\",\n \"🚶🏽‍♀️\",\n \"🚶🏽‍♂️\",\n \"🚶🏽\",\n \"🚶🏾‍♀️\",\n \"🚶🏾‍♂️\",\n \"🚶🏾\",\n \"🚶🏿‍♀️\",\n \"🚶🏿‍♂️\",\n \"🚶🏿\",\n \"🚶‍♀️\",\n \"🚶‍♂️\",\n \"🚶\",\n \"🚷\",\n \"🚸\",\n \"🚹\",\n \"🚺\",\n \"🚻\",\n \"🚼\",\n \"🚽\",\n \"🚾\",\n \"🚿\",\n \"🛀🏻\",\n \"🛀🏼\",\n \"🛀🏽\",\n \"🛀🏾\",\n \"🛀🏿\",\n \"🛀\",\n \"🛁\",\n \"🛂\",\n \"🛃\",\n \"🛄\",\n \"🛅\",\n \"🛋️\",\n \"🛌🏻\",\n \"🛌🏼\",\n \"🛌🏽\",\n \"🛌🏾\",\n \"🛌🏿\",\n \"🛌\",\n \"🛍️\",\n \"🛎️\",\n \"🛏️\",\n \"🛐\",\n \"🛑\",\n \"🛒\",\n \"🛕\",\n \"🛠️\",\n \"🛡️\",\n \"🛢️\",\n \"🛣️\",\n \"🛤️\",\n \"🛥️\",\n \"🛩️\",\n \"🛫\",\n \"🛬\",\n \"🛰️\",\n \"🛳️\",\n \"🛴\",\n \"🛵\",\n \"🛶\",\n \"🛷\",\n \"🛸\",\n \"🛹\",\n \"🛺\",\n \"🟠\",\n \"🟡\",\n \"🟢\",\n \"🟣\",\n \"🟤\",\n \"🟥\",\n \"🟦\",\n \"🟧\",\n \"🟨\",\n \"🟩\",\n \"🟪\",\n \"🟫\",\n \"🤍\",\n \"🤎\",\n \"🤏🏻\",\n \"🤏🏼\",\n \"🤏🏽\",\n \"🤏🏾\",\n \"🤏🏿\",\n \"🤏\",\n \"🤐\",\n \"🤑\",\n \"🤒\",\n \"🤓\",\n \"🤔\",\n \"🤕\",\n \"🤖\",\n \"🤗\",\n \"🤘🏻\",\n \"🤘🏼\",\n \"🤘🏽\",\n \"🤘🏾\",\n \"🤘🏿\",\n \"🤘\",\n \"🤙🏻\",\n \"🤙🏼\",\n \"🤙🏽\",\n \"🤙🏾\",\n \"🤙🏿\",\n \"🤙\",\n \"🤚🏻\",\n \"🤚🏼\",\n \"🤚🏽\",\n \"🤚🏾\",\n \"🤚🏿\",\n \"🤚\",\n \"🤛🏻\",\n \"🤛🏼\",\n \"🤛🏽\",\n \"🤛🏾\",\n \"🤛🏿\",\n \"🤛\",\n \"🤜🏻\",\n \"🤜🏼\",\n \"🤜🏽\",\n \"🤜🏾\",\n \"🤜🏿\",\n \"🤜\",\n \"🤝\",\n \"🤞🏻\",\n \"🤞🏼\",\n \"🤞🏽\",\n \"🤞🏾\",\n \"🤞🏿\",\n \"🤞\",\n \"🤟🏻\",\n \"🤟🏼\",\n \"🤟🏽\",\n \"🤟🏾\",\n \"🤟🏿\",\n \"🤟\",\n \"🤠\",\n \"🤡\",\n \"🤢\",\n \"🤣\",\n \"🤤\",\n \"🤥\",\n \"🤦🏻‍♀️\",\n \"🤦🏻‍♂️\",\n \"🤦🏻\",\n \"🤦🏼‍♀️\",\n \"🤦🏼‍♂️\",\n \"🤦🏼\",\n \"🤦🏽‍♀️\",\n \"🤦🏽‍♂️\",\n \"🤦🏽\",\n \"🤦🏾‍♀️\",\n \"🤦🏾‍♂️\",\n \"🤦🏾\",\n \"🤦🏿‍♀️\",\n \"🤦🏿‍♂️\",\n \"🤦🏿\",\n \"🤦‍♀️\",\n \"🤦‍♂️\",\n \"🤦\",\n \"🤧\",\n \"🤨\",\n \"🤩\",\n \"🤪\",\n \"🤫\",\n \"🤬\",\n \"🤭\",\n \"🤮\",\n \"🤯\",\n \"🤰🏻\",\n \"🤰🏼\",\n \"🤰🏽\",\n \"🤰🏾\",\n \"🤰🏿\",\n \"🤰\",\n \"🤱🏻\",\n \"🤱🏼\",\n \"🤱🏽\",\n \"🤱🏾\",\n \"🤱🏿\",\n \"🤱\",\n \"🤲🏻\",\n \"🤲🏼\",\n \"🤲🏽\",\n \"🤲🏾\",\n \"🤲🏿\",\n \"🤲\",\n \"🤳🏻\",\n \"🤳🏼\",\n \"🤳🏽\",\n \"🤳🏾\",\n \"🤳🏿\",\n \"🤳\",\n \"🤴🏻\",\n \"🤴🏼\",\n \"🤴🏽\",\n \"🤴🏾\",\n \"🤴🏿\",\n \"🤴\",\n \"🤵🏻‍♀️\",\n \"🤵🏻‍♂️\",\n \"🤵🏻\",\n \"🤵🏼‍♀️\",\n \"🤵🏼‍♂️\",\n \"🤵🏼\",\n \"🤵🏽‍♀️\",\n \"🤵🏽‍♂️\",\n \"🤵🏽\",\n \"🤵🏾‍♀️\",\n \"🤵🏾‍♂️\",\n \"🤵🏾\",\n \"🤵🏿‍♀️\",\n \"🤵🏿‍♂️\",\n \"🤵🏿\",\n \"🤵‍♀️\",\n \"🤵‍♂️\",\n \"🤵\",\n \"🤶🏻\",\n \"🤶🏼\",\n \"🤶🏽\",\n \"🤶🏾\",\n \"🤶🏿\",\n \"🤶\",\n \"🤷🏻‍♀️\",\n \"🤷🏻‍♂️\",\n \"🤷🏻\",\n \"🤷🏼‍♀️\",\n \"🤷🏼‍♂️\",\n \"🤷🏼\",\n \"🤷🏽‍♀️\",\n \"🤷🏽‍♂️\",\n \"🤷🏽\",\n \"🤷🏾‍♀️\",\n \"🤷🏾‍♂️\",\n \"🤷🏾\",\n \"🤷🏿‍♀️\",\n \"🤷🏿‍♂️\",\n \"🤷🏿\",\n \"🤷‍♀️\",\n \"🤷‍♂️\",\n \"🤷\",\n \"🤸🏻‍♀️\",\n \"🤸🏻‍♂️\",\n \"🤸🏻\",\n \"🤸🏼‍♀️\",\n \"🤸🏼‍♂️\",\n \"🤸🏼\",\n \"🤸🏽‍♀️\",\n \"🤸🏽‍♂️\",\n \"🤸🏽\",\n \"🤸🏾‍♀️\",\n \"🤸🏾‍♂️\",\n \"🤸🏾\",\n \"🤸🏿‍♀️\",\n \"🤸🏿‍♂️\",\n \"🤸🏿\",\n \"🤸‍♀️\",\n \"🤸‍♂️\",\n \"🤸\",\n \"🤹🏻‍♀️\",\n \"🤹🏻‍♂️\",\n \"🤹🏻\",\n \"🤹🏼‍♀️\",\n \"🤹🏼‍♂️\",\n \"🤹🏼\",\n \"🤹🏽‍♀️\",\n \"🤹🏽‍♂️\",\n \"🤹🏽\",\n \"🤹🏾‍♀️\",\n \"🤹🏾‍♂️\",\n \"🤹🏾\",\n \"🤹🏿‍♀️\",\n \"🤹🏿‍♂️\",\n \"🤹🏿\",\n \"🤹‍♀️\",\n \"🤹‍♂️\",\n \"🤹\",\n \"🤺\",\n \"🤼‍♀️\",\n \"🤼‍♂️\",\n \"🤼\",\n \"🤽🏻‍♀️\",\n \"🤽🏻‍♂️\",\n \"🤽🏻\",\n \"🤽🏼‍♀️\",\n \"🤽🏼‍♂️\",\n \"🤽🏼\",\n \"🤽🏽‍♀️\",\n \"🤽🏽‍♂️\",\n \"🤽🏽\",\n \"🤽🏾‍♀️\",\n \"🤽🏾‍♂️\",\n \"🤽🏾\",\n \"🤽🏿‍♀️\",\n \"🤽🏿‍♂️\",\n \"🤽🏿\",\n \"🤽‍♀️\",\n \"🤽‍♂️\",\n \"🤽\",\n \"🤾🏻‍♀️\",\n \"🤾🏻‍♂️\",\n \"🤾🏻\",\n \"🤾🏼‍♀️\",\n \"🤾🏼‍♂️\",\n \"🤾🏼\",\n \"🤾🏽‍♀️\",\n \"🤾🏽‍♂️\",\n \"🤾🏽\",\n \"🤾🏾‍♀️\",\n \"🤾🏾‍♂️\",\n \"🤾🏾\",\n \"🤾🏿‍♀️\",\n \"🤾🏿‍♂️\",\n \"🤾🏿\",\n \"🤾‍♀️\",\n \"🤾‍♂️\",\n \"🤾\",\n \"🤿\",\n \"🥀\",\n \"🥁\",\n \"🥂\",\n \"🥃\",\n \"🥄\",\n \"🥅\",\n \"🥇\",\n \"🥈\",\n \"🥉\",\n \"🥊\",\n \"🥋\",\n \"🥌\",\n \"🥍\",\n \"🥎\",\n \"🥏\",\n \"🥐\",\n \"🥑\",\n \"🥒\",\n \"🥓\",\n \"🥔\",\n \"🥕\",\n \"🥖\",\n \"🥗\",\n \"🥘\",\n \"🥙\",\n \"🥚\",\n \"🥛\",\n \"🥜\",\n \"🥝\",\n \"🥞\",\n \"🥟\",\n \"🥠\",\n \"🥡\",\n \"🥢\",\n \"🥣\",\n \"🥤\",\n \"🥥\",\n \"🥦\",\n \"🥧\",\n \"🥨\",\n \"🥩\",\n \"🥪\",\n \"🥫\",\n \"🥬\",\n \"🥭\",\n \"🥮\",\n \"🥯\",\n \"🥰\",\n \"🥱\",\n \"🥳\",\n \"🥴\",\n \"🥵\",\n \"🥶\",\n \"🥺\",\n \"🥻\",\n \"🥼\",\n \"🥽\",\n \"🥾\",\n \"🥿\",\n \"🦀\",\n \"🦁\",\n \"🦂\",\n \"🦃\",\n \"🦄\",\n \"🦅\",\n \"🦆\",\n \"🦇\",\n \"🦈\",\n \"🦉\",\n \"🦊\",\n \"🦋\",\n \"🦌\",\n \"🦍\",\n \"🦎\",\n \"🦏\",\n \"🦐\",\n \"🦑\",\n \"🦒\",\n \"🦓\",\n \"🦔\",\n \"🦕\",\n \"🦖\",\n \"🦗\",\n \"🦘\",\n \"🦙\",\n \"🦚\",\n \"🦛\",\n \"🦜\",\n \"🦝\",\n \"🦞\",\n \"🦟\",\n \"🦠\",\n \"🦡\",\n \"🦢\",\n \"🦥\",\n \"🦦\",\n \"🦧\",\n \"🦨\",\n \"🦩\",\n \"🦪\",\n \"🦮\",\n \"🦯\",\n \"🦰\",\n \"🦱\",\n \"🦲\",\n \"🦳\",\n \"🦴\",\n \"🦵🏻\",\n \"🦵🏼\",\n \"🦵🏽\",\n \"🦵🏾\",\n \"🦵🏿\",\n \"🦵\",\n \"🦶🏻\",\n \"🦶🏼\",\n \"🦶🏽\",\n \"🦶🏾\",\n \"🦶🏿\",\n \"🦶\",\n \"🦷\",\n \"🦸🏻‍♀️\",\n \"🦸🏻‍♂️\",\n \"🦸🏻\",\n \"🦸🏼‍♀️\",\n \"🦸🏼‍♂️\",\n \"🦸🏼\",\n \"🦸🏽‍♀️\",\n \"🦸🏽‍♂️\",\n \"🦸🏽\",\n \"🦸🏾‍♀️\",\n \"🦸🏾‍♂️\",\n \"🦸🏾\",\n \"🦸🏿‍♀️\",\n \"🦸🏿‍♂️\",\n \"🦸🏿\",\n \"🦸‍♀️\",\n \"🦸‍♂️\",\n \"🦸\",\n \"🦹🏻‍♀️\",\n \"🦹🏻‍♂️\",\n \"🦹🏻\",\n \"🦹🏼‍♀️\",\n \"🦹🏼‍♂️\",\n \"🦹🏼\",\n \"🦹🏽‍♀️\",\n \"🦹🏽‍♂️\",\n \"🦹🏽\",\n \"🦹🏾‍♀️\",\n \"🦹🏾‍♂️\",\n \"🦹🏾\",\n \"🦹🏿‍♀️\",\n \"🦹🏿‍♂️\",\n \"🦹🏿\",\n \"🦹‍♀️\",\n \"🦹‍♂️\",\n \"🦹\",\n \"🦺\",\n \"🦻🏻\",\n \"🦻🏼\",\n \"🦻🏽\",\n \"🦻🏾\",\n \"🦻🏿\",\n \"🦻\",\n \"🦼\",\n \"🦽\",\n \"🦾\",\n \"🦿\",\n \"🧀\",\n \"🧁\",\n \"🧂\",\n \"🧃\",\n \"🧄\",\n \"🧅\",\n \"🧆\",\n \"🧇\",\n \"🧈\",\n \"🧉\",\n \"🧊\",\n \"🧍🏻‍♀️\",\n \"🧍🏻‍♂️\",\n \"🧍🏻\",\n \"🧍🏼‍♀️\",\n \"🧍🏼‍♂️\",\n \"🧍🏼\",\n \"🧍🏽‍♀️\",\n \"🧍🏽‍♂️\",\n \"🧍🏽\",\n \"🧍🏾‍♀️\",\n \"🧍🏾‍♂️\",\n \"🧍🏾\",\n \"🧍🏿‍♀️\",\n \"🧍🏿‍♂️\",\n \"🧍🏿\",\n \"🧍‍♀️\",\n \"🧍‍♂️\",\n \"🧍\",\n \"🧎🏻‍♀️\",\n \"🧎🏻‍♂️\",\n \"🧎🏻\",\n \"🧎🏼‍♀️\",\n \"🧎🏼‍♂️\",\n \"🧎🏼\",\n \"🧎🏽‍♀️\",\n \"🧎🏽‍♂️\",\n \"🧎🏽\",\n \"🧎🏾‍♀️\",\n \"🧎🏾‍♂️\",\n \"🧎🏾\",\n \"🧎🏿‍♀️\",\n \"🧎🏿‍♂️\",\n \"🧎🏿\",\n \"🧎‍♀️\",\n \"🧎‍♂️\",\n \"🧎\",\n \"🧏🏻‍♀️\",\n \"🧏🏻‍♂️\",\n \"🧏🏻\",\n \"🧏🏼‍♀️\",\n \"🧏🏼‍♂️\",\n \"🧏🏼\",\n \"🧏🏽‍♀️\",\n \"🧏🏽‍♂️\",\n \"🧏🏽\",\n \"🧏🏾‍♀️\",\n \"🧏🏾‍♂️\",\n \"🧏🏾\",\n \"🧏🏿‍♀️\",\n \"🧏🏿‍♂️\",\n \"🧏🏿\",\n \"🧏‍♀️\",\n \"🧏‍♂️\",\n \"🧏\",\n \"🧐\",\n \"🧑🏻‍🤝‍🧑🏻\",\n \"🧑🏻\",\n \"🧑🏼‍🤝‍🧑🏻\",\n \"🧑🏼‍🤝‍🧑🏼\",\n \"🧑🏼\",\n \"🧑🏽‍🤝‍🧑🏻\",\n \"🧑🏽‍🤝‍🧑🏼\",\n \"🧑🏽‍🤝‍🧑🏽\",\n \"🧑🏽\",\n \"🧑🏾‍🤝‍🧑🏻\",\n \"🧑🏾‍🤝‍🧑🏼\",\n \"🧑🏾‍🤝‍🧑🏽\",\n \"🧑🏾‍🤝‍🧑🏾\",\n \"🧑🏾\",\n \"🧑🏿‍🤝‍🧑🏻\",\n \"🧑🏿‍🤝‍🧑🏼\",\n \"🧑🏿‍🤝‍🧑🏽\",\n \"🧑🏿‍🤝‍🧑🏾\",\n \"🧑🏿‍🤝‍🧑🏿\",\n \"🧑🏿\",\n \"🧑‍🤝‍🧑\",\n \"🧑\",\n \"🧒🏻\",\n \"🧒🏼\",\n \"🧒🏽\",\n \"🧒🏾\",\n \"🧒🏿\",\n \"🧒\",\n \"🧓🏻\",\n \"🧓🏼\",\n \"🧓🏽\",\n \"🧓🏾\",\n \"🧓🏿\",\n \"🧓\",\n \"🧔🏻\",\n \"🧔🏼\",\n \"🧔🏽\",\n \"🧔🏾\",\n \"🧔🏿\",\n \"🧔\",\n \"🧕🏻\",\n \"🧕🏼\",\n \"🧕🏽\",\n \"🧕🏾\",\n \"🧕🏿\",\n \"🧕\",\n \"🧖🏻‍♀️\",\n \"🧖🏻‍♂️\",\n \"🧖🏻\",\n \"🧖🏼‍♀️\",\n \"🧖🏼‍♂️\",\n \"🧖🏼\",\n \"🧖🏽‍♀️\",\n \"🧖🏽‍♂️\",\n \"🧖🏽\",\n \"🧖🏾‍♀️\",\n \"🧖🏾‍♂️\",\n \"🧖🏾\",\n \"🧖🏿‍♀️\",\n \"🧖🏿‍♂️\",\n \"🧖🏿\",\n \"🧖‍♀️\",\n \"🧖‍♂️\",\n \"🧖\",\n \"🧗🏻‍♀️\",\n \"🧗🏻‍♂️\",\n \"🧗🏻\",\n \"🧗🏼‍♀️\",\n \"🧗🏼‍♂️\",\n \"🧗🏼\",\n \"🧗🏽‍♀️\",\n \"🧗🏽‍♂️\",\n \"🧗🏽\",\n \"🧗🏾‍♀️\",\n \"🧗🏾‍♂️\",\n \"🧗🏾\",\n \"🧗🏿‍♀️\",\n \"🧗🏿‍♂️\",\n \"🧗🏿\",\n \"🧗‍♀️\",\n \"🧗‍♂️\",\n \"🧗\",\n \"🧘🏻‍♀️\",\n \"🧘🏻‍♂️\",\n \"🧘🏻\",\n \"🧘🏼‍♀️\",\n \"🧘🏼‍♂️\",\n \"🧘🏼\",\n \"🧘🏽‍♀️\",\n \"🧘🏽‍♂️\",\n \"🧘🏽\",\n \"🧘🏾‍♀️\",\n \"🧘🏾‍♂️\",\n \"🧘🏾\",\n \"🧘🏿‍♀️\",\n \"🧘🏿‍♂️\",\n \"🧘🏿\",\n \"🧘‍♀️\",\n \"🧘‍♂️\",\n \"🧘\",\n \"🧙🏻‍♀️\",\n \"🧙🏻‍♂️\",\n \"🧙🏻\",\n \"🧙🏼‍♀️\",\n \"🧙🏼‍♂️\",\n \"🧙🏼\",\n \"🧙🏽‍♀️\",\n \"🧙🏽‍♂️\",\n \"🧙🏽\",\n \"🧙🏾‍♀️\",\n \"🧙🏾‍♂️\",\n \"🧙🏾\",\n \"🧙🏿‍♀️\",\n \"🧙🏿‍♂️\",\n \"🧙🏿\",\n \"🧙‍♀️\",\n \"🧙‍♂️\",\n \"🧙\",\n \"🧚🏻‍♀️\",\n \"🧚🏻‍♂️\",\n \"🧚🏻\",\n \"🧚🏼‍♀️\",\n \"🧚🏼‍♂️\",\n \"🧚🏼\",\n \"🧚🏽‍♀️\",\n \"🧚🏽‍♂️\",\n \"🧚🏽\",\n \"🧚🏾‍♀️\",\n \"🧚🏾‍♂️\",\n \"🧚🏾\",\n \"🧚🏿‍♀️\",\n \"🧚🏿‍♂️\",\n \"🧚🏿\",\n \"🧚‍♀️\",\n \"🧚‍♂️\",\n \"🧚\",\n \"🧛🏻‍♀️\",\n \"🧛🏻‍♂️\",\n \"🧛🏻\",\n \"🧛🏼‍♀️\",\n \"🧛🏼‍♂️\",\n \"🧛🏼\",\n \"🧛🏽‍♀️\",\n \"🧛🏽‍♂️\",\n \"🧛🏽\",\n \"🧛🏾‍♀️\",\n \"🧛🏾‍♂️\",\n \"🧛🏾\",\n \"🧛🏿‍♀️\",\n \"🧛🏿‍♂️\",\n \"🧛🏿\",\n \"🧛‍♀️\",\n \"🧛‍♂️\",\n \"🧛\",\n \"🧜🏻‍♀️\",\n \"🧜🏻‍♂️\",\n \"🧜🏻\",\n \"🧜🏼‍♀️\",\n \"🧜🏼‍♂️\",\n \"🧜🏼\",\n \"🧜🏽‍♀️\",\n \"🧜🏽‍♂️\",\n \"🧜🏽\",\n \"🧜🏾‍♀️\",\n \"🧜🏾‍♂️\",\n \"🧜🏾\",\n \"🧜🏿‍♀️\",\n \"🧜🏿‍♂️\",\n \"🧜🏿\",\n \"🧜‍♀️\",\n \"🧜‍♂️\",\n \"🧜\",\n \"🧝🏻‍♀️\",\n \"🧝🏻‍♂️\",\n \"🧝🏻\",\n \"🧝🏼‍♀️\",\n \"🧝🏼‍♂️\",\n \"🧝🏼\",\n \"🧝🏽‍♀️\",\n \"🧝🏽‍♂️\",\n \"🧝🏽\",\n \"🧝🏾‍♀️\",\n \"🧝🏾‍♂️\",\n \"🧝🏾\",\n \"🧝🏿‍♀️\",\n \"🧝🏿‍♂️\",\n \"🧝🏿\",\n \"🧝‍♀️\",\n \"🧝‍♂️\",\n \"🧝\",\n \"🧞‍♀️\",\n \"🧞‍♂️\",\n \"🧞\",\n \"🧟‍♀️\",\n \"🧟‍♂️\",\n \"🧟\",\n \"🧠\",\n \"🧡\",\n \"🧢\",\n \"🧣\",\n \"🧤\",\n \"🧥\",\n \"🧦\",\n \"🧧\",\n \"🧨\",\n \"🧩\",\n \"🧪\",\n \"🧫\",\n \"🧬\",\n \"🧭\",\n \"🧮\",\n \"🧯\",\n \"🧰\",\n \"🧱\",\n \"🧲\",\n \"🧳\",\n \"🧴\",\n \"🧵\",\n \"🧶\",\n \"🧷\",\n \"🧸\",\n \"🧹\",\n \"🧺\",\n \"🧻\",\n \"🧼\",\n \"🧽\",\n \"🧾\",\n \"🧿\",\n \"🩰\",\n \"🩱\",\n \"🩲\",\n \"🩳\",\n \"🩸\",\n \"🩹\",\n \"🩺\",\n \"🪀\",\n \"🪁\",\n \"🪂\",\n \"🪐\",\n \"🪑\",\n \"🪒\",\n \"🪓\",\n \"🪔\",\n \"🪕\",\n \"‼️\",\n \"⁉️\",\n \"™️\",\n \"ℹ️\",\n \"↔️\",\n \"↕️\",\n \"↖️\",\n \"↗️\",\n \"↘️\",\n \"↙️\",\n \"↩️\",\n \"↪️\",\n \"#⃣\",\n \"⌚️\",\n \"⌛️\",\n \"⌨️\",\n \"⏏️\",\n \"⏩\",\n \"⏪\",\n \"⏫\",\n \"⏬\",\n \"⏭️\",\n \"⏮️\",\n \"⏯️\",\n \"⏰\",\n \"⏱️\",\n \"⏲️\",\n \"⏳\",\n \"⏸️\",\n \"⏹️\",\n \"⏺️\",\n \"Ⓜ️\",\n \"▪️\",\n \"▫️\",\n \"▶️\",\n \"◀️\",\n \"◻️\",\n \"◼️\",\n \"◽️\",\n \"◾️\",\n \"☀️\",\n \"☁️\",\n \"☂️\",\n \"☃️\",\n \"☄️\",\n \"☎️\",\n \"☑️\",\n \"☔️\",\n \"☕️\",\n \"☘️\",\n \"☝🏻\",\n \"☝🏼\",\n \"☝🏽\",\n \"☝🏾\",\n \"☝🏿\",\n \"☝️\",\n \"☠️\",\n \"☢️\",\n \"☣️\",\n \"☦️\",\n \"☪️\",\n \"☮️\",\n \"☯️\",\n \"☸️\",\n \"☹️\",\n \"☺️\",\n \"♀️\",\n \"♂️\",\n \"♈️\",\n \"♉️\",\n \"♊️\",\n \"♋️\",\n \"♌️\",\n \"♍️\",\n \"♎️\",\n \"♏️\",\n \"♐️\",\n \"♑️\",\n \"♒️\",\n \"♓️\",\n \"♟️\",\n \"♠️\",\n \"♣️\",\n \"♥️\",\n \"♦️\",\n \"♨️\",\n \"♻️\",\n \"♾\",\n \"♿️\",\n \"⚒️\",\n \"⚓️\",\n \"⚔️\",\n \"⚕️\",\n \"⚖️\",\n \"⚗️\",\n \"⚙️\",\n \"⚛️\",\n \"⚜️\",\n \"⚠️\",\n \"⚡️\",\n \"⚪️\",\n \"⚫️\",\n \"⚰️\",\n \"⚱️\",\n \"⚽️\",\n \"⚾️\",\n \"⛄️\",\n \"⛅️\",\n \"⛈️\",\n \"⛎\",\n \"⛏️\",\n \"⛑️\",\n \"⛓️\",\n \"⛔️\",\n \"⛩️\",\n \"⛪️\",\n \"⛰️\",\n \"⛱️\",\n \"⛲️\",\n \"⛳️\",\n \"⛴️\",\n \"⛵️\",\n \"⛷🏻\",\n \"⛷🏼\",\n \"⛷🏽\",\n \"⛷🏾\",\n \"⛷🏿\",\n \"⛷️\",\n \"⛸️\",\n \"⛹🏻‍♀️\",\n \"⛹🏻‍♂️\",\n \"⛹🏻\",\n \"⛹🏼‍♀️\",\n \"⛹🏼‍♂️\",\n \"⛹🏼\",\n \"⛹🏽‍♀️\",\n \"⛹🏽‍♂️\",\n \"⛹🏽\",\n \"⛹🏾‍♀️\",\n \"⛹🏾‍♂️\",\n \"⛹🏾\",\n \"⛹🏿‍♀️\",\n \"⛹🏿‍♂️\",\n \"⛹🏿\",\n \"⛹️‍♀️\",\n \"⛹️‍♂️\",\n \"⛹️\",\n \"⛺️\",\n \"⛽️\",\n \"✂️\",\n \"✅\",\n \"✈️\",\n \"✉️\",\n \"✊🏻\",\n \"✊🏼\",\n \"✊🏽\",\n \"✊🏾\",\n \"✊🏿\",\n \"✊\",\n \"✋🏻\",\n \"✋🏼\",\n \"✋🏽\",\n \"✋🏾\",\n \"✋🏿\",\n \"✋\",\n \"✌🏻\",\n \"✌🏼\",\n \"✌🏽\",\n \"✌🏾\",\n \"✌🏿\",\n \"✌️\",\n \"✍🏻\",\n \"✍🏼\",\n \"✍🏽\",\n \"✍🏾\",\n \"✍🏿\",\n \"✍️\",\n \"✏️\",\n \"✒️\",\n \"✔️\",\n \"✖️\",\n \"✝️\",\n \"✡️\",\n \"✨\",\n \"✳️\",\n \"✴️\",\n \"❄️\",\n \"❇️\",\n \"❌\",\n \"❎\",\n \"❓\",\n \"❔\",\n \"❕\",\n \"❗️\",\n \"❣️\",\n \"❤️\",\n \"➕\",\n \"➖\",\n \"➗\",\n \"➡️\",\n \"➰\",\n \"➿\",\n \"⤴️\",\n \"⤵️\",\n \"*⃣\",\n \"⬅️\",\n \"⬆️\",\n \"⬇️\",\n \"⬛️\",\n \"⬜️\",\n \"⭐️\",\n \"⭕️\",\n \"0⃣\",\n \"〰️\",\n \"〽️\",\n \"1⃣\",\n \"2⃣\",\n \"㊗️\",\n \"㊙️\",\n \"3⃣\",\n \"4⃣\",\n \"5⃣\",\n \"6⃣\",\n \"7⃣\",\n \"8⃣\",\n \"9⃣\",\n \"©️\",\n \"®️\",\n \"\"\n]","'use strict';\n\nconst path = require('path');\nconst emojisList = require('emojis-list');\nconst getHashDigest = require('./getHashDigest');\n\nconst emojiRegex = /[\\uD800-\\uDFFF]./;\nconst emojiList = emojisList.filter((emoji) => emojiRegex.test(emoji));\nconst emojiCache = {};\n\nfunction encodeStringToEmoji(content, length) {\n if (emojiCache[content]) {\n return emojiCache[content];\n }\n\n length = length || 1;\n\n const emojis = [];\n\n do {\n if (!emojiList.length) {\n throw new Error('Ran out of emoji');\n }\n\n const index = Math.floor(Math.random() * emojiList.length);\n\n emojis.push(emojiList[index]);\n emojiList.splice(index, 1);\n } while (--length > 0);\n\n const emojiEncoding = emojis.join('');\n\n emojiCache[content] = emojiEncoding;\n\n return emojiEncoding;\n}\n\nfunction interpolateName(loaderContext, name, options) {\n let filename;\n\n const hasQuery =\n loaderContext.resourceQuery && loaderContext.resourceQuery.length > 1;\n\n if (typeof name === 'function') {\n filename = name(\n loaderContext.resourcePath,\n hasQuery ? loaderContext.resourceQuery : undefined\n );\n } else {\n filename = name || '[hash].[ext]';\n }\n\n const context = options.context;\n const content = options.content;\n const regExp = options.regExp;\n\n let ext = 'bin';\n let basename = 'file';\n let directory = '';\n let folder = '';\n let query = '';\n\n if (loaderContext.resourcePath) {\n const parsed = path.parse(loaderContext.resourcePath);\n let resourcePath = loaderContext.resourcePath;\n\n if (parsed.ext) {\n ext = parsed.ext.substr(1);\n }\n\n if (parsed.dir) {\n basename = parsed.name;\n resourcePath = parsed.dir + path.sep;\n }\n\n if (typeof context !== 'undefined') {\n directory = path\n .relative(context, resourcePath + '_')\n .replace(/\\\\/g, '/')\n .replace(/\\.\\.(\\/)?/g, '_$1');\n directory = directory.substr(0, directory.length - 1);\n } else {\n directory = resourcePath.replace(/\\\\/g, '/').replace(/\\.\\.(\\/)?/g, '_$1');\n }\n\n if (directory.length === 1) {\n directory = '';\n } else if (directory.length > 1) {\n folder = path.basename(directory);\n }\n }\n\n if (loaderContext.resourceQuery && loaderContext.resourceQuery.length > 1) {\n query = loaderContext.resourceQuery;\n\n const hashIdx = query.indexOf('#');\n\n if (hashIdx >= 0) {\n query = query.substr(0, hashIdx);\n }\n }\n\n let url = filename;\n\n if (content) {\n // Match hash template\n url = url\n // `hash` and `contenthash` are same in `loader-utils` context\n // let's keep `hash` for backward compatibility\n .replace(\n /\\[(?:([^:\\]]+):)?(?:hash|contenthash)(?::([a-z]+\\d*))?(?::(\\d+))?\\]/gi,\n (all, hashType, digestType, maxLength) =>\n getHashDigest(content, hashType, digestType, parseInt(maxLength, 10))\n )\n .replace(/\\[emoji(?::(\\d+))?\\]/gi, (all, length) =>\n encodeStringToEmoji(content, parseInt(length, 10))\n );\n }\n\n url = url\n .replace(/\\[ext\\]/gi, () => ext)\n .replace(/\\[name\\]/gi, () => basename)\n .replace(/\\[path\\]/gi, () => directory)\n .replace(/\\[folder\\]/gi, () => folder)\n .replace(/\\[query\\]/gi, () => query);\n\n if (regExp && loaderContext.resourcePath) {\n const match = loaderContext.resourcePath.match(new RegExp(regExp));\n\n match &&\n match.forEach((matched, i) => {\n url = url.replace(new RegExp('\\\\[' + i + '\\\\]', 'ig'), matched);\n });\n }\n\n if (\n typeof loaderContext.options === 'object' &&\n typeof loaderContext.options.customInterpolateName === 'function'\n ) {\n url = loaderContext.options.customInterpolateName.call(\n loaderContext,\n url,\n name,\n options\n );\n }\n\n return url;\n}\n\nmodule.exports = interpolateName;\n","'use strict';\n\nconst getOptions = require('./getOptions');\nconst parseQuery = require('./parseQuery');\nconst stringifyRequest = require('./stringifyRequest');\nconst getRemainingRequest = require('./getRemainingRequest');\nconst getCurrentRequest = require('./getCurrentRequest');\nconst isUrlRequest = require('./isUrlRequest');\nconst urlToRequest = require('./urlToRequest');\nconst parseString = require('./parseString');\nconst getHashDigest = require('./getHashDigest');\nconst interpolateName = require('./interpolateName');\n\nexports.getOptions = getOptions;\nexports.parseQuery = parseQuery;\nexports.stringifyRequest = stringifyRequest;\nexports.getRemainingRequest = getRemainingRequest;\nexports.getCurrentRequest = getCurrentRequest;\nexports.isUrlRequest = isUrlRequest;\nexports.urlToRequest = urlToRequest;\nexports.parseString = parseString;\nexports.getHashDigest = getHashDigest;\nexports.interpolateName = interpolateName;\n","\"use strict\";\n\nvar interpolateName = require(\"loader-utils\").interpolateName;\nvar path = require(\"path\");\n\n/**\n * @param {string} pattern\n * @param {object} options\n * @param {string} options.context\n * @param {string} options.hashPrefix\n * @return {function}\n */\nmodule.exports = function createGenerator(pattern, options) {\n options = options || {};\n var context =\n options && typeof options.context === \"string\"\n ? options.context\n : process.cwd();\n var hashPrefix =\n options && typeof options.hashPrefix === \"string\" ? options.hashPrefix : \"\";\n\n /**\n * @param {string} localName Usually a class name\n * @param {string} filepath Absolute path\n * @return {string}\n */\n return function generate(localName, filepath) {\n var name = pattern.replace(/\\[local\\]/gi, localName);\n var loaderContext = {\n resourcePath: filepath\n };\n\n var loaderOptions = {\n content:\n hashPrefix +\n path.relative(context, filepath).replace(/\\\\/g, \"/\") +\n \"+\" +\n localName,\n context: context\n };\n\n var genericName = interpolateName(loaderContext, name, loaderOptions);\n return genericName\n .replace(new RegExp(\"[^a-zA-Z0-9\\\\-_\\u00A0-\\uFFFF]\", \"g\"), \"-\")\n .replace(/^((-?[0-9])|--)/, \"_$1\");\n };\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = unquote;\n// copied from https://github.com/lakenen/node-unquote\n\nvar reg = /['\"]/;\n\nfunction unquote(str) {\n if (!str) {\n return \"\";\n }\n if (reg.test(str.charAt(0))) {\n str = str.substr(1);\n }\n if (reg.test(str.charAt(str.length - 1))) {\n str = str.substr(0, str.length - 1);\n }\n return str;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.replaceAll = replaceAll;\nvar matchConstName = /[$#]?[\\w-\\.]+/g;\n\nfunction replaceAll(replacements, text) {\n var matches = void 0;\n while (matches = matchConstName.exec(text)) {\n var replacement = replacements[matches[0]];\n if (replacement) {\n text = text.slice(0, matches.index) + replacement + text.slice(matchConstName.lastIndex);\n matchConstName.lastIndex -= matches[0].length - replacement.length;\n }\n }\n return text;\n}\n\nexports.default = function (css, translations) {\n css.walkDecls(function (decl) {\n return decl.value = replaceAll(translations, decl.value);\n });\n css.walkAtRules('media', function (atRule) {\n return atRule.params = replaceAll(translations, atRule.params);\n });\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _icssReplaceSymbols = require(\"icss-replace-symbols\");\n\nvar _icssReplaceSymbols2 = _interopRequireDefault(_icssReplaceSymbols);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Copied from https://github.com/css-modules/css-modules-loader-core\n\nconst importRegexp = /^:import\\((.+)\\)$/;\nclass Parser {\n constructor(pathFetcher, trace) {\n this.pathFetcher = pathFetcher;\n this.plugin = this.plugin.bind(this);\n this.exportTokens = {};\n this.translations = {};\n this.trace = trace;\n }\n\n plugin() {\n const parser = this;\n return {\n postcssPlugin: \"css-modules-parser\",\n OnceExit(css) {\n return Promise.all(parser.fetchAllImports(css)).then(() => parser.linkImportedSymbols(css)).then(() => parser.extractExports(css));\n }\n };\n }\n\n fetchAllImports(css) {\n let imports = [];\n css.each(node => {\n if (node.type == \"rule\" && node.selector.match(importRegexp)) {\n imports.push(this.fetchImport(node, css.source.input.from, imports.length));\n }\n });\n return imports;\n }\n\n linkImportedSymbols(css) {\n (0, _icssReplaceSymbols2.default)(css, this.translations);\n }\n\n extractExports(css) {\n css.each(node => {\n if (node.type == \"rule\" && node.selector == \":export\") this.handleExport(node);\n });\n }\n\n handleExport(exportNode) {\n exportNode.each(decl => {\n if (decl.type == \"decl\") {\n Object.keys(this.translations).forEach(translation => {\n decl.value = decl.value.replace(translation, this.translations[translation]);\n });\n this.exportTokens[decl.prop] = decl.value;\n }\n });\n exportNode.remove();\n }\n\n fetchImport(importNode, relativeTo, depNr) {\n let file = importNode.selector.match(importRegexp)[1],\n depTrace = this.trace + String.fromCharCode(depNr);\n return this.pathFetcher(file, relativeTo, depTrace).then(exports => {\n importNode.each(decl => {\n if (decl.type == \"decl\") {\n this.translations[decl.prop] = exports[decl.value];\n }\n });\n importNode.remove();\n }, err => console.log(err));\n }\n}\nexports.default = Parser;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _postcss = require(\"postcss\");\n\nvar _postcss2 = _interopRequireDefault(_postcss);\n\nvar _fs = require(\"fs\");\n\nvar _fs2 = _interopRequireDefault(_fs);\n\nvar _path = require(\"path\");\n\nvar _path2 = _interopRequireDefault(_path);\n\nvar _parser = require(\"./parser\");\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Copied from https://github.com/css-modules/css-modules-loader-core\n\nclass Core {\n constructor(plugins) {\n this.plugins = plugins || Core.defaultPlugins;\n }\n\n load(sourceString, sourcePath, trace, pathFetcher) {\n let parser = new _parser2.default(pathFetcher, trace);\n\n return (0, _postcss2.default)(this.plugins.concat([parser.plugin()])).process(sourceString, { from: \"/\" + sourcePath }).then(result => {\n return {\n injectableSource: result.css,\n exportTokens: parser.exportTokens\n };\n });\n }\n}\n\n// Sorts dependencies in the following way:\n// AAA comes before AA and A\n// AB comes after AA and before A\n// All Bs come after all As\n// This ensures that the files are always returned in the following order:\n// - In the order they were required, except\n// - After all their dependencies\nconst traceKeySorter = (a, b) => {\n if (a.length < b.length) {\n return a < b.substring(0, a.length) ? -1 : 1;\n } else if (a.length > b.length) {\n return a.substring(0, b.length) <= b ? -1 : 1;\n } else {\n return a < b ? -1 : 1;\n }\n};\n\nclass FileSystemLoader {\n constructor(root, plugins) {\n this.root = root;\n this.sources = {};\n this.traces = {};\n this.importNr = 0;\n this.core = new Core(plugins);\n this.tokensByFile = {};\n }\n\n fetch(_newPath, relativeTo, _trace) {\n let newPath = _newPath.replace(/^[\"']|[\"']$/g, \"\"),\n trace = _trace || String.fromCharCode(this.importNr++);\n return new Promise((resolve, reject) => {\n let relativeDir = _path2.default.dirname(relativeTo),\n rootRelativePath = _path2.default.resolve(relativeDir, newPath),\n fileRelativePath = _path2.default.resolve(_path2.default.join(this.root, relativeDir), newPath);\n\n // if the path is not relative or absolute, try to resolve it in node_modules\n if (newPath[0] !== \".\" && newPath[0] !== \"/\") {\n try {\n fileRelativePath = require.resolve(newPath);\n } catch (e) {\n // noop\n }\n }\n\n const tokens = this.tokensByFile[fileRelativePath];\n if (tokens) {\n return resolve(tokens);\n }\n\n _fs2.default.readFile(fileRelativePath, \"utf-8\", (err, source) => {\n if (err) reject(err);\n this.core.load(source, rootRelativePath, trace, this.fetch.bind(this)).then(({ injectableSource, exportTokens }) => {\n this.sources[fileRelativePath] = injectableSource;\n this.traces[trace] = fileRelativePath;\n this.tokensByFile[fileRelativePath] = exportTokens;\n resolve(exportTokens);\n }, reject);\n });\n });\n }\n\n get finalSource() {\n const traces = this.traces;\n const sources = this.sources;\n let written = new Set();\n\n return Object.keys(traces).sort(traceKeySorter).map(key => {\n const filename = traces[key];\n if (written.has(filename)) {\n return null;\n }\n written.add(filename);\n\n return sources[filename];\n }).join(\"\");\n }\n}\nexports.default = FileSystemLoader;","\"use strict\";\n\nfunction hash(str) {\n var hash = 5381,\n i = str.length;\n\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n}\n\nmodule.exports = hash;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = generateScopedName;\n\nvar _stringHash = require(\"string-hash\");\n\nvar _stringHash2 = _interopRequireDefault(_stringHash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction generateScopedName(name, filename, css) {\n const i = css.indexOf(`.${name}`);\n const lineNumber = css.substr(0, i).split(/[\\r\\n]/).length;\n const hash = (0, _stringHash2.default)(css).toString(36).substr(0, 5);\n\n return `_${name}_${hash}_${lineNumber}`;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = saveJSON;\n\nvar _fs = require(\"fs\");\n\nfunction saveJSON(cssFile, json) {\n return new Promise((resolve, reject) => {\n (0, _fs.writeFile)(`${cssFile}.json`, JSON.stringify(json), e => e ? reject(e) : resolve(json));\n });\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = unesc;\n\n// Many thanks for this post which made this migration much easier.\n// https://mathiasbynens.be/notes/css-escapes\n\n/**\n * \n * @param {string} str \n * @returns {[string, number]|undefined}\n */\nfunction gobbleHex(str) {\n var lower = str.toLowerCase();\n var hex = '';\n var spaceTerminated = false;\n\n for (var i = 0; i < 6 && lower[i] !== undefined; i++) {\n var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]\n\n var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point\n\n spaceTerminated = code === 32;\n\n if (!valid) {\n break;\n }\n\n hex += lower[i];\n }\n\n if (hex.length === 0) {\n return undefined;\n }\n\n var codePoint = parseInt(hex, 16);\n var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for\n // \"If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point\"\n // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point\n\n if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {\n return [\"\\uFFFD\", hex.length + (spaceTerminated ? 1 : 0)];\n }\n\n return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];\n}\n\nvar CONTAINS_ESCAPE = /\\\\/;\n\nfunction unesc(str) {\n var needToProcess = CONTAINS_ESCAPE.test(str);\n\n if (!needToProcess) {\n return str;\n }\n\n var ret = \"\";\n\n for (var i = 0; i < str.length; i++) {\n if (str[i] === \"\\\\\") {\n var gobbled = gobbleHex(str.slice(i + 1, i + 7));\n\n if (gobbled !== undefined) {\n ret += gobbled[0];\n i += gobbled[1];\n continue;\n } // Retain a pair of \\\\ if double escaped `\\\\\\\\`\n // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e\n\n\n if (str[i + 1] === \"\\\\\") {\n ret += \"\\\\\";\n i++;\n continue;\n } // if \\\\ is at the end of the string retain it\n // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb\n\n\n if (str.length === i + 1) {\n ret += str[i];\n }\n\n continue;\n }\n\n ret += str[i];\n }\n\n return ret;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = getProp;\n\nfunction getProp(obj) {\n for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n props[_key - 1] = arguments[_key];\n }\n\n while (props.length > 0) {\n var prop = props.shift();\n\n if (!obj[prop]) {\n return undefined;\n }\n\n obj = obj[prop];\n }\n\n return obj;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = ensureObject;\n\nfunction ensureObject(obj) {\n for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n props[_key - 1] = arguments[_key];\n }\n\n while (props.length > 0) {\n var prop = props.shift();\n\n if (!obj[prop]) {\n obj[prop] = {};\n }\n\n obj = obj[prop];\n }\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = stripComments;\n\nfunction stripComments(str) {\n var s = \"\";\n var commentStart = str.indexOf(\"/*\");\n var lastEnd = 0;\n\n while (commentStart >= 0) {\n s = s + str.slice(lastEnd, commentStart);\n var commentEnd = str.indexOf(\"*/\", commentStart + 2);\n\n if (commentEnd < 0) {\n return s;\n }\n\n lastEnd = commentEnd + 2;\n commentStart = str.indexOf(\"/*\", lastEnd);\n }\n\n s = s + str.slice(lastEnd);\n return s;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.stripComments = exports.ensureObject = exports.getProp = exports.unesc = void 0;\n\nvar _unesc = _interopRequireDefault(require(\"./unesc\"));\n\nexports.unesc = _unesc[\"default\"];\n\nvar _getProp = _interopRequireDefault(require(\"./getProp\"));\n\nexports.getProp = _getProp[\"default\"];\n\nvar _ensureObject = _interopRequireDefault(require(\"./ensureObject\"));\n\nexports.ensureObject = _ensureObject[\"default\"];\n\nvar _stripComments = _interopRequireDefault(require(\"./stripComments\"));\n\nexports.stripComments = _stripComments[\"default\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _util = require(\"../util\");\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar cloneNode = function cloneNode(obj, parent) {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n\n var cloned = new obj.constructor();\n\n for (var i in obj) {\n if (!obj.hasOwnProperty(i)) {\n continue;\n }\n\n var value = obj[i];\n var type = typeof value;\n\n if (i === 'parent' && type === 'object') {\n if (parent) {\n cloned[i] = parent;\n }\n } else if (value instanceof Array) {\n cloned[i] = value.map(function (j) {\n return cloneNode(j, cloned);\n });\n } else {\n cloned[i] = cloneNode(value, cloned);\n }\n }\n\n return cloned;\n};\n\nvar Node = /*#__PURE__*/function () {\n function Node(opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n Object.assign(this, opts);\n this.spaces = this.spaces || {};\n this.spaces.before = this.spaces.before || '';\n this.spaces.after = this.spaces.after || '';\n }\n\n var _proto = Node.prototype;\n\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n\n this.parent = undefined;\n return this;\n };\n\n _proto.replaceWith = function replaceWith() {\n if (this.parent) {\n for (var index in arguments) {\n this.parent.insertBefore(this, arguments[index]);\n }\n\n this.remove();\n }\n\n return this;\n };\n\n _proto.next = function next() {\n return this.parent.at(this.parent.index(this) + 1);\n };\n\n _proto.prev = function prev() {\n return this.parent.at(this.parent.index(this) - 1);\n };\n\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n var cloned = cloneNode(this);\n\n for (var name in overrides) {\n cloned[name] = overrides[name];\n }\n\n return cloned;\n }\n /**\n * Some non-standard syntax doesn't follow normal escaping rules for css.\n * This allows non standard syntax to be appended to an existing property\n * by specifying the escaped value. By specifying the escaped value,\n * illegal characters are allowed to be directly inserted into css output.\n * @param {string} name the property to set\n * @param {any} value the unescaped value of the property\n * @param {string} valueEscaped optional. the escaped value of the property.\n */\n ;\n\n _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {\n if (!this.raws) {\n this.raws = {};\n }\n\n var originalValue = this[name];\n var originalEscaped = this.raws[name];\n this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.\n\n if (originalEscaped || valueEscaped !== value) {\n this.raws[name] = (originalEscaped || originalValue) + valueEscaped;\n } else {\n delete this.raws[name]; // delete any escaped value that was created by the setter.\n }\n }\n /**\n * Some non-standard syntax doesn't follow normal escaping rules for css.\n * This allows the escaped value to be specified directly, allowing illegal\n * characters to be directly inserted into css output.\n * @param {string} name the property to set\n * @param {any} value the unescaped value of the property\n * @param {string} valueEscaped the escaped value of the property.\n */\n ;\n\n _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {\n if (!this.raws) {\n this.raws = {};\n }\n\n this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n this.raws[name] = valueEscaped;\n }\n /**\n * When you want a value to passed through to CSS directly. This method\n * deletes the corresponding raw value causing the stringifier to fallback\n * to the unescaped value.\n * @param {string} name the property to set.\n * @param {any} value The value that is both escaped and unescaped.\n */\n ;\n\n _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {\n this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n if (this.raws) {\n delete this.raws[name];\n }\n }\n /**\n *\n * @param {number} line The number (starting with 1)\n * @param {number} column The column number (starting with 1)\n */\n ;\n\n _proto.isAtPosition = function isAtPosition(line, column) {\n if (this.source && this.source.start && this.source.end) {\n if (this.source.start.line > line) {\n return false;\n }\n\n if (this.source.end.line < line) {\n return false;\n }\n\n if (this.source.start.line === line && this.source.start.column > column) {\n return false;\n }\n\n if (this.source.end.line === line && this.source.end.column < column) {\n return false;\n }\n\n return true;\n }\n\n return undefined;\n };\n\n _proto.stringifyProperty = function stringifyProperty(name) {\n return this.raws && this.raws[name] || this[name];\n };\n\n _proto.valueToString = function valueToString() {\n return String(this.stringifyProperty(\"value\"));\n };\n\n _proto.toString = function toString() {\n return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');\n };\n\n _createClass(Node, [{\n key: \"rawSpaceBefore\",\n get: function get() {\n var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;\n\n if (rawSpace === undefined) {\n rawSpace = this.spaces && this.spaces.before;\n }\n\n return rawSpace || \"\";\n },\n set: function set(raw) {\n (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n this.raws.spaces.before = raw;\n }\n }, {\n key: \"rawSpaceAfter\",\n get: function get() {\n var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;\n\n if (rawSpace === undefined) {\n rawSpace = this.spaces.after;\n }\n\n return rawSpace || \"\";\n },\n set: function set(raw) {\n (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n this.raws.spaces.after = raw;\n }\n }]);\n\n return Node;\n}();\n\nexports[\"default\"] = Node;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.UNIVERSAL = exports.ATTRIBUTE = exports.CLASS = exports.COMBINATOR = exports.COMMENT = exports.ID = exports.NESTING = exports.PSEUDO = exports.ROOT = exports.SELECTOR = exports.STRING = exports.TAG = void 0;\nvar TAG = 'tag';\nexports.TAG = TAG;\nvar STRING = 'string';\nexports.STRING = STRING;\nvar SELECTOR = 'selector';\nexports.SELECTOR = SELECTOR;\nvar ROOT = 'root';\nexports.ROOT = ROOT;\nvar PSEUDO = 'pseudo';\nexports.PSEUDO = PSEUDO;\nvar NESTING = 'nesting';\nexports.NESTING = NESTING;\nvar ID = 'id';\nexports.ID = ID;\nvar COMMENT = 'comment';\nexports.COMMENT = COMMENT;\nvar COMBINATOR = 'combinator';\nexports.COMBINATOR = COMBINATOR;\nvar CLASS = 'class';\nexports.CLASS = CLASS;\nvar ATTRIBUTE = 'attribute';\nexports.ATTRIBUTE = ATTRIBUTE;\nvar UNIVERSAL = 'universal';\nexports.UNIVERSAL = UNIVERSAL;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar types = _interopRequireWildcard(require(\"./types\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } it = o[Symbol.iterator](); return it.next.bind(it); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Container = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Container, _Node);\n\n function Container(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n\n if (!_this.nodes) {\n _this.nodes = [];\n }\n\n return _this;\n }\n\n var _proto = Container.prototype;\n\n _proto.append = function append(selector) {\n selector.parent = this;\n this.nodes.push(selector);\n return this;\n };\n\n _proto.prepend = function prepend(selector) {\n selector.parent = this;\n this.nodes.unshift(selector);\n return this;\n };\n\n _proto.at = function at(index) {\n return this.nodes[index];\n };\n\n _proto.index = function index(child) {\n if (typeof child === 'number') {\n return child;\n }\n\n return this.nodes.indexOf(child);\n };\n\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.at(child).parent = undefined;\n this.nodes.splice(child, 1);\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (index >= child) {\n this.indexes[id] = index - 1;\n }\n }\n\n return this;\n };\n\n _proto.removeAll = function removeAll() {\n for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {\n var node = _step.value;\n node.parent = undefined;\n }\n\n this.nodes = [];\n return this;\n };\n\n _proto.empty = function empty() {\n return this.removeAll();\n };\n\n _proto.insertAfter = function insertAfter(oldNode, newNode) {\n newNode.parent = this;\n var oldIndex = this.index(oldNode);\n this.nodes.splice(oldIndex + 1, 0, newNode);\n newNode.parent = this;\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (oldIndex <= index) {\n this.indexes[id] = index + 1;\n }\n }\n\n return this;\n };\n\n _proto.insertBefore = function insertBefore(oldNode, newNode) {\n newNode.parent = this;\n var oldIndex = this.index(oldNode);\n this.nodes.splice(oldIndex, 0, newNode);\n newNode.parent = this;\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (index <= oldIndex) {\n this.indexes[id] = index + 1;\n }\n }\n\n return this;\n };\n\n _proto._findChildAtPosition = function _findChildAtPosition(line, col) {\n var found = undefined;\n this.each(function (node) {\n if (node.atPosition) {\n var foundChild = node.atPosition(line, col);\n\n if (foundChild) {\n found = foundChild;\n return false;\n }\n } else if (node.isAtPosition(line, col)) {\n found = node;\n return false;\n }\n });\n return found;\n }\n /**\n * Return the most specific node at the line and column number given.\n * The source location is based on the original parsed location, locations aren't\n * updated as selector nodes are mutated.\n * \n * Note that this location is relative to the location of the first character\n * of the selector, and not the location of the selector in the overall document\n * when used in conjunction with postcss.\n *\n * If not found, returns undefined.\n * @param {number} line The line number of the node to find. (1-based index)\n * @param {number} col The column number of the node to find. (1-based index)\n */\n ;\n\n _proto.atPosition = function atPosition(line, col) {\n if (this.isAtPosition(line, col)) {\n return this._findChildAtPosition(line, col) || this;\n } else {\n return undefined;\n }\n };\n\n _proto._inferEndPosition = function _inferEndPosition() {\n if (this.last && this.last.source && this.last.source.end) {\n this.source = this.source || {};\n this.source.end = this.source.end || {};\n Object.assign(this.source.end, this.last.source.end);\n }\n };\n\n _proto.each = function each(callback) {\n if (!this.lastEach) {\n this.lastEach = 0;\n }\n\n if (!this.indexes) {\n this.indexes = {};\n }\n\n this.lastEach++;\n var id = this.lastEach;\n this.indexes[id] = 0;\n\n if (!this.length) {\n return undefined;\n }\n\n var index, result;\n\n while (this.indexes[id] < this.length) {\n index = this.indexes[id];\n result = callback(this.at(index), index);\n\n if (result === false) {\n break;\n }\n\n this.indexes[id] += 1;\n }\n\n delete this.indexes[id];\n\n if (result === false) {\n return false;\n }\n };\n\n _proto.walk = function walk(callback) {\n return this.each(function (node, i) {\n var result = callback(node, i);\n\n if (result !== false && node.length) {\n result = node.walk(callback);\n }\n\n if (result === false) {\n return false;\n }\n });\n };\n\n _proto.walkAttributes = function walkAttributes(callback) {\n var _this2 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.ATTRIBUTE) {\n return callback.call(_this2, selector);\n }\n });\n };\n\n _proto.walkClasses = function walkClasses(callback) {\n var _this3 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.CLASS) {\n return callback.call(_this3, selector);\n }\n });\n };\n\n _proto.walkCombinators = function walkCombinators(callback) {\n var _this4 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.COMBINATOR) {\n return callback.call(_this4, selector);\n }\n });\n };\n\n _proto.walkComments = function walkComments(callback) {\n var _this5 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.COMMENT) {\n return callback.call(_this5, selector);\n }\n });\n };\n\n _proto.walkIds = function walkIds(callback) {\n var _this6 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.ID) {\n return callback.call(_this6, selector);\n }\n });\n };\n\n _proto.walkNesting = function walkNesting(callback) {\n var _this7 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.NESTING) {\n return callback.call(_this7, selector);\n }\n });\n };\n\n _proto.walkPseudos = function walkPseudos(callback) {\n var _this8 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.PSEUDO) {\n return callback.call(_this8, selector);\n }\n });\n };\n\n _proto.walkTags = function walkTags(callback) {\n var _this9 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.TAG) {\n return callback.call(_this9, selector);\n }\n });\n };\n\n _proto.walkUniversals = function walkUniversals(callback) {\n var _this10 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.UNIVERSAL) {\n return callback.call(_this10, selector);\n }\n });\n };\n\n _proto.split = function split(callback) {\n var _this11 = this;\n\n var current = [];\n return this.reduce(function (memo, node, index) {\n var split = callback.call(_this11, node);\n current.push(node);\n\n if (split) {\n memo.push(current);\n current = [];\n } else if (index === _this11.length - 1) {\n memo.push(current);\n }\n\n return memo;\n }, []);\n };\n\n _proto.map = function map(callback) {\n return this.nodes.map(callback);\n };\n\n _proto.reduce = function reduce(callback, memo) {\n return this.nodes.reduce(callback, memo);\n };\n\n _proto.every = function every(callback) {\n return this.nodes.every(callback);\n };\n\n _proto.some = function some(callback) {\n return this.nodes.some(callback);\n };\n\n _proto.filter = function filter(callback) {\n return this.nodes.filter(callback);\n };\n\n _proto.sort = function sort(callback) {\n return this.nodes.sort(callback);\n };\n\n _proto.toString = function toString() {\n return this.map(String).join('');\n };\n\n _createClass(Container, [{\n key: \"first\",\n get: function get() {\n return this.at(0);\n }\n }, {\n key: \"last\",\n get: function get() {\n return this.at(this.length - 1);\n }\n }, {\n key: \"length\",\n get: function get() {\n return this.nodes.length;\n }\n }]);\n\n return Container;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Container;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Root = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Root, _Container);\n\n function Root(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.ROOT;\n return _this;\n }\n\n var _proto = Root.prototype;\n\n _proto.toString = function toString() {\n var str = this.reduce(function (memo, selector) {\n memo.push(String(selector));\n return memo;\n }, []).join(',');\n return this.trailingComma ? str + ',' : str;\n };\n\n _proto.error = function error(message, options) {\n if (this._error) {\n return this._error(message, options);\n } else {\n return new Error(message);\n }\n };\n\n _createClass(Root, [{\n key: \"errorGenerator\",\n set: function set(handler) {\n this._error = handler;\n }\n }]);\n\n return Root;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Root;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Selector = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Selector, _Container);\n\n function Selector(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.SELECTOR;\n return _this;\n }\n\n return Selector;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Selector;\nmodule.exports = exports.default;","/*! https://mths.be/cssesc v3.0.0 by @mathias */\n'use strict';\n\nvar object = {};\nvar hasOwnProperty = object.hasOwnProperty;\nvar merge = function merge(options, defaults) {\n\tif (!options) {\n\t\treturn defaults;\n\t}\n\tvar result = {};\n\tfor (var key in defaults) {\n\t\t// `if (defaults.hasOwnProperty(key) { … }` is not needed here, since\n\t\t// only recognized option names are used.\n\t\tresult[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];\n\t}\n\treturn result;\n};\n\nvar regexAnySingleEscape = /[ -,\\.\\/:-@\\[-\\^`\\{-~]/;\nvar regexSingleEscape = /[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/;\nvar regexAlwaysEscape = /['\"\\\\]/;\nvar regexExcessiveSpaces = /(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g;\n\n// https://mathiasbynens.be/notes/css-escapes#css\nvar cssesc = function cssesc(string, options) {\n\toptions = merge(options, cssesc.options);\n\tif (options.quotes != 'single' && options.quotes != 'double') {\n\t\toptions.quotes = 'single';\n\t}\n\tvar quote = options.quotes == 'double' ? '\"' : '\\'';\n\tvar isIdentifier = options.isIdentifier;\n\n\tvar firstChar = string.charAt(0);\n\tvar output = '';\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar character = string.charAt(counter++);\n\t\tvar codePoint = character.charCodeAt();\n\t\tvar value = void 0;\n\t\t// If it’s not a printable ASCII character…\n\t\tif (codePoint < 0x20 || codePoint > 0x7E) {\n\t\t\tif (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {\n\t\t\t\t// It’s a high surrogate, and there is a next character.\n\t\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// next character is low surrogate\n\t\t\t\t\tcodePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;\n\t\t\t\t} else {\n\t\t\t\t\t// It’s an unmatched surrogate; only append this code unit, in case\n\t\t\t\t\t// the next code unit is the high surrogate of a surrogate pair.\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t} else {\n\t\t\tif (options.escapeEverything) {\n\t\t\t\tif (regexAnySingleEscape.test(character)) {\n\t\t\t\t\tvalue = '\\\\' + character;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t\t}\n\t\t\t} else if (/[\\t\\n\\f\\r\\x0B]/.test(character)) {\n\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t} else if (character == '\\\\' || !isIdentifier && (character == '\"' && quote == character || character == '\\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {\n\t\t\t\tvalue = '\\\\' + character;\n\t\t\t} else {\n\t\t\t\tvalue = character;\n\t\t\t}\n\t\t}\n\t\toutput += value;\n\t}\n\n\tif (isIdentifier) {\n\t\tif (/^-[-\\d]/.test(output)) {\n\t\t\toutput = '\\\\-' + output.slice(1);\n\t\t} else if (/\\d/.test(firstChar)) {\n\t\t\toutput = '\\\\3' + firstChar + ' ' + output.slice(1);\n\t\t}\n\t}\n\n\t// Remove spaces after `\\HEX` escapes that are not followed by a hex digit,\n\t// since they’re redundant. Note that this is only possible if the escape\n\t// sequence isn’t preceded by an odd number of backslashes.\n\toutput = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {\n\t\tif ($1 && $1.length % 2) {\n\t\t\t// It’s not safe to remove the space, so don’t.\n\t\t\treturn $0;\n\t\t}\n\t\t// Strip the space.\n\t\treturn ($1 || '') + $2;\n\t});\n\n\tif (!isIdentifier && options.wrap) {\n\t\treturn quote + output + quote;\n\t}\n\treturn output;\n};\n\n// Expose default options (so they can be overridden globally).\ncssesc.options = {\n\t'escapeEverything': false,\n\t'isIdentifier': false,\n\t'quotes': 'single',\n\t'wrap': false\n};\n\ncssesc.version = '3.0.0';\n\nmodule.exports = cssesc;\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _util = require(\"../util\");\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ClassName = /*#__PURE__*/function (_Node) {\n _inheritsLoose(ClassName, _Node);\n\n function ClassName(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.CLASS;\n _this._constructed = true;\n return _this;\n }\n\n var _proto = ClassName.prototype;\n\n _proto.valueToString = function valueToString() {\n return '.' + _Node.prototype.valueToString.call(this);\n };\n\n _createClass(ClassName, [{\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(v) {\n if (this._constructed) {\n var escaped = (0, _cssesc[\"default\"])(v, {\n isIdentifier: true\n });\n\n if (escaped !== v) {\n (0, _util.ensureObject)(this, \"raws\");\n this.raws.value = escaped;\n } else if (this.raws) {\n delete this.raws.value;\n }\n }\n\n this._value = v;\n }\n }]);\n\n return ClassName;\n}(_node[\"default\"]);\n\nexports[\"default\"] = ClassName;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Comment = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Comment, _Node);\n\n function Comment(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.COMMENT;\n return _this;\n }\n\n return Comment;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Comment;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ID = /*#__PURE__*/function (_Node) {\n _inheritsLoose(ID, _Node);\n\n function ID(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.ID;\n return _this;\n }\n\n var _proto = ID.prototype;\n\n _proto.valueToString = function valueToString() {\n return '#' + _Node.prototype.valueToString.call(this);\n };\n\n return ID;\n}(_node[\"default\"]);\n\nexports[\"default\"] = ID;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _util = require(\"../util\");\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Namespace = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Namespace, _Node);\n\n function Namespace() {\n return _Node.apply(this, arguments) || this;\n }\n\n var _proto = Namespace.prototype;\n\n _proto.qualifiedName = function qualifiedName(value) {\n if (this.namespace) {\n return this.namespaceString + \"|\" + value;\n } else {\n return value;\n }\n };\n\n _proto.valueToString = function valueToString() {\n return this.qualifiedName(_Node.prototype.valueToString.call(this));\n };\n\n _createClass(Namespace, [{\n key: \"namespace\",\n get: function get() {\n return this._namespace;\n },\n set: function set(namespace) {\n if (namespace === true || namespace === \"*\" || namespace === \"&\") {\n this._namespace = namespace;\n\n if (this.raws) {\n delete this.raws.namespace;\n }\n\n return;\n }\n\n var escaped = (0, _cssesc[\"default\"])(namespace, {\n isIdentifier: true\n });\n this._namespace = namespace;\n\n if (escaped !== namespace) {\n (0, _util.ensureObject)(this, \"raws\");\n this.raws.namespace = escaped;\n } else if (this.raws) {\n delete this.raws.namespace;\n }\n }\n }, {\n key: \"ns\",\n get: function get() {\n return this._namespace;\n },\n set: function set(namespace) {\n this.namespace = namespace;\n }\n }, {\n key: \"namespaceString\",\n get: function get() {\n if (this.namespace) {\n var ns = this.stringifyProperty(\"namespace\");\n\n if (ns === true) {\n return '';\n } else {\n return ns;\n }\n } else {\n return '';\n }\n }\n }]);\n\n return Namespace;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Namespace;\n;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Tag = /*#__PURE__*/function (_Namespace) {\n _inheritsLoose(Tag, _Namespace);\n\n function Tag(opts) {\n var _this;\n\n _this = _Namespace.call(this, opts) || this;\n _this.type = _types.TAG;\n return _this;\n }\n\n return Tag;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Tag;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar String = /*#__PURE__*/function (_Node) {\n _inheritsLoose(String, _Node);\n\n function String(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.STRING;\n return _this;\n }\n\n return String;\n}(_node[\"default\"]);\n\nexports[\"default\"] = String;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Pseudo = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Pseudo, _Container);\n\n function Pseudo(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.PSEUDO;\n return _this;\n }\n\n var _proto = Pseudo.prototype;\n\n _proto.toString = function toString() {\n var params = this.length ? '(' + this.map(String).join(',') + ')' : '';\n return [this.rawSpaceBefore, this.stringifyProperty(\"value\"), params, this.rawSpaceAfter].join('');\n };\n\n return Pseudo;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Pseudo;\nmodule.exports = exports.default;","\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n","\"use strict\";\n\nexports.__esModule = true;\nexports.unescapeValue = unescapeValue;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _unesc = _interopRequireDefault(require(\"../util/unesc\"));\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nvar _CSSESC_QUOTE_OPTIONS;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar deprecate = require(\"util-deprecate\");\n\nvar WRAPPED_IN_QUOTES = /^('|\")([^]*)\\1$/;\nvar warnOfDeprecatedValueAssignment = deprecate(function () {}, \"Assigning an attribute a value containing characters that might need to be escaped is deprecated. \" + \"Call attribute.setValue() instead.\");\nvar warnOfDeprecatedQuotedAssignment = deprecate(function () {}, \"Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.\");\nvar warnOfDeprecatedConstructor = deprecate(function () {}, \"Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.\");\n\nfunction unescapeValue(value) {\n var deprecatedUsage = false;\n var quoteMark = null;\n var unescaped = value;\n var m = unescaped.match(WRAPPED_IN_QUOTES);\n\n if (m) {\n quoteMark = m[1];\n unescaped = m[2];\n }\n\n unescaped = (0, _unesc[\"default\"])(unescaped);\n\n if (unescaped !== value) {\n deprecatedUsage = true;\n }\n\n return {\n deprecatedUsage: deprecatedUsage,\n unescaped: unescaped,\n quoteMark: quoteMark\n };\n}\n\nfunction handleDeprecatedContructorOpts(opts) {\n if (opts.quoteMark !== undefined) {\n return opts;\n }\n\n if (opts.value === undefined) {\n return opts;\n }\n\n warnOfDeprecatedConstructor();\n\n var _unescapeValue = unescapeValue(opts.value),\n quoteMark = _unescapeValue.quoteMark,\n unescaped = _unescapeValue.unescaped;\n\n if (!opts.raws) {\n opts.raws = {};\n }\n\n if (opts.raws.value === undefined) {\n opts.raws.value = opts.value;\n }\n\n opts.value = unescaped;\n opts.quoteMark = quoteMark;\n return opts;\n}\n\nvar Attribute = /*#__PURE__*/function (_Namespace) {\n _inheritsLoose(Attribute, _Namespace);\n\n function Attribute(opts) {\n var _this;\n\n if (opts === void 0) {\n opts = {};\n }\n\n _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;\n _this.type = _types.ATTRIBUTE;\n _this.raws = _this.raws || {};\n Object.defineProperty(_this.raws, 'unquoted', {\n get: deprecate(function () {\n return _this.value;\n }, \"attr.raws.unquoted is deprecated. Call attr.value instead.\"),\n set: deprecate(function () {\n return _this.value;\n }, \"Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.\")\n });\n _this._constructed = true;\n return _this;\n }\n /**\n * Returns the Attribute's value quoted such that it would be legal to use\n * in the value of a css file. The original value's quotation setting\n * used for stringification is left unchanged. See `setValue(value, options)`\n * if you want to control the quote settings of a new value for the attribute.\n *\n * You can also change the quotation used for the current value by setting quoteMark.\n *\n * Options:\n * * quoteMark {'\"' | \"'\" | null} - Use this value to quote the value. If this\n * option is not set, the original value for quoteMark will be used. If\n * indeterminate, a double quote is used. The legal values are:\n * * `null` - the value will be unquoted and characters will be escaped as necessary.\n * * `'` - the value will be quoted with a single quote and single quotes are escaped.\n * * `\"` - the value will be quoted with a double quote and double quotes are escaped.\n * * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark\n * over the quoteMark option value.\n * * smart {boolean} - if true, will select a quote mark based on the value\n * and the other options specified here. See the `smartQuoteMark()`\n * method.\n **/\n\n\n var _proto = Attribute.prototype;\n\n _proto.getQuotedValue = function getQuotedValue(options) {\n if (options === void 0) {\n options = {};\n }\n\n var quoteMark = this._determineQuoteMark(options);\n\n var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];\n var escaped = (0, _cssesc[\"default\"])(this._value, cssescopts);\n return escaped;\n };\n\n _proto._determineQuoteMark = function _determineQuoteMark(options) {\n return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);\n }\n /**\n * Set the unescaped value with the specified quotation options. The value\n * provided must not include any wrapping quote marks -- those quotes will\n * be interpreted as part of the value and escaped accordingly.\n */\n ;\n\n _proto.setValue = function setValue(value, options) {\n if (options === void 0) {\n options = {};\n }\n\n this._value = value;\n this._quoteMark = this._determineQuoteMark(options);\n\n this._syncRawValue();\n }\n /**\n * Intelligently select a quoteMark value based on the value's contents. If\n * the value is a legal CSS ident, it will not be quoted. Otherwise a quote\n * mark will be picked that minimizes the number of escapes.\n *\n * If there's no clear winner, the quote mark from these options is used,\n * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is\n * true). If the quoteMark is unspecified, a double quote is used.\n *\n * @param options This takes the quoteMark and preferCurrentQuoteMark options\n * from the quoteValue method.\n */\n ;\n\n _proto.smartQuoteMark = function smartQuoteMark(options) {\n var v = this.value;\n var numSingleQuotes = v.replace(/[^']/g, '').length;\n var numDoubleQuotes = v.replace(/[^\"]/g, '').length;\n\n if (numSingleQuotes + numDoubleQuotes === 0) {\n var escaped = (0, _cssesc[\"default\"])(v, {\n isIdentifier: true\n });\n\n if (escaped === v) {\n return Attribute.NO_QUOTE;\n } else {\n var pref = this.preferredQuoteMark(options);\n\n if (pref === Attribute.NO_QUOTE) {\n // pick a quote mark that isn't none and see if it's smaller\n var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;\n var opts = CSSESC_QUOTE_OPTIONS[quote];\n var quoteValue = (0, _cssesc[\"default\"])(v, opts);\n\n if (quoteValue.length < escaped.length) {\n return quote;\n }\n }\n\n return pref;\n }\n } else if (numDoubleQuotes === numSingleQuotes) {\n return this.preferredQuoteMark(options);\n } else if (numDoubleQuotes < numSingleQuotes) {\n return Attribute.DOUBLE_QUOTE;\n } else {\n return Attribute.SINGLE_QUOTE;\n }\n }\n /**\n * Selects the preferred quote mark based on the options and the current quote mark value.\n * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`\n * instead.\n */\n ;\n\n _proto.preferredQuoteMark = function preferredQuoteMark(options) {\n var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;\n\n if (quoteMark === undefined) {\n quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;\n }\n\n if (quoteMark === undefined) {\n quoteMark = Attribute.DOUBLE_QUOTE;\n }\n\n return quoteMark;\n };\n\n _proto._syncRawValue = function _syncRawValue() {\n var rawValue = (0, _cssesc[\"default\"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);\n\n if (rawValue === this._value) {\n if (this.raws) {\n delete this.raws.value;\n }\n } else {\n this.raws.value = rawValue;\n }\n };\n\n _proto._handleEscapes = function _handleEscapes(prop, value) {\n if (this._constructed) {\n var escaped = (0, _cssesc[\"default\"])(value, {\n isIdentifier: true\n });\n\n if (escaped !== value) {\n this.raws[prop] = escaped;\n } else {\n delete this.raws[prop];\n }\n }\n };\n\n _proto._spacesFor = function _spacesFor(name) {\n var attrSpaces = {\n before: '',\n after: ''\n };\n var spaces = this.spaces[name] || {};\n var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};\n return Object.assign(attrSpaces, spaces, rawSpaces);\n };\n\n _proto._stringFor = function _stringFor(name, spaceName, concat) {\n if (spaceName === void 0) {\n spaceName = name;\n }\n\n if (concat === void 0) {\n concat = defaultAttrConcat;\n }\n\n var attrSpaces = this._spacesFor(spaceName);\n\n return concat(this.stringifyProperty(name), attrSpaces);\n }\n /**\n * returns the offset of the attribute part specified relative to the\n * start of the node of the output string.\n *\n * * \"ns\" - alias for \"namespace\"\n * * \"namespace\" - the namespace if it exists.\n * * \"attribute\" - the attribute name\n * * \"attributeNS\" - the start of the attribute or its namespace\n * * \"operator\" - the match operator of the attribute\n * * \"value\" - The value (string or identifier)\n * * \"insensitive\" - the case insensitivity flag;\n * @param part One of the possible values inside an attribute.\n * @returns -1 if the name is invalid or the value doesn't exist in this attribute.\n */\n ;\n\n _proto.offsetOf = function offsetOf(name) {\n var count = 1;\n\n var attributeSpaces = this._spacesFor(\"attribute\");\n\n count += attributeSpaces.before.length;\n\n if (name === \"namespace\" || name === \"ns\") {\n return this.namespace ? count : -1;\n }\n\n if (name === \"attributeNS\") {\n return count;\n }\n\n count += this.namespaceString.length;\n\n if (this.namespace) {\n count += 1;\n }\n\n if (name === \"attribute\") {\n return count;\n }\n\n count += this.stringifyProperty(\"attribute\").length;\n count += attributeSpaces.after.length;\n\n var operatorSpaces = this._spacesFor(\"operator\");\n\n count += operatorSpaces.before.length;\n var operator = this.stringifyProperty(\"operator\");\n\n if (name === \"operator\") {\n return operator ? count : -1;\n }\n\n count += operator.length;\n count += operatorSpaces.after.length;\n\n var valueSpaces = this._spacesFor(\"value\");\n\n count += valueSpaces.before.length;\n var value = this.stringifyProperty(\"value\");\n\n if (name === \"value\") {\n return value ? count : -1;\n }\n\n count += value.length;\n count += valueSpaces.after.length;\n\n var insensitiveSpaces = this._spacesFor(\"insensitive\");\n\n count += insensitiveSpaces.before.length;\n\n if (name === \"insensitive\") {\n return this.insensitive ? count : -1;\n }\n\n return -1;\n };\n\n _proto.toString = function toString() {\n var _this2 = this;\n\n var selector = [this.rawSpaceBefore, '['];\n selector.push(this._stringFor('qualifiedAttribute', 'attribute'));\n\n if (this.operator && (this.value || this.value === '')) {\n selector.push(this._stringFor('operator'));\n selector.push(this._stringFor('value'));\n selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) {\n if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {\n attrSpaces.before = \" \";\n }\n\n return defaultAttrConcat(attrValue, attrSpaces);\n }));\n }\n\n selector.push(']');\n selector.push(this.rawSpaceAfter);\n return selector.join('');\n };\n\n _createClass(Attribute, [{\n key: \"quoted\",\n get: function get() {\n var qm = this.quoteMark;\n return qm === \"'\" || qm === '\"';\n },\n set: function set(value) {\n warnOfDeprecatedQuotedAssignment();\n }\n /**\n * returns a single (`'`) or double (`\"`) quote character if the value is quoted.\n * returns `null` if the value is not quoted.\n * returns `undefined` if the quotation state is unknown (this can happen when\n * the attribute is constructed without specifying a quote mark.)\n */\n\n }, {\n key: \"quoteMark\",\n get: function get() {\n return this._quoteMark;\n }\n /**\n * Set the quote mark to be used by this attribute's value.\n * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute\n * value is updated accordingly.\n *\n * @param {\"'\" | '\"' | null} quoteMark The quote mark or `null` if the value should be unquoted.\n */\n ,\n set: function set(quoteMark) {\n if (!this._constructed) {\n this._quoteMark = quoteMark;\n return;\n }\n\n if (this._quoteMark !== quoteMark) {\n this._quoteMark = quoteMark;\n\n this._syncRawValue();\n }\n }\n }, {\n key: \"qualifiedAttribute\",\n get: function get() {\n return this.qualifiedName(this.raws.attribute || this.attribute);\n }\n }, {\n key: \"insensitiveFlag\",\n get: function get() {\n return this.insensitive ? 'i' : '';\n }\n }, {\n key: \"value\",\n get: function get() {\n return this._value;\n }\n /**\n * Before 3.0, the value had to be set to an escaped value including any wrapped\n * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value\n * is unescaped during parsing and any quote marks are removed.\n *\n * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,\n * a deprecation warning is raised when the new value contains any characters that would\n * require escaping (including if it contains wrapped quotes).\n *\n * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe\n * how the new value is quoted.\n */\n ,\n set: function set(v) {\n if (this._constructed) {\n var _unescapeValue2 = unescapeValue(v),\n deprecatedUsage = _unescapeValue2.deprecatedUsage,\n unescaped = _unescapeValue2.unescaped,\n quoteMark = _unescapeValue2.quoteMark;\n\n if (deprecatedUsage) {\n warnOfDeprecatedValueAssignment();\n }\n\n if (unescaped === this._value && quoteMark === this._quoteMark) {\n return;\n }\n\n this._value = unescaped;\n this._quoteMark = quoteMark;\n\n this._syncRawValue();\n } else {\n this._value = v;\n }\n }\n }, {\n key: \"attribute\",\n get: function get() {\n return this._attribute;\n },\n set: function set(name) {\n this._handleEscapes(\"attribute\", name);\n\n this._attribute = name;\n }\n }]);\n\n return Attribute;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Attribute;\nAttribute.NO_QUOTE = null;\nAttribute.SINGLE_QUOTE = \"'\";\nAttribute.DOUBLE_QUOTE = '\"';\nvar CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {\n \"'\": {\n quotes: 'single',\n wrap: true\n },\n '\"': {\n quotes: 'double',\n wrap: true\n }\n}, _CSSESC_QUOTE_OPTIONS[null] = {\n isIdentifier: true\n}, _CSSESC_QUOTE_OPTIONS);\n\nfunction defaultAttrConcat(attrValue, attrSpaces) {\n return \"\" + attrSpaces.before + attrValue + attrSpaces.after;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Universal = /*#__PURE__*/function (_Namespace) {\n _inheritsLoose(Universal, _Namespace);\n\n function Universal(opts) {\n var _this;\n\n _this = _Namespace.call(this, opts) || this;\n _this.type = _types.UNIVERSAL;\n _this.value = '*';\n return _this;\n }\n\n return Universal;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Universal;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Combinator = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Combinator, _Node);\n\n function Combinator(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.COMBINATOR;\n return _this;\n }\n\n return Combinator;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Combinator;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Nesting = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Nesting, _Node);\n\n function Nesting(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.NESTING;\n _this.value = '&';\n return _this;\n }\n\n return Nesting;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Nesting;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = sortAscending;\n\nfunction sortAscending(list) {\n return list.sort(function (a, b) {\n return a - b;\n });\n}\n\n;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.combinator = exports.word = exports.comment = exports.str = exports.tab = exports.newline = exports.feed = exports.cr = exports.backslash = exports.bang = exports.slash = exports.doubleQuote = exports.singleQuote = exports.space = exports.greaterThan = exports.pipe = exports.equals = exports.plus = exports.caret = exports.tilde = exports.dollar = exports.closeSquare = exports.openSquare = exports.closeParenthesis = exports.openParenthesis = exports.semicolon = exports.colon = exports.comma = exports.at = exports.asterisk = exports.ampersand = void 0;\nvar ampersand = 38; // `&`.charCodeAt(0);\n\nexports.ampersand = ampersand;\nvar asterisk = 42; // `*`.charCodeAt(0);\n\nexports.asterisk = asterisk;\nvar at = 64; // `@`.charCodeAt(0);\n\nexports.at = at;\nvar comma = 44; // `,`.charCodeAt(0);\n\nexports.comma = comma;\nvar colon = 58; // `:`.charCodeAt(0);\n\nexports.colon = colon;\nvar semicolon = 59; // `;`.charCodeAt(0);\n\nexports.semicolon = semicolon;\nvar openParenthesis = 40; // `(`.charCodeAt(0);\n\nexports.openParenthesis = openParenthesis;\nvar closeParenthesis = 41; // `)`.charCodeAt(0);\n\nexports.closeParenthesis = closeParenthesis;\nvar openSquare = 91; // `[`.charCodeAt(0);\n\nexports.openSquare = openSquare;\nvar closeSquare = 93; // `]`.charCodeAt(0);\n\nexports.closeSquare = closeSquare;\nvar dollar = 36; // `$`.charCodeAt(0);\n\nexports.dollar = dollar;\nvar tilde = 126; // `~`.charCodeAt(0);\n\nexports.tilde = tilde;\nvar caret = 94; // `^`.charCodeAt(0);\n\nexports.caret = caret;\nvar plus = 43; // `+`.charCodeAt(0);\n\nexports.plus = plus;\nvar equals = 61; // `=`.charCodeAt(0);\n\nexports.equals = equals;\nvar pipe = 124; // `|`.charCodeAt(0);\n\nexports.pipe = pipe;\nvar greaterThan = 62; // `>`.charCodeAt(0);\n\nexports.greaterThan = greaterThan;\nvar space = 32; // ` `.charCodeAt(0);\n\nexports.space = space;\nvar singleQuote = 39; // `'`.charCodeAt(0);\n\nexports.singleQuote = singleQuote;\nvar doubleQuote = 34; // `\"`.charCodeAt(0);\n\nexports.doubleQuote = doubleQuote;\nvar slash = 47; // `/`.charCodeAt(0);\n\nexports.slash = slash;\nvar bang = 33; // `!`.charCodeAt(0);\n\nexports.bang = bang;\nvar backslash = 92; // '\\\\'.charCodeAt(0);\n\nexports.backslash = backslash;\nvar cr = 13; // '\\r'.charCodeAt(0);\n\nexports.cr = cr;\nvar feed = 12; // '\\f'.charCodeAt(0);\n\nexports.feed = feed;\nvar newline = 10; // '\\n'.charCodeAt(0);\n\nexports.newline = newline;\nvar tab = 9; // '\\t'.charCodeAt(0);\n// Expose aliases primarily for readability.\n\nexports.tab = tab;\nvar str = singleQuote; // No good single character representation!\n\nexports.str = str;\nvar comment = -1;\nexports.comment = comment;\nvar word = -2;\nexports.word = word;\nvar combinator = -3;\nexports.combinator = combinator;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = tokenize;\nexports.FIELDS = void 0;\n\nvar t = _interopRequireWildcard(require(\"./tokenTypes\"));\n\nvar _unescapable, _wordDelimiters;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);\nvar wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);\nvar hex = {};\nvar hexChars = \"0123456789abcdefABCDEF\";\n\nfor (var i = 0; i < hexChars.length; i++) {\n hex[hexChars.charCodeAt(i)] = true;\n}\n/**\n * Returns the last index of the bar css word\n * @param {string} css The string in which the word begins\n * @param {number} start The index into the string where word's first letter occurs\n */\n\n\nfunction consumeWord(css, start) {\n var next = start;\n var code;\n\n do {\n code = css.charCodeAt(next);\n\n if (wordDelimiters[code]) {\n return next - 1;\n } else if (code === t.backslash) {\n next = consumeEscape(css, next) + 1;\n } else {\n // All other characters are part of the word\n next++;\n }\n } while (next < css.length);\n\n return next - 1;\n}\n/**\n * Returns the last index of the escape sequence\n * @param {string} css The string in which the sequence begins\n * @param {number} start The index into the string where escape character (`\\`) occurs.\n */\n\n\nfunction consumeEscape(css, start) {\n var next = start;\n var code = css.charCodeAt(next + 1);\n\n if (unescapable[code]) {// just consume the escape char\n } else if (hex[code]) {\n var hexDigits = 0; // consume up to 6 hex chars\n\n do {\n next++;\n hexDigits++;\n code = css.charCodeAt(next + 1);\n } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape\n\n\n if (hexDigits < 6 && code === t.space) {\n next++;\n }\n } else {\n // the next char is part of the current word\n next++;\n }\n\n return next;\n}\n\nvar FIELDS = {\n TYPE: 0,\n START_LINE: 1,\n START_COL: 2,\n END_LINE: 3,\n END_COL: 4,\n START_POS: 5,\n END_POS: 6\n};\nexports.FIELDS = FIELDS;\n\nfunction tokenize(input) {\n var tokens = [];\n var css = input.css.valueOf();\n var _css = css,\n length = _css.length;\n var offset = -1;\n var line = 1;\n var start = 0;\n var end = 0;\n var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;\n\n function unclosed(what, fix) {\n if (input.safe) {\n // fyi: this is never set to true.\n css += fix;\n next = css.length - 1;\n } else {\n throw input.error('Unclosed ' + what, line, start - offset, start);\n }\n }\n\n while (start < length) {\n code = css.charCodeAt(start);\n\n if (code === t.newline) {\n offset = start;\n line += 1;\n }\n\n switch (code) {\n case t.space:\n case t.tab:\n case t.newline:\n case t.cr:\n case t.feed:\n next = start;\n\n do {\n next += 1;\n code = css.charCodeAt(next);\n\n if (code === t.newline) {\n offset = next;\n line += 1;\n }\n } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);\n\n tokenType = t.space;\n endLine = line;\n endColumn = next - offset - 1;\n end = next;\n break;\n\n case t.plus:\n case t.greaterThan:\n case t.tilde:\n case t.pipe:\n next = start;\n\n do {\n next += 1;\n code = css.charCodeAt(next);\n } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);\n\n tokenType = t.combinator;\n endLine = line;\n endColumn = start - offset;\n end = next;\n break;\n // Consume these characters as single tokens.\n\n case t.asterisk:\n case t.ampersand:\n case t.bang:\n case t.comma:\n case t.equals:\n case t.dollar:\n case t.caret:\n case t.openSquare:\n case t.closeSquare:\n case t.colon:\n case t.semicolon:\n case t.openParenthesis:\n case t.closeParenthesis:\n next = start;\n tokenType = code;\n endLine = line;\n endColumn = start - offset;\n end = next + 1;\n break;\n\n case t.singleQuote:\n case t.doubleQuote:\n quote = code === t.singleQuote ? \"'\" : '\"';\n next = start;\n\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n\n if (next === -1) {\n unclosed('quote', quote);\n }\n\n escapePos = next;\n\n while (css.charCodeAt(escapePos - 1) === t.backslash) {\n escapePos -= 1;\n escaped = !escaped;\n }\n } while (escaped);\n\n tokenType = t.str;\n endLine = line;\n endColumn = start - offset;\n end = next + 1;\n break;\n\n default:\n if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {\n next = css.indexOf('*/', start + 2) + 1;\n\n if (next === 0) {\n unclosed('comment', '*/');\n }\n\n content = css.slice(start, next + 1);\n lines = content.split('\\n');\n last = lines.length - 1;\n\n if (last > 0) {\n nextLine = line + last;\n nextOffset = next - lines[last].length;\n } else {\n nextLine = line;\n nextOffset = offset;\n }\n\n tokenType = t.comment;\n line = nextLine;\n endLine = nextLine;\n endColumn = next - nextOffset;\n } else if (code === t.slash) {\n next = start;\n tokenType = code;\n endLine = line;\n endColumn = start - offset;\n end = next + 1;\n } else {\n next = consumeWord(css, start);\n tokenType = t.word;\n endLine = line;\n endColumn = next - offset;\n }\n\n end = next + 1;\n break;\n } // Ensure that the token structure remains consistent\n\n\n tokens.push([tokenType, // [0] Token type\n line, // [1] Starting line\n start - offset, // [2] Starting column\n endLine, // [3] Ending line\n endColumn, // [4] Ending column\n start, // [5] Start position / Source index\n end // [6] End position\n ]); // Reset offset for the next token\n\n if (nextOffset) {\n offset = nextOffset;\n nextOffset = null;\n }\n\n start = end;\n }\n\n return tokens;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _root = _interopRequireDefault(require(\"./selectors/root\"));\n\nvar _selector = _interopRequireDefault(require(\"./selectors/selector\"));\n\nvar _className = _interopRequireDefault(require(\"./selectors/className\"));\n\nvar _comment = _interopRequireDefault(require(\"./selectors/comment\"));\n\nvar _id = _interopRequireDefault(require(\"./selectors/id\"));\n\nvar _tag = _interopRequireDefault(require(\"./selectors/tag\"));\n\nvar _string = _interopRequireDefault(require(\"./selectors/string\"));\n\nvar _pseudo = _interopRequireDefault(require(\"./selectors/pseudo\"));\n\nvar _attribute = _interopRequireWildcard(require(\"./selectors/attribute\"));\n\nvar _universal = _interopRequireDefault(require(\"./selectors/universal\"));\n\nvar _combinator = _interopRequireDefault(require(\"./selectors/combinator\"));\n\nvar _nesting = _interopRequireDefault(require(\"./selectors/nesting\"));\n\nvar _sortAscending = _interopRequireDefault(require(\"./sortAscending\"));\n\nvar _tokenize = _interopRequireWildcard(require(\"./tokenize\"));\n\nvar tokens = _interopRequireWildcard(require(\"./tokenTypes\"));\n\nvar types = _interopRequireWildcard(require(\"./selectors/types\"));\n\nvar _util = require(\"./util\");\n\nvar _WHITESPACE_TOKENS, _Object$assign;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);\nvar WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));\n\nfunction tokenStart(token) {\n return {\n line: token[_tokenize.FIELDS.START_LINE],\n column: token[_tokenize.FIELDS.START_COL]\n };\n}\n\nfunction tokenEnd(token) {\n return {\n line: token[_tokenize.FIELDS.END_LINE],\n column: token[_tokenize.FIELDS.END_COL]\n };\n}\n\nfunction getSource(startLine, startColumn, endLine, endColumn) {\n return {\n start: {\n line: startLine,\n column: startColumn\n },\n end: {\n line: endLine,\n column: endColumn\n }\n };\n}\n\nfunction getTokenSource(token) {\n return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);\n}\n\nfunction getTokenSourceSpan(startToken, endToken) {\n if (!startToken) {\n return undefined;\n }\n\n return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);\n}\n\nfunction unescapeProp(node, prop) {\n var value = node[prop];\n\n if (typeof value !== \"string\") {\n return;\n }\n\n if (value.indexOf(\"\\\\\") !== -1) {\n (0, _util.ensureObject)(node, 'raws');\n node[prop] = (0, _util.unesc)(value);\n\n if (node.raws[prop] === undefined) {\n node.raws[prop] = value;\n }\n }\n\n return node;\n}\n\nfunction indexesOf(array, item) {\n var i = -1;\n var indexes = [];\n\n while ((i = array.indexOf(item, i + 1)) !== -1) {\n indexes.push(i);\n }\n\n return indexes;\n}\n\nfunction uniqs() {\n var list = Array.prototype.concat.apply([], arguments);\n return list.filter(function (item, i) {\n return i === list.indexOf(item);\n });\n}\n\nvar Parser = /*#__PURE__*/function () {\n function Parser(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n this.rule = rule;\n this.options = Object.assign({\n lossy: false,\n safe: false\n }, options);\n this.position = 0;\n this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector;\n this.tokens = (0, _tokenize[\"default\"])({\n css: this.css,\n error: this._errorGenerator(),\n safe: this.options.safe\n });\n var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);\n this.root = new _root[\"default\"]({\n source: rootSource\n });\n this.root.errorGenerator = this._errorGenerator();\n var selector = new _selector[\"default\"]({\n source: {\n start: {\n line: 1,\n column: 1\n }\n }\n });\n this.root.append(selector);\n this.current = selector;\n this.loop();\n }\n\n var _proto = Parser.prototype;\n\n _proto._errorGenerator = function _errorGenerator() {\n var _this = this;\n\n return function (message, errorOptions) {\n if (typeof _this.rule === 'string') {\n return new Error(message);\n }\n\n return _this.rule.error(message, errorOptions);\n };\n };\n\n _proto.attribute = function attribute() {\n var attr = [];\n var startingToken = this.currToken;\n this.position++;\n\n while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n attr.push(this.currToken);\n this.position++;\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n }\n\n var len = attr.length;\n var node = {\n source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),\n sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n };\n\n if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {\n return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);\n }\n\n var pos = 0;\n var spaceBefore = '';\n var commentBefore = '';\n var lastAdded = null;\n var spaceAfterMeaningfulToken = false;\n\n while (pos < len) {\n var token = attr[pos];\n var content = this.content(token);\n var next = attr[pos + 1];\n\n switch (token[_tokenize.FIELDS.TYPE]) {\n case tokens.space:\n // if (\n // len === 1 ||\n // pos === 0 && this.content(next) === '|'\n // ) {\n // return this.expected('attribute', token[TOKEN.START_POS], content);\n // }\n spaceAfterMeaningfulToken = true;\n\n if (this.options.lossy) {\n break;\n }\n\n if (lastAdded) {\n (0, _util.ensureObject)(node, 'spaces', lastAdded);\n var prevContent = node.spaces[lastAdded].after || '';\n node.spaces[lastAdded].after = prevContent + content;\n var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;\n\n if (existingComment) {\n node.raws.spaces[lastAdded].after = existingComment + content;\n }\n } else {\n spaceBefore = spaceBefore + content;\n commentBefore = commentBefore + content;\n }\n\n break;\n\n case tokens.asterisk:\n if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n node.operator = content;\n lastAdded = 'operator';\n } else if ((!node.namespace || lastAdded === \"namespace\" && !spaceAfterMeaningfulToken) && next) {\n if (spaceBefore) {\n (0, _util.ensureObject)(node, 'spaces', 'attribute');\n node.spaces.attribute.before = spaceBefore;\n spaceBefore = '';\n }\n\n if (commentBefore) {\n (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n node.raws.spaces.attribute.before = spaceBefore;\n commentBefore = '';\n }\n\n node.namespace = (node.namespace || \"\") + content;\n var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;\n\n if (rawValue) {\n node.raws.namespace += content;\n }\n\n lastAdded = 'namespace';\n }\n\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.dollar:\n if (lastAdded === \"value\") {\n var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');\n node.value += \"$\";\n\n if (oldRawValue) {\n node.raws.value = oldRawValue + \"$\";\n }\n\n break;\n }\n\n // Falls through\n\n case tokens.caret:\n if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n node.operator = content;\n lastAdded = 'operator';\n }\n\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.combinator:\n if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n node.operator = content;\n lastAdded = 'operator';\n }\n\n if (content !== '|') {\n spaceAfterMeaningfulToken = false;\n break;\n }\n\n if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n node.operator = content;\n lastAdded = 'operator';\n } else if (!node.namespace && !node.attribute) {\n node.namespace = true;\n }\n\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.word:\n if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.\n !node.operator && !node.namespace) {\n node.namespace = content;\n lastAdded = 'namespace';\n } else if (!node.attribute || lastAdded === \"attribute\" && !spaceAfterMeaningfulToken) {\n if (spaceBefore) {\n (0, _util.ensureObject)(node, 'spaces', 'attribute');\n node.spaces.attribute.before = spaceBefore;\n spaceBefore = '';\n }\n\n if (commentBefore) {\n (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n node.raws.spaces.attribute.before = commentBefore;\n commentBefore = '';\n }\n\n node.attribute = (node.attribute || \"\") + content;\n\n var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;\n\n if (_rawValue) {\n node.raws.attribute += content;\n }\n\n lastAdded = 'attribute';\n } else if (!node.value && node.value !== \"\" || lastAdded === \"value\" && !spaceAfterMeaningfulToken) {\n var _unescaped = (0, _util.unesc)(content);\n\n var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';\n\n var oldValue = node.value || '';\n node.value = oldValue + _unescaped;\n node.quoteMark = null;\n\n if (_unescaped !== content || _oldRawValue) {\n (0, _util.ensureObject)(node, 'raws');\n node.raws.value = (_oldRawValue || oldValue) + content;\n }\n\n lastAdded = 'value';\n } else {\n var insensitive = content === 'i' || content === \"I\";\n\n if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {\n node.insensitive = insensitive;\n\n if (!insensitive || content === \"I\") {\n (0, _util.ensureObject)(node, 'raws');\n node.raws.insensitiveFlag = content;\n }\n\n lastAdded = 'insensitive';\n\n if (spaceBefore) {\n (0, _util.ensureObject)(node, 'spaces', 'insensitive');\n node.spaces.insensitive.before = spaceBefore;\n spaceBefore = '';\n }\n\n if (commentBefore) {\n (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');\n node.raws.spaces.insensitive.before = commentBefore;\n commentBefore = '';\n }\n } else if (node.value || node.value === '') {\n lastAdded = 'value';\n node.value += content;\n\n if (node.raws.value) {\n node.raws.value += content;\n }\n }\n }\n\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.str:\n if (!node.attribute || !node.operator) {\n return this.error(\"Expected an attribute followed by an operator preceding the string.\", {\n index: token[_tokenize.FIELDS.START_POS]\n });\n }\n\n var _unescapeValue = (0, _attribute.unescapeValue)(content),\n unescaped = _unescapeValue.unescaped,\n quoteMark = _unescapeValue.quoteMark;\n\n node.value = unescaped;\n node.quoteMark = quoteMark;\n lastAdded = 'value';\n (0, _util.ensureObject)(node, 'raws');\n node.raws.value = content;\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.equals:\n if (!node.attribute) {\n return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);\n }\n\n if (node.value) {\n return this.error('Unexpected \"=\" found; an operator was already defined.', {\n index: token[_tokenize.FIELDS.START_POS]\n });\n }\n\n node.operator = node.operator ? node.operator + content : content;\n lastAdded = 'operator';\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.comment:\n if (lastAdded) {\n if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {\n var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || '';\n var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment;\n (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded);\n node.raws.spaces[lastAdded].after = rawLastComment + content;\n } else {\n var lastValue = node[lastAdded] || '';\n var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue;\n (0, _util.ensureObject)(node, 'raws');\n node.raws[lastAdded] = rawLastValue + content;\n }\n } else {\n commentBefore = commentBefore + content;\n }\n\n break;\n\n default:\n return this.error(\"Unexpected \\\"\" + content + \"\\\" found.\", {\n index: token[_tokenize.FIELDS.START_POS]\n });\n }\n\n pos++;\n }\n\n unescapeProp(node, \"attribute\");\n unescapeProp(node, \"namespace\");\n this.newNode(new _attribute[\"default\"](node));\n this.position++;\n }\n /**\n * return a node containing meaningless garbage up to (but not including) the specified token position.\n * if the token position is negative, all remaining tokens are consumed.\n *\n * This returns an array containing a single string node if all whitespace,\n * otherwise an array of comment nodes with space before and after.\n *\n * These tokens are not added to the current selector, the caller can add them or use them to amend\n * a previous node's space metadata.\n *\n * In lossy mode, this returns only comments.\n */\n ;\n\n _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {\n if (stopPosition < 0) {\n stopPosition = this.tokens.length;\n }\n\n var startPosition = this.position;\n var nodes = [];\n var space = \"\";\n var lastComment = undefined;\n\n do {\n if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {\n if (!this.options.lossy) {\n space += this.content();\n }\n } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {\n var spaces = {};\n\n if (space) {\n spaces.before = space;\n space = \"\";\n }\n\n lastComment = new _comment[\"default\"]({\n value: this.content(),\n source: getTokenSource(this.currToken),\n sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n spaces: spaces\n });\n nodes.push(lastComment);\n }\n } while (++this.position < stopPosition);\n\n if (space) {\n if (lastComment) {\n lastComment.spaces.after = space;\n } else if (!this.options.lossy) {\n var firstToken = this.tokens[startPosition];\n var lastToken = this.tokens[this.position - 1];\n nodes.push(new _string[\"default\"]({\n value: '',\n source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),\n sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n spaces: {\n before: space,\n after: ''\n }\n }));\n }\n }\n\n return nodes;\n }\n /**\n * \n * @param {*} nodes \n */\n ;\n\n _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {\n var _this2 = this;\n\n if (requiredSpace === void 0) {\n requiredSpace = false;\n }\n\n var space = \"\";\n var rawSpace = \"\";\n nodes.forEach(function (n) {\n var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);\n\n var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);\n\n space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);\n rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);\n });\n\n if (rawSpace === space) {\n rawSpace = undefined;\n }\n\n var result = {\n space: space,\n rawSpace: rawSpace\n };\n return result;\n };\n\n _proto.isNamedCombinator = function isNamedCombinator(position) {\n if (position === void 0) {\n position = this.position;\n }\n\n return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;\n };\n\n _proto.namedCombinator = function namedCombinator() {\n if (this.isNamedCombinator()) {\n var nameRaw = this.content(this.tokens[this.position + 1]);\n var name = (0, _util.unesc)(nameRaw).toLowerCase();\n var raws = {};\n\n if (name !== nameRaw) {\n raws.value = \"/\" + nameRaw + \"/\";\n }\n\n var node = new _combinator[\"default\"]({\n value: \"/\" + name + \"/\",\n source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),\n sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n raws: raws\n });\n this.position = this.position + 3;\n return node;\n } else {\n this.unexpected();\n }\n };\n\n _proto.combinator = function combinator() {\n var _this3 = this;\n\n if (this.content() === '|') {\n return this.namespace();\n } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.\n\n\n var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);\n\n if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {\n var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n\n if (nodes.length > 0) {\n var last = this.current.last;\n\n if (last) {\n var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),\n space = _this$convertWhitespa.space,\n rawSpace = _this$convertWhitespa.rawSpace;\n\n if (rawSpace !== undefined) {\n last.rawSpaceAfter += rawSpace;\n }\n\n last.spaces.after += space;\n } else {\n nodes.forEach(function (n) {\n return _this3.newNode(n);\n });\n }\n }\n\n return;\n }\n\n var firstToken = this.currToken;\n var spaceOrDescendantSelectorNodes = undefined;\n\n if (nextSigTokenPos > this.position) {\n spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n }\n\n var node;\n\n if (this.isNamedCombinator()) {\n node = this.namedCombinator();\n } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {\n node = new _combinator[\"default\"]({\n value: this.content(),\n source: getTokenSource(this.currToken),\n sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]\n });\n this.position++;\n } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {// pass\n } else if (!spaceOrDescendantSelectorNodes) {\n this.unexpected();\n }\n\n if (node) {\n if (spaceOrDescendantSelectorNodes) {\n var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),\n _space = _this$convertWhitespa2.space,\n _rawSpace = _this$convertWhitespa2.rawSpace;\n\n node.spaces.before = _space;\n node.rawSpaceBefore = _rawSpace;\n }\n } else {\n // descendant combinator\n var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),\n _space2 = _this$convertWhitespa3.space,\n _rawSpace2 = _this$convertWhitespa3.rawSpace;\n\n if (!_rawSpace2) {\n _rawSpace2 = _space2;\n }\n\n var spaces = {};\n var raws = {\n spaces: {}\n };\n\n if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {\n spaces.before = _space2.slice(0, _space2.length - 1);\n raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);\n } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {\n spaces.after = _space2.slice(1);\n raws.spaces.after = _rawSpace2.slice(1);\n } else {\n raws.value = _rawSpace2;\n }\n\n node = new _combinator[\"default\"]({\n value: ' ',\n source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),\n sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n spaces: spaces,\n raws: raws\n });\n }\n\n if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {\n node.spaces.after = this.optionalSpace(this.content());\n this.position++;\n }\n\n return this.newNode(node);\n };\n\n _proto.comma = function comma() {\n if (this.position === this.tokens.length - 1) {\n this.root.trailingComma = true;\n this.position++;\n return;\n }\n\n this.current._inferEndPosition();\n\n var selector = new _selector[\"default\"]({\n source: {\n start: tokenStart(this.tokens[this.position + 1])\n }\n });\n this.current.parent.append(selector);\n this.current = selector;\n this.position++;\n };\n\n _proto.comment = function comment() {\n var current = this.currToken;\n this.newNode(new _comment[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.error = function error(message, opts) {\n throw this.root.error(message, opts);\n };\n\n _proto.missingBackslash = function missingBackslash() {\n return this.error('Expected a backslash preceding the semicolon.', {\n index: this.currToken[_tokenize.FIELDS.START_POS]\n });\n };\n\n _proto.missingParenthesis = function missingParenthesis() {\n return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.missingSquareBracket = function missingSquareBracket() {\n return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.unexpected = function unexpected() {\n return this.error(\"Unexpected '\" + this.content() + \"'. Escaping special characters with \\\\ may help.\", this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.namespace = function namespace() {\n var before = this.prevToken && this.content(this.prevToken) || true;\n\n if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n this.position++;\n return this.word(before);\n } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {\n this.position++;\n return this.universal(before);\n }\n };\n\n _proto.nesting = function nesting() {\n if (this.nextToken) {\n var nextContent = this.content(this.nextToken);\n\n if (nextContent === \"|\") {\n this.position++;\n return;\n }\n }\n\n var current = this.currToken;\n this.newNode(new _nesting[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.parentheses = function parentheses() {\n var last = this.current.last;\n var unbalanced = 1;\n this.position++;\n\n if (last && last.type === types.PSEUDO) {\n var selector = new _selector[\"default\"]({\n source: {\n start: tokenStart(this.tokens[this.position - 1])\n }\n });\n var cache = this.current;\n last.append(selector);\n this.current = selector;\n\n while (this.position < this.tokens.length && unbalanced) {\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n unbalanced++;\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n unbalanced--;\n }\n\n if (unbalanced) {\n this.parse();\n } else {\n this.current.source.end = tokenEnd(this.currToken);\n this.current.parent.source.end = tokenEnd(this.currToken);\n this.position++;\n }\n }\n\n this.current = cache;\n } else {\n // I think this case should be an error. It's used to implement a basic parse of media queries\n // but I don't think it's a good idea.\n var parenStart = this.currToken;\n var parenValue = \"(\";\n var parenEnd;\n\n while (this.position < this.tokens.length && unbalanced) {\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n unbalanced++;\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n unbalanced--;\n }\n\n parenEnd = this.currToken;\n parenValue += this.parseParenthesisToken(this.currToken);\n this.position++;\n }\n\n if (last) {\n last.appendToPropertyAndEscape(\"value\", parenValue, parenValue);\n } else {\n this.newNode(new _string[\"default\"]({\n value: parenValue,\n source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),\n sourceIndex: parenStart[_tokenize.FIELDS.START_POS]\n }));\n }\n }\n\n if (unbalanced) {\n return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n }\n };\n\n _proto.pseudo = function pseudo() {\n var _this4 = this;\n\n var pseudoStr = '';\n var startingToken = this.currToken;\n\n while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {\n pseudoStr += this.content();\n this.position++;\n }\n\n if (!this.currToken) {\n return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n this.splitWord(false, function (first, length) {\n pseudoStr += first;\n\n _this4.newNode(new _pseudo[\"default\"]({\n value: pseudoStr,\n source: getTokenSourceSpan(startingToken, _this4.currToken),\n sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n }));\n\n if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n _this4.error('Misplaced parenthesis.', {\n index: _this4.nextToken[_tokenize.FIELDS.START_POS]\n });\n }\n });\n } else {\n return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);\n }\n };\n\n _proto.space = function space() {\n var content = this.content(); // Handle space before and after the selector\n\n if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {\n return node.type === 'comment';\n })) {\n this.spaces = this.optionalSpace(content);\n this.position++;\n } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n this.current.last.spaces.after = this.optionalSpace(content);\n this.position++;\n } else {\n this.combinator();\n }\n };\n\n _proto.string = function string() {\n var current = this.currToken;\n this.newNode(new _string[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.universal = function universal(namespace) {\n var nextToken = this.nextToken;\n\n if (nextToken && this.content(nextToken) === '|') {\n this.position++;\n return this.namespace();\n }\n\n var current = this.currToken;\n this.newNode(new _universal[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }), namespace);\n this.position++;\n };\n\n _proto.splitWord = function splitWord(namespace, firstCallback) {\n var _this5 = this;\n\n var nextToken = this.nextToken;\n var word = this.content();\n\n while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {\n this.position++;\n var current = this.content();\n word += current;\n\n if (current.lastIndexOf('\\\\') === current.length - 1) {\n var next = this.nextToken;\n\n if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {\n word += this.requiredSpace(this.content(next));\n this.position++;\n }\n }\n\n nextToken = this.nextToken;\n }\n\n var hasClass = indexesOf(word, '.').filter(function (i) {\n return word[i - 1] !== '\\\\';\n });\n var hasId = indexesOf(word, '#').filter(function (i) {\n return word[i - 1] !== '\\\\';\n }); // Eliminate Sass interpolations from the list of id indexes\n\n var interpolations = indexesOf(word, '#{');\n\n if (interpolations.length) {\n hasId = hasId.filter(function (hashIndex) {\n return !~interpolations.indexOf(hashIndex);\n });\n }\n\n var indices = (0, _sortAscending[\"default\"])(uniqs([0].concat(hasClass, hasId)));\n indices.forEach(function (ind, i) {\n var index = indices[i + 1] || word.length;\n var value = word.slice(ind, index);\n\n if (i === 0 && firstCallback) {\n return firstCallback.call(_this5, value, indices.length);\n }\n\n var node;\n var current = _this5.currToken;\n var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];\n var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));\n\n if (~hasClass.indexOf(ind)) {\n var classNameOpts = {\n value: value.slice(1),\n source: source,\n sourceIndex: sourceIndex\n };\n node = new _className[\"default\"](unescapeProp(classNameOpts, \"value\"));\n } else if (~hasId.indexOf(ind)) {\n var idOpts = {\n value: value.slice(1),\n source: source,\n sourceIndex: sourceIndex\n };\n node = new _id[\"default\"](unescapeProp(idOpts, \"value\"));\n } else {\n var tagOpts = {\n value: value,\n source: source,\n sourceIndex: sourceIndex\n };\n unescapeProp(tagOpts, \"value\");\n node = new _tag[\"default\"](tagOpts);\n }\n\n _this5.newNode(node, namespace); // Ensure that the namespace is used only once\n\n\n namespace = null;\n });\n this.position++;\n };\n\n _proto.word = function word(namespace) {\n var nextToken = this.nextToken;\n\n if (nextToken && this.content(nextToken) === '|') {\n this.position++;\n return this.namespace();\n }\n\n return this.splitWord(namespace);\n };\n\n _proto.loop = function loop() {\n while (this.position < this.tokens.length) {\n this.parse(true);\n }\n\n this.current._inferEndPosition();\n\n return this.root;\n };\n\n _proto.parse = function parse(throwOnParenthesis) {\n switch (this.currToken[_tokenize.FIELDS.TYPE]) {\n case tokens.space:\n this.space();\n break;\n\n case tokens.comment:\n this.comment();\n break;\n\n case tokens.openParenthesis:\n this.parentheses();\n break;\n\n case tokens.closeParenthesis:\n if (throwOnParenthesis) {\n this.missingParenthesis();\n }\n\n break;\n\n case tokens.openSquare:\n this.attribute();\n break;\n\n case tokens.dollar:\n case tokens.caret:\n case tokens.equals:\n case tokens.word:\n this.word();\n break;\n\n case tokens.colon:\n this.pseudo();\n break;\n\n case tokens.comma:\n this.comma();\n break;\n\n case tokens.asterisk:\n this.universal();\n break;\n\n case tokens.ampersand:\n this.nesting();\n break;\n\n case tokens.slash:\n case tokens.combinator:\n this.combinator();\n break;\n\n case tokens.str:\n this.string();\n break;\n // These cases throw; no break needed.\n\n case tokens.closeSquare:\n this.missingSquareBracket();\n\n case tokens.semicolon:\n this.missingBackslash();\n\n default:\n this.unexpected();\n }\n }\n /**\n * Helpers\n */\n ;\n\n _proto.expected = function expected(description, index, found) {\n if (Array.isArray(description)) {\n var last = description.pop();\n description = description.join(', ') + \" or \" + last;\n }\n\n var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';\n\n if (!found) {\n return this.error(\"Expected \" + an + \" \" + description + \".\", {\n index: index\n });\n }\n\n return this.error(\"Expected \" + an + \" \" + description + \", found \\\"\" + found + \"\\\" instead.\", {\n index: index\n });\n };\n\n _proto.requiredSpace = function requiredSpace(space) {\n return this.options.lossy ? ' ' : space;\n };\n\n _proto.optionalSpace = function optionalSpace(space) {\n return this.options.lossy ? '' : space;\n };\n\n _proto.lossySpace = function lossySpace(space, required) {\n if (this.options.lossy) {\n return required ? ' ' : '';\n } else {\n return space;\n }\n };\n\n _proto.parseParenthesisToken = function parseParenthesisToken(token) {\n var content = this.content(token);\n\n if (token[_tokenize.FIELDS.TYPE] === tokens.space) {\n return this.requiredSpace(content);\n } else {\n return content;\n }\n };\n\n _proto.newNode = function newNode(node, namespace) {\n if (namespace) {\n if (/^ +$/.test(namespace)) {\n if (!this.options.lossy) {\n this.spaces = (this.spaces || '') + namespace;\n }\n\n namespace = true;\n }\n\n node.namespace = namespace;\n unescapeProp(node, \"namespace\");\n }\n\n if (this.spaces) {\n node.spaces.before = this.spaces;\n this.spaces = '';\n }\n\n return this.current.append(node);\n };\n\n _proto.content = function content(token) {\n if (token === void 0) {\n token = this.currToken;\n }\n\n return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);\n };\n\n /**\n * returns the index of the next non-whitespace, non-comment token.\n * returns -1 if no meaningful token is found.\n */\n _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {\n if (startPosition === void 0) {\n startPosition = this.position + 1;\n }\n\n var searchPosition = startPosition;\n\n while (searchPosition < this.tokens.length) {\n if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {\n searchPosition++;\n continue;\n } else {\n return searchPosition;\n }\n }\n\n return -1;\n };\n\n _createClass(Parser, [{\n key: \"currToken\",\n get: function get() {\n return this.tokens[this.position];\n }\n }, {\n key: \"nextToken\",\n get: function get() {\n return this.tokens[this.position + 1];\n }\n }, {\n key: \"prevToken\",\n get: function get() {\n return this.tokens[this.position - 1];\n }\n }]);\n\n return Parser;\n}();\n\nexports[\"default\"] = Parser;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _parser = _interopRequireDefault(require(\"./parser\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Processor = /*#__PURE__*/function () {\n function Processor(func, options) {\n this.func = func || function noop() {};\n\n this.funcRes = null;\n this.options = options;\n }\n\n var _proto = Processor.prototype;\n\n _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var merged = Object.assign({}, this.options, options);\n\n if (merged.updateSelector === false) {\n return false;\n } else {\n return typeof rule !== \"string\";\n }\n };\n\n _proto._isLossy = function _isLossy(options) {\n if (options === void 0) {\n options = {};\n }\n\n var merged = Object.assign({}, this.options, options);\n\n if (merged.lossless === false) {\n return true;\n } else {\n return false;\n }\n };\n\n _proto._root = function _root(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var parser = new _parser[\"default\"](rule, this._parseOptions(options));\n return parser.root;\n };\n\n _proto._parseOptions = function _parseOptions(options) {\n return {\n lossy: this._isLossy(options)\n };\n };\n\n _proto._run = function _run(rule, options) {\n var _this = this;\n\n if (options === void 0) {\n options = {};\n }\n\n return new Promise(function (resolve, reject) {\n try {\n var root = _this._root(rule, options);\n\n Promise.resolve(_this.func(root)).then(function (transform) {\n var string = undefined;\n\n if (_this._shouldUpdateSelector(rule, options)) {\n string = root.toString();\n rule.selector = string;\n }\n\n return {\n transform: transform,\n root: root,\n string: string\n };\n }).then(resolve, reject);\n } catch (e) {\n reject(e);\n return;\n }\n });\n };\n\n _proto._runSync = function _runSync(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var root = this._root(rule, options);\n\n var transform = this.func(root);\n\n if (transform && typeof transform.then === \"function\") {\n throw new Error(\"Selector processor returned a promise to a synchronous call.\");\n }\n\n var string = undefined;\n\n if (options.updateSelector && typeof rule !== \"string\") {\n string = root.toString();\n rule.selector = string;\n }\n\n return {\n transform: transform,\n root: root,\n string: string\n };\n }\n /**\n * Process rule into a selector AST.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {Promise<parser.Root>} The AST of the selector after processing it.\n */\n ;\n\n _proto.ast = function ast(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.root;\n });\n }\n /**\n * Process rule into a selector AST synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {parser.Root} The AST of the selector after processing it.\n */\n ;\n\n _proto.astSync = function astSync(rule, options) {\n return this._runSync(rule, options).root;\n }\n /**\n * Process a selector into a transformed value asynchronously\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {Promise<any>} The value returned by the processor.\n */\n ;\n\n _proto.transform = function transform(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.transform;\n });\n }\n /**\n * Process a selector into a transformed value synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {any} The value returned by the processor.\n */\n ;\n\n _proto.transformSync = function transformSync(rule, options) {\n return this._runSync(rule, options).transform;\n }\n /**\n * Process a selector into a new selector string asynchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {string} the selector after processing.\n */\n ;\n\n _proto.process = function process(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.string || result.root.toString();\n });\n }\n /**\n * Process a selector into a new selector string synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {string} the selector after processing.\n */\n ;\n\n _proto.processSync = function processSync(rule, options) {\n var result = this._runSync(rule, options);\n\n return result.string || result.root.toString();\n };\n\n return Processor;\n}();\n\nexports[\"default\"] = Processor;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.universal = exports.tag = exports.string = exports.selector = exports.root = exports.pseudo = exports.nesting = exports.id = exports.comment = exports.combinator = exports.className = exports.attribute = void 0;\n\nvar _attribute = _interopRequireDefault(require(\"./attribute\"));\n\nvar _className = _interopRequireDefault(require(\"./className\"));\n\nvar _combinator = _interopRequireDefault(require(\"./combinator\"));\n\nvar _comment = _interopRequireDefault(require(\"./comment\"));\n\nvar _id = _interopRequireDefault(require(\"./id\"));\n\nvar _nesting = _interopRequireDefault(require(\"./nesting\"));\n\nvar _pseudo = _interopRequireDefault(require(\"./pseudo\"));\n\nvar _root = _interopRequireDefault(require(\"./root\"));\n\nvar _selector = _interopRequireDefault(require(\"./selector\"));\n\nvar _string = _interopRequireDefault(require(\"./string\"));\n\nvar _tag = _interopRequireDefault(require(\"./tag\"));\n\nvar _universal = _interopRequireDefault(require(\"./universal\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar attribute = function attribute(opts) {\n return new _attribute[\"default\"](opts);\n};\n\nexports.attribute = attribute;\n\nvar className = function className(opts) {\n return new _className[\"default\"](opts);\n};\n\nexports.className = className;\n\nvar combinator = function combinator(opts) {\n return new _combinator[\"default\"](opts);\n};\n\nexports.combinator = combinator;\n\nvar comment = function comment(opts) {\n return new _comment[\"default\"](opts);\n};\n\nexports.comment = comment;\n\nvar id = function id(opts) {\n return new _id[\"default\"](opts);\n};\n\nexports.id = id;\n\nvar nesting = function nesting(opts) {\n return new _nesting[\"default\"](opts);\n};\n\nexports.nesting = nesting;\n\nvar pseudo = function pseudo(opts) {\n return new _pseudo[\"default\"](opts);\n};\n\nexports.pseudo = pseudo;\n\nvar root = function root(opts) {\n return new _root[\"default\"](opts);\n};\n\nexports.root = root;\n\nvar selector = function selector(opts) {\n return new _selector[\"default\"](opts);\n};\n\nexports.selector = selector;\n\nvar string = function string(opts) {\n return new _string[\"default\"](opts);\n};\n\nexports.string = string;\n\nvar tag = function tag(opts) {\n return new _tag[\"default\"](opts);\n};\n\nexports.tag = tag;\n\nvar universal = function universal(opts) {\n return new _universal[\"default\"](opts);\n};\n\nexports.universal = universal;","\"use strict\";\n\nexports.__esModule = true;\nexports.isNode = isNode;\nexports.isPseudoElement = isPseudoElement;\nexports.isPseudoClass = isPseudoClass;\nexports.isContainer = isContainer;\nexports.isNamespace = isNamespace;\nexports.isUniversal = exports.isTag = exports.isString = exports.isSelector = exports.isRoot = exports.isPseudo = exports.isNesting = exports.isIdentifier = exports.isComment = exports.isCombinator = exports.isClassName = exports.isAttribute = void 0;\n\nvar _types = require(\"./types\");\n\nvar _IS_TYPE;\n\nvar IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);\n\nfunction isNode(node) {\n return typeof node === \"object\" && IS_TYPE[node.type];\n}\n\nfunction isNodeType(type, node) {\n return isNode(node) && node.type === type;\n}\n\nvar isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);\nexports.isAttribute = isAttribute;\nvar isClassName = isNodeType.bind(null, _types.CLASS);\nexports.isClassName = isClassName;\nvar isCombinator = isNodeType.bind(null, _types.COMBINATOR);\nexports.isCombinator = isCombinator;\nvar isComment = isNodeType.bind(null, _types.COMMENT);\nexports.isComment = isComment;\nvar isIdentifier = isNodeType.bind(null, _types.ID);\nexports.isIdentifier = isIdentifier;\nvar isNesting = isNodeType.bind(null, _types.NESTING);\nexports.isNesting = isNesting;\nvar isPseudo = isNodeType.bind(null, _types.PSEUDO);\nexports.isPseudo = isPseudo;\nvar isRoot = isNodeType.bind(null, _types.ROOT);\nexports.isRoot = isRoot;\nvar isSelector = isNodeType.bind(null, _types.SELECTOR);\nexports.isSelector = isSelector;\nvar isString = isNodeType.bind(null, _types.STRING);\nexports.isString = isString;\nvar isTag = isNodeType.bind(null, _types.TAG);\nexports.isTag = isTag;\nvar isUniversal = isNodeType.bind(null, _types.UNIVERSAL);\nexports.isUniversal = isUniversal;\n\nfunction isPseudoElement(node) {\n return isPseudo(node) && node.value && (node.value.startsWith(\"::\") || node.value.toLowerCase() === \":before\" || node.value.toLowerCase() === \":after\");\n}\n\nfunction isPseudoClass(node) {\n return isPseudo(node) && !isPseudoElement(node);\n}\n\nfunction isContainer(node) {\n return !!(isNode(node) && node.walk);\n}\n\nfunction isNamespace(node) {\n return isAttribute(node) || isTag(node);\n}","\"use strict\";\n\nexports.__esModule = true;\n\nvar _types = require(\"./types\");\n\nObject.keys(_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _types[key]) return;\n exports[key] = _types[key];\n});\n\nvar _constructors = require(\"./constructors\");\n\nObject.keys(_constructors).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _constructors[key]) return;\n exports[key] = _constructors[key];\n});\n\nvar _guards = require(\"./guards\");\n\nObject.keys(_guards).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _guards[key]) return;\n exports[key] = _guards[key];\n});","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _processor = _interopRequireDefault(require(\"./processor\"));\n\nvar selectors = _interopRequireWildcard(require(\"./selectors\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar parser = function parser(processor) {\n return new _processor[\"default\"](processor);\n};\n\nObject.assign(parser, selectors);\ndelete parser.__esModule;\nvar _default = parser;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;","const matchValueName = /[$]?[\\w-]+/g;\n\nconst replaceValueSymbols = (value, replacements) => {\n let matches;\n\n while ((matches = matchValueName.exec(value))) {\n const replacement = replacements[matches[0]];\n\n if (replacement) {\n value =\n value.slice(0, matches.index) +\n replacement +\n value.slice(matchValueName.lastIndex);\n\n matchValueName.lastIndex -= matches[0].length - replacement.length;\n }\n }\n\n return value;\n};\n\nmodule.exports = replaceValueSymbols;\n","const replaceValueSymbols = require(\"./replaceValueSymbols.js\");\n\nconst replaceSymbols = (css, replacements) => {\n css.walk((node) => {\n if (node.type === \"decl\" && node.value) {\n node.value = replaceValueSymbols(node.value.toString(), replacements);\n } else if (node.type === \"rule\" && node.selector) {\n node.selector = replaceValueSymbols(\n node.selector.toString(),\n replacements\n );\n } else if (node.type === \"atrule\" && node.params) {\n node.params = replaceValueSymbols(node.params.toString(), replacements);\n }\n });\n};\n\nmodule.exports = replaceSymbols;\n","const importPattern = /^:import\\((\"[^\"]*\"|'[^']*'|[^\"']+)\\)$/;\nconst balancedQuotes = /^(\"[^\"]*\"|'[^']*'|[^\"']+)$/;\n\nconst getDeclsObject = (rule) => {\n const object = {};\n\n rule.walkDecls((decl) => {\n const before = decl.raws.before ? decl.raws.before.trim() : \"\";\n\n object[before + decl.prop] = decl.value;\n });\n\n return object;\n};\n/**\n *\n * @param {string} css\n * @param {boolean} removeRules\n * @param {'auto' | 'rule' | 'at-rule'} mode\n */\nconst extractICSS = (css, removeRules = true, mode = \"auto\") => {\n const icssImports = {};\n const icssExports = {};\n\n function addImports(node, path) {\n const unquoted = path.replace(/'|\"/g, \"\");\n icssImports[unquoted] = Object.assign(\n icssImports[unquoted] || {},\n getDeclsObject(node)\n );\n\n if (removeRules) {\n node.remove();\n }\n }\n\n function addExports(node) {\n Object.assign(icssExports, getDeclsObject(node));\n if (removeRules) {\n node.remove();\n }\n }\n\n css.each((node) => {\n if (node.type === \"rule\" && mode !== \"at-rule\") {\n if (node.selector.slice(0, 7) === \":import\") {\n const matches = importPattern.exec(node.selector);\n\n if (matches) {\n addImports(node, matches[1]);\n }\n }\n\n if (node.selector === \":export\") {\n addExports(node);\n }\n }\n\n if (node.type === \"atrule\" && mode !== \"rule\") {\n if (node.name === \"icss-import\") {\n const matches = balancedQuotes.exec(node.params);\n\n if (matches) {\n addImports(node, matches[1]);\n }\n }\n if (node.name === \"icss-export\") {\n addExports(node);\n }\n }\n });\n\n return { icssImports, icssExports };\n};\n\nmodule.exports = extractICSS;\n","const createImports = (imports, postcss, mode = \"rule\") => {\n return Object.keys(imports).map((path) => {\n const aliases = imports[path];\n const declarations = Object.keys(aliases).map((key) =>\n postcss.decl({\n prop: key,\n value: aliases[key],\n raws: { before: \"\\n \" },\n })\n );\n\n const hasDeclarations = declarations.length > 0;\n\n const rule =\n mode === \"rule\"\n ? postcss.rule({\n selector: `:import('${path}')`,\n raws: { after: hasDeclarations ? \"\\n\" : \"\" },\n })\n : postcss.atRule({\n name: \"icss-import\",\n params: `'${path}'`,\n raws: { after: hasDeclarations ? \"\\n\" : \"\" },\n });\n\n if (hasDeclarations) {\n rule.append(declarations);\n }\n\n return rule;\n });\n};\n\nconst createExports = (exports, postcss, mode = \"rule\") => {\n const declarations = Object.keys(exports).map((key) =>\n postcss.decl({\n prop: key,\n value: exports[key],\n raws: { before: \"\\n \" },\n })\n );\n\n if (declarations.length === 0) {\n return [];\n }\n const rule =\n mode === \"rule\"\n ? postcss.rule({\n selector: `:export`,\n raws: { after: \"\\n\" },\n })\n : postcss.atRule({\n name: \"icss-export\",\n raws: { after: \"\\n\" },\n });\n\n rule.append(declarations);\n\n return [rule];\n};\n\nconst createICSSRules = (imports, exports, postcss, mode) => [\n ...createImports(imports, postcss, mode),\n ...createExports(exports, postcss, mode),\n];\n\nmodule.exports = createICSSRules;\n","const replaceValueSymbols = require(\"./replaceValueSymbols.js\");\nconst replaceSymbols = require(\"./replaceSymbols.js\");\nconst extractICSS = require(\"./extractICSS.js\");\nconst createICSSRules = require(\"./createICSSRules.js\");\n\nmodule.exports = {\n replaceValueSymbols,\n replaceSymbols,\n extractICSS,\n createICSSRules,\n};\n","\"use strict\";\n\nconst selectorParser = require(\"postcss-selector-parser\");\nconst valueParser = require(\"postcss-value-parser\");\nconst { extractICSS } = require(\"icss-utils\");\n\nconst isSpacing = (node) => node.type === \"combinator\" && node.value === \" \";\n\nfunction normalizeNodeArray(nodes) {\n const array = [];\n\n nodes.forEach((x) => {\n if (Array.isArray(x)) {\n normalizeNodeArray(x).forEach((item) => {\n array.push(item);\n });\n } else if (x) {\n array.push(x);\n }\n });\n\n if (array.length > 0 && isSpacing(array[array.length - 1])) {\n array.pop();\n }\n return array;\n}\n\nfunction localizeNode(rule, mode, localAliasMap) {\n const transform = (node, context) => {\n if (context.ignoreNextSpacing && !isSpacing(node)) {\n throw new Error(\"Missing whitespace after \" + context.ignoreNextSpacing);\n }\n\n if (context.enforceNoSpacing && isSpacing(node)) {\n throw new Error(\"Missing whitespace before \" + context.enforceNoSpacing);\n }\n\n let newNodes;\n\n switch (node.type) {\n case \"root\": {\n let resultingGlobal;\n\n context.hasPureGlobals = false;\n\n newNodes = node.nodes.map((n) => {\n const nContext = {\n global: context.global,\n lastWasSpacing: true,\n hasLocals: false,\n explicit: false,\n };\n\n n = transform(n, nContext);\n\n if (typeof resultingGlobal === \"undefined\") {\n resultingGlobal = nContext.global;\n } else if (resultingGlobal !== nContext.global) {\n throw new Error(\n 'Inconsistent rule global/local result in rule \"' +\n node +\n '\" (multiple selectors must result in the same mode for the rule)'\n );\n }\n\n if (!nContext.hasLocals) {\n context.hasPureGlobals = true;\n }\n\n return n;\n });\n\n context.global = resultingGlobal;\n\n node.nodes = normalizeNodeArray(newNodes);\n break;\n }\n case \"selector\": {\n newNodes = node.map((childNode) => transform(childNode, context));\n\n node = node.clone();\n node.nodes = normalizeNodeArray(newNodes);\n break;\n }\n case \"combinator\": {\n if (isSpacing(node)) {\n if (context.ignoreNextSpacing) {\n context.ignoreNextSpacing = false;\n context.lastWasSpacing = false;\n context.enforceNoSpacing = false;\n return null;\n }\n context.lastWasSpacing = true;\n return node;\n }\n break;\n }\n case \"pseudo\": {\n let childContext;\n const isNested = !!node.length;\n const isScoped = node.value === \":local\" || node.value === \":global\";\n const isImportExport =\n node.value === \":import\" || node.value === \":export\";\n\n if (isImportExport) {\n context.hasLocals = true;\n // :local(.foo)\n } else if (isNested) {\n if (isScoped) {\n if (node.nodes.length === 0) {\n throw new Error(`${node.value}() can't be empty`);\n }\n\n if (context.inside) {\n throw new Error(\n `A ${node.value} is not allowed inside of a ${context.inside}(...)`\n );\n }\n\n childContext = {\n global: node.value === \":global\",\n inside: node.value,\n hasLocals: false,\n explicit: true,\n };\n\n newNodes = node\n .map((childNode) => transform(childNode, childContext))\n .reduce((acc, next) => acc.concat(next.nodes), []);\n\n if (newNodes.length) {\n const { before, after } = node.spaces;\n\n const first = newNodes[0];\n const last = newNodes[newNodes.length - 1];\n\n first.spaces = { before, after: first.spaces.after };\n last.spaces = { before: last.spaces.before, after };\n }\n\n node = newNodes;\n\n break;\n } else {\n childContext = {\n global: context.global,\n inside: context.inside,\n lastWasSpacing: true,\n hasLocals: false,\n explicit: context.explicit,\n };\n newNodes = node.map((childNode) =>\n transform(childNode, childContext)\n );\n\n node = node.clone();\n node.nodes = normalizeNodeArray(newNodes);\n\n if (childContext.hasLocals) {\n context.hasLocals = true;\n }\n }\n break;\n\n //:local .foo .bar\n } else if (isScoped) {\n if (context.inside) {\n throw new Error(\n `A ${node.value} is not allowed inside of a ${context.inside}(...)`\n );\n }\n\n const addBackSpacing = !!node.spaces.before;\n\n context.ignoreNextSpacing = context.lastWasSpacing\n ? node.value\n : false;\n\n context.enforceNoSpacing = context.lastWasSpacing\n ? false\n : node.value;\n\n context.global = node.value === \":global\";\n context.explicit = true;\n\n // because this node has spacing that is lost when we remove it\n // we make up for it by adding an extra combinator in since adding\n // spacing on the parent selector doesn't work\n return addBackSpacing\n ? selectorParser.combinator({ value: \" \" })\n : null;\n }\n break;\n }\n case \"id\":\n case \"class\": {\n if (!node.value) {\n throw new Error(\"Invalid class or id selector syntax\");\n }\n\n if (context.global) {\n break;\n }\n\n const isImportedValue = localAliasMap.has(node.value);\n const isImportedWithExplicitScope = isImportedValue && context.explicit;\n\n if (!isImportedValue || isImportedWithExplicitScope) {\n const innerNode = node.clone();\n innerNode.spaces = { before: \"\", after: \"\" };\n\n node = selectorParser.pseudo({\n value: \":local\",\n nodes: [innerNode],\n spaces: node.spaces,\n });\n\n context.hasLocals = true;\n }\n\n break;\n }\n }\n\n context.lastWasSpacing = false;\n context.ignoreNextSpacing = false;\n context.enforceNoSpacing = false;\n\n return node;\n };\n\n const rootContext = {\n global: mode === \"global\",\n hasPureGlobals: false,\n };\n\n rootContext.selector = selectorParser((root) => {\n transform(root, rootContext);\n }).processSync(rule, { updateSelector: false, lossless: true });\n\n return rootContext;\n}\n\nfunction localizeDeclNode(node, context) {\n switch (node.type) {\n case \"word\":\n if (context.localizeNextItem) {\n if (!context.localAliasMap.has(node.value)) {\n node.value = \":local(\" + node.value + \")\";\n context.localizeNextItem = false;\n }\n }\n break;\n\n case \"function\":\n if (\n context.options &&\n context.options.rewriteUrl &&\n node.value.toLowerCase() === \"url\"\n ) {\n node.nodes.map((nestedNode) => {\n if (nestedNode.type !== \"string\" && nestedNode.type !== \"word\") {\n return;\n }\n\n let newUrl = context.options.rewriteUrl(\n context.global,\n nestedNode.value\n );\n\n switch (nestedNode.type) {\n case \"string\":\n if (nestedNode.quote === \"'\") {\n newUrl = newUrl.replace(/(\\\\)/g, \"\\\\$1\").replace(/'/g, \"\\\\'\");\n }\n\n if (nestedNode.quote === '\"') {\n newUrl = newUrl.replace(/(\\\\)/g, \"\\\\$1\").replace(/\"/g, '\\\\\"');\n }\n\n break;\n case \"word\":\n newUrl = newUrl.replace(/(\"|'|\\)|\\\\)/g, \"\\\\$1\");\n break;\n }\n\n nestedNode.value = newUrl;\n });\n }\n break;\n }\n return node;\n}\n\nfunction isWordAFunctionArgument(wordNode, functionNode) {\n return functionNode\n ? functionNode.nodes.some(\n (functionNodeChild) =>\n functionNodeChild.sourceIndex === wordNode.sourceIndex\n )\n : false;\n}\n\nfunction localizeDeclarationValues(localize, declaration, context) {\n const valueNodes = valueParser(declaration.value);\n\n valueNodes.walk((node, index, nodes) => {\n const subContext = {\n options: context.options,\n global: context.global,\n localizeNextItem: localize && !context.global,\n localAliasMap: context.localAliasMap,\n };\n nodes[index] = localizeDeclNode(node, subContext);\n });\n\n declaration.value = valueNodes.toString();\n}\n\nfunction localizeDeclaration(declaration, context) {\n const isAnimation = /animation$/i.test(declaration.prop);\n\n if (isAnimation) {\n const validIdent = /^-?[_a-z][_a-z0-9-]*$/i;\n\n /*\n The spec defines some keywords that you can use to describe properties such as the timing\n function. These are still valid animation names, so as long as there is a property that accepts\n a keyword, it is given priority. Only when all the properties that can take a keyword are\n exhausted can the animation name be set to the keyword. I.e.\n \n animation: infinite infinite;\n \n The animation will repeat an infinite number of times from the first argument, and will have an\n animation name of infinite from the second.\n */\n const animationKeywords = {\n $alternate: 1,\n \"$alternate-reverse\": 1,\n $backwards: 1,\n $both: 1,\n $ease: 1,\n \"$ease-in\": 1,\n \"$ease-in-out\": 1,\n \"$ease-out\": 1,\n $forwards: 1,\n $infinite: 1,\n $linear: 1,\n $none: Infinity, // No matter how many times you write none, it will never be an animation name\n $normal: 1,\n $paused: 1,\n $reverse: 1,\n $running: 1,\n \"$step-end\": 1,\n \"$step-start\": 1,\n $initial: Infinity,\n $inherit: Infinity,\n $unset: Infinity,\n };\n\n const didParseAnimationName = false;\n let parsedAnimationKeywords = {};\n let stepsFunctionNode = null;\n const valueNodes = valueParser(declaration.value).walk((node) => {\n /* If div-token appeared (represents as comma ','), a possibility of an animation-keywords should be reflesh. */\n if (node.type === \"div\") {\n parsedAnimationKeywords = {};\n }\n if (node.type === \"function\" && node.value.toLowerCase() === \"steps\") {\n stepsFunctionNode = node;\n }\n const value =\n node.type === \"word\" &&\n !isWordAFunctionArgument(node, stepsFunctionNode)\n ? node.value.toLowerCase()\n : null;\n\n let shouldParseAnimationName = false;\n\n if (!didParseAnimationName && value && validIdent.test(value)) {\n if (\"$\" + value in animationKeywords) {\n parsedAnimationKeywords[\"$\" + value] =\n \"$\" + value in parsedAnimationKeywords\n ? parsedAnimationKeywords[\"$\" + value] + 1\n : 0;\n\n shouldParseAnimationName =\n parsedAnimationKeywords[\"$\" + value] >=\n animationKeywords[\"$\" + value];\n } else {\n shouldParseAnimationName = true;\n }\n }\n\n const subContext = {\n options: context.options,\n global: context.global,\n localizeNextItem: shouldParseAnimationName && !context.global,\n localAliasMap: context.localAliasMap,\n };\n return localizeDeclNode(node, subContext);\n });\n\n declaration.value = valueNodes.toString();\n\n return;\n }\n\n const isAnimationName = /animation(-name)?$/i.test(declaration.prop);\n\n if (isAnimationName) {\n return localizeDeclarationValues(true, declaration, context);\n }\n\n const hasUrl = /url\\(/i.test(declaration.value);\n\n if (hasUrl) {\n return localizeDeclarationValues(false, declaration, context);\n }\n}\n\nmodule.exports = (options = {}) => {\n if (\n options &&\n options.mode &&\n options.mode !== \"global\" &&\n options.mode !== \"local\" &&\n options.mode !== \"pure\"\n ) {\n throw new Error(\n 'options.mode must be either \"global\", \"local\" or \"pure\" (default \"local\")'\n );\n }\n\n const pureMode = options && options.mode === \"pure\";\n const globalMode = options && options.mode === \"global\";\n\n return {\n postcssPlugin: \"postcss-modules-local-by-default\",\n prepare() {\n const localAliasMap = new Map();\n\n return {\n Once(root) {\n const { icssImports } = extractICSS(root, false);\n\n Object.keys(icssImports).forEach((key) => {\n Object.keys(icssImports[key]).forEach((prop) => {\n localAliasMap.set(prop, icssImports[key][prop]);\n });\n });\n\n root.walkAtRules((atRule) => {\n if (/keyframes$/i.test(atRule.name)) {\n const globalMatch = /^\\s*:global\\s*\\((.+)\\)\\s*$/.exec(\n atRule.params\n );\n const localMatch = /^\\s*:local\\s*\\((.+)\\)\\s*$/.exec(\n atRule.params\n );\n\n let globalKeyframes = globalMode;\n\n if (globalMatch) {\n if (pureMode) {\n throw atRule.error(\n \"@keyframes :global(...) is not allowed in pure mode\"\n );\n }\n atRule.params = globalMatch[1];\n globalKeyframes = true;\n } else if (localMatch) {\n atRule.params = localMatch[0];\n globalKeyframes = false;\n } else if (!globalMode) {\n if (atRule.params && !localAliasMap.has(atRule.params)) {\n atRule.params = \":local(\" + atRule.params + \")\";\n }\n }\n\n atRule.walkDecls((declaration) => {\n localizeDeclaration(declaration, {\n localAliasMap,\n options: options,\n global: globalKeyframes,\n });\n });\n } else if (atRule.nodes) {\n atRule.nodes.forEach((declaration) => {\n if (declaration.type === \"decl\") {\n localizeDeclaration(declaration, {\n localAliasMap,\n options: options,\n global: globalMode,\n });\n }\n });\n }\n });\n\n root.walkRules((rule) => {\n if (\n rule.parent &&\n rule.parent.type === \"atrule\" &&\n /keyframes$/i.test(rule.parent.name)\n ) {\n // ignore keyframe rules\n return;\n }\n\n const context = localizeNode(rule, options.mode, localAliasMap);\n\n context.options = options;\n context.localAliasMap = localAliasMap;\n\n if (pureMode && context.hasPureGlobals) {\n throw rule.error(\n 'Selector \"' +\n rule.selector +\n '\" is not pure ' +\n \"(pure selectors must contain at least one local class or id)\"\n );\n }\n\n rule.selector = context.selector;\n\n // Less-syntax mixins parse as rules with no nodes\n if (rule.nodes) {\n rule.nodes.forEach((declaration) =>\n localizeDeclaration(declaration, context)\n );\n }\n });\n },\n };\n },\n };\n};\nmodule.exports.postcss = true;\n","const PERMANENT_MARKER = 2;\nconst TEMPORARY_MARKER = 1;\n\nfunction createError(node, graph) {\n const er = new Error(\"Nondeterministic import's order\");\n\n const related = graph[node];\n const relatedNode = related.find(\n (relatedNode) => graph[relatedNode].indexOf(node) > -1\n );\n\n er.nodes = [node, relatedNode];\n\n return er;\n}\n\nfunction walkGraph(node, graph, state, result, strict) {\n if (state[node] === PERMANENT_MARKER) {\n return;\n }\n\n if (state[node] === TEMPORARY_MARKER) {\n if (strict) {\n return createError(node, graph);\n }\n\n return;\n }\n\n state[node] = TEMPORARY_MARKER;\n\n const children = graph[node];\n const length = children.length;\n\n for (let i = 0; i < length; ++i) {\n const error = walkGraph(children[i], graph, state, result, strict);\n\n if (error instanceof Error) {\n return error;\n }\n }\n\n state[node] = PERMANENT_MARKER;\n\n result.push(node);\n}\n\nfunction topologicalSort(graph, strict) {\n const result = [];\n const state = {};\n\n const nodes = Object.keys(graph);\n const length = nodes.length;\n\n for (let i = 0; i < length; ++i) {\n const er = walkGraph(nodes[i], graph, state, result, strict);\n\n if (er instanceof Error) {\n return er;\n }\n }\n\n return result;\n}\n\nmodule.exports = topologicalSort;\n","const topologicalSort = require(\"./topologicalSort\");\n\nconst matchImports = /^(.+?)\\s+from\\s+(?:\"([^\"]+)\"|'([^']+)'|(global))$/;\nconst icssImport = /^:import\\((?:\"([^\"]+)\"|'([^']+)')\\)/;\n\nconst VISITED_MARKER = 1;\n\n/**\n * :import('G') {}\n *\n * Rule\n * composes: ... from 'A'\n * composes: ... from 'B'\n\n * Rule\n * composes: ... from 'A'\n * composes: ... from 'A'\n * composes: ... from 'C'\n *\n * Results in:\n *\n * graph: {\n * G: [],\n * A: [],\n * B: ['A'],\n * C: ['A'],\n * }\n */\nfunction addImportToGraph(importId, parentId, graph, visited) {\n const siblingsId = parentId + \"_\" + \"siblings\";\n const visitedId = parentId + \"_\" + importId;\n\n if (visited[visitedId] !== VISITED_MARKER) {\n if (!Array.isArray(visited[siblingsId])) {\n visited[siblingsId] = [];\n }\n\n const siblings = visited[siblingsId];\n\n if (Array.isArray(graph[importId])) {\n graph[importId] = graph[importId].concat(siblings);\n } else {\n graph[importId] = siblings.slice();\n }\n\n visited[visitedId] = VISITED_MARKER;\n\n siblings.push(importId);\n }\n}\n\nmodule.exports = (options = {}) => {\n let importIndex = 0;\n const createImportedName =\n typeof options.createImportedName !== \"function\"\n ? (importName /*, path*/) =>\n `i__imported_${importName.replace(/\\W/g, \"_\")}_${importIndex++}`\n : options.createImportedName;\n const failOnWrongOrder = options.failOnWrongOrder;\n\n return {\n postcssPlugin: \"postcss-modules-extract-imports\",\n prepare() {\n const graph = {};\n const visited = {};\n const existingImports = {};\n const importDecls = {};\n const imports = {};\n\n return {\n Once(root, postcss) {\n // Check the existing imports order and save refs\n root.walkRules((rule) => {\n const matches = icssImport.exec(rule.selector);\n\n if (matches) {\n const [, /*match*/ doubleQuotePath, singleQuotePath] = matches;\n const importPath = doubleQuotePath || singleQuotePath;\n\n addImportToGraph(importPath, \"root\", graph, visited);\n\n existingImports[importPath] = rule;\n }\n });\n\n root.walkDecls(/^composes$/, (declaration) => {\n const matches = declaration.value.match(matchImports);\n\n if (!matches) {\n return;\n }\n\n let tmpSymbols;\n let [\n ,\n /*match*/ symbols,\n doubleQuotePath,\n singleQuotePath,\n global,\n ] = matches;\n\n if (global) {\n // Composing globals simply means changing these classes to wrap them in global(name)\n tmpSymbols = symbols.split(/\\s+/).map((s) => `global(${s})`);\n } else {\n const importPath = doubleQuotePath || singleQuotePath;\n\n let parent = declaration.parent;\n let parentIndexes = \"\";\n\n while (parent.type !== \"root\") {\n parentIndexes =\n parent.parent.index(parent) + \"_\" + parentIndexes;\n parent = parent.parent;\n }\n\n const { selector } = declaration.parent;\n const parentRule = `_${parentIndexes}${selector}`;\n\n addImportToGraph(importPath, parentRule, graph, visited);\n\n importDecls[importPath] = declaration;\n imports[importPath] = imports[importPath] || {};\n\n tmpSymbols = symbols.split(/\\s+/).map((s) => {\n if (!imports[importPath][s]) {\n imports[importPath][s] = createImportedName(s, importPath);\n }\n\n return imports[importPath][s];\n });\n }\n\n declaration.value = tmpSymbols.join(\" \");\n });\n\n const importsOrder = topologicalSort(graph, failOnWrongOrder);\n\n if (importsOrder instanceof Error) {\n const importPath = importsOrder.nodes.find((importPath) =>\n // eslint-disable-next-line no-prototype-builtins\n importDecls.hasOwnProperty(importPath)\n );\n const decl = importDecls[importPath];\n\n throw decl.error(\n \"Failed to resolve order of composed modules \" +\n importsOrder.nodes\n .map((importPath) => \"`\" + importPath + \"`\")\n .join(\", \") +\n \".\",\n {\n plugin: \"postcss-modules-extract-imports\",\n word: \"composes\",\n }\n );\n }\n\n let lastImportRule;\n\n importsOrder.forEach((path) => {\n const importedSymbols = imports[path];\n let rule = existingImports[path];\n\n if (!rule && importedSymbols) {\n rule = postcss.rule({\n selector: `:import(\"${path}\")`,\n raws: { after: \"\\n\" },\n });\n\n if (lastImportRule) {\n root.insertAfter(lastImportRule, rule);\n } else {\n root.prepend(rule);\n }\n }\n\n lastImportRule = rule;\n\n if (!importedSymbols) {\n return;\n }\n\n Object.keys(importedSymbols).forEach((importedSymbol) => {\n rule.append(\n postcss.decl({\n value: importedSymbol,\n prop: importedSymbols[importedSymbol],\n raws: { before: \"\\n \" },\n })\n );\n });\n });\n },\n };\n },\n };\n};\n\nmodule.exports.postcss = true;\n","\"use strict\";\n\nconst selectorParser = require(\"postcss-selector-parser\");\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction getSingleLocalNamesForComposes(root) {\n return root.nodes.map((node) => {\n if (node.type !== \"selector\" || node.nodes.length !== 1) {\n throw new Error(\n `composition is only allowed when selector is single :local class name not in \"${root}\"`\n );\n }\n\n node = node.nodes[0];\n\n if (\n node.type !== \"pseudo\" ||\n node.value !== \":local\" ||\n node.nodes.length !== 1\n ) {\n throw new Error(\n 'composition is only allowed when selector is single :local class name not in \"' +\n root +\n '\", \"' +\n node +\n '\" is weird'\n );\n }\n\n node = node.first;\n\n if (node.type !== \"selector\" || node.length !== 1) {\n throw new Error(\n 'composition is only allowed when selector is single :local class name not in \"' +\n root +\n '\", \"' +\n node +\n '\" is weird'\n );\n }\n\n node = node.first;\n\n if (node.type !== \"class\") {\n // 'id' is not possible, because you can't compose ids\n throw new Error(\n 'composition is only allowed when selector is single :local class name not in \"' +\n root +\n '\", \"' +\n node +\n '\" is weird'\n );\n }\n\n return node.value;\n });\n}\n\nconst whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\nconst unescapeRegExp = new RegExp(\n \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\",\n \"ig\"\n);\n\nfunction unescape(str) {\n return str.replace(unescapeRegExp, (_, escaped, escapedWhitespace) => {\n const high = \"0x\" + escaped - 0x10000;\n\n // NaN means non-codepoint\n // Workaround erroneous numeric interpretation of +\"0x\"\n return high !== high || escapedWhitespace\n ? escaped\n : high < 0\n ? // BMP codepoint\n String.fromCharCode(high + 0x10000)\n : // Supplemental Plane codepoint (surrogate pair)\n String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00);\n });\n}\n\nconst plugin = (options = {}) => {\n const generateScopedName =\n (options && options.generateScopedName) || plugin.generateScopedName;\n const generateExportEntry =\n (options && options.generateExportEntry) || plugin.generateExportEntry;\n const exportGlobals = options && options.exportGlobals;\n\n return {\n postcssPlugin: \"postcss-modules-scope\",\n Once(root, { rule }) {\n const exports = Object.create(null);\n\n function exportScopedName(name, rawName) {\n const scopedName = generateScopedName(\n rawName ? rawName : name,\n root.source.input.from,\n root.source.input.css\n );\n const exportEntry = generateExportEntry(\n rawName ? rawName : name,\n scopedName,\n root.source.input.from,\n root.source.input.css\n );\n const { key, value } = exportEntry;\n\n exports[key] = exports[key] || [];\n\n if (exports[key].indexOf(value) < 0) {\n exports[key].push(value);\n }\n\n return scopedName;\n }\n\n function localizeNode(node) {\n switch (node.type) {\n case \"selector\":\n node.nodes = node.map(localizeNode);\n return node;\n case \"class\":\n return selectorParser.className({\n value: exportScopedName(\n node.value,\n node.raws && node.raws.value ? node.raws.value : null\n ),\n });\n case \"id\": {\n return selectorParser.id({\n value: exportScopedName(\n node.value,\n node.raws && node.raws.value ? node.raws.value : null\n ),\n });\n }\n }\n\n throw new Error(\n `${node.type} (\"${node}\") is not allowed in a :local block`\n );\n }\n\n function traverseNode(node) {\n switch (node.type) {\n case \"pseudo\":\n if (node.value === \":local\") {\n if (node.nodes.length !== 1) {\n throw new Error('Unexpected comma (\",\") in :local block');\n }\n\n const selector = localizeNode(node.first, node.spaces);\n // move the spaces that were around the psuedo selector to the first\n // non-container node\n selector.first.spaces = node.spaces;\n\n const nextNode = node.next();\n\n if (\n nextNode &&\n nextNode.type === \"combinator\" &&\n nextNode.value === \" \" &&\n /\\\\[A-F0-9]{1,6}$/.test(selector.last.value)\n ) {\n selector.last.spaces.after = \" \";\n }\n\n node.replaceWith(selector);\n\n return;\n }\n /* falls through */\n case \"root\":\n case \"selector\": {\n node.each(traverseNode);\n break;\n }\n case \"id\":\n case \"class\":\n if (exportGlobals) {\n exports[node.value] = [node.value];\n }\n break;\n }\n return node;\n }\n\n // Find any :import and remember imported names\n const importedNames = {};\n\n root.walkRules(/^:import\\(.+\\)$/, (rule) => {\n rule.walkDecls((decl) => {\n importedNames[decl.prop] = true;\n });\n });\n\n // Find any :local selectors\n root.walkRules((rule) => {\n let parsedSelector = selectorParser().astSync(rule);\n\n rule.selector = traverseNode(parsedSelector.clone()).toString();\n\n rule.walkDecls(/composes|compose-with/i, (decl) => {\n const localNames = getSingleLocalNamesForComposes(parsedSelector);\n const classes = decl.value.split(/\\s+/);\n\n classes.forEach((className) => {\n const global = /^global\\(([^)]+)\\)$/.exec(className);\n\n if (global) {\n localNames.forEach((exportedName) => {\n exports[exportedName].push(global[1]);\n });\n } else if (hasOwnProperty.call(importedNames, className)) {\n localNames.forEach((exportedName) => {\n exports[exportedName].push(className);\n });\n } else if (hasOwnProperty.call(exports, className)) {\n localNames.forEach((exportedName) => {\n exports[className].forEach((item) => {\n exports[exportedName].push(item);\n });\n });\n } else {\n throw decl.error(\n `referenced class name \"${className}\" in ${decl.prop} not found`\n );\n }\n });\n\n decl.remove();\n });\n\n // Find any :local values\n rule.walkDecls((decl) => {\n if (!/:local\\s*\\((.+?)\\)/.test(decl.value)) {\n return;\n }\n\n let tokens = decl.value.split(/(,|'[^']*'|\"[^\"]*\")/);\n\n tokens = tokens.map((token, idx) => {\n if (idx === 0 || tokens[idx - 1] === \",\") {\n let result = token;\n\n const localMatch = /:local\\s*\\((.+?)\\)/.exec(token);\n\n if (localMatch) {\n const input = localMatch.input;\n const matchPattern = localMatch[0];\n const matchVal = localMatch[1];\n const newVal = exportScopedName(matchVal);\n\n result = input.replace(matchPattern, newVal);\n } else {\n return token;\n }\n\n return result;\n } else {\n return token;\n }\n });\n\n decl.value = tokens.join(\"\");\n });\n });\n\n // Find any :local keyframes\n root.walkAtRules(/keyframes$/i, (atRule) => {\n const localMatch = /^\\s*:local\\s*\\((.+?)\\)\\s*$/.exec(atRule.params);\n\n if (!localMatch) {\n return;\n }\n\n atRule.params = exportScopedName(localMatch[1]);\n });\n\n // If we found any :locals, insert an :export rule\n const exportedNames = Object.keys(exports);\n\n if (exportedNames.length > 0) {\n const exportRule = rule({ selector: \":export\" });\n\n exportedNames.forEach((exportedName) =>\n exportRule.append({\n prop: exportedName,\n value: exports[exportedName].join(\" \"),\n raws: { before: \"\\n \" },\n })\n );\n\n root.append(exportRule);\n }\n },\n };\n};\n\nplugin.postcss = true;\n\nplugin.generateScopedName = function (name, path) {\n const sanitisedPath = path\n .replace(/\\.[^./\\\\]+$/, \"\")\n .replace(/[\\W_]+/g, \"_\")\n .replace(/^_|_$/g, \"\");\n\n return `_${sanitisedPath}__${name}`.trim();\n};\n\nplugin.generateExportEntry = function (name, scopedName) {\n return {\n key: unescape(name),\n value: unescape(scopedName),\n };\n};\n\nmodule.exports = plugin;\n","\"use strict\";\n\nconst ICSSUtils = require(\"icss-utils\");\n\nconst matchImports = /^(.+?|\\([\\s\\S]+?\\))\\s+from\\s+(\"[^\"]*\"|'[^']*'|[\\w-]+)$/;\nconst matchValueDefinition = /(?:\\s+|^)([\\w-]+):?(.*?)$/;\nconst matchImport = /^([\\w-]+)(?:\\s+as\\s+([\\w-]+))?/;\n\nmodule.exports = (options) => {\n let importIndex = 0;\n const createImportedName =\n (options && options.createImportedName) ||\n ((importName /*, path*/) =>\n `i__const_${importName.replace(/\\W/g, \"_\")}_${importIndex++}`);\n\n return {\n postcssPlugin: \"postcss-modules-values\",\n prepare(result) {\n const importAliases = [];\n const definitions = {};\n\n return {\n Once(root, postcss) {\n root.walkAtRules(/value/i, (atRule) => {\n const matches = atRule.params.match(matchImports);\n\n if (matches) {\n let [, /*match*/ aliases, path] = matches;\n\n // We can use constants for path names\n if (definitions[path]) {\n path = definitions[path];\n }\n\n const imports = aliases\n .replace(/^\\(\\s*([\\s\\S]+)\\s*\\)$/, \"$1\")\n .split(/\\s*,\\s*/)\n .map((alias) => {\n const tokens = matchImport.exec(alias);\n\n if (tokens) {\n const [, /*match*/ theirName, myName = theirName] = tokens;\n const importedName = createImportedName(myName);\n definitions[myName] = importedName;\n return { theirName, importedName };\n } else {\n throw new Error(`@import statement \"${alias}\" is invalid!`);\n }\n });\n\n importAliases.push({ path, imports });\n\n atRule.remove();\n\n return;\n }\n\n if (atRule.params.indexOf(\"@value\") !== -1) {\n result.warn(\"Invalid value definition: \" + atRule.params);\n }\n\n let [, key, value] = `${atRule.params}${atRule.raws.between}`.match(\n matchValueDefinition\n );\n\n const normalizedValue = value.replace(/\\/\\*((?!\\*\\/).*?)\\*\\//g, \"\");\n\n if (normalizedValue.length === 0) {\n result.warn(\"Invalid value definition: \" + atRule.params);\n atRule.remove();\n\n return;\n }\n\n let isOnlySpace = /^\\s+$/.test(normalizedValue);\n\n if (!isOnlySpace) {\n value = value.trim();\n }\n\n // Add to the definitions, knowing that values can refer to each other\n definitions[key] = ICSSUtils.replaceValueSymbols(\n value,\n definitions\n );\n\n atRule.remove();\n });\n\n /* If we have no definitions, don't continue */\n if (!Object.keys(definitions).length) {\n return;\n }\n\n /* Perform replacements */\n ICSSUtils.replaceSymbols(root, definitions);\n\n /* We want to export anything defined by now, but don't add it to the CSS yet or it well get picked up by the replacement stuff */\n const exportDeclarations = Object.keys(definitions).map((key) =>\n postcss.decl({\n value: definitions[key],\n prop: key,\n raws: { before: \"\\n \" },\n })\n );\n\n /* Add export rules if any */\n if (exportDeclarations.length > 0) {\n const exportRule = postcss.rule({\n selector: \":export\",\n raws: { after: \"\\n\" },\n });\n\n exportRule.append(exportDeclarations);\n\n root.prepend(exportRule);\n }\n\n /* Add import rules */\n importAliases.reverse().forEach(({ path, imports }) => {\n const importRule = postcss.rule({\n selector: `:import(${path})`,\n raws: { after: \"\\n\" },\n });\n\n imports.forEach(({ theirName, importedName }) => {\n importRule.append({\n value: theirName,\n prop: importedName,\n raws: { before: \"\\n \" },\n });\n });\n\n root.prepend(importRule);\n });\n },\n };\n },\n };\n};\n\nmodule.exports.postcss = true;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.behaviours = undefined;\nexports.getDefaultPlugins = getDefaultPlugins;\nexports.isValidBehaviour = isValidBehaviour;\n\nvar _postcssModulesLocalByDefault = require(\"postcss-modules-local-by-default\");\n\nvar _postcssModulesLocalByDefault2 = _interopRequireDefault(_postcssModulesLocalByDefault);\n\nvar _postcssModulesExtractImports = require(\"postcss-modules-extract-imports\");\n\nvar _postcssModulesExtractImports2 = _interopRequireDefault(_postcssModulesExtractImports);\n\nvar _postcssModulesScope = require(\"postcss-modules-scope\");\n\nvar _postcssModulesScope2 = _interopRequireDefault(_postcssModulesScope);\n\nvar _postcssModulesValues = require(\"postcss-modules-values\");\n\nvar _postcssModulesValues2 = _interopRequireDefault(_postcssModulesValues);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst behaviours = exports.behaviours = {\n LOCAL: \"local\",\n GLOBAL: \"global\"\n};\n\nfunction getDefaultPlugins({\n behaviour,\n generateScopedName,\n exportGlobals\n}) {\n const scope = (0, _postcssModulesScope2.default)({ generateScopedName, exportGlobals });\n\n const plugins = {\n [behaviours.LOCAL]: [_postcssModulesValues2.default, _postcssModulesLocalByDefault2.default, _postcssModulesExtractImports2.default, scope],\n [behaviours.GLOBAL]: [_postcssModulesValues2.default, _postcssModulesExtractImports2.default, scope]\n };\n\n return plugins[behaviour];\n}\n\nfunction isValidBehaviour(behaviour) {\n return Object.keys(behaviours).map(key => behaviours[key]).indexOf(behaviour) > -1;\n}","\"use strict\";\n\nvar _postcss = require(\"postcss\");\n\nvar _postcss2 = _interopRequireDefault(_postcss);\n\nvar _lodash = require(\"lodash.camelcase\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _genericNames = require(\"generic-names\");\n\nvar _genericNames2 = _interopRequireDefault(_genericNames);\n\nvar _unquote = require(\"./unquote\");\n\nvar _unquote2 = _interopRequireDefault(_unquote);\n\nvar _parser = require(\"./css-loader-core/parser\");\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _loader = require(\"./css-loader-core/loader\");\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _generateScopedName = require(\"./generateScopedName\");\n\nvar _generateScopedName2 = _interopRequireDefault(_generateScopedName);\n\nvar _saveJSON = require(\"./saveJSON\");\n\nvar _saveJSON2 = _interopRequireDefault(_saveJSON);\n\nvar _behaviours = require(\"./behaviours\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step(\"next\", value); }, function (err) { step(\"throw\", err); }); } } return step(\"next\"); }); }; }\n\nconst PLUGIN_NAME = \"postcss-modules\";\n\nfunction getDefaultScopeBehaviour(opts) {\n if (opts.scopeBehaviour && (0, _behaviours.isValidBehaviour)(opts.scopeBehaviour)) {\n return opts.scopeBehaviour;\n }\n\n return _behaviours.behaviours.LOCAL;\n}\n\nfunction getScopedNameGenerator(opts) {\n const scopedNameGenerator = opts.generateScopedName || _generateScopedName2.default;\n\n if (typeof scopedNameGenerator === \"function\") return scopedNameGenerator;\n return (0, _genericNames2.default)(scopedNameGenerator, {\n context: process.cwd(),\n hashPrefix: opts.hashPrefix\n });\n}\n\nfunction getLoader(opts, plugins) {\n const root = typeof opts.root === \"undefined\" ? \"/\" : opts.root;\n return typeof opts.Loader === \"function\" ? new opts.Loader(root, plugins) : new _loader2.default(root, plugins);\n}\n\nfunction isGlobalModule(globalModules, inputFile) {\n return globalModules.some(regex => inputFile.match(regex));\n}\n\nfunction getDefaultPluginsList(opts, inputFile) {\n const globalModulesList = opts.globalModulePaths || null;\n const exportGlobals = opts.exportGlobals || false;\n const defaultBehaviour = getDefaultScopeBehaviour(opts);\n const generateScopedName = getScopedNameGenerator(opts);\n\n if (globalModulesList && isGlobalModule(globalModulesList, inputFile)) {\n return (0, _behaviours.getDefaultPlugins)({\n behaviour: _behaviours.behaviours.GLOBAL,\n generateScopedName,\n exportGlobals\n });\n }\n\n return (0, _behaviours.getDefaultPlugins)({\n behaviour: defaultBehaviour,\n generateScopedName,\n exportGlobals\n });\n}\n\nfunction isOurPlugin(plugin) {\n return plugin.postcssPlugin === PLUGIN_NAME;\n}\n\nfunction dashesCamelCase(string) {\n return string.replace(/-+(\\w)/g, (_, firstLetter) => firstLetter.toUpperCase());\n}\n\nmodule.exports = (opts = {}) => {\n return {\n postcssPlugin: PLUGIN_NAME,\n OnceExit(css, { result }) {\n return _asyncToGenerator(function* () {\n const getJSON = opts.getJSON || _saveJSON2.default;\n const inputFile = css.source.input.file;\n const pluginList = getDefaultPluginsList(opts, inputFile);\n const resultPluginIndex = result.processor.plugins.findIndex(function (plugin) {\n return isOurPlugin(plugin);\n });\n if (resultPluginIndex === -1) {\n throw new Error('Plugin missing from options.');\n }\n const earlierPlugins = result.processor.plugins.slice(0, resultPluginIndex);\n const loaderPlugins = [...earlierPlugins, ...pluginList];\n const loader = getLoader(opts, loaderPlugins);\n const fetcher = function fetcher(file, relativeTo, depTrace) {\n const unquoteFile = (0, _unquote2.default)(file);\n const resolvedResult = typeof opts.resolve === 'function' && opts.resolve(unquoteFile);\n const resolvedFile = resolvedResult instanceof Promise ? resolvedResult : Promise.resolve(resolvedResult);\n\n return resolvedFile.then(function (f) {\n return loader.fetch.call(loader, `\"${f || unquoteFile}\"`, relativeTo, depTrace);\n });\n };\n const parser = new _parser2.default(fetcher);\n\n yield (0, _postcss2.default)([...pluginList, parser.plugin()]).process(css, {\n from: inputFile\n });\n\n const out = loader.finalSource;\n if (out) css.prepend(out);\n\n if (opts.localsConvention) {\n const isFunc = typeof opts.localsConvention === \"function\";\n\n parser.exportTokens = Object.entries(parser.exportTokens).reduce(function (tokens, [className, value]) {\n if (isFunc) {\n tokens[opts.localsConvention(className, value, inputFile)] = value;\n\n return tokens;\n }\n\n switch (opts.localsConvention) {\n case \"camelCase\":\n tokens[className] = value;\n tokens[(0, _lodash2.default)(className)] = value;\n\n break;\n case \"camelCaseOnly\":\n tokens[(0, _lodash2.default)(className)] = value;\n\n break;\n case \"dashes\":\n tokens[className] = value;\n tokens[dashesCamelCase(className)] = value;\n\n break;\n case \"dashesOnly\":\n tokens[dashesCamelCase(className)] = value;\n\n break;\n }\n\n return tokens;\n }, {});\n }\n\n result.messages.push({\n type: \"export\",\n plugin: \"postcss-modules\",\n exportTokens: parser.exportTokens\n });\n\n // getJSON may return a promise\n return getJSON(css.source.input.file, parser.exportTokens, result.opts.to);\n })();\n }\n };\n};\n\nmodule.exports.postcss = true;"],"names":["global","root","Symbol","unicode","util","require$$0","require$$1","parseQuery","getOptions","path","stringifyRequest","getRemainingRequest","getCurrentRequest","isUrlRequest","urlToRequest","parseString","this","getHashDigest","emojisList","require$$2","interpolateName","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","unquote_1","parser","_interopRequireDefault","_postcss","_postcss2","_fs","_parser","_parser2","generateScopedName_1","saveJSON_1","types","hasOwnProperty","comment","combinator","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","selectors","replaceValueSymbols","replaceSymbols","extractICSS","createICSSRules","src","selectorParser","srcModule","topologicalSort","matchImports","behaviours_1","buildModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA;AACA,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB;AACA;AACA,IAAI,SAAS,GAAG,iBAAiB,CAAC;AAClC;AACA;AACA,IAAI,WAAW,GAAG,2CAA2C,CAAC;AAC9D;AACA;AACA,IAAI,OAAO,GAAG,6CAA6C,CAAC;AAC5D;AACA;AACA,IAAI,aAAa,GAAG,iBAAiB;AACrC,IAAI,iBAAiB,GAAG,gCAAgC;AACxD,IAAI,mBAAmB,GAAG,iBAAiB;AAC3C,IAAI,cAAc,GAAG,iBAAiB;AACtC,IAAI,YAAY,GAAG,2BAA2B;AAC9C,IAAI,aAAa,GAAG,sBAAsB;AAC1C,IAAI,cAAc,GAAG,8CAA8C;AACnE,IAAI,kBAAkB,GAAG,iBAAiB;AAC1C,IAAI,YAAY,GAAG,8JAA8J;AACjL,IAAI,YAAY,GAAG,2BAA2B;AAC9C,IAAI,UAAU,GAAG,gBAAgB;AACjC,IAAI,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,kBAAkB,GAAG,YAAY,CAAC;AACtF;AACA;AACA,IAAI,MAAM,GAAG,WAAW;AACxB,IAAI,QAAQ,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG;AACxC,IAAI,OAAO,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG;AACtC,IAAI,OAAO,GAAG,GAAG,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,GAAG;AACjE,IAAI,QAAQ,GAAG,MAAM;AACrB,IAAI,SAAS,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG;AAC1C,IAAI,OAAO,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG;AACtC,IAAI,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,YAAY,GAAG,GAAG;AAChH,IAAI,MAAM,GAAG,0BAA0B;AACvC,IAAI,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG;AACrD,IAAI,WAAW,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG;AAC5C,IAAI,UAAU,GAAG,iCAAiC;AAClD,IAAI,UAAU,GAAG,oCAAoC;AACrD,IAAI,OAAO,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG;AACtC,IAAI,KAAK,GAAG,SAAS,CAAC;AACtB;AACA;AACA,IAAI,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG;AACtD,IAAI,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG;AACtD,IAAI,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,wBAAwB;AAC/D,IAAI,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,wBAAwB;AAC/D,IAAI,QAAQ,GAAG,UAAU,GAAG,GAAG;AAC/B,IAAI,QAAQ,GAAG,GAAG,GAAG,UAAU,GAAG,IAAI;AACtC,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI;AAC1H,IAAI,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS;AAC3C,IAAI,OAAO,GAAG,KAAK,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK;AACjF,IAAI,QAAQ,GAAG,KAAK,GAAG,CAAC,WAAW,GAAG,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAChH;AACA;AACA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACvC;AACA;AACA,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/E;AACA;AACA,IAAI,aAAa,GAAG,MAAM,CAAC;AAC3B,EAAE,OAAO,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,eAAe,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;AACnG,EAAE,WAAW,GAAG,GAAG,GAAG,eAAe,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;AACrG,EAAE,OAAO,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,eAAe;AACrD,EAAE,OAAO,GAAG,GAAG,GAAG,eAAe;AACjC,EAAE,QAAQ;AACV,EAAE,OAAO;AACT,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAClB;AACA;AACA,IAAI,YAAY,GAAG,MAAM,CAAC,GAAG,GAAG,KAAK,GAAG,aAAa,IAAI,iBAAiB,GAAG,mBAAmB,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC;AACrH;AACA;AACA,IAAI,gBAAgB,GAAG,qEAAqE,CAAC;AAC7F;AACA;AACA,IAAI,eAAe,GAAG;AACtB;AACA,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AAC/E,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AAC/E,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG;AAC3B,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG;AAC3B,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AACrD,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AACrD,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AACrD,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AACrD,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG;AAC3B,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AAC/E,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AAC/E,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AACrD,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AACrD,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;AACxC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;AAC5B,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;AAC5B,EAAE,MAAM,EAAE,IAAI;AACd;AACA,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC9C,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC9C,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC7D,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC7D,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC7D,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC5E,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC5E,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC7D,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC7D,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC7D,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC5E,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC5E,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG;AAC/B,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC9C,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC5E,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC5E,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC7D,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC7D,EAAE,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AAC9C,EAAE,QAA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AAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,OAAO;AACT,EAAE,gBAAgB;AAClB,EAAE,gBAAgB;AAClB,EAAE,gBAAgB;AAClB,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,KAAK;AACP,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,cAAc;AAChB,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,S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E,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,UAAU;AACZ,EAAE,OAAO;AACT,EAAE,UAAU;AACZ,EAAE,UAAU;AACZ,EAAE,OAAO;AACT,EAAE,aAAa;AACf,EAAE,UAAU;AACZ,EAAE,aAAa;AACf,EAAE,aAAa;AACf,EAAE,UAAU;AACZ,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,UAAU;AACZ,EAAE,UAAU;AACZ,EAAE,aAAa;AACf,EAAE,aAAa;AACf,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,KAAK;AACP,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,cAAc;AAChB,EAAE,MAAM;AACR,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,MAAM;AACR,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,MAAM;AACR,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,MAAM;AACR,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,cAAc;AAChB,EAAE,MAAM;AACR,EAAE,UAAU;AACZ,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,MAAM;AACR,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,GAAG;AACL,EAAE,GAAG;AACL,EAAE,GAAG;AACL,EAAE,GAAG;AACL,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,GAAG;AACL,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,GAAG;AACL,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,GAAG;AACL,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,GAAG;AACL,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,IAAI;AACN,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,QAAQ;AA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"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-e39b05d6.js b/packages/astro/vendor/vite/dist/node/chunks/dep-e39b05d6.js
deleted file mode 100755
index 5895a1083..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-e39b05d6.js
+++ /dev/null
@@ -1,746 +0,0 @@
-'use strict';
-
-var path$3 = require('path');
-var resolve$2 = require('resolve');
-var fs$1 = require('fs');
-var index$1 = require('./dep-ac1b4bf9.js');
-
-function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
-
-function _mergeNamespaces(n, m) {
- for (var i = 0; i < m.length; i++) {
- var e = m[i];
- for (var k in e) {
- if (k !== 'default' && !(k in n)) {
- n[k] = e[k];
- }
- }
- }
- return n;
-}
-
-var path__default = /*#__PURE__*/_interopDefaultLegacy(path$3);
-var resolve__default = /*#__PURE__*/_interopDefaultLegacy(resolve$2);
-var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs$1);
-
-var joinMedia$1 = function (parentMedia, childMedia) {
- if (!parentMedia.length && childMedia.length) return childMedia
- if (parentMedia.length && !childMedia.length) return parentMedia
- if (!parentMedia.length && !childMedia.length) return []
-
- const media = [];
-
- parentMedia.forEach(parentItem => {
- childMedia.forEach(childItem => {
- if (parentItem !== childItem) media.push(`${parentItem} and ${childItem}`);
- });
- });
-
- return media
-};
-
-// external tooling
-const resolve$1 = resolve__default;
-
-const moduleDirectories = ["web_modules", "node_modules"];
-
-function resolveModule(id, opts) {
- return new Promise((res, rej) => {
- resolve$1(id, opts, (err, path) => (err ? rej(err) : res(path)));
- })
-}
-
-var resolveId$1 = function (id, base, options) {
- const paths = options.path;
-
- const resolveOpts = {
- basedir: base,
- moduleDirectory: moduleDirectories.concat(options.addModulesDirectories),
- paths,
- extensions: [".css"],
- packageFilter: function processPackage(pkg) {
- if (pkg.style) pkg.main = pkg.style;
- else if (!pkg.main || !/\.css$/.test(pkg.main)) pkg.main = "index.css";
- return pkg
- },
- preserveSymlinks: false,
- };
-
- return resolveModule(`./${id}`, resolveOpts)
- .catch(() => resolveModule(id, resolveOpts))
- .catch(() => {
- if (paths.indexOf(base) === -1) paths.unshift(base);
-
- throw new Error(
- `Failed to find '${id}'
- in [
- ${paths.join(",\n ")}
- ]`
- )
- })
-};
-
-var readCache$1 = {exports: {}};
-
-var pify$2 = {exports: {}};
-
-var processFn = function (fn, P, opts) {
- return function () {
- var that = this;
- var args = new Array(arguments.length);
-
- for (var i = 0; i < arguments.length; i++) {
- args[i] = arguments[i];
- }
-
- return new P(function (resolve, reject) {
- args.push(function (err, result) {
- if (err) {
- reject(err);
- } else if (opts.multiArgs) {
- var results = new Array(arguments.length - 1);
-
- for (var i = 1; i < arguments.length; i++) {
- results[i - 1] = arguments[i];
- }
-
- resolve(results);
- } else {
- resolve(result);
- }
- });
-
- fn.apply(that, args);
- });
- };
-};
-
-var pify$1 = pify$2.exports = function (obj, P, opts) {
- if (typeof P !== 'function') {
- opts = P;
- P = Promise;
- }
-
- opts = opts || {};
- opts.exclude = opts.exclude || [/.+Sync$/];
-
- var filter = function (key) {
- var match = function (pattern) {
- return typeof pattern === 'string' ? key === pattern : pattern.test(key);
- };
-
- return opts.include ? opts.include.some(match) : !opts.exclude.some(match);
- };
-
- var ret = typeof obj === 'function' ? function () {
- if (opts.excludeMain) {
- return obj.apply(this, arguments);
- }
-
- return processFn(obj, P, opts).apply(this, arguments);
- } : {};
-
- return Object.keys(obj).reduce(function (ret, key) {
- var x = obj[key];
-
- ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;
-
- return ret;
- }, ret);
-};
-
-pify$1.all = pify$1;
-
-var fs = fs__default;
-var path$2 = path__default;
-var pify = pify$2.exports;
-
-var stat = pify(fs.stat);
-var readFile = pify(fs.readFile);
-var resolve = path$2.resolve;
-
-var cache = Object.create(null);
-
-function convert(content, encoding) {
- if (Buffer.isEncoding(encoding)) {
- return content.toString(encoding);
- }
- return content;
-}
-
-readCache$1.exports = function (path, encoding) {
- path = resolve(path);
-
- return stat(path).then(function (stats) {
- var item = cache[path];
-
- if (item && item.mtime.getTime() === stats.mtime.getTime()) {
- return convert(item.content, encoding);
- }
-
- return readFile(path).then(function (data) {
- cache[path] = {
- mtime: stats.mtime,
- content: data
- };
-
- return convert(data, encoding);
- });
- }).catch(function (err) {
- cache[path] = null;
- return Promise.reject(err);
- });
-};
-
-readCache$1.exports.sync = function (path, encoding) {
- path = resolve(path);
-
- try {
- var stats = fs.statSync(path);
- var item = cache[path];
-
- if (item && item.mtime.getTime() === stats.mtime.getTime()) {
- return convert(item.content, encoding);
- }
-
- var data = fs.readFileSync(path);
-
- cache[path] = {
- mtime: stats.mtime,
- content: data
- };
-
- return convert(data, encoding);
- } catch (err) {
- cache[path] = null;
- throw err;
- }
-
-};
-
-readCache$1.exports.get = function (path, encoding) {
- path = resolve(path);
- if (cache[path]) {
- return convert(cache[path].content, encoding);
- }
- return null;
-};
-
-readCache$1.exports.clear = function () {
- cache = Object.create(null);
-};
-
-const readCache = readCache$1.exports;
-
-var loadContent$1 = filename => readCache(filename, "utf-8");
-
-// builtin tooling
-const path$1 = path__default;
-
-// placeholder tooling
-let sugarss;
-
-var processContent$1 = function processContent(
- result,
- content,
- filename,
- options,
- postcss
-) {
- const { plugins } = options;
- const ext = path$1.extname(filename);
-
- const parserList = [];
-
- // SugarSS support:
- if (ext === ".sss") {
- if (!sugarss) {
- try {
- sugarss = eval('require')('sugarss');
- } catch {} // Ignore
- }
- if (sugarss)
- return runPostcss(postcss, content, filename, plugins, [sugarss])
- }
-
- // Syntax support:
- if (result.opts.syntax && result.opts.syntax.parse) {
- parserList.push(result.opts.syntax.parse);
- }
-
- // Parser support:
- if (result.opts.parser) parserList.push(result.opts.parser);
- // Try the default as a last resort:
- parserList.push(null);
-
- return runPostcss(postcss, content, filename, plugins, parserList)
-};
-
-function runPostcss(postcss, content, filename, plugins, parsers, index) {
- if (!index) index = 0;
- return postcss(plugins)
- .process(content, {
- from: filename,
- parser: parsers[index],
- })
- .catch(err => {
- // If there's an error, try the next parser
- index++;
- // If there are no parsers left, throw it
- if (index === parsers.length) throw err
- return runPostcss(postcss, content, filename, plugins, parsers, index)
- })
-}
-
-// external tooling
-const valueParser = index$1.lib;
-
-// extended tooling
-const { stringify } = valueParser;
-
-function split(params, start) {
- const list = [];
- const last = params.reduce((item, node, index) => {
- if (index < start) return ""
- if (node.type === "div" && node.value === ",") {
- list.push(item);
- return ""
- }
- return item + stringify(node)
- }, "");
- list.push(last);
- return list
-}
-
-var parseStatements$1 = function (result, styles) {
- const statements = [];
- let nodes = [];
-
- styles.each(node => {
- let stmt;
- if (node.type === "atrule") {
- if (node.name === "import") stmt = parseImport(result, node);
- else if (node.name === "media") stmt = parseMedia(result, node);
- else if (node.name === "charset") stmt = parseCharset(result, node);
- }
-
- if (stmt) {
- if (nodes.length) {
- statements.push({
- type: "nodes",
- nodes,
- media: [],
- });
- nodes = [];
- }
- statements.push(stmt);
- } else nodes.push(node);
- });
-
- if (nodes.length) {
- statements.push({
- type: "nodes",
- nodes,
- media: [],
- });
- }
-
- return statements
-};
-
-function parseMedia(result, atRule) {
- const params = valueParser(atRule.params).nodes;
- return {
- type: "media",
- node: atRule,
- media: split(params, 0),
- }
-}
-
-function parseCharset(result, atRule) {
- if (atRule.prev()) {
- return result.warn("@charset must precede all other statements", {
- node: atRule,
- })
- }
- return {
- type: "charset",
- node: atRule,
- media: [],
- }
-}
-
-function parseImport(result, atRule) {
- let prev = atRule.prev();
- if (prev) {
- do {
- if (
- prev.type !== "comment" &&
- (prev.type !== "atrule" ||
- (prev.name !== "import" && prev.name !== "charset"))
- ) {
- return result.warn(
- "@import must precede all other statements (besides @charset)",
- { node: atRule }
- )
- }
- prev = prev.prev();
- } while (prev)
- }
-
- if (atRule.nodes) {
- return result.warn(
- "It looks like you didn't end your @import statement correctly. " +
- "Child nodes are attached to it.",
- { node: atRule }
- )
- }
-
- const params = valueParser(atRule.params).nodes;
- const stmt = {
- type: "import",
- node: atRule,
- media: [],
- };
-
- // prettier-ignore
- if (
- !params.length ||
- (
- params[0].type !== "string" ||
- !params[0].value
- ) &&
- (
- params[0].type !== "function" ||
- params[0].value !== "url" ||
- !params[0].nodes.length ||
- !params[0].nodes[0].value
- )
- ) {
- return result.warn(`Unable to find uri in '${ atRule.toString() }'`, {
- node: atRule,
- })
- }
-
- if (params[0].type === "string") stmt.uri = params[0].value;
- else stmt.uri = params[0].nodes[0].value;
- stmt.fullUri = stringify(params[0]);
-
- if (params.length > 2) {
- if (params[1].type !== "space") {
- return result.warn("Invalid import media statement", { node: atRule })
- }
- stmt.media = split(params, 2);
- }
-
- return stmt
-}
-
-// builtin tooling
-const path = path__default;
-
-// internal tooling
-const joinMedia = joinMedia$1;
-const resolveId = resolveId$1;
-const loadContent = loadContent$1;
-const processContent = processContent$1;
-const parseStatements = parseStatements$1;
-
-function AtImport(options) {
- options = {
- root: process.cwd(),
- path: [],
- skipDuplicates: true,
- resolve: resolveId,
- load: loadContent,
- plugins: [],
- addModulesDirectories: [],
- ...options,
- };
-
- options.root = path.resolve(options.root);
-
- // convert string to an array of a single element
- if (typeof options.path === "string") options.path = [options.path];
-
- if (!Array.isArray(options.path)) options.path = [];
-
- options.path = options.path.map(p => path.resolve(options.root, p));
-
- return {
- postcssPlugin: "postcss-import",
- Once(styles, { result, atRule, postcss }) {
- const state = {
- importedFiles: {},
- hashFiles: {},
- };
-
- if (styles.source && styles.source.input && styles.source.input.file) {
- state.importedFiles[styles.source.input.file] = {};
- }
-
- if (options.plugins && !Array.isArray(options.plugins)) {
- throw new Error("plugins option must be an array")
- }
-
- return parseStyles(result, styles, options, state, []).then(bundle => {
- applyRaws(bundle);
- applyMedia(bundle);
- applyStyles(bundle, styles);
- })
-
- function applyRaws(bundle) {
- bundle.forEach((stmt, index) => {
- if (index === 0) return
-
- if (stmt.parent) {
- const { before } = stmt.parent.node.raws;
- if (stmt.type === "nodes") stmt.nodes[0].raws.before = before;
- else stmt.node.raws.before = before;
- } else if (stmt.type === "nodes") {
- stmt.nodes[0].raws.before = stmt.nodes[0].raws.before || "\n";
- }
- });
- }
-
- function applyMedia(bundle) {
- bundle.forEach(stmt => {
- if (!stmt.media.length || stmt.type === "charset") return
- if (stmt.type === "import") {
- stmt.node.params = `${stmt.fullUri} ${stmt.media.join(", ")}`;
- } else if (stmt.type === "media")
- stmt.node.params = stmt.media.join(", ");
- else {
- const { nodes } = stmt;
- const { parent } = nodes[0];
- const mediaNode = atRule({
- name: "media",
- params: stmt.media.join(", "),
- source: parent.source,
- });
-
- parent.insertBefore(nodes[0], mediaNode);
-
- // remove nodes
- nodes.forEach(node => {
- node.parent = undefined;
- });
-
- // better output
- nodes[0].raws.before = nodes[0].raws.before || "\n";
-
- // wrap new rules with media query
- mediaNode.append(nodes);
-
- stmt.type = "media";
- stmt.node = mediaNode;
- delete stmt.nodes;
- }
- });
- }
-
- function applyStyles(bundle, styles) {
- styles.nodes = [];
-
- // Strip additional statements.
- bundle.forEach(stmt => {
- if (["charset", "import", "media"].includes(stmt.type)) {
- stmt.node.parent = undefined;
- styles.append(stmt.node);
- } else if (stmt.type === "nodes") {
- stmt.nodes.forEach(node => {
- node.parent = undefined;
- styles.append(node);
- });
- }
- });
- }
-
- function parseStyles(result, styles, options, state, media) {
- const statements = parseStatements(result, styles);
-
- return Promise.resolve(statements)
- .then(stmts => {
- // process each statement in series
- return stmts.reduce((promise, stmt) => {
- return promise.then(() => {
- stmt.media = joinMedia(media, stmt.media || []);
-
- // skip protocol base uri (protocol://url) or protocol-relative
- if (
- stmt.type !== "import" ||
- /^(?:[a-z]+:)?\/\//i.test(stmt.uri)
- ) {
- return
- }
-
- if (options.filter && !options.filter(stmt.uri)) {
- // rejected by filter
- return
- }
-
- return resolveImportId(result, stmt, options, state)
- })
- }, Promise.resolve())
- })
- .then(() => {
- let charset;
- const imports = [];
- const bundle = [];
-
- function handleCharset(stmt) {
- if (!charset) charset = stmt;
- // charsets aren't case-sensitive, so convert to lower case to compare
- else if (
- stmt.node.params.toLowerCase() !==
- charset.node.params.toLowerCase()
- ) {
- throw new Error(
- `Incompatable @charset statements:
- ${stmt.node.params} specified in ${stmt.node.source.input.file}
- ${charset.node.params} specified in ${charset.node.source.input.file}`
- )
- }
- }
-
- // squash statements and their children
- statements.forEach(stmt => {
- if (stmt.type === "charset") handleCharset(stmt);
- else if (stmt.type === "import") {
- if (stmt.children) {
- stmt.children.forEach((child, index) => {
- if (child.type === "import") imports.push(child);
- else if (child.type === "charset") handleCharset(child);
- else bundle.push(child);
- // For better output
- if (index === 0) child.parent = stmt;
- });
- } else imports.push(stmt);
- } else if (stmt.type === "media" || stmt.type === "nodes") {
- bundle.push(stmt);
- }
- });
-
- return charset
- ? [charset, ...imports.concat(bundle)]
- : imports.concat(bundle)
- })
- }
-
- function resolveImportId(result, stmt, options, state) {
- const atRule = stmt.node;
- let sourceFile;
- if (atRule.source && atRule.source.input && atRule.source.input.file) {
- sourceFile = atRule.source.input.file;
- }
- const base = sourceFile
- ? path.dirname(atRule.source.input.file)
- : options.root;
-
- return Promise.resolve(options.resolve(stmt.uri, base, options))
- .then(paths => {
- if (!Array.isArray(paths)) paths = [paths];
- // Ensure that each path is absolute:
- return Promise.all(
- paths.map(file => {
- return !path.isAbsolute(file)
- ? resolveId(file, base, options)
- : file
- })
- )
- })
- .then(resolved => {
- // Add dependency messages:
- resolved.forEach(file => {
- result.messages.push({
- type: "dependency",
- plugin: "postcss-import",
- file,
- parent: sourceFile,
- });
- });
-
- return Promise.all(
- resolved.map(file => {
- return loadImportContent(result, stmt, file, options, state)
- })
- )
- })
- .then(result => {
- // Merge loaded statements
- stmt.children = result.reduce((result, statements) => {
- return statements ? result.concat(statements) : result
- }, []);
- })
- }
-
- function loadImportContent(result, stmt, filename, options, state) {
- const atRule = stmt.node;
- const { media } = stmt;
- if (options.skipDuplicates) {
- // skip files already imported at the same scope
- if (
- state.importedFiles[filename] &&
- state.importedFiles[filename][media]
- ) {
- return
- }
-
- // save imported files to skip them next time
- if (!state.importedFiles[filename]) state.importedFiles[filename] = {};
- state.importedFiles[filename][media] = true;
- }
-
- return Promise.resolve(options.load(filename, options)).then(
- content => {
- if (content.trim() === "") {
- result.warn(`${filename} is empty`, { node: atRule });
- return
- }
-
- // skip previous imported files not containing @import rules
- if (state.hashFiles[content] && state.hashFiles[content][media])
- return
-
- return processContent(
- result,
- content,
- filename,
- options,
- postcss
- ).then(importedResult => {
- const styles = importedResult.root;
- result.messages = result.messages.concat(importedResult.messages);
-
- if (options.skipDuplicates) {
- const hasImport = styles.some(child => {
- return child.type === "atrule" && child.name === "import"
- });
- if (!hasImport) {
- // save hash files to skip them next time
- if (!state.hashFiles[content]) state.hashFiles[content] = {};
- state.hashFiles[content][media] = true;
- }
- }
-
- // recursion: import @import from imported file
- return parseStyles(result, styles, options, state, media)
- })
- }
- )
- }
- },
- }
-}
-
-AtImport.postcss = true;
-
-var postcssImport = AtImport;
-
-var index = /*#__PURE__*/_mergeNamespaces({
- __proto__: null,
- 'default': postcssImport
-}, [postcssImport]);
-
-exports.index = index;
-//# sourceMappingURL=dep-e39b05d6.js.map
diff --git a/packages/astro/vendor/vite/dist/node/chunks/dep-e39b05d6.js.map b/packages/astro/vendor/vite/dist/node/chunks/dep-e39b05d6.js.map
deleted file mode 100755
index 798e7f200..000000000
--- a/packages/astro/vendor/vite/dist/node/chunks/dep-e39b05d6.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"dep-e39b05d6.js","sources":["../../../../../node_modules/.pnpm/postcss-import@14.0.2_postcss@8.3.8/node_modules/postcss-import/lib/join-media.js","../../../../../node_modules/.pnpm/postcss-import@14.0.2_postcss@8.3.8/node_modules/postcss-import/lib/resolve-id.js","../../../../../node_modules/.pnpm/pify@2.3.0/node_modules/pify/index.js","../../../../../node_modules/.pnpm/read-cache@1.0.0/node_modules/read-cache/index.js","../../../../../node_modules/.pnpm/postcss-import@14.0.2_postcss@8.3.8/node_modules/postcss-import/lib/load-content.js","../../../../../node_modules/.pnpm/postcss-import@14.0.2_postcss@8.3.8/node_modules/postcss-import/lib/process-content.js","../../../../../node_modules/.pnpm/postcss-import@14.0.2_postcss@8.3.8/node_modules/postcss-import/lib/parse-statements.js","../../../../../node_modules/.pnpm/postcss-import@14.0.2_postcss@8.3.8/node_modules/postcss-import/index.js"],"sourcesContent":["\"use strict\"\n\nmodule.exports = function (parentMedia, childMedia) {\n if (!parentMedia.length && childMedia.length) return childMedia\n if (parentMedia.length && !childMedia.length) return parentMedia\n if (!parentMedia.length && !childMedia.length) return []\n\n const media = []\n\n parentMedia.forEach(parentItem => {\n childMedia.forEach(childItem => {\n if (parentItem !== childItem) media.push(`${parentItem} and ${childItem}`)\n })\n })\n\n return media\n}\n","\"use strict\"\n\n// external tooling\nconst resolve = require(\"resolve\")\n\nconst moduleDirectories = [\"web_modules\", \"node_modules\"]\n\nfunction resolveModule(id, opts) {\n return new Promise((res, rej) => {\n resolve(id, opts, (err, path) => (err ? rej(err) : res(path)))\n })\n}\n\nmodule.exports = function (id, base, options) {\n const paths = options.path\n\n const resolveOpts = {\n basedir: base,\n moduleDirectory: moduleDirectories.concat(options.addModulesDirectories),\n paths,\n extensions: [\".css\"],\n packageFilter: function processPackage(pkg) {\n if (pkg.style) pkg.main = pkg.style\n else if (!pkg.main || !/\\.css$/.test(pkg.main)) pkg.main = \"index.css\"\n return pkg\n },\n preserveSymlinks: false,\n }\n\n return resolveModule(`./${id}`, resolveOpts)\n .catch(() => resolveModule(id, resolveOpts))\n .catch(() => {\n if (paths.indexOf(base) === -1) paths.unshift(base)\n\n throw new Error(\n `Failed to find '${id}'\n in [\n ${paths.join(\",\\n \")}\n ]`\n )\n })\n}\n","'use strict';\n\nvar processFn = function (fn, P, opts) {\n\treturn function () {\n\t\tvar that = this;\n\t\tvar args = new Array(arguments.length);\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\n\t\treturn new P(function (resolve, reject) {\n\t\t\targs.push(function (err, result) {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else if (opts.multiArgs) {\n\t\t\t\t\tvar results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i - 1] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(results);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfn.apply(that, args);\n\t\t});\n\t};\n};\n\nvar pify = module.exports = function (obj, P, opts) {\n\tif (typeof P !== 'function') {\n\t\topts = P;\n\t\tP = Promise;\n\t}\n\n\topts = opts || {};\n\topts.exclude = opts.exclude || [/.+Sync$/];\n\n\tvar filter = function (key) {\n\t\tvar match = function (pattern) {\n\t\t\treturn typeof pattern === 'string' ? key === pattern : pattern.test(key);\n\t\t};\n\n\t\treturn opts.include ? opts.include.some(match) : !opts.exclude.some(match);\n\t};\n\n\tvar ret = typeof obj === 'function' ? function () {\n\t\tif (opts.excludeMain) {\n\t\t\treturn obj.apply(this, arguments);\n\t\t}\n\n\t\treturn processFn(obj, P, opts).apply(this, arguments);\n\t} : {};\n\n\treturn Object.keys(obj).reduce(function (ret, key) {\n\t\tvar x = obj[key];\n\n\t\tret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;\n\n\t\treturn ret;\n\t}, ret);\n};\n\npify.all = pify;\n","var fs = require('fs');\r\nvar path = require('path');\r\nvar pify = require('pify');\r\n\r\nvar stat = pify(fs.stat);\r\nvar readFile = pify(fs.readFile);\r\nvar resolve = path.resolve;\r\n\r\nvar cache = Object.create(null);\r\n\r\nfunction convert(content, encoding) {\r\n\tif (Buffer.isEncoding(encoding)) {\r\n\t\treturn content.toString(encoding);\r\n\t}\r\n\treturn content;\r\n}\r\n\r\nmodule.exports = function (path, encoding) {\r\n\tpath = resolve(path);\r\n\r\n\treturn stat(path).then(function (stats) {\r\n\t\tvar item = cache[path];\r\n\r\n\t\tif (item && item.mtime.getTime() === stats.mtime.getTime()) {\r\n\t\t\treturn convert(item.content, encoding);\r\n\t\t}\r\n\r\n\t\treturn readFile(path).then(function (data) {\r\n\t\t\tcache[path] = {\r\n\t\t\t\tmtime: stats.mtime,\r\n\t\t\t\tcontent: data\r\n\t\t\t};\r\n\r\n\t\t\treturn convert(data, encoding);\r\n\t\t});\r\n\t}).catch(function (err) {\r\n\t\tcache[path] = null;\r\n\t\treturn Promise.reject(err);\r\n\t});\r\n};\r\n\r\nmodule.exports.sync = function (path, encoding) {\r\n\tpath = resolve(path);\r\n\r\n\ttry {\r\n\t\tvar stats = fs.statSync(path);\r\n\t\tvar item = cache[path];\r\n\r\n\t\tif (item && item.mtime.getTime() === stats.mtime.getTime()) {\r\n\t\t\treturn convert(item.content, encoding);\r\n\t\t}\r\n\r\n\t\tvar data = fs.readFileSync(path);\r\n\r\n\t\tcache[path] = {\r\n\t\t\tmtime: stats.mtime,\r\n\t\t\tcontent: data\r\n\t\t};\r\n\r\n\t\treturn convert(data, encoding);\r\n\t} catch (err) {\r\n\t\tcache[path] = null;\r\n\t\tthrow err;\r\n\t}\r\n\r\n};\r\n\r\nmodule.exports.get = function (path, encoding) {\r\n\tpath = resolve(path);\r\n\tif (cache[path]) {\r\n\t\treturn convert(cache[path].content, encoding);\r\n\t}\r\n\treturn null;\r\n};\r\n\r\nmodule.exports.clear = function () {\r\n\tcache = Object.create(null);\r\n};\r\n","\"use strict\"\n\nconst readCache = require(\"read-cache\")\n\nmodule.exports = filename => readCache(filename, \"utf-8\")\n","\"use strict\"\n\n// builtin tooling\nconst path = require(\"path\")\n\n// placeholder tooling\nlet sugarss\n\nmodule.exports = function processContent(\n result,\n content,\n filename,\n options,\n postcss\n) {\n const { plugins } = options\n const ext = path.extname(filename)\n\n const parserList = []\n\n // SugarSS support:\n if (ext === \".sss\") {\n if (!sugarss) {\n try {\n sugarss = require(\"sugarss\")\n } catch {} // Ignore\n }\n if (sugarss)\n return runPostcss(postcss, content, filename, plugins, [sugarss])\n }\n\n // Syntax support:\n if (result.opts.syntax && result.opts.syntax.parse) {\n parserList.push(result.opts.syntax.parse)\n }\n\n // Parser support:\n if (result.opts.parser) parserList.push(result.opts.parser)\n // Try the default as a last resort:\n parserList.push(null)\n\n return runPostcss(postcss, content, filename, plugins, parserList)\n}\n\nfunction runPostcss(postcss, content, filename, plugins, parsers, index) {\n if (!index) index = 0\n return postcss(plugins)\n .process(content, {\n from: filename,\n parser: parsers[index],\n })\n .catch(err => {\n // If there's an error, try the next parser\n index++\n // If there are no parsers left, throw it\n if (index === parsers.length) throw err\n return runPostcss(postcss, content, filename, plugins, parsers, index)\n })\n}\n","\"use strict\"\n\n// external tooling\nconst valueParser = require(\"postcss-value-parser\")\n\n// extended tooling\nconst { stringify } = valueParser\n\nfunction split(params, start) {\n const list = []\n const last = params.reduce((item, node, index) => {\n if (index < start) return \"\"\n if (node.type === \"div\" && node.value === \",\") {\n list.push(item)\n return \"\"\n }\n return item + stringify(node)\n }, \"\")\n list.push(last)\n return list\n}\n\nmodule.exports = function (result, styles) {\n const statements = []\n let nodes = []\n\n styles.each(node => {\n let stmt\n if (node.type === \"atrule\") {\n if (node.name === \"import\") stmt = parseImport(result, node)\n else if (node.name === \"media\") stmt = parseMedia(result, node)\n else if (node.name === \"charset\") stmt = parseCharset(result, node)\n }\n\n if (stmt) {\n if (nodes.length) {\n statements.push({\n type: \"nodes\",\n nodes,\n media: [],\n })\n nodes = []\n }\n statements.push(stmt)\n } else nodes.push(node)\n })\n\n if (nodes.length) {\n statements.push({\n type: \"nodes\",\n nodes,\n media: [],\n })\n }\n\n return statements\n}\n\nfunction parseMedia(result, atRule) {\n const params = valueParser(atRule.params).nodes\n return {\n type: \"media\",\n node: atRule,\n media: split(params, 0),\n }\n}\n\nfunction parseCharset(result, atRule) {\n if (atRule.prev()) {\n return result.warn(\"@charset must precede all other statements\", {\n node: atRule,\n })\n }\n return {\n type: \"charset\",\n node: atRule,\n media: [],\n }\n}\n\nfunction parseImport(result, atRule) {\n let prev = atRule.prev()\n if (prev) {\n do {\n if (\n prev.type !== \"comment\" &&\n (prev.type !== \"atrule\" ||\n (prev.name !== \"import\" && prev.name !== \"charset\"))\n ) {\n return result.warn(\n \"@import must precede all other statements (besides @charset)\",\n { node: atRule }\n )\n }\n prev = prev.prev()\n } while (prev)\n }\n\n if (atRule.nodes) {\n return result.warn(\n \"It looks like you didn't end your @import statement correctly. \" +\n \"Child nodes are attached to it.\",\n { node: atRule }\n )\n }\n\n const params = valueParser(atRule.params).nodes\n const stmt = {\n type: \"import\",\n node: atRule,\n media: [],\n }\n\n // prettier-ignore\n if (\n !params.length ||\n (\n params[0].type !== \"string\" ||\n !params[0].value\n ) &&\n (\n params[0].type !== \"function\" ||\n params[0].value !== \"url\" ||\n !params[0].nodes.length ||\n !params[0].nodes[0].value\n )\n ) {\n return result.warn(`Unable to find uri in '${ atRule.toString() }'`, {\n node: atRule,\n })\n }\n\n if (params[0].type === \"string\") stmt.uri = params[0].value\n else stmt.uri = params[0].nodes[0].value\n stmt.fullUri = stringify(params[0])\n\n if (params.length > 2) {\n if (params[1].type !== \"space\") {\n return result.warn(\"Invalid import media statement\", { node: atRule })\n }\n stmt.media = split(params, 2)\n }\n\n return stmt\n}\n","\"use strict\"\n// builtin tooling\nconst path = require(\"path\")\n\n// internal tooling\nconst joinMedia = require(\"./lib/join-media\")\nconst resolveId = require(\"./lib/resolve-id\")\nconst loadContent = require(\"./lib/load-content\")\nconst processContent = require(\"./lib/process-content\")\nconst parseStatements = require(\"./lib/parse-statements\")\n\nfunction AtImport(options) {\n options = {\n root: process.cwd(),\n path: [],\n skipDuplicates: true,\n resolve: resolveId,\n load: loadContent,\n plugins: [],\n addModulesDirectories: [],\n ...options,\n }\n\n options.root = path.resolve(options.root)\n\n // convert string to an array of a single element\n if (typeof options.path === \"string\") options.path = [options.path]\n\n if (!Array.isArray(options.path)) options.path = []\n\n options.path = options.path.map(p => path.resolve(options.root, p))\n\n return {\n postcssPlugin: \"postcss-import\",\n Once(styles, { result, atRule, postcss }) {\n const state = {\n importedFiles: {},\n hashFiles: {},\n }\n\n if (styles.source && styles.source.input && styles.source.input.file) {\n state.importedFiles[styles.source.input.file] = {}\n }\n\n if (options.plugins && !Array.isArray(options.plugins)) {\n throw new Error(\"plugins option must be an array\")\n }\n\n return parseStyles(result, styles, options, state, []).then(bundle => {\n applyRaws(bundle)\n applyMedia(bundle)\n applyStyles(bundle, styles)\n })\n\n function applyRaws(bundle) {\n bundle.forEach((stmt, index) => {\n if (index === 0) return\n\n if (stmt.parent) {\n const { before } = stmt.parent.node.raws\n if (stmt.type === \"nodes\") stmt.nodes[0].raws.before = before\n else stmt.node.raws.before = before\n } else if (stmt.type === \"nodes\") {\n stmt.nodes[0].raws.before = stmt.nodes[0].raws.before || \"\\n\"\n }\n })\n }\n\n function applyMedia(bundle) {\n bundle.forEach(stmt => {\n if (!stmt.media.length || stmt.type === \"charset\") return\n if (stmt.type === \"import\") {\n stmt.node.params = `${stmt.fullUri} ${stmt.media.join(\", \")}`\n } else if (stmt.type === \"media\")\n stmt.node.params = stmt.media.join(\", \")\n else {\n const { nodes } = stmt\n const { parent } = nodes[0]\n const mediaNode = atRule({\n name: \"media\",\n params: stmt.media.join(\", \"),\n source: parent.source,\n })\n\n parent.insertBefore(nodes[0], mediaNode)\n\n // remove nodes\n nodes.forEach(node => {\n node.parent = undefined\n })\n\n // better output\n nodes[0].raws.before = nodes[0].raws.before || \"\\n\"\n\n // wrap new rules with media query\n mediaNode.append(nodes)\n\n stmt.type = \"media\"\n stmt.node = mediaNode\n delete stmt.nodes\n }\n })\n }\n\n function applyStyles(bundle, styles) {\n styles.nodes = []\n\n // Strip additional statements.\n bundle.forEach(stmt => {\n if ([\"charset\", \"import\", \"media\"].includes(stmt.type)) {\n stmt.node.parent = undefined\n styles.append(stmt.node)\n } else if (stmt.type === \"nodes\") {\n stmt.nodes.forEach(node => {\n node.parent = undefined\n styles.append(node)\n })\n }\n })\n }\n\n function parseStyles(result, styles, options, state, media) {\n const statements = parseStatements(result, styles)\n\n return Promise.resolve(statements)\n .then(stmts => {\n // process each statement in series\n return stmts.reduce((promise, stmt) => {\n return promise.then(() => {\n stmt.media = joinMedia(media, stmt.media || [])\n\n // skip protocol base uri (protocol://url) or protocol-relative\n if (\n stmt.type !== \"import\" ||\n /^(?:[a-z]+:)?\\/\\//i.test(stmt.uri)\n ) {\n return\n }\n\n if (options.filter && !options.filter(stmt.uri)) {\n // rejected by filter\n return\n }\n\n return resolveImportId(result, stmt, options, state)\n })\n }, Promise.resolve())\n })\n .then(() => {\n let charset\n const imports = []\n const bundle = []\n\n function handleCharset(stmt) {\n if (!charset) charset = stmt\n // charsets aren't case-sensitive, so convert to lower case to compare\n else if (\n stmt.node.params.toLowerCase() !==\n charset.node.params.toLowerCase()\n ) {\n throw new Error(\n `Incompatable @charset statements:\n ${stmt.node.params} specified in ${stmt.node.source.input.file}\n ${charset.node.params} specified in ${charset.node.source.input.file}`\n )\n }\n }\n\n // squash statements and their children\n statements.forEach(stmt => {\n if (stmt.type === \"charset\") handleCharset(stmt)\n else if (stmt.type === \"import\") {\n if (stmt.children) {\n stmt.children.forEach((child, index) => {\n if (child.type === \"import\") imports.push(child)\n else if (child.type === \"charset\") handleCharset(child)\n else bundle.push(child)\n // For better output\n if (index === 0) child.parent = stmt\n })\n } else imports.push(stmt)\n } else if (stmt.type === \"media\" || stmt.type === \"nodes\") {\n bundle.push(stmt)\n }\n })\n\n return charset\n ? [charset, ...imports.concat(bundle)]\n : imports.concat(bundle)\n })\n }\n\n function resolveImportId(result, stmt, options, state) {\n const atRule = stmt.node\n let sourceFile\n if (atRule.source && atRule.source.input && atRule.source.input.file) {\n sourceFile = atRule.source.input.file\n }\n const base = sourceFile\n ? path.dirname(atRule.source.input.file)\n : options.root\n\n return Promise.resolve(options.resolve(stmt.uri, base, options))\n .then(paths => {\n if (!Array.isArray(paths)) paths = [paths]\n // Ensure that each path is absolute:\n return Promise.all(\n paths.map(file => {\n return !path.isAbsolute(file)\n ? resolveId(file, base, options)\n : file\n })\n )\n })\n .then(resolved => {\n // Add dependency messages:\n resolved.forEach(file => {\n result.messages.push({\n type: \"dependency\",\n plugin: \"postcss-import\",\n file,\n parent: sourceFile,\n })\n })\n\n return Promise.all(\n resolved.map(file => {\n return loadImportContent(result, stmt, file, options, state)\n })\n )\n })\n .then(result => {\n // Merge loaded statements\n stmt.children = result.reduce((result, statements) => {\n return statements ? result.concat(statements) : result\n }, [])\n })\n }\n\n function loadImportContent(result, stmt, filename, options, state) {\n const atRule = stmt.node\n const { media } = stmt\n if (options.skipDuplicates) {\n // skip files already imported at the same scope\n if (\n state.importedFiles[filename] &&\n state.importedFiles[filename][media]\n ) {\n return\n }\n\n // save imported files to skip them next time\n if (!state.importedFiles[filename]) state.importedFiles[filename] = {}\n state.importedFiles[filename][media] = true\n }\n\n return Promise.resolve(options.load(filename, options)).then(\n content => {\n if (content.trim() === \"\") {\n result.warn(`${filename} is empty`, { node: atRule })\n return\n }\n\n // skip previous imported files not containing @import rules\n if (state.hashFiles[content] && state.hashFiles[content][media])\n return\n\n return processContent(\n result,\n content,\n filename,\n options,\n postcss\n ).then(importedResult => {\n const styles = importedResult.root\n result.messages = result.messages.concat(importedResult.messages)\n\n if (options.skipDuplicates) {\n const hasImport = styles.some(child => {\n return child.type === \"atrule\" && child.name === \"import\"\n })\n if (!hasImport) {\n // save hash files to skip them next time\n if (!state.hashFiles[content]) state.hashFiles[content] = {}\n state.hashFiles[content][media] = true\n }\n }\n\n // recursion: import @import from imported file\n return parseStyles(result, styles, options, state, media)\n })\n }\n )\n }\n },\n }\n}\n\nAtImport.postcss = true\n\nmodule.exports = AtImport\n"],"names":["joinMedia","resolve","require$$0","resolveId","pify","pifyModule","path","require$$1","require$$2","readCacheModule","loadContent","processContent","parseStatements","require$$3","require$$4","require$$5"],"mappings":"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"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/cli.js b/packages/astro/vendor/vite/dist/node/cli.js
deleted file mode 100755
index 930d62d32..000000000
--- a/packages/astro/vendor/vite/dist/node/cli.js
+++ /dev/null
@@ -1,803 +0,0 @@
-'use strict';
-
-var require$$0 = require('events');
-var build = require('./chunks/dep-35df7f96.js');
-var perf_hooks = require('perf_hooks');
-require('fs');
-require('path');
-require('util');
-require('stream');
-require('os');
-require('url');
-require('crypto');
-require('module');
-require('esbuild');
-require('worker_threads');
-require('assert');
-require('child_process');
-require('readline');
-require('zlib');
-require('resolve');
-require('querystring');
-require('tty');
-require('net');
-require('http');
-require('buffer');
-require('https');
-require('tls');
-
-function toArr(any) {
- return any == null ? [] : Array.isArray(any) ? any : [any];
-}
-
-function toVal(out, key, val, opts) {
- var x, old=out[key], nxt=(
- !!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))
- : typeof val === 'boolean' ? val
- : !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))
- : (x = +val,x * 0 === 0) ? x : val
- );
- out[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);
-}
-
-function mri2 (args, opts) {
- args = args || [];
- opts = opts || {};
-
- var k, arr, arg, name, val, out={ _:[] };
- var i=0, j=0, idx=0, len=args.length;
-
- const alibi = opts.alias !== void 0;
- const strict = opts.unknown !== void 0;
- const defaults = opts.default !== void 0;
-
- opts.alias = opts.alias || {};
- opts.string = toArr(opts.string);
- opts.boolean = toArr(opts.boolean);
-
- if (alibi) {
- for (k in opts.alias) {
- arr = opts.alias[k] = toArr(opts.alias[k]);
- for (i=0; i < arr.length; i++) {
- (opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);
- }
- }
- }
-
- for (i=opts.boolean.length; i-- > 0;) {
- arr = opts.alias[opts.boolean[i]] || [];
- for (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);
- }
-
- for (i=opts.string.length; i-- > 0;) {
- arr = opts.alias[opts.string[i]] || [];
- for (j=arr.length; j-- > 0;) opts.string.push(arr[j]);
- }
-
- if (defaults) {
- for (k in opts.default) {
- name = typeof opts.default[k];
- arr = opts.alias[k] = opts.alias[k] || [];
- if (opts[name] !== void 0) {
- opts[name].push(k);
- for (i=0; i < arr.length; i++) {
- opts[name].push(arr[i]);
- }
- }
- }
- }
-
- const keys = strict ? Object.keys(opts.alias) : [];
-
- for (i=0; i < len; i++) {
- arg = args[i];
-
- if (arg === '--') {
- out._ = out._.concat(args.slice(++i));
- break;
- }
-
- for (j=0; j < arg.length; j++) {
- if (arg.charCodeAt(j) !== 45) break; // "-"
- }
-
- if (j === 0) {
- out._.push(arg);
- } else if (arg.substring(j, j + 3) === 'no-') {
- name = arg.substring(j + 3);
- if (strict && !~keys.indexOf(name)) {
- return opts.unknown(arg);
- }
- out[name] = false;
- } else {
- for (idx=j+1; idx < arg.length; idx++) {
- if (arg.charCodeAt(idx) === 61) break; // "="
- }
-
- name = arg.substring(j, idx);
- val = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);
- arr = (j === 2 ? [name] : name);
-
- for (idx=0; idx < arr.length; idx++) {
- name = arr[idx];
- if (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);
- toVal(out, name, (idx + 1 < arr.length) || val, opts);
- }
- }
- }
-
- if (defaults) {
- for (k in opts.default) {
- if (out[k] === void 0) {
- out[k] = opts.default[k];
- }
- }
- }
-
- if (alibi) {
- for (k in out) {
- arr = opts.alias[k] || [];
- while (arr.length > 0) {
- out[arr.shift()] = out[k];
- }
- }
- }
-
- return out;
-}
-
-const removeBrackets = (v) => v.replace(/[<[].+/, "").trim();
-const findAllBrackets = (v) => {
- const ANGLED_BRACKET_RE_GLOBAL = /<([^>]+)>/g;
- const SQUARE_BRACKET_RE_GLOBAL = /\[([^\]]+)\]/g;
- const res = [];
- const parse = (match) => {
- let variadic = false;
- let value = match[1];
- if (value.startsWith("...")) {
- value = value.slice(3);
- variadic = true;
- }
- return {
- required: match[0].startsWith("<"),
- value,
- variadic
- };
- };
- let angledMatch;
- while (angledMatch = ANGLED_BRACKET_RE_GLOBAL.exec(v)) {
- res.push(parse(angledMatch));
- }
- let squareMatch;
- while (squareMatch = SQUARE_BRACKET_RE_GLOBAL.exec(v)) {
- res.push(parse(squareMatch));
- }
- return res;
-};
-const getMriOptions = (options) => {
- const result = {alias: {}, boolean: []};
- for (const [index, option] of options.entries()) {
- if (option.names.length > 1) {
- result.alias[option.names[0]] = option.names.slice(1);
- }
- if (option.isBoolean) {
- if (option.negated) {
- const hasStringTypeOption = options.some((o, i) => {
- return i !== index && o.names.some((name) => option.names.includes(name)) && typeof o.required === "boolean";
- });
- if (!hasStringTypeOption) {
- result.boolean.push(option.names[0]);
- }
- } else {
- result.boolean.push(option.names[0]);
- }
- }
- }
- return result;
-};
-const findLongest = (arr) => {
- return arr.sort((a, b) => {
- return a.length > b.length ? -1 : 1;
- })[0];
-};
-const padRight = (str, length) => {
- return str.length >= length ? str : `${str}${" ".repeat(length - str.length)}`;
-};
-const camelcase = (input) => {
- return input.replace(/([a-z])-([a-z])/g, (_, p1, p2) => {
- return p1 + p2.toUpperCase();
- });
-};
-const setDotProp = (obj, keys, val) => {
- let i = 0;
- let length = keys.length;
- let t = obj;
- let x;
- for (; i < length; ++i) {
- x = t[keys[i]];
- t = t[keys[i]] = i === length - 1 ? val : x != null ? x : !!~keys[i + 1].indexOf(".") || !(+keys[i + 1] > -1) ? {} : [];
- }
-};
-const setByType = (obj, transforms) => {
- for (const key of Object.keys(transforms)) {
- const transform = transforms[key];
- if (transform.shouldTransform) {
- obj[key] = Array.prototype.concat.call([], obj[key]);
- if (typeof transform.transformFunction === "function") {
- obj[key] = obj[key].map(transform.transformFunction);
- }
- }
- }
-};
-const getFileName = (input) => {
- const m = /([^\\\/]+)$/.exec(input);
- return m ? m[1] : "";
-};
-const camelcaseOptionName = (name) => {
- return name.split(".").map((v, i) => {
- return i === 0 ? camelcase(v) : v;
- }).join(".");
-};
-class CACError extends Error {
- constructor(message) {
- super(message);
- this.name = this.constructor.name;
- if (typeof Error.captureStackTrace === "function") {
- Error.captureStackTrace(this, this.constructor);
- } else {
- this.stack = new Error(message).stack;
- }
- }
-}
-
-class Option {
- constructor(rawName, description, config) {
- this.rawName = rawName;
- this.description = description;
- this.config = Object.assign({}, config);
- rawName = rawName.replace(/\.\*/g, "");
- this.negated = false;
- this.names = removeBrackets(rawName).split(",").map((v) => {
- let name = v.trim().replace(/^-{1,2}/, "");
- if (name.startsWith("no-")) {
- this.negated = true;
- name = name.replace(/^no-/, "");
- }
- return camelcaseOptionName(name);
- }).sort((a, b) => a.length > b.length ? 1 : -1);
- this.name = this.names[this.names.length - 1];
- if (this.negated && this.config.default == null) {
- this.config.default = true;
- }
- if (rawName.includes("<")) {
- this.required = true;
- } else if (rawName.includes("[")) {
- this.required = false;
- } else {
- this.isBoolean = true;
- }
- }
-}
-
-const processArgs = process.argv;
-const platformInfo = `${process.platform}-${process.arch} node-${process.version}`;
-
-class Command {
- constructor(rawName, description, config = {}, cli) {
- this.rawName = rawName;
- this.description = description;
- this.config = config;
- this.cli = cli;
- this.options = [];
- this.aliasNames = [];
- this.name = removeBrackets(rawName);
- this.args = findAllBrackets(rawName);
- this.examples = [];
- }
- usage(text) {
- this.usageText = text;
- return this;
- }
- allowUnknownOptions() {
- this.config.allowUnknownOptions = true;
- return this;
- }
- ignoreOptionDefaultValue() {
- this.config.ignoreOptionDefaultValue = true;
- return this;
- }
- version(version, customFlags = "-v, --version") {
- this.versionNumber = version;
- this.option(customFlags, "Display version number");
- return this;
- }
- example(example) {
- this.examples.push(example);
- return this;
- }
- option(rawName, description, config) {
- const option = new Option(rawName, description, config);
- this.options.push(option);
- return this;
- }
- alias(name) {
- this.aliasNames.push(name);
- return this;
- }
- action(callback) {
- this.commandAction = callback;
- return this;
- }
- isMatched(name) {
- return this.name === name || this.aliasNames.includes(name);
- }
- get isDefaultCommand() {
- return this.name === "" || this.aliasNames.includes("!");
- }
- get isGlobalCommand() {
- return this instanceof GlobalCommand;
- }
- hasOption(name) {
- name = name.split(".")[0];
- return this.options.find((option) => {
- return option.names.includes(name);
- });
- }
- outputHelp() {
- const {name, commands} = this.cli;
- const {
- versionNumber,
- options: globalOptions,
- helpCallback
- } = this.cli.globalCommand;
- let sections = [
- {
- body: `${name}${versionNumber ? `/${versionNumber}` : ""}`
- }
- ];
- sections.push({
- title: "Usage",
- body: ` $ ${name} ${this.usageText || this.rawName}`
- });
- const showCommands = (this.isGlobalCommand || this.isDefaultCommand) && commands.length > 0;
- if (showCommands) {
- const longestCommandName = findLongest(commands.map((command) => command.rawName));
- sections.push({
- title: "Commands",
- body: commands.map((command) => {
- return ` ${padRight(command.rawName, longestCommandName.length)} ${command.description}`;
- }).join("\n")
- });
- sections.push({
- title: `For more info, run any command with the \`--help\` flag`,
- body: commands.map((command) => ` $ ${name}${command.name === "" ? "" : ` ${command.name}`} --help`).join("\n")
- });
- }
- const options = this.isGlobalCommand ? globalOptions : [...this.options, ...globalOptions || []];
- if (options.length > 0) {
- const longestOptionName = findLongest(options.map((option) => option.rawName));
- sections.push({
- title: "Options",
- body: options.map((option) => {
- return ` ${padRight(option.rawName, longestOptionName.length)} ${option.description} ${option.config.default === void 0 ? "" : `(default: ${option.config.default})`}`;
- }).join("\n")
- });
- }
- if (this.examples.length > 0) {
- sections.push({
- title: "Examples",
- body: this.examples.map((example) => {
- if (typeof example === "function") {
- return example(name);
- }
- return example;
- }).join("\n")
- });
- }
- if (helpCallback) {
- sections = helpCallback(sections) || sections;
- }
- console.log(sections.map((section) => {
- return section.title ? `${section.title}:
-${section.body}` : section.body;
- }).join("\n\n"));
- }
- outputVersion() {
- const {name} = this.cli;
- const {versionNumber} = this.cli.globalCommand;
- if (versionNumber) {
- console.log(`${name}/${versionNumber} ${platformInfo}`);
- }
- }
- checkRequiredArgs() {
- const minimalArgsCount = this.args.filter((arg) => arg.required).length;
- if (this.cli.args.length < minimalArgsCount) {
- throw new CACError(`missing required args for command \`${this.rawName}\``);
- }
- }
- checkUnknownOptions() {
- const {options, globalCommand} = this.cli;
- if (!this.config.allowUnknownOptions) {
- for (const name of Object.keys(options)) {
- if (name !== "--" && !this.hasOption(name) && !globalCommand.hasOption(name)) {
- throw new CACError(`Unknown option \`${name.length > 1 ? `--${name}` : `-${name}`}\``);
- }
- }
- }
- }
- checkOptionValue() {
- const {options: parsedOptions, globalCommand} = this.cli;
- const options = [...globalCommand.options, ...this.options];
- for (const option of options) {
- const value = parsedOptions[option.name.split(".")[0]];
- if (option.required) {
- const hasNegated = options.some((o) => o.negated && o.names.includes(option.name));
- if (value === true || value === false && !hasNegated) {
- throw new CACError(`option \`${option.rawName}\` value is missing`);
- }
- }
- }
- }
-}
-class GlobalCommand extends Command {
- constructor(cli) {
- super("@@global@@", "", {}, cli);
- }
-}
-
-var __assign = Object.assign;
-class CAC extends require$$0.EventEmitter {
- constructor(name = "") {
- super();
- this.name = name;
- this.commands = [];
- this.rawArgs = [];
- this.args = [];
- this.options = {};
- this.globalCommand = new GlobalCommand(this);
- this.globalCommand.usage("<command> [options]");
- }
- usage(text) {
- this.globalCommand.usage(text);
- return this;
- }
- command(rawName, description, config) {
- const command = new Command(rawName, description || "", config, this);
- command.globalCommand = this.globalCommand;
- this.commands.push(command);
- return command;
- }
- option(rawName, description, config) {
- this.globalCommand.option(rawName, description, config);
- return this;
- }
- help(callback) {
- this.globalCommand.option("-h, --help", "Display this message");
- this.globalCommand.helpCallback = callback;
- this.showHelpOnExit = true;
- return this;
- }
- version(version, customFlags = "-v, --version") {
- this.globalCommand.version(version, customFlags);
- this.showVersionOnExit = true;
- return this;
- }
- example(example) {
- this.globalCommand.example(example);
- return this;
- }
- outputHelp() {
- if (this.matchedCommand) {
- this.matchedCommand.outputHelp();
- } else {
- this.globalCommand.outputHelp();
- }
- }
- outputVersion() {
- this.globalCommand.outputVersion();
- }
- setParsedInfo({args, options}, matchedCommand, matchedCommandName) {
- this.args = args;
- this.options = options;
- if (matchedCommand) {
- this.matchedCommand = matchedCommand;
- }
- if (matchedCommandName) {
- this.matchedCommandName = matchedCommandName;
- }
- return this;
- }
- unsetMatchedCommand() {
- this.matchedCommand = void 0;
- this.matchedCommandName = void 0;
- }
- parse(argv = processArgs, {
- run = true
- } = {}) {
- this.rawArgs = argv;
- if (!this.name) {
- this.name = argv[1] ? getFileName(argv[1]) : "cli";
- }
- let shouldParse = true;
- for (const command of this.commands) {
- const parsed = this.mri(argv.slice(2), command);
- const commandName = parsed.args[0];
- if (command.isMatched(commandName)) {
- shouldParse = false;
- const parsedInfo = __assign(__assign({}, parsed), {
- args: parsed.args.slice(1)
- });
- this.setParsedInfo(parsedInfo, command, commandName);
- this.emit(`command:${commandName}`, command);
- }
- }
- if (shouldParse) {
- for (const command of this.commands) {
- if (command.name === "") {
- shouldParse = false;
- const parsed = this.mri(argv.slice(2), command);
- this.setParsedInfo(parsed, command);
- this.emit(`command:!`, command);
- }
- }
- }
- if (shouldParse) {
- const parsed = this.mri(argv.slice(2));
- this.setParsedInfo(parsed);
- }
- if (this.options.help && this.showHelpOnExit) {
- this.outputHelp();
- run = false;
- this.unsetMatchedCommand();
- }
- if (this.options.version && this.showVersionOnExit) {
- this.outputVersion();
- run = false;
- this.unsetMatchedCommand();
- }
- const parsedArgv = {args: this.args, options: this.options};
- if (run) {
- this.runMatchedCommand();
- }
- if (!this.matchedCommand && this.args[0]) {
- this.emit("command:*");
- }
- return parsedArgv;
- }
- mri(argv, command) {
- const cliOptions = [
- ...this.globalCommand.options,
- ...command ? command.options : []
- ];
- const mriOptions = getMriOptions(cliOptions);
- let argsAfterDoubleDashes = [];
- const doubleDashesIndex = argv.indexOf("--");
- if (doubleDashesIndex > -1) {
- argsAfterDoubleDashes = argv.slice(doubleDashesIndex + 1);
- argv = argv.slice(0, doubleDashesIndex);
- }
- let parsed = mri2(argv, mriOptions);
- parsed = Object.keys(parsed).reduce((res, name) => {
- return __assign(__assign({}, res), {
- [camelcaseOptionName(name)]: parsed[name]
- });
- }, {_: []});
- const args = parsed._;
- const options = {
- "--": argsAfterDoubleDashes
- };
- const ignoreDefault = command && command.config.ignoreOptionDefaultValue ? command.config.ignoreOptionDefaultValue : this.globalCommand.config.ignoreOptionDefaultValue;
- let transforms = Object.create(null);
- for (const cliOption of cliOptions) {
- if (!ignoreDefault && cliOption.config.default !== void 0) {
- for (const name of cliOption.names) {
- options[name] = cliOption.config.default;
- }
- }
- if (Array.isArray(cliOption.config.type)) {
- if (transforms[cliOption.name] === void 0) {
- transforms[cliOption.name] = Object.create(null);
- transforms[cliOption.name]["shouldTransform"] = true;
- transforms[cliOption.name]["transformFunction"] = cliOption.config.type[0];
- }
- }
- }
- for (const key of Object.keys(parsed)) {
- if (key !== "_") {
- const keys = key.split(".");
- setDotProp(options, keys, parsed[key]);
- setByType(options, transforms);
- }
- }
- return {
- args,
- options
- };
- }
- runMatchedCommand() {
- const {args, options, matchedCommand: command} = this;
- if (!command || !command.commandAction)
- return;
- command.checkUnknownOptions();
- command.checkOptionValue();
- command.checkRequiredArgs();
- const actionArgs = [];
- command.args.forEach((arg, index) => {
- if (arg.variadic) {
- actionArgs.push(args.slice(index));
- } else {
- actionArgs.push(args[index]);
- }
- });
- actionArgs.push(options);
- return command.commandAction.apply(this, actionArgs);
- }
-}
-
-const cac = (name = "") => new CAC(name);
-
-const cli = cac('vite');
-/**
- * removing global flags before passing as command specific sub-configs
- */
-function cleanOptions(options) {
- const ret = { ...options };
- delete ret['--'];
- delete ret.c;
- delete ret.config;
- delete ret.r;
- delete ret.root;
- delete ret.base;
- delete ret.l;
- delete ret.logLevel;
- delete ret.clearScreen;
- delete ret.d;
- delete ret.debug;
- delete ret.f;
- delete ret.filter;
- delete ret.m;
- delete ret.mode;
- return ret;
-}
-cli
- .option('-c, --config <file>', `[string] use specified config file`)
- .option('-r, --root <path>', `[string] use specified root directory`)
- .option('--base <path>', `[string] public base path (default: /)`)
- .option('-l, --logLevel <level>', `[string] info | warn | error | silent`)
- .option('--clearScreen', `[boolean] allow/disable clear screen when logging`)
- .option('-d, --debug [feat]', `[string | boolean] show debug logs`)
- .option('-f, --filter <filter>', `[string] filter debug logs`)
- .option('-m, --mode <mode>', `[string] set env mode`);
-// dev
-cli
- .command('[root]') // default command
- .alias('serve')
- .option('--host [host]', `[string] specify hostname`)
- .option('--port <port>', `[number] specify port`)
- .option('--https', `[boolean] use TLS + HTTP/2`)
- .option('--open [path]', `[boolean | string] open browser on startup`)
- .option('--cors', `[boolean] enable CORS`)
- .option('--strictPort', `[boolean] exit if specified port is already in use`)
- .option('--force', `[boolean] force the optimizer to ignore the cache and re-bundle`)
- .action(async (root, options) => {
- // output structure is preserved even after bundling so require()
- // is ok here
- const { createServer } = await Promise.resolve().then(function () { return require('./chunks/dep-35df7f96.js'); }).then(function (n) { return n.index$1; });
- try {
- const server = await createServer({
- root,
- base: options.base,
- mode: options.mode,
- configFile: options.config,
- logLevel: options.logLevel,
- clearScreen: options.clearScreen,
- server: cleanOptions(options)
- });
- if (!server.httpServer) {
- throw new Error('HTTP server not available');
- }
- await server.listen();
- const info = server.config.logger.info;
- info(build.source.cyan(`\n vite v${require('vite/package.json').version}`) +
- build.source.green(` dev server running at:\n`), {
- clear: !server.config.logger.hasWarned
- });
- server.printUrls();
- // @ts-ignore
- if (global.__vite_start_time) {
- // @ts-ignore
- const startupDuration = perf_hooks.performance.now() - global.__vite_start_time;
- info(`\n ${build.source.cyan(`ready in ${Math.ceil(startupDuration)}ms.`)}\n`);
- }
- }
- catch (e) {
- build.createLogger(options.logLevel).error(build.source.red(`error when starting dev server:\n${e.stack}`), { error: e });
- process.exit(1);
- }
-});
-// build
-cli
- .command('build [root]')
- .option('--target <target>', `[string] transpile target (default: 'modules')`)
- .option('--outDir <dir>', `[string] output directory (default: dist)`)
- .option('--assetsDir <dir>', `[string] directory under outDir to place assets in (default: _assets)`)
- .option('--assetsInlineLimit <number>', `[number] static asset base64 inline threshold in bytes (default: 4096)`)
- .option('--ssr [entry]', `[string] build specified entry for server-side rendering`)
- .option('--sourcemap', `[boolean] output source maps for build (default: false)`)
- .option('--minify [minifier]', `[boolean | "terser" | "esbuild"] enable/disable minification, ` +
- `or specify minifier to use (default: esbuild)`)
- .option('--manifest', `[boolean] emit build manifest json`)
- .option('--ssrManifest', `[boolean] emit ssr manifest json`)
- .option('--emptyOutDir', `[boolean] force empty outDir when it's outside of root`)
- .option('-w, --watch', `[boolean] rebuilds when modules have changed on disk`)
- .action(async (root, options) => {
- const { build: build$1 } = await Promise.resolve().then(function () { return require('./chunks/dep-35df7f96.js'); }).then(function (n) { return n.build$1; });
- const buildOptions = cleanOptions(options);
- try {
- await build$1({
- root,
- base: options.base,
- mode: options.mode,
- configFile: options.config,
- logLevel: options.logLevel,
- clearScreen: options.clearScreen,
- build: buildOptions
- });
- }
- catch (e) {
- build.createLogger(options.logLevel).error(build.source.red(`error during build:\n${e.stack}`), { error: e });
- process.exit(1);
- }
-});
-// optimize
-cli
- .command('optimize [root]')
- .option('--force', `[boolean] force the optimizer to ignore the cache and re-bundle`)
- .action(async (root, options) => {
- const { optimizeDeps } = await Promise.resolve().then(function () { return require('./chunks/dep-35df7f96.js'); }).then(function (n) { return n.index; });
- try {
- const config = await build.resolveConfig({
- root,
- base: options.base,
- configFile: options.config,
- logLevel: options.logLevel
- }, 'build', 'development');
- await optimizeDeps(config, options.force, true);
- }
- catch (e) {
- build.createLogger(options.logLevel).error(build.source.red(`error when optimizing deps:\n${e.stack}`), { error: e });
- process.exit(1);
- }
-});
-cli
- .command('preview [root]')
- .option('--host [host]', `[string] specify hostname`)
- .option('--port <port>', `[number] specify port`)
- .option('--https', `[boolean] use TLS + HTTP/2`)
- .option('--open [path]', `[boolean | string] open browser on startup`)
- .option('--strictPort', `[boolean] exit if specified port is already in use`)
- .action(async (root, options) => {
- try {
- const config = await build.resolveConfig({
- root,
- base: options.base,
- configFile: options.config,
- logLevel: options.logLevel,
- server: {
- open: options.open,
- strictPort: options.strictPort,
- https: options.https
- }
- }, 'serve', 'production');
- const server = await build.preview(config, cleanOptions(options));
- build.printHttpServerUrls(server, config);
- }
- catch (e) {
- build.createLogger(options.logLevel).error(build.source.red(`error when starting preview server:\n${e.stack}`), { error: e });
- process.exit(1);
- }
-});
-cli.help();
-cli.version(require('../../package.json').version);
-cli.parse();
-//# sourceMappingURL=cli.js.map
diff --git a/packages/astro/vendor/vite/dist/node/cli.js.map b/packages/astro/vendor/vite/dist/node/cli.js.map
deleted file mode 100755
index dfd666e66..000000000
--- a/packages/astro/vendor/vite/dist/node/cli.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"cli.js","sources":["../../../../node_modules/.pnpm/cac@6.7.3/node_modules/cac/dist/index.mjs","../../src/node/cli.ts"],"sourcesContent":["import { EventEmitter } from 'events';\n\nfunction toArr(any) {\n\treturn any == null ? [] : Array.isArray(any) ? any : [any];\n}\n\nfunction toVal(out, key, val, opts) {\n\tvar x, old=out[key], nxt=(\n\t\t!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))\n\t\t: typeof val === 'boolean' ? val\n\t\t: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))\n\t\t: (x = +val,x * 0 === 0) ? x : val\n\t);\n\tout[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);\n}\n\nfunction mri2 (args, opts) {\n\targs = args || [];\n\topts = opts || {};\n\n\tvar k, arr, arg, name, val, out={ _:[] };\n\tvar i=0, j=0, idx=0, len=args.length;\n\n\tconst alibi = opts.alias !== void 0;\n\tconst strict = opts.unknown !== void 0;\n\tconst defaults = opts.default !== void 0;\n\n\topts.alias = opts.alias || {};\n\topts.string = toArr(opts.string);\n\topts.boolean = toArr(opts.boolean);\n\n\tif (alibi) {\n\t\tfor (k in opts.alias) {\n\t\t\tarr = opts.alias[k] = toArr(opts.alias[k]);\n\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i=opts.boolean.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.boolean[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);\n\t}\n\n\tfor (i=opts.string.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.string[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.string.push(arr[j]);\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tname = typeof opts.default[k];\n\t\t\tarr = opts.alias[k] = opts.alias[k] || [];\n\t\t\tif (opts[name] !== void 0) {\n\t\t\t\topts[name].push(k);\n\t\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t\topts[name].push(arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst keys = strict ? Object.keys(opts.alias) : [];\n\n\tfor (i=0; i < len; i++) {\n\t\targ = args[i];\n\n\t\tif (arg === '--') {\n\t\t\tout._ = out._.concat(args.slice(++i));\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (j=0; j < arg.length; j++) {\n\t\t\tif (arg.charCodeAt(j) !== 45) break; // \"-\"\n\t\t}\n\n\t\tif (j === 0) {\n\t\t\tout._.push(arg);\n\t\t} else if (arg.substring(j, j + 3) === 'no-') {\n\t\t\tname = arg.substring(j + 3);\n\t\t\tif (strict && !~keys.indexOf(name)) {\n\t\t\t\treturn opts.unknown(arg);\n\t\t\t}\n\t\t\tout[name] = false;\n\t\t} else {\n\t\t\tfor (idx=j+1; idx < arg.length; idx++) {\n\t\t\t\tif (arg.charCodeAt(idx) === 61) break; // \"=\"\n\t\t\t}\n\n\t\t\tname = arg.substring(j, idx);\n\t\t\tval = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);\n\t\t\tarr = (j === 2 ? [name] : name);\n\n\t\t\tfor (idx=0; idx < arr.length; idx++) {\n\t\t\t\tname = arr[idx];\n\t\t\t\tif (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);\n\t\t\t\ttoVal(out, name, (idx + 1 < arr.length) || val, opts);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tif (out[k] === void 0) {\n\t\t\t\tout[k] = opts.default[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alibi) {\n\t\tfor (k in out) {\n\t\t\tarr = opts.alias[k] || [];\n\t\t\twhile (arr.length > 0) {\n\t\t\t\tout[arr.shift()] = out[k];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\nconst removeBrackets = (v) => v.replace(/[<[].+/, \"\").trim();\nconst findAllBrackets = (v) => {\n const ANGLED_BRACKET_RE_GLOBAL = /<([^>]+)>/g;\n const SQUARE_BRACKET_RE_GLOBAL = /\\[([^\\]]+)\\]/g;\n const res = [];\n const parse = (match) => {\n let variadic = false;\n let value = match[1];\n if (value.startsWith(\"...\")) {\n value = value.slice(3);\n variadic = true;\n }\n return {\n required: match[0].startsWith(\"<\"),\n value,\n variadic\n };\n };\n let angledMatch;\n while (angledMatch = ANGLED_BRACKET_RE_GLOBAL.exec(v)) {\n res.push(parse(angledMatch));\n }\n let squareMatch;\n while (squareMatch = SQUARE_BRACKET_RE_GLOBAL.exec(v)) {\n res.push(parse(squareMatch));\n }\n return res;\n};\nconst getMriOptions = (options) => {\n const result = {alias: {}, boolean: []};\n for (const [index, option] of options.entries()) {\n if (option.names.length > 1) {\n result.alias[option.names[0]] = option.names.slice(1);\n }\n if (option.isBoolean) {\n if (option.negated) {\n const hasStringTypeOption = options.some((o, i) => {\n return i !== index && o.names.some((name) => option.names.includes(name)) && typeof o.required === \"boolean\";\n });\n if (!hasStringTypeOption) {\n result.boolean.push(option.names[0]);\n }\n } else {\n result.boolean.push(option.names[0]);\n }\n }\n }\n return result;\n};\nconst findLongest = (arr) => {\n return arr.sort((a, b) => {\n return a.length > b.length ? -1 : 1;\n })[0];\n};\nconst padRight = (str, length) => {\n return str.length >= length ? str : `${str}${\" \".repeat(length - str.length)}`;\n};\nconst camelcase = (input) => {\n return input.replace(/([a-z])-([a-z])/g, (_, p1, p2) => {\n return p1 + p2.toUpperCase();\n });\n};\nconst setDotProp = (obj, keys, val) => {\n let i = 0;\n let length = keys.length;\n let t = obj;\n let x;\n for (; i < length; ++i) {\n x = t[keys[i]];\n t = t[keys[i]] = i === length - 1 ? val : x != null ? x : !!~keys[i + 1].indexOf(\".\") || !(+keys[i + 1] > -1) ? {} : [];\n }\n};\nconst setByType = (obj, transforms) => {\n for (const key of Object.keys(transforms)) {\n const transform = transforms[key];\n if (transform.shouldTransform) {\n obj[key] = Array.prototype.concat.call([], obj[key]);\n if (typeof transform.transformFunction === \"function\") {\n obj[key] = obj[key].map(transform.transformFunction);\n }\n }\n }\n};\nconst getFileName = (input) => {\n const m = /([^\\\\\\/]+)$/.exec(input);\n return m ? m[1] : \"\";\n};\nconst camelcaseOptionName = (name) => {\n return name.split(\".\").map((v, i) => {\n return i === 0 ? camelcase(v) : v;\n }).join(\".\");\n};\nclass CACError extends Error {\n constructor(message) {\n super(message);\n this.name = this.constructor.name;\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error(message).stack;\n }\n }\n}\n\nclass Option {\n constructor(rawName, description, config) {\n this.rawName = rawName;\n this.description = description;\n this.config = Object.assign({}, config);\n rawName = rawName.replace(/\\.\\*/g, \"\");\n this.negated = false;\n this.names = removeBrackets(rawName).split(\",\").map((v) => {\n let name = v.trim().replace(/^-{1,2}/, \"\");\n if (name.startsWith(\"no-\")) {\n this.negated = true;\n name = name.replace(/^no-/, \"\");\n }\n return camelcaseOptionName(name);\n }).sort((a, b) => a.length > b.length ? 1 : -1);\n this.name = this.names[this.names.length - 1];\n if (this.negated && this.config.default == null) {\n this.config.default = true;\n }\n if (rawName.includes(\"<\")) {\n this.required = true;\n } else if (rawName.includes(\"[\")) {\n this.required = false;\n } else {\n this.isBoolean = true;\n }\n }\n}\n\nconst processArgs = process.argv;\nconst platformInfo = `${process.platform}-${process.arch} node-${process.version}`;\n\nclass Command {\n constructor(rawName, description, config = {}, cli) {\n this.rawName = rawName;\n this.description = description;\n this.config = config;\n this.cli = cli;\n this.options = [];\n this.aliasNames = [];\n this.name = removeBrackets(rawName);\n this.args = findAllBrackets(rawName);\n this.examples = [];\n }\n usage(text) {\n this.usageText = text;\n return this;\n }\n allowUnknownOptions() {\n this.config.allowUnknownOptions = true;\n return this;\n }\n ignoreOptionDefaultValue() {\n this.config.ignoreOptionDefaultValue = true;\n return this;\n }\n version(version, customFlags = \"-v, --version\") {\n this.versionNumber = version;\n this.option(customFlags, \"Display version number\");\n return this;\n }\n example(example) {\n this.examples.push(example);\n return this;\n }\n option(rawName, description, config) {\n const option = new Option(rawName, description, config);\n this.options.push(option);\n return this;\n }\n alias(name) {\n this.aliasNames.push(name);\n return this;\n }\n action(callback) {\n this.commandAction = callback;\n return this;\n }\n isMatched(name) {\n return this.name === name || this.aliasNames.includes(name);\n }\n get isDefaultCommand() {\n return this.name === \"\" || this.aliasNames.includes(\"!\");\n }\n get isGlobalCommand() {\n return this instanceof GlobalCommand;\n }\n hasOption(name) {\n name = name.split(\".\")[0];\n return this.options.find((option) => {\n return option.names.includes(name);\n });\n }\n outputHelp() {\n const {name, commands} = this.cli;\n const {\n versionNumber,\n options: globalOptions,\n helpCallback\n } = this.cli.globalCommand;\n let sections = [\n {\n body: `${name}${versionNumber ? `/${versionNumber}` : \"\"}`\n }\n ];\n sections.push({\n title: \"Usage\",\n body: ` $ ${name} ${this.usageText || this.rawName}`\n });\n const showCommands = (this.isGlobalCommand || this.isDefaultCommand) && commands.length > 0;\n if (showCommands) {\n const longestCommandName = findLongest(commands.map((command) => command.rawName));\n sections.push({\n title: \"Commands\",\n body: commands.map((command) => {\n return ` ${padRight(command.rawName, longestCommandName.length)} ${command.description}`;\n }).join(\"\\n\")\n });\n sections.push({\n title: `For more info, run any command with the \\`--help\\` flag`,\n body: commands.map((command) => ` $ ${name}${command.name === \"\" ? \"\" : ` ${command.name}`} --help`).join(\"\\n\")\n });\n }\n const options = this.isGlobalCommand ? globalOptions : [...this.options, ...globalOptions || []];\n if (options.length > 0) {\n const longestOptionName = findLongest(options.map((option) => option.rawName));\n sections.push({\n title: \"Options\",\n body: options.map((option) => {\n return ` ${padRight(option.rawName, longestOptionName.length)} ${option.description} ${option.config.default === void 0 ? \"\" : `(default: ${option.config.default})`}`;\n }).join(\"\\n\")\n });\n }\n if (this.examples.length > 0) {\n sections.push({\n title: \"Examples\",\n body: this.examples.map((example) => {\n if (typeof example === \"function\") {\n return example(name);\n }\n return example;\n }).join(\"\\n\")\n });\n }\n if (helpCallback) {\n sections = helpCallback(sections) || sections;\n }\n console.log(sections.map((section) => {\n return section.title ? `${section.title}:\n${section.body}` : section.body;\n }).join(\"\\n\\n\"));\n }\n outputVersion() {\n const {name} = this.cli;\n const {versionNumber} = this.cli.globalCommand;\n if (versionNumber) {\n console.log(`${name}/${versionNumber} ${platformInfo}`);\n }\n }\n checkRequiredArgs() {\n const minimalArgsCount = this.args.filter((arg) => arg.required).length;\n if (this.cli.args.length < minimalArgsCount) {\n throw new CACError(`missing required args for command \\`${this.rawName}\\``);\n }\n }\n checkUnknownOptions() {\n const {options, globalCommand} = this.cli;\n if (!this.config.allowUnknownOptions) {\n for (const name of Object.keys(options)) {\n if (name !== \"--\" && !this.hasOption(name) && !globalCommand.hasOption(name)) {\n throw new CACError(`Unknown option \\`${name.length > 1 ? `--${name}` : `-${name}`}\\``);\n }\n }\n }\n }\n checkOptionValue() {\n const {options: parsedOptions, globalCommand} = this.cli;\n const options = [...globalCommand.options, ...this.options];\n for (const option of options) {\n const value = parsedOptions[option.name.split(\".\")[0]];\n if (option.required) {\n const hasNegated = options.some((o) => o.negated && o.names.includes(option.name));\n if (value === true || value === false && !hasNegated) {\n throw new CACError(`option \\`${option.rawName}\\` value is missing`);\n }\n }\n }\n }\n}\nclass GlobalCommand extends Command {\n constructor(cli) {\n super(\"@@global@@\", \"\", {}, cli);\n }\n}\n\nvar __assign = Object.assign;\nclass CAC extends EventEmitter {\n constructor(name = \"\") {\n super();\n this.name = name;\n this.commands = [];\n this.rawArgs = [];\n this.args = [];\n this.options = {};\n this.globalCommand = new GlobalCommand(this);\n this.globalCommand.usage(\"<command> [options]\");\n }\n usage(text) {\n this.globalCommand.usage(text);\n return this;\n }\n command(rawName, description, config) {\n const command = new Command(rawName, description || \"\", config, this);\n command.globalCommand = this.globalCommand;\n this.commands.push(command);\n return command;\n }\n option(rawName, description, config) {\n this.globalCommand.option(rawName, description, config);\n return this;\n }\n help(callback) {\n this.globalCommand.option(\"-h, --help\", \"Display this message\");\n this.globalCommand.helpCallback = callback;\n this.showHelpOnExit = true;\n return this;\n }\n version(version, customFlags = \"-v, --version\") {\n this.globalCommand.version(version, customFlags);\n this.showVersionOnExit = true;\n return this;\n }\n example(example) {\n this.globalCommand.example(example);\n return this;\n }\n outputHelp() {\n if (this.matchedCommand) {\n this.matchedCommand.outputHelp();\n } else {\n this.globalCommand.outputHelp();\n }\n }\n outputVersion() {\n this.globalCommand.outputVersion();\n }\n setParsedInfo({args, options}, matchedCommand, matchedCommandName) {\n this.args = args;\n this.options = options;\n if (matchedCommand) {\n this.matchedCommand = matchedCommand;\n }\n if (matchedCommandName) {\n this.matchedCommandName = matchedCommandName;\n }\n return this;\n }\n unsetMatchedCommand() {\n this.matchedCommand = void 0;\n this.matchedCommandName = void 0;\n }\n parse(argv = processArgs, {\n run = true\n } = {}) {\n this.rawArgs = argv;\n if (!this.name) {\n this.name = argv[1] ? getFileName(argv[1]) : \"cli\";\n }\n let shouldParse = true;\n for (const command of this.commands) {\n const parsed = this.mri(argv.slice(2), command);\n const commandName = parsed.args[0];\n if (command.isMatched(commandName)) {\n shouldParse = false;\n const parsedInfo = __assign(__assign({}, parsed), {\n args: parsed.args.slice(1)\n });\n this.setParsedInfo(parsedInfo, command, commandName);\n this.emit(`command:${commandName}`, command);\n }\n }\n if (shouldParse) {\n for (const command of this.commands) {\n if (command.name === \"\") {\n shouldParse = false;\n const parsed = this.mri(argv.slice(2), command);\n this.setParsedInfo(parsed, command);\n this.emit(`command:!`, command);\n }\n }\n }\n if (shouldParse) {\n const parsed = this.mri(argv.slice(2));\n this.setParsedInfo(parsed);\n }\n if (this.options.help && this.showHelpOnExit) {\n this.outputHelp();\n run = false;\n this.unsetMatchedCommand();\n }\n if (this.options.version && this.showVersionOnExit) {\n this.outputVersion();\n run = false;\n this.unsetMatchedCommand();\n }\n const parsedArgv = {args: this.args, options: this.options};\n if (run) {\n this.runMatchedCommand();\n }\n if (!this.matchedCommand && this.args[0]) {\n this.emit(\"command:*\");\n }\n return parsedArgv;\n }\n mri(argv, command) {\n const cliOptions = [\n ...this.globalCommand.options,\n ...command ? command.options : []\n ];\n const mriOptions = getMriOptions(cliOptions);\n let argsAfterDoubleDashes = [];\n const doubleDashesIndex = argv.indexOf(\"--\");\n if (doubleDashesIndex > -1) {\n argsAfterDoubleDashes = argv.slice(doubleDashesIndex + 1);\n argv = argv.slice(0, doubleDashesIndex);\n }\n let parsed = mri2(argv, mriOptions);\n parsed = Object.keys(parsed).reduce((res, name) => {\n return __assign(__assign({}, res), {\n [camelcaseOptionName(name)]: parsed[name]\n });\n }, {_: []});\n const args = parsed._;\n const options = {\n \"--\": argsAfterDoubleDashes\n };\n const ignoreDefault = command && command.config.ignoreOptionDefaultValue ? command.config.ignoreOptionDefaultValue : this.globalCommand.config.ignoreOptionDefaultValue;\n let transforms = Object.create(null);\n for (const cliOption of cliOptions) {\n if (!ignoreDefault && cliOption.config.default !== void 0) {\n for (const name of cliOption.names) {\n options[name] = cliOption.config.default;\n }\n }\n if (Array.isArray(cliOption.config.type)) {\n if (transforms[cliOption.name] === void 0) {\n transforms[cliOption.name] = Object.create(null);\n transforms[cliOption.name][\"shouldTransform\"] = true;\n transforms[cliOption.name][\"transformFunction\"] = cliOption.config.type[0];\n }\n }\n }\n for (const key of Object.keys(parsed)) {\n if (key !== \"_\") {\n const keys = key.split(\".\");\n setDotProp(options, keys, parsed[key]);\n setByType(options, transforms);\n }\n }\n return {\n args,\n options\n };\n }\n runMatchedCommand() {\n const {args, options, matchedCommand: command} = this;\n if (!command || !command.commandAction)\n return;\n command.checkUnknownOptions();\n command.checkOptionValue();\n command.checkRequiredArgs();\n const actionArgs = [];\n command.args.forEach((arg, index) => {\n if (arg.variadic) {\n actionArgs.push(args.slice(index));\n } else {\n actionArgs.push(args[index]);\n }\n });\n actionArgs.push(options);\n return command.commandAction.apply(this, actionArgs);\n }\n}\n\nconst cac = (name = \"\") => new CAC(name);\nif (typeof module !== \"undefined\") {\n module.exports = cac;\n Object.assign(module.exports, {\n default: cac,\n cac,\n CAC: CAC,\n Command: Command\n });\n}\n\nexport default cac;\nexport { CAC, Command, cac };\n","import { cac } from 'cac'\nimport chalk from 'chalk'\nimport { performance } from 'perf_hooks'\nimport { BuildOptions } from './build'\nimport { ServerOptions } from './server'\nimport { createLogger, LogLevel, printHttpServerUrls } from './logger'\nimport { resolveConfig } from '.'\nimport { preview } from './preview'\n\nconst cli = cac('vite')\n\n// global options\ninterface GlobalCLIOptions {\n '--'?: string[]\n c?: boolean | string\n config?: string\n r?: string\n root?: string\n base?: string\n l?: LogLevel\n logLevel?: LogLevel\n clearScreen?: boolean\n d?: boolean | string\n debug?: boolean | string\n f?: string\n filter?: string\n m?: string\n mode?: string\n}\n\n/**\n * removing global flags before passing as command specific sub-configs\n */\nfunction cleanOptions<Options extends GlobalCLIOptions>(\n options: Options\n): Omit<Options, keyof GlobalCLIOptions> {\n const ret = { ...options }\n delete ret['--']\n delete ret.c\n delete ret.config\n delete ret.r\n delete ret.root\n delete ret.base\n delete ret.l\n delete ret.logLevel\n delete ret.clearScreen\n delete ret.d\n delete ret.debug\n delete ret.f\n delete ret.filter\n delete ret.m\n delete ret.mode\n return ret\n}\n\ncli\n .option('-c, --config <file>', `[string] use specified config file`)\n .option('-r, --root <path>', `[string] use specified root directory`)\n .option('--base <path>', `[string] public base path (default: /)`)\n .option('-l, --logLevel <level>', `[string] info | warn | error | silent`)\n .option('--clearScreen', `[boolean] allow/disable clear screen when logging`)\n .option('-d, --debug [feat]', `[string | boolean] show debug logs`)\n .option('-f, --filter <filter>', `[string] filter debug logs`)\n .option('-m, --mode <mode>', `[string] set env mode`)\n\n// dev\ncli\n .command('[root]') // default command\n .alias('serve')\n .option('--host [host]', `[string] specify hostname`)\n .option('--port <port>', `[number] specify port`)\n .option('--https', `[boolean] use TLS + HTTP/2`)\n .option('--open [path]', `[boolean | string] open browser on startup`)\n .option('--cors', `[boolean] enable CORS`)\n .option('--strictPort', `[boolean] exit if specified port is already in use`)\n .option(\n '--force',\n `[boolean] force the optimizer to ignore the cache and re-bundle`\n )\n .action(async (root: string, options: ServerOptions & GlobalCLIOptions) => {\n // output structure is preserved even after bundling so require()\n // is ok here\n const { createServer } = await import('./server')\n try {\n const server = await createServer({\n root,\n base: options.base,\n mode: options.mode,\n configFile: options.config,\n logLevel: options.logLevel,\n clearScreen: options.clearScreen,\n server: cleanOptions(options)\n })\n\n if (!server.httpServer) {\n throw new Error('HTTP server not available')\n }\n\n await server.listen()\n\n const info = server.config.logger.info\n\n info(\n chalk.cyan(`\\n vite v${require('vite/package.json').version}`) +\n chalk.green(` dev server running at:\\n`),\n {\n clear: !server.config.logger.hasWarned\n }\n )\n\n server.printUrls()\n\n // @ts-ignore\n if (global.__vite_start_time) {\n // @ts-ignore\n const startupDuration = performance.now() - global.__vite_start_time\n info(`\\n ${chalk.cyan(`ready in ${Math.ceil(startupDuration)}ms.`)}\\n`)\n }\n } catch (e) {\n createLogger(options.logLevel).error(\n chalk.red(`error when starting dev server:\\n${e.stack}`),\n { error: e }\n )\n process.exit(1)\n }\n })\n\n// build\ncli\n .command('build [root]')\n .option('--target <target>', `[string] transpile target (default: 'modules')`)\n .option('--outDir <dir>', `[string] output directory (default: dist)`)\n .option(\n '--assetsDir <dir>',\n `[string] directory under outDir to place assets in (default: _assets)`\n )\n .option(\n '--assetsInlineLimit <number>',\n `[number] static asset base64 inline threshold in bytes (default: 4096)`\n )\n .option(\n '--ssr [entry]',\n `[string] build specified entry for server-side rendering`\n )\n .option(\n '--sourcemap',\n `[boolean] output source maps for build (default: false)`\n )\n .option(\n '--minify [minifier]',\n `[boolean | \"terser\" | \"esbuild\"] enable/disable minification, ` +\n `or specify minifier to use (default: esbuild)`\n )\n .option('--manifest', `[boolean] emit build manifest json`)\n .option('--ssrManifest', `[boolean] emit ssr manifest json`)\n .option(\n '--emptyOutDir',\n `[boolean] force empty outDir when it's outside of root`\n )\n .option('-w, --watch', `[boolean] rebuilds when modules have changed on disk`)\n .action(async (root: string, options: BuildOptions & GlobalCLIOptions) => {\n const { build } = await import('./build')\n const buildOptions: BuildOptions = cleanOptions(options)\n\n try {\n await build({\n root,\n base: options.base,\n mode: options.mode,\n configFile: options.config,\n logLevel: options.logLevel,\n clearScreen: options.clearScreen,\n build: buildOptions\n })\n } catch (e) {\n createLogger(options.logLevel).error(\n chalk.red(`error during build:\\n${e.stack}`),\n { error: e }\n )\n process.exit(1)\n }\n })\n\n// optimize\ncli\n .command('optimize [root]')\n .option(\n '--force',\n `[boolean] force the optimizer to ignore the cache and re-bundle`\n )\n .action(\n async (root: string, options: { force?: boolean } & GlobalCLIOptions) => {\n const { optimizeDeps } = await import('./optimizer')\n try {\n const config = await resolveConfig(\n {\n root,\n base: options.base,\n configFile: options.config,\n logLevel: options.logLevel\n },\n 'build',\n 'development'\n )\n await optimizeDeps(config, options.force, true)\n } catch (e) {\n createLogger(options.logLevel).error(\n chalk.red(`error when optimizing deps:\\n${e.stack}`),\n { error: e }\n )\n process.exit(1)\n }\n }\n )\n\ncli\n .command('preview [root]')\n .option('--host [host]', `[string] specify hostname`)\n .option('--port <port>', `[number] specify port`)\n .option('--https', `[boolean] use TLS + HTTP/2`)\n .option('--open [path]', `[boolean | string] open browser on startup`)\n .option('--strictPort', `[boolean] exit if specified port is already in use`)\n .action(\n async (\n root: string,\n options: {\n host?: string | boolean\n port?: number\n https?: boolean\n open?: boolean | string\n strictPort?: boolean\n } & GlobalCLIOptions\n ) => {\n try {\n const config = await resolveConfig(\n {\n root,\n base: options.base,\n configFile: options.config,\n logLevel: options.logLevel,\n server: {\n open: options.open,\n strictPort: options.strictPort,\n https: options.https\n }\n },\n 'serve',\n 'production'\n )\n const server = await preview(config, cleanOptions(options))\n\n printHttpServerUrls(server, config)\n } catch (e) {\n createLogger(options.logLevel).error(\n chalk.red(`error when starting preview server:\\n${e.stack}`),\n { error: e }\n )\n process.exit(1)\n }\n }\n )\n\ncli.help()\ncli.version(require('../../package.json').version)\n\ncli.parse()\n"],"names":["EventEmitter","chalk","performance","createLogger","build","resolveConfig","preview","printHttpServerUrls"],"mappings":"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"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/index.d.ts b/packages/astro/vendor/vite/dist/node/index.d.ts
deleted file mode 100755
index 305857a8b..000000000
--- a/packages/astro/vendor/vite/dist/node/index.d.ts
+++ /dev/null
@@ -1,2580 +0,0 @@
-/// <reference types="node" />
-
-import { Agent } from 'http';
-import { BuildOptions as BuildOptions_2 } from 'esbuild';
-import { ClientRequest } from 'http';
-import { ClientRequestArgs } from 'http';
-import { CustomPluginOptions } from 'rollup';
-import { Duplex } from 'stream';
-import { DuplexOptions } from 'stream';
-import { TransformOptions as EsbuildTransformOptions } from 'esbuild';
-import { EventEmitter } from 'events';
-import * as events from 'events';
-import * as fs from 'fs';
-import * as http from 'http';
-import * as https from 'https';
-import { IncomingMessage } from 'http';
-import { InputOptions } from 'rollup';
-import { LoadResult } from 'rollup';
-import { ModuleFormat } from 'rollup';
-import * as net from 'net';
-import { OutgoingHttpHeaders } from 'http';
-import { OutputBundle } from 'rollup';
-import { OutputChunk } from 'rollup';
-import { PartialResolvedId } from 'rollup';
-import { Plugin as Plugin_2 } from 'rollup';
-import { PluginContext } from 'rollup';
-import { PluginHooks } from 'rollup';
-import * as Postcss from 'postcss';
-import { ResolveIdResult } from 'rollup';
-import { RollupError } from 'rollup';
-import { RollupOptions } from 'rollup';
-import { RollupOutput } from 'rollup';
-import { RollupWatcher } from 'rollup';
-import { SecureContextOptions } from 'tls';
-import { Server } from 'http';
-import { Server as Server_2 } from 'https';
-import { Server as Server_3 } from 'net';
-import { ServerResponse } from 'http';
-import { Socket } from 'net';
-import { SourceDescription } from 'rollup';
-import { SourceMap } from 'rollup';
-import * as stream from 'stream';
-import { TransformPluginContext } from 'rollup';
-import { TransformResult as TransformResult_2 } from 'esbuild';
-import { TransformResult as TransformResult_3 } from 'rollup';
-import { URL } from 'url';
-import * as url from 'url';
-import { WatcherOptions } from 'rollup';
-import { ZlibOptions } from 'zlib';
-
-export declare interface Alias {
- find: string | RegExp
- replacement: string
- /**
- * Instructs the plugin to use an alternative resolving algorithm,
- * rather than the Rollup's resolver.
- * @default null
- */
- customResolver?: ResolverFunction | ResolverObject | null
-}
-
-/**
- * Specifies an `Object`, or an `Array` of `Object`,
- * which defines aliases used to replace values in `import` or `require` statements.
- * With either format, the order of the entries is important,
- * in that the first defined rules are applied first.
- *
- * This is passed to \@rollup/plugin-alias as the "entries" field
- * https://github.com/rollup/plugins/tree/master/packages/alias#entries
- */
-export declare type AliasOptions = readonly Alias[] | { [find: string]: string }
-
-export declare type AnymatchFn = (testString: string) => boolean
-
-export declare type AnymatchPattern = string | RegExp | AnymatchFn
-
-/**
- * Bundles the app for production.
- * Returns a Promise containing the build result.
- */
-export declare function build(inlineConfig?: InlineConfig): Promise<RollupOutput | RollupOutput[] | RollupWatcher>;
-
-export declare interface BuildOptions {
- /**
- * Base public path when served in production.
- * @deprecated `base` is now a root-level config option.
- */
- base?: string;
- /**
- * Compatibility transform target. The transform is performed with esbuild
- * and the lowest supported target is es2015/es6. Note this only handles
- * syntax transformation and does not cover polyfills (except for dynamic
- * import)
- *
- * Default: 'modules' - Similar to `@babel/preset-env`'s targets.esmodules,
- * transpile targeting browsers that natively support dynamic es module imports.
- * https://caniuse.com/es6-module-dynamic-import
- *
- * Another special value is 'esnext' - which only performs minimal transpiling
- * (for minification compat) and assumes native dynamic imports support.
- *
- * For custom targets, see https://esbuild.github.io/api/#target and
- * https://esbuild.github.io/content-types/#javascript for more details.
- */
- target?: 'modules' | EsbuildTransformOptions['target'] | false;
- /**
- * whether to inject module preload polyfill.
- * Note: does not apply to library mode.
- * @default true
- */
- polyfillModulePreload?: boolean;
- /**
- * whether to inject dynamic import polyfill.
- * Note: does not apply to library mode.
- * @default false
- * @deprecated use plugin-legacy for browsers that don't support dynamic import
- */
- polyfillDynamicImport?: boolean;
- /**
- * Directory relative from `root` where build output will be placed. If the
- * directory exists, it will be removed before the build.
- * @default 'dist'
- */
- outDir?: string;
- /**
- * Directory relative from `outDir` where the built js/css/image assets will
- * be placed.
- * @default 'assets'
- */
- assetsDir?: string;
- /**
- * Static asset files smaller than this number (in bytes) will be inlined as
- * base64 strings. Default limit is `4096` (4kb). Set to `0` to disable.
- * @default 4096
- */
- assetsInlineLimit?: number;
- /**
- * Whether to code-split CSS. When enabled, CSS in async chunks will be
- * inlined as strings in the chunk and inserted via dynamically created
- * style tags when the chunk is loaded.
- * @default true
- */
- cssCodeSplit?: boolean;
- /**
- * An optional separate target for CSS minification.
- * As esbuild only supports configuring targets to mainstream
- * browsers, users may need this option when they are targeting
- * a niche browser that comes with most modern JavaScript features
- * but has poor CSS support, e.g. Android WeChat WebView, which
- * doesn't support the #RGBA syntax.
- */
- cssTarget?: EsbuildTransformOptions['target'] | false;
- /**
- * If `true`, a separate sourcemap file will be created. If 'inline', the
- * sourcemap will be appended to the resulting output file as data URI.
- * 'hidden' works like `true` except that the corresponding sourcemap
- * comments in the bundled files are suppressed.
- * @default false
- */
- sourcemap?: boolean | 'inline' | 'hidden';
- /**
- * Set to `false` to disable minification, or specify the minifier to use.
- * Available options are 'terser' or 'esbuild'.
- * @default 'esbuild'
- */
- minify?: boolean | 'terser' | 'esbuild';
- /**
- * Options for terser
- * https://terser.org/docs/api-reference#minify-options
- */
- terserOptions?: Terser.MinifyOptions;
- /**
- * @deprecated Vite now uses esbuild for CSS minification.
- */
- cleanCssOptions?: any;
- /**
- * Will be merged with internal rollup options.
- * https://rollupjs.org/guide/en/#big-list-of-options
- */
- rollupOptions?: RollupOptions;
- /**
- * Options to pass on to `@rollup/plugin-commonjs`
- */
- commonjsOptions?: RollupCommonJSOptions;
- /**
- * Options to pass on to `@rollup/plugin-dynamic-import-vars`
- */
- dynamicImportVarsOptions?: RollupDynamicImportVarsOptions;
- /**
- * Whether to write bundle to disk
- * @default true
- */
- write?: boolean;
- /**
- * Empty outDir on write.
- * @default true when outDir is a sub directory of project root
- */
- emptyOutDir?: boolean | null;
- /**
- * Whether to emit a manifest.json under assets dir to map hash-less filenames
- * to their hashed versions. Useful when you want to generate your own HTML
- * instead of using the one generated by Vite.
- *
- * Example:
- *
- * ```json
- * {
- * "main.js": {
- * "file": "main.68fe3fad.js",
- * "css": "main.e6b63442.css",
- * "imports": [...],
- * "dynamicImports": [...]
- * }
- * }
- * ```
- * @default false
- */
- manifest?: boolean;
- /**
- * Build in library mode. The value should be the global name of the lib in
- * UMD mode. This will produce esm + cjs + umd bundle formats with default
- * configurations that are suitable for distributing libraries.
- */
- lib?: LibraryOptions | false;
- /**
- * Produce SSR oriented build. Note this requires specifying SSR entry via
- * `rollupOptions.input`.
- */
- ssr?: boolean | string;
- /**
- * Generate SSR manifest for determining style links and asset preload
- * directives in production.
- */
- ssrManifest?: boolean;
- /**
- * Set to false to disable reporting compressed chunk sizes.
- * Can slightly improve build speed.
- */
- reportCompressedSize?: boolean;
- /**
- * Set to false to disable brotli compressed size reporting for build.
- * Can slightly improve build speed.
- * @deprecated use `build.reportCompressedSize` instead.
- */
- brotliSize?: boolean;
- /**
- * Adjust chunk size warning limit (in kbs).
- * @default 500
- */
- chunkSizeWarningLimit?: number;
- /**
- * Rollup watch options
- * https://rollupjs.org/guide/en/#watchoptions
- */
- watch?: WatcherOptions | null;
-}
-
-export declare interface ConfigEnv {
- command: 'build' | 'serve';
- mode: string;
-}
-
-export declare namespace Connect {
- export type ServerHandle = HandleFunction | http.Server
-
- export class IncomingMessage extends http.IncomingMessage {
- originalUrl?: http.IncomingMessage['url']
- }
-
- export type NextFunction = (err?: any) => void
-
- export type SimpleHandleFunction = (
- req: IncomingMessage,
- res: http.ServerResponse
- ) => void
- export type NextHandleFunction = (
- req: IncomingMessage,
- res: http.ServerResponse,
- next: NextFunction
- ) => void
- export type ErrorHandleFunction = (
- err: any,
- req: IncomingMessage,
- res: http.ServerResponse,
- next: NextFunction
- ) => void
- export type HandleFunction =
- | SimpleHandleFunction
- | NextHandleFunction
- | ErrorHandleFunction
-
- export interface ServerStackItem {
- route: string
- handle: ServerHandle
- }
-
- export interface Server extends NodeJS.EventEmitter {
- (req: http.IncomingMessage, res: http.ServerResponse, next?: Function): void
-
- route: string
- stack: ServerStackItem[]
-
- /**
- * Utilize the given middleware `handle` to the given `route`,
- * defaulting to _/_. This "route" is the mount-point for the
- * middleware, when given a value other than _/_ the middleware
- * is only effective when that segment is present in the request's
- * pathname.
- *
- * For example if we were to mount a function at _/admin_, it would
- * be invoked on _/admin_, and _/admin/settings_, however it would
- * not be invoked for _/_, or _/posts_.
- */
- use(fn: NextHandleFunction): Server
- use(fn: HandleFunction): Server
- use(route: string, fn: NextHandleFunction): Server
- use(route: string, fn: HandleFunction): Server
-
- /**
- * Handle server requests, punting them down
- * the middleware stack.
- */
- handle(
- req: http.IncomingMessage,
- res: http.ServerResponse,
- next: Function
- ): void
-
- /**
- * Listen for connections.
- *
- * This method takes the same arguments
- * as node's `http.Server#listen()`.
- *
- * HTTP and HTTPS:
- *
- * If you run your application both as HTTP
- * and HTTPS you may wrap them individually,
- * since your Connect "server" is really just
- * a JavaScript `Function`.
- *
- * var connect = require('connect')
- * , http = require('http')
- * , https = require('https');
- *
- * var app = connect();
- *
- * http.createServer(app).listen(80);
- * https.createServer(options, app).listen(443);
- */
- listen(
- port: number,
- hostname?: string,
- backlog?: number,
- callback?: Function
- ): http.Server
- listen(port: number, hostname?: string, callback?: Function): http.Server
- listen(path: string, callback?: Function): http.Server
- listen(handle: any, listeningListener?: Function): http.Server
- }
-}
-
-export declare interface ConnectedPayload {
- type: 'connected'
-}
-
-/**
- * https://github.com/expressjs/cors#configuration-options
- */
-export declare interface CorsOptions {
- origin?: CorsOrigin | ((origin: string, cb: (err: Error, origins: CorsOrigin) => void) => void);
- methods?: string | string[];
- allowedHeaders?: string | string[];
- exposedHeaders?: string | string[];
- credentials?: boolean;
- maxAge?: number;
- preflightContinue?: boolean;
- optionsSuccessStatus?: number;
-}
-
-export declare type CorsOrigin = boolean | string | RegExp | (string | RegExp)[];
-
-export declare function createLogger(level?: LogLevel, options?: LoggerOptions): Logger;
-
-export declare function createServer(inlineConfig?: InlineConfig): Promise<ViteDevServer>;
-
-export declare interface CSSModulesOptions {
- getJSON?: (cssFileName: string, json: Record<string, string>, outputFileName: string) => void;
- scopeBehaviour?: 'global' | 'local';
- globalModulePaths?: RegExp[];
- generateScopedName?: string | ((name: string, filename: string, css: string) => string);
- hashPrefix?: string;
- /**
- * default: null
- */
- localsConvention?: 'camelCase' | 'camelCaseOnly' | 'dashes' | 'dashesOnly' | null;
-}
-
-export declare interface CSSOptions {
- /**
- * https://github.com/css-modules/postcss-modules
- */
- modules?: CSSModulesOptions | false;
- preprocessorOptions?: Record<string, any>;
- postcss?: string | (Postcss.ProcessOptions & {
- plugins?: Postcss.Plugin[];
- });
-}
-
-export declare interface CustomPayload {
- type: 'custom'
- event: string
- data?: any
-}
-
-/**
- * Type helper to make it easier to use vite.config.ts
- * accepts a direct {@link UserConfig} object, or a function that returns it.
- * The function receives a {@link ConfigEnv} object that exposes two properties:
- * `command` (either `'build'` or `'serve'`), and `mode`.
- */
-export declare function defineConfig(config: UserConfigExport): UserConfigExport;
-
-export declare interface DepOptimizationMetadata {
- /**
- * The main hash is determined by user config and dependency lockfiles.
- * This is checked on server startup to avoid unnecessary re-bundles.
- */
- hash: string;
- /**
- * The browser hash is determined by the main hash plus additional dependencies
- * discovered at runtime. This is used to invalidate browser requests to
- * optimized deps.
- */
- browserHash: string;
- optimized: Record<string, {
- file: string;
- src: string;
- needsInterop: boolean;
- }>;
-}
-
-export declare interface DepOptimizationOptions {
- /**
- * By default, Vite will crawl your index.html to detect dependencies that
- * need to be pre-bundled. If build.rollupOptions.input is specified, Vite
- * will crawl those entry points instead.
- *
- * If neither of these fit your needs, you can specify custom entries using
- * this option - the value should be a fast-glob pattern or array of patterns
- * (https://github.com/mrmlnc/fast-glob#basic-syntax) that are relative from
- * vite project root. This will overwrite default entries inference.
- */
- entries?: string | string[];
- /**
- * Force optimize listed dependencies (must be resolvable import paths,
- * cannot be globs).
- */
- include?: string[];
- /**
- * Do not optimize these dependencies (must be resolvable import paths,
- * cannot be globs).
- */
- exclude?: string[];
- /**
- * Options to pass to esbuild during the dep scanning and optimization
- *
- * Certain options are omitted since changing them would not be compatible
- * with Vite's dep optimization.
- *
- * - `external` is also omitted, use Vite's `optimizeDeps.exclude` option
- * - `plugins` are merged with Vite's dep plugin
- * - `keepNames` takes precedence over the deprecated `optimizeDeps.keepNames`
- *
- * https://esbuild.github.io/api
- */
- esbuildOptions?: Omit<BuildOptions_2, 'bundle' | 'entryPoints' | 'external' | 'write' | 'watch' | 'outdir' | 'outfile' | 'outbase' | 'outExtension' | 'metafile'>;
- /**
- * @deprecated use `esbuildOptions.keepNames`
- */
- keepNames?: boolean;
-}
-
-export declare interface ErrorPayload {
- type: 'error'
- err: {
- [name: string]: any
- message: string
- stack: string
- id?: string
- frame?: string
- plugin?: string
- pluginCode?: string
- loc?: {
- file?: string
- line: number
- column: number
- }
- }
-}
-
-export declare interface ESBuildOptions extends EsbuildTransformOptions {
- include?: string | RegExp | string[] | RegExp[];
- exclude?: string | RegExp | string[] | RegExp[];
- jsxInject?: string;
-}
-
-export { EsbuildTransformOptions }
-
-export declare type ESBuildTransformResult = Omit<TransformResult_2, 'map'> & {
- map: SourceMap;
-};
-
-export declare interface FileSystemServeOptions {
- /**
- * Strictly restrict file accessing outside of allowing paths.
- *
- * Set to `false` to disable the warning
- * Default to false at this moment, will enabled by default in the future versions.
- *
- * @experimental
- * @default undefined
- */
- strict?: boolean | undefined;
- /**
- * Restrict accessing files outside the allowed directories.
- *
- * Accepts absolute path or a path relative to project root.
- * Will try to search up for workspace root by default.
- *
- * @experimental
- */
- allow?: string[];
-}
-
-export declare interface FSWatcher extends fs.FSWatcher {
- options: WatchOptions
-
- /**
- * Constructs a new FSWatcher instance with optional WatchOptions parameter.
- */
- (options?: WatchOptions): void
-
- /**
- * Add files, directories, or glob patterns for tracking. Takes an array of strings or just one
- * string.
- */
- add(paths: string | ReadonlyArray<string>): void
-
- /**
- * Stop watching files, directories, or glob patterns. Takes an array of strings or just one
- * string.
- */
- unwatch(paths: string | ReadonlyArray<string>): void
-
- /**
- * Returns an object representing all the paths on the file system being watched by this
- * `FSWatcher` instance. The object's keys are all the directories (using absolute paths unless
- * the `cwd` option was used), and the values are arrays of the names of the items contained in
- * each directory.
- */
- getWatched(): {
- [directory: string]: string[]
- }
-
- /**
- * Removes all listeners from watched files.
- */
- close(): Promise<void>
-
- on(
- event: 'add' | 'addDir' | 'change',
- listener: (path: string, stats?: fs.Stats) => void
- ): this
-
- on(
- event: 'all',
- listener: (
- eventName: 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir',
- path: string,
- stats?: fs.Stats
- ) => void
- ): this
-
- /**
- * Error occurred
- */
- on(event: 'error', listener: (error: Error) => void): this
-
- /**
- * Exposes the native Node `fs.FSWatcher events`
- */
- on(
- event: 'raw',
- listener: (eventName: string, path: string, details: any) => void
- ): this
-
- /**
- * Fires when the initial scan is complete
- */
- on(event: 'ready', listener: () => void): this
-
- on(event: 'unlink' | 'unlinkDir', listener: (path: string) => void): this
-
- on(event: string, listener: (...args: any[]) => void): this
-}
-
-export declare interface FullReloadPayload {
- type: 'full-reload'
- path?: string
-}
-
-export declare interface HmrContext {
- file: string;
- timestamp: number;
- modules: Array<ModuleNode>;
- read: () => string | Promise<string>;
- server: ViteDevServer;
-}
-
-export declare interface HmrOptions {
- protocol?: string;
- host?: string;
- port?: number;
- clientPort?: number;
- path?: string;
- timeout?: number;
- overlay?: boolean;
- server?: Server;
-}
-
-export declare type HMRPayload =
-| ConnectedPayload
-| UpdatePayload
-| FullReloadPayload
-| CustomPayload
-| ErrorPayload
-| PrunePayload
-
-export declare interface HtmlTagDescriptor {
- tag: string;
- attrs?: Record<string, string | boolean | undefined>;
- children?: string | HtmlTagDescriptor[];
- /**
- * default: 'head-prepend'
- */
- injectTo?: 'head' | 'body' | 'head-prepend' | 'body-prepend';
-}
-
-export declare namespace HttpProxy {
- export type ProxyTarget = ProxyTargetUrl | ProxyTargetDetailed
-
- export type ProxyTargetUrl = string | Partial<url.Url>
-
- export interface ProxyTargetDetailed {
- host: string
- port: number
- protocol?: string
- hostname?: string
- socketPath?: string
- key?: string
- passphrase?: string
- pfx?: Buffer | string
- cert?: string
- ca?: string
- ciphers?: string
- secureProtocol?: string
- }
-
- export type ErrorCallback = (
- err: Error,
- req: http.IncomingMessage,
- res: http.ServerResponse,
- target?: ProxyTargetUrl
- ) => void
-
- export class Server extends events.EventEmitter {
- /**
- * Creates the proxy server with specified options.
- * @param options - Config object passed to the proxy
- */
- constructor(options?: ServerOptions)
-
- /**
- * Used for proxying regular HTTP(S) requests
- * @param req - Client request.
- * @param res - Client response.
- * @param options - Additionnal options.
- */
- web(
- req: http.IncomingMessage,
- res: http.ServerResponse,
- options?: ServerOptions,
- callback?: ErrorCallback
- ): void
-
- /**
- * Used for proxying regular HTTP(S) requests
- * @param req - Client request.
- * @param socket - Client socket.
- * @param head - Client head.
- * @param options - Additional options.
- */
- ws(
- req: http.IncomingMessage,
- socket: unknown,
- head: unknown,
- options?: ServerOptions,
- callback?: ErrorCallback
- ): void
-
- /**
- * A function that wraps the object in a webserver, for your convenience
- * @param port - Port to listen on
- */
- listen(port: number): Server
-
- /**
- * A function that closes the inner webserver and stops listening on given port
- */
- close(callback?: () => void): void
-
- /**
- * Creates the proxy server with specified options.
- * @param options - Config object passed to the proxy
- * @returns Proxy object with handlers for `ws` and `web` requests
- */
- static createProxyServer(options?: ServerOptions): Server
-
- /**
- * Creates the proxy server with specified options.
- * @param options - Config object passed to the proxy
- * @returns Proxy object with handlers for `ws` and `web` requests
- */
- static createServer(options?: ServerOptions): Server
-
- /**
- * Creates the proxy server with specified options.
- * @param options - Config object passed to the proxy
- * @returns Proxy object with handlers for `ws` and `web` requests
- */
- static createProxy(options?: ServerOptions): Server
-
- addListener(event: string, listener: () => void): this
- on(event: string, listener: () => void): this
- on(event: 'error', listener: ErrorCallback): this
- on(
- event: 'start',
- listener: (
- req: http.IncomingMessage,
- res: http.ServerResponse,
- target: ProxyTargetUrl
- ) => void
- ): this
- on(
- event: 'proxyReq',
- listener: (
- proxyReq: http.ClientRequest,
- req: http.IncomingMessage,
- res: http.ServerResponse,
- options: ServerOptions
- ) => void
- ): this
- on(
- event: 'proxyRes',
- listener: (
- proxyRes: http.IncomingMessage,
- req: http.IncomingMessage,
- res: http.ServerResponse
- ) => void
- ): this
- on(
- event: 'proxyReqWs',
- listener: (
- proxyReq: http.ClientRequest,
- req: http.IncomingMessage,
- socket: net.Socket,
- options: ServerOptions,
- head: any
- ) => void
- ): this
- on(
- event: 'econnreset',
- listener: (
- err: Error,
- req: http.IncomingMessage,
- res: http.ServerResponse,
- target: ProxyTargetUrl
- ) => void
- ): this
- on(
- event: 'end',
- listener: (
- req: http.IncomingMessage,
- res: http.ServerResponse,
- proxyRes: http.IncomingMessage
- ) => void
- ): this
- on(
- event: 'close',
- listener: (
- proxyRes: http.IncomingMessage,
- proxySocket: net.Socket,
- proxyHead: any
- ) => void
- ): this
-
- once(event: string, listener: () => void): this
- removeListener(event: string, listener: () => void): this
- removeAllListeners(event?: string): this
- getMaxListeners(): number
- setMaxListeners(n: number): this
- listeners(event: string): Array<() => void>
- emit(event: string, ...args: any[]): boolean
- listenerCount(type: string): number
- }
-
- export interface ServerOptions {
- /** URL string to be parsed with the url module. */
- target?: ProxyTarget
- /** URL string to be parsed with the url module. */
- forward?: ProxyTargetUrl
- /** Object to be passed to http(s).request. */
- agent?: any
- /** Object to be passed to https.createServer(). */
- ssl?: any
- /** If you want to proxy websockets. */
- ws?: boolean
- /** Adds x- forward headers. */
- xfwd?: boolean
- /** Verify SSL certificate. */
- secure?: boolean
- /** Explicitly specify if we are proxying to another proxy. */
- toProxy?: boolean
- /** Specify whether you want to prepend the target's path to the proxy path. */
- prependPath?: boolean
- /** Specify whether you want to ignore the proxy path of the incoming request. */
- ignorePath?: boolean
- /** Local interface string to bind for outgoing connections. */
- localAddress?: string
- /** Changes the origin of the host header to the target URL. */
- changeOrigin?: boolean
- /** specify whether you want to keep letter case of response header key */
- preserveHeaderKeyCase?: boolean
- /** Basic authentication i.e. 'user:password' to compute an Authorization header. */
- auth?: string
- /** Rewrites the location hostname on (301 / 302 / 307 / 308) redirects, Default: null. */
- hostRewrite?: string
- /** Rewrites the location host/ port on (301 / 302 / 307 / 308) redirects based on requested host/ port.Default: false. */
- autoRewrite?: boolean
- /** Rewrites the location protocol on (301 / 302 / 307 / 308) redirects to 'http' or 'https'.Default: null. */
- protocolRewrite?: string
- /** rewrites domain of set-cookie headers. */
- cookieDomainRewrite?: false | string | { [oldDomain: string]: string }
- /** rewrites path of set-cookie headers. Default: false */
- cookiePathRewrite?: false | string | { [oldPath: string]: string }
- /** object with extra headers to be added to target requests. */
- headers?: { [header: string]: string }
- /** Timeout (in milliseconds) when proxy receives no response from target. Default: 120000 (2 minutes) */
- proxyTimeout?: number
- /** Timeout (in milliseconds) for incoming requests */
- timeout?: number
- /** Specify whether you want to follow redirects. Default: false */
- followRedirects?: boolean
- /** If set to true, none of the webOutgoing passes are called and it's your responsibility to appropriately return the response by listening and acting on the proxyRes event */
- selfHandleResponse?: boolean
- /** Buffer */
- buffer?: stream.Stream
- }
-}
-
-export declare type IndexHtmlTransform = IndexHtmlTransformHook | {
- enforce?: 'pre' | 'post';
- transform: IndexHtmlTransformHook;
-};
-
-export declare interface IndexHtmlTransformContext {
- /**
- * public path when served
- */
- path: string;
- /**
- * filename on disk
- */
- filename: string;
- server?: ViteDevServer;
- bundle?: OutputBundle;
- chunk?: OutputChunk;
- originalUrl?: string;
-}
-
-export declare type IndexHtmlTransformHook = (html: string, ctx: IndexHtmlTransformContext) => IndexHtmlTransformResult | void | Promise<IndexHtmlTransformResult | void>;
-
-export declare type IndexHtmlTransformResult = string | HtmlTagDescriptor[] | {
- html: string;
- tags: HtmlTagDescriptor[];
-};
-
-export declare interface InlineConfig extends UserConfig {
- configFile?: string | false;
- envFile?: false;
-}
-
-export declare interface InternalResolveOptions extends ResolveOptions {
- root: string;
- isBuild: boolean;
- isProduction: boolean;
- ssrConfig?: SSROptions;
- /**
- * src code mode also attempts the following:
- * - resolving /xxx as URLs
- * - resolving bare imports from optimized deps
- */
- asSrc?: boolean;
- tryIndex?: boolean;
- tryPrefix?: string;
- skipPackageJson?: boolean;
- preferRelative?: boolean;
- isRequire?: boolean;
-}
-
-export declare interface JsonOptions {
- /**
- * Generate a named export for every property of the JSON object
- * @default true
- */
- namedExports?: boolean;
- /**
- * Generate performant output as JSON.parse("stringified").
- * Enabling this will disable namedExports.
- * @default false
- */
- stringify?: boolean;
-}
-
-export declare type LibraryFormats = 'es' | 'cjs' | 'umd' | 'iife';
-
-export declare interface LibraryOptions {
- entry: string;
- name?: string;
- formats?: LibraryFormats[];
- fileName?: string | ((format: ModuleFormat) => string);
-}
-
-export declare function loadConfigFromFile(configEnv: ConfigEnv, configFile?: string, configRoot?: string, logLevel?: LogLevel): Promise<{
- path: string;
- config: UserConfig;
- dependencies: string[];
-} | null>;
-
-export declare function loadEnv(mode: string, envDir: string, prefixes?: string | string[]): Record<string, string>;
-
-export declare interface LogErrorOptions extends LogOptions {
- error?: Error | RollupError | null;
-}
-
-export declare interface Logger {
- info(msg: string, options?: LogOptions): void;
- warn(msg: string, options?: LogOptions): void;
- warnOnce(msg: string, options?: LogOptions): void;
- error(msg: string, options?: LogErrorOptions): void;
- clearScreen(type: LogType): void;
- hasErrorLogged(error: Error | RollupError): boolean;
- hasWarned: boolean;
-}
-
-export declare interface LoggerOptions {
- prefix?: string;
- allowClearScreen?: boolean;
- customLogger?: Logger;
-}
-
-export declare type LogLevel = LogType | 'silent';
-
-export declare interface LogOptions {
- clear?: boolean;
- timestamp?: boolean;
-}
-
-export declare type LogType = 'error' | 'warn' | 'info';
-
-export declare type Manifest = Record<string, ManifestChunk>;
-
-export declare interface ManifestChunk {
- src?: string;
- file: string;
- css?: string[];
- assets?: string[];
- isEntry?: boolean;
- isDynamicEntry?: boolean;
- imports?: string[];
- dynamicImports?: string[];
-}
-
-export declare type Matcher = AnymatchPattern | AnymatchPattern[]
-
-export declare function mergeConfig(a: Record<string, any>, b: Record<string, any>, isRoot?: boolean): Record<string, any>;
-
-export declare class ModuleGraph {
- urlToModuleMap: Map<string, ModuleNode>;
- idToModuleMap: Map<string, ModuleNode>;
- fileToModulesMap: Map<string, Set<ModuleNode>>;
- safeModulesPath: Set<string>;
- container: PluginContainer;
- constructor(container: PluginContainer);
- getModuleByUrl(rawUrl: string): Promise<ModuleNode | undefined>;
- getModuleById(id: string): ModuleNode | undefined;
- getModulesByFile(file: string): Set<ModuleNode> | undefined;
- onFileChange(file: string): void;
- invalidateModule(mod: ModuleNode, seen?: Set<ModuleNode>): void;
- invalidateAll(): void;
- /**
- * Update the module graph based on a module's updated imports information
- * If there are dependencies that no longer have any importers, they are
- * returned as a Set.
- */
- updateModuleInfo(mod: ModuleNode, importedModules: Set<string | ModuleNode>, acceptedModules: Set<string | ModuleNode>, isSelfAccepting: boolean): Promise<Set<ModuleNode> | undefined>;
- ensureEntryFromUrl(rawUrl: string): Promise<ModuleNode>;
- createFileOnlyEntry(file: string): ModuleNode;
- resolveUrl(url: string): Promise<[string, string]>;
-}
-
-export declare class ModuleNode {
- /**
- * Public served url path, starts with /
- */
- url: string;
- /**
- * Resolved file system path + query
- */
- id: string | null;
- file: string | null;
- type: 'js' | 'css';
- importers: Set<ModuleNode>;
- importedModules: Set<ModuleNode>;
- acceptedHmrDeps: Set<ModuleNode>;
- isSelfAccepting: boolean;
- transformResult: TransformResult | null;
- ssrTransformResult: TransformResult | null;
- ssrModule: Record<string, any> | null;
- lastHMRTimestamp: number;
- constructor(url: string);
-}
-
-export declare function normalizePath(id: string): string;
-
-export declare function optimizeDeps(config: ResolvedConfig, force?: boolean | undefined, asCommand?: boolean, newDeps?: Record<string, string>, // missing imports encountered after server has started
-ssr?: boolean): Promise<DepOptimizationMetadata | null>;
-
-export declare interface PackageData {
- dir: string;
- hasSideEffects: (id: string) => boolean;
- webResolvedImports: Record<string, string | undefined>;
- nodeResolvedImports: Record<string, string | undefined>;
- setResolvedCache: (key: string, entry: string, targetWeb: boolean) => void;
- getResolvedCache: (key: string, targetWeb: boolean) => string | undefined;
- data: {
- [field: string]: any;
- version: string;
- main: string;
- module: string;
- browser: string | Record<string, string | false>;
- exports: string | Record<string, any> | string[];
- dependencies: Record<string, string>;
- };
-}
-
-/**
- * Vite plugins extends the Rollup plugin interface with a few extra
- * vite-specific options. A valid vite plugin is also a valid Rollup plugin.
- * On the contrary, a Rollup plugin may or may NOT be a valid vite universal
- * plugin, since some Rollup features do not make sense in an unbundled
- * dev server context. That said, as long as a rollup plugin doesn't have strong
- * coupling between its bundle phase and output phase hooks then it should
- * just work (that means, most of them).
- *
- * By default, the plugins are run during both serve and build. When a plugin
- * is applied during serve, it will only run **non output plugin hooks** (see
- * rollup type definition of {@link rollup#PluginHooks}). You can think of the
- * dev server as only running `const bundle = rollup.rollup()` but never calling
- * `bundle.generate()`.
- *
- * A plugin that expects to have different behavior depending on serve/build can
- * export a factory function that receives the command being run via options.
- *
- * If a plugin should be applied only for server or build, a function format
- * config file can be used to conditional determine the plugins to use.
- */
-export declare interface Plugin extends Plugin_2 {
- /**
- * Enforce plugin invocation tier similar to webpack loaders.
- *
- * Plugin invocation order:
- * - alias resolution
- * - `enforce: 'pre'` plugins
- * - vite core plugins
- * - normal plugins
- * - vite build plugins
- * - `enforce: 'post'` plugins
- * - vite build post plugins
- */
- enforce?: 'pre' | 'post';
- /**
- * Apply the plugin only for serve or build, or on certain conditions.
- */
- apply?: 'serve' | 'build' | ((config: UserConfig, env: ConfigEnv) => boolean);
- /**
- * Modify vite config before it's resolved. The hook can either mutate the
- * passed-in config directly, or return a partial config object that will be
- * deeply merged into existing config.
- *
- * Note: User plugins are resolved before running this hook so injecting other
- * plugins inside the `config` hook will have no effect.
- */
- config?: (config: UserConfig, env: ConfigEnv) => UserConfig | null | void | Promise<UserConfig | null | void>;
- /**
- * Use this hook to read and store the final resolved vite config.
- */
- configResolved?: (config: ResolvedConfig) => void | Promise<void>;
- /**
- * Configure the vite server. The hook receives the {@link ViteDevServer}
- * instance. This can also be used to store a reference to the server
- * for use in other hooks.
- *
- * The hooks will be called before internal middlewares are applied. A hook
- * can return a post hook that will be called after internal middlewares
- * are applied. Hook can be async functions and will be called in series.
- */
- configureServer?: ServerHook;
- /**
- * Transform index.html.
- * The hook receives the following arguments:
- *
- * - html: string
- * - ctx?: vite.ServerContext (only present during serve)
- * - bundle?: rollup.OutputBundle (only present during build)
- *
- * It can either return a transformed string, or a list of html tag
- * descriptors that will be injected into the <head> or <body>.
- *
- * By default the transform is applied **after** vite's internal html
- * transform. If you need to apply the transform before vite, use an object:
- * `{ enforce: 'pre', transform: hook }`
- */
- transformIndexHtml?: IndexHtmlTransform;
- /**
- * Perform custom handling of HMR updates.
- * The handler receives a context containing changed filename, timestamp, a
- * list of modules affected by the file change, and the dev server instance.
- *
- * - The hook can return a filtered list of modules to narrow down the update.
- * e.g. for a Vue SFC, we can narrow down the part to update by comparing
- * the descriptors.
- *
- * - The hook can also return an empty array and then perform custom updates
- * by sending a custom hmr payload via server.ws.send().
- *
- * - If the hook doesn't return a value, the hmr update will be performed as
- * normal.
- */
- handleHotUpdate?(ctx: HmrContext): Array<ModuleNode> | void | Promise<Array<ModuleNode> | void>;
- /**
- * extend hooks with ssr flag
- */
- resolveId?(this: PluginContext, source: string, importer: string | undefined, options: {
- custom?: CustomPluginOptions;
- }, ssr?: boolean): Promise<ResolveIdResult> | ResolveIdResult;
- load?(this: PluginContext, id: string, ssr?: boolean): Promise<LoadResult> | LoadResult;
- transform?(this: TransformPluginContext, code: string, id: string, ssr?: boolean): Promise<TransformResult_3> | TransformResult_3;
-}
-
-export declare interface PluginContainer {
- options: InputOptions;
- buildStart(options: InputOptions): Promise<void>;
- resolveId(id: string, importer?: string, skip?: Set<Plugin>, ssr?: boolean): Promise<PartialResolvedId | null>;
- transform(code: string, id: string, inMap?: SourceDescription['map'], ssr?: boolean): Promise<SourceDescription | null>;
- load(id: string, ssr?: boolean): Promise<LoadResult | null>;
- close(): Promise<void>;
-}
-
-export declare type PluginOption = Plugin | false | null | undefined;
-
-/**
- * Starts the Vite server in preview mode, to simulate a production deployment
- * @param config - the resolved Vite config
- * @param serverOptions - what host and port to use
- * @experimental
- */
-export declare function preview(config: ResolvedConfig, serverOptions: Pick<ServerOptions, 'port' | 'host'>): Promise<Server>;
-
-export declare function printHttpServerUrls(server: Server_3, config: ResolvedConfig): void;
-
-export declare interface ProxyOptions extends HttpProxy.ServerOptions {
- /**
- * rewrite path
- */
- rewrite?: (path: string) => string;
- /**
- * configure the proxy server (e.g. listen to events)
- */
- configure?: (proxy: HttpProxy.Server, options: ProxyOptions) => void;
- /**
- * webpack-dev-server style bypass function
- */
- bypass?: (req: http.IncomingMessage, res: http.ServerResponse, options: ProxyOptions) => void | null | undefined | false | string;
-}
-
-export declare interface PrunePayload {
- type: 'prune'
- paths: string[]
-}
-
-export declare function resolveConfig(inlineConfig: InlineConfig, command: 'build' | 'serve', defaultMode?: string): Promise<ResolvedConfig>;
-
-export declare type ResolvedBuildOptions = Required<Omit<BuildOptions, 'base' | 'cleanCssOptions' | 'polyfillDynamicImport' | 'brotliSize'>>;
-
-export declare type ResolvedConfig = Readonly<Omit<UserConfig, 'plugins' | 'alias' | 'dedupe' | 'assetsInclude' | 'optimizeDeps'> & {
- configFile: string | undefined;
- configFileDependencies: string[];
- inlineConfig: InlineConfig;
- root: string;
- base: string;
- publicDir: string;
- command: 'build' | 'serve';
- mode: string;
- isProduction: boolean;
- env: Record<string, any>;
- resolve: ResolveOptions & {
- alias: Alias[];
- };
- plugins: readonly Plugin[];
- server: ResolvedServerOptions;
- build: ResolvedBuildOptions;
- assetsInclude: (file: string) => boolean;
- logger: Logger;
- createResolver: (options?: Partial<InternalResolveOptions>) => ResolveFn;
- optimizeDeps: Omit<DepOptimizationOptions, 'keepNames'>;
-}>;
-
-export declare interface ResolvedServerOptions extends ServerOptions {
- fs: Required<FileSystemServeOptions>;
-}
-
-export declare function resolveEnvPrefix({ envPrefix }: UserConfig): string[];
-
-export declare type ResolveFn = (id: string, importer?: string, aliasOnly?: boolean, ssr?: boolean) => Promise<string | undefined>;
-
-export declare interface ResolveOptions {
- mainFields?: string[];
- conditions?: string[];
- extensions?: string[];
- dedupe?: string[];
- preserveSymlinks?: boolean;
-}
-
-export declare function resolvePackageData(id: string, basedir: string, preserveSymlinks?: boolean): PackageData | undefined;
-
-export declare function resolvePackageEntry(id: string, { dir, data, setResolvedCache, getResolvedCache }: PackageData, options: InternalResolveOptions, targetWeb: boolean, preserveSymlinks?: boolean): string | undefined;
-
-export declare type ResolverFunction = PluginHooks['resolveId']
-
-export declare interface ResolverObject {
- buildStart?: PluginHooks['buildStart']
- resolveId: ResolverFunction
-}
-
-/**
- * https://github.com/rollup/plugins/blob/master/packages/commonjs/types/index.d.ts
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file at
- * https://github.com/rollup/plugins/blob/master/LICENSE
- */
-export declare interface RollupCommonJSOptions {
- /**
- * A minimatch pattern, or array of patterns, which specifies the files in
- * the build the plugin should operate on. By default, all files with
- * extension `".cjs"` or those in `extensions` are included, but you can narrow
- * this list by only including specific files. These files will be analyzed
- * and transpiled if either the analysis does not find ES module specific
- * statements or `transformMixedEsModules` is `true`.
- * @default undefined
- */
- include?: string | RegExp | readonly (string | RegExp)[]
- /**
- * A minimatch pattern, or array of patterns, which specifies the files in
- * the build the plugin should _ignore_. By default, all files with
- * extensions other than those in `extensions` or `".cjs"` are ignored, but you
- * can exclude additional files. See also the `include` option.
- * @default undefined
- */
- exclude?: string | RegExp | readonly (string | RegExp)[]
- /**
- * For extensionless imports, search for extensions other than .js in the
- * order specified. Note that you need to make sure that non-JavaScript files
- * are transpiled by another plugin first.
- * @default [ '.js' ]
- */
- extensions?: ReadonlyArray<string>
- /**
- * If true then uses of `global` won't be dealt with by this plugin
- * @default false
- */
- ignoreGlobal?: boolean
- /**
- * If false, skips source map generation for CommonJS modules. This will improve performance.
- * @default true
- */
- sourceMap?: boolean
- /**
- * Some `require` calls cannot be resolved statically to be translated to
- * imports.
- * When this option is set to `false`, the generated code will either
- * directly throw an error when such a call is encountered or, when
- * `dynamicRequireTargets` is used, when such a call cannot be resolved with a
- * configured dynamic require target.
- * Setting this option to `true` will instead leave the `require` call in the
- * code or use it as a fallback for `dynamicRequireTargets`.
- * @default false
- */
- ignoreDynamicRequires?: boolean
- /**
- * Instructs the plugin whether to enable mixed module transformations. This
- * is useful in scenarios with modules that contain a mix of ES `import`
- * statements and CommonJS `require` expressions. Set to `true` if `require`
- * calls should be transformed to imports in mixed modules, or `false` if the
- * `require` expressions should survive the transformation. The latter can be
- * important if the code contains environment detection, or you are coding
- * for an environment with special treatment for `require` calls such as
- * ElectronJS. See also the `ignore` option.
- * @default false
- */
- transformMixedEsModules?: boolean
- /**
- * Sometimes you have to leave require statements unconverted. Pass an array
- * containing the IDs or a `id => boolean` function.
- * @default []
- */
- ignore?: ReadonlyArray<string> | ((id: string) => boolean)
- /**
- * Controls how to render imports from external dependencies. By default,
- * this plugin assumes that all external dependencies are CommonJS. This
- * means they are rendered as default imports to be compatible with e.g.
- * NodeJS where ES modules can only import a default export from a CommonJS
- * dependency.
- *
- * If you set `esmExternals` to `true`, this plugins assumes that all
- * external dependencies are ES modules and respect the
- * `requireReturnsDefault` option. If that option is not set, they will be
- * rendered as namespace imports.
- *
- * You can also supply an array of ids to be treated as ES modules, or a
- * function that will be passed each external id to determine if it is an ES
- * module.
- * @default false
- */
- esmExternals?: boolean | ReadonlyArray<string> | ((id: string) => boolean)
- /**
- * Controls what is returned when requiring an ES module from a CommonJS file.
- * When using the `esmExternals` option, this will also apply to external
- * modules. By default, this plugin will render those imports as namespace
- * imports i.e.
- *
- * ```js
- * // input
- * const foo = require('foo');
- *
- * // output
- * import * as foo from 'foo';
- * ```
- *
- * However there are some situations where this may not be desired.
- * For these situations, you can change Rollup's behaviour either globally or
- * per module. To change it globally, set the `requireReturnsDefault` option
- * to one of the following values:
- *
- * - `false`: This is the default, requiring an ES module returns its
- * namespace. This is the only option that will also add a marker
- * `__esModule: true` to the namespace to support interop patterns in
- * CommonJS modules that are transpiled ES modules.
- * - `"namespace"`: Like `false`, requiring an ES module returns its
- * namespace, but the plugin does not add the `__esModule` marker and thus
- * creates more efficient code. For external dependencies when using
- * `esmExternals: true`, no additional interop code is generated.
- * - `"auto"`: This is complementary to how `output.exports: "auto"` works in
- * Rollup: If a module has a default export and no named exports, requiring
- * that module returns the default export. In all other cases, the namespace
- * is returned. For external dependencies when using `esmExternals: true`, a
- * corresponding interop helper is added.
- * - `"preferred"`: If a module has a default export, requiring that module
- * always returns the default export, no matter whether additional named
- * exports exist. This is similar to how previous versions of this plugin
- * worked. Again for external dependencies when using `esmExternals: true`,
- * an interop helper is added.
- * - `true`: This will always try to return the default export on require
- * without checking if it actually exists. This can throw at build time if
- * there is no default export. This is how external dependencies are handled
- * when `esmExternals` is not used. The advantage over the other options is
- * that, like `false`, this does not add an interop helper for external
- * dependencies, keeping the code lean.
- *
- * To change this for individual modules, you can supply a function for
- * `requireReturnsDefault` instead. This function will then be called once for
- * each required ES module or external dependency with the corresponding id
- * and allows you to return different values for different modules.
- * @default false
- */
- requireReturnsDefault?:
- | boolean
- | 'auto'
- | 'preferred'
- | 'namespace'
- | ((id: string) => boolean | 'auto' | 'preferred' | 'namespace')
- /**
- * Some modules contain dynamic `require` calls, or require modules that
- * contain circular dependencies, which are not handled well by static
- * imports. Including those modules as `dynamicRequireTargets` will simulate a
- * CommonJS (NodeJS-like) environment for them with support for dynamic and
- * circular dependencies.
- *
- * Note: In extreme cases, this feature may result in some paths being
- * rendered as absolute in the final bundle. The plugin tries to avoid
- * exposing paths from the local machine, but if you are `dynamicRequirePaths`
- * with paths that are far away from your project's folder, that may require
- * replacing strings like `"/Users/John/Desktop/foo-project/"` -\> `"/"`.
- */
- dynamicRequireTargets?: string | ReadonlyArray<string>
-}
-
-export declare interface RollupDynamicImportVarsOptions {
- /**
- * Files to include in this plugin (default all).
- * @default []
- */
- include?: string | RegExp | (string | RegExp)[]
- /**
- * Files to exclude in this plugin (default none).
- * @default []
- */
- exclude?: string | RegExp | (string | RegExp)[]
- /**
- * By default, the plugin quits the build process when it encounters an error. If you set this option to true, it will throw a warning instead and leave the code untouched.
- * @default false
- */
- warnOnError?: boolean
-}
-
-/**
- * Search up for the nearest workspace root
- */
-export declare function searchForWorkspaceRoot(current: string, root?: string): string;
-
-export declare function send(req: IncomingMessage, res: ServerResponse, content: string | Buffer, type: string, etag?: string, cacheControl?: string, map?: SourceMap | null): void;
-
-export declare type ServerHook = (server: ViteDevServer) => (() => void) | void | Promise<(() => void) | void>;
-
-export declare interface ServerOptions {
- host?: string | boolean;
- port?: number;
- /**
- * Enable TLS + HTTP/2.
- * Note: this downgrades to TLS only when the proxy option is also used.
- */
- https?: boolean | https.ServerOptions;
- /**
- * Open browser window on startup
- */
- open?: boolean | string;
- /**
- * Force dep pre-optimization regardless of whether deps have changed.
- */
- force?: boolean;
- /**
- * Configure HMR-specific options (port, host, path & protocol)
- */
- hmr?: HmrOptions | boolean;
- /**
- * chokidar watch options
- * https://github.com/paulmillr/chokidar#api
- */
- watch?: WatchOptions;
- /**
- * Configure custom proxy rules for the dev server. Expects an object
- * of `{ key: options }` pairs.
- * Uses [`http-proxy`](https://github.com/http-party/node-http-proxy).
- * Full options [here](https://github.com/http-party/node-http-proxy#options).
- *
- * Example `vite.config.js`:
- * ``` js
- * module.exports = {
- * proxy: {
- * // string shorthand
- * '/foo': 'http://localhost:4567/foo',
- * // with options
- * '/api': {
- * target: 'http://jsonplaceholder.typicode.com',
- * changeOrigin: true,
- * rewrite: path => path.replace(/^\/api/, '')
- * }
- * }
- * }
- * ```
- */
- proxy?: Record<string, string | ProxyOptions>;
- /**
- * Configure CORS for the dev server.
- * Uses https://github.com/expressjs/cors.
- * Set to `true` to allow all methods from any origin, or configure separately
- * using an object.
- */
- cors?: CorsOptions | boolean;
- /**
- * If enabled, vite will exit if specified port is already in use
- */
- strictPort?: boolean;
- /**
- * Create Vite dev server to be used as a middleware in an existing server
- */
- middlewareMode?: boolean | 'html' | 'ssr';
- /**
- * Prepend this folder to http requests, for use when proxying vite as a subfolder
- * Should start and end with the `/` character
- */
- base?: string;
- /**
- * Options for files served via '/\@fs/'.
- */
- fs?: FileSystemServeOptions;
- /**
- * Origin for the generated asset URLs.
- */
- origin?: string;
-}
-
-export declare function sortUserPlugins(plugins: (Plugin | Plugin[])[] | undefined): [Plugin[], Plugin[], Plugin[]];
-
-export declare interface SSROptions {
- external?: string[];
- noExternal?: string | RegExp | (string | RegExp)[] | true;
- /**
- * Define the target for the ssr build. The browser field in package.json
- * is ignored for node but used if webworker is the target
- * Default: 'node'
- */
- target?: SSRTarget;
-}
-
-export declare type SSRTarget = 'node' | 'webworker';
-
-export declare namespace Terser {
- export type ECMA = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020
-
- export interface ParseOptions {
- bare_returns?: boolean
- ecma?: ECMA
- html5_comments?: boolean
- shebang?: boolean
- }
-
- export interface CompressOptions {
- arguments?: boolean
- arrows?: boolean
- booleans_as_integers?: boolean
- booleans?: boolean
- collapse_vars?: boolean
- comparisons?: boolean
- computed_props?: boolean
- conditionals?: boolean
- dead_code?: boolean
- defaults?: boolean
- directives?: boolean
- drop_console?: boolean
- drop_debugger?: boolean
- ecma?: ECMA
- evaluate?: boolean
- expression?: boolean
- global_defs?: object
- hoist_funs?: boolean
- hoist_props?: boolean
- hoist_vars?: boolean
- ie8?: boolean
- if_return?: boolean
- inline?: boolean | InlineFunctions
- join_vars?: boolean
- keep_classnames?: boolean | RegExp
- keep_fargs?: boolean
- keep_fnames?: boolean | RegExp
- keep_infinity?: boolean
- loops?: boolean
- module?: boolean
- negate_iife?: boolean
- passes?: number
- properties?: boolean
- pure_funcs?: string[]
- pure_getters?: boolean | 'strict'
- reduce_funcs?: boolean
- reduce_vars?: boolean
- sequences?: boolean | number
- side_effects?: boolean
- switches?: boolean
- toplevel?: boolean
- top_retain?: null | string | string[] | RegExp
- typeofs?: boolean
- unsafe_arrows?: boolean
- unsafe?: boolean
- unsafe_comps?: boolean
- unsafe_Function?: boolean
- unsafe_math?: boolean
- unsafe_symbols?: boolean
- unsafe_methods?: boolean
- unsafe_proto?: boolean
- unsafe_regexp?: boolean
- unsafe_undefined?: boolean
- unused?: boolean
- }
-
- export enum InlineFunctions {
- Disabled = 0,
- SimpleFunctions = 1,
- WithArguments = 2,
- WithArgumentsAndVariables = 3
- }
-
- export interface MangleOptions {
- eval?: boolean
- keep_classnames?: boolean | RegExp
- keep_fnames?: boolean | RegExp
- module?: boolean
- properties?: boolean | ManglePropertiesOptions
- reserved?: string[]
- safari10?: boolean
- toplevel?: boolean
- }
-
- export interface ManglePropertiesOptions {
- builtins?: boolean
- debug?: boolean
- keep_quoted?: boolean | 'strict'
- regex?: RegExp | string
- reserved?: string[]
- }
-
- export interface FormatOptions {
- ascii_only?: boolean
- beautify?: boolean
- braces?: boolean
- comments?:
- | boolean
- | 'all'
- | 'some'
- | RegExp
- | ((
- node: any,
- comment: {
- value: string
- type: 'comment1' | 'comment2' | 'comment3' | 'comment4'
- pos: number
- line: number
- col: number
- }
- ) => boolean)
- ecma?: ECMA
- ie8?: boolean
- indent_level?: number
- indent_start?: number
- inline_script?: boolean
- keep_quoted_props?: boolean
- max_line_len?: number | false
- preamble?: string
- preserve_annotations?: boolean
- quote_keys?: boolean
- quote_style?: OutputQuoteStyle
- safari10?: boolean
- semicolons?: boolean
- shebang?: boolean
- shorthand?: boolean
- source_map?: SourceMapOptions
- webkit?: boolean
- width?: number
- wrap_iife?: boolean
- wrap_func_args?: boolean
- }
-
- export enum OutputQuoteStyle {
- PreferDouble = 0,
- AlwaysSingle = 1,
- AlwaysDouble = 2,
- AlwaysOriginal = 3
- }
-
- export interface MinifyOptions {
- compress?: boolean | CompressOptions
- ecma?: ECMA
- ie8?: boolean
- keep_classnames?: boolean | RegExp
- keep_fnames?: boolean | RegExp
- mangle?: boolean | MangleOptions
- module?: boolean
- nameCache?: object
- format?: FormatOptions
- /** @deprecated use format instead */
- output?: FormatOptions
- parse?: ParseOptions
- safari10?: boolean
- sourceMap?: boolean | SourceMapOptions
- toplevel?: boolean
- }
-
- export interface MinifyOutput {
- code?: string
- map?: object | string
- }
-
- export interface SourceMapOptions {
- /** Source map object, 'inline' or source map file content */
- content?: object | string
- includeSources?: boolean
- filename?: string
- root?: string
- url?: string | 'inline'
- }
-}
-
-export declare interface TransformOptions {
- ssr?: boolean;
- html?: boolean;
-}
-
-export declare interface TransformResult {
- code: string;
- map: SourceMap | null;
- etag?: string;
- deps?: string[];
- dynamicDeps?: string[];
-}
-
-export declare function transformWithEsbuild(code: string, filename: string, options?: EsbuildTransformOptions, inMap?: object): Promise<ESBuildTransformResult>;
-
-export declare interface Update {
- type: 'js-update' | 'css-update'
- path: string
- acceptedPath: string
- timestamp: number
-}
-
-export declare interface UpdatePayload {
- type: 'update'
- updates: Update[]
-}
-
-export declare interface UserConfig {
- /**
- * Project root directory. Can be an absolute path, or a path relative from
- * the location of the config file itself.
- * @default process.cwd()
- */
- root?: string;
- /**
- * Base public path when served in development or production.
- * @default '/'
- */
- base?: string;
- /**
- * Directory to serve as plain static assets. Files in this directory are
- * served and copied to build dist dir as-is without transform. The value
- * can be either an absolute file system path or a path relative to <root>.
- *
- * Set to `false` or an empty string to disable copied static assets to build dist dir.
- * @default 'public'
- */
- publicDir?: string | false;
- /**
- * Directory to save cache files. Files in this directory are pre-bundled
- * deps or some other cache files that generated by vite, which can improve
- * the performance. You can use `--force` flag or manually delete the directory
- * to regenerate the cache files. The value can be either an absolute file
- * system path or a path relative to <root>.
- * @default 'node_modules/.vite'
- */
- cacheDir?: string;
- /**
- * Explicitly set a mode to run in. This will override the default mode for
- * each command, and can be overridden by the command line --mode option.
- */
- mode?: string;
- /**
- * Define global variable replacements.
- * Entries will be defined on `window` during dev and replaced during build.
- */
- define?: Record<string, any>;
- /**
- * Array of vite plugins to use.
- */
- plugins?: (PluginOption | PluginOption[])[];
- /**
- * Configure resolver
- */
- resolve?: ResolveOptions & {
- alias?: AliasOptions;
- };
- /**
- * CSS related options (preprocessors and CSS modules)
- */
- css?: CSSOptions;
- /**
- * JSON loading options
- */
- json?: JsonOptions;
- /**
- * Transform options to pass to esbuild.
- * Or set to `false` to disable esbuild.
- */
- esbuild?: ESBuildOptions | false;
- /**
- * Specify additional picomatch patterns to be treated as static assets.
- */
- assetsInclude?: string | RegExp | (string | RegExp)[];
- /**
- * Server specific options, e.g. host, port, https...
- */
- server?: ServerOptions;
- /**
- * Build specific options
- */
- build?: BuildOptions;
- /**
- * Dep optimization options
- */
- optimizeDeps?: DepOptimizationOptions;
- /* Excluded from this release type: ssr */
- /**
- * Log level.
- * Default: 'info'
- */
- logLevel?: LogLevel;
- /**
- * Custom logger.
- */
- customLogger?: Logger;
- /**
- * Default: true
- */
- clearScreen?: boolean;
- /**
- * Environment files directory. Can be an absolute path, or a path relative from
- * the location of the config file itself.
- * @default root
- */
- envDir?: string;
- /**
- * Env variables starts with `envPrefix` will be exposed to your client source code via import.meta.env.
- * @default 'VITE_'
- */
- envPrefix?: string | string[];
- /**
- * Import aliases
- * @deprecated use `resolve.alias` instead
- */
- alias?: AliasOptions;
- /**
- * Force Vite to always resolve listed dependencies to the same copy (from
- * project root).
- * @deprecated use `resolve.dedupe` instead
- */
- dedupe?: string[];
-}
-
-export declare type UserConfigExport = UserConfig | Promise<UserConfig> | UserConfigFn;
-
-export declare type UserConfigFn = (env: ConfigEnv) => UserConfig | Promise<UserConfig>;
-
-export declare interface ViteDevServer {
- /**
- * The resolved vite config object
- */
- config: ResolvedConfig;
- /**
- * A connect app instance.
- * - Can be used to attach custom middlewares to the dev server.
- * - Can also be used as the handler function of a custom http server
- * or as a middleware in any connect-style Node.js frameworks
- *
- * https://github.com/senchalabs/connect#use-middleware
- */
- middlewares: Connect.Server;
- /**
- * @deprecated use `server.middlewares` instead
- */
- app: Connect.Server;
- /**
- * native Node http server instance
- * will be null in middleware mode
- */
- httpServer: http.Server | null;
- /**
- * chokidar watcher instance
- * https://github.com/paulmillr/chokidar#api
- */
- watcher: FSWatcher;
- /**
- * web socket server with `send(payload)` method
- */
- ws: WebSocketServer;
- /**
- * Rollup plugin container that can run plugin hooks on a given file
- */
- pluginContainer: PluginContainer;
- /**
- * Module graph that tracks the import relationships, url to file mapping
- * and hmr state.
- */
- moduleGraph: ModuleGraph;
- /**
- * Programmatically resolve, load and transform a URL and get the result
- * without going through the http request pipeline.
- */
- transformRequest(url: string, options?: TransformOptions): Promise<TransformResult | null>;
- /**
- * Apply vite built-in HTML transforms and any plugin HTML transforms.
- */
- transformIndexHtml(url: string, html: string, originalUrl?: string): Promise<string>;
- /**
- * Util for transforming a file with esbuild.
- * Can be useful for certain plugins.
- *
- * @deprecated import `transformWithEsbuild` from `vite` instead
- */
- transformWithEsbuild(code: string, filename: string, options?: EsbuildTransformOptions, inMap?: object): Promise<ESBuildTransformResult>;
- /**
- * Load a given URL as an instantiated module for SSR.
- */
- ssrLoadModule(url: string): Promise<Record<string, any>>;
- /**
- * Fix ssr error stacktrace
- */
- ssrFixStacktrace(e: Error): void;
- /**
- * Start the server.
- */
- listen(port?: number, isRestart?: boolean): Promise<ViteDevServer>;
- /**
- * Stop the server.
- */
- close(): Promise<void>;
- /**
- * Print server urls
- */
- printUrls(): void;
- /* Excluded from this release type: _optimizeDepsMetadata */
- /* Excluded from this release type: _ssrExternals */
- /* Excluded from this release type: _globImporters */
- /* Excluded from this release type: _isRunningOptimizer */
- /* Excluded from this release type: _registerMissingImport */
- /* Excluded from this release type: _pendingReload */
- /* Excluded from this release type: _pendingRequests */
-}
-
-export declare interface WatchOptions {
- /**
- * Indicates whether the process should continue to run as long as files are being watched. If
- * set to `false` when using `fsevents` to watch, no more events will be emitted after `ready`,
- * even if the process continues to run.
- */
- persistent?: boolean
-
- /**
- * ([anymatch](https://github.com/micromatch/anymatch)-compatible definition) Defines files/paths to
- * be ignored. The whole relative or absolute path is tested, not just filename. If a function
- * with two arguments is provided, it gets called twice per path - once with a single argument
- * (the path), second time with two arguments (the path and the
- * [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object of that path).
- */
- ignored?: Matcher
-
- /**
- * If set to `false` then `add`/`addDir` events are also emitted for matching paths while
- * instantiating the watching as chokidar discovers these file paths (before the `ready` event).
- */
- ignoreInitial?: boolean
-
- /**
- * When `false`, only the symlinks themselves will be watched for changes instead of following
- * the link references and bubbling events through the link's path.
- */
- followSymlinks?: boolean
-
- /**
- * The base directory from which watch `paths` are to be derived. Paths emitted with events will
- * be relative to this.
- */
- cwd?: string
-
- /**
- * If set to true then the strings passed to .watch() and .add() are treated as literal path
- * names, even if they look like globs. Default: false.
- */
- disableGlobbing?: boolean
-
- /**
- * Whether to use fs.watchFile (backed by polling), or fs.watch. If polling leads to high CPU
- * utilization, consider setting this to `false`. It is typically necessary to **set this to
- * `true` to successfully watch files over a network**, and it may be necessary to successfully
- * watch files in other non-standard situations. Setting to `true` explicitly on OS X overrides
- * the `useFsEvents` default.
- */
- usePolling?: boolean
-
- /**
- * Whether to use the `fsevents` watching interface if available. When set to `true` explicitly
- * and `fsevents` is available this supersedes the `usePolling` setting. When set to `false` on
- * OS X, `usePolling: true` becomes the default.
- */
- useFsEvents?: boolean
-
- /**
- * If relying upon the [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object that
- * may get passed with `add`, `addDir`, and `change` events, set this to `true` to ensure it is
- * provided even in cases where it wasn't already available from the underlying watch events.
- */
- alwaysStat?: boolean
-
- /**
- * If set, limits how many levels of subdirectories will be traversed.
- */
- depth?: number
-
- /**
- * Interval of file system polling.
- */
- interval?: number
-
- /**
- * Interval of file system polling for binary files. ([see list of binary extensions](https://gi
- * thub.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json))
- */
- binaryInterval?: number
-
- /**
- * Indicates whether to watch files that don't have read permissions if possible. If watching
- * fails due to `EPERM` or `EACCES` with this set to `true`, the errors will be suppressed
- * silently.
- */
- ignorePermissionErrors?: boolean
-
- /**
- * `true` if `useFsEvents` and `usePolling` are `false`). Automatically filters out artifacts
- * that occur when using editors that use "atomic writes" instead of writing directly to the
- * source file. If a file is re-added within 100 ms of being deleted, Chokidar emits a `change`
- * event rather than `unlink` then `add`. If the default of 100 ms does not work well for you,
- * you can override it by setting `atomic` to a custom value, in milliseconds.
- */
- atomic?: boolean | number
-
- /**
- * can be set to an object in order to adjust timing params:
- */
- awaitWriteFinish?:
- | {
- /**
- * Amount of time in milliseconds for a file size to remain constant before emitting its event.
- */
- stabilityThreshold?: number
-
- /**
- * File size polling interval.
- */
- pollInterval?: number
- }
- | boolean
-}
-
-export declare namespace WebSocket {
- // WebSocket socket.
- export class WebSocket extends EventEmitter {
- /** The connection is not yet open. */
- static readonly CONNECTING: 0
- /** The connection is open and ready to communicate. */
- static readonly OPEN: 1
- /** The connection is in the process of closing. */
- static readonly CLOSING: 2
- /** The connection is closed. */
- static readonly CLOSED: 3
-
- binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments'
- readonly bufferedAmount: number
- readonly extensions: string
- readonly protocol: string
- /** The current state of the connection */
- readonly readyState:
- | typeof WebSocket.CONNECTING
- | typeof WebSocket.OPEN
- | typeof WebSocket.CLOSING
- | typeof WebSocket.CLOSED
- readonly url: string
-
- /** The connection is not yet open. */
- readonly CONNECTING: 0
- /** The connection is open and ready to communicate. */
- readonly OPEN: 1
- /** The connection is in the process of closing. */
- readonly CLOSING: 2
- /** The connection is closed. */
- readonly CLOSED: 3
-
- onopen: (event: WebSocket.OpenEvent) => void
- onerror: (event: WebSocket.ErrorEvent) => void
- onclose: (event: WebSocket.CloseEvent) => void
- onmessage: (event: WebSocket.MessageEvent) => void
-
- constructor(
- address: string | URL,
- options?: WebSocket.ClientOptions | ClientRequestArgs
- )
- constructor(
- address: string | URL,
- protocols?: string | string[],
- options?: WebSocket.ClientOptions | ClientRequestArgs
- )
-
- close(code?: number, data?: string): void
- ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void
- pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void
- send(data: any, cb?: (err?: Error) => void): void
- send(
- data: any,
- options: {
- mask?: boolean | undefined
- binary?: boolean | undefined
- compress?: boolean | undefined
- fin?: boolean | undefined
- },
- cb?: (err?: Error) => void
- ): void
- terminate(): void
-
- // HTML5 WebSocket events
- addEventListener(
- method: 'message',
- cb: (event: { data: any; type: string; target: WebSocket }) => void,
- options?: WebSocket.EventListenerOptions
- ): void
- addEventListener(
- method: 'close',
- cb: (event: {
- wasClean: boolean
- code: number
- reason: string
- target: WebSocket
- }) => void,
- options?: WebSocket.EventListenerOptions
- ): void
- addEventListener(
- method: 'error',
- cb: (event: {
- error: any
- message: any
- type: string
- target: WebSocket
- }) => void,
- options?: WebSocket.EventListenerOptions
- ): void
- addEventListener(
- method: 'open',
- cb: (event: { target: WebSocket }) => void,
- options?: WebSocket.EventListenerOptions
- ): void
- addEventListener(
- method: string,
- listener: () => void,
- options?: WebSocket.EventListenerOptions
- ): void
-
- removeEventListener(
- method: 'message',
- cb?: (event: { data: any; type: string; target: WebSocket }) => void
- ): void
- removeEventListener(
- method: 'close',
- cb?: (event: {
- wasClean: boolean
- code: number
- reason: string
- target: WebSocket
- }) => void
- ): void
- removeEventListener(
- method: 'error',
- cb?: (event: {
- error: any
- message: any
- type: string
- target: WebSocket
- }) => void
- ): void
- removeEventListener(
- method: 'open',
- cb?: (event: { target: WebSocket }) => void
- ): void
- removeEventListener(method: string, listener?: () => void): void
-
- // Events
- on(
- event: 'close',
- listener: (this: WebSocket, code: number, reason: string) => void
- ): this
- on(event: 'error', listener: (this: WebSocket, err: Error) => void): this
- on(
- event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
- ): this
- on(
- event: 'message',
- listener: (this: WebSocket, data: WebSocket.Data) => void
- ): this
- on(event: 'open', listener: (this: WebSocket) => void): this
- on(
- event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
- ): this
- on(
- event: 'unexpected-response',
- listener: (
- this: WebSocket,
- request: ClientRequest,
- response: IncomingMessage
- ) => void
- ): this
- on(
- event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
- ): this
-
- once(
- event: 'close',
- listener: (this: WebSocket, code: number, reason: string) => void
- ): this
- once(event: 'error', listener: (this: WebSocket, err: Error) => void): this
- once(
- event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
- ): this
- once(
- event: 'message',
- listener: (this: WebSocket, data: WebSocket.Data) => void
- ): this
- once(event: 'open', listener: (this: WebSocket) => void): this
- once(
- event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
- ): this
- once(
- event: 'unexpected-response',
- listener: (
- this: WebSocket,
- request: ClientRequest,
- response: IncomingMessage
- ) => void
- ): this
- once(
- event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
- ): this
-
- off(
- event: 'close',
- listener: (this: WebSocket, code: number, reason: string) => void
- ): this
- off(event: 'error', listener: (this: WebSocket, err: Error) => void): this
- off(
- event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
- ): this
- off(
- event: 'message',
- listener: (this: WebSocket, data: WebSocket.Data) => void
- ): this
- off(event: 'open', listener: (this: WebSocket) => void): this
- off(
- event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
- ): this
- off(
- event: 'unexpected-response',
- listener: (
- this: WebSocket,
- request: ClientRequest,
- response: IncomingMessage
- ) => void
- ): this
- off(
- event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
- ): this
-
- addListener(
- event: 'close',
- listener: (code: number, message: string) => void
- ): this
- addListener(event: 'error', listener: (err: Error) => void): this
- addListener(
- event: 'upgrade',
- listener: (request: IncomingMessage) => void
- ): this
- addListener(
- event: 'message',
- listener: (data: WebSocket.Data) => void
- ): this
- addListener(event: 'open', listener: () => void): this
- addListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this
- addListener(
- event: 'unexpected-response',
- listener: (request: ClientRequest, response: IncomingMessage) => void
- ): this
- addListener(
- event: string | symbol,
- listener: (...args: any[]) => void
- ): this
-
- removeListener(
- event: 'close',
- listener: (code: number, message: string) => void
- ): this
- removeListener(event: 'error', listener: (err: Error) => void): this
- removeListener(
- event: 'upgrade',
- listener: (request: IncomingMessage) => void
- ): this
- removeListener(
- event: 'message',
- listener: (data: WebSocket.Data) => void
- ): this
- removeListener(event: 'open', listener: () => void): this
- removeListener(
- event: 'ping' | 'pong',
- listener: (data: Buffer) => void
- ): this
- removeListener(
- event: 'unexpected-response',
- listener: (request: ClientRequest, response: IncomingMessage) => void
- ): this
- removeListener(
- event: string | symbol,
- listener: (...args: any[]) => void
- ): this
- }
-
- /**
- * Data represents the message payload received over the WebSocket.
- */
- export type Data = string | Buffer | ArrayBuffer | Buffer[]
-
- /**
- * CertMeta represents the accepted types for certificate & key data.
- */
- export type CertMeta = string | string[] | Buffer | Buffer[]
-
- /**
- * VerifyClientCallbackSync is a synchronous callback used to inspect the
- * incoming message. The return value (boolean) of the function determines
- * whether or not to accept the handshake.
- */
- export type VerifyClientCallbackSync = (info: {
- origin: string
- secure: boolean
- req: IncomingMessage
- }) => boolean
-
- /**
- * VerifyClientCallbackAsync is an asynchronous callback used to inspect the
- * incoming message. The return value (boolean) of the function determines
- * whether or not to accept the handshake.
- */
- export type VerifyClientCallbackAsync = (
- info: { origin: string; secure: boolean; req: IncomingMessage },
- callback: (
- res: boolean,
- code?: number,
- message?: string,
- headers?: OutgoingHttpHeaders
- ) => void
- ) => void
-
- export interface ClientOptions extends SecureContextOptions {
- protocol?: string | undefined
- followRedirects?: boolean | undefined
- handshakeTimeout?: number | undefined
- maxRedirects?: number | undefined
- perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined
- localAddress?: string | undefined
- protocolVersion?: number | undefined
- headers?: { [key: string]: string } | undefined
- origin?: string | undefined
- agent?: Agent | undefined
- host?: string | undefined
- family?: number | undefined
- checkServerIdentity?(servername: string, cert: CertMeta): boolean
- rejectUnauthorized?: boolean | undefined
- maxPayload?: number | undefined
- }
-
- export interface PerMessageDeflateOptions {
- serverNoContextTakeover?: boolean | undefined
- clientNoContextTakeover?: boolean | undefined
- serverMaxWindowBits?: number | undefined
- clientMaxWindowBits?: number | undefined
- zlibDeflateOptions?:
- | {
- flush?: number | undefined
- finishFlush?: number | undefined
- chunkSize?: number | undefined
- windowBits?: number | undefined
- level?: number | undefined
- memLevel?: number | undefined
- strategy?: number | undefined
- dictionary?: Buffer | Buffer[] | DataView | undefined
- info?: boolean | undefined
- }
- | undefined
- zlibInflateOptions?: ZlibOptions | undefined
- threshold?: number | undefined
- concurrencyLimit?: number | undefined
- }
-
- export interface OpenEvent {
- type: string
- target: WebSocket
- }
-
- export interface ErrorEvent {
- error: any
- message: string
- type: string
- target: WebSocket
- }
-
- export interface CloseEvent {
- wasClean: boolean
- code: number
- reason: string
- type: string
- target: WebSocket
- }
-
- export interface MessageEvent {
- data: Data
- type: string
- target: WebSocket
- }
-
- export interface EventListenerOptions {
- once?: boolean | undefined
- }
-
- export interface ServerOptions {
- host?: string | undefined
- port?: number | undefined
- backlog?: number | undefined
- server?: Server | Server_2 | undefined
- verifyClient?:
- | VerifyClientCallbackAsync
- | VerifyClientCallbackSync
- | undefined
- handleProtocols?: any
- path?: string | undefined
- noServer?: boolean | undefined
- clientTracking?: boolean | undefined
- perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined
- maxPayload?: number | undefined
- }
-
- export interface AddressInfo {
- address: string
- family: string
- port: number
- }
-
- // WebSocket Server
- export class Server extends EventEmitter {
- options: ServerOptions
- path: string
- clients: Set<WebSocket>
-
- constructor(options?: ServerOptions, callback?: () => void)
-
- address(): AddressInfo | string
- close(cb?: (err?: Error) => void): void
- handleUpgrade(
- request: IncomingMessage,
- socket: Socket,
- upgradeHead: Buffer,
- callback: (client: WebSocket, request: IncomingMessage) => void
- ): void
- shouldHandle(request: IncomingMessage): boolean | Promise<boolean>
-
- // Events
- on(
- event: 'connection',
- cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void
- ): this
- on(event: 'error', cb: (this: Server, error: Error) => void): this
- on(
- event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
- ): this
- on(event: 'close' | 'listening', cb: (this: Server) => void): this
- on(
- event: string | symbol,
- listener: (this: Server, ...args: any[]) => void
- ): this
-
- once(
- event: 'connection',
- cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void
- ): this
- once(event: 'error', cb: (this: Server, error: Error) => void): this
- once(
- event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
- ): this
- once(event: 'close' | 'listening', cb: (this: Server) => void): this
- once(event: string | symbol, listener: (...args: any[]) => void): this
-
- off(
- event: 'connection',
- cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void
- ): this
- off(event: 'error', cb: (this: Server, error: Error) => void): this
- off(
- event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
- ): this
- off(event: 'close' | 'listening', cb: (this: Server) => void): this
- off(
- event: string | symbol,
- listener: (this: Server, ...args: any[]) => void
- ): this
-
- addListener(
- event: 'connection',
- cb: (client: WebSocket, request: IncomingMessage) => void
- ): this
- addListener(event: 'error', cb: (err: Error) => void): this
- addListener(
- event: 'headers',
- cb: (headers: string[], request: IncomingMessage) => void
- ): this
- addListener(event: 'close' | 'listening', cb: () => void): this
- addListener(
- event: string | symbol,
- listener: (...args: any[]) => void
- ): this
-
- removeListener(event: 'connection', cb: (client: WebSocket) => void): this
- removeListener(event: 'error', cb: (err: Error) => void): this
- removeListener(
- event: 'headers',
- cb: (headers: string[], request: IncomingMessage) => void
- ): this
- removeListener(event: 'close' | 'listening', cb: () => void): this
- removeListener(
- event: string | symbol,
- listener: (...args: any[]) => void
- ): this
- }
-
- // WebSocket stream
- export function createWebSocketStream(
- websocket: WebSocket,
- options?: DuplexOptions
- ): Duplex
-}
-
-export declare interface WebSocketServer {
- on: WebSocket.Server['on'];
- off: WebSocket.Server['off'];
- send(payload: HMRPayload): void;
- close(): Promise<void>;
-}
-
-export { }
diff --git a/packages/astro/vendor/vite/dist/node/index.js b/packages/astro/vendor/vite/dist/node/index.js
deleted file mode 100755
index 2d2c3d561..000000000
--- a/packages/astro/vendor/vite/dist/node/index.js
+++ /dev/null
@@ -1,52 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, '__esModule', { value: true });
-
-var build = require('./chunks/dep-35df7f96.js');
-require('fs');
-require('path');
-require('events');
-require('util');
-require('stream');
-require('os');
-require('perf_hooks');
-require('url');
-require('crypto');
-require('module');
-require('esbuild');
-require('worker_threads');
-require('assert');
-require('child_process');
-require('readline');
-require('zlib');
-require('resolve');
-require('querystring');
-require('tty');
-require('net');
-require('http');
-require('buffer');
-require('https');
-require('tls');
-
-
-
-exports.build = build.build;
-exports.createLogger = build.createLogger;
-exports.createServer = build.createServer;
-exports.defineConfig = build.defineConfig;
-exports.loadConfigFromFile = build.loadConfigFromFile;
-exports.loadEnv = build.loadEnv;
-exports.mergeConfig = build.mergeConfig;
-exports.normalizePath = build.normalizePath;
-exports.optimizeDeps = build.optimizeDeps;
-exports.preview = build.preview;
-exports.printHttpServerUrls = build.printHttpServerUrls;
-exports.resolveConfig = build.resolveConfig;
-exports.resolveEnvPrefix = build.resolveEnvPrefix;
-exports.resolvePackageData = build.resolvePackageData;
-exports.resolvePackageEntry = build.resolvePackageEntry;
-exports.searchForWorkspaceRoot = build.searchForWorkspaceRoot;
-exports.send = build.send;
-exports.sortUserPlugins = build.sortUserPlugins;
-exports.transformWithEsbuild = build.transformWithEsbuild;
-//# sourceMappingURL=index.js.map
diff --git a/packages/astro/vendor/vite/dist/node/index.js.map b/packages/astro/vendor/vite/dist/node/index.js.map
deleted file mode 100755
index e8194846b..000000000
--- a/packages/astro/vendor/vite/dist/node/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file
diff --git a/packages/astro/vendor/vite/dist/node/terser.js b/packages/astro/vendor/vite/dist/node/terser.js
deleted file mode 100755
index f6d8bb367..000000000
--- a/packages/astro/vendor/vite/dist/node/terser.js
+++ /dev/null
@@ -1,31356 +0,0 @@
-'use strict';
-
-var require$$0 = require('fs');
-var require$$1 = require('path');
-
-function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
-
-var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
-var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);
-
-var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
-
-var bundle_min$1 = {exports: {}};
-
-var sourceMap = {};
-
-var sourceMapGenerator = {};
-
-var base64Vlq = {};
-
-var base64$1 = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-const intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
-
-/**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
-base64$1.encode = function(number) {
- if (0 <= number && number < intToCharMap.length) {
- return intToCharMap[number];
- }
- throw new TypeError("Must be between 0 and 63: " + number);
-};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-const base64 = base64$1;
-
-// A single base 64 digit can contain 6 bits of data. For the base 64 variable
-// length quantities we use in the source map spec, the first bit is the sign,
-// the next four bits are the actual value, and the 6th bit is the
-// continuation bit. The continuation bit tells us whether there are more
-// digits in this value following this digit.
-//
-// Continuation
-// | Sign
-// | |
-// V V
-// 101011
-
-const VLQ_BASE_SHIFT = 5;
-
-// binary: 100000
-const VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-
-// binary: 011111
-const VLQ_BASE_MASK = VLQ_BASE - 1;
-
-// binary: 100000
-const VLQ_CONTINUATION_BIT = VLQ_BASE;
-
-/**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
-function toVLQSigned(aValue) {
- return aValue < 0
- ? ((-aValue) << 1) + 1
- : (aValue << 1) + 0;
-}
-
-/**
- * Returns the base 64 VLQ encoded value.
- */
-base64Vlq.encode = function base64VLQ_encode(aValue) {
- let encoded = "";
- let digit;
-
- let vlq = toVLQSigned(aValue);
-
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- // There are still more digits in this value, so we must make sure the
- // continuation bit is marked.
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
-
- return encoded;
-};
-
-var util$4 = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-(function (exports) {
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-/**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
-function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- }
- throw new Error('"' + aName + '" is a required argument.');
-
-}
-exports.getArg = getArg;
-
-const urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
-const dataUrlRegexp = /^data:.+\,.+$/;
-
-function urlParse(aUrl) {
- const match = aUrl.match(urlRegexp);
- if (!match) {
- return null;
- }
- return {
- scheme: match[1],
- auth: match[2],
- host: match[3],
- port: match[4],
- path: match[5]
- };
-}
-exports.urlParse = urlParse;
-
-function urlGenerate(aParsedUrl) {
- let url = "";
- if (aParsedUrl.scheme) {
- url += aParsedUrl.scheme + ":";
- }
- url += "//";
- if (aParsedUrl.auth) {
- url += aParsedUrl.auth + "@";
- }
- if (aParsedUrl.host) {
- url += aParsedUrl.host;
- }
- if (aParsedUrl.port) {
- url += ":" + aParsedUrl.port;
- }
- if (aParsedUrl.path) {
- url += aParsedUrl.path;
- }
- return url;
-}
-exports.urlGenerate = urlGenerate;
-
-const MAX_CACHED_INPUTS = 32;
-
-/**
- * Takes some function `f(input) -> result` and returns a memoized version of
- * `f`.
- *
- * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The
- * memoization is a dumb-simple, linear least-recently-used cache.
- */
-function lruMemoize(f) {
- const cache = [];
-
- return function(input) {
- for (let i = 0; i < cache.length; i++) {
- if (cache[i].input === input) {
- const temp = cache[0];
- cache[0] = cache[i];
- cache[i] = temp;
- return cache[0].result;
- }
- }
-
- const result = f(input);
-
- cache.unshift({
- input,
- result,
- });
-
- if (cache.length > MAX_CACHED_INPUTS) {
- cache.pop();
- }
-
- return result;
- };
-}
-
-/**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consecutive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
-const normalize = lruMemoize(function normalize(aPath) {
- let path = aPath;
- const url = urlParse(aPath);
- if (url) {
- if (!url.path) {
- return aPath;
- }
- path = url.path;
- }
- const isAbsolute = exports.isAbsolute(path);
-
- // Split the path into parts between `/` characters. This is much faster than
- // using `.split(/\/+/g)`.
- const parts = [];
- let start = 0;
- let i = 0;
- while (true) {
- start = i;
- i = path.indexOf("/", start);
- if (i === -1) {
- parts.push(path.slice(start));
- break;
- } else {
- parts.push(path.slice(start, i));
- while (i < path.length && path[i] === "/") {
- i++;
- }
- }
- }
-
- let up = 0;
- for (i = parts.length - 1; i >= 0; i--) {
- const part = parts[i];
- if (part === ".") {
- parts.splice(i, 1);
- } else if (part === "..") {
- up++;
- } else if (up > 0) {
- if (part === "") {
- // The first part is blank if the path is absolute. Trying to go
- // above the root is a no-op. Therefore we can remove all '..' parts
- // directly after the root.
- parts.splice(i + 1, up);
- up = 0;
- } else {
- parts.splice(i, 2);
- up--;
- }
- }
- }
- path = parts.join("/");
-
- if (path === "") {
- path = isAbsolute ? "/" : ".";
- }
-
- if (url) {
- url.path = path;
- return urlGenerate(url);
- }
- return path;
-});
-exports.normalize = normalize;
-
-/**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- * first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- * is updated with the result and aRoot is returned. Otherwise the result
- * is returned.
- * - If aPath is absolute, the result is aPath.
- * - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
-function join(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
- if (aPath === "") {
- aPath = ".";
- }
- const aPathUrl = urlParse(aPath);
- const aRootUrl = urlParse(aRoot);
- if (aRootUrl) {
- aRoot = aRootUrl.path || "/";
- }
-
- // `join(foo, '//www.example.org')`
- if (aPathUrl && !aPathUrl.scheme) {
- if (aRootUrl) {
- aPathUrl.scheme = aRootUrl.scheme;
- }
- return urlGenerate(aPathUrl);
- }
-
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
- return aPath;
- }
-
- // `join('http://', 'www.example.com')`
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
- aRootUrl.host = aPath;
- return urlGenerate(aRootUrl);
- }
-
- const joined = aPath.charAt(0) === "/"
- ? aPath
- : normalize(aRoot.replace(/\/+$/, "") + "/" + aPath);
-
- if (aRootUrl) {
- aRootUrl.path = joined;
- return urlGenerate(aRootUrl);
- }
- return joined;
-}
-exports.join = join;
-
-exports.isAbsolute = function(aPath) {
- return aPath.charAt(0) === "/" || urlRegexp.test(aPath);
-};
-
-/**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
-function relative(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
-
- aRoot = aRoot.replace(/\/$/, "");
-
- // It is possible for the path to be above the root. In this case, simply
- // checking whether the root is a prefix of the path won't work. Instead, we
- // need to remove components from the root one by one, until either we find
- // a prefix that fits, or we run out of components to remove.
- let level = 0;
- while (aPath.indexOf(aRoot + "/") !== 0) {
- const index = aRoot.lastIndexOf("/");
- if (index < 0) {
- return aPath;
- }
-
- // If the only part of the root that is left is the scheme (i.e. http://,
- // file:///, etc.), one or more slashes (/), or simply nothing at all, we
- // have exhausted all components, so the path is not relative to the root.
- aRoot = aRoot.slice(0, index);
- if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
- return aPath;
- }
-
- ++level;
- }
-
- // Make sure we add a "../" for each component we removed from the root.
- return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
-}
-exports.relative = relative;
-
-const supportsNullProto = (function() {
- const obj = Object.create(null);
- return !("__proto__" in obj);
-}());
-
-function identity(s) {
- return s;
-}
-
-/**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
-function toSetString(aStr) {
- if (isProtoString(aStr)) {
- return "$" + aStr;
- }
-
- return aStr;
-}
-exports.toSetString = supportsNullProto ? identity : toSetString;
-
-function fromSetString(aStr) {
- if (isProtoString(aStr)) {
- return aStr.slice(1);
- }
-
- return aStr;
-}
-exports.fromSetString = supportsNullProto ? identity : fromSetString;
-
-function isProtoString(s) {
- if (!s) {
- return false;
- }
-
- const length = s.length;
-
- if (length < 9 /* "__proto__".length */) {
- return false;
- }
-
- /* eslint-disable no-multi-spaces */
- if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
- s.charCodeAt(length - 2) !== 95 /* '_' */ ||
- s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 4) !== 116 /* 't' */ ||
- s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
- s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
- s.charCodeAt(length - 8) !== 95 /* '_' */ ||
- s.charCodeAt(length - 9) !== 95 /* '_' */) {
- return false;
- }
- /* eslint-enable no-multi-spaces */
-
- for (let i = length - 10; i >= 0; i--) {
- if (s.charCodeAt(i) !== 36 /* '$' */) {
- return false;
- }
- }
-
- return true;
-}
-
-/**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
-function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
- let cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByOriginalPositions = compareByOriginalPositions;
-
-/**
- * Comparator between two mappings with deflated source and name indices where
- * the generated positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
-function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
- let cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
-
-function strcmp(aStr1, aStr2) {
- if (aStr1 === aStr2) {
- return 0;
- }
-
- if (aStr1 === null) {
- return 1; // aStr2 !== null
- }
-
- if (aStr2 === null) {
- return -1; // aStr1 !== null
- }
-
- if (aStr1 > aStr2) {
- return 1;
- }
-
- return -1;
-}
-
-/**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
-function compareByGeneratedPositionsInflated(mappingA, mappingB) {
- let cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-
-/**
- * Strip any JSON XSSI avoidance prefix from the string (as documented
- * in the source maps specification), and then parse the string as
- * JSON.
- */
-function parseSourceMapInput(str) {
- return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ""));
-}
-exports.parseSourceMapInput = parseSourceMapInput;
-
-/**
- * Compute the URL of a source given the the source root, the source's
- * URL, and the source map's URL.
- */
-function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
- sourceURL = sourceURL || "";
-
- if (sourceRoot) {
- // This follows what Chrome does.
- if (sourceRoot[sourceRoot.length - 1] !== "/" && sourceURL[0] !== "/") {
- sourceRoot += "/";
- }
- // The spec says:
- // Line 4: An optional source root, useful for relocating source
- // files on a server or removing repeated values in the
- // “sources” entry. This value is prepended to the individual
- // entries in the “source” field.
- sourceURL = sourceRoot + sourceURL;
- }
-
- // Historically, SourceMapConsumer did not take the sourceMapURL as
- // a parameter. This mode is still somewhat supported, which is why
- // this code block is conditional. However, it's preferable to pass
- // the source map URL to SourceMapConsumer, so that this function
- // can implement the source URL resolution algorithm as outlined in
- // the spec. This block is basically the equivalent of:
- // new URL(sourceURL, sourceMapURL).toString()
- // ... except it avoids using URL, which wasn't available in the
- // older releases of node still supported by this library.
- //
- // The spec says:
- // If the sources are not absolute URLs after prepending of the
- // “sourceRoot”, the sources are resolved relative to the
- // SourceMap (like resolving script src in a html document).
- if (sourceMapURL) {
- const parsed = urlParse(sourceMapURL);
- if (!parsed) {
- throw new Error("sourceMapURL could not be parsed");
- }
- if (parsed.path) {
- // Strip the last path component, but keep the "/".
- const index = parsed.path.lastIndexOf("/");
- if (index >= 0) {
- parsed.path = parsed.path.substring(0, index + 1);
- }
- }
- sourceURL = join(urlGenerate(parsed), sourceURL);
- }
-
- return normalize(sourceURL);
-}
-exports.computeSourceURL = computeSourceURL;
-}(util$4));
-
-var arraySet = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-/**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
-class ArraySet$2 {
- constructor() {
- this._array = [];
- this._set = new Map();
- }
-
- /**
- * Static method for creating ArraySet instances from an existing array.
- */
- static fromArray(aArray, aAllowDuplicates) {
- const set = new ArraySet$2();
- for (let i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
- }
-
- /**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
- size() {
- return this._set.size;
- }
-
- /**
- * Add the given string to this set.
- *
- * @param String aStr
- */
- add(aStr, aAllowDuplicates) {
- const isDuplicate = this.has(aStr);
- const idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- this._set.set(aStr, idx);
- }
- }
-
- /**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
- has(aStr) {
- return this._set.has(aStr);
- }
-
- /**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
- indexOf(aStr) {
- const idx = this._set.get(aStr);
- if (idx >= 0) {
- return idx;
- }
- throw new Error('"' + aStr + '" is not in the set.');
- }
-
- /**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
- at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error("No element indexed by " + aIdx);
- }
-
- /**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
- toArray() {
- return this._array.slice();
- }
-}
-arraySet.ArraySet = ArraySet$2;
-
-var mappingList = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-const util$3 = util$4;
-
-/**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
-function generatedPositionAfter(mappingA, mappingB) {
- // Optimized for most common case
- const lineA = mappingA.generatedLine;
- const lineB = mappingB.generatedLine;
- const columnA = mappingA.generatedColumn;
- const columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
- util$3.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
-}
-
-/**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a negligible overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
-class MappingList$1 {
- constructor() {
- this._array = [];
- this._sorted = true;
- // Serves as infimum
- this._last = {generatedLine: -1, generatedColumn: 0};
- }
-
- /**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
- unsortedForEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- }
-
- /**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
- add(aMapping) {
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
- }
-
- /**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
- toArray() {
- if (!this._sorted) {
- this._array.sort(util$3.compareByGeneratedPositionsInflated);
- this._sorted = true;
- }
- return this._array;
- }
-}
-
-mappingList.MappingList = MappingList$1;
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-const base64VLQ = base64Vlq;
-const util$2 = util$4;
-const ArraySet$1 = arraySet.ArraySet;
-const MappingList = mappingList.MappingList;
-
-/**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- * - file: The filename of the generated source.
- * - sourceRoot: A root for all relative URLs in this source map.
- */
-class SourceMapGenerator$1 {
- constructor(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util$2.getArg(aArgs, "file", null);
- this._sourceRoot = util$2.getArg(aArgs, "sourceRoot", null);
- this._skipValidation = util$2.getArg(aArgs, "skipValidation", false);
- this._sources = new ArraySet$1();
- this._names = new ArraySet$1();
- this._mappings = new MappingList();
- this._sourcesContents = null;
- }
-
- /**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
- static fromSourceMap(aSourceMapConsumer) {
- const sourceRoot = aSourceMapConsumer.sourceRoot;
- const generator = new SourceMapGenerator$1({
- file: aSourceMapConsumer.file,
- sourceRoot
- });
- aSourceMapConsumer.eachMapping(function(mapping) {
- const newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
-
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util$2.relative(sourceRoot, newMapping.source);
- }
-
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
-
- if (mapping.name != null) {
- newMapping.name = mapping.name;
- }
- }
-
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function(sourceFile) {
- let sourceRelative = sourceFile;
- if (sourceRoot !== null) {
- sourceRelative = util$2.relative(sourceRoot, sourceFile);
- }
-
- if (!generator._sources.has(sourceRelative)) {
- generator._sources.add(sourceRelative);
- }
-
- const content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
- }
- });
- return generator;
- }
-
- /**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- * - generated: An object with the generated line and column positions.
- * - original: An object with the original line and column positions.
- * - source: The original source file (relative to the sourceRoot).
- * - name: An optional original token name for this mapping.
- */
- addMapping(aArgs) {
- const generated = util$2.getArg(aArgs, "generated");
- const original = util$2.getArg(aArgs, "original", null);
- let source = util$2.getArg(aArgs, "source", null);
- let name = util$2.getArg(aArgs, "name", null);
-
- if (!this._skipValidation) {
- this._validateMapping(generated, original, source, name);
- }
-
- if (source != null) {
- source = String(source);
- if (!this._sources.has(source)) {
- this._sources.add(source);
- }
- }
-
- if (name != null) {
- name = String(name);
- if (!this._names.has(name)) {
- this._names.add(name);
- }
- }
-
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source,
- name
- });
- }
-
- /**
- * Set the source content for a source file.
- */
- setSourceContent(aSourceFile, aSourceContent) {
- let source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util$2.relative(this._sourceRoot, source);
- }
-
- if (aSourceContent != null) {
- // Add the source content to the _sourcesContents map.
- // Create a new _sourcesContents map if the property is null.
- if (!this._sourcesContents) {
- this._sourcesContents = Object.create(null);
- }
- this._sourcesContents[util$2.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- // Remove the source file from the _sourcesContents map.
- // If the _sourcesContents map is empty, set the property to null.
- delete this._sourcesContents[util$2.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
- }
- }
-
- /**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- * If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- * to be applied. If relative, it is relative to the SourceMapConsumer.
- * This parameter is needed when the two source maps aren't in the same
- * directory, and the source map to be applied contains relative source
- * paths. If so, those relative source paths need to be rewritten
- * relative to the SourceMapGenerator.
- */
- applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- let sourceFile = aSourceFile;
- // If aSourceFile is omitted, we will use the file property of the SourceMap
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- "SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, " +
- 'or the source map\'s "file" property. Both were omitted.'
- );
- }
- sourceFile = aSourceMapConsumer.file;
- }
- const sourceRoot = this._sourceRoot;
- // Make "sourceFile" relative if an absolute Url is passed.
- if (sourceRoot != null) {
- sourceFile = util$2.relative(sourceRoot, sourceFile);
- }
- // Applying the SourceMap can add and remove items from the sources and
- // the names array.
- const newSources = this._mappings.toArray().length > 0
- ? new ArraySet$1()
- : this._sources;
- const newNames = new ArraySet$1();
-
- // Find mappings for the "sourceFile"
- this._mappings.unsortedForEach(function(mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- // Check if it can be mapped by the source map, then update the mapping.
- const original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- // Copy mapping
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util$2.join(aSourceMapPath, mapping.source);
- }
- if (sourceRoot != null) {
- mapping.source = util$2.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
- }
- }
- }
-
- const source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
-
- const name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
-
- }, this);
- this._sources = newSources;
- this._names = newNames;
-
- // Copy sourcesContents of applied map.
- aSourceMapConsumer.sources.forEach(function(srcFile) {
- const content = aSourceMapConsumer.sourceContentFor(srcFile);
- if (content != null) {
- if (aSourceMapPath != null) {
- srcFile = util$2.join(aSourceMapPath, srcFile);
- }
- if (sourceRoot != null) {
- srcFile = util$2.relative(sourceRoot, srcFile);
- }
- this.setSourceContent(srcFile, content);
- }
- }, this);
- }
-
- /**
- * A mapping can have one of the three levels of data:
- *
- * 1. Just the generated position.
- * 2. The Generated position, original position, and original source.
- * 3. Generated and original position, original source, as well as a name
- * token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
- _validateMapping(aGenerated, aOriginal, aSource, aName) {
- // When aOriginal is truthy but has empty values for .line and .column,
- // it is most likely a programmer error. In this case we throw a very
- // specific error message to try to guide them the right way.
- // For example: https://github.com/Polymer/polymer-bundler/pull/519
- if (aOriginal && typeof aOriginal.line !== "number" && typeof aOriginal.column !== "number") {
- throw new Error(
- "original.line and original.column are not numbers -- you probably meant to omit " +
- "the original mapping entirely and only map the generated position. If so, pass " +
- "null for the original mapping instead of an object with empty or null values."
- );
- }
-
- if (aGenerated && "line" in aGenerated && "column" in aGenerated
- && aGenerated.line > 0 && aGenerated.column >= 0
- && !aOriginal && !aSource && !aName) ; else if (aGenerated && "line" in aGenerated && "column" in aGenerated
- && aOriginal && "line" in aOriginal && "column" in aOriginal
- && aGenerated.line > 0 && aGenerated.column >= 0
- && aOriginal.line > 0 && aOriginal.column >= 0
- && aSource) ; else {
- throw new Error("Invalid mapping: " + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- }));
- }
- }
-
- /**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
- _serializeMappings() {
- let previousGeneratedColumn = 0;
- let previousGeneratedLine = 1;
- let previousOriginalColumn = 0;
- let previousOriginalLine = 0;
- let previousName = 0;
- let previousSource = 0;
- let result = "";
- let next;
- let mapping;
- let nameIdx;
- let sourceIdx;
-
- const mappings = this._mappings.toArray();
- for (let i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
- next = "";
-
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- next += ";";
- previousGeneratedLine++;
- }
- } else if (i > 0) {
- if (!util$2.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- next += ",";
- }
-
- next += base64VLQ.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (mapping.source != null) {
- sourceIdx = this._sources.indexOf(mapping.source);
- next += base64VLQ.encode(sourceIdx - previousSource);
- previousSource = sourceIdx;
-
- // lines are stored 0-based in SourceMap spec version 3
- next += base64VLQ.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- next += base64VLQ.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
-
- if (mapping.name != null) {
- nameIdx = this._names.indexOf(mapping.name);
- next += base64VLQ.encode(nameIdx - previousName);
- previousName = nameIdx;
- }
- }
-
- result += next;
- }
-
- return result;
- }
-
- _generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function(source) {
- if (!this._sourcesContents) {
- return null;
- }
- if (aSourceRoot != null) {
- source = util$2.relative(aSourceRoot, source);
- }
- const key = util$2.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
- ? this._sourcesContents[key]
- : null;
- }, this);
- }
-
- /**
- * Externalize the source map.
- */
- toJSON() {
- const map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
- }
-
- return map;
- }
-
- /**
- * Render the source map being generated to a string.
- */
- toString() {
- return JSON.stringify(this.toJSON());
- }
-}
-
-SourceMapGenerator$1.prototype._version = 3;
-sourceMapGenerator.SourceMapGenerator = SourceMapGenerator$1;
-
-var sourceMapConsumer = {};
-
-var binarySearch$1 = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-(function (exports) {
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-exports.GREATEST_LOWER_BOUND = 1;
-exports.LEAST_UPPER_BOUND = 2;
-
-/**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- */
-function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
- // This function terminates when one of the following is true:
- //
- // 1. We find the exact element we are looking for.
- //
- // 2. We did not find the exact element, but we can return the index of
- // the next-closest element.
- //
- // 3. We did not find the exact element, and there is no next-closest
- // element than the one we are searching for, so we return -1.
- const mid = Math.floor((aHigh - aLow) / 2) + aLow;
- const cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- // Found the element we are looking for.
- return mid;
- } else if (cmp > 0) {
- // Our needle is greater than aHaystack[mid].
- if (aHigh - mid > 1) {
- // The element is in the upper half.
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // The exact needle element was not found in this haystack. Determine if
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return aHigh < aHaystack.length ? aHigh : -1;
- }
- return mid;
- }
-
- // Our needle is less than aHaystack[mid].
- if (mid - aLow > 1) {
- // The element is in the lower half.
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return mid;
- }
- return aLow < 0 ? -1 : aLow;
-}
-
-/**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- * array and returns -1, 0, or 1 depending on whether the needle is less
- * than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
-exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
- if (aHaystack.length === 0) {
- return -1;
- }
-
- let index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
- aCompare, aBias || exports.GREATEST_LOWER_BOUND);
- if (index < 0) {
- return -1;
- }
-
- // We have found either the exact element, or the next-closest element than
- // the one we are searching for. However, there may be more than one such
- // element. Make sure we always return the smallest of these.
- while (index - 1 >= 0) {
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
- break;
- }
- --index;
- }
-
- return index;
-};
-}(binarySearch$1));
-
-var readWasm$2 = {exports: {}};
-
-if (typeof fetch === "function") {
- // Web version of reading a wasm file into an array buffer.
-
- let mappingsWasmUrl = null;
-
- readWasm$2.exports = function readWasm() {
- if (typeof mappingsWasmUrl !== "string") {
- throw new Error("You must provide the URL of lib/mappings.wasm by calling " +
- "SourceMapConsumer.initialize({ 'lib/mappings.wasm': ... }) " +
- "before using SourceMapConsumer");
- }
-
- return fetch(mappingsWasmUrl)
- .then(response => response.arrayBuffer());
- };
-
- readWasm$2.exports.initialize = url => mappingsWasmUrl = url;
-} else {
- // Node version of reading a wasm file into an array buffer.
- const fs = require$$0__default;
- const path = require$$1__default;
-
- readWasm$2.exports = function readWasm() {
- return new Promise((resolve, reject) => {
- const wasmPath = path.join(__dirname, "mappings.wasm");
- fs.readFile(wasmPath, null, (error, data) => {
- if (error) {
- reject(error);
- return;
- }
-
- resolve(data.buffer);
- });
- });
- };
-
- readWasm$2.exports.initialize = _ => {
- console.debug("SourceMapConsumer.initialize is a no-op when running in node.js");
- };
-}
-
-const readWasm$1 = readWasm$2.exports;
-
-/**
- * Provide the JIT with a nice shape / hidden class.
- */
-function Mapping() {
- this.generatedLine = 0;
- this.generatedColumn = 0;
- this.lastGeneratedColumn = null;
- this.source = null;
- this.originalLine = null;
- this.originalColumn = null;
- this.name = null;
-}
-
-let cachedWasm = null;
-
-var wasm$1 = function wasm() {
- if (cachedWasm) {
- return cachedWasm;
- }
-
- const callbackStack = [];
-
- cachedWasm = readWasm$1().then(buffer => {
- return WebAssembly.instantiate(buffer, {
- env: {
- mapping_callback(
- generatedLine,
- generatedColumn,
-
- hasLastGeneratedColumn,
- lastGeneratedColumn,
-
- hasOriginal,
- source,
- originalLine,
- originalColumn,
-
- hasName,
- name
- ) {
- const mapping = new Mapping();
- // JS uses 1-based line numbers, wasm uses 0-based.
- mapping.generatedLine = generatedLine + 1;
- mapping.generatedColumn = generatedColumn;
-
- if (hasLastGeneratedColumn) {
- // JS uses inclusive last generated column, wasm uses exclusive.
- mapping.lastGeneratedColumn = lastGeneratedColumn - 1;
- }
-
- if (hasOriginal) {
- mapping.source = source;
- // JS uses 1-based line numbers, wasm uses 0-based.
- mapping.originalLine = originalLine + 1;
- mapping.originalColumn = originalColumn;
-
- if (hasName) {
- mapping.name = name;
- }
- }
-
- callbackStack[callbackStack.length - 1](mapping);
- },
-
- start_all_generated_locations_for() { console.time("all_generated_locations_for"); },
- end_all_generated_locations_for() { console.timeEnd("all_generated_locations_for"); },
-
- start_compute_column_spans() { console.time("compute_column_spans"); },
- end_compute_column_spans() { console.timeEnd("compute_column_spans"); },
-
- start_generated_location_for() { console.time("generated_location_for"); },
- end_generated_location_for() { console.timeEnd("generated_location_for"); },
-
- start_original_location_for() { console.time("original_location_for"); },
- end_original_location_for() { console.timeEnd("original_location_for"); },
-
- start_parse_mappings() { console.time("parse_mappings"); },
- end_parse_mappings() { console.timeEnd("parse_mappings"); },
-
- start_sort_by_generated_location() { console.time("sort_by_generated_location"); },
- end_sort_by_generated_location() { console.timeEnd("sort_by_generated_location"); },
-
- start_sort_by_original_location() { console.time("sort_by_original_location"); },
- end_sort_by_original_location() { console.timeEnd("sort_by_original_location"); },
- }
- });
- }).then(Wasm => {
- return {
- exports: Wasm.instance.exports,
- withMappingCallback: (mappingCallback, f) => {
- callbackStack.push(mappingCallback);
- try {
- f();
- } finally {
- callbackStack.pop();
- }
- }
- };
- }).then(null, e => {
- cachedWasm = null;
- throw e;
- });
-
- return cachedWasm;
-};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-const util$1 = util$4;
-const binarySearch = binarySearch$1;
-const ArraySet = arraySet.ArraySet;
-const readWasm = readWasm$2.exports;
-const wasm = wasm$1;
-
-const INTERNAL = Symbol("smcInternal");
-
-class SourceMapConsumer {
- constructor(aSourceMap, aSourceMapURL) {
- // If the constructor was called by super(), just return Promise<this>.
- // Yes, this is a hack to retain the pre-existing API of the base-class
- // constructor also being an async factory function.
- if (aSourceMap == INTERNAL) {
- return Promise.resolve(this);
- }
-
- return _factory(aSourceMap, aSourceMapURL);
- }
-
- static initialize(opts) {
- readWasm.initialize(opts["lib/mappings.wasm"]);
- }
-
- static fromSourceMap(aSourceMap, aSourceMapURL) {
- return _factoryBSM(aSourceMap, aSourceMapURL);
- }
-
- /**
- * Construct a new `SourceMapConsumer` from `rawSourceMap` and `sourceMapUrl`
- * (see the `SourceMapConsumer` constructor for details. Then, invoke the `async
- * function f(SourceMapConsumer) -> T` with the newly constructed consumer, wait
- * for `f` to complete, call `destroy` on the consumer, and return `f`'s return
- * value.
- *
- * You must not use the consumer after `f` completes!
- *
- * By using `with`, you do not have to remember to manually call `destroy` on
- * the consumer, since it will be called automatically once `f` completes.
- *
- * ```js
- * const xSquared = await SourceMapConsumer.with(
- * myRawSourceMap,
- * null,
- * async function (consumer) {
- * // Use `consumer` inside here and don't worry about remembering
- * // to call `destroy`.
- *
- * const x = await whatever(consumer);
- * return x * x;
- * }
- * );
- *
- * // You may not use that `consumer` anymore out here; it has
- * // been destroyed. But you can use `xSquared`.
- * console.log(xSquared);
- * ```
- */
- static with(rawSourceMap, sourceMapUrl, f) {
- // Note: The `acorn` version that `webpack` currently depends on doesn't
- // support `async` functions, and the nodes that we support don't all have
- // `.finally`. Therefore, this is written a bit more convolutedly than it
- // should really be.
-
- let consumer = null;
- const promise = new SourceMapConsumer(rawSourceMap, sourceMapUrl);
- return promise
- .then(c => {
- consumer = c;
- return f(c);
- })
- .then(x => {
- if (consumer) {
- consumer.destroy();
- }
- return x;
- }, e => {
- if (consumer) {
- consumer.destroy();
- }
- throw e;
- });
- }
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- _parseMappings(aStr, aSourceRoot) {
- throw new Error("Subclasses must implement _parseMappings");
- }
-
- /**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- * The function that is called with each mapping.
- * @param Object aContext
- * Optional. If specified, this object will be the value of `this` every
- * time that `aCallback` is called.
- * @param aOrder
- * Either `SourceMapConsumer.GENERATED_ORDER` or
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- * iterate over the mappings sorted by the generated file's line/column
- * order or the original's source/line/column order, respectively. Defaults to
- * `SourceMapConsumer.GENERATED_ORDER`.
- */
- eachMapping(aCallback, aContext, aOrder) {
- throw new Error("Subclasses must implement eachMapping");
- }
-
- /**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number is 1-based.
- * - column: Optional. the column number in the original source.
- * The column number is 0-based.
- *
- * and an array of objects is returned, each with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- allGeneratedPositionsFor(aArgs) {
- throw new Error("Subclasses must implement allGeneratedPositionsFor");
- }
-
- destroy() {
- throw new Error("Subclasses must implement destroy");
- }
-}
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-SourceMapConsumer.prototype._version = 3;
-SourceMapConsumer.GENERATED_ORDER = 1;
-SourceMapConsumer.ORIGINAL_ORDER = 2;
-
-SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
-SourceMapConsumer.LEAST_UPPER_BOUND = 2;
-
-sourceMapConsumer.SourceMapConsumer = SourceMapConsumer;
-
-/**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The first parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - sources: An array of URLs to the original source files.
- * - names: An array of identifiers which can be referenced by individual mappings.
- * - sourceRoot: Optional. The URL root from which all sources are relative.
- * - sourcesContent: Optional. An array of contents of the original source files.
- * - mappings: A string of base64 VLQs which contain the actual mappings.
- * - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- * {
- * version : 3,
- * file: "out.js",
- * sourceRoot : "",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AA,AB;;ABCDE;"
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
-class BasicSourceMapConsumer extends SourceMapConsumer {
- constructor(aSourceMap, aSourceMapURL) {
- return super(INTERNAL).then(that => {
- let sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util$1.parseSourceMapInput(aSourceMap);
- }
-
- const version = util$1.getArg(sourceMap, "version");
- let sources = util$1.getArg(sourceMap, "sources");
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
- // requires the array) to play nice here.
- const names = util$1.getArg(sourceMap, "names", []);
- let sourceRoot = util$1.getArg(sourceMap, "sourceRoot", null);
- const sourcesContent = util$1.getArg(sourceMap, "sourcesContent", null);
- const mappings = util$1.getArg(sourceMap, "mappings");
- const file = util$1.getArg(sourceMap, "file", null);
-
- // Once again, Sass deviates from the spec and supplies the version as a
- // string rather than a number, so we use loose equality checking here.
- if (version != that._version) {
- throw new Error("Unsupported version: " + version);
- }
-
- if (sourceRoot) {
- sourceRoot = util$1.normalize(sourceRoot);
- }
-
- sources = sources
- .map(String)
- // Some source maps produce relative source paths like "./foo.js" instead of
- // "foo.js". Normalize these first so that future comparisons will succeed.
- // See bugzil.la/1090768.
- .map(util$1.normalize)
- // Always ensure that absolute sources are internally stored relative to
- // the source root, if the source root is absolute. Not doing this would
- // be particularly problematic when the source root is a prefix of the
- // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
- .map(function(source) {
- return sourceRoot && util$1.isAbsolute(sourceRoot) && util$1.isAbsolute(source)
- ? util$1.relative(sourceRoot, source)
- : source;
- });
-
- // Pass `true` below to allow duplicate names and sources. While source maps
- // are intended to be compressed and deduplicated, the TypeScript compiler
- // sometimes generates source maps with duplicates in them. See Github issue
- // #72 and bugzil.la/889492.
- that._names = ArraySet.fromArray(names.map(String), true);
- that._sources = ArraySet.fromArray(sources, true);
-
- that._absoluteSources = that._sources.toArray().map(function(s) {
- return util$1.computeSourceURL(sourceRoot, s, aSourceMapURL);
- });
-
- that.sourceRoot = sourceRoot;
- that.sourcesContent = sourcesContent;
- that._mappings = mappings;
- that._sourceMapURL = aSourceMapURL;
- that.file = file;
-
- that._computedColumnSpans = false;
- that._mappingsPtr = 0;
- that._wasm = null;
-
- return wasm().then(w => {
- that._wasm = w;
- return that;
- });
- });
- }
-
- /**
- * Utility function to find the index of a source. Returns -1 if not
- * found.
- */
- _findSourceIndex(aSource) {
- let relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util$1.relative(this.sourceRoot, relativeSource);
- }
-
- if (this._sources.has(relativeSource)) {
- return this._sources.indexOf(relativeSource);
- }
-
- // Maybe aSource is an absolute URL as returned by |sources|. In
- // this case we can't simply undo the transform.
- for (let i = 0; i < this._absoluteSources.length; ++i) {
- if (this._absoluteSources[i] == aSource) {
- return i;
- }
- }
-
- return -1;
- }
-
- /**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- * The source map that will be consumed.
- * @param String aSourceMapURL
- * The URL at which the source map can be found (optional)
- * @returns BasicSourceMapConsumer
- */
- static fromSourceMap(aSourceMap, aSourceMapURL) {
- return new BasicSourceMapConsumer(aSourceMap.toString());
- }
-
- get sources() {
- return this._absoluteSources.slice();
- }
-
- _getMappingsPtr() {
- if (this._mappingsPtr === 0) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this._mappingsPtr;
- }
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- _parseMappings(aStr, aSourceRoot) {
- const size = aStr.length;
-
- const mappingsBufPtr = this._wasm.exports.allocate_mappings(size);
- const mappingsBuf = new Uint8Array(this._wasm.exports.memory.buffer, mappingsBufPtr, size);
- for (let i = 0; i < size; i++) {
- mappingsBuf[i] = aStr.charCodeAt(i);
- }
-
- const mappingsPtr = this._wasm.exports.parse_mappings(mappingsBufPtr);
-
- if (!mappingsPtr) {
- const error = this._wasm.exports.get_last_error();
- let msg = `Error parsing mappings (code ${error}): `;
-
- // XXX: keep these error codes in sync with `fitzgen/source-map-mappings`.
- switch (error) {
- case 1:
- msg += "the mappings contained a negative line, column, source index, or name index";
- break;
- case 2:
- msg += "the mappings contained a number larger than 2**32";
- break;
- case 3:
- msg += "reached EOF while in the middle of parsing a VLQ";
- break;
- case 4:
- msg += "invalid base 64 character while parsing a VLQ";
- break;
- default:
- msg += "unknown error code";
- break;
- }
-
- throw new Error(msg);
- }
-
- this._mappingsPtr = mappingsPtr;
- }
-
- eachMapping(aCallback, aContext, aOrder) {
- const context = aContext || null;
- const order = aOrder || SourceMapConsumer.GENERATED_ORDER;
- const sourceRoot = this.sourceRoot;
-
- this._wasm.withMappingCallback(
- mapping => {
- if (mapping.source !== null) {
- mapping.source = this._sources.at(mapping.source);
- mapping.source = util$1.computeSourceURL(sourceRoot, mapping.source, this._sourceMapURL);
-
- if (mapping.name !== null) {
- mapping.name = this._names.at(mapping.name);
- }
- }
-
- aCallback.call(context, mapping);
- },
- () => {
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- this._wasm.exports.by_generated_location(this._getMappingsPtr());
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- this._wasm.exports.by_original_location(this._getMappingsPtr());
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
- }
- );
- }
-
- allGeneratedPositionsFor(aArgs) {
- let source = util$1.getArg(aArgs, "source");
- const originalLine = util$1.getArg(aArgs, "line");
- const originalColumn = aArgs.column || 0;
-
- source = this._findSourceIndex(source);
- if (source < 0) {
- return [];
- }
-
- if (originalLine < 1) {
- throw new Error("Line numbers must be >= 1");
- }
-
- if (originalColumn < 0) {
- throw new Error("Column numbers must be >= 0");
- }
-
- const mappings = [];
-
- this._wasm.withMappingCallback(
- m => {
- let lastColumn = m.lastGeneratedColumn;
- if (this._computedColumnSpans && lastColumn === null) {
- lastColumn = Infinity;
- }
- mappings.push({
- line: m.generatedLine,
- column: m.generatedColumn,
- lastColumn,
- });
- }, () => {
- this._wasm.exports.all_generated_locations_for(
- this._getMappingsPtr(),
- source,
- originalLine - 1,
- "column" in aArgs,
- originalColumn
- );
- }
- );
-
- return mappings;
- }
-
- destroy() {
- if (this._mappingsPtr !== 0) {
- this._wasm.exports.free_mappings(this._mappingsPtr);
- this._mappingsPtr = 0;
- }
- }
-
- /**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
- computeColumnSpans() {
- if (this._computedColumnSpans) {
- return;
- }
-
- this._wasm.exports.compute_column_spans(this._getMappingsPtr());
- this._computedColumnSpans = true;
- }
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- originalPositionFor(aArgs) {
- const needle = {
- generatedLine: util$1.getArg(aArgs, "line"),
- generatedColumn: util$1.getArg(aArgs, "column")
- };
-
- if (needle.generatedLine < 1) {
- throw new Error("Line numbers must be >= 1");
- }
-
- if (needle.generatedColumn < 0) {
- throw new Error("Column numbers must be >= 0");
- }
-
- let bias = util$1.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND);
- if (bias == null) {
- bias = SourceMapConsumer.GREATEST_LOWER_BOUND;
- }
-
- let mapping;
- this._wasm.withMappingCallback(m => mapping = m, () => {
- this._wasm.exports.original_location_for(
- this._getMappingsPtr(),
- needle.generatedLine - 1,
- needle.generatedColumn,
- bias
- );
- });
-
- if (mapping) {
- if (mapping.generatedLine === needle.generatedLine) {
- let source = util$1.getArg(mapping, "source", null);
- if (source !== null) {
- source = this._sources.at(source);
- source = util$1.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
- }
-
- let name = util$1.getArg(mapping, "name", null);
- if (name !== null) {
- name = this._names.at(name);
- }
-
- return {
- source,
- line: util$1.getArg(mapping, "originalLine", null),
- column: util$1.getArg(mapping, "originalColumn", null),
- name
- };
- }
- }
-
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
-
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- hasContentsOfAllSources() {
- if (!this.sourcesContent) {
- return false;
- }
- return this.sourcesContent.length >= this._sources.size() &&
- !this.sourcesContent.some(function(sc) { return sc == null; });
- }
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- sourceContentFor(aSource, nullOnMissing) {
- if (!this.sourcesContent) {
- return null;
- }
-
- const index = this._findSourceIndex(aSource);
- if (index >= 0) {
- return this.sourcesContent[index];
- }
-
- let relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util$1.relative(this.sourceRoot, relativeSource);
- }
-
- let url;
- if (this.sourceRoot != null
- && (url = util$1.urlParse(this.sourceRoot))) {
- // XXX: file:// URIs and absolute paths lead to unexpected behavior for
- // many users. We can help them out when they expect file:// URIs to
- // behave like it would if they were running a local HTTP server. See
- // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
- const fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
- if (url.scheme == "file"
- && this._sources.has(fileUriAbsPath)) {
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];
- }
-
- if ((!url.path || url.path == "/")
- && this._sources.has("/" + relativeSource)) {
- return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
- }
- }
-
- // This function is used recursively from
- // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
- // don't want to throw if we can't find the source - we just want to
- // return null, so we provide a flag to exit gracefully.
- if (nullOnMissing) {
- return null;
- }
-
- throw new Error('"' + relativeSource + '" is not in the SourceMap.');
- }
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- generatedPositionFor(aArgs) {
- let source = util$1.getArg(aArgs, "source");
- source = this._findSourceIndex(source);
- if (source < 0) {
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
-
- const needle = {
- source,
- originalLine: util$1.getArg(aArgs, "line"),
- originalColumn: util$1.getArg(aArgs, "column")
- };
-
- if (needle.originalLine < 1) {
- throw new Error("Line numbers must be >= 1");
- }
-
- if (needle.originalColumn < 0) {
- throw new Error("Column numbers must be >= 0");
- }
-
- let bias = util$1.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND);
- if (bias == null) {
- bias = SourceMapConsumer.GREATEST_LOWER_BOUND;
- }
-
- let mapping;
- this._wasm.withMappingCallback(m => mapping = m, () => {
- this._wasm.exports.generated_location_for(
- this._getMappingsPtr(),
- needle.source,
- needle.originalLine - 1,
- needle.originalColumn,
- bias
- );
- });
-
- if (mapping) {
- if (mapping.source === needle.source) {
- let lastColumn = mapping.lastGeneratedColumn;
- if (this._computedColumnSpans && lastColumn === null) {
- lastColumn = Infinity;
- }
- return {
- line: util$1.getArg(mapping, "generatedLine", null),
- column: util$1.getArg(mapping, "generatedColumn", null),
- lastColumn,
- };
- }
- }
-
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
-}
-
-BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
-sourceMapConsumer.BasicSourceMapConsumer = BasicSourceMapConsumer;
-
-/**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The first parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - file: Optional. The generated file this source map is associated with.
- * - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- * - offset: The offset into the original specified at which this section
- * begins to apply, defined as an object with a "line" and "column"
- * field.
- * - map: A source map definition. This source map could also be indexed,
- * but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- * {
- * version : 3,
- * file: "app.js",
- * sections: [{
- * offset: {line:100, column:10},
- * map: {
- * version : 3,
- * file: "section.js",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AAAA,E;;ABCDE;"
- * }
- * }],
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
-class IndexedSourceMapConsumer extends SourceMapConsumer {
- constructor(aSourceMap, aSourceMapURL) {
- return super(INTERNAL).then(that => {
- let sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util$1.parseSourceMapInput(aSourceMap);
- }
-
- const version = util$1.getArg(sourceMap, "version");
- const sections = util$1.getArg(sourceMap, "sections");
-
- if (version != that._version) {
- throw new Error("Unsupported version: " + version);
- }
-
- that._sources = new ArraySet();
- that._names = new ArraySet();
- that.__generatedMappings = null;
- that.__originalMappings = null;
- that.__generatedMappingsUnsorted = null;
- that.__originalMappingsUnsorted = null;
-
- let lastOffset = {
- line: -1,
- column: 0
- };
- return Promise.all(sections.map(s => {
- if (s.url) {
- // The url field will require support for asynchronicity.
- // See https://github.com/mozilla/source-map/issues/16
- throw new Error("Support for url field in sections not implemented.");
- }
- const offset = util$1.getArg(s, "offset");
- const offsetLine = util$1.getArg(offset, "line");
- const offsetColumn = util$1.getArg(offset, "column");
-
- if (offsetLine < lastOffset.line ||
- (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
- throw new Error("Section offsets must be ordered and non-overlapping.");
- }
- lastOffset = offset;
-
- const cons = new SourceMapConsumer(util$1.getArg(s, "map"), aSourceMapURL);
- return cons.then(consumer => {
- return {
- generatedOffset: {
- // The offset fields are 0-based, but we use 1-based indices when
- // encoding/decoding from VLQ.
- generatedLine: offsetLine + 1,
- generatedColumn: offsetColumn + 1
- },
- consumer
- };
- });
- })).then(s => {
- that._sections = s;
- return that;
- });
- });
- }
-
- // `__generatedMappings` and `__originalMappings` are arrays that hold the
- // parsed mapping coordinates from the source map's "mappings" attribute. They
- // are lazily instantiated, accessed via the `_generatedMappings` and
- // `_originalMappings` getters respectively, and we only parse the mappings
- // and create these arrays once queried for a source location. We jump through
- // these hoops because there can be many thousands of mappings, and parsing
- // them is expensive, so we only want to do it if we must.
- //
- // Each object in the arrays is of the form:
- //
- // {
- // generatedLine: The line number in the generated code,
- // generatedColumn: The column number in the generated code,
- // source: The path to the original source file that generated this
- // chunk of code,
- // originalLine: The line number in the original source that
- // corresponds to this chunk of generated code,
- // originalColumn: The column number in the original source that
- // corresponds to this chunk of generated code,
- // name: The name of the original symbol which generated this chunk of
- // code.
- // }
- //
- // All properties except for `generatedLine` and `generatedColumn` can be
- // `null`.
- //
- // `_generatedMappings` is ordered by the generated positions.
- //
- // `_originalMappings` is ordered by the original positions.
- get _generatedMappings() {
- if (!this.__generatedMappings) {
- this._sortGeneratedMappings();
- }
-
- return this.__generatedMappings;
- }
-
- get _originalMappings() {
- if (!this.__originalMappings) {
- this._sortOriginalMappings();
- }
-
- return this.__originalMappings;
- }
-
- get _generatedMappingsUnsorted() {
- if (!this.__generatedMappingsUnsorted) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__generatedMappingsUnsorted;
- }
-
- get _originalMappingsUnsorted() {
- if (!this.__originalMappingsUnsorted) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__originalMappingsUnsorted;
- }
-
- _sortGeneratedMappings() {
- const mappings = this._generatedMappingsUnsorted;
- mappings.sort(util$1.compareByGeneratedPositionsDeflated);
- this.__generatedMappings = mappings;
- }
-
- _sortOriginalMappings() {
- const mappings = this._originalMappingsUnsorted;
- mappings.sort(util$1.compareByOriginalPositions);
- this.__originalMappings = mappings;
- }
-
- /**
- * The list of original sources.
- */
- get sources() {
- const sources = [];
- for (let i = 0; i < this._sections.length; i++) {
- for (let j = 0; j < this._sections[i].consumer.sources.length; j++) {
- sources.push(this._sections[i].consumer.sources[j]);
- }
- }
- return sources;
- }
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- originalPositionFor(aArgs) {
- const needle = {
- generatedLine: util$1.getArg(aArgs, "line"),
- generatedColumn: util$1.getArg(aArgs, "column")
- };
-
- // Find the section containing the generated position we're trying to map
- // to an original position.
- const sectionIndex = binarySearch.search(needle, this._sections,
- function(aNeedle, section) {
- const cmp = aNeedle.generatedLine - section.generatedOffset.generatedLine;
- if (cmp) {
- return cmp;
- }
-
- return (aNeedle.generatedColumn -
- section.generatedOffset.generatedColumn);
- });
- const section = this._sections[sectionIndex];
-
- if (!section) {
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
-
- return section.consumer.originalPositionFor({
- line: needle.generatedLine -
- (section.generatedOffset.generatedLine - 1),
- column: needle.generatedColumn -
- (section.generatedOffset.generatedLine === needle.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- bias: aArgs.bias
- });
- }
-
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- hasContentsOfAllSources() {
- return this._sections.every(function(s) {
- return s.consumer.hasContentsOfAllSources();
- });
- }
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- sourceContentFor(aSource, nullOnMissing) {
- for (let i = 0; i < this._sections.length; i++) {
- const section = this._sections[i];
-
- const content = section.consumer.sourceContentFor(aSource, true);
- if (content) {
- return content;
- }
- }
- if (nullOnMissing) {
- return null;
- }
- throw new Error('"' + aSource + '" is not in the SourceMap.');
- }
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- generatedPositionFor(aArgs) {
- for (let i = 0; i < this._sections.length; i++) {
- const section = this._sections[i];
-
- // Only consider this section if the requested source is in the list of
- // sources of the consumer.
- if (section.consumer._findSourceIndex(util$1.getArg(aArgs, "source")) === -1) {
- continue;
- }
- const generatedPosition = section.consumer.generatedPositionFor(aArgs);
- if (generatedPosition) {
- const ret = {
- line: generatedPosition.line +
- (section.generatedOffset.generatedLine - 1),
- column: generatedPosition.column +
- (section.generatedOffset.generatedLine === generatedPosition.line
- ? section.generatedOffset.generatedColumn - 1
- : 0)
- };
- return ret;
- }
- }
-
- return {
- line: null,
- column: null
- };
- }
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- _parseMappings(aStr, aSourceRoot) {
- const generatedMappings = this.__generatedMappingsUnsorted = [];
- const originalMappings = this.__originalMappingsUnsorted = [];
- for (let i = 0; i < this._sections.length; i++) {
- const section = this._sections[i];
-
- const sectionMappings = [];
- section.consumer.eachMapping(m => sectionMappings.push(m));
-
- for (let j = 0; j < sectionMappings.length; j++) {
- const mapping = sectionMappings[j];
-
- // TODO: test if null is correct here. The original code used
- // `source`, which would actually have gotten used as null because
- // var's get hoisted.
- // See: https://github.com/mozilla/source-map/issues/333
- let source = util$1.computeSourceURL(section.consumer.sourceRoot, null, this._sourceMapURL);
- this._sources.add(source);
- source = this._sources.indexOf(source);
-
- let name = null;
- if (mapping.name) {
- this._names.add(mapping.name);
- name = this._names.indexOf(mapping.name);
- }
-
- // The mappings coming from the consumer for the section have
- // generated positions relative to the start of the section, so we
- // need to offset them to be relative to the start of the concatenated
- // generated file.
- const adjustedMapping = {
- source,
- generatedLine: mapping.generatedLine +
- (section.generatedOffset.generatedLine - 1),
- generatedColumn: mapping.generatedColumn +
- (section.generatedOffset.generatedLine === mapping.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name
- };
-
- generatedMappings.push(adjustedMapping);
- if (typeof adjustedMapping.originalLine === "number") {
- originalMappings.push(adjustedMapping);
- }
- }
- }
- }
-
- eachMapping(aCallback, aContext, aOrder) {
- const context = aContext || null;
- const order = aOrder || SourceMapConsumer.GENERATED_ORDER;
-
- let mappings;
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- mappings = this._generatedMappings;
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- mappings = this._originalMappings;
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
-
- const sourceRoot = this.sourceRoot;
- mappings.map(function(mapping) {
- let source = null;
- if (mapping.source !== null) {
- source = this._sources.at(mapping.source);
- source = util$1.computeSourceURL(sourceRoot, source, this._sourceMapURL);
- }
- return {
- source,
- generatedLine: mapping.generatedLine,
- generatedColumn: mapping.generatedColumn,
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: mapping.name === null ? null : this._names.at(mapping.name)
- };
- }, this).forEach(aCallback, context);
- }
-
- /**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
- _findMapping(aNeedle, aMappings, aLineName,
- aColumnName, aComparator, aBias) {
- // To return the position we are searching for, we must first find the
- // mapping for the given position and then return the opposite position it
- // points to. Because the mappings are sorted, we can use binary search to
- // find the best mapping.
-
- if (aNeedle[aLineName] <= 0) {
- throw new TypeError("Line must be greater than or equal to 1, got "
- + aNeedle[aLineName]);
- }
- if (aNeedle[aColumnName] < 0) {
- throw new TypeError("Column must be greater than or equal to 0, got "
- + aNeedle[aColumnName]);
- }
-
- return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
- }
-
- allGeneratedPositionsFor(aArgs) {
- const line = util$1.getArg(aArgs, "line");
-
- // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
- // returns the index of the closest mapping less than the needle. By
- // setting needle.originalColumn to 0, we thus find the last mapping for
- // the given line, provided such a mapping exists.
- const needle = {
- source: util$1.getArg(aArgs, "source"),
- originalLine: line,
- originalColumn: util$1.getArg(aArgs, "column", 0)
- };
-
- needle.source = this._findSourceIndex(needle.source);
- if (needle.source < 0) {
- return [];
- }
-
- if (needle.originalLine < 1) {
- throw new Error("Line numbers must be >= 1");
- }
-
- if (needle.originalColumn < 0) {
- throw new Error("Column numbers must be >= 0");
- }
-
- const mappings = [];
-
- let index = this._findMapping(needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util$1.compareByOriginalPositions,
- binarySearch.LEAST_UPPER_BOUND);
- if (index >= 0) {
- let mapping = this._originalMappings[index];
-
- if (aArgs.column === undefined) {
- const originalLine = mapping.originalLine;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we found. Since
- // mappings are sorted, this is guaranteed to find all mappings for
- // the line we found.
- while (mapping && mapping.originalLine === originalLine) {
- let lastColumn = mapping.lastGeneratedColumn;
- if (this._computedColumnSpans && lastColumn === null) {
- lastColumn = Infinity;
- }
- mappings.push({
- line: util$1.getArg(mapping, "generatedLine", null),
- column: util$1.getArg(mapping, "generatedColumn", null),
- lastColumn,
- });
-
- mapping = this._originalMappings[++index];
- }
- } else {
- const originalColumn = mapping.originalColumn;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we were searching for.
- // Since mappings are sorted, this is guaranteed to find all mappings for
- // the line we are searching for.
- while (mapping &&
- mapping.originalLine === line &&
- mapping.originalColumn == originalColumn) {
- let lastColumn = mapping.lastGeneratedColumn;
- if (this._computedColumnSpans && lastColumn === null) {
- lastColumn = Infinity;
- }
- mappings.push({
- line: util$1.getArg(mapping, "generatedLine", null),
- column: util$1.getArg(mapping, "generatedColumn", null),
- lastColumn,
- });
-
- mapping = this._originalMappings[++index];
- }
- }
- }
-
- return mappings;
- }
-
- destroy() {
- for (let i = 0; i < this._sections.length; i++) {
- this._sections[i].consumer.destroy();
- }
- }
-}
-sourceMapConsumer.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
-
-/*
- * Cheat to get around inter-twingled classes. `factory()` can be at the end
- * where it has access to non-hoisted classes, but it gets hoisted itself.
- */
-function _factory(aSourceMap, aSourceMapURL) {
- let sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util$1.parseSourceMapInput(aSourceMap);
- }
-
- const consumer = sourceMap.sections != null
- ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
- : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
- return Promise.resolve(consumer);
-}
-
-function _factoryBSM(aSourceMap, aSourceMapURL) {
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
-}
-
-var sourceNode = {};
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-const SourceMapGenerator = sourceMapGenerator.SourceMapGenerator;
-const util = util$4;
-
-// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
-// operating systems these days (capturing the result).
-const REGEX_NEWLINE = /(\r?\n)/;
-
-// Newline character code for charCodeAt() comparisons
-const NEWLINE_CODE = 10;
-
-// Private symbol for identifying `SourceNode`s when multiple versions of
-// the source-map library are loaded. This MUST NOT CHANGE across
-// versions!
-const isSourceNode = "$$$isSourceNode$$$";
-
-/**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- * generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
-class SourceNode {
- constructor(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null) this.add(aChunks);
- }
-
- /**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- * SourceMapConsumer should be relative to.
- */
- static fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- // The SourceNode we want to fill with the generated code
- // and the SourceMap
- const node = new SourceNode();
-
- // All even indices of this array are one line of the generated code,
- // while all odd indices are the newlines between two adjacent lines
- // (since `REGEX_NEWLINE` captures its match).
- // Processed fragments are accessed by calling `shiftNextLine`.
- const remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- let remainingLinesIndex = 0;
- const shiftNextLine = function() {
- const lineContents = getNextLine();
- // The last line of a file might not have a newline.
- const newLine = getNextLine() || "";
- return lineContents + newLine;
-
- function getNextLine() {
- return remainingLinesIndex < remainingLines.length ?
- remainingLines[remainingLinesIndex++] : undefined;
- }
- };
-
- // We need to remember the position of "remainingLines"
- let lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
- // The generate SourceNodes we need a code range.
- // To extract it current and last mapping is used.
- // Here we store the last mapping.
- let lastMapping = null;
- let nextLine;
-
- aSourceMapConsumer.eachMapping(function(mapping) {
- if (lastMapping !== null) {
- // We add the code from "lastMapping" to "mapping":
- // First check if there is a new line in between.
- if (lastGeneratedLine < mapping.generatedLine) {
- // Associate first line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
- // The remaining code is added without mapping
- } else {
- // There is no new line in between.
- // Associate the code between "lastGeneratedColumn" and
- // "mapping.generatedColumn" with "lastMapping"
- nextLine = remainingLines[remainingLinesIndex] || "";
- const code = nextLine.substr(0, mapping.generatedColumn -
- lastGeneratedColumn);
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
- lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- // No more remaining code, continue
- lastMapping = mapping;
- return;
- }
- }
- // We add the generated code until the first mapping
- // to the SourceNode without any mapping.
- // Each line is added as separate string.
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- nextLine = remainingLines[remainingLinesIndex] || "";
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- }
- lastMapping = mapping;
- }, this);
- // We have processed all mappings.
- if (remainingLinesIndex < remainingLines.length) {
- if (lastMapping) {
- // Associate the remaining code in the current line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- }
- // and add the remaining lines without any mapping
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
- }
-
- // Copy sourcesContent into SourceNode
- aSourceMapConsumer.sources.forEach(function(sourceFile) {
- const content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
-
- return node;
-
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === undefined) {
- node.add(code);
- } else {
- const source = aRelativePath
- ? util.join(aRelativePath, mapping.source)
- : mapping.source;
- node.add(new SourceNode(mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name));
- }
- }
- }
-
- /**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function(chunk) {
- this.add(chunk);
- }, this);
- } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
- }
- } else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- }
-
- /**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (let i = aChunk.length - 1; i >= 0; i--) {
- this.prepend(aChunk[i]);
- }
- } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- } else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- }
-
- /**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
- walk(aFn) {
- let chunk;
- for (let i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
- } else if (chunk !== "") {
- aFn(chunk, { source: this.source,
- line: this.line,
- column: this.column,
- name: this.name });
- }
- }
- }
-
- /**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
- join(aSep) {
- let newChildren;
- let i;
- const len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len - 1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
- }
- return this;
- }
-
- /**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
- replaceRight(aPattern, aReplacement) {
- const lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- } else if (typeof lastChild === "string") {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- } else {
- this.children.push("".replace(aPattern, aReplacement));
- }
- return this;
- }
-
- /**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
- setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- }
-
- /**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
- walkSourceContents(aFn) {
- for (let i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
- }
- }
-
- const sources = Object.keys(this.sourceContents);
- for (let i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
- }
- }
-
- /**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
- toString() {
- let str = "";
- this.walk(function(chunk) {
- str += chunk;
- });
- return str;
- }
-
- /**
- * Returns the string representation of this source node along with a source
- * map.
- */
- toStringWithSourceMap(aArgs) {
- const generated = {
- code: "",
- line: 1,
- column: 0
- };
- const map = new SourceMapGenerator(aArgs);
- let sourceMappingActive = false;
- let lastOriginalSource = null;
- let lastOriginalLine = null;
- let lastOriginalColumn = null;
- let lastOriginalName = null;
- this.walk(function(chunk, original) {
- generated.code += chunk;
- if (original.source !== null
- && original.line !== null
- && original.column !== null) {
- if (lastOriginalSource !== original.source
- || lastOriginalLine !== original.line
- || lastOriginalColumn !== original.column
- || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
- });
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (let idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- // Mappings end at eol
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- } else {
- generated.column++;
- }
- }
- });
- this.walkSourceContents(function(sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
-
- return { code: generated.code, map };
- }
-}
-
-sourceNode.SourceNode = SourceNode;
-
-/*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-sourceMap.SourceMapGenerator = sourceMapGenerator.SourceMapGenerator;
-sourceMap.SourceMapConsumer = sourceMapConsumer.SourceMapConsumer;
-sourceMap.SourceNode = sourceNode.SourceNode;
-
-(function (module, exports) {
-(function (global, factory) {
-factory(exports, sourceMap) ;
-}(commonjsGlobal, (function (exports, MOZ_SourceMap) {
-function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
-
-var MOZ_SourceMap__default = /*#__PURE__*/_interopDefaultLegacy(MOZ_SourceMap);
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-function characters(str) {
- return str.split("");
-}
-
-function member(name, array) {
- return array.includes(name);
-}
-
-class DefaultsError extends Error {
- constructor(msg, defs) {
- super();
-
- this.name = "DefaultsError";
- this.message = msg;
- this.defs = defs;
- }
-}
-
-function defaults(args, defs, croak) {
- if (args === true) {
- args = {};
- } else if (args != null && typeof args === "object") {
- args = {...args};
- }
-
- const ret = args || {};
-
- if (croak) for (const i in ret) if (HOP(ret, i) && !HOP(defs, i)) {
- throw new DefaultsError("`" + i + "` is not a supported option", defs);
- }
-
- for (const i in defs) if (HOP(defs, i)) {
- if (!args || !HOP(args, i)) {
- ret[i] = defs[i];
- } else if (i === "ecma") {
- let ecma = args[i] | 0;
- if (ecma > 5 && ecma < 2015) ecma += 2009;
- ret[i] = ecma;
- } else {
- ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];
- }
- }
-
- return ret;
-}
-
-function noop() {}
-function return_false() { return false; }
-function return_true() { return true; }
-function return_this() { return this; }
-function return_null() { return null; }
-
-var MAP = (function() {
- function MAP(a, f, backwards) {
- var ret = [], top = [], i;
- function doit() {
- var val = f(a[i], i);
- var is_last = val instanceof Last;
- if (is_last) val = val.v;
- if (val instanceof AtTop) {
- val = val.v;
- if (val instanceof Splice) {
- top.push.apply(top, backwards ? val.v.slice().reverse() : val.v);
- } else {
- top.push(val);
- }
- } else if (val !== skip) {
- if (val instanceof Splice) {
- ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v);
- } else {
- ret.push(val);
- }
- }
- return is_last;
- }
- if (Array.isArray(a)) {
- if (backwards) {
- for (i = a.length; --i >= 0;) if (doit()) break;
- ret.reverse();
- top.reverse();
- } else {
- for (i = 0; i < a.length; ++i) if (doit()) break;
- }
- } else {
- for (i in a) if (HOP(a, i)) if (doit()) break;
- }
- return top.concat(ret);
- }
- MAP.at_top = function(val) { return new AtTop(val); };
- MAP.splice = function(val) { return new Splice(val); };
- MAP.last = function(val) { return new Last(val); };
- var skip = MAP.skip = {};
- function AtTop(val) { this.v = val; }
- function Splice(val) { this.v = val; }
- function Last(val) { this.v = val; }
- return MAP;
-})();
-
-function make_node(ctor, orig, props) {
- if (!props) props = {};
- if (orig) {
- if (!props.start) props.start = orig.start;
- if (!props.end) props.end = orig.end;
- }
- return new ctor(props);
-}
-
-function push_uniq(array, el) {
- if (!array.includes(el))
- array.push(el);
-}
-
-function string_template(text, props) {
- return text.replace(/{(.+?)}/g, function(str, p) {
- return props && props[p];
- });
-}
-
-function remove(array, el) {
- for (var i = array.length; --i >= 0;) {
- if (array[i] === el) array.splice(i, 1);
- }
-}
-
-function mergeSort(array, cmp) {
- if (array.length < 2) return array.slice();
- function merge(a, b) {
- var r = [], ai = 0, bi = 0, i = 0;
- while (ai < a.length && bi < b.length) {
- cmp(a[ai], b[bi]) <= 0
- ? r[i++] = a[ai++]
- : r[i++] = b[bi++];
- }
- if (ai < a.length) r.push.apply(r, a.slice(ai));
- if (bi < b.length) r.push.apply(r, b.slice(bi));
- return r;
- }
- function _ms(a) {
- if (a.length <= 1)
- return a;
- var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);
- left = _ms(left);
- right = _ms(right);
- return merge(left, right);
- }
- return _ms(array);
-}
-
-function makePredicate(words) {
- if (!Array.isArray(words)) words = words.split(" ");
-
- return new Set(words.sort());
-}
-
-function map_add(map, key, value) {
- if (map.has(key)) {
- map.get(key).push(value);
- } else {
- map.set(key, [ value ]);
- }
-}
-
-function map_from_object(obj) {
- var map = new Map();
- for (var key in obj) {
- if (HOP(obj, key) && key.charAt(0) === "$") {
- map.set(key.substr(1), obj[key]);
- }
- }
- return map;
-}
-
-function map_to_object(map) {
- var obj = Object.create(null);
- map.forEach(function (value, key) {
- obj["$" + key] = value;
- });
- return obj;
-}
-
-function HOP(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
-}
-
-function keep_name(keep_setting, name) {
- return keep_setting === true
- || (keep_setting instanceof RegExp && keep_setting.test(name));
-}
-
-var lineTerminatorEscape = {
- "\0": "0",
- "\n": "n",
- "\r": "r",
- "\u2028": "u2028",
- "\u2029": "u2029",
-};
-function regexp_source_fix(source) {
- // V8 does not escape line terminators in regexp patterns in node 12
- // We'll also remove literal \0
- return source.replace(/[\0\n\r\u2028\u2029]/g, function (match, offset) {
- var escaped = source[offset - 1] == "\\"
- && (source[offset - 2] != "\\"
- || /(?:^|[^\\])(?:\\{2})*$/.test(source.slice(0, offset - 1)));
- return (escaped ? "" : "\\") + lineTerminatorEscape[match];
- });
-}
-const all_flags = "gimuy";
-function sort_regexp_flags(flags) {
- const existing_flags = new Set(flags.split(""));
- let out = "";
- for (const flag of all_flags) {
- if (existing_flags.has(flag)) {
- out += flag;
- existing_flags.delete(flag);
- }
- }
- if (existing_flags.size) {
- // Flags Terser doesn't know about
- existing_flags.forEach(flag => { out += flag; });
- }
- return out;
-}
-
-function has_annotation(node, annotation) {
- return node._annotations & annotation;
-}
-
-function set_annotation(node, annotation) {
- node._annotations |= annotation;
-}
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
- Parser based on parse-js (http://marijn.haverbeke.nl/parse-js/).
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-var LATEST_RAW = ""; // Only used for numbers and template strings
-var LATEST_TEMPLATE_END = true;
-
-var KEYWORDS = "break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with";
-var KEYWORDS_ATOM = "false null true";
-var RESERVED_WORDS = "enum import super this " + KEYWORDS_ATOM + " " + KEYWORDS;
-var ALL_RESERVED_WORDS = "implements interface package private protected public static " + RESERVED_WORDS;
-var KEYWORDS_BEFORE_EXPRESSION = "return new delete throw else case yield await";
-
-KEYWORDS = makePredicate(KEYWORDS);
-RESERVED_WORDS = makePredicate(RESERVED_WORDS);
-KEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION);
-KEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM);
-ALL_RESERVED_WORDS = makePredicate(ALL_RESERVED_WORDS);
-
-var OPERATOR_CHARS = makePredicate(characters("+-*&%=<>!?|~^"));
-
-var RE_NUM_LITERAL = /[0-9a-f]/i;
-var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;
-var RE_OCT_NUMBER = /^0[0-7]+$/;
-var RE_ES6_OCT_NUMBER = /^0o[0-7]+$/i;
-var RE_BIN_NUMBER = /^0b[01]+$/i;
-var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i;
-var RE_BIG_INT = /^(0[xob])?[0-9a-f]+n$/i;
-
-var OPERATORS = makePredicate([
- "in",
- "instanceof",
- "typeof",
- "new",
- "void",
- "delete",
- "++",
- "--",
- "+",
- "-",
- "!",
- "~",
- "&",
- "|",
- "^",
- "*",
- "**",
- "/",
- "%",
- ">>",
- "<<",
- ">>>",
- "<",
- ">",
- "<=",
- ">=",
- "==",
- "===",
- "!=",
- "!==",
- "?",
- "=",
- "+=",
- "-=",
- "||=",
- "&&=",
- "??=",
- "/=",
- "*=",
- "**=",
- "%=",
- ">>=",
- "<<=",
- ">>>=",
- "|=",
- "^=",
- "&=",
- "&&",
- "??",
- "||",
-]);
-
-var WHITESPACE_CHARS = makePredicate(characters(" \u00a0\n\r\t\f\u000b\u200b\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000\uFEFF"));
-
-var NEWLINE_CHARS = makePredicate(characters("\n\r\u2028\u2029"));
-
-var PUNC_AFTER_EXPRESSION = makePredicate(characters(";]),:"));
-
-var PUNC_BEFORE_EXPRESSION = makePredicate(characters("[{(,;:"));
-
-var PUNC_CHARS = makePredicate(characters("[]{}(),;:"));
-
-/* -----[ Tokenizer ]----- */
-
-// surrogate safe regexps adapted from https://github.com/mathiasbynens/unicode-8.0.0/tree/89b412d8a71ecca9ed593d9e9fa073ab64acfebe/Binary_Property
-var UNICODE = {
- ID_Start: /[$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
- ID_Continue: /(?:[$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF])+/,
-};
-
-function get_full_char(str, pos) {
- if (is_surrogate_pair_head(str.charCodeAt(pos))) {
- if (is_surrogate_pair_tail(str.charCodeAt(pos + 1))) {
- return str.charAt(pos) + str.charAt(pos + 1);
- }
- } else if (is_surrogate_pair_tail(str.charCodeAt(pos))) {
- if (is_surrogate_pair_head(str.charCodeAt(pos - 1))) {
- return str.charAt(pos - 1) + str.charAt(pos);
- }
- }
- return str.charAt(pos);
-}
-
-function get_full_char_code(str, pos) {
- // https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates
- if (is_surrogate_pair_head(str.charCodeAt(pos))) {
- return 0x10000 + (str.charCodeAt(pos) - 0xd800 << 10) + str.charCodeAt(pos + 1) - 0xdc00;
- }
- return str.charCodeAt(pos);
-}
-
-function get_full_char_length(str) {
- var surrogates = 0;
-
- for (var i = 0; i < str.length; i++) {
- if (is_surrogate_pair_head(str.charCodeAt(i)) && is_surrogate_pair_tail(str.charCodeAt(i + 1))) {
- surrogates++;
- i++;
- }
- }
-
- return str.length - surrogates;
-}
-
-function from_char_code(code) {
- // Based on https://github.com/mathiasbynens/String.fromCodePoint/blob/master/fromcodepoint.js
- if (code > 0xFFFF) {
- code -= 0x10000;
- return (String.fromCharCode((code >> 10) + 0xD800) +
- String.fromCharCode((code % 0x400) + 0xDC00));
- }
- return String.fromCharCode(code);
-}
-
-function is_surrogate_pair_head(code) {
- return code >= 0xd800 && code <= 0xdbff;
-}
-
-function is_surrogate_pair_tail(code) {
- return code >= 0xdc00 && code <= 0xdfff;
-}
-
-function is_digit(code) {
- return code >= 48 && code <= 57;
-}
-
-function is_identifier_start(ch) {
- return UNICODE.ID_Start.test(ch);
-}
-
-function is_identifier_char(ch) {
- return UNICODE.ID_Continue.test(ch);
-}
-
-const BASIC_IDENT = /^[a-z_$][a-z0-9_$]*$/i;
-
-function is_basic_identifier_string(str) {
- return BASIC_IDENT.test(str);
-}
-
-function is_identifier_string(str, allow_surrogates) {
- if (BASIC_IDENT.test(str)) {
- return true;
- }
- if (!allow_surrogates && /[\ud800-\udfff]/.test(str)) {
- return false;
- }
- var match = UNICODE.ID_Start.exec(str);
- if (!match || match.index !== 0) {
- return false;
- }
-
- str = str.slice(match[0].length);
- if (!str) {
- return true;
- }
-
- match = UNICODE.ID_Continue.exec(str);
- return !!match && match[0].length === str.length;
-}
-
-function parse_js_number(num, allow_e = true) {
- if (!allow_e && num.includes("e")) {
- return NaN;
- }
- if (RE_HEX_NUMBER.test(num)) {
- return parseInt(num.substr(2), 16);
- } else if (RE_OCT_NUMBER.test(num)) {
- return parseInt(num.substr(1), 8);
- } else if (RE_ES6_OCT_NUMBER.test(num)) {
- return parseInt(num.substr(2), 8);
- } else if (RE_BIN_NUMBER.test(num)) {
- return parseInt(num.substr(2), 2);
- } else if (RE_DEC_NUMBER.test(num)) {
- return parseFloat(num);
- } else {
- var val = parseFloat(num);
- if (val == num) return val;
- }
-}
-
-class JS_Parse_Error extends Error {
- constructor(message, filename, line, col, pos) {
- super();
-
- this.name = "SyntaxError";
- this.message = message;
- this.filename = filename;
- this.line = line;
- this.col = col;
- this.pos = pos;
- }
-}
-
-function js_error(message, filename, line, col, pos) {
- throw new JS_Parse_Error(message, filename, line, col, pos);
-}
-
-function is_token(token, type, val) {
- return token.type == type && (val == null || token.value == val);
-}
-
-var EX_EOF = {};
-
-function tokenizer($TEXT, filename, html5_comments, shebang) {
- var S = {
- text : $TEXT,
- filename : filename,
- pos : 0,
- tokpos : 0,
- line : 1,
- tokline : 0,
- col : 0,
- tokcol : 0,
- newline_before : false,
- regex_allowed : false,
- brace_counter : 0,
- template_braces : [],
- comments_before : [],
- directives : {},
- directive_stack : []
- };
-
- function peek() { return get_full_char(S.text, S.pos); }
-
- // Used because parsing ?. involves a lookahead for a digit
- function is_option_chain_op() {
- const must_be_dot = S.text.charCodeAt(S.pos + 1) === 46;
- if (!must_be_dot) return false;
-
- const cannot_be_digit = S.text.charCodeAt(S.pos + 2);
- return cannot_be_digit < 48 || cannot_be_digit > 57;
- }
-
- function next(signal_eof, in_string) {
- var ch = get_full_char(S.text, S.pos++);
- if (signal_eof && !ch)
- throw EX_EOF;
- if (NEWLINE_CHARS.has(ch)) {
- S.newline_before = S.newline_before || !in_string;
- ++S.line;
- S.col = 0;
- if (ch == "\r" && peek() == "\n") {
- // treat a \r\n sequence as a single \n
- ++S.pos;
- ch = "\n";
- }
- } else {
- if (ch.length > 1) {
- ++S.pos;
- ++S.col;
- }
- ++S.col;
- }
- return ch;
- }
-
- function forward(i) {
- while (i--) next();
- }
-
- function looking_at(str) {
- return S.text.substr(S.pos, str.length) == str;
- }
-
- function find_eol() {
- var text = S.text;
- for (var i = S.pos, n = S.text.length; i < n; ++i) {
- var ch = text[i];
- if (NEWLINE_CHARS.has(ch))
- return i;
- }
- return -1;
- }
-
- function find(what, signal_eof) {
- var pos = S.text.indexOf(what, S.pos);
- if (signal_eof && pos == -1) throw EX_EOF;
- return pos;
- }
-
- function start_token() {
- S.tokline = S.line;
- S.tokcol = S.col;
- S.tokpos = S.pos;
- }
-
- var prev_was_dot = false;
- var previous_token = null;
- function token(type, value, is_comment) {
- S.regex_allowed = ((type == "operator" && !UNARY_POSTFIX.has(value)) ||
- (type == "keyword" && KEYWORDS_BEFORE_EXPRESSION.has(value)) ||
- (type == "punc" && PUNC_BEFORE_EXPRESSION.has(value))) ||
- (type == "arrow");
- if (type == "punc" && (value == "." || value == "?.")) {
- prev_was_dot = true;
- } else if (!is_comment) {
- prev_was_dot = false;
- }
- const line = S.tokline;
- const col = S.tokcol;
- const pos = S.tokpos;
- const nlb = S.newline_before;
- const file = filename;
- let comments_before = [];
- let comments_after = [];
-
- if (!is_comment) {
- comments_before = S.comments_before;
- comments_after = S.comments_before = [];
- }
- S.newline_before = false;
- const tok = new AST_Token(type, value, line, col, pos, nlb, comments_before, comments_after, file);
-
- if (!is_comment) previous_token = tok;
- return tok;
- }
-
- function skip_whitespace() {
- while (WHITESPACE_CHARS.has(peek()))
- next();
- }
-
- function read_while(pred) {
- var ret = "", ch, i = 0;
- while ((ch = peek()) && pred(ch, i++))
- ret += next();
- return ret;
- }
-
- function parse_error(err) {
- js_error(err, filename, S.tokline, S.tokcol, S.tokpos);
- }
-
- function read_num(prefix) {
- var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".", is_big_int = false, numeric_separator = false;
- var num = read_while(function(ch, i) {
- if (is_big_int) return false;
-
- var code = ch.charCodeAt(0);
- switch (code) {
- case 95: // _
- return (numeric_separator = true);
- case 98: case 66: // bB
- return (has_x = true); // Can occur in hex sequence, don't return false yet
- case 111: case 79: // oO
- case 120: case 88: // xX
- return has_x ? false : (has_x = true);
- case 101: case 69: // eE
- return has_x ? true : has_e ? false : (has_e = after_e = true);
- case 45: // -
- return after_e || (i == 0 && !prefix);
- case 43: // +
- return after_e;
- case (after_e = false, 46): // .
- return (!has_dot && !has_x && !has_e) ? (has_dot = true) : false;
- }
-
- if (ch === "n") {
- is_big_int = true;
-
- return true;
- }
-
- return RE_NUM_LITERAL.test(ch);
- });
- if (prefix) num = prefix + num;
-
- LATEST_RAW = num;
-
- if (RE_OCT_NUMBER.test(num) && next_token.has_directive("use strict")) {
- parse_error("Legacy octal literals are not allowed in strict mode");
- }
- if (numeric_separator) {
- if (num.endsWith("_")) {
- parse_error("Numeric separators are not allowed at the end of numeric literals");
- } else if (num.includes("__")) {
- parse_error("Only one underscore is allowed as numeric separator");
- }
- num = num.replace(/_/g, "");
- }
- if (num.endsWith("n")) {
- const without_n = num.slice(0, -1);
- const allow_e = RE_HEX_NUMBER.test(without_n);
- const valid = parse_js_number(without_n, allow_e);
- if (!has_dot && RE_BIG_INT.test(num) && !isNaN(valid))
- return token("big_int", without_n);
- parse_error("Invalid or unexpected token");
- }
- var valid = parse_js_number(num);
- if (!isNaN(valid)) {
- return token("num", valid);
- } else {
- parse_error("Invalid syntax: " + num);
- }
- }
-
- function is_octal(ch) {
- return ch >= "0" && ch <= "7";
- }
-
- function read_escaped_char(in_string, strict_hex, template_string) {
- var ch = next(true, in_string);
- switch (ch.charCodeAt(0)) {
- case 110 : return "\n";
- case 114 : return "\r";
- case 116 : return "\t";
- case 98 : return "\b";
- case 118 : return "\u000b"; // \v
- case 102 : return "\f";
- case 120 : return String.fromCharCode(hex_bytes(2, strict_hex)); // \x
- case 117 : // \u
- if (peek() == "{") {
- next(true);
- if (peek() === "}")
- parse_error("Expecting hex-character between {}");
- while (peek() == "0") next(true); // No significance
- var result, length = find("}", true) - S.pos;
- // Avoid 32 bit integer overflow (1 << 32 === 1)
- // We know first character isn't 0 and thus out of range anyway
- if (length > 6 || (result = hex_bytes(length, strict_hex)) > 0x10FFFF) {
- parse_error("Unicode reference out of bounds");
- }
- next(true);
- return from_char_code(result);
- }
- return String.fromCharCode(hex_bytes(4, strict_hex));
- case 10 : return ""; // newline
- case 13 : // \r
- if (peek() == "\n") { // DOS newline
- next(true, in_string);
- return "";
- }
- }
- if (is_octal(ch)) {
- if (template_string && strict_hex) {
- const represents_null_character = ch === "0" && !is_octal(peek());
- if (!represents_null_character) {
- parse_error("Octal escape sequences are not allowed in template strings");
- }
- }
- return read_octal_escape_sequence(ch, strict_hex);
- }
- return ch;
- }
-
- function read_octal_escape_sequence(ch, strict_octal) {
- // Read
- var p = peek();
- if (p >= "0" && p <= "7") {
- ch += next(true);
- if (ch[0] <= "3" && (p = peek()) >= "0" && p <= "7")
- ch += next(true);
- }
-
- // Parse
- if (ch === "0") return "\0";
- if (ch.length > 0 && next_token.has_directive("use strict") && strict_octal)
- parse_error("Legacy octal escape sequences are not allowed in strict mode");
- return String.fromCharCode(parseInt(ch, 8));
- }
-
- function hex_bytes(n, strict_hex) {
- var num = 0;
- for (; n > 0; --n) {
- if (!strict_hex && isNaN(parseInt(peek(), 16))) {
- return parseInt(num, 16) || "";
- }
- var digit = next(true);
- if (isNaN(parseInt(digit, 16)))
- parse_error("Invalid hex-character pattern in string");
- num += digit;
- }
- return parseInt(num, 16);
- }
-
- var read_string = with_eof_error("Unterminated string constant", function() {
- const start_pos = S.pos;
- var quote = next(), ret = [];
- for (;;) {
- var ch = next(true, true);
- if (ch == "\\") ch = read_escaped_char(true, true);
- else if (ch == "\r" || ch == "\n") parse_error("Unterminated string constant");
- else if (ch == quote) break;
- ret.push(ch);
- }
- var tok = token("string", ret.join(""));
- LATEST_RAW = S.text.slice(start_pos, S.pos);
- tok.quote = quote;
- return tok;
- });
-
- var read_template_characters = with_eof_error("Unterminated template", function(begin) {
- if (begin) {
- S.template_braces.push(S.brace_counter);
- }
- var content = "", raw = "", ch, tok;
- next(true, true);
- while ((ch = next(true, true)) != "`") {
- if (ch == "\r") {
- if (peek() == "\n") ++S.pos;
- ch = "\n";
- } else if (ch == "$" && peek() == "{") {
- next(true, true);
- S.brace_counter++;
- tok = token(begin ? "template_head" : "template_substitution", content);
- LATEST_RAW = raw;
- LATEST_TEMPLATE_END = false;
- return tok;
- }
-
- raw += ch;
- if (ch == "\\") {
- var tmp = S.pos;
- var prev_is_tag = previous_token && (previous_token.type === "name" || previous_token.type === "punc" && (previous_token.value === ")" || previous_token.value === "]"));
- ch = read_escaped_char(true, !prev_is_tag, true);
- raw += S.text.substr(tmp, S.pos - tmp);
- }
-
- content += ch;
- }
- S.template_braces.pop();
- tok = token(begin ? "template_head" : "template_substitution", content);
- LATEST_RAW = raw;
- LATEST_TEMPLATE_END = true;
- return tok;
- });
-
- function skip_line_comment(type) {
- var regex_allowed = S.regex_allowed;
- var i = find_eol(), ret;
- if (i == -1) {
- ret = S.text.substr(S.pos);
- S.pos = S.text.length;
- } else {
- ret = S.text.substring(S.pos, i);
- S.pos = i;
- }
- S.col = S.tokcol + (S.pos - S.tokpos);
- S.comments_before.push(token(type, ret, true));
- S.regex_allowed = regex_allowed;
- return next_token;
- }
-
- var skip_multiline_comment = with_eof_error("Unterminated multiline comment", function() {
- var regex_allowed = S.regex_allowed;
- var i = find("*/", true);
- var text = S.text.substring(S.pos, i).replace(/\r\n|\r|\u2028|\u2029/g, "\n");
- // update stream position
- forward(get_full_char_length(text) /* text length doesn't count \r\n as 2 char while S.pos - i does */ + 2);
- S.comments_before.push(token("comment2", text, true));
- S.newline_before = S.newline_before || text.includes("\n");
- S.regex_allowed = regex_allowed;
- return next_token;
- });
-
- var read_name = with_eof_error("Unterminated identifier name", function() {
- var name = [], ch, escaped = false;
- var read_escaped_identifier_char = function() {
- escaped = true;
- next();
- if (peek() !== "u") {
- parse_error("Expecting UnicodeEscapeSequence -- uXXXX or u{XXXX}");
- }
- return read_escaped_char(false, true);
- };
-
- // Read first character (ID_Start)
- if ((ch = peek()) === "\\") {
- ch = read_escaped_identifier_char();
- if (!is_identifier_start(ch)) {
- parse_error("First identifier char is an invalid identifier char");
- }
- } else if (is_identifier_start(ch)) {
- next();
- } else {
- return "";
- }
-
- name.push(ch);
-
- // Read ID_Continue
- while ((ch = peek()) != null) {
- if ((ch = peek()) === "\\") {
- ch = read_escaped_identifier_char();
- if (!is_identifier_char(ch)) {
- parse_error("Invalid escaped identifier char");
- }
- } else {
- if (!is_identifier_char(ch)) {
- break;
- }
- next();
- }
- name.push(ch);
- }
- const name_str = name.join("");
- if (RESERVED_WORDS.has(name_str) && escaped) {
- parse_error("Escaped characters are not allowed in keywords");
- }
- return name_str;
- });
-
- var read_regexp = with_eof_error("Unterminated regular expression", function(source) {
- var prev_backslash = false, ch, in_class = false;
- while ((ch = next(true))) if (NEWLINE_CHARS.has(ch)) {
- parse_error("Unexpected line terminator");
- } else if (prev_backslash) {
- source += "\\" + ch;
- prev_backslash = false;
- } else if (ch == "[") {
- in_class = true;
- source += ch;
- } else if (ch == "]" && in_class) {
- in_class = false;
- source += ch;
- } else if (ch == "/" && !in_class) {
- break;
- } else if (ch == "\\") {
- prev_backslash = true;
- } else {
- source += ch;
- }
- const flags = read_name();
- return token("regexp", "/" + source + "/" + flags);
- });
-
- function read_operator(prefix) {
- function grow(op) {
- if (!peek()) return op;
- var bigger = op + peek();
- if (OPERATORS.has(bigger)) {
- next();
- return grow(bigger);
- } else {
- return op;
- }
- }
- return token("operator", grow(prefix || next()));
- }
-
- function handle_slash() {
- next();
- switch (peek()) {
- case "/":
- next();
- return skip_line_comment("comment1");
- case "*":
- next();
- return skip_multiline_comment();
- }
- return S.regex_allowed ? read_regexp("") : read_operator("/");
- }
-
- function handle_eq_sign() {
- next();
- if (peek() === ">") {
- next();
- return token("arrow", "=>");
- } else {
- return read_operator("=");
- }
- }
-
- function handle_dot() {
- next();
- if (is_digit(peek().charCodeAt(0))) {
- return read_num(".");
- }
- if (peek() === ".") {
- next(); // Consume second dot
- next(); // Consume third dot
- return token("expand", "...");
- }
-
- return token("punc", ".");
- }
-
- function read_word() {
- var word = read_name();
- if (prev_was_dot) return token("name", word);
- return KEYWORDS_ATOM.has(word) ? token("atom", word)
- : !KEYWORDS.has(word) ? token("name", word)
- : OPERATORS.has(word) ? token("operator", word)
- : token("keyword", word);
- }
-
- function read_private_word() {
- next();
- return token("privatename", read_name());
- }
-
- function with_eof_error(eof_error, cont) {
- return function(x) {
- try {
- return cont(x);
- } catch(ex) {
- if (ex === EX_EOF) parse_error(eof_error);
- else throw ex;
- }
- };
- }
-
- function next_token(force_regexp) {
- if (force_regexp != null)
- return read_regexp(force_regexp);
- if (shebang && S.pos == 0 && looking_at("#!")) {
- start_token();
- forward(2);
- skip_line_comment("comment5");
- }
- for (;;) {
- skip_whitespace();
- start_token();
- if (html5_comments) {
- if (looking_at("<!--")) {
- forward(4);
- skip_line_comment("comment3");
- continue;
- }
- if (looking_at("-->") && S.newline_before) {
- forward(3);
- skip_line_comment("comment4");
- continue;
- }
- }
- var ch = peek();
- if (!ch) return token("eof");
- var code = ch.charCodeAt(0);
- switch (code) {
- case 34: case 39: return read_string();
- case 46: return handle_dot();
- case 47: {
- var tok = handle_slash();
- if (tok === next_token) continue;
- return tok;
- }
- case 61: return handle_eq_sign();
- case 63: {
- if (!is_option_chain_op()) break; // Handled below
-
- next(); // ?
- next(); // .
-
- return token("punc", "?.");
- }
- case 96: return read_template_characters(true);
- case 123:
- S.brace_counter++;
- break;
- case 125:
- S.brace_counter--;
- if (S.template_braces.length > 0
- && S.template_braces[S.template_braces.length - 1] === S.brace_counter)
- return read_template_characters(false);
- break;
- }
- if (is_digit(code)) return read_num();
- if (PUNC_CHARS.has(ch)) return token("punc", next());
- if (OPERATOR_CHARS.has(ch)) return read_operator();
- if (code == 92 || is_identifier_start(ch)) return read_word();
- if (code == 35) return read_private_word();
- break;
- }
- parse_error("Unexpected character '" + ch + "'");
- }
-
- next_token.next = next;
- next_token.peek = peek;
-
- next_token.context = function(nc) {
- if (nc) S = nc;
- return S;
- };
-
- next_token.add_directive = function(directive) {
- S.directive_stack[S.directive_stack.length - 1].push(directive);
-
- if (S.directives[directive] === undefined) {
- S.directives[directive] = 1;
- } else {
- S.directives[directive]++;
- }
- };
-
- next_token.push_directives_stack = function() {
- S.directive_stack.push([]);
- };
-
- next_token.pop_directives_stack = function() {
- var directives = S.directive_stack[S.directive_stack.length - 1];
-
- for (var i = 0; i < directives.length; i++) {
- S.directives[directives[i]]--;
- }
-
- S.directive_stack.pop();
- };
-
- next_token.has_directive = function(directive) {
- return S.directives[directive] > 0;
- };
-
- return next_token;
-
-}
-
-/* -----[ Parser (constants) ]----- */
-
-var UNARY_PREFIX = makePredicate([
- "typeof",
- "void",
- "delete",
- "--",
- "++",
- "!",
- "~",
- "-",
- "+"
-]);
-
-var UNARY_POSTFIX = makePredicate([ "--", "++" ]);
-
-var ASSIGNMENT = makePredicate([ "=", "+=", "-=", "??=", "&&=", "||=", "/=", "*=", "**=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]);
-
-var LOGICAL_ASSIGNMENT = makePredicate([ "??=", "&&=", "||=" ]);
-
-var PRECEDENCE = (function(a, ret) {
- for (var i = 0; i < a.length; ++i) {
- var b = a[i];
- for (var j = 0; j < b.length; ++j) {
- ret[b[j]] = i + 1;
- }
- }
- return ret;
-})(
- [
- ["||"],
- ["??"],
- ["&&"],
- ["|"],
- ["^"],
- ["&"],
- ["==", "===", "!=", "!=="],
- ["<", ">", "<=", ">=", "in", "instanceof"],
- [">>", "<<", ">>>"],
- ["+", "-"],
- ["*", "/", "%"],
- ["**"]
- ],
- {}
-);
-
-var ATOMIC_START_TOKEN = makePredicate([ "atom", "num", "big_int", "string", "regexp", "name" ]);
-
-/* -----[ Parser ]----- */
-
-function parse($TEXT, options) {
- // maps start tokens to count of comments found outside of their parens
- // Example: /* I count */ ( /* I don't */ foo() )
- // Useful because comments_before property of call with parens outside
- // contains both comments inside and outside these parens. Used to find the
-
- const outer_comments_before_counts = new WeakMap();
-
- options = defaults(options, {
- bare_returns : false,
- ecma : null, // Legacy
- expression : false,
- filename : null,
- html5_comments : true,
- module : false,
- shebang : true,
- strict : false,
- toplevel : null,
- }, true);
-
- var S = {
- input : (typeof $TEXT == "string"
- ? tokenizer($TEXT, options.filename,
- options.html5_comments, options.shebang)
- : $TEXT),
- token : null,
- prev : null,
- peeked : null,
- in_function : 0,
- in_async : -1,
- in_generator : -1,
- in_directives : true,
- in_loop : 0,
- labels : []
- };
-
- S.token = next();
-
- function is(type, value) {
- return is_token(S.token, type, value);
- }
-
- function peek() { return S.peeked || (S.peeked = S.input()); }
-
- function next() {
- S.prev = S.token;
-
- if (!S.peeked) peek();
- S.token = S.peeked;
- S.peeked = null;
- S.in_directives = S.in_directives && (
- S.token.type == "string" || is("punc", ";")
- );
- return S.token;
- }
-
- function prev() {
- return S.prev;
- }
-
- function croak(msg, line, col, pos) {
- var ctx = S.input.context();
- js_error(msg,
- ctx.filename,
- line != null ? line : ctx.tokline,
- col != null ? col : ctx.tokcol,
- pos != null ? pos : ctx.tokpos);
- }
-
- function token_error(token, msg) {
- croak(msg, token.line, token.col);
- }
-
- function unexpected(token) {
- if (token == null)
- token = S.token;
- token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")");
- }
-
- function expect_token(type, val) {
- if (is(type, val)) {
- return next();
- }
- token_error(S.token, "Unexpected token " + S.token.type + " «" + S.token.value + "»" + ", expected " + type + " «" + val + "»");
- }
-
- function expect(punc) { return expect_token("punc", punc); }
-
- function has_newline_before(token) {
- return token.nlb || !token.comments_before.every((comment) => !comment.nlb);
- }
-
- function can_insert_semicolon() {
- return !options.strict
- && (is("eof") || is("punc", "}") || has_newline_before(S.token));
- }
-
- function is_in_generator() {
- return S.in_generator === S.in_function;
- }
-
- function is_in_async() {
- return S.in_async === S.in_function;
- }
-
- function can_await() {
- return (
- S.in_async === S.in_function
- || S.in_function === 0 && S.input.has_directive("use strict")
- );
- }
-
- function semicolon(optional) {
- if (is("punc", ";")) next();
- else if (!optional && !can_insert_semicolon()) unexpected();
- }
-
- function parenthesised() {
- expect("(");
- var exp = expression(true);
- expect(")");
- return exp;
- }
-
- function embed_tokens(parser) {
- return function _embed_tokens_wrapper(...args) {
- const start = S.token;
- const expr = parser(...args);
- expr.start = start;
- expr.end = prev();
- return expr;
- };
- }
-
- function handle_regexp() {
- if (is("operator", "/") || is("operator", "/=")) {
- S.peeked = null;
- S.token = S.input(S.token.value.substr(1)); // force regexp
- }
- }
-
- var statement = embed_tokens(function statement(is_export_default, is_for_body, is_if_body) {
- handle_regexp();
- switch (S.token.type) {
- case "string":
- if (S.in_directives) {
- var token = peek();
- if (!LATEST_RAW.includes("\\")
- && (is_token(token, "punc", ";")
- || is_token(token, "punc", "}")
- || has_newline_before(token)
- || is_token(token, "eof"))) {
- S.input.add_directive(S.token.value);
- } else {
- S.in_directives = false;
- }
- }
- var dir = S.in_directives, stat = simple_statement();
- return dir && stat.body instanceof AST_String ? new AST_Directive(stat.body) : stat;
- case "template_head":
- case "num":
- case "big_int":
- case "regexp":
- case "operator":
- case "atom":
- return simple_statement();
-
- case "name":
- if (S.token.value == "async" && is_token(peek(), "keyword", "function")) {
- next();
- next();
- if (is_for_body) {
- croak("functions are not allowed as the body of a loop");
- }
- return function_(AST_Defun, false, true, is_export_default);
- }
- if (S.token.value == "import" && !is_token(peek(), "punc", "(") && !is_token(peek(), "punc", ".")) {
- next();
- var node = import_();
- semicolon();
- return node;
- }
- return is_token(peek(), "punc", ":")
- ? labeled_statement()
- : simple_statement();
-
- case "punc":
- switch (S.token.value) {
- case "{":
- return new AST_BlockStatement({
- start : S.token,
- body : block_(),
- end : prev()
- });
- case "[":
- case "(":
- return simple_statement();
- case ";":
- S.in_directives = false;
- next();
- return new AST_EmptyStatement();
- default:
- unexpected();
- }
-
- case "keyword":
- switch (S.token.value) {
- case "break":
- next();
- return break_cont(AST_Break);
-
- case "continue":
- next();
- return break_cont(AST_Continue);
-
- case "debugger":
- next();
- semicolon();
- return new AST_Debugger();
-
- case "do":
- next();
- var body = in_loop(statement);
- expect_token("keyword", "while");
- var condition = parenthesised();
- semicolon(true);
- return new AST_Do({
- body : body,
- condition : condition
- });
-
- case "while":
- next();
- return new AST_While({
- condition : parenthesised(),
- body : in_loop(function() { return statement(false, true); })
- });
-
- case "for":
- next();
- return for_();
-
- case "class":
- next();
- if (is_for_body) {
- croak("classes are not allowed as the body of a loop");
- }
- if (is_if_body) {
- croak("classes are not allowed as the body of an if");
- }
- return class_(AST_DefClass, is_export_default);
-
- case "function":
- next();
- if (is_for_body) {
- croak("functions are not allowed as the body of a loop");
- }
- return function_(AST_Defun, false, false, is_export_default);
-
- case "if":
- next();
- return if_();
-
- case "return":
- if (S.in_function == 0 && !options.bare_returns)
- croak("'return' outside of function");
- next();
- var value = null;
- if (is("punc", ";")) {
- next();
- } else if (!can_insert_semicolon()) {
- value = expression(true);
- semicolon();
- }
- return new AST_Return({
- value: value
- });
-
- case "switch":
- next();
- return new AST_Switch({
- expression : parenthesised(),
- body : in_loop(switch_body_)
- });
-
- case "throw":
- next();
- if (has_newline_before(S.token))
- croak("Illegal newline after 'throw'");
- var value = expression(true);
- semicolon();
- return new AST_Throw({
- value: value
- });
-
- case "try":
- next();
- return try_();
-
- case "var":
- next();
- var node = var_();
- semicolon();
- return node;
-
- case "let":
- next();
- var node = let_();
- semicolon();
- return node;
-
- case "const":
- next();
- var node = const_();
- semicolon();
- return node;
-
- case "with":
- if (S.input.has_directive("use strict")) {
- croak("Strict mode may not include a with statement");
- }
- next();
- return new AST_With({
- expression : parenthesised(),
- body : statement()
- });
-
- case "export":
- if (!is_token(peek(), "punc", "(")) {
- next();
- var node = export_();
- if (is("punc", ";")) semicolon();
- return node;
- }
- }
- }
- unexpected();
- });
-
- function labeled_statement() {
- var label = as_symbol(AST_Label);
- if (label.name === "await" && is_in_async()) {
- token_error(S.prev, "await cannot be used as label inside async function");
- }
- if (S.labels.some((l) => l.name === label.name)) {
- // ECMA-262, 12.12: An ECMAScript program is considered
- // syntactically incorrect if it contains a
- // LabelledStatement that is enclosed by a
- // LabelledStatement with the same Identifier as label.
- croak("Label " + label.name + " defined twice");
- }
- expect(":");
- S.labels.push(label);
- var stat = statement();
- S.labels.pop();
- if (!(stat instanceof AST_IterationStatement)) {
- // check for `continue` that refers to this label.
- // those should be reported as syntax errors.
- // https://github.com/mishoo/UglifyJS2/issues/287
- label.references.forEach(function(ref) {
- if (ref instanceof AST_Continue) {
- ref = ref.label.start;
- croak("Continue label `" + label.name + "` refers to non-IterationStatement.",
- ref.line, ref.col, ref.pos);
- }
- });
- }
- return new AST_LabeledStatement({ body: stat, label: label });
- }
-
- function simple_statement(tmp) {
- return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) });
- }
-
- function break_cont(type) {
- var label = null, ldef;
- if (!can_insert_semicolon()) {
- label = as_symbol(AST_LabelRef, true);
- }
- if (label != null) {
- ldef = S.labels.find((l) => l.name === label.name);
- if (!ldef)
- croak("Undefined label " + label.name);
- label.thedef = ldef;
- } else if (S.in_loop == 0)
- croak(type.TYPE + " not inside a loop or switch");
- semicolon();
- var stat = new type({ label: label });
- if (ldef) ldef.references.push(stat);
- return stat;
- }
-
- function for_() {
- var for_await_error = "`for await` invalid in this context";
- var await_tok = S.token;
- if (await_tok.type == "name" && await_tok.value == "await") {
- if (!can_await()) {
- token_error(await_tok, for_await_error);
- }
- next();
- } else {
- await_tok = false;
- }
- expect("(");
- var init = null;
- if (!is("punc", ";")) {
- init =
- is("keyword", "var") ? (next(), var_(true)) :
- is("keyword", "let") ? (next(), let_(true)) :
- is("keyword", "const") ? (next(), const_(true)) :
- expression(true, true);
- var is_in = is("operator", "in");
- var is_of = is("name", "of");
- if (await_tok && !is_of) {
- token_error(await_tok, for_await_error);
- }
- if (is_in || is_of) {
- if (init instanceof AST_Definitions) {
- if (init.definitions.length > 1)
- token_error(init.start, "Only one variable declaration allowed in for..in loop");
- } else if (!(is_assignable(init) || (init = to_destructuring(init)) instanceof AST_Destructuring)) {
- token_error(init.start, "Invalid left-hand side in for..in loop");
- }
- next();
- if (is_in) {
- return for_in(init);
- } else {
- return for_of(init, !!await_tok);
- }
- }
- } else if (await_tok) {
- token_error(await_tok, for_await_error);
- }
- return regular_for(init);
- }
-
- function regular_for(init) {
- expect(";");
- var test = is("punc", ";") ? null : expression(true);
- expect(";");
- var step = is("punc", ")") ? null : expression(true);
- expect(")");
- return new AST_For({
- init : init,
- condition : test,
- step : step,
- body : in_loop(function() { return statement(false, true); })
- });
- }
-
- function for_of(init, is_await) {
- var lhs = init instanceof AST_Definitions ? init.definitions[0].name : null;
- var obj = expression(true);
- expect(")");
- return new AST_ForOf({
- await : is_await,
- init : init,
- name : lhs,
- object : obj,
- body : in_loop(function() { return statement(false, true); })
- });
- }
-
- function for_in(init) {
- var obj = expression(true);
- expect(")");
- return new AST_ForIn({
- init : init,
- object : obj,
- body : in_loop(function() { return statement(false, true); })
- });
- }
-
- var arrow_function = function(start, argnames, is_async) {
- if (has_newline_before(S.token)) {
- croak("Unexpected newline before arrow (=>)");
- }
-
- expect_token("arrow", "=>");
-
- var body = _function_body(is("punc", "{"), false, is_async);
-
- var end =
- body instanceof Array && body.length ? body[body.length - 1].end :
- body instanceof Array ? start :
- body.end;
-
- return new AST_Arrow({
- start : start,
- end : end,
- async : is_async,
- argnames : argnames,
- body : body
- });
- };
-
- var function_ = function(ctor, is_generator_property, is_async, is_export_default) {
- var in_statement = ctor === AST_Defun;
- var is_generator = is("operator", "*");
- if (is_generator) {
- next();
- }
-
- var name = is("name") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null;
- if (in_statement && !name) {
- if (is_export_default) {
- ctor = AST_Function;
- } else {
- unexpected();
- }
- }
-
- if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration))
- unexpected(prev());
-
- var args = [];
- var body = _function_body(true, is_generator || is_generator_property, is_async, name, args);
- return new ctor({
- start : args.start,
- end : body.end,
- is_generator: is_generator,
- async : is_async,
- name : name,
- argnames: args,
- body : body
- });
- };
-
- function track_used_binding_identifiers(is_parameter, strict) {
- var parameters = new Set();
- var duplicate = false;
- var default_assignment = false;
- var spread = false;
- var strict_mode = !!strict;
- var tracker = {
- add_parameter: function(token) {
- if (parameters.has(token.value)) {
- if (duplicate === false) {
- duplicate = token;
- }
- tracker.check_strict();
- } else {
- parameters.add(token.value);
- if (is_parameter) {
- switch (token.value) {
- case "arguments":
- case "eval":
- case "yield":
- if (strict_mode) {
- token_error(token, "Unexpected " + token.value + " identifier as parameter inside strict mode");
- }
- break;
- default:
- if (RESERVED_WORDS.has(token.value)) {
- unexpected();
- }
- }
- }
- }
- },
- mark_default_assignment: function(token) {
- if (default_assignment === false) {
- default_assignment = token;
- }
- },
- mark_spread: function(token) {
- if (spread === false) {
- spread = token;
- }
- },
- mark_strict_mode: function() {
- strict_mode = true;
- },
- is_strict: function() {
- return default_assignment !== false || spread !== false || strict_mode;
- },
- check_strict: function() {
- if (tracker.is_strict() && duplicate !== false) {
- token_error(duplicate, "Parameter " + duplicate.value + " was used already");
- }
- }
- };
-
- return tracker;
- }
-
- function parameters(params) {
- var used_parameters = track_used_binding_identifiers(true, S.input.has_directive("use strict"));
-
- expect("(");
-
- while (!is("punc", ")")) {
- var param = parameter(used_parameters);
- params.push(param);
-
- if (!is("punc", ")")) {
- expect(",");
- }
-
- if (param instanceof AST_Expansion) {
- break;
- }
- }
-
- next();
- }
-
- function parameter(used_parameters, symbol_type) {
- var param;
- var expand = false;
- if (used_parameters === undefined) {
- used_parameters = track_used_binding_identifiers(true, S.input.has_directive("use strict"));
- }
- if (is("expand", "...")) {
- expand = S.token;
- used_parameters.mark_spread(S.token);
- next();
- }
- param = binding_element(used_parameters, symbol_type);
-
- if (is("operator", "=") && expand === false) {
- used_parameters.mark_default_assignment(S.token);
- next();
- param = new AST_DefaultAssign({
- start: param.start,
- left: param,
- operator: "=",
- right: expression(false),
- end: S.token
- });
- }
-
- if (expand !== false) {
- if (!is("punc", ")")) {
- unexpected();
- }
- param = new AST_Expansion({
- start: expand,
- expression: param,
- end: expand
- });
- }
- used_parameters.check_strict();
-
- return param;
- }
-
- function binding_element(used_parameters, symbol_type) {
- var elements = [];
- var first = true;
- var is_expand = false;
- var expand_token;
- var first_token = S.token;
- if (used_parameters === undefined) {
- used_parameters = track_used_binding_identifiers(false, S.input.has_directive("use strict"));
- }
- symbol_type = symbol_type === undefined ? AST_SymbolFunarg : symbol_type;
- if (is("punc", "[")) {
- next();
- while (!is("punc", "]")) {
- if (first) {
- first = false;
- } else {
- expect(",");
- }
-
- if (is("expand", "...")) {
- is_expand = true;
- expand_token = S.token;
- used_parameters.mark_spread(S.token);
- next();
- }
- if (is("punc")) {
- switch (S.token.value) {
- case ",":
- elements.push(new AST_Hole({
- start: S.token,
- end: S.token
- }));
- continue;
- case "]": // Trailing comma after last element
- break;
- case "[":
- case "{":
- elements.push(binding_element(used_parameters, symbol_type));
- break;
- default:
- unexpected();
- }
- } else if (is("name")) {
- used_parameters.add_parameter(S.token);
- elements.push(as_symbol(symbol_type));
- } else {
- croak("Invalid function parameter");
- }
- if (is("operator", "=") && is_expand === false) {
- used_parameters.mark_default_assignment(S.token);
- next();
- elements[elements.length - 1] = new AST_DefaultAssign({
- start: elements[elements.length - 1].start,
- left: elements[elements.length - 1],
- operator: "=",
- right: expression(false),
- end: S.token
- });
- }
- if (is_expand) {
- if (!is("punc", "]")) {
- croak("Rest element must be last element");
- }
- elements[elements.length - 1] = new AST_Expansion({
- start: expand_token,
- expression: elements[elements.length - 1],
- end: expand_token
- });
- }
- }
- expect("]");
- used_parameters.check_strict();
- return new AST_Destructuring({
- start: first_token,
- names: elements,
- is_array: true,
- end: prev()
- });
- } else if (is("punc", "{")) {
- next();
- while (!is("punc", "}")) {
- if (first) {
- first = false;
- } else {
- expect(",");
- }
- if (is("expand", "...")) {
- is_expand = true;
- expand_token = S.token;
- used_parameters.mark_spread(S.token);
- next();
- }
- if (is("name") && (is_token(peek(), "punc") || is_token(peek(), "operator")) && [",", "}", "="].includes(peek().value)) {
- used_parameters.add_parameter(S.token);
- var start = prev();
- var value = as_symbol(symbol_type);
- if (is_expand) {
- elements.push(new AST_Expansion({
- start: expand_token,
- expression: value,
- end: value.end,
- }));
- } else {
- elements.push(new AST_ObjectKeyVal({
- start: start,
- key: value.name,
- value: value,
- end: value.end,
- }));
- }
- } else if (is("punc", "}")) {
- continue; // Allow trailing hole
- } else {
- var property_token = S.token;
- var property = as_property_name();
- if (property === null) {
- unexpected(prev());
- } else if (prev().type === "name" && !is("punc", ":")) {
- elements.push(new AST_ObjectKeyVal({
- start: prev(),
- key: property,
- value: new symbol_type({
- start: prev(),
- name: property,
- end: prev()
- }),
- end: prev()
- }));
- } else {
- expect(":");
- elements.push(new AST_ObjectKeyVal({
- start: property_token,
- quote: property_token.quote,
- key: property,
- value: binding_element(used_parameters, symbol_type),
- end: prev()
- }));
- }
- }
- if (is_expand) {
- if (!is("punc", "}")) {
- croak("Rest element must be last element");
- }
- } else if (is("operator", "=")) {
- used_parameters.mark_default_assignment(S.token);
- next();
- elements[elements.length - 1].value = new AST_DefaultAssign({
- start: elements[elements.length - 1].value.start,
- left: elements[elements.length - 1].value,
- operator: "=",
- right: expression(false),
- end: S.token
- });
- }
- }
- expect("}");
- used_parameters.check_strict();
- return new AST_Destructuring({
- start: first_token,
- names: elements,
- is_array: false,
- end: prev()
- });
- } else if (is("name")) {
- used_parameters.add_parameter(S.token);
- return as_symbol(symbol_type);
- } else {
- croak("Invalid function parameter");
- }
- }
-
- function params_or_seq_(allow_arrows, maybe_sequence) {
- var spread_token;
- var invalid_sequence;
- var trailing_comma;
- var a = [];
- expect("(");
- while (!is("punc", ")")) {
- if (spread_token) unexpected(spread_token);
- if (is("expand", "...")) {
- spread_token = S.token;
- if (maybe_sequence) invalid_sequence = S.token;
- next();
- a.push(new AST_Expansion({
- start: prev(),
- expression: expression(),
- end: S.token,
- }));
- } else {
- a.push(expression());
- }
- if (!is("punc", ")")) {
- expect(",");
- if (is("punc", ")")) {
- trailing_comma = prev();
- if (maybe_sequence) invalid_sequence = trailing_comma;
- }
- }
- }
- expect(")");
- if (allow_arrows && is("arrow", "=>")) {
- if (spread_token && trailing_comma) unexpected(trailing_comma);
- } else if (invalid_sequence) {
- unexpected(invalid_sequence);
- }
- return a;
- }
-
- function _function_body(block, generator, is_async, name, args) {
- var loop = S.in_loop;
- var labels = S.labels;
- var current_generator = S.in_generator;
- var current_async = S.in_async;
- ++S.in_function;
- if (generator)
- S.in_generator = S.in_function;
- if (is_async)
- S.in_async = S.in_function;
- if (args) parameters(args);
- if (block)
- S.in_directives = true;
- S.in_loop = 0;
- S.labels = [];
- if (block) {
- S.input.push_directives_stack();
- var a = block_();
- if (name) _verify_symbol(name);
- if (args) args.forEach(_verify_symbol);
- S.input.pop_directives_stack();
- } else {
- var a = [new AST_Return({
- start: S.token,
- value: expression(false),
- end: S.token
- })];
- }
- --S.in_function;
- S.in_loop = loop;
- S.labels = labels;
- S.in_generator = current_generator;
- S.in_async = current_async;
- return a;
- }
-
- function _await_expression() {
- // Previous token must be "await" and not be interpreted as an identifier
- if (!can_await()) {
- croak("Unexpected await expression outside async function",
- S.prev.line, S.prev.col, S.prev.pos);
- }
- // the await expression is parsed as a unary expression in Babel
- return new AST_Await({
- start: prev(),
- end: S.token,
- expression : maybe_unary(true),
- });
- }
-
- function _yield_expression() {
- // Previous token must be keyword yield and not be interpret as an identifier
- if (!is_in_generator()) {
- croak("Unexpected yield expression outside generator function",
- S.prev.line, S.prev.col, S.prev.pos);
- }
- var start = S.token;
- var star = false;
- var has_expression = true;
-
- // Attempt to get expression or star (and then the mandatory expression)
- // behind yield on the same line.
- //
- // If nothing follows on the same line of the yieldExpression,
- // it should default to the value `undefined` for yield to return.
- // In that case, the `undefined` stored as `null` in ast.
- //
- // Note 1: It isn't allowed for yield* to close without an expression
- // Note 2: If there is a nlb between yield and star, it is interpret as
- // yield <explicit undefined> <inserted automatic semicolon> *
- if (can_insert_semicolon() ||
- (is("punc") && PUNC_AFTER_EXPRESSION.has(S.token.value))) {
- has_expression = false;
-
- } else if (is("operator", "*")) {
- star = true;
- next();
- }
-
- return new AST_Yield({
- start : start,
- is_star : star,
- expression : has_expression ? expression() : null,
- end : prev()
- });
- }
-
- function if_() {
- var cond = parenthesised(), body = statement(false, false, true), belse = null;
- if (is("keyword", "else")) {
- next();
- belse = statement(false, false, true);
- }
- return new AST_If({
- condition : cond,
- body : body,
- alternative : belse
- });
- }
-
- function block_() {
- expect("{");
- var a = [];
- while (!is("punc", "}")) {
- if (is("eof")) unexpected();
- a.push(statement());
- }
- next();
- return a;
- }
-
- function switch_body_() {
- expect("{");
- var a = [], cur = null, branch = null, tmp;
- while (!is("punc", "}")) {
- if (is("eof")) unexpected();
- if (is("keyword", "case")) {
- if (branch) branch.end = prev();
- cur = [];
- branch = new AST_Case({
- start : (tmp = S.token, next(), tmp),
- expression : expression(true),
- body : cur
- });
- a.push(branch);
- expect(":");
- } else if (is("keyword", "default")) {
- if (branch) branch.end = prev();
- cur = [];
- branch = new AST_Default({
- start : (tmp = S.token, next(), expect(":"), tmp),
- body : cur
- });
- a.push(branch);
- } else {
- if (!cur) unexpected();
- cur.push(statement());
- }
- }
- if (branch) branch.end = prev();
- next();
- return a;
- }
-
- function try_() {
- var body = block_(), bcatch = null, bfinally = null;
- if (is("keyword", "catch")) {
- var start = S.token;
- next();
- if (is("punc", "{")) {
- var name = null;
- } else {
- expect("(");
- var name = parameter(undefined, AST_SymbolCatch);
- expect(")");
- }
- bcatch = new AST_Catch({
- start : start,
- argname : name,
- body : block_(),
- end : prev()
- });
- }
- if (is("keyword", "finally")) {
- var start = S.token;
- next();
- bfinally = new AST_Finally({
- start : start,
- body : block_(),
- end : prev()
- });
- }
- if (!bcatch && !bfinally)
- croak("Missing catch/finally blocks");
- return new AST_Try({
- body : body,
- bcatch : bcatch,
- bfinally : bfinally
- });
- }
-
- function vardefs(no_in, kind) {
- var a = [];
- var def;
- for (;;) {
- var sym_type =
- kind === "var" ? AST_SymbolVar :
- kind === "const" ? AST_SymbolConst :
- kind === "let" ? AST_SymbolLet : null;
- if (is("punc", "{") || is("punc", "[")) {
- def = new AST_VarDef({
- start: S.token,
- name: binding_element(undefined ,sym_type),
- value: is("operator", "=") ? (expect_token("operator", "="), expression(false, no_in)) : null,
- end: prev()
- });
- } else {
- def = new AST_VarDef({
- start : S.token,
- name : as_symbol(sym_type),
- value : is("operator", "=")
- ? (next(), expression(false, no_in))
- : !no_in && kind === "const"
- ? croak("Missing initializer in const declaration") : null,
- end : prev()
- });
- if (def.name.name == "import") croak("Unexpected token: import");
- }
- a.push(def);
- if (!is("punc", ","))
- break;
- next();
- }
- return a;
- }
-
- var var_ = function(no_in) {
- return new AST_Var({
- start : prev(),
- definitions : vardefs(no_in, "var"),
- end : prev()
- });
- };
-
- var let_ = function(no_in) {
- return new AST_Let({
- start : prev(),
- definitions : vardefs(no_in, "let"),
- end : prev()
- });
- };
-
- var const_ = function(no_in) {
- return new AST_Const({
- start : prev(),
- definitions : vardefs(no_in, "const"),
- end : prev()
- });
- };
-
- var new_ = function(allow_calls) {
- var start = S.token;
- expect_token("operator", "new");
- if (is("punc", ".")) {
- next();
- expect_token("name", "target");
- return subscripts(new AST_NewTarget({
- start : start,
- end : prev()
- }), allow_calls);
- }
- var newexp = expr_atom(false), args;
- if (is("punc", "(")) {
- next();
- args = expr_list(")", true);
- } else {
- args = [];
- }
- var call = new AST_New({
- start : start,
- expression : newexp,
- args : args,
- end : prev()
- });
- annotate(call);
- return subscripts(call, allow_calls);
- };
-
- function as_atom_node() {
- var tok = S.token, ret;
- switch (tok.type) {
- case "name":
- ret = _make_symbol(AST_SymbolRef);
- break;
- case "num":
- ret = new AST_Number({
- start: tok,
- end: tok,
- value: tok.value,
- raw: LATEST_RAW
- });
- break;
- case "big_int":
- ret = new AST_BigInt({ start: tok, end: tok, value: tok.value });
- break;
- case "string":
- ret = new AST_String({
- start : tok,
- end : tok,
- value : tok.value,
- quote : tok.quote
- });
- break;
- case "regexp":
- const [_, source, flags] = tok.value.match(/^\/(.*)\/(\w*)$/);
-
- ret = new AST_RegExp({ start: tok, end: tok, value: { source, flags } });
- break;
- case "atom":
- switch (tok.value) {
- case "false":
- ret = new AST_False({ start: tok, end: tok });
- break;
- case "true":
- ret = new AST_True({ start: tok, end: tok });
- break;
- case "null":
- ret = new AST_Null({ start: tok, end: tok });
- break;
- }
- break;
- }
- next();
- return ret;
- }
-
- function to_fun_args(ex, default_seen_above) {
- var insert_default = function(ex, default_value) {
- if (default_value) {
- return new AST_DefaultAssign({
- start: ex.start,
- left: ex,
- operator: "=",
- right: default_value,
- end: default_value.end
- });
- }
- return ex;
- };
- if (ex instanceof AST_Object) {
- return insert_default(new AST_Destructuring({
- start: ex.start,
- end: ex.end,
- is_array: false,
- names: ex.properties.map(prop => to_fun_args(prop))
- }), default_seen_above);
- } else if (ex instanceof AST_ObjectKeyVal) {
- ex.value = to_fun_args(ex.value);
- return insert_default(ex, default_seen_above);
- } else if (ex instanceof AST_Hole) {
- return ex;
- } else if (ex instanceof AST_Destructuring) {
- ex.names = ex.names.map(name => to_fun_args(name));
- return insert_default(ex, default_seen_above);
- } else if (ex instanceof AST_SymbolRef) {
- return insert_default(new AST_SymbolFunarg({
- name: ex.name,
- start: ex.start,
- end: ex.end
- }), default_seen_above);
- } else if (ex instanceof AST_Expansion) {
- ex.expression = to_fun_args(ex.expression);
- return insert_default(ex, default_seen_above);
- } else if (ex instanceof AST_Array) {
- return insert_default(new AST_Destructuring({
- start: ex.start,
- end: ex.end,
- is_array: true,
- names: ex.elements.map(elm => to_fun_args(elm))
- }), default_seen_above);
- } else if (ex instanceof AST_Assign) {
- return insert_default(to_fun_args(ex.left, ex.right), default_seen_above);
- } else if (ex instanceof AST_DefaultAssign) {
- ex.left = to_fun_args(ex.left);
- return ex;
- } else {
- croak("Invalid function parameter", ex.start.line, ex.start.col);
- }
- }
-
- var expr_atom = function(allow_calls, allow_arrows) {
- if (is("operator", "new")) {
- return new_(allow_calls);
- }
- if (is("operator", "import")) {
- return import_meta();
- }
- var start = S.token;
- var peeked;
- var async = is("name", "async")
- && (peeked = peek()).value != "["
- && peeked.type != "arrow"
- && as_atom_node();
- if (is("punc")) {
- switch (S.token.value) {
- case "(":
- if (async && !allow_calls) break;
- var exprs = params_or_seq_(allow_arrows, !async);
- if (allow_arrows && is("arrow", "=>")) {
- return arrow_function(start, exprs.map(e => to_fun_args(e)), !!async);
- }
- var ex = async ? new AST_Call({
- expression: async,
- args: exprs
- }) : exprs.length == 1 ? exprs[0] : new AST_Sequence({
- expressions: exprs
- });
- if (ex.start) {
- const outer_comments_before = start.comments_before.length;
- outer_comments_before_counts.set(start, outer_comments_before);
- ex.start.comments_before.unshift(...start.comments_before);
- start.comments_before = ex.start.comments_before;
- if (outer_comments_before == 0 && start.comments_before.length > 0) {
- var comment = start.comments_before[0];
- if (!comment.nlb) {
- comment.nlb = start.nlb;
- start.nlb = false;
- }
- }
- start.comments_after = ex.start.comments_after;
- }
- ex.start = start;
- var end = prev();
- if (ex.end) {
- end.comments_before = ex.end.comments_before;
- ex.end.comments_after.push(...end.comments_after);
- end.comments_after = ex.end.comments_after;
- }
- ex.end = end;
- if (ex instanceof AST_Call) annotate(ex);
- return subscripts(ex, allow_calls);
- case "[":
- return subscripts(array_(), allow_calls);
- case "{":
- return subscripts(object_or_destructuring_(), allow_calls);
- }
- if (!async) unexpected();
- }
- if (allow_arrows && is("name") && is_token(peek(), "arrow")) {
- var param = new AST_SymbolFunarg({
- name: S.token.value,
- start: start,
- end: start,
- });
- next();
- return arrow_function(start, [param], !!async);
- }
- if (is("keyword", "function")) {
- next();
- var func = function_(AST_Function, false, !!async);
- func.start = start;
- func.end = prev();
- return subscripts(func, allow_calls);
- }
- if (async) return subscripts(async, allow_calls);
- if (is("keyword", "class")) {
- next();
- var cls = class_(AST_ClassExpression);
- cls.start = start;
- cls.end = prev();
- return subscripts(cls, allow_calls);
- }
- if (is("template_head")) {
- return subscripts(template_string(), allow_calls);
- }
- if (ATOMIC_START_TOKEN.has(S.token.type)) {
- return subscripts(as_atom_node(), allow_calls);
- }
- unexpected();
- };
-
- function template_string() {
- var segments = [], start = S.token;
-
- segments.push(new AST_TemplateSegment({
- start: S.token,
- raw: LATEST_RAW,
- value: S.token.value,
- end: S.token
- }));
-
- while (!LATEST_TEMPLATE_END) {
- next();
- handle_regexp();
- segments.push(expression(true));
-
- segments.push(new AST_TemplateSegment({
- start: S.token,
- raw: LATEST_RAW,
- value: S.token.value,
- end: S.token
- }));
- }
- next();
-
- return new AST_TemplateString({
- start: start,
- segments: segments,
- end: S.token
- });
- }
-
- function expr_list(closing, allow_trailing_comma, allow_empty) {
- var first = true, a = [];
- while (!is("punc", closing)) {
- if (first) first = false; else expect(",");
- if (allow_trailing_comma && is("punc", closing)) break;
- if (is("punc", ",") && allow_empty) {
- a.push(new AST_Hole({ start: S.token, end: S.token }));
- } else if (is("expand", "...")) {
- next();
- a.push(new AST_Expansion({start: prev(), expression: expression(),end: S.token}));
- } else {
- a.push(expression(false));
- }
- }
- next();
- return a;
- }
-
- var array_ = embed_tokens(function() {
- expect("[");
- return new AST_Array({
- elements: expr_list("]", !options.strict, true)
- });
- });
-
- var create_accessor = embed_tokens((is_generator, is_async) => {
- return function_(AST_Accessor, is_generator, is_async);
- });
-
- var object_or_destructuring_ = embed_tokens(function object_or_destructuring_() {
- var start = S.token, first = true, a = [];
- expect("{");
- while (!is("punc", "}")) {
- if (first) first = false; else expect(",");
- if (!options.strict && is("punc", "}"))
- // allow trailing comma
- break;
-
- start = S.token;
- if (start.type == "expand") {
- next();
- a.push(new AST_Expansion({
- start: start,
- expression: expression(false),
- end: prev(),
- }));
- continue;
- }
-
- var name = as_property_name();
- var value;
-
- // Check property and fetch value
- if (!is("punc", ":")) {
- var concise = concise_method_or_getset(name, start);
- if (concise) {
- a.push(concise);
- continue;
- }
-
- value = new AST_SymbolRef({
- start: prev(),
- name: name,
- end: prev()
- });
- } else if (name === null) {
- unexpected(prev());
- } else {
- next(); // `:` - see first condition
- value = expression(false);
- }
-
- // Check for default value and alter value accordingly if necessary
- if (is("operator", "=")) {
- next();
- value = new AST_Assign({
- start: start,
- left: value,
- operator: "=",
- right: expression(false),
- logical: false,
- end: prev()
- });
- }
-
- // Create property
- a.push(new AST_ObjectKeyVal({
- start: start,
- quote: start.quote,
- key: name instanceof AST_Node ? name : "" + name,
- value: value,
- end: prev()
- }));
- }
- next();
- return new AST_Object({ properties: a });
- });
-
- function class_(KindOfClass, is_export_default) {
- var start, method, class_name, extends_, a = [];
-
- S.input.push_directives_stack(); // Push directive stack, but not scope stack
- S.input.add_directive("use strict");
-
- if (S.token.type == "name" && S.token.value != "extends") {
- class_name = as_symbol(KindOfClass === AST_DefClass ? AST_SymbolDefClass : AST_SymbolClass);
- }
-
- if (KindOfClass === AST_DefClass && !class_name) {
- if (is_export_default) {
- KindOfClass = AST_ClassExpression;
- } else {
- unexpected();
- }
- }
-
- if (S.token.value == "extends") {
- next();
- extends_ = expression(true);
- }
-
- expect("{");
-
- while (is("punc", ";")) { next(); } // Leading semicolons are okay in class bodies.
- while (!is("punc", "}")) {
- start = S.token;
- method = concise_method_or_getset(as_property_name(), start, true);
- if (!method) { unexpected(); }
- a.push(method);
- while (is("punc", ";")) { next(); }
- }
-
- S.input.pop_directives_stack();
-
- next();
-
- return new KindOfClass({
- start: start,
- name: class_name,
- extends: extends_,
- properties: a,
- end: prev(),
- });
- }
-
- function concise_method_or_getset(name, start, is_class) {
- const get_symbol_ast = (name, SymbolClass = AST_SymbolMethod) => {
- if (typeof name === "string" || typeof name === "number") {
- return new SymbolClass({
- start,
- name: "" + name,
- end: prev()
- });
- } else if (name === null) {
- unexpected();
- }
- return name;
- };
-
- const is_not_method_start = () =>
- !is("punc", "(") && !is("punc", ",") && !is("punc", "}") && !is("operator", "=");
-
- var is_async = false;
- var is_static = false;
- var is_generator = false;
- var is_private = false;
- var accessor_type = null;
-
- if (is_class && name === "static" && is_not_method_start()) {
- is_static = true;
- name = as_property_name();
- }
- if (name === "async" && is_not_method_start()) {
- is_async = true;
- name = as_property_name();
- }
- if (prev().type === "operator" && prev().value === "*") {
- is_generator = true;
- name = as_property_name();
- }
- if ((name === "get" || name === "set") && is_not_method_start()) {
- accessor_type = name;
- name = as_property_name();
- }
- if (prev().type === "privatename") {
- is_private = true;
- }
-
- const property_token = prev();
-
- if (accessor_type != null) {
- if (!is_private) {
- const AccessorClass = accessor_type === "get"
- ? AST_ObjectGetter
- : AST_ObjectSetter;
-
- name = get_symbol_ast(name);
- return new AccessorClass({
- start,
- static: is_static,
- key: name,
- quote: name instanceof AST_SymbolMethod ? property_token.quote : undefined,
- value: create_accessor(),
- end: prev()
- });
- } else {
- const AccessorClass = accessor_type === "get"
- ? AST_PrivateGetter
- : AST_PrivateSetter;
-
- return new AccessorClass({
- start,
- static: is_static,
- key: get_symbol_ast(name),
- value: create_accessor(),
- end: prev(),
- });
- }
- }
-
- if (is("punc", "(")) {
- name = get_symbol_ast(name);
- const AST_MethodVariant = is_private
- ? AST_PrivateMethod
- : AST_ConciseMethod;
- var node = new AST_MethodVariant({
- start : start,
- static : is_static,
- is_generator: is_generator,
- async : is_async,
- key : name,
- quote : name instanceof AST_SymbolMethod ?
- property_token.quote : undefined,
- value : create_accessor(is_generator, is_async),
- end : prev()
- });
- return node;
- }
-
- if (is_class) {
- const key = get_symbol_ast(name, AST_SymbolClassProperty);
- const quote = key instanceof AST_SymbolClassProperty
- ? property_token.quote
- : undefined;
- const AST_ClassPropertyVariant = is_private
- ? AST_ClassPrivateProperty
- : AST_ClassProperty;
- if (is("operator", "=")) {
- next();
- return new AST_ClassPropertyVariant({
- start,
- static: is_static,
- quote,
- key,
- value: expression(false),
- end: prev()
- });
- } else if (
- is("name")
- || is("privatename")
- || is("operator", "*")
- || is("punc", ";")
- || is("punc", "}")
- ) {
- return new AST_ClassPropertyVariant({
- start,
- static: is_static,
- quote,
- key,
- end: prev()
- });
- }
- }
- }
-
- function import_() {
- var start = prev();
-
- var imported_name;
- var imported_names;
- if (is("name")) {
- imported_name = as_symbol(AST_SymbolImport);
- }
-
- if (is("punc", ",")) {
- next();
- }
-
- imported_names = map_names(true);
-
- if (imported_names || imported_name) {
- expect_token("name", "from");
- }
- var mod_str = S.token;
- if (mod_str.type !== "string") {
- unexpected();
- }
- next();
- return new AST_Import({
- start: start,
- imported_name: imported_name,
- imported_names: imported_names,
- module_name: new AST_String({
- start: mod_str,
- value: mod_str.value,
- quote: mod_str.quote,
- end: mod_str,
- }),
- end: S.token,
- });
- }
-
- function import_meta() {
- var start = S.token;
- expect_token("operator", "import");
- expect_token("punc", ".");
- expect_token("name", "meta");
- return subscripts(new AST_ImportMeta({
- start: start,
- end: prev()
- }), false);
- }
-
- function map_name(is_import) {
- function make_symbol(type) {
- return new type({
- name: as_property_name(),
- start: prev(),
- end: prev()
- });
- }
-
- var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;
- var type = is_import ? AST_SymbolImport : AST_SymbolExport;
- var start = S.token;
- var foreign_name;
- var name;
-
- if (is_import) {
- foreign_name = make_symbol(foreign_type);
- } else {
- name = make_symbol(type);
- }
- if (is("name", "as")) {
- next(); // The "as" word
- if (is_import) {
- name = make_symbol(type);
- } else {
- foreign_name = make_symbol(foreign_type);
- }
- } else if (is_import) {
- name = new type(foreign_name);
- } else {
- foreign_name = new foreign_type(name);
- }
-
- return new AST_NameMapping({
- start: start,
- foreign_name: foreign_name,
- name: name,
- end: prev(),
- });
- }
-
- function map_nameAsterisk(is_import, name) {
- var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;
- var type = is_import ? AST_SymbolImport : AST_SymbolExport;
- var start = S.token;
- var foreign_name;
- var end = prev();
-
- name = name || new type({
- name: "*",
- start: start,
- end: end,
- });
-
- foreign_name = new foreign_type({
- name: "*",
- start: start,
- end: end,
- });
-
- return new AST_NameMapping({
- start: start,
- foreign_name: foreign_name,
- name: name,
- end: end,
- });
- }
-
- function map_names(is_import) {
- var names;
- if (is("punc", "{")) {
- next();
- names = [];
- while (!is("punc", "}")) {
- names.push(map_name(is_import));
- if (is("punc", ",")) {
- next();
- }
- }
- next();
- } else if (is("operator", "*")) {
- var name;
- next();
- if (is_import && is("name", "as")) {
- next(); // The "as" word
- name = as_symbol(is_import ? AST_SymbolImport : AST_SymbolExportForeign);
- }
- names = [map_nameAsterisk(is_import, name)];
- }
- return names;
- }
-
- function export_() {
- var start = S.token;
- var is_default;
- var exported_names;
-
- if (is("keyword", "default")) {
- is_default = true;
- next();
- } else if (exported_names = map_names(false)) {
- if (is("name", "from")) {
- next();
-
- var mod_str = S.token;
- if (mod_str.type !== "string") {
- unexpected();
- }
- next();
-
- return new AST_Export({
- start: start,
- is_default: is_default,
- exported_names: exported_names,
- module_name: new AST_String({
- start: mod_str,
- value: mod_str.value,
- quote: mod_str.quote,
- end: mod_str,
- }),
- end: prev(),
- });
- } else {
- return new AST_Export({
- start: start,
- is_default: is_default,
- exported_names: exported_names,
- end: prev(),
- });
- }
- }
-
- var node;
- var exported_value;
- var exported_definition;
- if (is("punc", "{")
- || is_default
- && (is("keyword", "class") || is("keyword", "function"))
- && is_token(peek(), "punc")) {
- exported_value = expression(false);
- semicolon();
- } else if ((node = statement(is_default)) instanceof AST_Definitions && is_default) {
- unexpected(node.start);
- } else if (
- node instanceof AST_Definitions
- || node instanceof AST_Defun
- || node instanceof AST_DefClass
- ) {
- exported_definition = node;
- } else if (
- node instanceof AST_ClassExpression
- || node instanceof AST_Function
- ) {
- exported_value = node;
- } else if (node instanceof AST_SimpleStatement) {
- exported_value = node.body;
- } else {
- unexpected(node.start);
- }
-
- return new AST_Export({
- start: start,
- is_default: is_default,
- exported_value: exported_value,
- exported_definition: exported_definition,
- end: prev(),
- });
- }
-
- function as_property_name() {
- var tmp = S.token;
- switch (tmp.type) {
- case "punc":
- if (tmp.value === "[") {
- next();
- var ex = expression(false);
- expect("]");
- return ex;
- } else unexpected(tmp);
- case "operator":
- if (tmp.value === "*") {
- next();
- return null;
- }
- if (!["delete", "in", "instanceof", "new", "typeof", "void"].includes(tmp.value)) {
- unexpected(tmp);
- }
- /* falls through */
- case "name":
- case "privatename":
- case "string":
- case "num":
- case "big_int":
- case "keyword":
- case "atom":
- next();
- return tmp.value;
- default:
- unexpected(tmp);
- }
- }
-
- function as_name() {
- var tmp = S.token;
- if (tmp.type != "name" && tmp.type != "privatename") unexpected();
- next();
- return tmp.value;
- }
-
- function _make_symbol(type) {
- var name = S.token.value;
- return new (name == "this" ? AST_This :
- name == "super" ? AST_Super :
- type)({
- name : String(name),
- start : S.token,
- end : S.token
- });
- }
-
- function _verify_symbol(sym) {
- var name = sym.name;
- if (is_in_generator() && name == "yield") {
- token_error(sym.start, "Yield cannot be used as identifier inside generators");
- }
- if (S.input.has_directive("use strict")) {
- if (name == "yield") {
- token_error(sym.start, "Unexpected yield identifier inside strict mode");
- }
- if (sym instanceof AST_SymbolDeclaration && (name == "arguments" || name == "eval")) {
- token_error(sym.start, "Unexpected " + name + " in strict mode");
- }
- }
- }
-
- function as_symbol(type, noerror) {
- if (!is("name")) {
- if (!noerror) croak("Name expected");
- return null;
- }
- var sym = _make_symbol(type);
- _verify_symbol(sym);
- next();
- return sym;
- }
-
- // Annotate AST_Call, AST_Lambda or AST_New with the special comments
- function annotate(node) {
- var start = node.start;
- var comments = start.comments_before;
- const comments_outside_parens = outer_comments_before_counts.get(start);
- var i = comments_outside_parens != null ? comments_outside_parens : comments.length;
- while (--i >= 0) {
- var comment = comments[i];
- if (/[@#]__/.test(comment.value)) {
- if (/[@#]__PURE__/.test(comment.value)) {
- set_annotation(node, _PURE);
- break;
- }
- if (/[@#]__INLINE__/.test(comment.value)) {
- set_annotation(node, _INLINE);
- break;
- }
- if (/[@#]__NOINLINE__/.test(comment.value)) {
- set_annotation(node, _NOINLINE);
- break;
- }
- }
- }
- }
-
- var subscripts = function(expr, allow_calls, is_chain) {
- var start = expr.start;
- if (is("punc", ".")) {
- next();
- const AST_DotVariant = is("privatename") ? AST_DotHash : AST_Dot;
- return subscripts(new AST_DotVariant({
- start : start,
- expression : expr,
- optional : false,
- property : as_name(),
- end : prev()
- }), allow_calls, is_chain);
- }
- if (is("punc", "[")) {
- next();
- var prop = expression(true);
- expect("]");
- return subscripts(new AST_Sub({
- start : start,
- expression : expr,
- optional : false,
- property : prop,
- end : prev()
- }), allow_calls, is_chain);
- }
- if (allow_calls && is("punc", "(")) {
- next();
- var call = new AST_Call({
- start : start,
- expression : expr,
- optional : false,
- args : call_args(),
- end : prev()
- });
- annotate(call);
- return subscripts(call, true, is_chain);
- }
-
- if (is("punc", "?.")) {
- next();
-
- let chain_contents;
-
- if (allow_calls && is("punc", "(")) {
- next();
-
- const call = new AST_Call({
- start,
- optional: true,
- expression: expr,
- args: call_args(),
- end: prev()
- });
- annotate(call);
-
- chain_contents = subscripts(call, true, true);
- } else if (is("name") || is("privatename")) {
- const AST_DotVariant = is("privatename") ? AST_DotHash : AST_Dot;
- chain_contents = subscripts(new AST_DotVariant({
- start,
- expression: expr,
- optional: true,
- property: as_name(),
- end: prev()
- }), allow_calls, true);
- } else if (is("punc", "[")) {
- next();
- const property = expression(true);
- expect("]");
- chain_contents = subscripts(new AST_Sub({
- start,
- expression: expr,
- optional: true,
- property,
- end: prev()
- }), allow_calls, true);
- }
-
- if (!chain_contents) unexpected();
-
- if (chain_contents instanceof AST_Chain) return chain_contents;
-
- return new AST_Chain({
- start,
- expression: chain_contents,
- end: prev()
- });
- }
-
- if (is("template_head")) {
- if (is_chain) {
- // a?.b`c` is a syntax error
- unexpected();
- }
-
- return subscripts(new AST_PrefixedTemplateString({
- start: start,
- prefix: expr,
- template_string: template_string(),
- end: prev()
- }), allow_calls);
- }
-
- return expr;
- };
-
- function call_args() {
- var args = [];
- while (!is("punc", ")")) {
- if (is("expand", "...")) {
- next();
- args.push(new AST_Expansion({
- start: prev(),
- expression: expression(false),
- end: prev()
- }));
- } else {
- args.push(expression(false));
- }
- if (!is("punc", ")")) {
- expect(",");
- }
- }
- next();
- return args;
- }
-
- var maybe_unary = function(allow_calls, allow_arrows) {
- var start = S.token;
- if (start.type == "name" && start.value == "await" && can_await()) {
- next();
- return _await_expression();
- }
- if (is("operator") && UNARY_PREFIX.has(start.value)) {
- next();
- handle_regexp();
- var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls));
- ex.start = start;
- ex.end = prev();
- return ex;
- }
- var val = expr_atom(allow_calls, allow_arrows);
- while (is("operator") && UNARY_POSTFIX.has(S.token.value) && !has_newline_before(S.token)) {
- if (val instanceof AST_Arrow) unexpected();
- val = make_unary(AST_UnaryPostfix, S.token, val);
- val.start = start;
- val.end = S.token;
- next();
- }
- return val;
- };
-
- function make_unary(ctor, token, expr) {
- var op = token.value;
- switch (op) {
- case "++":
- case "--":
- if (!is_assignable(expr))
- croak("Invalid use of " + op + " operator", token.line, token.col, token.pos);
- break;
- case "delete":
- if (expr instanceof AST_SymbolRef && S.input.has_directive("use strict"))
- croak("Calling delete on expression not allowed in strict mode", expr.start.line, expr.start.col, expr.start.pos);
- break;
- }
- return new ctor({ operator: op, expression: expr });
- }
-
- var expr_op = function(left, min_prec, no_in) {
- var op = is("operator") ? S.token.value : null;
- if (op == "in" && no_in) op = null;
- if (op == "**" && left instanceof AST_UnaryPrefix
- /* unary token in front not allowed - parenthesis required */
- && !is_token(left.start, "punc", "(")
- && left.operator !== "--" && left.operator !== "++")
- unexpected(left.start);
- var prec = op != null ? PRECEDENCE[op] : null;
- if (prec != null && (prec > min_prec || (op === "**" && min_prec === prec))) {
- next();
- var right = expr_op(maybe_unary(true), prec, no_in);
- return expr_op(new AST_Binary({
- start : left.start,
- left : left,
- operator : op,
- right : right,
- end : right.end
- }), min_prec, no_in);
- }
- return left;
- };
-
- function expr_ops(no_in) {
- return expr_op(maybe_unary(true, true), 0, no_in);
- }
-
- var maybe_conditional = function(no_in) {
- var start = S.token;
- var expr = expr_ops(no_in);
- if (is("operator", "?")) {
- next();
- var yes = expression(false);
- expect(":");
- return new AST_Conditional({
- start : start,
- condition : expr,
- consequent : yes,
- alternative : expression(false, no_in),
- end : prev()
- });
- }
- return expr;
- };
-
- function is_assignable(expr) {
- return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef;
- }
-
- function to_destructuring(node) {
- if (node instanceof AST_Object) {
- node = new AST_Destructuring({
- start: node.start,
- names: node.properties.map(to_destructuring),
- is_array: false,
- end: node.end
- });
- } else if (node instanceof AST_Array) {
- var names = [];
-
- for (var i = 0; i < node.elements.length; i++) {
- // Only allow expansion as last element
- if (node.elements[i] instanceof AST_Expansion) {
- if (i + 1 !== node.elements.length) {
- token_error(node.elements[i].start, "Spread must the be last element in destructuring array");
- }
- node.elements[i].expression = to_destructuring(node.elements[i].expression);
- }
-
- names.push(to_destructuring(node.elements[i]));
- }
-
- node = new AST_Destructuring({
- start: node.start,
- names: names,
- is_array: true,
- end: node.end
- });
- } else if (node instanceof AST_ObjectProperty) {
- node.value = to_destructuring(node.value);
- } else if (node instanceof AST_Assign) {
- node = new AST_DefaultAssign({
- start: node.start,
- left: node.left,
- operator: "=",
- right: node.right,
- end: node.end
- });
- }
- return node;
- }
-
- // In ES6, AssignmentExpression can also be an ArrowFunction
- var maybe_assign = function(no_in) {
- handle_regexp();
- var start = S.token;
-
- if (start.type == "name" && start.value == "yield") {
- if (is_in_generator()) {
- next();
- return _yield_expression();
- } else if (S.input.has_directive("use strict")) {
- token_error(S.token, "Unexpected yield identifier inside strict mode");
- }
- }
-
- var left = maybe_conditional(no_in);
- var val = S.token.value;
-
- if (is("operator") && ASSIGNMENT.has(val)) {
- if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) {
- next();
-
- return new AST_Assign({
- start : start,
- left : left,
- operator : val,
- right : maybe_assign(no_in),
- logical : LOGICAL_ASSIGNMENT.has(val),
- end : prev()
- });
- }
- croak("Invalid assignment");
- }
- return left;
- };
-
- var expression = function(commas, no_in) {
- var start = S.token;
- var exprs = [];
- while (true) {
- exprs.push(maybe_assign(no_in));
- if (!commas || !is("punc", ",")) break;
- next();
- commas = true;
- }
- return exprs.length == 1 ? exprs[0] : new AST_Sequence({
- start : start,
- expressions : exprs,
- end : peek()
- });
- };
-
- function in_loop(cont) {
- ++S.in_loop;
- var ret = cont();
- --S.in_loop;
- return ret;
- }
-
- if (options.expression) {
- return expression(true);
- }
-
- return (function parse_toplevel() {
- var start = S.token;
- var body = [];
- S.input.push_directives_stack();
- if (options.module) S.input.add_directive("use strict");
- while (!is("eof")) {
- body.push(statement());
- }
- S.input.pop_directives_stack();
- var end = prev();
- var toplevel = options.toplevel;
- if (toplevel) {
- toplevel.body = toplevel.body.concat(body);
- toplevel.end = end;
- } else {
- toplevel = new AST_Toplevel({ start: start, body: body, end: end });
- }
- return toplevel;
- })();
-
-}
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-function DEFNODE(type, props, methods, base = AST_Node) {
- if (!props) props = [];
- else props = props.split(/\s+/);
- var self_props = props;
- if (base && base.PROPS)
- props = props.concat(base.PROPS);
- var code = "return function AST_" + type + "(props){ if (props) { ";
- for (var i = props.length; --i >= 0;) {
- code += "this." + props[i] + " = props." + props[i] + ";";
- }
- const proto = base && Object.create(base.prototype);
- if (proto && proto.initialize || (methods && methods.initialize))
- code += "this.initialize();";
- code += "}";
- code += "this.flags = 0;";
- code += "}";
- var ctor = new Function(code)();
- if (proto) {
- ctor.prototype = proto;
- ctor.BASE = base;
- }
- if (base) base.SUBCLASSES.push(ctor);
- ctor.prototype.CTOR = ctor;
- ctor.prototype.constructor = ctor;
- ctor.PROPS = props || null;
- ctor.SELF_PROPS = self_props;
- ctor.SUBCLASSES = [];
- if (type) {
- ctor.prototype.TYPE = ctor.TYPE = type;
- }
- if (methods) for (i in methods) if (HOP(methods, i)) {
- if (i[0] === "$") {
- ctor[i.substr(1)] = methods[i];
- } else {
- ctor.prototype[i] = methods[i];
- }
- }
- ctor.DEFMETHOD = function(name, method) {
- this.prototype[name] = method;
- };
- return ctor;
-}
-
-const has_tok_flag = (tok, flag) => Boolean(tok.flags & flag);
-const set_tok_flag = (tok, flag, truth) => {
- if (truth) {
- tok.flags |= flag;
- } else {
- tok.flags &= ~flag;
- }
-};
-
-const TOK_FLAG_NLB = 0b0001;
-const TOK_FLAG_QUOTE_SINGLE = 0b0010;
-const TOK_FLAG_QUOTE_EXISTS = 0b0100;
-
-class AST_Token {
- constructor(type, value, line, col, pos, nlb, comments_before, comments_after, file) {
- this.flags = (nlb ? 1 : 0);
-
- this.type = type;
- this.value = value;
- this.line = line;
- this.col = col;
- this.pos = pos;
- this.comments_before = comments_before;
- this.comments_after = comments_after;
- this.file = file;
-
- Object.seal(this);
- }
-
- get nlb() {
- return has_tok_flag(this, TOK_FLAG_NLB);
- }
-
- set nlb(new_nlb) {
- set_tok_flag(this, TOK_FLAG_NLB, new_nlb);
- }
-
- get quote() {
- return !has_tok_flag(this, TOK_FLAG_QUOTE_EXISTS)
- ? ""
- : (has_tok_flag(this, TOK_FLAG_QUOTE_SINGLE) ? "'" : '"');
- }
-
- set quote(quote_type) {
- set_tok_flag(this, TOK_FLAG_QUOTE_SINGLE, quote_type === "'");
- set_tok_flag(this, TOK_FLAG_QUOTE_EXISTS, !!quote_type);
- }
-}
-
-var AST_Node = DEFNODE("Node", "start end", {
- _clone: function(deep) {
- if (deep) {
- var self = this.clone();
- return self.transform(new TreeTransformer(function(node) {
- if (node !== self) {
- return node.clone(true);
- }
- }));
- }
- return new this.CTOR(this);
- },
- clone: function(deep) {
- return this._clone(deep);
- },
- $documentation: "Base class of all AST nodes",
- $propdoc: {
- start: "[AST_Token] The first token of this node",
- end: "[AST_Token] The last token of this node"
- },
- _walk: function(visitor) {
- return visitor._visit(this);
- },
- walk: function(visitor) {
- return this._walk(visitor); // not sure the indirection will be any help
- },
- _children_backwards: () => {}
-}, null);
-
-/* -----[ statements ]----- */
-
-var AST_Statement = DEFNODE("Statement", null, {
- $documentation: "Base class of all statements",
-});
-
-var AST_Debugger = DEFNODE("Debugger", null, {
- $documentation: "Represents a debugger statement",
-}, AST_Statement);
-
-var AST_Directive = DEFNODE("Directive", "value quote", {
- $documentation: "Represents a directive, like \"use strict\";",
- $propdoc: {
- value: "[string] The value of this directive as a plain string (it's not an AST_String!)",
- quote: "[string] the original quote character"
- },
-}, AST_Statement);
-
-var AST_SimpleStatement = DEFNODE("SimpleStatement", "body", {
- $documentation: "A statement consisting of an expression, i.e. a = 1 + 2",
- $propdoc: {
- body: "[AST_Node] an expression node (should not be instanceof AST_Statement)"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.body._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.body);
- }
-}, AST_Statement);
-
-function walk_body(node, visitor) {
- const body = node.body;
- for (var i = 0, len = body.length; i < len; i++) {
- body[i]._walk(visitor);
- }
-}
-
-function clone_block_scope(deep) {
- var clone = this._clone(deep);
- if (this.block_scope) {
- clone.block_scope = this.block_scope.clone();
- }
- return clone;
-}
-
-var AST_Block = DEFNODE("Block", "body block_scope", {
- $documentation: "A body of statements (usually braced)",
- $propdoc: {
- body: "[AST_Statement*] an array of statements",
- block_scope: "[AST_Scope] the block scope"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- walk_body(this, visitor);
- });
- },
- _children_backwards(push) {
- let i = this.body.length;
- while (i--) push(this.body[i]);
- },
- clone: clone_block_scope
-}, AST_Statement);
-
-var AST_BlockStatement = DEFNODE("BlockStatement", null, {
- $documentation: "A block statement",
-}, AST_Block);
-
-var AST_EmptyStatement = DEFNODE("EmptyStatement", null, {
- $documentation: "The empty statement (empty block or simply a semicolon)"
-}, AST_Statement);
-
-var AST_StatementWithBody = DEFNODE("StatementWithBody", "body", {
- $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",
- $propdoc: {
- body: "[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"
- }
-}, AST_Statement);
-
-var AST_LabeledStatement = DEFNODE("LabeledStatement", "label", {
- $documentation: "Statement with a label",
- $propdoc: {
- label: "[AST_Label] a label definition"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.label._walk(visitor);
- this.body._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.body);
- push(this.label);
- },
- clone: function(deep) {
- var node = this._clone(deep);
- if (deep) {
- var label = node.label;
- var def = this.label;
- node.walk(new TreeWalker(function(node) {
- if (node instanceof AST_LoopControl
- && node.label && node.label.thedef === def) {
- node.label.thedef = label;
- label.references.push(node);
- }
- }));
- }
- return node;
- }
-}, AST_StatementWithBody);
-
-var AST_IterationStatement = DEFNODE("IterationStatement", "block_scope", {
- $documentation: "Internal class. All loops inherit from it.",
- $propdoc: {
- block_scope: "[AST_Scope] the block scope for this iteration statement."
- },
- clone: clone_block_scope
-}, AST_StatementWithBody);
-
-var AST_DWLoop = DEFNODE("DWLoop", "condition", {
- $documentation: "Base class for do/while statements",
- $propdoc: {
- condition: "[AST_Node] the loop condition. Should not be instanceof AST_Statement"
- }
-}, AST_IterationStatement);
-
-var AST_Do = DEFNODE("Do", null, {
- $documentation: "A `do` statement",
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.body._walk(visitor);
- this.condition._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.condition);
- push(this.body);
- }
-}, AST_DWLoop);
-
-var AST_While = DEFNODE("While", null, {
- $documentation: "A `while` statement",
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.condition._walk(visitor);
- this.body._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.body);
- push(this.condition);
- },
-}, AST_DWLoop);
-
-var AST_For = DEFNODE("For", "init condition step", {
- $documentation: "A `for` statement",
- $propdoc: {
- init: "[AST_Node?] the `for` initialization code, or null if empty",
- condition: "[AST_Node?] the `for` termination clause, or null if empty",
- step: "[AST_Node?] the `for` update clause, or null if empty"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- if (this.init) this.init._walk(visitor);
- if (this.condition) this.condition._walk(visitor);
- if (this.step) this.step._walk(visitor);
- this.body._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.body);
- if (this.step) push(this.step);
- if (this.condition) push(this.condition);
- if (this.init) push(this.init);
- },
-}, AST_IterationStatement);
-
-var AST_ForIn = DEFNODE("ForIn", "init object", {
- $documentation: "A `for ... in` statement",
- $propdoc: {
- init: "[AST_Node] the `for/in` initialization code",
- object: "[AST_Node] the object that we're looping through"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.init._walk(visitor);
- this.object._walk(visitor);
- this.body._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.body);
- if (this.object) push(this.object);
- if (this.init) push(this.init);
- },
-}, AST_IterationStatement);
-
-var AST_ForOf = DEFNODE("ForOf", "await", {
- $documentation: "A `for ... of` statement",
-}, AST_ForIn);
-
-var AST_With = DEFNODE("With", "expression", {
- $documentation: "A `with` statement",
- $propdoc: {
- expression: "[AST_Node] the `with` expression"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- this.body._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.body);
- push(this.expression);
- },
-}, AST_StatementWithBody);
-
-/* -----[ scope and functions ]----- */
-
-var AST_Scope = DEFNODE("Scope", "variables functions uses_with uses_eval parent_scope enclosed cname", {
- $documentation: "Base class for all statements introducing a lexical scope",
- $propdoc: {
- variables: "[Map/S] a map of name -> SymbolDef for all variables/functions defined in this scope",
- uses_with: "[boolean/S] tells whether this scope uses the `with` statement",
- uses_eval: "[boolean/S] tells whether this scope contains a direct call to the global `eval`",
- parent_scope: "[AST_Scope?/S] link to the parent scope",
- enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",
- cname: "[integer/S] current index for mangling variables (used internally by the mangler)",
- },
- get_defun_scope: function() {
- var self = this;
- while (self.is_block_scope()) {
- self = self.parent_scope;
- }
- return self;
- },
- clone: function(deep, toplevel) {
- var node = this._clone(deep);
- if (deep && this.variables && toplevel && !this._block_scope) {
- node.figure_out_scope({}, {
- toplevel: toplevel,
- parent_scope: this.parent_scope
- });
- } else {
- if (this.variables) node.variables = new Map(this.variables);
- if (this.enclosed) node.enclosed = this.enclosed.slice();
- if (this._block_scope) node._block_scope = this._block_scope;
- }
- return node;
- },
- pinned: function() {
- return this.uses_eval || this.uses_with;
- }
-}, AST_Block);
-
-var AST_Toplevel = DEFNODE("Toplevel", "globals", {
- $documentation: "The toplevel scope",
- $propdoc: {
- globals: "[Map/S] a map of name -> SymbolDef for all undeclared names",
- },
- wrap_commonjs: function(name) {
- var body = this.body;
- var wrapped_tl = "(function(exports){'$ORIG';})(typeof " + name + "=='undefined'?(" + name + "={}):" + name + ");";
- wrapped_tl = parse(wrapped_tl);
- wrapped_tl = wrapped_tl.transform(new TreeTransformer(function(node) {
- if (node instanceof AST_Directive && node.value == "$ORIG") {
- return MAP.splice(body);
- }
- }));
- return wrapped_tl;
- },
- wrap_enclose: function(args_values) {
- if (typeof args_values != "string") args_values = "";
- var index = args_values.indexOf(":");
- if (index < 0) index = args_values.length;
- var body = this.body;
- return parse([
- "(function(",
- args_values.slice(0, index),
- '){"$ORIG"})(',
- args_values.slice(index + 1),
- ")"
- ].join("")).transform(new TreeTransformer(function(node) {
- if (node instanceof AST_Directive && node.value == "$ORIG") {
- return MAP.splice(body);
- }
- }));
- }
-}, AST_Scope);
-
-var AST_Expansion = DEFNODE("Expansion", "expression", {
- $documentation: "An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list",
- $propdoc: {
- expression: "[AST_Node] the thing to be expanded"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression.walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.expression);
- },
-});
-
-var AST_Lambda = DEFNODE("Lambda", "name argnames uses_arguments is_generator async", {
- $documentation: "Base class for functions",
- $propdoc: {
- name: "[AST_SymbolDeclaration?] the name of this function",
- argnames: "[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments",
- uses_arguments: "[boolean/S] tells whether this function accesses the arguments array",
- is_generator: "[boolean] is this a generator method",
- async: "[boolean] is this method async",
- },
- args_as_names: function () {
- var out = [];
- for (var i = 0; i < this.argnames.length; i++) {
- if (this.argnames[i] instanceof AST_Destructuring) {
- out.push(...this.argnames[i].all_symbols());
- } else {
- out.push(this.argnames[i]);
- }
- }
- return out;
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- if (this.name) this.name._walk(visitor);
- var argnames = this.argnames;
- for (var i = 0, len = argnames.length; i < len; i++) {
- argnames[i]._walk(visitor);
- }
- walk_body(this, visitor);
- });
- },
- _children_backwards(push) {
- let i = this.body.length;
- while (i--) push(this.body[i]);
-
- i = this.argnames.length;
- while (i--) push(this.argnames[i]);
-
- if (this.name) push(this.name);
- },
- is_braceless() {
- return this.body[0] instanceof AST_Return && this.body[0].value;
- },
- // Default args and expansion don't count, so .argnames.length doesn't cut it
- length_property() {
- let length = 0;
-
- for (const arg of this.argnames) {
- if (arg instanceof AST_SymbolFunarg || arg instanceof AST_Destructuring) {
- length++;
- }
- }
-
- return length;
- }
-}, AST_Scope);
-
-var AST_Accessor = DEFNODE("Accessor", null, {
- $documentation: "A setter/getter function. The `name` property is always null."
-}, AST_Lambda);
-
-var AST_Function = DEFNODE("Function", null, {
- $documentation: "A function expression"
-}, AST_Lambda);
-
-var AST_Arrow = DEFNODE("Arrow", null, {
- $documentation: "An ES6 Arrow function ((a) => b)"
-}, AST_Lambda);
-
-var AST_Defun = DEFNODE("Defun", null, {
- $documentation: "A function definition"
-}, AST_Lambda);
-
-/* -----[ DESTRUCTURING ]----- */
-var AST_Destructuring = DEFNODE("Destructuring", "names is_array", {
- $documentation: "A destructuring of several names. Used in destructuring assignment and with destructuring function argument names",
- $propdoc: {
- "names": "[AST_Node*] Array of properties or elements",
- "is_array": "[Boolean] Whether the destructuring represents an object or array"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.names.forEach(function(name) {
- name._walk(visitor);
- });
- });
- },
- _children_backwards(push) {
- let i = this.names.length;
- while (i--) push(this.names[i]);
- },
- all_symbols: function() {
- var out = [];
- this.walk(new TreeWalker(function (node) {
- if (node instanceof AST_Symbol) {
- out.push(node);
- }
- }));
- return out;
- }
-});
-
-var AST_PrefixedTemplateString = DEFNODE("PrefixedTemplateString", "template_string prefix", {
- $documentation: "A templatestring with a prefix, such as String.raw`foobarbaz`",
- $propdoc: {
- template_string: "[AST_TemplateString] The template string",
- prefix: "[AST_Node] The prefix, which will get called."
- },
- _walk: function(visitor) {
- return visitor._visit(this, function () {
- this.prefix._walk(visitor);
- this.template_string._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.template_string);
- push(this.prefix);
- },
-});
-
-var AST_TemplateString = DEFNODE("TemplateString", "segments", {
- $documentation: "A template string literal",
- $propdoc: {
- segments: "[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment."
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.segments.forEach(function(seg) {
- seg._walk(visitor);
- });
- });
- },
- _children_backwards(push) {
- let i = this.segments.length;
- while (i--) push(this.segments[i]);
- }
-});
-
-var AST_TemplateSegment = DEFNODE("TemplateSegment", "value raw", {
- $documentation: "A segment of a template string literal",
- $propdoc: {
- value: "Content of the segment",
- raw: "Raw source of the segment",
- }
-});
-
-/* -----[ JUMPS ]----- */
-
-var AST_Jump = DEFNODE("Jump", null, {
- $documentation: "Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"
-}, AST_Statement);
-
-var AST_Exit = DEFNODE("Exit", "value", {
- $documentation: "Base class for “exits” (`return` and `throw`)",
- $propdoc: {
- value: "[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"
- },
- _walk: function(visitor) {
- return visitor._visit(this, this.value && function() {
- this.value._walk(visitor);
- });
- },
- _children_backwards(push) {
- if (this.value) push(this.value);
- },
-}, AST_Jump);
-
-var AST_Return = DEFNODE("Return", null, {
- $documentation: "A `return` statement"
-}, AST_Exit);
-
-var AST_Throw = DEFNODE("Throw", null, {
- $documentation: "A `throw` statement"
-}, AST_Exit);
-
-var AST_LoopControl = DEFNODE("LoopControl", "label", {
- $documentation: "Base class for loop control statements (`break` and `continue`)",
- $propdoc: {
- label: "[AST_LabelRef?] the label, or null if none",
- },
- _walk: function(visitor) {
- return visitor._visit(this, this.label && function() {
- this.label._walk(visitor);
- });
- },
- _children_backwards(push) {
- if (this.label) push(this.label);
- },
-}, AST_Jump);
-
-var AST_Break = DEFNODE("Break", null, {
- $documentation: "A `break` statement"
-}, AST_LoopControl);
-
-var AST_Continue = DEFNODE("Continue", null, {
- $documentation: "A `continue` statement"
-}, AST_LoopControl);
-
-var AST_Await = DEFNODE("Await", "expression", {
- $documentation: "An `await` statement",
- $propdoc: {
- expression: "[AST_Node] the mandatory expression being awaited",
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.expression);
- },
-});
-
-var AST_Yield = DEFNODE("Yield", "expression is_star", {
- $documentation: "A `yield` statement",
- $propdoc: {
- expression: "[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false",
- is_star: "[Boolean] Whether this is a yield or yield* statement"
- },
- _walk: function(visitor) {
- return visitor._visit(this, this.expression && function() {
- this.expression._walk(visitor);
- });
- },
- _children_backwards(push) {
- if (this.expression) push(this.expression);
- }
-});
-
-/* -----[ IF ]----- */
-
-var AST_If = DEFNODE("If", "condition alternative", {
- $documentation: "A `if` statement",
- $propdoc: {
- condition: "[AST_Node] the `if` condition",
- alternative: "[AST_Statement?] the `else` part, or null if not present"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.condition._walk(visitor);
- this.body._walk(visitor);
- if (this.alternative) this.alternative._walk(visitor);
- });
- },
- _children_backwards(push) {
- if (this.alternative) {
- push(this.alternative);
- }
- push(this.body);
- push(this.condition);
- }
-}, AST_StatementWithBody);
-
-/* -----[ SWITCH ]----- */
-
-var AST_Switch = DEFNODE("Switch", "expression", {
- $documentation: "A `switch` statement",
- $propdoc: {
- expression: "[AST_Node] the `switch` “discriminant”"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- walk_body(this, visitor);
- });
- },
- _children_backwards(push) {
- let i = this.body.length;
- while (i--) push(this.body[i]);
- push(this.expression);
- }
-}, AST_Block);
-
-var AST_SwitchBranch = DEFNODE("SwitchBranch", null, {
- $documentation: "Base class for `switch` branches",
-}, AST_Block);
-
-var AST_Default = DEFNODE("Default", null, {
- $documentation: "A `default` switch branch",
-}, AST_SwitchBranch);
-
-var AST_Case = DEFNODE("Case", "expression", {
- $documentation: "A `case` switch branch",
- $propdoc: {
- expression: "[AST_Node] the `case` expression"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- walk_body(this, visitor);
- });
- },
- _children_backwards(push) {
- let i = this.body.length;
- while (i--) push(this.body[i]);
- push(this.expression);
- },
-}, AST_SwitchBranch);
-
-/* -----[ EXCEPTIONS ]----- */
-
-var AST_Try = DEFNODE("Try", "bcatch bfinally", {
- $documentation: "A `try` statement",
- $propdoc: {
- bcatch: "[AST_Catch?] the catch block, or null if not present",
- bfinally: "[AST_Finally?] the finally block, or null if not present"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- walk_body(this, visitor);
- if (this.bcatch) this.bcatch._walk(visitor);
- if (this.bfinally) this.bfinally._walk(visitor);
- });
- },
- _children_backwards(push) {
- if (this.bfinally) push(this.bfinally);
- if (this.bcatch) push(this.bcatch);
- let i = this.body.length;
- while (i--) push(this.body[i]);
- },
-}, AST_Block);
-
-var AST_Catch = DEFNODE("Catch", "argname", {
- $documentation: "A `catch` node; only makes sense as part of a `try` statement",
- $propdoc: {
- argname: "[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- if (this.argname) this.argname._walk(visitor);
- walk_body(this, visitor);
- });
- },
- _children_backwards(push) {
- let i = this.body.length;
- while (i--) push(this.body[i]);
- if (this.argname) push(this.argname);
- },
-}, AST_Block);
-
-var AST_Finally = DEFNODE("Finally", null, {
- $documentation: "A `finally` node; only makes sense as part of a `try` statement"
-}, AST_Block);
-
-/* -----[ VAR/CONST ]----- */
-
-var AST_Definitions = DEFNODE("Definitions", "definitions", {
- $documentation: "Base class for `var` or `const` nodes (variable declarations/initializations)",
- $propdoc: {
- definitions: "[AST_VarDef*] array of variable definitions"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- var definitions = this.definitions;
- for (var i = 0, len = definitions.length; i < len; i++) {
- definitions[i]._walk(visitor);
- }
- });
- },
- _children_backwards(push) {
- let i = this.definitions.length;
- while (i--) push(this.definitions[i]);
- },
-}, AST_Statement);
-
-var AST_Var = DEFNODE("Var", null, {
- $documentation: "A `var` statement"
-}, AST_Definitions);
-
-var AST_Let = DEFNODE("Let", null, {
- $documentation: "A `let` statement"
-}, AST_Definitions);
-
-var AST_Const = DEFNODE("Const", null, {
- $documentation: "A `const` statement"
-}, AST_Definitions);
-
-var AST_VarDef = DEFNODE("VarDef", "name value", {
- $documentation: "A variable declaration; only appears in a AST_Definitions node",
- $propdoc: {
- name: "[AST_Destructuring|AST_SymbolConst|AST_SymbolLet|AST_SymbolVar] name of the variable",
- value: "[AST_Node?] initializer, or null of there's no initializer"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.name._walk(visitor);
- if (this.value) this.value._walk(visitor);
- });
- },
- _children_backwards(push) {
- if (this.value) push(this.value);
- push(this.name);
- },
-});
-
-var AST_NameMapping = DEFNODE("NameMapping", "foreign_name name", {
- $documentation: "The part of the export/import statement that declare names from a module.",
- $propdoc: {
- foreign_name: "[AST_SymbolExportForeign|AST_SymbolImportForeign] The name being exported/imported (as specified in the module)",
- name: "[AST_SymbolExport|AST_SymbolImport] The name as it is visible to this module."
- },
- _walk: function (visitor) {
- return visitor._visit(this, function() {
- this.foreign_name._walk(visitor);
- this.name._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.name);
- push(this.foreign_name);
- },
-});
-
-var AST_Import = DEFNODE("Import", "imported_name imported_names module_name", {
- $documentation: "An `import` statement",
- $propdoc: {
- imported_name: "[AST_SymbolImport] The name of the variable holding the module's default export.",
- imported_names: "[AST_NameMapping*] The names of non-default imported variables",
- module_name: "[AST_String] String literal describing where this module came from",
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- if (this.imported_name) {
- this.imported_name._walk(visitor);
- }
- if (this.imported_names) {
- this.imported_names.forEach(function(name_import) {
- name_import._walk(visitor);
- });
- }
- this.module_name._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.module_name);
- if (this.imported_names) {
- let i = this.imported_names.length;
- while (i--) push(this.imported_names[i]);
- }
- if (this.imported_name) push(this.imported_name);
- },
-});
-
-var AST_ImportMeta = DEFNODE("ImportMeta", null, {
- $documentation: "A reference to import.meta",
-});
-
-var AST_Export = DEFNODE("Export", "exported_definition exported_value is_default exported_names module_name", {
- $documentation: "An `export` statement",
- $propdoc: {
- exported_definition: "[AST_Defun|AST_Definitions|AST_DefClass?] An exported definition",
- exported_value: "[AST_Node?] An exported value",
- exported_names: "[AST_NameMapping*?] List of exported names",
- module_name: "[AST_String?] Name of the file to load exports from",
- is_default: "[Boolean] Whether this is the default exported value of this module"
- },
- _walk: function (visitor) {
- return visitor._visit(this, function () {
- if (this.exported_definition) {
- this.exported_definition._walk(visitor);
- }
- if (this.exported_value) {
- this.exported_value._walk(visitor);
- }
- if (this.exported_names) {
- this.exported_names.forEach(function(name_export) {
- name_export._walk(visitor);
- });
- }
- if (this.module_name) {
- this.module_name._walk(visitor);
- }
- });
- },
- _children_backwards(push) {
- if (this.module_name) push(this.module_name);
- if (this.exported_names) {
- let i = this.exported_names.length;
- while (i--) push(this.exported_names[i]);
- }
- if (this.exported_value) push(this.exported_value);
- if (this.exported_definition) push(this.exported_definition);
- }
-}, AST_Statement);
-
-/* -----[ OTHER ]----- */
-
-var AST_Call = DEFNODE("Call", "expression args optional _annotations", {
- $documentation: "A function call expression",
- $propdoc: {
- expression: "[AST_Node] expression to invoke as function",
- args: "[AST_Node*] array of arguments",
- optional: "[boolean] whether this is an optional call (IE ?.() )",
- _annotations: "[number] bitfield containing information about the call"
- },
- initialize() {
- if (this._annotations == null) this._annotations = 0;
- },
- _walk(visitor) {
- return visitor._visit(this, function() {
- var args = this.args;
- for (var i = 0, len = args.length; i < len; i++) {
- args[i]._walk(visitor);
- }
- this.expression._walk(visitor); // TODO why do we need to crawl this last?
- });
- },
- _children_backwards(push) {
- let i = this.args.length;
- while (i--) push(this.args[i]);
- push(this.expression);
- },
-});
-
-var AST_New = DEFNODE("New", null, {
- $documentation: "An object instantiation. Derives from a function call since it has exactly the same properties"
-}, AST_Call);
-
-var AST_Sequence = DEFNODE("Sequence", "expressions", {
- $documentation: "A sequence expression (comma-separated expressions)",
- $propdoc: {
- expressions: "[AST_Node*] array of expressions (at least two)"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expressions.forEach(function(node) {
- node._walk(visitor);
- });
- });
- },
- _children_backwards(push) {
- let i = this.expressions.length;
- while (i--) push(this.expressions[i]);
- },
-});
-
-var AST_PropAccess = DEFNODE("PropAccess", "expression property optional", {
- $documentation: "Base class for property access expressions, i.e. `a.foo` or `a[\"foo\"]`",
- $propdoc: {
- expression: "[AST_Node] the “container” expression",
- property: "[AST_Node|string] the property to access. For AST_Dot & AST_DotHash this is always a plain string, while for AST_Sub it's an arbitrary AST_Node",
-
- optional: "[boolean] whether this is an optional property access (IE ?.)"
- }
-});
-
-var AST_Dot = DEFNODE("Dot", "quote", {
- $documentation: "A dotted property access expression",
- $propdoc: {
- quote: "[string] the original quote character when transformed from AST_Sub",
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.expression);
- },
-}, AST_PropAccess);
-
-var AST_DotHash = DEFNODE("DotHash", "", {
- $documentation: "A dotted property access to a private property",
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.expression);
- },
-}, AST_PropAccess);
-
-var AST_Sub = DEFNODE("Sub", null, {
- $documentation: "Index-style property access, i.e. `a[\"foo\"]`",
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- this.property._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.property);
- push(this.expression);
- },
-}, AST_PropAccess);
-
-var AST_Chain = DEFNODE("Chain", "expression", {
- $documentation: "A chain expression like a?.b?.(c)?.[d]",
- $propdoc: {
- expression: "[AST_Call|AST_Dot|AST_DotHash|AST_Sub] chain element."
- },
- _walk: function (visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.expression);
- },
-});
-
-var AST_Unary = DEFNODE("Unary", "operator expression", {
- $documentation: "Base class for unary expressions",
- $propdoc: {
- operator: "[string] the operator",
- expression: "[AST_Node] expression that this unary operator applies to"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.expression._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.expression);
- },
-});
-
-var AST_UnaryPrefix = DEFNODE("UnaryPrefix", null, {
- $documentation: "Unary prefix expression, i.e. `typeof i` or `++i`"
-}, AST_Unary);
-
-var AST_UnaryPostfix = DEFNODE("UnaryPostfix", null, {
- $documentation: "Unary postfix expression, i.e. `i++`"
-}, AST_Unary);
-
-var AST_Binary = DEFNODE("Binary", "operator left right", {
- $documentation: "Binary expression, i.e. `a + b`",
- $propdoc: {
- left: "[AST_Node] left-hand side expression",
- operator: "[string] the operator",
- right: "[AST_Node] right-hand side expression"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.left._walk(visitor);
- this.right._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.right);
- push(this.left);
- },
-});
-
-var AST_Conditional = DEFNODE("Conditional", "condition consequent alternative", {
- $documentation: "Conditional expression using the ternary operator, i.e. `a ? b : c`",
- $propdoc: {
- condition: "[AST_Node]",
- consequent: "[AST_Node]",
- alternative: "[AST_Node]"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- this.condition._walk(visitor);
- this.consequent._walk(visitor);
- this.alternative._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.alternative);
- push(this.consequent);
- push(this.condition);
- },
-});
-
-var AST_Assign = DEFNODE("Assign", "logical", {
- $documentation: "An assignment expression — `a = b + 5`",
- $propdoc: {
- logical: "Whether it's a logical assignment"
- }
-}, AST_Binary);
-
-var AST_DefaultAssign = DEFNODE("DefaultAssign", null, {
- $documentation: "A default assignment expression like in `(a = 3) => a`"
-}, AST_Binary);
-
-/* -----[ LITERALS ]----- */
-
-var AST_Array = DEFNODE("Array", "elements", {
- $documentation: "An array literal",
- $propdoc: {
- elements: "[AST_Node*] array of elements"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- var elements = this.elements;
- for (var i = 0, len = elements.length; i < len; i++) {
- elements[i]._walk(visitor);
- }
- });
- },
- _children_backwards(push) {
- let i = this.elements.length;
- while (i--) push(this.elements[i]);
- },
-});
-
-var AST_Object = DEFNODE("Object", "properties", {
- $documentation: "An object literal",
- $propdoc: {
- properties: "[AST_ObjectProperty*] array of properties"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- var properties = this.properties;
- for (var i = 0, len = properties.length; i < len; i++) {
- properties[i]._walk(visitor);
- }
- });
- },
- _children_backwards(push) {
- let i = this.properties.length;
- while (i--) push(this.properties[i]);
- },
-});
-
-var AST_ObjectProperty = DEFNODE("ObjectProperty", "key value", {
- $documentation: "Base class for literal object properties",
- $propdoc: {
- key: "[string|AST_Node] property name. For ObjectKeyVal this is a string. For getters, setters and computed property this is an AST_Node.",
- value: "[AST_Node] property value. For getters and setters this is an AST_Accessor."
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- if (this.key instanceof AST_Node)
- this.key._walk(visitor);
- this.value._walk(visitor);
- });
- },
- _children_backwards(push) {
- push(this.value);
- if (this.key instanceof AST_Node) push(this.key);
- }
-});
-
-var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", "quote", {
- $documentation: "A key: value object property",
- $propdoc: {
- quote: "[string] the original quote character"
- },
- computed_key() {
- return this.key instanceof AST_Node;
- }
-}, AST_ObjectProperty);
-
-var AST_PrivateSetter = DEFNODE("PrivateSetter", "static", {
- $propdoc: {
- static: "[boolean] whether this is a static private setter"
- },
- $documentation: "A private setter property",
- computed_key() {
- return false;
- }
-}, AST_ObjectProperty);
-
-var AST_PrivateGetter = DEFNODE("PrivateGetter", "static", {
- $propdoc: {
- static: "[boolean] whether this is a static private getter"
- },
- $documentation: "A private getter property",
- computed_key() {
- return false;
- }
-}, AST_ObjectProperty);
-
-var AST_ObjectSetter = DEFNODE("ObjectSetter", "quote static", {
- $propdoc: {
- quote: "[string|undefined] the original quote character, if any",
- static: "[boolean] whether this is a static setter (classes only)"
- },
- $documentation: "An object setter property",
- computed_key() {
- return !(this.key instanceof AST_SymbolMethod);
- }
-}, AST_ObjectProperty);
-
-var AST_ObjectGetter = DEFNODE("ObjectGetter", "quote static", {
- $propdoc: {
- quote: "[string|undefined] the original quote character, if any",
- static: "[boolean] whether this is a static getter (classes only)"
- },
- $documentation: "An object getter property",
- computed_key() {
- return !(this.key instanceof AST_SymbolMethod);
- }
-}, AST_ObjectProperty);
-
-var AST_ConciseMethod = DEFNODE("ConciseMethod", "quote static is_generator async", {
- $propdoc: {
- quote: "[string|undefined] the original quote character, if any",
- static: "[boolean] is this method static (classes only)",
- is_generator: "[boolean] is this a generator method",
- async: "[boolean] is this method async",
- },
- $documentation: "An ES6 concise method inside an object or class",
- computed_key() {
- return !(this.key instanceof AST_SymbolMethod);
- }
-}, AST_ObjectProperty);
-
-var AST_PrivateMethod = DEFNODE("PrivateMethod", "", {
- $documentation: "A private class method inside a class",
-}, AST_ConciseMethod);
-
-var AST_Class = DEFNODE("Class", "name extends properties", {
- $propdoc: {
- name: "[AST_SymbolClass|AST_SymbolDefClass?] optional class name.",
- extends: "[AST_Node]? optional parent class",
- properties: "[AST_ObjectProperty*] array of properties"
- },
- $documentation: "An ES6 class",
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- if (this.name) {
- this.name._walk(visitor);
- }
- if (this.extends) {
- this.extends._walk(visitor);
- }
- this.properties.forEach((prop) => prop._walk(visitor));
- });
- },
- _children_backwards(push) {
- let i = this.properties.length;
- while (i--) push(this.properties[i]);
- if (this.extends) push(this.extends);
- if (this.name) push(this.name);
- },
-}, AST_Scope /* TODO a class might have a scope but it's not a scope */);
-
-var AST_ClassProperty = DEFNODE("ClassProperty", "static quote", {
- $documentation: "A class property",
- $propdoc: {
- static: "[boolean] whether this is a static key",
- quote: "[string] which quote is being used"
- },
- _walk: function(visitor) {
- return visitor._visit(this, function() {
- if (this.key instanceof AST_Node)
- this.key._walk(visitor);
- if (this.value instanceof AST_Node)
- this.value._walk(visitor);
- });
- },
- _children_backwards(push) {
- if (this.value instanceof AST_Node) push(this.value);
- if (this.key instanceof AST_Node) push(this.key);
- },
- computed_key() {
- return !(this.key instanceof AST_SymbolClassProperty);
- }
-}, AST_ObjectProperty);
-
-var AST_ClassPrivateProperty = DEFNODE("ClassPrivateProperty", "", {
- $documentation: "A class property for a private property",
-}, AST_ClassProperty);
-
-var AST_DefClass = DEFNODE("DefClass", null, {
- $documentation: "A class definition",
-}, AST_Class);
-
-var AST_ClassExpression = DEFNODE("ClassExpression", null, {
- $documentation: "A class expression."
-}, AST_Class);
-
-var AST_Symbol = DEFNODE("Symbol", "scope name thedef", {
- $propdoc: {
- name: "[string] name of this symbol",
- scope: "[AST_Scope/S] the current scope (not necessarily the definition scope)",
- thedef: "[SymbolDef/S] the definition of this symbol"
- },
- $documentation: "Base class for all symbols"
-});
-
-var AST_NewTarget = DEFNODE("NewTarget", null, {
- $documentation: "A reference to new.target"
-});
-
-var AST_SymbolDeclaration = DEFNODE("SymbolDeclaration", "init", {
- $documentation: "A declaration symbol (symbol in var/const, function name or argument, symbol in catch)",
-}, AST_Symbol);
-
-var AST_SymbolVar = DEFNODE("SymbolVar", null, {
- $documentation: "Symbol defining a variable",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolBlockDeclaration = DEFNODE("SymbolBlockDeclaration", null, {
- $documentation: "Base class for block-scoped declaration symbols"
-}, AST_SymbolDeclaration);
-
-var AST_SymbolConst = DEFNODE("SymbolConst", null, {
- $documentation: "A constant declaration"
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolLet = DEFNODE("SymbolLet", null, {
- $documentation: "A block-scoped `let` declaration"
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, {
- $documentation: "Symbol naming a function argument",
-}, AST_SymbolVar);
-
-var AST_SymbolDefun = DEFNODE("SymbolDefun", null, {
- $documentation: "Symbol defining a function",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolMethod = DEFNODE("SymbolMethod", null, {
- $documentation: "Symbol in an object defining a method",
-}, AST_Symbol);
-
-var AST_SymbolClassProperty = DEFNODE("SymbolClassProperty", null, {
- $documentation: "Symbol for a class property",
-}, AST_Symbol);
-
-var AST_SymbolLambda = DEFNODE("SymbolLambda", null, {
- $documentation: "Symbol naming a function expression",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolDefClass = DEFNODE("SymbolDefClass", null, {
- $documentation: "Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class."
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolClass = DEFNODE("SymbolClass", null, {
- $documentation: "Symbol naming a class's name. Lexically scoped to the class."
-}, AST_SymbolDeclaration);
-
-var AST_SymbolCatch = DEFNODE("SymbolCatch", null, {
- $documentation: "Symbol naming the exception in catch",
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolImport = DEFNODE("SymbolImport", null, {
- $documentation: "Symbol referring to an imported name",
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolImportForeign = DEFNODE("SymbolImportForeign", null, {
- $documentation: "A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes",
-}, AST_Symbol);
-
-var AST_Label = DEFNODE("Label", "references", {
- $documentation: "Symbol naming a label (declaration)",
- $propdoc: {
- references: "[AST_LoopControl*] a list of nodes referring to this label"
- },
- initialize: function() {
- this.references = [];
- this.thedef = this;
- }
-}, AST_Symbol);
-
-var AST_SymbolRef = DEFNODE("SymbolRef", null, {
- $documentation: "Reference to some symbol (not definition/declaration)",
-}, AST_Symbol);
-
-var AST_SymbolExport = DEFNODE("SymbolExport", null, {
- $documentation: "Symbol referring to a name to export",
-}, AST_SymbolRef);
-
-var AST_SymbolExportForeign = DEFNODE("SymbolExportForeign", null, {
- $documentation: "A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes",
-}, AST_Symbol);
-
-var AST_LabelRef = DEFNODE("LabelRef", null, {
- $documentation: "Reference to a label symbol",
-}, AST_Symbol);
-
-var AST_This = DEFNODE("This", null, {
- $documentation: "The `this` symbol",
-}, AST_Symbol);
-
-var AST_Super = DEFNODE("Super", null, {
- $documentation: "The `super` symbol",
-}, AST_This);
-
-var AST_Constant = DEFNODE("Constant", null, {
- $documentation: "Base class for all constants",
- getValue: function() {
- return this.value;
- }
-});
-
-var AST_String = DEFNODE("String", "value quote", {
- $documentation: "A string literal",
- $propdoc: {
- value: "[string] the contents of this string",
- quote: "[string] the original quote character"
- }
-}, AST_Constant);
-
-var AST_Number = DEFNODE("Number", "value raw", {
- $documentation: "A number literal",
- $propdoc: {
- value: "[number] the numeric value",
- raw: "[string] numeric value as string"
- }
-}, AST_Constant);
-
-var AST_BigInt = DEFNODE("BigInt", "value", {
- $documentation: "A big int literal",
- $propdoc: {
- value: "[string] big int value"
- }
-}, AST_Constant);
-
-var AST_RegExp = DEFNODE("RegExp", "value", {
- $documentation: "A regexp literal",
- $propdoc: {
- value: "[RegExp] the actual regexp",
- }
-}, AST_Constant);
-
-var AST_Atom = DEFNODE("Atom", null, {
- $documentation: "Base class for atoms",
-}, AST_Constant);
-
-var AST_Null = DEFNODE("Null", null, {
- $documentation: "The `null` atom",
- value: null
-}, AST_Atom);
-
-var AST_NaN = DEFNODE("NaN", null, {
- $documentation: "The impossible value",
- value: 0/0
-}, AST_Atom);
-
-var AST_Undefined = DEFNODE("Undefined", null, {
- $documentation: "The `undefined` value",
- value: (function() {}())
-}, AST_Atom);
-
-var AST_Hole = DEFNODE("Hole", null, {
- $documentation: "A hole in an array",
- value: (function() {}())
-}, AST_Atom);
-
-var AST_Infinity = DEFNODE("Infinity", null, {
- $documentation: "The `Infinity` value",
- value: 1/0
-}, AST_Atom);
-
-var AST_Boolean = DEFNODE("Boolean", null, {
- $documentation: "Base class for booleans",
-}, AST_Atom);
-
-var AST_False = DEFNODE("False", null, {
- $documentation: "The `false` atom",
- value: false
-}, AST_Boolean);
-
-var AST_True = DEFNODE("True", null, {
- $documentation: "The `true` atom",
- value: true
-}, AST_Boolean);
-
-/* -----[ Walk function ]---- */
-
-/**
- * Walk nodes in depth-first search fashion.
- * Callback can return `walk_abort` symbol to stop iteration.
- * It can also return `true` to stop iteration just for child nodes.
- * Iteration can be stopped and continued by passing the `to_visit` argument,
- * which is given to the callback in the second argument.
- **/
-function walk(node, cb, to_visit = [node]) {
- const push = to_visit.push.bind(to_visit);
- while (to_visit.length) {
- const node = to_visit.pop();
- const ret = cb(node, to_visit);
-
- if (ret) {
- if (ret === walk_abort) return true;
- continue;
- }
-
- node._children_backwards(push);
- }
- return false;
-}
-
-function walk_parent(node, cb, initial_stack) {
- const to_visit = [node];
- const push = to_visit.push.bind(to_visit);
- const stack = initial_stack ? initial_stack.slice() : [];
- const parent_pop_indices = [];
-
- let current;
-
- const info = {
- parent: (n = 0) => {
- if (n === -1) {
- return current;
- }
-
- // [ p1 p0 ] [ 1 0 ]
- if (initial_stack && n >= stack.length) {
- n -= stack.length;
- return initial_stack[
- initial_stack.length - (n + 1)
- ];
- }
-
- return stack[stack.length - (1 + n)];
- },
- };
-
- while (to_visit.length) {
- current = to_visit.pop();
-
- while (
- parent_pop_indices.length &&
- to_visit.length == parent_pop_indices[parent_pop_indices.length - 1]
- ) {
- stack.pop();
- parent_pop_indices.pop();
- }
-
- const ret = cb(current, info);
-
- if (ret) {
- if (ret === walk_abort) return true;
- continue;
- }
-
- const visit_length = to_visit.length;
-
- current._children_backwards(push);
-
- // Push only if we're going to traverse the children
- if (to_visit.length > visit_length) {
- stack.push(current);
- parent_pop_indices.push(visit_length - 1);
- }
- }
-
- return false;
-}
-
-const walk_abort = Symbol("abort walk");
-
-/* -----[ TreeWalker ]----- */
-
-class TreeWalker {
- constructor(callback) {
- this.visit = callback;
- this.stack = [];
- this.directives = Object.create(null);
- }
-
- _visit(node, descend) {
- this.push(node);
- var ret = this.visit(node, descend ? function() {
- descend.call(node);
- } : noop);
- if (!ret && descend) {
- descend.call(node);
- }
- this.pop();
- return ret;
- }
-
- parent(n) {
- return this.stack[this.stack.length - 2 - (n || 0)];
- }
-
- push(node) {
- if (node instanceof AST_Lambda) {
- this.directives = Object.create(this.directives);
- } else if (node instanceof AST_Directive && !this.directives[node.value]) {
- this.directives[node.value] = node;
- } else if (node instanceof AST_Class) {
- this.directives = Object.create(this.directives);
- if (!this.directives["use strict"]) {
- this.directives["use strict"] = node;
- }
- }
- this.stack.push(node);
- }
-
- pop() {
- var node = this.stack.pop();
- if (node instanceof AST_Lambda || node instanceof AST_Class) {
- this.directives = Object.getPrototypeOf(this.directives);
- }
- }
-
- self() {
- return this.stack[this.stack.length - 1];
- }
-
- find_parent(type) {
- var stack = this.stack;
- for (var i = stack.length; --i >= 0;) {
- var x = stack[i];
- if (x instanceof type) return x;
- }
- }
-
- has_directive(type) {
- var dir = this.directives[type];
- if (dir) return dir;
- var node = this.stack[this.stack.length - 1];
- if (node instanceof AST_Scope && node.body) {
- for (var i = 0; i < node.body.length; ++i) {
- var st = node.body[i];
- if (!(st instanceof AST_Directive)) break;
- if (st.value == type) return st;
- }
- }
- }
-
- loopcontrol_target(node) {
- var stack = this.stack;
- if (node.label) for (var i = stack.length; --i >= 0;) {
- var x = stack[i];
- if (x instanceof AST_LabeledStatement && x.label.name == node.label.name)
- return x.body;
- } else for (var i = stack.length; --i >= 0;) {
- var x = stack[i];
- if (x instanceof AST_IterationStatement
- || node instanceof AST_Break && x instanceof AST_Switch)
- return x;
- }
- }
-}
-
-// Tree transformer helpers.
-class TreeTransformer extends TreeWalker {
- constructor(before, after) {
- super();
- this.before = before;
- this.after = after;
- }
-}
-
-const _PURE = 0b00000001;
-const _INLINE = 0b00000010;
-const _NOINLINE = 0b00000100;
-
-var ast = /*#__PURE__*/Object.freeze({
-__proto__: null,
-AST_Accessor: AST_Accessor,
-AST_Array: AST_Array,
-AST_Arrow: AST_Arrow,
-AST_Assign: AST_Assign,
-AST_Atom: AST_Atom,
-AST_Await: AST_Await,
-AST_BigInt: AST_BigInt,
-AST_Binary: AST_Binary,
-AST_Block: AST_Block,
-AST_BlockStatement: AST_BlockStatement,
-AST_Boolean: AST_Boolean,
-AST_Break: AST_Break,
-AST_Call: AST_Call,
-AST_Case: AST_Case,
-AST_Catch: AST_Catch,
-AST_Chain: AST_Chain,
-AST_Class: AST_Class,
-AST_ClassExpression: AST_ClassExpression,
-AST_ClassPrivateProperty: AST_ClassPrivateProperty,
-AST_ClassProperty: AST_ClassProperty,
-AST_ConciseMethod: AST_ConciseMethod,
-AST_Conditional: AST_Conditional,
-AST_Const: AST_Const,
-AST_Constant: AST_Constant,
-AST_Continue: AST_Continue,
-AST_Debugger: AST_Debugger,
-AST_Default: AST_Default,
-AST_DefaultAssign: AST_DefaultAssign,
-AST_DefClass: AST_DefClass,
-AST_Definitions: AST_Definitions,
-AST_Defun: AST_Defun,
-AST_Destructuring: AST_Destructuring,
-AST_Directive: AST_Directive,
-AST_Do: AST_Do,
-AST_Dot: AST_Dot,
-AST_DotHash: AST_DotHash,
-AST_DWLoop: AST_DWLoop,
-AST_EmptyStatement: AST_EmptyStatement,
-AST_Exit: AST_Exit,
-AST_Expansion: AST_Expansion,
-AST_Export: AST_Export,
-AST_False: AST_False,
-AST_Finally: AST_Finally,
-AST_For: AST_For,
-AST_ForIn: AST_ForIn,
-AST_ForOf: AST_ForOf,
-AST_Function: AST_Function,
-AST_Hole: AST_Hole,
-AST_If: AST_If,
-AST_Import: AST_Import,
-AST_ImportMeta: AST_ImportMeta,
-AST_Infinity: AST_Infinity,
-AST_IterationStatement: AST_IterationStatement,
-AST_Jump: AST_Jump,
-AST_Label: AST_Label,
-AST_LabeledStatement: AST_LabeledStatement,
-AST_LabelRef: AST_LabelRef,
-AST_Lambda: AST_Lambda,
-AST_Let: AST_Let,
-AST_LoopControl: AST_LoopControl,
-AST_NameMapping: AST_NameMapping,
-AST_NaN: AST_NaN,
-AST_New: AST_New,
-AST_NewTarget: AST_NewTarget,
-AST_Node: AST_Node,
-AST_Null: AST_Null,
-AST_Number: AST_Number,
-AST_Object: AST_Object,
-AST_ObjectGetter: AST_ObjectGetter,
-AST_ObjectKeyVal: AST_ObjectKeyVal,
-AST_ObjectProperty: AST_ObjectProperty,
-AST_ObjectSetter: AST_ObjectSetter,
-AST_PrefixedTemplateString: AST_PrefixedTemplateString,
-AST_PrivateGetter: AST_PrivateGetter,
-AST_PrivateMethod: AST_PrivateMethod,
-AST_PrivateSetter: AST_PrivateSetter,
-AST_PropAccess: AST_PropAccess,
-AST_RegExp: AST_RegExp,
-AST_Return: AST_Return,
-AST_Scope: AST_Scope,
-AST_Sequence: AST_Sequence,
-AST_SimpleStatement: AST_SimpleStatement,
-AST_Statement: AST_Statement,
-AST_StatementWithBody: AST_StatementWithBody,
-AST_String: AST_String,
-AST_Sub: AST_Sub,
-AST_Super: AST_Super,
-AST_Switch: AST_Switch,
-AST_SwitchBranch: AST_SwitchBranch,
-AST_Symbol: AST_Symbol,
-AST_SymbolBlockDeclaration: AST_SymbolBlockDeclaration,
-AST_SymbolCatch: AST_SymbolCatch,
-AST_SymbolClass: AST_SymbolClass,
-AST_SymbolClassProperty: AST_SymbolClassProperty,
-AST_SymbolConst: AST_SymbolConst,
-AST_SymbolDeclaration: AST_SymbolDeclaration,
-AST_SymbolDefClass: AST_SymbolDefClass,
-AST_SymbolDefun: AST_SymbolDefun,
-AST_SymbolExport: AST_SymbolExport,
-AST_SymbolExportForeign: AST_SymbolExportForeign,
-AST_SymbolFunarg: AST_SymbolFunarg,
-AST_SymbolImport: AST_SymbolImport,
-AST_SymbolImportForeign: AST_SymbolImportForeign,
-AST_SymbolLambda: AST_SymbolLambda,
-AST_SymbolLet: AST_SymbolLet,
-AST_SymbolMethod: AST_SymbolMethod,
-AST_SymbolRef: AST_SymbolRef,
-AST_SymbolVar: AST_SymbolVar,
-AST_TemplateSegment: AST_TemplateSegment,
-AST_TemplateString: AST_TemplateString,
-AST_This: AST_This,
-AST_Throw: AST_Throw,
-AST_Token: AST_Token,
-AST_Toplevel: AST_Toplevel,
-AST_True: AST_True,
-AST_Try: AST_Try,
-AST_Unary: AST_Unary,
-AST_UnaryPostfix: AST_UnaryPostfix,
-AST_UnaryPrefix: AST_UnaryPrefix,
-AST_Undefined: AST_Undefined,
-AST_Var: AST_Var,
-AST_VarDef: AST_VarDef,
-AST_While: AST_While,
-AST_With: AST_With,
-AST_Yield: AST_Yield,
-TreeTransformer: TreeTransformer,
-TreeWalker: TreeWalker,
-walk: walk,
-walk_abort: walk_abort,
-walk_body: walk_body,
-walk_parent: walk_parent,
-_INLINE: _INLINE,
-_NOINLINE: _NOINLINE,
-_PURE: _PURE
-});
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-function def_transform(node, descend) {
- node.DEFMETHOD("transform", function(tw, in_list) {
- let transformed = undefined;
- tw.push(this);
- if (tw.before) transformed = tw.before(this, descend, in_list);
- if (transformed === undefined) {
- transformed = this;
- descend(transformed, tw);
- if (tw.after) {
- const after_ret = tw.after(transformed, in_list);
- if (after_ret !== undefined) transformed = after_ret;
- }
- }
- tw.pop();
- return transformed;
- });
-}
-
-function do_list(list, tw) {
- return MAP(list, function(node) {
- return node.transform(tw, true);
- });
-}
-
-def_transform(AST_Node, noop);
-
-def_transform(AST_LabeledStatement, function(self, tw) {
- self.label = self.label.transform(tw);
- self.body = self.body.transform(tw);
-});
-
-def_transform(AST_SimpleStatement, function(self, tw) {
- self.body = self.body.transform(tw);
-});
-
-def_transform(AST_Block, function(self, tw) {
- self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Do, function(self, tw) {
- self.body = self.body.transform(tw);
- self.condition = self.condition.transform(tw);
-});
-
-def_transform(AST_While, function(self, tw) {
- self.condition = self.condition.transform(tw);
- self.body = self.body.transform(tw);
-});
-
-def_transform(AST_For, function(self, tw) {
- if (self.init) self.init = self.init.transform(tw);
- if (self.condition) self.condition = self.condition.transform(tw);
- if (self.step) self.step = self.step.transform(tw);
- self.body = self.body.transform(tw);
-});
-
-def_transform(AST_ForIn, function(self, tw) {
- self.init = self.init.transform(tw);
- self.object = self.object.transform(tw);
- self.body = self.body.transform(tw);
-});
-
-def_transform(AST_With, function(self, tw) {
- self.expression = self.expression.transform(tw);
- self.body = self.body.transform(tw);
-});
-
-def_transform(AST_Exit, function(self, tw) {
- if (self.value) self.value = self.value.transform(tw);
-});
-
-def_transform(AST_LoopControl, function(self, tw) {
- if (self.label) self.label = self.label.transform(tw);
-});
-
-def_transform(AST_If, function(self, tw) {
- self.condition = self.condition.transform(tw);
- self.body = self.body.transform(tw);
- if (self.alternative) self.alternative = self.alternative.transform(tw);
-});
-
-def_transform(AST_Switch, function(self, tw) {
- self.expression = self.expression.transform(tw);
- self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Case, function(self, tw) {
- self.expression = self.expression.transform(tw);
- self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Try, function(self, tw) {
- self.body = do_list(self.body, tw);
- if (self.bcatch) self.bcatch = self.bcatch.transform(tw);
- if (self.bfinally) self.bfinally = self.bfinally.transform(tw);
-});
-
-def_transform(AST_Catch, function(self, tw) {
- if (self.argname) self.argname = self.argname.transform(tw);
- self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Definitions, function(self, tw) {
- self.definitions = do_list(self.definitions, tw);
-});
-
-def_transform(AST_VarDef, function(self, tw) {
- self.name = self.name.transform(tw);
- if (self.value) self.value = self.value.transform(tw);
-});
-
-def_transform(AST_Destructuring, function(self, tw) {
- self.names = do_list(self.names, tw);
-});
-
-def_transform(AST_Lambda, function(self, tw) {
- if (self.name) self.name = self.name.transform(tw);
- self.argnames = do_list(self.argnames, tw);
- if (self.body instanceof AST_Node) {
- self.body = self.body.transform(tw);
- } else {
- self.body = do_list(self.body, tw);
- }
-});
-
-def_transform(AST_Call, function(self, tw) {
- self.expression = self.expression.transform(tw);
- self.args = do_list(self.args, tw);
-});
-
-def_transform(AST_Sequence, function(self, tw) {
- const result = do_list(self.expressions, tw);
- self.expressions = result.length
- ? result
- : [new AST_Number({ value: 0 })];
-});
-
-def_transform(AST_PropAccess, function(self, tw) {
- self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Sub, function(self, tw) {
- self.expression = self.expression.transform(tw);
- self.property = self.property.transform(tw);
-});
-
-def_transform(AST_Chain, function(self, tw) {
- self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Yield, function(self, tw) {
- if (self.expression) self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Await, function(self, tw) {
- self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Unary, function(self, tw) {
- self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Binary, function(self, tw) {
- self.left = self.left.transform(tw);
- self.right = self.right.transform(tw);
-});
-
-def_transform(AST_Conditional, function(self, tw) {
- self.condition = self.condition.transform(tw);
- self.consequent = self.consequent.transform(tw);
- self.alternative = self.alternative.transform(tw);
-});
-
-def_transform(AST_Array, function(self, tw) {
- self.elements = do_list(self.elements, tw);
-});
-
-def_transform(AST_Object, function(self, tw) {
- self.properties = do_list(self.properties, tw);
-});
-
-def_transform(AST_ObjectProperty, function(self, tw) {
- if (self.key instanceof AST_Node) {
- self.key = self.key.transform(tw);
- }
- if (self.value) self.value = self.value.transform(tw);
-});
-
-def_transform(AST_Class, function(self, tw) {
- if (self.name) self.name = self.name.transform(tw);
- if (self.extends) self.extends = self.extends.transform(tw);
- self.properties = do_list(self.properties, tw);
-});
-
-def_transform(AST_Expansion, function(self, tw) {
- self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_NameMapping, function(self, tw) {
- self.foreign_name = self.foreign_name.transform(tw);
- self.name = self.name.transform(tw);
-});
-
-def_transform(AST_Import, function(self, tw) {
- if (self.imported_name) self.imported_name = self.imported_name.transform(tw);
- if (self.imported_names) do_list(self.imported_names, tw);
- self.module_name = self.module_name.transform(tw);
-});
-
-def_transform(AST_Export, function(self, tw) {
- if (self.exported_definition) self.exported_definition = self.exported_definition.transform(tw);
- if (self.exported_value) self.exported_value = self.exported_value.transform(tw);
- if (self.exported_names) do_list(self.exported_names, tw);
- if (self.module_name) self.module_name = self.module_name.transform(tw);
-});
-
-def_transform(AST_TemplateString, function(self, tw) {
- self.segments = do_list(self.segments, tw);
-});
-
-def_transform(AST_PrefixedTemplateString, function(self, tw) {
- self.prefix = self.prefix.transform(tw);
- self.template_string = self.template_string.transform(tw);
-});
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-(function() {
-
- var normalize_directives = function(body) {
- var in_directive = true;
-
- for (var i = 0; i < body.length; i++) {
- if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) {
- body[i] = new AST_Directive({
- start: body[i].start,
- end: body[i].end,
- value: body[i].body.value
- });
- } else if (in_directive && !(body[i] instanceof AST_Statement && body[i].body instanceof AST_String)) {
- in_directive = false;
- }
- }
-
- return body;
- };
-
- var MOZ_TO_ME = {
- Program: function(M) {
- return new AST_Toplevel({
- start: my_start_token(M),
- end: my_end_token(M),
- body: normalize_directives(M.body.map(from_moz))
- });
- },
- ArrayPattern: function(M) {
- return new AST_Destructuring({
- start: my_start_token(M),
- end: my_end_token(M),
- names: M.elements.map(function(elm) {
- if (elm === null) {
- return new AST_Hole();
- }
- return from_moz(elm);
- }),
- is_array: true
- });
- },
- ObjectPattern: function(M) {
- return new AST_Destructuring({
- start: my_start_token(M),
- end: my_end_token(M),
- names: M.properties.map(from_moz),
- is_array: false
- });
- },
- AssignmentPattern: function(M) {
- return new AST_DefaultAssign({
- start: my_start_token(M),
- end: my_end_token(M),
- left: from_moz(M.left),
- operator: "=",
- right: from_moz(M.right)
- });
- },
- SpreadElement: function(M) {
- return new AST_Expansion({
- start: my_start_token(M),
- end: my_end_token(M),
- expression: from_moz(M.argument)
- });
- },
- RestElement: function(M) {
- return new AST_Expansion({
- start: my_start_token(M),
- end: my_end_token(M),
- expression: from_moz(M.argument)
- });
- },
- TemplateElement: function(M) {
- return new AST_TemplateSegment({
- start: my_start_token(M),
- end: my_end_token(M),
- value: M.value.cooked,
- raw: M.value.raw
- });
- },
- TemplateLiteral: function(M) {
- var segments = [];
- for (var i = 0; i < M.quasis.length; i++) {
- segments.push(from_moz(M.quasis[i]));
- if (M.expressions[i]) {
- segments.push(from_moz(M.expressions[i]));
- }
- }
- return new AST_TemplateString({
- start: my_start_token(M),
- end: my_end_token(M),
- segments: segments
- });
- },
- TaggedTemplateExpression: function(M) {
- return new AST_PrefixedTemplateString({
- start: my_start_token(M),
- end: my_end_token(M),
- template_string: from_moz(M.quasi),
- prefix: from_moz(M.tag)
- });
- },
- FunctionDeclaration: function(M) {
- return new AST_Defun({
- start: my_start_token(M),
- end: my_end_token(M),
- name: from_moz(M.id),
- argnames: M.params.map(from_moz),
- is_generator: M.generator,
- async: M.async,
- body: normalize_directives(from_moz(M.body).body)
- });
- },
- FunctionExpression: function(M) {
- return new AST_Function({
- start: my_start_token(M),
- end: my_end_token(M),
- name: from_moz(M.id),
- argnames: M.params.map(from_moz),
- is_generator: M.generator,
- async: M.async,
- body: normalize_directives(from_moz(M.body).body)
- });
- },
- ArrowFunctionExpression: function(M) {
- const body = M.body.type === "BlockStatement"
- ? from_moz(M.body).body
- : [make_node(AST_Return, {}, { value: from_moz(M.body) })];
- return new AST_Arrow({
- start: my_start_token(M),
- end: my_end_token(M),
- argnames: M.params.map(from_moz),
- body,
- async: M.async,
- });
- },
- ExpressionStatement: function(M) {
- return new AST_SimpleStatement({
- start: my_start_token(M),
- end: my_end_token(M),
- body: from_moz(M.expression)
- });
- },
- TryStatement: function(M) {
- var handlers = M.handlers || [M.handler];
- if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) {
- throw new Error("Multiple catch clauses are not supported.");
- }
- return new AST_Try({
- start : my_start_token(M),
- end : my_end_token(M),
- body : from_moz(M.block).body,
- bcatch : from_moz(handlers[0]),
- bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null
- });
- },
- Property: function(M) {
- var key = M.key;
- var args = {
- start : my_start_token(key || M.value),
- end : my_end_token(M.value),
- key : key.type == "Identifier" ? key.name : key.value,
- value : from_moz(M.value)
- };
- if (M.computed) {
- args.key = from_moz(M.key);
- }
- if (M.method) {
- args.is_generator = M.value.generator;
- args.async = M.value.async;
- if (!M.computed) {
- args.key = new AST_SymbolMethod({ name: args.key });
- } else {
- args.key = from_moz(M.key);
- }
- return new AST_ConciseMethod(args);
- }
- if (M.kind == "init") {
- if (key.type != "Identifier" && key.type != "Literal") {
- args.key = from_moz(key);
- }
- return new AST_ObjectKeyVal(args);
- }
- if (typeof args.key === "string" || typeof args.key === "number") {
- args.key = new AST_SymbolMethod({
- name: args.key
- });
- }
- args.value = new AST_Accessor(args.value);
- if (M.kind == "get") return new AST_ObjectGetter(args);
- if (M.kind == "set") return new AST_ObjectSetter(args);
- if (M.kind == "method") {
- args.async = M.value.async;
- args.is_generator = M.value.generator;
- args.quote = M.computed ? "\"" : null;
- return new AST_ConciseMethod(args);
- }
- },
- MethodDefinition: function(M) {
- var args = {
- start : my_start_token(M),
- end : my_end_token(M),
- key : M.computed ? from_moz(M.key) : new AST_SymbolMethod({ name: M.key.name || M.key.value }),
- value : from_moz(M.value),
- static : M.static,
- };
- if (M.kind == "get") {
- return new AST_ObjectGetter(args);
- }
- if (M.kind == "set") {
- return new AST_ObjectSetter(args);
- }
- args.is_generator = M.value.generator;
- args.async = M.value.async;
- return new AST_ConciseMethod(args);
- },
- FieldDefinition: function(M) {
- let key;
- if (M.computed) {
- key = from_moz(M.key);
- } else {
- if (M.key.type !== "Identifier") throw new Error("Non-Identifier key in FieldDefinition");
- key = from_moz(M.key);
- }
- return new AST_ClassProperty({
- start : my_start_token(M),
- end : my_end_token(M),
- key,
- value : from_moz(M.value),
- static : M.static,
- });
- },
- PropertyDefinition: function(M) {
- let key;
- if (M.computed) {
- key = from_moz(M.key);
- } else {
- if (M.key.type !== "Identifier") throw new Error("Non-Identifier key in PropertyDefinition");
- key = from_moz(M.key);
- }
-
- return new AST_ClassProperty({
- start : my_start_token(M),
- end : my_end_token(M),
- key,
- value : from_moz(M.value),
- static : M.static,
- });
- },
- ArrayExpression: function(M) {
- return new AST_Array({
- start : my_start_token(M),
- end : my_end_token(M),
- elements : M.elements.map(function(elem) {
- return elem === null ? new AST_Hole() : from_moz(elem);
- })
- });
- },
- ObjectExpression: function(M) {
- return new AST_Object({
- start : my_start_token(M),
- end : my_end_token(M),
- properties : M.properties.map(function(prop) {
- if (prop.type === "SpreadElement") {
- return from_moz(prop);
- }
- prop.type = "Property";
- return from_moz(prop);
- })
- });
- },
- SequenceExpression: function(M) {
- return new AST_Sequence({
- start : my_start_token(M),
- end : my_end_token(M),
- expressions: M.expressions.map(from_moz)
- });
- },
- MemberExpression: function(M) {
- return new (M.computed ? AST_Sub : AST_Dot)({
- start : my_start_token(M),
- end : my_end_token(M),
- property : M.computed ? from_moz(M.property) : M.property.name,
- expression : from_moz(M.object),
- optional : M.optional || false
- });
- },
- ChainExpression: function(M) {
- return new AST_Chain({
- start : my_start_token(M),
- end : my_end_token(M),
- expression : from_moz(M.expression)
- });
- },
- SwitchCase: function(M) {
- return new (M.test ? AST_Case : AST_Default)({
- start : my_start_token(M),
- end : my_end_token(M),
- expression : from_moz(M.test),
- body : M.consequent.map(from_moz)
- });
- },
- VariableDeclaration: function(M) {
- return new (M.kind === "const" ? AST_Const :
- M.kind === "let" ? AST_Let : AST_Var)({
- start : my_start_token(M),
- end : my_end_token(M),
- definitions : M.declarations.map(from_moz)
- });
- },
-
- ImportDeclaration: function(M) {
- var imported_name = null;
- var imported_names = null;
- M.specifiers.forEach(function (specifier) {
- if (specifier.type === "ImportSpecifier") {
- if (!imported_names) { imported_names = []; }
- imported_names.push(new AST_NameMapping({
- start: my_start_token(specifier),
- end: my_end_token(specifier),
- foreign_name: from_moz(specifier.imported),
- name: from_moz(specifier.local)
- }));
- } else if (specifier.type === "ImportDefaultSpecifier") {
- imported_name = from_moz(specifier.local);
- } else if (specifier.type === "ImportNamespaceSpecifier") {
- if (!imported_names) { imported_names = []; }
- imported_names.push(new AST_NameMapping({
- start: my_start_token(specifier),
- end: my_end_token(specifier),
- foreign_name: new AST_SymbolImportForeign({ name: "*" }),
- name: from_moz(specifier.local)
- }));
- }
- });
- return new AST_Import({
- start : my_start_token(M),
- end : my_end_token(M),
- imported_name: imported_name,
- imported_names : imported_names,
- module_name : from_moz(M.source)
- });
- },
- ExportAllDeclaration: function(M) {
- return new AST_Export({
- start: my_start_token(M),
- end: my_end_token(M),
- exported_names: [
- new AST_NameMapping({
- name: new AST_SymbolExportForeign({ name: "*" }),
- foreign_name: new AST_SymbolExportForeign({ name: "*" })
- })
- ],
- module_name: from_moz(M.source)
- });
- },
- ExportNamedDeclaration: function(M) {
- return new AST_Export({
- start: my_start_token(M),
- end: my_end_token(M),
- exported_definition: from_moz(M.declaration),
- exported_names: M.specifiers && M.specifiers.length ? M.specifiers.map(function (specifier) {
- return new AST_NameMapping({
- foreign_name: from_moz(specifier.exported),
- name: from_moz(specifier.local)
- });
- }) : null,
- module_name: from_moz(M.source)
- });
- },
- ExportDefaultDeclaration: function(M) {
- return new AST_Export({
- start: my_start_token(M),
- end: my_end_token(M),
- exported_value: from_moz(M.declaration),
- is_default: true
- });
- },
- Literal: function(M) {
- var val = M.value, args = {
- start : my_start_token(M),
- end : my_end_token(M)
- };
- var rx = M.regex;
- if (rx && rx.pattern) {
- // RegExpLiteral as per ESTree AST spec
- args.value = {
- source: rx.pattern,
- flags: rx.flags
- };
- return new AST_RegExp(args);
- } else if (rx) {
- // support legacy RegExp
- const rx_source = M.raw || val;
- const match = rx_source.match(/^\/(.*)\/(\w*)$/);
- if (!match) throw new Error("Invalid regex source " + rx_source);
- const [_, source, flags] = match;
- args.value = { source, flags };
- return new AST_RegExp(args);
- }
- if (val === null) return new AST_Null(args);
- switch (typeof val) {
- case "string":
- args.value = val;
- return new AST_String(args);
- case "number":
- args.value = val;
- args.raw = M.raw || val.toString();
- return new AST_Number(args);
- case "boolean":
- return new (val ? AST_True : AST_False)(args);
- }
- },
- MetaProperty: function(M) {
- if (M.meta.name === "new" && M.property.name === "target") {
- return new AST_NewTarget({
- start: my_start_token(M),
- end: my_end_token(M)
- });
- } else if (M.meta.name === "import" && M.property.name === "meta") {
- return new AST_ImportMeta({
- start: my_start_token(M),
- end: my_end_token(M)
- });
- }
- },
- Identifier: function(M) {
- var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];
- return new ( p.type == "LabeledStatement" ? AST_Label
- : p.type == "VariableDeclarator" && p.id === M ? (p.kind == "const" ? AST_SymbolConst : p.kind == "let" ? AST_SymbolLet : AST_SymbolVar)
- : /Import.*Specifier/.test(p.type) ? (p.local === M ? AST_SymbolImport : AST_SymbolImportForeign)
- : p.type == "ExportSpecifier" ? (p.local === M ? AST_SymbolExport : AST_SymbolExportForeign)
- : p.type == "FunctionExpression" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg)
- : p.type == "FunctionDeclaration" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg)
- : p.type == "ArrowFunctionExpression" ? (p.params.includes(M)) ? AST_SymbolFunarg : AST_SymbolRef
- : p.type == "ClassExpression" ? (p.id === M ? AST_SymbolClass : AST_SymbolRef)
- : p.type == "Property" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolMethod)
- : p.type == "PropertyDefinition" || p.type === "FieldDefinition" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolClassProperty)
- : p.type == "ClassDeclaration" ? (p.id === M ? AST_SymbolDefClass : AST_SymbolRef)
- : p.type == "MethodDefinition" ? (p.computed ? AST_SymbolRef : AST_SymbolMethod)
- : p.type == "CatchClause" ? AST_SymbolCatch
- : p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef
- : AST_SymbolRef)({
- start : my_start_token(M),
- end : my_end_token(M),
- name : M.name
- });
- },
- BigIntLiteral(M) {
- return new AST_BigInt({
- start : my_start_token(M),
- end : my_end_token(M),
- value : M.value
- });
- }
- };
-
- MOZ_TO_ME.UpdateExpression =
- MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) {
- var prefix = "prefix" in M ? M.prefix
- : M.type == "UnaryExpression" ? true : false;
- return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({
- start : my_start_token(M),
- end : my_end_token(M),
- operator : M.operator,
- expression : from_moz(M.argument)
- });
- };
-
- MOZ_TO_ME.ClassDeclaration =
- MOZ_TO_ME.ClassExpression = function From_Moz_Class(M) {
- return new (M.type === "ClassDeclaration" ? AST_DefClass : AST_ClassExpression)({
- start : my_start_token(M),
- end : my_end_token(M),
- name : from_moz(M.id),
- extends : from_moz(M.superClass),
- properties: M.body.body.map(from_moz)
- });
- };
-
- map("EmptyStatement", AST_EmptyStatement);
- map("BlockStatement", AST_BlockStatement, "body@body");
- map("IfStatement", AST_If, "test>condition, consequent>body, alternate>alternative");
- map("LabeledStatement", AST_LabeledStatement, "label>label, body>body");
- map("BreakStatement", AST_Break, "label>label");
- map("ContinueStatement", AST_Continue, "label>label");
- map("WithStatement", AST_With, "object>expression, body>body");
- map("SwitchStatement", AST_Switch, "discriminant>expression, cases@body");
- map("ReturnStatement", AST_Return, "argument>value");
- map("ThrowStatement", AST_Throw, "argument>value");
- map("WhileStatement", AST_While, "test>condition, body>body");
- map("DoWhileStatement", AST_Do, "test>condition, body>body");
- map("ForStatement", AST_For, "init>init, test>condition, update>step, body>body");
- map("ForInStatement", AST_ForIn, "left>init, right>object, body>body");
- map("ForOfStatement", AST_ForOf, "left>init, right>object, body>body, await=await");
- map("AwaitExpression", AST_Await, "argument>expression");
- map("YieldExpression", AST_Yield, "argument>expression, delegate=is_star");
- map("DebuggerStatement", AST_Debugger);
- map("VariableDeclarator", AST_VarDef, "id>name, init>value");
- map("CatchClause", AST_Catch, "param>argname, body%body");
-
- map("ThisExpression", AST_This);
- map("Super", AST_Super);
- map("BinaryExpression", AST_Binary, "operator=operator, left>left, right>right");
- map("LogicalExpression", AST_Binary, "operator=operator, left>left, right>right");
- map("AssignmentExpression", AST_Assign, "operator=operator, left>left, right>right");
- map("ConditionalExpression", AST_Conditional, "test>condition, consequent>consequent, alternate>alternative");
- map("NewExpression", AST_New, "callee>expression, arguments@args");
- map("CallExpression", AST_Call, "callee>expression, optional=optional, arguments@args");
-
- def_to_moz(AST_Toplevel, function To_Moz_Program(M) {
- return to_moz_scope("Program", M);
- });
-
- def_to_moz(AST_Expansion, function To_Moz_Spread(M) {
- return {
- type: to_moz_in_destructuring() ? "RestElement" : "SpreadElement",
- argument: to_moz(M.expression)
- };
- });
-
- def_to_moz(AST_PrefixedTemplateString, function To_Moz_TaggedTemplateExpression(M) {
- return {
- type: "TaggedTemplateExpression",
- tag: to_moz(M.prefix),
- quasi: to_moz(M.template_string)
- };
- });
-
- def_to_moz(AST_TemplateString, function To_Moz_TemplateLiteral(M) {
- var quasis = [];
- var expressions = [];
- for (var i = 0; i < M.segments.length; i++) {
- if (i % 2 !== 0) {
- expressions.push(to_moz(M.segments[i]));
- } else {
- quasis.push({
- type: "TemplateElement",
- value: {
- raw: M.segments[i].raw,
- cooked: M.segments[i].value
- },
- tail: i === M.segments.length - 1
- });
- }
- }
- return {
- type: "TemplateLiteral",
- quasis: quasis,
- expressions: expressions
- };
- });
-
- def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) {
- return {
- type: "FunctionDeclaration",
- id: to_moz(M.name),
- params: M.argnames.map(to_moz),
- generator: M.is_generator,
- async: M.async,
- body: to_moz_scope("BlockStatement", M)
- };
- });
-
- def_to_moz(AST_Function, function To_Moz_FunctionExpression(M, parent) {
- var is_generator = parent.is_generator !== undefined ?
- parent.is_generator : M.is_generator;
- return {
- type: "FunctionExpression",
- id: to_moz(M.name),
- params: M.argnames.map(to_moz),
- generator: is_generator,
- async: M.async,
- body: to_moz_scope("BlockStatement", M)
- };
- });
-
- def_to_moz(AST_Arrow, function To_Moz_ArrowFunctionExpression(M) {
- var body = {
- type: "BlockStatement",
- body: M.body.map(to_moz)
- };
- return {
- type: "ArrowFunctionExpression",
- params: M.argnames.map(to_moz),
- async: M.async,
- body: body
- };
- });
-
- def_to_moz(AST_Destructuring, function To_Moz_ObjectPattern(M) {
- if (M.is_array) {
- return {
- type: "ArrayPattern",
- elements: M.names.map(to_moz)
- };
- }
- return {
- type: "ObjectPattern",
- properties: M.names.map(to_moz)
- };
- });
-
- def_to_moz(AST_Directive, function To_Moz_Directive(M) {
- return {
- type: "ExpressionStatement",
- expression: {
- type: "Literal",
- value: M.value,
- raw: M.print_to_string()
- },
- directive: M.value
- };
- });
-
- def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) {
- return {
- type: "ExpressionStatement",
- expression: to_moz(M.body)
- };
- });
-
- def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) {
- return {
- type: "SwitchCase",
- test: to_moz(M.expression),
- consequent: M.body.map(to_moz)
- };
- });
-
- def_to_moz(AST_Try, function To_Moz_TryStatement(M) {
- return {
- type: "TryStatement",
- block: to_moz_block(M),
- handler: to_moz(M.bcatch),
- guardedHandlers: [],
- finalizer: to_moz(M.bfinally)
- };
- });
-
- def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {
- return {
- type: "CatchClause",
- param: to_moz(M.argname),
- guard: null,
- body: to_moz_block(M)
- };
- });
-
- def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) {
- return {
- type: "VariableDeclaration",
- kind:
- M instanceof AST_Const ? "const" :
- M instanceof AST_Let ? "let" : "var",
- declarations: M.definitions.map(to_moz)
- };
- });
-
- def_to_moz(AST_Export, function To_Moz_ExportDeclaration(M) {
- if (M.exported_names) {
- if (M.exported_names[0].name.name === "*") {
- return {
- type: "ExportAllDeclaration",
- source: to_moz(M.module_name)
- };
- }
- return {
- type: "ExportNamedDeclaration",
- specifiers: M.exported_names.map(function (name_mapping) {
- return {
- type: "ExportSpecifier",
- exported: to_moz(name_mapping.foreign_name),
- local: to_moz(name_mapping.name)
- };
- }),
- declaration: to_moz(M.exported_definition),
- source: to_moz(M.module_name)
- };
- }
- return {
- type: M.is_default ? "ExportDefaultDeclaration" : "ExportNamedDeclaration",
- declaration: to_moz(M.exported_value || M.exported_definition)
- };
- });
-
- def_to_moz(AST_Import, function To_Moz_ImportDeclaration(M) {
- var specifiers = [];
- if (M.imported_name) {
- specifiers.push({
- type: "ImportDefaultSpecifier",
- local: to_moz(M.imported_name)
- });
- }
- if (M.imported_names && M.imported_names[0].foreign_name.name === "*") {
- specifiers.push({
- type: "ImportNamespaceSpecifier",
- local: to_moz(M.imported_names[0].name)
- });
- } else if (M.imported_names) {
- M.imported_names.forEach(function(name_mapping) {
- specifiers.push({
- type: "ImportSpecifier",
- local: to_moz(name_mapping.name),
- imported: to_moz(name_mapping.foreign_name)
- });
- });
- }
- return {
- type: "ImportDeclaration",
- specifiers: specifiers,
- source: to_moz(M.module_name)
- };
- });
-
- def_to_moz(AST_ImportMeta, function To_Moz_MetaProperty() {
- return {
- type: "MetaProperty",
- meta: {
- type: "Identifier",
- name: "import"
- },
- property: {
- type: "Identifier",
- name: "meta"
- }
- };
- });
-
- def_to_moz(AST_Sequence, function To_Moz_SequenceExpression(M) {
- return {
- type: "SequenceExpression",
- expressions: M.expressions.map(to_moz)
- };
- });
-
- def_to_moz(AST_DotHash, function To_Moz_PrivateMemberExpression(M) {
- return {
- type: "MemberExpression",
- object: to_moz(M.expression),
- computed: false,
- property: {
- type: "PrivateIdentifier",
- name: M.property
- },
- optional: M.optional
- };
- });
-
- def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) {
- var isComputed = M instanceof AST_Sub;
- return {
- type: "MemberExpression",
- object: to_moz(M.expression),
- computed: isComputed,
- property: isComputed ? to_moz(M.property) : {type: "Identifier", name: M.property},
- optional: M.optional
- };
- });
-
- def_to_moz(AST_Chain, function To_Moz_ChainExpression(M) {
- return {
- type: "ChainExpression",
- expression: to_moz(M.expression)
- };
- });
-
- def_to_moz(AST_Unary, function To_Moz_Unary(M) {
- return {
- type: M.operator == "++" || M.operator == "--" ? "UpdateExpression" : "UnaryExpression",
- operator: M.operator,
- prefix: M instanceof AST_UnaryPrefix,
- argument: to_moz(M.expression)
- };
- });
-
- def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {
- if (M.operator == "=" && to_moz_in_destructuring()) {
- return {
- type: "AssignmentPattern",
- left: to_moz(M.left),
- right: to_moz(M.right)
- };
- }
-
- const type = M.operator == "&&" || M.operator == "||" || M.operator === "??"
- ? "LogicalExpression"
- : "BinaryExpression";
-
- return {
- type,
- left: to_moz(M.left),
- operator: M.operator,
- right: to_moz(M.right)
- };
- });
-
- def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) {
- return {
- type: "ArrayExpression",
- elements: M.elements.map(to_moz)
- };
- });
-
- def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) {
- return {
- type: "ObjectExpression",
- properties: M.properties.map(to_moz)
- };
- });
-
- def_to_moz(AST_ObjectProperty, function To_Moz_Property(M, parent) {
- var key = M.key instanceof AST_Node ? to_moz(M.key) : {
- type: "Identifier",
- value: M.key
- };
- if (typeof M.key === "number") {
- key = {
- type: "Literal",
- value: Number(M.key)
- };
- }
- if (typeof M.key === "string") {
- key = {
- type: "Identifier",
- name: M.key
- };
- }
- var kind;
- var string_or_num = typeof M.key === "string" || typeof M.key === "number";
- var computed = string_or_num ? false : !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef;
- if (M instanceof AST_ObjectKeyVal) {
- kind = "init";
- computed = !string_or_num;
- } else
- if (M instanceof AST_ObjectGetter) {
- kind = "get";
- } else
- if (M instanceof AST_ObjectSetter) {
- kind = "set";
- }
- if (M instanceof AST_PrivateGetter || M instanceof AST_PrivateSetter) {
- const kind = M instanceof AST_PrivateGetter ? "get" : "set";
- return {
- type: "MethodDefinition",
- computed: false,
- kind: kind,
- static: M.static,
- key: {
- type: "PrivateIdentifier",
- name: M.key.name
- },
- value: to_moz(M.value)
- };
- }
- if (M instanceof AST_ClassPrivateProperty) {
- return {
- type: "PropertyDefinition",
- key: {
- type: "PrivateIdentifier",
- name: M.key.name
- },
- value: to_moz(M.value),
- computed: false,
- static: M.static
- };
- }
- if (M instanceof AST_ClassProperty) {
- return {
- type: "PropertyDefinition",
- key,
- value: to_moz(M.value),
- computed,
- static: M.static
- };
- }
- if (parent instanceof AST_Class) {
- return {
- type: "MethodDefinition",
- computed: computed,
- kind: kind,
- static: M.static,
- key: to_moz(M.key),
- value: to_moz(M.value)
- };
- }
- return {
- type: "Property",
- computed: computed,
- kind: kind,
- key: key,
- value: to_moz(M.value)
- };
- });
-
- def_to_moz(AST_ConciseMethod, function To_Moz_MethodDefinition(M, parent) {
- if (parent instanceof AST_Object) {
- return {
- type: "Property",
- computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,
- kind: "init",
- method: true,
- shorthand: false,
- key: to_moz(M.key),
- value: to_moz(M.value)
- };
- }
-
- const key = M instanceof AST_PrivateMethod
- ? {
- type: "PrivateIdentifier",
- name: M.key.name
- }
- : to_moz(M.key);
-
- return {
- type: "MethodDefinition",
- kind: M.key === "constructor" ? "constructor" : "method",
- key,
- value: to_moz(M.value),
- computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,
- static: M.static,
- };
- });
-
- def_to_moz(AST_Class, function To_Moz_Class(M) {
- var type = M instanceof AST_ClassExpression ? "ClassExpression" : "ClassDeclaration";
- return {
- type: type,
- superClass: to_moz(M.extends),
- id: M.name ? to_moz(M.name) : null,
- body: {
- type: "ClassBody",
- body: M.properties.map(to_moz)
- }
- };
- });
-
- def_to_moz(AST_NewTarget, function To_Moz_MetaProperty() {
- return {
- type: "MetaProperty",
- meta: {
- type: "Identifier",
- name: "new"
- },
- property: {
- type: "Identifier",
- name: "target"
- }
- };
- });
-
- def_to_moz(AST_Symbol, function To_Moz_Identifier(M, parent) {
- if (M instanceof AST_SymbolMethod && parent.quote) {
- return {
- type: "Literal",
- value: M.name
- };
- }
- var def = M.definition();
- return {
- type: "Identifier",
- name: def ? def.mangled_name || def.name : M.name
- };
- });
-
- def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) {
- const pattern = M.value.source;
- const flags = M.value.flags;
- return {
- type: "Literal",
- value: null,
- raw: M.print_to_string(),
- regex: { pattern, flags }
- };
- });
-
- def_to_moz(AST_Constant, function To_Moz_Literal(M) {
- var value = M.value;
- return {
- type: "Literal",
- value: value,
- raw: M.raw || M.print_to_string()
- };
- });
-
- def_to_moz(AST_Atom, function To_Moz_Atom(M) {
- return {
- type: "Identifier",
- name: String(M.value)
- };
- });
-
- def_to_moz(AST_BigInt, M => ({
- type: "BigIntLiteral",
- value: M.value
- }));
-
- AST_Boolean.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast);
- AST_Null.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast);
- AST_Hole.DEFMETHOD("to_mozilla_ast", function To_Moz_ArrayHole() { return null; });
-
- AST_Block.DEFMETHOD("to_mozilla_ast", AST_BlockStatement.prototype.to_mozilla_ast);
- AST_Lambda.DEFMETHOD("to_mozilla_ast", AST_Function.prototype.to_mozilla_ast);
-
- /* -----[ tools ]----- */
-
- function my_start_token(moznode) {
- var loc = moznode.loc, start = loc && loc.start;
- var range = moznode.range;
- return new AST_Token(
- "",
- "",
- start && start.line || 0,
- start && start.column || 0,
- range ? range [0] : moznode.start,
- false,
- [],
- [],
- loc && loc.source,
- );
- }
-
- function my_end_token(moznode) {
- var loc = moznode.loc, end = loc && loc.end;
- var range = moznode.range;
- return new AST_Token(
- "",
- "",
- end && end.line || 0,
- end && end.column || 0,
- range ? range [0] : moznode.end,
- false,
- [],
- [],
- loc && loc.source,
- );
- }
-
- function map(moztype, mytype, propmap) {
- var moz_to_me = "function From_Moz_" + moztype + "(M){\n";
- moz_to_me += "return new U2." + mytype.name + "({\n" +
- "start: my_start_token(M),\n" +
- "end: my_end_token(M)";
-
- var me_to_moz = "function To_Moz_" + moztype + "(M){\n";
- me_to_moz += "return {\n" +
- "type: " + JSON.stringify(moztype);
-
- if (propmap) propmap.split(/\s*,\s*/).forEach(function(prop) {
- var m = /([a-z0-9$_]+)([=@>%])([a-z0-9$_]+)/i.exec(prop);
- if (!m) throw new Error("Can't understand property map: " + prop);
- var moz = m[1], how = m[2], my = m[3];
- moz_to_me += ",\n" + my + ": ";
- me_to_moz += ",\n" + moz + ": ";
- switch (how) {
- case "@":
- moz_to_me += "M." + moz + ".map(from_moz)";
- me_to_moz += "M." + my + ".map(to_moz)";
- break;
- case ">":
- moz_to_me += "from_moz(M." + moz + ")";
- me_to_moz += "to_moz(M." + my + ")";
- break;
- case "=":
- moz_to_me += "M." + moz;
- me_to_moz += "M." + my;
- break;
- case "%":
- moz_to_me += "from_moz(M." + moz + ").body";
- me_to_moz += "to_moz_block(M)";
- break;
- default:
- throw new Error("Can't understand operator in propmap: " + prop);
- }
- });
-
- moz_to_me += "\n})\n}";
- me_to_moz += "\n}\n}";
-
- moz_to_me = new Function("U2", "my_start_token", "my_end_token", "from_moz", "return(" + moz_to_me + ")")(
- ast, my_start_token, my_end_token, from_moz
- );
- me_to_moz = new Function("to_moz", "to_moz_block", "to_moz_scope", "return(" + me_to_moz + ")")(
- to_moz, to_moz_block, to_moz_scope
- );
- MOZ_TO_ME[moztype] = moz_to_me;
- def_to_moz(mytype, me_to_moz);
- }
-
- var FROM_MOZ_STACK = null;
-
- function from_moz(node) {
- FROM_MOZ_STACK.push(node);
- var ret = node != null ? MOZ_TO_ME[node.type](node) : null;
- FROM_MOZ_STACK.pop();
- return ret;
- }
-
- AST_Node.from_mozilla_ast = function(node) {
- var save_stack = FROM_MOZ_STACK;
- FROM_MOZ_STACK = [];
- var ast = from_moz(node);
- FROM_MOZ_STACK = save_stack;
- return ast;
- };
-
- function set_moz_loc(mynode, moznode) {
- var start = mynode.start;
- var end = mynode.end;
- if (!(start && end)) {
- return moznode;
- }
- if (start.pos != null && end.endpos != null) {
- moznode.range = [start.pos, end.endpos];
- }
- if (start.line) {
- moznode.loc = {
- start: {line: start.line, column: start.col},
- end: end.endline ? {line: end.endline, column: end.endcol} : null
- };
- if (start.file) {
- moznode.loc.source = start.file;
- }
- }
- return moznode;
- }
-
- function def_to_moz(mytype, handler) {
- mytype.DEFMETHOD("to_mozilla_ast", function(parent) {
- return set_moz_loc(this, handler(this, parent));
- });
- }
-
- var TO_MOZ_STACK = null;
-
- function to_moz(node) {
- if (TO_MOZ_STACK === null) { TO_MOZ_STACK = []; }
- TO_MOZ_STACK.push(node);
- var ast = node != null ? node.to_mozilla_ast(TO_MOZ_STACK[TO_MOZ_STACK.length - 2]) : null;
- TO_MOZ_STACK.pop();
- if (TO_MOZ_STACK.length === 0) { TO_MOZ_STACK = null; }
- return ast;
- }
-
- function to_moz_in_destructuring() {
- var i = TO_MOZ_STACK.length;
- while (i--) {
- if (TO_MOZ_STACK[i] instanceof AST_Destructuring) {
- return true;
- }
- }
- return false;
- }
-
- function to_moz_block(node) {
- return {
- type: "BlockStatement",
- body: node.body.map(to_moz)
- };
- }
-
- function to_moz_scope(type, node) {
- var body = node.body.map(to_moz);
- if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) {
- body.unshift(to_moz(new AST_EmptyStatement(node.body[0])));
- }
- return {
- type: type,
- body: body
- };
- }
-})();
-
-// return true if the node at the top of the stack (that means the
-// innermost node in the current output) is lexically the first in
-// a statement.
-function first_in_statement(stack) {
- let node = stack.parent(-1);
- for (let i = 0, p; p = stack.parent(i); i++) {
- if (p instanceof AST_Statement && p.body === node)
- return true;
- if ((p instanceof AST_Sequence && p.expressions[0] === node) ||
- (p.TYPE === "Call" && p.expression === node) ||
- (p instanceof AST_PrefixedTemplateString && p.prefix === node) ||
- (p instanceof AST_Dot && p.expression === node) ||
- (p instanceof AST_Sub && p.expression === node) ||
- (p instanceof AST_Conditional && p.condition === node) ||
- (p instanceof AST_Binary && p.left === node) ||
- (p instanceof AST_UnaryPostfix && p.expression === node)
- ) {
- node = p;
- } else {
- return false;
- }
- }
-}
-
-// Returns whether the leftmost item in the expression is an object
-function left_is_object(node) {
- if (node instanceof AST_Object) return true;
- if (node instanceof AST_Sequence) return left_is_object(node.expressions[0]);
- if (node.TYPE === "Call") return left_is_object(node.expression);
- if (node instanceof AST_PrefixedTemplateString) return left_is_object(node.prefix);
- if (node instanceof AST_Dot || node instanceof AST_Sub) return left_is_object(node.expression);
- if (node instanceof AST_Conditional) return left_is_object(node.condition);
- if (node instanceof AST_Binary) return left_is_object(node.left);
- if (node instanceof AST_UnaryPostfix) return left_is_object(node.expression);
- return false;
-}
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-const EXPECT_DIRECTIVE = /^$|[;{][\s\n]*$/;
-const CODE_LINE_BREAK = 10;
-const CODE_SPACE = 32;
-
-const r_annotation = /[@#]__(PURE|INLINE|NOINLINE)__/g;
-
-function is_some_comments(comment) {
- // multiline comment
- return (
- (comment.type === "comment2" || comment.type === "comment1")
- && /@preserve|@lic|@cc_on|^\**!/i.test(comment.value)
- );
-}
-
-function OutputStream(options) {
-
- var readonly = !options;
- options = defaults(options, {
- ascii_only : false,
- beautify : false,
- braces : false,
- comments : "some",
- ecma : 5,
- ie8 : false,
- indent_level : 4,
- indent_start : 0,
- inline_script : true,
- keep_numbers : false,
- keep_quoted_props : false,
- max_line_len : false,
- preamble : null,
- preserve_annotations : false,
- quote_keys : false,
- quote_style : 0,
- safari10 : false,
- semicolons : true,
- shebang : true,
- shorthand : undefined,
- source_map : null,
- webkit : false,
- width : 80,
- wrap_iife : false,
- wrap_func_args : true,
- }, true);
-
- if (options.shorthand === undefined)
- options.shorthand = options.ecma > 5;
-
- // Convert comment option to RegExp if neccessary and set up comments filter
- var comment_filter = return_false; // Default case, throw all comments away
- if (options.comments) {
- let comments = options.comments;
- if (typeof options.comments === "string" && /^\/.*\/[a-zA-Z]*$/.test(options.comments)) {
- var regex_pos = options.comments.lastIndexOf("/");
- comments = new RegExp(
- options.comments.substr(1, regex_pos - 1),
- options.comments.substr(regex_pos + 1)
- );
- }
- if (comments instanceof RegExp) {
- comment_filter = function(comment) {
- return comment.type != "comment5" && comments.test(comment.value);
- };
- } else if (typeof comments === "function") {
- comment_filter = function(comment) {
- return comment.type != "comment5" && comments(this, comment);
- };
- } else if (comments === "some") {
- comment_filter = is_some_comments;
- } else { // NOTE includes "all" option
- comment_filter = return_true;
- }
- }
-
- var indentation = 0;
- var current_col = 0;
- var current_line = 1;
- var current_pos = 0;
- var OUTPUT = "";
- let printed_comments = new Set();
-
- var to_utf8 = options.ascii_only ? function(str, identifier) {
- if (options.ecma >= 2015 && !options.safari10) {
- str = str.replace(/[\ud800-\udbff][\udc00-\udfff]/g, function(ch) {
- var code = get_full_char_code(ch, 0).toString(16);
- return "\\u{" + code + "}";
- });
- }
- return str.replace(/[\u0000-\u001f\u007f-\uffff]/g, function(ch) {
- var code = ch.charCodeAt(0).toString(16);
- if (code.length <= 2 && !identifier) {
- while (code.length < 2) code = "0" + code;
- return "\\x" + code;
- } else {
- while (code.length < 4) code = "0" + code;
- return "\\u" + code;
- }
- });
- } : function(str) {
- return str.replace(/[\ud800-\udbff][\udc00-\udfff]|([\ud800-\udbff]|[\udc00-\udfff])/g, function(match, lone) {
- if (lone) {
- return "\\u" + lone.charCodeAt(0).toString(16);
- }
- return match;
- });
- };
-
- function make_string(str, quote) {
- var dq = 0, sq = 0;
- str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,
- function(s, i) {
- switch (s) {
- case '"': ++dq; return '"';
- case "'": ++sq; return "'";
- case "\\": return "\\\\";
- case "\n": return "\\n";
- case "\r": return "\\r";
- case "\t": return "\\t";
- case "\b": return "\\b";
- case "\f": return "\\f";
- case "\x0B": return options.ie8 ? "\\x0B" : "\\v";
- case "\u2028": return "\\u2028";
- case "\u2029": return "\\u2029";
- case "\ufeff": return "\\ufeff";
- case "\0":
- return /[0-9]/.test(get_full_char(str, i+1)) ? "\\x00" : "\\0";
- }
- return s;
- });
- function quote_single() {
- return "'" + str.replace(/\x27/g, "\\'") + "'";
- }
- function quote_double() {
- return '"' + str.replace(/\x22/g, '\\"') + '"';
- }
- function quote_template() {
- return "`" + str.replace(/`/g, "\\`") + "`";
- }
- str = to_utf8(str);
- if (quote === "`") return quote_template();
- switch (options.quote_style) {
- case 1:
- return quote_single();
- case 2:
- return quote_double();
- case 3:
- return quote == "'" ? quote_single() : quote_double();
- default:
- return dq > sq ? quote_single() : quote_double();
- }
- }
-
- function encode_string(str, quote) {
- var ret = make_string(str, quote);
- if (options.inline_script) {
- ret = ret.replace(/<\x2f(script)([>\/\t\n\f\r ])/gi, "<\\/$1$2");
- ret = ret.replace(/\x3c!--/g, "\\x3c!--");
- ret = ret.replace(/--\x3e/g, "--\\x3e");
- }
- return ret;
- }
-
- function make_name(name) {
- name = name.toString();
- name = to_utf8(name, true);
- return name;
- }
-
- function make_indent(back) {
- return " ".repeat(options.indent_start + indentation - back * options.indent_level);
- }
-
- /* -----[ beautification/minification ]----- */
-
- var has_parens = false;
- var might_need_space = false;
- var might_need_semicolon = false;
- var might_add_newline = 0;
- var need_newline_indented = false;
- var need_space = false;
- var newline_insert = -1;
- var last = "";
- var mapping_token, mapping_name, mappings = options.source_map && [];
-
- var do_add_mapping = mappings ? function() {
- mappings.forEach(function(mapping) {
- try {
- let { name, token } = mapping;
- if (token.type == "name" || token.type === "privatename") {
- name = token.value;
- } else if (name instanceof AST_Symbol) {
- name = token.type === "string" ? token.value : name.name;
- }
- options.source_map.add(
- mapping.token.file,
- mapping.line, mapping.col,
- mapping.token.line, mapping.token.col,
- is_basic_identifier_string(name) ? name : undefined
- );
- } catch(ex) {
- // Ignore bad mapping
- }
- });
- mappings = [];
- } : noop;
-
- var ensure_line_len = options.max_line_len ? function() {
- if (current_col > options.max_line_len) {
- if (might_add_newline) {
- var left = OUTPUT.slice(0, might_add_newline);
- var right = OUTPUT.slice(might_add_newline);
- if (mappings) {
- var delta = right.length - current_col;
- mappings.forEach(function(mapping) {
- mapping.line++;
- mapping.col += delta;
- });
- }
- OUTPUT = left + "\n" + right;
- current_line++;
- current_pos++;
- current_col = right.length;
- }
- }
- if (might_add_newline) {
- might_add_newline = 0;
- do_add_mapping();
- }
- } : noop;
-
- var requireSemicolonChars = makePredicate("( [ + * / - , . `");
-
- function print(str) {
- str = String(str);
- var ch = get_full_char(str, 0);
- if (need_newline_indented && ch) {
- need_newline_indented = false;
- if (ch !== "\n") {
- print("\n");
- indent();
- }
- }
- if (need_space && ch) {
- need_space = false;
- if (!/[\s;})]/.test(ch)) {
- space();
- }
- }
- newline_insert = -1;
- var prev = last.charAt(last.length - 1);
- if (might_need_semicolon) {
- might_need_semicolon = false;
-
- if (prev === ":" && ch === "}" || (!ch || !";}".includes(ch)) && prev !== ";") {
- if (options.semicolons || requireSemicolonChars.has(ch)) {
- OUTPUT += ";";
- current_col++;
- current_pos++;
- } else {
- ensure_line_len();
- if (current_col > 0) {
- OUTPUT += "\n";
- current_pos++;
- current_line++;
- current_col = 0;
- }
-
- if (/^\s+$/.test(str)) {
- // reset the semicolon flag, since we didn't print one
- // now and might still have to later
- might_need_semicolon = true;
- }
- }
-
- if (!options.beautify)
- might_need_space = false;
- }
- }
-
- if (might_need_space) {
- if ((is_identifier_char(prev)
- && (is_identifier_char(ch) || ch == "\\"))
- || (ch == "/" && ch == prev)
- || ((ch == "+" || ch == "-") && ch == last)
- ) {
- OUTPUT += " ";
- current_col++;
- current_pos++;
- }
- might_need_space = false;
- }
-
- if (mapping_token) {
- mappings.push({
- token: mapping_token,
- name: mapping_name,
- line: current_line,
- col: current_col
- });
- mapping_token = false;
- if (!might_add_newline) do_add_mapping();
- }
-
- OUTPUT += str;
- has_parens = str[str.length - 1] == "(";
- current_pos += str.length;
- var a = str.split(/\r?\n/), n = a.length - 1;
- current_line += n;
- current_col += a[0].length;
- if (n > 0) {
- ensure_line_len();
- current_col = a[n].length;
- }
- last = str;
- }
-
- var star = function() {
- print("*");
- };
-
- var space = options.beautify ? function() {
- print(" ");
- } : function() {
- might_need_space = true;
- };
-
- var indent = options.beautify ? function(half) {
- if (options.beautify) {
- print(make_indent(half ? 0.5 : 0));
- }
- } : noop;
-
- var with_indent = options.beautify ? function(col, cont) {
- if (col === true) col = next_indent();
- var save_indentation = indentation;
- indentation = col;
- var ret = cont();
- indentation = save_indentation;
- return ret;
- } : function(col, cont) { return cont(); };
-
- var newline = options.beautify ? function() {
- if (newline_insert < 0) return print("\n");
- if (OUTPUT[newline_insert] != "\n") {
- OUTPUT = OUTPUT.slice(0, newline_insert) + "\n" + OUTPUT.slice(newline_insert);
- current_pos++;
- current_line++;
- }
- newline_insert++;
- } : options.max_line_len ? function() {
- ensure_line_len();
- might_add_newline = OUTPUT.length;
- } : noop;
-
- var semicolon = options.beautify ? function() {
- print(";");
- } : function() {
- might_need_semicolon = true;
- };
-
- function force_semicolon() {
- might_need_semicolon = false;
- print(";");
- }
-
- function next_indent() {
- return indentation + options.indent_level;
- }
-
- function with_block(cont) {
- var ret;
- print("{");
- newline();
- with_indent(next_indent(), function() {
- ret = cont();
- });
- indent();
- print("}");
- return ret;
- }
-
- function with_parens(cont) {
- print("(");
- //XXX: still nice to have that for argument lists
- //var ret = with_indent(current_col, cont);
- var ret = cont();
- print(")");
- return ret;
- }
-
- function with_square(cont) {
- print("[");
- //var ret = with_indent(current_col, cont);
- var ret = cont();
- print("]");
- return ret;
- }
-
- function comma() {
- print(",");
- space();
- }
-
- function colon() {
- print(":");
- space();
- }
-
- var add_mapping = mappings ? function(token, name) {
- mapping_token = token;
- mapping_name = name;
- } : noop;
-
- function get() {
- if (might_add_newline) {
- ensure_line_len();
- }
- return OUTPUT;
- }
-
- function has_nlb() {
- let n = OUTPUT.length - 1;
- while (n >= 0) {
- const code = OUTPUT.charCodeAt(n);
- if (code === CODE_LINE_BREAK) {
- return true;
- }
-
- if (code !== CODE_SPACE) {
- return false;
- }
- n--;
- }
- return true;
- }
-
- function filter_comment(comment) {
- if (!options.preserve_annotations) {
- comment = comment.replace(r_annotation, " ");
- }
- if (/^\s*$/.test(comment)) {
- return "";
- }
- return comment.replace(/(<\s*\/\s*)(script)/i, "<\\/$2");
- }
-
- function prepend_comments(node) {
- var self = this;
- var start = node.start;
- if (!start) return;
- var printed_comments = self.printed_comments;
-
- // There cannot be a newline between return and its value.
- const return_with_value = node instanceof AST_Exit && node.value;
-
- if (
- start.comments_before
- && printed_comments.has(start.comments_before)
- ) {
- if (return_with_value) {
- start.comments_before = [];
- } else {
- return;
- }
- }
-
- var comments = start.comments_before;
- if (!comments) {
- comments = start.comments_before = [];
- }
- printed_comments.add(comments);
-
- if (return_with_value) {
- var tw = new TreeWalker(function(node) {
- var parent = tw.parent();
- if (parent instanceof AST_Exit
- || parent instanceof AST_Binary && parent.left === node
- || parent.TYPE == "Call" && parent.expression === node
- || parent instanceof AST_Conditional && parent.condition === node
- || parent instanceof AST_Dot && parent.expression === node
- || parent instanceof AST_Sequence && parent.expressions[0] === node
- || parent instanceof AST_Sub && parent.expression === node
- || parent instanceof AST_UnaryPostfix) {
- if (!node.start) return;
- var text = node.start.comments_before;
- if (text && !printed_comments.has(text)) {
- printed_comments.add(text);
- comments = comments.concat(text);
- }
- } else {
- return true;
- }
- });
- tw.push(node);
- node.value.walk(tw);
- }
-
- if (current_pos == 0) {
- if (comments.length > 0 && options.shebang && comments[0].type === "comment5"
- && !printed_comments.has(comments[0])) {
- print("#!" + comments.shift().value + "\n");
- indent();
- }
- var preamble = options.preamble;
- if (preamble) {
- print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g, "\n"));
- }
- }
-
- comments = comments.filter(comment_filter, node).filter(c => !printed_comments.has(c));
- if (comments.length == 0) return;
- var last_nlb = has_nlb();
- comments.forEach(function(c, i) {
- printed_comments.add(c);
- if (!last_nlb) {
- if (c.nlb) {
- print("\n");
- indent();
- last_nlb = true;
- } else if (i > 0) {
- space();
- }
- }
-
- if (/comment[134]/.test(c.type)) {
- var value = filter_comment(c.value);
- if (value) {
- print("//" + value + "\n");
- indent();
- }
- last_nlb = true;
- } else if (c.type == "comment2") {
- var value = filter_comment(c.value);
- if (value) {
- print("/*" + value + "*/");
- }
- last_nlb = false;
- }
- });
- if (!last_nlb) {
- if (start.nlb) {
- print("\n");
- indent();
- } else {
- space();
- }
- }
- }
-
- function append_comments(node, tail) {
- var self = this;
- var token = node.end;
- if (!token) return;
- var printed_comments = self.printed_comments;
- var comments = token[tail ? "comments_before" : "comments_after"];
- if (!comments || printed_comments.has(comments)) return;
- if (!(node instanceof AST_Statement || comments.every((c) =>
- !/comment[134]/.test(c.type)
- ))) return;
- printed_comments.add(comments);
- var insert = OUTPUT.length;
- comments.filter(comment_filter, node).forEach(function(c, i) {
- if (printed_comments.has(c)) return;
- printed_comments.add(c);
- need_space = false;
- if (need_newline_indented) {
- print("\n");
- indent();
- need_newline_indented = false;
- } else if (c.nlb && (i > 0 || !has_nlb())) {
- print("\n");
- indent();
- } else if (i > 0 || !tail) {
- space();
- }
- if (/comment[134]/.test(c.type)) {
- const value = filter_comment(c.value);
- if (value) {
- print("//" + value);
- }
- need_newline_indented = true;
- } else if (c.type == "comment2") {
- const value = filter_comment(c.value);
- if (value) {
- print("/*" + value + "*/");
- }
- need_space = true;
- }
- });
- if (OUTPUT.length > insert) newline_insert = insert;
- }
-
- var stack = [];
- return {
- get : get,
- toString : get,
- indent : indent,
- in_directive : false,
- use_asm : null,
- active_scope : null,
- indentation : function() { return indentation; },
- current_width : function() { return current_col - indentation; },
- should_break : function() { return options.width && this.current_width() >= options.width; },
- has_parens : function() { return has_parens; },
- newline : newline,
- print : print,
- star : star,
- space : space,
- comma : comma,
- colon : colon,
- last : function() { return last; },
- semicolon : semicolon,
- force_semicolon : force_semicolon,
- to_utf8 : to_utf8,
- print_name : function(name) { print(make_name(name)); },
- print_string : function(str, quote, escape_directive) {
- var encoded = encode_string(str, quote);
- if (escape_directive === true && !encoded.includes("\\")) {
- // Insert semicolons to break directive prologue
- if (!EXPECT_DIRECTIVE.test(OUTPUT)) {
- force_semicolon();
- }
- force_semicolon();
- }
- print(encoded);
- },
- print_template_string_chars: function(str) {
- var encoded = encode_string(str, "`").replace(/\${/g, "\\${");
- return print(encoded.substr(1, encoded.length - 2));
- },
- encode_string : encode_string,
- next_indent : next_indent,
- with_indent : with_indent,
- with_block : with_block,
- with_parens : with_parens,
- with_square : with_square,
- add_mapping : add_mapping,
- option : function(opt) { return options[opt]; },
- printed_comments: printed_comments,
- prepend_comments: readonly ? noop : prepend_comments,
- append_comments : readonly || comment_filter === return_false ? noop : append_comments,
- line : function() { return current_line; },
- col : function() { return current_col; },
- pos : function() { return current_pos; },
- push_node : function(node) { stack.push(node); },
- pop_node : function() { return stack.pop(); },
- parent : function(n) {
- return stack[stack.length - 2 - (n || 0)];
- }
- };
-
-}
-
-/* -----[ code generators ]----- */
-
-(function() {
-
- /* -----[ utils ]----- */
-
- function DEFPRINT(nodetype, generator) {
- nodetype.DEFMETHOD("_codegen", generator);
- }
-
- AST_Node.DEFMETHOD("print", function(output, force_parens) {
- var self = this, generator = self._codegen;
- if (self instanceof AST_Scope) {
- output.active_scope = self;
- } else if (!output.use_asm && self instanceof AST_Directive && self.value == "use asm") {
- output.use_asm = output.active_scope;
- }
- function doit() {
- output.prepend_comments(self);
- self.add_source_map(output);
- generator(self, output);
- output.append_comments(self);
- }
- output.push_node(self);
- if (force_parens || self.needs_parens(output)) {
- output.with_parens(doit);
- } else {
- doit();
- }
- output.pop_node();
- if (self === output.use_asm) {
- output.use_asm = null;
- }
- });
- AST_Node.DEFMETHOD("_print", AST_Node.prototype.print);
-
- AST_Node.DEFMETHOD("print_to_string", function(options) {
- var output = OutputStream(options);
- this.print(output);
- return output.get();
- });
-
- /* -----[ PARENTHESES ]----- */
-
- function PARENS(nodetype, func) {
- if (Array.isArray(nodetype)) {
- nodetype.forEach(function(nodetype) {
- PARENS(nodetype, func);
- });
- } else {
- nodetype.DEFMETHOD("needs_parens", func);
- }
- }
-
- PARENS(AST_Node, return_false);
-
- // a function expression needs parens around it when it's provably
- // the first token to appear in a statement.
- PARENS(AST_Function, function(output) {
- if (!output.has_parens() && first_in_statement(output)) {
- return true;
- }
-
- if (output.option("webkit")) {
- var p = output.parent();
- if (p instanceof AST_PropAccess && p.expression === this) {
- return true;
- }
- }
-
- if (output.option("wrap_iife")) {
- var p = output.parent();
- if (p instanceof AST_Call && p.expression === this) {
- return true;
- }
- }
-
- if (output.option("wrap_func_args")) {
- var p = output.parent();
- if (p instanceof AST_Call && p.args.includes(this)) {
- return true;
- }
- }
-
- return false;
- });
-
- PARENS(AST_Arrow, function(output) {
- var p = output.parent();
-
- if (
- output.option("wrap_func_args")
- && p instanceof AST_Call
- && p.args.includes(this)
- ) {
- return true;
- }
- return p instanceof AST_PropAccess && p.expression === this;
- });
-
- // same goes for an object literal (as in AST_Function), because
- // otherwise {...} would be interpreted as a block of code.
- PARENS(AST_Object, function(output) {
- return !output.has_parens() && first_in_statement(output);
- });
-
- PARENS(AST_ClassExpression, first_in_statement);
-
- PARENS(AST_Unary, function(output) {
- var p = output.parent();
- return p instanceof AST_PropAccess && p.expression === this
- || p instanceof AST_Call && p.expression === this
- || p instanceof AST_Binary
- && p.operator === "**"
- && this instanceof AST_UnaryPrefix
- && p.left === this
- && this.operator !== "++"
- && this.operator !== "--";
- });
-
- PARENS(AST_Await, function(output) {
- var p = output.parent();
- return p instanceof AST_PropAccess && p.expression === this
- || p instanceof AST_Call && p.expression === this
- || p instanceof AST_Binary && p.operator === "**" && p.left === this
- || output.option("safari10") && p instanceof AST_UnaryPrefix;
- });
-
- PARENS(AST_Sequence, function(output) {
- var p = output.parent();
- return p instanceof AST_Call // (foo, bar)() or foo(1, (2, 3), 4)
- || p instanceof AST_Unary // !(foo, bar, baz)
- || p instanceof AST_Binary // 1 + (2, 3) + 4 ==> 8
- || p instanceof AST_VarDef // var a = (1, 2), b = a + a; ==> b == 4
- || p instanceof AST_PropAccess // (1, {foo:2}).foo or (1, {foo:2})["foo"] ==> 2
- || p instanceof AST_Array // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ]
- || p instanceof AST_ObjectProperty // { foo: (1, 2) }.foo ==> 2
- || p instanceof AST_Conditional /* (false, true) ? (a = 10, b = 20) : (c = 30)
- * ==> 20 (side effect, set a := 10 and b := 20) */
- || p instanceof AST_Arrow // x => (x, x)
- || p instanceof AST_DefaultAssign // x => (x = (0, function(){}))
- || p instanceof AST_Expansion // [...(a, b)]
- || p instanceof AST_ForOf && this === p.object // for (e of (foo, bar)) {}
- || p instanceof AST_Yield // yield (foo, bar)
- || p instanceof AST_Export // export default (foo, bar)
- ;
- });
-
- PARENS(AST_Binary, function(output) {
- var p = output.parent();
- // (foo && bar)()
- if (p instanceof AST_Call && p.expression === this)
- return true;
- // typeof (foo && bar)
- if (p instanceof AST_Unary)
- return true;
- // (foo && bar)["prop"], (foo && bar).prop
- if (p instanceof AST_PropAccess && p.expression === this)
- return true;
- // this deals with precedence: 3 * (2 + 1)
- if (p instanceof AST_Binary) {
- const po = p.operator;
- const so = this.operator;
-
- if (so === "??" && (po === "||" || po === "&&")) {
- return true;
- }
-
- if (po === "??" && (so === "||" || so === "&&")) {
- return true;
- }
-
- const pp = PRECEDENCE[po];
- const sp = PRECEDENCE[so];
- if (pp > sp
- || (pp == sp
- && (this === p.right || po == "**"))) {
- return true;
- }
- }
- });
-
- PARENS(AST_Yield, function(output) {
- var p = output.parent();
- // (yield 1) + (yield 2)
- // a = yield 3
- if (p instanceof AST_Binary && p.operator !== "=")
- return true;
- // (yield 1)()
- // new (yield 1)()
- if (p instanceof AST_Call && p.expression === this)
- return true;
- // (yield 1) ? yield 2 : yield 3
- if (p instanceof AST_Conditional && p.condition === this)
- return true;
- // -(yield 4)
- if (p instanceof AST_Unary)
- return true;
- // (yield x).foo
- // (yield x)['foo']
- if (p instanceof AST_PropAccess && p.expression === this)
- return true;
- });
-
- PARENS(AST_PropAccess, function(output) {
- var p = output.parent();
- if (p instanceof AST_New && p.expression === this) {
- // i.e. new (foo.bar().baz)
- //
- // if there's one call into this subtree, then we need
- // parens around it too, otherwise the call will be
- // interpreted as passing the arguments to the upper New
- // expression.
- return walk(this, node => {
- if (node instanceof AST_Scope) return true;
- if (node instanceof AST_Call) {
- return walk_abort; // makes walk() return true.
- }
- });
- }
- });
-
- PARENS(AST_Call, function(output) {
- var p = output.parent(), p1;
- if (p instanceof AST_New && p.expression === this
- || p instanceof AST_Export && p.is_default && this.expression instanceof AST_Function)
- return true;
-
- // workaround for Safari bug.
- // https://bugs.webkit.org/show_bug.cgi?id=123506
- return this.expression instanceof AST_Function
- && p instanceof AST_PropAccess
- && p.expression === this
- && (p1 = output.parent(1)) instanceof AST_Assign
- && p1.left === p;
- });
-
- PARENS(AST_New, function(output) {
- var p = output.parent();
- if (this.args.length === 0
- && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)["getTime"]()
- || p instanceof AST_Call && p.expression === this)) // (new foo)(bar)
- return true;
- });
-
- PARENS(AST_Number, function(output) {
- var p = output.parent();
- if (p instanceof AST_PropAccess && p.expression === this) {
- var value = this.getValue();
- if (value < 0 || /^0/.test(make_num(value))) {
- return true;
- }
- }
- });
-
- PARENS(AST_BigInt, function(output) {
- var p = output.parent();
- if (p instanceof AST_PropAccess && p.expression === this) {
- var value = this.getValue();
- if (value.startsWith("-")) {
- return true;
- }
- }
- });
-
- PARENS([ AST_Assign, AST_Conditional ], function(output) {
- var p = output.parent();
- // !(a = false) → true
- if (p instanceof AST_Unary)
- return true;
- // 1 + (a = 2) + 3 → 6, side effect setting a = 2
- if (p instanceof AST_Binary && !(p instanceof AST_Assign))
- return true;
- // (a = func)() —or— new (a = Object)()
- if (p instanceof AST_Call && p.expression === this)
- return true;
- // (a = foo) ? bar : baz
- if (p instanceof AST_Conditional && p.condition === this)
- return true;
- // (a = foo)["prop"] —or— (a = foo).prop
- if (p instanceof AST_PropAccess && p.expression === this)
- return true;
- // ({a, b} = {a: 1, b: 2}), a destructuring assignment
- if (this instanceof AST_Assign && this.left instanceof AST_Destructuring && this.left.is_array === false)
- return true;
- });
-
- /* -----[ PRINTERS ]----- */
-
- DEFPRINT(AST_Directive, function(self, output) {
- output.print_string(self.value, self.quote);
- output.semicolon();
- });
-
- DEFPRINT(AST_Expansion, function (self, output) {
- output.print("...");
- self.expression.print(output);
- });
-
- DEFPRINT(AST_Destructuring, function (self, output) {
- output.print(self.is_array ? "[" : "{");
- var len = self.names.length;
- self.names.forEach(function (name, i) {
- if (i > 0) output.comma();
- name.print(output);
- // If the final element is a hole, we need to make sure it
- // doesn't look like a trailing comma, by inserting an actual
- // trailing comma.
- if (i == len - 1 && name instanceof AST_Hole) output.comma();
- });
- output.print(self.is_array ? "]" : "}");
- });
-
- DEFPRINT(AST_Debugger, function(self, output) {
- output.print("debugger");
- output.semicolon();
- });
-
- /* -----[ statements ]----- */
-
- function display_body(body, is_toplevel, output, allow_directives) {
- var last = body.length - 1;
- output.in_directive = allow_directives;
- body.forEach(function(stmt, i) {
- if (output.in_directive === true && !(stmt instanceof AST_Directive ||
- stmt instanceof AST_EmptyStatement ||
- (stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String)
- )) {
- output.in_directive = false;
- }
- if (!(stmt instanceof AST_EmptyStatement)) {
- output.indent();
- stmt.print(output);
- if (!(i == last && is_toplevel)) {
- output.newline();
- if (is_toplevel) output.newline();
- }
- }
- if (output.in_directive === true &&
- stmt instanceof AST_SimpleStatement &&
- stmt.body instanceof AST_String
- ) {
- output.in_directive = false;
- }
- });
- output.in_directive = false;
- }
-
- AST_StatementWithBody.DEFMETHOD("_do_print_body", function(output) {
- force_statement(this.body, output);
- });
-
- DEFPRINT(AST_Statement, function(self, output) {
- self.body.print(output);
- output.semicolon();
- });
- DEFPRINT(AST_Toplevel, function(self, output) {
- display_body(self.body, true, output, true);
- output.print("");
- });
- DEFPRINT(AST_LabeledStatement, function(self, output) {
- self.label.print(output);
- output.colon();
- self.body.print(output);
- });
- DEFPRINT(AST_SimpleStatement, function(self, output) {
- self.body.print(output);
- output.semicolon();
- });
- function print_braced_empty(self, output) {
- output.print("{");
- output.with_indent(output.next_indent(), function() {
- output.append_comments(self, true);
- });
- output.print("}");
- }
- function print_braced(self, output, allow_directives) {
- if (self.body.length > 0) {
- output.with_block(function() {
- display_body(self.body, false, output, allow_directives);
- });
- } else print_braced_empty(self, output);
- }
- DEFPRINT(AST_BlockStatement, function(self, output) {
- print_braced(self, output);
- });
- DEFPRINT(AST_EmptyStatement, function(self, output) {
- output.semicolon();
- });
- DEFPRINT(AST_Do, function(self, output) {
- output.print("do");
- output.space();
- make_block(self.body, output);
- output.space();
- output.print("while");
- output.space();
- output.with_parens(function() {
- self.condition.print(output);
- });
- output.semicolon();
- });
- DEFPRINT(AST_While, function(self, output) {
- output.print("while");
- output.space();
- output.with_parens(function() {
- self.condition.print(output);
- });
- output.space();
- self._do_print_body(output);
- });
- DEFPRINT(AST_For, function(self, output) {
- output.print("for");
- output.space();
- output.with_parens(function() {
- if (self.init) {
- if (self.init instanceof AST_Definitions) {
- self.init.print(output);
- } else {
- parenthesize_for_noin(self.init, output, true);
- }
- output.print(";");
- output.space();
- } else {
- output.print(";");
- }
- if (self.condition) {
- self.condition.print(output);
- output.print(";");
- output.space();
- } else {
- output.print(";");
- }
- if (self.step) {
- self.step.print(output);
- }
- });
- output.space();
- self._do_print_body(output);
- });
- DEFPRINT(AST_ForIn, function(self, output) {
- output.print("for");
- if (self.await) {
- output.space();
- output.print("await");
- }
- output.space();
- output.with_parens(function() {
- self.init.print(output);
- output.space();
- output.print(self instanceof AST_ForOf ? "of" : "in");
- output.space();
- self.object.print(output);
- });
- output.space();
- self._do_print_body(output);
- });
- DEFPRINT(AST_With, function(self, output) {
- output.print("with");
- output.space();
- output.with_parens(function() {
- self.expression.print(output);
- });
- output.space();
- self._do_print_body(output);
- });
-
- /* -----[ functions ]----- */
- AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword) {
- var self = this;
- if (!nokeyword) {
- if (self.async) {
- output.print("async");
- output.space();
- }
- output.print("function");
- if (self.is_generator) {
- output.star();
- }
- if (self.name) {
- output.space();
- }
- }
- if (self.name instanceof AST_Symbol) {
- self.name.print(output);
- } else if (nokeyword && self.name instanceof AST_Node) {
- output.with_square(function() {
- self.name.print(output); // Computed method name
- });
- }
- output.with_parens(function() {
- self.argnames.forEach(function(arg, i) {
- if (i) output.comma();
- arg.print(output);
- });
- });
- output.space();
- print_braced(self, output, true);
- });
- DEFPRINT(AST_Lambda, function(self, output) {
- self._do_print(output);
- });
-
- DEFPRINT(AST_PrefixedTemplateString, function(self, output) {
- var tag = self.prefix;
- var parenthesize_tag = tag instanceof AST_Lambda
- || tag instanceof AST_Binary
- || tag instanceof AST_Conditional
- || tag instanceof AST_Sequence
- || tag instanceof AST_Unary
- || tag instanceof AST_Dot && tag.expression instanceof AST_Object;
- if (parenthesize_tag) output.print("(");
- self.prefix.print(output);
- if (parenthesize_tag) output.print(")");
- self.template_string.print(output);
- });
- DEFPRINT(AST_TemplateString, function(self, output) {
- var is_tagged = output.parent() instanceof AST_PrefixedTemplateString;
-
- output.print("`");
- for (var i = 0; i < self.segments.length; i++) {
- if (!(self.segments[i] instanceof AST_TemplateSegment)) {
- output.print("${");
- self.segments[i].print(output);
- output.print("}");
- } else if (is_tagged) {
- output.print(self.segments[i].raw);
- } else {
- output.print_template_string_chars(self.segments[i].value);
- }
- }
- output.print("`");
- });
- DEFPRINT(AST_TemplateSegment, function(self, output) {
- output.print_template_string_chars(self.value);
- });
-
- AST_Arrow.DEFMETHOD("_do_print", function(output) {
- var self = this;
- var parent = output.parent();
- var needs_parens = (parent instanceof AST_Binary && !(parent instanceof AST_Assign)) ||
- parent instanceof AST_Unary ||
- (parent instanceof AST_Call && self === parent.expression);
- if (needs_parens) { output.print("("); }
- if (self.async) {
- output.print("async");
- output.space();
- }
- if (self.argnames.length === 1 && self.argnames[0] instanceof AST_Symbol) {
- self.argnames[0].print(output);
- } else {
- output.with_parens(function() {
- self.argnames.forEach(function(arg, i) {
- if (i) output.comma();
- arg.print(output);
- });
- });
- }
- output.space();
- output.print("=>");
- output.space();
- const first_statement = self.body[0];
- if (
- self.body.length === 1
- && first_statement instanceof AST_Return
- ) {
- const returned = first_statement.value;
- if (!returned) {
- output.print("{}");
- } else if (left_is_object(returned)) {
- output.print("(");
- returned.print(output);
- output.print(")");
- } else {
- returned.print(output);
- }
- } else {
- print_braced(self, output);
- }
- if (needs_parens) { output.print(")"); }
- });
-
- /* -----[ exits ]----- */
- AST_Exit.DEFMETHOD("_do_print", function(output, kind) {
- output.print(kind);
- if (this.value) {
- output.space();
- const comments = this.value.start.comments_before;
- if (comments && comments.length && !output.printed_comments.has(comments)) {
- output.print("(");
- this.value.print(output);
- output.print(")");
- } else {
- this.value.print(output);
- }
- }
- output.semicolon();
- });
- DEFPRINT(AST_Return, function(self, output) {
- self._do_print(output, "return");
- });
- DEFPRINT(AST_Throw, function(self, output) {
- self._do_print(output, "throw");
- });
-
- /* -----[ yield ]----- */
-
- DEFPRINT(AST_Yield, function(self, output) {
- var star = self.is_star ? "*" : "";
- output.print("yield" + star);
- if (self.expression) {
- output.space();
- self.expression.print(output);
- }
- });
-
- DEFPRINT(AST_Await, function(self, output) {
- output.print("await");
- output.space();
- var e = self.expression;
- var parens = !(
- e instanceof AST_Call
- || e instanceof AST_SymbolRef
- || e instanceof AST_PropAccess
- || e instanceof AST_Unary
- || e instanceof AST_Constant
- || e instanceof AST_Await
- || e instanceof AST_Object
- );
- if (parens) output.print("(");
- self.expression.print(output);
- if (parens) output.print(")");
- });
-
- /* -----[ loop control ]----- */
- AST_LoopControl.DEFMETHOD("_do_print", function(output, kind) {
- output.print(kind);
- if (this.label) {
- output.space();
- this.label.print(output);
- }
- output.semicolon();
- });
- DEFPRINT(AST_Break, function(self, output) {
- self._do_print(output, "break");
- });
- DEFPRINT(AST_Continue, function(self, output) {
- self._do_print(output, "continue");
- });
-
- /* -----[ if ]----- */
- function make_then(self, output) {
- var b = self.body;
- if (output.option("braces")
- || output.option("ie8") && b instanceof AST_Do)
- return make_block(b, output);
- // The squeezer replaces "block"-s that contain only a single
- // statement with the statement itself; technically, the AST
- // is correct, but this can create problems when we output an
- // IF having an ELSE clause where the THEN clause ends in an
- // IF *without* an ELSE block (then the outer ELSE would refer
- // to the inner IF). This function checks for this case and
- // adds the block braces if needed.
- if (!b) return output.force_semicolon();
- while (true) {
- if (b instanceof AST_If) {
- if (!b.alternative) {
- make_block(self.body, output);
- return;
- }
- b = b.alternative;
- } else if (b instanceof AST_StatementWithBody) {
- b = b.body;
- } else break;
- }
- force_statement(self.body, output);
- }
- DEFPRINT(AST_If, function(self, output) {
- output.print("if");
- output.space();
- output.with_parens(function() {
- self.condition.print(output);
- });
- output.space();
- if (self.alternative) {
- make_then(self, output);
- output.space();
- output.print("else");
- output.space();
- if (self.alternative instanceof AST_If)
- self.alternative.print(output);
- else
- force_statement(self.alternative, output);
- } else {
- self._do_print_body(output);
- }
- });
-
- /* -----[ switch ]----- */
- DEFPRINT(AST_Switch, function(self, output) {
- output.print("switch");
- output.space();
- output.with_parens(function() {
- self.expression.print(output);
- });
- output.space();
- var last = self.body.length - 1;
- if (last < 0) print_braced_empty(self, output);
- else output.with_block(function() {
- self.body.forEach(function(branch, i) {
- output.indent(true);
- branch.print(output);
- if (i < last && branch.body.length > 0)
- output.newline();
- });
- });
- });
- AST_SwitchBranch.DEFMETHOD("_do_print_body", function(output) {
- output.newline();
- this.body.forEach(function(stmt) {
- output.indent();
- stmt.print(output);
- output.newline();
- });
- });
- DEFPRINT(AST_Default, function(self, output) {
- output.print("default:");
- self._do_print_body(output);
- });
- DEFPRINT(AST_Case, function(self, output) {
- output.print("case");
- output.space();
- self.expression.print(output);
- output.print(":");
- self._do_print_body(output);
- });
-
- /* -----[ exceptions ]----- */
- DEFPRINT(AST_Try, function(self, output) {
- output.print("try");
- output.space();
- print_braced(self, output);
- if (self.bcatch) {
- output.space();
- self.bcatch.print(output);
- }
- if (self.bfinally) {
- output.space();
- self.bfinally.print(output);
- }
- });
- DEFPRINT(AST_Catch, function(self, output) {
- output.print("catch");
- if (self.argname) {
- output.space();
- output.with_parens(function() {
- self.argname.print(output);
- });
- }
- output.space();
- print_braced(self, output);
- });
- DEFPRINT(AST_Finally, function(self, output) {
- output.print("finally");
- output.space();
- print_braced(self, output);
- });
-
- /* -----[ var/const ]----- */
- AST_Definitions.DEFMETHOD("_do_print", function(output, kind) {
- output.print(kind);
- output.space();
- this.definitions.forEach(function(def, i) {
- if (i) output.comma();
- def.print(output);
- });
- var p = output.parent();
- var in_for = p instanceof AST_For || p instanceof AST_ForIn;
- var output_semicolon = !in_for || p && p.init !== this;
- if (output_semicolon)
- output.semicolon();
- });
- DEFPRINT(AST_Let, function(self, output) {
- self._do_print(output, "let");
- });
- DEFPRINT(AST_Var, function(self, output) {
- self._do_print(output, "var");
- });
- DEFPRINT(AST_Const, function(self, output) {
- self._do_print(output, "const");
- });
- DEFPRINT(AST_Import, function(self, output) {
- output.print("import");
- output.space();
- if (self.imported_name) {
- self.imported_name.print(output);
- }
- if (self.imported_name && self.imported_names) {
- output.print(",");
- output.space();
- }
- if (self.imported_names) {
- if (self.imported_names.length === 1 && self.imported_names[0].foreign_name.name === "*") {
- self.imported_names[0].print(output);
- } else {
- output.print("{");
- self.imported_names.forEach(function (name_import, i) {
- output.space();
- name_import.print(output);
- if (i < self.imported_names.length - 1) {
- output.print(",");
- }
- });
- output.space();
- output.print("}");
- }
- }
- if (self.imported_name || self.imported_names) {
- output.space();
- output.print("from");
- output.space();
- }
- self.module_name.print(output);
- output.semicolon();
- });
- DEFPRINT(AST_ImportMeta, function(self, output) {
- output.print("import.meta");
- });
-
- DEFPRINT(AST_NameMapping, function(self, output) {
- var is_import = output.parent() instanceof AST_Import;
- var definition = self.name.definition();
- var names_are_different =
- (definition && definition.mangled_name || self.name.name) !==
- self.foreign_name.name;
- if (names_are_different) {
- if (is_import) {
- output.print(self.foreign_name.name);
- } else {
- self.name.print(output);
- }
- output.space();
- output.print("as");
- output.space();
- if (is_import) {
- self.name.print(output);
- } else {
- output.print(self.foreign_name.name);
- }
- } else {
- self.name.print(output);
- }
- });
-
- DEFPRINT(AST_Export, function(self, output) {
- output.print("export");
- output.space();
- if (self.is_default) {
- output.print("default");
- output.space();
- }
- if (self.exported_names) {
- if (self.exported_names.length === 1 && self.exported_names[0].name.name === "*") {
- self.exported_names[0].print(output);
- } else {
- output.print("{");
- self.exported_names.forEach(function(name_export, i) {
- output.space();
- name_export.print(output);
- if (i < self.exported_names.length - 1) {
- output.print(",");
- }
- });
- output.space();
- output.print("}");
- }
- } else if (self.exported_value) {
- self.exported_value.print(output);
- } else if (self.exported_definition) {
- self.exported_definition.print(output);
- if (self.exported_definition instanceof AST_Definitions) return;
- }
- if (self.module_name) {
- output.space();
- output.print("from");
- output.space();
- self.module_name.print(output);
- }
- if (self.exported_value
- && !(self.exported_value instanceof AST_Defun ||
- self.exported_value instanceof AST_Function ||
- self.exported_value instanceof AST_Class)
- || self.module_name
- || self.exported_names
- ) {
- output.semicolon();
- }
- });
-
- function parenthesize_for_noin(node, output, noin) {
- var parens = false;
- // need to take some precautions here:
- // https://github.com/mishoo/UglifyJS2/issues/60
- if (noin) {
- parens = walk(node, node => {
- // Don't go into scopes -- except arrow functions:
- // https://github.com/terser/terser/issues/1019#issuecomment-877642607
- if (node instanceof AST_Scope && !(node instanceof AST_Arrow)) {
- return true;
- }
- if (node instanceof AST_Binary && node.operator == "in") {
- return walk_abort; // makes walk() return true
- }
- });
- }
- node.print(output, parens);
- }
-
- DEFPRINT(AST_VarDef, function(self, output) {
- self.name.print(output);
- if (self.value) {
- output.space();
- output.print("=");
- output.space();
- var p = output.parent(1);
- var noin = p instanceof AST_For || p instanceof AST_ForIn;
- parenthesize_for_noin(self.value, output, noin);
- }
- });
-
- /* -----[ other expressions ]----- */
- DEFPRINT(AST_Call, function(self, output) {
- self.expression.print(output);
- if (self instanceof AST_New && self.args.length === 0)
- return;
- if (self.expression instanceof AST_Call || self.expression instanceof AST_Lambda) {
- output.add_mapping(self.start);
- }
- if (self.optional) output.print("?.");
- output.with_parens(function() {
- self.args.forEach(function(expr, i) {
- if (i) output.comma();
- expr.print(output);
- });
- });
- });
- DEFPRINT(AST_New, function(self, output) {
- output.print("new");
- output.space();
- AST_Call.prototype._codegen(self, output);
- });
-
- AST_Sequence.DEFMETHOD("_do_print", function(output) {
- this.expressions.forEach(function(node, index) {
- if (index > 0) {
- output.comma();
- if (output.should_break()) {
- output.newline();
- output.indent();
- }
- }
- node.print(output);
- });
- });
- DEFPRINT(AST_Sequence, function(self, output) {
- self._do_print(output);
- // var p = output.parent();
- // if (p instanceof AST_Statement) {
- // output.with_indent(output.next_indent(), function(){
- // self._do_print(output);
- // });
- // } else {
- // self._do_print(output);
- // }
- });
- DEFPRINT(AST_Dot, function(self, output) {
- var expr = self.expression;
- expr.print(output);
- var prop = self.property;
- var print_computed = ALL_RESERVED_WORDS.has(prop)
- ? output.option("ie8")
- : !is_identifier_string(
- prop,
- output.option("ecma") >= 2015 || output.option("safari10")
- );
-
- if (self.optional) output.print("?.");
-
- if (print_computed) {
- output.print("[");
- output.add_mapping(self.end);
- output.print_string(prop);
- output.print("]");
- } else {
- if (expr instanceof AST_Number && expr.getValue() >= 0) {
- if (!/[xa-f.)]/i.test(output.last())) {
- output.print(".");
- }
- }
- if (!self.optional) output.print(".");
- // the name after dot would be mapped about here.
- output.add_mapping(self.end);
- output.print_name(prop);
- }
- });
- DEFPRINT(AST_DotHash, function(self, output) {
- var expr = self.expression;
- expr.print(output);
- var prop = self.property;
-
- if (self.optional) output.print("?");
- output.print(".#");
- output.add_mapping(self.end);
- output.print_name(prop);
- });
- DEFPRINT(AST_Sub, function(self, output) {
- self.expression.print(output);
- if (self.optional) output.print("?.");
- output.print("[");
- self.property.print(output);
- output.print("]");
- });
- DEFPRINT(AST_Chain, function(self, output) {
- self.expression.print(output);
- });
- DEFPRINT(AST_UnaryPrefix, function(self, output) {
- var op = self.operator;
- output.print(op);
- if (/^[a-z]/i.test(op)
- || (/[+-]$/.test(op)
- && self.expression instanceof AST_UnaryPrefix
- && /^[+-]/.test(self.expression.operator))) {
- output.space();
- }
- self.expression.print(output);
- });
- DEFPRINT(AST_UnaryPostfix, function(self, output) {
- self.expression.print(output);
- output.print(self.operator);
- });
- DEFPRINT(AST_Binary, function(self, output) {
- var op = self.operator;
- self.left.print(output);
- if (op[0] == ">" /* ">>" ">>>" ">" ">=" */
- && self.left instanceof AST_UnaryPostfix
- && self.left.operator == "--") {
- // space is mandatory to avoid outputting -->
- output.print(" ");
- } else {
- // the space is optional depending on "beautify"
- output.space();
- }
- output.print(op);
- if ((op == "<" || op == "<<")
- && self.right instanceof AST_UnaryPrefix
- && self.right.operator == "!"
- && self.right.expression instanceof AST_UnaryPrefix
- && self.right.expression.operator == "--") {
- // space is mandatory to avoid outputting <!--
- output.print(" ");
- } else {
- // the space is optional depending on "beautify"
- output.space();
- }
- self.right.print(output);
- });
- DEFPRINT(AST_Conditional, function(self, output) {
- self.condition.print(output);
- output.space();
- output.print("?");
- output.space();
- self.consequent.print(output);
- output.space();
- output.colon();
- self.alternative.print(output);
- });
-
- /* -----[ literals ]----- */
- DEFPRINT(AST_Array, function(self, output) {
- output.with_square(function() {
- var a = self.elements, len = a.length;
- if (len > 0) output.space();
- a.forEach(function(exp, i) {
- if (i) output.comma();
- exp.print(output);
- // If the final element is a hole, we need to make sure it
- // doesn't look like a trailing comma, by inserting an actual
- // trailing comma.
- if (i === len - 1 && exp instanceof AST_Hole)
- output.comma();
- });
- if (len > 0) output.space();
- });
- });
- DEFPRINT(AST_Object, function(self, output) {
- if (self.properties.length > 0) output.with_block(function() {
- self.properties.forEach(function(prop, i) {
- if (i) {
- output.print(",");
- output.newline();
- }
- output.indent();
- prop.print(output);
- });
- output.newline();
- });
- else print_braced_empty(self, output);
- });
- DEFPRINT(AST_Class, function(self, output) {
- output.print("class");
- output.space();
- if (self.name) {
- self.name.print(output);
- output.space();
- }
- if (self.extends) {
- var parens = (
- !(self.extends instanceof AST_SymbolRef)
- && !(self.extends instanceof AST_PropAccess)
- && !(self.extends instanceof AST_ClassExpression)
- && !(self.extends instanceof AST_Function)
- );
- output.print("extends");
- if (parens) {
- output.print("(");
- } else {
- output.space();
- }
- self.extends.print(output);
- if (parens) {
- output.print(")");
- } else {
- output.space();
- }
- }
- if (self.properties.length > 0) output.with_block(function() {
- self.properties.forEach(function(prop, i) {
- if (i) {
- output.newline();
- }
- output.indent();
- prop.print(output);
- });
- output.newline();
- });
- else output.print("{}");
- });
- DEFPRINT(AST_NewTarget, function(self, output) {
- output.print("new.target");
- });
-
- function print_property_name(key, quote, output) {
- if (output.option("quote_keys")) {
- return output.print_string(key);
- }
- if ("" + +key == key && key >= 0) {
- if (output.option("keep_numbers")) {
- return output.print(key);
- }
- return output.print(make_num(key));
- }
- var print_string = ALL_RESERVED_WORDS.has(key)
- ? output.option("ie8")
- : (
- output.option("ecma") < 2015 || output.option("safari10")
- ? !is_basic_identifier_string(key)
- : !is_identifier_string(key, true)
- );
- if (print_string || (quote && output.option("keep_quoted_props"))) {
- return output.print_string(key, quote);
- }
- return output.print_name(key);
- }
-
- DEFPRINT(AST_ObjectKeyVal, function(self, output) {
- function get_name(self) {
- var def = self.definition();
- return def ? def.mangled_name || def.name : self.name;
- }
-
- var allowShortHand = output.option("shorthand");
- if (allowShortHand &&
- self.value instanceof AST_Symbol &&
- is_identifier_string(
- self.key,
- output.option("ecma") >= 2015 || output.option("safari10")
- ) &&
- get_name(self.value) === self.key &&
- !ALL_RESERVED_WORDS.has(self.key)
- ) {
- print_property_name(self.key, self.quote, output);
-
- } else if (allowShortHand &&
- self.value instanceof AST_DefaultAssign &&
- self.value.left instanceof AST_Symbol &&
- is_identifier_string(
- self.key,
- output.option("ecma") >= 2015 || output.option("safari10")
- ) &&
- get_name(self.value.left) === self.key
- ) {
- print_property_name(self.key, self.quote, output);
- output.space();
- output.print("=");
- output.space();
- self.value.right.print(output);
- } else {
- if (!(self.key instanceof AST_Node)) {
- print_property_name(self.key, self.quote, output);
- } else {
- output.with_square(function() {
- self.key.print(output);
- });
- }
- output.colon();
- self.value.print(output);
- }
- });
- DEFPRINT(AST_ClassPrivateProperty, (self, output) => {
- if (self.static) {
- output.print("static");
- output.space();
- }
-
- output.print("#");
-
- print_property_name(self.key.name, self.quote, output);
-
- if (self.value) {
- output.print("=");
- self.value.print(output);
- }
-
- output.semicolon();
- });
- DEFPRINT(AST_ClassProperty, (self, output) => {
- if (self.static) {
- output.print("static");
- output.space();
- }
-
- if (self.key instanceof AST_SymbolClassProperty) {
- print_property_name(self.key.name, self.quote, output);
- } else {
- output.print("[");
- self.key.print(output);
- output.print("]");
- }
-
- if (self.value) {
- output.print("=");
- self.value.print(output);
- }
-
- output.semicolon();
- });
- AST_ObjectProperty.DEFMETHOD("_print_getter_setter", function(type, is_private, output) {
- var self = this;
- if (self.static) {
- output.print("static");
- output.space();
- }
- if (type) {
- output.print(type);
- output.space();
- }
- if (self.key instanceof AST_SymbolMethod) {
- if (is_private) output.print("#");
- print_property_name(self.key.name, self.quote, output);
- } else {
- output.with_square(function() {
- self.key.print(output);
- });
- }
- self.value._do_print(output, true);
- });
- DEFPRINT(AST_ObjectSetter, function(self, output) {
- self._print_getter_setter("set", false, output);
- });
- DEFPRINT(AST_ObjectGetter, function(self, output) {
- self._print_getter_setter("get", false, output);
- });
- DEFPRINT(AST_PrivateSetter, function(self, output) {
- self._print_getter_setter("set", true, output);
- });
- DEFPRINT(AST_PrivateGetter, function(self, output) {
- self._print_getter_setter("get", true, output);
- });
- DEFPRINT(AST_PrivateMethod, function(self, output) {
- var type;
- if (self.is_generator && self.async) {
- type = "async*";
- } else if (self.is_generator) {
- type = "*";
- } else if (self.async) {
- type = "async";
- }
- self._print_getter_setter(type, true, output);
- });
- DEFPRINT(AST_ConciseMethod, function(self, output) {
- var type;
- if (self.is_generator && self.async) {
- type = "async*";
- } else if (self.is_generator) {
- type = "*";
- } else if (self.async) {
- type = "async";
- }
- self._print_getter_setter(type, false, output);
- });
- AST_Symbol.DEFMETHOD("_do_print", function(output) {
- var def = this.definition();
- output.print_name(def ? def.mangled_name || def.name : this.name);
- });
- DEFPRINT(AST_Symbol, function (self, output) {
- self._do_print(output);
- });
- DEFPRINT(AST_Hole, noop);
- DEFPRINT(AST_This, function(self, output) {
- output.print("this");
- });
- DEFPRINT(AST_Super, function(self, output) {
- output.print("super");
- });
- DEFPRINT(AST_Constant, function(self, output) {
- output.print(self.getValue());
- });
- DEFPRINT(AST_String, function(self, output) {
- output.print_string(self.getValue(), self.quote, output.in_directive);
- });
- DEFPRINT(AST_Number, function(self, output) {
- if ((output.option("keep_numbers") || output.use_asm) && self.raw) {
- output.print(self.raw);
- } else {
- output.print(make_num(self.getValue()));
- }
- });
- DEFPRINT(AST_BigInt, function(self, output) {
- output.print(self.getValue() + "n");
- });
-
- const r_slash_script = /(<\s*\/\s*script)/i;
- const slash_script_replace = (_, $1) => $1.replace("/", "\\/");
- DEFPRINT(AST_RegExp, function(self, output) {
- let { source, flags } = self.getValue();
- source = regexp_source_fix(source);
- flags = flags ? sort_regexp_flags(flags) : "";
- source = source.replace(r_slash_script, slash_script_replace);
-
- output.print(output.to_utf8(`/${source}/${flags}`));
-
- const parent = output.parent();
- if (
- parent instanceof AST_Binary
- && /^\w/.test(parent.operator)
- && parent.left === self
- ) {
- output.print(" ");
- }
- });
-
- function force_statement(stat, output) {
- if (output.option("braces")) {
- make_block(stat, output);
- } else {
- if (!stat || stat instanceof AST_EmptyStatement)
- output.force_semicolon();
- else
- stat.print(output);
- }
- }
-
- function best_of(a) {
- var best = a[0], len = best.length;
- for (var i = 1; i < a.length; ++i) {
- if (a[i].length < len) {
- best = a[i];
- len = best.length;
- }
- }
- return best;
- }
-
- function make_num(num) {
- var str = num.toString(10).replace(/^0\./, ".").replace("e+", "e");
- var candidates = [ str ];
- if (Math.floor(num) === num) {
- if (num < 0) {
- candidates.push("-0x" + (-num).toString(16).toLowerCase());
- } else {
- candidates.push("0x" + num.toString(16).toLowerCase());
- }
- }
- var match, len, digits;
- if (match = /^\.0+/.exec(str)) {
- len = match[0].length;
- digits = str.slice(len);
- candidates.push(digits + "e-" + (digits.length + len - 1));
- } else if (match = /0+$/.exec(str)) {
- len = match[0].length;
- candidates.push(str.slice(0, -len) + "e" + len);
- } else if (match = /^(\d)\.(\d+)e(-?\d+)$/.exec(str)) {
- candidates.push(match[1] + match[2] + "e" + (match[3] - match[2].length));
- }
- return best_of(candidates);
- }
-
- function make_block(stmt, output) {
- if (!stmt || stmt instanceof AST_EmptyStatement)
- output.print("{}");
- else if (stmt instanceof AST_BlockStatement)
- stmt.print(output);
- else output.with_block(function() {
- output.indent();
- stmt.print(output);
- output.newline();
- });
- }
-
- /* -----[ source map generators ]----- */
-
- function DEFMAP(nodetype, generator) {
- nodetype.forEach(function(nodetype) {
- nodetype.DEFMETHOD("add_source_map", generator);
- });
- }
-
- DEFMAP([
- // We could easily add info for ALL nodes, but it seems to me that
- // would be quite wasteful, hence this noop in the base class.
- AST_Node,
- // since the label symbol will mark it
- AST_LabeledStatement,
- AST_Toplevel,
- ], noop);
-
- // XXX: I'm not exactly sure if we need it for all of these nodes,
- // or if we should add even more.
- DEFMAP([
- AST_Array,
- AST_BlockStatement,
- AST_Catch,
- AST_Class,
- AST_Constant,
- AST_Debugger,
- AST_Definitions,
- AST_Directive,
- AST_Finally,
- AST_Jump,
- AST_Lambda,
- AST_New,
- AST_Object,
- AST_StatementWithBody,
- AST_Symbol,
- AST_Switch,
- AST_SwitchBranch,
- AST_TemplateString,
- AST_TemplateSegment,
- AST_Try,
- ], function(output) {
- output.add_mapping(this.start);
- });
-
- DEFMAP([
- AST_ObjectGetter,
- AST_ObjectSetter,
- AST_PrivateGetter,
- AST_PrivateSetter,
- ], function(output) {
- output.add_mapping(this.key.end, this.key.name);
- });
-
- DEFMAP([ AST_ObjectProperty ], function(output) {
- output.add_mapping(this.start, this.key);
- });
-})();
-
-const shallow_cmp = (node1, node2) => {
- return (
- node1 === null && node2 === null
- || node1.TYPE === node2.TYPE && node1.shallow_cmp(node2)
- );
-};
-
-const equivalent_to = (tree1, tree2) => {
- if (!shallow_cmp(tree1, tree2)) return false;
- const walk_1_state = [tree1];
- const walk_2_state = [tree2];
-
- const walk_1_push = walk_1_state.push.bind(walk_1_state);
- const walk_2_push = walk_2_state.push.bind(walk_2_state);
-
- while (walk_1_state.length && walk_2_state.length) {
- const node_1 = walk_1_state.pop();
- const node_2 = walk_2_state.pop();
-
- if (!shallow_cmp(node_1, node_2)) return false;
-
- node_1._children_backwards(walk_1_push);
- node_2._children_backwards(walk_2_push);
-
- if (walk_1_state.length !== walk_2_state.length) {
- // Different number of children
- return false;
- }
- }
-
- return walk_1_state.length == 0 && walk_2_state.length == 0;
-};
-
-// Creates a shallow compare function
-const mkshallow = (props) => {
- const comparisons = Object
- .keys(props)
- .map(key => {
- if (props[key] === "eq") {
- return `this.${key} === other.${key}`;
- } else if (props[key] === "exist") {
- return `(this.${key} == null ? other.${key} == null : this.${key} === other.${key})`;
- } else {
- throw new Error(`mkshallow: Unexpected instruction: ${props[key]}`);
- }
- })
- .join(" && ");
-
- return new Function("other", "return " + comparisons);
-};
-
-const pass_through = () => true;
-
-AST_Node.prototype.shallow_cmp = function () {
- throw new Error("did not find a shallow_cmp function for " + this.constructor.name);
-};
-
-AST_Debugger.prototype.shallow_cmp = pass_through;
-
-AST_Directive.prototype.shallow_cmp = mkshallow({ value: "eq" });
-
-AST_SimpleStatement.prototype.shallow_cmp = pass_through;
-
-AST_Block.prototype.shallow_cmp = pass_through;
-
-AST_EmptyStatement.prototype.shallow_cmp = pass_through;
-
-AST_LabeledStatement.prototype.shallow_cmp = mkshallow({ "label.name": "eq" });
-
-AST_Do.prototype.shallow_cmp = pass_through;
-
-AST_While.prototype.shallow_cmp = pass_through;
-
-AST_For.prototype.shallow_cmp = mkshallow({
- init: "exist",
- condition: "exist",
- step: "exist"
-});
-
-AST_ForIn.prototype.shallow_cmp = pass_through;
-
-AST_ForOf.prototype.shallow_cmp = pass_through;
-
-AST_With.prototype.shallow_cmp = pass_through;
-
-AST_Toplevel.prototype.shallow_cmp = pass_through;
-
-AST_Expansion.prototype.shallow_cmp = pass_through;
-
-AST_Lambda.prototype.shallow_cmp = mkshallow({
- is_generator: "eq",
- async: "eq"
-});
-
-AST_Destructuring.prototype.shallow_cmp = mkshallow({
- is_array: "eq"
-});
-
-AST_PrefixedTemplateString.prototype.shallow_cmp = pass_through;
-
-AST_TemplateString.prototype.shallow_cmp = pass_through;
-
-AST_TemplateSegment.prototype.shallow_cmp = mkshallow({
- "value": "eq"
-});
-
-AST_Jump.prototype.shallow_cmp = pass_through;
-
-AST_LoopControl.prototype.shallow_cmp = pass_through;
-
-AST_Await.prototype.shallow_cmp = pass_through;
-
-AST_Yield.prototype.shallow_cmp = mkshallow({
- is_star: "eq"
-});
-
-AST_If.prototype.shallow_cmp = mkshallow({
- alternative: "exist"
-});
-
-AST_Switch.prototype.shallow_cmp = pass_through;
-
-AST_SwitchBranch.prototype.shallow_cmp = pass_through;
-
-AST_Try.prototype.shallow_cmp = mkshallow({
- bcatch: "exist",
- bfinally: "exist"
-});
-
-AST_Catch.prototype.shallow_cmp = mkshallow({
- argname: "exist"
-});
-
-AST_Finally.prototype.shallow_cmp = pass_through;
-
-AST_Definitions.prototype.shallow_cmp = pass_through;
-
-AST_VarDef.prototype.shallow_cmp = mkshallow({
- value: "exist"
-});
-
-AST_NameMapping.prototype.shallow_cmp = pass_through;
-
-AST_Import.prototype.shallow_cmp = mkshallow({
- imported_name: "exist",
- imported_names: "exist"
-});
-
-AST_ImportMeta.prototype.shallow_cmp = pass_through;
-
-AST_Export.prototype.shallow_cmp = mkshallow({
- exported_definition: "exist",
- exported_value: "exist",
- exported_names: "exist",
- module_name: "eq",
- is_default: "eq",
-});
-
-AST_Call.prototype.shallow_cmp = pass_through;
-
-AST_Sequence.prototype.shallow_cmp = pass_through;
-
-AST_PropAccess.prototype.shallow_cmp = pass_through;
-
-AST_Chain.prototype.shallow_cmp = pass_through;
-
-AST_Dot.prototype.shallow_cmp = mkshallow({
- property: "eq"
-});
-
-AST_DotHash.prototype.shallow_cmp = mkshallow({
- property: "eq"
-});
-
-AST_Unary.prototype.shallow_cmp = mkshallow({
- operator: "eq"
-});
-
-AST_Binary.prototype.shallow_cmp = mkshallow({
- operator: "eq"
-});
-
-AST_Conditional.prototype.shallow_cmp = pass_through;
-
-AST_Array.prototype.shallow_cmp = pass_through;
-
-AST_Object.prototype.shallow_cmp = pass_through;
-
-AST_ObjectProperty.prototype.shallow_cmp = pass_through;
-
-AST_ObjectKeyVal.prototype.shallow_cmp = mkshallow({
- key: "eq"
-});
-
-AST_ObjectSetter.prototype.shallow_cmp = mkshallow({
- static: "eq"
-});
-
-AST_ObjectGetter.prototype.shallow_cmp = mkshallow({
- static: "eq"
-});
-
-AST_ConciseMethod.prototype.shallow_cmp = mkshallow({
- static: "eq",
- is_generator: "eq",
- async: "eq",
-});
-
-AST_Class.prototype.shallow_cmp = mkshallow({
- name: "exist",
- extends: "exist",
-});
-
-AST_ClassProperty.prototype.shallow_cmp = mkshallow({
- static: "eq"
-});
-
-AST_Symbol.prototype.shallow_cmp = mkshallow({
- name: "eq"
-});
-
-AST_NewTarget.prototype.shallow_cmp = pass_through;
-
-AST_This.prototype.shallow_cmp = pass_through;
-
-AST_Super.prototype.shallow_cmp = pass_through;
-
-AST_String.prototype.shallow_cmp = mkshallow({
- value: "eq"
-});
-
-AST_Number.prototype.shallow_cmp = mkshallow({
- value: "eq"
-});
-
-AST_BigInt.prototype.shallow_cmp = mkshallow({
- value: "eq"
-});
-
-AST_RegExp.prototype.shallow_cmp = function (other) {
- return (
- this.value.flags === other.value.flags
- && this.value.source === other.value.source
- );
-};
-
-AST_Atom.prototype.shallow_cmp = pass_through;
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-const MASK_EXPORT_DONT_MANGLE = 1 << 0;
-const MASK_EXPORT_WANT_MANGLE = 1 << 1;
-
-let function_defs = null;
-let unmangleable_names = null;
-
-class SymbolDef {
- constructor(scope, orig, init) {
- this.name = orig.name;
- this.orig = [ orig ];
- this.init = init;
- this.eliminated = 0;
- this.assignments = 0;
- this.scope = scope;
- this.replaced = 0;
- this.global = false;
- this.export = 0;
- this.mangled_name = null;
- this.undeclared = false;
- this.id = SymbolDef.next_id++;
- this.chained = false;
- this.direct_access = false;
- this.escaped = 0;
- this.recursive_refs = 0;
- this.references = [];
- this.should_replace = undefined;
- this.single_use = false;
- this.fixed = false;
- Object.seal(this);
- }
- fixed_value() {
- if (!this.fixed || this.fixed instanceof AST_Node) return this.fixed;
- return this.fixed();
- }
- unmangleable(options) {
- if (!options) options = {};
-
- if (
- function_defs &&
- function_defs.has(this.id) &&
- keep_name(options.keep_fnames, this.orig[0].name)
- ) return true;
-
- return this.global && !options.toplevel
- || (this.export & MASK_EXPORT_DONT_MANGLE)
- || this.undeclared
- || !options.eval && this.scope.pinned()
- || (this.orig[0] instanceof AST_SymbolLambda
- || this.orig[0] instanceof AST_SymbolDefun) && keep_name(options.keep_fnames, this.orig[0].name)
- || this.orig[0] instanceof AST_SymbolMethod
- || (this.orig[0] instanceof AST_SymbolClass
- || this.orig[0] instanceof AST_SymbolDefClass) && keep_name(options.keep_classnames, this.orig[0].name);
- }
- mangle(options) {
- const cache = options.cache && options.cache.props;
- if (this.global && cache && cache.has(this.name)) {
- this.mangled_name = cache.get(this.name);
- } else if (!this.mangled_name && !this.unmangleable(options)) {
- var s = this.scope;
- var sym = this.orig[0];
- if (options.ie8 && sym instanceof AST_SymbolLambda)
- s = s.parent_scope;
- const redefinition = redefined_catch_def(this);
- this.mangled_name = redefinition
- ? redefinition.mangled_name || redefinition.name
- : s.next_mangled(options, this);
- if (this.global && cache) {
- cache.set(this.name, this.mangled_name);
- }
- }
- }
-}
-
-SymbolDef.next_id = 1;
-
-function redefined_catch_def(def) {
- if (def.orig[0] instanceof AST_SymbolCatch
- && def.scope.is_block_scope()
- ) {
- return def.scope.get_defun_scope().variables.get(def.name);
- }
-}
-
-AST_Scope.DEFMETHOD("figure_out_scope", function(options, { parent_scope = null, toplevel = this } = {}) {
- options = defaults(options, {
- cache: null,
- ie8: false,
- safari10: false,
- });
-
- if (!(toplevel instanceof AST_Toplevel)) {
- throw new Error("Invalid toplevel scope");
- }
-
- // pass 1: setup scope chaining and handle definitions
- var scope = this.parent_scope = parent_scope;
- var labels = new Map();
- var defun = null;
- var in_destructuring = null;
- var for_scopes = [];
- var tw = new TreeWalker((node, descend) => {
- if (node.is_block_scope()) {
- const save_scope = scope;
- node.block_scope = scope = new AST_Scope(node);
- scope._block_scope = true;
- // AST_Try in the AST sadly *is* (not has) a body itself,
- // and its catch and finally branches are children of the AST_Try itself
- const parent_scope = node instanceof AST_Catch
- ? save_scope.parent_scope
- : save_scope;
- scope.init_scope_vars(parent_scope);
- scope.uses_with = save_scope.uses_with;
- scope.uses_eval = save_scope.uses_eval;
- if (options.safari10) {
- if (node instanceof AST_For || node instanceof AST_ForIn) {
- for_scopes.push(scope);
- }
- }
-
- if (node instanceof AST_Switch) {
- // XXX: HACK! Ensure the switch expression gets the correct scope (the parent scope) and the body gets the contained scope
- // AST_Switch has a scope within the body, but it itself "is a block scope"
- // This means the switched expression has to belong to the outer scope
- // while the body inside belongs to the switch itself.
- // This is pretty nasty and warrants an AST change similar to AST_Try (read above)
- const the_block_scope = scope;
- scope = save_scope;
- node.expression.walk(tw);
- scope = the_block_scope;
- for (let i = 0; i < node.body.length; i++) {
- node.body[i].walk(tw);
- }
- } else {
- descend();
- }
- scope = save_scope;
- return true;
- }
- if (node instanceof AST_Destructuring) {
- const save_destructuring = in_destructuring;
- in_destructuring = node;
- descend();
- in_destructuring = save_destructuring;
- return true;
- }
- if (node instanceof AST_Scope) {
- node.init_scope_vars(scope);
- var save_scope = scope;
- var save_defun = defun;
- var save_labels = labels;
- defun = scope = node;
- labels = new Map();
- descend();
- scope = save_scope;
- defun = save_defun;
- labels = save_labels;
- return true; // don't descend again in TreeWalker
- }
- if (node instanceof AST_LabeledStatement) {
- var l = node.label;
- if (labels.has(l.name)) {
- throw new Error(string_template("Label {name} defined twice", l));
- }
- labels.set(l.name, l);
- descend();
- labels.delete(l.name);
- return true; // no descend again
- }
- if (node instanceof AST_With) {
- for (var s = scope; s; s = s.parent_scope)
- s.uses_with = true;
- return;
- }
- if (node instanceof AST_Symbol) {
- node.scope = scope;
- }
- if (node instanceof AST_Label) {
- node.thedef = node;
- node.references = [];
- }
- if (node instanceof AST_SymbolLambda) {
- defun.def_function(node, node.name == "arguments" ? undefined : defun);
- } else if (node instanceof AST_SymbolDefun) {
- // Careful here, the scope where this should be defined is
- // the parent scope. The reason is that we enter a new
- // scope when we encounter the AST_Defun node (which is
- // instanceof AST_Scope) but we get to the symbol a bit
- // later.
- const closest_scope = defun.parent_scope;
-
- // In strict mode, function definitions are block-scoped
- node.scope = tw.directives["use strict"]
- ? closest_scope
- : closest_scope.get_defun_scope();
-
- mark_export(node.scope.def_function(node, defun), 1);
- } else if (node instanceof AST_SymbolClass) {
- mark_export(defun.def_variable(node, defun), 1);
- } else if (node instanceof AST_SymbolImport) {
- scope.def_variable(node);
- } else if (node instanceof AST_SymbolDefClass) {
- // This deals with the name of the class being available
- // inside the class.
- mark_export((node.scope = defun.parent_scope).def_function(node, defun), 1);
- } else if (
- node instanceof AST_SymbolVar
- || node instanceof AST_SymbolLet
- || node instanceof AST_SymbolConst
- || node instanceof AST_SymbolCatch
- ) {
- var def;
- if (node instanceof AST_SymbolBlockDeclaration) {
- def = scope.def_variable(node, null);
- } else {
- def = defun.def_variable(node, node.TYPE == "SymbolVar" ? null : undefined);
- }
- if (!def.orig.every((sym) => {
- if (sym === node) return true;
- if (node instanceof AST_SymbolBlockDeclaration) {
- return sym instanceof AST_SymbolLambda;
- }
- return !(sym instanceof AST_SymbolLet || sym instanceof AST_SymbolConst);
- })) {
- js_error(
- `"${node.name}" is redeclared`,
- node.start.file,
- node.start.line,
- node.start.col,
- node.start.pos
- );
- }
- if (!(node instanceof AST_SymbolFunarg)) mark_export(def, 2);
- if (defun !== scope) {
- node.mark_enclosed();
- var def = scope.find_variable(node);
- if (node.thedef !== def) {
- node.thedef = def;
- node.reference();
- }
- }
- } else if (node instanceof AST_LabelRef) {
- var sym = labels.get(node.name);
- if (!sym) throw new Error(string_template("Undefined label {name} [{line},{col}]", {
- name: node.name,
- line: node.start.line,
- col: node.start.col
- }));
- node.thedef = sym;
- }
- if (!(scope instanceof AST_Toplevel) && (node instanceof AST_Export || node instanceof AST_Import)) {
- js_error(
- `"${node.TYPE}" statement may only appear at the top level`,
- node.start.file,
- node.start.line,
- node.start.col,
- node.start.pos
- );
- }
- });
- this.walk(tw);
-
- function mark_export(def, level) {
- if (in_destructuring) {
- var i = 0;
- do {
- level++;
- } while (tw.parent(i++) !== in_destructuring);
- }
- var node = tw.parent(level);
- if (def.export = node instanceof AST_Export ? MASK_EXPORT_DONT_MANGLE : 0) {
- var exported = node.exported_definition;
- if ((exported instanceof AST_Defun || exported instanceof AST_DefClass) && node.is_default) {
- def.export = MASK_EXPORT_WANT_MANGLE;
- }
- }
- }
-
- // pass 2: find back references and eval
- const is_toplevel = this instanceof AST_Toplevel;
- if (is_toplevel) {
- this.globals = new Map();
- }
-
- var tw = new TreeWalker(node => {
- if (node instanceof AST_LoopControl && node.label) {
- node.label.thedef.references.push(node);
- return true;
- }
- if (node instanceof AST_SymbolRef) {
- var name = node.name;
- if (name == "eval" && tw.parent() instanceof AST_Call) {
- for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) {
- s.uses_eval = true;
- }
- }
- var sym;
- if (tw.parent() instanceof AST_NameMapping && tw.parent(1).module_name
- || !(sym = node.scope.find_variable(name))) {
-
- sym = toplevel.def_global(node);
- if (node instanceof AST_SymbolExport) sym.export = MASK_EXPORT_DONT_MANGLE;
- } else if (sym.scope instanceof AST_Lambda && name == "arguments") {
- sym.scope.uses_arguments = true;
- }
- node.thedef = sym;
- node.reference();
- if (node.scope.is_block_scope()
- && !(sym.orig[0] instanceof AST_SymbolBlockDeclaration)) {
- node.scope = node.scope.get_defun_scope();
- }
- return true;
- }
- // ensure mangling works if catch reuses a scope variable
- var def;
- if (node instanceof AST_SymbolCatch && (def = redefined_catch_def(node.definition()))) {
- var s = node.scope;
- while (s) {
- push_uniq(s.enclosed, def);
- if (s === def.scope) break;
- s = s.parent_scope;
- }
- }
- });
- this.walk(tw);
-
- // pass 3: work around IE8 and Safari catch scope bugs
- if (options.ie8 || options.safari10) {
- walk(this, node => {
- if (node instanceof AST_SymbolCatch) {
- var name = node.name;
- var refs = node.thedef.references;
- var scope = node.scope.get_defun_scope();
- var def = scope.find_variable(name)
- || toplevel.globals.get(name)
- || scope.def_variable(node);
- refs.forEach(function(ref) {
- ref.thedef = def;
- ref.reference();
- });
- node.thedef = def;
- node.reference();
- return true;
- }
- });
- }
-
- // pass 4: add symbol definitions to loop scopes
- // Safari/Webkit bug workaround - loop init let variable shadowing argument.
- // https://github.com/mishoo/UglifyJS2/issues/1753
- // https://bugs.webkit.org/show_bug.cgi?id=171041
- if (options.safari10) {
- for (const scope of for_scopes) {
- scope.parent_scope.variables.forEach(function(def) {
- push_uniq(scope.enclosed, def);
- });
- }
- }
-});
-
-AST_Toplevel.DEFMETHOD("def_global", function(node) {
- var globals = this.globals, name = node.name;
- if (globals.has(name)) {
- return globals.get(name);
- } else {
- var g = new SymbolDef(this, node);
- g.undeclared = true;
- g.global = true;
- globals.set(name, g);
- return g;
- }
-});
-
-AST_Scope.DEFMETHOD("init_scope_vars", function(parent_scope) {
- this.variables = new Map(); // map name to AST_SymbolVar (variables defined in this scope; includes functions)
- this.uses_with = false; // will be set to true if this or some nested scope uses the `with` statement
- this.uses_eval = false; // will be set to true if this or nested scope uses the global `eval`
- this.parent_scope = parent_scope; // the parent scope
- this.enclosed = []; // a list of variables from this or outer scope(s) that are referenced from this or inner scopes
- this.cname = -1; // the current index for mangling functions/variables
-});
-
-AST_Scope.DEFMETHOD("conflicting_def", function (name) {
- return (
- this.enclosed.find(def => def.name === name)
- || this.variables.has(name)
- || (this.parent_scope && this.parent_scope.conflicting_def(name))
- );
-});
-
-AST_Scope.DEFMETHOD("conflicting_def_shallow", function (name) {
- return (
- this.enclosed.find(def => def.name === name)
- || this.variables.has(name)
- );
-});
-
-AST_Scope.DEFMETHOD("add_child_scope", function (scope) {
- // `scope` is going to be moved into `this` right now.
- // Update the required scopes' information
-
- if (scope.parent_scope === this) return;
-
- scope.parent_scope = this;
-
- // TODO uses_with, uses_eval, etc
-
- const scope_ancestry = (() => {
- const ancestry = [];
- let cur = this;
- do {
- ancestry.push(cur);
- } while ((cur = cur.parent_scope));
- ancestry.reverse();
- return ancestry;
- })();
-
- const new_scope_enclosed_set = new Set(scope.enclosed);
- const to_enclose = [];
- for (const scope_topdown of scope_ancestry) {
- to_enclose.forEach(e => push_uniq(scope_topdown.enclosed, e));
- for (const def of scope_topdown.variables.values()) {
- if (new_scope_enclosed_set.has(def)) {
- push_uniq(to_enclose, def);
- push_uniq(scope_topdown.enclosed, def);
- }
- }
- }
-});
-
-function find_scopes_visible_from(scopes) {
- const found_scopes = new Set();
-
- for (const scope of new Set(scopes)) {
- (function bubble_up(scope) {
- if (scope == null || found_scopes.has(scope)) return;
-
- found_scopes.add(scope);
-
- bubble_up(scope.parent_scope);
- })(scope);
- }
-
- return [...found_scopes];
-}
-
-// Creates a symbol during compression
-AST_Scope.DEFMETHOD("create_symbol", function(SymClass, {
- source,
- tentative_name,
- scope,
- conflict_scopes = [scope],
- init = null
-} = {}) {
- let symbol_name;
-
- conflict_scopes = find_scopes_visible_from(conflict_scopes);
-
- if (tentative_name) {
- // Implement hygiene (no new names are conflicting with existing names)
- tentative_name =
- symbol_name =
- tentative_name.replace(/(?:^[^a-z_$]|[^a-z0-9_$])/ig, "_");
-
- let i = 0;
- while (conflict_scopes.find(s => s.conflicting_def_shallow(symbol_name))) {
- symbol_name = tentative_name + "$" + i++;
- }
- }
-
- if (!symbol_name) {
- throw new Error("No symbol name could be generated in create_symbol()");
- }
-
- const symbol = make_node(SymClass, source, {
- name: symbol_name,
- scope
- });
-
- this.def_variable(symbol, init || null);
-
- symbol.mark_enclosed();
-
- return symbol;
-});
-
-
-AST_Node.DEFMETHOD("is_block_scope", return_false);
-AST_Class.DEFMETHOD("is_block_scope", return_false);
-AST_Lambda.DEFMETHOD("is_block_scope", return_false);
-AST_Toplevel.DEFMETHOD("is_block_scope", return_false);
-AST_SwitchBranch.DEFMETHOD("is_block_scope", return_false);
-AST_Block.DEFMETHOD("is_block_scope", return_true);
-AST_Scope.DEFMETHOD("is_block_scope", function () {
- return this._block_scope || false;
-});
-AST_IterationStatement.DEFMETHOD("is_block_scope", return_true);
-
-AST_Lambda.DEFMETHOD("init_scope_vars", function() {
- AST_Scope.prototype.init_scope_vars.apply(this, arguments);
- this.uses_arguments = false;
- this.def_variable(new AST_SymbolFunarg({
- name: "arguments",
- start: this.start,
- end: this.end
- }));
-});
-
-AST_Arrow.DEFMETHOD("init_scope_vars", function() {
- AST_Scope.prototype.init_scope_vars.apply(this, arguments);
- this.uses_arguments = false;
-});
-
-AST_Symbol.DEFMETHOD("mark_enclosed", function() {
- var def = this.definition();
- var s = this.scope;
- while (s) {
- push_uniq(s.enclosed, def);
- if (s === def.scope) break;
- s = s.parent_scope;
- }
-});
-
-AST_Symbol.DEFMETHOD("reference", function() {
- this.definition().references.push(this);
- this.mark_enclosed();
-});
-
-AST_Scope.DEFMETHOD("find_variable", function(name) {
- if (name instanceof AST_Symbol) name = name.name;
- return this.variables.get(name)
- || (this.parent_scope && this.parent_scope.find_variable(name));
-});
-
-AST_Scope.DEFMETHOD("def_function", function(symbol, init) {
- var def = this.def_variable(symbol, init);
- if (!def.init || def.init instanceof AST_Defun) def.init = init;
- return def;
-});
-
-AST_Scope.DEFMETHOD("def_variable", function(symbol, init) {
- var def = this.variables.get(symbol.name);
- if (def) {
- def.orig.push(symbol);
- if (def.init && (def.scope !== symbol.scope || def.init instanceof AST_Function)) {
- def.init = init;
- }
- } else {
- def = new SymbolDef(this, symbol, init);
- this.variables.set(symbol.name, def);
- def.global = !this.parent_scope;
- }
- return symbol.thedef = def;
-});
-
-function next_mangled(scope, options) {
- var ext = scope.enclosed;
- var nth_identifier = options.nth_identifier;
- out: while (true) {
- var m = nth_identifier.get(++scope.cname);
- if (ALL_RESERVED_WORDS.has(m)) continue; // skip over "do"
-
- // https://github.com/mishoo/UglifyJS2/issues/242 -- do not
- // shadow a name reserved from mangling.
- if (options.reserved.has(m)) continue;
-
- // Functions with short names might collide with base54 output
- // and therefore cause collisions when keep_fnames is true.
- if (unmangleable_names && unmangleable_names.has(m)) continue out;
-
- // we must ensure that the mangled name does not shadow a name
- // from some parent scope that is referenced in this or in
- // inner scopes.
- for (let i = ext.length; --i >= 0;) {
- const def = ext[i];
- const name = def.mangled_name || (def.unmangleable(options) && def.name);
- if (m == name) continue out;
- }
- return m;
- }
-}
-
-AST_Scope.DEFMETHOD("next_mangled", function(options) {
- return next_mangled(this, options);
-});
-
-AST_Toplevel.DEFMETHOD("next_mangled", function(options) {
- let name;
- const mangled_names = this.mangled_names;
- do {
- name = next_mangled(this, options);
- } while (mangled_names.has(name));
- return name;
-});
-
-AST_Function.DEFMETHOD("next_mangled", function(options, def) {
- // #179, #326
- // in Safari strict mode, something like (function x(x){...}) is a syntax error;
- // a function expression's argument cannot shadow the function expression's name
-
- var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition();
-
- // the function's mangled_name is null when keep_fnames is true
- var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null;
-
- while (true) {
- var name = next_mangled(this, options);
- if (!tricky_name || tricky_name != name)
- return name;
- }
-});
-
-AST_Symbol.DEFMETHOD("unmangleable", function(options) {
- var def = this.definition();
- return !def || def.unmangleable(options);
-});
-
-// labels are always mangleable
-AST_Label.DEFMETHOD("unmangleable", return_false);
-
-AST_Symbol.DEFMETHOD("unreferenced", function() {
- return !this.definition().references.length && !this.scope.pinned();
-});
-
-AST_Symbol.DEFMETHOD("definition", function() {
- return this.thedef;
-});
-
-AST_Symbol.DEFMETHOD("global", function() {
- return this.thedef.global;
-});
-
-AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options) {
- options = defaults(options, {
- eval : false,
- nth_identifier : base54,
- ie8 : false,
- keep_classnames: false,
- keep_fnames : false,
- module : false,
- reserved : [],
- toplevel : false,
- });
- if (options.module) options.toplevel = true;
- if (!Array.isArray(options.reserved)
- && !(options.reserved instanceof Set)
- ) {
- options.reserved = [];
- }
- options.reserved = new Set(options.reserved);
- // Never mangle arguments
- options.reserved.add("arguments");
- return options;
-});
-
-AST_Toplevel.DEFMETHOD("mangle_names", function(options) {
- options = this._default_mangler_options(options);
- var nth_identifier = options.nth_identifier;
-
- // We only need to mangle declaration nodes. Special logic wired
- // into the code generator will display the mangled name if it's
- // present (and for AST_SymbolRef-s it'll use the mangled name of
- // the AST_SymbolDeclaration that it points to).
- var lname = -1;
- var to_mangle = [];
-
- if (options.keep_fnames) {
- function_defs = new Set();
- }
-
- const mangled_names = this.mangled_names = new Set();
- if (options.cache) {
- this.globals.forEach(collect);
- if (options.cache.props) {
- options.cache.props.forEach(function(mangled_name) {
- mangled_names.add(mangled_name);
- });
- }
- }
-
- var tw = new TreeWalker(function(node, descend) {
- if (node instanceof AST_LabeledStatement) {
- // lname is incremented when we get to the AST_Label
- var save_nesting = lname;
- descend();
- lname = save_nesting;
- return true; // don't descend again in TreeWalker
- }
- if (node instanceof AST_Scope) {
- node.variables.forEach(collect);
- return;
- }
- if (node.is_block_scope()) {
- node.block_scope.variables.forEach(collect);
- return;
- }
- if (
- function_defs
- && node instanceof AST_VarDef
- && node.value instanceof AST_Lambda
- && !node.value.name
- && keep_name(options.keep_fnames, node.name.name)
- ) {
- function_defs.add(node.name.definition().id);
- return;
- }
- if (node instanceof AST_Label) {
- let name;
- do {
- name = nth_identifier.get(++lname);
- } while (ALL_RESERVED_WORDS.has(name));
- node.mangled_name = name;
- return true;
- }
- if (!(options.ie8 || options.safari10) && node instanceof AST_SymbolCatch) {
- to_mangle.push(node.definition());
- return;
- }
- });
-
- this.walk(tw);
-
- if (options.keep_fnames || options.keep_classnames) {
- unmangleable_names = new Set();
- // Collect a set of short names which are unmangleable,
- // for use in avoiding collisions in next_mangled.
- to_mangle.forEach(def => {
- if (def.name.length < 6 && def.unmangleable(options)) {
- unmangleable_names.add(def.name);
- }
- });
- }
-
- to_mangle.forEach(def => { def.mangle(options); });
-
- function_defs = null;
- unmangleable_names = null;
-
- function collect(symbol) {
- const should_mangle = !options.reserved.has(symbol.name)
- && !(symbol.export & MASK_EXPORT_DONT_MANGLE);
- if (should_mangle) {
- to_mangle.push(symbol);
- }
- }
-});
-
-AST_Toplevel.DEFMETHOD("find_colliding_names", function(options) {
- const cache = options.cache && options.cache.props;
- const avoid = new Set();
- options.reserved.forEach(to_avoid);
- this.globals.forEach(add_def);
- this.walk(new TreeWalker(function(node) {
- if (node instanceof AST_Scope) node.variables.forEach(add_def);
- if (node instanceof AST_SymbolCatch) add_def(node.definition());
- }));
- return avoid;
-
- function to_avoid(name) {
- avoid.add(name);
- }
-
- function add_def(def) {
- var name = def.name;
- if (def.global && cache && cache.has(name)) name = cache.get(name);
- else if (!def.unmangleable(options)) return;
- to_avoid(name);
- }
-});
-
-AST_Toplevel.DEFMETHOD("expand_names", function(options) {
- options = this._default_mangler_options(options);
- var nth_identifier = options.nth_identifier;
- if (nth_identifier.reset && nth_identifier.sort) {
- nth_identifier.reset();
- nth_identifier.sort();
- }
- var avoid = this.find_colliding_names(options);
- var cname = 0;
- this.globals.forEach(rename);
- this.walk(new TreeWalker(function(node) {
- if (node instanceof AST_Scope) node.variables.forEach(rename);
- if (node instanceof AST_SymbolCatch) rename(node.definition());
- }));
-
- function next_name() {
- var name;
- do {
- name = nth_identifier.get(cname++);
- } while (avoid.has(name) || ALL_RESERVED_WORDS.has(name));
- return name;
- }
-
- function rename(def) {
- if (def.global && options.cache) return;
- if (def.unmangleable(options)) return;
- if (options.reserved.has(def.name)) return;
- const redefinition = redefined_catch_def(def);
- const name = def.name = redefinition ? redefinition.name : next_name();
- def.orig.forEach(function(sym) {
- sym.name = name;
- });
- def.references.forEach(function(sym) {
- sym.name = name;
- });
- }
-});
-
-AST_Node.DEFMETHOD("tail_node", return_this);
-AST_Sequence.DEFMETHOD("tail_node", function() {
- return this.expressions[this.expressions.length - 1];
-});
-
-AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options) {
- options = this._default_mangler_options(options);
- var nth_identifier = options.nth_identifier;
- if (!nth_identifier.reset || !nth_identifier.consider || !nth_identifier.sort) {
- // If the identifier mangler is invariant, skip computing character frequency.
- return;
- }
- nth_identifier.reset();
-
- try {
- AST_Node.prototype.print = function(stream, force_parens) {
- this._print(stream, force_parens);
- if (this instanceof AST_Symbol && !this.unmangleable(options)) {
- nth_identifier.consider(this.name, -1);
- } else if (options.properties) {
- if (this instanceof AST_DotHash) {
- nth_identifier.consider("#" + this.property, -1);
- } else if (this instanceof AST_Dot) {
- nth_identifier.consider(this.property, -1);
- } else if (this instanceof AST_Sub) {
- skip_string(this.property);
- }
- }
- };
- nth_identifier.consider(this.print_to_string(), 1);
- } finally {
- AST_Node.prototype.print = AST_Node.prototype._print;
- }
- nth_identifier.sort();
-
- function skip_string(node) {
- if (node instanceof AST_String) {
- nth_identifier.consider(node.value, -1);
- } else if (node instanceof AST_Conditional) {
- skip_string(node.consequent);
- skip_string(node.alternative);
- } else if (node instanceof AST_Sequence) {
- skip_string(node.tail_node());
- }
- }
-});
-
-const base54 = (() => {
- const leading = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_".split("");
- const digits = "0123456789".split("");
- let chars;
- let frequency;
- function reset() {
- frequency = new Map();
- leading.forEach(function(ch) {
- frequency.set(ch, 0);
- });
- digits.forEach(function(ch) {
- frequency.set(ch, 0);
- });
- }
- function consider(str, delta) {
- for (var i = str.length; --i >= 0;) {
- frequency.set(str[i], frequency.get(str[i]) + delta);
- }
- }
- function compare(a, b) {
- return frequency.get(b) - frequency.get(a);
- }
- function sort() {
- chars = mergeSort(leading, compare).concat(mergeSort(digits, compare));
- }
- // Ensure this is in a usable initial state.
- reset();
- sort();
- function base54(num) {
- var ret = "", base = 54;
- num++;
- do {
- num--;
- ret += chars[num % base];
- num = Math.floor(num / base);
- base = 64;
- } while (num > 0);
- return ret;
- }
-
- return {
- get: base54,
- consider,
- reset,
- sort
- };
-})();
-
-let mangle_options = undefined;
-AST_Node.prototype.size = function (compressor, stack) {
- mangle_options = compressor && compressor.mangle_options;
-
- let size = 0;
- walk_parent(this, (node, info) => {
- size += node._size(info);
-
- // Braceless arrow functions have fake "return" statements
- if (node instanceof AST_Arrow && node.is_braceless()) {
- size += node.body[0].value._size(info);
- return true;
- }
- }, stack || (compressor && compressor.stack));
-
- // just to save a bit of memory
- mangle_options = undefined;
-
- return size;
-};
-
-AST_Node.prototype._size = () => 0;
-
-AST_Debugger.prototype._size = () => 8;
-
-AST_Directive.prototype._size = function () {
- // TODO string encoding stuff
- return 2 + this.value.length;
-};
-
-const list_overhead = (array) => array.length && array.length - 1;
-
-AST_Block.prototype._size = function () {
- return 2 + list_overhead(this.body);
-};
-
-AST_Toplevel.prototype._size = function() {
- return list_overhead(this.body);
-};
-
-AST_EmptyStatement.prototype._size = () => 1;
-
-AST_LabeledStatement.prototype._size = () => 2; // x:
-
-AST_Do.prototype._size = () => 9;
-
-AST_While.prototype._size = () => 7;
-
-AST_For.prototype._size = () => 8;
-
-AST_ForIn.prototype._size = () => 8;
-// AST_ForOf inherits ^
-
-AST_With.prototype._size = () => 6;
-
-AST_Expansion.prototype._size = () => 3;
-
-const lambda_modifiers = func =>
- (func.is_generator ? 1 : 0) + (func.async ? 6 : 0);
-
-AST_Accessor.prototype._size = function () {
- return lambda_modifiers(this) + 4 + list_overhead(this.argnames) + list_overhead(this.body);
-};
-
-AST_Function.prototype._size = function (info) {
- const first = !!first_in_statement(info);
- return (first * 2) + lambda_modifiers(this) + 12 + list_overhead(this.argnames) + list_overhead(this.body);
-};
-
-AST_Defun.prototype._size = function () {
- return lambda_modifiers(this) + 13 + list_overhead(this.argnames) + list_overhead(this.body);
-};
-
-AST_Arrow.prototype._size = function () {
- let args_and_arrow = 2 + list_overhead(this.argnames);
-
- if (
- !(
- this.argnames.length === 1
- && this.argnames[0] instanceof AST_Symbol
- )
- ) {
- args_and_arrow += 2;
- }
-
- const body_overhead = this.is_braceless() ? 0 : list_overhead(this.body) + 2;
-
- return lambda_modifiers(this) + args_and_arrow + body_overhead;
-};
-
-AST_Destructuring.prototype._size = () => 2;
-
-AST_TemplateString.prototype._size = function () {
- return 2 + (Math.floor(this.segments.length / 2) * 3); /* "${}" */
-};
-
-AST_TemplateSegment.prototype._size = function () {
- return this.value.length;
-};
-
-AST_Return.prototype._size = function () {
- return this.value ? 7 : 6;
-};
-
-AST_Throw.prototype._size = () => 6;
-
-AST_Break.prototype._size = function () {
- return this.label ? 6 : 5;
-};
-
-AST_Continue.prototype._size = function () {
- return this.label ? 9 : 8;
-};
-
-AST_If.prototype._size = () => 4;
-
-AST_Switch.prototype._size = function () {
- return 8 + list_overhead(this.body);
-};
-
-AST_Case.prototype._size = function () {
- return 5 + list_overhead(this.body);
-};
-
-AST_Default.prototype._size = function () {
- return 8 + list_overhead(this.body);
-};
-
-AST_Try.prototype._size = function () {
- return 3 + list_overhead(this.body);
-};
-
-AST_Catch.prototype._size = function () {
- let size = 7 + list_overhead(this.body);
- if (this.argname) {
- size += 2;
- }
- return size;
-};
-
-AST_Finally.prototype._size = function () {
- return 7 + list_overhead(this.body);
-};
-
-/*#__INLINE__*/
-const def_size = (size, def) => size + list_overhead(def.definitions);
-
-AST_Var.prototype._size = function () {
- return def_size(4, this);
-};
-
-AST_Let.prototype._size = function () {
- return def_size(4, this);
-};
-
-AST_Const.prototype._size = function () {
- return def_size(6, this);
-};
-
-AST_VarDef.prototype._size = function () {
- return this.value ? 1 : 0;
-};
-
-AST_NameMapping.prototype._size = function () {
- // foreign name isn't mangled
- return this.name ? 4 : 0;
-};
-
-AST_Import.prototype._size = function () {
- // import
- let size = 6;
-
- if (this.imported_name) size += 1;
-
- // from
- if (this.imported_name || this.imported_names) size += 5;
-
- // braces, and the commas
- if (this.imported_names) {
- size += 2 + list_overhead(this.imported_names);
- }
-
- return size;
-};
-
-AST_ImportMeta.prototype._size = () => 11;
-
-AST_Export.prototype._size = function () {
- let size = 7 + (this.is_default ? 8 : 0);
-
- if (this.exported_value) {
- size += this.exported_value._size();
- }
-
- if (this.exported_names) {
- // Braces and commas
- size += 2 + list_overhead(this.exported_names);
- }
-
- if (this.module_name) {
- // "from "
- size += 5;
- }
-
- return size;
-};
-
-AST_Call.prototype._size = function () {
- if (this.optional) {
- return 4 + list_overhead(this.args);
- }
- return 2 + list_overhead(this.args);
-};
-
-AST_New.prototype._size = function () {
- return 6 + list_overhead(this.args);
-};
-
-AST_Sequence.prototype._size = function () {
- return list_overhead(this.expressions);
-};
-
-AST_Dot.prototype._size = function () {
- if (this.optional) {
- return this.property.length + 2;
- }
- return this.property.length + 1;
-};
-
-AST_DotHash.prototype._size = function () {
- if (this.optional) {
- return this.property.length + 3;
- }
- return this.property.length + 2;
-};
-
-AST_Sub.prototype._size = function () {
- return this.optional ? 4 : 2;
-};
-
-AST_Unary.prototype._size = function () {
- if (this.operator === "typeof") return 7;
- if (this.operator === "void") return 5;
- return this.operator.length;
-};
-
-AST_Binary.prototype._size = function (info) {
- if (this.operator === "in") return 4;
-
- let size = this.operator.length;
-
- if (
- (this.operator === "+" || this.operator === "-")
- && this.right instanceof AST_Unary && this.right.operator === this.operator
- ) {
- // 1+ +a > needs space between the +
- size += 1;
- }
-
- if (this.needs_parens(info)) {
- size += 2;
- }
-
- return size;
-};
-
-AST_Conditional.prototype._size = () => 3;
-
-AST_Array.prototype._size = function () {
- return 2 + list_overhead(this.elements);
-};
-
-AST_Object.prototype._size = function (info) {
- let base = 2;
- if (first_in_statement(info)) {
- base += 2; // parens
- }
- return base + list_overhead(this.properties);
-};
-
-/*#__INLINE__*/
-const key_size = key =>
- typeof key === "string" ? key.length : 0;
-
-AST_ObjectKeyVal.prototype._size = function () {
- return key_size(this.key) + 1;
-};
-
-/*#__INLINE__*/
-const static_size = is_static => is_static ? 7 : 0;
-
-AST_ObjectGetter.prototype._size = function () {
- return 5 + static_size(this.static) + key_size(this.key);
-};
-
-AST_ObjectSetter.prototype._size = function () {
- return 5 + static_size(this.static) + key_size(this.key);
-};
-
-AST_ConciseMethod.prototype._size = function () {
- return static_size(this.static) + key_size(this.key) + lambda_modifiers(this);
-};
-
-AST_PrivateMethod.prototype._size = function () {
- return AST_ConciseMethod.prototype._size.call(this) + 1;
-};
-
-AST_PrivateGetter.prototype._size = AST_PrivateSetter.prototype._size = function () {
- return AST_ConciseMethod.prototype._size.call(this) + 4;
-};
-
-AST_Class.prototype._size = function () {
- return (
- (this.name ? 8 : 7)
- + (this.extends ? 8 : 0)
- );
-};
-
-AST_ClassProperty.prototype._size = function () {
- return (
- static_size(this.static)
- + (typeof this.key === "string" ? this.key.length + 2 : 0)
- + (this.value ? 1 : 0)
- );
-};
-
-AST_ClassPrivateProperty.prototype._size = function () {
- return AST_ClassProperty.prototype._size.call(this) + 1;
-};
-
-AST_Symbol.prototype._size = function () {
- return !mangle_options || this.definition().unmangleable(mangle_options)
- ? this.name.length
- : 1;
-};
-
-// TODO take propmangle into account
-AST_SymbolClassProperty.prototype._size = function () {
- return this.name.length;
-};
-
-AST_SymbolRef.prototype._size = AST_SymbolDeclaration.prototype._size = function () {
- const { name, thedef } = this;
-
- if (thedef && thedef.global) return name.length;
-
- if (name === "arguments") return 9;
-
- return AST_Symbol.prototype._size.call(this);
-};
-
-AST_NewTarget.prototype._size = () => 10;
-
-AST_SymbolImportForeign.prototype._size = function () {
- return this.name.length;
-};
-
-AST_SymbolExportForeign.prototype._size = function () {
- return this.name.length;
-};
-
-AST_This.prototype._size = () => 4;
-
-AST_Super.prototype._size = () => 5;
-
-AST_String.prototype._size = function () {
- return this.value.length + 2;
-};
-
-AST_Number.prototype._size = function () {
- const { value } = this;
- if (value === 0) return 1;
- if (value > 0 && Math.floor(value) === value) {
- return Math.floor(Math.log10(value) + 1);
- }
- return value.toString().length;
-};
-
-AST_BigInt.prototype._size = function () {
- return this.value.length;
-};
-
-AST_RegExp.prototype._size = function () {
- return this.value.toString().length;
-};
-
-AST_Null.prototype._size = () => 4;
-
-AST_NaN.prototype._size = () => 3;
-
-AST_Undefined.prototype._size = () => 6; // "void 0"
-
-AST_Hole.prototype._size = () => 0; // comma is taken into account
-
-AST_Infinity.prototype._size = () => 8;
-
-AST_True.prototype._size = () => 4;
-
-AST_False.prototype._size = () => 5;
-
-AST_Await.prototype._size = () => 6;
-
-AST_Yield.prototype._size = () => 6;
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-function merge_sequence(array, node) {
- if (node instanceof AST_Sequence) {
- array.push(...node.expressions);
- } else {
- array.push(node);
- }
- return array;
-}
-
-function make_sequence(orig, expressions) {
- if (expressions.length == 1) return expressions[0];
- if (expressions.length == 0) throw new Error("trying to create a sequence with length zero!");
- return make_node(AST_Sequence, orig, {
- expressions: expressions.reduce(merge_sequence, [])
- });
-}
-
-function make_node_from_constant(val, orig) {
- switch (typeof val) {
- case "string":
- return make_node(AST_String, orig, {
- value: val
- });
- case "number":
- if (isNaN(val)) return make_node(AST_NaN, orig);
- if (isFinite(val)) {
- return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, {
- operator: "-",
- expression: make_node(AST_Number, orig, { value: -val })
- }) : make_node(AST_Number, orig, { value: val });
- }
- return val < 0 ? make_node(AST_UnaryPrefix, orig, {
- operator: "-",
- expression: make_node(AST_Infinity, orig)
- }) : make_node(AST_Infinity, orig);
- case "boolean":
- return make_node(val ? AST_True : AST_False, orig);
- case "undefined":
- return make_node(AST_Undefined, orig);
- default:
- if (val === null) {
- return make_node(AST_Null, orig, { value: null });
- }
- if (val instanceof RegExp) {
- return make_node(AST_RegExp, orig, {
- value: {
- source: regexp_source_fix(val.source),
- flags: val.flags
- }
- });
- }
- throw new Error(string_template("Can't handle constant of type: {type}", {
- type: typeof val
- }));
- }
-}
-
-function best_of_expression(ast1, ast2) {
- return ast1.size() > ast2.size() ? ast2 : ast1;
-}
-
-function best_of_statement(ast1, ast2) {
- return best_of_expression(
- make_node(AST_SimpleStatement, ast1, {
- body: ast1
- }),
- make_node(AST_SimpleStatement, ast2, {
- body: ast2
- })
- ).body;
-}
-
-/** Find which node is smaller, and return that */
-function best_of(compressor, ast1, ast2) {
- if (first_in_statement(compressor)) {
- return best_of_statement(ast1, ast2);
- } else {
- return best_of_expression(ast1, ast2);
- }
-}
-
-/** Simplify an object property's key, if possible */
-function get_simple_key(key) {
- if (key instanceof AST_Constant) {
- return key.getValue();
- }
- if (key instanceof AST_UnaryPrefix
- && key.operator == "void"
- && key.expression instanceof AST_Constant) {
- return;
- }
- return key;
-}
-
-function read_property(obj, key) {
- key = get_simple_key(key);
- if (key instanceof AST_Node) return;
-
- var value;
- if (obj instanceof AST_Array) {
- var elements = obj.elements;
- if (key == "length") return make_node_from_constant(elements.length, obj);
- if (typeof key == "number" && key in elements) value = elements[key];
- } else if (obj instanceof AST_Object) {
- key = "" + key;
- var props = obj.properties;
- for (var i = props.length; --i >= 0;) {
- var prop = props[i];
- if (!(prop instanceof AST_ObjectKeyVal)) return;
- if (!value && props[i].key === key) value = props[i].value;
- }
- }
-
- return value instanceof AST_SymbolRef && value.fixed_value() || value;
-}
-
-function has_break_or_continue(loop, parent) {
- var found = false;
- var tw = new TreeWalker(function(node) {
- if (found || node instanceof AST_Scope) return true;
- if (node instanceof AST_LoopControl && tw.loopcontrol_target(node) === loop) {
- return found = true;
- }
- });
- if (parent instanceof AST_LabeledStatement) tw.push(parent);
- tw.push(loop);
- loop.body.walk(tw);
- return found;
-}
-
-// we shouldn't compress (1,func)(something) to
-// func(something) because that changes the meaning of
-// the func (becomes lexical instead of global).
-function maintain_this_binding(parent, orig, val) {
- if (
- parent instanceof AST_UnaryPrefix && parent.operator == "delete"
- || parent instanceof AST_Call && parent.expression === orig
- && (
- val instanceof AST_PropAccess
- || val instanceof AST_SymbolRef && val.name == "eval"
- )
- ) {
- const zero = make_node(AST_Number, orig, { value: 0 });
- return make_sequence(orig, [ zero, val ]);
- } else {
- return val;
- }
-}
-
-function is_func_expr(node) {
- return node instanceof AST_Arrow || node instanceof AST_Function;
-}
-
-function is_iife_call(node) {
- // Used to determine whether the node can benefit from negation.
- // Not the case with arrow functions (you need an extra set of parens).
- if (node.TYPE != "Call") return false;
- return node.expression instanceof AST_Function || is_iife_call(node.expression);
-}
-
-const identifier_atom = makePredicate("Infinity NaN undefined");
-function is_identifier_atom(node) {
- return node instanceof AST_Infinity
- || node instanceof AST_NaN
- || node instanceof AST_Undefined;
-}
-
-/** Check if this is a SymbolRef node which has one def of a certain AST type */
-function is_ref_of(ref, type) {
- if (!(ref instanceof AST_SymbolRef)) return false;
- var orig = ref.definition().orig;
- for (var i = orig.length; --i >= 0;) {
- if (orig[i] instanceof type) return true;
- }
-}
-
-// Can we turn { block contents... } into just the block contents ?
-// Not if one of these is inside.
-function can_be_evicted_from_block(node) {
- return !(
- node instanceof AST_DefClass ||
- node instanceof AST_Defun ||
- node instanceof AST_Let ||
- node instanceof AST_Const ||
- node instanceof AST_Export ||
- node instanceof AST_Import
- );
-}
-
-function as_statement_array(thing) {
- if (thing === null) return [];
- if (thing instanceof AST_BlockStatement) return thing.body;
- if (thing instanceof AST_EmptyStatement) return [];
- if (thing instanceof AST_Statement) return [ thing ];
- throw new Error("Can't convert thing to statement array");
-}
-
-/** Check if a ref refers to the name of a function/class it's defined within */
-function is_recursive_ref(compressor, def) {
- var node;
- for (var i = 0; node = compressor.parent(i); i++) {
- if (node instanceof AST_Lambda || node instanceof AST_Class) {
- var name = node.name;
- if (name && name.definition() === def) {
- return true;
- }
- }
- }
- return false;
-}
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-// bitfield flags to be stored in node.flags.
-// These are set and unset during compression, and store information in the node without requiring multiple fields.
-const UNUSED = 0b00000001;
-const TRUTHY = 0b00000010;
-const FALSY = 0b00000100;
-const UNDEFINED = 0b00001000;
-const INLINED = 0b00010000;
-
-// Nodes to which values are ever written. Used when keep_assign is part of the unused option string.
-const WRITE_ONLY = 0b00100000;
-
-// information specific to a single compression pass
-const SQUEEZED = 0b0000000100000000;
-const OPTIMIZED = 0b0000001000000000;
-const TOP = 0b0000010000000000;
-const CLEAR_BETWEEN_PASSES = SQUEEZED | OPTIMIZED | TOP;
-
-const has_flag = (node, flag) => node.flags & flag;
-const set_flag = (node, flag) => { node.flags |= flag; };
-const clear_flag = (node, flag) => { node.flags &= ~flag; };
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-// Lists of native methods, useful for `unsafe` option which assumes they exist.
-// Note: Lots of methods and functions are missing here, in case they aren't pure
-// or not available in all JS environments.
-
-function make_nested_lookup(obj) {
- const out = new Map();
- for (var key of Object.keys(obj)) {
- out.set(key, makePredicate(obj[key]));
- }
-
- const does_have = (global_name, fname) => {
- const inner_map = out.get(global_name);
- return inner_map != null && inner_map.has(fname);
- };
- return does_have;
-}
-
-// Objects which are safe to access without throwing or causing a side effect.
-// Usually we'd check the `unsafe` option first but these are way too common for that
-const pure_prop_access_globals = new Set([
- "Number",
- "String",
- "Array",
- "Object",
- "Function",
- "Promise",
-]);
-
-const object_methods = [
- "constructor",
- "toString",
- "valueOf",
-];
-
-const is_pure_native_method = make_nested_lookup({
- Array: [
- "indexOf",
- "join",
- "lastIndexOf",
- "slice",
- ...object_methods,
- ],
- Boolean: object_methods,
- Function: object_methods,
- Number: [
- "toExponential",
- "toFixed",
- "toPrecision",
- ...object_methods,
- ],
- Object: object_methods,
- RegExp: [
- "test",
- ...object_methods,
- ],
- String: [
- "charAt",
- "charCodeAt",
- "concat",
- "indexOf",
- "italics",
- "lastIndexOf",
- "match",
- "replace",
- "search",
- "slice",
- "split",
- "substr",
- "substring",
- "toLowerCase",
- "toUpperCase",
- "trim",
- ...object_methods,
- ],
-});
-
-const is_pure_native_fn = make_nested_lookup({
- Array: [
- "isArray",
- ],
- Math: [
- "abs",
- "acos",
- "asin",
- "atan",
- "ceil",
- "cos",
- "exp",
- "floor",
- "log",
- "round",
- "sin",
- "sqrt",
- "tan",
- "atan2",
- "pow",
- "max",
- "min",
- ],
- Number: [
- "isFinite",
- "isNaN",
- ],
- Object: [
- "create",
- "getOwnPropertyDescriptor",
- "getOwnPropertyNames",
- "getPrototypeOf",
- "isExtensible",
- "isFrozen",
- "isSealed",
- "keys",
- ],
- String: [
- "fromCharCode",
- ],
-});
-
-// Known numeric values which come with JS environments
-const is_pure_native_value = make_nested_lookup({
- Math: [
- "E",
- "LN10",
- "LN2",
- "LOG2E",
- "LOG10E",
- "PI",
- "SQRT1_2",
- "SQRT2",
- ],
- Number: [
- "MAX_VALUE",
- "MIN_VALUE",
- "NaN",
- "NEGATIVE_INFINITY",
- "POSITIVE_INFINITY",
- ],
-});
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-// Functions and methods to infer certain facts about expressions
-// It's not always possible to be 100% sure about something just by static analysis,
-// so `true` means yes, and `false` means maybe
-
-const is_undeclared_ref = (node) =>
- node instanceof AST_SymbolRef && node.definition().undeclared;
-
-const lazy_op = makePredicate("&& || ??");
-const unary_side_effects = makePredicate("delete ++ --");
-
-// methods to determine whether an expression has a boolean result type
-(function(def_is_boolean) {
- const unary_bool = makePredicate("! delete");
- const binary_bool = makePredicate("in instanceof == != === !== < <= >= >");
- def_is_boolean(AST_Node, return_false);
- def_is_boolean(AST_UnaryPrefix, function() {
- return unary_bool.has(this.operator);
- });
- def_is_boolean(AST_Binary, function() {
- return binary_bool.has(this.operator)
- || lazy_op.has(this.operator)
- && this.left.is_boolean()
- && this.right.is_boolean();
- });
- def_is_boolean(AST_Conditional, function() {
- return this.consequent.is_boolean() && this.alternative.is_boolean();
- });
- def_is_boolean(AST_Assign, function() {
- return this.operator == "=" && this.right.is_boolean();
- });
- def_is_boolean(AST_Sequence, function() {
- return this.tail_node().is_boolean();
- });
- def_is_boolean(AST_True, return_true);
- def_is_boolean(AST_False, return_true);
-})(function(node, func) {
- node.DEFMETHOD("is_boolean", func);
-});
-
-// methods to determine if an expression has a numeric result type
-(function(def_is_number) {
- def_is_number(AST_Node, return_false);
- def_is_number(AST_Number, return_true);
- const unary = makePredicate("+ - ~ ++ --");
- def_is_number(AST_Unary, function() {
- return unary.has(this.operator);
- });
- const numeric_ops = makePredicate("- * / % & | ^ << >> >>>");
- def_is_number(AST_Binary, function(compressor) {
- return numeric_ops.has(this.operator) || this.operator == "+"
- && this.left.is_number(compressor)
- && this.right.is_number(compressor);
- });
- def_is_number(AST_Assign, function(compressor) {
- return numeric_ops.has(this.operator.slice(0, -1))
- || this.operator == "=" && this.right.is_number(compressor);
- });
- def_is_number(AST_Sequence, function(compressor) {
- return this.tail_node().is_number(compressor);
- });
- def_is_number(AST_Conditional, function(compressor) {
- return this.consequent.is_number(compressor) && this.alternative.is_number(compressor);
- });
-})(function(node, func) {
- node.DEFMETHOD("is_number", func);
-});
-
-// methods to determine if an expression has a string result type
-(function(def_is_string) {
- def_is_string(AST_Node, return_false);
- def_is_string(AST_String, return_true);
- def_is_string(AST_TemplateString, return_true);
- def_is_string(AST_UnaryPrefix, function() {
- return this.operator == "typeof";
- });
- def_is_string(AST_Binary, function(compressor) {
- return this.operator == "+" &&
- (this.left.is_string(compressor) || this.right.is_string(compressor));
- });
- def_is_string(AST_Assign, function(compressor) {
- return (this.operator == "=" || this.operator == "+=") && this.right.is_string(compressor);
- });
- def_is_string(AST_Sequence, function(compressor) {
- return this.tail_node().is_string(compressor);
- });
- def_is_string(AST_Conditional, function(compressor) {
- return this.consequent.is_string(compressor) && this.alternative.is_string(compressor);
- });
-})(function(node, func) {
- node.DEFMETHOD("is_string", func);
-});
-
-function is_undefined(node, compressor) {
- return (
- has_flag(node, UNDEFINED)
- || node instanceof AST_Undefined
- || node instanceof AST_UnaryPrefix
- && node.operator == "void"
- && !node.expression.has_side_effects(compressor)
- );
-}
-
-// Is the node explicitly null or undefined.
-function is_null_or_undefined(node, compressor) {
- let fixed;
- return (
- node instanceof AST_Null
- || is_undefined(node, compressor)
- || (
- node instanceof AST_SymbolRef
- && (fixed = node.definition().fixed) instanceof AST_Node
- && is_nullish(fixed, compressor)
- )
- );
-}
-
-// Find out if this expression is optionally chained from a base-point that we
-// can statically analyze as null or undefined.
-function is_nullish_shortcircuited(node, compressor) {
- if (node instanceof AST_PropAccess || node instanceof AST_Call) {
- return (
- (node.optional && is_null_or_undefined(node.expression, compressor))
- || is_nullish_shortcircuited(node.expression, compressor)
- );
- }
- if (node instanceof AST_Chain) return is_nullish_shortcircuited(node.expression, compressor);
- return false;
-}
-
-// Find out if something is == null, or can short circuit into nullish.
-// Used to optimize ?. and ??
-function is_nullish(node, compressor) {
- if (is_null_or_undefined(node, compressor)) return true;
- return is_nullish_shortcircuited(node, compressor);
-}
-
-// Determine if expression might cause side effects
-// If there's a possibility that a node may change something when it's executed, this returns true
-(function(def_has_side_effects) {
- def_has_side_effects(AST_Node, return_true);
-
- def_has_side_effects(AST_EmptyStatement, return_false);
- def_has_side_effects(AST_Constant, return_false);
- def_has_side_effects(AST_This, return_false);
-
- function any(list, compressor) {
- for (var i = list.length; --i >= 0;)
- if (list[i].has_side_effects(compressor))
- return true;
- return false;
- }
-
- def_has_side_effects(AST_Block, function(compressor) {
- return any(this.body, compressor);
- });
- def_has_side_effects(AST_Call, function(compressor) {
- if (
- !this.is_callee_pure(compressor)
- && (!this.expression.is_call_pure(compressor)
- || this.expression.has_side_effects(compressor))
- ) {
- return true;
- }
- return any(this.args, compressor);
- });
- def_has_side_effects(AST_Switch, function(compressor) {
- return this.expression.has_side_effects(compressor)
- || any(this.body, compressor);
- });
- def_has_side_effects(AST_Case, function(compressor) {
- return this.expression.has_side_effects(compressor)
- || any(this.body, compressor);
- });
- def_has_side_effects(AST_Try, function(compressor) {
- return any(this.body, compressor)
- || this.bcatch && this.bcatch.has_side_effects(compressor)
- || this.bfinally && this.bfinally.has_side_effects(compressor);
- });
- def_has_side_effects(AST_If, function(compressor) {
- return this.condition.has_side_effects(compressor)
- || this.body && this.body.has_side_effects(compressor)
- || this.alternative && this.alternative.has_side_effects(compressor);
- });
- def_has_side_effects(AST_LabeledStatement, function(compressor) {
- return this.body.has_side_effects(compressor);
- });
- def_has_side_effects(AST_SimpleStatement, function(compressor) {
- return this.body.has_side_effects(compressor);
- });
- def_has_side_effects(AST_Lambda, return_false);
- def_has_side_effects(AST_Class, function (compressor) {
- if (this.extends && this.extends.has_side_effects(compressor)) {
- return true;
- }
- return any(this.properties, compressor);
- });
- def_has_side_effects(AST_Binary, function(compressor) {
- return this.left.has_side_effects(compressor)
- || this.right.has_side_effects(compressor);
- });
- def_has_side_effects(AST_Assign, return_true);
- def_has_side_effects(AST_Conditional, function(compressor) {
- return this.condition.has_side_effects(compressor)
- || this.consequent.has_side_effects(compressor)
- || this.alternative.has_side_effects(compressor);
- });
- def_has_side_effects(AST_Unary, function(compressor) {
- return unary_side_effects.has(this.operator)
- || this.expression.has_side_effects(compressor);
- });
- def_has_side_effects(AST_SymbolRef, function(compressor) {
- return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name);
- });
- def_has_side_effects(AST_SymbolClassProperty, return_false);
- def_has_side_effects(AST_SymbolDeclaration, return_false);
- def_has_side_effects(AST_Object, function(compressor) {
- return any(this.properties, compressor);
- });
- def_has_side_effects(AST_ObjectProperty, function(compressor) {
- return (
- this.computed_key() && this.key.has_side_effects(compressor)
- || this.value && this.value.has_side_effects(compressor)
- );
- });
- def_has_side_effects(AST_ClassProperty, function(compressor) {
- return (
- this.computed_key() && this.key.has_side_effects(compressor)
- || this.static && this.value && this.value.has_side_effects(compressor)
- );
- });
- def_has_side_effects(AST_ConciseMethod, function(compressor) {
- return this.computed_key() && this.key.has_side_effects(compressor);
- });
- def_has_side_effects(AST_ObjectGetter, function(compressor) {
- return this.computed_key() && this.key.has_side_effects(compressor);
- });
- def_has_side_effects(AST_ObjectSetter, function(compressor) {
- return this.computed_key() && this.key.has_side_effects(compressor);
- });
- def_has_side_effects(AST_Array, function(compressor) {
- return any(this.elements, compressor);
- });
- def_has_side_effects(AST_Dot, function(compressor) {
- if (is_nullish(this, compressor)) return false;
- return !this.optional && this.expression.may_throw_on_access(compressor)
- || this.expression.has_side_effects(compressor);
- });
- def_has_side_effects(AST_Sub, function(compressor) {
- if (is_nullish(this, compressor)) return false;
-
- return !this.optional && this.expression.may_throw_on_access(compressor)
- || this.expression.has_side_effects(compressor)
- || this.property.has_side_effects(compressor);
- });
- def_has_side_effects(AST_Chain, function (compressor) {
- return this.expression.has_side_effects(compressor);
- });
- def_has_side_effects(AST_Sequence, function(compressor) {
- return any(this.expressions, compressor);
- });
- def_has_side_effects(AST_Definitions, function(compressor) {
- return any(this.definitions, compressor);
- });
- def_has_side_effects(AST_VarDef, function() {
- return this.value;
- });
- def_has_side_effects(AST_TemplateSegment, return_false);
- def_has_side_effects(AST_TemplateString, function(compressor) {
- return any(this.segments, compressor);
- });
-})(function(node, func) {
- node.DEFMETHOD("has_side_effects", func);
-});
-
-// determine if expression may throw
-(function(def_may_throw) {
- def_may_throw(AST_Node, return_true);
-
- def_may_throw(AST_Constant, return_false);
- def_may_throw(AST_EmptyStatement, return_false);
- def_may_throw(AST_Lambda, return_false);
- def_may_throw(AST_SymbolDeclaration, return_false);
- def_may_throw(AST_This, return_false);
-
- function any(list, compressor) {
- for (var i = list.length; --i >= 0;)
- if (list[i].may_throw(compressor))
- return true;
- return false;
- }
-
- def_may_throw(AST_Class, function(compressor) {
- if (this.extends && this.extends.may_throw(compressor)) return true;
- return any(this.properties, compressor);
- });
-
- def_may_throw(AST_Array, function(compressor) {
- return any(this.elements, compressor);
- });
- def_may_throw(AST_Assign, function(compressor) {
- if (this.right.may_throw(compressor)) return true;
- if (!compressor.has_directive("use strict")
- && this.operator == "="
- && this.left instanceof AST_SymbolRef) {
- return false;
- }
- return this.left.may_throw(compressor);
- });
- def_may_throw(AST_Binary, function(compressor) {
- return this.left.may_throw(compressor)
- || this.right.may_throw(compressor);
- });
- def_may_throw(AST_Block, function(compressor) {
- return any(this.body, compressor);
- });
- def_may_throw(AST_Call, function(compressor) {
- if (is_nullish(this, compressor)) return false;
- if (any(this.args, compressor)) return true;
- if (this.is_callee_pure(compressor)) return false;
- if (this.expression.may_throw(compressor)) return true;
- return !(this.expression instanceof AST_Lambda)
- || any(this.expression.body, compressor);
- });
- def_may_throw(AST_Case, function(compressor) {
- return this.expression.may_throw(compressor)
- || any(this.body, compressor);
- });
- def_may_throw(AST_Conditional, function(compressor) {
- return this.condition.may_throw(compressor)
- || this.consequent.may_throw(compressor)
- || this.alternative.may_throw(compressor);
- });
- def_may_throw(AST_Definitions, function(compressor) {
- return any(this.definitions, compressor);
- });
- def_may_throw(AST_If, function(compressor) {
- return this.condition.may_throw(compressor)
- || this.body && this.body.may_throw(compressor)
- || this.alternative && this.alternative.may_throw(compressor);
- });
- def_may_throw(AST_LabeledStatement, function(compressor) {
- return this.body.may_throw(compressor);
- });
- def_may_throw(AST_Object, function(compressor) {
- return any(this.properties, compressor);
- });
- def_may_throw(AST_ObjectProperty, function(compressor) {
- // TODO key may throw too
- return this.value ? this.value.may_throw(compressor) : false;
- });
- def_may_throw(AST_ClassProperty, function(compressor) {
- return (
- this.computed_key() && this.key.may_throw(compressor)
- || this.static && this.value && this.value.may_throw(compressor)
- );
- });
- def_may_throw(AST_ConciseMethod, function(compressor) {
- return this.computed_key() && this.key.may_throw(compressor);
- });
- def_may_throw(AST_ObjectGetter, function(compressor) {
- return this.computed_key() && this.key.may_throw(compressor);
- });
- def_may_throw(AST_ObjectSetter, function(compressor) {
- return this.computed_key() && this.key.may_throw(compressor);
- });
- def_may_throw(AST_Return, function(compressor) {
- return this.value && this.value.may_throw(compressor);
- });
- def_may_throw(AST_Sequence, function(compressor) {
- return any(this.expressions, compressor);
- });
- def_may_throw(AST_SimpleStatement, function(compressor) {
- return this.body.may_throw(compressor);
- });
- def_may_throw(AST_Dot, function(compressor) {
- if (is_nullish(this, compressor)) return false;
- return !this.optional && this.expression.may_throw_on_access(compressor)
- || this.expression.may_throw(compressor);
- });
- def_may_throw(AST_Sub, function(compressor) {
- if (is_nullish(this, compressor)) return false;
- return !this.optional && this.expression.may_throw_on_access(compressor)
- || this.expression.may_throw(compressor)
- || this.property.may_throw(compressor);
- });
- def_may_throw(AST_Chain, function(compressor) {
- return this.expression.may_throw(compressor);
- });
- def_may_throw(AST_Switch, function(compressor) {
- return this.expression.may_throw(compressor)
- || any(this.body, compressor);
- });
- def_may_throw(AST_SymbolRef, function(compressor) {
- return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name);
- });
- def_may_throw(AST_SymbolClassProperty, return_false);
- def_may_throw(AST_Try, function(compressor) {
- return this.bcatch ? this.bcatch.may_throw(compressor) : any(this.body, compressor)
- || this.bfinally && this.bfinally.may_throw(compressor);
- });
- def_may_throw(AST_Unary, function(compressor) {
- if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef)
- return false;
- return this.expression.may_throw(compressor);
- });
- def_may_throw(AST_VarDef, function(compressor) {
- if (!this.value) return false;
- return this.value.may_throw(compressor);
- });
-})(function(node, func) {
- node.DEFMETHOD("may_throw", func);
-});
-
-// determine if expression is constant
-(function(def_is_constant_expression) {
- function all_refs_local(scope) {
- let result = true;
- walk(this, node => {
- if (node instanceof AST_SymbolRef) {
- if (has_flag(this, INLINED)) {
- result = false;
- return walk_abort;
- }
- var def = node.definition();
- if (
- member(def, this.enclosed)
- && !this.variables.has(def.name)
- ) {
- if (scope) {
- var scope_def = scope.find_variable(node);
- if (def.undeclared ? !scope_def : scope_def === def) {
- result = "f";
- return true;
- }
- }
- result = false;
- return walk_abort;
- }
- return true;
- }
- if (node instanceof AST_This && this instanceof AST_Arrow) {
- // TODO check arguments too!
- result = false;
- return walk_abort;
- }
- });
- return result;
- }
-
- def_is_constant_expression(AST_Node, return_false);
- def_is_constant_expression(AST_Constant, return_true);
- def_is_constant_expression(AST_Class, function(scope) {
- if (this.extends && !this.extends.is_constant_expression(scope)) {
- return false;
- }
-
- for (const prop of this.properties) {
- if (prop.computed_key() && !prop.key.is_constant_expression(scope)) {
- return false;
- }
- if (prop.static && prop.value && !prop.value.is_constant_expression(scope)) {
- return false;
- }
- }
-
- return all_refs_local.call(this, scope);
- });
- def_is_constant_expression(AST_Lambda, all_refs_local);
- def_is_constant_expression(AST_Unary, function() {
- return this.expression.is_constant_expression();
- });
- def_is_constant_expression(AST_Binary, function() {
- return this.left.is_constant_expression()
- && this.right.is_constant_expression();
- });
- def_is_constant_expression(AST_Array, function() {
- return this.elements.every((l) => l.is_constant_expression());
- });
- def_is_constant_expression(AST_Object, function() {
- return this.properties.every((l) => l.is_constant_expression());
- });
- def_is_constant_expression(AST_ObjectProperty, function() {
- return !!(!(this.key instanceof AST_Node) && this.value && this.value.is_constant_expression());
- });
-})(function(node, func) {
- node.DEFMETHOD("is_constant_expression", func);
-});
-
-
-// may_throw_on_access()
-// returns true if this node may be null, undefined or contain `AST_Accessor`
-(function(def_may_throw_on_access) {
- AST_Node.DEFMETHOD("may_throw_on_access", function(compressor) {
- return !compressor.option("pure_getters")
- || this._dot_throw(compressor);
- });
-
- function is_strict(compressor) {
- return /strict/.test(compressor.option("pure_getters"));
- }
-
- def_may_throw_on_access(AST_Node, is_strict);
- def_may_throw_on_access(AST_Null, return_true);
- def_may_throw_on_access(AST_Undefined, return_true);
- def_may_throw_on_access(AST_Constant, return_false);
- def_may_throw_on_access(AST_Array, return_false);
- def_may_throw_on_access(AST_Object, function(compressor) {
- if (!is_strict(compressor)) return false;
- for (var i = this.properties.length; --i >=0;)
- if (this.properties[i]._dot_throw(compressor)) return true;
- return false;
- });
- // Do not be as strict with classes as we are with objects.
- // Hopefully the community is not going to abuse static getters and setters.
- // https://github.com/terser/terser/issues/724#issuecomment-643655656
- def_may_throw_on_access(AST_Class, return_false);
- def_may_throw_on_access(AST_ObjectProperty, return_false);
- def_may_throw_on_access(AST_ObjectGetter, return_true);
- def_may_throw_on_access(AST_Expansion, function(compressor) {
- return this.expression._dot_throw(compressor);
- });
- def_may_throw_on_access(AST_Function, return_false);
- def_may_throw_on_access(AST_Arrow, return_false);
- def_may_throw_on_access(AST_UnaryPostfix, return_false);
- def_may_throw_on_access(AST_UnaryPrefix, function() {
- return this.operator == "void";
- });
- def_may_throw_on_access(AST_Binary, function(compressor) {
- return (this.operator == "&&" || this.operator == "||" || this.operator == "??")
- && (this.left._dot_throw(compressor) || this.right._dot_throw(compressor));
- });
- def_may_throw_on_access(AST_Assign, function(compressor) {
- if (this.logical) return true;
-
- return this.operator == "="
- && this.right._dot_throw(compressor);
- });
- def_may_throw_on_access(AST_Conditional, function(compressor) {
- return this.consequent._dot_throw(compressor)
- || this.alternative._dot_throw(compressor);
- });
- def_may_throw_on_access(AST_Dot, function(compressor) {
- if (!is_strict(compressor)) return false;
-
- if (this.property == "prototype") {
- return !(
- this.expression instanceof AST_Function
- || this.expression instanceof AST_Class
- );
- }
- return true;
- });
- def_may_throw_on_access(AST_Chain, function(compressor) {
- return this.expression._dot_throw(compressor);
- });
- def_may_throw_on_access(AST_Sequence, function(compressor) {
- return this.tail_node()._dot_throw(compressor);
- });
- def_may_throw_on_access(AST_SymbolRef, function(compressor) {
- if (this.name === "arguments") return false;
- if (has_flag(this, UNDEFINED)) return true;
- if (!is_strict(compressor)) return false;
- if (is_undeclared_ref(this) && this.is_declared(compressor)) return false;
- if (this.is_immutable()) return false;
- var fixed = this.fixed_value();
- return !fixed || fixed._dot_throw(compressor);
- });
-})(function(node, func) {
- node.DEFMETHOD("_dot_throw", func);
-});
-
-function is_lhs(node, parent) {
- if (parent instanceof AST_Unary && unary_side_effects.has(parent.operator)) return parent.expression;
- if (parent instanceof AST_Assign && parent.left === node) return node;
-}
-
-(function(def_find_defs) {
- function to_node(value, orig) {
- if (value instanceof AST_Node) {
- if (!(value instanceof AST_Constant)) {
- // Value may be a function, an array including functions and even a complex assign / block expression,
- // so it should never be shared in different places.
- // Otherwise wrong information may be used in the compression phase
- value = value.clone(true);
- }
- return make_node(value.CTOR, orig, value);
- }
- if (Array.isArray(value)) return make_node(AST_Array, orig, {
- elements: value.map(function(value) {
- return to_node(value, orig);
- })
- });
- if (value && typeof value == "object") {
- var props = [];
- for (var key in value) if (HOP(value, key)) {
- props.push(make_node(AST_ObjectKeyVal, orig, {
- key: key,
- value: to_node(value[key], orig)
- }));
- }
- return make_node(AST_Object, orig, {
- properties: props
- });
- }
- return make_node_from_constant(value, orig);
- }
-
- AST_Toplevel.DEFMETHOD("resolve_defines", function(compressor) {
- if (!compressor.option("global_defs")) return this;
- this.figure_out_scope({ ie8: compressor.option("ie8") });
- return this.transform(new TreeTransformer(function(node) {
- var def = node._find_defs(compressor, "");
- if (!def) return;
- var level = 0, child = node, parent;
- while (parent = this.parent(level++)) {
- if (!(parent instanceof AST_PropAccess)) break;
- if (parent.expression !== child) break;
- child = parent;
- }
- if (is_lhs(child, parent)) {
- return;
- }
- return def;
- }));
- });
- def_find_defs(AST_Node, noop);
- def_find_defs(AST_Chain, function(compressor, suffix) {
- return this.expression._find_defs(compressor, suffix);
- });
- def_find_defs(AST_Dot, function(compressor, suffix) {
- return this.expression._find_defs(compressor, "." + this.property + suffix);
- });
- def_find_defs(AST_SymbolDeclaration, function() {
- if (!this.global()) return;
- });
- def_find_defs(AST_SymbolRef, function(compressor, suffix) {
- if (!this.global()) return;
- var defines = compressor.option("global_defs");
- var name = this.name + suffix;
- if (HOP(defines, name)) return to_node(defines[name], this);
- });
-})(function(node, func) {
- node.DEFMETHOD("_find_defs", func);
-});
-
-// method to negate an expression
-(function(def_negate) {
- function basic_negation(exp) {
- return make_node(AST_UnaryPrefix, exp, {
- operator: "!",
- expression: exp
- });
- }
- function best(orig, alt, first_in_statement) {
- var negated = basic_negation(orig);
- if (first_in_statement) {
- var stat = make_node(AST_SimpleStatement, alt, {
- body: alt
- });
- return best_of_expression(negated, stat) === stat ? alt : negated;
- }
- return best_of_expression(negated, alt);
- }
- def_negate(AST_Node, function() {
- return basic_negation(this);
- });
- def_negate(AST_Statement, function() {
- throw new Error("Cannot negate a statement");
- });
- def_negate(AST_Function, function() {
- return basic_negation(this);
- });
- def_negate(AST_Arrow, function() {
- return basic_negation(this);
- });
- def_negate(AST_UnaryPrefix, function() {
- if (this.operator == "!")
- return this.expression;
- return basic_negation(this);
- });
- def_negate(AST_Sequence, function(compressor) {
- var expressions = this.expressions.slice();
- expressions.push(expressions.pop().negate(compressor));
- return make_sequence(this, expressions);
- });
- def_negate(AST_Conditional, function(compressor, first_in_statement) {
- var self = this.clone();
- self.consequent = self.consequent.negate(compressor);
- self.alternative = self.alternative.negate(compressor);
- return best(this, self, first_in_statement);
- });
- def_negate(AST_Binary, function(compressor, first_in_statement) {
- var self = this.clone(), op = this.operator;
- if (compressor.option("unsafe_comps")) {
- switch (op) {
- case "<=" : self.operator = ">" ; return self;
- case "<" : self.operator = ">=" ; return self;
- case ">=" : self.operator = "<" ; return self;
- case ">" : self.operator = "<=" ; return self;
- }
- }
- switch (op) {
- case "==" : self.operator = "!="; return self;
- case "!=" : self.operator = "=="; return self;
- case "===": self.operator = "!=="; return self;
- case "!==": self.operator = "==="; return self;
- case "&&":
- self.operator = "||";
- self.left = self.left.negate(compressor, first_in_statement);
- self.right = self.right.negate(compressor);
- return best(this, self, first_in_statement);
- case "||":
- self.operator = "&&";
- self.left = self.left.negate(compressor, first_in_statement);
- self.right = self.right.negate(compressor);
- return best(this, self, first_in_statement);
- }
- return basic_negation(this);
- });
-})(function(node, func) {
- node.DEFMETHOD("negate", function(compressor, first_in_statement) {
- return func.call(this, compressor, first_in_statement);
- });
-});
-
-// Is the callee of this function pure?
-var global_pure_fns = makePredicate("Boolean decodeURI decodeURIComponent Date encodeURI encodeURIComponent Error escape EvalError isFinite isNaN Number Object parseFloat parseInt RangeError ReferenceError String SyntaxError TypeError unescape URIError");
-AST_Call.DEFMETHOD("is_callee_pure", function(compressor) {
- if (compressor.option("unsafe")) {
- var expr = this.expression;
- var first_arg = (this.args && this.args[0] && this.args[0].evaluate(compressor));
- if (
- expr.expression && expr.expression.name === "hasOwnProperty" &&
- (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)
- ) {
- return false;
- }
- if (is_undeclared_ref(expr) && global_pure_fns.has(expr.name)) return true;
- if (
- expr instanceof AST_Dot
- && is_undeclared_ref(expr.expression)
- && is_pure_native_fn(expr.expression.name, expr.property)
- ) {
- return true;
- }
- }
- return !!has_annotation(this, _PURE) || !compressor.pure_funcs(this);
-});
-
-// If I call this, is it a pure function?
-AST_Node.DEFMETHOD("is_call_pure", return_false);
-AST_Dot.DEFMETHOD("is_call_pure", function(compressor) {
- if (!compressor.option("unsafe")) return;
- const expr = this.expression;
-
- let native_obj;
- if (expr instanceof AST_Array) {
- native_obj = "Array";
- } else if (expr.is_boolean()) {
- native_obj = "Boolean";
- } else if (expr.is_number(compressor)) {
- native_obj = "Number";
- } else if (expr instanceof AST_RegExp) {
- native_obj = "RegExp";
- } else if (expr.is_string(compressor)) {
- native_obj = "String";
- } else if (!this.may_throw_on_access(compressor)) {
- native_obj = "Object";
- }
- return native_obj != null && is_pure_native_method(native_obj, this.property);
-});
-
-// tell me if a statement aborts
-const aborts = (thing) => thing && thing.aborts();
-
-(function(def_aborts) {
- def_aborts(AST_Statement, return_null);
- def_aborts(AST_Jump, return_this);
- function block_aborts() {
- for (var i = 0; i < this.body.length; i++) {
- if (aborts(this.body[i])) {
- return this.body[i];
- }
- }
- return null;
- }
- def_aborts(AST_Import, function() { return null; });
- def_aborts(AST_BlockStatement, block_aborts);
- def_aborts(AST_SwitchBranch, block_aborts);
- def_aborts(AST_If, function() {
- return this.alternative && aborts(this.body) && aborts(this.alternative) && this;
- });
-})(function(node, func) {
- node.DEFMETHOD("aborts", func);
-});
-
-function is_modified(compressor, tw, node, value, level, immutable) {
- var parent = tw.parent(level);
- var lhs = is_lhs(node, parent);
- if (lhs) return lhs;
- if (!immutable
- && parent instanceof AST_Call
- && parent.expression === node
- && !(value instanceof AST_Arrow)
- && !(value instanceof AST_Class)
- && !parent.is_callee_pure(compressor)
- && (!(value instanceof AST_Function)
- || !(parent instanceof AST_New) && value.contains_this())) {
- return true;
- }
- if (parent instanceof AST_Array) {
- return is_modified(compressor, tw, parent, parent, level + 1);
- }
- if (parent instanceof AST_ObjectKeyVal && node === parent.value) {
- var obj = tw.parent(level + 1);
- return is_modified(compressor, tw, obj, obj, level + 2);
- }
- if (parent instanceof AST_PropAccess && parent.expression === node) {
- var prop = read_property(value, parent.property);
- return !immutable && is_modified(compressor, tw, parent, prop, level + 1);
- }
-}
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-// methods to evaluate a constant expression
-
-function def_eval(node, func) {
- node.DEFMETHOD("_eval", func);
-}
-
-// Used to propagate a nullish short-circuit signal upwards through the chain.
-const nullish = Symbol("This AST_Chain is nullish");
-
-// If the node has been successfully reduced to a constant,
-// then its value is returned; otherwise the element itself
-// is returned.
-// They can be distinguished as constant value is never a
-// descendant of AST_Node.
-AST_Node.DEFMETHOD("evaluate", function (compressor) {
- if (!compressor.option("evaluate"))
- return this;
- var val = this._eval(compressor, 1);
- if (!val || val instanceof RegExp)
- return val;
- if (typeof val == "function" || typeof val == "object" || val == nullish)
- return this;
- return val;
-});
-
-var unaryPrefix = makePredicate("! ~ - + void");
-AST_Node.DEFMETHOD("is_constant", function () {
- // Accomodate when compress option evaluate=false
- // as well as the common constant expressions !0 and -1
- if (this instanceof AST_Constant) {
- return !(this instanceof AST_RegExp);
- } else {
- return this instanceof AST_UnaryPrefix
- && this.expression instanceof AST_Constant
- && unaryPrefix.has(this.operator);
- }
-});
-
-def_eval(AST_Statement, function () {
- throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start));
-});
-
-def_eval(AST_Lambda, return_this);
-def_eval(AST_Class, return_this);
-def_eval(AST_Node, return_this);
-def_eval(AST_Constant, function () {
- return this.getValue();
-});
-
-def_eval(AST_BigInt, return_this);
-
-def_eval(AST_RegExp, function (compressor) {
- let evaluated = compressor.evaluated_regexps.get(this);
- if (evaluated === undefined) {
- try {
- evaluated = (0, eval)(this.print_to_string());
- } catch (e) {
- evaluated = null;
- }
- compressor.evaluated_regexps.set(this, evaluated);
- }
- return evaluated || this;
-});
-
-def_eval(AST_TemplateString, function () {
- if (this.segments.length !== 1) return this;
- return this.segments[0].value;
-});
-
-def_eval(AST_Function, function (compressor) {
- if (compressor.option("unsafe")) {
- var fn = function () { };
- fn.node = this;
- fn.toString = () => this.print_to_string();
- return fn;
- }
- return this;
-});
-
-def_eval(AST_Array, function (compressor, depth) {
- if (compressor.option("unsafe")) {
- var elements = [];
- for (var i = 0, len = this.elements.length; i < len; i++) {
- var element = this.elements[i];
- var value = element._eval(compressor, depth);
- if (element === value)
- return this;
- elements.push(value);
- }
- return elements;
- }
- return this;
-});
-
-def_eval(AST_Object, function (compressor, depth) {
- if (compressor.option("unsafe")) {
- var val = {};
- for (var i = 0, len = this.properties.length; i < len; i++) {
- var prop = this.properties[i];
- if (prop instanceof AST_Expansion)
- return this;
- var key = prop.key;
- if (key instanceof AST_Symbol) {
- key = key.name;
- } else if (key instanceof AST_Node) {
- key = key._eval(compressor, depth);
- if (key === prop.key)
- return this;
- }
- if (typeof Object.prototype[key] === "function") {
- return this;
- }
- if (prop.value instanceof AST_Function)
- continue;
- val[key] = prop.value._eval(compressor, depth);
- if (val[key] === prop.value)
- return this;
- }
- return val;
- }
- return this;
-});
-
-var non_converting_unary = makePredicate("! typeof void");
-def_eval(AST_UnaryPrefix, function (compressor, depth) {
- var e = this.expression;
- // Function would be evaluated to an array and so typeof would
- // incorrectly return 'object'. Hence making is a special case.
- if (compressor.option("typeofs")
- && this.operator == "typeof"
- && (e instanceof AST_Lambda
- || e instanceof AST_SymbolRef
- && e.fixed_value() instanceof AST_Lambda)) {
- return typeof function () { };
- }
- if (!non_converting_unary.has(this.operator))
- depth++;
- e = e._eval(compressor, depth);
- if (e === this.expression)
- return this;
- switch (this.operator) {
- case "!": return !e;
- case "typeof":
- // typeof <RegExp> returns "object" or "function" on different platforms
- // so cannot evaluate reliably
- if (e instanceof RegExp)
- return this;
- return typeof e;
- case "void": return void e;
- case "~": return ~e;
- case "-": return -e;
- case "+": return +e;
- }
- return this;
-});
-
-var non_converting_binary = makePredicate("&& || ?? === !==");
-const identity_comparison = makePredicate("== != === !==");
-const has_identity = value => typeof value === "object"
- || typeof value === "function"
- || typeof value === "symbol";
-
-def_eval(AST_Binary, function (compressor, depth) {
- if (!non_converting_binary.has(this.operator))
- depth++;
-
- var left = this.left._eval(compressor, depth);
- if (left === this.left)
- return this;
- var right = this.right._eval(compressor, depth);
- if (right === this.right)
- return this;
- var result;
-
- if (left != null
- && right != null
- && identity_comparison.has(this.operator)
- && has_identity(left)
- && has_identity(right)
- && typeof left === typeof right) {
- // Do not compare by reference
- return this;
- }
-
- switch (this.operator) {
- case "&&": result = left && right; break;
- case "||": result = left || right; break;
- case "??": result = left != null ? left : right; break;
- case "|": result = left | right; break;
- case "&": result = left & right; break;
- case "^": result = left ^ right; break;
- case "+": result = left + right; break;
- case "*": result = left * right; break;
- case "**": result = Math.pow(left, right); break;
- case "/": result = left / right; break;
- case "%": result = left % right; break;
- case "-": result = left - right; break;
- case "<<": result = left << right; break;
- case ">>": result = left >> right; break;
- case ">>>": result = left >>> right; break;
- case "==": result = left == right; break;
- case "===": result = left === right; break;
- case "!=": result = left != right; break;
- case "!==": result = left !== right; break;
- case "<": result = left < right; break;
- case "<=": result = left <= right; break;
- case ">": result = left > right; break;
- case ">=": result = left >= right; break;
- default:
- return this;
- }
- if (isNaN(result) && compressor.find_parent(AST_With)) {
- // leave original expression as is
- return this;
- }
- return result;
-});
-
-def_eval(AST_Conditional, function (compressor, depth) {
- var condition = this.condition._eval(compressor, depth);
- if (condition === this.condition)
- return this;
- var node = condition ? this.consequent : this.alternative;
- var value = node._eval(compressor, depth);
- return value === node ? this : value;
-});
-
-// Set of AST_SymbolRef which are currently being evaluated.
-// Avoids infinite recursion of ._eval()
-const reentrant_ref_eval = new Set();
-def_eval(AST_SymbolRef, function (compressor, depth) {
- if (reentrant_ref_eval.has(this))
- return this;
-
- var fixed = this.fixed_value();
- if (!fixed)
- return this;
-
- reentrant_ref_eval.add(this);
- const value = fixed._eval(compressor, depth);
- reentrant_ref_eval.delete(this);
-
- if (value === fixed)
- return this;
-
- if (value && typeof value == "object") {
- var escaped = this.definition().escaped;
- if (escaped && depth > escaped)
- return this;
- }
- return value;
-});
-
-const global_objs = { Array, Math, Number, Object, String };
-
-const regexp_flags = new Set([
- "dotAll",
- "global",
- "ignoreCase",
- "multiline",
- "sticky",
- "unicode",
-]);
-
-def_eval(AST_PropAccess, function (compressor, depth) {
- const obj = this.expression._eval(compressor, depth);
- if (obj === nullish || (this.optional && obj == null)) return nullish;
- if (compressor.option("unsafe")) {
- var key = this.property;
- if (key instanceof AST_Node) {
- key = key._eval(compressor, depth);
- if (key === this.property)
- return this;
- }
- var exp = this.expression;
- var val;
- if (is_undeclared_ref(exp)) {
-
- var aa;
- var first_arg = exp.name === "hasOwnProperty"
- && key === "call"
- && (aa = compressor.parent() && compressor.parent().args)
- && (aa && aa[0]
- && aa[0].evaluate(compressor));
-
- first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg;
-
- if (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared) {
- return this.clone();
- }
- if (!is_pure_native_value(exp.name, key))
- return this;
- val = global_objs[exp.name];
- } else {
- val = exp._eval(compressor, depth + 1);
- if (val instanceof RegExp) {
- if (key == "source") {
- return regexp_source_fix(val.source);
- } else if (key == "flags" || regexp_flags.has(key)) {
- return val[key];
- }
- }
- if (!val || val === exp || !HOP(val, key))
- return this;
- if (typeof val == "function")
- switch (key) {
- case "name":
- return val.node.name ? val.node.name.name : "";
- case "length":
- return val.node.length_property();
- default:
- return this;
- }
- }
- return val[key];
- }
- return this;
-});
-
-def_eval(AST_Chain, function (compressor, depth) {
- const evaluated = this.expression._eval(compressor, depth);
- return evaluated === nullish
- ? undefined
- : evaluated === this.expression
- ? this
- : evaluated;
-});
-
-def_eval(AST_Call, function (compressor, depth) {
- var exp = this.expression;
-
- const callee = exp._eval(compressor, depth);
- if (callee === nullish || (this.optional && callee == null)) return nullish;
-
- if (compressor.option("unsafe") && exp instanceof AST_PropAccess) {
- var key = exp.property;
- if (key instanceof AST_Node) {
- key = key._eval(compressor, depth);
- if (key === exp.property)
- return this;
- }
- var val;
- var e = exp.expression;
- if (is_undeclared_ref(e)) {
- var first_arg = e.name === "hasOwnProperty" &&
- key === "call" &&
- (this.args[0] && this.args[0].evaluate(compressor));
-
- first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg;
-
- if ((first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)) {
- return this.clone();
- }
- if (!is_pure_native_fn(e.name, key)) return this;
- val = global_objs[e.name];
- } else {
- val = e._eval(compressor, depth + 1);
- if (val === e || !val)
- return this;
- if (!is_pure_native_method(val.constructor.name, key))
- return this;
- }
- var args = [];
- for (var i = 0, len = this.args.length; i < len; i++) {
- var arg = this.args[i];
- var value = arg._eval(compressor, depth);
- if (arg === value)
- return this;
- if (arg instanceof AST_Lambda)
- return this;
- args.push(value);
- }
- try {
- return val[key].apply(val, args);
- } catch (ex) {
- // We don't really care
- }
- }
- return this;
-});
-
-// Also a subclass of AST_Call
-def_eval(AST_New, return_this);
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-// AST_Node#drop_side_effect_free() gets called when we don't care about the value,
-// only about side effects. We'll be defining this method for each node type in this module
-//
-// Examples:
-// foo++ -> foo++
-// 1 + func() -> func()
-// 10 -> (nothing)
-// knownPureFunc(foo++) -> foo++
-
-function def_drop_side_effect_free(node, func) {
- node.DEFMETHOD("drop_side_effect_free", func);
-}
-
-// Drop side-effect-free elements from an array of expressions.
-// Returns an array of expressions with side-effects or null
-// if all elements were dropped. Note: original array may be
-// returned if nothing changed.
-function trim(nodes, compressor, first_in_statement) {
- var len = nodes.length;
- if (!len) return null;
-
- var ret = [], changed = false;
- for (var i = 0; i < len; i++) {
- var node = nodes[i].drop_side_effect_free(compressor, first_in_statement);
- changed |= node !== nodes[i];
- if (node) {
- ret.push(node);
- first_in_statement = false;
- }
- }
- return changed ? ret.length ? ret : null : nodes;
-}
-
-def_drop_side_effect_free(AST_Node, return_this);
-def_drop_side_effect_free(AST_Constant, return_null);
-def_drop_side_effect_free(AST_This, return_null);
-
-def_drop_side_effect_free(AST_Call, function (compressor, first_in_statement) {
- if (is_nullish_shortcircuited(this, compressor)) {
- return this.expression.drop_side_effect_free(compressor, first_in_statement);
- }
-
- if (!this.is_callee_pure(compressor)) {
- if (this.expression.is_call_pure(compressor)) {
- var exprs = this.args.slice();
- exprs.unshift(this.expression.expression);
- exprs = trim(exprs, compressor, first_in_statement);
- return exprs && make_sequence(this, exprs);
- }
- if (is_func_expr(this.expression)
- && (!this.expression.name || !this.expression.name.definition().references.length)) {
- var node = this.clone();
- node.expression.process_expression(false, compressor);
- return node;
- }
- return this;
- }
-
- var args = trim(this.args, compressor, first_in_statement);
- return args && make_sequence(this, args);
-});
-
-def_drop_side_effect_free(AST_Accessor, return_null);
-
-def_drop_side_effect_free(AST_Function, return_null);
-
-def_drop_side_effect_free(AST_Arrow, return_null);
-
-def_drop_side_effect_free(AST_Class, function (compressor) {
- const with_effects = [];
- const trimmed_extends = this.extends && this.extends.drop_side_effect_free(compressor);
- if (trimmed_extends)
- with_effects.push(trimmed_extends);
- for (const prop of this.properties) {
- const trimmed_prop = prop.drop_side_effect_free(compressor);
- if (trimmed_prop)
- with_effects.push(trimmed_prop);
- }
- if (!with_effects.length)
- return null;
- return make_sequence(this, with_effects);
-});
-
-def_drop_side_effect_free(AST_Binary, function (compressor, first_in_statement) {
- var right = this.right.drop_side_effect_free(compressor);
- if (!right)
- return this.left.drop_side_effect_free(compressor, first_in_statement);
- if (lazy_op.has(this.operator)) {
- if (right === this.right)
- return this;
- var node = this.clone();
- node.right = right;
- return node;
- } else {
- var left = this.left.drop_side_effect_free(compressor, first_in_statement);
- if (!left)
- return this.right.drop_side_effect_free(compressor, first_in_statement);
- return make_sequence(this, [left, right]);
- }
-});
-
-def_drop_side_effect_free(AST_Assign, function (compressor) {
- if (this.logical)
- return this;
-
- var left = this.left;
- if (left.has_side_effects(compressor)
- || compressor.has_directive("use strict")
- && left instanceof AST_PropAccess
- && left.expression.is_constant()) {
- return this;
- }
- set_flag(this, WRITE_ONLY);
- while (left instanceof AST_PropAccess) {
- left = left.expression;
- }
- if (left.is_constant_expression(compressor.find_parent(AST_Scope))) {
- return this.right.drop_side_effect_free(compressor);
- }
- return this;
-});
-
-def_drop_side_effect_free(AST_Conditional, function (compressor) {
- var consequent = this.consequent.drop_side_effect_free(compressor);
- var alternative = this.alternative.drop_side_effect_free(compressor);
- if (consequent === this.consequent && alternative === this.alternative)
- return this;
- if (!consequent)
- return alternative ? make_node(AST_Binary, this, {
- operator: "||",
- left: this.condition,
- right: alternative
- }) : this.condition.drop_side_effect_free(compressor);
- if (!alternative)
- return make_node(AST_Binary, this, {
- operator: "&&",
- left: this.condition,
- right: consequent
- });
- var node = this.clone();
- node.consequent = consequent;
- node.alternative = alternative;
- return node;
-});
-
-def_drop_side_effect_free(AST_Unary, function (compressor, first_in_statement) {
- if (unary_side_effects.has(this.operator)) {
- if (!this.expression.has_side_effects(compressor)) {
- set_flag(this, WRITE_ONLY);
- } else {
- clear_flag(this, WRITE_ONLY);
- }
- return this;
- }
- if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef)
- return null;
- var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);
- if (first_in_statement && expression && is_iife_call(expression)) {
- if (expression === this.expression && this.operator == "!")
- return this;
- return expression.negate(compressor, first_in_statement);
- }
- return expression;
-});
-
-def_drop_side_effect_free(AST_SymbolRef, function (compressor) {
- const safe_access = this.is_declared(compressor)
- || pure_prop_access_globals.has(this.name);
- return safe_access ? null : this;
-});
-
-def_drop_side_effect_free(AST_Object, function (compressor, first_in_statement) {
- var values = trim(this.properties, compressor, first_in_statement);
- return values && make_sequence(this, values);
-});
-
-def_drop_side_effect_free(AST_ObjectProperty, function (compressor, first_in_statement) {
- const computed_key = this instanceof AST_ObjectKeyVal && this.key instanceof AST_Node;
- const key = computed_key && this.key.drop_side_effect_free(compressor, first_in_statement);
- const value = this.value && this.value.drop_side_effect_free(compressor, first_in_statement);
- if (key && value) {
- return make_sequence(this, [key, value]);
- }
- return key || value;
-});
-
-def_drop_side_effect_free(AST_ClassProperty, function (compressor) {
- const key = this.computed_key() && this.key.drop_side_effect_free(compressor);
-
- const value = this.static && this.value
- && this.value.drop_side_effect_free(compressor);
-
- if (key && value)
- return make_sequence(this, [key, value]);
- return key || value || null;
-});
-
-def_drop_side_effect_free(AST_ConciseMethod, function () {
- return this.computed_key() ? this.key : null;
-});
-
-def_drop_side_effect_free(AST_ObjectGetter, function () {
- return this.computed_key() ? this.key : null;
-});
-
-def_drop_side_effect_free(AST_ObjectSetter, function () {
- return this.computed_key() ? this.key : null;
-});
-
-def_drop_side_effect_free(AST_Array, function (compressor, first_in_statement) {
- var values = trim(this.elements, compressor, first_in_statement);
- return values && make_sequence(this, values);
-});
-
-def_drop_side_effect_free(AST_Dot, function (compressor, first_in_statement) {
- if (is_nullish_shortcircuited(this, compressor)) {
- return this.expression.drop_side_effect_free(compressor, first_in_statement);
- }
- if (this.expression.may_throw_on_access(compressor)) return this;
-
- return this.expression.drop_side_effect_free(compressor, first_in_statement);
-});
-
-def_drop_side_effect_free(AST_Sub, function (compressor, first_in_statement) {
- if (is_nullish_shortcircuited(this, compressor)) {
- return this.expression.drop_side_effect_free(compressor, first_in_statement);
- }
- if (this.expression.may_throw_on_access(compressor)) return this;
-
- var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);
- if (!expression)
- return this.property.drop_side_effect_free(compressor, first_in_statement);
- var property = this.property.drop_side_effect_free(compressor);
- if (!property)
- return expression;
- return make_sequence(this, [expression, property]);
-});
-
-def_drop_side_effect_free(AST_Chain, function (compressor, first_in_statement) {
- return this.expression.drop_side_effect_free(compressor, first_in_statement);
-});
-
-def_drop_side_effect_free(AST_Sequence, function (compressor) {
- var last = this.tail_node();
- var expr = last.drop_side_effect_free(compressor);
- if (expr === last)
- return this;
- var expressions = this.expressions.slice(0, -1);
- if (expr)
- expressions.push(expr);
- if (!expressions.length) {
- return make_node(AST_Number, this, { value: 0 });
- }
- return make_sequence(this, expressions);
-});
-
-def_drop_side_effect_free(AST_Expansion, function (compressor, first_in_statement) {
- return this.expression.drop_side_effect_free(compressor, first_in_statement);
-});
-
-def_drop_side_effect_free(AST_TemplateSegment, return_null);
-
-def_drop_side_effect_free(AST_TemplateString, function (compressor) {
- var values = trim(this.segments, compressor, first_in_statement);
- return values && make_sequence(this, values);
-});
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-// Define the method AST_Node#reduce_vars, which goes through the AST in
-// execution order to perform basic flow analysis
-
-function def_reduce_vars(node, func) {
- node.DEFMETHOD("reduce_vars", func);
-}
-
-def_reduce_vars(AST_Node, noop);
-
-function reset_def(compressor, def) {
- def.assignments = 0;
- def.chained = false;
- def.direct_access = false;
- def.escaped = 0;
- def.recursive_refs = 0;
- def.references = [];
- def.single_use = undefined;
- if (def.scope.pinned()) {
- def.fixed = false;
- } else if (def.orig[0] instanceof AST_SymbolConst || !compressor.exposed(def)) {
- def.fixed = def.init;
- } else {
- def.fixed = false;
- }
-}
-
-function reset_variables(tw, compressor, node) {
- node.variables.forEach(function(def) {
- reset_def(compressor, def);
- if (def.fixed === null) {
- tw.defs_to_safe_ids.set(def.id, tw.safe_ids);
- mark(tw, def, true);
- } else if (def.fixed) {
- tw.loop_ids.set(def.id, tw.in_loop);
- mark(tw, def, true);
- }
- });
-}
-
-function reset_block_variables(compressor, node) {
- if (node.block_scope) node.block_scope.variables.forEach((def) => {
- reset_def(compressor, def);
- });
-}
-
-function push(tw) {
- tw.safe_ids = Object.create(tw.safe_ids);
-}
-
-function pop(tw) {
- tw.safe_ids = Object.getPrototypeOf(tw.safe_ids);
-}
-
-function mark(tw, def, safe) {
- tw.safe_ids[def.id] = safe;
-}
-
-function safe_to_read(tw, def) {
- if (def.single_use == "m") return false;
- if (tw.safe_ids[def.id]) {
- if (def.fixed == null) {
- var orig = def.orig[0];
- if (orig instanceof AST_SymbolFunarg || orig.name == "arguments") return false;
- def.fixed = make_node(AST_Undefined, orig);
- }
- return true;
- }
- return def.fixed instanceof AST_Defun;
-}
-
-function safe_to_assign(tw, def, scope, value) {
- if (def.fixed === undefined) return true;
- let def_safe_ids;
- if (def.fixed === null
- && (def_safe_ids = tw.defs_to_safe_ids.get(def.id))
- ) {
- def_safe_ids[def.id] = false;
- tw.defs_to_safe_ids.delete(def.id);
- return true;
- }
- if (!HOP(tw.safe_ids, def.id)) return false;
- if (!safe_to_read(tw, def)) return false;
- if (def.fixed === false) return false;
- if (def.fixed != null && (!value || def.references.length > def.assignments)) return false;
- if (def.fixed instanceof AST_Defun) {
- return value instanceof AST_Node && def.fixed.parent_scope === scope;
- }
- return def.orig.every((sym) => {
- return !(sym instanceof AST_SymbolConst
- || sym instanceof AST_SymbolDefun
- || sym instanceof AST_SymbolLambda);
- });
-}
-
-function ref_once(tw, compressor, def) {
- return compressor.option("unused")
- && !def.scope.pinned()
- && def.references.length - def.recursive_refs == 1
- && tw.loop_ids.get(def.id) === tw.in_loop;
-}
-
-function is_immutable(value) {
- if (!value) return false;
- return value.is_constant()
- || value instanceof AST_Lambda
- || value instanceof AST_This;
-}
-
-// A definition "escapes" when its value can leave the point of use.
-// Example: `a = b || c`
-// In this example, "b" and "c" are escaping, because they're going into "a"
-//
-// def.escaped is != 0 when it escapes.
-//
-// When greater than 1, it means that N chained properties will be read off
-// of that def before an escape occurs. This is useful for evaluating
-// property accesses, where you need to know when to stop.
-function mark_escaped(tw, d, scope, node, value, level = 0, depth = 1) {
- var parent = tw.parent(level);
- if (value) {
- if (value.is_constant()) return;
- if (value instanceof AST_ClassExpression) return;
- }
-
- if (
- parent instanceof AST_Assign && (parent.operator === "=" || parent.logical) && node === parent.right
- || parent instanceof AST_Call && (node !== parent.expression || parent instanceof AST_New)
- || parent instanceof AST_Exit && node === parent.value && node.scope !== d.scope
- || parent instanceof AST_VarDef && node === parent.value
- || parent instanceof AST_Yield && node === parent.value && node.scope !== d.scope
- ) {
- if (depth > 1 && !(value && value.is_constant_expression(scope))) depth = 1;
- if (!d.escaped || d.escaped > depth) d.escaped = depth;
- return;
- } else if (
- parent instanceof AST_Array
- || parent instanceof AST_Await
- || parent instanceof AST_Binary && lazy_op.has(parent.operator)
- || parent instanceof AST_Conditional && node !== parent.condition
- || parent instanceof AST_Expansion
- || parent instanceof AST_Sequence && node === parent.tail_node()
- ) {
- mark_escaped(tw, d, scope, parent, parent, level + 1, depth);
- } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) {
- var obj = tw.parent(level + 1);
-
- mark_escaped(tw, d, scope, obj, obj, level + 2, depth);
- } else if (parent instanceof AST_PropAccess && node === parent.expression) {
- value = read_property(value, parent.property);
-
- mark_escaped(tw, d, scope, parent, value, level + 1, depth + 1);
- if (value) return;
- }
-
- if (level > 0) return;
- if (parent instanceof AST_Sequence && node !== parent.tail_node()) return;
- if (parent instanceof AST_SimpleStatement) return;
-
- d.direct_access = true;
-}
-
-const suppress = node => walk(node, node => {
- if (!(node instanceof AST_Symbol)) return;
- var d = node.definition();
- if (!d) return;
- if (node instanceof AST_SymbolRef) d.references.push(node);
- d.fixed = false;
-});
-
-def_reduce_vars(AST_Accessor, function(tw, descend, compressor) {
- push(tw);
- reset_variables(tw, compressor, this);
- descend();
- pop(tw);
- return true;
-});
-
-def_reduce_vars(AST_Assign, function(tw, descend, compressor) {
- var node = this;
- if (node.left instanceof AST_Destructuring) {
- suppress(node.left);
- return;
- }
-
- const finish_walk = () => {
- if (node.logical) {
- node.left.walk(tw);
-
- push(tw);
- node.right.walk(tw);
- pop(tw);
-
- return true;
- }
- };
-
- var sym = node.left;
- if (!(sym instanceof AST_SymbolRef)) return finish_walk();
-
- var def = sym.definition();
- var safe = safe_to_assign(tw, def, sym.scope, node.right);
- def.assignments++;
- if (!safe) return finish_walk();
-
- var fixed = def.fixed;
- if (!fixed && node.operator != "=" && !node.logical) return finish_walk();
-
- var eq = node.operator == "=";
- var value = eq ? node.right : node;
- if (is_modified(compressor, tw, node, value, 0)) return finish_walk();
-
- def.references.push(sym);
-
- if (!node.logical) {
- if (!eq) def.chained = true;
-
- def.fixed = eq ? function() {
- return node.right;
- } : function() {
- return make_node(AST_Binary, node, {
- operator: node.operator.slice(0, -1),
- left: fixed instanceof AST_Node ? fixed : fixed(),
- right: node.right
- });
- };
- }
-
- if (node.logical) {
- mark(tw, def, false);
- push(tw);
- node.right.walk(tw);
- pop(tw);
- return true;
- }
-
- mark(tw, def, false);
- node.right.walk(tw);
- mark(tw, def, true);
-
- mark_escaped(tw, def, sym.scope, node, value, 0, 1);
-
- return true;
-});
-
-def_reduce_vars(AST_Binary, function(tw) {
- if (!lazy_op.has(this.operator)) return;
- this.left.walk(tw);
- push(tw);
- this.right.walk(tw);
- pop(tw);
- return true;
-});
-
-def_reduce_vars(AST_Block, function(tw, descend, compressor) {
- reset_block_variables(compressor, this);
-});
-
-def_reduce_vars(AST_Case, function(tw) {
- push(tw);
- this.expression.walk(tw);
- pop(tw);
- push(tw);
- walk_body(this, tw);
- pop(tw);
- return true;
-});
-
-def_reduce_vars(AST_Class, function(tw, descend) {
- clear_flag(this, INLINED);
- push(tw);
- descend();
- pop(tw);
- return true;
-});
-
-def_reduce_vars(AST_Conditional, function(tw) {
- this.condition.walk(tw);
- push(tw);
- this.consequent.walk(tw);
- pop(tw);
- push(tw);
- this.alternative.walk(tw);
- pop(tw);
- return true;
-});
-
-def_reduce_vars(AST_Chain, function(tw, descend) {
- // Chains' conditions apply left-to-right, cumulatively.
- // If we walk normally we don't go in that order because we would pop before pushing again
- // Solution: AST_PropAccess and AST_Call push when they are optional, and never pop.
- // Then we pop everything when they are done being walked.
- const safe_ids = tw.safe_ids;
-
- descend();
-
- // Unroll back to start
- tw.safe_ids = safe_ids;
- return true;
-});
-
-def_reduce_vars(AST_Call, function (tw) {
- this.expression.walk(tw);
-
- if (this.optional) {
- // Never pop -- it's popped at AST_Chain above
- push(tw);
- }
-
- for (const arg of this.args) arg.walk(tw);
-
- return true;
-});
-
-def_reduce_vars(AST_PropAccess, function (tw) {
- if (!this.optional) return;
-
- this.expression.walk(tw);
-
- // Never pop -- it's popped at AST_Chain above
- push(tw);
-
- if (this.property instanceof AST_Node) this.property.walk(tw);
-
- return true;
-});
-
-def_reduce_vars(AST_Default, function(tw, descend) {
- push(tw);
- descend();
- pop(tw);
- return true;
-});
-
-function mark_lambda(tw, descend, compressor) {
- clear_flag(this, INLINED);
- push(tw);
- reset_variables(tw, compressor, this);
- if (this.uses_arguments) {
- descend();
- pop(tw);
- return;
- }
- var iife;
- if (!this.name
- && (iife = tw.parent()) instanceof AST_Call
- && iife.expression === this
- && !iife.args.some(arg => arg instanceof AST_Expansion)
- && this.argnames.every(arg_name => arg_name instanceof AST_Symbol)
- ) {
- // Virtually turn IIFE parameters into variable definitions:
- // (function(a,b) {...})(c,d) => (function() {var a=c,b=d; ...})()
- // So existing transformation rules can work on them.
- this.argnames.forEach((arg, i) => {
- if (!arg.definition) return;
- var d = arg.definition();
- // Avoid setting fixed when there's more than one origin for a variable value
- if (d.orig.length > 1) return;
- if (d.fixed === undefined && (!this.uses_arguments || tw.has_directive("use strict"))) {
- d.fixed = function() {
- return iife.args[i] || make_node(AST_Undefined, iife);
- };
- tw.loop_ids.set(d.id, tw.in_loop);
- mark(tw, d, true);
- } else {
- d.fixed = false;
- }
- });
- }
- descend();
- pop(tw);
- return true;
-}
-
-def_reduce_vars(AST_Lambda, mark_lambda);
-
-def_reduce_vars(AST_Do, function(tw, descend, compressor) {
- reset_block_variables(compressor, this);
- const saved_loop = tw.in_loop;
- tw.in_loop = this;
- push(tw);
- this.body.walk(tw);
- if (has_break_or_continue(this)) {
- pop(tw);
- push(tw);
- }
- this.condition.walk(tw);
- pop(tw);
- tw.in_loop = saved_loop;
- return true;
-});
-
-def_reduce_vars(AST_For, function(tw, descend, compressor) {
- reset_block_variables(compressor, this);
- if (this.init) this.init.walk(tw);
- const saved_loop = tw.in_loop;
- tw.in_loop = this;
- push(tw);
- if (this.condition) this.condition.walk(tw);
- this.body.walk(tw);
- if (this.step) {
- if (has_break_or_continue(this)) {
- pop(tw);
- push(tw);
- }
- this.step.walk(tw);
- }
- pop(tw);
- tw.in_loop = saved_loop;
- return true;
-});
-
-def_reduce_vars(AST_ForIn, function(tw, descend, compressor) {
- reset_block_variables(compressor, this);
- suppress(this.init);
- this.object.walk(tw);
- const saved_loop = tw.in_loop;
- tw.in_loop = this;
- push(tw);
- this.body.walk(tw);
- pop(tw);
- tw.in_loop = saved_loop;
- return true;
-});
-
-def_reduce_vars(AST_If, function(tw) {
- this.condition.walk(tw);
- push(tw);
- this.body.walk(tw);
- pop(tw);
- if (this.alternative) {
- push(tw);
- this.alternative.walk(tw);
- pop(tw);
- }
- return true;
-});
-
-def_reduce_vars(AST_LabeledStatement, function(tw) {
- push(tw);
- this.body.walk(tw);
- pop(tw);
- return true;
-});
-
-def_reduce_vars(AST_SymbolCatch, function() {
- this.definition().fixed = false;
-});
-
-def_reduce_vars(AST_SymbolRef, function(tw, descend, compressor) {
- var d = this.definition();
- d.references.push(this);
- if (d.references.length == 1
- && !d.fixed
- && d.orig[0] instanceof AST_SymbolDefun) {
- tw.loop_ids.set(d.id, tw.in_loop);
- }
- var fixed_value;
- if (d.fixed === undefined || !safe_to_read(tw, d)) {
- d.fixed = false;
- } else if (d.fixed) {
- fixed_value = this.fixed_value();
- if (
- fixed_value instanceof AST_Lambda
- && is_recursive_ref(tw, d)
- ) {
- d.recursive_refs++;
- } else if (fixed_value
- && !compressor.exposed(d)
- && ref_once(tw, compressor, d)
- ) {
- d.single_use =
- fixed_value instanceof AST_Lambda && !fixed_value.pinned()
- || fixed_value instanceof AST_Class
- || d.scope === this.scope && fixed_value.is_constant_expression();
- } else {
- d.single_use = false;
- }
- if (is_modified(compressor, tw, this, fixed_value, 0, is_immutable(fixed_value))) {
- if (d.single_use) {
- d.single_use = "m";
- } else {
- d.fixed = false;
- }
- }
- }
- mark_escaped(tw, d, this.scope, this, fixed_value, 0, 1);
-});
-
-def_reduce_vars(AST_Toplevel, function(tw, descend, compressor) {
- this.globals.forEach(function(def) {
- reset_def(compressor, def);
- });
- reset_variables(tw, compressor, this);
-});
-
-def_reduce_vars(AST_Try, function(tw, descend, compressor) {
- reset_block_variables(compressor, this);
- push(tw);
- walk_body(this, tw);
- pop(tw);
- if (this.bcatch) {
- push(tw);
- this.bcatch.walk(tw);
- pop(tw);
- }
- if (this.bfinally) this.bfinally.walk(tw);
- return true;
-});
-
-def_reduce_vars(AST_Unary, function(tw) {
- var node = this;
- if (node.operator !== "++" && node.operator !== "--") return;
- var exp = node.expression;
- if (!(exp instanceof AST_SymbolRef)) return;
- var def = exp.definition();
- var safe = safe_to_assign(tw, def, exp.scope, true);
- def.assignments++;
- if (!safe) return;
- var fixed = def.fixed;
- if (!fixed) return;
- def.references.push(exp);
- def.chained = true;
- def.fixed = function() {
- return make_node(AST_Binary, node, {
- operator: node.operator.slice(0, -1),
- left: make_node(AST_UnaryPrefix, node, {
- operator: "+",
- expression: fixed instanceof AST_Node ? fixed : fixed()
- }),
- right: make_node(AST_Number, node, {
- value: 1
- })
- });
- };
- mark(tw, def, true);
- return true;
-});
-
-def_reduce_vars(AST_VarDef, function(tw, descend) {
- var node = this;
- if (node.name instanceof AST_Destructuring) {
- suppress(node.name);
- return;
- }
- var d = node.name.definition();
- if (node.value) {
- if (safe_to_assign(tw, d, node.name.scope, node.value)) {
- d.fixed = function() {
- return node.value;
- };
- tw.loop_ids.set(d.id, tw.in_loop);
- mark(tw, d, false);
- descend();
- mark(tw, d, true);
- return true;
- } else {
- d.fixed = false;
- }
- }
-});
-
-def_reduce_vars(AST_While, function(tw, descend, compressor) {
- reset_block_variables(compressor, this);
- const saved_loop = tw.in_loop;
- tw.in_loop = this;
- push(tw);
- descend();
- pop(tw);
- tw.in_loop = saved_loop;
- return true;
-});
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-function loop_body(x) {
- if (x instanceof AST_IterationStatement) {
- return x.body instanceof AST_BlockStatement ? x.body : x;
- }
- return x;
-}
-
-function is_lhs_read_only(lhs) {
- if (lhs instanceof AST_This) return true;
- if (lhs instanceof AST_SymbolRef) return lhs.definition().orig[0] instanceof AST_SymbolLambda;
- if (lhs instanceof AST_PropAccess) {
- lhs = lhs.expression;
- if (lhs instanceof AST_SymbolRef) {
- if (lhs.is_immutable()) return false;
- lhs = lhs.fixed_value();
- }
- if (!lhs) return true;
- if (lhs instanceof AST_RegExp) return false;
- if (lhs instanceof AST_Constant) return true;
- return is_lhs_read_only(lhs);
- }
- return false;
-}
-
-// Remove code which we know is unreachable.
-function trim_unreachable_code(compressor, stat, target) {
- walk(stat, node => {
- if (node instanceof AST_Var) {
- node.remove_initializers();
- target.push(node);
- return true;
- }
- if (
- node instanceof AST_Defun
- && (node === stat || !compressor.has_directive("use strict"))
- ) {
- target.push(node === stat ? node : make_node(AST_Var, node, {
- definitions: [
- make_node(AST_VarDef, node, {
- name: make_node(AST_SymbolVar, node.name, node.name),
- value: null
- })
- ]
- }));
- return true;
- }
- if (node instanceof AST_Export || node instanceof AST_Import) {
- target.push(node);
- return true;
- }
- if (node instanceof AST_Scope) {
- return true;
- }
- });
-}
-
-// Tighten a bunch of statements together, and perform statement-level optimization.
-function tighten_body(statements, compressor) {
- var in_loop, in_try;
- var scope = compressor.find_parent(AST_Scope).get_defun_scope();
- find_loop_scope_try();
- var CHANGED, max_iter = 10;
- do {
- CHANGED = false;
- eliminate_spurious_blocks(statements);
- if (compressor.option("dead_code")) {
- eliminate_dead_code(statements, compressor);
- }
- if (compressor.option("if_return")) {
- handle_if_return(statements, compressor);
- }
- if (compressor.sequences_limit > 0) {
- sequencesize(statements, compressor);
- sequencesize_2(statements, compressor);
- }
- if (compressor.option("join_vars")) {
- join_consecutive_vars(statements);
- }
- if (compressor.option("collapse_vars")) {
- collapse(statements, compressor);
- }
- } while (CHANGED && max_iter-- > 0);
-
- function find_loop_scope_try() {
- var node = compressor.self(), level = 0;
- do {
- if (node instanceof AST_Catch || node instanceof AST_Finally) {
- level++;
- } else if (node instanceof AST_IterationStatement) {
- in_loop = true;
- } else if (node instanceof AST_Scope) {
- scope = node;
- break;
- } else if (node instanceof AST_Try) {
- in_try = true;
- }
- } while (node = compressor.parent(level++));
- }
-
- // Search from right to left for assignment-like expressions:
- // - `var a = x;`
- // - `a = x;`
- // - `++a`
- // For each candidate, scan from left to right for first usage, then try
- // to fold assignment into the site for compression.
- // Will not attempt to collapse assignments into or past code blocks
- // which are not sequentially executed, e.g. loops and conditionals.
- function collapse(statements, compressor) {
- if (scope.pinned())
- return statements;
- var args;
- var candidates = [];
- var stat_index = statements.length;
- var scanner = new TreeTransformer(function (node) {
- if (abort)
- return node;
- // Skip nodes before `candidate` as quickly as possible
- if (!hit) {
- if (node !== hit_stack[hit_index])
- return node;
- hit_index++;
- if (hit_index < hit_stack.length)
- return handle_custom_scan_order(node);
- hit = true;
- stop_after = find_stop(node, 0);
- if (stop_after === node)
- abort = true;
- return node;
- }
- // Stop immediately if these node types are encountered
- var parent = scanner.parent();
- if (node instanceof AST_Assign
- && (node.logical || node.operator != "=" && lhs.equivalent_to(node.left))
- || node instanceof AST_Await
- || node instanceof AST_Call && lhs instanceof AST_PropAccess && lhs.equivalent_to(node.expression)
- || node instanceof AST_Debugger
- || node instanceof AST_Destructuring
- || node instanceof AST_Expansion
- && node.expression instanceof AST_Symbol
- && (
- node.expression instanceof AST_This
- || node.expression.definition().references.length > 1
- )
- || node instanceof AST_IterationStatement && !(node instanceof AST_For)
- || node instanceof AST_LoopControl
- || node instanceof AST_Try
- || node instanceof AST_With
- || node instanceof AST_Yield
- || node instanceof AST_Export
- || node instanceof AST_Class
- || parent instanceof AST_For && node !== parent.init
- || !replace_all
- && (
- node instanceof AST_SymbolRef
- && !node.is_declared(compressor)
- && !pure_prop_access_globals.has(node)
- )
- || node instanceof AST_SymbolRef
- && parent instanceof AST_Call
- && has_annotation(parent, _NOINLINE)
- ) {
- abort = true;
- return node;
- }
- // Stop only if candidate is found within conditional branches
- if (!stop_if_hit && (!lhs_local || !replace_all)
- && (parent instanceof AST_Binary && lazy_op.has(parent.operator) && parent.left !== node
- || parent instanceof AST_Conditional && parent.condition !== node
- || parent instanceof AST_If && parent.condition !== node)) {
- stop_if_hit = parent;
- }
- // Replace variable with assignment when found
- if (can_replace
- && !(node instanceof AST_SymbolDeclaration)
- && lhs.equivalent_to(node)
- && !shadows(node.scope, lvalues)
- ) {
- if (stop_if_hit) {
- abort = true;
- return node;
- }
- if (is_lhs(node, parent)) {
- if (value_def)
- replaced++;
- return node;
- } else {
- replaced++;
- if (value_def && candidate instanceof AST_VarDef)
- return node;
- }
- CHANGED = abort = true;
- if (candidate instanceof AST_UnaryPostfix) {
- return make_node(AST_UnaryPrefix, candidate, candidate);
- }
- if (candidate instanceof AST_VarDef) {
- var def = candidate.name.definition();
- var value = candidate.value;
- if (def.references.length - def.replaced == 1 && !compressor.exposed(def)) {
- def.replaced++;
- if (funarg && is_identifier_atom(value)) {
- return value.transform(compressor);
- } else {
- return maintain_this_binding(parent, node, value);
- }
- }
- return make_node(AST_Assign, candidate, {
- operator: "=",
- logical: false,
- left: make_node(AST_SymbolRef, candidate.name, candidate.name),
- right: value
- });
- }
- clear_flag(candidate, WRITE_ONLY);
- return candidate;
- }
- // These node types have child nodes that execute sequentially,
- // but are otherwise not safe to scan into or beyond them.
- var sym;
- if (node instanceof AST_Call
- || node instanceof AST_Exit
- && (side_effects || lhs instanceof AST_PropAccess || may_modify(lhs))
- || node instanceof AST_PropAccess
- && (side_effects || node.expression.may_throw_on_access(compressor))
- || node instanceof AST_SymbolRef
- && ((lvalues.has(node.name) && lvalues.get(node.name).modified) || side_effects && may_modify(node))
- || node instanceof AST_VarDef && node.value
- && (lvalues.has(node.name.name) || side_effects && may_modify(node.name))
- || (sym = is_lhs(node.left, node))
- && (sym instanceof AST_PropAccess || lvalues.has(sym.name))
- || may_throw
- && (in_try ? node.has_side_effects(compressor) : side_effects_external(node))) {
- stop_after = node;
- if (node instanceof AST_Scope)
- abort = true;
- }
- return handle_custom_scan_order(node);
- }, function (node) {
- if (abort)
- return;
- if (stop_after === node)
- abort = true;
- if (stop_if_hit === node)
- stop_if_hit = null;
- });
-
- var multi_replacer = new TreeTransformer(function (node) {
- if (abort)
- return node;
- // Skip nodes before `candidate` as quickly as possible
- if (!hit) {
- if (node !== hit_stack[hit_index])
- return node;
- hit_index++;
- if (hit_index < hit_stack.length)
- return;
- hit = true;
- return node;
- }
- // Replace variable when found
- if (node instanceof AST_SymbolRef
- && node.name == def.name) {
- if (!--replaced)
- abort = true;
- if (is_lhs(node, multi_replacer.parent()))
- return node;
- def.replaced++;
- value_def.replaced--;
- return candidate.value;
- }
- // Skip (non-executed) functions and (leading) default case in switch statements
- if (node instanceof AST_Default || node instanceof AST_Scope)
- return node;
- });
-
- while (--stat_index >= 0) {
- // Treat parameters as collapsible in IIFE, i.e.
- // function(a, b){ ... }(x());
- // would be translated into equivalent assignments:
- // var a = x(), b = undefined;
- if (stat_index == 0 && compressor.option("unused"))
- extract_args();
- // Find collapsible assignments
- var hit_stack = [];
- extract_candidates(statements[stat_index]);
- while (candidates.length > 0) {
- hit_stack = candidates.pop();
- var hit_index = 0;
- var candidate = hit_stack[hit_stack.length - 1];
- var value_def = null;
- var stop_after = null;
- var stop_if_hit = null;
- var lhs = get_lhs(candidate);
- if (!lhs || is_lhs_read_only(lhs) || lhs.has_side_effects(compressor))
- continue;
- // Locate symbols which may execute code outside of scanning range
- var lvalues = get_lvalues(candidate);
- var lhs_local = is_lhs_local(lhs);
- if (lhs instanceof AST_SymbolRef) {
- lvalues.set(lhs.name, { def: lhs.definition(), modified: false });
- }
- var side_effects = value_has_side_effects(candidate);
- var replace_all = replace_all_symbols();
- var may_throw = candidate.may_throw(compressor);
- var funarg = candidate.name instanceof AST_SymbolFunarg;
- var hit = funarg;
- var abort = false, replaced = 0, can_replace = !args || !hit;
- if (!can_replace) {
- for (var j = compressor.self().argnames.lastIndexOf(candidate.name) + 1; !abort && j < args.length; j++) {
- args[j].transform(scanner);
- }
- can_replace = true;
- }
- for (var i = stat_index; !abort && i < statements.length; i++) {
- statements[i].transform(scanner);
- }
- if (value_def) {
- var def = candidate.name.definition();
- if (abort && def.references.length - def.replaced > replaced)
- replaced = false;
- else {
- abort = false;
- hit_index = 0;
- hit = funarg;
- for (var i = stat_index; !abort && i < statements.length; i++) {
- statements[i].transform(multi_replacer);
- }
- value_def.single_use = false;
- }
- }
- if (replaced && !remove_candidate(candidate))
- statements.splice(stat_index, 1);
- }
- }
-
- function handle_custom_scan_order(node) {
- // Skip (non-executed) functions
- if (node instanceof AST_Scope)
- return node;
-
- // Scan case expressions first in a switch statement
- if (node instanceof AST_Switch) {
- node.expression = node.expression.transform(scanner);
- for (var i = 0, len = node.body.length; !abort && i < len; i++) {
- var branch = node.body[i];
- if (branch instanceof AST_Case) {
- if (!hit) {
- if (branch !== hit_stack[hit_index])
- continue;
- hit_index++;
- }
- branch.expression = branch.expression.transform(scanner);
- if (!replace_all)
- break;
- }
- }
- abort = true;
- return node;
- }
- }
-
- function redefined_within_scope(def, scope) {
- if (def.global)
- return false;
- let cur_scope = def.scope;
- while (cur_scope && cur_scope !== scope) {
- if (cur_scope.variables.has(def.name)) {
- return true;
- }
- cur_scope = cur_scope.parent_scope;
- }
- return false;
- }
-
- function has_overlapping_symbol(fn, arg, fn_strict) {
- var found = false, scan_this = !(fn instanceof AST_Arrow);
- arg.walk(new TreeWalker(function (node, descend) {
- if (found)
- return true;
- if (node instanceof AST_SymbolRef && (fn.variables.has(node.name) || redefined_within_scope(node.definition(), fn))) {
- var s = node.definition().scope;
- if (s !== scope)
- while (s = s.parent_scope) {
- if (s === scope)
- return true;
- }
- return found = true;
- }
- if ((fn_strict || scan_this) && node instanceof AST_This) {
- return found = true;
- }
- if (node instanceof AST_Scope && !(node instanceof AST_Arrow)) {
- var prev = scan_this;
- scan_this = false;
- descend();
- scan_this = prev;
- return true;
- }
- }));
- return found;
- }
-
- function extract_args() {
- var iife, fn = compressor.self();
- if (is_func_expr(fn)
- && !fn.name
- && !fn.uses_arguments
- && !fn.pinned()
- && (iife = compressor.parent()) instanceof AST_Call
- && iife.expression === fn
- && iife.args.every((arg) => !(arg instanceof AST_Expansion))) {
- var fn_strict = compressor.has_directive("use strict");
- if (fn_strict && !member(fn_strict, fn.body))
- fn_strict = false;
- var len = fn.argnames.length;
- args = iife.args.slice(len);
- var names = new Set();
- for (var i = len; --i >= 0;) {
- var sym = fn.argnames[i];
- var arg = iife.args[i];
- // The following two line fix is a duplicate of the fix at
- // https://github.com/terser/terser/commit/011d3eb08cefe6922c7d1bdfa113fc4aeaca1b75
- // This might mean that these two pieces of code (one here in collapse_vars and another in reduce_vars
- // Might be doing the exact same thing.
- const def = sym.definition && sym.definition();
- const is_reassigned = def && def.orig.length > 1;
- if (is_reassigned)
- continue;
- args.unshift(make_node(AST_VarDef, sym, {
- name: sym,
- value: arg
- }));
- if (names.has(sym.name))
- continue;
- names.add(sym.name);
- if (sym instanceof AST_Expansion) {
- var elements = iife.args.slice(i);
- if (elements.every((arg) => !has_overlapping_symbol(fn, arg, fn_strict)
- )) {
- candidates.unshift([make_node(AST_VarDef, sym, {
- name: sym.expression,
- value: make_node(AST_Array, iife, {
- elements: elements
- })
- })]);
- }
- } else {
- if (!arg) {
- arg = make_node(AST_Undefined, sym).transform(compressor);
- } else if (arg instanceof AST_Lambda && arg.pinned()
- || has_overlapping_symbol(fn, arg, fn_strict)) {
- arg = null;
- }
- if (arg)
- candidates.unshift([make_node(AST_VarDef, sym, {
- name: sym,
- value: arg
- })]);
- }
- }
- }
- }
-
- function extract_candidates(expr) {
- hit_stack.push(expr);
- if (expr instanceof AST_Assign) {
- if (!expr.left.has_side_effects(compressor)
- && !(expr.right instanceof AST_Chain)) {
- candidates.push(hit_stack.slice());
- }
- extract_candidates(expr.right);
- } else if (expr instanceof AST_Binary) {
- extract_candidates(expr.left);
- extract_candidates(expr.right);
- } else if (expr instanceof AST_Call && !has_annotation(expr, _NOINLINE)) {
- extract_candidates(expr.expression);
- expr.args.forEach(extract_candidates);
- } else if (expr instanceof AST_Case) {
- extract_candidates(expr.expression);
- } else if (expr instanceof AST_Conditional) {
- extract_candidates(expr.condition);
- extract_candidates(expr.consequent);
- extract_candidates(expr.alternative);
- } else if (expr instanceof AST_Definitions) {
- var len = expr.definitions.length;
- // limit number of trailing variable definitions for consideration
- var i = len - 200;
- if (i < 0)
- i = 0;
- for (; i < len; i++) {
- extract_candidates(expr.definitions[i]);
- }
- } else if (expr instanceof AST_DWLoop) {
- extract_candidates(expr.condition);
- if (!(expr.body instanceof AST_Block)) {
- extract_candidates(expr.body);
- }
- } else if (expr instanceof AST_Exit) {
- if (expr.value)
- extract_candidates(expr.value);
- } else if (expr instanceof AST_For) {
- if (expr.init)
- extract_candidates(expr.init);
- if (expr.condition)
- extract_candidates(expr.condition);
- if (expr.step)
- extract_candidates(expr.step);
- if (!(expr.body instanceof AST_Block)) {
- extract_candidates(expr.body);
- }
- } else if (expr instanceof AST_ForIn) {
- extract_candidates(expr.object);
- if (!(expr.body instanceof AST_Block)) {
- extract_candidates(expr.body);
- }
- } else if (expr instanceof AST_If) {
- extract_candidates(expr.condition);
- if (!(expr.body instanceof AST_Block)) {
- extract_candidates(expr.body);
- }
- if (expr.alternative && !(expr.alternative instanceof AST_Block)) {
- extract_candidates(expr.alternative);
- }
- } else if (expr instanceof AST_Sequence) {
- expr.expressions.forEach(extract_candidates);
- } else if (expr instanceof AST_SimpleStatement) {
- extract_candidates(expr.body);
- } else if (expr instanceof AST_Switch) {
- extract_candidates(expr.expression);
- expr.body.forEach(extract_candidates);
- } else if (expr instanceof AST_Unary) {
- if (expr.operator == "++" || expr.operator == "--") {
- candidates.push(hit_stack.slice());
- }
- } else if (expr instanceof AST_VarDef) {
- if (expr.value && !(expr.value instanceof AST_Chain)) {
- candidates.push(hit_stack.slice());
- extract_candidates(expr.value);
- }
- }
- hit_stack.pop();
- }
-
- function find_stop(node, level, write_only) {
- var parent = scanner.parent(level);
- if (parent instanceof AST_Assign) {
- if (write_only
- && !parent.logical
- && !(parent.left instanceof AST_PropAccess
- || lvalues.has(parent.left.name))) {
- return find_stop(parent, level + 1, write_only);
- }
- return node;
- }
- if (parent instanceof AST_Binary) {
- if (write_only && (!lazy_op.has(parent.operator) || parent.left === node)) {
- return find_stop(parent, level + 1, write_only);
- }
- return node;
- }
- if (parent instanceof AST_Call)
- return node;
- if (parent instanceof AST_Case)
- return node;
- if (parent instanceof AST_Conditional) {
- if (write_only && parent.condition === node) {
- return find_stop(parent, level + 1, write_only);
- }
- return node;
- }
- if (parent instanceof AST_Definitions) {
- return find_stop(parent, level + 1, true);
- }
- if (parent instanceof AST_Exit) {
- return write_only ? find_stop(parent, level + 1, write_only) : node;
- }
- if (parent instanceof AST_If) {
- if (write_only && parent.condition === node) {
- return find_stop(parent, level + 1, write_only);
- }
- return node;
- }
- if (parent instanceof AST_IterationStatement)
- return node;
- if (parent instanceof AST_Sequence) {
- return find_stop(parent, level + 1, parent.tail_node() !== node);
- }
- if (parent instanceof AST_SimpleStatement) {
- return find_stop(parent, level + 1, true);
- }
- if (parent instanceof AST_Switch)
- return node;
- if (parent instanceof AST_VarDef)
- return node;
- return null;
- }
-
- function mangleable_var(var_def) {
- var value = var_def.value;
- if (!(value instanceof AST_SymbolRef))
- return;
- if (value.name == "arguments")
- return;
- var def = value.definition();
- if (def.undeclared)
- return;
- return value_def = def;
- }
-
- function get_lhs(expr) {
- if (expr instanceof AST_Assign && expr.logical) {
- return false;
- } else if (expr instanceof AST_VarDef && expr.name instanceof AST_SymbolDeclaration) {
- var def = expr.name.definition();
- if (!member(expr.name, def.orig))
- return;
- var referenced = def.references.length - def.replaced;
- if (!referenced)
- return;
- var declared = def.orig.length - def.eliminated;
- if (declared > 1 && !(expr.name instanceof AST_SymbolFunarg)
- || (referenced > 1 ? mangleable_var(expr) : !compressor.exposed(def))) {
- return make_node(AST_SymbolRef, expr.name, expr.name);
- }
- } else {
- const lhs = expr instanceof AST_Assign
- ? expr.left
- : expr.expression;
- return !is_ref_of(lhs, AST_SymbolConst)
- && !is_ref_of(lhs, AST_SymbolLet) && lhs;
- }
- }
-
- function get_rvalue(expr) {
- if (expr instanceof AST_Assign) {
- return expr.right;
- } else {
- return expr.value;
- }
- }
-
- function get_lvalues(expr) {
- var lvalues = new Map();
- if (expr instanceof AST_Unary)
- return lvalues;
- var tw = new TreeWalker(function (node) {
- var sym = node;
- while (sym instanceof AST_PropAccess)
- sym = sym.expression;
- if (sym instanceof AST_SymbolRef) {
- const prev = lvalues.get(sym.name);
- if (!prev || !prev.modified) {
- lvalues.set(sym.name, {
- def: sym.definition(),
- modified: is_modified(compressor, tw, node, node, 0)
- });
- }
- }
- });
- get_rvalue(expr).walk(tw);
- return lvalues;
- }
-
- function remove_candidate(expr) {
- if (expr.name instanceof AST_SymbolFunarg) {
- var iife = compressor.parent(), argnames = compressor.self().argnames;
- var index = argnames.indexOf(expr.name);
- if (index < 0) {
- iife.args.length = Math.min(iife.args.length, argnames.length - 1);
- } else {
- var args = iife.args;
- if (args[index])
- args[index] = make_node(AST_Number, args[index], {
- value: 0
- });
- }
- return true;
- }
- var found = false;
- return statements[stat_index].transform(new TreeTransformer(function (node, descend, in_list) {
- if (found)
- return node;
- if (node === expr || node.body === expr) {
- found = true;
- if (node instanceof AST_VarDef) {
- node.value = node.name instanceof AST_SymbolConst
- ? make_node(AST_Undefined, node.value) // `const` always needs value.
- : null;
- return node;
- }
- return in_list ? MAP.skip : null;
- }
- }, function (node) {
- if (node instanceof AST_Sequence)
- switch (node.expressions.length) {
- case 0: return null;
- case 1: return node.expressions[0];
- }
- }));
- }
-
- function is_lhs_local(lhs) {
- while (lhs instanceof AST_PropAccess)
- lhs = lhs.expression;
- return lhs instanceof AST_SymbolRef
- && lhs.definition().scope === scope
- && !(in_loop
- && (lvalues.has(lhs.name)
- || candidate instanceof AST_Unary
- || (candidate instanceof AST_Assign
- && !candidate.logical
- && candidate.operator != "=")));
- }
-
- function value_has_side_effects(expr) {
- if (expr instanceof AST_Unary)
- return unary_side_effects.has(expr.operator);
- return get_rvalue(expr).has_side_effects(compressor);
- }
-
- function replace_all_symbols() {
- if (side_effects)
- return false;
- if (value_def)
- return true;
- if (lhs instanceof AST_SymbolRef) {
- var def = lhs.definition();
- if (def.references.length - def.replaced == (candidate instanceof AST_VarDef ? 1 : 2)) {
- return true;
- }
- }
- return false;
- }
-
- function may_modify(sym) {
- if (!sym.definition)
- return true; // AST_Destructuring
- var def = sym.definition();
- if (def.orig.length == 1 && def.orig[0] instanceof AST_SymbolDefun)
- return false;
- if (def.scope.get_defun_scope() !== scope)
- return true;
- return !def.references.every((ref) => {
- var s = ref.scope.get_defun_scope();
- // "block" scope within AST_Catch
- if (s.TYPE == "Scope")
- s = s.parent_scope;
- return s === scope;
- });
- }
-
- function side_effects_external(node, lhs) {
- if (node instanceof AST_Assign)
- return side_effects_external(node.left, true);
- if (node instanceof AST_Unary)
- return side_effects_external(node.expression, true);
- if (node instanceof AST_VarDef)
- return node.value && side_effects_external(node.value);
- if (lhs) {
- if (node instanceof AST_Dot)
- return side_effects_external(node.expression, true);
- if (node instanceof AST_Sub)
- return side_effects_external(node.expression, true);
- if (node instanceof AST_SymbolRef)
- return node.definition().scope !== scope;
- }
- return false;
- }
-
- function shadows(newScope, lvalues) {
- for (const {def} of lvalues.values()) {
- let current = newScope;
- while (current && current !== def.scope) {
- let nested_def = current.variables.get(def.name);
- if (nested_def && nested_def !== def) return true;
- current = current.parent_scope;
- }
- }
- return false;
- }
- }
-
- function eliminate_spurious_blocks(statements) {
- var seen_dirs = [];
- for (var i = 0; i < statements.length;) {
- var stat = statements[i];
- if (stat instanceof AST_BlockStatement && stat.body.every(can_be_evicted_from_block)) {
- CHANGED = true;
- eliminate_spurious_blocks(stat.body);
- statements.splice(i, 1, ...stat.body);
- i += stat.body.length;
- } else if (stat instanceof AST_EmptyStatement) {
- CHANGED = true;
- statements.splice(i, 1);
- } else if (stat instanceof AST_Directive) {
- if (seen_dirs.indexOf(stat.value) < 0) {
- i++;
- seen_dirs.push(stat.value);
- } else {
- CHANGED = true;
- statements.splice(i, 1);
- }
- } else
- i++;
- }
- }
-
- function handle_if_return(statements, compressor) {
- var self = compressor.self();
- var multiple_if_returns = has_multiple_if_returns(statements);
- var in_lambda = self instanceof AST_Lambda;
- for (var i = statements.length; --i >= 0;) {
- var stat = statements[i];
- var j = next_index(i);
- var next = statements[j];
-
- if (in_lambda && !next && stat instanceof AST_Return) {
- if (!stat.value) {
- CHANGED = true;
- statements.splice(i, 1);
- continue;
- }
- if (stat.value instanceof AST_UnaryPrefix && stat.value.operator == "void") {
- CHANGED = true;
- statements[i] = make_node(AST_SimpleStatement, stat, {
- body: stat.value.expression
- });
- continue;
- }
- }
-
- if (stat instanceof AST_If) {
- var ab = aborts(stat.body);
- if (can_merge_flow(ab)) {
- if (ab.label) {
- remove(ab.label.thedef.references, ab);
- }
- CHANGED = true;
- stat = stat.clone();
- stat.condition = stat.condition.negate(compressor);
- var body = as_statement_array_with_return(stat.body, ab);
- stat.body = make_node(AST_BlockStatement, stat, {
- body: as_statement_array(stat.alternative).concat(extract_functions())
- });
- stat.alternative = make_node(AST_BlockStatement, stat, {
- body: body
- });
- statements[i] = stat.transform(compressor);
- continue;
- }
-
- var ab = aborts(stat.alternative);
- if (can_merge_flow(ab)) {
- if (ab.label) {
- remove(ab.label.thedef.references, ab);
- }
- CHANGED = true;
- stat = stat.clone();
- stat.body = make_node(AST_BlockStatement, stat.body, {
- body: as_statement_array(stat.body).concat(extract_functions())
- });
- var body = as_statement_array_with_return(stat.alternative, ab);
- stat.alternative = make_node(AST_BlockStatement, stat.alternative, {
- body: body
- });
- statements[i] = stat.transform(compressor);
- continue;
- }
- }
-
- if (stat instanceof AST_If && stat.body instanceof AST_Return) {
- var value = stat.body.value;
- //---
- // pretty silly case, but:
- // if (foo()) return; return; ==> foo(); return;
- if (!value && !stat.alternative
- && (in_lambda && !next || next instanceof AST_Return && !next.value)) {
- CHANGED = true;
- statements[i] = make_node(AST_SimpleStatement, stat.condition, {
- body: stat.condition
- });
- continue;
- }
- //---
- // if (foo()) return x; return y; ==> return foo() ? x : y;
- if (value && !stat.alternative && next instanceof AST_Return && next.value) {
- CHANGED = true;
- stat = stat.clone();
- stat.alternative = next;
- statements[i] = stat.transform(compressor);
- statements.splice(j, 1);
- continue;
- }
- //---
- // if (foo()) return x; [ return ; ] ==> return foo() ? x : undefined;
- if (value && !stat.alternative
- && (!next && in_lambda && multiple_if_returns
- || next instanceof AST_Return)) {
- CHANGED = true;
- stat = stat.clone();
- stat.alternative = next || make_node(AST_Return, stat, {
- value: null
- });
- statements[i] = stat.transform(compressor);
- if (next)
- statements.splice(j, 1);
- continue;
- }
- //---
- // if (a) return b; if (c) return d; e; ==> return a ? b : c ? d : void e;
- //
- // if sequences is not enabled, this can lead to an endless loop (issue #866).
- // however, with sequences on this helps producing slightly better output for
- // the example code.
- var prev = statements[prev_index(i)];
- if (compressor.option("sequences") && in_lambda && !stat.alternative
- && prev instanceof AST_If && prev.body instanceof AST_Return
- && next_index(j) == statements.length && next instanceof AST_SimpleStatement) {
- CHANGED = true;
- stat = stat.clone();
- stat.alternative = make_node(AST_BlockStatement, next, {
- body: [
- next,
- make_node(AST_Return, next, {
- value: null
- })
- ]
- });
- statements[i] = stat.transform(compressor);
- statements.splice(j, 1);
- continue;
- }
- }
- }
-
- function has_multiple_if_returns(statements) {
- var n = 0;
- for (var i = statements.length; --i >= 0;) {
- var stat = statements[i];
- if (stat instanceof AST_If && stat.body instanceof AST_Return) {
- if (++n > 1)
- return true;
- }
- }
- return false;
- }
-
- function is_return_void(value) {
- return !value || value instanceof AST_UnaryPrefix && value.operator == "void";
- }
-
- function can_merge_flow(ab) {
- if (!ab)
- return false;
- for (var j = i + 1, len = statements.length; j < len; j++) {
- var stat = statements[j];
- if (stat instanceof AST_Const || stat instanceof AST_Let)
- return false;
- }
- var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab) : null;
- return ab instanceof AST_Return && in_lambda && is_return_void(ab.value)
- || ab instanceof AST_Continue && self === loop_body(lct)
- || ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct;
- }
-
- function extract_functions() {
- var tail = statements.slice(i + 1);
- statements.length = i + 1;
- return tail.filter(function (stat) {
- if (stat instanceof AST_Defun) {
- statements.push(stat);
- return false;
- }
- return true;
- });
- }
-
- function as_statement_array_with_return(node, ab) {
- var body = as_statement_array(node).slice(0, -1);
- if (ab.value) {
- body.push(make_node(AST_SimpleStatement, ab.value, {
- body: ab.value.expression
- }));
- }
- return body;
- }
-
- function next_index(i) {
- for (var j = i + 1, len = statements.length; j < len; j++) {
- var stat = statements[j];
- if (!(stat instanceof AST_Var && declarations_only(stat))) {
- break;
- }
- }
- return j;
- }
-
- function prev_index(i) {
- for (var j = i; --j >= 0;) {
- var stat = statements[j];
- if (!(stat instanceof AST_Var && declarations_only(stat))) {
- break;
- }
- }
- return j;
- }
- }
-
- function eliminate_dead_code(statements, compressor) {
- var has_quit;
- var self = compressor.self();
- for (var i = 0, n = 0, len = statements.length; i < len; i++) {
- var stat = statements[i];
- if (stat instanceof AST_LoopControl) {
- var lct = compressor.loopcontrol_target(stat);
- if (stat instanceof AST_Break
- && !(lct instanceof AST_IterationStatement)
- && loop_body(lct) === self
- || stat instanceof AST_Continue
- && loop_body(lct) === self) {
- if (stat.label) {
- remove(stat.label.thedef.references, stat);
- }
- } else {
- statements[n++] = stat;
- }
- } else {
- statements[n++] = stat;
- }
- if (aborts(stat)) {
- has_quit = statements.slice(i + 1);
- break;
- }
- }
- statements.length = n;
- CHANGED = n != len;
- if (has_quit)
- has_quit.forEach(function (stat) {
- trim_unreachable_code(compressor, stat, statements);
- });
- }
-
- function declarations_only(node) {
- return node.definitions.every((var_def) => !var_def.value
- );
- }
-
- function sequencesize(statements, compressor) {
- if (statements.length < 2)
- return;
- var seq = [], n = 0;
- function push_seq() {
- if (!seq.length)
- return;
- var body = make_sequence(seq[0], seq);
- statements[n++] = make_node(AST_SimpleStatement, body, { body: body });
- seq = [];
- }
- for (var i = 0, len = statements.length; i < len; i++) {
- var stat = statements[i];
- if (stat instanceof AST_SimpleStatement) {
- if (seq.length >= compressor.sequences_limit)
- push_seq();
- var body = stat.body;
- if (seq.length > 0)
- body = body.drop_side_effect_free(compressor);
- if (body)
- merge_sequence(seq, body);
- } else if (stat instanceof AST_Definitions && declarations_only(stat)
- || stat instanceof AST_Defun) {
- statements[n++] = stat;
- } else {
- push_seq();
- statements[n++] = stat;
- }
- }
- push_seq();
- statements.length = n;
- if (n != len)
- CHANGED = true;
- }
-
- function to_simple_statement(block, decls) {
- if (!(block instanceof AST_BlockStatement))
- return block;
- var stat = null;
- for (var i = 0, len = block.body.length; i < len; i++) {
- var line = block.body[i];
- if (line instanceof AST_Var && declarations_only(line)) {
- decls.push(line);
- } else if (stat) {
- return false;
- } else {
- stat = line;
- }
- }
- return stat;
- }
-
- function sequencesize_2(statements, compressor) {
- function cons_seq(right) {
- n--;
- CHANGED = true;
- var left = prev.body;
- return make_sequence(left, [left, right]).transform(compressor);
- }
- var n = 0, prev;
- for (var i = 0; i < statements.length; i++) {
- var stat = statements[i];
- if (prev) {
- if (stat instanceof AST_Exit) {
- stat.value = cons_seq(stat.value || make_node(AST_Undefined, stat).transform(compressor));
- } else if (stat instanceof AST_For) {
- if (!(stat.init instanceof AST_Definitions)) {
- const abort = walk(prev.body, node => {
- if (node instanceof AST_Scope)
- return true;
- if (node instanceof AST_Binary
- && node.operator === "in") {
- return walk_abort;
- }
- });
- if (!abort) {
- if (stat.init)
- stat.init = cons_seq(stat.init);
- else {
- stat.init = prev.body;
- n--;
- CHANGED = true;
- }
- }
- }
- } else if (stat instanceof AST_ForIn) {
- if (!(stat.init instanceof AST_Const) && !(stat.init instanceof AST_Let)) {
- stat.object = cons_seq(stat.object);
- }
- } else if (stat instanceof AST_If) {
- stat.condition = cons_seq(stat.condition);
- } else if (stat instanceof AST_Switch) {
- stat.expression = cons_seq(stat.expression);
- } else if (stat instanceof AST_With) {
- stat.expression = cons_seq(stat.expression);
- }
- }
- if (compressor.option("conditionals") && stat instanceof AST_If) {
- var decls = [];
- var body = to_simple_statement(stat.body, decls);
- var alt = to_simple_statement(stat.alternative, decls);
- if (body !== false && alt !== false && decls.length > 0) {
- var len = decls.length;
- decls.push(make_node(AST_If, stat, {
- condition: stat.condition,
- body: body || make_node(AST_EmptyStatement, stat.body),
- alternative: alt
- }));
- decls.unshift(n, 1);
- [].splice.apply(statements, decls);
- i += len;
- n += len + 1;
- prev = null;
- CHANGED = true;
- continue;
- }
- }
- statements[n++] = stat;
- prev = stat instanceof AST_SimpleStatement ? stat : null;
- }
- statements.length = n;
- }
-
- function join_object_assignments(defn, body) {
- if (!(defn instanceof AST_Definitions))
- return;
- var def = defn.definitions[defn.definitions.length - 1];
- if (!(def.value instanceof AST_Object))
- return;
- var exprs;
- if (body instanceof AST_Assign && !body.logical) {
- exprs = [body];
- } else if (body instanceof AST_Sequence) {
- exprs = body.expressions.slice();
- }
- if (!exprs)
- return;
- var trimmed = false;
- do {
- var node = exprs[0];
- if (!(node instanceof AST_Assign))
- break;
- if (node.operator != "=")
- break;
- if (!(node.left instanceof AST_PropAccess))
- break;
- var sym = node.left.expression;
- if (!(sym instanceof AST_SymbolRef))
- break;
- if (def.name.name != sym.name)
- break;
- if (!node.right.is_constant_expression(scope))
- break;
- var prop = node.left.property;
- if (prop instanceof AST_Node) {
- prop = prop.evaluate(compressor);
- }
- if (prop instanceof AST_Node)
- break;
- prop = "" + prop;
- var diff = compressor.option("ecma") < 2015
- && compressor.has_directive("use strict") ? function (node) {
- return node.key != prop && (node.key && node.key.name != prop);
- } : function (node) {
- return node.key && node.key.name != prop;
- };
- if (!def.value.properties.every(diff))
- break;
- var p = def.value.properties.filter(function (p) { return p.key === prop; })[0];
- if (!p) {
- def.value.properties.push(make_node(AST_ObjectKeyVal, node, {
- key: prop,
- value: node.right
- }));
- } else {
- p.value = new AST_Sequence({
- start: p.start,
- expressions: [p.value.clone(), node.right.clone()],
- end: p.end
- });
- }
- exprs.shift();
- trimmed = true;
- } while (exprs.length);
- return trimmed && exprs;
- }
-
- function join_consecutive_vars(statements) {
- var defs;
- for (var i = 0, j = -1, len = statements.length; i < len; i++) {
- var stat = statements[i];
- var prev = statements[j];
- if (stat instanceof AST_Definitions) {
- if (prev && prev.TYPE == stat.TYPE) {
- prev.definitions = prev.definitions.concat(stat.definitions);
- CHANGED = true;
- } else if (defs && defs.TYPE == stat.TYPE && declarations_only(stat)) {
- defs.definitions = defs.definitions.concat(stat.definitions);
- CHANGED = true;
- } else {
- statements[++j] = stat;
- defs = stat;
- }
- } else if (stat instanceof AST_Exit) {
- stat.value = extract_object_assignments(stat.value);
- } else if (stat instanceof AST_For) {
- var exprs = join_object_assignments(prev, stat.init);
- if (exprs) {
- CHANGED = true;
- stat.init = exprs.length ? make_sequence(stat.init, exprs) : null;
- statements[++j] = stat;
- } else if (prev instanceof AST_Var && (!stat.init || stat.init.TYPE == prev.TYPE)) {
- if (stat.init) {
- prev.definitions = prev.definitions.concat(stat.init.definitions);
- }
- stat.init = prev;
- statements[j] = stat;
- CHANGED = true;
- } else if (defs && stat.init && defs.TYPE == stat.init.TYPE && declarations_only(stat.init)) {
- defs.definitions = defs.definitions.concat(stat.init.definitions);
- stat.init = null;
- statements[++j] = stat;
- CHANGED = true;
- } else {
- statements[++j] = stat;
- }
- } else if (stat instanceof AST_ForIn) {
- stat.object = extract_object_assignments(stat.object);
- } else if (stat instanceof AST_If) {
- stat.condition = extract_object_assignments(stat.condition);
- } else if (stat instanceof AST_SimpleStatement) {
- var exprs = join_object_assignments(prev, stat.body);
- if (exprs) {
- CHANGED = true;
- if (!exprs.length)
- continue;
- stat.body = make_sequence(stat.body, exprs);
- }
- statements[++j] = stat;
- } else if (stat instanceof AST_Switch) {
- stat.expression = extract_object_assignments(stat.expression);
- } else if (stat instanceof AST_With) {
- stat.expression = extract_object_assignments(stat.expression);
- } else {
- statements[++j] = stat;
- }
- }
- statements.length = j + 1;
-
- function extract_object_assignments(value) {
- statements[++j] = stat;
- var exprs = join_object_assignments(prev, value);
- if (exprs) {
- CHANGED = true;
- if (exprs.length) {
- return make_sequence(value, exprs);
- } else if (value instanceof AST_Sequence) {
- return value.tail_node().left;
- } else {
- return value.left;
- }
- }
- return value;
- }
- }
-}
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-class Compressor extends TreeWalker {
- constructor(options, { false_by_default = false, mangle_options = false }) {
- super();
- if (options.defaults !== undefined && !options.defaults) false_by_default = true;
- this.options = defaults(options, {
- arguments : false,
- arrows : !false_by_default,
- booleans : !false_by_default,
- booleans_as_integers : false,
- collapse_vars : !false_by_default,
- comparisons : !false_by_default,
- computed_props: !false_by_default,
- conditionals : !false_by_default,
- dead_code : !false_by_default,
- defaults : true,
- directives : !false_by_default,
- drop_console : false,
- drop_debugger : !false_by_default,
- ecma : 5,
- evaluate : !false_by_default,
- expression : false,
- global_defs : false,
- hoist_funs : false,
- hoist_props : !false_by_default,
- hoist_vars : false,
- ie8 : false,
- if_return : !false_by_default,
- inline : !false_by_default,
- join_vars : !false_by_default,
- keep_classnames: false,
- keep_fargs : true,
- keep_fnames : false,
- keep_infinity : false,
- loops : !false_by_default,
- module : false,
- negate_iife : !false_by_default,
- passes : 1,
- properties : !false_by_default,
- pure_getters : !false_by_default && "strict",
- pure_funcs : null,
- reduce_funcs : !false_by_default,
- reduce_vars : !false_by_default,
- sequences : !false_by_default,
- side_effects : !false_by_default,
- switches : !false_by_default,
- top_retain : null,
- toplevel : !!(options && options["top_retain"]),
- typeofs : !false_by_default,
- unsafe : false,
- unsafe_arrows : false,
- unsafe_comps : false,
- unsafe_Function: false,
- unsafe_math : false,
- unsafe_symbols: false,
- unsafe_methods: false,
- unsafe_proto : false,
- unsafe_regexp : false,
- unsafe_undefined: false,
- unused : !false_by_default,
- warnings : false // legacy
- }, true);
- var global_defs = this.options["global_defs"];
- if (typeof global_defs == "object") for (var key in global_defs) {
- if (key[0] === "@" && HOP(global_defs, key)) {
- global_defs[key.slice(1)] = parse(global_defs[key], {
- expression: true
- });
- }
- }
- if (this.options["inline"] === true) this.options["inline"] = 3;
- var pure_funcs = this.options["pure_funcs"];
- if (typeof pure_funcs == "function") {
- this.pure_funcs = pure_funcs;
- } else {
- this.pure_funcs = pure_funcs ? function(node) {
- return !pure_funcs.includes(node.expression.print_to_string());
- } : return_true;
- }
- var top_retain = this.options["top_retain"];
- if (top_retain instanceof RegExp) {
- this.top_retain = function(def) {
- return top_retain.test(def.name);
- };
- } else if (typeof top_retain == "function") {
- this.top_retain = top_retain;
- } else if (top_retain) {
- if (typeof top_retain == "string") {
- top_retain = top_retain.split(/,/);
- }
- this.top_retain = function(def) {
- return top_retain.includes(def.name);
- };
- }
- if (this.options["module"]) {
- this.directives["use strict"] = true;
- this.options["toplevel"] = true;
- }
- var toplevel = this.options["toplevel"];
- this.toplevel = typeof toplevel == "string" ? {
- funcs: /funcs/.test(toplevel),
- vars: /vars/.test(toplevel)
- } : {
- funcs: toplevel,
- vars: toplevel
- };
- var sequences = this.options["sequences"];
- this.sequences_limit = sequences == 1 ? 800 : sequences | 0;
- this.evaluated_regexps = new Map();
- this._toplevel = undefined;
- this.mangle_options = mangle_options;
- }
-
- option(key) {
- return this.options[key];
- }
-
- exposed(def) {
- if (def.export) return true;
- if (def.global) for (var i = 0, len = def.orig.length; i < len; i++)
- if (!this.toplevel[def.orig[i] instanceof AST_SymbolDefun ? "funcs" : "vars"])
- return true;
- return false;
- }
-
- in_boolean_context() {
- if (!this.option("booleans")) return false;
- var self = this.self();
- for (var i = 0, p; p = this.parent(i); i++) {
- if (p instanceof AST_SimpleStatement
- || p instanceof AST_Conditional && p.condition === self
- || p instanceof AST_DWLoop && p.condition === self
- || p instanceof AST_For && p.condition === self
- || p instanceof AST_If && p.condition === self
- || p instanceof AST_UnaryPrefix && p.operator == "!" && p.expression === self) {
- return true;
- }
- if (
- p instanceof AST_Binary
- && (
- p.operator == "&&"
- || p.operator == "||"
- || p.operator == "??"
- )
- || p instanceof AST_Conditional
- || p.tail_node() === self
- ) {
- self = p;
- } else {
- return false;
- }
- }
- }
-
- get_toplevel() {
- return this._toplevel;
- }
-
- compress(toplevel) {
- toplevel = toplevel.resolve_defines(this);
- this._toplevel = toplevel;
- if (this.option("expression")) {
- this._toplevel.process_expression(true);
- }
- var passes = +this.options.passes || 1;
- var min_count = 1 / 0;
- var stopping = false;
- var nth_identifier = this.mangle_options && this.mangle_options.nth_identifier || base54;
- var mangle = { ie8: this.option("ie8"), nth_identifier: nth_identifier };
- for (var pass = 0; pass < passes; pass++) {
- this._toplevel.figure_out_scope(mangle);
- if (pass === 0 && this.option("drop_console")) {
- // must be run before reduce_vars and compress pass
- this._toplevel = this._toplevel.drop_console();
- }
- if (pass > 0 || this.option("reduce_vars")) {
- this._toplevel.reset_opt_flags(this);
- }
- this._toplevel = this._toplevel.transform(this);
- if (passes > 1) {
- let count = 0;
- walk(this._toplevel, () => { count++; });
- if (count < min_count) {
- min_count = count;
- stopping = false;
- } else if (stopping) {
- break;
- } else {
- stopping = true;
- }
- }
- }
- if (this.option("expression")) {
- this._toplevel.process_expression(false);
- }
- toplevel = this._toplevel;
- this._toplevel = undefined;
- return toplevel;
- }
-
- before(node, descend) {
- if (has_flag(node, SQUEEZED)) return node;
- var was_scope = false;
- if (node instanceof AST_Scope) {
- node = node.hoist_properties(this);
- node = node.hoist_declarations(this);
- was_scope = true;
- }
- // Before https://github.com/mishoo/UglifyJS2/pull/1602 AST_Node.optimize()
- // would call AST_Node.transform() if a different instance of AST_Node is
- // produced after def_optimize().
- // This corrupts TreeWalker.stack, which cause AST look-ups to malfunction.
- // Migrate and defer all children's AST_Node.transform() to below, which
- // will now happen after this parent AST_Node has been properly substituted
- // thus gives a consistent AST snapshot.
- descend(node, this);
- // Existing code relies on how AST_Node.optimize() worked, and omitting the
- // following replacement call would result in degraded efficiency of both
- // output and performance.
- descend(node, this);
- var opt = node.optimize(this);
- if (was_scope && opt instanceof AST_Scope) {
- opt.drop_unused(this);
- descend(opt, this);
- }
- if (opt === node) set_flag(opt, SQUEEZED);
- return opt;
- }
-}
-
-function def_optimize(node, optimizer) {
- node.DEFMETHOD("optimize", function(compressor) {
- var self = this;
- if (has_flag(self, OPTIMIZED)) return self;
- if (compressor.has_directive("use asm")) return self;
- var opt = optimizer(self, compressor);
- set_flag(opt, OPTIMIZED);
- return opt;
- });
-}
-
-def_optimize(AST_Node, function(self) {
- return self;
-});
-
-AST_Toplevel.DEFMETHOD("drop_console", function() {
- return this.transform(new TreeTransformer(function(self) {
- if (self.TYPE == "Call") {
- var exp = self.expression;
- if (exp instanceof AST_PropAccess) {
- var name = exp.expression;
- while (name.expression) {
- name = name.expression;
- }
- if (is_undeclared_ref(name) && name.name == "console") {
- return make_node(AST_Undefined, self);
- }
- }
- }
- }));
-});
-
-AST_Node.DEFMETHOD("equivalent_to", function(node) {
- return equivalent_to(this, node);
-});
-
-AST_Scope.DEFMETHOD("process_expression", function(insert, compressor) {
- var self = this;
- var tt = new TreeTransformer(function(node) {
- if (insert && node instanceof AST_SimpleStatement) {
- return make_node(AST_Return, node, {
- value: node.body
- });
- }
- if (!insert && node instanceof AST_Return) {
- if (compressor) {
- var value = node.value && node.value.drop_side_effect_free(compressor, true);
- return value
- ? make_node(AST_SimpleStatement, node, { body: value })
- : make_node(AST_EmptyStatement, node);
- }
- return make_node(AST_SimpleStatement, node, {
- body: node.value || make_node(AST_UnaryPrefix, node, {
- operator: "void",
- expression: make_node(AST_Number, node, {
- value: 0
- })
- })
- });
- }
- if (node instanceof AST_Class || node instanceof AST_Lambda && node !== self) {
- return node;
- }
- if (node instanceof AST_Block) {
- var index = node.body.length - 1;
- if (index >= 0) {
- node.body[index] = node.body[index].transform(tt);
- }
- } else if (node instanceof AST_If) {
- node.body = node.body.transform(tt);
- if (node.alternative) {
- node.alternative = node.alternative.transform(tt);
- }
- } else if (node instanceof AST_With) {
- node.body = node.body.transform(tt);
- }
- return node;
- });
- self.transform(tt);
-});
-
-AST_Toplevel.DEFMETHOD("reset_opt_flags", function(compressor) {
- const self = this;
- const reduce_vars = compressor.option("reduce_vars");
-
- const preparation = new TreeWalker(function(node, descend) {
- clear_flag(node, CLEAR_BETWEEN_PASSES);
- if (reduce_vars) {
- if (compressor.top_retain
- && node instanceof AST_Defun // Only functions are retained
- && preparation.parent() === self
- ) {
- set_flag(node, TOP);
- }
- return node.reduce_vars(preparation, descend, compressor);
- }
- });
- // Stack of look-up tables to keep track of whether a `SymbolDef` has been
- // properly assigned before use:
- // - `push()` & `pop()` when visiting conditional branches
- preparation.safe_ids = Object.create(null);
- preparation.in_loop = null;
- preparation.loop_ids = new Map();
- preparation.defs_to_safe_ids = new Map();
- self.walk(preparation);
-});
-
-AST_Symbol.DEFMETHOD("fixed_value", function() {
- var fixed = this.thedef.fixed;
- if (!fixed || fixed instanceof AST_Node) return fixed;
- return fixed();
-});
-
-AST_SymbolRef.DEFMETHOD("is_immutable", function() {
- var orig = this.definition().orig;
- return orig.length == 1 && orig[0] instanceof AST_SymbolLambda;
-});
-
-function find_scope(tw) {
- for (let i = 0;;i++) {
- const p = tw.parent(i);
- if (p instanceof AST_Toplevel) return p;
- if (p instanceof AST_Lambda) return p;
- if (p.block_scope) return p.block_scope;
- }
-}
-
-function find_variable(compressor, name) {
- var scope, i = 0;
- while (scope = compressor.parent(i++)) {
- if (scope instanceof AST_Scope) break;
- if (scope instanceof AST_Catch && scope.argname) {
- scope = scope.argname.definition().scope;
- break;
- }
- }
- return scope.find_variable(name);
-}
-
-function is_empty(thing) {
- if (thing === null) return true;
- if (thing instanceof AST_EmptyStatement) return true;
- if (thing instanceof AST_BlockStatement) return thing.body.length == 0;
- return false;
-}
-
-var global_names = makePredicate("Array Boolean clearInterval clearTimeout console Date decodeURI decodeURIComponent encodeURI encodeURIComponent Error escape eval EvalError Function isFinite isNaN JSON Math Number parseFloat parseInt RangeError ReferenceError RegExp Object setInterval setTimeout String SyntaxError TypeError unescape URIError");
-AST_SymbolRef.DEFMETHOD("is_declared", function(compressor) {
- return !this.definition().undeclared
- || compressor.option("unsafe") && global_names.has(this.name);
-});
-
-/* -----[ optimizers ]----- */
-
-var directives = new Set(["use asm", "use strict"]);
-def_optimize(AST_Directive, function(self, compressor) {
- if (compressor.option("directives")
- && (!directives.has(self.value) || compressor.has_directive(self.value) !== self)) {
- return make_node(AST_EmptyStatement, self);
- }
- return self;
-});
-
-def_optimize(AST_Debugger, function(self, compressor) {
- if (compressor.option("drop_debugger"))
- return make_node(AST_EmptyStatement, self);
- return self;
-});
-
-def_optimize(AST_LabeledStatement, function(self, compressor) {
- if (self.body instanceof AST_Break
- && compressor.loopcontrol_target(self.body) === self.body) {
- return make_node(AST_EmptyStatement, self);
- }
- return self.label.references.length == 0 ? self.body : self;
-});
-
-def_optimize(AST_Block, function(self, compressor) {
- tighten_body(self.body, compressor);
- return self;
-});
-
-function can_be_extracted_from_if_block(node) {
- return !(
- node instanceof AST_Const
- || node instanceof AST_Let
- || node instanceof AST_Class
- );
-}
-
-def_optimize(AST_BlockStatement, function(self, compressor) {
- tighten_body(self.body, compressor);
- switch (self.body.length) {
- case 1:
- if (!compressor.has_directive("use strict")
- && compressor.parent() instanceof AST_If
- && can_be_extracted_from_if_block(self.body[0])
- || can_be_evicted_from_block(self.body[0])) {
- return self.body[0];
- }
- break;
- case 0: return make_node(AST_EmptyStatement, self);
- }
- return self;
-});
-
-function opt_AST_Lambda(self, compressor) {
- tighten_body(self.body, compressor);
- if (compressor.option("side_effects")
- && self.body.length == 1
- && self.body[0] === compressor.has_directive("use strict")) {
- self.body.length = 0;
- }
- return self;
-}
-def_optimize(AST_Lambda, opt_AST_Lambda);
-
-const r_keep_assign = /keep_assign/;
-AST_Scope.DEFMETHOD("drop_unused", function(compressor) {
- if (!compressor.option("unused")) return;
- if (compressor.has_directive("use asm")) return;
- var self = this;
- if (self.pinned()) return;
- var drop_funcs = !(self instanceof AST_Toplevel) || compressor.toplevel.funcs;
- var drop_vars = !(self instanceof AST_Toplevel) || compressor.toplevel.vars;
- const assign_as_unused = r_keep_assign.test(compressor.option("unused")) ? return_false : function(node) {
- if (node instanceof AST_Assign
- && !node.logical
- && (has_flag(node, WRITE_ONLY) || node.operator == "=")
- ) {
- return node.left;
- }
- if (node instanceof AST_Unary && has_flag(node, WRITE_ONLY)) {
- return node.expression;
- }
- };
- var in_use_ids = new Map();
- var fixed_ids = new Map();
- if (self instanceof AST_Toplevel && compressor.top_retain) {
- self.variables.forEach(function(def) {
- if (compressor.top_retain(def) && !in_use_ids.has(def.id)) {
- in_use_ids.set(def.id, def);
- }
- });
- }
- var var_defs_by_id = new Map();
- var initializations = new Map();
- // pass 1: find out which symbols are directly used in
- // this scope (not in nested scopes).
- var scope = this;
- var tw = new TreeWalker(function(node, descend) {
- if (node instanceof AST_Lambda && node.uses_arguments && !tw.has_directive("use strict")) {
- node.argnames.forEach(function(argname) {
- if (!(argname instanceof AST_SymbolDeclaration)) return;
- var def = argname.definition();
- if (!in_use_ids.has(def.id)) {
- in_use_ids.set(def.id, def);
- }
- });
- }
- if (node === self) return;
- if (node instanceof AST_Defun || node instanceof AST_DefClass) {
- var node_def = node.name.definition();
- const in_export = tw.parent() instanceof AST_Export;
- if (in_export || !drop_funcs && scope === self) {
- if (node_def.global && !in_use_ids.has(node_def.id)) {
- in_use_ids.set(node_def.id, node_def);
- }
- }
- if (node instanceof AST_DefClass) {
- if (
- node.extends
- && (node.extends.has_side_effects(compressor)
- || node.extends.may_throw(compressor))
- ) {
- node.extends.walk(tw);
- }
- for (const prop of node.properties) {
- if (
- prop.has_side_effects(compressor) ||
- prop.may_throw(compressor)
- ) {
- prop.walk(tw);
- }
- }
- }
- map_add(initializations, node_def.id, node);
- return true; // don't go in nested scopes
- }
- if (node instanceof AST_SymbolFunarg && scope === self) {
- map_add(var_defs_by_id, node.definition().id, node);
- }
- if (node instanceof AST_Definitions && scope === self) {
- const in_export = tw.parent() instanceof AST_Export;
- node.definitions.forEach(function(def) {
- if (def.name instanceof AST_SymbolVar) {
- map_add(var_defs_by_id, def.name.definition().id, def);
- }
- if (in_export || !drop_vars) {
- walk(def.name, node => {
- if (node instanceof AST_SymbolDeclaration) {
- const def = node.definition();
- if (
- (in_export || def.global)
- && !in_use_ids.has(def.id)
- ) {
- in_use_ids.set(def.id, def);
- }
- }
- });
- }
- if (def.value) {
- if (def.name instanceof AST_Destructuring) {
- def.walk(tw);
- } else {
- var node_def = def.name.definition();
- map_add(initializations, node_def.id, def.value);
- if (!node_def.chained && def.name.fixed_value() === def.value) {
- fixed_ids.set(node_def.id, def);
- }
- }
- if (def.value.has_side_effects(compressor)) {
- def.value.walk(tw);
- }
- }
- });
- return true;
- }
- return scan_ref_scoped(node, descend);
- });
- self.walk(tw);
- // pass 2: for every used symbol we need to walk its
- // initialization code to figure out if it uses other
- // symbols (that may not be in_use).
- tw = new TreeWalker(scan_ref_scoped);
- in_use_ids.forEach(function (def) {
- var init = initializations.get(def.id);
- if (init) init.forEach(function(init) {
- init.walk(tw);
- });
- });
- // pass 3: we should drop declarations not in_use
- var tt = new TreeTransformer(
- function before(node, descend, in_list) {
- var parent = tt.parent();
- if (drop_vars) {
- const sym = assign_as_unused(node);
- if (sym instanceof AST_SymbolRef) {
- var def = sym.definition();
- var in_use = in_use_ids.has(def.id);
- if (node instanceof AST_Assign) {
- if (!in_use || fixed_ids.has(def.id) && fixed_ids.get(def.id) !== node) {
- return maintain_this_binding(parent, node, node.right.transform(tt));
- }
- } else if (!in_use) return in_list ? MAP.skip : make_node(AST_Number, node, {
- value: 0
- });
- }
- }
- if (scope !== self) return;
- var def;
- if (node.name
- && (node instanceof AST_ClassExpression
- && !keep_name(compressor.option("keep_classnames"), (def = node.name.definition()).name)
- || node instanceof AST_Function
- && !keep_name(compressor.option("keep_fnames"), (def = node.name.definition()).name))) {
- // any declarations with same name will overshadow
- // name of this anonymous function and can therefore
- // never be used anywhere
- if (!in_use_ids.has(def.id) || def.orig.length > 1) node.name = null;
- }
- if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) {
- var trim = !compressor.option("keep_fargs");
- for (var a = node.argnames, i = a.length; --i >= 0;) {
- var sym = a[i];
- if (sym instanceof AST_Expansion) {
- sym = sym.expression;
- }
- if (sym instanceof AST_DefaultAssign) {
- sym = sym.left;
- }
- // Do not drop destructuring arguments.
- // They constitute a type assertion, so dropping
- // them would stop that TypeError which would happen
- // if someone called it with an incorrectly formatted
- // parameter.
- if (!(sym instanceof AST_Destructuring) && !in_use_ids.has(sym.definition().id)) {
- set_flag(sym, UNUSED);
- if (trim) {
- a.pop();
- }
- } else {
- trim = false;
- }
- }
- }
- if ((node instanceof AST_Defun || node instanceof AST_DefClass) && node !== self) {
- const def = node.name.definition();
- let keep = def.global && !drop_funcs || in_use_ids.has(def.id);
- if (!keep) {
- def.eliminated++;
- if (node instanceof AST_DefClass) {
- // Classes might have extends with side effects
- const side_effects = node.drop_side_effect_free(compressor);
- if (side_effects) {
- return make_node(AST_SimpleStatement, node, {
- body: side_effects
- });
- }
- }
- return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);
- }
- }
- if (node instanceof AST_Definitions && !(parent instanceof AST_ForIn && parent.init === node)) {
- var drop_block = !(parent instanceof AST_Toplevel) && !(node instanceof AST_Var);
- // place uninitialized names at the start
- var body = [], head = [], tail = [];
- // for unused names whose initialization has
- // side effects, we can cascade the init. code
- // into the next one, or next statement.
- var side_effects = [];
- node.definitions.forEach(function(def) {
- if (def.value) def.value = def.value.transform(tt);
- var is_destructure = def.name instanceof AST_Destructuring;
- var sym = is_destructure
- ? new SymbolDef(null, { name: "<destructure>" }) /* fake SymbolDef */
- : def.name.definition();
- if (drop_block && sym.global) return tail.push(def);
- if (!(drop_vars || drop_block)
- || is_destructure
- && (def.name.names.length
- || def.name.is_array
- || compressor.option("pure_getters") != true)
- || in_use_ids.has(sym.id)
- ) {
- if (def.value && fixed_ids.has(sym.id) && fixed_ids.get(sym.id) !== def) {
- def.value = def.value.drop_side_effect_free(compressor);
- }
- if (def.name instanceof AST_SymbolVar) {
- var var_defs = var_defs_by_id.get(sym.id);
- if (var_defs.length > 1 && (!def.value || sym.orig.indexOf(def.name) > sym.eliminated)) {
- if (def.value) {
- var ref = make_node(AST_SymbolRef, def.name, def.name);
- sym.references.push(ref);
- var assign = make_node(AST_Assign, def, {
- operator: "=",
- logical: false,
- left: ref,
- right: def.value
- });
- if (fixed_ids.get(sym.id) === def) {
- fixed_ids.set(sym.id, assign);
- }
- side_effects.push(assign.transform(tt));
- }
- remove(var_defs, def);
- sym.eliminated++;
- return;
- }
- }
- if (def.value) {
- if (side_effects.length > 0) {
- if (tail.length > 0) {
- side_effects.push(def.value);
- def.value = make_sequence(def.value, side_effects);
- } else {
- body.push(make_node(AST_SimpleStatement, node, {
- body: make_sequence(node, side_effects)
- }));
- }
- side_effects = [];
- }
- tail.push(def);
- } else {
- head.push(def);
- }
- } else if (sym.orig[0] instanceof AST_SymbolCatch) {
- var value = def.value && def.value.drop_side_effect_free(compressor);
- if (value) side_effects.push(value);
- def.value = null;
- head.push(def);
- } else {
- var value = def.value && def.value.drop_side_effect_free(compressor);
- if (value) {
- side_effects.push(value);
- }
- sym.eliminated++;
- }
- });
- if (head.length > 0 || tail.length > 0) {
- node.definitions = head.concat(tail);
- body.push(node);
- }
- if (side_effects.length > 0) {
- body.push(make_node(AST_SimpleStatement, node, {
- body: make_sequence(node, side_effects)
- }));
- }
- switch (body.length) {
- case 0:
- return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);
- case 1:
- return body[0];
- default:
- return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, {
- body: body
- });
- }
- }
- // certain combination of unused name + side effect leads to:
- // https://github.com/mishoo/UglifyJS2/issues/44
- // https://github.com/mishoo/UglifyJS2/issues/1830
- // https://github.com/mishoo/UglifyJS2/issues/1838
- // that's an invalid AST.
- // We fix it at this stage by moving the `var` outside the `for`.
- if (node instanceof AST_For) {
- descend(node, this);
- var block;
- if (node.init instanceof AST_BlockStatement) {
- block = node.init;
- node.init = block.body.pop();
- block.body.push(node);
- }
- if (node.init instanceof AST_SimpleStatement) {
- node.init = node.init.body;
- } else if (is_empty(node.init)) {
- node.init = null;
- }
- return !block ? node : in_list ? MAP.splice(block.body) : block;
- }
- if (node instanceof AST_LabeledStatement
- && node.body instanceof AST_For
- ) {
- descend(node, this);
- if (node.body instanceof AST_BlockStatement) {
- var block = node.body;
- node.body = block.body.pop();
- block.body.push(node);
- return in_list ? MAP.splice(block.body) : block;
- }
- return node;
- }
- if (node instanceof AST_BlockStatement) {
- descend(node, this);
- if (in_list && node.body.every(can_be_evicted_from_block)) {
- return MAP.splice(node.body);
- }
- return node;
- }
- if (node instanceof AST_Scope) {
- const save_scope = scope;
- scope = node;
- descend(node, this);
- scope = save_scope;
- return node;
- }
- }
- );
-
- self.transform(tt);
-
- function scan_ref_scoped(node, descend) {
- var node_def;
- const sym = assign_as_unused(node);
- if (sym instanceof AST_SymbolRef
- && !is_ref_of(node.left, AST_SymbolBlockDeclaration)
- && self.variables.get(sym.name) === (node_def = sym.definition())
- ) {
- if (node instanceof AST_Assign) {
- node.right.walk(tw);
- if (!node_def.chained && node.left.fixed_value() === node.right) {
- fixed_ids.set(node_def.id, node);
- }
- }
- return true;
- }
- if (node instanceof AST_SymbolRef) {
- node_def = node.definition();
- if (!in_use_ids.has(node_def.id)) {
- in_use_ids.set(node_def.id, node_def);
- if (node_def.orig[0] instanceof AST_SymbolCatch) {
- const redef = node_def.scope.is_block_scope()
- && node_def.scope.get_defun_scope().variables.get(node_def.name);
- if (redef) in_use_ids.set(redef.id, redef);
- }
- }
- return true;
- }
- if (node instanceof AST_Scope) {
- var save_scope = scope;
- scope = node;
- descend();
- scope = save_scope;
- return true;
- }
- }
-});
-
-AST_Scope.DEFMETHOD("hoist_declarations", function(compressor) {
- var self = this;
- if (compressor.has_directive("use asm")) return self;
- // Hoisting makes no sense in an arrow func
- if (!Array.isArray(self.body)) return self;
-
- var hoist_funs = compressor.option("hoist_funs");
- var hoist_vars = compressor.option("hoist_vars");
-
- if (hoist_funs || hoist_vars) {
- var dirs = [];
- var hoisted = [];
- var vars = new Map(), vars_found = 0, var_decl = 0;
- // let's count var_decl first, we seem to waste a lot of
- // space if we hoist `var` when there's only one.
- walk(self, node => {
- if (node instanceof AST_Scope && node !== self)
- return true;
- if (node instanceof AST_Var) {
- ++var_decl;
- return true;
- }
- });
- hoist_vars = hoist_vars && var_decl > 1;
- var tt = new TreeTransformer(
- function before(node) {
- if (node !== self) {
- if (node instanceof AST_Directive) {
- dirs.push(node);
- return make_node(AST_EmptyStatement, node);
- }
- if (hoist_funs && node instanceof AST_Defun
- && !(tt.parent() instanceof AST_Export)
- && tt.parent() === self) {
- hoisted.push(node);
- return make_node(AST_EmptyStatement, node);
- }
- if (
- hoist_vars
- && node instanceof AST_Var
- && !node.definitions.some(def => def.name instanceof AST_Destructuring)
- ) {
- node.definitions.forEach(function(def) {
- vars.set(def.name.name, def);
- ++vars_found;
- });
- var seq = node.to_assignments(compressor);
- var p = tt.parent();
- if (p instanceof AST_ForIn && p.init === node) {
- if (seq == null) {
- var def = node.definitions[0].name;
- return make_node(AST_SymbolRef, def, def);
- }
- return seq;
- }
- if (p instanceof AST_For && p.init === node) {
- return seq;
- }
- if (!seq) return make_node(AST_EmptyStatement, node);
- return make_node(AST_SimpleStatement, node, {
- body: seq
- });
- }
- if (node instanceof AST_Scope)
- return node; // to avoid descending in nested scopes
- }
- }
- );
- self = self.transform(tt);
- if (vars_found > 0) {
- // collect only vars which don't show up in self's arguments list
- var defs = [];
- const is_lambda = self instanceof AST_Lambda;
- const args_as_names = is_lambda ? self.args_as_names() : null;
- vars.forEach((def, name) => {
- if (is_lambda && args_as_names.some((x) => x.name === def.name.name)) {
- vars.delete(name);
- } else {
- def = def.clone();
- def.value = null;
- defs.push(def);
- vars.set(name, def);
- }
- });
- if (defs.length > 0) {
- // try to merge in assignments
- for (var i = 0; i < self.body.length;) {
- if (self.body[i] instanceof AST_SimpleStatement) {
- var expr = self.body[i].body, sym, assign;
- if (expr instanceof AST_Assign
- && expr.operator == "="
- && (sym = expr.left) instanceof AST_Symbol
- && vars.has(sym.name)
- ) {
- var def = vars.get(sym.name);
- if (def.value) break;
- def.value = expr.right;
- remove(defs, def);
- defs.push(def);
- self.body.splice(i, 1);
- continue;
- }
- if (expr instanceof AST_Sequence
- && (assign = expr.expressions[0]) instanceof AST_Assign
- && assign.operator == "="
- && (sym = assign.left) instanceof AST_Symbol
- && vars.has(sym.name)
- ) {
- var def = vars.get(sym.name);
- if (def.value) break;
- def.value = assign.right;
- remove(defs, def);
- defs.push(def);
- self.body[i].body = make_sequence(expr, expr.expressions.slice(1));
- continue;
- }
- }
- if (self.body[i] instanceof AST_EmptyStatement) {
- self.body.splice(i, 1);
- continue;
- }
- if (self.body[i] instanceof AST_BlockStatement) {
- self.body.splice(i, 1, ...self.body[i].body);
- continue;
- }
- break;
- }
- defs = make_node(AST_Var, self, {
- definitions: defs
- });
- hoisted.push(defs);
- }
- }
- self.body = dirs.concat(hoisted, self.body);
- }
- return self;
-});
-
-AST_Scope.DEFMETHOD("hoist_properties", function(compressor) {
- var self = this;
- if (!compressor.option("hoist_props") || compressor.has_directive("use asm")) return self;
- var top_retain = self instanceof AST_Toplevel && compressor.top_retain || return_false;
- var defs_by_id = new Map();
- var hoister = new TreeTransformer(function(node, descend) {
- if (node instanceof AST_Definitions
- && hoister.parent() instanceof AST_Export) return node;
- if (node instanceof AST_VarDef) {
- const sym = node.name;
- let def;
- let value;
- if (sym.scope === self
- && (def = sym.definition()).escaped != 1
- && !def.assignments
- && !def.direct_access
- && !def.single_use
- && !compressor.exposed(def)
- && !top_retain(def)
- && (value = sym.fixed_value()) === node.value
- && value instanceof AST_Object
- && !value.properties.some(prop =>
- prop instanceof AST_Expansion || prop.computed_key()
- )
- ) {
- descend(node, this);
- const defs = new Map();
- const assignments = [];
- value.properties.forEach(({ key, value }) => {
- const scope = find_scope(hoister);
- const symbol = self.create_symbol(sym.CTOR, {
- source: sym,
- scope,
- conflict_scopes: new Set([
- scope,
- ...sym.definition().references.map(ref => ref.scope)
- ]),
- tentative_name: sym.name + "_" + key
- });
-
- defs.set(String(key), symbol.definition());
-
- assignments.push(make_node(AST_VarDef, node, {
- name: symbol,
- value
- }));
- });
- defs_by_id.set(def.id, defs);
- return MAP.splice(assignments);
- }
- } else if (node instanceof AST_PropAccess
- && node.expression instanceof AST_SymbolRef
- ) {
- const defs = defs_by_id.get(node.expression.definition().id);
- if (defs) {
- const def = defs.get(String(get_simple_key(node.property)));
- const sym = make_node(AST_SymbolRef, node, {
- name: def.name,
- scope: node.expression.scope,
- thedef: def
- });
- sym.reference({});
- return sym;
- }
- }
- });
- return self.transform(hoister);
-});
-
-def_optimize(AST_SimpleStatement, function(self, compressor) {
- if (compressor.option("side_effects")) {
- var body = self.body;
- var node = body.drop_side_effect_free(compressor, true);
- if (!node) {
- return make_node(AST_EmptyStatement, self);
- }
- if (node !== body) {
- return make_node(AST_SimpleStatement, self, { body: node });
- }
- }
- return self;
-});
-
-def_optimize(AST_While, function(self, compressor) {
- return compressor.option("loops") ? make_node(AST_For, self, self).optimize(compressor) : self;
-});
-
-def_optimize(AST_Do, function(self, compressor) {
- if (!compressor.option("loops")) return self;
- var cond = self.condition.tail_node().evaluate(compressor);
- if (!(cond instanceof AST_Node)) {
- if (cond) return make_node(AST_For, self, {
- body: make_node(AST_BlockStatement, self.body, {
- body: [
- self.body,
- make_node(AST_SimpleStatement, self.condition, {
- body: self.condition
- })
- ]
- })
- }).optimize(compressor);
- if (!has_break_or_continue(self, compressor.parent())) {
- return make_node(AST_BlockStatement, self.body, {
- body: [
- self.body,
- make_node(AST_SimpleStatement, self.condition, {
- body: self.condition
- })
- ]
- }).optimize(compressor);
- }
- }
- return self;
-});
-
-function if_break_in_loop(self, compressor) {
- var first = self.body instanceof AST_BlockStatement ? self.body.body[0] : self.body;
- if (compressor.option("dead_code") && is_break(first)) {
- var body = [];
- if (self.init instanceof AST_Statement) {
- body.push(self.init);
- } else if (self.init) {
- body.push(make_node(AST_SimpleStatement, self.init, {
- body: self.init
- }));
- }
- if (self.condition) {
- body.push(make_node(AST_SimpleStatement, self.condition, {
- body: self.condition
- }));
- }
- trim_unreachable_code(compressor, self.body, body);
- return make_node(AST_BlockStatement, self, {
- body: body
- });
- }
- if (first instanceof AST_If) {
- if (is_break(first.body)) {
- if (self.condition) {
- self.condition = make_node(AST_Binary, self.condition, {
- left: self.condition,
- operator: "&&",
- right: first.condition.negate(compressor),
- });
- } else {
- self.condition = first.condition.negate(compressor);
- }
- drop_it(first.alternative);
- } else if (is_break(first.alternative)) {
- if (self.condition) {
- self.condition = make_node(AST_Binary, self.condition, {
- left: self.condition,
- operator: "&&",
- right: first.condition,
- });
- } else {
- self.condition = first.condition;
- }
- drop_it(first.body);
- }
- }
- return self;
-
- function is_break(node) {
- return node instanceof AST_Break
- && compressor.loopcontrol_target(node) === compressor.self();
- }
-
- function drop_it(rest) {
- rest = as_statement_array(rest);
- if (self.body instanceof AST_BlockStatement) {
- self.body = self.body.clone();
- self.body.body = rest.concat(self.body.body.slice(1));
- self.body = self.body.transform(compressor);
- } else {
- self.body = make_node(AST_BlockStatement, self.body, {
- body: rest
- }).transform(compressor);
- }
- self = if_break_in_loop(self, compressor);
- }
-}
-
-def_optimize(AST_For, function(self, compressor) {
- if (!compressor.option("loops")) return self;
- if (compressor.option("side_effects") && self.init) {
- self.init = self.init.drop_side_effect_free(compressor);
- }
- if (self.condition) {
- var cond = self.condition.evaluate(compressor);
- if (!(cond instanceof AST_Node)) {
- if (cond) self.condition = null;
- else if (!compressor.option("dead_code")) {
- var orig = self.condition;
- self.condition = make_node_from_constant(cond, self.condition);
- self.condition = best_of_expression(self.condition.transform(compressor), orig);
- }
- }
- if (compressor.option("dead_code")) {
- if (cond instanceof AST_Node) cond = self.condition.tail_node().evaluate(compressor);
- if (!cond) {
- var body = [];
- trim_unreachable_code(compressor, self.body, body);
- if (self.init instanceof AST_Statement) {
- body.push(self.init);
- } else if (self.init) {
- body.push(make_node(AST_SimpleStatement, self.init, {
- body: self.init
- }));
- }
- body.push(make_node(AST_SimpleStatement, self.condition, {
- body: self.condition
- }));
- return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);
- }
- }
- }
- return if_break_in_loop(self, compressor);
-});
-
-def_optimize(AST_If, function(self, compressor) {
- if (is_empty(self.alternative)) self.alternative = null;
-
- if (!compressor.option("conditionals")) return self;
- // if condition can be statically determined, drop
- // one of the blocks. note, statically determined implies
- // “has no side effects”; also it doesn't work for cases like
- // `x && true`, though it probably should.
- var cond = self.condition.evaluate(compressor);
- if (!compressor.option("dead_code") && !(cond instanceof AST_Node)) {
- var orig = self.condition;
- self.condition = make_node_from_constant(cond, orig);
- self.condition = best_of_expression(self.condition.transform(compressor), orig);
- }
- if (compressor.option("dead_code")) {
- if (cond instanceof AST_Node) cond = self.condition.tail_node().evaluate(compressor);
- if (!cond) {
- var body = [];
- trim_unreachable_code(compressor, self.body, body);
- body.push(make_node(AST_SimpleStatement, self.condition, {
- body: self.condition
- }));
- if (self.alternative) body.push(self.alternative);
- return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);
- } else if (!(cond instanceof AST_Node)) {
- var body = [];
- body.push(make_node(AST_SimpleStatement, self.condition, {
- body: self.condition
- }));
- body.push(self.body);
- if (self.alternative) {
- trim_unreachable_code(compressor, self.alternative, body);
- }
- return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);
- }
- }
- var negated = self.condition.negate(compressor);
- var self_condition_length = self.condition.size();
- var negated_length = negated.size();
- var negated_is_best = negated_length < self_condition_length;
- if (self.alternative && negated_is_best) {
- negated_is_best = false; // because we already do the switch here.
- // no need to swap values of self_condition_length and negated_length
- // here because they are only used in an equality comparison later on.
- self.condition = negated;
- var tmp = self.body;
- self.body = self.alternative || make_node(AST_EmptyStatement, self);
- self.alternative = tmp;
- }
- if (is_empty(self.body) && is_empty(self.alternative)) {
- return make_node(AST_SimpleStatement, self.condition, {
- body: self.condition.clone()
- }).optimize(compressor);
- }
- if (self.body instanceof AST_SimpleStatement
- && self.alternative instanceof AST_SimpleStatement) {
- return make_node(AST_SimpleStatement, self, {
- body: make_node(AST_Conditional, self, {
- condition : self.condition,
- consequent : self.body.body,
- alternative : self.alternative.body
- })
- }).optimize(compressor);
- }
- if (is_empty(self.alternative) && self.body instanceof AST_SimpleStatement) {
- if (self_condition_length === negated_length && !negated_is_best
- && self.condition instanceof AST_Binary && self.condition.operator == "||") {
- // although the code length of self.condition and negated are the same,
- // negated does not require additional surrounding parentheses.
- // see https://github.com/mishoo/UglifyJS2/issues/979
- negated_is_best = true;
- }
- if (negated_is_best) return make_node(AST_SimpleStatement, self, {
- body: make_node(AST_Binary, self, {
- operator : "||",
- left : negated,
- right : self.body.body
- })
- }).optimize(compressor);
- return make_node(AST_SimpleStatement, self, {
- body: make_node(AST_Binary, self, {
- operator : "&&",
- left : self.condition,
- right : self.body.body
- })
- }).optimize(compressor);
- }
- if (self.body instanceof AST_EmptyStatement
- && self.alternative instanceof AST_SimpleStatement) {
- return make_node(AST_SimpleStatement, self, {
- body: make_node(AST_Binary, self, {
- operator : "||",
- left : self.condition,
- right : self.alternative.body
- })
- }).optimize(compressor);
- }
- if (self.body instanceof AST_Exit
- && self.alternative instanceof AST_Exit
- && self.body.TYPE == self.alternative.TYPE) {
- return make_node(self.body.CTOR, self, {
- value: make_node(AST_Conditional, self, {
- condition : self.condition,
- consequent : self.body.value || make_node(AST_Undefined, self.body),
- alternative : self.alternative.value || make_node(AST_Undefined, self.alternative)
- }).transform(compressor)
- }).optimize(compressor);
- }
- if (self.body instanceof AST_If
- && !self.body.alternative
- && !self.alternative) {
- self = make_node(AST_If, self, {
- condition: make_node(AST_Binary, self.condition, {
- operator: "&&",
- left: self.condition,
- right: self.body.condition
- }),
- body: self.body.body,
- alternative: null
- });
- }
- if (aborts(self.body)) {
- if (self.alternative) {
- var alt = self.alternative;
- self.alternative = null;
- return make_node(AST_BlockStatement, self, {
- body: [ self, alt ]
- }).optimize(compressor);
- }
- }
- if (aborts(self.alternative)) {
- var body = self.body;
- self.body = self.alternative;
- self.condition = negated_is_best ? negated : self.condition.negate(compressor);
- self.alternative = null;
- return make_node(AST_BlockStatement, self, {
- body: [ self, body ]
- }).optimize(compressor);
- }
- return self;
-});
-
-def_optimize(AST_Switch, function(self, compressor) {
- if (!compressor.option("switches")) return self;
- var branch;
- var value = self.expression.evaluate(compressor);
- if (!(value instanceof AST_Node)) {
- var orig = self.expression;
- self.expression = make_node_from_constant(value, orig);
- self.expression = best_of_expression(self.expression.transform(compressor), orig);
- }
- if (!compressor.option("dead_code")) return self;
- if (value instanceof AST_Node) {
- value = self.expression.tail_node().evaluate(compressor);
- }
- var decl = [];
- var body = [];
- var default_branch;
- var exact_match;
- for (var i = 0, len = self.body.length; i < len && !exact_match; i++) {
- branch = self.body[i];
- if (branch instanceof AST_Default) {
- if (!default_branch) {
- default_branch = branch;
- } else {
- eliminate_branch(branch, body[body.length - 1]);
- }
- } else if (!(value instanceof AST_Node)) {
- var exp = branch.expression.evaluate(compressor);
- if (!(exp instanceof AST_Node) && exp !== value) {
- eliminate_branch(branch, body[body.length - 1]);
- continue;
- }
- if (exp instanceof AST_Node) exp = branch.expression.tail_node().evaluate(compressor);
- if (exp === value) {
- exact_match = branch;
- if (default_branch) {
- var default_index = body.indexOf(default_branch);
- body.splice(default_index, 1);
- eliminate_branch(default_branch, body[default_index - 1]);
- default_branch = null;
- }
- }
- }
- body.push(branch);
- }
- while (i < len) eliminate_branch(self.body[i++], body[body.length - 1]);
- self.body = body;
-
- let default_or_exact = default_branch || exact_match;
- default_branch = null;
- exact_match = null;
-
- // group equivalent branches so they will be located next to each other,
- // that way the next micro-optimization will merge them.
- // ** bail micro-optimization if not a simple switch case with breaks
- if (body.every((branch, i) =>
- (branch === default_or_exact || !branch.expression.has_side_effects(compressor))
- && (branch.body.length === 0 || aborts(branch) || body.length - 1 === i))
- ) {
- for (let i = 0; i < body.length; i++) {
- const branch = body[i];
- for (let j = i + 1; j < body.length; j++) {
- const next = body[j];
- if (next.body.length === 0) continue;
- const last_branch = j === (body.length - 1);
- const equivalentBranch = branches_equivalent(next, branch, false);
- if (equivalentBranch || (last_branch && branches_equivalent(next, branch, true))) {
- if (!equivalentBranch && last_branch) {
- next.body.push(make_node(AST_Break));
- }
-
- // let's find previous siblings with inert fallthrough...
- let x = j - 1;
- let fallthroughDepth = 0;
- while (x > i) {
- if (is_inert_body(body[x--])) {
- fallthroughDepth++;
- } else {
- break;
- }
- }
-
- const plucked = body.splice(j - fallthroughDepth, 1 + fallthroughDepth);
- body.splice(i + 1, 0, ...plucked);
- i += plucked.length;
- }
- }
- }
- }
-
- // merge equivalent branches in a row
- for (let i = 0; i < body.length; i++) {
- let branch = body[i];
- if (branch.body.length === 0) continue;
- if (!aborts(branch)) continue;
-
- for (let j = i + 1; j < body.length; i++, j++) {
- let next = body[j];
- if (next.body.length === 0) continue;
- if (
- branches_equivalent(next, branch, false)
- || (j === body.length - 1 && branches_equivalent(next, branch, true))
- ) {
- branch.body = [];
- branch = next;
- continue;
- }
- break;
- }
- }
-
- // Prune any empty branches at the end of the switch statement.
- {
- let i = body.length - 1;
- for (; i >= 0; i--) {
- let bbody = body[i].body;
- if (is_break(bbody[bbody.length - 1], compressor)) bbody.pop();
- if (!is_inert_body(body[i])) break;
- }
- // i now points to the index of a branch that contains a body. By incrementing, it's
- // pointing to the first branch that's empty.
- i++;
- if (!default_or_exact || body.indexOf(default_or_exact) >= i) {
- // The default behavior is to do nothing. We can take advantage of that to
- // remove all case expressions that are side-effect free that also do
- // nothing, since they'll default to doing nothing. But we can't remove any
- // case expressions before one that would side-effect, since they may cause
- // the side-effect to be skipped.
- for (let j = body.length - 1; j >= i; j--) {
- let branch = body[j];
- if (branch === default_or_exact) {
- default_or_exact = null;
- body.pop();
- } else if (!branch.expression.has_side_effects(compressor)) {
- body.pop();
- } else {
- break;
- }
- }
- }
- }
-
-
- // Prune side-effect free branches that fall into default.
- if (default_or_exact) {
- let default_index = body.indexOf(default_or_exact);
- let default_body_index = default_index;
- for (; default_body_index < body.length - 1; default_body_index++) {
- if (!is_inert_body(body[default_body_index])) break;
- }
- let side_effect_index = body.length - 1;
- for (; side_effect_index >= 0; side_effect_index--) {
- let branch = body[side_effect_index];
- if (branch === default_or_exact) continue;
- if (branch.expression.has_side_effects(compressor)) break;
- }
- // If the default behavior comes after any side-effect case expressions,
- // then we can fold all side-effect free cases into the default branch.
- // If the side-effect case is after the default, then any side-effect
- // free cases could prevent the side-effect from occurring.
- if (default_body_index > side_effect_index) {
- let prev_body_index = default_index - 1;
- for (; prev_body_index >= 0; prev_body_index--) {
- if (!is_inert_body(body[prev_body_index])) break;
- }
- let before = Math.max(side_effect_index, prev_body_index) + 1;
- let after = default_index;
- if (side_effect_index > default_index) {
- // If the default falls into the same body as a side-effect
- // case, then we need preserve that case and only prune the
- // cases after it.
- after = side_effect_index;
- body[side_effect_index].body = body[default_body_index].body;
- } else {
- // The default will be the last branch.
- default_or_exact.body = body[default_body_index].body;
- }
-
- // Prune everything after the default (or last side-effect case)
- // until the next case with a body.
- body.splice(after + 1, default_body_index - after);
- // Prune everything before the default that falls into it.
- body.splice(before, default_index - before);
- }
- }
-
- // See if we can remove the switch entirely if all cases (the default) fall into the same case body.
- DEFAULT: if (default_or_exact) {
- let i = body.findIndex(branch => !is_inert_body(branch));
- let caseBody;
- // `i` is equal to one of the following:
- // - `-1`, there is no body in the switch statement.
- // - `body.length - 1`, all cases fall into the same body.
- // - anything else, there are multiple bodies in the switch.
- if (i === body.length - 1) {
- // All cases fall into the case body.
- let branch = body[i];
- if (has_nested_break(self)) break DEFAULT;
-
- // This is the last case body, and we've already pruned any breaks, so it's
- // safe to hoist.
- caseBody = make_node(AST_BlockStatement, branch, {
- body: branch.body
- });
- branch.body = [];
- } else if (i !== -1) {
- // If there are multiple bodies, then we cannot optimize anything.
- break DEFAULT;
- }
-
- let sideEffect = body.find(branch => {
- return (
- branch !== default_or_exact
- && branch.expression.has_side_effects(compressor)
- );
- });
- // If no cases cause a side-effect, we can eliminate the switch entirely.
- if (!sideEffect) {
- return make_node(AST_BlockStatement, self, {
- body: decl.concat(
- statement(self.expression),
- default_or_exact.expression ? statement(default_or_exact.expression) : [],
- caseBody || []
- )
- }).optimize(compressor);
- }
-
- // If we're this far, either there was no body or all cases fell into the same body.
- // If there was no body, then we don't need a default branch (because the default is
- // do nothing). If there was a body, we'll extract it to after the switch, so the
- // switch's new default is to do nothing and we can still prune it.
- const default_index = body.indexOf(default_or_exact);
- body.splice(default_index, 1);
- default_or_exact = null;
-
- if (caseBody) {
- // Recurse into switch statement one more time so that we can append the case body
- // outside of the switch. This recursion will only happen once since we've pruned
- // the default case.
- return make_node(AST_BlockStatement, self, {
- body: decl.concat(self, caseBody)
- }).optimize(compressor);
- }
- // If we fall here, there is a default branch somewhere, there are no case bodies,
- // and there's a side-effect somewhere. Just let the below paths take care of it.
- }
-
- if (body.length > 0) {
- body[0].body = decl.concat(body[0].body);
- }
-
- if (body.length == 0) {
- return make_node(AST_BlockStatement, self, {
- body: decl.concat(statement(self.expression))
- }).optimize(compressor);
- }
- if (body.length == 1 && !has_nested_break(self)) {
- // This is the last case body, and we've already pruned any breaks, so it's
- // safe to hoist.
- let branch = body[0];
- return make_node(AST_If, self, {
- condition: make_node(AST_Binary, self, {
- operator: "===",
- left: self.expression,
- right: branch.expression,
- }),
- body: make_node(AST_BlockStatement, branch, {
- body: branch.body
- }),
- alternative: null
- }).optimize(compressor);
- }
- if (body.length === 2 && default_or_exact && !has_nested_break(self)) {
- let branch = body[0] === default_or_exact ? body[1] : body[0];
- let exact_exp = default_or_exact.expression && statement(default_or_exact.expression);
- if (aborts(body[0])) {
- // Only the first branch body could have a break (at the last statement)
- let first = body[0];
- if (is_break(first.body[first.body.length - 1], compressor)) {
- first.body.pop();
- }
- return make_node(AST_If, self, {
- condition: make_node(AST_Binary, self, {
- operator: "===",
- left: self.expression,
- right: branch.expression,
- }),
- body: make_node(AST_BlockStatement, branch, {
- body: branch.body
- }),
- alternative: make_node(AST_BlockStatement, default_or_exact, {
- body: [].concat(
- exact_exp || [],
- default_or_exact.body
- )
- })
- }).optimize(compressor);
- }
- let operator = "===";
- let consequent = make_node(AST_BlockStatement, branch, {
- body: branch.body,
- });
- let always = make_node(AST_BlockStatement, default_or_exact, {
- body: [].concat(
- exact_exp || [],
- default_or_exact.body
- )
- });
- if (body[0] === default_or_exact) {
- operator = "!==";
- let tmp = always;
- always = consequent;
- consequent = tmp;
- }
- return make_node(AST_BlockStatement, self, {
- body: [
- make_node(AST_If, self, {
- condition: make_node(AST_Binary, self, {
- operator: operator,
- left: self.expression,
- right: branch.expression,
- }),
- body: consequent,
- alternative: null
- })
- ].concat(always)
- }).optimize(compressor);
- }
- return self;
-
- function eliminate_branch(branch, prev) {
- if (prev && !aborts(prev)) {
- prev.body = prev.body.concat(branch.body);
- } else {
- trim_unreachable_code(compressor, branch, decl);
- }
- }
- function branches_equivalent(branch, prev, insertBreak) {
- let bbody = branch.body;
- let pbody = prev.body;
- if (insertBreak) {
- bbody = bbody.concat(make_node(AST_Break));
- }
- if (bbody.length !== pbody.length) return false;
- let bblock = make_node(AST_BlockStatement, branch, { body: bbody });
- let pblock = make_node(AST_BlockStatement, prev, { body: pbody });
- return bblock.equivalent_to(pblock);
- }
- function statement(expression) {
- return make_node(AST_SimpleStatement, expression, {
- body: expression
- });
- }
- function has_nested_break(root) {
- let has_break = false;
- let tw = new TreeWalker(node => {
- if (has_break) return true;
- if (node instanceof AST_Lambda) return true;
- if (node instanceof AST_SimpleStatement) return true;
- if (!is_break(node, tw)) return;
- let parent = tw.parent();
- if (
- parent instanceof AST_SwitchBranch
- && parent.body[parent.body.length - 1] === node
- ) {
- return;
- }
- has_break = true;
- });
- root.walk(tw);
- return has_break;
- }
- function is_break(node, stack) {
- return node instanceof AST_Break
- && stack.loopcontrol_target(node) === self;
- }
- function is_inert_body(branch) {
- return !aborts(branch) && !make_node(AST_BlockStatement, branch, {
- body: branch.body
- }).has_side_effects(compressor);
- }
-});
-
-def_optimize(AST_Try, function(self, compressor) {
- tighten_body(self.body, compressor);
- if (self.bcatch && self.bfinally && self.bfinally.body.every(is_empty)) self.bfinally = null;
- if (compressor.option("dead_code") && self.body.every(is_empty)) {
- var body = [];
- if (self.bcatch) {
- trim_unreachable_code(compressor, self.bcatch, body);
- }
- if (self.bfinally) body.push(...self.bfinally.body);
- return make_node(AST_BlockStatement, self, {
- body: body
- }).optimize(compressor);
- }
- return self;
-});
-
-AST_Definitions.DEFMETHOD("remove_initializers", function() {
- var decls = [];
- this.definitions.forEach(function(def) {
- if (def.name instanceof AST_SymbolDeclaration) {
- def.value = null;
- decls.push(def);
- } else {
- walk(def.name, node => {
- if (node instanceof AST_SymbolDeclaration) {
- decls.push(make_node(AST_VarDef, def, {
- name: node,
- value: null
- }));
- }
- });
- }
- });
- this.definitions = decls;
-});
-
-AST_Definitions.DEFMETHOD("to_assignments", function(compressor) {
- var reduce_vars = compressor.option("reduce_vars");
- var assignments = [];
-
- for (const def of this.definitions) {
- if (def.value) {
- var name = make_node(AST_SymbolRef, def.name, def.name);
- assignments.push(make_node(AST_Assign, def, {
- operator : "=",
- logical: false,
- left : name,
- right : def.value
- }));
- if (reduce_vars) name.definition().fixed = false;
- } else if (def.value) {
- // Because it's a destructuring, do not turn into an assignment.
- var varDef = make_node(AST_VarDef, def, {
- name: def.name,
- value: def.value
- });
- var var_ = make_node(AST_Var, def, {
- definitions: [ varDef ]
- });
- assignments.push(var_);
- }
- const thedef = def.name.definition();
- thedef.eliminated++;
- thedef.replaced--;
- }
-
- if (assignments.length == 0) return null;
- return make_sequence(this, assignments);
-});
-
-def_optimize(AST_Definitions, function(self) {
- if (self.definitions.length == 0)
- return make_node(AST_EmptyStatement, self);
- return self;
-});
-
-def_optimize(AST_VarDef, function(self, compressor) {
- if (
- self.name instanceof AST_SymbolLet
- && self.value != null
- && is_undefined(self.value, compressor)
- ) {
- self.value = null;
- }
- return self;
-});
-
-def_optimize(AST_Import, function(self) {
- return self;
-});
-
-// TODO this only works with AST_Defun, shouldn't it work for other ways of defining functions?
-function retain_top_func(fn, compressor) {
- return compressor.top_retain
- && fn instanceof AST_Defun
- && has_flag(fn, TOP)
- && fn.name
- && compressor.top_retain(fn.name);
-}
-
-def_optimize(AST_Call, function(self, compressor) {
- var exp = self.expression;
- var fn = exp;
- inline_array_like_spread(self.args);
- var simple_args = self.args.every((arg) =>
- !(arg instanceof AST_Expansion)
- );
-
- if (compressor.option("reduce_vars")
- && fn instanceof AST_SymbolRef
- && !has_annotation(self, _NOINLINE)
- ) {
- const fixed = fn.fixed_value();
- if (!retain_top_func(fixed, compressor)) {
- fn = fixed;
- }
- }
-
- var is_func = fn instanceof AST_Lambda;
-
- if (is_func && fn.pinned()) return self;
-
- if (compressor.option("unused")
- && simple_args
- && is_func
- && !fn.uses_arguments) {
- var pos = 0, last = 0;
- for (var i = 0, len = self.args.length; i < len; i++) {
- if (fn.argnames[i] instanceof AST_Expansion) {
- if (has_flag(fn.argnames[i].expression, UNUSED)) while (i < len) {
- var node = self.args[i++].drop_side_effect_free(compressor);
- if (node) {
- self.args[pos++] = node;
- }
- } else while (i < len) {
- self.args[pos++] = self.args[i++];
- }
- last = pos;
- break;
- }
- var trim = i >= fn.argnames.length;
- if (trim || has_flag(fn.argnames[i], UNUSED)) {
- var node = self.args[i].drop_side_effect_free(compressor);
- if (node) {
- self.args[pos++] = node;
- } else if (!trim) {
- self.args[pos++] = make_node(AST_Number, self.args[i], {
- value: 0
- });
- continue;
- }
- } else {
- self.args[pos++] = self.args[i];
- }
- last = pos;
- }
- self.args.length = last;
- }
-
- if (compressor.option("unsafe")) {
- if (exp instanceof AST_Dot && exp.start.value === "Array" && exp.property === "from" && self.args.length === 1) {
- const [argument] = self.args;
- if (argument instanceof AST_Array) {
- return make_node(AST_Array, argument, {
- elements: argument.elements
- }).optimize(compressor);
- }
- }
- if (is_undeclared_ref(exp)) switch (exp.name) {
- case "Array":
- if (self.args.length != 1) {
- return make_node(AST_Array, self, {
- elements: self.args
- }).optimize(compressor);
- } else if (self.args[0] instanceof AST_Number && self.args[0].value <= 11) {
- const elements = [];
- for (let i = 0; i < self.args[0].value; i++) elements.push(new AST_Hole);
- return new AST_Array({ elements });
- }
- break;
- case "Object":
- if (self.args.length == 0) {
- return make_node(AST_Object, self, {
- properties: []
- });
- }
- break;
- case "String":
- if (self.args.length == 0) return make_node(AST_String, self, {
- value: ""
- });
- if (self.args.length <= 1) return make_node(AST_Binary, self, {
- left: self.args[0],
- operator: "+",
- right: make_node(AST_String, self, { value: "" })
- }).optimize(compressor);
- break;
- case "Number":
- if (self.args.length == 0) return make_node(AST_Number, self, {
- value: 0
- });
- if (self.args.length == 1 && compressor.option("unsafe_math")) {
- return make_node(AST_UnaryPrefix, self, {
- expression: self.args[0],
- operator: "+"
- }).optimize(compressor);
- }
- break;
- case "Symbol":
- if (self.args.length == 1 && self.args[0] instanceof AST_String && compressor.option("unsafe_symbols"))
- self.args.length = 0;
- break;
- case "Boolean":
- if (self.args.length == 0) return make_node(AST_False, self);
- if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, {
- expression: make_node(AST_UnaryPrefix, self, {
- expression: self.args[0],
- operator: "!"
- }),
- operator: "!"
- }).optimize(compressor);
- break;
- case "RegExp":
- var params = [];
- if (self.args.length >= 1
- && self.args.length <= 2
- && self.args.every((arg) => {
- var value = arg.evaluate(compressor);
- params.push(value);
- return arg !== value;
- })
- ) {
- let [ source, flags ] = params;
- source = regexp_source_fix(new RegExp(source).source);
- const rx = make_node(AST_RegExp, self, {
- value: { source, flags }
- });
- if (rx._eval(compressor) !== rx) {
- return rx;
- }
- }
- break;
- } else if (exp instanceof AST_Dot) switch(exp.property) {
- case "toString":
- if (self.args.length == 0 && !exp.expression.may_throw_on_access(compressor)) {
- return make_node(AST_Binary, self, {
- left: make_node(AST_String, self, { value: "" }),
- operator: "+",
- right: exp.expression
- }).optimize(compressor);
- }
- break;
- case "join":
- if (exp.expression instanceof AST_Array) EXIT: {
- var separator;
- if (self.args.length > 0) {
- separator = self.args[0].evaluate(compressor);
- if (separator === self.args[0]) break EXIT; // not a constant
- }
- var elements = [];
- var consts = [];
- for (var i = 0, len = exp.expression.elements.length; i < len; i++) {
- var el = exp.expression.elements[i];
- if (el instanceof AST_Expansion) break EXIT;
- var value = el.evaluate(compressor);
- if (value !== el) {
- consts.push(value);
- } else {
- if (consts.length > 0) {
- elements.push(make_node(AST_String, self, {
- value: consts.join(separator)
- }));
- consts.length = 0;
- }
- elements.push(el);
- }
- }
- if (consts.length > 0) {
- elements.push(make_node(AST_String, self, {
- value: consts.join(separator)
- }));
- }
- if (elements.length == 0) return make_node(AST_String, self, { value: "" });
- if (elements.length == 1) {
- if (elements[0].is_string(compressor)) {
- return elements[0];
- }
- return make_node(AST_Binary, elements[0], {
- operator : "+",
- left : make_node(AST_String, self, { value: "" }),
- right : elements[0]
- });
- }
- if (separator == "") {
- var first;
- if (elements[0].is_string(compressor)
- || elements[1].is_string(compressor)) {
- first = elements.shift();
- } else {
- first = make_node(AST_String, self, { value: "" });
- }
- return elements.reduce(function(prev, el) {
- return make_node(AST_Binary, el, {
- operator : "+",
- left : prev,
- right : el
- });
- }, first).optimize(compressor);
- }
- // need this awkward cloning to not affect original element
- // best_of will decide which one to get through.
- var node = self.clone();
- node.expression = node.expression.clone();
- node.expression.expression = node.expression.expression.clone();
- node.expression.expression.elements = elements;
- return best_of(compressor, self, node);
- }
- break;
- case "charAt":
- if (exp.expression.is_string(compressor)) {
- var arg = self.args[0];
- var index = arg ? arg.evaluate(compressor) : 0;
- if (index !== arg) {
- return make_node(AST_Sub, exp, {
- expression: exp.expression,
- property: make_node_from_constant(index | 0, arg || exp)
- }).optimize(compressor);
- }
- }
- break;
- case "apply":
- if (self.args.length == 2 && self.args[1] instanceof AST_Array) {
- var args = self.args[1].elements.slice();
- args.unshift(self.args[0]);
- return make_node(AST_Call, self, {
- expression: make_node(AST_Dot, exp, {
- expression: exp.expression,
- optional: false,
- property: "call"
- }),
- args: args
- }).optimize(compressor);
- }
- break;
- case "call":
- var func = exp.expression;
- if (func instanceof AST_SymbolRef) {
- func = func.fixed_value();
- }
- if (func instanceof AST_Lambda && !func.contains_this()) {
- return (self.args.length ? make_sequence(this, [
- self.args[0],
- make_node(AST_Call, self, {
- expression: exp.expression,
- args: self.args.slice(1)
- })
- ]) : make_node(AST_Call, self, {
- expression: exp.expression,
- args: []
- })).optimize(compressor);
- }
- break;
- }
- }
-
- if (compressor.option("unsafe_Function")
- && is_undeclared_ref(exp)
- && exp.name == "Function") {
- // new Function() => function(){}
- if (self.args.length == 0) return make_node(AST_Function, self, {
- argnames: [],
- body: []
- }).optimize(compressor);
- var nth_identifier = compressor.mangle_options && compressor.mangle_options.nth_identifier || base54;
- if (self.args.every((x) => x instanceof AST_String)) {
- // quite a corner-case, but we can handle it:
- // https://github.com/mishoo/UglifyJS2/issues/203
- // if the code argument is a constant, then we can minify it.
- try {
- var code = "n(function(" + self.args.slice(0, -1).map(function(arg) {
- return arg.value;
- }).join(",") + "){" + self.args[self.args.length - 1].value + "})";
- var ast = parse(code);
- var mangle = { ie8: compressor.option("ie8"), nth_identifier: nth_identifier };
- ast.figure_out_scope(mangle);
- var comp = new Compressor(compressor.options, {
- mangle_options: compressor.mangle_options
- });
- ast = ast.transform(comp);
- ast.figure_out_scope(mangle);
- ast.compute_char_frequency(mangle);
- ast.mangle_names(mangle);
- var fun;
- walk(ast, node => {
- if (is_func_expr(node)) {
- fun = node;
- return walk_abort;
- }
- });
- var code = OutputStream();
- AST_BlockStatement.prototype._codegen.call(fun, fun, code);
- self.args = [
- make_node(AST_String, self, {
- value: fun.argnames.map(function(arg) {
- return arg.print_to_string();
- }).join(",")
- }),
- make_node(AST_String, self.args[self.args.length - 1], {
- value: code.get().replace(/^{|}$/g, "")
- })
- ];
- return self;
- } catch (ex) {
- if (!(ex instanceof JS_Parse_Error)) {
- throw ex;
- }
-
- // Otherwise, it crashes at runtime. Or maybe it's nonstandard syntax.
- }
- }
- }
-
- var stat = is_func && fn.body[0];
- var is_regular_func = is_func && !fn.is_generator && !fn.async;
- var can_inline = is_regular_func && compressor.option("inline") && !self.is_callee_pure(compressor);
- if (can_inline && stat instanceof AST_Return) {
- let returned = stat.value;
- if (!returned || returned.is_constant_expression()) {
- if (returned) {
- returned = returned.clone(true);
- } else {
- returned = make_node(AST_Undefined, self);
- }
- const args = self.args.concat(returned);
- return make_sequence(self, args).optimize(compressor);
- }
-
- // optimize identity function
- if (
- fn.argnames.length === 1
- && (fn.argnames[0] instanceof AST_SymbolFunarg)
- && self.args.length < 2
- && returned instanceof AST_SymbolRef
- && returned.name === fn.argnames[0].name
- ) {
- const replacement =
- (self.args[0] || make_node(AST_Undefined)).optimize(compressor);
-
- let parent;
- if (
- replacement instanceof AST_PropAccess
- && (parent = compressor.parent()) instanceof AST_Call
- && parent.expression === self
- ) {
- // identity function was being used to remove `this`, like in
- //
- // id(bag.no_this)(...)
- //
- // Replace with a larger but more effish (0, bag.no_this) wrapper.
-
- return make_sequence(self, [
- make_node(AST_Number, self, { value: 0 }),
- replacement
- ]);
- }
- // replace call with first argument or undefined if none passed
- return replacement;
- }
- }
-
- if (can_inline) {
- var scope, in_loop, level = -1;
- let def;
- let returned_value;
- let nearest_scope;
- if (simple_args
- && !fn.uses_arguments
- && !(compressor.parent() instanceof AST_Class)
- && !(fn.name && fn instanceof AST_Function)
- && (returned_value = can_flatten_body(stat))
- && (exp === fn
- || has_annotation(self, _INLINE)
- || compressor.option("unused")
- && (def = exp.definition()).references.length == 1
- && !is_recursive_ref(compressor, def)
- && fn.is_constant_expression(exp.scope))
- && !has_annotation(self, _PURE | _NOINLINE)
- && !fn.contains_this()
- && can_inject_symbols()
- && (nearest_scope = find_scope(compressor))
- && !scope_encloses_variables_in_this_scope(nearest_scope, fn)
- && !(function in_default_assign() {
- // Due to the fact function parameters have their own scope
- // which can't use `var something` in the function body within,
- // we simply don't inline into DefaultAssign.
- let i = 0;
- let p;
- while ((p = compressor.parent(i++))) {
- if (p instanceof AST_DefaultAssign) return true;
- if (p instanceof AST_Block) break;
- }
- return false;
- })()
- && !(scope instanceof AST_Class)
- ) {
- set_flag(fn, SQUEEZED);
- nearest_scope.add_child_scope(fn);
- return make_sequence(self, flatten_fn(returned_value)).optimize(compressor);
- }
- }
-
- if (can_inline && has_annotation(self, _INLINE)) {
- set_flag(fn, SQUEEZED);
- fn = make_node(fn.CTOR === AST_Defun ? AST_Function : fn.CTOR, fn, fn);
- fn = fn.clone(true);
- fn.figure_out_scope({}, {
- parent_scope: find_scope(compressor),
- toplevel: compressor.get_toplevel()
- });
-
- return make_node(AST_Call, self, {
- expression: fn,
- args: self.args,
- }).optimize(compressor);
- }
-
- const can_drop_this_call = is_regular_func && compressor.option("side_effects") && fn.body.every(is_empty);
- if (can_drop_this_call) {
- var args = self.args.concat(make_node(AST_Undefined, self));
- return make_sequence(self, args).optimize(compressor);
- }
-
- if (compressor.option("negate_iife")
- && compressor.parent() instanceof AST_SimpleStatement
- && is_iife_call(self)) {
- return self.negate(compressor, true);
- }
-
- var ev = self.evaluate(compressor);
- if (ev !== self) {
- ev = make_node_from_constant(ev, self).optimize(compressor);
- return best_of(compressor, ev, self);
- }
-
- return self;
-
- function return_value(stat) {
- if (!stat) return make_node(AST_Undefined, self);
- if (stat instanceof AST_Return) {
- if (!stat.value) return make_node(AST_Undefined, self);
- return stat.value.clone(true);
- }
- if (stat instanceof AST_SimpleStatement) {
- return make_node(AST_UnaryPrefix, stat, {
- operator: "void",
- expression: stat.body.clone(true)
- });
- }
- }
-
- function can_flatten_body(stat) {
- var body = fn.body;
- var len = body.length;
- if (compressor.option("inline") < 3) {
- return len == 1 && return_value(stat);
- }
- stat = null;
- for (var i = 0; i < len; i++) {
- var line = body[i];
- if (line instanceof AST_Var) {
- if (stat && !line.definitions.every((var_def) =>
- !var_def.value
- )) {
- return false;
- }
- } else if (stat) {
- return false;
- } else if (!(line instanceof AST_EmptyStatement)) {
- stat = line;
- }
- }
- return return_value(stat);
- }
-
- function can_inject_args(block_scoped, safe_to_inject) {
- for (var i = 0, len = fn.argnames.length; i < len; i++) {
- var arg = fn.argnames[i];
- if (arg instanceof AST_DefaultAssign) {
- if (has_flag(arg.left, UNUSED)) continue;
- return false;
- }
- if (arg instanceof AST_Destructuring) return false;
- if (arg instanceof AST_Expansion) {
- if (has_flag(arg.expression, UNUSED)) continue;
- return false;
- }
- if (has_flag(arg, UNUSED)) continue;
- if (!safe_to_inject
- || block_scoped.has(arg.name)
- || identifier_atom.has(arg.name)
- || scope.conflicting_def(arg.name)) {
- return false;
- }
- if (in_loop) in_loop.push(arg.definition());
- }
- return true;
- }
-
- function can_inject_vars(block_scoped, safe_to_inject) {
- var len = fn.body.length;
- for (var i = 0; i < len; i++) {
- var stat = fn.body[i];
- if (!(stat instanceof AST_Var)) continue;
- if (!safe_to_inject) return false;
- for (var j = stat.definitions.length; --j >= 0;) {
- var name = stat.definitions[j].name;
- if (name instanceof AST_Destructuring
- || block_scoped.has(name.name)
- || identifier_atom.has(name.name)
- || scope.conflicting_def(name.name)) {
- return false;
- }
- if (in_loop) in_loop.push(name.definition());
- }
- }
- return true;
- }
-
- function can_inject_symbols() {
- var block_scoped = new Set();
- do {
- scope = compressor.parent(++level);
- if (scope.is_block_scope() && scope.block_scope) {
- // TODO this is sometimes undefined during compression.
- // But it should always have a value!
- scope.block_scope.variables.forEach(function (variable) {
- block_scoped.add(variable.name);
- });
- }
- if (scope instanceof AST_Catch) {
- // TODO can we delete? AST_Catch is a block scope.
- if (scope.argname) {
- block_scoped.add(scope.argname.name);
- }
- } else if (scope instanceof AST_IterationStatement) {
- in_loop = [];
- } else if (scope instanceof AST_SymbolRef) {
- if (scope.fixed_value() instanceof AST_Scope) return false;
- }
- } while (!(scope instanceof AST_Scope));
-
- var safe_to_inject = !(scope instanceof AST_Toplevel) || compressor.toplevel.vars;
- var inline = compressor.option("inline");
- if (!can_inject_vars(block_scoped, inline >= 3 && safe_to_inject)) return false;
- if (!can_inject_args(block_scoped, inline >= 2 && safe_to_inject)) return false;
- return !in_loop || in_loop.length == 0 || !is_reachable(fn, in_loop);
- }
-
- function append_var(decls, expressions, name, value) {
- var def = name.definition();
-
- // Name already exists, only when a function argument had the same name
- const already_appended = scope.variables.has(name.name);
- if (!already_appended) {
- scope.variables.set(name.name, def);
- scope.enclosed.push(def);
- decls.push(make_node(AST_VarDef, name, {
- name: name,
- value: null
- }));
- }
-
- var sym = make_node(AST_SymbolRef, name, name);
- def.references.push(sym);
- if (value) expressions.push(make_node(AST_Assign, self, {
- operator: "=",
- logical: false,
- left: sym,
- right: value.clone()
- }));
- }
-
- function flatten_args(decls, expressions) {
- var len = fn.argnames.length;
- for (var i = self.args.length; --i >= len;) {
- expressions.push(self.args[i]);
- }
- for (i = len; --i >= 0;) {
- var name = fn.argnames[i];
- var value = self.args[i];
- if (has_flag(name, UNUSED) || !name.name || scope.conflicting_def(name.name)) {
- if (value) expressions.push(value);
- } else {
- var symbol = make_node(AST_SymbolVar, name, name);
- name.definition().orig.push(symbol);
- if (!value && in_loop) value = make_node(AST_Undefined, self);
- append_var(decls, expressions, symbol, value);
- }
- }
- decls.reverse();
- expressions.reverse();
- }
-
- function flatten_vars(decls, expressions) {
- var pos = expressions.length;
- for (var i = 0, lines = fn.body.length; i < lines; i++) {
- var stat = fn.body[i];
- if (!(stat instanceof AST_Var)) continue;
- for (var j = 0, defs = stat.definitions.length; j < defs; j++) {
- var var_def = stat.definitions[j];
- var name = var_def.name;
- append_var(decls, expressions, name, var_def.value);
- if (in_loop && fn.argnames.every((argname) =>
- argname.name != name.name
- )) {
- var def = fn.variables.get(name.name);
- var sym = make_node(AST_SymbolRef, name, name);
- def.references.push(sym);
- expressions.splice(pos++, 0, make_node(AST_Assign, var_def, {
- operator: "=",
- logical: false,
- left: sym,
- right: make_node(AST_Undefined, name)
- }));
- }
- }
- }
- }
-
- function flatten_fn(returned_value) {
- var decls = [];
- var expressions = [];
- flatten_args(decls, expressions);
- flatten_vars(decls, expressions);
- expressions.push(returned_value);
-
- if (decls.length) {
- const i = scope.body.indexOf(compressor.parent(level - 1)) + 1;
- scope.body.splice(i, 0, make_node(AST_Var, fn, {
- definitions: decls
- }));
- }
-
- return expressions.map(exp => exp.clone(true));
- }
-});
-
-def_optimize(AST_New, function(self, compressor) {
- if (
- compressor.option("unsafe") &&
- is_undeclared_ref(self.expression) &&
- ["Object", "RegExp", "Function", "Error", "Array"].includes(self.expression.name)
- ) return make_node(AST_Call, self, self).transform(compressor);
- return self;
-});
-
-def_optimize(AST_Sequence, function(self, compressor) {
- if (!compressor.option("side_effects")) return self;
- var expressions = [];
- filter_for_side_effects();
- var end = expressions.length - 1;
- trim_right_for_undefined();
- if (end == 0) {
- self = maintain_this_binding(compressor.parent(), compressor.self(), expressions[0]);
- if (!(self instanceof AST_Sequence)) self = self.optimize(compressor);
- return self;
- }
- self.expressions = expressions;
- return self;
-
- function filter_for_side_effects() {
- var first = first_in_statement(compressor);
- var last = self.expressions.length - 1;
- self.expressions.forEach(function(expr, index) {
- if (index < last) expr = expr.drop_side_effect_free(compressor, first);
- if (expr) {
- merge_sequence(expressions, expr);
- first = false;
- }
- });
- }
-
- function trim_right_for_undefined() {
- while (end > 0 && is_undefined(expressions[end], compressor)) end--;
- if (end < expressions.length - 1) {
- expressions[end] = make_node(AST_UnaryPrefix, self, {
- operator : "void",
- expression : expressions[end]
- });
- expressions.length = end + 1;
- }
- }
-});
-
-AST_Unary.DEFMETHOD("lift_sequences", function(compressor) {
- if (compressor.option("sequences")) {
- if (this.expression instanceof AST_Sequence) {
- var x = this.expression.expressions.slice();
- var e = this.clone();
- e.expression = x.pop();
- x.push(e);
- return make_sequence(this, x).optimize(compressor);
- }
- }
- return this;
-});
-
-def_optimize(AST_UnaryPostfix, function(self, compressor) {
- return self.lift_sequences(compressor);
-});
-
-def_optimize(AST_UnaryPrefix, function(self, compressor) {
- var e = self.expression;
- if (self.operator == "delete"
- && !(e instanceof AST_SymbolRef
- || e instanceof AST_PropAccess
- || is_identifier_atom(e))) {
- if (e instanceof AST_Sequence) {
- const exprs = e.expressions.slice();
- exprs.push(make_node(AST_True, self));
- return make_sequence(self, exprs).optimize(compressor);
- }
- return make_sequence(self, [ e, make_node(AST_True, self) ]).optimize(compressor);
- }
- var seq = self.lift_sequences(compressor);
- if (seq !== self) {
- return seq;
- }
- if (compressor.option("side_effects") && self.operator == "void") {
- e = e.drop_side_effect_free(compressor);
- if (e) {
- self.expression = e;
- return self;
- } else {
- return make_node(AST_Undefined, self).optimize(compressor);
- }
- }
- if (compressor.in_boolean_context()) {
- switch (self.operator) {
- case "!":
- if (e instanceof AST_UnaryPrefix && e.operator == "!") {
- // !!foo ==> foo, if we're in boolean context
- return e.expression;
- }
- if (e instanceof AST_Binary) {
- self = best_of(compressor, self, e.negate(compressor, first_in_statement(compressor)));
- }
- break;
- case "typeof":
- // typeof always returns a non-empty string, thus it's
- // always true in booleans
- // And we don't need to check if it's undeclared, because in typeof, that's OK
- return (e instanceof AST_SymbolRef ? make_node(AST_True, self) : make_sequence(self, [
- e,
- make_node(AST_True, self)
- ])).optimize(compressor);
- }
- }
- if (self.operator == "-" && e instanceof AST_Infinity) {
- e = e.transform(compressor);
- }
- if (e instanceof AST_Binary
- && (self.operator == "+" || self.operator == "-")
- && (e.operator == "*" || e.operator == "/" || e.operator == "%")) {
- return make_node(AST_Binary, self, {
- operator: e.operator,
- left: make_node(AST_UnaryPrefix, e.left, {
- operator: self.operator,
- expression: e.left
- }),
- right: e.right
- });
- }
- // avoids infinite recursion of numerals
- if (self.operator != "-"
- || !(e instanceof AST_Number || e instanceof AST_Infinity || e instanceof AST_BigInt)) {
- var ev = self.evaluate(compressor);
- if (ev !== self) {
- ev = make_node_from_constant(ev, self).optimize(compressor);
- return best_of(compressor, ev, self);
- }
- }
- return self;
-});
-
-AST_Binary.DEFMETHOD("lift_sequences", function(compressor) {
- if (compressor.option("sequences")) {
- if (this.left instanceof AST_Sequence) {
- var x = this.left.expressions.slice();
- var e = this.clone();
- e.left = x.pop();
- x.push(e);
- return make_sequence(this, x).optimize(compressor);
- }
- if (this.right instanceof AST_Sequence && !this.left.has_side_effects(compressor)) {
- var assign = this.operator == "=" && this.left instanceof AST_SymbolRef;
- var x = this.right.expressions;
- var last = x.length - 1;
- for (var i = 0; i < last; i++) {
- if (!assign && x[i].has_side_effects(compressor)) break;
- }
- if (i == last) {
- x = x.slice();
- var e = this.clone();
- e.right = x.pop();
- x.push(e);
- return make_sequence(this, x).optimize(compressor);
- } else if (i > 0) {
- var e = this.clone();
- e.right = make_sequence(this.right, x.slice(i));
- x = x.slice(0, i);
- x.push(e);
- return make_sequence(this, x).optimize(compressor);
- }
- }
- }
- return this;
-});
-
-var commutativeOperators = makePredicate("== === != !== * & | ^");
-function is_object(node) {
- return node instanceof AST_Array
- || node instanceof AST_Lambda
- || node instanceof AST_Object
- || node instanceof AST_Class;
-}
-
-def_optimize(AST_Binary, function(self, compressor) {
- function reversible() {
- return self.left.is_constant()
- || self.right.is_constant()
- || !self.left.has_side_effects(compressor)
- && !self.right.has_side_effects(compressor);
- }
- function reverse(op) {
- if (reversible()) {
- if (op) self.operator = op;
- var tmp = self.left;
- self.left = self.right;
- self.right = tmp;
- }
- }
- if (commutativeOperators.has(self.operator)) {
- if (self.right.is_constant()
- && !self.left.is_constant()) {
- // if right is a constant, whatever side effects the
- // left side might have could not influence the
- // result. hence, force switch.
-
- if (!(self.left instanceof AST_Binary
- && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {
- reverse();
- }
- }
- }
- self = self.lift_sequences(compressor);
- if (compressor.option("comparisons")) switch (self.operator) {
- case "===":
- case "!==":
- var is_strict_comparison = true;
- if ((self.left.is_string(compressor) && self.right.is_string(compressor)) ||
- (self.left.is_number(compressor) && self.right.is_number(compressor)) ||
- (self.left.is_boolean() && self.right.is_boolean()) ||
- self.left.equivalent_to(self.right)) {
- self.operator = self.operator.substr(0, 2);
- }
- // XXX: intentionally falling down to the next case
- case "==":
- case "!=":
- // void 0 == x => null == x
- if (!is_strict_comparison && is_undefined(self.left, compressor)) {
- self.left = make_node(AST_Null, self.left);
- } else if (compressor.option("typeofs")
- // "undefined" == typeof x => undefined === x
- && self.left instanceof AST_String
- && self.left.value == "undefined"
- && self.right instanceof AST_UnaryPrefix
- && self.right.operator == "typeof") {
- var expr = self.right.expression;
- if (expr instanceof AST_SymbolRef ? expr.is_declared(compressor)
- : !(expr instanceof AST_PropAccess && compressor.option("ie8"))) {
- self.right = expr;
- self.left = make_node(AST_Undefined, self.left).optimize(compressor);
- if (self.operator.length == 2) self.operator += "=";
- }
- } else if (self.left instanceof AST_SymbolRef
- // obj !== obj => false
- && self.right instanceof AST_SymbolRef
- && self.left.definition() === self.right.definition()
- && is_object(self.left.fixed_value())) {
- return make_node(self.operator[0] == "=" ? AST_True : AST_False, self);
- }
- break;
- case "&&":
- case "||":
- var lhs = self.left;
- if (lhs.operator == self.operator) {
- lhs = lhs.right;
- }
- if (lhs instanceof AST_Binary
- && lhs.operator == (self.operator == "&&" ? "!==" : "===")
- && self.right instanceof AST_Binary
- && lhs.operator == self.right.operator
- && (is_undefined(lhs.left, compressor) && self.right.left instanceof AST_Null
- || lhs.left instanceof AST_Null && is_undefined(self.right.left, compressor))
- && !lhs.right.has_side_effects(compressor)
- && lhs.right.equivalent_to(self.right.right)) {
- var combined = make_node(AST_Binary, self, {
- operator: lhs.operator.slice(0, -1),
- left: make_node(AST_Null, self),
- right: lhs.right
- });
- if (lhs !== self.left) {
- combined = make_node(AST_Binary, self, {
- operator: self.operator,
- left: self.left.left,
- right: combined
- });
- }
- return combined;
- }
- break;
- }
- if (self.operator == "+" && compressor.in_boolean_context()) {
- var ll = self.left.evaluate(compressor);
- var rr = self.right.evaluate(compressor);
- if (ll && typeof ll == "string") {
- return make_sequence(self, [
- self.right,
- make_node(AST_True, self)
- ]).optimize(compressor);
- }
- if (rr && typeof rr == "string") {
- return make_sequence(self, [
- self.left,
- make_node(AST_True, self)
- ]).optimize(compressor);
- }
- }
- if (compressor.option("comparisons") && self.is_boolean()) {
- if (!(compressor.parent() instanceof AST_Binary)
- || compressor.parent() instanceof AST_Assign) {
- var negated = make_node(AST_UnaryPrefix, self, {
- operator: "!",
- expression: self.negate(compressor, first_in_statement(compressor))
- });
- self = best_of(compressor, self, negated);
- }
- if (compressor.option("unsafe_comps")) {
- switch (self.operator) {
- case "<": reverse(">"); break;
- case "<=": reverse(">="); break;
- }
- }
- }
- if (self.operator == "+") {
- if (self.right instanceof AST_String
- && self.right.getValue() == ""
- && self.left.is_string(compressor)) {
- return self.left;
- }
- if (self.left instanceof AST_String
- && self.left.getValue() == ""
- && self.right.is_string(compressor)) {
- return self.right;
- }
- if (self.left instanceof AST_Binary
- && self.left.operator == "+"
- && self.left.left instanceof AST_String
- && self.left.left.getValue() == ""
- && self.right.is_string(compressor)) {
- self.left = self.left.right;
- return self;
- }
- }
- if (compressor.option("evaluate")) {
- switch (self.operator) {
- case "&&":
- var ll = has_flag(self.left, TRUTHY)
- ? true
- : has_flag(self.left, FALSY)
- ? false
- : self.left.evaluate(compressor);
- if (!ll) {
- return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);
- } else if (!(ll instanceof AST_Node)) {
- return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
- }
- var rr = self.right.evaluate(compressor);
- if (!rr) {
- if (compressor.in_boolean_context()) {
- return make_sequence(self, [
- self.left,
- make_node(AST_False, self)
- ]).optimize(compressor);
- } else {
- set_flag(self, FALSY);
- }
- } else if (!(rr instanceof AST_Node)) {
- var parent = compressor.parent();
- if (parent.operator == "&&" && parent.left === compressor.self() || compressor.in_boolean_context()) {
- return self.left.optimize(compressor);
- }
- }
- // x || false && y ---> x ? y : false
- if (self.left.operator == "||") {
- var lr = self.left.right.evaluate(compressor);
- if (!lr) return make_node(AST_Conditional, self, {
- condition: self.left.left,
- consequent: self.right,
- alternative: self.left.right
- }).optimize(compressor);
- }
- break;
- case "||":
- var ll = has_flag(self.left, TRUTHY)
- ? true
- : has_flag(self.left, FALSY)
- ? false
- : self.left.evaluate(compressor);
- if (!ll) {
- return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
- } else if (!(ll instanceof AST_Node)) {
- return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);
- }
- var rr = self.right.evaluate(compressor);
- if (!rr) {
- var parent = compressor.parent();
- if (parent.operator == "||" && parent.left === compressor.self() || compressor.in_boolean_context()) {
- return self.left.optimize(compressor);
- }
- } else if (!(rr instanceof AST_Node)) {
- if (compressor.in_boolean_context()) {
- return make_sequence(self, [
- self.left,
- make_node(AST_True, self)
- ]).optimize(compressor);
- } else {
- set_flag(self, TRUTHY);
- }
- }
- if (self.left.operator == "&&") {
- var lr = self.left.right.evaluate(compressor);
- if (lr && !(lr instanceof AST_Node)) return make_node(AST_Conditional, self, {
- condition: self.left.left,
- consequent: self.left.right,
- alternative: self.right
- }).optimize(compressor);
- }
- break;
- case "??":
- if (is_nullish(self.left, compressor)) {
- return self.right;
- }
-
- var ll = self.left.evaluate(compressor);
- if (!(ll instanceof AST_Node)) {
- // if we know the value for sure we can simply compute right away.
- return ll == null ? self.right : self.left;
- }
-
- if (compressor.in_boolean_context()) {
- const rr = self.right.evaluate(compressor);
- if (!(rr instanceof AST_Node) && !rr) {
- return self.left;
- }
- }
- }
- var associative = true;
- switch (self.operator) {
- case "+":
- // (x + "foo") + "bar" => x + "foobar"
- if (self.right instanceof AST_Constant
- && self.left instanceof AST_Binary
- && self.left.operator == "+"
- && self.left.is_string(compressor)) {
- var binary = make_node(AST_Binary, self, {
- operator: "+",
- left: self.left.right,
- right: self.right,
- });
- var r = binary.optimize(compressor);
- if (binary !== r) {
- self = make_node(AST_Binary, self, {
- operator: "+",
- left: self.left.left,
- right: r
- });
- }
- }
- // (x + "foo") + ("bar" + y) => (x + "foobar") + y
- if (self.left instanceof AST_Binary
- && self.left.operator == "+"
- && self.left.is_string(compressor)
- && self.right instanceof AST_Binary
- && self.right.operator == "+"
- && self.right.is_string(compressor)) {
- var binary = make_node(AST_Binary, self, {
- operator: "+",
- left: self.left.right,
- right: self.right.left,
- });
- var m = binary.optimize(compressor);
- if (binary !== m) {
- self = make_node(AST_Binary, self, {
- operator: "+",
- left: make_node(AST_Binary, self.left, {
- operator: "+",
- left: self.left.left,
- right: m
- }),
- right: self.right.right
- });
- }
- }
- // a + -b => a - b
- if (self.right instanceof AST_UnaryPrefix
- && self.right.operator == "-"
- && self.left.is_number(compressor)) {
- self = make_node(AST_Binary, self, {
- operator: "-",
- left: self.left,
- right: self.right.expression
- });
- break;
- }
- // -a + b => b - a
- if (self.left instanceof AST_UnaryPrefix
- && self.left.operator == "-"
- && reversible()
- && self.right.is_number(compressor)) {
- self = make_node(AST_Binary, self, {
- operator: "-",
- left: self.right,
- right: self.left.expression
- });
- break;
- }
- // `foo${bar}baz` + 1 => `foo${bar}baz1`
- if (self.left instanceof AST_TemplateString) {
- var l = self.left;
- var r = self.right.evaluate(compressor);
- if (r != self.right) {
- l.segments[l.segments.length - 1].value += String(r);
- return l;
- }
- }
- // 1 + `foo${bar}baz` => `1foo${bar}baz`
- if (self.right instanceof AST_TemplateString) {
- var r = self.right;
- var l = self.left.evaluate(compressor);
- if (l != self.left) {
- r.segments[0].value = String(l) + r.segments[0].value;
- return r;
- }
- }
- // `1${bar}2` + `foo${bar}baz` => `1${bar}2foo${bar}baz`
- if (self.left instanceof AST_TemplateString
- && self.right instanceof AST_TemplateString) {
- var l = self.left;
- var segments = l.segments;
- var r = self.right;
- segments[segments.length - 1].value += r.segments[0].value;
- for (var i = 1; i < r.segments.length; i++) {
- segments.push(r.segments[i]);
- }
- return l;
- }
- case "*":
- associative = compressor.option("unsafe_math");
- case "&":
- case "|":
- case "^":
- // a + +b => +b + a
- if (self.left.is_number(compressor)
- && self.right.is_number(compressor)
- && reversible()
- && !(self.left instanceof AST_Binary
- && self.left.operator != self.operator
- && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {
- var reversed = make_node(AST_Binary, self, {
- operator: self.operator,
- left: self.right,
- right: self.left
- });
- if (self.right instanceof AST_Constant
- && !(self.left instanceof AST_Constant)) {
- self = best_of(compressor, reversed, self);
- } else {
- self = best_of(compressor, self, reversed);
- }
- }
- if (associative && self.is_number(compressor)) {
- // a + (b + c) => (a + b) + c
- if (self.right instanceof AST_Binary
- && self.right.operator == self.operator) {
- self = make_node(AST_Binary, self, {
- operator: self.operator,
- left: make_node(AST_Binary, self.left, {
- operator: self.operator,
- left: self.left,
- right: self.right.left,
- start: self.left.start,
- end: self.right.left.end
- }),
- right: self.right.right
- });
- }
- // (n + 2) + 3 => 5 + n
- // (2 * n) * 3 => 6 + n
- if (self.right instanceof AST_Constant
- && self.left instanceof AST_Binary
- && self.left.operator == self.operator) {
- if (self.left.left instanceof AST_Constant) {
- self = make_node(AST_Binary, self, {
- operator: self.operator,
- left: make_node(AST_Binary, self.left, {
- operator: self.operator,
- left: self.left.left,
- right: self.right,
- start: self.left.left.start,
- end: self.right.end
- }),
- right: self.left.right
- });
- } else if (self.left.right instanceof AST_Constant) {
- self = make_node(AST_Binary, self, {
- operator: self.operator,
- left: make_node(AST_Binary, self.left, {
- operator: self.operator,
- left: self.left.right,
- right: self.right,
- start: self.left.right.start,
- end: self.right.end
- }),
- right: self.left.left
- });
- }
- }
- // (a | 1) | (2 | d) => (3 | a) | b
- if (self.left instanceof AST_Binary
- && self.left.operator == self.operator
- && self.left.right instanceof AST_Constant
- && self.right instanceof AST_Binary
- && self.right.operator == self.operator
- && self.right.left instanceof AST_Constant) {
- self = make_node(AST_Binary, self, {
- operator: self.operator,
- left: make_node(AST_Binary, self.left, {
- operator: self.operator,
- left: make_node(AST_Binary, self.left.left, {
- operator: self.operator,
- left: self.left.right,
- right: self.right.left,
- start: self.left.right.start,
- end: self.right.left.end
- }),
- right: self.left.left
- }),
- right: self.right.right
- });
- }
- }
- }
- }
- // x && (y && z) ==> x && y && z
- // x || (y || z) ==> x || y || z
- // x + ("y" + z) ==> x + "y" + z
- // "x" + (y + "z")==> "x" + y + "z"
- if (self.right instanceof AST_Binary
- && self.right.operator == self.operator
- && (lazy_op.has(self.operator)
- || (self.operator == "+"
- && (self.right.left.is_string(compressor)
- || (self.left.is_string(compressor)
- && self.right.right.is_string(compressor)))))
- ) {
- self.left = make_node(AST_Binary, self.left, {
- operator : self.operator,
- left : self.left.transform(compressor),
- right : self.right.left.transform(compressor)
- });
- self.right = self.right.right.transform(compressor);
- return self.transform(compressor);
- }
- var ev = self.evaluate(compressor);
- if (ev !== self) {
- ev = make_node_from_constant(ev, self).optimize(compressor);
- return best_of(compressor, ev, self);
- }
- return self;
-});
-
-def_optimize(AST_SymbolExport, function(self) {
- return self;
-});
-
-function within_array_or_object_literal(compressor) {
- var node, level = 0;
- while (node = compressor.parent(level++)) {
- if (node instanceof AST_Statement) return false;
- if (node instanceof AST_Array
- || node instanceof AST_ObjectKeyVal
- || node instanceof AST_Object) {
- return true;
- }
- }
- return false;
-}
-
-def_optimize(AST_SymbolRef, function(self, compressor) {
- if (
- !compressor.option("ie8")
- && is_undeclared_ref(self)
- && !compressor.find_parent(AST_With)
- ) {
- switch (self.name) {
- case "undefined":
- return make_node(AST_Undefined, self).optimize(compressor);
- case "NaN":
- return make_node(AST_NaN, self).optimize(compressor);
- case "Infinity":
- return make_node(AST_Infinity, self).optimize(compressor);
- }
- }
-
- const parent = compressor.parent();
- if (compressor.option("reduce_vars") && is_lhs(self, parent) !== self) {
- const def = self.definition();
- const nearest_scope = find_scope(compressor);
- if (compressor.top_retain && def.global && compressor.top_retain(def)) {
- def.fixed = false;
- def.single_use = false;
- return self;
- }
-
- let fixed = self.fixed_value();
- let single_use = def.single_use
- && !(parent instanceof AST_Call
- && (parent.is_callee_pure(compressor))
- || has_annotation(parent, _NOINLINE))
- && !(parent instanceof AST_Export
- && fixed instanceof AST_Lambda
- && fixed.name);
-
- if (single_use && fixed instanceof AST_Node) {
- single_use =
- !fixed.has_side_effects(compressor)
- && !fixed.may_throw(compressor);
- }
-
- if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) {
- if (retain_top_func(fixed, compressor)) {
- single_use = false;
- } else if (def.scope !== self.scope
- && (def.escaped == 1
- || has_flag(fixed, INLINED)
- || within_array_or_object_literal(compressor)
- || !compressor.option("reduce_funcs"))) {
- single_use = false;
- } else if (is_recursive_ref(compressor, def)) {
- single_use = false;
- } else if (def.scope !== self.scope || def.orig[0] instanceof AST_SymbolFunarg) {
- single_use = fixed.is_constant_expression(self.scope);
- if (single_use == "f") {
- var scope = self.scope;
- do {
- if (scope instanceof AST_Defun || is_func_expr(scope)) {
- set_flag(scope, INLINED);
- }
- } while (scope = scope.parent_scope);
- }
- }
- }
-
- if (single_use && fixed instanceof AST_Lambda) {
- single_use =
- def.scope === self.scope
- && !scope_encloses_variables_in_this_scope(nearest_scope, fixed)
- || parent instanceof AST_Call
- && parent.expression === self
- && !scope_encloses_variables_in_this_scope(nearest_scope, fixed)
- && !(fixed.name && fixed.name.definition().recursive_refs > 0);
- }
-
- if (single_use && fixed) {
- if (fixed instanceof AST_DefClass) {
- set_flag(fixed, SQUEEZED);
- fixed = make_node(AST_ClassExpression, fixed, fixed);
- }
- if (fixed instanceof AST_Defun) {
- set_flag(fixed, SQUEEZED);
- fixed = make_node(AST_Function, fixed, fixed);
- }
- if (def.recursive_refs > 0 && fixed.name instanceof AST_SymbolDefun) {
- const defun_def = fixed.name.definition();
- let lambda_def = fixed.variables.get(fixed.name.name);
- let name = lambda_def && lambda_def.orig[0];
- if (!(name instanceof AST_SymbolLambda)) {
- name = make_node(AST_SymbolLambda, fixed.name, fixed.name);
- name.scope = fixed;
- fixed.name = name;
- lambda_def = fixed.def_function(name);
- }
- walk(fixed, node => {
- if (node instanceof AST_SymbolRef && node.definition() === defun_def) {
- node.thedef = lambda_def;
- lambda_def.references.push(node);
- }
- });
- }
- if (
- (fixed instanceof AST_Lambda || fixed instanceof AST_Class)
- && fixed.parent_scope !== nearest_scope
- ) {
- fixed = fixed.clone(true, compressor.get_toplevel());
-
- nearest_scope.add_child_scope(fixed);
- }
- return fixed.optimize(compressor);
- }
-
- // multiple uses
- if (fixed) {
- let replace;
-
- if (fixed instanceof AST_This) {
- if (!(def.orig[0] instanceof AST_SymbolFunarg)
- && def.references.every((ref) =>
- def.scope === ref.scope
- )) {
- replace = fixed;
- }
- } else {
- var ev = fixed.evaluate(compressor);
- if (
- ev !== fixed
- && (compressor.option("unsafe_regexp") || !(ev instanceof RegExp))
- ) {
- replace = make_node_from_constant(ev, fixed);
- }
- }
-
- if (replace) {
- const name_length = self.size(compressor);
- const replace_size = replace.size(compressor);
-
- let overhead = 0;
- if (compressor.option("unused") && !compressor.exposed(def)) {
- overhead =
- (name_length + 2 + replace_size) /
- (def.references.length - def.assignments);
- }
-
- if (replace_size <= name_length + overhead) {
- return replace;
- }
- }
- }
- }
-
- return self;
-});
-
-function scope_encloses_variables_in_this_scope(scope, pulled_scope) {
- for (const enclosed of pulled_scope.enclosed) {
- if (pulled_scope.variables.has(enclosed.name)) {
- continue;
- }
- const looked_up = scope.find_variable(enclosed.name);
- if (looked_up) {
- if (looked_up === enclosed) continue;
- return true;
- }
- }
- return false;
-}
-
-function is_atomic(lhs, self) {
- return lhs instanceof AST_SymbolRef || lhs.TYPE === self.TYPE;
-}
-
-def_optimize(AST_Undefined, function(self, compressor) {
- if (compressor.option("unsafe_undefined")) {
- var undef = find_variable(compressor, "undefined");
- if (undef) {
- var ref = make_node(AST_SymbolRef, self, {
- name : "undefined",
- scope : undef.scope,
- thedef : undef
- });
- set_flag(ref, UNDEFINED);
- return ref;
- }
- }
- var lhs = is_lhs(compressor.self(), compressor.parent());
- if (lhs && is_atomic(lhs, self)) return self;
- return make_node(AST_UnaryPrefix, self, {
- operator: "void",
- expression: make_node(AST_Number, self, {
- value: 0
- })
- });
-});
-
-def_optimize(AST_Infinity, function(self, compressor) {
- var lhs = is_lhs(compressor.self(), compressor.parent());
- if (lhs && is_atomic(lhs, self)) return self;
- if (
- compressor.option("keep_infinity")
- && !(lhs && !is_atomic(lhs, self))
- && !find_variable(compressor, "Infinity")
- ) {
- return self;
- }
- return make_node(AST_Binary, self, {
- operator: "/",
- left: make_node(AST_Number, self, {
- value: 1
- }),
- right: make_node(AST_Number, self, {
- value: 0
- })
- });
-});
-
-def_optimize(AST_NaN, function(self, compressor) {
- var lhs = is_lhs(compressor.self(), compressor.parent());
- if (lhs && !is_atomic(lhs, self)
- || find_variable(compressor, "NaN")) {
- return make_node(AST_Binary, self, {
- operator: "/",
- left: make_node(AST_Number, self, {
- value: 0
- }),
- right: make_node(AST_Number, self, {
- value: 0
- })
- });
- }
- return self;
-});
-
-function is_reachable(self, defs) {
- const find_ref = node => {
- if (node instanceof AST_SymbolRef && member(node.definition(), defs)) {
- return walk_abort;
- }
- };
-
- return walk_parent(self, (node, info) => {
- if (node instanceof AST_Scope && node !== self) {
- var parent = info.parent();
-
- if (parent instanceof AST_Call && parent.expression === node) return;
-
- if (walk(node, find_ref)) return walk_abort;
-
- return true;
- }
- });
-}
-
-const ASSIGN_OPS = makePredicate("+ - / * % >> << >>> | ^ &");
-const ASSIGN_OPS_COMMUTATIVE = makePredicate("* | ^ &");
-def_optimize(AST_Assign, function(self, compressor) {
- if (self.logical) {
- return self.lift_sequences(compressor);
- }
-
- var def;
- if (compressor.option("dead_code")
- && self.left instanceof AST_SymbolRef
- && (def = self.left.definition()).scope === compressor.find_parent(AST_Lambda)) {
- var level = 0, node, parent = self;
- do {
- node = parent;
- parent = compressor.parent(level++);
- if (parent instanceof AST_Exit) {
- if (in_try(level, parent)) break;
- if (is_reachable(def.scope, [ def ])) break;
- if (self.operator == "=") return self.right;
- def.fixed = false;
- return make_node(AST_Binary, self, {
- operator: self.operator.slice(0, -1),
- left: self.left,
- right: self.right
- }).optimize(compressor);
- }
- } while (parent instanceof AST_Binary && parent.right === node
- || parent instanceof AST_Sequence && parent.tail_node() === node);
- }
- self = self.lift_sequences(compressor);
- if (self.operator == "=" && self.left instanceof AST_SymbolRef && self.right instanceof AST_Binary) {
- // x = expr1 OP expr2
- if (self.right.left instanceof AST_SymbolRef
- && self.right.left.name == self.left.name
- && ASSIGN_OPS.has(self.right.operator)) {
- // x = x - 2 ---> x -= 2
- self.operator = self.right.operator + "=";
- self.right = self.right.right;
- } else if (self.right.right instanceof AST_SymbolRef
- && self.right.right.name == self.left.name
- && ASSIGN_OPS_COMMUTATIVE.has(self.right.operator)
- && !self.right.left.has_side_effects(compressor)) {
- // x = 2 & x ---> x &= 2
- self.operator = self.right.operator + "=";
- self.right = self.right.left;
- }
- }
- return self;
-
- function in_try(level, node) {
- var right = self.right;
- self.right = make_node(AST_Null, right);
- var may_throw = node.may_throw(compressor);
- self.right = right;
- var scope = self.left.definition().scope;
- var parent;
- while ((parent = compressor.parent(level++)) !== scope) {
- if (parent instanceof AST_Try) {
- if (parent.bfinally) return true;
- if (may_throw && parent.bcatch) return true;
- }
- }
- }
-});
-
-def_optimize(AST_DefaultAssign, function(self, compressor) {
- if (!compressor.option("evaluate")) {
- return self;
- }
- var evaluateRight = self.right.evaluate(compressor);
-
- // `[x = undefined] = foo` ---> `[x] = foo`
- if (evaluateRight === undefined) {
- self = self.left;
- } else if (evaluateRight !== self.right) {
- evaluateRight = make_node_from_constant(evaluateRight, self.right);
- self.right = best_of_expression(evaluateRight, self.right);
- }
-
- return self;
-});
-
-function is_nullish_check(check, check_subject, compressor) {
- if (check_subject.may_throw(compressor)) return false;
-
- let nullish_side;
-
- // foo == null
- if (
- check instanceof AST_Binary
- && check.operator === "=="
- // which side is nullish?
- && (
- (nullish_side = is_nullish(check.left, compressor) && check.left)
- || (nullish_side = is_nullish(check.right, compressor) && check.right)
- )
- // is the other side the same as the check_subject
- && (
- nullish_side === check.left
- ? check.right
- : check.left
- ).equivalent_to(check_subject)
- ) {
- return true;
- }
-
- // foo === null || foo === undefined
- if (check instanceof AST_Binary && check.operator === "||") {
- let null_cmp;
- let undefined_cmp;
-
- const find_comparison = cmp => {
- if (!(
- cmp instanceof AST_Binary
- && (cmp.operator === "===" || cmp.operator === "==")
- )) {
- return false;
- }
-
- let found = 0;
- let defined_side;
-
- if (cmp.left instanceof AST_Null) {
- found++;
- null_cmp = cmp;
- defined_side = cmp.right;
- }
- if (cmp.right instanceof AST_Null) {
- found++;
- null_cmp = cmp;
- defined_side = cmp.left;
- }
- if (is_undefined(cmp.left, compressor)) {
- found++;
- undefined_cmp = cmp;
- defined_side = cmp.right;
- }
- if (is_undefined(cmp.right, compressor)) {
- found++;
- undefined_cmp = cmp;
- defined_side = cmp.left;
- }
-
- if (found !== 1) {
- return false;
- }
-
- if (!defined_side.equivalent_to(check_subject)) {
- return false;
- }
-
- return true;
- };
-
- if (!find_comparison(check.left)) return false;
- if (!find_comparison(check.right)) return false;
-
- if (null_cmp && undefined_cmp && null_cmp !== undefined_cmp) {
- return true;
- }
- }
-
- return false;
-}
-
-def_optimize(AST_Conditional, function(self, compressor) {
- if (!compressor.option("conditionals")) return self;
- // This looks like lift_sequences(), should probably be under "sequences"
- if (self.condition instanceof AST_Sequence) {
- var expressions = self.condition.expressions.slice();
- self.condition = expressions.pop();
- expressions.push(self);
- return make_sequence(self, expressions);
- }
- var cond = self.condition.evaluate(compressor);
- if (cond !== self.condition) {
- if (cond) {
- return maintain_this_binding(compressor.parent(), compressor.self(), self.consequent);
- } else {
- return maintain_this_binding(compressor.parent(), compressor.self(), self.alternative);
- }
- }
- var negated = cond.negate(compressor, first_in_statement(compressor));
- if (best_of(compressor, cond, negated) === negated) {
- self = make_node(AST_Conditional, self, {
- condition: negated,
- consequent: self.alternative,
- alternative: self.consequent
- });
- }
- var condition = self.condition;
- var consequent = self.consequent;
- var alternative = self.alternative;
- // x?x:y --> x||y
- if (condition instanceof AST_SymbolRef
- && consequent instanceof AST_SymbolRef
- && condition.definition() === consequent.definition()) {
- return make_node(AST_Binary, self, {
- operator: "||",
- left: condition,
- right: alternative
- });
- }
- // if (foo) exp = something; else exp = something_else;
- // |
- // v
- // exp = foo ? something : something_else;
- if (
- consequent instanceof AST_Assign
- && alternative instanceof AST_Assign
- && consequent.operator === alternative.operator
- && consequent.logical === alternative.logical
- && consequent.left.equivalent_to(alternative.left)
- && (!self.condition.has_side_effects(compressor)
- || consequent.operator == "="
- && !consequent.left.has_side_effects(compressor))
- ) {
- return make_node(AST_Assign, self, {
- operator: consequent.operator,
- left: consequent.left,
- logical: consequent.logical,
- right: make_node(AST_Conditional, self, {
- condition: self.condition,
- consequent: consequent.right,
- alternative: alternative.right
- })
- });
- }
- // x ? y(a) : y(b) --> y(x ? a : b)
- var arg_index;
- if (consequent instanceof AST_Call
- && alternative.TYPE === consequent.TYPE
- && consequent.args.length > 0
- && consequent.args.length == alternative.args.length
- && consequent.expression.equivalent_to(alternative.expression)
- && !self.condition.has_side_effects(compressor)
- && !consequent.expression.has_side_effects(compressor)
- && typeof (arg_index = single_arg_diff()) == "number") {
- var node = consequent.clone();
- node.args[arg_index] = make_node(AST_Conditional, self, {
- condition: self.condition,
- consequent: consequent.args[arg_index],
- alternative: alternative.args[arg_index]
- });
- return node;
- }
- // a ? b : c ? b : d --> (a || c) ? b : d
- if (alternative instanceof AST_Conditional
- && consequent.equivalent_to(alternative.consequent)) {
- return make_node(AST_Conditional, self, {
- condition: make_node(AST_Binary, self, {
- operator: "||",
- left: condition,
- right: alternative.condition
- }),
- consequent: consequent,
- alternative: alternative.alternative
- }).optimize(compressor);
- }
-
- // a == null ? b : a -> a ?? b
- if (
- compressor.option("ecma") >= 2020 &&
- is_nullish_check(condition, alternative, compressor)
- ) {
- return make_node(AST_Binary, self, {
- operator: "??",
- left: alternative,
- right: consequent
- }).optimize(compressor);
- }
-
- // a ? b : (c, b) --> (a || c), b
- if (alternative instanceof AST_Sequence
- && consequent.equivalent_to(alternative.expressions[alternative.expressions.length - 1])) {
- return make_sequence(self, [
- make_node(AST_Binary, self, {
- operator: "||",
- left: condition,
- right: make_sequence(self, alternative.expressions.slice(0, -1))
- }),
- consequent
- ]).optimize(compressor);
- }
- // a ? b : (c && b) --> (a || c) && b
- if (alternative instanceof AST_Binary
- && alternative.operator == "&&"
- && consequent.equivalent_to(alternative.right)) {
- return make_node(AST_Binary, self, {
- operator: "&&",
- left: make_node(AST_Binary, self, {
- operator: "||",
- left: condition,
- right: alternative.left
- }),
- right: consequent
- }).optimize(compressor);
- }
- // x?y?z:a:a --> x&&y?z:a
- if (consequent instanceof AST_Conditional
- && consequent.alternative.equivalent_to(alternative)) {
- return make_node(AST_Conditional, self, {
- condition: make_node(AST_Binary, self, {
- left: self.condition,
- operator: "&&",
- right: consequent.condition
- }),
- consequent: consequent.consequent,
- alternative: alternative
- });
- }
- // x ? y : y --> x, y
- if (consequent.equivalent_to(alternative)) {
- return make_sequence(self, [
- self.condition,
- consequent
- ]).optimize(compressor);
- }
- // x ? y || z : z --> x && y || z
- if (consequent instanceof AST_Binary
- && consequent.operator == "||"
- && consequent.right.equivalent_to(alternative)) {
- return make_node(AST_Binary, self, {
- operator: "||",
- left: make_node(AST_Binary, self, {
- operator: "&&",
- left: self.condition,
- right: consequent.left
- }),
- right: alternative
- }).optimize(compressor);
- }
-
- const in_bool = compressor.in_boolean_context();
- if (is_true(self.consequent)) {
- if (is_false(self.alternative)) {
- // c ? true : false ---> !!c
- return booleanize(self.condition);
- }
- // c ? true : x ---> !!c || x
- return make_node(AST_Binary, self, {
- operator: "||",
- left: booleanize(self.condition),
- right: self.alternative
- });
- }
- if (is_false(self.consequent)) {
- if (is_true(self.alternative)) {
- // c ? false : true ---> !c
- return booleanize(self.condition.negate(compressor));
- }
- // c ? false : x ---> !c && x
- return make_node(AST_Binary, self, {
- operator: "&&",
- left: booleanize(self.condition.negate(compressor)),
- right: self.alternative
- });
- }
- if (is_true(self.alternative)) {
- // c ? x : true ---> !c || x
- return make_node(AST_Binary, self, {
- operator: "||",
- left: booleanize(self.condition.negate(compressor)),
- right: self.consequent
- });
- }
- if (is_false(self.alternative)) {
- // c ? x : false ---> !!c && x
- return make_node(AST_Binary, self, {
- operator: "&&",
- left: booleanize(self.condition),
- right: self.consequent
- });
- }
-
- return self;
-
- function booleanize(node) {
- if (node.is_boolean()) return node;
- // !!expression
- return make_node(AST_UnaryPrefix, node, {
- operator: "!",
- expression: node.negate(compressor)
- });
- }
-
- // AST_True or !0
- function is_true(node) {
- return node instanceof AST_True
- || in_bool
- && node instanceof AST_Constant
- && node.getValue()
- || (node instanceof AST_UnaryPrefix
- && node.operator == "!"
- && node.expression instanceof AST_Constant
- && !node.expression.getValue());
- }
- // AST_False or !1
- function is_false(node) {
- return node instanceof AST_False
- || in_bool
- && node instanceof AST_Constant
- && !node.getValue()
- || (node instanceof AST_UnaryPrefix
- && node.operator == "!"
- && node.expression instanceof AST_Constant
- && node.expression.getValue());
- }
-
- function single_arg_diff() {
- var a = consequent.args;
- var b = alternative.args;
- for (var i = 0, len = a.length; i < len; i++) {
- if (a[i] instanceof AST_Expansion) return;
- if (!a[i].equivalent_to(b[i])) {
- if (b[i] instanceof AST_Expansion) return;
- for (var j = i + 1; j < len; j++) {
- if (a[j] instanceof AST_Expansion) return;
- if (!a[j].equivalent_to(b[j])) return;
- }
- return i;
- }
- }
- }
-});
-
-def_optimize(AST_Boolean, function(self, compressor) {
- if (compressor.in_boolean_context()) return make_node(AST_Number, self, {
- value: +self.value
- });
- var p = compressor.parent();
- if (compressor.option("booleans_as_integers")) {
- if (p instanceof AST_Binary && (p.operator == "===" || p.operator == "!==")) {
- p.operator = p.operator.replace(/=$/, "");
- }
- return make_node(AST_Number, self, {
- value: +self.value
- });
- }
- if (compressor.option("booleans")) {
- if (p instanceof AST_Binary && (p.operator == "=="
- || p.operator == "!=")) {
- return make_node(AST_Number, self, {
- value: +self.value
- });
- }
- return make_node(AST_UnaryPrefix, self, {
- operator: "!",
- expression: make_node(AST_Number, self, {
- value: 1 - self.value
- })
- });
- }
- return self;
-});
-
-function safe_to_flatten(value, compressor) {
- if (value instanceof AST_SymbolRef) {
- value = value.fixed_value();
- }
- if (!value) return false;
- if (!(value instanceof AST_Lambda || value instanceof AST_Class)) return true;
- if (!(value instanceof AST_Lambda && value.contains_this())) return true;
- return compressor.parent() instanceof AST_New;
-}
-
-AST_PropAccess.DEFMETHOD("flatten_object", function(key, compressor) {
- if (!compressor.option("properties")) return;
- if (key === "__proto__") return;
-
- var arrows = compressor.option("unsafe_arrows") && compressor.option("ecma") >= 2015;
- var expr = this.expression;
- if (expr instanceof AST_Object) {
- var props = expr.properties;
-
- for (var i = props.length; --i >= 0;) {
- var prop = props[i];
-
- if ("" + (prop instanceof AST_ConciseMethod ? prop.key.name : prop.key) == key) {
- const all_props_flattenable = props.every((p) =>
- (p instanceof AST_ObjectKeyVal
- || arrows && p instanceof AST_ConciseMethod && !p.is_generator
- )
- && !p.computed_key()
- );
-
- if (!all_props_flattenable) return;
- if (!safe_to_flatten(prop.value, compressor)) return;
-
- return make_node(AST_Sub, this, {
- expression: make_node(AST_Array, expr, {
- elements: props.map(function(prop) {
- var v = prop.value;
- if (v instanceof AST_Accessor) {
- v = make_node(AST_Function, v, v);
- }
-
- var k = prop.key;
- if (k instanceof AST_Node && !(k instanceof AST_SymbolMethod)) {
- return make_sequence(prop, [ k, v ]);
- }
-
- return v;
- })
- }),
- property: make_node(AST_Number, this, {
- value: i
- })
- });
- }
- }
- }
-});
-
-def_optimize(AST_Sub, function(self, compressor) {
- var expr = self.expression;
- var prop = self.property;
- if (compressor.option("properties")) {
- var key = prop.evaluate(compressor);
- if (key !== prop) {
- if (typeof key == "string") {
- if (key == "undefined") {
- key = undefined;
- } else {
- var value = parseFloat(key);
- if (value.toString() == key) {
- key = value;
- }
- }
- }
- prop = self.property = best_of_expression(prop, make_node_from_constant(key, prop).transform(compressor));
- var property = "" + key;
- if (is_basic_identifier_string(property)
- && property.length <= prop.size() + 1) {
- return make_node(AST_Dot, self, {
- expression: expr,
- optional: self.optional,
- property: property,
- quote: prop.quote,
- }).optimize(compressor);
- }
- }
- }
- var fn;
- OPT_ARGUMENTS: if (compressor.option("arguments")
- && expr instanceof AST_SymbolRef
- && expr.name == "arguments"
- && expr.definition().orig.length == 1
- && (fn = expr.scope) instanceof AST_Lambda
- && fn.uses_arguments
- && !(fn instanceof AST_Arrow)
- && prop instanceof AST_Number) {
- var index = prop.getValue();
- var params = new Set();
- var argnames = fn.argnames;
- for (var n = 0; n < argnames.length; n++) {
- if (!(argnames[n] instanceof AST_SymbolFunarg)) {
- break OPT_ARGUMENTS; // destructuring parameter - bail
- }
- var param = argnames[n].name;
- if (params.has(param)) {
- break OPT_ARGUMENTS; // duplicate parameter - bail
- }
- params.add(param);
- }
- var argname = fn.argnames[index];
- if (argname && compressor.has_directive("use strict")) {
- var def = argname.definition();
- if (!compressor.option("reduce_vars") || def.assignments || def.orig.length > 1) {
- argname = null;
- }
- } else if (!argname && !compressor.option("keep_fargs") && index < fn.argnames.length + 5) {
- while (index >= fn.argnames.length) {
- argname = fn.create_symbol(AST_SymbolFunarg, {
- source: fn,
- scope: fn,
- tentative_name: "argument_" + fn.argnames.length,
- });
- fn.argnames.push(argname);
- }
- }
- if (argname) {
- var sym = make_node(AST_SymbolRef, self, argname);
- sym.reference({});
- clear_flag(argname, UNUSED);
- return sym;
- }
- }
- if (is_lhs(self, compressor.parent())) return self;
- if (key !== prop) {
- var sub = self.flatten_object(property, compressor);
- if (sub) {
- expr = self.expression = sub.expression;
- prop = self.property = sub.property;
- }
- }
- if (compressor.option("properties") && compressor.option("side_effects")
- && prop instanceof AST_Number && expr instanceof AST_Array) {
- var index = prop.getValue();
- var elements = expr.elements;
- var retValue = elements[index];
- FLATTEN: if (safe_to_flatten(retValue, compressor)) {
- var flatten = true;
- var values = [];
- for (var i = elements.length; --i > index;) {
- var value = elements[i].drop_side_effect_free(compressor);
- if (value) {
- values.unshift(value);
- if (flatten && value.has_side_effects(compressor)) flatten = false;
- }
- }
- if (retValue instanceof AST_Expansion) break FLATTEN;
- retValue = retValue instanceof AST_Hole ? make_node(AST_Undefined, retValue) : retValue;
- if (!flatten) values.unshift(retValue);
- while (--i >= 0) {
- var value = elements[i];
- if (value instanceof AST_Expansion) break FLATTEN;
- value = value.drop_side_effect_free(compressor);
- if (value) values.unshift(value);
- else index--;
- }
- if (flatten) {
- values.push(retValue);
- return make_sequence(self, values).optimize(compressor);
- } else return make_node(AST_Sub, self, {
- expression: make_node(AST_Array, expr, {
- elements: values
- }),
- property: make_node(AST_Number, prop, {
- value: index
- })
- });
- }
- }
- var ev = self.evaluate(compressor);
- if (ev !== self) {
- ev = make_node_from_constant(ev, self).optimize(compressor);
- return best_of(compressor, ev, self);
- }
- return self;
-});
-
-def_optimize(AST_Chain, function (self, compressor) {
- if (is_nullish(self.expression, compressor)) return make_node(AST_Undefined, self);
- return self;
-});
-
-AST_Lambda.DEFMETHOD("contains_this", function() {
- return walk(this, node => {
- if (node instanceof AST_This) return walk_abort;
- if (
- node !== this
- && node instanceof AST_Scope
- && !(node instanceof AST_Arrow)
- ) {
- return true;
- }
- });
-});
-
-def_optimize(AST_Dot, function(self, compressor) {
- const parent = compressor.parent();
- if (is_lhs(self, parent)) return self;
- if (compressor.option("unsafe_proto")
- && self.expression instanceof AST_Dot
- && self.expression.property == "prototype") {
- var exp = self.expression.expression;
- if (is_undeclared_ref(exp)) switch (exp.name) {
- case "Array":
- self.expression = make_node(AST_Array, self.expression, {
- elements: []
- });
- break;
- case "Function":
- self.expression = make_node(AST_Function, self.expression, {
- argnames: [],
- body: []
- });
- break;
- case "Number":
- self.expression = make_node(AST_Number, self.expression, {
- value: 0
- });
- break;
- case "Object":
- self.expression = make_node(AST_Object, self.expression, {
- properties: []
- });
- break;
- case "RegExp":
- self.expression = make_node(AST_RegExp, self.expression, {
- value: { source: "t", flags: "" }
- });
- break;
- case "String":
- self.expression = make_node(AST_String, self.expression, {
- value: ""
- });
- break;
- }
- }
- if (!(parent instanceof AST_Call) || !has_annotation(parent, _NOINLINE)) {
- const sub = self.flatten_object(self.property, compressor);
- if (sub) return sub.optimize(compressor);
- }
- let ev = self.evaluate(compressor);
- if (ev !== self) {
- ev = make_node_from_constant(ev, self).optimize(compressor);
- return best_of(compressor, ev, self);
- }
- return self;
-});
-
-function literals_in_boolean_context(self, compressor) {
- if (compressor.in_boolean_context()) {
- return best_of(compressor, self, make_sequence(self, [
- self,
- make_node(AST_True, self)
- ]).optimize(compressor));
- }
- return self;
-}
-
-function inline_array_like_spread(elements) {
- for (var i = 0; i < elements.length; i++) {
- var el = elements[i];
- if (el instanceof AST_Expansion) {
- var expr = el.expression;
- if (
- expr instanceof AST_Array
- && !expr.elements.some(elm => elm instanceof AST_Hole)
- ) {
- elements.splice(i, 1, ...expr.elements);
- // Step back one, as the element at i is now new.
- i--;
- }
- // In array-like spread, spreading a non-iterable value is TypeError.
- // We therefore can’t optimize anything else, unlike with object spread.
- }
- }
-}
-
-def_optimize(AST_Array, function(self, compressor) {
- var optimized = literals_in_boolean_context(self, compressor);
- if (optimized !== self) {
- return optimized;
- }
- inline_array_like_spread(self.elements);
- return self;
-});
-
-function inline_object_prop_spread(props, compressor) {
- for (var i = 0; i < props.length; i++) {
- var prop = props[i];
- if (prop instanceof AST_Expansion) {
- const expr = prop.expression;
- if (
- expr instanceof AST_Object
- && expr.properties.every(prop => prop instanceof AST_ObjectKeyVal)
- ) {
- props.splice(i, 1, ...expr.properties);
- // Step back one, as the property at i is now new.
- i--;
- } else if (expr instanceof AST_Constant
- && !(expr instanceof AST_String)) {
- // Unlike array-like spread, in object spread, spreading a
- // non-iterable value silently does nothing; it is thus safe
- // to remove. AST_String is the only iterable AST_Constant.
- props.splice(i, 1);
- i--;
- } else if (is_nullish(expr, compressor)) {
- // Likewise, null and undefined can be silently removed.
- props.splice(i, 1);
- i--;
- }
- }
- }
-}
-
-def_optimize(AST_Object, function(self, compressor) {
- var optimized = literals_in_boolean_context(self, compressor);
- if (optimized !== self) {
- return optimized;
- }
- inline_object_prop_spread(self.properties, compressor);
- return self;
-});
-
-def_optimize(AST_RegExp, literals_in_boolean_context);
-
-def_optimize(AST_Return, function(self, compressor) {
- if (self.value && is_undefined(self.value, compressor)) {
- self.value = null;
- }
- return self;
-});
-
-def_optimize(AST_Arrow, opt_AST_Lambda);
-
-def_optimize(AST_Function, function(self, compressor) {
- self = opt_AST_Lambda(self, compressor);
- if (compressor.option("unsafe_arrows")
- && compressor.option("ecma") >= 2015
- && !self.name
- && !self.is_generator
- && !self.uses_arguments
- && !self.pinned()) {
- const uses_this = walk(self, node => {
- if (node instanceof AST_This) return walk_abort;
- });
- if (!uses_this) return make_node(AST_Arrow, self, self).optimize(compressor);
- }
- return self;
-});
-
-def_optimize(AST_Class, function(self) {
- // HACK to avoid compress failure.
- // AST_Class is not really an AST_Scope/AST_Block as it lacks a body.
- return self;
-});
-
-def_optimize(AST_Yield, function(self, compressor) {
- if (self.expression && !self.is_star && is_undefined(self.expression, compressor)) {
- self.expression = null;
- }
- return self;
-});
-
-def_optimize(AST_TemplateString, function(self, compressor) {
- if (
- !compressor.option("evaluate")
- || compressor.parent() instanceof AST_PrefixedTemplateString
- ) {
- return self;
- }
-
- var segments = [];
- for (var i = 0; i < self.segments.length; i++) {
- var segment = self.segments[i];
- if (segment instanceof AST_Node) {
- var result = segment.evaluate(compressor);
- // Evaluate to constant value
- // Constant value shorter than ${segment}
- if (result !== segment && (result + "").length <= segment.size() + "${}".length) {
- // There should always be a previous and next segment if segment is a node
- segments[segments.length - 1].value = segments[segments.length - 1].value + result + self.segments[++i].value;
- continue;
- }
- // `before ${`innerBefore ${any} innerAfter`} after` => `before innerBefore ${any} innerAfter after`
- // TODO:
- // `before ${'test' + foo} after` => `before innerBefore ${any} innerAfter after`
- // `before ${foo + 'test} after` => `before innerBefore ${any} innerAfter after`
- if (segment instanceof AST_TemplateString) {
- var inners = segment.segments;
- segments[segments.length - 1].value += inners[0].value;
- for (var j = 1; j < inners.length; j++) {
- segment = inners[j];
- segments.push(segment);
- }
- continue;
- }
- }
- segments.push(segment);
- }
- self.segments = segments;
-
- // `foo` => "foo"
- if (segments.length == 1) {
- return make_node(AST_String, self, segments[0]);
- }
-
- if (
- segments.length === 3
- && segments[1] instanceof AST_Node
- && (
- segments[1].is_string(compressor)
- || segments[1].is_number(compressor)
- || is_nullish(segments[1], compressor)
- || compressor.option("unsafe")
- )
- ) {
- // `foo${bar}` => "foo" + bar
- if (segments[2].value === "") {
- return make_node(AST_Binary, self, {
- operator: "+",
- left: make_node(AST_String, self, {
- value: segments[0].value,
- }),
- right: segments[1],
- });
- }
- // `${bar}baz` => bar + "baz"
- if (segments[0].value === "") {
- return make_node(AST_Binary, self, {
- operator: "+",
- left: segments[1],
- right: make_node(AST_String, self, {
- value: segments[2].value,
- }),
- });
- }
- }
- return self;
-});
-
-def_optimize(AST_PrefixedTemplateString, function(self) {
- return self;
-});
-
-// ["p"]:1 ---> p:1
-// [42]:1 ---> 42:1
-function lift_key(self, compressor) {
- if (!compressor.option("computed_props")) return self;
- // save a comparison in the typical case
- if (!(self.key instanceof AST_Constant)) return self;
- // allow certain acceptable props as not all AST_Constants are true constants
- if (self.key instanceof AST_String || self.key instanceof AST_Number) {
- if (self.key.value === "__proto__") return self;
- if (self.key.value == "constructor"
- && compressor.parent() instanceof AST_Class) return self;
- if (self instanceof AST_ObjectKeyVal) {
- self.quote = self.key.quote;
- self.key = self.key.value;
- } else if (self instanceof AST_ClassProperty) {
- self.quote = self.key.quote;
- self.key = make_node(AST_SymbolClassProperty, self.key, {
- name: self.key.value
- });
- } else {
- self.quote = self.key.quote;
- self.key = make_node(AST_SymbolMethod, self.key, {
- name: self.key.value
- });
- }
- }
- return self;
-}
-
-def_optimize(AST_ObjectProperty, lift_key);
-
-def_optimize(AST_ConciseMethod, function(self, compressor) {
- lift_key(self, compressor);
- // p(){return x;} ---> p:()=>x
- if (compressor.option("arrows")
- && compressor.parent() instanceof AST_Object
- && !self.is_generator
- && !self.value.uses_arguments
- && !self.value.pinned()
- && self.value.body.length == 1
- && self.value.body[0] instanceof AST_Return
- && self.value.body[0].value
- && !self.value.contains_this()) {
- var arrow = make_node(AST_Arrow, self.value, self.value);
- arrow.async = self.async;
- arrow.is_generator = self.is_generator;
- return make_node(AST_ObjectKeyVal, self, {
- key: self.key instanceof AST_SymbolMethod ? self.key.name : self.key,
- value: arrow,
- quote: self.quote,
- });
- }
- return self;
-});
-
-def_optimize(AST_ObjectKeyVal, function(self, compressor) {
- lift_key(self, compressor);
- // p:function(){} ---> p(){}
- // p:function*(){} ---> *p(){}
- // p:async function(){} ---> async p(){}
- // p:()=>{} ---> p(){}
- // p:async()=>{} ---> async p(){}
- var unsafe_methods = compressor.option("unsafe_methods");
- if (unsafe_methods
- && compressor.option("ecma") >= 2015
- && (!(unsafe_methods instanceof RegExp) || unsafe_methods.test(self.key + ""))) {
- var key = self.key;
- var value = self.value;
- var is_arrow_with_block = value instanceof AST_Arrow
- && Array.isArray(value.body)
- && !value.contains_this();
- if ((is_arrow_with_block || value instanceof AST_Function) && !value.name) {
- return make_node(AST_ConciseMethod, self, {
- async: value.async,
- is_generator: value.is_generator,
- key: key instanceof AST_Node ? key : make_node(AST_SymbolMethod, self, {
- name: key,
- }),
- value: make_node(AST_Accessor, value, value),
- quote: self.quote,
- });
- }
- }
- return self;
-});
-
-def_optimize(AST_Destructuring, function(self, compressor) {
- if (compressor.option("pure_getters") == true
- && compressor.option("unused")
- && !self.is_array
- && Array.isArray(self.names)
- && !is_destructuring_export_decl(compressor)
- && !(self.names[self.names.length - 1] instanceof AST_Expansion)) {
- var keep = [];
- for (var i = 0; i < self.names.length; i++) {
- var elem = self.names[i];
- if (!(elem instanceof AST_ObjectKeyVal
- && typeof elem.key == "string"
- && elem.value instanceof AST_SymbolDeclaration
- && !should_retain(compressor, elem.value.definition()))) {
- keep.push(elem);
- }
- }
- if (keep.length != self.names.length) {
- self.names = keep;
- }
- }
- return self;
-
- function is_destructuring_export_decl(compressor) {
- var ancestors = [/^VarDef$/, /^(Const|Let|Var)$/, /^Export$/];
- for (var a = 0, p = 0, len = ancestors.length; a < len; p++) {
- var parent = compressor.parent(p);
- if (!parent) return false;
- if (a === 0 && parent.TYPE == "Destructuring") continue;
- if (!ancestors[a].test(parent.TYPE)) {
- return false;
- }
- a++;
- }
- return true;
- }
-
- function should_retain(compressor, def) {
- if (def.references.length) return true;
- if (!def.global) return false;
- if (compressor.toplevel.vars) {
- if (compressor.top_retain) {
- return compressor.top_retain(def);
- }
- return false;
- }
- return true;
- }
-});
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-// a small wrapper around fitzgen's source-map library
-async function SourceMap(options) {
- options = defaults(options, {
- file : null,
- root : null,
- orig : null,
-
- orig_line_diff : 0,
- dest_line_diff : 0,
- });
-
- var orig_map;
- var generator = new MOZ_SourceMap__default['default'].SourceMapGenerator({
- file : options.file,
- sourceRoot : options.root
- });
-
- if (options.orig) {
- orig_map = await new MOZ_SourceMap__default['default'].SourceMapConsumer(options.orig);
- orig_map.sources.forEach(function(source) {
- var sourceContent = orig_map.sourceContentFor(source, true);
- if (sourceContent) {
- generator.setSourceContent(source, sourceContent);
- }
- });
- }
-
- function add(source, gen_line, gen_col, orig_line, orig_col, name) {
- if (orig_map) {
- var info = orig_map.originalPositionFor({
- line: orig_line,
- column: orig_col
- });
- if (info.source === null) {
- return;
- }
- source = info.source;
- orig_line = info.line;
- orig_col = info.column;
- name = info.name || name;
- }
- generator.addMapping({
- generated : { line: gen_line + options.dest_line_diff, column: gen_col },
- original : { line: orig_line + options.orig_line_diff, column: orig_col },
- source : source,
- name : name
- });
- }
-
- return {
- add : add,
- get : function() { return generator; },
- toString : function() { return generator.toString(); },
- destroy : function () {
- if (orig_map && orig_map.destroy) {
- orig_map.destroy();
- }
- }
- };
-}
-
-var domprops = [
- "$&",
- "$'",
- "$*",
- "$+",
- "$1",
- "$2",
- "$3",
- "$4",
- "$5",
- "$6",
- "$7",
- "$8",
- "$9",
- "$_",
- "$`",
- "$input",
- "-moz-animation",
- "-moz-animation-delay",
- "-moz-animation-direction",
- "-moz-animation-duration",
- "-moz-animation-fill-mode",
- "-moz-animation-iteration-count",
- "-moz-animation-name",
- "-moz-animation-play-state",
- "-moz-animation-timing-function",
- "-moz-appearance",
- "-moz-backface-visibility",
- "-moz-border-end",
- "-moz-border-end-color",
- "-moz-border-end-style",
- "-moz-border-end-width",
- "-moz-border-image",
- "-moz-border-start",
- "-moz-border-start-color",
- "-moz-border-start-style",
- "-moz-border-start-width",
- "-moz-box-align",
- "-moz-box-direction",
- "-moz-box-flex",
- "-moz-box-ordinal-group",
- "-moz-box-orient",
- "-moz-box-pack",
- "-moz-box-sizing",
- "-moz-float-edge",
- "-moz-font-feature-settings",
- "-moz-font-language-override",
- "-moz-force-broken-image-icon",
- "-moz-hyphens",
- "-moz-image-region",
- "-moz-margin-end",
- "-moz-margin-start",
- "-moz-orient",
- "-moz-osx-font-smoothing",
- "-moz-outline-radius",
- "-moz-outline-radius-bottomleft",
- "-moz-outline-radius-bottomright",
- "-moz-outline-radius-topleft",
- "-moz-outline-radius-topright",
- "-moz-padding-end",
- "-moz-padding-start",
- "-moz-perspective",
- "-moz-perspective-origin",
- "-moz-tab-size",
- "-moz-text-size-adjust",
- "-moz-transform",
- "-moz-transform-origin",
- "-moz-transform-style",
- "-moz-transition",
- "-moz-transition-delay",
- "-moz-transition-duration",
- "-moz-transition-property",
- "-moz-transition-timing-function",
- "-moz-user-focus",
- "-moz-user-input",
- "-moz-user-modify",
- "-moz-user-select",
- "-moz-window-dragging",
- "-webkit-align-content",
- "-webkit-align-items",
- "-webkit-align-self",
- "-webkit-animation",
- "-webkit-animation-delay",
- "-webkit-animation-direction",
- "-webkit-animation-duration",
- "-webkit-animation-fill-mode",
- "-webkit-animation-iteration-count",
- "-webkit-animation-name",
- "-webkit-animation-play-state",
- "-webkit-animation-timing-function",
- "-webkit-appearance",
- "-webkit-backface-visibility",
- "-webkit-background-clip",
- "-webkit-background-origin",
- "-webkit-background-size",
- "-webkit-border-bottom-left-radius",
- "-webkit-border-bottom-right-radius",
- "-webkit-border-image",
- "-webkit-border-radius",
- "-webkit-border-top-left-radius",
- "-webkit-border-top-right-radius",
- "-webkit-box-align",
- "-webkit-box-direction",
- "-webkit-box-flex",
- "-webkit-box-ordinal-group",
- "-webkit-box-orient",
- "-webkit-box-pack",
- "-webkit-box-shadow",
- "-webkit-box-sizing",
- "-webkit-filter",
- "-webkit-flex",
- "-webkit-flex-basis",
- "-webkit-flex-direction",
- "-webkit-flex-flow",
- "-webkit-flex-grow",
- "-webkit-flex-shrink",
- "-webkit-flex-wrap",
- "-webkit-justify-content",
- "-webkit-line-clamp",
- "-webkit-mask",
- "-webkit-mask-clip",
- "-webkit-mask-composite",
- "-webkit-mask-image",
- "-webkit-mask-origin",
- "-webkit-mask-position",
- "-webkit-mask-position-x",
- "-webkit-mask-position-y",
- "-webkit-mask-repeat",
- "-webkit-mask-size",
- "-webkit-order",
- "-webkit-perspective",
- "-webkit-perspective-origin",
- "-webkit-text-fill-color",
- "-webkit-text-size-adjust",
- "-webkit-text-stroke",
- "-webkit-text-stroke-color",
- "-webkit-text-stroke-width",
- "-webkit-transform",
- "-webkit-transform-origin",
- "-webkit-transform-style",
- "-webkit-transition",
- "-webkit-transition-delay",
- "-webkit-transition-duration",
- "-webkit-transition-property",
- "-webkit-transition-timing-function",
- "-webkit-user-select",
- "0",
- "1",
- "10",
- "11",
- "12",
- "13",
- "14",
- "15",
- "16",
- "17",
- "18",
- "19",
- "2",
- "20",
- "3",
- "4",
- "5",
- "6",
- "7",
- "8",
- "9",
- "@@iterator",
- "ABORT_ERR",
- "ACTIVE",
- "ACTIVE_ATTRIBUTES",
- "ACTIVE_TEXTURE",
- "ACTIVE_UNIFORMS",
- "ACTIVE_UNIFORM_BLOCKS",
- "ADDITION",
- "ALIASED_LINE_WIDTH_RANGE",
- "ALIASED_POINT_SIZE_RANGE",
- "ALLOW_KEYBOARD_INPUT",
- "ALLPASS",
- "ALPHA",
- "ALPHA_BITS",
- "ALREADY_SIGNALED",
- "ALT_MASK",
- "ALWAYS",
- "ANY_SAMPLES_PASSED",
- "ANY_SAMPLES_PASSED_CONSERVATIVE",
- "ANY_TYPE",
- "ANY_UNORDERED_NODE_TYPE",
- "ARRAY_BUFFER",
- "ARRAY_BUFFER_BINDING",
- "ATTACHED_SHADERS",
- "ATTRIBUTE_NODE",
- "AT_TARGET",
- "AbortController",
- "AbortSignal",
- "AbsoluteOrientationSensor",
- "AbstractRange",
- "Accelerometer",
- "AddSearchProvider",
- "AggregateError",
- "AnalyserNode",
- "Animation",
- "AnimationEffect",
- "AnimationEvent",
- "AnimationPlaybackEvent",
- "AnimationTimeline",
- "AnonXMLHttpRequest",
- "Any",
- "ApplicationCache",
- "ApplicationCacheErrorEvent",
- "Array",
- "ArrayBuffer",
- "ArrayType",
- "Atomics",
- "Attr",
- "Audio",
- "AudioBuffer",
- "AudioBufferSourceNode",
- "AudioContext",
- "AudioDestinationNode",
- "AudioListener",
- "AudioNode",
- "AudioParam",
- "AudioParamMap",
- "AudioProcessingEvent",
- "AudioScheduledSourceNode",
- "AudioStreamTrack",
- "AudioWorklet",
- "AudioWorkletNode",
- "AuthenticatorAssertionResponse",
- "AuthenticatorAttestationResponse",
- "AuthenticatorResponse",
- "AutocompleteErrorEvent",
- "BACK",
- "BAD_BOUNDARYPOINTS_ERR",
- "BAD_REQUEST",
- "BANDPASS",
- "BLEND",
- "BLEND_COLOR",
- "BLEND_DST_ALPHA",
- "BLEND_DST_RGB",
- "BLEND_EQUATION",
- "BLEND_EQUATION_ALPHA",
- "BLEND_EQUATION_RGB",
- "BLEND_SRC_ALPHA",
- "BLEND_SRC_RGB",
- "BLUE_BITS",
- "BLUR",
- "BOOL",
- "BOOLEAN_TYPE",
- "BOOL_VEC2",
- "BOOL_VEC3",
- "BOOL_VEC4",
- "BOTH",
- "BROWSER_DEFAULT_WEBGL",
- "BUBBLING_PHASE",
- "BUFFER_SIZE",
- "BUFFER_USAGE",
- "BYTE",
- "BYTES_PER_ELEMENT",
- "BackgroundFetchManager",
- "BackgroundFetchRecord",
- "BackgroundFetchRegistration",
- "BarProp",
- "BarcodeDetector",
- "BaseAudioContext",
- "BaseHref",
- "BatteryManager",
- "BeforeInstallPromptEvent",
- "BeforeLoadEvent",
- "BeforeUnloadEvent",
- "BigInt",
- "BigInt64Array",
- "BigUint64Array",
- "BiquadFilterNode",
- "Blob",
- "BlobEvent",
- "Bluetooth",
- "BluetoothCharacteristicProperties",
- "BluetoothDevice",
- "BluetoothRemoteGATTCharacteristic",
- "BluetoothRemoteGATTDescriptor",
- "BluetoothRemoteGATTServer",
- "BluetoothRemoteGATTService",
- "BluetoothUUID",
- "Boolean",
- "BroadcastChannel",
- "ByteLengthQueuingStrategy",
- "CAPTURING_PHASE",
- "CCW",
- "CDATASection",
- "CDATA_SECTION_NODE",
- "CHANGE",
- "CHARSET_RULE",
- "CHECKING",
- "CLAMP_TO_EDGE",
- "CLICK",
- "CLOSED",
- "CLOSING",
- "COLOR",
- "COLOR_ATTACHMENT0",
- "COLOR_ATTACHMENT1",
- "COLOR_ATTACHMENT10",
- "COLOR_ATTACHMENT11",
- "COLOR_ATTACHMENT12",
- "COLOR_ATTACHMENT13",
- "COLOR_ATTACHMENT14",
- "COLOR_ATTACHMENT15",
- "COLOR_ATTACHMENT2",
- "COLOR_ATTACHMENT3",
- "COLOR_ATTACHMENT4",
- "COLOR_ATTACHMENT5",
- "COLOR_ATTACHMENT6",
- "COLOR_ATTACHMENT7",
- "COLOR_ATTACHMENT8",
- "COLOR_ATTACHMENT9",
- "COLOR_BUFFER_BIT",
- "COLOR_CLEAR_VALUE",
- "COLOR_WRITEMASK",
- "COMMENT_NODE",
- "COMPARE_REF_TO_TEXTURE",
- "COMPILE_STATUS",
- "COMPRESSED_RGBA_S3TC_DXT1_EXT",
- "COMPRESSED_RGBA_S3TC_DXT3_EXT",
- "COMPRESSED_RGBA_S3TC_DXT5_EXT",
- "COMPRESSED_RGB_S3TC_DXT1_EXT",
- "COMPRESSED_TEXTURE_FORMATS",
- "CONDITION_SATISFIED",
- "CONFIGURATION_UNSUPPORTED",
- "CONNECTING",
- "CONSTANT_ALPHA",
- "CONSTANT_COLOR",
- "CONSTRAINT_ERR",
- "CONTEXT_LOST_WEBGL",
- "CONTROL_MASK",
- "COPY_READ_BUFFER",
- "COPY_READ_BUFFER_BINDING",
- "COPY_WRITE_BUFFER",
- "COPY_WRITE_BUFFER_BINDING",
- "COUNTER_STYLE_RULE",
- "CSS",
- "CSS2Properties",
- "CSSAnimation",
- "CSSCharsetRule",
- "CSSConditionRule",
- "CSSCounterStyleRule",
- "CSSFontFaceRule",
- "CSSFontFeatureValuesRule",
- "CSSGroupingRule",
- "CSSImageValue",
- "CSSImportRule",
- "CSSKeyframeRule",
- "CSSKeyframesRule",
- "CSSKeywordValue",
- "CSSMathInvert",
- "CSSMathMax",
- "CSSMathMin",
- "CSSMathNegate",
- "CSSMathProduct",
- "CSSMathSum",
- "CSSMathValue",
- "CSSMatrixComponent",
- "CSSMediaRule",
- "CSSMozDocumentRule",
- "CSSNameSpaceRule",
- "CSSNamespaceRule",
- "CSSNumericArray",
- "CSSNumericValue",
- "CSSPageRule",
- "CSSPerspective",
- "CSSPositionValue",
- "CSSPrimitiveValue",
- "CSSRotate",
- "CSSRule",
- "CSSRuleList",
- "CSSScale",
- "CSSSkew",
- "CSSSkewX",
- "CSSSkewY",
- "CSSStyleDeclaration",
- "CSSStyleRule",
- "CSSStyleSheet",
- "CSSStyleValue",
- "CSSSupportsRule",
- "CSSTransformComponent",
- "CSSTransformValue",
- "CSSTransition",
- "CSSTranslate",
- "CSSUnitValue",
- "CSSUnknownRule",
- "CSSUnparsedValue",
- "CSSValue",
- "CSSValueList",
- "CSSVariableReferenceValue",
- "CSSVariablesDeclaration",
- "CSSVariablesRule",
- "CSSViewportRule",
- "CSS_ATTR",
- "CSS_CM",
- "CSS_COUNTER",
- "CSS_CUSTOM",
- "CSS_DEG",
- "CSS_DIMENSION",
- "CSS_EMS",
- "CSS_EXS",
- "CSS_FILTER_BLUR",
- "CSS_FILTER_BRIGHTNESS",
- "CSS_FILTER_CONTRAST",
- "CSS_FILTER_CUSTOM",
- "CSS_FILTER_DROP_SHADOW",
- "CSS_FILTER_GRAYSCALE",
- "CSS_FILTER_HUE_ROTATE",
- "CSS_FILTER_INVERT",
- "CSS_FILTER_OPACITY",
- "CSS_FILTER_REFERENCE",
- "CSS_FILTER_SATURATE",
- "CSS_FILTER_SEPIA",
- "CSS_GRAD",
- "CSS_HZ",
- "CSS_IDENT",
- "CSS_IN",
- "CSS_INHERIT",
- "CSS_KHZ",
- "CSS_MATRIX",
- "CSS_MATRIX3D",
- "CSS_MM",
- "CSS_MS",
- "CSS_NUMBER",
- "CSS_PC",
- "CSS_PERCENTAGE",
- "CSS_PERSPECTIVE",
- "CSS_PRIMITIVE_VALUE",
- "CSS_PT",
- "CSS_PX",
- "CSS_RAD",
- "CSS_RECT",
- "CSS_RGBCOLOR",
- "CSS_ROTATE",
- "CSS_ROTATE3D",
- "CSS_ROTATEX",
- "CSS_ROTATEY",
- "CSS_ROTATEZ",
- "CSS_S",
- "CSS_SCALE",
- "CSS_SCALE3D",
- "CSS_SCALEX",
- "CSS_SCALEY",
- "CSS_SCALEZ",
- "CSS_SKEW",
- "CSS_SKEWX",
- "CSS_SKEWY",
- "CSS_STRING",
- "CSS_TRANSLATE",
- "CSS_TRANSLATE3D",
- "CSS_TRANSLATEX",
- "CSS_TRANSLATEY",
- "CSS_TRANSLATEZ",
- "CSS_UNKNOWN",
- "CSS_URI",
- "CSS_VALUE_LIST",
- "CSS_VH",
- "CSS_VMAX",
- "CSS_VMIN",
- "CSS_VW",
- "CULL_FACE",
- "CULL_FACE_MODE",
- "CURRENT_PROGRAM",
- "CURRENT_QUERY",
- "CURRENT_VERTEX_ATTRIB",
- "CUSTOM",
- "CW",
- "Cache",
- "CacheStorage",
- "CanvasCaptureMediaStream",
- "CanvasCaptureMediaStreamTrack",
- "CanvasGradient",
- "CanvasPattern",
- "CanvasRenderingContext2D",
- "CaretPosition",
- "ChannelMergerNode",
- "ChannelSplitterNode",
- "CharacterData",
- "ClientRect",
- "ClientRectList",
- "Clipboard",
- "ClipboardEvent",
- "ClipboardItem",
- "CloseEvent",
- "Collator",
- "CommandEvent",
- "Comment",
- "CompileError",
- "CompositionEvent",
- "CompressionStream",
- "Console",
- "ConstantSourceNode",
- "Controllers",
- "ConvolverNode",
- "CountQueuingStrategy",
- "Counter",
- "Credential",
- "CredentialsContainer",
- "Crypto",
- "CryptoKey",
- "CustomElementRegistry",
- "CustomEvent",
- "DATABASE_ERR",
- "DATA_CLONE_ERR",
- "DATA_ERR",
- "DBLCLICK",
- "DECR",
- "DECR_WRAP",
- "DELETE_STATUS",
- "DEPTH",
- "DEPTH24_STENCIL8",
- "DEPTH32F_STENCIL8",
- "DEPTH_ATTACHMENT",
- "DEPTH_BITS",
- "DEPTH_BUFFER_BIT",
- "DEPTH_CLEAR_VALUE",
- "DEPTH_COMPONENT",
- "DEPTH_COMPONENT16",
- "DEPTH_COMPONENT24",
- "DEPTH_COMPONENT32F",
- "DEPTH_FUNC",
- "DEPTH_RANGE",
- "DEPTH_STENCIL",
- "DEPTH_STENCIL_ATTACHMENT",
- "DEPTH_TEST",
- "DEPTH_WRITEMASK",
- "DEVICE_INELIGIBLE",
- "DIRECTION_DOWN",
- "DIRECTION_LEFT",
- "DIRECTION_RIGHT",
- "DIRECTION_UP",
- "DISABLED",
- "DISPATCH_REQUEST_ERR",
- "DITHER",
- "DOCUMENT_FRAGMENT_NODE",
- "DOCUMENT_NODE",
- "DOCUMENT_POSITION_CONTAINED_BY",
- "DOCUMENT_POSITION_CONTAINS",
- "DOCUMENT_POSITION_DISCONNECTED",
- "DOCUMENT_POSITION_FOLLOWING",
- "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC",
- "DOCUMENT_POSITION_PRECEDING",
- "DOCUMENT_TYPE_NODE",
- "DOMCursor",
- "DOMError",
- "DOMException",
- "DOMImplementation",
- "DOMImplementationLS",
- "DOMMatrix",
- "DOMMatrixReadOnly",
- "DOMParser",
- "DOMPoint",
- "DOMPointReadOnly",
- "DOMQuad",
- "DOMRect",
- "DOMRectList",
- "DOMRectReadOnly",
- "DOMRequest",
- "DOMSTRING_SIZE_ERR",
- "DOMSettableTokenList",
- "DOMStringList",
- "DOMStringMap",
- "DOMTokenList",
- "DOMTransactionEvent",
- "DOM_DELTA_LINE",
- "DOM_DELTA_PAGE",
- "DOM_DELTA_PIXEL",
- "DOM_INPUT_METHOD_DROP",
- "DOM_INPUT_METHOD_HANDWRITING",
- "DOM_INPUT_METHOD_IME",
- "DOM_INPUT_METHOD_KEYBOARD",
- "DOM_INPUT_METHOD_MULTIMODAL",
- "DOM_INPUT_METHOD_OPTION",
- "DOM_INPUT_METHOD_PASTE",
- "DOM_INPUT_METHOD_SCRIPT",
- "DOM_INPUT_METHOD_UNKNOWN",
- "DOM_INPUT_METHOD_VOICE",
- "DOM_KEY_LOCATION_JOYSTICK",
- "DOM_KEY_LOCATION_LEFT",
- "DOM_KEY_LOCATION_MOBILE",
- "DOM_KEY_LOCATION_NUMPAD",
- "DOM_KEY_LOCATION_RIGHT",
- "DOM_KEY_LOCATION_STANDARD",
- "DOM_VK_0",
- "DOM_VK_1",
- "DOM_VK_2",
- "DOM_VK_3",
- "DOM_VK_4",
- "DOM_VK_5",
- "DOM_VK_6",
- "DOM_VK_7",
- "DOM_VK_8",
- "DOM_VK_9",
- "DOM_VK_A",
- "DOM_VK_ACCEPT",
- "DOM_VK_ADD",
- "DOM_VK_ALT",
- "DOM_VK_ALTGR",
- "DOM_VK_AMPERSAND",
- "DOM_VK_ASTERISK",
- "DOM_VK_AT",
- "DOM_VK_ATTN",
- "DOM_VK_B",
- "DOM_VK_BACKSPACE",
- "DOM_VK_BACK_QUOTE",
- "DOM_VK_BACK_SLASH",
- "DOM_VK_BACK_SPACE",
- "DOM_VK_C",
- "DOM_VK_CANCEL",
- "DOM_VK_CAPS_LOCK",
- "DOM_VK_CIRCUMFLEX",
- "DOM_VK_CLEAR",
- "DOM_VK_CLOSE_BRACKET",
- "DOM_VK_CLOSE_CURLY_BRACKET",
- "DOM_VK_CLOSE_PAREN",
- "DOM_VK_COLON",
- "DOM_VK_COMMA",
- "DOM_VK_CONTEXT_MENU",
- "DOM_VK_CONTROL",
- "DOM_VK_CONVERT",
- "DOM_VK_CRSEL",
- "DOM_VK_CTRL",
- "DOM_VK_D",
- "DOM_VK_DECIMAL",
- "DOM_VK_DELETE",
- "DOM_VK_DIVIDE",
- "DOM_VK_DOLLAR",
- "DOM_VK_DOUBLE_QUOTE",
- "DOM_VK_DOWN",
- "DOM_VK_E",
- "DOM_VK_EISU",
- "DOM_VK_END",
- "DOM_VK_ENTER",
- "DOM_VK_EQUALS",
- "DOM_VK_EREOF",
- "DOM_VK_ESCAPE",
- "DOM_VK_EXCLAMATION",
- "DOM_VK_EXECUTE",
- "DOM_VK_EXSEL",
- "DOM_VK_F",
- "DOM_VK_F1",
- "DOM_VK_F10",
- "DOM_VK_F11",
- "DOM_VK_F12",
- "DOM_VK_F13",
- "DOM_VK_F14",
- "DOM_VK_F15",
- "DOM_VK_F16",
- "DOM_VK_F17",
- "DOM_VK_F18",
- "DOM_VK_F19",
- "DOM_VK_F2",
- "DOM_VK_F20",
- "DOM_VK_F21",
- "DOM_VK_F22",
- "DOM_VK_F23",
- "DOM_VK_F24",
- "DOM_VK_F25",
- "DOM_VK_F26",
- "DOM_VK_F27",
- "DOM_VK_F28",
- "DOM_VK_F29",
- "DOM_VK_F3",
- "DOM_VK_F30",
- "DOM_VK_F31",
- "DOM_VK_F32",
- "DOM_VK_F33",
- "DOM_VK_F34",
- "DOM_VK_F35",
- "DOM_VK_F36",
- "DOM_VK_F4",
- "DOM_VK_F5",
- "DOM_VK_F6",
- "DOM_VK_F7",
- "DOM_VK_F8",
- "DOM_VK_F9",
- "DOM_VK_FINAL",
- "DOM_VK_FRONT",
- "DOM_VK_G",
- "DOM_VK_GREATER_THAN",
- "DOM_VK_H",
- "DOM_VK_HANGUL",
- "DOM_VK_HANJA",
- "DOM_VK_HASH",
- "DOM_VK_HELP",
- "DOM_VK_HK_TOGGLE",
- "DOM_VK_HOME",
- "DOM_VK_HYPHEN_MINUS",
- "DOM_VK_I",
- "DOM_VK_INSERT",
- "DOM_VK_J",
- "DOM_VK_JUNJA",
- "DOM_VK_K",
- "DOM_VK_KANA",
- "DOM_VK_KANJI",
- "DOM_VK_L",
- "DOM_VK_LEFT",
- "DOM_VK_LEFT_TAB",
- "DOM_VK_LESS_THAN",
- "DOM_VK_M",
- "DOM_VK_META",
- "DOM_VK_MODECHANGE",
- "DOM_VK_MULTIPLY",
- "DOM_VK_N",
- "DOM_VK_NONCONVERT",
- "DOM_VK_NUMPAD0",
- "DOM_VK_NUMPAD1",
- "DOM_VK_NUMPAD2",
- "DOM_VK_NUMPAD3",
- "DOM_VK_NUMPAD4",
- "DOM_VK_NUMPAD5",
- "DOM_VK_NUMPAD6",
- "DOM_VK_NUMPAD7",
- "DOM_VK_NUMPAD8",
- "DOM_VK_NUMPAD9",
- "DOM_VK_NUM_LOCK",
- "DOM_VK_O",
- "DOM_VK_OEM_1",
- "DOM_VK_OEM_102",
- "DOM_VK_OEM_2",
- "DOM_VK_OEM_3",
- "DOM_VK_OEM_4",
- "DOM_VK_OEM_5",
- "DOM_VK_OEM_6",
- "DOM_VK_OEM_7",
- "DOM_VK_OEM_8",
- "DOM_VK_OEM_COMMA",
- "DOM_VK_OEM_MINUS",
- "DOM_VK_OEM_PERIOD",
- "DOM_VK_OEM_PLUS",
- "DOM_VK_OPEN_BRACKET",
- "DOM_VK_OPEN_CURLY_BRACKET",
- "DOM_VK_OPEN_PAREN",
- "DOM_VK_P",
- "DOM_VK_PA1",
- "DOM_VK_PAGEDOWN",
- "DOM_VK_PAGEUP",
- "DOM_VK_PAGE_DOWN",
- "DOM_VK_PAGE_UP",
- "DOM_VK_PAUSE",
- "DOM_VK_PERCENT",
- "DOM_VK_PERIOD",
- "DOM_VK_PIPE",
- "DOM_VK_PLAY",
- "DOM_VK_PLUS",
- "DOM_VK_PRINT",
- "DOM_VK_PRINTSCREEN",
- "DOM_VK_PROCESSKEY",
- "DOM_VK_PROPERITES",
- "DOM_VK_Q",
- "DOM_VK_QUESTION_MARK",
- "DOM_VK_QUOTE",
- "DOM_VK_R",
- "DOM_VK_REDO",
- "DOM_VK_RETURN",
- "DOM_VK_RIGHT",
- "DOM_VK_S",
- "DOM_VK_SCROLL_LOCK",
- "DOM_VK_SELECT",
- "DOM_VK_SEMICOLON",
- "DOM_VK_SEPARATOR",
- "DOM_VK_SHIFT",
- "DOM_VK_SLASH",
- "DOM_VK_SLEEP",
- "DOM_VK_SPACE",
- "DOM_VK_SUBTRACT",
- "DOM_VK_T",
- "DOM_VK_TAB",
- "DOM_VK_TILDE",
- "DOM_VK_U",
- "DOM_VK_UNDERSCORE",
- "DOM_VK_UNDO",
- "DOM_VK_UNICODE",
- "DOM_VK_UP",
- "DOM_VK_V",
- "DOM_VK_VOLUME_DOWN",
- "DOM_VK_VOLUME_MUTE",
- "DOM_VK_VOLUME_UP",
- "DOM_VK_W",
- "DOM_VK_WIN",
- "DOM_VK_WINDOW",
- "DOM_VK_WIN_ICO_00",
- "DOM_VK_WIN_ICO_CLEAR",
- "DOM_VK_WIN_ICO_HELP",
- "DOM_VK_WIN_OEM_ATTN",
- "DOM_VK_WIN_OEM_AUTO",
- "DOM_VK_WIN_OEM_BACKTAB",
- "DOM_VK_WIN_OEM_CLEAR",
- "DOM_VK_WIN_OEM_COPY",
- "DOM_VK_WIN_OEM_CUSEL",
- "DOM_VK_WIN_OEM_ENLW",
- "DOM_VK_WIN_OEM_FINISH",
- "DOM_VK_WIN_OEM_FJ_JISHO",
- "DOM_VK_WIN_OEM_FJ_LOYA",
- "DOM_VK_WIN_OEM_FJ_MASSHOU",
- "DOM_VK_WIN_OEM_FJ_ROYA",
- "DOM_VK_WIN_OEM_FJ_TOUROKU",
- "DOM_VK_WIN_OEM_JUMP",
- "DOM_VK_WIN_OEM_PA1",
- "DOM_VK_WIN_OEM_PA2",
- "DOM_VK_WIN_OEM_PA3",
- "DOM_VK_WIN_OEM_RESET",
- "DOM_VK_WIN_OEM_WSCTRL",
- "DOM_VK_X",
- "DOM_VK_XF86XK_ADD_FAVORITE",
- "DOM_VK_XF86XK_APPLICATION_LEFT",
- "DOM_VK_XF86XK_APPLICATION_RIGHT",
- "DOM_VK_XF86XK_AUDIO_CYCLE_TRACK",
- "DOM_VK_XF86XK_AUDIO_FORWARD",
- "DOM_VK_XF86XK_AUDIO_LOWER_VOLUME",
- "DOM_VK_XF86XK_AUDIO_MEDIA",
- "DOM_VK_XF86XK_AUDIO_MUTE",
- "DOM_VK_XF86XK_AUDIO_NEXT",
- "DOM_VK_XF86XK_AUDIO_PAUSE",
- "DOM_VK_XF86XK_AUDIO_PLAY",
- "DOM_VK_XF86XK_AUDIO_PREV",
- "DOM_VK_XF86XK_AUDIO_RAISE_VOLUME",
- "DOM_VK_XF86XK_AUDIO_RANDOM_PLAY",
- "DOM_VK_XF86XK_AUDIO_RECORD",
- "DOM_VK_XF86XK_AUDIO_REPEAT",
- "DOM_VK_XF86XK_AUDIO_REWIND",
- "DOM_VK_XF86XK_AUDIO_STOP",
- "DOM_VK_XF86XK_AWAY",
- "DOM_VK_XF86XK_BACK",
- "DOM_VK_XF86XK_BACK_FORWARD",
- "DOM_VK_XF86XK_BATTERY",
- "DOM_VK_XF86XK_BLUE",
- "DOM_VK_XF86XK_BLUETOOTH",
- "DOM_VK_XF86XK_BOOK",
- "DOM_VK_XF86XK_BRIGHTNESS_ADJUST",
- "DOM_VK_XF86XK_CALCULATOR",
- "DOM_VK_XF86XK_CALENDAR",
- "DOM_VK_XF86XK_CD",
- "DOM_VK_XF86XK_CLOSE",
- "DOM_VK_XF86XK_COMMUNITY",
- "DOM_VK_XF86XK_CONTRAST_ADJUST",
- "DOM_VK_XF86XK_COPY",
- "DOM_VK_XF86XK_CUT",
- "DOM_VK_XF86XK_CYCLE_ANGLE",
- "DOM_VK_XF86XK_DISPLAY",
- "DOM_VK_XF86XK_DOCUMENTS",
- "DOM_VK_XF86XK_DOS",
- "DOM_VK_XF86XK_EJECT",
- "DOM_VK_XF86XK_EXCEL",
- "DOM_VK_XF86XK_EXPLORER",
- "DOM_VK_XF86XK_FAVORITES",
- "DOM_VK_XF86XK_FINANCE",
- "DOM_VK_XF86XK_FORWARD",
- "DOM_VK_XF86XK_FRAME_BACK",
- "DOM_VK_XF86XK_FRAME_FORWARD",
- "DOM_VK_XF86XK_GAME",
- "DOM_VK_XF86XK_GO",
- "DOM_VK_XF86XK_GREEN",
- "DOM_VK_XF86XK_HIBERNATE",
- "DOM_VK_XF86XK_HISTORY",
- "DOM_VK_XF86XK_HOME_PAGE",
- "DOM_VK_XF86XK_HOT_LINKS",
- "DOM_VK_XF86XK_I_TOUCH",
- "DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN",
- "DOM_VK_XF86XK_KBD_BRIGHTNESS_UP",
- "DOM_VK_XF86XK_KBD_LIGHT_ON_OFF",
- "DOM_VK_XF86XK_LAUNCH0",
- "DOM_VK_XF86XK_LAUNCH1",
- "DOM_VK_XF86XK_LAUNCH2",
- "DOM_VK_XF86XK_LAUNCH3",
- "DOM_VK_XF86XK_LAUNCH4",
- "DOM_VK_XF86XK_LAUNCH5",
- "DOM_VK_XF86XK_LAUNCH6",
- "DOM_VK_XF86XK_LAUNCH7",
- "DOM_VK_XF86XK_LAUNCH8",
- "DOM_VK_XF86XK_LAUNCH9",
- "DOM_VK_XF86XK_LAUNCH_A",
- "DOM_VK_XF86XK_LAUNCH_B",
- "DOM_VK_XF86XK_LAUNCH_C",
- "DOM_VK_XF86XK_LAUNCH_D",
- "DOM_VK_XF86XK_LAUNCH_E",
- "DOM_VK_XF86XK_LAUNCH_F",
- "DOM_VK_XF86XK_LIGHT_BULB",
- "DOM_VK_XF86XK_LOG_OFF",
- "DOM_VK_XF86XK_MAIL",
- "DOM_VK_XF86XK_MAIL_FORWARD",
- "DOM_VK_XF86XK_MARKET",
- "DOM_VK_XF86XK_MEETING",
- "DOM_VK_XF86XK_MEMO",
- "DOM_VK_XF86XK_MENU_KB",
- "DOM_VK_XF86XK_MENU_PB",
- "DOM_VK_XF86XK_MESSENGER",
- "DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN",
- "DOM_VK_XF86XK_MON_BRIGHTNESS_UP",
- "DOM_VK_XF86XK_MUSIC",
- "DOM_VK_XF86XK_MY_COMPUTER",
- "DOM_VK_XF86XK_MY_SITES",
- "DOM_VK_XF86XK_NEW",
- "DOM_VK_XF86XK_NEWS",
- "DOM_VK_XF86XK_OFFICE_HOME",
- "DOM_VK_XF86XK_OPEN",
- "DOM_VK_XF86XK_OPEN_URL",
- "DOM_VK_XF86XK_OPTION",
- "DOM_VK_XF86XK_PASTE",
- "DOM_VK_XF86XK_PHONE",
- "DOM_VK_XF86XK_PICTURES",
- "DOM_VK_XF86XK_POWER_DOWN",
- "DOM_VK_XF86XK_POWER_OFF",
- "DOM_VK_XF86XK_RED",
- "DOM_VK_XF86XK_REFRESH",
- "DOM_VK_XF86XK_RELOAD",
- "DOM_VK_XF86XK_REPLY",
- "DOM_VK_XF86XK_ROCKER_DOWN",
- "DOM_VK_XF86XK_ROCKER_ENTER",
- "DOM_VK_XF86XK_ROCKER_UP",
- "DOM_VK_XF86XK_ROTATE_WINDOWS",
- "DOM_VK_XF86XK_ROTATION_KB",
- "DOM_VK_XF86XK_ROTATION_PB",
- "DOM_VK_XF86XK_SAVE",
- "DOM_VK_XF86XK_SCREEN_SAVER",
- "DOM_VK_XF86XK_SCROLL_CLICK",
- "DOM_VK_XF86XK_SCROLL_DOWN",
- "DOM_VK_XF86XK_SCROLL_UP",
- "DOM_VK_XF86XK_SEARCH",
- "DOM_VK_XF86XK_SEND",
- "DOM_VK_XF86XK_SHOP",
- "DOM_VK_XF86XK_SPELL",
- "DOM_VK_XF86XK_SPLIT_SCREEN",
- "DOM_VK_XF86XK_STANDBY",
- "DOM_VK_XF86XK_START",
- "DOM_VK_XF86XK_STOP",
- "DOM_VK_XF86XK_SUBTITLE",
- "DOM_VK_XF86XK_SUPPORT",
- "DOM_VK_XF86XK_SUSPEND",
- "DOM_VK_XF86XK_TASK_PANE",
- "DOM_VK_XF86XK_TERMINAL",
- "DOM_VK_XF86XK_TIME",
- "DOM_VK_XF86XK_TOOLS",
- "DOM_VK_XF86XK_TOP_MENU",
- "DOM_VK_XF86XK_TO_DO_LIST",
- "DOM_VK_XF86XK_TRAVEL",
- "DOM_VK_XF86XK_USER1KB",
- "DOM_VK_XF86XK_USER2KB",
- "DOM_VK_XF86XK_USER_PB",
- "DOM_VK_XF86XK_UWB",
- "DOM_VK_XF86XK_VENDOR_HOME",
- "DOM_VK_XF86XK_VIDEO",
- "DOM_VK_XF86XK_VIEW",
- "DOM_VK_XF86XK_WAKE_UP",
- "DOM_VK_XF86XK_WEB_CAM",
- "DOM_VK_XF86XK_WHEEL_BUTTON",
- "DOM_VK_XF86XK_WLAN",
- "DOM_VK_XF86XK_WORD",
- "DOM_VK_XF86XK_WWW",
- "DOM_VK_XF86XK_XFER",
- "DOM_VK_XF86XK_YELLOW",
- "DOM_VK_XF86XK_ZOOM_IN",
- "DOM_VK_XF86XK_ZOOM_OUT",
- "DOM_VK_Y",
- "DOM_VK_Z",
- "DOM_VK_ZOOM",
- "DONE",
- "DONT_CARE",
- "DOWNLOADING",
- "DRAGDROP",
- "DRAW_BUFFER0",
- "DRAW_BUFFER1",
- "DRAW_BUFFER10",
- "DRAW_BUFFER11",
- "DRAW_BUFFER12",
- "DRAW_BUFFER13",
- "DRAW_BUFFER14",
- "DRAW_BUFFER15",
- "DRAW_BUFFER2",
- "DRAW_BUFFER3",
- "DRAW_BUFFER4",
- "DRAW_BUFFER5",
- "DRAW_BUFFER6",
- "DRAW_BUFFER7",
- "DRAW_BUFFER8",
- "DRAW_BUFFER9",
- "DRAW_FRAMEBUFFER",
- "DRAW_FRAMEBUFFER_BINDING",
- "DST_ALPHA",
- "DST_COLOR",
- "DYNAMIC_COPY",
- "DYNAMIC_DRAW",
- "DYNAMIC_READ",
- "DataChannel",
- "DataTransfer",
- "DataTransferItem",
- "DataTransferItemList",
- "DataView",
- "Date",
- "DateTimeFormat",
- "DecompressionStream",
- "DelayNode",
- "DeprecationReportBody",
- "DesktopNotification",
- "DesktopNotificationCenter",
- "DeviceLightEvent",
- "DeviceMotionEvent",
- "DeviceMotionEventAcceleration",
- "DeviceMotionEventRotationRate",
- "DeviceOrientationEvent",
- "DeviceProximityEvent",
- "DeviceStorage",
- "DeviceStorageChangeEvent",
- "Directory",
- "DisplayNames",
- "Document",
- "DocumentFragment",
- "DocumentTimeline",
- "DocumentType",
- "DragEvent",
- "DynamicsCompressorNode",
- "E",
- "ELEMENT_ARRAY_BUFFER",
- "ELEMENT_ARRAY_BUFFER_BINDING",
- "ELEMENT_NODE",
- "EMPTY",
- "ENCODING_ERR",
- "ENDED",
- "END_TO_END",
- "END_TO_START",
- "ENTITY_NODE",
- "ENTITY_REFERENCE_NODE",
- "EPSILON",
- "EQUAL",
- "EQUALPOWER",
- "ERROR",
- "EXPONENTIAL_DISTANCE",
- "Element",
- "ElementInternals",
- "ElementQuery",
- "EnterPictureInPictureEvent",
- "Entity",
- "EntityReference",
- "Error",
- "ErrorEvent",
- "EvalError",
- "Event",
- "EventException",
- "EventSource",
- "EventTarget",
- "External",
- "FASTEST",
- "FIDOSDK",
- "FILTER_ACCEPT",
- "FILTER_INTERRUPT",
- "FILTER_REJECT",
- "FILTER_SKIP",
- "FINISHED_STATE",
- "FIRST_ORDERED_NODE_TYPE",
- "FLOAT",
- "FLOAT_32_UNSIGNED_INT_24_8_REV",
- "FLOAT_MAT2",
- "FLOAT_MAT2x3",
- "FLOAT_MAT2x4",
- "FLOAT_MAT3",
- "FLOAT_MAT3x2",
- "FLOAT_MAT3x4",
- "FLOAT_MAT4",
- "FLOAT_MAT4x2",
- "FLOAT_MAT4x3",
- "FLOAT_VEC2",
- "FLOAT_VEC3",
- "FLOAT_VEC4",
- "FOCUS",
- "FONT_FACE_RULE",
- "FONT_FEATURE_VALUES_RULE",
- "FRAGMENT_SHADER",
- "FRAGMENT_SHADER_DERIVATIVE_HINT",
- "FRAGMENT_SHADER_DERIVATIVE_HINT_OES",
- "FRAMEBUFFER",
- "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE",
- "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",
- "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING",
- "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",
- "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",
- "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE",
- "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",
- "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",
- "FRAMEBUFFER_ATTACHMENT_RED_SIZE",
- "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE",
- "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",
- "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER",
- "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",
- "FRAMEBUFFER_BINDING",
- "FRAMEBUFFER_COMPLETE",
- "FRAMEBUFFER_DEFAULT",
- "FRAMEBUFFER_INCOMPLETE_ATTACHMENT",
- "FRAMEBUFFER_INCOMPLETE_DIMENSIONS",
- "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",
- "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",
- "FRAMEBUFFER_UNSUPPORTED",
- "FRONT",
- "FRONT_AND_BACK",
- "FRONT_FACE",
- "FUNC_ADD",
- "FUNC_REVERSE_SUBTRACT",
- "FUNC_SUBTRACT",
- "FeaturePolicy",
- "FeaturePolicyViolationReportBody",
- "FederatedCredential",
- "Feed",
- "FeedEntry",
- "File",
- "FileError",
- "FileList",
- "FileReader",
- "FileSystem",
- "FileSystemDirectoryEntry",
- "FileSystemDirectoryReader",
- "FileSystemEntry",
- "FileSystemFileEntry",
- "FinalizationRegistry",
- "FindInPage",
- "Float32Array",
- "Float64Array",
- "FocusEvent",
- "FontFace",
- "FontFaceSet",
- "FontFaceSetLoadEvent",
- "FormData",
- "FormDataEvent",
- "FragmentDirective",
- "Function",
- "GENERATE_MIPMAP_HINT",
- "GEQUAL",
- "GREATER",
- "GREEN_BITS",
- "GainNode",
- "Gamepad",
- "GamepadAxisMoveEvent",
- "GamepadButton",
- "GamepadButtonEvent",
- "GamepadEvent",
- "GamepadHapticActuator",
- "GamepadPose",
- "Geolocation",
- "GeolocationCoordinates",
- "GeolocationPosition",
- "GeolocationPositionError",
- "GestureEvent",
- "Global",
- "Gyroscope",
- "HALF_FLOAT",
- "HAVE_CURRENT_DATA",
- "HAVE_ENOUGH_DATA",
- "HAVE_FUTURE_DATA",
- "HAVE_METADATA",
- "HAVE_NOTHING",
- "HEADERS_RECEIVED",
- "HIDDEN",
- "HIERARCHY_REQUEST_ERR",
- "HIGHPASS",
- "HIGHSHELF",
- "HIGH_FLOAT",
- "HIGH_INT",
- "HORIZONTAL",
- "HORIZONTAL_AXIS",
- "HRTF",
- "HTMLAllCollection",
- "HTMLAnchorElement",
- "HTMLAppletElement",
- "HTMLAreaElement",
- "HTMLAudioElement",
- "HTMLBRElement",
- "HTMLBaseElement",
- "HTMLBaseFontElement",
- "HTMLBlockquoteElement",
- "HTMLBodyElement",
- "HTMLButtonElement",
- "HTMLCanvasElement",
- "HTMLCollection",
- "HTMLCommandElement",
- "HTMLContentElement",
- "HTMLDListElement",
- "HTMLDataElement",
- "HTMLDataListElement",
- "HTMLDetailsElement",
- "HTMLDialogElement",
- "HTMLDirectoryElement",
- "HTMLDivElement",
- "HTMLDocument",
- "HTMLElement",
- "HTMLEmbedElement",
- "HTMLFieldSetElement",
- "HTMLFontElement",
- "HTMLFormControlsCollection",
- "HTMLFormElement",
- "HTMLFrameElement",
- "HTMLFrameSetElement",
- "HTMLHRElement",
- "HTMLHeadElement",
- "HTMLHeadingElement",
- "HTMLHtmlElement",
- "HTMLIFrameElement",
- "HTMLImageElement",
- "HTMLInputElement",
- "HTMLIsIndexElement",
- "HTMLKeygenElement",
- "HTMLLIElement",
- "HTMLLabelElement",
- "HTMLLegendElement",
- "HTMLLinkElement",
- "HTMLMapElement",
- "HTMLMarqueeElement",
- "HTMLMediaElement",
- "HTMLMenuElement",
- "HTMLMenuItemElement",
- "HTMLMetaElement",
- "HTMLMeterElement",
- "HTMLModElement",
- "HTMLOListElement",
- "HTMLObjectElement",
- "HTMLOptGroupElement",
- "HTMLOptionElement",
- "HTMLOptionsCollection",
- "HTMLOutputElement",
- "HTMLParagraphElement",
- "HTMLParamElement",
- "HTMLPictureElement",
- "HTMLPreElement",
- "HTMLProgressElement",
- "HTMLPropertiesCollection",
- "HTMLQuoteElement",
- "HTMLScriptElement",
- "HTMLSelectElement",
- "HTMLShadowElement",
- "HTMLSlotElement",
- "HTMLSourceElement",
- "HTMLSpanElement",
- "HTMLStyleElement",
- "HTMLTableCaptionElement",
- "HTMLTableCellElement",
- "HTMLTableColElement",
- "HTMLTableElement",
- "HTMLTableRowElement",
- "HTMLTableSectionElement",
- "HTMLTemplateElement",
- "HTMLTextAreaElement",
- "HTMLTimeElement",
- "HTMLTitleElement",
- "HTMLTrackElement",
- "HTMLUListElement",
- "HTMLUnknownElement",
- "HTMLVideoElement",
- "HashChangeEvent",
- "Headers",
- "History",
- "Hz",
- "ICE_CHECKING",
- "ICE_CLOSED",
- "ICE_COMPLETED",
- "ICE_CONNECTED",
- "ICE_FAILED",
- "ICE_GATHERING",
- "ICE_WAITING",
- "IDBCursor",
- "IDBCursorWithValue",
- "IDBDatabase",
- "IDBDatabaseException",
- "IDBFactory",
- "IDBFileHandle",
- "IDBFileRequest",
- "IDBIndex",
- "IDBKeyRange",
- "IDBMutableFile",
- "IDBObjectStore",
- "IDBOpenDBRequest",
- "IDBRequest",
- "IDBTransaction",
- "IDBVersionChangeEvent",
- "IDLE",
- "IIRFilterNode",
- "IMPLEMENTATION_COLOR_READ_FORMAT",
- "IMPLEMENTATION_COLOR_READ_TYPE",
- "IMPORT_RULE",
- "INCR",
- "INCR_WRAP",
- "INDEX_SIZE_ERR",
- "INT",
- "INTERLEAVED_ATTRIBS",
- "INT_2_10_10_10_REV",
- "INT_SAMPLER_2D",
- "INT_SAMPLER_2D_ARRAY",
- "INT_SAMPLER_3D",
- "INT_SAMPLER_CUBE",
- "INT_VEC2",
- "INT_VEC3",
- "INT_VEC4",
- "INUSE_ATTRIBUTE_ERR",
- "INVALID_ACCESS_ERR",
- "INVALID_CHARACTER_ERR",
- "INVALID_ENUM",
- "INVALID_EXPRESSION_ERR",
- "INVALID_FRAMEBUFFER_OPERATION",
- "INVALID_INDEX",
- "INVALID_MODIFICATION_ERR",
- "INVALID_NODE_TYPE_ERR",
- "INVALID_OPERATION",
- "INVALID_STATE_ERR",
- "INVALID_VALUE",
- "INVERSE_DISTANCE",
- "INVERT",
- "IceCandidate",
- "IdleDeadline",
- "Image",
- "ImageBitmap",
- "ImageBitmapRenderingContext",
- "ImageCapture",
- "ImageData",
- "Infinity",
- "InputDeviceCapabilities",
- "InputDeviceInfo",
- "InputEvent",
- "InputMethodContext",
- "InstallTrigger",
- "InstallTriggerImpl",
- "Instance",
- "Int16Array",
- "Int32Array",
- "Int8Array",
- "Intent",
- "InternalError",
- "IntersectionObserver",
- "IntersectionObserverEntry",
- "Intl",
- "IsSearchProviderInstalled",
- "Iterator",
- "JSON",
- "KEEP",
- "KEYDOWN",
- "KEYFRAMES_RULE",
- "KEYFRAME_RULE",
- "KEYPRESS",
- "KEYUP",
- "KeyEvent",
- "Keyboard",
- "KeyboardEvent",
- "KeyboardLayoutMap",
- "KeyframeEffect",
- "LENGTHADJUST_SPACING",
- "LENGTHADJUST_SPACINGANDGLYPHS",
- "LENGTHADJUST_UNKNOWN",
- "LEQUAL",
- "LESS",
- "LINEAR",
- "LINEAR_DISTANCE",
- "LINEAR_MIPMAP_LINEAR",
- "LINEAR_MIPMAP_NEAREST",
- "LINES",
- "LINE_LOOP",
- "LINE_STRIP",
- "LINE_WIDTH",
- "LINK_STATUS",
- "LIVE",
- "LN10",
- "LN2",
- "LOADED",
- "LOADING",
- "LOG10E",
- "LOG2E",
- "LOWPASS",
- "LOWSHELF",
- "LOW_FLOAT",
- "LOW_INT",
- "LSException",
- "LSParserFilter",
- "LUMINANCE",
- "LUMINANCE_ALPHA",
- "LargestContentfulPaint",
- "LayoutShift",
- "LayoutShiftAttribution",
- "LinearAccelerationSensor",
- "LinkError",
- "ListFormat",
- "LocalMediaStream",
- "Locale",
- "Location",
- "Lock",
- "LockManager",
- "MAX",
- "MAX_3D_TEXTURE_SIZE",
- "MAX_ARRAY_TEXTURE_LAYERS",
- "MAX_CLIENT_WAIT_TIMEOUT_WEBGL",
- "MAX_COLOR_ATTACHMENTS",
- "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",
- "MAX_COMBINED_TEXTURE_IMAGE_UNITS",
- "MAX_COMBINED_UNIFORM_BLOCKS",
- "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",
- "MAX_CUBE_MAP_TEXTURE_SIZE",
- "MAX_DRAW_BUFFERS",
- "MAX_ELEMENTS_INDICES",
- "MAX_ELEMENTS_VERTICES",
- "MAX_ELEMENT_INDEX",
- "MAX_FRAGMENT_INPUT_COMPONENTS",
- "MAX_FRAGMENT_UNIFORM_BLOCKS",
- "MAX_FRAGMENT_UNIFORM_COMPONENTS",
- "MAX_FRAGMENT_UNIFORM_VECTORS",
- "MAX_PROGRAM_TEXEL_OFFSET",
- "MAX_RENDERBUFFER_SIZE",
- "MAX_SAFE_INTEGER",
- "MAX_SAMPLES",
- "MAX_SERVER_WAIT_TIMEOUT",
- "MAX_TEXTURE_IMAGE_UNITS",
- "MAX_TEXTURE_LOD_BIAS",
- "MAX_TEXTURE_MAX_ANISOTROPY_EXT",
- "MAX_TEXTURE_SIZE",
- "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",
- "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",
- "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",
- "MAX_UNIFORM_BLOCK_SIZE",
- "MAX_UNIFORM_BUFFER_BINDINGS",
- "MAX_VALUE",
- "MAX_VARYING_COMPONENTS",
- "MAX_VARYING_VECTORS",
- "MAX_VERTEX_ATTRIBS",
- "MAX_VERTEX_OUTPUT_COMPONENTS",
- "MAX_VERTEX_TEXTURE_IMAGE_UNITS",
- "MAX_VERTEX_UNIFORM_BLOCKS",
- "MAX_VERTEX_UNIFORM_COMPONENTS",
- "MAX_VERTEX_UNIFORM_VECTORS",
- "MAX_VIEWPORT_DIMS",
- "MEDIA_ERR_ABORTED",
- "MEDIA_ERR_DECODE",
- "MEDIA_ERR_ENCRYPTED",
- "MEDIA_ERR_NETWORK",
- "MEDIA_ERR_SRC_NOT_SUPPORTED",
- "MEDIA_KEYERR_CLIENT",
- "MEDIA_KEYERR_DOMAIN",
- "MEDIA_KEYERR_HARDWARECHANGE",
- "MEDIA_KEYERR_OUTPUT",
- "MEDIA_KEYERR_SERVICE",
- "MEDIA_KEYERR_UNKNOWN",
- "MEDIA_RULE",
- "MEDIUM_FLOAT",
- "MEDIUM_INT",
- "META_MASK",
- "MIDIAccess",
- "MIDIConnectionEvent",
- "MIDIInput",
- "MIDIInputMap",
- "MIDIMessageEvent",
- "MIDIOutput",
- "MIDIOutputMap",
- "MIDIPort",
- "MIN",
- "MIN_PROGRAM_TEXEL_OFFSET",
- "MIN_SAFE_INTEGER",
- "MIN_VALUE",
- "MIRRORED_REPEAT",
- "MODE_ASYNCHRONOUS",
- "MODE_SYNCHRONOUS",
- "MODIFICATION",
- "MOUSEDOWN",
- "MOUSEDRAG",
- "MOUSEMOVE",
- "MOUSEOUT",
- "MOUSEOVER",
- "MOUSEUP",
- "MOZ_KEYFRAMES_RULE",
- "MOZ_KEYFRAME_RULE",
- "MOZ_SOURCE_CURSOR",
- "MOZ_SOURCE_ERASER",
- "MOZ_SOURCE_KEYBOARD",
- "MOZ_SOURCE_MOUSE",
- "MOZ_SOURCE_PEN",
- "MOZ_SOURCE_TOUCH",
- "MOZ_SOURCE_UNKNOWN",
- "MSGESTURE_FLAG_BEGIN",
- "MSGESTURE_FLAG_CANCEL",
- "MSGESTURE_FLAG_END",
- "MSGESTURE_FLAG_INERTIA",
- "MSGESTURE_FLAG_NONE",
- "MSPOINTER_TYPE_MOUSE",
- "MSPOINTER_TYPE_PEN",
- "MSPOINTER_TYPE_TOUCH",
- "MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE",
- "MS_ASYNC_CALLBACK_STATUS_CANCEL",
- "MS_ASYNC_CALLBACK_STATUS_CHOOSEANY",
- "MS_ASYNC_CALLBACK_STATUS_ERROR",
- "MS_ASYNC_CALLBACK_STATUS_JOIN",
- "MS_ASYNC_OP_STATUS_CANCELED",
- "MS_ASYNC_OP_STATUS_ERROR",
- "MS_ASYNC_OP_STATUS_SUCCESS",
- "MS_MANIPULATION_STATE_ACTIVE",
- "MS_MANIPULATION_STATE_CANCELLED",
- "MS_MANIPULATION_STATE_COMMITTED",
- "MS_MANIPULATION_STATE_DRAGGING",
- "MS_MANIPULATION_STATE_INERTIA",
- "MS_MANIPULATION_STATE_PRESELECT",
- "MS_MANIPULATION_STATE_SELECTING",
- "MS_MANIPULATION_STATE_STOPPED",
- "MS_MEDIA_ERR_ENCRYPTED",
- "MS_MEDIA_KEYERR_CLIENT",
- "MS_MEDIA_KEYERR_DOMAIN",
- "MS_MEDIA_KEYERR_HARDWARECHANGE",
- "MS_MEDIA_KEYERR_OUTPUT",
- "MS_MEDIA_KEYERR_SERVICE",
- "MS_MEDIA_KEYERR_UNKNOWN",
- "Map",
- "Math",
- "MathMLElement",
- "MediaCapabilities",
- "MediaCapabilitiesInfo",
- "MediaController",
- "MediaDeviceInfo",
- "MediaDevices",
- "MediaElementAudioSourceNode",
- "MediaEncryptedEvent",
- "MediaError",
- "MediaKeyError",
- "MediaKeyEvent",
- "MediaKeyMessageEvent",
- "MediaKeyNeededEvent",
- "MediaKeySession",
- "MediaKeyStatusMap",
- "MediaKeySystemAccess",
- "MediaKeys",
- "MediaList",
- "MediaMetadata",
- "MediaQueryList",
- "MediaQueryListEvent",
- "MediaRecorder",
- "MediaRecorderErrorEvent",
- "MediaSession",
- "MediaSettingsRange",
- "MediaSource",
- "MediaStream",
- "MediaStreamAudioDestinationNode",
- "MediaStreamAudioSourceNode",
- "MediaStreamEvent",
- "MediaStreamTrack",
- "MediaStreamTrackAudioSourceNode",
- "MediaStreamTrackEvent",
- "Memory",
- "MessageChannel",
- "MessageEvent",
- "MessagePort",
- "Methods",
- "MimeType",
- "MimeTypeArray",
- "Module",
- "MouseEvent",
- "MouseScrollEvent",
- "MozAnimation",
- "MozAnimationDelay",
- "MozAnimationDirection",
- "MozAnimationDuration",
- "MozAnimationFillMode",
- "MozAnimationIterationCount",
- "MozAnimationName",
- "MozAnimationPlayState",
- "MozAnimationTimingFunction",
- "MozAppearance",
- "MozBackfaceVisibility",
- "MozBinding",
- "MozBorderBottomColors",
- "MozBorderEnd",
- "MozBorderEndColor",
- "MozBorderEndStyle",
- "MozBorderEndWidth",
- "MozBorderImage",
- "MozBorderLeftColors",
- "MozBorderRightColors",
- "MozBorderStart",
- "MozBorderStartColor",
- "MozBorderStartStyle",
- "MozBorderStartWidth",
- "MozBorderTopColors",
- "MozBoxAlign",
- "MozBoxDirection",
- "MozBoxFlex",
- "MozBoxOrdinalGroup",
- "MozBoxOrient",
- "MozBoxPack",
- "MozBoxSizing",
- "MozCSSKeyframeRule",
- "MozCSSKeyframesRule",
- "MozColumnCount",
- "MozColumnFill",
- "MozColumnGap",
- "MozColumnRule",
- "MozColumnRuleColor",
- "MozColumnRuleStyle",
- "MozColumnRuleWidth",
- "MozColumnWidth",
- "MozColumns",
- "MozContactChangeEvent",
- "MozFloatEdge",
- "MozFontFeatureSettings",
- "MozFontLanguageOverride",
- "MozForceBrokenImageIcon",
- "MozHyphens",
- "MozImageRegion",
- "MozMarginEnd",
- "MozMarginStart",
- "MozMmsEvent",
- "MozMmsMessage",
- "MozMobileMessageThread",
- "MozOSXFontSmoothing",
- "MozOrient",
- "MozOsxFontSmoothing",
- "MozOutlineRadius",
- "MozOutlineRadiusBottomleft",
- "MozOutlineRadiusBottomright",
- "MozOutlineRadiusTopleft",
- "MozOutlineRadiusTopright",
- "MozPaddingEnd",
- "MozPaddingStart",
- "MozPerspective",
- "MozPerspectiveOrigin",
- "MozPowerManager",
- "MozSettingsEvent",
- "MozSmsEvent",
- "MozSmsMessage",
- "MozStackSizing",
- "MozTabSize",
- "MozTextAlignLast",
- "MozTextDecorationColor",
- "MozTextDecorationLine",
- "MozTextDecorationStyle",
- "MozTextSizeAdjust",
- "MozTransform",
- "MozTransformOrigin",
- "MozTransformStyle",
- "MozTransition",
- "MozTransitionDelay",
- "MozTransitionDuration",
- "MozTransitionProperty",
- "MozTransitionTimingFunction",
- "MozUserFocus",
- "MozUserInput",
- "MozUserModify",
- "MozUserSelect",
- "MozWindowDragging",
- "MozWindowShadow",
- "MutationEvent",
- "MutationObserver",
- "MutationRecord",
- "NAMESPACE_ERR",
- "NAMESPACE_RULE",
- "NEAREST",
- "NEAREST_MIPMAP_LINEAR",
- "NEAREST_MIPMAP_NEAREST",
- "NEGATIVE_INFINITY",
- "NETWORK_EMPTY",
- "NETWORK_ERR",
- "NETWORK_IDLE",
- "NETWORK_LOADED",
- "NETWORK_LOADING",
- "NETWORK_NO_SOURCE",
- "NEVER",
- "NEW",
- "NEXT",
- "NEXT_NO_DUPLICATE",
- "NICEST",
- "NODE_AFTER",
- "NODE_BEFORE",
- "NODE_BEFORE_AND_AFTER",
- "NODE_INSIDE",
- "NONE",
- "NON_TRANSIENT_ERR",
- "NOTATION_NODE",
- "NOTCH",
- "NOTEQUAL",
- "NOT_ALLOWED_ERR",
- "NOT_FOUND_ERR",
- "NOT_READABLE_ERR",
- "NOT_SUPPORTED_ERR",
- "NO_DATA_ALLOWED_ERR",
- "NO_ERR",
- "NO_ERROR",
- "NO_MODIFICATION_ALLOWED_ERR",
- "NUMBER_TYPE",
- "NUM_COMPRESSED_TEXTURE_FORMATS",
- "NaN",
- "NamedNodeMap",
- "NavigationPreloadManager",
- "Navigator",
- "NearbyLinks",
- "NetworkInformation",
- "Node",
- "NodeFilter",
- "NodeIterator",
- "NodeList",
- "Notation",
- "Notification",
- "NotifyPaintEvent",
- "Number",
- "NumberFormat",
- "OBJECT_TYPE",
- "OBSOLETE",
- "OK",
- "ONE",
- "ONE_MINUS_CONSTANT_ALPHA",
- "ONE_MINUS_CONSTANT_COLOR",
- "ONE_MINUS_DST_ALPHA",
- "ONE_MINUS_DST_COLOR",
- "ONE_MINUS_SRC_ALPHA",
- "ONE_MINUS_SRC_COLOR",
- "OPEN",
- "OPENED",
- "OPENING",
- "ORDERED_NODE_ITERATOR_TYPE",
- "ORDERED_NODE_SNAPSHOT_TYPE",
- "OTHER_ERROR",
- "OUT_OF_MEMORY",
- "Object",
- "OfflineAudioCompletionEvent",
- "OfflineAudioContext",
- "OfflineResourceList",
- "OffscreenCanvas",
- "OffscreenCanvasRenderingContext2D",
- "Option",
- "OrientationSensor",
- "OscillatorNode",
- "OverconstrainedError",
- "OverflowEvent",
- "PACK_ALIGNMENT",
- "PACK_ROW_LENGTH",
- "PACK_SKIP_PIXELS",
- "PACK_SKIP_ROWS",
- "PAGE_RULE",
- "PARSE_ERR",
- "PATHSEG_ARC_ABS",
- "PATHSEG_ARC_REL",
- "PATHSEG_CLOSEPATH",
- "PATHSEG_CURVETO_CUBIC_ABS",
- "PATHSEG_CURVETO_CUBIC_REL",
- "PATHSEG_CURVETO_CUBIC_SMOOTH_ABS",
- "PATHSEG_CURVETO_CUBIC_SMOOTH_REL",
- "PATHSEG_CURVETO_QUADRATIC_ABS",
- "PATHSEG_CURVETO_QUADRATIC_REL",
- "PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS",
- "PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL",
- "PATHSEG_LINETO_ABS",
- "PATHSEG_LINETO_HORIZONTAL_ABS",
- "PATHSEG_LINETO_HORIZONTAL_REL",
- "PATHSEG_LINETO_REL",
- "PATHSEG_LINETO_VERTICAL_ABS",
- "PATHSEG_LINETO_VERTICAL_REL",
- "PATHSEG_MOVETO_ABS",
- "PATHSEG_MOVETO_REL",
- "PATHSEG_UNKNOWN",
- "PATH_EXISTS_ERR",
- "PEAKING",
- "PERMISSION_DENIED",
- "PERSISTENT",
- "PI",
- "PIXEL_PACK_BUFFER",
- "PIXEL_PACK_BUFFER_BINDING",
- "PIXEL_UNPACK_BUFFER",
- "PIXEL_UNPACK_BUFFER_BINDING",
- "PLAYING_STATE",
- "POINTS",
- "POLYGON_OFFSET_FACTOR",
- "POLYGON_OFFSET_FILL",
- "POLYGON_OFFSET_UNITS",
- "POSITION_UNAVAILABLE",
- "POSITIVE_INFINITY",
- "PREV",
- "PREV_NO_DUPLICATE",
- "PROCESSING_INSTRUCTION_NODE",
- "PageChangeEvent",
- "PageTransitionEvent",
- "PaintRequest",
- "PaintRequestList",
- "PannerNode",
- "PasswordCredential",
- "Path2D",
- "PaymentAddress",
- "PaymentInstruments",
- "PaymentManager",
- "PaymentMethodChangeEvent",
- "PaymentRequest",
- "PaymentRequestUpdateEvent",
- "PaymentResponse",
- "Performance",
- "PerformanceElementTiming",
- "PerformanceEntry",
- "PerformanceEventTiming",
- "PerformanceLongTaskTiming",
- "PerformanceMark",
- "PerformanceMeasure",
- "PerformanceNavigation",
- "PerformanceNavigationTiming",
- "PerformanceObserver",
- "PerformanceObserverEntryList",
- "PerformancePaintTiming",
- "PerformanceResourceTiming",
- "PerformanceServerTiming",
- "PerformanceTiming",
- "PeriodicSyncManager",
- "PeriodicWave",
- "PermissionStatus",
- "Permissions",
- "PhotoCapabilities",
- "PictureInPictureWindow",
- "Plugin",
- "PluginArray",
- "PluralRules",
- "PointerEvent",
- "PopStateEvent",
- "PopupBlockedEvent",
- "Presentation",
- "PresentationAvailability",
- "PresentationConnection",
- "PresentationConnectionAvailableEvent",
- "PresentationConnectionCloseEvent",
- "PresentationConnectionList",
- "PresentationReceiver",
- "PresentationRequest",
- "ProcessingInstruction",
- "ProgressEvent",
- "Promise",
- "PromiseRejectionEvent",
- "PropertyNodeList",
- "Proxy",
- "PublicKeyCredential",
- "PushManager",
- "PushSubscription",
- "PushSubscriptionOptions",
- "Q",
- "QUERY_RESULT",
- "QUERY_RESULT_AVAILABLE",
- "QUOTA_ERR",
- "QUOTA_EXCEEDED_ERR",
- "QueryInterface",
- "R11F_G11F_B10F",
- "R16F",
- "R16I",
- "R16UI",
- "R32F",
- "R32I",
- "R32UI",
- "R8",
- "R8I",
- "R8UI",
- "R8_SNORM",
- "RASTERIZER_DISCARD",
- "READ_BUFFER",
- "READ_FRAMEBUFFER",
- "READ_FRAMEBUFFER_BINDING",
- "READ_ONLY",
- "READ_ONLY_ERR",
- "READ_WRITE",
- "RED",
- "RED_BITS",
- "RED_INTEGER",
- "REMOVAL",
- "RENDERBUFFER",
- "RENDERBUFFER_ALPHA_SIZE",
- "RENDERBUFFER_BINDING",
- "RENDERBUFFER_BLUE_SIZE",
- "RENDERBUFFER_DEPTH_SIZE",
- "RENDERBUFFER_GREEN_SIZE",
- "RENDERBUFFER_HEIGHT",
- "RENDERBUFFER_INTERNAL_FORMAT",
- "RENDERBUFFER_RED_SIZE",
- "RENDERBUFFER_SAMPLES",
- "RENDERBUFFER_STENCIL_SIZE",
- "RENDERBUFFER_WIDTH",
- "RENDERER",
- "RENDERING_INTENT_ABSOLUTE_COLORIMETRIC",
- "RENDERING_INTENT_AUTO",
- "RENDERING_INTENT_PERCEPTUAL",
- "RENDERING_INTENT_RELATIVE_COLORIMETRIC",
- "RENDERING_INTENT_SATURATION",
- "RENDERING_INTENT_UNKNOWN",
- "REPEAT",
- "REPLACE",
- "RG",
- "RG16F",
- "RG16I",
- "RG16UI",
- "RG32F",
- "RG32I",
- "RG32UI",
- "RG8",
- "RG8I",
- "RG8UI",
- "RG8_SNORM",
- "RGB",
- "RGB10_A2",
- "RGB10_A2UI",
- "RGB16F",
- "RGB16I",
- "RGB16UI",
- "RGB32F",
- "RGB32I",
- "RGB32UI",
- "RGB565",
- "RGB5_A1",
- "RGB8",
- "RGB8I",
- "RGB8UI",
- "RGB8_SNORM",
- "RGB9_E5",
- "RGBA",
- "RGBA16F",
- "RGBA16I",
- "RGBA16UI",
- "RGBA32F",
- "RGBA32I",
- "RGBA32UI",
- "RGBA4",
- "RGBA8",
- "RGBA8I",
- "RGBA8UI",
- "RGBA8_SNORM",
- "RGBA_INTEGER",
- "RGBColor",
- "RGB_INTEGER",
- "RG_INTEGER",
- "ROTATION_CLOCKWISE",
- "ROTATION_COUNTERCLOCKWISE",
- "RTCCertificate",
- "RTCDTMFSender",
- "RTCDTMFToneChangeEvent",
- "RTCDataChannel",
- "RTCDataChannelEvent",
- "RTCDtlsTransport",
- "RTCError",
- "RTCErrorEvent",
- "RTCIceCandidate",
- "RTCIceTransport",
- "RTCPeerConnection",
- "RTCPeerConnectionIceErrorEvent",
- "RTCPeerConnectionIceEvent",
- "RTCRtpReceiver",
- "RTCRtpSender",
- "RTCRtpTransceiver",
- "RTCSctpTransport",
- "RTCSessionDescription",
- "RTCStatsReport",
- "RTCTrackEvent",
- "RadioNodeList",
- "Range",
- "RangeError",
- "RangeException",
- "ReadableStream",
- "ReadableStreamDefaultReader",
- "RecordErrorEvent",
- "Rect",
- "ReferenceError",
- "Reflect",
- "RegExp",
- "RelativeOrientationSensor",
- "RelativeTimeFormat",
- "RemotePlayback",
- "Report",
- "ReportBody",
- "ReportingObserver",
- "Request",
- "ResizeObserver",
- "ResizeObserverEntry",
- "ResizeObserverSize",
- "Response",
- "RuntimeError",
- "SAMPLER_2D",
- "SAMPLER_2D_ARRAY",
- "SAMPLER_2D_ARRAY_SHADOW",
- "SAMPLER_2D_SHADOW",
- "SAMPLER_3D",
- "SAMPLER_BINDING",
- "SAMPLER_CUBE",
- "SAMPLER_CUBE_SHADOW",
- "SAMPLES",
- "SAMPLE_ALPHA_TO_COVERAGE",
- "SAMPLE_BUFFERS",
- "SAMPLE_COVERAGE",
- "SAMPLE_COVERAGE_INVERT",
- "SAMPLE_COVERAGE_VALUE",
- "SAWTOOTH",
- "SCHEDULED_STATE",
- "SCISSOR_BOX",
- "SCISSOR_TEST",
- "SCROLL_PAGE_DOWN",
- "SCROLL_PAGE_UP",
- "SDP_ANSWER",
- "SDP_OFFER",
- "SDP_PRANSWER",
- "SECURITY_ERR",
- "SELECT",
- "SEPARATE_ATTRIBS",
- "SERIALIZE_ERR",
- "SEVERITY_ERROR",
- "SEVERITY_FATAL_ERROR",
- "SEVERITY_WARNING",
- "SHADER_COMPILER",
- "SHADER_TYPE",
- "SHADING_LANGUAGE_VERSION",
- "SHIFT_MASK",
- "SHORT",
- "SHOWING",
- "SHOW_ALL",
- "SHOW_ATTRIBUTE",
- "SHOW_CDATA_SECTION",
- "SHOW_COMMENT",
- "SHOW_DOCUMENT",
- "SHOW_DOCUMENT_FRAGMENT",
- "SHOW_DOCUMENT_TYPE",
- "SHOW_ELEMENT",
- "SHOW_ENTITY",
- "SHOW_ENTITY_REFERENCE",
- "SHOW_NOTATION",
- "SHOW_PROCESSING_INSTRUCTION",
- "SHOW_TEXT",
- "SIGNALED",
- "SIGNED_NORMALIZED",
- "SINE",
- "SOUNDFIELD",
- "SQLException",
- "SQRT1_2",
- "SQRT2",
- "SQUARE",
- "SRC_ALPHA",
- "SRC_ALPHA_SATURATE",
- "SRC_COLOR",
- "SRGB",
- "SRGB8",
- "SRGB8_ALPHA8",
- "START_TO_END",
- "START_TO_START",
- "STATIC_COPY",
- "STATIC_DRAW",
- "STATIC_READ",
- "STENCIL",
- "STENCIL_ATTACHMENT",
- "STENCIL_BACK_FAIL",
- "STENCIL_BACK_FUNC",
- "STENCIL_BACK_PASS_DEPTH_FAIL",
- "STENCIL_BACK_PASS_DEPTH_PASS",
- "STENCIL_BACK_REF",
- "STENCIL_BACK_VALUE_MASK",
- "STENCIL_BACK_WRITEMASK",
- "STENCIL_BITS",
- "STENCIL_BUFFER_BIT",
- "STENCIL_CLEAR_VALUE",
- "STENCIL_FAIL",
- "STENCIL_FUNC",
- "STENCIL_INDEX",
- "STENCIL_INDEX8",
- "STENCIL_PASS_DEPTH_FAIL",
- "STENCIL_PASS_DEPTH_PASS",
- "STENCIL_REF",
- "STENCIL_TEST",
- "STENCIL_VALUE_MASK",
- "STENCIL_WRITEMASK",
- "STREAM_COPY",
- "STREAM_DRAW",
- "STREAM_READ",
- "STRING_TYPE",
- "STYLE_RULE",
- "SUBPIXEL_BITS",
- "SUPPORTS_RULE",
- "SVGAElement",
- "SVGAltGlyphDefElement",
- "SVGAltGlyphElement",
- "SVGAltGlyphItemElement",
- "SVGAngle",
- "SVGAnimateColorElement",
- "SVGAnimateElement",
- "SVGAnimateMotionElement",
- "SVGAnimateTransformElement",
- "SVGAnimatedAngle",
- "SVGAnimatedBoolean",
- "SVGAnimatedEnumeration",
- "SVGAnimatedInteger",
- "SVGAnimatedLength",
- "SVGAnimatedLengthList",
- "SVGAnimatedNumber",
- "SVGAnimatedNumberList",
- "SVGAnimatedPreserveAspectRatio",
- "SVGAnimatedRect",
- "SVGAnimatedString",
- "SVGAnimatedTransformList",
- "SVGAnimationElement",
- "SVGCircleElement",
- "SVGClipPathElement",
- "SVGColor",
- "SVGComponentTransferFunctionElement",
- "SVGCursorElement",
- "SVGDefsElement",
- "SVGDescElement",
- "SVGDiscardElement",
- "SVGDocument",
- "SVGElement",
- "SVGElementInstance",
- "SVGElementInstanceList",
- "SVGEllipseElement",
- "SVGException",
- "SVGFEBlendElement",
- "SVGFEColorMatrixElement",
- "SVGFEComponentTransferElement",
- "SVGFECompositeElement",
- "SVGFEConvolveMatrixElement",
- "SVGFEDiffuseLightingElement",
- "SVGFEDisplacementMapElement",
- "SVGFEDistantLightElement",
- "SVGFEDropShadowElement",
- "SVGFEFloodElement",
- "SVGFEFuncAElement",
- "SVGFEFuncBElement",
- "SVGFEFuncGElement",
- "SVGFEFuncRElement",
- "SVGFEGaussianBlurElement",
- "SVGFEImageElement",
- "SVGFEMergeElement",
- "SVGFEMergeNodeElement",
- "SVGFEMorphologyElement",
- "SVGFEOffsetElement",
- "SVGFEPointLightElement",
- "SVGFESpecularLightingElement",
- "SVGFESpotLightElement",
- "SVGFETileElement",
- "SVGFETurbulenceElement",
- "SVGFilterElement",
- "SVGFontElement",
- "SVGFontFaceElement",
- "SVGFontFaceFormatElement",
- "SVGFontFaceNameElement",
- "SVGFontFaceSrcElement",
- "SVGFontFaceUriElement",
- "SVGForeignObjectElement",
- "SVGGElement",
- "SVGGeometryElement",
- "SVGGlyphElement",
- "SVGGlyphRefElement",
- "SVGGradientElement",
- "SVGGraphicsElement",
- "SVGHKernElement",
- "SVGImageElement",
- "SVGLength",
- "SVGLengthList",
- "SVGLineElement",
- "SVGLinearGradientElement",
- "SVGMPathElement",
- "SVGMarkerElement",
- "SVGMaskElement",
- "SVGMatrix",
- "SVGMetadataElement",
- "SVGMissingGlyphElement",
- "SVGNumber",
- "SVGNumberList",
- "SVGPaint",
- "SVGPathElement",
- "SVGPathSeg",
- "SVGPathSegArcAbs",
- "SVGPathSegArcRel",
- "SVGPathSegClosePath",
- "SVGPathSegCurvetoCubicAbs",
- "SVGPathSegCurvetoCubicRel",
- "SVGPathSegCurvetoCubicSmoothAbs",
- "SVGPathSegCurvetoCubicSmoothRel",
- "SVGPathSegCurvetoQuadraticAbs",
- "SVGPathSegCurvetoQuadraticRel",
- "SVGPathSegCurvetoQuadraticSmoothAbs",
- "SVGPathSegCurvetoQuadraticSmoothRel",
- "SVGPathSegLinetoAbs",
- "SVGPathSegLinetoHorizontalAbs",
- "SVGPathSegLinetoHorizontalRel",
- "SVGPathSegLinetoRel",
- "SVGPathSegLinetoVerticalAbs",
- "SVGPathSegLinetoVerticalRel",
- "SVGPathSegList",
- "SVGPathSegMovetoAbs",
- "SVGPathSegMovetoRel",
- "SVGPatternElement",
- "SVGPoint",
- "SVGPointList",
- "SVGPolygonElement",
- "SVGPolylineElement",
- "SVGPreserveAspectRatio",
- "SVGRadialGradientElement",
- "SVGRect",
- "SVGRectElement",
- "SVGRenderingIntent",
- "SVGSVGElement",
- "SVGScriptElement",
- "SVGSetElement",
- "SVGStopElement",
- "SVGStringList",
- "SVGStyleElement",
- "SVGSwitchElement",
- "SVGSymbolElement",
- "SVGTRefElement",
- "SVGTSpanElement",
- "SVGTextContentElement",
- "SVGTextElement",
- "SVGTextPathElement",
- "SVGTextPositioningElement",
- "SVGTitleElement",
- "SVGTransform",
- "SVGTransformList",
- "SVGUnitTypes",
- "SVGUseElement",
- "SVGVKernElement",
- "SVGViewElement",
- "SVGViewSpec",
- "SVGZoomAndPan",
- "SVGZoomEvent",
- "SVG_ANGLETYPE_DEG",
- "SVG_ANGLETYPE_GRAD",
- "SVG_ANGLETYPE_RAD",
- "SVG_ANGLETYPE_UNKNOWN",
- "SVG_ANGLETYPE_UNSPECIFIED",
- "SVG_CHANNEL_A",
- "SVG_CHANNEL_B",
- "SVG_CHANNEL_G",
- "SVG_CHANNEL_R",
- "SVG_CHANNEL_UNKNOWN",
- "SVG_COLORTYPE_CURRENTCOLOR",
- "SVG_COLORTYPE_RGBCOLOR",
- "SVG_COLORTYPE_RGBCOLOR_ICCCOLOR",
- "SVG_COLORTYPE_UNKNOWN",
- "SVG_EDGEMODE_DUPLICATE",
- "SVG_EDGEMODE_NONE",
- "SVG_EDGEMODE_UNKNOWN",
- "SVG_EDGEMODE_WRAP",
- "SVG_FEBLEND_MODE_COLOR",
- "SVG_FEBLEND_MODE_COLOR_BURN",
- "SVG_FEBLEND_MODE_COLOR_DODGE",
- "SVG_FEBLEND_MODE_DARKEN",
- "SVG_FEBLEND_MODE_DIFFERENCE",
- "SVG_FEBLEND_MODE_EXCLUSION",
- "SVG_FEBLEND_MODE_HARD_LIGHT",
- "SVG_FEBLEND_MODE_HUE",
- "SVG_FEBLEND_MODE_LIGHTEN",
- "SVG_FEBLEND_MODE_LUMINOSITY",
- "SVG_FEBLEND_MODE_MULTIPLY",
- "SVG_FEBLEND_MODE_NORMAL",
- "SVG_FEBLEND_MODE_OVERLAY",
- "SVG_FEBLEND_MODE_SATURATION",
- "SVG_FEBLEND_MODE_SCREEN",
- "SVG_FEBLEND_MODE_SOFT_LIGHT",
- "SVG_FEBLEND_MODE_UNKNOWN",
- "SVG_FECOLORMATRIX_TYPE_HUEROTATE",
- "SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA",
- "SVG_FECOLORMATRIX_TYPE_MATRIX",
- "SVG_FECOLORMATRIX_TYPE_SATURATE",
- "SVG_FECOLORMATRIX_TYPE_UNKNOWN",
- "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE",
- "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA",
- "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY",
- "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR",
- "SVG_FECOMPONENTTRANSFER_TYPE_TABLE",
- "SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN",
- "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC",
- "SVG_FECOMPOSITE_OPERATOR_ATOP",
- "SVG_FECOMPOSITE_OPERATOR_IN",
- "SVG_FECOMPOSITE_OPERATOR_OUT",
- "SVG_FECOMPOSITE_OPERATOR_OVER",
- "SVG_FECOMPOSITE_OPERATOR_UNKNOWN",
- "SVG_FECOMPOSITE_OPERATOR_XOR",
- "SVG_INVALID_VALUE_ERR",
- "SVG_LENGTHTYPE_CM",
- "SVG_LENGTHTYPE_EMS",
- "SVG_LENGTHTYPE_EXS",
- "SVG_LENGTHTYPE_IN",
- "SVG_LENGTHTYPE_MM",
- "SVG_LENGTHTYPE_NUMBER",
- "SVG_LENGTHTYPE_PC",
- "SVG_LENGTHTYPE_PERCENTAGE",
- "SVG_LENGTHTYPE_PT",
- "SVG_LENGTHTYPE_PX",
- "SVG_LENGTHTYPE_UNKNOWN",
- "SVG_MARKERUNITS_STROKEWIDTH",
- "SVG_MARKERUNITS_UNKNOWN",
- "SVG_MARKERUNITS_USERSPACEONUSE",
- "SVG_MARKER_ORIENT_ANGLE",
- "SVG_MARKER_ORIENT_AUTO",
- "SVG_MARKER_ORIENT_UNKNOWN",
- "SVG_MASKTYPE_ALPHA",
- "SVG_MASKTYPE_LUMINANCE",
- "SVG_MATRIX_NOT_INVERTABLE",
- "SVG_MEETORSLICE_MEET",
- "SVG_MEETORSLICE_SLICE",
- "SVG_MEETORSLICE_UNKNOWN",
- "SVG_MORPHOLOGY_OPERATOR_DILATE",
- "SVG_MORPHOLOGY_OPERATOR_ERODE",
- "SVG_MORPHOLOGY_OPERATOR_UNKNOWN",
- "SVG_PAINTTYPE_CURRENTCOLOR",
- "SVG_PAINTTYPE_NONE",
- "SVG_PAINTTYPE_RGBCOLOR",
- "SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR",
- "SVG_PAINTTYPE_UNKNOWN",
- "SVG_PAINTTYPE_URI",
- "SVG_PAINTTYPE_URI_CURRENTCOLOR",
- "SVG_PAINTTYPE_URI_NONE",
- "SVG_PAINTTYPE_URI_RGBCOLOR",
- "SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR",
- "SVG_PRESERVEASPECTRATIO_NONE",
- "SVG_PRESERVEASPECTRATIO_UNKNOWN",
- "SVG_PRESERVEASPECTRATIO_XMAXYMAX",
- "SVG_PRESERVEASPECTRATIO_XMAXYMID",
- "SVG_PRESERVEASPECTRATIO_XMAXYMIN",
- "SVG_PRESERVEASPECTRATIO_XMIDYMAX",
- "SVG_PRESERVEASPECTRATIO_XMIDYMID",
- "SVG_PRESERVEASPECTRATIO_XMIDYMIN",
- "SVG_PRESERVEASPECTRATIO_XMINYMAX",
- "SVG_PRESERVEASPECTRATIO_XMINYMID",
- "SVG_PRESERVEASPECTRATIO_XMINYMIN",
- "SVG_SPREADMETHOD_PAD",
- "SVG_SPREADMETHOD_REFLECT",
- "SVG_SPREADMETHOD_REPEAT",
- "SVG_SPREADMETHOD_UNKNOWN",
- "SVG_STITCHTYPE_NOSTITCH",
- "SVG_STITCHTYPE_STITCH",
- "SVG_STITCHTYPE_UNKNOWN",
- "SVG_TRANSFORM_MATRIX",
- "SVG_TRANSFORM_ROTATE",
- "SVG_TRANSFORM_SCALE",
- "SVG_TRANSFORM_SKEWX",
- "SVG_TRANSFORM_SKEWY",
- "SVG_TRANSFORM_TRANSLATE",
- "SVG_TRANSFORM_UNKNOWN",
- "SVG_TURBULENCE_TYPE_FRACTALNOISE",
- "SVG_TURBULENCE_TYPE_TURBULENCE",
- "SVG_TURBULENCE_TYPE_UNKNOWN",
- "SVG_UNIT_TYPE_OBJECTBOUNDINGBOX",
- "SVG_UNIT_TYPE_UNKNOWN",
- "SVG_UNIT_TYPE_USERSPACEONUSE",
- "SVG_WRONG_TYPE_ERR",
- "SVG_ZOOMANDPAN_DISABLE",
- "SVG_ZOOMANDPAN_MAGNIFY",
- "SVG_ZOOMANDPAN_UNKNOWN",
- "SYNC_CONDITION",
- "SYNC_FENCE",
- "SYNC_FLAGS",
- "SYNC_FLUSH_COMMANDS_BIT",
- "SYNC_GPU_COMMANDS_COMPLETE",
- "SYNC_STATUS",
- "SYNTAX_ERR",
- "SavedPages",
- "Screen",
- "ScreenOrientation",
- "Script",
- "ScriptProcessorNode",
- "ScrollAreaEvent",
- "SecurityPolicyViolationEvent",
- "Selection",
- "Sensor",
- "SensorErrorEvent",
- "ServiceWorker",
- "ServiceWorkerContainer",
- "ServiceWorkerRegistration",
- "SessionDescription",
- "Set",
- "ShadowRoot",
- "SharedArrayBuffer",
- "SharedWorker",
- "SimpleGestureEvent",
- "SourceBuffer",
- "SourceBufferList",
- "SpeechSynthesis",
- "SpeechSynthesisErrorEvent",
- "SpeechSynthesisEvent",
- "SpeechSynthesisUtterance",
- "SpeechSynthesisVoice",
- "StaticRange",
- "StereoPannerNode",
- "StopIteration",
- "Storage",
- "StorageEvent",
- "StorageManager",
- "String",
- "StructType",
- "StylePropertyMap",
- "StylePropertyMapReadOnly",
- "StyleSheet",
- "StyleSheetList",
- "SubmitEvent",
- "SubtleCrypto",
- "Symbol",
- "SyncManager",
- "SyntaxError",
- "TEMPORARY",
- "TEXTPATH_METHODTYPE_ALIGN",
- "TEXTPATH_METHODTYPE_STRETCH",
- "TEXTPATH_METHODTYPE_UNKNOWN",
- "TEXTPATH_SPACINGTYPE_AUTO",
- "TEXTPATH_SPACINGTYPE_EXACT",
- "TEXTPATH_SPACINGTYPE_UNKNOWN",
- "TEXTURE",
- "TEXTURE0",
- "TEXTURE1",
- "TEXTURE10",
- "TEXTURE11",
- "TEXTURE12",
- "TEXTURE13",
- "TEXTURE14",
- "TEXTURE15",
- "TEXTURE16",
- "TEXTURE17",
- "TEXTURE18",
- "TEXTURE19",
- "TEXTURE2",
- "TEXTURE20",
- "TEXTURE21",
- "TEXTURE22",
- "TEXTURE23",
- "TEXTURE24",
- "TEXTURE25",
- "TEXTURE26",
- "TEXTURE27",
- "TEXTURE28",
- "TEXTURE29",
- "TEXTURE3",
- "TEXTURE30",
- "TEXTURE31",
- "TEXTURE4",
- "TEXTURE5",
- "TEXTURE6",
- "TEXTURE7",
- "TEXTURE8",
- "TEXTURE9",
- "TEXTURE_2D",
- "TEXTURE_2D_ARRAY",
- "TEXTURE_3D",
- "TEXTURE_BASE_LEVEL",
- "TEXTURE_BINDING_2D",
- "TEXTURE_BINDING_2D_ARRAY",
- "TEXTURE_BINDING_3D",
- "TEXTURE_BINDING_CUBE_MAP",
- "TEXTURE_COMPARE_FUNC",
- "TEXTURE_COMPARE_MODE",
- "TEXTURE_CUBE_MAP",
- "TEXTURE_CUBE_MAP_NEGATIVE_X",
- "TEXTURE_CUBE_MAP_NEGATIVE_Y",
- "TEXTURE_CUBE_MAP_NEGATIVE_Z",
- "TEXTURE_CUBE_MAP_POSITIVE_X",
- "TEXTURE_CUBE_MAP_POSITIVE_Y",
- "TEXTURE_CUBE_MAP_POSITIVE_Z",
- "TEXTURE_IMMUTABLE_FORMAT",
- "TEXTURE_IMMUTABLE_LEVELS",
- "TEXTURE_MAG_FILTER",
- "TEXTURE_MAX_ANISOTROPY_EXT",
- "TEXTURE_MAX_LEVEL",
- "TEXTURE_MAX_LOD",
- "TEXTURE_MIN_FILTER",
- "TEXTURE_MIN_LOD",
- "TEXTURE_WRAP_R",
- "TEXTURE_WRAP_S",
- "TEXTURE_WRAP_T",
- "TEXT_NODE",
- "TIMEOUT",
- "TIMEOUT_ERR",
- "TIMEOUT_EXPIRED",
- "TIMEOUT_IGNORED",
- "TOO_LARGE_ERR",
- "TRANSACTION_INACTIVE_ERR",
- "TRANSFORM_FEEDBACK",
- "TRANSFORM_FEEDBACK_ACTIVE",
- "TRANSFORM_FEEDBACK_BINDING",
- "TRANSFORM_FEEDBACK_BUFFER",
- "TRANSFORM_FEEDBACK_BUFFER_BINDING",
- "TRANSFORM_FEEDBACK_BUFFER_MODE",
- "TRANSFORM_FEEDBACK_BUFFER_SIZE",
- "TRANSFORM_FEEDBACK_BUFFER_START",
- "TRANSFORM_FEEDBACK_PAUSED",
- "TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",
- "TRANSFORM_FEEDBACK_VARYINGS",
- "TRIANGLE",
- "TRIANGLES",
- "TRIANGLE_FAN",
- "TRIANGLE_STRIP",
- "TYPE_BACK_FORWARD",
- "TYPE_ERR",
- "TYPE_MISMATCH_ERR",
- "TYPE_NAVIGATE",
- "TYPE_RELOAD",
- "TYPE_RESERVED",
- "Table",
- "TaskAttributionTiming",
- "Text",
- "TextDecoder",
- "TextDecoderStream",
- "TextEncoder",
- "TextEncoderStream",
- "TextEvent",
- "TextMetrics",
- "TextTrack",
- "TextTrackCue",
- "TextTrackCueList",
- "TextTrackList",
- "TimeEvent",
- "TimeRanges",
- "Touch",
- "TouchEvent",
- "TouchList",
- "TrackEvent",
- "TransformStream",
- "TransitionEvent",
- "TreeWalker",
- "TrustedHTML",
- "TrustedScript",
- "TrustedScriptURL",
- "TrustedTypePolicy",
- "TrustedTypePolicyFactory",
- "TypeError",
- "TypedObject",
- "U2F",
- "UIEvent",
- "UNCACHED",
- "UNIFORM_ARRAY_STRIDE",
- "UNIFORM_BLOCK_ACTIVE_UNIFORMS",
- "UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES",
- "UNIFORM_BLOCK_BINDING",
- "UNIFORM_BLOCK_DATA_SIZE",
- "UNIFORM_BLOCK_INDEX",
- "UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER",
- "UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER",
- "UNIFORM_BUFFER",
- "UNIFORM_BUFFER_BINDING",
- "UNIFORM_BUFFER_OFFSET_ALIGNMENT",
- "UNIFORM_BUFFER_SIZE",
- "UNIFORM_BUFFER_START",
- "UNIFORM_IS_ROW_MAJOR",
- "UNIFORM_MATRIX_STRIDE",
- "UNIFORM_OFFSET",
- "UNIFORM_SIZE",
- "UNIFORM_TYPE",
- "UNKNOWN_ERR",
- "UNKNOWN_RULE",
- "UNMASKED_RENDERER_WEBGL",
- "UNMASKED_VENDOR_WEBGL",
- "UNORDERED_NODE_ITERATOR_TYPE",
- "UNORDERED_NODE_SNAPSHOT_TYPE",
- "UNPACK_ALIGNMENT",
- "UNPACK_COLORSPACE_CONVERSION_WEBGL",
- "UNPACK_FLIP_Y_WEBGL",
- "UNPACK_IMAGE_HEIGHT",
- "UNPACK_PREMULTIPLY_ALPHA_WEBGL",
- "UNPACK_ROW_LENGTH",
- "UNPACK_SKIP_IMAGES",
- "UNPACK_SKIP_PIXELS",
- "UNPACK_SKIP_ROWS",
- "UNSCHEDULED_STATE",
- "UNSENT",
- "UNSIGNALED",
- "UNSIGNED_BYTE",
- "UNSIGNED_INT",
- "UNSIGNED_INT_10F_11F_11F_REV",
- "UNSIGNED_INT_24_8",
- "UNSIGNED_INT_2_10_10_10_REV",
- "UNSIGNED_INT_5_9_9_9_REV",
- "UNSIGNED_INT_SAMPLER_2D",
- "UNSIGNED_INT_SAMPLER_2D_ARRAY",
- "UNSIGNED_INT_SAMPLER_3D",
- "UNSIGNED_INT_SAMPLER_CUBE",
- "UNSIGNED_INT_VEC2",
- "UNSIGNED_INT_VEC3",
- "UNSIGNED_INT_VEC4",
- "UNSIGNED_NORMALIZED",
- "UNSIGNED_SHORT",
- "UNSIGNED_SHORT_4_4_4_4",
- "UNSIGNED_SHORT_5_5_5_1",
- "UNSIGNED_SHORT_5_6_5",
- "UNSPECIFIED_EVENT_TYPE_ERR",
- "UPDATEREADY",
- "URIError",
- "URL",
- "URLSearchParams",
- "URLUnencoded",
- "URL_MISMATCH_ERR",
- "USB",
- "USBAlternateInterface",
- "USBConfiguration",
- "USBConnectionEvent",
- "USBDevice",
- "USBEndpoint",
- "USBInTransferResult",
- "USBInterface",
- "USBIsochronousInTransferPacket",
- "USBIsochronousInTransferResult",
- "USBIsochronousOutTransferPacket",
- "USBIsochronousOutTransferResult",
- "USBOutTransferResult",
- "UTC",
- "Uint16Array",
- "Uint32Array",
- "Uint8Array",
- "Uint8ClampedArray",
- "UserActivation",
- "UserMessageHandler",
- "UserMessageHandlersNamespace",
- "UserProximityEvent",
- "VALIDATE_STATUS",
- "VALIDATION_ERR",
- "VARIABLES_RULE",
- "VENDOR",
- "VERSION",
- "VERSION_CHANGE",
- "VERSION_ERR",
- "VERTEX_ARRAY_BINDING",
- "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",
- "VERTEX_ATTRIB_ARRAY_DIVISOR",
- "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE",
- "VERTEX_ATTRIB_ARRAY_ENABLED",
- "VERTEX_ATTRIB_ARRAY_INTEGER",
- "VERTEX_ATTRIB_ARRAY_NORMALIZED",
- "VERTEX_ATTRIB_ARRAY_POINTER",
- "VERTEX_ATTRIB_ARRAY_SIZE",
- "VERTEX_ATTRIB_ARRAY_STRIDE",
- "VERTEX_ATTRIB_ARRAY_TYPE",
- "VERTEX_SHADER",
- "VERTICAL",
- "VERTICAL_AXIS",
- "VER_ERR",
- "VIEWPORT",
- "VIEWPORT_RULE",
- "VRDisplay",
- "VRDisplayCapabilities",
- "VRDisplayEvent",
- "VREyeParameters",
- "VRFieldOfView",
- "VRFrameData",
- "VRPose",
- "VRStageParameters",
- "VTTCue",
- "VTTRegion",
- "ValidityState",
- "VideoPlaybackQuality",
- "VideoStreamTrack",
- "VisualViewport",
- "WAIT_FAILED",
- "WEBKIT_FILTER_RULE",
- "WEBKIT_KEYFRAMES_RULE",
- "WEBKIT_KEYFRAME_RULE",
- "WEBKIT_REGION_RULE",
- "WRONG_DOCUMENT_ERR",
- "WakeLock",
- "WakeLockSentinel",
- "WasmAnyRef",
- "WaveShaperNode",
- "WeakMap",
- "WeakRef",
- "WeakSet",
- "WebAssembly",
- "WebGL2RenderingContext",
- "WebGLActiveInfo",
- "WebGLBuffer",
- "WebGLContextEvent",
- "WebGLFramebuffer",
- "WebGLProgram",
- "WebGLQuery",
- "WebGLRenderbuffer",
- "WebGLRenderingContext",
- "WebGLSampler",
- "WebGLShader",
- "WebGLShaderPrecisionFormat",
- "WebGLSync",
- "WebGLTexture",
- "WebGLTransformFeedback",
- "WebGLUniformLocation",
- "WebGLVertexArray",
- "WebGLVertexArrayObject",
- "WebKitAnimationEvent",
- "WebKitBlobBuilder",
- "WebKitCSSFilterRule",
- "WebKitCSSFilterValue",
- "WebKitCSSKeyframeRule",
- "WebKitCSSKeyframesRule",
- "WebKitCSSMatrix",
- "WebKitCSSRegionRule",
- "WebKitCSSTransformValue",
- "WebKitDataCue",
- "WebKitGamepad",
- "WebKitMediaKeyError",
- "WebKitMediaKeyMessageEvent",
- "WebKitMediaKeySession",
- "WebKitMediaKeys",
- "WebKitMediaSource",
- "WebKitMutationObserver",
- "WebKitNamespace",
- "WebKitPlaybackTargetAvailabilityEvent",
- "WebKitPoint",
- "WebKitShadowRoot",
- "WebKitSourceBuffer",
- "WebKitSourceBufferList",
- "WebKitTransitionEvent",
- "WebSocket",
- "WebkitAlignContent",
- "WebkitAlignItems",
- "WebkitAlignSelf",
- "WebkitAnimation",
- "WebkitAnimationDelay",
- "WebkitAnimationDirection",
- "WebkitAnimationDuration",
- "WebkitAnimationFillMode",
- "WebkitAnimationIterationCount",
- "WebkitAnimationName",
- "WebkitAnimationPlayState",
- "WebkitAnimationTimingFunction",
- "WebkitAppearance",
- "WebkitBackfaceVisibility",
- "WebkitBackgroundClip",
- "WebkitBackgroundOrigin",
- "WebkitBackgroundSize",
- "WebkitBorderBottomLeftRadius",
- "WebkitBorderBottomRightRadius",
- "WebkitBorderImage",
- "WebkitBorderRadius",
- "WebkitBorderTopLeftRadius",
- "WebkitBorderTopRightRadius",
- "WebkitBoxAlign",
- "WebkitBoxDirection",
- "WebkitBoxFlex",
- "WebkitBoxOrdinalGroup",
- "WebkitBoxOrient",
- "WebkitBoxPack",
- "WebkitBoxShadow",
- "WebkitBoxSizing",
- "WebkitFilter",
- "WebkitFlex",
- "WebkitFlexBasis",
- "WebkitFlexDirection",
- "WebkitFlexFlow",
- "WebkitFlexGrow",
- "WebkitFlexShrink",
- "WebkitFlexWrap",
- "WebkitJustifyContent",
- "WebkitLineClamp",
- "WebkitMask",
- "WebkitMaskClip",
- "WebkitMaskComposite",
- "WebkitMaskImage",
- "WebkitMaskOrigin",
- "WebkitMaskPosition",
- "WebkitMaskPositionX",
- "WebkitMaskPositionY",
- "WebkitMaskRepeat",
- "WebkitMaskSize",
- "WebkitOrder",
- "WebkitPerspective",
- "WebkitPerspectiveOrigin",
- "WebkitTextFillColor",
- "WebkitTextSizeAdjust",
- "WebkitTextStroke",
- "WebkitTextStrokeColor",
- "WebkitTextStrokeWidth",
- "WebkitTransform",
- "WebkitTransformOrigin",
- "WebkitTransformStyle",
- "WebkitTransition",
- "WebkitTransitionDelay",
- "WebkitTransitionDuration",
- "WebkitTransitionProperty",
- "WebkitTransitionTimingFunction",
- "WebkitUserSelect",
- "WheelEvent",
- "Window",
- "Worker",
- "Worklet",
- "WritableStream",
- "WritableStreamDefaultWriter",
- "XMLDocument",
- "XMLHttpRequest",
- "XMLHttpRequestEventTarget",
- "XMLHttpRequestException",
- "XMLHttpRequestProgressEvent",
- "XMLHttpRequestUpload",
- "XMLSerializer",
- "XMLStylesheetProcessingInstruction",
- "XPathEvaluator",
- "XPathException",
- "XPathExpression",
- "XPathNSResolver",
- "XPathResult",
- "XRBoundedReferenceSpace",
- "XRDOMOverlayState",
- "XRFrame",
- "XRHitTestResult",
- "XRHitTestSource",
- "XRInputSource",
- "XRInputSourceArray",
- "XRInputSourceEvent",
- "XRInputSourcesChangeEvent",
- "XRLayer",
- "XRPose",
- "XRRay",
- "XRReferenceSpace",
- "XRReferenceSpaceEvent",
- "XRRenderState",
- "XRRigidTransform",
- "XRSession",
- "XRSessionEvent",
- "XRSpace",
- "XRSystem",
- "XRTransientInputHitTestResult",
- "XRTransientInputHitTestSource",
- "XRView",
- "XRViewerPose",
- "XRViewport",
- "XRWebGLLayer",
- "XSLTProcessor",
- "ZERO",
- "_XD0M_",
- "_YD0M_",
- "__defineGetter__",
- "__defineSetter__",
- "__lookupGetter__",
- "__lookupSetter__",
- "__opera",
- "__proto__",
- "_browserjsran",
- "a",
- "aLink",
- "abbr",
- "abort",
- "aborted",
- "abs",
- "absolute",
- "acceleration",
- "accelerationIncludingGravity",
- "accelerator",
- "accept",
- "acceptCharset",
- "acceptNode",
- "accessKey",
- "accessKeyLabel",
- "accuracy",
- "acos",
- "acosh",
- "action",
- "actionURL",
- "actions",
- "activated",
- "active",
- "activeCues",
- "activeElement",
- "activeSourceBuffers",
- "activeSourceCount",
- "activeTexture",
- "activeVRDisplays",
- "actualBoundingBoxAscent",
- "actualBoundingBoxDescent",
- "actualBoundingBoxLeft",
- "actualBoundingBoxRight",
- "add",
- "addAll",
- "addBehavior",
- "addCandidate",
- "addColorStop",
- "addCue",
- "addElement",
- "addEventListener",
- "addFilter",
- "addFromString",
- "addFromUri",
- "addIceCandidate",
- "addImport",
- "addListener",
- "addModule",
- "addNamed",
- "addPageRule",
- "addPath",
- "addPointer",
- "addRange",
- "addRegion",
- "addRule",
- "addSearchEngine",
- "addSourceBuffer",
- "addStream",
- "addTextTrack",
- "addTrack",
- "addTransceiver",
- "addWakeLockListener",
- "added",
- "addedNodes",
- "additionalName",
- "additiveSymbols",
- "addons",
- "address",
- "addressLine",
- "adoptNode",
- "adoptedStyleSheets",
- "adr",
- "advance",
- "after",
- "album",
- "alert",
- "algorithm",
- "align",
- "align-content",
- "align-items",
- "align-self",
- "alignContent",
- "alignItems",
- "alignSelf",
- "alignmentBaseline",
- "alinkColor",
- "all",
- "allSettled",
- "allow",
- "allowFullscreen",
- "allowPaymentRequest",
- "allowedDirections",
- "allowedFeatures",
- "allowedToPlay",
- "allowsFeature",
- "alpha",
- "alt",
- "altGraphKey",
- "altHtml",
- "altKey",
- "altLeft",
- "alternate",
- "alternateSetting",
- "alternates",
- "altitude",
- "altitudeAccuracy",
- "amplitude",
- "ancestorOrigins",
- "anchor",
- "anchorNode",
- "anchorOffset",
- "anchors",
- "and",
- "angle",
- "angularAcceleration",
- "angularVelocity",
- "animVal",
- "animate",
- "animatedInstanceRoot",
- "animatedNormalizedPathSegList",
- "animatedPathSegList",
- "animatedPoints",
- "animation",
- "animation-delay",
- "animation-direction",
- "animation-duration",
- "animation-fill-mode",
- "animation-iteration-count",
- "animation-name",
- "animation-play-state",
- "animation-timing-function",
- "animationDelay",
- "animationDirection",
- "animationDuration",
- "animationFillMode",
- "animationIterationCount",
- "animationName",
- "animationPlayState",
- "animationStartTime",
- "animationTimingFunction",
- "animationsPaused",
- "anniversary",
- "antialias",
- "anticipatedRemoval",
- "any",
- "app",
- "appCodeName",
- "appMinorVersion",
- "appName",
- "appNotifications",
- "appVersion",
- "appearance",
- "append",
- "appendBuffer",
- "appendChild",
- "appendData",
- "appendItem",
- "appendMedium",
- "appendNamed",
- "appendRule",
- "appendStream",
- "appendWindowEnd",
- "appendWindowStart",
- "applets",
- "applicationCache",
- "applicationServerKey",
- "apply",
- "applyConstraints",
- "applyElement",
- "arc",
- "arcTo",
- "archive",
- "areas",
- "arguments",
- "ariaAtomic",
- "ariaAutoComplete",
- "ariaBusy",
- "ariaChecked",
- "ariaColCount",
- "ariaColIndex",
- "ariaColSpan",
- "ariaCurrent",
- "ariaDescription",
- "ariaDisabled",
- "ariaExpanded",
- "ariaHasPopup",
- "ariaHidden",
- "ariaKeyShortcuts",
- "ariaLabel",
- "ariaLevel",
- "ariaLive",
- "ariaModal",
- "ariaMultiLine",
- "ariaMultiSelectable",
- "ariaOrientation",
- "ariaPlaceholder",
- "ariaPosInSet",
- "ariaPressed",
- "ariaReadOnly",
- "ariaRelevant",
- "ariaRequired",
- "ariaRoleDescription",
- "ariaRowCount",
- "ariaRowIndex",
- "ariaRowSpan",
- "ariaSelected",
- "ariaSetSize",
- "ariaSort",
- "ariaValueMax",
- "ariaValueMin",
- "ariaValueNow",
- "ariaValueText",
- "arrayBuffer",
- "artist",
- "artwork",
- "as",
- "asIntN",
- "asUintN",
- "asin",
- "asinh",
- "assert",
- "assign",
- "assignedElements",
- "assignedNodes",
- "assignedSlot",
- "async",
- "asyncIterator",
- "atEnd",
- "atan",
- "atan2",
- "atanh",
- "atob",
- "attachEvent",
- "attachInternals",
- "attachShader",
- "attachShadow",
- "attachments",
- "attack",
- "attestationObject",
- "attrChange",
- "attrName",
- "attributeFilter",
- "attributeName",
- "attributeNamespace",
- "attributeOldValue",
- "attributeStyleMap",
- "attributes",
- "attribution",
- "audioBitsPerSecond",
- "audioTracks",
- "audioWorklet",
- "authenticatedSignedWrites",
- "authenticatorData",
- "autoIncrement",
- "autobuffer",
- "autocapitalize",
- "autocomplete",
- "autocorrect",
- "autofocus",
- "automationRate",
- "autoplay",
- "availHeight",
- "availLeft",
- "availTop",
- "availWidth",
- "availability",
- "available",
- "aversion",
- "ax",
- "axes",
- "axis",
- "ay",
- "azimuth",
- "b",
- "back",
- "backface-visibility",
- "backfaceVisibility",
- "background",
- "background-attachment",
- "background-blend-mode",
- "background-clip",
- "background-color",
- "background-image",
- "background-origin",
- "background-position",
- "background-position-x",
- "background-position-y",
- "background-repeat",
- "background-size",
- "backgroundAttachment",
- "backgroundBlendMode",
- "backgroundClip",
- "backgroundColor",
- "backgroundFetch",
- "backgroundImage",
- "backgroundOrigin",
- "backgroundPosition",
- "backgroundPositionX",
- "backgroundPositionY",
- "backgroundRepeat",
- "backgroundSize",
- "badInput",
- "badge",
- "balance",
- "baseFrequencyX",
- "baseFrequencyY",
- "baseLatency",
- "baseLayer",
- "baseNode",
- "baseOffset",
- "baseURI",
- "baseVal",
- "baselineShift",
- "battery",
- "bday",
- "before",
- "beginElement",
- "beginElementAt",
- "beginPath",
- "beginQuery",
- "beginTransformFeedback",
- "behavior",
- "behaviorCookie",
- "behaviorPart",
- "behaviorUrns",
- "beta",
- "bezierCurveTo",
- "bgColor",
- "bgProperties",
- "bias",
- "big",
- "bigint64",
- "biguint64",
- "binaryType",
- "bind",
- "bindAttribLocation",
- "bindBuffer",
- "bindBufferBase",
- "bindBufferRange",
- "bindFramebuffer",
- "bindRenderbuffer",
- "bindSampler",
- "bindTexture",
- "bindTransformFeedback",
- "bindVertexArray",
- "blendColor",
- "blendEquation",
- "blendEquationSeparate",
- "blendFunc",
- "blendFuncSeparate",
- "blink",
- "blitFramebuffer",
- "blob",
- "block-size",
- "blockDirection",
- "blockSize",
- "blockedURI",
- "blue",
- "bluetooth",
- "blur",
- "body",
- "bodyUsed",
- "bold",
- "bookmarks",
- "booleanValue",
- "border",
- "border-block",
- "border-block-color",
- "border-block-end",
- "border-block-end-color",
- "border-block-end-style",
- "border-block-end-width",
- "border-block-start",
- "border-block-start-color",
- "border-block-start-style",
- "border-block-start-width",
- "border-block-style",
- "border-block-width",
- "border-bottom",
- "border-bottom-color",
- "border-bottom-left-radius",
- "border-bottom-right-radius",
- "border-bottom-style",
- "border-bottom-width",
- "border-collapse",
- "border-color",
- "border-end-end-radius",
- "border-end-start-radius",
- "border-image",
- "border-image-outset",
- "border-image-repeat",
- "border-image-slice",
- "border-image-source",
- "border-image-width",
- "border-inline",
- "border-inline-color",
- "border-inline-end",
- "border-inline-end-color",
- "border-inline-end-style",
- "border-inline-end-width",
- "border-inline-start",
- "border-inline-start-color",
- "border-inline-start-style",
- "border-inline-start-width",
- "border-inline-style",
- "border-inline-width",
- "border-left",
- "border-left-color",
- "border-left-style",
- "border-left-width",
- "border-radius",
- "border-right",
- "border-right-color",
- "border-right-style",
- "border-right-width",
- "border-spacing",
- "border-start-end-radius",
- "border-start-start-radius",
- "border-style",
- "border-top",
- "border-top-color",
- "border-top-left-radius",
- "border-top-right-radius",
- "border-top-style",
- "border-top-width",
- "border-width",
- "borderBlock",
- "borderBlockColor",
- "borderBlockEnd",
- "borderBlockEndColor",
- "borderBlockEndStyle",
- "borderBlockEndWidth",
- "borderBlockStart",
- "borderBlockStartColor",
- "borderBlockStartStyle",
- "borderBlockStartWidth",
- "borderBlockStyle",
- "borderBlockWidth",
- "borderBottom",
- "borderBottomColor",
- "borderBottomLeftRadius",
- "borderBottomRightRadius",
- "borderBottomStyle",
- "borderBottomWidth",
- "borderBoxSize",
- "borderCollapse",
- "borderColor",
- "borderColorDark",
- "borderColorLight",
- "borderEndEndRadius",
- "borderEndStartRadius",
- "borderImage",
- "borderImageOutset",
- "borderImageRepeat",
- "borderImageSlice",
- "borderImageSource",
- "borderImageWidth",
- "borderInline",
- "borderInlineColor",
- "borderInlineEnd",
- "borderInlineEndColor",
- "borderInlineEndStyle",
- "borderInlineEndWidth",
- "borderInlineStart",
- "borderInlineStartColor",
- "borderInlineStartStyle",
- "borderInlineStartWidth",
- "borderInlineStyle",
- "borderInlineWidth",
- "borderLeft",
- "borderLeftColor",
- "borderLeftStyle",
- "borderLeftWidth",
- "borderRadius",
- "borderRight",
- "borderRightColor",
- "borderRightStyle",
- "borderRightWidth",
- "borderSpacing",
- "borderStartEndRadius",
- "borderStartStartRadius",
- "borderStyle",
- "borderTop",
- "borderTopColor",
- "borderTopLeftRadius",
- "borderTopRightRadius",
- "borderTopStyle",
- "borderTopWidth",
- "borderWidth",
- "bottom",
- "bottomMargin",
- "bound",
- "boundElements",
- "boundingClientRect",
- "boundingHeight",
- "boundingLeft",
- "boundingTop",
- "boundingWidth",
- "bounds",
- "boundsGeometry",
- "box-decoration-break",
- "box-shadow",
- "box-sizing",
- "boxDecorationBreak",
- "boxShadow",
- "boxSizing",
- "break-after",
- "break-before",
- "break-inside",
- "breakAfter",
- "breakBefore",
- "breakInside",
- "broadcast",
- "browserLanguage",
- "btoa",
- "bubbles",
- "buffer",
- "bufferData",
- "bufferDepth",
- "bufferSize",
- "bufferSubData",
- "buffered",
- "bufferedAmount",
- "bufferedAmountLowThreshold",
- "buildID",
- "buildNumber",
- "button",
- "buttonID",
- "buttons",
- "byteLength",
- "byteOffset",
- "bytesWritten",
- "c",
- "cache",
- "caches",
- "call",
- "caller",
- "canBeFormatted",
- "canBeMounted",
- "canBeShared",
- "canHaveChildren",
- "canHaveHTML",
- "canInsertDTMF",
- "canMakePayment",
- "canPlayType",
- "canPresent",
- "canTrickleIceCandidates",
- "cancel",
- "cancelAndHoldAtTime",
- "cancelAnimationFrame",
- "cancelBubble",
- "cancelIdleCallback",
- "cancelScheduledValues",
- "cancelVideoFrameCallback",
- "cancelWatchAvailability",
- "cancelable",
- "candidate",
- "canonicalUUID",
- "canvas",
- "capabilities",
- "caption",
- "caption-side",
- "captionSide",
- "capture",
- "captureEvents",
- "captureStackTrace",
- "captureStream",
- "caret-color",
- "caretBidiLevel",
- "caretColor",
- "caretPositionFromPoint",
- "caretRangeFromPoint",
- "cast",
- "catch",
- "category",
- "cbrt",
- "cd",
- "ceil",
- "cellIndex",
- "cellPadding",
- "cellSpacing",
- "cells",
- "ch",
- "chOff",
- "chain",
- "challenge",
- "changeType",
- "changedTouches",
- "channel",
- "channelCount",
- "channelCountMode",
- "channelInterpretation",
- "char",
- "charAt",
- "charCode",
- "charCodeAt",
- "charIndex",
- "charLength",
- "characterData",
- "characterDataOldValue",
- "characterSet",
- "characteristic",
- "charging",
- "chargingTime",
- "charset",
- "check",
- "checkEnclosure",
- "checkFramebufferStatus",
- "checkIntersection",
- "checkValidity",
- "checked",
- "childElementCount",
- "childList",
- "childNodes",
- "children",
- "chrome",
- "ciphertext",
- "cite",
- "city",
- "claimInterface",
- "claimed",
- "classList",
- "className",
- "classid",
- "clear",
- "clearAppBadge",
- "clearAttributes",
- "clearBufferfi",
- "clearBufferfv",
- "clearBufferiv",
- "clearBufferuiv",
- "clearColor",
- "clearData",
- "clearDepth",
- "clearHalt",
- "clearImmediate",
- "clearInterval",
- "clearLiveSeekableRange",
- "clearMarks",
- "clearMaxGCPauseAccumulator",
- "clearMeasures",
- "clearParameters",
- "clearRect",
- "clearResourceTimings",
- "clearShadow",
- "clearStencil",
- "clearTimeout",
- "clearWatch",
- "click",
- "clickCount",
- "clientDataJSON",
- "clientHeight",
- "clientInformation",
- "clientLeft",
- "clientRect",
- "clientRects",
- "clientTop",
- "clientWaitSync",
- "clientWidth",
- "clientX",
- "clientY",
- "clip",
- "clip-path",
- "clip-rule",
- "clipBottom",
- "clipLeft",
- "clipPath",
- "clipPathUnits",
- "clipRight",
- "clipRule",
- "clipTop",
- "clipboard",
- "clipboardData",
- "clone",
- "cloneContents",
- "cloneNode",
- "cloneRange",
- "close",
- "closePath",
- "closed",
- "closest",
- "clz",
- "clz32",
- "cm",
- "cmp",
- "code",
- "codeBase",
- "codePointAt",
- "codeType",
- "colSpan",
- "collapse",
- "collapseToEnd",
- "collapseToStart",
- "collapsed",
- "collect",
- "colno",
- "color",
- "color-adjust",
- "color-interpolation",
- "color-interpolation-filters",
- "colorAdjust",
- "colorDepth",
- "colorInterpolation",
- "colorInterpolationFilters",
- "colorMask",
- "colorType",
- "cols",
- "column-count",
- "column-fill",
- "column-gap",
- "column-rule",
- "column-rule-color",
- "column-rule-style",
- "column-rule-width",
- "column-span",
- "column-width",
- "columnCount",
- "columnFill",
- "columnGap",
- "columnNumber",
- "columnRule",
- "columnRuleColor",
- "columnRuleStyle",
- "columnRuleWidth",
- "columnSpan",
- "columnWidth",
- "columns",
- "command",
- "commit",
- "commitPreferences",
- "commitStyles",
- "commonAncestorContainer",
- "compact",
- "compareBoundaryPoints",
- "compareDocumentPosition",
- "compareEndPoints",
- "compareExchange",
- "compareNode",
- "comparePoint",
- "compatMode",
- "compatible",
- "compile",
- "compileShader",
- "compileStreaming",
- "complete",
- "component",
- "componentFromPoint",
- "composed",
- "composedPath",
- "composite",
- "compositionEndOffset",
- "compositionStartOffset",
- "compressedTexImage2D",
- "compressedTexImage3D",
- "compressedTexSubImage2D",
- "compressedTexSubImage3D",
- "computedStyleMap",
- "concat",
- "conditionText",
- "coneInnerAngle",
- "coneOuterAngle",
- "coneOuterGain",
- "configuration",
- "configurationName",
- "configurationValue",
- "configurations",
- "confirm",
- "confirmComposition",
- "confirmSiteSpecificTrackingException",
- "confirmWebWideTrackingException",
- "connect",
- "connectEnd",
- "connectShark",
- "connectStart",
- "connected",
- "connection",
- "connectionList",
- "connectionSpeed",
- "connectionState",
- "connections",
- "console",
- "consolidate",
- "constraint",
- "constrictionActive",
- "construct",
- "constructor",
- "contactID",
- "contain",
- "containerId",
- "containerName",
- "containerSrc",
- "containerType",
- "contains",
- "containsNode",
- "content",
- "contentBoxSize",
- "contentDocument",
- "contentEditable",
- "contentHint",
- "contentOverflow",
- "contentRect",
- "contentScriptType",
- "contentStyleType",
- "contentType",
- "contentWindow",
- "context",
- "contextMenu",
- "contextmenu",
- "continue",
- "continuePrimaryKey",
- "continuous",
- "control",
- "controlTransferIn",
- "controlTransferOut",
- "controller",
- "controls",
- "controlsList",
- "convertPointFromNode",
- "convertQuadFromNode",
- "convertRectFromNode",
- "convertToBlob",
- "convertToSpecifiedUnits",
- "cookie",
- "cookieEnabled",
- "coords",
- "copyBufferSubData",
- "copyFromChannel",
- "copyTexImage2D",
- "copyTexSubImage2D",
- "copyTexSubImage3D",
- "copyToChannel",
- "copyWithin",
- "correspondingElement",
- "correspondingUseElement",
- "corruptedVideoFrames",
- "cos",
- "cosh",
- "count",
- "countReset",
- "counter-increment",
- "counter-reset",
- "counter-set",
- "counterIncrement",
- "counterReset",
- "counterSet",
- "country",
- "cpuClass",
- "cpuSleepAllowed",
- "create",
- "createAnalyser",
- "createAnswer",
- "createAttribute",
- "createAttributeNS",
- "createBiquadFilter",
- "createBuffer",
- "createBufferSource",
- "createCDATASection",
- "createCSSStyleSheet",
- "createCaption",
- "createChannelMerger",
- "createChannelSplitter",
- "createComment",
- "createConstantSource",
- "createContextualFragment",
- "createControlRange",
- "createConvolver",
- "createDTMFSender",
- "createDataChannel",
- "createDelay",
- "createDelayNode",
- "createDocument",
- "createDocumentFragment",
- "createDocumentType",
- "createDynamicsCompressor",
- "createElement",
- "createElementNS",
- "createEntityReference",
- "createEvent",
- "createEventObject",
- "createExpression",
- "createFramebuffer",
- "createFunction",
- "createGain",
- "createGainNode",
- "createHTML",
- "createHTMLDocument",
- "createIIRFilter",
- "createImageBitmap",
- "createImageData",
- "createIndex",
- "createJavaScriptNode",
- "createLinearGradient",
- "createMediaElementSource",
- "createMediaKeys",
- "createMediaStreamDestination",
- "createMediaStreamSource",
- "createMediaStreamTrackSource",
- "createMutableFile",
- "createNSResolver",
- "createNodeIterator",
- "createNotification",
- "createObjectStore",
- "createObjectURL",
- "createOffer",
- "createOscillator",
- "createPanner",
- "createPattern",
- "createPeriodicWave",
- "createPolicy",
- "createPopup",
- "createProcessingInstruction",
- "createProgram",
- "createQuery",
- "createRadialGradient",
- "createRange",
- "createRangeCollection",
- "createReader",
- "createRenderbuffer",
- "createSVGAngle",
- "createSVGLength",
- "createSVGMatrix",
- "createSVGNumber",
- "createSVGPathSegArcAbs",
- "createSVGPathSegArcRel",
- "createSVGPathSegClosePath",
- "createSVGPathSegCurvetoCubicAbs",
- "createSVGPathSegCurvetoCubicRel",
- "createSVGPathSegCurvetoCubicSmoothAbs",
- "createSVGPathSegCurvetoCubicSmoothRel",
- "createSVGPathSegCurvetoQuadraticAbs",
- "createSVGPathSegCurvetoQuadraticRel",
- "createSVGPathSegCurvetoQuadraticSmoothAbs",
- "createSVGPathSegCurvetoQuadraticSmoothRel",
- "createSVGPathSegLinetoAbs",
- "createSVGPathSegLinetoHorizontalAbs",
- "createSVGPathSegLinetoHorizontalRel",
- "createSVGPathSegLinetoRel",
- "createSVGPathSegLinetoVerticalAbs",
- "createSVGPathSegLinetoVerticalRel",
- "createSVGPathSegMovetoAbs",
- "createSVGPathSegMovetoRel",
- "createSVGPoint",
- "createSVGRect",
- "createSVGTransform",
- "createSVGTransformFromMatrix",
- "createSampler",
- "createScript",
- "createScriptProcessor",
- "createScriptURL",
- "createSession",
- "createShader",
- "createShadowRoot",
- "createStereoPanner",
- "createStyleSheet",
- "createTBody",
- "createTFoot",
- "createTHead",
- "createTextNode",
- "createTextRange",
- "createTexture",
- "createTouch",
- "createTouchList",
- "createTransformFeedback",
- "createTreeWalker",
- "createVertexArray",
- "createWaveShaper",
- "creationTime",
- "credentials",
- "crossOrigin",
- "crossOriginIsolated",
- "crypto",
- "csi",
- "csp",
- "cssFloat",
- "cssRules",
- "cssText",
- "cssValueType",
- "ctrlKey",
- "ctrlLeft",
- "cues",
- "cullFace",
- "currentDirection",
- "currentLocalDescription",
- "currentNode",
- "currentPage",
- "currentRect",
- "currentRemoteDescription",
- "currentScale",
- "currentScript",
- "currentSrc",
- "currentState",
- "currentStyle",
- "currentTarget",
- "currentTime",
- "currentTranslate",
- "currentView",
- "cursor",
- "curve",
- "customElements",
- "customError",
- "cx",
- "cy",
- "d",
- "data",
- "dataFld",
- "dataFormatAs",
- "dataLoss",
- "dataLossMessage",
- "dataPageSize",
- "dataSrc",
- "dataTransfer",
- "database",
- "databases",
- "dataset",
- "dateTime",
- "db",
- "debug",
- "debuggerEnabled",
- "declare",
- "decode",
- "decodeAudioData",
- "decodeURI",
- "decodeURIComponent",
- "decodedBodySize",
- "decoding",
- "decodingInfo",
- "decrypt",
- "default",
- "defaultCharset",
- "defaultChecked",
- "defaultMuted",
- "defaultPlaybackRate",
- "defaultPolicy",
- "defaultPrevented",
- "defaultRequest",
- "defaultSelected",
- "defaultStatus",
- "defaultURL",
- "defaultValue",
- "defaultView",
- "defaultstatus",
- "defer",
- "define",
- "defineMagicFunction",
- "defineMagicVariable",
- "defineProperties",
- "defineProperty",
- "deg",
- "delay",
- "delayTime",
- "delegatesFocus",
- "delete",
- "deleteBuffer",
- "deleteCaption",
- "deleteCell",
- "deleteContents",
- "deleteData",
- "deleteDatabase",
- "deleteFramebuffer",
- "deleteFromDocument",
- "deleteIndex",
- "deleteMedium",
- "deleteObjectStore",
- "deleteProgram",
- "deleteProperty",
- "deleteQuery",
- "deleteRenderbuffer",
- "deleteRow",
- "deleteRule",
- "deleteSampler",
- "deleteShader",
- "deleteSync",
- "deleteTFoot",
- "deleteTHead",
- "deleteTexture",
- "deleteTransformFeedback",
- "deleteVertexArray",
- "deliverChangeRecords",
- "delivery",
- "deliveryInfo",
- "deliveryStatus",
- "deliveryTimestamp",
- "delta",
- "deltaMode",
- "deltaX",
- "deltaY",
- "deltaZ",
- "dependentLocality",
- "depthFar",
- "depthFunc",
- "depthMask",
- "depthNear",
- "depthRange",
- "deref",
- "deriveBits",
- "deriveKey",
- "description",
- "deselectAll",
- "designMode",
- "desiredSize",
- "destination",
- "destinationURL",
- "detach",
- "detachEvent",
- "detachShader",
- "detail",
- "details",
- "detect",
- "detune",
- "device",
- "deviceClass",
- "deviceId",
- "deviceMemory",
- "devicePixelContentBoxSize",
- "devicePixelRatio",
- "deviceProtocol",
- "deviceSubclass",
- "deviceVersionMajor",
- "deviceVersionMinor",
- "deviceVersionSubminor",
- "deviceXDPI",
- "deviceYDPI",
- "didTimeout",
- "diffuseConstant",
- "digest",
- "dimensions",
- "dir",
- "dirName",
- "direction",
- "dirxml",
- "disable",
- "disablePictureInPicture",
- "disableRemotePlayback",
- "disableVertexAttribArray",
- "disabled",
- "dischargingTime",
- "disconnect",
- "disconnectShark",
- "dispatchEvent",
- "display",
- "displayId",
- "displayName",
- "disposition",
- "distanceModel",
- "div",
- "divisor",
- "djsapi",
- "djsproxy",
- "doImport",
- "doNotTrack",
- "doScroll",
- "doctype",
- "document",
- "documentElement",
- "documentMode",
- "documentURI",
- "dolphin",
- "dolphinGameCenter",
- "dolphininfo",
- "dolphinmeta",
- "domComplete",
- "domContentLoadedEventEnd",
- "domContentLoadedEventStart",
- "domInteractive",
- "domLoading",
- "domOverlayState",
- "domain",
- "domainLookupEnd",
- "domainLookupStart",
- "dominant-baseline",
- "dominantBaseline",
- "done",
- "dopplerFactor",
- "dotAll",
- "downDegrees",
- "downlink",
- "download",
- "downloadTotal",
- "downloaded",
- "dpcm",
- "dpi",
- "dppx",
- "dragDrop",
- "draggable",
- "drawArrays",
- "drawArraysInstanced",
- "drawArraysInstancedANGLE",
- "drawBuffers",
- "drawCustomFocusRing",
- "drawElements",
- "drawElementsInstanced",
- "drawElementsInstancedANGLE",
- "drawFocusIfNeeded",
- "drawImage",
- "drawImageFromRect",
- "drawRangeElements",
- "drawSystemFocusRing",
- "drawingBufferHeight",
- "drawingBufferWidth",
- "dropEffect",
- "droppedVideoFrames",
- "dropzone",
- "dtmf",
- "dump",
- "dumpProfile",
- "duplicate",
- "durability",
- "duration",
- "dvname",
- "dvnum",
- "dx",
- "dy",
- "dynsrc",
- "e",
- "edgeMode",
- "effect",
- "effectAllowed",
- "effectiveDirective",
- "effectiveType",
- "elapsedTime",
- "element",
- "elementFromPoint",
- "elementTiming",
- "elements",
- "elementsFromPoint",
- "elevation",
- "ellipse",
- "em",
- "email",
- "embeds",
- "emma",
- "empty",
- "empty-cells",
- "emptyCells",
- "emptyHTML",
- "emptyScript",
- "emulatedPosition",
- "enable",
- "enableBackground",
- "enableDelegations",
- "enableStyleSheetsForSet",
- "enableVertexAttribArray",
- "enabled",
- "enabledPlugin",
- "encode",
- "encodeInto",
- "encodeURI",
- "encodeURIComponent",
- "encodedBodySize",
- "encoding",
- "encodingInfo",
- "encrypt",
- "enctype",
- "end",
- "endContainer",
- "endElement",
- "endElementAt",
- "endOfStream",
- "endOffset",
- "endQuery",
- "endTime",
- "endTransformFeedback",
- "ended",
- "endpoint",
- "endpointNumber",
- "endpoints",
- "endsWith",
- "enterKeyHint",
- "entities",
- "entries",
- "entryType",
- "enumerate",
- "enumerateDevices",
- "enumerateEditable",
- "environmentBlendMode",
- "equals",
- "error",
- "errorCode",
- "errorDetail",
- "errorText",
- "escape",
- "estimate",
- "eval",
- "evaluate",
- "event",
- "eventPhase",
- "every",
- "ex",
- "exception",
- "exchange",
- "exec",
- "execCommand",
- "execCommandShowHelp",
- "execScript",
- "exitFullscreen",
- "exitPictureInPicture",
- "exitPointerLock",
- "exitPresent",
- "exp",
- "expand",
- "expandEntityReferences",
- "expando",
- "expansion",
- "expiration",
- "expirationTime",
- "expires",
- "expiryDate",
- "explicitOriginalTarget",
- "expm1",
- "exponent",
- "exponentialRampToValueAtTime",
- "exportKey",
- "exports",
- "extend",
- "extensions",
- "extentNode",
- "extentOffset",
- "external",
- "externalResourcesRequired",
- "extractContents",
- "extractable",
- "eye",
- "f",
- "face",
- "factoryReset",
- "failureReason",
- "fallback",
- "family",
- "familyName",
- "farthestViewportElement",
- "fastSeek",
- "fatal",
- "featureId",
- "featurePolicy",
- "featureSettings",
- "features",
- "fenceSync",
- "fetch",
- "fetchStart",
- "fftSize",
- "fgColor",
- "fieldOfView",
- "file",
- "fileCreatedDate",
- "fileHandle",
- "fileModifiedDate",
- "fileName",
- "fileSize",
- "fileUpdatedDate",
- "filename",
- "files",
- "filesystem",
- "fill",
- "fill-opacity",
- "fill-rule",
- "fillLightMode",
- "fillOpacity",
- "fillRect",
- "fillRule",
- "fillStyle",
- "fillText",
- "filter",
- "filterResX",
- "filterResY",
- "filterUnits",
- "filters",
- "finally",
- "find",
- "findIndex",
- "findRule",
- "findText",
- "finish",
- "finished",
- "fireEvent",
- "firesTouchEvents",
- "firstChild",
- "firstElementChild",
- "firstPage",
- "fixed",
- "flags",
- "flat",
- "flatMap",
- "flex",
- "flex-basis",
- "flex-direction",
- "flex-flow",
- "flex-grow",
- "flex-shrink",
- "flex-wrap",
- "flexBasis",
- "flexDirection",
- "flexFlow",
- "flexGrow",
- "flexShrink",
- "flexWrap",
- "flipX",
- "flipY",
- "float",
- "float32",
- "float64",
- "flood-color",
- "flood-opacity",
- "floodColor",
- "floodOpacity",
- "floor",
- "flush",
- "focus",
- "focusNode",
- "focusOffset",
- "font",
- "font-family",
- "font-feature-settings",
- "font-kerning",
- "font-language-override",
- "font-optical-sizing",
- "font-size",
- "font-size-adjust",
- "font-stretch",
- "font-style",
- "font-synthesis",
- "font-variant",
- "font-variant-alternates",
- "font-variant-caps",
- "font-variant-east-asian",
- "font-variant-ligatures",
- "font-variant-numeric",
- "font-variant-position",
- "font-variation-settings",
- "font-weight",
- "fontFamily",
- "fontFeatureSettings",
- "fontKerning",
- "fontLanguageOverride",
- "fontOpticalSizing",
- "fontSize",
- "fontSizeAdjust",
- "fontSmoothingEnabled",
- "fontStretch",
- "fontStyle",
- "fontSynthesis",
- "fontVariant",
- "fontVariantAlternates",
- "fontVariantCaps",
- "fontVariantEastAsian",
- "fontVariantLigatures",
- "fontVariantNumeric",
- "fontVariantPosition",
- "fontVariationSettings",
- "fontWeight",
- "fontcolor",
- "fontfaces",
- "fonts",
- "fontsize",
- "for",
- "forEach",
- "force",
- "forceRedraw",
- "form",
- "formAction",
- "formData",
- "formEnctype",
- "formMethod",
- "formNoValidate",
- "formTarget",
- "format",
- "formatToParts",
- "forms",
- "forward",
- "forwardX",
- "forwardY",
- "forwardZ",
- "foundation",
- "fr",
- "fragmentDirective",
- "frame",
- "frameBorder",
- "frameElement",
- "frameSpacing",
- "framebuffer",
- "framebufferHeight",
- "framebufferRenderbuffer",
- "framebufferTexture2D",
- "framebufferTextureLayer",
- "framebufferWidth",
- "frames",
- "freeSpace",
- "freeze",
- "frequency",
- "frequencyBinCount",
- "from",
- "fromCharCode",
- "fromCodePoint",
- "fromElement",
- "fromEntries",
- "fromFloat32Array",
- "fromFloat64Array",
- "fromMatrix",
- "fromPoint",
- "fromQuad",
- "fromRect",
- "frontFace",
- "fround",
- "fullPath",
- "fullScreen",
- "fullscreen",
- "fullscreenElement",
- "fullscreenEnabled",
- "fx",
- "fy",
- "gain",
- "gamepad",
- "gamma",
- "gap",
- "gatheringState",
- "gatt",
- "genderIdentity",
- "generateCertificate",
- "generateKey",
- "generateMipmap",
- "generateRequest",
- "geolocation",
- "gestureObject",
- "get",
- "getActiveAttrib",
- "getActiveUniform",
- "getActiveUniformBlockName",
- "getActiveUniformBlockParameter",
- "getActiveUniforms",
- "getAdjacentText",
- "getAll",
- "getAllKeys",
- "getAllResponseHeaders",
- "getAllowlistForFeature",
- "getAnimations",
- "getAsFile",
- "getAsString",
- "getAttachedShaders",
- "getAttribLocation",
- "getAttribute",
- "getAttributeNS",
- "getAttributeNames",
- "getAttributeNode",
- "getAttributeNodeNS",
- "getAttributeType",
- "getAudioTracks",
- "getAvailability",
- "getBBox",
- "getBattery",
- "getBigInt64",
- "getBigUint64",
- "getBlob",
- "getBookmark",
- "getBoundingClientRect",
- "getBounds",
- "getBoxQuads",
- "getBufferParameter",
- "getBufferSubData",
- "getByteFrequencyData",
- "getByteTimeDomainData",
- "getCSSCanvasContext",
- "getCTM",
- "getCandidateWindowClientRect",
- "getCanonicalLocales",
- "getCapabilities",
- "getChannelData",
- "getCharNumAtPosition",
- "getCharacteristic",
- "getCharacteristics",
- "getClientExtensionResults",
- "getClientRect",
- "getClientRects",
- "getCoalescedEvents",
- "getCompositionAlternatives",
- "getComputedStyle",
- "getComputedTextLength",
- "getComputedTiming",
- "getConfiguration",
- "getConstraints",
- "getContext",
- "getContextAttributes",
- "getContributingSources",
- "getCounterValue",
- "getCueAsHTML",
- "getCueById",
- "getCurrentPosition",
- "getCurrentTime",
- "getData",
- "getDatabaseNames",
- "getDate",
- "getDay",
- "getDefaultComputedStyle",
- "getDescriptor",
- "getDescriptors",
- "getDestinationInsertionPoints",
- "getDevices",
- "getDirectory",
- "getDisplayMedia",
- "getDistributedNodes",
- "getEditable",
- "getElementById",
- "getElementsByClassName",
- "getElementsByName",
- "getElementsByTagName",
- "getElementsByTagNameNS",
- "getEnclosureList",
- "getEndPositionOfChar",
- "getEntries",
- "getEntriesByName",
- "getEntriesByType",
- "getError",
- "getExtension",
- "getExtentOfChar",
- "getEyeParameters",
- "getFeature",
- "getFile",
- "getFiles",
- "getFilesAndDirectories",
- "getFingerprints",
- "getFloat32",
- "getFloat64",
- "getFloatFrequencyData",
- "getFloatTimeDomainData",
- "getFloatValue",
- "getFragDataLocation",
- "getFrameData",
- "getFramebufferAttachmentParameter",
- "getFrequencyResponse",
- "getFullYear",
- "getGamepads",
- "getHitTestResults",
- "getHitTestResultsForTransientInput",
- "getHours",
- "getIdentityAssertion",
- "getIds",
- "getImageData",
- "getIndexedParameter",
- "getInstalledRelatedApps",
- "getInt16",
- "getInt32",
- "getInt8",
- "getInternalformatParameter",
- "getIntersectionList",
- "getItem",
- "getItems",
- "getKey",
- "getKeyframes",
- "getLayers",
- "getLayoutMap",
- "getLineDash",
- "getLocalCandidates",
- "getLocalParameters",
- "getLocalStreams",
- "getMarks",
- "getMatchedCSSRules",
- "getMaxGCPauseSinceClear",
- "getMeasures",
- "getMetadata",
- "getMilliseconds",
- "getMinutes",
- "getModifierState",
- "getMonth",
- "getNamedItem",
- "getNamedItemNS",
- "getNativeFramebufferScaleFactor",
- "getNotifications",
- "getNotifier",
- "getNumberOfChars",
- "getOffsetReferenceSpace",
- "getOutputTimestamp",
- "getOverrideHistoryNavigationMode",
- "getOverrideStyle",
- "getOwnPropertyDescriptor",
- "getOwnPropertyDescriptors",
- "getOwnPropertyNames",
- "getOwnPropertySymbols",
- "getParameter",
- "getParameters",
- "getParent",
- "getPathSegAtLength",
- "getPhotoCapabilities",
- "getPhotoSettings",
- "getPointAtLength",
- "getPose",
- "getPredictedEvents",
- "getPreference",
- "getPreferenceDefault",
- "getPresentationAttribute",
- "getPreventDefault",
- "getPrimaryService",
- "getPrimaryServices",
- "getProgramInfoLog",
- "getProgramParameter",
- "getPropertyCSSValue",
- "getPropertyPriority",
- "getPropertyShorthand",
- "getPropertyType",
- "getPropertyValue",
- "getPrototypeOf",
- "getQuery",
- "getQueryParameter",
- "getRGBColorValue",
- "getRandomValues",
- "getRangeAt",
- "getReader",
- "getReceivers",
- "getRectValue",
- "getRegistration",
- "getRegistrations",
- "getRemoteCandidates",
- "getRemoteCertificates",
- "getRemoteParameters",
- "getRemoteStreams",
- "getRenderbufferParameter",
- "getResponseHeader",
- "getRoot",
- "getRootNode",
- "getRotationOfChar",
- "getSVGDocument",
- "getSamplerParameter",
- "getScreenCTM",
- "getSeconds",
- "getSelectedCandidatePair",
- "getSelection",
- "getSenders",
- "getService",
- "getSettings",
- "getShaderInfoLog",
- "getShaderParameter",
- "getShaderPrecisionFormat",
- "getShaderSource",
- "getSimpleDuration",
- "getSiteIcons",
- "getSources",
- "getSpeculativeParserUrls",
- "getStartPositionOfChar",
- "getStartTime",
- "getState",
- "getStats",
- "getStatusForPolicy",
- "getStorageUpdates",
- "getStreamById",
- "getStringValue",
- "getSubStringLength",
- "getSubscription",
- "getSupportedConstraints",
- "getSupportedExtensions",
- "getSupportedFormats",
- "getSyncParameter",
- "getSynchronizationSources",
- "getTags",
- "getTargetRanges",
- "getTexParameter",
- "getTime",
- "getTimezoneOffset",
- "getTiming",
- "getTotalLength",
- "getTrackById",
- "getTracks",
- "getTransceivers",
- "getTransform",
- "getTransformFeedbackVarying",
- "getTransformToElement",
- "getTransports",
- "getType",
- "getTypeMapping",
- "getUTCDate",
- "getUTCDay",
- "getUTCFullYear",
- "getUTCHours",
- "getUTCMilliseconds",
- "getUTCMinutes",
- "getUTCMonth",
- "getUTCSeconds",
- "getUint16",
- "getUint32",
- "getUint8",
- "getUniform",
- "getUniformBlockIndex",
- "getUniformIndices",
- "getUniformLocation",
- "getUserMedia",
- "getVRDisplays",
- "getValues",
- "getVarDate",
- "getVariableValue",
- "getVertexAttrib",
- "getVertexAttribOffset",
- "getVideoPlaybackQuality",
- "getVideoTracks",
- "getViewerPose",
- "getViewport",
- "getVoices",
- "getWakeLockState",
- "getWriter",
- "getYear",
- "givenName",
- "global",
- "globalAlpha",
- "globalCompositeOperation",
- "globalThis",
- "glyphOrientationHorizontal",
- "glyphOrientationVertical",
- "glyphRef",
- "go",
- "grabFrame",
- "grad",
- "gradientTransform",
- "gradientUnits",
- "grammars",
- "green",
- "grid",
- "grid-area",
- "grid-auto-columns",
- "grid-auto-flow",
- "grid-auto-rows",
- "grid-column",
- "grid-column-end",
- "grid-column-gap",
- "grid-column-start",
- "grid-gap",
- "grid-row",
- "grid-row-end",
- "grid-row-gap",
- "grid-row-start",
- "grid-template",
- "grid-template-areas",
- "grid-template-columns",
- "grid-template-rows",
- "gridArea",
- "gridAutoColumns",
- "gridAutoFlow",
- "gridAutoRows",
- "gridColumn",
- "gridColumnEnd",
- "gridColumnGap",
- "gridColumnStart",
- "gridGap",
- "gridRow",
- "gridRowEnd",
- "gridRowGap",
- "gridRowStart",
- "gridTemplate",
- "gridTemplateAreas",
- "gridTemplateColumns",
- "gridTemplateRows",
- "gripSpace",
- "group",
- "groupCollapsed",
- "groupEnd",
- "groupId",
- "hadRecentInput",
- "hand",
- "handedness",
- "hapticActuators",
- "hardwareConcurrency",
- "has",
- "hasAttribute",
- "hasAttributeNS",
- "hasAttributes",
- "hasBeenActive",
- "hasChildNodes",
- "hasComposition",
- "hasEnrolledInstrument",
- "hasExtension",
- "hasExternalDisplay",
- "hasFeature",
- "hasFocus",
- "hasInstance",
- "hasLayout",
- "hasOrientation",
- "hasOwnProperty",
- "hasPointerCapture",
- "hasPosition",
- "hasReading",
- "hasStorageAccess",
- "hash",
- "head",
- "headers",
- "heading",
- "height",
- "hidden",
- "hide",
- "hideFocus",
- "high",
- "highWaterMark",
- "hint",
- "history",
- "honorificPrefix",
- "honorificSuffix",
- "horizontalOverflow",
- "host",
- "hostCandidate",
- "hostname",
- "href",
- "hrefTranslate",
- "hreflang",
- "hspace",
- "html5TagCheckInerface",
- "htmlFor",
- "htmlText",
- "httpEquiv",
- "httpRequestStatusCode",
- "hwTimestamp",
- "hyphens",
- "hypot",
- "iccId",
- "iceConnectionState",
- "iceGatheringState",
- "iceTransport",
- "icon",
- "iconURL",
- "id",
- "identifier",
- "identity",
- "idpLoginUrl",
- "ignoreBOM",
- "ignoreCase",
- "ignoreDepthValues",
- "image-orientation",
- "image-rendering",
- "imageHeight",
- "imageOrientation",
- "imageRendering",
- "imageSizes",
- "imageSmoothingEnabled",
- "imageSmoothingQuality",
- "imageSrcset",
- "imageWidth",
- "images",
- "ime-mode",
- "imeMode",
- "implementation",
- "importKey",
- "importNode",
- "importStylesheet",
- "imports",
- "impp",
- "imul",
- "in",
- "in1",
- "in2",
- "inBandMetadataTrackDispatchType",
- "inRange",
- "includes",
- "incremental",
- "indeterminate",
- "index",
- "indexNames",
- "indexOf",
- "indexedDB",
- "indicate",
- "inertiaDestinationX",
- "inertiaDestinationY",
- "info",
- "init",
- "initAnimationEvent",
- "initBeforeLoadEvent",
- "initClipboardEvent",
- "initCloseEvent",
- "initCommandEvent",
- "initCompositionEvent",
- "initCustomEvent",
- "initData",
- "initDataType",
- "initDeviceMotionEvent",
- "initDeviceOrientationEvent",
- "initDragEvent",
- "initErrorEvent",
- "initEvent",
- "initFocusEvent",
- "initGestureEvent",
- "initHashChangeEvent",
- "initKeyEvent",
- "initKeyboardEvent",
- "initMSManipulationEvent",
- "initMessageEvent",
- "initMouseEvent",
- "initMouseScrollEvent",
- "initMouseWheelEvent",
- "initMutationEvent",
- "initNSMouseEvent",
- "initOverflowEvent",
- "initPageEvent",
- "initPageTransitionEvent",
- "initPointerEvent",
- "initPopStateEvent",
- "initProgressEvent",
- "initScrollAreaEvent",
- "initSimpleGestureEvent",
- "initStorageEvent",
- "initTextEvent",
- "initTimeEvent",
- "initTouchEvent",
- "initTransitionEvent",
- "initUIEvent",
- "initWebKitAnimationEvent",
- "initWebKitTransitionEvent",
- "initWebKitWheelEvent",
- "initWheelEvent",
- "initialTime",
- "initialize",
- "initiatorType",
- "inline-size",
- "inlineSize",
- "inlineVerticalFieldOfView",
- "inner",
- "innerHTML",
- "innerHeight",
- "innerText",
- "innerWidth",
- "input",
- "inputBuffer",
- "inputEncoding",
- "inputMethod",
- "inputMode",
- "inputSource",
- "inputSources",
- "inputType",
- "inputs",
- "insertAdjacentElement",
- "insertAdjacentHTML",
- "insertAdjacentText",
- "insertBefore",
- "insertCell",
- "insertDTMF",
- "insertData",
- "insertItemBefore",
- "insertNode",
- "insertRow",
- "insertRule",
- "inset",
- "inset-block",
- "inset-block-end",
- "inset-block-start",
- "inset-inline",
- "inset-inline-end",
- "inset-inline-start",
- "insetBlock",
- "insetBlockEnd",
- "insetBlockStart",
- "insetInline",
- "insetInlineEnd",
- "insetInlineStart",
- "installing",
- "instanceRoot",
- "instantiate",
- "instantiateStreaming",
- "instruments",
- "int16",
- "int32",
- "int8",
- "integrity",
- "interactionMode",
- "intercept",
- "interfaceClass",
- "interfaceName",
- "interfaceNumber",
- "interfaceProtocol",
- "interfaceSubclass",
- "interfaces",
- "interimResults",
- "internalSubset",
- "interpretation",
- "intersectionRatio",
- "intersectionRect",
- "intersectsNode",
- "interval",
- "invalidIteratorState",
- "invalidateFramebuffer",
- "invalidateSubFramebuffer",
- "inverse",
- "invertSelf",
- "is",
- "is2D",
- "isActive",
- "isAlternate",
- "isArray",
- "isBingCurrentSearchDefault",
- "isBuffer",
- "isCandidateWindowVisible",
- "isChar",
- "isCollapsed",
- "isComposing",
- "isConcatSpreadable",
- "isConnected",
- "isContentEditable",
- "isContentHandlerRegistered",
- "isContextLost",
- "isDefaultNamespace",
- "isDirectory",
- "isDisabled",
- "isEnabled",
- "isEqual",
- "isEqualNode",
- "isExtensible",
- "isExternalCTAP2SecurityKeySupported",
- "isFile",
- "isFinite",
- "isFramebuffer",
- "isFrozen",
- "isGenerator",
- "isHTML",
- "isHistoryNavigation",
- "isId",
- "isIdentity",
- "isInjected",
- "isInteger",
- "isIntersecting",
- "isLockFree",
- "isMap",
- "isMultiLine",
- "isNaN",
- "isOpen",
- "isPointInFill",
- "isPointInPath",
- "isPointInRange",
- "isPointInStroke",
- "isPrefAlternate",
- "isPresenting",
- "isPrimary",
- "isProgram",
- "isPropertyImplicit",
- "isProtocolHandlerRegistered",
- "isPrototypeOf",
- "isQuery",
- "isRenderbuffer",
- "isSafeInteger",
- "isSameNode",
- "isSampler",
- "isScript",
- "isScriptURL",
- "isSealed",
- "isSecureContext",
- "isSessionSupported",
- "isShader",
- "isSupported",
- "isSync",
- "isTextEdit",
- "isTexture",
- "isTransformFeedback",
- "isTrusted",
- "isTypeSupported",
- "isUserVerifyingPlatformAuthenticatorAvailable",
- "isVertexArray",
- "isView",
- "isVisible",
- "isochronousTransferIn",
- "isochronousTransferOut",
- "isolation",
- "italics",
- "item",
- "itemId",
- "itemProp",
- "itemRef",
- "itemScope",
- "itemType",
- "itemValue",
- "items",
- "iterateNext",
- "iterationComposite",
- "iterator",
- "javaEnabled",
- "jobTitle",
- "join",
- "json",
- "justify-content",
- "justify-items",
- "justify-self",
- "justifyContent",
- "justifyItems",
- "justifySelf",
- "k1",
- "k2",
- "k3",
- "k4",
- "kHz",
- "keepalive",
- "kernelMatrix",
- "kernelUnitLengthX",
- "kernelUnitLengthY",
- "kerning",
- "key",
- "keyCode",
- "keyFor",
- "keyIdentifier",
- "keyLightEnabled",
- "keyLocation",
- "keyPath",
- "keyStatuses",
- "keySystem",
- "keyText",
- "keyUsage",
- "keyboard",
- "keys",
- "keytype",
- "kind",
- "knee",
- "label",
- "labels",
- "lang",
- "language",
- "languages",
- "largeArcFlag",
- "lastChild",
- "lastElementChild",
- "lastEventId",
- "lastIndex",
- "lastIndexOf",
- "lastInputTime",
- "lastMatch",
- "lastMessageSubject",
- "lastMessageType",
- "lastModified",
- "lastModifiedDate",
- "lastPage",
- "lastParen",
- "lastState",
- "lastStyleSheetSet",
- "latitude",
- "layerX",
- "layerY",
- "layoutFlow",
- "layoutGrid",
- "layoutGridChar",
- "layoutGridLine",
- "layoutGridMode",
- "layoutGridType",
- "lbound",
- "left",
- "leftContext",
- "leftDegrees",
- "leftMargin",
- "leftProjectionMatrix",
- "leftViewMatrix",
- "length",
- "lengthAdjust",
- "lengthComputable",
- "letter-spacing",
- "letterSpacing",
- "level",
- "lighting-color",
- "lightingColor",
- "limitingConeAngle",
- "line",
- "line-break",
- "line-height",
- "lineAlign",
- "lineBreak",
- "lineCap",
- "lineDashOffset",
- "lineHeight",
- "lineJoin",
- "lineNumber",
- "lineTo",
- "lineWidth",
- "linearAcceleration",
- "linearRampToValueAtTime",
- "linearVelocity",
- "lineno",
- "lines",
- "link",
- "linkColor",
- "linkProgram",
- "links",
- "list",
- "list-style",
- "list-style-image",
- "list-style-position",
- "list-style-type",
- "listStyle",
- "listStyleImage",
- "listStylePosition",
- "listStyleType",
- "listener",
- "load",
- "loadEventEnd",
- "loadEventStart",
- "loadTime",
- "loadTimes",
- "loaded",
- "loading",
- "localDescription",
- "localName",
- "localService",
- "localStorage",
- "locale",
- "localeCompare",
- "location",
- "locationbar",
- "lock",
- "locked",
- "lockedFile",
- "locks",
- "log",
- "log10",
- "log1p",
- "log2",
- "logicalXDPI",
- "logicalYDPI",
- "longDesc",
- "longitude",
- "lookupNamespaceURI",
- "lookupPrefix",
- "loop",
- "loopEnd",
- "loopStart",
- "looping",
- "low",
- "lower",
- "lowerBound",
- "lowerOpen",
- "lowsrc",
- "m11",
- "m12",
- "m13",
- "m14",
- "m21",
- "m22",
- "m23",
- "m24",
- "m31",
- "m32",
- "m33",
- "m34",
- "m41",
- "m42",
- "m43",
- "m44",
- "makeXRCompatible",
- "manifest",
- "manufacturer",
- "manufacturerName",
- "map",
- "mapping",
- "margin",
- "margin-block",
- "margin-block-end",
- "margin-block-start",
- "margin-bottom",
- "margin-inline",
- "margin-inline-end",
- "margin-inline-start",
- "margin-left",
- "margin-right",
- "margin-top",
- "marginBlock",
- "marginBlockEnd",
- "marginBlockStart",
- "marginBottom",
- "marginHeight",
- "marginInline",
- "marginInlineEnd",
- "marginInlineStart",
- "marginLeft",
- "marginRight",
- "marginTop",
- "marginWidth",
- "mark",
- "marker",
- "marker-end",
- "marker-mid",
- "marker-offset",
- "marker-start",
- "markerEnd",
- "markerHeight",
- "markerMid",
- "markerOffset",
- "markerStart",
- "markerUnits",
- "markerWidth",
- "marks",
- "mask",
- "mask-clip",
- "mask-composite",
- "mask-image",
- "mask-mode",
- "mask-origin",
- "mask-position",
- "mask-position-x",
- "mask-position-y",
- "mask-repeat",
- "mask-size",
- "mask-type",
- "maskClip",
- "maskComposite",
- "maskContentUnits",
- "maskImage",
- "maskMode",
- "maskOrigin",
- "maskPosition",
- "maskPositionX",
- "maskPositionY",
- "maskRepeat",
- "maskSize",
- "maskType",
- "maskUnits",
- "match",
- "matchAll",
- "matchMedia",
- "matchMedium",
- "matches",
- "matrix",
- "matrixTransform",
- "max",
- "max-block-size",
- "max-height",
- "max-inline-size",
- "max-width",
- "maxActions",
- "maxAlternatives",
- "maxBlockSize",
- "maxChannelCount",
- "maxChannels",
- "maxConnectionsPerServer",
- "maxDecibels",
- "maxDistance",
- "maxHeight",
- "maxInlineSize",
- "maxLayers",
- "maxLength",
- "maxMessageSize",
- "maxPacketLifeTime",
- "maxRetransmits",
- "maxTouchPoints",
- "maxValue",
- "maxWidth",
- "measure",
- "measureText",
- "media",
- "mediaCapabilities",
- "mediaDevices",
- "mediaElement",
- "mediaGroup",
- "mediaKeys",
- "mediaSession",
- "mediaStream",
- "mediaText",
- "meetOrSlice",
- "memory",
- "menubar",
- "mergeAttributes",
- "message",
- "messageClass",
- "messageHandlers",
- "messageType",
- "metaKey",
- "metadata",
- "method",
- "methodDetails",
- "methodName",
- "mid",
- "mimeType",
- "mimeTypes",
- "min",
- "min-block-size",
- "min-height",
- "min-inline-size",
- "min-width",
- "minBlockSize",
- "minDecibels",
- "minHeight",
- "minInlineSize",
- "minLength",
- "minValue",
- "minWidth",
- "miterLimit",
- "mix-blend-mode",
- "mixBlendMode",
- "mm",
- "mode",
- "modify",
- "mount",
- "move",
- "moveBy",
- "moveEnd",
- "moveFirst",
- "moveFocusDown",
- "moveFocusLeft",
- "moveFocusRight",
- "moveFocusUp",
- "moveNext",
- "moveRow",
- "moveStart",
- "moveTo",
- "moveToBookmark",
- "moveToElementText",
- "moveToPoint",
- "movementX",
- "movementY",
- "mozAdd",
- "mozAnimationStartTime",
- "mozAnon",
- "mozApps",
- "mozAudioCaptured",
- "mozAudioChannelType",
- "mozAutoplayEnabled",
- "mozCancelAnimationFrame",
- "mozCancelFullScreen",
- "mozCancelRequestAnimationFrame",
- "mozCaptureStream",
- "mozCaptureStreamUntilEnded",
- "mozClearDataAt",
- "mozContact",
- "mozContacts",
- "mozCreateFileHandle",
- "mozCurrentTransform",
- "mozCurrentTransformInverse",
- "mozCursor",
- "mozDash",
- "mozDashOffset",
- "mozDecodedFrames",
- "mozExitPointerLock",
- "mozFillRule",
- "mozFragmentEnd",
- "mozFrameDelay",
- "mozFullScreen",
- "mozFullScreenElement",
- "mozFullScreenEnabled",
- "mozGetAll",
- "mozGetAllKeys",
- "mozGetAsFile",
- "mozGetDataAt",
- "mozGetMetadata",
- "mozGetUserMedia",
- "mozHasAudio",
- "mozHasItem",
- "mozHidden",
- "mozImageSmoothingEnabled",
- "mozIndexedDB",
- "mozInnerScreenX",
- "mozInnerScreenY",
- "mozInputSource",
- "mozIsTextField",
- "mozItem",
- "mozItemCount",
- "mozItems",
- "mozLength",
- "mozLockOrientation",
- "mozMatchesSelector",
- "mozMovementX",
- "mozMovementY",
- "mozOpaque",
- "mozOrientation",
- "mozPaintCount",
- "mozPaintedFrames",
- "mozParsedFrames",
- "mozPay",
- "mozPointerLockElement",
- "mozPresentedFrames",
- "mozPreservesPitch",
- "mozPressure",
- "mozPrintCallback",
- "mozRTCIceCandidate",
- "mozRTCPeerConnection",
- "mozRTCSessionDescription",
- "mozRemove",
- "mozRequestAnimationFrame",
- "mozRequestFullScreen",
- "mozRequestPointerLock",
- "mozSetDataAt",
- "mozSetImageElement",
- "mozSourceNode",
- "mozSrcObject",
- "mozSystem",
- "mozTCPSocket",
- "mozTextStyle",
- "mozTypesAt",
- "mozUnlockOrientation",
- "mozUserCancelled",
- "mozVisibilityState",
- "ms",
- "msAnimation",
- "msAnimationDelay",
- "msAnimationDirection",
- "msAnimationDuration",
- "msAnimationFillMode",
- "msAnimationIterationCount",
- "msAnimationName",
- "msAnimationPlayState",
- "msAnimationStartTime",
- "msAnimationTimingFunction",
- "msBackfaceVisibility",
- "msBlockProgression",
- "msCSSOMElementFloatMetrics",
- "msCaching",
- "msCachingEnabled",
- "msCancelRequestAnimationFrame",
- "msCapsLockWarningOff",
- "msClearImmediate",
- "msClose",
- "msContentZoomChaining",
- "msContentZoomFactor",
- "msContentZoomLimit",
- "msContentZoomLimitMax",
- "msContentZoomLimitMin",
- "msContentZoomSnap",
- "msContentZoomSnapPoints",
- "msContentZoomSnapType",
- "msContentZooming",
- "msConvertURL",
- "msCrypto",
- "msDoNotTrack",
- "msElementsFromPoint",
- "msElementsFromRect",
- "msExitFullscreen",
- "msExtendedCode",
- "msFillRule",
- "msFirstPaint",
- "msFlex",
- "msFlexAlign",
- "msFlexDirection",
- "msFlexFlow",
- "msFlexItemAlign",
- "msFlexLinePack",
- "msFlexNegative",
- "msFlexOrder",
- "msFlexPack",
- "msFlexPositive",
- "msFlexPreferredSize",
- "msFlexWrap",
- "msFlowFrom",
- "msFlowInto",
- "msFontFeatureSettings",
- "msFullscreenElement",
- "msFullscreenEnabled",
- "msGetInputContext",
- "msGetRegionContent",
- "msGetUntransformedBounds",
- "msGraphicsTrustStatus",
- "msGridColumn",
- "msGridColumnAlign",
- "msGridColumnSpan",
- "msGridColumns",
- "msGridRow",
- "msGridRowAlign",
- "msGridRowSpan",
- "msGridRows",
- "msHidden",
- "msHighContrastAdjust",
- "msHyphenateLimitChars",
- "msHyphenateLimitLines",
- "msHyphenateLimitZone",
- "msHyphens",
- "msImageSmoothingEnabled",
- "msImeAlign",
- "msIndexedDB",
- "msInterpolationMode",
- "msIsStaticHTML",
- "msKeySystem",
- "msKeys",
- "msLaunchUri",
- "msLockOrientation",
- "msManipulationViewsEnabled",
- "msMatchMedia",
- "msMatchesSelector",
- "msMaxTouchPoints",
- "msOrientation",
- "msOverflowStyle",
- "msPerspective",
- "msPerspectiveOrigin",
- "msPlayToDisabled",
- "msPlayToPreferredSourceUri",
- "msPlayToPrimary",
- "msPointerEnabled",
- "msRegionOverflow",
- "msReleasePointerCapture",
- "msRequestAnimationFrame",
- "msRequestFullscreen",
- "msSaveBlob",
- "msSaveOrOpenBlob",
- "msScrollChaining",
- "msScrollLimit",
- "msScrollLimitXMax",
- "msScrollLimitXMin",
- "msScrollLimitYMax",
- "msScrollLimitYMin",
- "msScrollRails",
- "msScrollSnapPointsX",
- "msScrollSnapPointsY",
- "msScrollSnapType",
- "msScrollSnapX",
- "msScrollSnapY",
- "msScrollTranslation",
- "msSetImmediate",
- "msSetMediaKeys",
- "msSetPointerCapture",
- "msTextCombineHorizontal",
- "msTextSizeAdjust",
- "msToBlob",
- "msTouchAction",
- "msTouchSelect",
- "msTraceAsyncCallbackCompleted",
- "msTraceAsyncCallbackStarting",
- "msTraceAsyncOperationCompleted",
- "msTraceAsyncOperationStarting",
- "msTransform",
- "msTransformOrigin",
- "msTransformStyle",
- "msTransition",
- "msTransitionDelay",
- "msTransitionDuration",
- "msTransitionProperty",
- "msTransitionTimingFunction",
- "msUnlockOrientation",
- "msUpdateAsyncCallbackRelation",
- "msUserSelect",
- "msVisibilityState",
- "msWrapFlow",
- "msWrapMargin",
- "msWrapThrough",
- "msWriteProfilerMark",
- "msZoom",
- "msZoomTo",
- "mt",
- "mul",
- "multiEntry",
- "multiSelectionObj",
- "multiline",
- "multiple",
- "multiply",
- "multiplySelf",
- "mutableFile",
- "muted",
- "n",
- "name",
- "nameProp",
- "namedItem",
- "namedRecordset",
- "names",
- "namespaceURI",
- "namespaces",
- "naturalHeight",
- "naturalWidth",
- "navigate",
- "navigation",
- "navigationMode",
- "navigationPreload",
- "navigationStart",
- "navigator",
- "near",
- "nearestViewportElement",
- "negative",
- "negotiated",
- "netscape",
- "networkState",
- "newScale",
- "newTranslate",
- "newURL",
- "newValue",
- "newValueSpecifiedUnits",
- "newVersion",
- "newhome",
- "next",
- "nextElementSibling",
- "nextHopProtocol",
- "nextNode",
- "nextPage",
- "nextSibling",
- "nickname",
- "noHref",
- "noModule",
- "noResize",
- "noShade",
- "noValidate",
- "noWrap",
- "node",
- "nodeName",
- "nodeType",
- "nodeValue",
- "nonce",
- "normalize",
- "normalizedPathSegList",
- "notationName",
- "notations",
- "note",
- "noteGrainOn",
- "noteOff",
- "noteOn",
- "notify",
- "now",
- "numOctaves",
- "number",
- "numberOfChannels",
- "numberOfInputs",
- "numberOfItems",
- "numberOfOutputs",
- "numberValue",
- "oMatchesSelector",
- "object",
- "object-fit",
- "object-position",
- "objectFit",
- "objectPosition",
- "objectStore",
- "objectStoreNames",
- "objectType",
- "observe",
- "of",
- "offscreenBuffering",
- "offset",
- "offset-anchor",
- "offset-distance",
- "offset-path",
- "offset-rotate",
- "offsetAnchor",
- "offsetDistance",
- "offsetHeight",
- "offsetLeft",
- "offsetNode",
- "offsetParent",
- "offsetPath",
- "offsetRotate",
- "offsetTop",
- "offsetWidth",
- "offsetX",
- "offsetY",
- "ok",
- "oldURL",
- "oldValue",
- "oldVersion",
- "olderShadowRoot",
- "onLine",
- "onabort",
- "onabsolutedeviceorientation",
- "onactivate",
- "onactive",
- "onaddsourcebuffer",
- "onaddstream",
- "onaddtrack",
- "onafterprint",
- "onafterscriptexecute",
- "onafterupdate",
- "onanimationcancel",
- "onanimationend",
- "onanimationiteration",
- "onanimationstart",
- "onappinstalled",
- "onaudioend",
- "onaudioprocess",
- "onaudiostart",
- "onautocomplete",
- "onautocompleteerror",
- "onauxclick",
- "onbeforeactivate",
- "onbeforecopy",
- "onbeforecut",
- "onbeforedeactivate",
- "onbeforeeditfocus",
- "onbeforeinstallprompt",
- "onbeforepaste",
- "onbeforeprint",
- "onbeforescriptexecute",
- "onbeforeunload",
- "onbeforeupdate",
- "onbeforexrselect",
- "onbegin",
- "onblocked",
- "onblur",
- "onbounce",
- "onboundary",
- "onbufferedamountlow",
- "oncached",
- "oncancel",
- "oncandidatewindowhide",
- "oncandidatewindowshow",
- "oncandidatewindowupdate",
- "oncanplay",
- "oncanplaythrough",
- "once",
- "oncellchange",
- "onchange",
- "oncharacteristicvaluechanged",
- "onchargingchange",
- "onchargingtimechange",
- "onchecking",
- "onclick",
- "onclose",
- "onclosing",
- "oncompassneedscalibration",
- "oncomplete",
- "onconnect",
- "onconnecting",
- "onconnectionavailable",
- "onconnectionstatechange",
- "oncontextmenu",
- "oncontrollerchange",
- "oncontrolselect",
- "oncopy",
- "oncuechange",
- "oncut",
- "ondataavailable",
- "ondatachannel",
- "ondatasetchanged",
- "ondatasetcomplete",
- "ondblclick",
- "ondeactivate",
- "ondevicechange",
- "ondevicelight",
- "ondevicemotion",
- "ondeviceorientation",
- "ondeviceorientationabsolute",
- "ondeviceproximity",
- "ondischargingtimechange",
- "ondisconnect",
- "ondisplay",
- "ondownloading",
- "ondrag",
- "ondragend",
- "ondragenter",
- "ondragexit",
- "ondragleave",
- "ondragover",
- "ondragstart",
- "ondrop",
- "ondurationchange",
- "onemptied",
- "onencrypted",
- "onend",
- "onended",
- "onenter",
- "onenterpictureinpicture",
- "onerror",
- "onerrorupdate",
- "onexit",
- "onfilterchange",
- "onfinish",
- "onfocus",
- "onfocusin",
- "onfocusout",
- "onformdata",
- "onfreeze",
- "onfullscreenchange",
- "onfullscreenerror",
- "ongatheringstatechange",
- "ongattserverdisconnected",
- "ongesturechange",
- "ongestureend",
- "ongesturestart",
- "ongotpointercapture",
- "onhashchange",
- "onhelp",
- "onicecandidate",
- "onicecandidateerror",
- "oniceconnectionstatechange",
- "onicegatheringstatechange",
- "oninactive",
- "oninput",
- "oninputsourceschange",
- "oninvalid",
- "onkeydown",
- "onkeypress",
- "onkeystatuseschange",
- "onkeyup",
- "onlanguagechange",
- "onlayoutcomplete",
- "onleavepictureinpicture",
- "onlevelchange",
- "onload",
- "onloadeddata",
- "onloadedmetadata",
- "onloadend",
- "onloading",
- "onloadingdone",
- "onloadingerror",
- "onloadstart",
- "onlosecapture",
- "onlostpointercapture",
- "only",
- "onmark",
- "onmessage",
- "onmessageerror",
- "onmidimessage",
- "onmousedown",
- "onmouseenter",
- "onmouseleave",
- "onmousemove",
- "onmouseout",
- "onmouseover",
- "onmouseup",
- "onmousewheel",
- "onmove",
- "onmoveend",
- "onmovestart",
- "onmozfullscreenchange",
- "onmozfullscreenerror",
- "onmozorientationchange",
- "onmozpointerlockchange",
- "onmozpointerlockerror",
- "onmscontentzoom",
- "onmsfullscreenchange",
- "onmsfullscreenerror",
- "onmsgesturechange",
- "onmsgesturedoubletap",
- "onmsgestureend",
- "onmsgesturehold",
- "onmsgesturestart",
- "onmsgesturetap",
- "onmsgotpointercapture",
- "onmsinertiastart",
- "onmslostpointercapture",
- "onmsmanipulationstatechanged",
- "onmsneedkey",
- "onmsorientationchange",
- "onmspointercancel",
- "onmspointerdown",
- "onmspointerenter",
- "onmspointerhover",
- "onmspointerleave",
- "onmspointermove",
- "onmspointerout",
- "onmspointerover",
- "onmspointerup",
- "onmssitemodejumplistitemremoved",
- "onmsthumbnailclick",
- "onmute",
- "onnegotiationneeded",
- "onnomatch",
- "onnoupdate",
- "onobsolete",
- "onoffline",
- "ononline",
- "onopen",
- "onorientationchange",
- "onpagechange",
- "onpagehide",
- "onpageshow",
- "onpaste",
- "onpause",
- "onpayerdetailchange",
- "onpaymentmethodchange",
- "onplay",
- "onplaying",
- "onpluginstreamstart",
- "onpointercancel",
- "onpointerdown",
- "onpointerenter",
- "onpointerleave",
- "onpointerlockchange",
- "onpointerlockerror",
- "onpointermove",
- "onpointerout",
- "onpointerover",
- "onpointerrawupdate",
- "onpointerup",
- "onpopstate",
- "onprocessorerror",
- "onprogress",
- "onpropertychange",
- "onratechange",
- "onreading",
- "onreadystatechange",
- "onrejectionhandled",
- "onrelease",
- "onremove",
- "onremovesourcebuffer",
- "onremovestream",
- "onremovetrack",
- "onrepeat",
- "onreset",
- "onresize",
- "onresizeend",
- "onresizestart",
- "onresourcetimingbufferfull",
- "onresult",
- "onresume",
- "onrowenter",
- "onrowexit",
- "onrowsdelete",
- "onrowsinserted",
- "onscroll",
- "onsearch",
- "onsecuritypolicyviolation",
- "onseeked",
- "onseeking",
- "onselect",
- "onselectedcandidatepairchange",
- "onselectend",
- "onselectionchange",
- "onselectstart",
- "onshippingaddresschange",
- "onshippingoptionchange",
- "onshow",
- "onsignalingstatechange",
- "onsoundend",
- "onsoundstart",
- "onsourceclose",
- "onsourceclosed",
- "onsourceended",
- "onsourceopen",
- "onspeechend",
- "onspeechstart",
- "onsqueeze",
- "onsqueezeend",
- "onsqueezestart",
- "onstalled",
- "onstart",
- "onstatechange",
- "onstop",
- "onstorage",
- "onstoragecommit",
- "onsubmit",
- "onsuccess",
- "onsuspend",
- "onterminate",
- "ontextinput",
- "ontimeout",
- "ontimeupdate",
- "ontoggle",
- "ontonechange",
- "ontouchcancel",
- "ontouchend",
- "ontouchmove",
- "ontouchstart",
- "ontrack",
- "ontransitioncancel",
- "ontransitionend",
- "ontransitionrun",
- "ontransitionstart",
- "onunhandledrejection",
- "onunload",
- "onunmute",
- "onupdate",
- "onupdateend",
- "onupdatefound",
- "onupdateready",
- "onupdatestart",
- "onupgradeneeded",
- "onuserproximity",
- "onversionchange",
- "onvisibilitychange",
- "onvoiceschanged",
- "onvolumechange",
- "onvrdisplayactivate",
- "onvrdisplayconnect",
- "onvrdisplaydeactivate",
- "onvrdisplaydisconnect",
- "onvrdisplaypresentchange",
- "onwaiting",
- "onwaitingforkey",
- "onwarning",
- "onwebkitanimationend",
- "onwebkitanimationiteration",
- "onwebkitanimationstart",
- "onwebkitcurrentplaybacktargetiswirelesschanged",
- "onwebkitfullscreenchange",
- "onwebkitfullscreenerror",
- "onwebkitkeyadded",
- "onwebkitkeyerror",
- "onwebkitkeymessage",
- "onwebkitneedkey",
- "onwebkitorientationchange",
- "onwebkitplaybacktargetavailabilitychanged",
- "onwebkitpointerlockchange",
- "onwebkitpointerlockerror",
- "onwebkitresourcetimingbufferfull",
- "onwebkittransitionend",
- "onwheel",
- "onzoom",
- "opacity",
- "open",
- "openCursor",
- "openDatabase",
- "openKeyCursor",
- "opened",
- "opener",
- "opera",
- "operationType",
- "operator",
- "opr",
- "optimum",
- "options",
- "or",
- "order",
- "orderX",
- "orderY",
- "ordered",
- "org",
- "organization",
- "orient",
- "orientAngle",
- "orientType",
- "orientation",
- "orientationX",
- "orientationY",
- "orientationZ",
- "origin",
- "originalPolicy",
- "originalTarget",
- "orphans",
- "oscpu",
- "outerHTML",
- "outerHeight",
- "outerText",
- "outerWidth",
- "outline",
- "outline-color",
- "outline-offset",
- "outline-style",
- "outline-width",
- "outlineColor",
- "outlineOffset",
- "outlineStyle",
- "outlineWidth",
- "outputBuffer",
- "outputLatency",
- "outputs",
- "overflow",
- "overflow-anchor",
- "overflow-block",
- "overflow-inline",
- "overflow-wrap",
- "overflow-x",
- "overflow-y",
- "overflowAnchor",
- "overflowBlock",
- "overflowInline",
- "overflowWrap",
- "overflowX",
- "overflowY",
- "overrideMimeType",
- "oversample",
- "overscroll-behavior",
- "overscroll-behavior-block",
- "overscroll-behavior-inline",
- "overscroll-behavior-x",
- "overscroll-behavior-y",
- "overscrollBehavior",
- "overscrollBehaviorBlock",
- "overscrollBehaviorInline",
- "overscrollBehaviorX",
- "overscrollBehaviorY",
- "ownKeys",
- "ownerDocument",
- "ownerElement",
- "ownerNode",
- "ownerRule",
- "ownerSVGElement",
- "owningElement",
- "p1",
- "p2",
- "p3",
- "p4",
- "packetSize",
- "packets",
- "pad",
- "padEnd",
- "padStart",
- "padding",
- "padding-block",
- "padding-block-end",
- "padding-block-start",
- "padding-bottom",
- "padding-inline",
- "padding-inline-end",
- "padding-inline-start",
- "padding-left",
- "padding-right",
- "padding-top",
- "paddingBlock",
- "paddingBlockEnd",
- "paddingBlockStart",
- "paddingBottom",
- "paddingInline",
- "paddingInlineEnd",
- "paddingInlineStart",
- "paddingLeft",
- "paddingRight",
- "paddingTop",
- "page",
- "page-break-after",
- "page-break-before",
- "page-break-inside",
- "pageBreakAfter",
- "pageBreakBefore",
- "pageBreakInside",
- "pageCount",
- "pageLeft",
- "pageTop",
- "pageX",
- "pageXOffset",
- "pageY",
- "pageYOffset",
- "pages",
- "paint-order",
- "paintOrder",
- "paintRequests",
- "paintType",
- "paintWorklet",
- "palette",
- "pan",
- "panningModel",
- "parameters",
- "parent",
- "parentElement",
- "parentNode",
- "parentRule",
- "parentStyleSheet",
- "parentTextEdit",
- "parentWindow",
- "parse",
- "parseAll",
- "parseFloat",
- "parseFromString",
- "parseInt",
- "part",
- "participants",
- "passive",
- "password",
- "pasteHTML",
- "path",
- "pathLength",
- "pathSegList",
- "pathSegType",
- "pathSegTypeAsLetter",
- "pathname",
- "pattern",
- "patternContentUnits",
- "patternMismatch",
- "patternTransform",
- "patternUnits",
- "pause",
- "pauseAnimations",
- "pauseOnExit",
- "pauseProfilers",
- "pauseTransformFeedback",
- "paused",
- "payerEmail",
- "payerName",
- "payerPhone",
- "paymentManager",
- "pc",
- "peerIdentity",
- "pending",
- "pendingLocalDescription",
- "pendingRemoteDescription",
- "percent",
- "performance",
- "periodicSync",
- "permission",
- "permissionState",
- "permissions",
- "persist",
- "persisted",
- "personalbar",
- "perspective",
- "perspective-origin",
- "perspectiveOrigin",
- "phone",
- "phoneticFamilyName",
- "phoneticGivenName",
- "photo",
- "pictureInPictureElement",
- "pictureInPictureEnabled",
- "pictureInPictureWindow",
- "ping",
- "pipeThrough",
- "pipeTo",
- "pitch",
- "pixelBottom",
- "pixelDepth",
- "pixelHeight",
- "pixelLeft",
- "pixelRight",
- "pixelStorei",
- "pixelTop",
- "pixelUnitToMillimeterX",
- "pixelUnitToMillimeterY",
- "pixelWidth",
- "place-content",
- "place-items",
- "place-self",
- "placeContent",
- "placeItems",
- "placeSelf",
- "placeholder",
- "platform",
- "platforms",
- "play",
- "playEffect",
- "playState",
- "playbackRate",
- "playbackState",
- "playbackTime",
- "played",
- "playoutDelayHint",
- "playsInline",
- "plugins",
- "pluginspage",
- "pname",
- "pointer-events",
- "pointerBeforeReferenceNode",
- "pointerEnabled",
- "pointerEvents",
- "pointerId",
- "pointerLockElement",
- "pointerType",
- "points",
- "pointsAtX",
- "pointsAtY",
- "pointsAtZ",
- "polygonOffset",
- "pop",
- "populateMatrix",
- "popupWindowFeatures",
- "popupWindowName",
- "popupWindowURI",
- "port",
- "port1",
- "port2",
- "ports",
- "posBottom",
- "posHeight",
- "posLeft",
- "posRight",
- "posTop",
- "posWidth",
- "pose",
- "position",
- "positionAlign",
- "positionX",
- "positionY",
- "positionZ",
- "postError",
- "postMessage",
- "postalCode",
- "poster",
- "pow",
- "powerEfficient",
- "powerOff",
- "preMultiplySelf",
- "precision",
- "preferredStyleSheetSet",
- "preferredStylesheetSet",
- "prefix",
- "preload",
- "prepend",
- "presentation",
- "preserveAlpha",
- "preserveAspectRatio",
- "preserveAspectRatioString",
- "pressed",
- "pressure",
- "prevValue",
- "preventDefault",
- "preventExtensions",
- "preventSilentAccess",
- "previousElementSibling",
- "previousNode",
- "previousPage",
- "previousRect",
- "previousScale",
- "previousSibling",
- "previousTranslate",
- "primaryKey",
- "primitiveType",
- "primitiveUnits",
- "principals",
- "print",
- "priority",
- "privateKey",
- "probablySupportsContext",
- "process",
- "processIceMessage",
- "processingEnd",
- "processingStart",
- "product",
- "productId",
- "productName",
- "productSub",
- "profile",
- "profileEnd",
- "profiles",
- "projectionMatrix",
- "promise",
- "prompt",
- "properties",
- "propertyIsEnumerable",
- "propertyName",
- "protocol",
- "protocolLong",
- "prototype",
- "provider",
- "pseudoClass",
- "pseudoElement",
- "pt",
- "publicId",
- "publicKey",
- "published",
- "pulse",
- "push",
- "pushManager",
- "pushNotification",
- "pushState",
- "put",
- "putImageData",
- "px",
- "quadraticCurveTo",
- "qualifier",
- "quaternion",
- "query",
- "queryCommandEnabled",
- "queryCommandIndeterm",
- "queryCommandState",
- "queryCommandSupported",
- "queryCommandText",
- "queryCommandValue",
- "querySelector",
- "querySelectorAll",
- "queueMicrotask",
- "quote",
- "quotes",
- "r",
- "r1",
- "r2",
- "race",
- "rad",
- "radiogroup",
- "radiusX",
- "radiusY",
- "random",
- "range",
- "rangeCount",
- "rangeMax",
- "rangeMin",
- "rangeOffset",
- "rangeOverflow",
- "rangeParent",
- "rangeUnderflow",
- "rate",
- "ratio",
- "raw",
- "rawId",
- "read",
- "readAsArrayBuffer",
- "readAsBinaryString",
- "readAsBlob",
- "readAsDataURL",
- "readAsText",
- "readBuffer",
- "readEntries",
- "readOnly",
- "readPixels",
- "readReportRequested",
- "readText",
- "readValue",
- "readable",
- "ready",
- "readyState",
- "reason",
- "reboot",
- "receivedAlert",
- "receiver",
- "receivers",
- "recipient",
- "reconnect",
- "recordNumber",
- "recordsAvailable",
- "recordset",
- "rect",
- "red",
- "redEyeReduction",
- "redirect",
- "redirectCount",
- "redirectEnd",
- "redirectStart",
- "redirected",
- "reduce",
- "reduceRight",
- "reduction",
- "refDistance",
- "refX",
- "refY",
- "referenceNode",
- "referenceSpace",
- "referrer",
- "referrerPolicy",
- "refresh",
- "region",
- "regionAnchorX",
- "regionAnchorY",
- "regionId",
- "regions",
- "register",
- "registerContentHandler",
- "registerElement",
- "registerProperty",
- "registerProtocolHandler",
- "reject",
- "rel",
- "relList",
- "relatedAddress",
- "relatedNode",
- "relatedPort",
- "relatedTarget",
- "release",
- "releaseCapture",
- "releaseEvents",
- "releaseInterface",
- "releaseLock",
- "releasePointerCapture",
- "releaseShaderCompiler",
- "reliable",
- "reliableWrite",
- "reload",
- "rem",
- "remainingSpace",
- "remote",
- "remoteDescription",
- "remove",
- "removeAllRanges",
- "removeAttribute",
- "removeAttributeNS",
- "removeAttributeNode",
- "removeBehavior",
- "removeChild",
- "removeCue",
- "removeEventListener",
- "removeFilter",
- "removeImport",
- "removeItem",
- "removeListener",
- "removeNamedItem",
- "removeNamedItemNS",
- "removeNode",
- "removeParameter",
- "removeProperty",
- "removeRange",
- "removeRegion",
- "removeRule",
- "removeSiteSpecificTrackingException",
- "removeSourceBuffer",
- "removeStream",
- "removeTrack",
- "removeVariable",
- "removeWakeLockListener",
- "removeWebWideTrackingException",
- "removed",
- "removedNodes",
- "renderHeight",
- "renderState",
- "renderTime",
- "renderWidth",
- "renderbufferStorage",
- "renderbufferStorageMultisample",
- "renderedBuffer",
- "renderingMode",
- "renotify",
- "repeat",
- "replace",
- "replaceAdjacentText",
- "replaceAll",
- "replaceChild",
- "replaceChildren",
- "replaceData",
- "replaceId",
- "replaceItem",
- "replaceNode",
- "replaceState",
- "replaceSync",
- "replaceTrack",
- "replaceWholeText",
- "replaceWith",
- "reportValidity",
- "request",
- "requestAnimationFrame",
- "requestAutocomplete",
- "requestData",
- "requestDevice",
- "requestFrame",
- "requestFullscreen",
- "requestHitTestSource",
- "requestHitTestSourceForTransientInput",
- "requestId",
- "requestIdleCallback",
- "requestMIDIAccess",
- "requestMediaKeySystemAccess",
- "requestPermission",
- "requestPictureInPicture",
- "requestPointerLock",
- "requestPresent",
- "requestReferenceSpace",
- "requestSession",
- "requestStart",
- "requestStorageAccess",
- "requestSubmit",
- "requestVideoFrameCallback",
- "requestingWindow",
- "requireInteraction",
- "required",
- "requiredExtensions",
- "requiredFeatures",
- "reset",
- "resetPose",
- "resetTransform",
- "resize",
- "resizeBy",
- "resizeTo",
- "resolve",
- "response",
- "responseBody",
- "responseEnd",
- "responseReady",
- "responseStart",
- "responseText",
- "responseType",
- "responseURL",
- "responseXML",
- "restartIce",
- "restore",
- "result",
- "resultIndex",
- "resultType",
- "results",
- "resume",
- "resumeProfilers",
- "resumeTransformFeedback",
- "retry",
- "returnValue",
- "rev",
- "reverse",
- "reversed",
- "revocable",
- "revokeObjectURL",
- "rgbColor",
- "right",
- "rightContext",
- "rightDegrees",
- "rightMargin",
- "rightProjectionMatrix",
- "rightViewMatrix",
- "role",
- "rolloffFactor",
- "root",
- "rootBounds",
- "rootElement",
- "rootMargin",
- "rotate",
- "rotateAxisAngle",
- "rotateAxisAngleSelf",
- "rotateFromVector",
- "rotateFromVectorSelf",
- "rotateSelf",
- "rotation",
- "rotationAngle",
- "rotationRate",
- "round",
- "row-gap",
- "rowGap",
- "rowIndex",
- "rowSpan",
- "rows",
- "rtcpTransport",
- "rtt",
- "ruby-align",
- "ruby-position",
- "rubyAlign",
- "rubyOverhang",
- "rubyPosition",
- "rules",
- "runtime",
- "runtimeStyle",
- "rx",
- "ry",
- "s",
- "safari",
- "sample",
- "sampleCoverage",
- "sampleRate",
- "samplerParameterf",
- "samplerParameteri",
- "sandbox",
- "save",
- "saveData",
- "scale",
- "scale3d",
- "scale3dSelf",
- "scaleNonUniform",
- "scaleNonUniformSelf",
- "scaleSelf",
- "scheme",
- "scissor",
- "scope",
- "scopeName",
- "scoped",
- "screen",
- "screenBrightness",
- "screenEnabled",
- "screenLeft",
- "screenPixelToMillimeterX",
- "screenPixelToMillimeterY",
- "screenTop",
- "screenX",
- "screenY",
- "scriptURL",
- "scripts",
- "scroll",
- "scroll-behavior",
- "scroll-margin",
- "scroll-margin-block",
- "scroll-margin-block-end",
- "scroll-margin-block-start",
- "scroll-margin-bottom",
- "scroll-margin-inline",
- "scroll-margin-inline-end",
- "scroll-margin-inline-start",
- "scroll-margin-left",
- "scroll-margin-right",
- "scroll-margin-top",
- "scroll-padding",
- "scroll-padding-block",
- "scroll-padding-block-end",
- "scroll-padding-block-start",
- "scroll-padding-bottom",
- "scroll-padding-inline",
- "scroll-padding-inline-end",
- "scroll-padding-inline-start",
- "scroll-padding-left",
- "scroll-padding-right",
- "scroll-padding-top",
- "scroll-snap-align",
- "scroll-snap-type",
- "scrollAmount",
- "scrollBehavior",
- "scrollBy",
- "scrollByLines",
- "scrollByPages",
- "scrollDelay",
- "scrollHeight",
- "scrollIntoView",
- "scrollIntoViewIfNeeded",
- "scrollLeft",
- "scrollLeftMax",
- "scrollMargin",
- "scrollMarginBlock",
- "scrollMarginBlockEnd",
- "scrollMarginBlockStart",
- "scrollMarginBottom",
- "scrollMarginInline",
- "scrollMarginInlineEnd",
- "scrollMarginInlineStart",
- "scrollMarginLeft",
- "scrollMarginRight",
- "scrollMarginTop",
- "scrollMaxX",
- "scrollMaxY",
- "scrollPadding",
- "scrollPaddingBlock",
- "scrollPaddingBlockEnd",
- "scrollPaddingBlockStart",
- "scrollPaddingBottom",
- "scrollPaddingInline",
- "scrollPaddingInlineEnd",
- "scrollPaddingInlineStart",
- "scrollPaddingLeft",
- "scrollPaddingRight",
- "scrollPaddingTop",
- "scrollRestoration",
- "scrollSnapAlign",
- "scrollSnapType",
- "scrollTo",
- "scrollTop",
- "scrollTopMax",
- "scrollWidth",
- "scrollX",
- "scrollY",
- "scrollbar-color",
- "scrollbar-width",
- "scrollbar3dLightColor",
- "scrollbarArrowColor",
- "scrollbarBaseColor",
- "scrollbarColor",
- "scrollbarDarkShadowColor",
- "scrollbarFaceColor",
- "scrollbarHighlightColor",
- "scrollbarShadowColor",
- "scrollbarTrackColor",
- "scrollbarWidth",
- "scrollbars",
- "scrolling",
- "scrollingElement",
- "sctp",
- "sctpCauseCode",
- "sdp",
- "sdpLineNumber",
- "sdpMLineIndex",
- "sdpMid",
- "seal",
- "search",
- "searchBox",
- "searchBoxJavaBridge_",
- "searchParams",
- "sectionRowIndex",
- "secureConnectionStart",
- "security",
- "seed",
- "seekToNextFrame",
- "seekable",
- "seeking",
- "select",
- "selectAllChildren",
- "selectAlternateInterface",
- "selectConfiguration",
- "selectNode",
- "selectNodeContents",
- "selectNodes",
- "selectSingleNode",
- "selectSubString",
- "selected",
- "selectedIndex",
- "selectedOptions",
- "selectedStyleSheetSet",
- "selectedStylesheetSet",
- "selection",
- "selectionDirection",
- "selectionEnd",
- "selectionStart",
- "selector",
- "selectorText",
- "self",
- "send",
- "sendAsBinary",
- "sendBeacon",
- "sender",
- "sentAlert",
- "sentTimestamp",
- "separator",
- "serialNumber",
- "serializeToString",
- "serverTiming",
- "service",
- "serviceWorker",
- "session",
- "sessionId",
- "sessionStorage",
- "set",
- "setActionHandler",
- "setActive",
- "setAlpha",
- "setAppBadge",
- "setAttribute",
- "setAttributeNS",
- "setAttributeNode",
- "setAttributeNodeNS",
- "setBaseAndExtent",
- "setBigInt64",
- "setBigUint64",
- "setBingCurrentSearchDefault",
- "setCapture",
- "setCodecPreferences",
- "setColor",
- "setCompositeOperation",
- "setConfiguration",
- "setCurrentTime",
- "setCustomValidity",
- "setData",
- "setDate",
- "setDragImage",
- "setEnd",
- "setEndAfter",
- "setEndBefore",
- "setEndPoint",
- "setFillColor",
- "setFilterRes",
- "setFloat32",
- "setFloat64",
- "setFloatValue",
- "setFormValue",
- "setFullYear",
- "setHeaderValue",
- "setHours",
- "setIdentityProvider",
- "setImmediate",
- "setInt16",
- "setInt32",
- "setInt8",
- "setInterval",
- "setItem",
- "setKeyframes",
- "setLineCap",
- "setLineDash",
- "setLineJoin",
- "setLineWidth",
- "setLiveSeekableRange",
- "setLocalDescription",
- "setMatrix",
- "setMatrixValue",
- "setMediaKeys",
- "setMilliseconds",
- "setMinutes",
- "setMiterLimit",
- "setMonth",
- "setNamedItem",
- "setNamedItemNS",
- "setNonUserCodeExceptions",
- "setOrientToAngle",
- "setOrientToAuto",
- "setOrientation",
- "setOverrideHistoryNavigationMode",
- "setPaint",
- "setParameter",
- "setParameters",
- "setPeriodicWave",
- "setPointerCapture",
- "setPosition",
- "setPositionState",
- "setPreference",
- "setProperty",
- "setPrototypeOf",
- "setRGBColor",
- "setRGBColorICCColor",
- "setRadius",
- "setRangeText",
- "setRemoteDescription",
- "setRequestHeader",
- "setResizable",
- "setResourceTimingBufferSize",
- "setRotate",
- "setScale",
- "setSeconds",
- "setSelectionRange",
- "setServerCertificate",
- "setShadow",
- "setSinkId",
- "setSkewX",
- "setSkewY",
- "setStart",
- "setStartAfter",
- "setStartBefore",
- "setStdDeviation",
- "setStreams",
- "setStringValue",
- "setStrokeColor",
- "setSuggestResult",
- "setTargetAtTime",
- "setTargetValueAtTime",
- "setTime",
- "setTimeout",
- "setTransform",
- "setTranslate",
- "setUTCDate",
- "setUTCFullYear",
- "setUTCHours",
- "setUTCMilliseconds",
- "setUTCMinutes",
- "setUTCMonth",
- "setUTCSeconds",
- "setUint16",
- "setUint32",
- "setUint8",
- "setUri",
- "setValidity",
- "setValueAtTime",
- "setValueCurveAtTime",
- "setVariable",
- "setVelocity",
- "setVersion",
- "setYear",
- "settingName",
- "settingValue",
- "sex",
- "shaderSource",
- "shadowBlur",
- "shadowColor",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowRoot",
- "shape",
- "shape-image-threshold",
- "shape-margin",
- "shape-outside",
- "shape-rendering",
- "shapeImageThreshold",
- "shapeMargin",
- "shapeOutside",
- "shapeRendering",
- "sheet",
- "shift",
- "shiftKey",
- "shiftLeft",
- "shippingAddress",
- "shippingOption",
- "shippingType",
- "show",
- "showHelp",
- "showModal",
- "showModalDialog",
- "showModelessDialog",
- "showNotification",
- "sidebar",
- "sign",
- "signal",
- "signalingState",
- "signature",
- "silent",
- "sin",
- "singleNodeValue",
- "sinh",
- "sinkId",
- "sittingToStandingTransform",
- "size",
- "sizeToContent",
- "sizeX",
- "sizeZ",
- "sizes",
- "skewX",
- "skewXSelf",
- "skewY",
- "skewYSelf",
- "slice",
- "slope",
- "slot",
- "small",
- "smil",
- "smooth",
- "smoothingTimeConstant",
- "snapToLines",
- "snapshotItem",
- "snapshotLength",
- "some",
- "sort",
- "sortingCode",
- "source",
- "sourceBuffer",
- "sourceBuffers",
- "sourceCapabilities",
- "sourceFile",
- "sourceIndex",
- "sources",
- "spacing",
- "span",
- "speak",
- "speakAs",
- "speaking",
- "species",
- "specified",
- "specularConstant",
- "specularExponent",
- "speechSynthesis",
- "speed",
- "speedOfSound",
- "spellcheck",
- "splice",
- "split",
- "splitText",
- "spreadMethod",
- "sqrt",
- "src",
- "srcElement",
- "srcFilter",
- "srcObject",
- "srcUrn",
- "srcdoc",
- "srclang",
- "srcset",
- "stack",
- "stackTraceLimit",
- "stacktrace",
- "stageParameters",
- "standalone",
- "standby",
- "start",
- "startContainer",
- "startIce",
- "startMessages",
- "startNotifications",
- "startOffset",
- "startProfiling",
- "startRendering",
- "startShark",
- "startTime",
- "startsWith",
- "state",
- "status",
- "statusCode",
- "statusMessage",
- "statusText",
- "statusbar",
- "stdDeviationX",
- "stdDeviationY",
- "stencilFunc",
- "stencilFuncSeparate",
- "stencilMask",
- "stencilMaskSeparate",
- "stencilOp",
- "stencilOpSeparate",
- "step",
- "stepDown",
- "stepMismatch",
- "stepUp",
- "sticky",
- "stitchTiles",
- "stop",
- "stop-color",
- "stop-opacity",
- "stopColor",
- "stopImmediatePropagation",
- "stopNotifications",
- "stopOpacity",
- "stopProfiling",
- "stopPropagation",
- "stopShark",
- "stopped",
- "storage",
- "storageArea",
- "storageName",
- "storageStatus",
- "store",
- "storeSiteSpecificTrackingException",
- "storeWebWideTrackingException",
- "stpVersion",
- "stream",
- "streams",
- "stretch",
- "strike",
- "string",
- "stringValue",
- "stringify",
- "stroke",
- "stroke-dasharray",
- "stroke-dashoffset",
- "stroke-linecap",
- "stroke-linejoin",
- "stroke-miterlimit",
- "stroke-opacity",
- "stroke-width",
- "strokeDasharray",
- "strokeDashoffset",
- "strokeLinecap",
- "strokeLinejoin",
- "strokeMiterlimit",
- "strokeOpacity",
- "strokeRect",
- "strokeStyle",
- "strokeText",
- "strokeWidth",
- "style",
- "styleFloat",
- "styleMap",
- "styleMedia",
- "styleSheet",
- "styleSheetSets",
- "styleSheets",
- "sub",
- "subarray",
- "subject",
- "submit",
- "submitFrame",
- "submitter",
- "subscribe",
- "substr",
- "substring",
- "substringData",
- "subtle",
- "subtree",
- "suffix",
- "suffixes",
- "summary",
- "sup",
- "supported",
- "supportedContentEncodings",
- "supportedEntryTypes",
- "supports",
- "supportsSession",
- "surfaceScale",
- "surroundContents",
- "suspend",
- "suspendRedraw",
- "swapCache",
- "swapNode",
- "sweepFlag",
- "symbols",
- "sync",
- "sysexEnabled",
- "system",
- "systemCode",
- "systemId",
- "systemLanguage",
- "systemXDPI",
- "systemYDPI",
- "tBodies",
- "tFoot",
- "tHead",
- "tabIndex",
- "table",
- "table-layout",
- "tableLayout",
- "tableValues",
- "tag",
- "tagName",
- "tagUrn",
- "tags",
- "taintEnabled",
- "takePhoto",
- "takeRecords",
- "tan",
- "tangentialPressure",
- "tanh",
- "target",
- "targetElement",
- "targetRayMode",
- "targetRaySpace",
- "targetTouches",
- "targetX",
- "targetY",
- "tcpType",
- "tee",
- "tel",
- "terminate",
- "test",
- "texImage2D",
- "texImage3D",
- "texParameterf",
- "texParameteri",
- "texStorage2D",
- "texStorage3D",
- "texSubImage2D",
- "texSubImage3D",
- "text",
- "text-align",
- "text-align-last",
- "text-anchor",
- "text-combine-upright",
- "text-decoration",
- "text-decoration-color",
- "text-decoration-line",
- "text-decoration-skip-ink",
- "text-decoration-style",
- "text-decoration-thickness",
- "text-emphasis",
- "text-emphasis-color",
- "text-emphasis-position",
- "text-emphasis-style",
- "text-indent",
- "text-justify",
- "text-orientation",
- "text-overflow",
- "text-rendering",
- "text-shadow",
- "text-transform",
- "text-underline-offset",
- "text-underline-position",
- "textAlign",
- "textAlignLast",
- "textAnchor",
- "textAutospace",
- "textBaseline",
- "textCombineUpright",
- "textContent",
- "textDecoration",
- "textDecorationBlink",
- "textDecorationColor",
- "textDecorationLine",
- "textDecorationLineThrough",
- "textDecorationNone",
- "textDecorationOverline",
- "textDecorationSkipInk",
- "textDecorationStyle",
- "textDecorationThickness",
- "textDecorationUnderline",
- "textEmphasis",
- "textEmphasisColor",
- "textEmphasisPosition",
- "textEmphasisStyle",
- "textIndent",
- "textJustify",
- "textJustifyTrim",
- "textKashida",
- "textKashidaSpace",
- "textLength",
- "textOrientation",
- "textOverflow",
- "textRendering",
- "textShadow",
- "textTracks",
- "textTransform",
- "textUnderlineOffset",
- "textUnderlinePosition",
- "then",
- "threadId",
- "threshold",
- "thresholds",
- "tiltX",
- "tiltY",
- "time",
- "timeEnd",
- "timeLog",
- "timeOrigin",
- "timeRemaining",
- "timeStamp",
- "timecode",
- "timeline",
- "timelineTime",
- "timeout",
- "timestamp",
- "timestampOffset",
- "timing",
- "title",
- "to",
- "toArray",
- "toBlob",
- "toDataURL",
- "toDateString",
- "toElement",
- "toExponential",
- "toFixed",
- "toFloat32Array",
- "toFloat64Array",
- "toGMTString",
- "toISOString",
- "toJSON",
- "toLocaleDateString",
- "toLocaleFormat",
- "toLocaleLowerCase",
- "toLocaleString",
- "toLocaleTimeString",
- "toLocaleUpperCase",
- "toLowerCase",
- "toMatrix",
- "toMethod",
- "toPrecision",
- "toPrimitive",
- "toSdp",
- "toSource",
- "toStaticHTML",
- "toString",
- "toStringTag",
- "toSum",
- "toTimeString",
- "toUTCString",
- "toUpperCase",
- "toggle",
- "toggleAttribute",
- "toggleLongPressEnabled",
- "tone",
- "toneBuffer",
- "tooLong",
- "tooShort",
- "toolbar",
- "top",
- "topMargin",
- "total",
- "totalFrameDelay",
- "totalVideoFrames",
- "touch-action",
- "touchAction",
- "touched",
- "touches",
- "trace",
- "track",
- "trackVisibility",
- "transaction",
- "transactions",
- "transceiver",
- "transferControlToOffscreen",
- "transferFromImageBitmap",
- "transferImageBitmap",
- "transferIn",
- "transferOut",
- "transferSize",
- "transferToImageBitmap",
- "transform",
- "transform-box",
- "transform-origin",
- "transform-style",
- "transformBox",
- "transformFeedbackVaryings",
- "transformOrigin",
- "transformPoint",
- "transformString",
- "transformStyle",
- "transformToDocument",
- "transformToFragment",
- "transition",
- "transition-delay",
- "transition-duration",
- "transition-property",
- "transition-timing-function",
- "transitionDelay",
- "transitionDuration",
- "transitionProperty",
- "transitionTimingFunction",
- "translate",
- "translateSelf",
- "translationX",
- "translationY",
- "transport",
- "trim",
- "trimEnd",
- "trimLeft",
- "trimRight",
- "trimStart",
- "trueSpeed",
- "trunc",
- "truncate",
- "trustedTypes",
- "turn",
- "twist",
- "type",
- "typeDetail",
- "typeMismatch",
- "typeMustMatch",
- "types",
- "u2f",
- "ubound",
- "uint16",
- "uint32",
- "uint8",
- "uint8Clamped",
- "undefined",
- "unescape",
- "uneval",
- "unicode",
- "unicode-bidi",
- "unicodeBidi",
- "unicodeRange",
- "uniform1f",
- "uniform1fv",
- "uniform1i",
- "uniform1iv",
- "uniform1ui",
- "uniform1uiv",
- "uniform2f",
- "uniform2fv",
- "uniform2i",
- "uniform2iv",
- "uniform2ui",
- "uniform2uiv",
- "uniform3f",
- "uniform3fv",
- "uniform3i",
- "uniform3iv",
- "uniform3ui",
- "uniform3uiv",
- "uniform4f",
- "uniform4fv",
- "uniform4i",
- "uniform4iv",
- "uniform4ui",
- "uniform4uiv",
- "uniformBlockBinding",
- "uniformMatrix2fv",
- "uniformMatrix2x3fv",
- "uniformMatrix2x4fv",
- "uniformMatrix3fv",
- "uniformMatrix3x2fv",
- "uniformMatrix3x4fv",
- "uniformMatrix4fv",
- "uniformMatrix4x2fv",
- "uniformMatrix4x3fv",
- "unique",
- "uniqueID",
- "uniqueNumber",
- "unit",
- "unitType",
- "units",
- "unloadEventEnd",
- "unloadEventStart",
- "unlock",
- "unmount",
- "unobserve",
- "unpause",
- "unpauseAnimations",
- "unreadCount",
- "unregister",
- "unregisterContentHandler",
- "unregisterProtocolHandler",
- "unscopables",
- "unselectable",
- "unshift",
- "unsubscribe",
- "unsuspendRedraw",
- "unsuspendRedrawAll",
- "unwatch",
- "unwrapKey",
- "upDegrees",
- "upX",
- "upY",
- "upZ",
- "update",
- "updateCommands",
- "updateIce",
- "updateInterval",
- "updatePlaybackRate",
- "updateRenderState",
- "updateSettings",
- "updateTiming",
- "updateViaCache",
- "updateWith",
- "updated",
- "updating",
- "upgrade",
- "upload",
- "uploadTotal",
- "uploaded",
- "upper",
- "upperBound",
- "upperOpen",
- "uri",
- "url",
- "urn",
- "urns",
- "usages",
- "usb",
- "usbVersionMajor",
- "usbVersionMinor",
- "usbVersionSubminor",
- "useCurrentView",
- "useMap",
- "useProgram",
- "usedSpace",
- "user-select",
- "userActivation",
- "userAgent",
- "userChoice",
- "userHandle",
- "userHint",
- "userLanguage",
- "userSelect",
- "userVisibleOnly",
- "username",
- "usernameFragment",
- "utterance",
- "uuid",
- "v8BreakIterator",
- "vAlign",
- "vLink",
- "valid",
- "validate",
- "validateProgram",
- "validationMessage",
- "validity",
- "value",
- "valueAsDate",
- "valueAsNumber",
- "valueAsString",
- "valueInSpecifiedUnits",
- "valueMissing",
- "valueOf",
- "valueText",
- "valueType",
- "values",
- "variable",
- "variant",
- "variationSettings",
- "vector-effect",
- "vectorEffect",
- "velocityAngular",
- "velocityExpansion",
- "velocityX",
- "velocityY",
- "vendor",
- "vendorId",
- "vendorSub",
- "verify",
- "version",
- "vertexAttrib1f",
- "vertexAttrib1fv",
- "vertexAttrib2f",
- "vertexAttrib2fv",
- "vertexAttrib3f",
- "vertexAttrib3fv",
- "vertexAttrib4f",
- "vertexAttrib4fv",
- "vertexAttribDivisor",
- "vertexAttribDivisorANGLE",
- "vertexAttribI4i",
- "vertexAttribI4iv",
- "vertexAttribI4ui",
- "vertexAttribI4uiv",
- "vertexAttribIPointer",
- "vertexAttribPointer",
- "vertical",
- "vertical-align",
- "verticalAlign",
- "verticalOverflow",
- "vh",
- "vibrate",
- "vibrationActuator",
- "videoBitsPerSecond",
- "videoHeight",
- "videoTracks",
- "videoWidth",
- "view",
- "viewBox",
- "viewBoxString",
- "viewTarget",
- "viewTargetString",
- "viewport",
- "viewportAnchorX",
- "viewportAnchorY",
- "viewportElement",
- "views",
- "violatedDirective",
- "visibility",
- "visibilityState",
- "visible",
- "visualViewport",
- "vlinkColor",
- "vmax",
- "vmin",
- "voice",
- "voiceURI",
- "volume",
- "vrml",
- "vspace",
- "vw",
- "w",
- "wait",
- "waitSync",
- "waiting",
- "wake",
- "wakeLock",
- "wand",
- "warn",
- "wasClean",
- "wasDiscarded",
- "watch",
- "watchAvailability",
- "watchPosition",
- "webdriver",
- "webkitAddKey",
- "webkitAlignContent",
- "webkitAlignItems",
- "webkitAlignSelf",
- "webkitAnimation",
- "webkitAnimationDelay",
- "webkitAnimationDirection",
- "webkitAnimationDuration",
- "webkitAnimationFillMode",
- "webkitAnimationIterationCount",
- "webkitAnimationName",
- "webkitAnimationPlayState",
- "webkitAnimationTimingFunction",
- "webkitAppearance",
- "webkitAudioContext",
- "webkitAudioDecodedByteCount",
- "webkitAudioPannerNode",
- "webkitBackfaceVisibility",
- "webkitBackground",
- "webkitBackgroundAttachment",
- "webkitBackgroundClip",
- "webkitBackgroundColor",
- "webkitBackgroundImage",
- "webkitBackgroundOrigin",
- "webkitBackgroundPosition",
- "webkitBackgroundPositionX",
- "webkitBackgroundPositionY",
- "webkitBackgroundRepeat",
- "webkitBackgroundSize",
- "webkitBackingStorePixelRatio",
- "webkitBorderBottomLeftRadius",
- "webkitBorderBottomRightRadius",
- "webkitBorderImage",
- "webkitBorderImageOutset",
- "webkitBorderImageRepeat",
- "webkitBorderImageSlice",
- "webkitBorderImageSource",
- "webkitBorderImageWidth",
- "webkitBorderRadius",
- "webkitBorderTopLeftRadius",
- "webkitBorderTopRightRadius",
- "webkitBoxAlign",
- "webkitBoxDirection",
- "webkitBoxFlex",
- "webkitBoxOrdinalGroup",
- "webkitBoxOrient",
- "webkitBoxPack",
- "webkitBoxShadow",
- "webkitBoxSizing",
- "webkitCancelAnimationFrame",
- "webkitCancelFullScreen",
- "webkitCancelKeyRequest",
- "webkitCancelRequestAnimationFrame",
- "webkitClearResourceTimings",
- "webkitClosedCaptionsVisible",
- "webkitConvertPointFromNodeToPage",
- "webkitConvertPointFromPageToNode",
- "webkitCreateShadowRoot",
- "webkitCurrentFullScreenElement",
- "webkitCurrentPlaybackTargetIsWireless",
- "webkitDecodedFrameCount",
- "webkitDirectionInvertedFromDevice",
- "webkitDisplayingFullscreen",
- "webkitDroppedFrameCount",
- "webkitEnterFullScreen",
- "webkitEnterFullscreen",
- "webkitEntries",
- "webkitExitFullScreen",
- "webkitExitFullscreen",
- "webkitExitPointerLock",
- "webkitFilter",
- "webkitFlex",
- "webkitFlexBasis",
- "webkitFlexDirection",
- "webkitFlexFlow",
- "webkitFlexGrow",
- "webkitFlexShrink",
- "webkitFlexWrap",
- "webkitFullScreenKeyboardInputAllowed",
- "webkitFullscreenElement",
- "webkitFullscreenEnabled",
- "webkitGenerateKeyRequest",
- "webkitGetAsEntry",
- "webkitGetDatabaseNames",
- "webkitGetEntries",
- "webkitGetEntriesByName",
- "webkitGetEntriesByType",
- "webkitGetFlowByName",
- "webkitGetGamepads",
- "webkitGetImageDataHD",
- "webkitGetNamedFlows",
- "webkitGetRegionFlowRanges",
- "webkitGetUserMedia",
- "webkitHasClosedCaptions",
- "webkitHidden",
- "webkitIDBCursor",
- "webkitIDBDatabase",
- "webkitIDBDatabaseError",
- "webkitIDBDatabaseException",
- "webkitIDBFactory",
- "webkitIDBIndex",
- "webkitIDBKeyRange",
- "webkitIDBObjectStore",
- "webkitIDBRequest",
- "webkitIDBTransaction",
- "webkitImageSmoothingEnabled",
- "webkitIndexedDB",
- "webkitInitMessageEvent",
- "webkitIsFullScreen",
- "webkitJustifyContent",
- "webkitKeys",
- "webkitLineClamp",
- "webkitLineDashOffset",
- "webkitLockOrientation",
- "webkitMask",
- "webkitMaskClip",
- "webkitMaskComposite",
- "webkitMaskImage",
- "webkitMaskOrigin",
- "webkitMaskPosition",
- "webkitMaskPositionX",
- "webkitMaskPositionY",
- "webkitMaskRepeat",
- "webkitMaskSize",
- "webkitMatchesSelector",
- "webkitMediaStream",
- "webkitNotifications",
- "webkitOfflineAudioContext",
- "webkitOrder",
- "webkitOrientation",
- "webkitPeerConnection00",
- "webkitPersistentStorage",
- "webkitPerspective",
- "webkitPerspectiveOrigin",
- "webkitPointerLockElement",
- "webkitPostMessage",
- "webkitPreservesPitch",
- "webkitPutImageDataHD",
- "webkitRTCPeerConnection",
- "webkitRegionOverset",
- "webkitRelativePath",
- "webkitRequestAnimationFrame",
- "webkitRequestFileSystem",
- "webkitRequestFullScreen",
- "webkitRequestFullscreen",
- "webkitRequestPointerLock",
- "webkitResolveLocalFileSystemURL",
- "webkitSetMediaKeys",
- "webkitSetResourceTimingBufferSize",
- "webkitShadowRoot",
- "webkitShowPlaybackTargetPicker",
- "webkitSlice",
- "webkitSpeechGrammar",
- "webkitSpeechGrammarList",
- "webkitSpeechRecognition",
- "webkitSpeechRecognitionError",
- "webkitSpeechRecognitionEvent",
- "webkitStorageInfo",
- "webkitSupportsFullscreen",
- "webkitTemporaryStorage",
- "webkitTextFillColor",
- "webkitTextSizeAdjust",
- "webkitTextStroke",
- "webkitTextStrokeColor",
- "webkitTextStrokeWidth",
- "webkitTransform",
- "webkitTransformOrigin",
- "webkitTransformStyle",
- "webkitTransition",
- "webkitTransitionDelay",
- "webkitTransitionDuration",
- "webkitTransitionProperty",
- "webkitTransitionTimingFunction",
- "webkitURL",
- "webkitUnlockOrientation",
- "webkitUserSelect",
- "webkitVideoDecodedByteCount",
- "webkitVisibilityState",
- "webkitWirelessVideoPlaybackDisabled",
- "webkitdirectory",
- "webkitdropzone",
- "webstore",
- "weight",
- "whatToShow",
- "wheelDelta",
- "wheelDeltaX",
- "wheelDeltaY",
- "whenDefined",
- "which",
- "white-space",
- "whiteSpace",
- "wholeText",
- "widows",
- "width",
- "will-change",
- "willChange",
- "willValidate",
- "window",
- "withCredentials",
- "word-break",
- "word-spacing",
- "word-wrap",
- "wordBreak",
- "wordSpacing",
- "wordWrap",
- "workerStart",
- "wrap",
- "wrapKey",
- "writable",
- "writableAuxiliaries",
- "write",
- "writeText",
- "writeValue",
- "writeWithoutResponse",
- "writeln",
- "writing-mode",
- "writingMode",
- "x",
- "x1",
- "x2",
- "xChannelSelector",
- "xmlEncoding",
- "xmlStandalone",
- "xmlVersion",
- "xmlbase",
- "xmllang",
- "xmlspace",
- "xor",
- "xr",
- "y",
- "y1",
- "y2",
- "yChannelSelector",
- "yandex",
- "z",
- "z-index",
- "zIndex",
- "zoom",
- "zoomAndPan",
- "zoomRectScreen",
-];
-
-/***********************************************************************
-
- A JavaScript tokenizer / parser / beautifier / compressor.
- https://github.com/mishoo/UglifyJS2
-
- -------------------------------- (C) ---------------------------------
-
- Author: Mihai Bazon
- <mihai.bazon@gmail.com>
- http://mihai.bazon.net/blog
-
- Distributed under the BSD license:
-
- Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- ***********************************************************************/
-
-function find_builtins(reserved) {
- domprops.forEach(add);
-
- // Compatibility fix for some standard defined globals not defined on every js environment
- var new_globals = ["Symbol", "Map", "Promise", "Proxy", "Reflect", "Set", "WeakMap", "WeakSet"];
- var objects = {};
- var global_ref = typeof commonjsGlobal === "object" ? commonjsGlobal : self;
-
- new_globals.forEach(function (new_global) {
- objects[new_global] = global_ref[new_global] || new Function();
- });
-
- [
- "null",
- "true",
- "false",
- "NaN",
- "Infinity",
- "-Infinity",
- "undefined",
- ].forEach(add);
- [ Object, Array, Function, Number,
- String, Boolean, Error, Math,
- Date, RegExp, objects.Symbol, ArrayBuffer,
- DataView, decodeURI, decodeURIComponent,
- encodeURI, encodeURIComponent, eval, EvalError,
- Float32Array, Float64Array, Int8Array, Int16Array,
- Int32Array, isFinite, isNaN, JSON, objects.Map, parseFloat,
- parseInt, objects.Promise, objects.Proxy, RangeError, ReferenceError,
- objects.Reflect, objects.Set, SyntaxError, TypeError, Uint8Array,
- Uint8ClampedArray, Uint16Array, Uint32Array, URIError,
- objects.WeakMap, objects.WeakSet
- ].forEach(function(ctor) {
- Object.getOwnPropertyNames(ctor).map(add);
- if (ctor.prototype) {
- Object.getOwnPropertyNames(ctor.prototype).map(add);
- }
- });
- function add(name) {
- reserved.add(name);
- }
-}
-
-function reserve_quoted_keys(ast, reserved) {
- function add(name) {
- push_uniq(reserved, name);
- }
-
- ast.walk(new TreeWalker(function(node) {
- if (node instanceof AST_ObjectKeyVal && node.quote) {
- add(node.key);
- } else if (node instanceof AST_ObjectProperty && node.quote) {
- add(node.key.name);
- } else if (node instanceof AST_Sub) {
- addStrings(node.property, add);
- }
- }));
-}
-
-function addStrings(node, add) {
- node.walk(new TreeWalker(function(node) {
- if (node instanceof AST_Sequence) {
- addStrings(node.tail_node(), add);
- } else if (node instanceof AST_String) {
- add(node.value);
- } else if (node instanceof AST_Conditional) {
- addStrings(node.consequent, add);
- addStrings(node.alternative, add);
- }
- return true;
- }));
-}
-
-function mangle_private_properties(ast, options) {
- var cprivate = -1;
- var private_cache = new Map();
- var nth_identifier = options.nth_identifier || base54;
-
- ast = ast.transform(new TreeTransformer(function(node) {
- if (
- node instanceof AST_ClassPrivateProperty
- || node instanceof AST_PrivateMethod
- || node instanceof AST_PrivateGetter
- || node instanceof AST_PrivateSetter
- ) {
- node.key.name = mangle_private(node.key.name);
- } else if (node instanceof AST_DotHash) {
- node.property = mangle_private(node.property);
- }
- }));
- return ast;
-
- function mangle_private(name) {
- let mangled = private_cache.get(name);
- if (!mangled) {
- mangled = nth_identifier.get(++cprivate);
- private_cache.set(name, mangled);
- }
-
- return mangled;
- }
-}
-
-function mangle_properties(ast, options) {
- options = defaults(options, {
- builtins: false,
- cache: null,
- debug: false,
- keep_quoted: false,
- nth_identifier: base54,
- only_cache: false,
- regex: null,
- reserved: null,
- undeclared: false,
- }, true);
-
- var nth_identifier = options.nth_identifier;
-
- var reserved_option = options.reserved;
- if (!Array.isArray(reserved_option)) reserved_option = [reserved_option];
- var reserved = new Set(reserved_option);
- if (!options.builtins) find_builtins(reserved);
-
- var cname = -1;
-
- var cache;
- if (options.cache) {
- cache = options.cache.props;
- } else {
- cache = new Map();
- }
-
- var regex = options.regex && new RegExp(options.regex);
-
- // note debug is either false (disabled), or a string of the debug suffix to use (enabled).
- // note debug may be enabled as an empty string, which is falsey. Also treat passing 'true'
- // the same as passing an empty string.
- var debug = options.debug !== false;
- var debug_name_suffix;
- if (debug) {
- debug_name_suffix = (options.debug === true ? "" : options.debug);
- }
-
- var names_to_mangle = new Set();
- var unmangleable = new Set();
- // Track each already-mangled name to prevent nth_identifier from generating
- // the same name.
- cache.forEach((mangled_name) => unmangleable.add(mangled_name));
-
- var keep_quoted = !!options.keep_quoted;
-
- // step 1: find candidates to mangle
- ast.walk(new TreeWalker(function(node) {
- if (
- node instanceof AST_ClassPrivateProperty
- || node instanceof AST_PrivateMethod
- || node instanceof AST_PrivateGetter
- || node instanceof AST_PrivateSetter
- || node instanceof AST_DotHash
- ) ; else if (node instanceof AST_ObjectKeyVal) {
- if (typeof node.key == "string" && (!keep_quoted || !node.quote)) {
- add(node.key);
- }
- } else if (node instanceof AST_ObjectProperty) {
- // setter or getter, since KeyVal is handled above
- if (!keep_quoted || !node.quote) {
- add(node.key.name);
- }
- } else if (node instanceof AST_Dot) {
- var declared = !!options.undeclared;
- if (!declared) {
- var root = node;
- while (root.expression) {
- root = root.expression;
- }
- declared = !(root.thedef && root.thedef.undeclared);
- }
- if (declared &&
- (!keep_quoted || !node.quote)) {
- add(node.property);
- }
- } else if (node instanceof AST_Sub) {
- if (!keep_quoted) {
- addStrings(node.property, add);
- }
- } else if (node instanceof AST_Call
- && node.expression.print_to_string() == "Object.defineProperty") {
- addStrings(node.args[1], add);
- } else if (node instanceof AST_Binary && node.operator === "in") {
- addStrings(node.left, add);
- }
- }));
-
- // step 2: transform the tree, renaming properties
- return ast.transform(new TreeTransformer(function(node) {
- if (
- node instanceof AST_ClassPrivateProperty
- || node instanceof AST_PrivateMethod
- || node instanceof AST_PrivateGetter
- || node instanceof AST_PrivateSetter
- || node instanceof AST_DotHash
- ) ; else if (node instanceof AST_ObjectKeyVal) {
- if (typeof node.key == "string" && (!keep_quoted || !node.quote)) {
- node.key = mangle(node.key);
- }
- } else if (node instanceof AST_ObjectProperty) {
- // setter, getter, method or class field
- if (!keep_quoted || !node.quote) {
- node.key.name = mangle(node.key.name);
- }
- } else if (node instanceof AST_Dot) {
- if (!keep_quoted || !node.quote) {
- node.property = mangle(node.property);
- }
- } else if (!keep_quoted && node instanceof AST_Sub) {
- node.property = mangleStrings(node.property);
- } else if (node instanceof AST_Call
- && node.expression.print_to_string() == "Object.defineProperty") {
- node.args[1] = mangleStrings(node.args[1]);
- } else if (node instanceof AST_Binary && node.operator === "in") {
- node.left = mangleStrings(node.left);
- }
- }));
-
- // only function declarations after this line
-
- function can_mangle(name) {
- if (unmangleable.has(name)) return false;
- if (reserved.has(name)) return false;
- if (options.only_cache) {
- return cache.has(name);
- }
- if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false;
- return true;
- }
-
- function should_mangle(name) {
- if (regex && !regex.test(name)) return false;
- if (reserved.has(name)) return false;
- return cache.has(name)
- || names_to_mangle.has(name);
- }
-
- function add(name) {
- if (can_mangle(name))
- names_to_mangle.add(name);
-
- if (!should_mangle(name)) {
- unmangleable.add(name);
- }
- }
-
- function mangle(name) {
- if (!should_mangle(name)) {
- return name;
- }
-
- var mangled = cache.get(name);
- if (!mangled) {
- if (debug) {
- // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_.
- var debug_mangled = "_$" + name + "$" + debug_name_suffix + "_";
-
- if (can_mangle(debug_mangled)) {
- mangled = debug_mangled;
- }
- }
-
- // either debug mode is off, or it is on and we could not use the mangled name
- if (!mangled) {
- do {
- mangled = nth_identifier.get(++cname);
- } while (!can_mangle(mangled));
- }
-
- cache.set(name, mangled);
- }
- return mangled;
- }
-
- function mangleStrings(node) {
- return node.transform(new TreeTransformer(function(node) {
- if (node instanceof AST_Sequence) {
- var last = node.expressions.length - 1;
- node.expressions[last] = mangleStrings(node.expressions[last]);
- } else if (node instanceof AST_String) {
- node.value = mangle(node.value);
- } else if (node instanceof AST_Conditional) {
- node.consequent = mangleStrings(node.consequent);
- node.alternative = mangleStrings(node.alternative);
- }
- return node;
- }));
- }
-}
-
-var to_ascii = typeof atob == "undefined" ? function(b64) {
- return Buffer.from(b64, "base64").toString();
-} : atob;
-var to_base64 = typeof btoa == "undefined" ? function(str) {
- return Buffer.from(str).toString("base64");
-} : btoa;
-
-function read_source_map(code) {
- var match = /(?:^|[^.])\/\/# sourceMappingURL=data:application\/json(;[\w=-]*)?;base64,([+/0-9A-Za-z]*=*)\s*$/.exec(code);
- if (!match) {
- console.warn("inline source map not found");
- return null;
- }
- return to_ascii(match[2]);
-}
-
-function set_shorthand(name, options, keys) {
- if (options[name]) {
- keys.forEach(function(key) {
- if (options[key]) {
- if (typeof options[key] != "object") options[key] = {};
- if (!(name in options[key])) options[key][name] = options[name];
- }
- });
- }
-}
-
-function init_cache(cache) {
- if (!cache) return;
- if (!("props" in cache)) {
- cache.props = new Map();
- } else if (!(cache.props instanceof Map)) {
- cache.props = map_from_object(cache.props);
- }
-}
-
-function cache_to_json(cache) {
- return {
- props: map_to_object(cache.props)
- };
-}
-
-async function minify(files, options) {
- options = defaults(options, {
- compress: {},
- ecma: undefined,
- enclose: false,
- ie8: false,
- keep_classnames: undefined,
- keep_fnames: false,
- mangle: {},
- module: false,
- nameCache: null,
- output: null,
- format: null,
- parse: {},
- rename: undefined,
- safari10: false,
- sourceMap: false,
- spidermonkey: false,
- timings: false,
- toplevel: false,
- warnings: false,
- wrap: false,
- }, true);
- var timings = options.timings && {
- start: Date.now()
- };
- if (options.keep_classnames === undefined) {
- options.keep_classnames = options.keep_fnames;
- }
- if (options.rename === undefined) {
- options.rename = options.compress && options.mangle;
- }
- if (options.output && options.format) {
- throw new Error("Please only specify either output or format option, preferrably format.");
- }
- options.format = options.format || options.output || {};
- set_shorthand("ecma", options, [ "parse", "compress", "format" ]);
- set_shorthand("ie8", options, [ "compress", "mangle", "format" ]);
- set_shorthand("keep_classnames", options, [ "compress", "mangle" ]);
- set_shorthand("keep_fnames", options, [ "compress", "mangle" ]);
- set_shorthand("module", options, [ "parse", "compress", "mangle" ]);
- set_shorthand("safari10", options, [ "mangle", "format" ]);
- set_shorthand("toplevel", options, [ "compress", "mangle" ]);
- set_shorthand("warnings", options, [ "compress" ]); // legacy
- var quoted_props;
- if (options.mangle) {
- options.mangle = defaults(options.mangle, {
- cache: options.nameCache && (options.nameCache.vars || {}),
- eval: false,
- ie8: false,
- keep_classnames: false,
- keep_fnames: false,
- module: false,
- nth_identifier: base54,
- properties: false,
- reserved: [],
- safari10: false,
- toplevel: false,
- }, true);
- if (options.mangle.properties) {
- if (typeof options.mangle.properties != "object") {
- options.mangle.properties = {};
- }
- if (options.mangle.properties.keep_quoted) {
- quoted_props = options.mangle.properties.reserved;
- if (!Array.isArray(quoted_props)) quoted_props = [];
- options.mangle.properties.reserved = quoted_props;
- }
- if (options.nameCache && !("cache" in options.mangle.properties)) {
- options.mangle.properties.cache = options.nameCache.props || {};
- }
- }
- init_cache(options.mangle.cache);
- init_cache(options.mangle.properties.cache);
- }
- if (options.sourceMap) {
- options.sourceMap = defaults(options.sourceMap, {
- asObject: false,
- content: null,
- filename: null,
- includeSources: false,
- root: null,
- url: null,
- }, true);
- }
- if (timings) timings.parse = Date.now();
- var toplevel;
- if (files instanceof AST_Toplevel) {
- toplevel = files;
- } else {
- if (typeof files == "string" || (options.parse.spidermonkey && !Array.isArray(files))) {
- files = [ files ];
- }
- options.parse = options.parse || {};
- options.parse.toplevel = null;
-
- if (options.parse.spidermonkey) {
- options.parse.toplevel = AST_Node.from_mozilla_ast(Object.keys(files).reduce(function(toplevel, name) {
- if (!toplevel) return files[name];
- toplevel.body = toplevel.body.concat(files[name].body);
- return toplevel;
- }, null));
- } else {
- delete options.parse.spidermonkey;
-
- for (var name in files) if (HOP(files, name)) {
- options.parse.filename = name;
- options.parse.toplevel = parse(files[name], options.parse);
- if (options.sourceMap && options.sourceMap.content == "inline") {
- if (Object.keys(files).length > 1)
- throw new Error("inline source map only works with singular input");
- options.sourceMap.content = read_source_map(files[name]);
- }
- }
- }
-
- toplevel = options.parse.toplevel;
- }
- if (quoted_props && options.mangle.properties.keep_quoted !== "strict") {
- reserve_quoted_keys(toplevel, quoted_props);
- }
- if (options.wrap) {
- toplevel = toplevel.wrap_commonjs(options.wrap);
- }
- if (options.enclose) {
- toplevel = toplevel.wrap_enclose(options.enclose);
- }
- if (timings) timings.rename = Date.now();
- if (timings) timings.compress = Date.now();
- if (options.compress) {
- toplevel = new Compressor(options.compress, {
- mangle_options: options.mangle
- }).compress(toplevel);
- }
- if (timings) timings.scope = Date.now();
- if (options.mangle) toplevel.figure_out_scope(options.mangle);
- if (timings) timings.mangle = Date.now();
- if (options.mangle) {
- toplevel.compute_char_frequency(options.mangle);
- toplevel.mangle_names(options.mangle);
- toplevel = mangle_private_properties(toplevel, options.mangle);
- }
- if (timings) timings.properties = Date.now();
- if (options.mangle && options.mangle.properties) {
- toplevel = mangle_properties(toplevel, options.mangle.properties);
- }
- if (timings) timings.format = Date.now();
- var result = {};
- if (options.format.ast) {
- result.ast = toplevel;
- }
- if (options.format.spidermonkey) {
- result.ast = toplevel.to_mozilla_ast();
- }
- if (!HOP(options.format, "code") || options.format.code) {
- if (options.sourceMap) {
- options.format.source_map = await SourceMap({
- file: options.sourceMap.filename,
- orig: options.sourceMap.content,
- root: options.sourceMap.root
- });
- if (options.sourceMap.includeSources) {
- if (files instanceof AST_Toplevel) {
- throw new Error("original source content unavailable");
- } else for (var name in files) if (HOP(files, name)) {
- options.format.source_map.get().setSourceContent(name, files[name]);
- }
- }
- }
- delete options.format.ast;
- delete options.format.code;
- delete options.format.spidermonkey;
- var stream = OutputStream(options.format);
- toplevel.print(stream);
- result.code = stream.get();
- if (options.sourceMap) {
- if(options.sourceMap.asObject) {
- result.map = options.format.source_map.get().toJSON();
- } else {
- result.map = options.format.source_map.toString();
- }
- if (options.sourceMap.url == "inline") {
- var sourceMap = typeof result.map === "object" ? JSON.stringify(result.map) : result.map;
- result.code += "\n//# sourceMappingURL=data:application/json;charset=utf-8;base64," + to_base64(sourceMap);
- } else if (options.sourceMap.url) {
- result.code += "\n//# sourceMappingURL=" + options.sourceMap.url;
- }
- }
- }
- if (options.nameCache && options.mangle) {
- if (options.mangle.cache) options.nameCache.vars = cache_to_json(options.mangle.cache);
- if (options.mangle.properties && options.mangle.properties.cache) {
- options.nameCache.props = cache_to_json(options.mangle.properties.cache);
- }
- }
- if (options.format && options.format.source_map) {
- options.format.source_map.destroy();
- }
- if (timings) {
- timings.end = Date.now();
- result.timings = {
- parse: 1e-3 * (timings.rename - timings.parse),
- rename: 1e-3 * (timings.compress - timings.rename),
- compress: 1e-3 * (timings.scope - timings.compress),
- scope: 1e-3 * (timings.mangle - timings.scope),
- mangle: 1e-3 * (timings.properties - timings.mangle),
- properties: 1e-3 * (timings.format - timings.properties),
- format: 1e-3 * (timings.end - timings.format),
- total: 1e-3 * (timings.end - timings.start)
- };
- }
- return result;
-}
-
-async function run_cli({ program, packageJson, fs, path }) {
- const skip_keys = new Set([ "cname", "parent_scope", "scope", "uses_eval", "uses_with" ]);
- var files = {};
- var options = {
- compress: false,
- mangle: false
- };
- const default_options = await _default_options();
- program.version(packageJson.name + " " + packageJson.version);
- program.parseArgv = program.parse;
- program.parse = undefined;
-
- if (process.argv.includes("ast")) program.helpInformation = describe_ast;
- else if (process.argv.includes("options")) program.helpInformation = function() {
- var text = [];
- for (var option in default_options) {
- text.push("--" + (option === "sourceMap" ? "source-map" : option) + " options:");
- text.push(format_object(default_options[option]));
- text.push("");
- }
- return text.join("\n");
- };
-
- program.option("-p, --parse <options>", "Specify parser options.", parse_js());
- program.option("-c, --compress [options]", "Enable compressor/specify compressor options.", parse_js());
- program.option("-m, --mangle [options]", "Mangle names/specify mangler options.", parse_js());
- program.option("--mangle-props [options]", "Mangle properties/specify mangler options.", parse_js());
- program.option("-f, --format [options]", "Format options.", parse_js());
- program.option("-b, --beautify [options]", "Alias for --format.", parse_js());
- program.option("-o, --output <file>", "Output file (default STDOUT).");
- program.option("--comments [filter]", "Preserve copyright comments in the output.");
- program.option("--config-file <file>", "Read minify() options from JSON file.");
- program.option("-d, --define <expr>[=value]", "Global definitions.", parse_js("define"));
- program.option("--ecma <version>", "Specify ECMAScript release: 5, 2015, 2016 or 2017...");
- program.option("-e, --enclose [arg[,...][:value[,...]]]", "Embed output in a big function with configurable arguments and values.");
- program.option("--ie8", "Support non-standard Internet Explorer 8.");
- program.option("--keep-classnames", "Do not mangle/drop class names.");
- program.option("--keep-fnames", "Do not mangle/drop function names. Useful for code relying on Function.prototype.name.");
- program.option("--module", "Input is an ES6 module");
- program.option("--name-cache <file>", "File to hold mangled name mappings.");
- program.option("--rename", "Force symbol expansion.");
- program.option("--no-rename", "Disable symbol expansion.");
- program.option("--safari10", "Support non-standard Safari 10.");
- program.option("--source-map [options]", "Enable source map/specify source map options.", parse_js());
- program.option("--timings", "Display operations run time on STDERR.");
- program.option("--toplevel", "Compress and/or mangle variables in toplevel scope.");
- program.option("--wrap <name>", "Embed everything as a function with “exports” corresponding to “name” globally.");
- program.arguments("[files...]").parseArgv(process.argv);
- if (program.configFile) {
- options = JSON.parse(read_file(program.configFile));
- }
- if (!program.output && program.sourceMap && program.sourceMap.url != "inline") {
- fatal("ERROR: cannot write source map to STDOUT");
- }
-
- [
- "compress",
- "enclose",
- "ie8",
- "mangle",
- "module",
- "safari10",
- "sourceMap",
- "toplevel",
- "wrap"
- ].forEach(function(name) {
- if (name in program) {
- options[name] = program[name];
- }
- });
-
- if ("ecma" in program) {
- if (program.ecma != (program.ecma | 0)) fatal("ERROR: ecma must be an integer");
- const ecma = program.ecma | 0;
- if (ecma > 5 && ecma < 2015)
- options.ecma = ecma + 2009;
- else
- options.ecma = ecma;
- }
- if (program.format || program.beautify) {
- const chosenOption = program.format || program.beautify;
- options.format = typeof chosenOption === "object" ? chosenOption : {};
- }
- if (program.comments) {
- if (typeof options.format != "object") options.format = {};
- options.format.comments = typeof program.comments == "string" ? (program.comments == "false" ? false : program.comments) : "some";
- }
- if (program.define) {
- if (typeof options.compress != "object") options.compress = {};
- if (typeof options.compress.global_defs != "object") options.compress.global_defs = {};
- for (var expr in program.define) {
- options.compress.global_defs[expr] = program.define[expr];
- }
- }
- if (program.keepClassnames) {
- options.keep_classnames = true;
- }
- if (program.keepFnames) {
- options.keep_fnames = true;
- }
- if (program.mangleProps) {
- if (program.mangleProps.domprops) {
- delete program.mangleProps.domprops;
- } else {
- if (typeof program.mangleProps != "object") program.mangleProps = {};
- if (!Array.isArray(program.mangleProps.reserved)) program.mangleProps.reserved = [];
- }
- if (typeof options.mangle != "object") options.mangle = {};
- options.mangle.properties = program.mangleProps;
- }
- if (program.nameCache) {
- options.nameCache = JSON.parse(read_file(program.nameCache, "{}"));
- }
- if (program.output == "ast") {
- options.format = {
- ast: true,
- code: false
- };
- }
- if (program.parse) {
- if (!program.parse.acorn && !program.parse.spidermonkey) {
- options.parse = program.parse;
- } else if (program.sourceMap && program.sourceMap.content == "inline") {
- fatal("ERROR: inline source map only works with built-in parser");
- }
- }
- if (~program.rawArgs.indexOf("--rename")) {
- options.rename = true;
- } else if (!program.rename) {
- options.rename = false;
- }
-
- let convert_path = name => name;
- if (typeof program.sourceMap == "object" && "base" in program.sourceMap) {
- convert_path = function() {
- var base = program.sourceMap.base;
- delete options.sourceMap.base;
- return function(name) {
- return path.relative(base, name);
- };
- }();
- }
-
- let filesList;
- if (options.files && options.files.length) {
- filesList = options.files;
-
- delete options.files;
- } else if (program.args.length) {
- filesList = program.args;
- }
-
- if (filesList) {
- simple_glob(filesList).forEach(function(name) {
- files[convert_path(name)] = read_file(name);
- });
- } else {
- await new Promise((resolve) => {
- var chunks = [];
- process.stdin.setEncoding("utf8");
- process.stdin.on("data", function(chunk) {
- chunks.push(chunk);
- }).on("end", function() {
- files = [ chunks.join("") ];
- resolve();
- });
- process.stdin.resume();
- });
- }
-
- await run_cli();
-
- function convert_ast(fn) {
- return AST_Node.from_mozilla_ast(Object.keys(files).reduce(fn, null));
- }
-
- async function run_cli() {
- var content = program.sourceMap && program.sourceMap.content;
- if (content && content !== "inline") {
- options.sourceMap.content = read_file(content, content);
- }
- if (program.timings) options.timings = true;
-
- try {
- if (program.parse) {
- if (program.parse.acorn) {
- files = convert_ast(function(toplevel, name) {
- return require("acorn").parse(files[name], {
- ecmaVersion: 2018,
- locations: true,
- program: toplevel,
- sourceFile: name,
- sourceType: options.module || program.parse.module ? "module" : "script"
- });
- });
- } else if (program.parse.spidermonkey) {
- files = convert_ast(function(toplevel, name) {
- var obj = JSON.parse(files[name]);
- if (!toplevel) return obj;
- toplevel.body = toplevel.body.concat(obj.body);
- return toplevel;
- });
- }
- }
- } catch (ex) {
- fatal(ex);
- }
-
- let result;
- try {
- result = await minify(files, options);
- } catch (ex) {
- if (ex.name == "SyntaxError") {
- print_error("Parse error at " + ex.filename + ":" + ex.line + "," + ex.col);
- var col = ex.col;
- var lines = files[ex.filename].split(/\r?\n/);
- var line = lines[ex.line - 1];
- if (!line && !col) {
- line = lines[ex.line - 2];
- col = line.length;
- }
- if (line) {
- var limit = 70;
- if (col > limit) {
- line = line.slice(col - limit);
- col = limit;
- }
- print_error(line.slice(0, 80));
- print_error(line.slice(0, col).replace(/\S/g, " ") + "^");
- }
- }
- if (ex.defs) {
- print_error("Supported options:");
- print_error(format_object(ex.defs));
- }
- fatal(ex);
- return;
- }
-
- if (program.output == "ast") {
- if (!options.compress && !options.mangle) {
- result.ast.figure_out_scope({});
- }
- console.log(JSON.stringify(result.ast, function(key, value) {
- if (value) switch (key) {
- case "thedef":
- return symdef(value);
- case "enclosed":
- return value.length ? value.map(symdef) : undefined;
- case "variables":
- case "globals":
- return value.size ? collect_from_map(value, symdef) : undefined;
- }
- if (skip_keys.has(key)) return;
- if (value instanceof AST_Token) return;
- if (value instanceof Map) return;
- if (value instanceof AST_Node) {
- var result = {
- _class: "AST_" + value.TYPE
- };
- if (value.block_scope) {
- result.variables = value.block_scope.variables;
- result.enclosed = value.block_scope.enclosed;
- }
- value.CTOR.PROPS.forEach(function(prop) {
- result[prop] = value[prop];
- });
- return result;
- }
- return value;
- }, 2));
- } else if (program.output == "spidermonkey") {
- try {
- const minified = await minify(result.code, {
- compress: false,
- mangle: false,
- format: {
- ast: true,
- code: false
- }
- });
- console.log(JSON.stringify(minified.ast.to_mozilla_ast(), null, 2));
- } catch (ex) {
- fatal(ex);
- return;
- }
- } else if (program.output) {
- fs.writeFileSync(program.output, result.code);
- if (options.sourceMap && options.sourceMap.url !== "inline" && result.map) {
- fs.writeFileSync(program.output + ".map", result.map);
- }
- } else {
- console.log(result.code);
- }
- if (program.nameCache) {
- fs.writeFileSync(program.nameCache, JSON.stringify(options.nameCache));
- }
- if (result.timings) for (var phase in result.timings) {
- print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s");
- }
- }
-
- function fatal(message) {
- if (message instanceof Error) message = message.stack.replace(/^\S*?Error:/, "ERROR:");
- print_error(message);
- process.exit(1);
- }
-
- // A file glob function that only supports "*" and "?" wildcards in the basename.
- // Example: "foo/bar/*baz??.*.js"
- // Argument `glob` may be a string or an array of strings.
- // Returns an array of strings. Garbage in, garbage out.
- function simple_glob(glob) {
- if (Array.isArray(glob)) {
- return [].concat.apply([], glob.map(simple_glob));
- }
- if (glob && glob.match(/[*?]/)) {
- var dir = path.dirname(glob);
- try {
- var entries = fs.readdirSync(dir);
- } catch (ex) {}
- if (entries) {
- var pattern = "^" + path.basename(glob)
- .replace(/[.+^$[\]\\(){}]/g, "\\$&")
- .replace(/\*/g, "[^/\\\\]*")
- .replace(/\?/g, "[^/\\\\]") + "$";
- var mod = process.platform === "win32" ? "i" : "";
- var rx = new RegExp(pattern, mod);
- var results = entries.filter(function(name) {
- return rx.test(name);
- }).map(function(name) {
- return path.join(dir, name);
- });
- if (results.length) return results;
- }
- }
- return [ glob ];
- }
-
- function read_file(path, default_value) {
- try {
- return fs.readFileSync(path, "utf8");
- } catch (ex) {
- if ((ex.code == "ENOENT" || ex.code == "ENAMETOOLONG") && default_value != null) return default_value;
- fatal(ex);
- }
- }
-
- function parse_js(flag) {
- return function(value, options) {
- options = options || {};
- try {
- walk(parse(value, { expression: true }), node => {
- if (node instanceof AST_Assign) {
- var name = node.left.print_to_string();
- var value = node.right;
- if (flag) {
- options[name] = value;
- } else if (value instanceof AST_Array) {
- options[name] = value.elements.map(to_string);
- } else if (value instanceof AST_RegExp) {
- value = value.value;
- options[name] = new RegExp(value.source, value.flags);
- } else {
- options[name] = to_string(value);
- }
- return true;
- }
- if (node instanceof AST_Symbol || node instanceof AST_PropAccess) {
- var name = node.print_to_string();
- options[name] = true;
- return true;
- }
- if (!(node instanceof AST_Sequence)) throw node;
-
- function to_string(value) {
- return value instanceof AST_Constant ? value.getValue() : value.print_to_string({
- quote_keys: true
- });
- }
- });
- } catch(ex) {
- if (flag) {
- fatal("Error parsing arguments for '" + flag + "': " + value);
- } else {
- options[value] = null;
- }
- }
- return options;
- };
- }
-
- function symdef(def) {
- var ret = (1e6 + def.id) + " " + def.name;
- if (def.mangled_name) ret += " " + def.mangled_name;
- return ret;
- }
-
- function collect_from_map(map, callback) {
- var result = [];
- map.forEach(function (def) {
- result.push(callback(def));
- });
- return result;
- }
-
- function format_object(obj) {
- var lines = [];
- var padding = "";
- Object.keys(obj).map(function(name) {
- if (padding.length < name.length) padding = Array(name.length + 1).join(" ");
- return [ name, JSON.stringify(obj[name]) ];
- }).forEach(function(tokens) {
- lines.push(" " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
- });
- return lines.join("\n");
- }
-
- function print_error(msg) {
- process.stderr.write(msg);
- process.stderr.write("\n");
- }
-
- function describe_ast() {
- var out = OutputStream({ beautify: true });
- function doitem(ctor) {
- out.print("AST_" + ctor.TYPE);
- const props = ctor.SELF_PROPS.filter(prop => !/^\$/.test(prop));
-
- if (props.length > 0) {
- out.space();
- out.with_parens(function() {
- props.forEach(function(prop, i) {
- if (i) out.space();
- out.print(prop);
- });
- });
- }
-
- if (ctor.documentation) {
- out.space();
- out.print_string(ctor.documentation);
- }
-
- if (ctor.SUBCLASSES.length > 0) {
- out.space();
- out.with_block(function() {
- ctor.SUBCLASSES.forEach(function(ctor) {
- out.indent();
- doitem(ctor);
- out.newline();
- });
- });
- }
- }
- doitem(AST_Node);
- return out + "\n";
- }
-}
-
-async function _default_options() {
- const defs = {};
-
- Object.keys(infer_options({ 0: 0 })).forEach((component) => {
- const options = infer_options({
- [component]: {0: 0}
- });
-
- if (options) defs[component] = options;
- });
- return defs;
-}
-
-async function infer_options(options) {
- try {
- await minify("", options);
- } catch (error) {
- return error.defs;
- }
-}
-
-exports._default_options = _default_options;
-exports._run_cli = run_cli;
-exports.minify = minify;
-
-})));
-}(bundle_min$1, bundle_min$1.exports));
-
-var bundle_min = bundle_min$1.exports;
-
-module.exports = bundle_min;
diff --git a/packages/astro/vendor/vite/package.json b/packages/astro/vendor/vite/package.json
deleted file mode 100644
index 9be2cf05d..000000000
--- a/packages/astro/vendor/vite/package.json
+++ /dev/null
@@ -1,139 +0,0 @@
-{
- "name": "vite",
- "version": "2.6.10",
- "license": "MIT",
- "author": "Evan You",
- "description": "Native-ESM powered web dev build tool",
- "bin": {
- "vite": "bin/vite.js"
- },
- "main": "dist/node/index.js",
- "types": "dist/node/index.d.ts",
- "files": [
- "bin",
- "dist",
- "client.d.ts",
- "src/client",
- "types"
- ],
- "engines": {
- "node": ">=12.2.0"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/vitejs/vite.git",
- "directory": "packages/vite"
- },
- "bugs": {
- "url": "https://github.com/vitejs/vite/issues"
- },
- "homepage": "https://github.com/vitejs/vite/tree/main/#readme",
- "scripts": {
- "dev": "rimraf dist && rollup -c -w",
- "build": "rimraf dist && npm run lint && run-s build-bundle build-types",
- "build-bundle": "rollup -c",
- "build-types": "run-s build-temp-types patch-types roll-types",
- "build-temp-types": "tsc --emitDeclarationOnly --outDir temp/node -p src/node",
- "ci-build": "rimraf dist && run-s build-bundle build-types",
- "patch-types": "node scripts/patchTypes",
- "roll-types": "api-extractor run && rimraf temp",
- "lint": "eslint --ext .ts src/**",
- "format": "prettier --write --parser typescript \"src/**/*.ts\"",
- "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s --commit-path .",
- "release": "node ../../scripts/release.js"
- },
- "//": "READ CONTRIBUTING.md to understand what to put under deps vs. devDeps!",
- "dependencies": {
- "esbuild": "^0.13.2",
- "postcss": "^8.3.8",
- "resolve": "^1.20.0",
- "rollup": "^2.57.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- },
- "devDependencies": {
- "@ampproject/remapping": "^1.0.1",
- "@babel/parser": "^7.15.8",
- "@babel/types": "^7.15.6",
- "@rollup/plugin-alias": "^3.1.5",
- "@rollup/plugin-commonjs": "^21.0.0",
- "@rollup/plugin-dynamic-import-vars": "^1.4.0",
- "@rollup/plugin-json": "^4.1.0",
- "@rollup/plugin-node-resolve": "13.0.5",
- "@rollup/plugin-typescript": "^8.2.5",
- "@rollup/pluginutils": "^4.1.1",
- "@types/convert-source-map": "^1.5.2",
- "@types/debug": "^4.1.7",
- "@types/es-module-lexer": "^0.3.0",
- "@types/estree": "^0.0.50",
- "@types/etag": "^1.8.1",
- "@types/less": "^3.0.3",
- "@types/mime": "^2.0.3",
- "@types/node": "^15.12.2",
- "@types/resolve": "^1.20.1",
- "@types/sass": "^1.16.1",
- "@types/stylus": "^0.48.36",
- "@types/ws": "^7.4.7",
- "@vue/compiler-dom": "^3.2.19",
- "acorn": "^8.5.0",
- "acorn-class-fields": "^1.0.0",
- "acorn-static-class-features": "^1.0.0",
- "builtin-modules": "^3.2.0",
- "cac": "^6.7.3",
- "chalk": "^4.1.2",
- "chokidar": "^3.5.2",
- "compression": "^1.7.4",
- "connect": "^3.7.0",
- "connect-history-api-fallback": "^1.6.0",
- "convert-source-map": "^1.8.0",
- "cors": "^2.8.5",
- "debug": "^4.3.2",
- "dotenv": "^10.0.0",
- "dotenv-expand": "^5.1.0",
- "es-module-lexer": "^0.9.2",
- "estree-walker": "^2.0.2",
- "etag": "^1.8.1",
- "execa": "^5.1.1",
- "fast-glob": "^3.2.7",
- "http-proxy": "^1.18.1",
- "launch-editor-middleware": "^2.2.1",
- "magic-string": "^0.25.7",
- "mime": "^2.5.2",
- "minimatch": "^3.0.4",
- "okie": "^1.0.1",
- "open": "^8.2.1",
- "periscopic": "^2.0.3",
- "postcss-import": "^14.0.2",
- "postcss-load-config": "^3.1.0",
- "postcss-modules": "^4.2.2",
- "resolve.exports": "^1.0.2",
- "rollup-plugin-license": "^2.5.0",
- "selfsigned": "^1.10.11",
- "sirv": "^1.0.17",
- "source-map": "^0.6.1",
- "source-map-support": "^0.5.20",
- "strip-ansi": "^6.0.0",
- "terser": "^5.9.0",
- "tsconfck": "^1.0.0",
- "tslib": "^2.3.1",
- "types": "link:./types",
- "ws": "^7.5.5"
- },
- "peerDependencies": {
- "less": "*",
- "sass": "*",
- "stylus": "*"
- },
- "peerDependenciesMeta": {
- "sass": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "less": {
- "optional": true
- }
- }
-}
diff --git a/packages/astro/vendor/vite/types/alias.d.ts b/packages/astro/vendor/vite/types/alias.d.ts
deleted file mode 100644
index aa70ec5bb..000000000
--- a/packages/astro/vendor/vite/types/alias.d.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
-Types from https://github.com/rollup/plugins/blob/master/packages/alias/types/index.d.ts
-Inlined because the plugin is bundled.
-
-https://github.com/rollup/plugins/blob/master/LICENSE
-
-The MIT License (MIT)
-
-Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors)
-
-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.
-*/
-
-import { PluginHooks } from 'rollup'
-
-export interface Alias {
- find: string | RegExp
- replacement: string
- /**
- * Instructs the plugin to use an alternative resolving algorithm,
- * rather than the Rollup's resolver.
- * @default null
- */
- customResolver?: ResolverFunction | ResolverObject | null
-}
-
-export type ResolverFunction = PluginHooks['resolveId']
-
-export interface ResolverObject {
- buildStart?: PluginHooks['buildStart']
- resolveId: ResolverFunction
-}
-
-/**
- * Specifies an `Object`, or an `Array` of `Object`,
- * which defines aliases used to replace values in `import` or `require` statements.
- * With either format, the order of the entries is important,
- * in that the first defined rules are applied first.
- *
- * This is passed to \@rollup/plugin-alias as the "entries" field
- * https://github.com/rollup/plugins/tree/master/packages/alias#entries
- */
-export type AliasOptions = readonly Alias[] | { [find: string]: string }
diff --git a/packages/astro/vendor/vite/types/anymatch.d.ts b/packages/astro/vendor/vite/types/anymatch.d.ts
deleted file mode 100644
index 920458858..000000000
--- a/packages/astro/vendor/vite/types/anymatch.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export type AnymatchFn = (testString: string) => boolean
-export type AnymatchPattern = string | RegExp | AnymatchFn
-type AnymatchMatcher = AnymatchPattern | AnymatchPattern[]
-
-export { AnymatchMatcher as Matcher }
diff --git a/packages/astro/vendor/vite/types/chokidar.d.ts b/packages/astro/vendor/vite/types/chokidar.d.ts
deleted file mode 100644
index 8882f0263..000000000
--- a/packages/astro/vendor/vite/types/chokidar.d.ts
+++ /dev/null
@@ -1,218 +0,0 @@
-// Inlined to avoid extra dependency (chokidar is bundled in the published build)
-
-// https://github.com/paulmillr/chokidar/blob/master/types/index.d.ts
-// MIT Licensed https://github.com/paulmillr/chokidar/blob/master/LICENSE
-
-/**
-The MIT License (MIT)
-
-Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker
-
-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.
-*/
-/// <reference types="node" />
-
-import * as fs from 'fs'
-import { Matcher } from './anymatch'
-
-export interface FSWatcher extends fs.FSWatcher {
- options: WatchOptions
-
- /**
- * Constructs a new FSWatcher instance with optional WatchOptions parameter.
- */
- (options?: WatchOptions): void
-
- /**
- * Add files, directories, or glob patterns for tracking. Takes an array of strings or just one
- * string.
- */
- add(paths: string | ReadonlyArray<string>): void
-
- /**
- * Stop watching files, directories, or glob patterns. Takes an array of strings or just one
- * string.
- */
- unwatch(paths: string | ReadonlyArray<string>): void
-
- /**
- * Returns an object representing all the paths on the file system being watched by this
- * `FSWatcher` instance. The object's keys are all the directories (using absolute paths unless
- * the `cwd` option was used), and the values are arrays of the names of the items contained in
- * each directory.
- */
- getWatched(): {
- [directory: string]: string[]
- }
-
- /**
- * Removes all listeners from watched files.
- */
- close(): Promise<void>
-
- on(
- event: 'add' | 'addDir' | 'change',
- listener: (path: string, stats?: fs.Stats) => void
- ): this
-
- on(
- event: 'all',
- listener: (
- eventName: 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir',
- path: string,
- stats?: fs.Stats
- ) => void
- ): this
-
- /**
- * Error occurred
- */
- on(event: 'error', listener: (error: Error) => void): this
-
- /**
- * Exposes the native Node `fs.FSWatcher events`
- */
- on(
- event: 'raw',
- listener: (eventName: string, path: string, details: any) => void
- ): this
-
- /**
- * Fires when the initial scan is complete
- */
- on(event: 'ready', listener: () => void): this
-
- on(event: 'unlink' | 'unlinkDir', listener: (path: string) => void): this
-
- on(event: string, listener: (...args: any[]) => void): this
-}
-
-export interface WatchOptions {
- /**
- * Indicates whether the process should continue to run as long as files are being watched. If
- * set to `false` when using `fsevents` to watch, no more events will be emitted after `ready`,
- * even if the process continues to run.
- */
- persistent?: boolean
-
- /**
- * ([anymatch](https://github.com/micromatch/anymatch)-compatible definition) Defines files/paths to
- * be ignored. The whole relative or absolute path is tested, not just filename. If a function
- * with two arguments is provided, it gets called twice per path - once with a single argument
- * (the path), second time with two arguments (the path and the
- * [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object of that path).
- */
- ignored?: Matcher
-
- /**
- * If set to `false` then `add`/`addDir` events are also emitted for matching paths while
- * instantiating the watching as chokidar discovers these file paths (before the `ready` event).
- */
- ignoreInitial?: boolean
-
- /**
- * When `false`, only the symlinks themselves will be watched for changes instead of following
- * the link references and bubbling events through the link's path.
- */
- followSymlinks?: boolean
-
- /**
- * The base directory from which watch `paths` are to be derived. Paths emitted with events will
- * be relative to this.
- */
- cwd?: string
-
- /**
- * If set to true then the strings passed to .watch() and .add() are treated as literal path
- * names, even if they look like globs. Default: false.
- */
- disableGlobbing?: boolean
-
- /**
- * Whether to use fs.watchFile (backed by polling), or fs.watch. If polling leads to high CPU
- * utilization, consider setting this to `false`. It is typically necessary to **set this to
- * `true` to successfully watch files over a network**, and it may be necessary to successfully
- * watch files in other non-standard situations. Setting to `true` explicitly on OS X overrides
- * the `useFsEvents` default.
- */
- usePolling?: boolean
-
- /**
- * Whether to use the `fsevents` watching interface if available. When set to `true` explicitly
- * and `fsevents` is available this supersedes the `usePolling` setting. When set to `false` on
- * OS X, `usePolling: true` becomes the default.
- */
- useFsEvents?: boolean
-
- /**
- * If relying upon the [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object that
- * may get passed with `add`, `addDir`, and `change` events, set this to `true` to ensure it is
- * provided even in cases where it wasn't already available from the underlying watch events.
- */
- alwaysStat?: boolean
-
- /**
- * If set, limits how many levels of subdirectories will be traversed.
- */
- depth?: number
-
- /**
- * Interval of file system polling.
- */
- interval?: number
-
- /**
- * Interval of file system polling for binary files. ([see list of binary extensions](https://gi
- * thub.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json))
- */
- binaryInterval?: number
-
- /**
- * Indicates whether to watch files that don't have read permissions if possible. If watching
- * fails due to `EPERM` or `EACCES` with this set to `true`, the errors will be suppressed
- * silently.
- */
- ignorePermissionErrors?: boolean
-
- /**
- * `true` if `useFsEvents` and `usePolling` are `false`). Automatically filters out artifacts
- * that occur when using editors that use "atomic writes" instead of writing directly to the
- * source file. If a file is re-added within 100 ms of being deleted, Chokidar emits a `change`
- * event rather than `unlink` then `add`. If the default of 100 ms does not work well for you,
- * you can override it by setting `atomic` to a custom value, in milliseconds.
- */
- atomic?: boolean | number
-
- /**
- * can be set to an object in order to adjust timing params:
- */
- awaitWriteFinish?:
- | {
- /**
- * Amount of time in milliseconds for a file size to remain constant before emitting its event.
- */
- stabilityThreshold?: number
-
- /**
- * File size polling interval.
- */
- pollInterval?: number
- }
- | boolean
-}
diff --git a/packages/astro/vendor/vite/types/commonjs.d.ts b/packages/astro/vendor/vite/types/commonjs.d.ts
deleted file mode 100644
index fd9ab8aa1..000000000
--- a/packages/astro/vendor/vite/types/commonjs.d.ts
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * https://github.com/rollup/plugins/blob/master/packages/commonjs/types/index.d.ts
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file at
- * https://github.com/rollup/plugins/blob/master/LICENSE
- */
-export interface RollupCommonJSOptions {
- /**
- * A minimatch pattern, or array of patterns, which specifies the files in
- * the build the plugin should operate on. By default, all files with
- * extension `".cjs"` or those in `extensions` are included, but you can narrow
- * this list by only including specific files. These files will be analyzed
- * and transpiled if either the analysis does not find ES module specific
- * statements or `transformMixedEsModules` is `true`.
- * @default undefined
- */
- include?: string | RegExp | readonly (string | RegExp)[]
- /**
- * A minimatch pattern, or array of patterns, which specifies the files in
- * the build the plugin should _ignore_. By default, all files with
- * extensions other than those in `extensions` or `".cjs"` are ignored, but you
- * can exclude additional files. See also the `include` option.
- * @default undefined
- */
- exclude?: string | RegExp | readonly (string | RegExp)[]
- /**
- * For extensionless imports, search for extensions other than .js in the
- * order specified. Note that you need to make sure that non-JavaScript files
- * are transpiled by another plugin first.
- * @default [ '.js' ]
- */
- extensions?: ReadonlyArray<string>
- /**
- * If true then uses of `global` won't be dealt with by this plugin
- * @default false
- */
- ignoreGlobal?: boolean
- /**
- * If false, skips source map generation for CommonJS modules. This will improve performance.
- * @default true
- */
- sourceMap?: boolean
- /**
- * Some `require` calls cannot be resolved statically to be translated to
- * imports.
- * When this option is set to `false`, the generated code will either
- * directly throw an error when such a call is encountered or, when
- * `dynamicRequireTargets` is used, when such a call cannot be resolved with a
- * configured dynamic require target.
- * Setting this option to `true` will instead leave the `require` call in the
- * code or use it as a fallback for `dynamicRequireTargets`.
- * @default false
- */
- ignoreDynamicRequires?: boolean
- /**
- * Instructs the plugin whether to enable mixed module transformations. This
- * is useful in scenarios with modules that contain a mix of ES `import`
- * statements and CommonJS `require` expressions. Set to `true` if `require`
- * calls should be transformed to imports in mixed modules, or `false` if the
- * `require` expressions should survive the transformation. The latter can be
- * important if the code contains environment detection, or you are coding
- * for an environment with special treatment for `require` calls such as
- * ElectronJS. See also the `ignore` option.
- * @default false
- */
- transformMixedEsModules?: boolean
- /**
- * Sometimes you have to leave require statements unconverted. Pass an array
- * containing the IDs or a `id => boolean` function.
- * @default []
- */
- ignore?: ReadonlyArray<string> | ((id: string) => boolean)
- /**
- * Controls how to render imports from external dependencies. By default,
- * this plugin assumes that all external dependencies are CommonJS. This
- * means they are rendered as default imports to be compatible with e.g.
- * NodeJS where ES modules can only import a default export from a CommonJS
- * dependency.
- *
- * If you set `esmExternals` to `true`, this plugins assumes that all
- * external dependencies are ES modules and respect the
- * `requireReturnsDefault` option. If that option is not set, they will be
- * rendered as namespace imports.
- *
- * You can also supply an array of ids to be treated as ES modules, or a
- * function that will be passed each external id to determine if it is an ES
- * module.
- * @default false
- */
- esmExternals?: boolean | ReadonlyArray<string> | ((id: string) => boolean)
- /**
- * Controls what is returned when requiring an ES module from a CommonJS file.
- * When using the `esmExternals` option, this will also apply to external
- * modules. By default, this plugin will render those imports as namespace
- * imports i.e.
- *
- * ```js
- * // input
- * const foo = require('foo');
- *
- * // output
- * import * as foo from 'foo';
- * ```
- *
- * However there are some situations where this may not be desired.
- * For these situations, you can change Rollup's behaviour either globally or
- * per module. To change it globally, set the `requireReturnsDefault` option
- * to one of the following values:
- *
- * - `false`: This is the default, requiring an ES module returns its
- * namespace. This is the only option that will also add a marker
- * `__esModule: true` to the namespace to support interop patterns in
- * CommonJS modules that are transpiled ES modules.
- * - `"namespace"`: Like `false`, requiring an ES module returns its
- * namespace, but the plugin does not add the `__esModule` marker and thus
- * creates more efficient code. For external dependencies when using
- * `esmExternals: true`, no additional interop code is generated.
- * - `"auto"`: This is complementary to how `output.exports: "auto"` works in
- * Rollup: If a module has a default export and no named exports, requiring
- * that module returns the default export. In all other cases, the namespace
- * is returned. For external dependencies when using `esmExternals: true`, a
- * corresponding interop helper is added.
- * - `"preferred"`: If a module has a default export, requiring that module
- * always returns the default export, no matter whether additional named
- * exports exist. This is similar to how previous versions of this plugin
- * worked. Again for external dependencies when using `esmExternals: true`,
- * an interop helper is added.
- * - `true`: This will always try to return the default export on require
- * without checking if it actually exists. This can throw at build time if
- * there is no default export. This is how external dependencies are handled
- * when `esmExternals` is not used. The advantage over the other options is
- * that, like `false`, this does not add an interop helper for external
- * dependencies, keeping the code lean.
- *
- * To change this for individual modules, you can supply a function for
- * `requireReturnsDefault` instead. This function will then be called once for
- * each required ES module or external dependency with the corresponding id
- * and allows you to return different values for different modules.
- * @default false
- */
- requireReturnsDefault?:
- | boolean
- | 'auto'
- | 'preferred'
- | 'namespace'
- | ((id: string) => boolean | 'auto' | 'preferred' | 'namespace')
- /**
- * Some modules contain dynamic `require` calls, or require modules that
- * contain circular dependencies, which are not handled well by static
- * imports. Including those modules as `dynamicRequireTargets` will simulate a
- * CommonJS (NodeJS-like) environment for them with support for dynamic and
- * circular dependencies.
- *
- * Note: In extreme cases, this feature may result in some paths being
- * rendered as absolute in the final bundle. The plugin tries to avoid
- * exposing paths from the local machine, but if you are `dynamicRequirePaths`
- * with paths that are far away from your project's folder, that may require
- * replacing strings like `"/Users/John/Desktop/foo-project/"` -\> `"/"`.
- */
- dynamicRequireTargets?: string | ReadonlyArray<string>
-}
diff --git a/packages/astro/vendor/vite/types/connect.d.ts b/packages/astro/vendor/vite/types/connect.d.ts
deleted file mode 100644
index 753569ccb..000000000
--- a/packages/astro/vendor/vite/types/connect.d.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-// Inlined to avoid extra dependency
-// MIT Licensed https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
-
-// Type definitions for connect v3.4.0
-// Project: https://github.com/senchalabs/connect
-// Definitions by: Maxime LUCE <https://github.com/SomaticIT>
-// Evan Hahn <https://github.com/EvanHahn>
-// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
-
-/// <reference types="node" />
-import * as http from 'http'
-
-export namespace Connect {
- export type ServerHandle = HandleFunction | http.Server
-
- export class IncomingMessage extends http.IncomingMessage {
- originalUrl?: http.IncomingMessage['url']
- }
-
- export type NextFunction = (err?: any) => void
-
- export type SimpleHandleFunction = (
- req: IncomingMessage,
- res: http.ServerResponse
- ) => void
- export type NextHandleFunction = (
- req: IncomingMessage,
- res: http.ServerResponse,
- next: NextFunction
- ) => void
- export type ErrorHandleFunction = (
- err: any,
- req: IncomingMessage,
- res: http.ServerResponse,
- next: NextFunction
- ) => void
- export type HandleFunction =
- | SimpleHandleFunction
- | NextHandleFunction
- | ErrorHandleFunction
-
- export interface ServerStackItem {
- route: string
- handle: ServerHandle
- }
-
- export interface Server extends NodeJS.EventEmitter {
- (req: http.IncomingMessage, res: http.ServerResponse, next?: Function): void
-
- route: string
- stack: ServerStackItem[]
-
- /**
- * Utilize the given middleware `handle` to the given `route`,
- * defaulting to _/_. This "route" is the mount-point for the
- * middleware, when given a value other than _/_ the middleware
- * is only effective when that segment is present in the request's
- * pathname.
- *
- * For example if we were to mount a function at _/admin_, it would
- * be invoked on _/admin_, and _/admin/settings_, however it would
- * not be invoked for _/_, or _/posts_.
- */
- use(fn: NextHandleFunction): Server
- use(fn: HandleFunction): Server
- use(route: string, fn: NextHandleFunction): Server
- use(route: string, fn: HandleFunction): Server
-
- /**
- * Handle server requests, punting them down
- * the middleware stack.
- */
- handle(
- req: http.IncomingMessage,
- res: http.ServerResponse,
- next: Function
- ): void
-
- /**
- * Listen for connections.
- *
- * This method takes the same arguments
- * as node's `http.Server#listen()`.
- *
- * HTTP and HTTPS:
- *
- * If you run your application both as HTTP
- * and HTTPS you may wrap them individually,
- * since your Connect "server" is really just
- * a JavaScript `Function`.
- *
- * var connect = require('connect')
- * , http = require('http')
- * , https = require('https');
- *
- * var app = connect();
- *
- * http.createServer(app).listen(80);
- * https.createServer(options, app).listen(443);
- */
- listen(
- port: number,
- hostname?: string,
- backlog?: number,
- callback?: Function
- ): http.Server
- listen(port: number, hostname?: string, callback?: Function): http.Server
- listen(path: string, callback?: Function): http.Server
- listen(handle: any, listeningListener?: Function): http.Server
- }
-}
diff --git a/packages/astro/vendor/vite/types/customEvent.d.ts b/packages/astro/vendor/vite/types/customEvent.d.ts
deleted file mode 100644
index c38a4ac94..000000000
--- a/packages/astro/vendor/vite/types/customEvent.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-// See https://stackoverflow.com/a/63549561.
-export type CustomEventName<T extends string> = (T extends `vite:${T}`
- ? never
- : T) &
- (`vite:${T}` extends T ? never : T)
diff --git a/packages/astro/vendor/vite/types/dynamicImportVars.d.ts b/packages/astro/vendor/vite/types/dynamicImportVars.d.ts
deleted file mode 100644
index 99f1b5c45..000000000
--- a/packages/astro/vendor/vite/types/dynamicImportVars.d.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export interface RollupDynamicImportVarsOptions {
- /**
- * Files to include in this plugin (default all).
- * @default []
- */
- include?: string | RegExp | (string | RegExp)[]
- /**
- * Files to exclude in this plugin (default none).
- * @default []
- */
- exclude?: string | RegExp | (string | RegExp)[]
- /**
- * By default, the plugin quits the build process when it encounters an error. If you set this option to true, it will throw a warning instead and leave the code untouched.
- * @default false
- */
- warnOnError?: boolean
-}
diff --git a/packages/astro/vendor/vite/types/hmrPayload.d.ts b/packages/astro/vendor/vite/types/hmrPayload.d.ts
deleted file mode 100644
index 2fbed3a82..000000000
--- a/packages/astro/vendor/vite/types/hmrPayload.d.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-export type HMRPayload =
- | ConnectedPayload
- | UpdatePayload
- | FullReloadPayload
- | CustomPayload
- | ErrorPayload
- | PrunePayload
-
-export interface ConnectedPayload {
- type: 'connected'
-}
-
-export interface UpdatePayload {
- type: 'update'
- updates: Update[]
-}
-
-export interface Update {
- type: 'js-update' | 'css-update'
- path: string
- acceptedPath: string
- timestamp: number
-}
-
-export interface PrunePayload {
- type: 'prune'
- paths: string[]
-}
-
-export interface FullReloadPayload {
- type: 'full-reload'
- path?: string
-}
-
-export interface CustomPayload {
- type: 'custom'
- event: string
- data?: any
-}
-
-export interface ErrorPayload {
- type: 'error'
- err: {
- [name: string]: any
- message: string
- stack: string
- id?: string
- frame?: string
- plugin?: string
- pluginCode?: string
- loc?: {
- file?: string
- line: number
- column: number
- }
- }
-}
diff --git a/packages/astro/vendor/vite/types/http-proxy.d.ts b/packages/astro/vendor/vite/types/http-proxy.d.ts
deleted file mode 100644
index 3ad701f12..000000000
--- a/packages/astro/vendor/vite/types/http-proxy.d.ts
+++ /dev/null
@@ -1,242 +0,0 @@
-// Inlined to avoid extra dependency
-// MIT Licensed https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
-
-// Type definitions for node-http-proxy 1.17
-// Project: https://github.com/nodejitsu/node-http-proxy
-// Definitions by: Maxime LUCE <https://github.com/SomaticIT>
-// Florian Oellerich <https://github.com/Raigen>
-// Daniel Schmidt <https://github.com/DanielMSchmidt>
-// Jordan Abreu <https://github.com/jabreu610>
-// Samuel Bodin <https://github.com/bodinsamuel>
-// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
-// TypeScript Version: 2.1
-
-/// <reference types="node" />
-
-import * as net from 'net'
-import * as http from 'http'
-import * as events from 'events'
-import * as url from 'url'
-import * as stream from 'stream'
-
-export namespace HttpProxy {
- export type ProxyTarget = ProxyTargetUrl | ProxyTargetDetailed
-
- export type ProxyTargetUrl = string | Partial<url.Url>
-
- export interface ProxyTargetDetailed {
- host: string
- port: number
- protocol?: string
- hostname?: string
- socketPath?: string
- key?: string
- passphrase?: string
- pfx?: Buffer | string
- cert?: string
- ca?: string
- ciphers?: string
- secureProtocol?: string
- }
-
- export type ErrorCallback = (
- err: Error,
- req: http.IncomingMessage,
- res: http.ServerResponse,
- target?: ProxyTargetUrl
- ) => void
-
- export class Server extends events.EventEmitter {
- /**
- * Creates the proxy server with specified options.
- * @param options - Config object passed to the proxy
- */
- constructor(options?: ServerOptions)
-
- /**
- * Used for proxying regular HTTP(S) requests
- * @param req - Client request.
- * @param res - Client response.
- * @param options - Additionnal options.
- */
- web(
- req: http.IncomingMessage,
- res: http.ServerResponse,
- options?: ServerOptions,
- callback?: ErrorCallback
- ): void
-
- /**
- * Used for proxying regular HTTP(S) requests
- * @param req - Client request.
- * @param socket - Client socket.
- * @param head - Client head.
- * @param options - Additional options.
- */
- ws(
- req: http.IncomingMessage,
- socket: unknown,
- head: unknown,
- options?: ServerOptions,
- callback?: ErrorCallback
- ): void
-
- /**
- * A function that wraps the object in a webserver, for your convenience
- * @param port - Port to listen on
- */
- listen(port: number): Server
-
- /**
- * A function that closes the inner webserver and stops listening on given port
- */
- close(callback?: () => void): void
-
- /**
- * Creates the proxy server with specified options.
- * @param options - Config object passed to the proxy
- * @returns Proxy object with handlers for `ws` and `web` requests
- */
- static createProxyServer(options?: ServerOptions): Server
-
- /**
- * Creates the proxy server with specified options.
- * @param options - Config object passed to the proxy
- * @returns Proxy object with handlers for `ws` and `web` requests
- */
- static createServer(options?: ServerOptions): Server
-
- /**
- * Creates the proxy server with specified options.
- * @param options - Config object passed to the proxy
- * @returns Proxy object with handlers for `ws` and `web` requests
- */
- static createProxy(options?: ServerOptions): Server
-
- addListener(event: string, listener: () => void): this
- on(event: string, listener: () => void): this
- on(event: 'error', listener: ErrorCallback): this
- on(
- event: 'start',
- listener: (
- req: http.IncomingMessage,
- res: http.ServerResponse,
- target: ProxyTargetUrl
- ) => void
- ): this
- on(
- event: 'proxyReq',
- listener: (
- proxyReq: http.ClientRequest,
- req: http.IncomingMessage,
- res: http.ServerResponse,
- options: ServerOptions
- ) => void
- ): this
- on(
- event: 'proxyRes',
- listener: (
- proxyRes: http.IncomingMessage,
- req: http.IncomingMessage,
- res: http.ServerResponse
- ) => void
- ): this
- on(
- event: 'proxyReqWs',
- listener: (
- proxyReq: http.ClientRequest,
- req: http.IncomingMessage,
- socket: net.Socket,
- options: ServerOptions,
- head: any
- ) => void
- ): this
- on(
- event: 'econnreset',
- listener: (
- err: Error,
- req: http.IncomingMessage,
- res: http.ServerResponse,
- target: ProxyTargetUrl
- ) => void
- ): this
- on(
- event: 'end',
- listener: (
- req: http.IncomingMessage,
- res: http.ServerResponse,
- proxyRes: http.IncomingMessage
- ) => void
- ): this
- on(
- event: 'close',
- listener: (
- proxyRes: http.IncomingMessage,
- proxySocket: net.Socket,
- proxyHead: any
- ) => void
- ): this
-
- once(event: string, listener: () => void): this
- removeListener(event: string, listener: () => void): this
- removeAllListeners(event?: string): this
- getMaxListeners(): number
- setMaxListeners(n: number): this
- listeners(event: string): Array<() => void>
- emit(event: string, ...args: any[]): boolean
- listenerCount(type: string): number
- }
-
- export interface ServerOptions {
- /** URL string to be parsed with the url module. */
- target?: ProxyTarget
- /** URL string to be parsed with the url module. */
- forward?: ProxyTargetUrl
- /** Object to be passed to http(s).request. */
- agent?: any
- /** Object to be passed to https.createServer(). */
- ssl?: any
- /** If you want to proxy websockets. */
- ws?: boolean
- /** Adds x- forward headers. */
- xfwd?: boolean
- /** Verify SSL certificate. */
- secure?: boolean
- /** Explicitly specify if we are proxying to another proxy. */
- toProxy?: boolean
- /** Specify whether you want to prepend the target's path to the proxy path. */
- prependPath?: boolean
- /** Specify whether you want to ignore the proxy path of the incoming request. */
- ignorePath?: boolean
- /** Local interface string to bind for outgoing connections. */
- localAddress?: string
- /** Changes the origin of the host header to the target URL. */
- changeOrigin?: boolean
- /** specify whether you want to keep letter case of response header key */
- preserveHeaderKeyCase?: boolean
- /** Basic authentication i.e. 'user:password' to compute an Authorization header. */
- auth?: string
- /** Rewrites the location hostname on (301 / 302 / 307 / 308) redirects, Default: null. */
- hostRewrite?: string
- /** Rewrites the location host/ port on (301 / 302 / 307 / 308) redirects based on requested host/ port.Default: false. */
- autoRewrite?: boolean
- /** Rewrites the location protocol on (301 / 302 / 307 / 308) redirects to 'http' or 'https'.Default: null. */
- protocolRewrite?: string
- /** rewrites domain of set-cookie headers. */
- cookieDomainRewrite?: false | string | { [oldDomain: string]: string }
- /** rewrites path of set-cookie headers. Default: false */
- cookiePathRewrite?: false | string | { [oldPath: string]: string }
- /** object with extra headers to be added to target requests. */
- headers?: { [header: string]: string }
- /** Timeout (in milliseconds) when proxy receives no response from target. Default: 120000 (2 minutes) */
- proxyTimeout?: number
- /** Timeout (in milliseconds) for incoming requests */
- timeout?: number
- /** Specify whether you want to follow redirects. Default: false */
- followRedirects?: boolean
- /** If set to true, none of the webOutgoing passes are called and it's your responsibility to appropriately return the response by listening and acting on the proxyRes event */
- selfHandleResponse?: boolean
- /** Buffer */
- buffer?: stream.Stream
- }
-}
diff --git a/packages/astro/vendor/vite/types/importMeta.d.ts b/packages/astro/vendor/vite/types/importMeta.d.ts
deleted file mode 100644
index 7a96d76fe..000000000
--- a/packages/astro/vendor/vite/types/importMeta.d.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-interface ImportMeta {
- url: string
-
- readonly hot?: {
- readonly data: any
-
- accept(): void
- accept(cb: (mod: any) => void): void
- accept(dep: string, cb: (mod: any) => void): void
- accept(deps: readonly string[], cb: (mods: any[]) => void): void
-
- /**
- * @deprecated
- */
- acceptDeps(): never
-
- dispose(cb: (data: any) => void): void
- decline(): void
- invalidate(): void
-
- on: {
- (
- event: 'vite:beforeUpdate',
- cb: (payload: import('./hmrPayload').UpdatePayload) => void
- ): void
- (
- event: 'vite:beforePrune',
- cb: (payload: import('./hmrPayload').PrunePayload) => void
- ): void
- (
- event: 'vite:beforeFullReload',
- cb: (payload: import('./hmrPayload').FullReloadPayload) => void
- ): void
- (
- event: 'vite:error',
- cb: (payload: import('./hmrPayload').ErrorPayload) => void
- ): void
- <T extends string>(
- event: import('./customEvent').CustomEventName<T>,
- cb: (data: any) => void
- ): void
- }
- }
-
- readonly env: ImportMetaEnv
-
- glob(pattern: string): Record<
- string,
- () => Promise<{
- [key: string]: any
- }>
- >
-
- globEager(pattern: string): Record<
- string,
- {
- [key: string]: any
- }
- >
-}
-
-interface ImportMetaEnv {
- [key: string]: string | boolean | undefined
- BASE_URL: string
- MODE: string
- DEV: boolean
- PROD: boolean
- SSR: boolean
-}
diff --git a/packages/astro/vendor/vite/types/package.json b/packages/astro/vendor/vite/types/package.json
deleted file mode 100644
index 3d6a75c81..000000000
--- a/packages/astro/vendor/vite/types/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "//": "this file is just here to make pnpm happy with --frozen-lockfile"
-}
diff --git a/packages/astro/vendor/vite/types/shims.d.ts b/packages/astro/vendor/vite/types/shims.d.ts
deleted file mode 100644
index 80a251b3f..000000000
--- a/packages/astro/vendor/vite/types/shims.d.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-declare module 'connect' {
- const connect: () => any
- export = connect
-}
-
-declare module 'cors' {
- function cors(options: any): any
- export = cors
-}
-
-declare module 'selfsigned' {
- export function generate(attrs: any, options: any, done?: any): any
-}
-
-declare module 'http-proxy' {
- const proxy: any
- export = proxy
-}
-
-declare module 'acorn-class-fields' {
- const plugin: any
- export = plugin
-}
-
-declare module 'acorn-static-class-features' {
- const plugin: any
- export default plugin
-}
-
-declare module 'connect-history-api-fallback' {
- const plugin: any
- export = plugin
-}
-
-declare module 'launch-editor-middleware' {
- const plugin: any
- export = plugin
-}
-
-declare module 'postcss-load-config' {
- import { ProcessOptions, Plugin } from 'postcss'
- function load(
- inline: any,
- root: string
- ): Promise<{
- options: ProcessOptions
- plugins: Plugin[]
- }>
- export = load
-}
-
-declare module 'postcss-import' {
- import { Plugin } from 'postcss'
- const plugin: (options: {
- resolve: (
- id: string,
- basedir: string,
- importOptions: any
- ) => string | string[] | Promise<string | string[]>
- }) => Plugin
- export = plugin
-}
-
-declare module 'postcss-modules' {
- import { Plugin } from 'postcss'
- const plugin: (options: any) => Plugin
- export = plugin
-}
-
-declare module '@rollup/plugin-dynamic-import-vars' {
- import { Plugin } from 'rollup'
-
- interface Options {
- include?: string | RegExp | (string | RegExp)[]
- exclude?: string | RegExp | (string | RegExp)[]
- warnOnError?: boolean
- }
-
- const p: (o?: Options) => Plugin
- export default p
-}
-
-declare module 'rollup-plugin-web-worker-loader' {
- import { Plugin } from 'rollup'
-
- interface Options {
- targetPlatform?: string
- pattern?: RegExp
- extensions?: string[]
- sourcemap?: boolean
- inline?: boolean
- }
-
- const p: (o?: Options) => Plugin
- export default p
-}
-
-declare module 'minimatch' {
- function match(path: string, pattern: string): boolean
- export default match
-}
-
-declare module 'compression' {
- function compression(): any
- export default compression
-}
-
-// LESS' types somewhat references this which doesn't make sense in Node,
-// so we have to shim it
-declare interface HTMLLinkElement {}
diff --git a/packages/astro/vendor/vite/types/terser.d.ts b/packages/astro/vendor/vite/types/terser.d.ts
deleted file mode 100644
index 44c7398d5..000000000
--- a/packages/astro/vendor/vite/types/terser.d.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-// Modified and inlined to avoid extra dependency
-// Source: https://github.com/terser/terser/blob/master/tools/terser.d.ts
-// BSD Licensed https://github.com/terser/terser/blob/master/LICENSE
-
-/*
-Terser is released under the BSD license:
-
-Copyright 2012-2018 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
- * Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-*/
-
-export namespace Terser {
- export type ECMA = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020
-
- export interface ParseOptions {
- bare_returns?: boolean
- ecma?: ECMA
- html5_comments?: boolean
- shebang?: boolean
- }
-
- export interface CompressOptions {
- arguments?: boolean
- arrows?: boolean
- booleans_as_integers?: boolean
- booleans?: boolean
- collapse_vars?: boolean
- comparisons?: boolean
- computed_props?: boolean
- conditionals?: boolean
- dead_code?: boolean
- defaults?: boolean
- directives?: boolean
- drop_console?: boolean
- drop_debugger?: boolean
- ecma?: ECMA
- evaluate?: boolean
- expression?: boolean
- global_defs?: object
- hoist_funs?: boolean
- hoist_props?: boolean
- hoist_vars?: boolean
- ie8?: boolean
- if_return?: boolean
- inline?: boolean | InlineFunctions
- join_vars?: boolean
- keep_classnames?: boolean | RegExp
- keep_fargs?: boolean
- keep_fnames?: boolean | RegExp
- keep_infinity?: boolean
- loops?: boolean
- module?: boolean
- negate_iife?: boolean
- passes?: number
- properties?: boolean
- pure_funcs?: string[]
- pure_getters?: boolean | 'strict'
- reduce_funcs?: boolean
- reduce_vars?: boolean
- sequences?: boolean | number
- side_effects?: boolean
- switches?: boolean
- toplevel?: boolean
- top_retain?: null | string | string[] | RegExp
- typeofs?: boolean
- unsafe_arrows?: boolean
- unsafe?: boolean
- unsafe_comps?: boolean
- unsafe_Function?: boolean
- unsafe_math?: boolean
- unsafe_symbols?: boolean
- unsafe_methods?: boolean
- unsafe_proto?: boolean
- unsafe_regexp?: boolean
- unsafe_undefined?: boolean
- unused?: boolean
- }
-
- export enum InlineFunctions {
- Disabled = 0,
- SimpleFunctions = 1,
- WithArguments = 2,
- WithArgumentsAndVariables = 3
- }
-
- export interface MangleOptions {
- eval?: boolean
- keep_classnames?: boolean | RegExp
- keep_fnames?: boolean | RegExp
- module?: boolean
- properties?: boolean | ManglePropertiesOptions
- reserved?: string[]
- safari10?: boolean
- toplevel?: boolean
- }
-
- export interface ManglePropertiesOptions {
- builtins?: boolean
- debug?: boolean
- keep_quoted?: boolean | 'strict'
- regex?: RegExp | string
- reserved?: string[]
- }
-
- export interface FormatOptions {
- ascii_only?: boolean
- beautify?: boolean
- braces?: boolean
- comments?:
- | boolean
- | 'all'
- | 'some'
- | RegExp
- | ((
- node: any,
- comment: {
- value: string
- type: 'comment1' | 'comment2' | 'comment3' | 'comment4'
- pos: number
- line: number
- col: number
- }
- ) => boolean)
- ecma?: ECMA
- ie8?: boolean
- indent_level?: number
- indent_start?: number
- inline_script?: boolean
- keep_quoted_props?: boolean
- max_line_len?: number | false
- preamble?: string
- preserve_annotations?: boolean
- quote_keys?: boolean
- quote_style?: OutputQuoteStyle
- safari10?: boolean
- semicolons?: boolean
- shebang?: boolean
- shorthand?: boolean
- source_map?: SourceMapOptions
- webkit?: boolean
- width?: number
- wrap_iife?: boolean
- wrap_func_args?: boolean
- }
-
- export enum OutputQuoteStyle {
- PreferDouble = 0,
- AlwaysSingle = 1,
- AlwaysDouble = 2,
- AlwaysOriginal = 3
- }
-
- export interface MinifyOptions {
- compress?: boolean | CompressOptions
- ecma?: ECMA
- ie8?: boolean
- keep_classnames?: boolean | RegExp
- keep_fnames?: boolean | RegExp
- mangle?: boolean | MangleOptions
- module?: boolean
- nameCache?: object
- format?: FormatOptions
- /** @deprecated use format instead */
- output?: FormatOptions
- parse?: ParseOptions
- safari10?: boolean
- sourceMap?: boolean | SourceMapOptions
- toplevel?: boolean
- }
-
- export interface MinifyOutput {
- code?: string
- map?: object | string
- }
-
- export interface SourceMapOptions {
- /** Source map object, 'inline' or source map file content */
- content?: object | string
- includeSources?: boolean
- filename?: string
- root?: string
- url?: string | 'inline'
- }
-}
diff --git a/packages/astro/vendor/vite/types/ws.d.ts b/packages/astro/vendor/vite/types/ws.d.ts
deleted file mode 100644
index 3a174f9df..000000000
--- a/packages/astro/vendor/vite/types/ws.d.ts
+++ /dev/null
@@ -1,532 +0,0 @@
-// Inlined to avoid extra dependency
-// MIT Licensed https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
-
-// Type definitions for ws 7.4
-// Project: https://github.com/websockets/ws
-// Definitions by: Paul Loyd <https://github.com/loyd>
-// Margus Lamp <https://github.com/mlamp>
-// Philippe D'Alva <https://github.com/TitaneBoy>
-// reduckted <https://github.com/reduckted>
-// teidesu <https://github.com/teidesu>
-// Bartosz Wojtkowiak <https://github.com/wojtkowiak>
-// Kyle Hensel <https://github.com/k-yle>
-// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
-
-/// <reference types="node" />
-
-import { EventEmitter } from 'events'
-import {
- Agent,
- ClientRequest,
- ClientRequestArgs,
- IncomingMessage,
- OutgoingHttpHeaders,
- Server as HTTPServer
-} from 'http'
-import { Server as HTTPSServer } from 'https'
-import { Socket } from 'net'
-import { Duplex, DuplexOptions } from 'stream'
-import { SecureContextOptions } from 'tls'
-import { URL } from 'url'
-import { ZlibOptions } from 'zlib'
-
-export declare namespace WebSocket {
- // WebSocket socket.
- export class WebSocket extends EventEmitter {
- /** The connection is not yet open. */
- static readonly CONNECTING: 0
- /** The connection is open and ready to communicate. */
- static readonly OPEN: 1
- /** The connection is in the process of closing. */
- static readonly CLOSING: 2
- /** The connection is closed. */
- static readonly CLOSED: 3
-
- binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments'
- readonly bufferedAmount: number
- readonly extensions: string
- readonly protocol: string
- /** The current state of the connection */
- readonly readyState:
- | typeof WebSocket.CONNECTING
- | typeof WebSocket.OPEN
- | typeof WebSocket.CLOSING
- | typeof WebSocket.CLOSED
- readonly url: string
-
- /** The connection is not yet open. */
- readonly CONNECTING: 0
- /** The connection is open and ready to communicate. */
- readonly OPEN: 1
- /** The connection is in the process of closing. */
- readonly CLOSING: 2
- /** The connection is closed. */
- readonly CLOSED: 3
-
- onopen: (event: WebSocket.OpenEvent) => void
- onerror: (event: WebSocket.ErrorEvent) => void
- onclose: (event: WebSocket.CloseEvent) => void
- onmessage: (event: WebSocket.MessageEvent) => void
-
- constructor(
- address: string | URL,
- options?: WebSocket.ClientOptions | ClientRequestArgs
- )
- constructor(
- address: string | URL,
- protocols?: string | string[],
- options?: WebSocket.ClientOptions | ClientRequestArgs
- )
-
- close(code?: number, data?: string): void
- ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void
- pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void
- send(data: any, cb?: (err?: Error) => void): void
- send(
- data: any,
- options: {
- mask?: boolean | undefined
- binary?: boolean | undefined
- compress?: boolean | undefined
- fin?: boolean | undefined
- },
- cb?: (err?: Error) => void
- ): void
- terminate(): void
-
- // HTML5 WebSocket events
- addEventListener(
- method: 'message',
- cb: (event: { data: any; type: string; target: WebSocket }) => void,
- options?: WebSocket.EventListenerOptions
- ): void
- addEventListener(
- method: 'close',
- cb: (event: {
- wasClean: boolean
- code: number
- reason: string
- target: WebSocket
- }) => void,
- options?: WebSocket.EventListenerOptions
- ): void
- addEventListener(
- method: 'error',
- cb: (event: {
- error: any
- message: any
- type: string
- target: WebSocket
- }) => void,
- options?: WebSocket.EventListenerOptions
- ): void
- addEventListener(
- method: 'open',
- cb: (event: { target: WebSocket }) => void,
- options?: WebSocket.EventListenerOptions
- ): void
- addEventListener(
- method: string,
- listener: () => void,
- options?: WebSocket.EventListenerOptions
- ): void
-
- removeEventListener(
- method: 'message',
- cb?: (event: { data: any; type: string; target: WebSocket }) => void
- ): void
- removeEventListener(
- method: 'close',
- cb?: (event: {
- wasClean: boolean
- code: number
- reason: string
- target: WebSocket
- }) => void
- ): void
- removeEventListener(
- method: 'error',
- cb?: (event: {
- error: any
- message: any
- type: string
- target: WebSocket
- }) => void
- ): void
- removeEventListener(
- method: 'open',
- cb?: (event: { target: WebSocket }) => void
- ): void
- removeEventListener(method: string, listener?: () => void): void
-
- // Events
- on(
- event: 'close',
- listener: (this: WebSocket, code: number, reason: string) => void
- ): this
- on(event: 'error', listener: (this: WebSocket, err: Error) => void): this
- on(
- event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
- ): this
- on(
- event: 'message',
- listener: (this: WebSocket, data: WebSocket.Data) => void
- ): this
- on(event: 'open', listener: (this: WebSocket) => void): this
- on(
- event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
- ): this
- on(
- event: 'unexpected-response',
- listener: (
- this: WebSocket,
- request: ClientRequest,
- response: IncomingMessage
- ) => void
- ): this
- on(
- event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
- ): this
-
- once(
- event: 'close',
- listener: (this: WebSocket, code: number, reason: string) => void
- ): this
- once(event: 'error', listener: (this: WebSocket, err: Error) => void): this
- once(
- event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
- ): this
- once(
- event: 'message',
- listener: (this: WebSocket, data: WebSocket.Data) => void
- ): this
- once(event: 'open', listener: (this: WebSocket) => void): this
- once(
- event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
- ): this
- once(
- event: 'unexpected-response',
- listener: (
- this: WebSocket,
- request: ClientRequest,
- response: IncomingMessage
- ) => void
- ): this
- once(
- event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
- ): this
-
- off(
- event: 'close',
- listener: (this: WebSocket, code: number, reason: string) => void
- ): this
- off(event: 'error', listener: (this: WebSocket, err: Error) => void): this
- off(
- event: 'upgrade',
- listener: (this: WebSocket, request: IncomingMessage) => void
- ): this
- off(
- event: 'message',
- listener: (this: WebSocket, data: WebSocket.Data) => void
- ): this
- off(event: 'open', listener: (this: WebSocket) => void): this
- off(
- event: 'ping' | 'pong',
- listener: (this: WebSocket, data: Buffer) => void
- ): this
- off(
- event: 'unexpected-response',
- listener: (
- this: WebSocket,
- request: ClientRequest,
- response: IncomingMessage
- ) => void
- ): this
- off(
- event: string | symbol,
- listener: (this: WebSocket, ...args: any[]) => void
- ): this
-
- addListener(
- event: 'close',
- listener: (code: number, message: string) => void
- ): this
- addListener(event: 'error', listener: (err: Error) => void): this
- addListener(
- event: 'upgrade',
- listener: (request: IncomingMessage) => void
- ): this
- addListener(
- event: 'message',
- listener: (data: WebSocket.Data) => void
- ): this
- addListener(event: 'open', listener: () => void): this
- addListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this
- addListener(
- event: 'unexpected-response',
- listener: (request: ClientRequest, response: IncomingMessage) => void
- ): this
- addListener(
- event: string | symbol,
- listener: (...args: any[]) => void
- ): this
-
- removeListener(
- event: 'close',
- listener: (code: number, message: string) => void
- ): this
- removeListener(event: 'error', listener: (err: Error) => void): this
- removeListener(
- event: 'upgrade',
- listener: (request: IncomingMessage) => void
- ): this
- removeListener(
- event: 'message',
- listener: (data: WebSocket.Data) => void
- ): this
- removeListener(event: 'open', listener: () => void): this
- removeListener(
- event: 'ping' | 'pong',
- listener: (data: Buffer) => void
- ): this
- removeListener(
- event: 'unexpected-response',
- listener: (request: ClientRequest, response: IncomingMessage) => void
- ): this
- removeListener(
- event: string | symbol,
- listener: (...args: any[]) => void
- ): this
- }
-
- /**
- * Data represents the message payload received over the WebSocket.
- */
- type Data = string | Buffer | ArrayBuffer | Buffer[]
-
- /**
- * CertMeta represents the accepted types for certificate & key data.
- */
- type CertMeta = string | string[] | Buffer | Buffer[]
-
- /**
- * VerifyClientCallbackSync is a synchronous callback used to inspect the
- * incoming message. The return value (boolean) of the function determines
- * whether or not to accept the handshake.
- */
- type VerifyClientCallbackSync = (info: {
- origin: string
- secure: boolean
- req: IncomingMessage
- }) => boolean
-
- /**
- * VerifyClientCallbackAsync is an asynchronous callback used to inspect the
- * incoming message. The return value (boolean) of the function determines
- * whether or not to accept the handshake.
- */
- type VerifyClientCallbackAsync = (
- info: { origin: string; secure: boolean; req: IncomingMessage },
- callback: (
- res: boolean,
- code?: number,
- message?: string,
- headers?: OutgoingHttpHeaders
- ) => void
- ) => void
-
- interface ClientOptions extends SecureContextOptions {
- protocol?: string | undefined
- followRedirects?: boolean | undefined
- handshakeTimeout?: number | undefined
- maxRedirects?: number | undefined
- perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined
- localAddress?: string | undefined
- protocolVersion?: number | undefined
- headers?: { [key: string]: string } | undefined
- origin?: string | undefined
- agent?: Agent | undefined
- host?: string | undefined
- family?: number | undefined
- checkServerIdentity?(servername: string, cert: CertMeta): boolean
- rejectUnauthorized?: boolean | undefined
- maxPayload?: number | undefined
- }
-
- interface PerMessageDeflateOptions {
- serverNoContextTakeover?: boolean | undefined
- clientNoContextTakeover?: boolean | undefined
- serverMaxWindowBits?: number | undefined
- clientMaxWindowBits?: number | undefined
- zlibDeflateOptions?:
- | {
- flush?: number | undefined
- finishFlush?: number | undefined
- chunkSize?: number | undefined
- windowBits?: number | undefined
- level?: number | undefined
- memLevel?: number | undefined
- strategy?: number | undefined
- dictionary?: Buffer | Buffer[] | DataView | undefined
- info?: boolean | undefined
- }
- | undefined
- zlibInflateOptions?: ZlibOptions | undefined
- threshold?: number | undefined
- concurrencyLimit?: number | undefined
- }
-
- interface OpenEvent {
- type: string
- target: WebSocket
- }
-
- interface ErrorEvent {
- error: any
- message: string
- type: string
- target: WebSocket
- }
-
- interface CloseEvent {
- wasClean: boolean
- code: number
- reason: string
- type: string
- target: WebSocket
- }
-
- interface MessageEvent {
- data: Data
- type: string
- target: WebSocket
- }
-
- interface EventListenerOptions {
- once?: boolean | undefined
- }
-
- interface ServerOptions {
- host?: string | undefined
- port?: number | undefined
- backlog?: number | undefined
- server?: HTTPServer | HTTPSServer | undefined
- verifyClient?:
- | VerifyClientCallbackAsync
- | VerifyClientCallbackSync
- | undefined
- handleProtocols?: any
- path?: string | undefined
- noServer?: boolean | undefined
- clientTracking?: boolean | undefined
- perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined
- maxPayload?: number | undefined
- }
-
- interface AddressInfo {
- address: string
- family: string
- port: number
- }
-
- // WebSocket Server
- export class Server extends EventEmitter {
- options: ServerOptions
- path: string
- clients: Set<WebSocket>
-
- constructor(options?: ServerOptions, callback?: () => void)
-
- address(): AddressInfo | string
- close(cb?: (err?: Error) => void): void
- handleUpgrade(
- request: IncomingMessage,
- socket: Socket,
- upgradeHead: Buffer,
- callback: (client: WebSocket, request: IncomingMessage) => void
- ): void
- shouldHandle(request: IncomingMessage): boolean | Promise<boolean>
-
- // Events
- on(
- event: 'connection',
- cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void
- ): this
- on(event: 'error', cb: (this: Server, error: Error) => void): this
- on(
- event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
- ): this
- on(event: 'close' | 'listening', cb: (this: Server) => void): this
- on(
- event: string | symbol,
- listener: (this: Server, ...args: any[]) => void
- ): this
-
- once(
- event: 'connection',
- cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void
- ): this
- once(event: 'error', cb: (this: Server, error: Error) => void): this
- once(
- event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
- ): this
- once(event: 'close' | 'listening', cb: (this: Server) => void): this
- once(event: string | symbol, listener: (...args: any[]) => void): this
-
- off(
- event: 'connection',
- cb: (this: Server, socket: WebSocket, request: IncomingMessage) => void
- ): this
- off(event: 'error', cb: (this: Server, error: Error) => void): this
- off(
- event: 'headers',
- cb: (this: Server, headers: string[], request: IncomingMessage) => void
- ): this
- off(event: 'close' | 'listening', cb: (this: Server) => void): this
- off(
- event: string | symbol,
- listener: (this: Server, ...args: any[]) => void
- ): this
-
- addListener(
- event: 'connection',
- cb: (client: WebSocket, request: IncomingMessage) => void
- ): this
- addListener(event: 'error', cb: (err: Error) => void): this
- addListener(
- event: 'headers',
- cb: (headers: string[], request: IncomingMessage) => void
- ): this
- addListener(event: 'close' | 'listening', cb: () => void): this
- addListener(
- event: string | symbol,
- listener: (...args: any[]) => void
- ): this
-
- removeListener(event: 'connection', cb: (client: WebSocket) => void): this
- removeListener(event: 'error', cb: (err: Error) => void): this
- removeListener(
- event: 'headers',
- cb: (headers: string[], request: IncomingMessage) => void
- ): this
- removeListener(event: 'close' | 'listening', cb: () => void): this
- removeListener(
- event: string | symbol,
- listener: (...args: any[]) => void
- ): this
- }
-
- // WebSocket stream
- function createWebSocketStream(
- websocket: WebSocket,
- options?: DuplexOptions
- ): Duplex
-}
diff --git a/packages/renderers/renderer-solid/index.js b/packages/renderers/renderer-solid/index.js
index a764e5f64..b0b9aaab5 100644
--- a/packages/renderers/renderer-solid/index.js
+++ b/packages/renderers/renderer-solid/index.js
@@ -10,20 +10,6 @@ export default {
plugins: [],
};
- if (ssr) {
- options.plugins.push([
- 'babel-plugin-module-resolver',
- {
- cwd: process.cwd(),
- alias: {
- 'solid-js/store': 'solid-js/store/dist/server.js',
- 'solid-js/web': 'solid-js/web/dist/server.js',
- 'solid-js': 'solid-js/dist/server.js',
- },
- },
- ]);
- }
-
return options;
},
viteConfig(options) {
@@ -50,7 +36,7 @@ export default {
exclude: ['@astrojs/renderer-solid/server.js'],
},
ssr: {
- external: ['solid-js/web/dist/server.js', 'solid-js/store/dist/server.js', 'solid-js/dist/server.js', 'babel-preset-solid'],
+ external: ['babel-preset-solid'],
},
};
},
diff --git a/packages/renderers/renderer-solid/package.json b/packages/renderers/renderer-solid/package.json
index 1b86fbb90..b8271e305 100644
--- a/packages/renderers/renderer-solid/package.json
+++ b/packages/renderers/renderer-solid/package.json
@@ -20,9 +20,8 @@
"./package.json": "./package.json"
},
"dependencies": {
- "babel-plugin-module-resolver": "^4.1.0",
"babel-preset-solid": "^1.2.3",
- "solid-js": "^1.2.3"
+ "solid-js": "^1.3.3"
},
"engines": {
"node": "^14.15.0 || >=16.0.0"
diff --git a/packages/renderers/renderer-solid/server.js b/packages/renderers/renderer-solid/server.js
index 7c8de39af..d32d60a64 100644
--- a/packages/renderers/renderer-solid/server.js
+++ b/packages/renderers/renderer-solid/server.js
@@ -1,4 +1,4 @@
-import { renderToString, ssr, createComponent } from 'solid-js/web/dist/server.js';
+import { renderToString, ssr, createComponent } from 'solid-js/web';
function check(Component, props, children) {
if (typeof Component !== 'function') return false;
diff --git a/packages/renderers/renderer-solid/static-html.js b/packages/renderers/renderer-solid/static-html.js
index 9f1a394b5..9f969eac9 100644
--- a/packages/renderers/renderer-solid/static-html.js
+++ b/packages/renderers/renderer-solid/static-html.js
@@ -1,4 +1,4 @@
-import { ssr } from 'solid-js/web/dist/server.js';
+import { ssr } from 'solid-js/web';
/**
* Astro passes `children` as a string of HTML, so we need
diff --git a/packages/renderers/renderer-svelte/package.json b/packages/renderers/renderer-svelte/package.json
index f9312e3da..c96c47a97 100644
--- a/packages/renderers/renderer-svelte/package.json
+++ b/packages/renderers/renderer-svelte/package.json
@@ -20,9 +20,9 @@
"./package.json": "./package.json"
},
"dependencies": {
- "@sveltejs/vite-plugin-svelte": "1.0.0-next.30",
- "svelte": "^3.44.3",
- "svelte-preprocess": "^4.9.8"
+ "@sveltejs/vite-plugin-svelte": "^1.0.0-next.37",
+ "svelte": "^3.46.2",
+ "svelte-preprocess": "^4.10.2"
},
"engines": {
"node": "^14.15.0 || >=16.0.0"
diff --git a/packages/renderers/renderer-vue/package.json b/packages/renderers/renderer-vue/package.json
index e1980b384..97edb22ed 100644
--- a/packages/renderers/renderer-vue/package.json
+++ b/packages/renderers/renderer-vue/package.json
@@ -20,8 +20,8 @@
"./package.json": "./package.json"
},
"dependencies": {
- "@vitejs/plugin-vue": "^1.9.4",
- "vue": "^3.2.22"
+ "@vitejs/plugin-vue": "^2.1.0",
+ "vue": "^3.2.27"
},
"engines": {
"node": "^14.15.0 || >=16.0.0"
diff --git a/yarn.lock b/yarn.lock
index 8f5ddd546..0a9ede391 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -106,13 +106,6 @@
"@algolia/logger-common" "4.12.1"
"@algolia/requester-common" "4.12.1"
-"@ampproject/remapping@^2.0.0":
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.0.tgz#72becdf17ee44b2d1ac5651fb12f1952c336fe23"
- integrity sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==
- dependencies:
- "@jridgewell/trace-mapping" "^0.3.0"
-
"@antfu/install-pkg@^0.1.0":
version "0.1.0"
resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.1.0.tgz#8d8c61820cbc32e5c37d82d515485ad3ee9bd052"
@@ -180,27 +173,27 @@
integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==
"@babel/core@^7.11.1", "@babel/core@^7.15.8":
- version "7.17.0"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.0.tgz#16b8772b0a567f215839f689c5ded6bb20e864d5"
- integrity sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==
+ version "7.16.10"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.10.tgz#ebd034f8e7ac2b6bfcdaa83a161141a646f74b50"
+ integrity sha512-pbiIdZbCiMx/MM6toR+OfXarYix3uz0oVsnNtfdAGTcCTu3w/JGF8JhirevXLBJUu0WguSZI12qpKnx7EeMyLA==
dependencies:
- "@ampproject/remapping" "^2.0.0"
"@babel/code-frame" "^7.16.7"
- "@babel/generator" "^7.17.0"
+ "@babel/generator" "^7.16.8"
"@babel/helper-compilation-targets" "^7.16.7"
"@babel/helper-module-transforms" "^7.16.7"
- "@babel/helpers" "^7.17.0"
- "@babel/parser" "^7.17.0"
+ "@babel/helpers" "^7.16.7"
+ "@babel/parser" "^7.16.10"
"@babel/template" "^7.16.7"
- "@babel/traverse" "^7.17.0"
- "@babel/types" "^7.17.0"
+ "@babel/traverse" "^7.16.10"
+ "@babel/types" "^7.16.8"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.1.2"
semver "^6.3.0"
+ source-map "^0.5.0"
-"@babel/generator@^7.17.0":
+"@babel/generator@^7.16.8", "@babel/generator@^7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e"
integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==
@@ -414,10 +407,10 @@
"@babel/traverse" "^7.16.8"
"@babel/types" "^7.16.8"
-"@babel/helpers@^7.17.0":
- version "7.17.0"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.0.tgz#79cdf6c66a579f3a7b5e739371bc63ca0306886b"
- integrity sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==
+"@babel/helpers@^7.16.7":
+ version "7.17.2"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417"
+ integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==
dependencies:
"@babel/template" "^7.16.7"
"@babel/traverse" "^7.17.0"
@@ -432,7 +425,12 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.16.4", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0":
+"@babel/parser@^7.1.0", "@babel/parser@^7.16.10", "@babel/parser@^7.16.4", "@babel/parser@^7.16.7":
+ version "7.16.10"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.10.tgz#aba1b1cb9696a24a19f59c41af9cf17d1c716a88"
+ integrity sha512-Sm/S9Or6nN8uiFsQU1yodyDW3MWXQhFeqzMPM+t8MJjM+pLsnFVxFZzkpXKvUXh+Gz9cbMoYYs484+Jw/NTEFQ==
+
+"@babel/parser@^7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c"
integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==
@@ -555,7 +553,7 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
-"@babel/plugin-proposal-private-methods@^7.16.11":
+"@babel/plugin-proposal-private-methods@^7.16.7":
version "7.16.11"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50"
integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==
@@ -948,9 +946,9 @@
"@babel/helper-plugin-utils" "^7.16.7"
"@babel/preset-env@^7.11.0":
- version "7.16.11"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982"
- integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==
+ version "7.16.10"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.10.tgz#84400e6b5ee1efd982f55c61f3b6ac3fb5c8ab57"
+ integrity sha512-iCac3fZn9oOcLqc1N2/copPiX7aoxzsvjeDdXoZobrlbQ6YGgS3bL9HyldOJ8V8AY5P7pFynCATrn7M4dMw0Yg==
dependencies:
"@babel/compat-data" "^7.16.8"
"@babel/helper-compilation-targets" "^7.16.7"
@@ -970,7 +968,7 @@
"@babel/plugin-proposal-object-rest-spread" "^7.16.7"
"@babel/plugin-proposal-optional-catch-binding" "^7.16.7"
"@babel/plugin-proposal-optional-chaining" "^7.16.7"
- "@babel/plugin-proposal-private-methods" "^7.16.11"
+ "@babel/plugin-proposal-private-methods" "^7.16.7"
"@babel/plugin-proposal-private-property-in-object" "^7.16.7"
"@babel/plugin-proposal-unicode-property-regex" "^7.16.7"
"@babel/plugin-syntax-async-generators" "^7.8.4"
@@ -1054,7 +1052,7 @@
"@babel/parser" "^7.16.7"
"@babel/types" "^7.16.7"
-"@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0":
+"@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30"
integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==
@@ -1338,18 +1336,6 @@
resolved "https://registry.yarnpkg.com/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.28.tgz#a5ad7996f42e43e4acbb4e0010d663746d0e9997"
integrity sha512-bprfNmYt1opFUFEtD2XfY/kEsm13bzHQgU80uMjhuK0DJ914IjolT1GytpkdM6tJ4MBvyiJPP+bTtWO+BZ7c7w==
-"@hapi/hoek@^9.0.0":
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17"
- integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==
-
-"@hapi/topo@^5.0.0":
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012"
- integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==
- dependencies:
- "@hapi/hoek" "^9.0.0"
-
"@humanwhocodes/config-array@^0.9.2":
version "0.9.3"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.3.tgz#f2564c744b387775b436418491f15fce6601f63e"
@@ -1381,24 +1367,6 @@
kolorist "^1.5.0"
local-pkg "^0.4.0"
-"@jridgewell/resolve-uri@^3.0.3":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz#b876e3feefb9c8d3aa84014da28b5e52a0640d72"
- integrity sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==
-
-"@jridgewell/sourcemap-codec@^1.4.10":
- version "1.4.10"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz#baf57b4e2a690d4f38560171f91783656b7f8186"
- integrity sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==
-
-"@jridgewell/trace-mapping@^0.3.0":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz#e051581782a770c30ba219634f2019241c5d3cde"
- integrity sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==
- dependencies:
- "@jridgewell/resolve-uri" "^3.0.3"
- "@jridgewell/sourcemap-codec" "^1.4.10"
-
"@jsdevtools/rehype-toc@3.0.2":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@jsdevtools/rehype-toc/-/rehype-toc-3.0.2.tgz#29c32e6b40cd4b5dafd96cb90d5057ac5dab4a51"
@@ -1606,7 +1574,7 @@
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
-"@proload/core@^0.2.1":
+"@proload/core@^0.2.2":
version "0.2.2"
resolved "https://registry.yarnpkg.com/@proload/core/-/core-0.2.2.tgz#d6de30e06a8864bdd0fbe568f87d0582cf988c1d"
integrity sha512-HYQEblYXIpW77kvGyW4penEl9D9e9MouPhTqVaDz9+QVFliYjsq18inTfnfTa81s3oraPVtTk60tqCWOf2fKGQ==
@@ -1666,23 +1634,6 @@
estree-walker "^2.0.1"
picomatch "^2.2.2"
-"@sideway/address@^4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.3.tgz#d93cce5d45c5daec92ad76db492cc2ee3c64ab27"
- integrity sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==
- dependencies:
- "@hapi/hoek" "^9.0.0"
-
-"@sideway/formula@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c"
- integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==
-
-"@sideway/pinpoint@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
- integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
-
"@surma/rollup-plugin-off-main-thread@^2.2.3":
version "2.2.3"
resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053"
@@ -1693,17 +1644,16 @@
magic-string "^0.25.0"
string.prototype.matchall "^4.0.6"
-"@sveltejs/vite-plugin-svelte@1.0.0-next.30":
- version "1.0.0-next.30"
- resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.30.tgz#a6cd181bb406d590c1fa8d480c55950d567689f9"
- integrity sha512-YQqdMxjL1VgSFk4/+IY3yLwuRRapPafPiZTiaGEq1psbJYSNYUWx9F1zMm32GMsnogg3zn99mGJOqe3ld3HZSg==
+"@sveltejs/vite-plugin-svelte@^1.0.0-next.37":
+ version "1.0.0-next.37"
+ resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.37.tgz#bb553425a3f9b780221134b04b9ace4165279d3c"
+ integrity sha512-EdSXw2rXeOahNrQfMJVZxa/NxZxW1a0TiBI3s+pVxnxU14hEQtnkLtdbTFhnceu22gJpNPFSIJRcIwRBBDQIeA==
dependencies:
- "@rollup/pluginutils" "^4.1.1"
- debug "^4.3.2"
+ "@rollup/pluginutils" "^4.1.2"
+ debug "^4.3.3"
kleur "^4.1.4"
magic-string "^0.25.7"
- require-relative "^0.8.7"
- svelte-hmr "^0.14.7"
+ svelte-hmr "^0.14.9"
"@tootallnate/once@1":
version "1.1.2"
@@ -2006,13 +1956,6 @@
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==
-"@types/yauzl@^2.9.1":
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a"
- integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==
- dependencies:
- "@types/node" "*"
-
"@typescript-eslint/eslint-plugin@^5.0.0":
version "5.10.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz#f8c1d59fc37bd6d9d11c97267fdfe722c4777152"
@@ -2195,100 +2138,100 @@
"@unocss/inspector" "0.15.6"
"@unocss/scope" "0.15.6"
-"@vitejs/plugin-vue@^1.9.4":
- version "1.10.2"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz#d718479e2789d8a94b63e00f23f1898ba239253a"
- integrity sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==
+"@vitejs/plugin-vue@^2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-2.1.0.tgz#ddf5e0059f84f2ff649afc25ce5a59211e670542"
+ integrity sha512-AZ78WxvFMYd8JmM/GBV6a6SGGTU0GgN/0/4T+FnMMsLzFEzTeAUwuraapy50ifHZsC+G5SvWs86bvaCPTneFlA==
-"@vue/compiler-core@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.30.tgz#6c5b362490930e72de8d033270a145e3830ae5c4"
- integrity sha512-64fq1KfcR+k3Vlw+IsBM2VhV5B+2IP3YxvKU8LWCDLrkmlXtbf2eMK6+0IwX5KP41D0f1gzryIiXR7P8cB9O5Q==
+"@vue/compiler-core@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.27.tgz#01bd5e5071f58f43e4184ba7fa810226799a5383"
+ integrity sha512-JyxAglSM/pb9paG5ZNuKrf5IUpzLzQA3khjWGF9oESELCLQlt6O3YyPMR2A69wIpYWrf5mScZ8YY8TJKOI/1kQ==
dependencies:
"@babel/parser" "^7.16.4"
- "@vue/shared" "3.2.30"
+ "@vue/shared" "3.2.27"
estree-walker "^2.0.2"
source-map "^0.6.1"
-"@vue/compiler-dom@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.30.tgz#ed15e6243227baeaa445d04df804aee6e4926eab"
- integrity sha512-t7arHz2SXLCXlF2fdGDFVbhENbGMez254Z5edUqb//6WXJU1lC7GvSkUE7i5x8WSjgfqt60i0V8zdmk16rvLdw==
+"@vue/compiler-dom@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.27.tgz#a12163e3f3f1d5ff1969253eba4b4ea3e67bbd0f"
+ integrity sha512-NyQ7nEbopUBPUMHM4c3FPCbFbnQwptoPjW5Y5qfJ7hfiCNhOuhQsDNqi5JYKBxfpxiFNwjcN9F8t1AsnLrDloQ==
dependencies:
- "@vue/compiler-core" "3.2.30"
- "@vue/shared" "3.2.30"
+ "@vue/compiler-core" "3.2.27"
+ "@vue/shared" "3.2.27"
-"@vue/compiler-sfc@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.30.tgz#9d2e56adb859059551fc1204bc37503f168c4d0c"
- integrity sha512-P/5YpILtcQY92z72gxhkyOUPHVskEzhSrvYi91Xcr+csOxaDaYU5OqOxCzZKcf3Og70Tat404vO1OHrwprN90A==
+"@vue/compiler-sfc@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.27.tgz#43bf23fe24feacba334636fa7a332f9d8a532c8c"
+ integrity sha512-WyecUhLN5UAQAr2QlmG2nA56OEnhZJaBnSw0G1tazb9rwDuK0V9tnbIXbQgmQlx+x4sJxgg61yWGcIXfilTl3A==
dependencies:
"@babel/parser" "^7.16.4"
- "@vue/compiler-core" "3.2.30"
- "@vue/compiler-dom" "3.2.30"
- "@vue/compiler-ssr" "3.2.30"
- "@vue/reactivity-transform" "3.2.30"
- "@vue/shared" "3.2.30"
+ "@vue/compiler-core" "3.2.27"
+ "@vue/compiler-dom" "3.2.27"
+ "@vue/compiler-ssr" "3.2.27"
+ "@vue/reactivity-transform" "3.2.27"
+ "@vue/shared" "3.2.27"
estree-walker "^2.0.2"
magic-string "^0.25.7"
postcss "^8.1.10"
source-map "^0.6.1"
-"@vue/compiler-ssr@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.30.tgz#fc2bc13a9cdfd70fcffab3f0bc7de141cd9c3411"
- integrity sha512-OUh3MwAu/PsD7VN3UOdBbTkltkrUCNouSht47+CMRzpUR5+ta7+xyMAVHeq8wg4YZenWaJimbR5TL35Ka4Vk6g==
+"@vue/compiler-ssr@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.27.tgz#49aa3afd1602275aba3c3e331764984111a460bf"
+ integrity sha512-+l09t319iV7HVSrXfBw9OLwMZIPOFTXmHjZ61Bc5ZcwKqOYAR4uTurKpoXAfcSc5qs/q6WdE9jY3nrP0LUEMQQ==
dependencies:
- "@vue/compiler-dom" "3.2.30"
- "@vue/shared" "3.2.30"
+ "@vue/compiler-dom" "3.2.27"
+ "@vue/shared" "3.2.27"
-"@vue/reactivity-transform@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.30.tgz#2006e9f4645777a481b78ae77fc486159afa8480"
- integrity sha512-Le5XzCJyK3qTjoTnvQG/Ehu8fYjayauMNFyMaEnwFlm/avDofpuibpS9u+/6AgzsGnVWN+i0Jgf25bJd9DIwMw==
+"@vue/reactivity-transform@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.27.tgz#610b6df174cdceba6de1376f3218736c3b0e753d"
+ integrity sha512-67//61ObGxGnVrPhjygocb24eYUh+TFMhkm7szm8v5XdKXjkNl7qgIOflwGvUnwuIRJmr9nZ7+PvY0fL+H2upA==
dependencies:
"@babel/parser" "^7.16.4"
- "@vue/compiler-core" "3.2.30"
- "@vue/shared" "3.2.30"
+ "@vue/compiler-core" "3.2.27"
+ "@vue/shared" "3.2.27"
estree-walker "^2.0.2"
magic-string "^0.25.7"
-"@vue/reactivity@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.30.tgz#fdae2bb66d075c34593ea7e15c6831300a1ad39e"
- integrity sha512-qlNKbkRn2JiGxVUEdoXbLAy+vcuHUCcq+YH2uXWz0BNMvXY2plmz+oqsw+694llwmYLkke5lbdYF4DIupisIkg==
+"@vue/reactivity@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.27.tgz#db7c4eefded938a8974e768b7b8f9ff4fad34a62"
+ integrity sha512-QPfIQEJidRGIu/mPexhcB4csp1LEg2Nr+/QE72MnXs/OYDtFErhC9FxIyymkxp/xvAgL5wsnSOuDD6zWF42vRQ==
dependencies:
- "@vue/shared" "3.2.30"
+ "@vue/shared" "3.2.27"
-"@vue/runtime-core@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.30.tgz#1acc119ff8a49c06af6b03611bc4e03f464ca8a2"
- integrity sha512-RTi7xH0Ht/6wfbo2WFBMJTEiyWFTqGhrksJm8lz6E+auO6lXZ6Eq3gPNfLt47GDWCm4xyrv+rs5R4UbarPEQ1Q==
+"@vue/runtime-core@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.27.tgz#1ea8acd30071f44bcf3915b088ff5d993a9d3154"
+ integrity sha512-NJrjuViHJyrT4bwIocbE4XDaDlA1Pj61pQlneZZdFEvgdMLlhzCCiJ4WZnWcohYQeisUAZjEFKK8GjQieDPFbw==
dependencies:
- "@vue/reactivity" "3.2.30"
- "@vue/shared" "3.2.30"
+ "@vue/reactivity" "3.2.27"
+ "@vue/shared" "3.2.27"
-"@vue/runtime-dom@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.30.tgz#16a85b359ea1fff9b1dd61e9d00e93f4652aba5e"
- integrity sha512-a3+jrncDvEFQmB+v9k0VyT4/Y3XO6OAueCroXXY4yLyr6PJeyxljweV5TzvW0rvVzH9sZO0QAvG76Lo+6C92Qw==
+"@vue/runtime-dom@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.27.tgz#d13f9f5f27815041f5e9f493d77121955e3f7166"
+ integrity sha512-tlnKkvBSkV7MPUp/wRFsYcv67U1rUeZTPfpPzq5Kpmw5NNGkY6J075fFBH2k0MNxDucXS+qfStNrxAyGTUMkSA==
dependencies:
- "@vue/runtime-core" "3.2.30"
- "@vue/shared" "3.2.30"
+ "@vue/runtime-core" "3.2.27"
+ "@vue/shared" "3.2.27"
csstype "^2.6.8"
-"@vue/server-renderer@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.30.tgz#4acccad3933475d07b94560c6cb205363975b969"
- integrity sha512-pzb8J/w+JdZVOtuKFlirGqrs4GP60FXGDJySw3WV2pCetuFstaacDrnymEeSo3ohAD+Qjv7zAG+Y7OvkdxQxmQ==
+"@vue/server-renderer@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.27.tgz#a0caee0f7571fa741e4efaa72951a1cd70d61551"
+ integrity sha512-dZnzkFCDe6A/GIe/F1LcG6lWpprHVh62DjTv8wubtkHwfJWOmOeHp+KvPDRrswL/L3ghsm+E31xY+pvkgM3pbQ==
dependencies:
- "@vue/compiler-ssr" "3.2.30"
- "@vue/shared" "3.2.30"
+ "@vue/compiler-ssr" "3.2.27"
+ "@vue/shared" "3.2.27"
-"@vue/shared@3.2.30":
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.30.tgz#e2ba8f6692399c27c81c668ecd3f1a4e13ee2f5e"
- integrity sha512-B3HouBtUxcfu2w2d+VhdLcVBXKYYhXiFMAfQ+hoe8NUhKkPRkWDIqhpuehCZxVQ3S2dN1P1WfKGlxGC+pfmxGg==
+"@vue/shared@3.2.27":
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.27.tgz#d5c6e574ee1afd55043470bf70b15772da4e19a2"
+ integrity sha512-rpAn9k6O08Lvo7ekBIAnkOukX/4EsEQLPrRJBKhIEasMsOI5eX0f6mq1sDUSY7cgAqWw2d7QtP74CWxdXoyKxA==
"@web/parse5-utils@^1.3.0":
version "1.3.0"
@@ -2303,11 +2246,6 @@
resolved "https://registry.yarnpkg.com/@webcomponents/template-shadowroot/-/template-shadowroot-0.1.0.tgz#adb3438d0d9a18e8fced08abc253f56b7eadab00"
integrity sha512-ry84Vft6xtRBbd4M/ptRodbOLodV5AD15TYhyRghCRgIcJJKmYmJ2v2BaaWxygENwh6Uq3zTfGPmlckKT/GXsQ==
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
- integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
acorn-jsx@^5.3.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
@@ -2397,11 +2335,6 @@ ansi-colors@4.1.1, ansi-colors@^4.1.1:
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
-ansi-regex@^0.2.0, ansi-regex@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
- integrity sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=
-
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
@@ -2417,16 +2350,6 @@ ansi-regex@^6.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-ansi-styles@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
- integrity sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
- integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -2484,13 +2407,6 @@ array-iterate@^1.0.0:
resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.4.tgz#add1522e9dd9749bb41152d08b845bd08d6af8b7"
integrity sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA==
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
- dependencies:
- array-uniq "^1.0.1"
-
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
@@ -2501,11 +2417,6 @@ array-union@^3.0.1:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975"
integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==
-array-uniq@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
- integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
-
arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@@ -2533,23 +2444,11 @@ ast-types@^0.13.2:
dependencies:
tslib "^2.0.1"
-astring@^1.7.5:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.1.tgz#a91c4afd4af3523e11f31242a3d5d9af62bb6cc6"
- integrity sha512-Aj3mbwVzj7Vve4I/v2JYOPFkCGM2YS7OqQTNSxmUR+LECRpokuPgAYghePgr6SALDo5bD5DlfbSaYjOzGJZOLQ==
-
async@0.9.x:
version "0.9.2"
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
-async@~2.6.3:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
- integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
- dependencies:
- lodash "^4.17.14"
-
at-least-node@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
@@ -2572,18 +2471,6 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
-axe-core@^4.0.2:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413"
- integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==
-
-axios@^0.21.1:
- version "0.21.4"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
- integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
- dependencies:
- follow-redirects "^1.14.0"
-
babel-plugin-dynamic-import-node@^2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
@@ -2601,17 +2488,6 @@ babel-plugin-jsx-dom-expressions@^0.31.12:
"@babel/types" "^7.16.0"
html-entities "2.3.2"
-babel-plugin-module-resolver@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2"
- integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==
- dependencies:
- find-babel-config "^1.2.0"
- glob "^7.1.6"
- pkg-up "^3.1.0"
- reselect "^4.0.0"
- resolve "^1.13.1"
-
babel-plugin-polyfill-corejs2@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5"
@@ -2675,36 +2551,6 @@ better-path-resolve@1.0.0:
dependencies:
is-windows "^1.0.0"
-bfj@~7.0.2:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2"
- integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==
- dependencies:
- bluebird "^3.5.5"
- check-types "^11.1.1"
- hoopy "^0.1.4"
- tryer "^1.0.1"
-
-bhttp@^1.2.1:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/bhttp/-/bhttp-1.2.8.tgz#8172ef69f16239bd77c30fa67f72c89737af24b2"
- integrity sha512-ZwEA5FKEUhc98EHRX+BkNmUOs48RTnglvfze2+p0HrMPwhQBtVw1aAYyylnCtRl6x6vltCkzGo2+twQ6LVfm6Q==
- dependencies:
- bluebird "^2.8.2"
- concat-stream "^1.4.7"
- debug "^2.1.1"
- dev-null "^0.1.1"
- errors "^0.2.0"
- extend "^2.0.0"
- form-data2 "^1.0.0"
- form-fix-array "^1.0.0"
- lodash.clonedeep "^4.5.0"
- lodash.merge "^4.6.2"
- stream-length "^1.0.2"
- through2-sink "^1.0.0"
- through2-spy "^1.2.0"
- tough-cookie "^2.3.1"
-
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -2719,16 +2565,6 @@ bl@^4.0.3:
inherits "^2.0.4"
readable-stream "^3.4.0"
-bluebird@3.7.2, bluebird@^3.5.5:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
- integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-
-bluebird@^2.3.5, bluebird@^2.6.2, bluebird@^2.8.1, bluebird@^2.8.2:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
- integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=
-
boolbase@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
@@ -2756,34 +2592,6 @@ breakword@^1.0.5:
dependencies:
wcwidth "^1.0.1"
-broken-link-checker@^0.7.8:
- version "0.7.8"
- resolved "https://registry.yarnpkg.com/broken-link-checker/-/broken-link-checker-0.7.8.tgz#47ea837e1b43ec2feac220207dc3f44c03b49ec0"
- integrity sha512-/zH4/nLMNKDeDH5nVuf/R6WYd0Yjnar1NpcdAO2+VlwjGKzJa6y42C03UO+imBSHwe6BefSkVi82fImE2Rb7yg==
- dependencies:
- bhttp "^1.2.1"
- calmcard "~0.1.1"
- chalk "^1.1.3"
- char-spinner "^1.0.1"
- condense-whitespace "^1.0.0"
- default-user-agent "^1.0.0"
- errno "~0.1.4"
- extend "^3.0.0"
- http-equiv-refresh "^1.0.0"
- humanize-duration "^3.9.1"
- is-stream "^1.0.1"
- is-string "^1.0.4"
- limited-request-queue "^2.0.0"
- link-types "^1.1.0"
- maybe-callback "^2.1.0"
- nopter "~0.3.0"
- parse5 "^3.0.2"
- robot-directives "~0.3.0"
- robots-txt-guard "~0.1.0"
- robots-txt-parse "~0.0.4"
- urlcache "~0.7.0"
- urlobj "0.0.11"
-
browser-stdout@1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
@@ -2800,7 +2608,7 @@ browserslist@^4.17.5, browserslist@^4.19.1:
node-releases "^2.0.1"
picocolors "^1.0.0"
-buffer-crc32@^0.2.5, buffer-crc32@~0.2.3:
+buffer-crc32@^0.2.5:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
@@ -2810,7 +2618,7 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-buffer@^5.2.1, buffer@^5.5.0:
+buffer@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
@@ -2841,28 +2649,11 @@ call-bind@^1.0.0, call-bind@^1.0.2:
function-bind "^1.1.1"
get-intrinsic "^1.0.2"
-caller-path@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
- integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
- dependencies:
- callsites "^0.2.0"
-
-callsites@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
- integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
-
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-calmcard@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/calmcard/-/calmcard-0.1.1.tgz#35ac2b66492b0ed39ad06a893a0ff6e61124e449"
- integrity sha1-NawrZkkrDtOa0GqJOg/25hEk5Ek=
-
camelcase-css@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
@@ -2877,11 +2668,6 @@ camelcase-keys@^6.2.2:
map-obj "^4.0.0"
quick-lru "^4.0.1"
-camelcase@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
- integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
-
camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
@@ -2915,18 +2701,7 @@ chai@^4.3.4:
pathval "^1.1.1"
type-detect "^4.0.5"
-chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
+chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -2951,22 +2726,6 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@~0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174"
- integrity sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=
- dependencies:
- ansi-styles "^1.1.0"
- escape-string-regexp "^1.0.0"
- has-ansi "^0.1.0"
- strip-ansi "^0.3.0"
- supports-color "^0.2.0"
-
-char-spinner@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081"
- integrity sha1-5upnvSR+EHESmDt6sEee02KAAIE=
-
character-entities-html4@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
@@ -2997,16 +2756,6 @@ check-error@^1.0.2:
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
-check-more-types@2.24.0:
- version "2.24.0"
- resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
- integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=
-
-check-types@^11.1.1:
- version "11.1.2"
- resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f"
- integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==
-
cheerio-select@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.5.0.tgz#faf3daeb31b17c5e1a9dabcee288aaf8aafa5823"
@@ -3018,7 +2767,7 @@ cheerio-select@^1.5.0:
domhandler "^4.2.0"
domutils "^2.7.0"
-cheerio@^1.0.0-rc.10, cheerio@~1.0.0-rc.10:
+cheerio@^1.0.0-rc.10:
version "1.0.0-rc.10"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e"
integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==
@@ -3066,13 +2815,6 @@ clean-stack@^2.0.0:
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
-cli-table@~0.3.1:
- version "0.3.11"
- resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee"
- integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==
- dependencies:
- colors "1.0.3"
-
cliui@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
@@ -3151,20 +2893,6 @@ colorette@^2.0.16:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
-colors@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
- integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=
-
-combined-stream2@^1.0.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/combined-stream2/-/combined-stream2-1.1.2.tgz#f6e14b7a015666f8c7b0a1fac506240164ac3570"
- integrity sha1-9uFLegFWZvjHsKH6xQYkAWSsNXA=
- dependencies:
- bluebird "^2.8.1"
- debug "^2.1.1"
- stream-length "^1.0.1"
-
comma-separated-tokens@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98"
@@ -3175,16 +2903,6 @@ commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-commander@~6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
- integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
-
-commander@~8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-8.0.0.tgz#1da2139548caef59bd23e66d18908dfb54b02258"
- integrity sha512-Xvf85aAtu6v22+E5hfVoLHqyul/jyxh91zvqk/ioJTQuJR7Z78n7H558vMPKanPSRgIEeZemT92I2g9Y8LPbSQ==
-
common-ancestor-path@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7"
@@ -3200,21 +2918,6 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@^1.4.7:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
- integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
- dependencies:
- buffer-from "^1.0.0"
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-condense-whitespace@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/condense-whitespace/-/condense-whitespace-1.0.0.tgz#8376d98ef028e6cb2cd2468e28ce42c5c65ab1a9"
- integrity sha1-g3bZjvAo5sss0kaOKM5CxcZasak=
-
consola@^2.15.3:
version "2.15.3"
resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550"
@@ -3265,17 +2968,6 @@ cross-spawn@^5.1.0:
shebang-command "^1.2.0"
which "^1.2.9"
-cross-spawn@^6.0.5:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
- dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -3361,7 +3053,7 @@ dataloader@^1.4.0:
resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8"
integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==
-debug@2.6.9, debug@^2.1.1:
+debug@2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -3375,13 +3067,6 @@ debug@4, debug@4.3.3, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, de
dependencies:
ms "2.1.2"
-debug@4.3.2:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
- integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
- dependencies:
- ms "2.1.2"
-
decamelize-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
@@ -3436,13 +3121,6 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
-default-user-agent@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6"
- integrity sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=
- dependencies:
- os-name "~1.0.3"
-
defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
@@ -3567,16 +3245,6 @@ detective@^5.2.0:
defined "^1.0.0"
minimist "^1.1.1"
-dev-null@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/dev-null/-/dev-null-0.1.1.tgz#5a205ce3c2b2ef77b6238d6ba179eb74c6a0e818"
- integrity sha1-WiBc48Ky73e2I41roXnrdMag6Bg=
-
-devtools-protocol@0.0.869402:
- version "0.0.869402"
- resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.869402.tgz#03ade701761742e43ae4de5dc188bcd80f156d8d"
- integrity sha512-VvlVYY+VDJe639yHs5PHISzdWTLL3Aw8rO4cvUtwvoxFd6FHbE4OpHHcde52M6096uYYazAmd4l0o5VuFRO2WA==
-
didyoumean@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
@@ -3646,7 +3314,7 @@ dotenv@^8.1.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
-duplexer@^0.1.2, duplexer@~0.1.1:
+duplexer@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
@@ -3669,9 +3337,9 @@ ejs@^3.1.6:
jake "^10.6.1"
electron-to-chromium@^1.4.17:
- version "1.4.65"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz#c0820db06e268e0a2fd4dbce38fb5376d38ca449"
- integrity sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==
+ version "1.4.49"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz#5b6a3dc032590beef4be485a4b0b3fe7d0e3dfd7"
+ integrity sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==
emmet@^2.1.5:
version "2.3.5"
@@ -3720,28 +3388,11 @@ entities@^3.0.1:
resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
-envinfo@~7.8.1:
- version "7.8.1"
- resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
- integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
-
eol@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd"
integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==
-eol@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eol/-/eol-0.2.0.tgz#2f6db086a243a46e3e5dbd0e13435c7ebebf09dd"
- integrity sha1-L22whqJDpG4+Xb0OE0Ncfr6/Cd0=
-
-errno@~0.1.4:
- version "0.1.8"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
- integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
- dependencies:
- prr "~1.0.1"
-
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -3749,11 +3400,6 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-errors@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/errors/-/errors-0.2.0.tgz#0f51e889daa3e11b19e7186d11f104aa66eb2403"
- integrity sha1-D1Hoidqj4RsZ5xhtEfEEqmbrJAM=
-
es-abstract@^1.18.5, es-abstract@^1.19.1:
version "1.19.1"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
@@ -3804,261 +3450,266 @@ es6-promise@^3.1.2:
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=
-esbuild-android-arm64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44"
- integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==
-
esbuild-android-arm64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.7.tgz#528886c36968aa6ab6496392d419654dda88f092"
integrity sha512-yqCTKzmm3jiUXgi0yeKhvwZCZTqClUXwwMRAntcM9u/xvXhmpw0V0Z4qDEpnkmF2NCMzmJRH+DAAQ5whuf3CYA==
+esbuild-android-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.18.tgz#027a1cd57e57c6219341e116c4ac41a9952d69d1"
+ integrity sha512-AuE8vIwc6QLquwykyscFk0Ji3RFczoOvjka64FJlcjLLhD6VsS584RYlQrSnPpRkv69PunUvyrBoEF7JFTJijg==
+
esbuild-android-arm64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.19.tgz#32b8a03366440018f40d5fee7608336a5e4ae718"
integrity sha512-5Mziv27+XaHXEizlDBkgzSbkYvAyPCwarmMHr5WYYjtM4oAz1DdIT+arZY1mW6M4/5pGPsmFCGyJ3UVXtgjtMw==
-esbuild-darwin-64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72"
- integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==
-
esbuild-darwin-64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.7.tgz#32cf420d43ca448e7741a90d0d4c6dc5385969da"
integrity sha512-MvsgMUWzq5FxoeJLSavw3rgQbaC55A8QTI1U2/8MWamtAeDKyzWQnglcsF0/TkjGLaKEqS0ZLo8akJ8q34BCtw==
+esbuild-darwin-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.18.tgz#a219c50aa98b5bc08d7ce3677f5bae4b8aa5101b"
+ integrity sha512-nN1XziZtDy8QYOggaXC3zu0vVh8YJpS8Bol7bHaxx0enTLDSFBCXUUJEKYpmAAJ4OZRPgjXv8NzEHHQWQvLzXg==
+
esbuild-darwin-64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.19.tgz#2c3e49b358a85328676298e327c158a936ecbd87"
integrity sha512-7AVoNnlLkU2Cm7yaJkPO3RxDwjbXR5pv6JQlnhUEjGdq2+anR235whUf9bJ77s3PgawLKN4bd/FiS+zTnrR5DA==
-esbuild-darwin-arm64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a"
- integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==
-
esbuild-darwin-arm64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.7.tgz#c80f0b62c8ae4710b17090f507037aeae73e9016"
integrity sha512-tuP+dpIzXj17UC17VkHFDAH5nB7MajJK7sF8Fz4iVo8cml8YXj3MeNtjjLmx9YFvPs4XW3hFw1eqZJ06h2ssIA==
+esbuild-darwin-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.18.tgz#eb2d17d33c5991c183c99843698182bb702eb592"
+ integrity sha512-v0i2n6TCsbxco/W1fN8RgQt3RW00Q9zJO2eqiAdmLWg6Hx0HNHloZyfhF11i7nMUUgW8r5n++ZweIXjAFPE/gQ==
+
esbuild-darwin-arm64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.19.tgz#6eb8ea8d4dc161889ec5e4e66c2ec9719e9f46df"
integrity sha512-0th1UC7AwpUVjRAVbfrHeFMxAO4mHfj+ai+gkUmoTNmAZ2h5+wJM0la+9hEu7MtgE70NoX7c1m50PKJupFOk6A==
-esbuild-freebsd-64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85"
- integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==
-
esbuild-freebsd-64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.7.tgz#0b826a9655446c0d0a01a4a996d450e5cb0e033a"
integrity sha512-p07TrpkCJJyAXXCXFm2IpAvyASUTcuT0OF43riEsgjuRJmtaNBOUENecr2B2k/zd9wkGz6UyxxtnFntaBttkDg==
+esbuild-freebsd-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.18.tgz#de06b6ce361bdf51fb66e59b220f67c4124cc728"
+ integrity sha512-XLyJZTWbSuQJOqw867tBxvto6GjxULvWZYKs6RFHYQPCqgQ0ODLRtBmp4Fqqpde52yOe45npaaoup9IXNfr32A==
+
esbuild-freebsd-64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.19.tgz#1868e2182e5f8933d986e2ef26e983722b826557"
integrity sha512-RvEKE6qUAlT8HpICIcj73ebOpwoRLKVNBcJVmeYEsiIwtJf/Cc0TW/jQagwqe3s2Cw0Os+FBtB7azNW670zwLQ==
-esbuild-freebsd-arm64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52"
- integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==
-
esbuild-freebsd-arm64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.7.tgz#f9c980ce7e71e6702f82706a6244959eba2b80dc"
integrity sha512-MCtfBRkE1GwAnjVoWPYoZ+S/+zanzWxAJVER1/8jmWobCXJG0w+YM2IXQ2fN4T9U96RusFWQDMJVoACnqhIAzg==
+esbuild-freebsd-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.18.tgz#59bb55cd6ac1b2b3c43536c067d8356f4ae7e310"
+ integrity sha512-0ItfrR8hePnDcUXxUQxY+VfICcBfeMJCdK6mcNUXnXw6LyHjyUYXWpFXF+J18pg1/YUWRWO1HbsJ7FEwELcQIA==
+
esbuild-freebsd-arm64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.19.tgz#fa853e4bc003ea81820776a7da94bf4f20007243"
integrity sha512-XIZKnLHwz4E18FOWi4bdl8CkV7HYxqHE8WS7j3HFw0+uJa6S0iCqDTz5QyQxxOxXbytQdKWAdB7zuU8k3KbrQA==
-esbuild-linux-32@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69"
- integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==
-
esbuild-linux-32@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.7.tgz#3d9d704452ed13da20771537bf30f695b9f80327"
integrity sha512-HM4d16XbqToo93LPrgzkiLgX3Xgr9Mw67tEM8vjhHDx18JnaZqPdIsl5ZfCqRGHlLUq+GdFKl6+dH7WlsiWMCA==
+esbuild-linux-32@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.18.tgz#ff68f7ec7c8b8c7dddab4d6e65f1a1d0ff3ab0b9"
+ integrity sha512-mnG84D9NsEsoQdBpBT0IsFjm5iAwnd81SP4tRMXZLl09lPvIWjHHSq6LDlb4+L5H5K5y68WC//X5Dr2MtNY3DQ==
+
esbuild-linux-32@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.19.tgz#adfb3f9bed5a28e30aa4d7771a77cb3c4aef2992"
integrity sha512-v1NBJjhYzJPJNrBzhiGGyM9N1rUsqLtyLPSnLldnvrWTC+OYgTbq2vItvzXKM6P36VpioFsPIIGe0FYI+z/lUg==
-esbuild-linux-64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3"
- integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==
-
esbuild-linux-64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.7.tgz#ce5c7b964990fdb2713ce816f0a24ffffd96942c"
integrity sha512-krgiIEyqcS0kfTjptGEQzdYwiEmmqpmiZHlKqZILVuU5BaIVWCBMmVx20HH9waJw1yT0Ao4fZTZ9kg8s/pKAYA==
+esbuild-linux-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.18.tgz#d4083d9833580090452a095cd2216100d86f3c7a"
+ integrity sha512-HvExRtkeA8l/p+7Lf6aBrnLH+jTCFJTUMJxGKExh2RD8lCXGTeDJFyP+BOEetP80fuuH+Syj79+LVQ9MihdBsg==
+
esbuild-linux-64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.19.tgz#30a0066ff9293ae4b9a8ad4d4b4010b31db04260"
integrity sha512-DtnOiAo0Vc4elOxl8U6wRMRXEj7ZMVy1brlzGGS8ia1IzDoJce10+3y7yvhzJsTlYjIC2uZ1gfUadGSX+L1ZXg==
-esbuild-linux-arm64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1"
- integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==
-
esbuild-linux-arm64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.7.tgz#53a53f43669ef705c925bf275491d507cb77b06b"
integrity sha512-aM2BUTdbtzEUOuLqDusGCuWQRqc0JazgbA/6+Q9xhUgNLHGUMAsu4C5G0qPnJCTlWGZX+bcQYma6wFVEp9ibBg==
+esbuild-linux-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.18.tgz#8ce21e188ab9fcdb512f4ada9a637014c1294bec"
+ integrity sha512-CCWmilODE1ckw+M7RVqoqKWA4UB0alCyK2bv0ikEeEAwkzinlJeoe94t9CnT/ECSQ2sL+C16idsr+aUviGp7sg==
+
esbuild-linux-arm64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.19.tgz#0bd976ec6ac92962e67df6a8825b71d1039f3527"
integrity sha512-igp6q1r60mGgOnzOkFdfa7GueXdTtsUCdkKvnKi3GMHIartBwccIIT1KfmE3JUAKsCpmuu0Qn6m05Oje7fIftw==
-esbuild-linux-arm@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe"
- integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==
-
esbuild-linux-arm@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.7.tgz#3372ea117517aa3194ed1622305ab76bf2550b1d"
integrity sha512-GOAt1brGG14mmQx2sRD3wHi3rih94OzhmDRVyo7JvlSmWOfEczPf7zL7YfmgjuktvvuLTERtTJzaih7nyCwPOg==
+esbuild-linux-arm@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.18.tgz#a5e1d684c451f379b1dfef7b5a2dcad84cce3f79"
+ integrity sha512-+ZL8xfXVNaeaZ2Kxqlw2VYZWRDZ7NSK4zOV9GKNAtkkWURLsPUU84aUOBatRe9BH1O5FDo3LLQSlaA04ed6lhA==
+
esbuild-linux-arm@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.19.tgz#98d91bb47b758f7cd78122d65043bc588ca0392f"
integrity sha512-NAKn1k0sH7V1Qy2myC7DEwDKA6ZgHm9u0Iu8Sl3Ke+H9Mw4KN4/fxWa+NGaXc0s/qeM2zIz6OPc39UxREeu+jQ==
-esbuild-linux-mips64le@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7"
- integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==
-
esbuild-linux-mips64le@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.7.tgz#c431291deecb949a4cdbbab0bc01b6b4a962104a"
integrity sha512-+UJq6cxpc2ldaQFdpEDrBhqhluXsqCNlWiHccIjq25r+3YbFg0c/RJEypoVU7tjhGXUGWyWWQ7SLkzHYpf+Nsg==
+esbuild-linux-mips64le@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.18.tgz#c3890f178745a9c65bad64322be2b3611c240041"
+ integrity sha512-8LjO4+6Vxz5gbyCHO4OONYMF689nLderCtzb8lG1Bncs4ZXHpo6bjvuWeTMRbGUkvAhp+P6hMTzia7RHOC53wQ==
+
esbuild-linux-mips64le@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.19.tgz#85579e946c7fe9d4c969e8cc1abc02fcd6b64230"
integrity sha512-fxqV/oe3uZYBWIwzYYX78qeMKoF+ovPCv5Y6OEBdw5bBvzhsY2SXHeMtedYSOAEtoUwQbPbRShXb1WpBLR/bTw==
-esbuild-linux-ppc64le@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2"
- integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==
-
esbuild-linux-ppc64le@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.7.tgz#d47b2322ac1ad61669045d5f95181d4f0d9744d2"
integrity sha512-6zwpliO4ZZtodDYM1JJEmSMpkd07I8bnNOKoHe7TOs9VhylXJooHh5ObSbSvk3FxCBs+jL5bxb24p10/Cg4RGw==
+esbuild-linux-ppc64le@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.18.tgz#a355f515ca84839f5301f8ef745a2b329105e232"
+ integrity sha512-0OJk/6iYEmF1J7LXY6+cqf6Ga5vG4an7n1nubTKce7kYqaTyNGfYcTjDZce6lnDVlZTJtwntIMszq1+ZX7Kenw==
+
esbuild-linux-ppc64le@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.19.tgz#5441f8e86c9fa20be4e97d070ced7d18d6d797a7"
integrity sha512-YbfC4HD4GbiwkojrAL3aXHzvuOfUZwUMQP5EoctsOQQ5yYlfYQkeXtE2KWaoc1uf9XHsmLaapkEOL4Y30rhPEg==
+esbuild-linux-s390x@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.18.tgz#81721c22387912778c67495d0a34527f7a2cde66"
+ integrity sha512-UNY7YKZHjY31KcNanJK4QaT2/aoIQyS+jViP3QuDRIoYAogRnc6WydylzIkkEzGMaC4fzaXOmQ8fxwpLAXK4Yg==
+
esbuild-linux-s390x@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.19.tgz#824478c5561835e0814fef98ae9376d5c27a3537"
integrity sha512-cjVGsJh+XAzWH/KmqaLcMKP7qP4WJJILmrn3AKVWhcNEYX/pfXFE6Gi1DIr/Wzp1j9cX+wA5xFCo4CJV0QPSSw==
-esbuild-netbsd-64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038"
- integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==
-
esbuild-netbsd-64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.7.tgz#9c9fed5dfc2f3656de024496f10928368a29ea10"
integrity sha512-CfTHeTfJWlwjgfpApXYvECytLD6BzTWovLE0+28KT7bjU5fM4ieDYzRvjWjFAOB2X6DWpaoQnJAlhJirQBW0EQ==
+esbuild-netbsd-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.18.tgz#eaee109d527a58b582f8fa933d9cadf8840758c2"
+ integrity sha512-wE/2xT9KNzLCfEBw24YbVmMmXH92cFIzrRPUlwWH9dIizjvEYYcyQ+peTMVkqzUum7pdlVLZ2CDDqAaZo/nW/w==
+
esbuild-netbsd-64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.19.tgz#144db6a7d7a6f7c0665dfb08802ec7385a5280c1"
integrity sha512-tteQWdqq4u4BpP3CjpW1CpZbeIuAtdrKV0i0C0TrrL5T0d1DPiGjiNuqu1YsyCfSP44Umk5DT4GZD0kpEwNN1g==
-esbuild-openbsd-64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7"
- integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==
-
esbuild-openbsd-64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.7.tgz#fc039ce363b0ad5617a82dc9d312fccebd950070"
integrity sha512-qfW+f0MQfl72zVwgbV00I1kAP2zty+N031cNnQINcBmzHOSbEbaBQbUM0kawq+wdfgS/Xmppgf7nD1H8GWAvow==
+esbuild-openbsd-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.18.tgz#96a42615f5548529b7bb32d024bb9c6fb542778c"
+ integrity sha512-vdymE2jyuH/FRmTvrguCYSrq81/rUwuhMYyvt/6ibv9ac7xQ674c8qTdT+RH73sR9/2WUD/NsYxrBA/wUVTxcg==
+
esbuild-openbsd-64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.19.tgz#7315464f4981acc21ba9f0f7ef1e303bba5f66f8"
integrity sha512-W6aQZlLkMHerQ6wKCR869pwkg5ohTUKNuhC8EBl9t6Cb8kv2KLWC8hG+477hksdeWMaVimu3pHvzCMVkBDIhmw==
-esbuild-sunos-64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4"
- integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==
-
esbuild-sunos-64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.7.tgz#ad85a2f2cd38b6e920f2ad07ebc134cdba92e26d"
integrity sha512-fVRM9mV0wAYLt92IqzudxACMLJZRQFx1oJsNeU4fPFmUxIkYE4C7G7z9vqI2eu9bpDo1fA+3+5djo/T/28Mckg==
+esbuild-sunos-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.18.tgz#869723d73a5f35ba2a4a6c043694d952bd4f831b"
+ integrity sha512-X/Tesy6K1MdJF1d5cbzFDxrIMMn0ye+VgTQRI8P5Vo2CcKxOdckwsKUwpRAvg+VDZ6MxrSOTYS9OOoggPUjxTg==
+
esbuild-sunos-64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.19.tgz#13f99b3b7ece52b0166a5375f89674cde1d635c9"
integrity sha512-FIsHunnUs6DqCYdkUNScxbdvjxIxW/33+4Kz6BNMekKPCqOKnXU/0xIaoRt7f798B4UI+ocx31hqSViRn37Qig==
-esbuild-windows-32@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7"
- integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==
-
esbuild-windows-32@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.7.tgz#146b416c5172a2c252ce29f899c0c8f1a20eac50"
integrity sha512-v3csjeQtlHHWS1q/tE9rTRCSSU/fGvJVh1l7gkS93ysAaIMeC0j9Q0h2PxFpQ6yxuwftuDYfQdnkVGcqjkKM8A==
+esbuild-windows-32@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.18.tgz#197c8833ed0f6a82055ab63861777749d0ce95c0"
+ integrity sha512-glG23I/JzCL4lu7DWFUtVwqFwNwlL0g+ks+mcjjUisHcINoSXTeCNToUN0bHhzn6IlXXnggNQ38Ew/idHPM8+g==
+
esbuild-windows-32@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.19.tgz#5d2a46ec5bdb7a6a91146953dd3ac575beaa1a85"
integrity sha512-HY9k1v9LXFYicR4h4F6c04a4Ls7jp2MOAxDVRAofq4Exfx5oogskFSAl2vdRfhmtBYGE9TrGUSs4GUUuKTsfWQ==
-esbuild-windows-64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294"
- integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==
-
esbuild-windows-64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.7.tgz#9eaffae2204263a7b35313ea51a6a6e5a5e0bb48"
integrity sha512-vk+yv/vYpHZP0vxSaxaA4EMaicuxy4E435EXkbsgk5UgpcQgSP0CVlIeaqtgfSM3IwGnpbagOirRVqqZqxyMDQ==
+esbuild-windows-64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.18.tgz#569832a99d87fc931a081fe7761c100578275be0"
+ integrity sha512-zEiFKHgV/3z14wsVamV98/5mxeOwz+ecyg0pD3fWcBz9j4EOIT1Tg47axypD4QLwiKFvve9mUBYX1cD99qxOyw==
+
esbuild-windows-64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.19.tgz#8d5889a7370c84ef6d53c10535b022ab9c5864a2"
integrity sha512-qtDhyyCgHPjVQXNWQsfs5+dzqXeOkD58RmowUx7ps8prmkCfsSz6Uv0z0xgz04+S7ozng3+JSWHRc3JklpvLOg==
-esbuild-windows-arm64@0.13.15:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3"
- integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==
-
esbuild-windows-arm64@0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.7.tgz#6937647f05528248b1634027d839ae81ffdde8c2"
integrity sha512-0Fp+IeG5qWLCK+U6d8L9/SnXkI6f3JMtauSQ8HHzw3Fl0pZ+VImUAUWZ3g2fhthNqp+t8dB3n238CJD6XBn15w==
+esbuild-windows-arm64@0.14.18:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.18.tgz#c1991848fca7b051d1d036d0723406da9696105d"
+ integrity sha512-Mh8lZFcPLat13dABN7lZThGUOn9YxoH5RYkhBq0U3WqQohHzKRhllYh7ibFixnkpMLnv8OZEbl8bGLMy03MpfA==
+
esbuild-windows-arm64@0.14.19:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.19.tgz#cbb66fa06143ec7fe5538b5aef904daaa1c69a0e"
@@ -4087,29 +3738,6 @@ esbuild@0.13.7:
esbuild-windows-64 "0.13.7"
esbuild-windows-arm64 "0.13.7"
-esbuild@^0.13.2:
- version "0.13.15"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf"
- integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==
- optionalDependencies:
- esbuild-android-arm64 "0.13.15"
- esbuild-darwin-64 "0.13.15"
- esbuild-darwin-arm64 "0.13.15"
- esbuild-freebsd-64 "0.13.15"
- esbuild-freebsd-arm64 "0.13.15"
- esbuild-linux-32 "0.13.15"
- esbuild-linux-64 "0.13.15"
- esbuild-linux-arm "0.13.15"
- esbuild-linux-arm64 "0.13.15"
- esbuild-linux-mips64le "0.13.15"
- esbuild-linux-ppc64le "0.13.15"
- esbuild-netbsd-64 "0.13.15"
- esbuild-openbsd-64 "0.13.15"
- esbuild-sunos-64 "0.13.15"
- esbuild-windows-32 "0.13.15"
- esbuild-windows-64 "0.13.15"
- esbuild-windows-arm64 "0.13.15"
-
esbuild@^0.14.0:
version "0.14.19"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.19.tgz#d9cc016f3fa7affe705617126e3ed51791374324"
@@ -4134,6 +3762,30 @@ esbuild@^0.14.0:
esbuild-windows-64 "0.14.19"
esbuild-windows-arm64 "0.14.19"
+esbuild@^0.14.14:
+ version "0.14.18"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.18.tgz#9c5f58c506ec9e0ec335d20bcb3f9dbd086d0648"
+ integrity sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==
+ optionalDependencies:
+ esbuild-android-arm64 "0.14.18"
+ esbuild-darwin-64 "0.14.18"
+ esbuild-darwin-arm64 "0.14.18"
+ esbuild-freebsd-64 "0.14.18"
+ esbuild-freebsd-arm64 "0.14.18"
+ esbuild-linux-32 "0.14.18"
+ esbuild-linux-64 "0.14.18"
+ esbuild-linux-arm "0.14.18"
+ esbuild-linux-arm64 "0.14.18"
+ esbuild-linux-mips64le "0.14.18"
+ esbuild-linux-ppc64le "0.14.18"
+ esbuild-linux-s390x "0.14.18"
+ esbuild-netbsd-64 "0.14.18"
+ esbuild-openbsd-64 "0.14.18"
+ esbuild-sunos-64 "0.14.18"
+ esbuild-windows-32 "0.14.18"
+ esbuild-windows-64 "0.14.18"
+ esbuild-windows-arm64 "0.14.18"
+
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@@ -4149,7 +3801,7 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
@@ -4300,13 +3952,6 @@ estree-util-is-identifier-name@^2.0.0:
resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.0.tgz#e2d3d2ae3032c017b2112832bfc5d8ba938c8010"
integrity sha512-aXXZFVMnBBDRP81vS4YtAYJ0hUkgEsXea7lNKWCOeaAquGb1Jm2rcONPB5fpzwgbNxulTvrWuKnp9UElUGAKeQ==
-estree-util-value-to-estree@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz#1d3125594b4d6680f666644491e7ac1745a3df49"
- integrity sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==
- dependencies:
- is-plain-obj "^3.0.0"
-
estree-util-visit@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-1.1.0.tgz#c0ea7942c40ac7889a77b57a11e92f987744bc6f"
@@ -4340,20 +3985,7 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
-event-stream@=3.3.4:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
- integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=
- dependencies:
- duplexer "~0.1.1"
- from "~0"
- map-stream "~0.1.0"
- pause-stream "0.0.11"
- split "0.3"
- stream-combiner "~0.0.4"
- through "~2.3.1"
-
-execa@5.1.1, execa@^5.1.1:
+execa@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
@@ -4395,11 +4027,6 @@ extend-shallow@^2.0.1:
dependencies:
is-extendable "^0.1.0"
-extend@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-2.0.2.tgz#1b74985400171b85554894459c978de6ef453ab7"
- integrity sha512-AgFD4VU+lVLP6vjnlNfF7OeInLTyeyckCNPEsuxz1vi786UuK/nk6ynPuhn/h+Ju9++TQyr5EpLRI14fc1QtTQ==
-
extend@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
@@ -4419,17 +4046,6 @@ external-editor@^3.1.0:
iconv-lite "^0.4.24"
tmp "^0.0.33"
-extract-zip@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
- integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
- dependencies:
- debug "^4.1.1"
- get-stream "^5.1.0"
- yauzl "^2.10.0"
- optionalDependencies:
- "@types/yauzl" "^2.9.1"
-
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -4475,13 +4091,6 @@ fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
-fd-slicer@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
- integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
- dependencies:
- pend "~1.2.0"
-
fetch-blob@^3.1.2, fetch-blob@^3.1.4:
version "3.1.4"
resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.1.4.tgz#e8c6567f80ad7fc22fd302e7dcb72bafde9c1717"
@@ -4502,11 +4111,6 @@ file-uri-to-path@2:
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba"
integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==
-file-url@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz#247a586a746ce9f7a8ed05560290968afc262a77"
- integrity sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==
-
filelist@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b"
@@ -4521,14 +4125,6 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
-find-babel-config@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
- integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
- dependencies:
- json5 "^0.5.1"
- path-exists "^3.0.0"
-
find-up@5.0.0, find-up@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
@@ -4537,13 +4133,6 @@ find-up@5.0.0, find-up@^5.0.0:
locate-path "^6.0.0"
path-exists "^4.0.0"
-find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
@@ -4578,32 +4167,11 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
-follow-redirects@^1.14.0:
- version "1.14.7"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685"
- integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==
-
foreach@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
-form-data2@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/form-data2/-/form-data2-1.0.4.tgz#9f91ebd83003f9e117f94f1ebd72665ae0b49a40"
- integrity sha512-buz4C3F6/7Vpdxt7dNU/tSfjQO/5z9Pyjfb43VhlVvSos5zVhCcMuW9sF1yJ2FdxZRCD2sWQ9WhqUiYLt+AUVQ==
- dependencies:
- bluebird "^2.8.2"
- combined-stream2 "^1.0.2"
- debug "^2.1.1"
- mime "^1.3.4"
- uuid "^2.0.1"
-
-form-fix-array@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/form-fix-array/-/form-fix-array-1.0.0.tgz#a1347a47e53117ab7bcdbf3e2f3ec91c66769bc8"
- integrity sha1-oTR6R+UxF6t7zb8+Lz7JHGZ2m8g=
-
formdata-polyfill@^4.0.10:
version "4.0.10"
resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423"
@@ -4621,11 +4189,6 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-from@~0:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
- integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
-
fs-constants@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
@@ -4737,13 +4300,6 @@ get-own-enumerable-property-symbols@^3.0.0:
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
-get-stream@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
- integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
- dependencies:
- pump "^3.0.0"
-
get-stream@^6.0.0, get-stream@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
@@ -4793,7 +4349,7 @@ glob-parent@^6.0.1, glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
-glob@7.2.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.6:
+glob@7.2.0, glob@^7.1.3, glob@^7.1.6:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
@@ -4860,17 +4416,6 @@ globby@^12.0.2:
merge2 "^1.4.1"
slash "^4.0.0"
-globby@~6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
- integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
- dependencies:
- array-union "^1.0.1"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
globrex@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
@@ -4913,20 +4458,6 @@ hard-rejection@^2.1.0:
resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
-has-ansi@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
- integrity sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=
- dependencies:
- ansi-regex "^0.2.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
- dependencies:
- ansi-regex "^2.0.0"
-
has-bigints@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
@@ -5044,7 +4575,7 @@ hast-util-raw@^7.2.0:
web-namespaces "^2.0.0"
zwitch "^2.0.0"
-hast-util-select@5.0.1, hast-util-select@^5.0.1:
+hast-util-select@5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/hast-util-select/-/hast-util-select-5.0.1.tgz#ed3788ad1a8d2d7f16a6bf8153ce9378edbe9d6d"
integrity sha512-cxnImmR/tN/ipvbwGrKtEErmy83K1xWx8Bu7nImiwTOJ7X/fW1X6L1241ux+MYUXDwx8GxrE4LVmXRlEnbQsQA==
@@ -5122,19 +4653,6 @@ he@1.2.0:
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-hogan.js@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd"
- integrity sha1-TNnhq9QpQUbnZ55B14mHMrAse/0=
- dependencies:
- mkdirp "0.3.0"
- nopt "1.0.10"
-
-hoopy@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
- integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
-
hosted-git-info@^2.1.4:
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
@@ -5150,11 +4668,6 @@ html-void-elements@^2.0.0:
resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f"
integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==
-html_codesniffer@^2.5.1:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/html_codesniffer/-/html_codesniffer-2.5.1.tgz#d76d124b8f5cd0e58b3c1b142fd095a40573ea28"
- integrity sha512-vcz0yAaX/OaV6sdNHuT9alBOKkSxYb8h5Yq26dUqgi7XmCgGUSa7U9PiY1PBXQFMjKv1wVPs5/QzHlGuxPDUGg==
-
htmlparser2@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
@@ -5175,11 +4688,6 @@ htmlparser2@^7.1.2:
domutils "^2.8.0"
entities "^3.0.1"
-http-equiv-refresh@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz#8ec538866042be5f3f7afa737d198d94beb1b07b"
- integrity sha1-jsU4hmBCvl8/evpzfRmNlL6xsHs=
-
http-errors@1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
@@ -5223,11 +4731,6 @@ human-signals@^3.0.1:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5"
integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==
-humanize-duration@^3.9.1:
- version "3.27.1"
- resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.27.1.tgz#2cd4ea4b03bd92184aee6d90d77a8f3d7628df69"
- integrity sha512-jCVkMl+EaM80rrMrAPl96SGG4NRac53UyI1o/yAzebDntEY6K6/Fj2HOjdPg8omTqIe5Y0wPBai2q5xXrIbarA==
-
iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -5375,11 +4878,6 @@ is-boolean-object@^1.1.0:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
-is-browser@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.1.0.tgz#fc084d59a5fced307d6708c59356bad7007371a9"
- integrity sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==
-
is-buffer@^2.0.0:
version "2.0.5"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
@@ -5397,7 +4895,7 @@ is-ci@^3.0.1:
dependencies:
ci-info "^3.2.0"
-is-core-module@^2.8.1:
+is-core-module@^2.8.0, is-core-module@^2.8.1:
version "2.8.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
@@ -5492,11 +4990,6 @@ is-obj@^1.0.1:
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-is-object@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf"
- integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==
-
is-path-cwd@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
@@ -5517,11 +5010,6 @@ is-plain-obj@^2.1.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
-is-plain-obj@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
- integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
-
is-plain-obj@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.0.0.tgz#06c0999fd7574edf5a906ba5644ad0feb3a84d22"
@@ -5550,11 +5038,6 @@ is-shared-array-buffer@^1.0.1:
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
-is-stream@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
- integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-
is-stream@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
@@ -5565,7 +5048,7 @@ is-stream@^3.0.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
-is-string@^1.0.4, is-string@^1.0.5, is-string@^1.0.7:
+is-string@^1.0.5, is-string@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
@@ -5614,11 +5097,6 @@ is-windows@^1.0.0:
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-is@^3.2.1:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79"
- integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==
-
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -5629,11 +5107,6 @@ isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-isbot@^2.0.0:
- version "2.5.7"
- resolved "https://registry.yarnpkg.com/isbot/-/isbot-2.5.7.tgz#bc98f22200d1a925bc933c7e4fb6eca8dde70f7b"
- integrity sha512-8P+oGrRDvuCpDdovK9oD4skHmSXu56bsK17K2ovXrkW7Ic4H9Y4AqnUUqlXqZxcqQ2358kid9Rb+fbLH5yeeUw==
-
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -5663,17 +5136,6 @@ jiti@^1.12.9:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.12.15.tgz#8f6a141c06524ab32e05d5e3c9b33eeda54ae775"
integrity sha512-/+K89y6KJA2nISbWrlc/773XdpDgSQq/LdQ+ZZyw2jRxUNyquPtbsDCCCMRzzNORUgroUGc4nAXxJEnQvpViCA==
-joi@^17.4.0:
- version "17.6.0"
- resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2"
- integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==
- dependencies:
- "@hapi/hoek" "^9.0.0"
- "@hapi/topo" "^5.0.0"
- "@sideway/address" "^4.1.3"
- "@sideway/formula" "^3.0.0"
- "@sideway/pinpoint" "^2.0.0"
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -5704,11 +5166,6 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
-json-parse-better-errors@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
json-parse-even-better-errors@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
@@ -5734,11 +5191,6 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
-json5@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
- integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
-
json5@^2.1.2, json5@^2.1.3, json5@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
@@ -5787,7 +5239,7 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-kleur@^4.0.3, kleur@^4.1.1, kleur@^4.1.4, kleur@~4.1.4:
+kleur@^4.0.3, kleur@^4.1.1, kleur@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d"
integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==
@@ -5797,11 +5249,6 @@ kolorist@^1.5.0:
resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.5.1.tgz#c3d66dc4fabde4f6b7faa6efda84c00491f9e52b"
integrity sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==
-lazy-ass@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
- integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM=
-
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -5828,24 +5275,11 @@ lilconfig@^2.0.4:
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082"
integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==
-limited-request-queue@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/limited-request-queue/-/limited-request-queue-2.0.0.tgz#14c7c120b138060b19a2a1030abaf6693572650d"
- integrity sha1-FMfBILE4BgsZoqEDCrr2aTVyZQ0=
- dependencies:
- is-browser "^2.0.1"
- parse-domain "~0.2.0"
-
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-link-types@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/link-types/-/link-types-1.1.0.tgz#af65e59db52e70c1ffb18ac4c3cb056bfe796830"
- integrity sha1-r2XlnbUucMH/sYrEw8sFa/55aDA=
-
lit-element@^3.1.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.1.2.tgz#fe29b9a362cf6c0de93c7769f29f1b6c37c79e15"
@@ -5870,16 +5304,6 @@ lit@^2.0.0, lit@^2.0.2, lit@^2.1.0:
lit-element "^3.1.0"
lit-html "^2.1.0"
-load-json-file@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
- integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^4.0.0"
- pify "^3.0.0"
- strip-bom "^3.0.0"
-
load-yaml-file@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d"
@@ -5900,14 +5324,6 @@ locate-character@^2.0.5:
resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-2.0.5.tgz#f2d2614d49820ecb3c92d80d193b8db755f74c0f"
integrity sha512-n2GmejDXtOPBAZdIiEFy5dJ5N38xBCXLNOtw2WpB9kGh6pnrEuKlwYI+Tkpofc4wDtVXHtoAOJaMRlYG/oYaxg==
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
@@ -5922,11 +5338,6 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
-lodash.clonedeep@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
- integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
-
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -5947,7 +5358,7 @@ lodash.startcase@^4.4.0:
resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8"
integrity sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=
-lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.21:
+lodash@^4.17.20, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -5979,7 +5390,7 @@ loupe@^2.3.1:
dependencies:
get-func-name "^2.0.0"
-lru-cache@4.1.x, lru-cache@^4.0.1:
+lru-cache@^4.0.1:
version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
@@ -6018,21 +5429,11 @@ map-obj@^4.0.0:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
-map-stream@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
- integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=
-
markdown-table@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.2.tgz#9b59eb2c1b22fe71954a65ff512887065a7bb57c"
integrity sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==
-maybe-callback@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/maybe-callback/-/maybe-callback-2.1.0.tgz#8afa0ba7b691a7ab123e7f12f65e32bb5d1f8243"
- integrity sha1-ivoLp7aRp6sSPn8S9l4yu10fgkM=
-
mdast-util-definitions@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz#b6d10ef00a3c4cf191e8d9a5fa58d7f4a366f817"
@@ -6187,11 +5588,6 @@ mdurl@^1.0.0:
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
-memorystream@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
- integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
-
meow@^6.0.0, meow@^6.1.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467"
@@ -6555,7 +5951,7 @@ micromatch@^4.0.2, micromatch@^4.0.4:
braces "^3.0.1"
picomatch "^2.2.3"
-mime@1.6.0, mime@^1.3.4:
+mime@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
@@ -6608,7 +6004,7 @@ minimist-options@^4.0.2:
is-plain-obj "^1.1.0"
kind-of "^6.0.3"
-minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
@@ -6638,11 +6034,6 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
-mkdirp@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
- integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=
-
mkdirp@^0.5.1:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
@@ -6715,7 +6106,7 @@ ms@2.1.3:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-nanoid@3.2.0, nanoid@^3.2.0:
+nanoid@3.2.0, nanoid@^3.1.30:
version "3.2.0"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c"
integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==
@@ -6740,11 +6131,6 @@ netmask@^2.0.1:
resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
-nice-try@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
nlcst-to-string@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc"
@@ -6783,7 +6169,7 @@ node-fetch@*, node-fetch@^3.0.0:
fetch-blob "^3.1.4"
formdata-polyfill "^4.0.10"
-node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@~2.6.1:
+node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.7:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
@@ -6795,43 +6181,7 @@ node-releases@^2.0.1:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
-node.extend@~2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-2.0.2.tgz#b4404525494acc99740f3703c496b7d5182cc6cc"
- integrity sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==
- dependencies:
- has "^1.0.3"
- is "^3.2.1"
-
-nopt@1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
- integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
- dependencies:
- abbrev "1"
-
-nopt@^3.0.1:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
- integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
- dependencies:
- abbrev "1"
-
-nopter@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/nopter/-/nopter-0.3.0.tgz#b9690e6fab8f256b37e4e7ccd23e2b38450cc71f"
- integrity sha1-uWkOb6uPJWs35OfM0j4rOEUMxx8=
- dependencies:
- caller-path "~0.1.0"
- camelcase "^1.0.2"
- chalk "~0.5.1"
- cli-table "~0.3.1"
- eol "~0.2.0"
- nopt "^3.0.1"
- object-assign "^2.0.0"
- splitargs "~0.0.3"
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
+normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
@@ -6856,21 +6206,6 @@ not@^0.1.0:
resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d"
integrity sha1-yWkcF0bFXc++VMvYvU/wQbwrUZ0=
-npm-run-all@^4.1.5:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
- integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==
- dependencies:
- ansi-styles "^3.2.1"
- chalk "^2.4.1"
- cross-spawn "^6.0.5"
- memorystream "^0.3.1"
- minimatch "^3.0.4"
- pidtree "^0.3.0"
- read-pkg "^3.0.0"
- shell-quote "^1.6.1"
- string.prototype.padend "^3.0.0"
-
npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
@@ -6907,12 +6242,7 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-object-assign@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
- integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=
-
-object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -7002,26 +6332,11 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
-os-name@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf"
- integrity sha1-GzefZINa98Wn9JizV8uVIVwVnt8=
- dependencies:
- osx-release "^1.0.0"
- win-release "^1.0.0"
-
os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-osx-release@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c"
- integrity sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=
- dependencies:
- minimist "^1.1.0"
-
outdent@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff"
@@ -7034,7 +6349,7 @@ p-filter@^2.1.0:
dependencies:
p-map "^2.0.0"
-p-limit@^2.0.0, p-limit@^2.2.0:
+p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
@@ -7048,13 +6363,6 @@ p-limit@^3.0.2:
dependencies:
yocto-queue "^0.1.0"
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
p-locate@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
@@ -7088,50 +6396,11 @@ p-map@^4.0.0:
dependencies:
aggregate-error "^3.0.0"
-p-timeout@~4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-4.1.0.tgz#788253c0452ab0ffecf18a62dff94ff1bd09ca0a"
- integrity sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==
-
p-try@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-pa11y-ci@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/pa11y-ci/-/pa11y-ci-3.0.1.tgz#8de1fbf96544d5af66c53a832349b3a9e51b9f7a"
- integrity sha512-DUtEIhEG3Ofds7qRuplq0DdCb9doILRlzcRctFNzo4QUNmVy4iZfM3u51A9cqoPo2irCJZoo5BzfiFrcriY2IQ==
- dependencies:
- async "~2.6.3"
- cheerio "~1.0.0-rc.10"
- commander "~6.2.1"
- globby "~6.1.0"
- kleur "~4.1.4"
- lodash "~4.17.21"
- node-fetch "~2.6.1"
- pa11y "~6.1.0"
- protocolify "~3.0.0"
- puppeteer "~9.1.1"
- wordwrap "~1.0.0"
-
-pa11y@~6.1.0:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/pa11y/-/pa11y-6.1.1.tgz#b204ecd172a664de4ade56f31a58fe5b3342800e"
- integrity sha512-2NzqA3D9CUlDWj8WuOI4fM2P0qM1d/IUxsRRpzCOfDT5eMR1oEgmUwW2TAk+f90ff/GVck0BewdYT4et4BANew==
- dependencies:
- axe-core "^4.0.2"
- bfj "~7.0.2"
- commander "~8.0.0"
- envinfo "~7.8.1"
- hogan.js "^3.0.2"
- html_codesniffer "^2.5.1"
- kleur "~4.1.4"
- node.extend "~2.0.2"
- p-timeout "~4.1.0"
- puppeteer "~9.1.1"
- semver "~7.3.5"
-
pac-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e"
@@ -7163,11 +6432,6 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-domain@~0.2.0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/parse-domain/-/parse-domain-0.2.2.tgz#188989b1e2e7398bff3c4f4fd7dca157eb51fac1"
- integrity sha1-GImJseLnOYv/PE9P19yhV+tR+sE=
-
parse-entities@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.0.tgz#f67c856d4e3fe19b1a445c3fabe78dcdc1053eeb"
@@ -7182,14 +6446,6 @@ parse-entities@^4.0.0:
is-decimal "^2.0.0"
is-hexadecimal "^2.0.0"
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
- integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
parse-json@^5.0.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
@@ -7216,13 +6472,6 @@ parse5-htmlparser2-tree-adapter@^6.0.1:
dependencies:
parse5 "^6.0.1"
-parse5@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
- integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
- dependencies:
- "@types/node" "*"
-
parse5@^6.0.0, parse5@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
@@ -7233,11 +6482,6 @@ path-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@@ -7248,11 +6492,6 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-path-key@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@@ -7273,13 +6512,6 @@ path-to-regexp@^6.2.0:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38"
integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==
-path-type@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
- integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
- dependencies:
- pify "^3.0.0"
-
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -7295,18 +6527,6 @@ pathval@^1.1.1:
resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
-pause-stream@0.0.11:
- version "0.0.11"
- resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
- integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
- dependencies:
- through "~2.3"
-
-pend@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
- integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
-
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
@@ -7317,38 +6537,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-pidtree@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
- integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==
-
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
-
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
- integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
-
pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
@@ -7356,13 +6549,6 @@ pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"
-pkg-up@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
- integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
- dependencies:
- find-up "^3.0.0"
-
postcss-js@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
@@ -7398,14 +6584,14 @@ postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-postcss@^8.1.10, postcss@^8.3.8:
- version "8.4.6"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1"
- integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==
+postcss@^8.1.10, postcss@^8.3.8, postcss@^8.4.5:
+ version "8.4.5"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
+ integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
dependencies:
- nanoid "^3.2.0"
+ nanoid "^3.1.30"
picocolors "^1.0.0"
- source-map-js "^1.0.2"
+ source-map-js "^1.0.1"
preact-render-to-string@^5.1.19:
version "5.1.19"
@@ -7458,11 +6644,6 @@ prelude-ls@~1.1.2:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-prepend-http@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-3.0.1.tgz#3e724d58fd5867465b300bb9615009fa2f8ee3b6"
- integrity sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==
-
prettier-linter-helpers@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
@@ -7509,11 +6690,6 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-progress@^2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
- integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
prompts@^2.4.1:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
@@ -7527,14 +6703,6 @@ property-information@^6.0.0:
resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22"
integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==
-protocolify@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/protocolify/-/protocolify-3.0.0.tgz#addf3f90b4f2b86b65cdaf260a761e2bf556854e"
- integrity sha512-PuvDJOkKJMVQx8jSNf8E5g0bJw/UTKm30mTjFHg4N30c8sefgA5Qr/f8INKqYBKfvP/MUSJrj+z1Smjbq4/3rQ==
- dependencies:
- file-url "^3.0.0"
- prepend-http "^3.0.0"
-
proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b"
@@ -7549,33 +6717,16 @@ proxy-agent@^5.0.0:
proxy-from-env "^1.0.0"
socks-proxy-agent "^5.0.0"
-proxy-from-env@^1.0.0, proxy-from-env@^1.1.0:
+proxy-from-env@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
-prr@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
- integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
-
-ps-tree@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd"
- integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==
- dependencies:
- event-stream "=3.3.4"
-
pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-psl@^1.1.28:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
- integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
-
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
@@ -7584,29 +6735,11 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-punycode@^2.1.0, punycode@^2.1.1:
+punycode@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-puppeteer@~9.1.1:
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-9.1.1.tgz#f74b7facf86887efd6c6b9fabb7baae6fdce012c"
- integrity sha512-W+nOulP2tYd/ZG99WuZC/I5ljjQQ7EUw/jQGcIb9eu8mDlZxNY2SgcJXTLG9h5gRvqA3uJOe4hZXYsd3EqioMw==
- dependencies:
- debug "^4.1.0"
- devtools-protocol "0.0.869402"
- extract-zip "^2.0.0"
- https-proxy-agent "^5.0.0"
- node-fetch "^2.6.1"
- pkg-dir "^4.2.0"
- progress "^2.0.1"
- proxy-from-env "^1.1.0"
- rimraf "^3.0.2"
- tar-fs "^2.0.0"
- unbzip2-stream "^1.3.3"
- ws "^7.2.3"
-
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -7680,15 +6813,6 @@ read-pkg-up@^7.0.1:
read-pkg "^5.2.0"
type-fest "^0.8.1"
-read-pkg@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
- integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
- dependencies:
- load-json-file "^4.0.0"
- normalize-package-data "^2.3.2"
- path-type "^3.0.0"
-
read-pkg@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
@@ -7719,7 +6843,7 @@ readable-stream@1.1.x:
isarray "0.0.1"
string_decoder "~0.10.x"
-readable-stream@^2.0.6, readable-stream@^2.2.2:
+readable-stream@^2.0.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -7741,16 +6865,6 @@ readable-stream@^3.1.1, readable-stream@^3.4.0:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
-readable-stream@~1.0.17:
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
- integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
@@ -7938,16 +7052,6 @@ require-main-filename@^2.0.0:
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-require-relative@^0.8.7:
- version "0.8.7"
- resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
- integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=
-
-reselect@^4.0.0:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6"
- integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==
-
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -7958,7 +7062,16 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.21.0:
+resolve@^1.10.0, resolve@^1.10.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.21.0:
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f"
+ integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==
+ dependencies:
+ is-core-module "^2.8.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^1.22.0:
version "1.22.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
@@ -8025,29 +7138,6 @@ rimraf@^3.0.0, rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
-robot-directives@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/robot-directives/-/robot-directives-0.3.0.tgz#174fb1ffc2a9b97877301e87c89b395f429d1f65"
- integrity sha1-F0+x/8KpuXh3MB6HyJs5X0KdH2U=
- dependencies:
- isbot "^2.0.0"
- useragent "^2.1.8"
-
-robots-txt-guard@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/robots-txt-guard/-/robots-txt-guard-0.1.1.tgz#0dedec2dc325338989bb14158bef1f8539b705d4"
- integrity sha512-6+nGkE6c2dI9/dmhmNcoMKVwJxlA6sgN/XNo0rm6LLdA0hnj4YkpgrZdhMPl58gJkAqeiHlf4+8tJcLM1tv1Ew==
-
-robots-txt-parse@~0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/robots-txt-parse/-/robots-txt-parse-0.0.4.tgz#f7d1f323f79921d7e9c6c4bbd25048f6e9810d71"
- integrity sha1-99HzI/eZIdfpxsS70lBI9umBDXE=
- dependencies:
- bluebird "^2.3.5"
- split "^0.3.0"
- stream-combiner "^0.2.1"
- through "^2.3.4"
-
rollup-plugin-terser@^7.0.0:
version "7.0.2"
resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
@@ -8058,10 +7148,10 @@ rollup-plugin-terser@^7.0.0:
serialize-javascript "^4.0.0"
terser "^5.0.0"
-rollup@^2.43.1, rollup@^2.57.0, rollup@^2.60.0:
- version "2.67.1"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.67.1.tgz#4402665706fa00f321d446ce45f880e02cf54f01"
- integrity sha512-1Sbcs4OuW+aD+hhqpIRl+RqooIpF6uQcfzU/QSI7vGkwADY6cM4iLsBGRM2CGLXDTDN5y/yShohFmnKegSPWzg==
+rollup@^2.43.1, rollup@^2.59.0, rollup@^2.60.0, rollup@^2.64.0:
+ version "2.64.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.64.0.tgz#f0f59774e21fbb56de438a37d06a2189632b207a"
+ integrity sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==
optionalDependencies:
fsevents "~2.3.2"
@@ -8072,13 +7162,6 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-rxjs@^7.1.0:
- version "7.5.2"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.2.tgz#11e4a3a1dfad85dbf7fb6e33cbba17668497490b"
- integrity sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==
- dependencies:
- tslib "^2.1.0"
-
s.color@0.0.15:
version "0.0.15"
resolved "https://registry.yarnpkg.com/s.color/-/s.color-0.0.15.tgz#6b32cd22d8dba95703a5122ddede2020a1560186"
@@ -8124,10 +7207,10 @@ sass-formatter@^0.7.2:
suf-log "^2.5.3"
suf-regex "^0.3.4"
-sass@^1.43.4:
- version "1.49.7"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.7.tgz#22a86a50552b9b11f71404dfad1b9ff44c6b0c49"
- integrity sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==
+sass@^1.49.0:
+ version "1.49.0"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.0.tgz#65ec1b1d9a6bc1bae8d2c9d4b392c13f5d32c078"
+ integrity sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
@@ -8149,7 +7232,7 @@ section-matter@^1.0.0:
extend-shallow "^2.0.1"
kind-of "^6.0.0"
-"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.4.1, semver@^5.5.0:
+"semver@2 || 3 || 4 || 5", semver@^5.4.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -8164,7 +7247,7 @@ semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-semver@^7.3.5, semver@~7.3.5:
+semver@^7.3.5:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
@@ -8190,7 +7273,7 @@ send@^0.17.1:
range-parser "~1.2.1"
statuses "~1.5.0"
-serialize-javascript@6.0.0:
+serialize-javascript@6.0.0, serialize-javascript@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
@@ -8252,11 +7335,6 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-shell-quote@^1.6.1:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
- integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
-
shiki@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.0.tgz#85f21ecfa95b377ff64db6c71442c22c220e9540"
@@ -8363,10 +7441,10 @@ socks@^2.3.3:
ip "^1.1.5"
smart-buffer "^4.2.0"
-solid-js@^1.2.3, solid-js@^1.2.5:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/solid-js/-/solid-js-1.3.5.tgz#77899623b04ee75a302a12d16897d7c5a873508e"
- integrity sha512-PUom2cCARfvvgxI7cwOhfXMrZZZxjp+vIrb5fzVNBFyICy8A30wTqExwfUv457eJYgKpii2D3qStW9ILtKnShw==
+solid-js@^1.2.5, solid-js@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/solid-js/-/solid-js-1.3.3.tgz#e60a6c5ed29f216e0484673967788f4f174c5f89"
+ integrity sha512-0pyHpLZIgQDI1Z+MgxXQRPY10dhXfKJdptb4UCJQ9ArQOLq2gtFA1acEsvSAtPMVdqQ8bqj68FOTXLpz6hm2Mg==
solid-nanostores@0.0.6:
version "0.0.6"
@@ -8386,7 +7464,7 @@ sorcery@^0.10.0:
sander "^0.5.0"
sourcemap-codec "^1.3.0"
-"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
@@ -8470,18 +7548,6 @@ spdx-license-ids@^3.0.0:
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==
-split@0.3, split@^0.3.0:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
- integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=
- dependencies:
- through "2"
-
-splitargs@~0.0.3:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/splitargs/-/splitargs-0.0.7.tgz#fe9f7ae657371b33b10cb80da143cf8249cf6b3b"
- integrity sha1-/p965lc3GzOxDLgNoUPPgknPazs=
-
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -8492,46 +7558,11 @@ srcset-parse@^1.1.0:
resolved "https://registry.yarnpkg.com/srcset-parse/-/srcset-parse-1.1.0.tgz#73f787f38b73ede2c5af775e0a3465579488122b"
integrity sha512-JWp4cG2eybkvKA1QUHGoNK6JDEYcOnSuhzNGjZuYUPqXreDl/VkkvP2sZW7Rmh+icuCttrR9ccb2WPIazyM/Cw==
-start-server-and-test@^1.12.6:
- version "1.14.0"
- resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.14.0.tgz#c57f04f73eac15dd51733b551d775b40837fdde3"
- integrity sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw==
- dependencies:
- bluebird "3.7.2"
- check-more-types "2.24.0"
- debug "4.3.2"
- execa "5.1.1"
- lazy-ass "1.6.0"
- ps-tree "1.2.0"
- wait-on "6.0.0"
-
"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-stream-combiner@^0.2.1:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858"
- integrity sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=
- dependencies:
- duplexer "~0.1.1"
- through "~2.3.4"
-
-stream-combiner@~0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
- integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=
- dependencies:
- duplexer "~0.1.1"
-
-stream-length@^1.0.1, stream-length@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/stream-length/-/stream-length-1.0.2.tgz#8277f3cbee49a4daabcfdb4e2f4a9b5e9f2c9f00"
- integrity sha1-gnfzy+5JpNqrz9tOL0qbXp8snwA=
- dependencies:
- bluebird "^2.6.2"
-
stream-transform@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3"
@@ -8580,15 +7611,6 @@ string.prototype.matchall@^4.0.6:
regexp.prototype.flags "^1.3.1"
side-channel "^1.0.4"
-string.prototype.padend@^3.0.0:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1"
- integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.1"
-
string.prototype.trimend@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
@@ -8641,13 +7663,6 @@ stringify-object@^3.3.0:
is-obj "^1.0.1"
is-regexp "^1.0.0"
-strip-ansi@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220"
- integrity sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=
- dependencies:
- ansi-regex "^0.2.1"
-
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -8749,16 +7764,6 @@ supports-color@8.1.1:
dependencies:
has-flag "^4.0.0"
-supports-color@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
- integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
- integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -8785,12 +7790,12 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-svelte-hmr@^0.14.7:
+svelte-hmr@^0.14.9:
version "0.14.9"
resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.9.tgz#35f277efc789e1a6230185717347cddb2f8e9833"
integrity sha512-bKE9+4qb4sAnA+TKHiYurUl970rjA0XmlP9TEP7K/ncyWz3m81kA4HOgmlZK/7irGK7gzZlaPDI3cmf8fp/+tg==
-svelte-preprocess@^4.9.8:
+svelte-preprocess@^4.10.2:
version "4.10.2"
resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-4.10.2.tgz#2405689e57161916947b8360679051a56eddd5c6"
integrity sha512-aPpkCreSo8EL/y8kJSa1trhiX0oyAtTjlNNM7BNjRAsMJ8Yy2LtqHt0zyd4pQPXt+D4PzbO3qTjjio3kwOxDlA==
@@ -8802,10 +7807,10 @@ svelte-preprocess@^4.9.8:
sorcery "^0.10.0"
strip-indent "^3.0.0"
-svelte@^3.44.3:
- version "3.46.4"
- resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.46.4.tgz#0c46bc4a3e20a2617a1b7dc43a722f9d6c084a38"
- integrity sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg==
+svelte@^3.46.2:
+ version "3.46.2"
+ resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.46.2.tgz#f0ffbffaea3a9a760edcbefc0902b41998a686ad"
+ integrity sha512-RXSAtYNefe01Sb1lXtZ2I+gzn3t/h/59hoaRNeRrm8IkMIu6BSiAkbpi41xb+C44x54YKnbk9+dtfs3pM4hECA==
tailwindcss@^3.0.5:
version "3.0.18"
@@ -8900,35 +7905,6 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-through2-sink@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/through2-sink/-/through2-sink-1.0.0.tgz#5f106bba1d7330dad3cba5c0ab1863923256c399"
- integrity sha1-XxBruh1zMNrTy6XAqxhjkjJWw5k=
- dependencies:
- through2 "~0.5.1"
- xtend "~3.0.0"
-
-through2-spy@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/through2-spy/-/through2-spy-1.2.0.tgz#9c891ca9ca40e1e1e4cf31e1ac57f94cc9d248cb"
- integrity sha1-nIkcqcpA4eHkzzHhrFf5TMnSSMs=
- dependencies:
- through2 "~0.5.1"
- xtend "~3.0.0"
-
-through2@~0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7"
- integrity sha1-390BLrnHAOIyP9M084rGIqs3Lac=
- dependencies:
- readable-stream "~1.0.17"
- xtend "~3.0.0"
-
-through@2, through@^2.3.4, through@^2.3.8, through@~2.3, through@~2.3.1, through@~2.3.4:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-
tiny-glob@^0.2.8:
version "0.2.9"
resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
@@ -8937,7 +7913,7 @@ tiny-glob@^0.2.8:
globalyzer "0.1.0"
globrex "^0.1.2"
-tmp@0.0.x, tmp@^0.0.33:
+tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
@@ -8966,14 +7942,6 @@ totalist@^1.0.0:
resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"
integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==
-tough-cookie@^2.3.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
- integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
- dependencies:
- psl "^1.1.28"
- punycode "^2.1.1"
-
tr46@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
@@ -8996,11 +7964,6 @@ trough@^2.0.0:
resolved "https://registry.yarnpkg.com/trough/-/trough-2.0.2.tgz#94a3aa9d5ce379fc561f6244905b3f36b7458d96"
integrity sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==
-tryer@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
- integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
-
ts-morph@^12.0.0:
version "12.2.0"
resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-12.2.0.tgz#3332319cecd44aff0b7b410f1fe39637499b1a1b"
@@ -9026,7 +7989,7 @@ tslib@^1.8.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.1, tslib@^2.1.0, tslib@^2.2.0:
+tslib@^2.0.1, tslib@^2.2.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
@@ -9186,11 +8149,6 @@ type-fest@^0.8.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
- integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-
typescript@4.5.2:
version "4.5.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998"
@@ -9211,14 +8169,6 @@ unbox-primitive@^1.0.1:
has-symbols "^1.0.2"
which-boxed-primitive "^1.0.2"
-unbzip2-stream@^1.3.3:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
- integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
- dependencies:
- buffer "^5.2.1"
- through "^2.3.8"
-
unconfig@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/unconfig/-/unconfig-0.2.2.tgz#08742355bdadb8cf9d1f1870a971fec87f38726e"
@@ -9437,30 +8387,6 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
-urlcache@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/urlcache/-/urlcache-0.7.0.tgz#3ff6a1e10b3d200aba132efc9f41dc1ad6d91b80"
- integrity sha512-xOW4t6wJDT07+VunsHwePemyXXRidCSOZ/1RIILJi2XnB+81FA5H0MRvS63/7joTWjGLajcJJGvR5odpbkV6hw==
- dependencies:
- urlobj "0.0.11"
-
-urlobj@0.0.11:
- version "0.0.11"
- resolved "https://registry.yarnpkg.com/urlobj/-/urlobj-0.0.11.tgz#ddd3060876ae1cf0ff9e38a91d0574332b73794c"
- integrity sha512-Ncck0WWtuFBbZhSYwKjK1AU2V51V98P/KHUPkaEc+mFy4xkpAHFNyVQT+S5SgtsJAr94e4wiKUucJSfasV2kBw==
- dependencies:
- is-object "^1.0.1"
- is-string "^1.0.4"
- object-assign "^4.1.1"
-
-useragent@^2.1.8:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972"
- integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==
- dependencies:
- lru-cache "4.1.x"
- tmp "0.0.x"
-
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -9478,11 +8404,6 @@ util@^0.12.0:
safe-buffer "^5.1.2"
which-typed-array "^1.1.2"
-uuid@^2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
- integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=
-
uvu@^0.5.0, uvu@^0.5.1:
version "0.5.3"
resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.3.tgz#3d83c5bc1230f153451877bfc7f4aea2392219ae"
@@ -9554,15 +8475,15 @@ vite-plugin-pwa@0.11.5:
workbox-build "^6.4.0"
workbox-window "^6.4.0"
-vite@~2.6.10:
- version "2.6.14"
- resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.14.tgz#35c09a15e4df823410819a2a239ab11efb186271"
- integrity sha512-2HA9xGyi+EhY2MXo0+A2dRsqsAG3eFNEVIo12olkWhOmc8LfiM+eMdrXf+Ruje9gdXgvSqjLI9freec1RUM5EA==
+vite@^2.8.0-beta.7:
+ version "2.8.0-beta.7"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-2.8.0-beta.7.tgz#81badb832d47647e00e62981a14227a8ce9f4e00"
+ integrity sha512-NgtazuvW34NStjJUkvdb2JApG0TUFyaBOhB9CMNz8qUSRVBmCECyZGGyLpp0wTqmSQIqjI85yUoEdbCgC1KgiA==
dependencies:
- esbuild "^0.13.2"
- postcss "^8.3.8"
- resolve "^1.20.0"
- rollup "^2.57.0"
+ esbuild "^0.14.14"
+ postcss "^8.4.5"
+ resolve "^1.22.0"
+ rollup "^2.59.0"
optionalDependencies:
fsevents "~2.3.2"
@@ -9663,27 +8584,16 @@ vscode-uri@^3.0.2:
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84"
integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==
-vue@^3.2.22:
- version "3.2.30"
- resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.30.tgz#47de3039631ac22cab2fd26b427575260199b8bb"
- integrity sha512-ZmTFWVJUX2XADkuOB8GcLTuxnBLogjJBTNVrM7WsTnjqRQ+VR8bLNrvNsbn8vj/LaP5+0WFAPrpngOYE2x+e+Q==
- dependencies:
- "@vue/compiler-dom" "3.2.30"
- "@vue/compiler-sfc" "3.2.30"
- "@vue/runtime-dom" "3.2.30"
- "@vue/server-renderer" "3.2.30"
- "@vue/shared" "3.2.30"
-
-wait-on@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.0.tgz#7e9bf8e3d7fe2daecbb7a570ac8ca41e9311c7e7"
- integrity sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==
+vue@^3.2.27:
+ version "3.2.27"
+ resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.27.tgz#dc898b3cf7393a620ed5e4a91e5fa8c1ed1ba67a"
+ integrity sha512-p1cH8Q6eaPwvANCjFQj497a914cxXKKwOG3Lg9USddTOrn4/zFMKjn9dnovkx+L8VtFaNgbVqW8mLJS/eTA6xw==
dependencies:
- axios "^0.21.1"
- joi "^17.4.0"
- lodash "^4.17.21"
- minimist "^1.2.5"
- rxjs "^7.1.0"
+ "@vue/compiler-dom" "3.2.27"
+ "@vue/compiler-sfc" "3.2.27"
+ "@vue/runtime-dom" "3.2.27"
+ "@vue/server-renderer" "3.2.27"
+ "@vue/shared" "3.2.27"
wcwidth@^1.0.1:
version "1.0.1"
@@ -9786,23 +8696,11 @@ wide-align@^1.1.0:
dependencies:
string-width "^1.0.2 || 2 || 3 || 4"
-win-release@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209"
- integrity sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=
- dependencies:
- semver "^5.0.1"
-
word-wrap@^1.2.3, word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
-wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
- integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
-
workbox-background-sync@6.4.2:
version "6.4.2"
resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz#bb31b95928d376abcb9bde0de3a0cef9bae46cf7"
@@ -9990,11 +8888,6 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-ws@^7.2.3:
- version "7.5.6"
- resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b"
- integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==
-
xregexp@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
@@ -10005,11 +8898,6 @@ xtend@^4.0.2:
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-xtend@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a"
- integrity sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=
-
y18n@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
@@ -10103,14 +8991,6 @@ yargs@^15.1.0:
y18n "^4.0.0"
yargs-parser "^18.1.2"
-yauzl@^2.10.0:
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
- integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
- dependencies:
- buffer-crc32 "~0.2.3"
- fd-slicer "~1.1.0"
-
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"